diff -durpNa glibc-2.2.2/ChangeLog glibc-2.2.3/ChangeLog --- glibc-2.2.2/ChangeLog Thu Feb 15 14:35:29 2001 +++ glibc-2.2.3/ChangeLog Thu Apr 26 20:07:01 2001 @@ -1,3 +1,3459 @@ +2001-04-26 Ulrich Drepper + + * sysdeps/unix/sysv/linux/ia64/syscalls.list: Add getunwind. + + * string/strcoll.c: Fix two memory allocation problems. + * string/Makefile (tests): Add bug-strcoll1. + * string/bug-strcoll1.c: New file. + + * malloc/mcheck.c (mcheck): Call malloc once before setting the + hooks to allow the internal check hooks to be set up if necessary. + + * nis/nss-nis.h: Move yperr2nss_tab definition into separate file + and rename to __yperr2nss_tab. Change YPERR_COUNT into variable + __yperr2nss_count. + * nis/nss-nis.c: New file. + * nis/nss-nisplus.h: Move niserr2nss_tab definition into separate file + and rename to __niserr2nss_tab. Change NISERR_COUNT into variable + __niserr2nss_count. + * nis/nss-nisplus.c: New file. + * nis/Makefile (libnss_compat-routines): Add nss-nis. + (libnss_nis-routines): Likewise. + (libnss_nisplus-routines): Add nss-nisplus. + + * nis/nss_nisplus/nisplus-alias.c: Remove unnecessary initializations. + * nis/nss_nisplus/nisplus-ethers.c: Likewise. + * nis/nss_nisplus/nisplus-grp.c: Likewise. + * nis/nss_nisplus/nisplus-hosts.c: Likewise. + * nis/nss_nisplus/nisplus-network.c: Likewise. + * nis/nss_nisplus/nisplus-proto.c: Likewise. + * nis/nss_nisplus/nisplus-pwd.c: Likewise. + * nis/nss_nisplus/nisplus-rpc.c: Likewise. + * nis/nss_nisplus/nisplus-service.c: Likewise. + * nis/nss_nisplus/nisplus-spwd.c: Likewise. + * nis/nss_nis/nis-alias.c: Likewise. + * nis/nss_nis/nis-ethers.c: Likewise. + * nis/nss_nis/nis-grp.c: Likewise. + * nis/nss_nis/nis-network.c: Likewise. + * nis/nss_nis/nis-proto.c: Likewise. + * nis/nss_nis/nis-pwd.c: Likewise. + * nis/nss_nis/nis-spwd.c: Likewise. + * nis/nss_compat/compat-grp.c: Likewise. + * nis/nss_compat/compat-initgroups.c: Likewise. + * nis/nss_compat/compat-pwd.c: Likewise. + * nis/nss_compat/compat-spwd.c: Likewise. + + * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c: Some more + optimizations. Patch by Jakub Jelinek . + +2001-04-26 Andreas Jaeger + + * po/zh_TW.po: Update. + Patch by Tung-Han Hsieh . + +2001-04-25 Ulrich Drepper + + * malloc/malloc.c: Allow MALLOC_ALIGNMENT to be defined on the + compiler command line. + * sysdeps/hppa/Makefile: Add -DMALLOC_ALIGNMENT=16 to compiler + command line for malloc.c. + +2001-04-25 Jakub Jelinek + + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/time.h: Move to... + * sysdeps/unix/sysv/linux/sparc/bits/time.h: ...here. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/bits/time.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/socket.h: Move to... + * sysdeps/unix/sysv/linux/sparc/bits/socket.h: ...here. Adjust + struct msghdr for __WORDSIZE == 32. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/statvfs.h: Move to... + * sysdeps/unix/sysv/linux/sparc/bits/statvfs.h: ...here. Adjust + for __WORDSIZE == 32. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c: New + file. + * sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S (__libc_siglongjmp): + Rename from longjmp, make longjmp weak alias to it. + +2001-04-24 David S. Miller + + * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c: New file. + +2001-04-25 Matthew Wilcox + + * sysdeps/hppa/stackinfo.h: New file. + * sysdeps/unix/sysv/linux/hppa/getdents64.c: New file. + * sysdeps/unix/sysv/linux/hppa/mmap64.c: New file. + * sysdeps/unix/sysv/linux/hppa/bits/resource.h: New file. + * sysdeps/unix/sysv/linux/kernel-features.h: Add descriptions + of PA kernel features. + +2001-04-25 Ulrich Drepper + + * locale/programs/localedef.c (main): Always set a file name for + the initial locale. + * locale/programs/locfile.c (locfile_read): filename is allowed to + be NULL. + +2001-04-12 Paul Bame + + * sysdeps/hppa/fpu/fclrexcpt.c: Clear the exception flags, not the + enable flags. + +2001-04-24 Ulrich Drepper + + * sysdeps/generic/bits/environments.h (_POSIX_V6_LPBIG_OFFBIG, + _XBS5_LPBIG_OFFBIG): Define to -1. + Fix typos. + + * sysdeps/generic/bits/confname.h: Add _CS_V6_WIDTH_RESTRICTED_ENVS. + * posix/confstr.c: Handle _CS_V6_WIDTH_RESTRICTED_ENVS. + * posix/getconf.c: Handle _POSIX_V6_WIDTH_RESTRICTED_ENVS. + * posix/tst-getconf.sh: Add _POSIX_V6_WIDTH_RESTRICTED_ENVS. + + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/Implies: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/bits/time.h: Removed. + +2001-03-21 Alan Modra + + * sysdeps/hppa/dl-machine.h (RTLD_START): Set up dp with DT_PLTGOT + value from application so that constructors in non-PIC libs work. + +2000-12-13 Jes Sorensen + + * sysdeps/hppa/dl-machine.h (RTLD_START): _dl_init now returns a + function pointer, hence load the jump address and gp from the + function pointer before jumping. + +2001-04-24 Andreas Jaeger + + * sysdeps/generic/send.c (__send): Return ssize_t. + * sysdeps/mach/hurd/send.c (__send): Likewise. + * sysdeps/mach/hurd/recv.c (recv): Likewise. + * sysdeps/mach/hurd/sendto.c (sendto): Likewise. + * sysdeps/generic/sendto.c (sendto): Likewise. + * sysdeps/generic/recvmsg.c (recvmsg): Likewise. + * sysdeps/mach/hurd/recvfrom.c (recvfrom): Likewise. + * sysdeps/generic/recvfrom.c (recvfrom): Likewise. + * sysdeps/generic/sendmsg.c (sendmsg): Likewise. + + * socket/sys/socket.h: send* and recv* return ssize_t. + + * include/sys/socket.h: send returns ssize_t. + + * sysdeps/i386/fpu_control.h: Fix comments. + +2001-04-24 Ulrich Drepper + + * sysdeps/ia64/Dist: Add hp-timing.c. + * sysdeps/unix/sysv/linux/sparc/sparc64/Dist: Add ucontext_i.h. + * posix/Makefile (distribute): Add tst-getconf.sh. + * po/Makefile (distribute): Add $(BROKEN_LINGUAS:=.po). + +2001-04-23 Ulrich Drepper + + * sysdeps/ia64/Makefile [subdir=csu] (sysdep_routines): Add hp-timing. + * sysdeps/ia64/Versions: Add _dl_cpuclock_offset for ld in 2.2.3. + * sysdeps/ia64/hp-timing.c: New file. + * sysdeps/ia64/hp-timing.h: New file. + * sysdeps/unix/sysv/linux/ia64/bits/time.h: Add definitions for + CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID. + + * sysdeps/generic/clock_getcpuclockid.c: Make function generic, test + using #ifdef whether the clock is available. + * sysdeps/unix/i386/clock_getcpuclockid.c: Not needed anymore. + + * sysdeps/generic/dl-sysdep.c: Initialize _dl_cpuclock_offset to move + it into data section. + + * sysdeps/unix/i386/i586/clock_getres.c: Removed. + * sysdeps/unix/i386/i586/clock_gettime.c: Removed. + * sysdeps/unix/i386/i586/clock_nanosleep.c: Removed. + * sysdeps/unix/i386/i586/clock_settime.c: Removed. + * sysdeps/unix/i386/i586/cpuclock-init.h: Removed. + * sysdeps/generic/cpuclock-init.h: Removed. + * sysdeps/unix/i386/i686/Implies: Removed. + * sysdeps/unix/i386/i686/tempname.c: Removed. + * sysdeps/i386/i686/Versions: New file. + * sysdeps/unix/i386/i586/Versions: Removed. + + * sysdeps/posix/clock_getres.c: If HP_TIMING_AVAIL is nonzero handle + CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID. + * sysdeps/unix/clock_gettime.c: Likewise. + * sysdeps/unix/clock_nanosleep.c: Likewise. + * sysdeps/unix/clock_settime.c: Likewise. + * sysdeps/posix/tempname.c: Is HP_TIMING_AVAIL is nonzero define + RANDOM_BITS use CPU clock. + + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/bits/time.h: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/bits/time.h: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/time.h: New file. + * sysdeps/sparc/Versions: New file. + + * elf/dl-support.c: Don't use cpuclock-init.h definitions, use + hp-timing.h definitions. + * sysdeps/generic/dl-sysdep.c: Likewise. + + * include/libc-internal.h: Include hp-timing.h. Use hp_timing_t in + __get_clockfreq prototype. + + * sysdeps/unix/sysv/linux/i386/get_clockfreq.c (__get_clockfreq): + Use hp_timing_t type. + * sysdeps/generic/get_clockfreq.c (__get_clockfreq): Likewise. + + * sysdeps/unix/sysv/linux/ia64/get_clockfreq.c: New file. + + * sysdeps/posix/pathconf.c (__pathconf): For _PC_ASYNC_IO test + whether named file is a regular file or a block device. + * sysdeps/posix/fpathconf.c (__fpathconf): Likewise. + +2001-04-23 Andreas Jaeger + + * nscd/nscd.h: Add noreturn attribute for start_threads. + +2001-04-22 Ulrich Drepper + + * posix/getconf.c: Fix names of XBS5 LFS test variables. + Add missing configuration variables from XPG6. + * posix/tst-getconf.c: New file. + * posix/Makefile (generated): Add tst-getconf.out. + (tests): Add ($objpfx)tst-getconf.out. + Add rule to run tst-getconf.sh. + * sysdeps/generic/bits/confname.h: Add missing _PC_ and _SC_ values + from XPG6. + * sysdeps/posix/fpathconf.c: Add handling of _PC_ALLOC_SIZE_MIN and + _PC_SYMLINK_MAX. + * sysdeps/posix/pathconf.c: Likewise. + * sysdeps/posix/sysconf.c: Correct spelling of _SC_MULTI_PROCESS + and _SC_SYMLOOP_MAX. + +2001-04-22 Philip Blundell + + * sysdeps/arm/fpu/feenablxcpt.c: New file. + * sysdeps/arm/fpu/fedisablxcpt.c: New file. + * sysdeps/arm/fpu/fegetexcpt.c: New file. + +2001-04-22 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/sys/user.h (struct user_fpregs): + Renamed from struct user_fp. + (struct user_regs): New. + (struct user): Use struct user_regs rather than struct pt_regs to + avoid dependency on asm/ptrace.h. Use struct user_fpregs in place + of struct user_fp and struct user_fp_struct. + * sysdeps/unix/sysv/linux/arm/sys/ucontext.h: Include sys/procfs.h + not sys/elf.h. + +2001-04-22 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/sys/elf.h: Move contents to + sys/procfs.h, and tell the user to include that file instead. + * sysdeps/unix/sysv/linux/arm/sys/procfs.h: Remove old cruft + surrounded with #if 0. + (elf_greg_t, ELF_NGREG, elf_gregset_t, elf_fpregset_t): Moved here + from sys/elf.h. + (prgregset_t, prfpregset_t): Define in terms of elf_gregset_t and + elf_fpregset_t respectively. + +2001-04-22 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/register-dump.h: Also print the + address that faulted. + +2001-04-21 Ulrich Drepper + + * sysdeps/generic/bits/confname.h: Add _SC_V6_* and _CS_POSIX_V6_* + values. + * sysdeps/generic/bits/environments.h: Define _POSIX_V6_* values. + * posix/confstr.c: Handle _CS_POSIX_V6_* values. + * posix/getconf.c: Handle _CS_POSIX_V6_* and _SC_V6_* values. + * sysdeps/posix/sysconf.c: Handle _SC_V6_* values. + + * sysdeps/powerpc/fpu/libm-test-ulps: Add deltas for atan2f. + * sysdeps/s390/fpu/libm-test-ulps: Likewise. + * sysdeps/sh/sh4/fpu/libm-test-ulps: Likewise. + * sysdeps/mips/fpu/libm-test-ulps: Likewise. + +2001-04-21 Franz Sirl + + * sysdeps/unix/sysv/linux/powerpc/mmap64.c: Correct check for invalid + offset. + +2001-04-21 Ulrich Drepper + + * posix/getopt.h: Treat __cplusplus like __STDC__. + +2001-04-20 John S. Marvin + + * sysdeps/unix/sysv/linux/hppa/clone.S: Fix clone system call + entry point stub. + +2001-04-20 Richard Hirst + + * elf/elf.h: Corrected R_PARISC_DIR14R (should be 6, not 5), + and added R_PARISC_DPREL21L and R_PARISC_DPREL14R for modutils. + + * sysdeps/unix/sysv/linux/hppa/syscalls.list: Removed ptrace + entry so the ptrace.c wrapper is used. + +2001-04-20 Alan Modra + + * sysdeps/hppa/dl-lookupcfg.h (_dl_function_address): Prototype. + (DL_FUNCTION_ADDRESS): Define. + (DL_DT_INIT_ADDRESS): Define. + (DL_DT_FINI_ADDRESS): Define. + * sysdeps/hppa/Versions: Add _dl_function_address. + * sysdeps/hppa/dl-machine.h (ELF_MACHINE_START_ADDRESS): Define. + * sysdeps/hppa/dl-symaddr.c (_dl_start_address): Rename to + _dl_function_address. + +2001-04-21 Andreas Jaeger + + * rt/aio_misc.c (handle_fildes_io): Add noreturn attribute. + * resolv/gai_misc.c (handle_requests): Likewise. + * malloc/obstack.c (print_and_abort): Likewise. + * malloc/mcheck.c (mabort): Likewise. + + * sysdeps/unix/i386/i586/clock_settime.c: Include + "libc-internal.h" for __get_clockfreq declaration. + +2001-04-21 Ulrich Drepper + + * elf/dl-support.c: Include cpuclock-init.h. Use CPUCLOCK_VARDEF and + CPUCLOCK_INIT if defined. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/generic/cpuclock-init.h: New file. + * sysdeps/unix/i386/i586/cpuclock-init.h: New file. + * sysdeps/unix/i386/i586/Versions: New file. + * sysdeps/unix/i386/i586/clock_settime.c: New file. + * sysdeps/unix/i386/i586/clock_gettime.c: Handle thread CPU clock + separately by calling __pthread_clock_gettime if this function is + available. Subtract offset from tsc value before computing time value. + +2001-04-20 Ulrich Drepper + + * iconv/iconv_prog.c (print_known_names): If printing goes not to + a tty print in a more machine-friendly way. + + * sysdeps/ieee754/ldbl-128/e_asinl.c: New file. + Contributed by Stephen L Moshier . + +2001-04-20 Andreas Jaeger + + * intl/Makefile (tests): Reorder conditions, tst-gettext needs msgfmt. + +2001-04-20 Andreas Schwab + + * sysdeps/m68k/fpu/libm-test-ulps: Update. + +2001-04-19 Alan Modra + + * Makerules (libc_pic.os): Add $(LDFLAGS-c_pic.os). + * sysdeps/hppa/Makefile (LDFLAGS-c_pic.os): Define. + (CFLAGS-.os): Remove. + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (CALL_MCOUNT): Update comment. + + * sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (NGREG, NFPREG, + gregset): Correct for new kernel definitions. + +2001-04-19 Alan Modra + + * sysdeps/hppa/elf/initfini.c: Change dlt reg save to r3 and + generate unwind info by hand. + +2001-04-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/powerpc/mmap64.c (__mmap64): Optimize a bit. + + * configure.in: Correct regular expression for msgfmt. + Patch by Bruno Haible . + +2001-04-19 Andreas Jaeger + + * po/el.po: Add comment explaining what's broken. + + * po/Makefile (BROKEN_LINGUAS): New. + (ALL_LINGUAS): Don't add broken languages. + +2001-04-19 Roland McGrath + + * sysdeps/mach/hurd/mlock.c: New file. + * sysdeps/mach/hurd/munlock.c: New file. + * sysdeps/mach/hurd/bits/posix_opt.h (_POSIX_MEMLOCK_RANGE): Define it. + + * misc/Makefile (routines): Add mlock munlock mlockall munlockall. + * sysdeps/generic/mlock.c: New file. + * sysdeps/generic/munlock.c: New file. + * sysdeps/generic/mlockall.c: New file. + * sysdeps/generic/munlockall.c: New file. + * sysdeps/generic/bits/mman.h (MCL_CURRENT, MCL_FUTURE): New macros. + * sysdeps/unix/sysv/linux/syscalls.list (mlock, munlock, + mlockall, munlockall): Change caller field to - from EXTRA. + Don't use __ names; not used (and not declared in include/sys/mman.h). + + * hurd/privports.c (__get_privileged_ports): Renamed with __. + Use __ names for calls we make. + (get_privileged_ports): Add alias. + * hurd/hurd.h: Declare it with the __ name. + * sysdeps/mach/hurd/reboot.c (reboot): Use __get_privileged_ports. + * sysdeps/mach/hurd/adjtime.c (__adjtime): Likewise. + * sysdeps/mach/hurd/settimeofday.c (__settimeofday): Likewise. + + * hurd/hurdsig.c (write_corefile): Check RLIMIT_CORE limit and do + nothing if it's zero. + +2001-04-19 Matthew Wilcox + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (INLINE_SYSCALL): + Change to return a signed result for compatibility with other + architectures, and correctness. + +2001-04-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_32BITUIDS): + HPPA always had them. Patch by Matthew Wilcox . + +2001-04-19 Andreas Jaeger + + * configure.in: Require gettext 0.10.36 or newer. + + * manual/install.texi (Tools for Compilation): Mention gettext 0.10.36. + + * po/zh_TW.po: Remove extraneous backslashes. + + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Remove unused + variables b and n. + +2001-04-18 Jakub Jelinek + + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update. + * sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S (__setcontext): + Copy first word of uc_sigmask into __uc_sigmask. + * sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S (__getcontext): + Save uc_link around trap. Copy __uc_sigmask into first word of + uc_sigmask, clear the rest. Make sure setcontext to the created + context doesn't do this though. + * sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Add + uc_stack and uc_sigmask, rename old uc_sigmask to __uc_sigmask in the + 64bit version, make uc_sigmask __sigset_t in the 32bit version. + +2001-04-19 Andreas Jaeger + + * sysdeps/unix/sysv/linux/hppa/umount.c: Fix typos in last patch. + + * rt/Makefile (otherlibs): Added for static NSS. + + * glibcbug.in (BUGGLIBC): Send to new alias. + +2001-04-02 Andreas Schwab + + * Makerules (build-module): Make sure exit codes get checked + properly and remove unnecessary slashes. + +2001-04-17 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/get_clockfreq.c (__get_clockfreq): + Handle kernels which report only three digits after the decimal point. + Reported by Van Okamura . + + * sysdeps/alpha/fpu/libm-test-ulps: Adjust error values for atan2f. + +2001-04-17 David S. Miller + + * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Update for new atan2 tests. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Likewise. + +2001-04-17 Jakub Jelinek + + * sysdeps/ieee754/ldbl-128/e_logl.c (__ieee754_logl): Make sure + desired exceptions are raised for exceptional values. + * math/libm-test.inc (acosh_test, atan_test, atan2_test, cacos_test, + cacosh_test, casin_test, casinh_test, catan_test, catanh_test, + clog_test, log_test, log1p_test, tan_test): Increase precision of + expected values to satisfy ldbl-128. + * sysdeps/alpha/fpu/libm-test-ulps: Adjust accordingly. + * sysdeps/arm/libm-test-ulps: Likewise. + * sysdeps/i386/fpu/libm-test-ulps: Likewise. + * sysdeps/ia64/fpu/libm-test-ulps: Likewise. + * sysdeps/m68k/fpu/libm-test-ulps: Likewise. + * sysdeps/mips/fpu/libm-test-ulps: Likewise. + * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. + * sysdeps/s390/fpu/libm-test-ulps: Likewise. + * sysdeps/sh/sh4/fpu/libm-test-ulps: Likewise. + * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Likewise. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Likewise. + +2001-04-17 Andreas Jaeger + + * configure.in: Move test for critical programs up. + +2001-04-16 Stephen L Moshier + + * sysdeps/ieee754/flt-32/e_asinf.c (pio2_hi, pio2_lo, pio4_hi): + Correct the values. (pSx, qSx): Replace by shorter approximation. + Use f suffix on float constants. + +2001-04-16 Ulrich Drepper + + * sysdeps/ieee754/ldbl-128/k_tanl.c: New file. + Contributed by Stephen L Moshier . + + * string/string.h: Replace const in attribute list with __const__. + +2001-04-16 Roland McGrath + + * grp/initgroups.c (initgroups) [NGROUPS_MAX != 0]: Always use sysconf + instead of the constant NGROUPS_MAX. That way, the limit can be + raised in the kernel configuration without having to recompile libc. + + * sysdeps/posix/euidaccess.c: Don't #include or try to + define NGROUPS_MAX; we don't use it here. + +2001-04-16 Andreas Jaeger + + * math/libm-test.inc (atan2_test): Add more testcases. + + * iconv/gconv_db.c: Include gconv_charset.h for + __gconv_lookup_alias prototype. + +2001-04-13 Ulrich Drepper + + * sysdeps/ieee754/ldbl-128/s_atanl.c: New file. + Contributed by Stephen L Moshier . + +2001-04-13 Jes Sorensen + + * intl/tst-codeset.c: Include string.h to get prototype for strcmp(). + +2001-04-13 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Add __pad0 to + explicitly pad struct siginfo instead of relying on compiler padding. + +2001-04-12 Ulrich Drepper + + * sysdeps/ia64/Dist: Add elf/entry.h. + + * iconvdata/Makefile (distribute): Add TESTS2. + +2001-04-13 Jakub Jelinek + + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_load_address): + Calculate load address differently. + +2001-04-12 Bruno Haible + + * iconvdata/TESTS2: New file. + * iconvdata/run-iconv-test.sh: Also run tests from TESTS2. + * iconvdata/testdata/alfabeta..UTF-8: New file. + * iconvdata/testdata/alfabeta..UTF-16.BE: New file. + * iconvdata/testdata/alfabeta..UTF-16.LE: New file. + * iconvdata/testdata/alfabeta..UTF-32.BE: New file. + * iconvdata/testdata/alfabeta..UTF-32.LE: New file. + +2001-04-11 Bruno Haible + + * iconvdata/utf-32.c: New file. + * iconvdata/gconv-modules: Add entries for UTF-32, UTF-32LE, UTF-32BE. + * iconvdata/Makefile (modules): Add UTF-32. + (distribute): Add utf-32.c. + +2001-04-11 Bruno Haible + + * iconvdata/utf-16.c (PREPARE_LOOP): Initialize 'swap' after possibly + changing it in the state. After incrementing 'inptr', store it back. + * iconvdata/unicode.c (PREPARE_LOOP): After incrementing 'inptr', + store it back. + +2001-04-11 Bruno Haible + + * iconvdata/utf-16.c (gconv_init): Use MAX_NEEDED_FROM, not + MIN_NEEDED_FROM. + +2001-04-11 David Mosberger + + * sysdeps/ia64/htonl.S: Drop superfluous "alloc". + * sysdeps/ia64/htons.S: Likewise. + + * sysdeps/ia64/memset.S: Add unwind directives. + * sysdeps/ia64/strncpy.S: Likewise. + * sysdeps/ia64/strcat.S: Likewise. + + * sysdeps/ia64/memccpy.S: Add unwind directives. Drop superfluous + restore of ar.pfs. + * sysdeps/ia64/strchr.S: Likewise. + * sysdeps/ia64/memmove.S: Likewise. + * sysdeps/ia64/memcpy.S: Likewise. + * sysdeps/ia64/memcmp.S: Likewise. + * sysdeps/ia64/memchr.S: Likewise. + * sysdeps/ia64/strcmp.S: Likewise. + * sysdeps/ia64/strlen.S: Likewise. + * sysdeps/ia64/strcpy.S: Likewise. + * sysdeps/ia64/strncmp.S: Likewise. + +2001-04-11 Jakub Jelinek + + * wcsmbs/wchar.h (fgetwc, getwc, getwchar, fputwc, putwc, putwchar, + fgetws, fputws, ungetwc, getwc_unlocked, getwchar_unlocked, + fgetwc_unlocked, fputwc_unlocked, putwc_unlocked, putwchar_unlocked, + fgetws_unlocked, fputws_unlocked, wcsftime): Add __THROW. + +2001-04-11 Andreas Jaeger + + * sysdeps/mips/elf/start.S [__ASSEMBLY__]: Define it. + +2001-04-11 Andreas Schwab + + * sysdeps/m68k/fpu/libm-test-ulps: Adjusted. + +2001-04-11 Ulrich Drepper + + * sysdeps/arm/stackinfo.h: New file. + +2001-04-08 Thorsten Kukuk + + * sunrpc/rpc_main.c: If we compile RPC thread safe, allow + rpcgen to generate thread safe code. + +2001-04-10 Andreas Jaeger + + * math/test-fenv.c (initial_tests): Protect FE_TONEAREST declaration. + +2001-04-10 Ulrich Drepper + + * elf/dl-minimal.c (__assert_fail): Change error string. It's + most of the time no bug in ld.so. + (__assert_perror_fail): Likewise. + +2001-04-11 Hans-Peter Nilsson + + * sysdeps/generic/bits/fenv.h (fexcept_t): Change default type + from struct to unsigned int. + +2001-04-10 Franz Sirl + + * elf/elf.h (AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE, + AT_IGNOREPPC): New defines. + * sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Print them. + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_STD_AUXV): + Define for newer powerpc kernels. + * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Use the standard + DL_FIND_ARG_COMPONENTS if __ASSUME_STD_AUXV is defined. + +2000-4-10 kaz Kojima + + * sysdeps/sh/stackinfo.h: New file. + +2001-04-10 Ulrich Drepper + + * locale/tst-C-locale.c (run_test): Add tests for locale objects. + * locale/newlocale.c (__newlocale): Correct setting __ctype_b, + __ctype_tolower, and __ctype_toupper elements. + + * ctype/ctype_l.c: Fix definitions of __tolower_l and __toupper_l. + Reported by Konstantin Osipov . + + * sysdeps/i386/fpu/libm-test-ulps: Add deltas for tgamma to help + the lousy AMD FPU. + +2001-04-10 Franz Sirl + + * sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h: New file. + * sysdeps/unix/sysv/linux/powerpc/Dist: Add sys/ptrace.h. + * sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: Delete wrong stuff. + * sysdeps/unix/sysv/linux/powerpc/sys/procfs.h: Correct typedefs. + +2001-04-10 Ulrich Drepper + + * elf/dl-deps.c (_dl_map_object_deps): Provide complete error + message. Based on a patch by HJ Lu. + +2001-04-10 Andreas Schwab + + * math/libm-test.inc (csinh_test): Don't require the invalid + exception for csinh (x + iNaN), but make it optional. + +2001-04-09 David Mosberger + + * sysdeps/ia64/elf/start.S (_start): Add unwind directives. + + * sysdeps/generic/entry.h [!__ASSEMBLY__]: Declare _start. + * sysdeps/ia64/elf/entry.h: New file. + * sysdeps/unix/sysv/linux/mips/entry.h [!__ASSEMBLY__]: Declare + __start. + * elf/rtld.c: Don't declare ENTRY_POINT. Use ENTRY_POINT instead + of &ENTRY_POINT. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/mach/hurd/dl-sysdep.c: Likewise. + * sysdeps/ia64/elf/start.S: Save base address of register backing + store in __libc_ia64_register_backing_store_base. + +2001-04-10 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: Fix return + value of getcontext. + * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S: Fix return + value of setcontext. + * sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/swapcontext.c: Skip setcontext + call by changing the saved context. + +2001-04-10 Ulrich Drepper + + * sysdeps/alpha/stackinfo.h: New file. + * sysdeps/ia64/stackinfo.h: New file. + +2001-04-10 Andreas Schwab + + * sysdeps/m68k/fpu/e_pow.c: Correct handling of some exceptional + values. + * sysdeps/m68k/fpu/e_scalb.c: Likewise. + +2001-04-09 Ulrich Drepper + + * sysdeps/sparc/sparc32/sparcv9/Dist: Add hp-timing.c. + * sysdeps/sparc/sparc64/Dist: Add hp-timing.c. + + * libio/Makefile (distribute): Add fd_to_filename.h. + +2001-04-05 David S. Miller + + Add hp-timing support for sparcv9/sparc64 targets. + * sysdeps/sparc/sparc32/sparcv9/hp-timing.c: New file + * sysdeps/sparc/sparc32/sparcv9/hp-timing.h: New file + * sysdeps/sparc/sparc64/hp-timing.c: New file + * sysdeps/sparc/sparc64/hp-timing.h: New file + * sysdeps/sparc/sparc32/sparcv9/Makefile: Build hp-timing. + * sysdeps/sparc/sparc64/Makefile: Likewise. + +2001-04-09 Jakub Jelinek + + * sysdeps/generic/fd_to_filename.h: New file. + * sysdeps/unix/sysv/linux/fd_to_filename.h: New file. + * libio/freopen.c (freopen): If FILENAME is NULL, try to get + filename from the open file descriptor. + * libio/freopen64.c (freopen64): Likewise. + +2001-04-09 Bruno Haible + + * misc/error.c (error): fflush stdout also if + error_print_progname != NULL. + (error_at_line): Likewise. + +2001-04-07 Bruno Haible + + * intl/gettextP.h (struct loaded_domain): Add codeset_cntr field. + (struct binding): Add codeset_cntr field. + (_nl_load_domain): Add domainbinding argument. + (_nl_init_domain_conv, _nl_free_domain_conv): New declarations. + (_nl_find_msg): New declaration, moved here from loadinfo.h. + * intl/loadinfo.h (struct loaded_l10nfile): Remove domainbinding field. + (_nl_make_l10nflist): Remove domainbinding argument. + (_nl_find_msg): Move declaration to gettextP.h. + * intl/bindtextdom.c (set_binding_values): Initialize ->codeset_cntr + to 0. Increment it when ->codeset is changed. + * intl/dcigettext.c (DCIGETTEXT): Pass binding to _nl_find_msg. + (_nl_find_msg): Add domainbinding argument. Reinitialize the converter + if domainbinding->codeset_cntr has been incremented. + * intl/finddomain.c (_nl_find_domain): Don't pass domainbinding to + _nl_make_l10nflist(). Pass it to _nl_load_domain() instead. + * intl/l10nflist.c (_nl_make_l10nflist): Remove domainbinding argument. + * intl/loadmsgcat.c (_nl_init_domain_conv): New function, extracted + from _nl_load_domain. Append //TRANSLIT also when using libiconv. + (_nl_free_domain_conv): New function, extracted from _nl_unload_domain. + (_nl_load_domain): Add domainbinding argument. Call + _nl_init_domain_conv. + (_nl_unload_domain): Call _nl_free_domain_conv. + * intl/Makefile (distribute): Add tst-codeset.sh, tstcodeset.po. + (test-srcs): Add tst-codeset. + (tests): Depend on tst-codeset.out. + (tst-codeset.out): New rule. + (CFLAGS-tst-codeset.c): New variable. + * intl/tst-codeset.sh: New file. + * intl/tstcodeset.po: New file. + * intl/tst-codeset.c: New file. + * locale/findlocale.c (_nl_find_locale): Update _nl_make_l10nflist + calls. + +2001-04-07 Roland McGrath + + * mach/msgserver.c (__mach_msg_server_timeout): Add an assert. + +2001-03-31 Roland McGrath + + * sysdeps/mach/hurd/fork.c: Skip NEWPROC just like NEWTASK when + copying send rights into child. When we hit our name for our proc + port, just copy NEWPROC directly instead of repeating proc_task2proc + to install the child's port. + +2001-04-08 Roland McGrath + + * Makeconfig ($(common-objpfx)soversions.i): Grok entries with DEFAULT + in second column, to provide default values for third column. + * shlib-versions: Add comments about using DEFAULT in second column. + (s390x-.*-linux.*): Replace individual entries with a DEFAULT entry. + (cris-.*-linux.*): Likewise. + +2001-04-09 Ulrich Drepper + + * Makefile (distribute): Add scripts/documented.sh. + * scripts/documented.sh: New file. + +2001-04-08 Hans-Peter Nilsson + + * sysdeps/unix/sysv/linux/cris/Dist: New file. + * sysdeps/unix/sysv/linux/cris/Makefile: New file. + * sysdeps/unix/sysv/linux/cris/_G_config.h: New file. + * sysdeps/unix/sysv/linux/cris/bits/fcntl.h: New file. + * sysdeps/unix/sysv/linux/cris/bits/mman.h: New file. + * sysdeps/unix/sysv/linux/cris/bits/resource.h: New file. + * sysdeps/unix/sysv/linux/cris/brk.c: New file. + * sysdeps/unix/sysv/linux/cris/chown.c: New file. + * sysdeps/unix/sysv/linux/cris/clone.S: New file. + * sysdeps/unix/sysv/linux/cris/fchown.c: New file. + * sysdeps/unix/sysv/linux/cris/fcntl.c: New file. + * sysdeps/unix/sysv/linux/cris/fxstat.c: New file. + * sysdeps/unix/sysv/linux/cris/getegid.c: New file. + * sysdeps/unix/sysv/linux/cris/geteuid.c: New file. + * sysdeps/unix/sysv/linux/cris/getgid.c: New file. + * sysdeps/unix/sysv/linux/cris/getgroups.c: New file. + * sysdeps/unix/sysv/linux/cris/getresgid.c: New file. + * sysdeps/unix/sysv/linux/cris/getresuid.c: New file. + * sysdeps/unix/sysv/linux/cris/getrlimit.c: New file. + * sysdeps/unix/sysv/linux/cris/getrlimit64.c: New file. + * sysdeps/unix/sysv/linux/cris/getuid.c: New file. + * sysdeps/unix/sysv/linux/cris/lchown.c: New file. + * sysdeps/unix/sysv/linux/cris/lockf64.c: New file. + * sysdeps/unix/sysv/linux/cris/lxstat.c: New file. + * sysdeps/unix/sysv/linux/cris/mmap.S: New file. + * sysdeps/unix/sysv/linux/cris/mmap64.S: New file. + * sysdeps/unix/sysv/linux/cris/msgctl.c: New file. + * sysdeps/unix/sysv/linux/cris/profil-counter.h: New file. + * sysdeps/unix/sysv/linux/cris/register-dump.h: New file. + * sysdeps/unix/sysv/linux/cris/semctl.c: New file. + * sysdeps/unix/sysv/linux/cris/setegid.c: New file. + * sysdeps/unix/sysv/linux/cris/seteuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setfsgid.c: New file. + * sysdeps/unix/sysv/linux/cris/setfsuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setgid.c: New file. + * sysdeps/unix/sysv/linux/cris/setgroups.c: New file. + * sysdeps/unix/sysv/linux/cris/setregid.c: New file. + * sysdeps/unix/sysv/linux/cris/setresgid.c: New file. + * sysdeps/unix/sysv/linux/cris/setresuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setreuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setrlimit.c: New file. + * sysdeps/unix/sysv/linux/cris/setuid.c: New file. + * sysdeps/unix/sysv/linux/cris/shmctl.c: New file. + * sysdeps/unix/sysv/linux/cris/socket.S: New file. + * sysdeps/unix/sysv/linux/cris/sys/ucontext.h: New file. + * sysdeps/unix/sysv/linux/cris/syscall.S: New file. + * sysdeps/unix/sysv/linux/cris/sysdep.S: New file. + * sysdeps/unix/sysv/linux/cris/sysdep.h: New file. + * sysdeps/unix/sysv/linux/cris/vfork.S: New file. + * sysdeps/unix/sysv/linux/cris/xstat.c: New file. + +2001-04-08 Hans-Peter Nilsson + + * sysdeps/cris/Dist: New file. + * sysdeps/cris/Implies: New file. + * sysdeps/cris/Makefile: New file. + * sysdeps/cris/__longjmp.S: New file. + * sysdeps/cris/_mcount.S: New file. + * sysdeps/cris/bits/endian.h: New file. + * sysdeps/cris/bits/setjmp.h: New file. + * sysdeps/cris/bits/string.h: New file. + * sysdeps/cris/dl-machine.h: New file. + * sysdeps/cris/elf/start.S: New file. + * sysdeps/cris/machine-gmon.h: New file. + * sysdeps/cris/memcopy.h: New file. + * sysdeps/cris/memusage.h: New file. + * sysdeps/cris/setjmp.S: New file. + * sysdeps/cris/sysdep.h: New file. + * sysdeps/cris/wordcopy.c: New file. + +2001-04-08 Hans-Peter Nilsson + + * elf/elf.h: Add new relocations for CRIS. + +2001-04-08 Hans-Peter Nilsson + + * shlib-versions: Add cases for Linux on CRIS. + +2001-04-08 Hans-Peter Nilsson + + * configure.in (ASM_LINE_SEP tests): Handle CRIS assembly, with + ';' for comments and '@' for line separator. + +2001-04-08 Hans-Peter Nilsson + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (INLINE_SYSCALL): Fix + typo; s/==/=/ for assignment. + +2001-04-08 Hans-Peter Nilsson + + * malloc/Makefile: Correct comment; mtrace is Perl, not AWK. + +2001-04-08 Hans-Peter Nilsson + + * iconv/gconv_simple.c (internal_ucs4_loop_unaligned): Check for + empty input before checking full output. + +2001-04-08 Hans-Peter Nilsson + + * iconv/gconv.c (__gconv): Don't derefer parameter cd before + checking if == -1L. + +2001-04-08 Ulrich Drepper + + * inet/rexec.c (rexec_af): Avoid calling perror with errno being set. + +2001-04-07 Stephen L Moshier + + * sysdeps/ieee754/ldbl-128/e_logl.c: Correct infinity and NaN + return values. + +2001-04-07 Ulrich Drepper + + * stdlib/tst-setcontext.c (main): Add a test for setcontext. + + * sysdeps/unix/sysv/linux/i386/getcontext.S: New file. + * sysdeps/unix/sysv/linux/i386/setcontext.S: New file. + * sysdeps/unix/sysv/linux/i386/makecontext.S: New file. + * sysdeps/unix/sysv/linux/i386/swapcontext.S: New file. + * sysdeps/unix/sysv/linux/i386/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/i386/Dist: Add ucontext_i.h. + +2001-04-07 Andreas Jaeger + + * sysdeps/ieee754/ldbl-96/e_j1l.c (__ieee754_y1l): Use sincos + instead of separate sin and cos. + (__ieee754_j1l): Likewise. + +2001-04-06 Ulrich Drepper + + * sysdeps/ia64/abort-instr.h: New file. Code by David Mosberger. + + * sysdeps/ia64/atomicity.h: New file. Copied from libstdc++. + + * sysdeps/i386/i486/atomicity.h: Clean up the asms. + + * sysdeps/generic/e_scalb.c: Don't use FE_INVALID unless it's + available. + * sysdeps/generic/e_scalbf.c: Likewise. + * sysdeps/generic/e_scalbl.c: Likewise. + Patch by Mark Hatle . + +2001-04-05 David S. Miller + + * sysdeps/sparc/abort-instr.h: New file. + +2001-04-05 Matt Wilson + + * sysdeps/unix/sysv/linux/alpha/getsysstats.c (GET_NPROCS_PARSER): + added code to parse new 2.4 format. + (GET_NPROCS_CONF_PARSER): Likewise. + +2001-04-05 David S. Miller + + * scripts/config.sub: Recognize sparcv9b like sparcv9. + * configure.in: Add sparcv9b. + * sysdeps/sparc/sparc32/sparcv9b/Implies: New file + * sysdeps/sparc/sparc32/sparcv9b/memcpy.S: New file + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: New file + +2001-04-06 David Mosberger + + * stdlib/tst-setcontext.c: Move st2[] to global scope. + (f2): Verify that stack pointer is inside st2[]. + + * sysdeps/unix/sysv/linux/ia64/getcontext.S: It helps to save r12. + * sysdeps/unix/sysv/linux/ia64/setcontext.S: It helps to restore r12. + +2001-04-06 Ulrich Drepper + + * timezone/antarctica: Update from tzdata2001b. + * timezone/asia: Likewise. + * timezone/australasia: Likewise. + * timezone/europe: Likewise. + * timezone/northamerica: Likewise. + + * iconv/iconv_open.c: Move strip and upstr definitions... + * iconv/gconv_charset.h: ...here. New file. + * iconv/gconv_db.c (once): Move to file level. + (do_lookup_alias): Split out from __gconv_find_transform. + (__gconv_find_transform): Call do_lookup_alias. + (__gconv_loopup_alias): New function. + * locale/langinfo.h: Define _NL_*_CODESET values for all categories + but LC_CTYPE. + * locale/categories.def: Add entries for new _NL_*_CODESET values. + * locale/C-ctype.c: Use _nl_C_codeset to initialize CODESET entry. + * locale/C-address.c: Initialize _NL_*_CODESET element. + * locale/C-collate.c: Likewise. + * locale/C-identification.c: Likewise. + * locale/C-measurement.c: Likewise. + * locale/C-messages.c: Likewise. + * locale/C-monetary.c: Likewise. + * locale/C-name.c: Likewise. + * locale/C-numeric.c: Likewise. + * locale/C-paper.c: Likewise. + * locale/C-telephone.c: Likewise. + * locale/C-time.c: Likewise. + * locale/localeinfo.h: Declare _nl_C_codeset. + * locale/C_name.c: Define _nl_C_codeset. + * locale/findlocale.c: Before accepting locale check that the used + charset does not conflict with what the locale name said. + * locale/programs/ld-address.c: Emit codeset information. + * locale/programs/ld-collate.c: Likewise. + * locale/programs/ld-identification.c: Likewise. + * locale/programs/ld-measurement.c: Likewise. + * locale/programs/ld-messages.c: Likewise. + * locale/programs/ld-monetary.c: Likewise. + * locale/programs/ld-name.c: Likewise. + * locale/programs/ld-numeric.c: Likewise. + * locale/programs/ld-paper.c: Likewise. + * locale/programs/ld-telephone.c: Likewise. + * locale/programs/ld-time.c: Likewise. + + * localedata/tests-mbwc/tst_funcs.h (TST_HEAD_LOCALE): It is an error + if the locale data couldn't be found. + + * string/Makefile: Define tst-strxfrm-ENV. + + * ysdeps/unix/sysv/linux/ia64/getcontext.S: Fix comment. + +2001-04-06 Andreas Jaeger + + * include/sys/profil.h: New file. + + * dlfcn/modatexit.c: Add prototypes to silence GCC. + * dlfcn/modcxaatexit.c: Likewise. + * elf/globalmod1.c: Likewise. + +2001-04-05 David S. Miller + + * elf/elf.h (HWCAP_SPARC_ULTRA3): Define it. + * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Add it to + capability flags table and HWCAP_IMPORTANT, increase + _DL_HWCAP_COUNT to 6. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise. + +2001-04-04 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/makecontext.c (__makecontext): Fix + initialization of stack_end (bug reported by Zheng Gengbin + ). + +2001-04-05 Ulrich Drepper + + * sysdeps/i386/fpu/libm-test-ulps: Relax errors for asinl. + +2001-04-05 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h: New file. + +2001-04-05 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_asinl.c: Correct handling of +-Inf. + * sysdeps/i386/fpu/e_asinl.S: Removed. Too inaccurate. + + * login/tst-utmp.c: Make file usable again in tst-utmpx.c. + +2001-04-04 Ulrich Drepper + + * sysdeps/unix/sysv/aix/dl-libc.c: Don't use the ELF version, + define simple replacements here. Patch by Michael Keezer. + + * sysdeps/ieee754/ldbl-128/e_logl.c: New file. + * sysdeps/ieee754/ldbl-96/e_asinl.c: New file. + Contributed by Stephen L Moshier . + + * posix/fnmatch_loop.c: Undefine NEW_PATTERN when it is not used + anymore. + +2001-04-01 Andreas Jaeger + + * sysdeps/generic/s_nextafter.c (NO_LONG_DOUBLE): Add nexttowardl + alias. + + * sysdeps/generic/s_fma.c (NO_LONG_DOUBLE): Add fmal alias. + +2001-04-04 Ulrich Drepper + + * sysdeps/unix/sysv/linux/s390/s390-64/Dist: Add ucontext_i.h. + * sysdeps/unix/sysv/linux/s390/s390-32/Dist: Likewise. + +2001-04-04 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/s390/swapcontext.c: New file. + +2001-04-04 Andreas Jaeger + + * sysdeps/powerpc/dl-machine.h (ELF_MACHINE_NO_REL): Move to right + place. + +2001-04-04 Ulrich Drepper + + * sunrpc/rpc_scan.c (symbols): Add entry for HYPER. + * sunrpc/rpc_scan.h (enum tok_kind): Add TOK_HYPER. + * sunrpc/rpc_parse.c (get_type): Handle TOK_HYPER. + (unsigned_dec): Likewise. + Patch by atai@jezebel.dreamhost.com. + + * nis/nss_nis/nis-service.c (_nss_nis_getservbyname_r): Pass + pointer to int as last parameter of yp_match. + Patch by kanazawa@flab.fujitsu.co.jp. + +2001-04-03 Ulrich Drepper + + * resolv/netdb.h (gai_strerror): Make return value const. + * sysdeps/generic/gai_strerror.c (gai_strerror): Likewise. + * sysdeps/posix/gai_strerror.c (gai_strerror): Likewise. + Add strings for new error values. + +2001-03-29 Michael Keezer + + * posix/tst-gnuglob.c: Added ifdef _DIRENT_HAVE_D_TYPE. + * login/tst-utmp.c: Handle case where ut_tv is not available but + ut_time is. + * sysdeps/unix/sysv/aix/utmpx.h: New file. + * sysdeps/unix/sysv/aix/bits/utmpx.h: Added + _HAVE_UT_TYPE/PID/ID/TV/HOST defines. + * sysdeps/unix/sysv/aix/libc-start.c: Removed temp code and made stub. + * sysdeps/unix/sysv/aix/gettimeofday.c: New file added routines + to access RTCU timer reg. + * sysdeps/unix/sysv/aix/Makefile: Remove /usr/lib/crt0.o + added dl-libc, dl-open,dl-sym, dl-close to misc. + * sysdeps/unix/sysv/aix/start.c: New file. Start code. + * sysdeps/unix/sysv/aix/dlldr.h: New file. AIX __loadx defines. + * sysdeps/unix/sysv/aix/dl-close.c: New file. AIX dl-close. + * sysdeps/unix/sysv/aix/dl-open.c: New file. AIX dl-open. + * sysdeps/unix/sysv/aix/dl-sym.c: New file. AIX dl-sym. + * sysdeps/unix/sysv/aix/dl-libc.c: New file. libc_dl-xxx support. + * sysdeps/generic/strtoll.c: Added SHLIB_COMPAT(libc,GLIBC_2_0, + GLIBC_2_2). + * sysdeps/generic/strtoull.c: Likewise. + * sysdeps/powerpc/ppc-mcount.S: Added nop after bl instruction. + * sysdeps/unix/sysv/aix/powerpc/memset.c: New file to include + sysdeps/generic/memset.c. + * sysdeps/unix/sysv/aix/getpeername.c: Define __getpeername. + +2001-04-03 Ulrich Drepper + + * iconv/Makefile (CFLAGS-charmap.c): Add -DNEED_NULL_POINTER. + * locale/programs/charmap.c: Define null_pointer if + NEED_NULL_POINTER is defined. + + * misc/dirname.c (dirname): Handle multiple slashes correctly. + +2001-04-03 Martin Schwidefsky + + * sysdeps/s390/s390-64/initfini.c: Fix __gmon_start__ GOT access. + +2001-04-03 Martin Schwidefsky + + * sysdeps/s390/s390-32/bcopy.S: Optimize for speed. + * sysdeps/s390/s390-64/bcopy.S: Likewise. + * sysdeps/s390/s390-32/mempcy.S: Likewise. + * sysdeps/s390/s390-64/memcpy.S: Likewise. + +2001-04-02 Bruno Haible + + * manual/message.texi (Advanced gettext functions): More specific + syntax in the plural formula examples. + +2001-04-02 Franz Sirl + + * sysdeps/powerpc/atomicity.h: Silence warnings. + * sysdeps/powerpc/dl-machine.h: Likewise. + * sysdeps/powerpc/register-dump.h: Likewise. + * sysdeps/powerpc/fpu/s_lrint.c: Likewise. + +2001-04-02 Andreas Jaeger + + * misc/tst-dirname.c (main): Add more tests, derived from a bug + report by Michael Kerrisk . + +2001-04-01 Andreas Jaeger + + * debug/xtrace.sh (pcprofileso): Use SLIBDIR since libpcprofile.so + is installed there. + * malloc/memusage.sh (memusageso): Likewise for libmemusage.so. + +2001-04-01 H.J. Lu + + * posix/annexc.c (macrofile): Renamed from TMPFILE and set to + tmpnam (NULL). + * stdlib/isomac.c (macrofile): Likewise. + +2001-03-30 Thorsten Kukuk + + * inet/rcmd.c: Allow AF_UNSPEC as parameter. + * nis/ypclnt.c (yp_all): Print error message only at last try, + check for protocoll error only if we don't have a network error. + +2001-04-02 Andreas Schwab + + * resolv/res_data.c (res_isourserver): Fix cast. + +2001-04-02 Andreas Jaeger + + * sysdeps/unix/sysv/linux/hppa/umount.c: Add prototype for + __umount2. + + * sysdeps/i386/dl-machine.h (RTLD_START): Don't use multi-line + strings. + (ELF_MACHINE_RUNTIME_TRAMPOLINE): Likewise. + + * sysdeps/ieee754/dbl-64/uroot.h: Add missing braces arount + initializers. + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Likewise. + + * elf/rtld.c (print_statistics)[!HP_TIMING_NONAVAIL]: Avoid + warning about unused variable. + + * string/string.h (strndupa): Add cast for C++ conformance. + (strdupa): Likewise. + Fixes PR libc/2173, reported by tbrowder@home.com. + +2001-03-30 Roland McGrath + + * sysdeps/mach/hurd/Makefile ($(link-rpcuserlibs)): Don't append + options after $(build-module), which is no longer a single command. + (LDFLAGS-link-rpcuserlibs): New variable to hold those options. + (LDFLAGS-libmachuser-link.so, LDFLAGS-libhurduser-link.so): New + variables using it. Reported by Mark Kettenis . + +2001-03-11 Roland McGrath + + * elf/rtld.c (dl_main): Add cast to quiet warning. + * elf/dl-load.c (_dl_map_object_from_fd): Likewise. + * iconv/gconv_conf.c (__gconv_get_path): Likewise. + (__gconv_read_conf): Likewise. + * iconv/gconv_db.c (gen_steps): Likewise. + (__gconv_find_transform): Likewise. + * locale/programs/charmap-dir.c (fopen_uncompressed): Likewise. + (fopen_uncompressed): Use const in second argument's type. + +2001-03-11 Roland McGrath + + * sysdeps/mach/hurd/dl-sysdep.c (__writev): New function. + + * mach/mach_error.h: Fix ancient #endif syntax. + * hurd/hurdmalloc.c: Likewise. + + * sysdeps/generic/atomicity.h (exchange_and_add, atomic_add, + compare_and_swap): Add volatile qualifier to first arg, to bring + these prototypes in line with all the other implementations. + Add a #warning to remind the builder that these are not atomic. + +2001-03-04 Roland McGrath + + * hurd/vpprintf.c (vpprintf) [USE_IN_LIBIO]: Use innermore first + member of TEMP_F so its type is _IO_FILE * as expected. + + * hurd/fopenport.c (seekio): Conditionalize type of POS argument + on [USE_IN_LIBIO]. Check the value for overflow, since for libio + it might exceed off_t's range. + +2001-02-25 Roland McGrath + + * sysdeps/mach/hurd/sysd-stdio.c (__stdio_reopen): Use prototype. + * sysdeps/unix/bsd/getpt.c (__posix_openpt): Likewise. + + * sysdeps/mach/hurd/i386/intr-msg.h (SYSCALL_EXAMINE): Make this a + macro instead of an inline function, + (MSG_EXAMINE): Likewise. + + * hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS_1): Remove extraneous ##. + + * hurd/get-host.c: Include for decls of built-ins. + * hurd/hurdchdir.c: Likewise. + * sysdeps/mach/hurd/i386/sigreturn.c: Likweise. + * sysdeps/mach/hurd/opendir.c: Likewise. + + * mach/mach_init.c: Include for _exit decl. + + * mach/errsystems.awk: Give output file a trailing newline. + + * mach/Machrules (MIG): Prepend CC='${CC}' to the mig command, so that + the script will use our compiler for the cpp stage. + + With --enable-all-warnings we get a whole bunch of warnings, + and these are just a few fixes; there are more needed to silence it. + * mach/mach/mig_support.h (__mig_strncpy, mig_strncpy): Add extern + decls before extern inline defns to quiet gcc warning. + * hurd/hurd/threadvar.h (__hurd_threadvar_location_from_sp): Likewise. + * sysdeps/mach/i386/machine-sp.h (__thread_stack_pointer): Likewise. + +2001-03-31 Andreas Jaeger + + * sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_RAWHDLC): Added. + (ARPHRD_HDLC): Define as alias for ARPHRD_CISCO. + (ARPHRD_CISCO): New. + Changes from Linux 2.4.3. + +2001-03-30 Isamu Hasegawa + + * posix/regex.c: Avoid an access violation if malloc failes. + +2001-03-30 Andreas Jaeger + + * sysdeps/alpha/ldiv.S (ldiv): Add alias for imaxdiv. + +2001-03-29 Ulrich Drepper + + * posix/regex.c: Remove unnecessary ifs. + + * math/bits/mathcalls.h: Remove infnan declaration. + +2001-03-29 H.J. Lu + + * include/endian.h: Define BIG_ENDI, LITTLE_ENDI, HIGH_HALF, + and LOW_HALF only if _LIBC is defined and _ISOMAC is not defined. + * stdlib/isomac.c (fmt): Define _LIBC and _ISOMAC. + . +2001-03-29 Isamu Hasegawa + + * posix/regex.c: Fix typo and add a sentinel. + +2001-03-29 Ulrich Drepper + + * sysdeps/unix/sysv/linux/shm_open.c: Open new file always with + O_NOFOLLOW. Suggested by Christoph Roland. + +2001-03-27 Martin Schwidefsky + + * sysdeps/s390/bits/string.h: New unified 31/64 bit string.h. + * sysdeps/s390/s390-32/bits/string.h: Remove. + * sysdeps/s390/s390-64/bits/string.h: Remove. + * sysdeps/s390/s390-32/strcmp.S: New file. + * sysdeps/s390/s390-64/strcmp.S: New file. + +2001-03-27 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Fix typo. + * sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise. + +2001-03-27 Ulrich Drepper + + * version.h (VERSION): Bump to 2.2.3. + + * stdlib/isomac.c (fmt): Don't define _LIBC. + * include/endian.h: Define BIG_ENDI, LITTLE_ENDI, HIGH_HALF, and + LOW_HALF only if _LIBC is defined. + + * sysdeps/i386/fpu/libm-test-ulps: Slight adjustment of yn() error. + + * posix/fnmatch_loop.c (FCT): Handle !() after * special like @() + and +(). + * posix/tst-fnmatch.input: Add test cases for matching empty strings. + + * sysdeps/ieee754/dbl-64/endian.h: Removed. Move definitions... + * include/endian.h: ...to here. + +2001-03-27 kaz Kojima + + * sysdeps/sh/sys/ucontext.h (NFREG): Rename to NFPREG. + * sysdeps/unix/sysv/linux/sh/sys/ucontext.h (NFREG): Likewise. + +2001-03-27 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/ldconfig.h: Fix typo. + +2001-03-26 Ulrich Drepper + + * sysdeps/ia64/fpu/Dist: Add new files to distribute. + * sysdeps/unix/sysv/linux/s390/s390-64/Dist: Likewise. + * sysdeps/unix/sysv/linux/ia64/Dist: Likewise. + + * gmon/Makefile (headers): Add sys/profil.h. + +2001-03-18 Andreas Jaeger + + * manual/install.texi (Tools for Compilation): Advise to use GCC + 2.95.3. + (Supported Configurations): Mention s390x. + +2001-03-26 Ben Collins + + * sysdeps/unix/sysv/linux/mips/bits/mman.h: Add MAP_* and MADV_* + defines to match other architectures. + +2001-03-26 Ulrich Drepper + + * libio/Makefile (tests): Add tst-ext. + * libio/tst-ext.c: New file. + + * libio/iosetvbuf.c (_IO_setvbuf): Clear line buffer flag for _IONBF. + +2001-03-25 Ulrich Drepper + + Add changes which were in this form in the original patch by + Eric Norum . + * include/rpc/rpc.h: Remove svc_fdset, rpc_createerr, svc_pollfd, and + svc_max_pollfd. + * sunrpc/rpc/rpc.h: Declare __rpc_thread_svc_fdset, + __rpc_thread_createerr, __rpc_thread_svc_pollfd, and + __rpc_thread_svc_max_pollfd. + Define svc_fdset, get_rpc_createerr, svc_pollfd, and + svc_max_pollfd. + * sunrpc/rpc_thread.c: Handle first thread special, it uses the + global variables. + Define __rpc_thread_svc_fdset, __rpc_thread_createerr, + __rpc_thread_svc_pollfd, and __rpc_thread_svc_max_pollfd. + * sunrpc/Versions [libc] (GLIBC_2.2.3): Export __rpc_thread_svc_fdset, + __rpc_thread_createerr, __rpc_thread_svc_pollfd, and + __rpc_thread_svc_max_pollfd. + * sunrpc/clnt_gen.c: Replace use of rpc_createerr by call to + get_rpc_createerr. + * sunrpc/clnt_perr.c: Likewise. + * sunrpc/clnt_simp.c: Likewise. + * sunrpc/clnt_tcp.c: Likewise. + * sunrpc/clnt_udp.c: Likewise. + * sunrpc/clnt_unix.c: Likewise. + * sunrpc/pm_getport.c: Likewise. + + * sysdeps/unix/sysv/linux/i386/getgroups.c (__getgroups): getgroups32 + syscall checks for negative n so don't test here as well. + +2001-03-23 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/sysdep.h (ENTRY): Moved to ... + * sysdeps/ia64/sysdep.h: ...here. + + * sysdeps/ia64/sysdep.h (LOCAL_ENTRY): Define. + * sysdeps/ia64/sysdep.h (LOCAL_LEAF): Define. + + * sysdeps/ia64/_mcount.S (_mcount_ret_helper): Use LOCAL_LEAF() to + declare instead of LEAF(). Suggestion from David Mosberger. + +2001-03-21 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/sysdep.h (CALL_MCOUNT): Add unwind + directives. + (PSEUDO): Drop .psr and .lsb directives. + + * sysdeps/unix/sysv/linux/ia64/setjmp.S: Ditto. Add unwind + directives. + * sysdeps/unix/sysv/linux/ia64/sysdep.S: Ditto. + + * sysdeps/ia64/elf/start.S: Misc cleanup: remove .psr and .lsb + directives etc. + * sysdeps/unix/sysv/linux/ia64/brk.S: Ditto. + * sysdeps/unix/sysv/linux/ia64/__longjmp.S: Ditto. + * sysdeps/ia64/_mcount.S: Remove .psr and .lsb directives (no + longer needed). Add unwind directives. + + * sysdeps/ia64/sysdep.h: Define ASM_UNW_PRLG_RP, ASM_UNW_PRLG_PFS, + ASM_UNW_PRLG_PSP, ASM_UNW_PRLG_PR, and ASM_UNW_PRLG_GRSAVE. + +2001-03-21 Paul Eggert + + * posix/regex.h (RE_INVALID_INTERVAL_ORD): New macro. + (RE_SYNTAX_POSIX_EGREP): Use it. + * posix/regex.c (regex_compile): Implement it. + +2001-03-21 Paul Eggert + + * posix/regex.c (GET_UNSIGNED_NUMBER): Check for overflow. + Rewrite to avoid duplicate code. + +2001-03-21 H.J. Lu + + * elf/Makefile (tests): Don't depend on $(objpfx)tst-pathopt.out + for cross-compiling. + ($(objpfx)tst-pathopt.out): Undo the last change. + +2001-03-24 Mark Kettenis + + * sysdeps/mach/hurd/i386/bits/sigcontext.h (sc_sp, sc_fp, sc_pc, + sc_ps): Define as aliases for sc_uesp, sc_ebl, sc_eip and sc_efl. + + * sysdeps/mach/hurd/i386/init-first.c: Include . + (_dl_argv): Declare. + (init) [SHARED]: Readjust _dl_argv if we switched to a new stack. + +2001-03-22 Andreas Jaeger + + * iconvdata/Makefile (generated): Add iconv-test.xxx. + + * posix/Makefile (generated): Add bug-regex2.mtrace and + bug-regex2-mem. + +2001-03-21 Ulrich Drepper + + * csu/version.c (__gnu_get_libc_release): Add prototype. + (__gnu_get_libc_version): Likewise. + * include/gnu/libc-version.h: Remove prototypes for not exported + functions. + +2001-03-21 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/makecontext.c: Include libintl.h + for internationalized printfs to work. + +2001-03-09 Bruno Haible + + * intl/dcigettext.c (transmem_block_t): Change to unsigned char, to + avoid compiler warning. + (_nl_find_msg): Add casts to avoid compiler warnings. + +2001-03-21 Ulrich Drepper + + * gmon/Makefile (routines): Add sprofil. + (tests): Add tst-sprofil. + (noprof): Add sprofil. + * gmon/Versions [libc] (GLIBC_2.2.3): Add sprofil. + +2001-03-20 David Mosberger + + * sysdeps/generic/sprofil.c: New file. + * sysdeps/posix/sprofil.c: New file. + * gmon/tst-sprofil.c: New file. + * gmon/sys/profil.h: New file. + +2001-03-20 Andreas Schwab + + * include/unistd.h: Adjust prototype of __gethostname. + +2001-03-20 Jakub Jelinek + + * sysdeps/sparc/stackinfo.h: New file. + +2001-03-21 Andreas Jaeger + + * elf/global.c (main): Use proper prototype. + +2001-03-20 Ulrich Drepper + + * sunrpc/Makefile (routines): Add rpc_thread. + (CPPFLAGS): Add -D_RPC_THREAD_SAFE. + * sunrpc/rpc_thread.c: New file. + * sunrpc/Versions [libc] (GLIBC_2.2.3): Export __rpc_thread_destroy. + * sunrpc/auth_none.c: Don't use global variables. Access state in + thread-local storage. + * sunrpc/clnt_perr.c: Likewise. + * sunrpc/clnt_raw.c: Likewise. + * sunrpc/clnt_simp.c: Likewise. + * sunrpc/key_call.c: Likewise. + * sunrpc/rpc_common.c: Likewise. + * sunrpc/svc.c: Likewise. + * sunrpc/svc_raw.c: Likewise. + * sunrpc/svc_simple.c: Likewise. + * sunrpc/svcauth_des.c: Likewise. + * hurd/hurd/threadvar.h (enum __hurd_threadvar_index): Add + _HURD_THREADVAR_RPC_VARS. + * sysdeps/generic/bits/libc-tsd.h: Mention _LIBC_TSD_KEY_RPC_VARS. + * include/rpc/rpc.h: Define data structures for internal thread-local + "global" variables. + Based on patches by Eric Norum . + + * elf/dl-load.c: Various little optimizations. + + * sysdeps/unix/sysv/linux/pathconf.c (__pathconf): Return + LINUX_LINK_MAX only if the statfs function is not implemented for + the filesystem. + + * sysdeps/unix/sysv/linux/fpathconf.c (__fpathconf): Return + LINUX_LINK_MAX only if the fstatfs function is not implemented for + the filesystem. + +2001-03-19 Ulrich Drepper + + * elf/dl-dst.h (DL_DST_COUNT): Add __builtin_expect. + + * elf/dl-load.c (_dl_dst_count): Make DST recognition more robust. + (_dl_dst_substitute): Likewise. + +2001-03-17 Bruno Haible + + * intl/loadmsgcat.c (_nl_load_domain) [!_LIBC]: Use fstat, not fstat64. + +2001-03-17 Bruno Haible + + * intl/gettextP.h (struct expression): Add operators lnot, less_than, + greater_than, less_or_equal, greater_or_equal. Replace args2/args3 + union by a 'nargs' counter and an 'args[]' array. + * intl/plural.y: Don't include stdarg.h. + (new_exp): Take an array of arguments instead of varargs. + (new_exp_0, new_exp_1, new_exp_2, new_exp_3): New functions. + ('?' ':'): Make right-associative. + (EQUOP2): New token, replaces '=' and '!'. + (CMPOP2): New token. + (ADDOP2): New token, replaces '+' and '-'. + (MULOP2): New token, replaces '*', '/' and '%'. + ('!'): New token. + (exp): Add rules for CMPOP2 and '!'. Don't call YYABORT. + (start): Call YYABORT here. + (FREE_EXPRESSION): Update. + (yylex): Don't skip "\\n". Recognize comparison and '!' operators. + Update for new token symbols. + * intl/loadmsgcat.c (plvar, plone, germanic_plural, + init_germanic_plural): Update. + * intl/dcigettext.c (_nl_find_msg): Optimize for space. + (plural_eval): Recognize comparison and '!' operators. Optimize for + space. + +2001-03-10 Bruno Haible + + * intl/loadmsgcat.c (_nl_load_domain): locale_charset() doesn't return + NULL any more. + +2001-01-05 Bruno Haible + + * intl/loadmsgcat.c: Include headers needed for alloca(). + (freea): New macro. + (_nl_load_domain): Add fallback code for platforms lacking alloca. + * intl/localealias.c: (ADD_BLOCK, FREE_BLOCK): Remove macros. + (freea): New macro. + (read_alias_file): Simplify fallback code for platforms lacking + alloca. + +2001-01-07 Bruno Haible + + * intl/gettextP.h (__gettextdebug): Remove declaration. + (__gettext_free_exp, __gettextparse): Convert prototype to K&R C + syntax. + (gettext_free_exp__, gettextparse__): New non-libc declarations. + * intl/plural.y [!_LIBC]: Define gettextparse__, gettext_free_exp__, + not __gettextparse, __gettext_free_exp. + * intl/loadmsgcat.c [!_LIBC]: Use gettextparse__, not __gettextparse. + +2001-02-24 Bruno Haible + + * intl/dcigettext.c: Update comment about HAVE_LOCALE_NULL. + +2001-01-05 Bruno Haible + + * intl/loadmsgcat.c (_nl_load_domain): Add fallback code for platforms + lacking strtoul, like SunOS4. + +2001-01-05 Bruno Haible + + * intl/l10nflist.c (_nl_normalize_codeset): Use tolower, not _tolower. + +2001-01-05 Bruno Haible + + * intl/bindtextdom.c (set_binding_values): Convert prototype to K&R C + syntax. + * intl/dcigettext.c (transcmp): Convert to K&R C syntax. + * intl/explodename.c (_nl_find_language): Convert to K&R C syntax. + * intl/plural.y (__gettext_free_exp, yylex, yyerror): Convert to K&R C + syntax. + +2001-01-07 Bruno Haible + + * intl/gettextP.h (gettext__, dgettext__, dcgettext__, textdomain__, + bindtextdomain__, bind_textdomain_codeset__): New declarations, from + old libgettext.h. + * intl/bindtextdom.c: Include libgnuintl.h instead of libgettext.h. + * intl/dcgettext.c: Likewise. + * intl/dcigettext.c: Likewise. + * intl/dcngettext.c: Likewise. + * intl/dngettext.c: Likewise. + * intl/finddomain.c: Likewise. + * intl/ngettext.c: Likewise. + * intl/textdomain.c: Likewise. + * intl/dgettext.c: Include libgnuintl.h instead of libgettext.h. + Include gettextP.h. + * intl/gettext.c: Likewise. Don't include locale.h. + +2001-03-17 Bruno Haible + + * intl/gettextP.h (ZERO): New macro. + (struct binding): Always use ZERO. + * intl/bindtextdom.c (offsetof): Provide fallback for platforms that + lack it, like SunOS4. + (set_binding_values): Use offsetof, not sizeof. + * intl/dcigettext.c (offsetof): Provide fallback for platforms that + lack it, like SunOS4. + (ZERO): Remove macro. + (struct transmem_list): Use ZERO. + (DCIGETTEXT): Use offsetof, not sizeof. + +2001-03-17 Bruno Haible + + * intl/gettextP.h: Include . Include gettext.h, for + nls_uint32. + * intl/bindtextdom.c: Don't include gettext.h. + * intl/dcgettext.c: Likewise. + * intl/dcigettext.c: Likewise. + * intl/dcngettext.c: Likewise. + * intl/dngettext.c: Likewise. + * intl/finddomain.c: Likewise. + * intl/localealias.c: Likewise. + * intl/ngettext.c: Likewise. + * intl/plural.y: Likewise. + * intl/textdomain.c: Likewise. + +2001-03-17 Bruno Haible + + * intl/gettext.h: Don't include . + +2001-03-17 Bruno Haible + + * intl/Makefile (CPPFLAGS): Set LOCALEDIR instead of GNULOCALEDIR. + * intl/dcigettext.c (_nl_default_dirname): Initialize with LOCALEDIR. + +2001-03-19 Ulrich Drepper + + * sysdeps/unix/i386/i686/tempname.c: New file. + + * sysdeps/posix/tempname.c (__gen_tempname): If RANDOM_BITS is + defined use this macro to get some bits of randomness instead of + the usual gettimeofday or time calls. + +2001-03-16 Paul Eggert + + * sysdeps/posix/tempname.c (uint64_t): Define to uintmax_t if + not defined, and if UINT64_MAX is not defined. + +2001-03-19 Ulrich Drepper + + * elf/cache.c: Mark and have translated a few more messages. + +2001-03-19 Martin Schwidefsky + + * elf/cache.c: Add case for FLAG_S390_LIB64. + * sysdeps/generic/ldconfig.h: Add define for FLAG_S390_LIB64. + * sysdeps/unix/sysv/linux/s390/ldconfig.h: New file. + * sysdeps/unix/sysv/linux/s390/readelflib.c: New file. + +2001-03-19 Ulrich Drepper + + * string/Makefile (tests): Add tst-strxfrm. + * string/tst-strxfrm.c: New file. Based on a test case by Paul Eggert. + * string/Depend: New file. + +2001-03-19 Paul Eggert + + * string/strxfrm.c (strxfrm): strxfrm should return 0, not 1, + when given the empty string in nontrivial locales. + +2001-03-17 H.J. Lu + + * manual/Makefile (install): Use $(INSTALL_DATA) instead of + cp to install `dir'. + +2001-03-19 Andreas Schwab + + * Makerules (build-shlib): Make sure exit codes get checked + properly. + +2001-03-18 Ulrich Drepper + + * Makerules (build-shlib): Remove unnecessary slashes introduced in + last change. + + * configure.in: Test for -Bgroup option of linker. + * config.make.in: Define have-Bgroup. + + * conform/data/unistd.h-data: Require gethostname. + * posix/unistd.h: Make gethostname prototype available for + __USE_XOPEN2K. + + * crypt/Makefile: When generating DSO link with libc_nonshared.a. + * debug/Makefile: Likewise. + * dlfcn/Makefile: Likewise. + * hesiod/Makefile: Likewise. + * iconvdata/extra-module.mk: Likewise. + * locale/Makefile: Likewise. + * login/Makefile: Likewise. + * math/Makefile: Likewise. + * nis/Makefile: Likewise. + * nss/Makefile: Likewise. + * resolv/Makefile: Likewise. + * rt/Makefile: Likewise. + +2001-03-17 Ulrich Drepper + + * inet/Makefile (tests): Remove left-over comment. + + * posix/unistd.h (gethostname): Change type of second parameter + back to size_t as per upcoming XPG6. + * sysdeps/unix/sysv/aix/gethostname.c: Change type of second + parameter back to size_t as per upcoming XPG6. + * sysdeps/unix/sysv/sysv4/gethostname.c: Likewise. + * sysdeps/unix/sysv/gethostname.c: Likewise. + * sysdeps/mach/hurd/gethostname.c: Likewise. + * sysdeps/generic/gethostname.c: Likewise. + +2001-03-16 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r): + Handle NaN here. + + * sysdeps/unix/sysv/linux/ia64/makecontext.c (__makecontext): + Internationalize. + +2001-02-06 Jakub Jelinek + + * elf/dl-load.c (_dl_map_object): Don't test l_opencount when + looking for name matches. + +2001-02-26 Jakub Jelinek + + * sysdeps/generic/sigcontextinfo.h (CALL_SIGHANDLER): Define. + * sysdeps/mach/hurd/i386/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/arm/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/s390/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sh/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h: Likewise. + +2001-03-16 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/s_erfl.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/i386/fpu/libm-test-ulps: Adjust for addition of erfl and + erfcl. + * sysdeps/ia64/fpu/libm-test-ulps: Likewise. + +2001-03-16 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (struct sigcontext): + Drop hack that was needed for 2.1.1 kernel headers. + + * sysdeps/unix/sysv/linux/ia64/ucontext_i.h: New file. + + * sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Rewrite to make it + overlay with kernel's "struct sigcontext". + + * sysdeps/unix/sysv/linux/ia64/Makefile (sysdep_headers): Add + sys/rse.h for "misc" subdir. + (sysdep_routines): Add __start_context for "stdlib" subdir. + + * sysdeps/unix/sysv/linux/ia64/sys/rse.h: New file (based on + kernel file of the same name). + + * stdlib/Makefile (tests): Add tst-setcontext. + * stdlib/tst-setcontext.c: New file (based on a sample program by + Uli Drepper). + + * sysdeps/unix/sysv/linux/ia64/setcontext.S: New file. + * sysdeps/unix/sysv/linux/ia64/getcontext.S: New file. + * sysdeps/unix/sysv/linux/ia64/__start_context.S: New file. + * sysdeps/unix/sysv/linux/ia64/makecontext.c: New file. + * sysdeps/unix/sysv/linux/ia64/swapcontext.c: New file. + + * sysdeps/unix/sysv/linux/ia64/__longjmp.S (__longjmp): Use extr.u + instead of shift & and. + +2001-03-16 Martin Schwidefsky + + * sysdeps/s390/s390-64/bits/huge_val.h: Move to... + * sysdeps/s390/bits/huge_val.h: ...here. + * sysdeps/s390/s390-32/bit/huge_val.h: Remove. + * sysdeps/s390/s390-64/ffs.c: Move to... + * sysdeps/s390/ffs.c: ...here. + * sysdeps/s390/s390-32/ffs.c: Remove. + +2001-03-16 Jakub Jelinek + + * elf/ldconfig.c (search_dir): Remove bogus diagnostic, instead + update osversion from more recent library. + +2001-03-13 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/Dist: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/Dist: ...here. + * sysdeps/unix/sysv/linux/s390/Makefile: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/Makefile: ...here. + * sysdeps/unix/sysv/linux/s390/Versions: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/Versions: ...here. + * sysdeps/unix/sysv/linux/s390/alphasort64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c: ...here. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h: ...here. + * sysdeps/unix/sysv/linux/s390/bits/mman.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h: ...here. + * sysdeps/unix/sysv/linux/s390/bits/resource.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h: ...here. + * sysdeps/unix/sysv/linux/s390/bits/stat.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h: ...here. + * sysdeps/unix/sysv/linux/s390/chown.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/chown.c: ...here. + * sysdeps/unix/sysv/linux/s390/clone.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/clone.S: ...here. + * sysdeps/unix/sysv/linux/s390/fchown.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/fchown.c: ...here. + * sysdeps/unix/sysv/linux/s390/fcntl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: ...here. + * sysdeps/unix/sysv/linux/s390/fxstat.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c: ...here. + * sysdeps/unix/sysv/linux/s390/getdents64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c: ...here. + * sysdeps/unix/sysv/linux/s390/getegid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getegid.c: ...here. + * sysdeps/unix/sysv/linux/s390/geteuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getgroups.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c: ...here. + * sysdeps/unix/sysv/linux/s390/getresgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getresuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getrlimit.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c: ...here. + * sysdeps/unix/sysv/linux/s390/getrlimit64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c: ...here. + * sysdeps/unix/sysv/linux/s390/getuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/lchown.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/lchown.c: ...here. + * sysdeps/unix/sysv/linux/s390/lockf64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c: ...here. + * sysdeps/unix/sysv/linux/s390/lxstat.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c: ...here. + * sysdeps/unix/sysv/linux/s390/mmap.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/mmap.S: ...here. + * sysdeps/unix/sysv/linux/s390/mmap64.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S: ...here. + * sysdeps/unix/sysv/linux/s390/msgctl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c: ...here. + * sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c: ...here. + * sysdeps/unix/sysv/linux/s390/readdir64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c: ...here. + * sysdeps/unix/sysv/linux/s390/readdir64_r.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c: ...here. + * sysdeps/unix/sysv/linux/s390/register-dump.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h: ...here. + * sysdeps/unix/sysv/linux/s390/scandir64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c: ...here. + * sysdeps/unix/sysv/linux/s390/semctl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/semctl.c: ...here. + * sysdeps/unix/sysv/linux/s390/setegid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setegid.c: ...here. + * sysdeps/unix/sysv/linux/s390/seteuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setfsgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setfsuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setgroups.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c: ...here. + * sysdeps/unix/sysv/linux/s390/setregid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setregid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setresgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setresuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setreuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setrlimit.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c: ...here. + * sysdeps/unix/sysv/linux/s390/setuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/shmctl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c: ...here. + * sysdeps/unix/sysv/linux/s390/socket.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/socket.S: ...here. + * sysdeps/unix/sysv/linux/s390/sys/procfs.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h: ...here. + * sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: ...here. + * sysdeps/unix/sysv/linux/s390/syscall.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/syscall.S: ...here. + * sysdeps/unix/sysv/linux/s390/syscalls.list: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list: ...here. + * sysdeps/unix/sysv/linux/s390/sysdep.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: ...here. + * sysdeps/unix/sysv/linux/s390/sysdep.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: ...here. + * sysdeps/unix/sysv/linux/s390/versionsort64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c: ...here. + * sysdeps/unix/sysv/linux/s390/xstat.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/xstat.c: ...here. + +2001-03-13 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-64/Dist: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/Makefile: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/clone.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getdents.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/glob.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/glob64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/mmap.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/pread64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c : New file. + * sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/socket.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/xstat.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c: New file. + +2001-03-13 Martin Schwidefsky + + * sysdeps/s390/Dist: Move to... + * sysdeps/s390/390-32/Dist: ...here. + * sysdeps/s390/Implies: Move to... + * sysdeps/s390/s390-32/Implies: ...here. + * sysdeps/s390/Makefile: Move to... + * sysdeps/s390/s390-32/Makefile: ...here. + * sysdeps/s390/Versions: Move to... + * sysdeps/s390-32/s390/Versions: ...here. + * sysdeps/s390/add_n.S: Move to... + * sysdeps/s390/s390-32/add_n.S: ...here. + * sysdeps/s390/addmul_1.S: Move to... + * sysdeps/s390/s390-32/addmul_1.S: ...here. + * sysdeps/s390/atomicity.h: Move to... + * sysdeps/s390/s390-32/atomicity.h: ...here. + * sysdeps/s390/backtrace.c: Move to... + * sysdeps/s390/s390-32/backtrace.c: ...here. + * sysdeps/s390/bcopy.S: Move to... + * sysdeps/s390/s390-32/bcopy.S: ...here. + * sysdeps/s390/bits/byteswap.h: Move to... + * sysdeps/s390/s390-32/bits/byteswap.h: ...here. + * sysdeps/s390/bits/huge_val.h: Move to... + * sysdeps/s390/s390-32/bits/huge_val.h: ...here. + * sysdeps/s390/bsd-_setjmp.S: Move to... + * sysdeps/s390/s390-32/bsd-_setjmp.S: ...here. + * sysdeps/s390/bsd-setjmp.S: Move to... + * sysdeps/s390/s390-32/bsd-setjmp.S: ...here. + * sysdeps/s390/bzero.S: Move to... + * sysdeps/s390/s390-32/bzero.S: ...here. + * sysdeps/s390/elf/bsd-_setjmp.S: Move to... + * sysdeps/s390/s390-32/elf/bsd-_setjmp.S: ...here. + * sysdeps/s390/elf/bsd-setjmp.S: Move to... + * sysdeps/s390/s390-32/elf/bsd-setjmp.S: ...here. + * sysdeps/s390/elf/start.S: Move to... + * sysdeps/s390/s390-32/elf/start.S: ...here. + * sysdeps/s390/ffs.c: Move to... + * sysdeps/s390/s390-32/ffs.c: ...here. + * sysdeps/s390/memchr.S: Move to... + * sysdeps/s390/s390-32/memchr.S: ...here. + * sysdeps/s390/memcpy.S: Move to... + * sysdeps/s390/s390-32/memcpy.S: ...here. + * sysdeps/s390/memset.S: Move to... + * sysdeps/s390/s390-32/memset.S: ...here. + * sysdeps/s390/mul_1.S: Move to... + * sysdeps/s390/s390-32/mul_1.S: ...here. + * sysdeps/s390/s390-mcount.S: Move to... + * sysdeps/s390/s390-32/s390-mcount.S: ...here. + * sysdeps/s390/strcpy.S: Move to... + * sysdeps/s390/s390-32/strcpy.S: ...here. + * sysdeps/s390/strncpy.S: Move to... + * sysdeps/s390/s390-32/strncpy.S: ...here. + * sysdeps/s390/sub_n.S: Move to... + * sysdeps/s390/s390-32/sub_n.S: ...here. + +2001-03-13 Martin Schwidefsky + + * sysdeps/s390/s390-64/Dist: New file. + * sysdeps/s390/s390-64/Implies: New file. + * sysdeps/s390/s390-64/Makefile: New file. + * sysdeps/s390/s390-64/__longjmp.c: New file. + * sysdeps/s390/s390-64/add_n.S: New file. + * sysdeps/s390/s390-64/atomicity.h: New file. + * sysdeps/s390/s390-64/backtrace.c: New file. + * sysdeps/s390/s390-64/bcopy.S: New file. + * sysdeps/s390/s390-64/bits/byteswap.h: New file. + * sysdeps/s390/s390-64/bits/huge_val.h: New file. + * sysdeps/s390/s390-64/bits/setjmp.h: New file. + * sysdeps/s390/s390-64/bits/string.h: New file. + * sysdeps/s390/s390-64/bsd-_setjmp.S: New file. + * sysdeps/s390/s390-64/bsd-setjmp.S: New file. + * sysdeps/s390/s390-64/bzero.S: New file. + * sysdeps/s390/s390-64/dl-machine.h: New file. + * sysdeps/s390/s390-64/elf/bsd-_setjmp.S: New file. + * sysdeps/s390/s390-64/elf/bsd-setjmp.S: New file. + * sysdeps/s390/s390-64/elf/setjmp.S: New file. + * sysdeps/s390/s390-64/elf/start.S: New file. + * sysdeps/s390/s390-64/ffs.c: New file. + * sysdeps/s390/s390-64/initfini.c: New file. + * sysdeps/s390/s390-64/memchr.S: New file. + * sysdeps/s390/s390-64/memcpy.S: New file. + * sysdeps/s390/s390-64/memset.S: New file. + * sysdeps/s390/s390-64/s390x-mcount.S: New file. + * sysdeps/s390/s390-64/setjmp.S: New file. + * sysdeps/s390/s390-64/strcpy.S: New file. + * sysdeps/s390/s390-64/strncpy.S: New file. + * sysdeps/s390/s390-64/sub_n.S: New file. + * sysdeps/s390/s390-64/sysdep.h: New file. + +2001-03-13 Martin Schwidefsky + + * scripts/config.guess: Add support for Linux on 64 bit S/390. + * scripts/config.sub: Likewise. + +2001-03-13 Martin Schwidefsky + + * configure.in: Add support for 64 bit S/390. + + * elf/elf.h: Add new relocations for 64 bit S/390. + + * shlib-versions: Add rules for Linux on 64 bit S/390. + +2001-03-13 Martin Schwidefsky + + * sysdeps/s390/__longjmp.c: Move to... + * sysdeps/s390/s390-32/__longjmp.c: ...here. Add code + to load the floating point registers that should be saved + according to the ABI. + + * sysdeps/s390/bits/setjmp.h: Move to... + * sysdeps/s390/s390-32/bits/setjmp.h: ...here. Avoid + the use of long long in the __jmp_buf type definition. + + * sysdeps/s390/bits/string.h: Move to... + * sysdeps/s390/s390-32/bits/string.h: ...here. Add several missing + #ifndef _FORCE_INLINES. + + * sysdeps/s390/dl-machine.h: Move to... + * sysdeps/s390/s390-32/dl-machine.h: ...here. Add a check for the + executables EI_CLASS in elf_machine_matches_host. + + * sysdeps/s390/elf/setjmp.S: Move to... + * sysdeps/s390/s390-32/elf/setjmp.S: ...here. Replace + branches to globally defined symbol __sigsetjmp by branches to + a local label (this avoids the generation of a R_390_PC16DBL + relocation in -fpic code). + + * sysdeps/s390/gmp-mparam.h: Use defines from to + calculate BITS_PER_MP_LIMB, BYTES_PER_MP_LIMB and BITS_PER_LONGINT. + + * sysdeps/s390/initfini.c: Move to... + * sysdeps/s390/s390-32/initfini.c: ...here. Replace ALIGN with + ".align 4,0x07". + + * sysdeps/s390/setjmp.S: Move to... + * sysdeps/s390/s390-32/setjmp.S: ...here. Add code to store the + floating point registers that should be saved according to the ABI. + + * sysdeps/s390/sys/ucontext.h: Remove since it is unused. + + * sysdeps/unix/sysv/linux/s390/sysdep.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: ...here. Include + sysdeps/s390/s390-32/sysdep.h instead of sysdeps/s390/sysdep.h. + +2001-03-13 Martin Schwidefsky + + * configure.in: Change machine=s390 to machine=s390/s390-32. + + * elf/elf.h: Correct comment for R_390_PLT16DBL. + +2001-03-12 Jakub Jelinek + + * csu/Makefile (abi-tag.h): Define OS and version separately, allow + version to be overriden from config.h. + * csu/abi-note.S: Use OS and version separately, include config.h. + * elf/dl-load.c (_dl_osversion): New. + (_dl_map_object_from_fd): Kill some warnings. + (open_verify): Check .note.ABI-tag of the library if present. + * elf/Makefile (CPPFLAGS-dl-load.c): Add -I$(csu-objpfx). + * elf/cache.c (struct cache_entry): Add osversion. + (print_entry): Print osversion. + (print_cache): Pass osversion to it. + (compare): Sort according to osversion. + (save_cache): Set osversion. + (add_to_cache): Add osversion argument. + * sysdeps/generic/ldconfig.h (add_to_cache, process_file, + process_elf_file): Add osversion argument. + * elf/readlib.c (process_file): Likewise. + * sysdeps/generic/readelflib.c (process_elf_file): Likewise. + * sysdeps/unix/sysv/linux/ia64/readelflib.c (process_elf_file, + process_elf32_file, process_elf64_file): Likewise. + * sysdeps/unix/sysv/linux/i386/readelflib.c (process_elf_file, + process_elf32_file, process_elf64_file): Likewise. + * sysdeps/unix/sysv/linux/sparc/readelflib.c (process_elf_file, + process_elf32_file, process_elf64_file): Likewise. + * elf/ldconfig.c (manual_link): Pass it. + (search_dir): Issue diagnostic if two libs with the same soname in + the same directory have different .note.ABI-tag. Record osversion in + dlib_entry and use it from there. + (struct lib_entry): Remove. + (struct dlib_entry): Add osversion. + * sysdeps/generic/dl-cache.c (_dl_load_cache_lookup): Check + osversion. + * sysdeps/generic/dl-cache.h (struct file_entry_new): Replace __unused + field with osversion. + * sysdeps/generic/ldsodefs.h (_dl_osversion): Declare. + * sysdeps/unix/sysv/linux/init-first.c: Include ldsodefs.h. + * sysdeps/unix/sysv/linux/dl-osinfo.h (DL_SYSDEP_OSCHECK): Save kernel + version in _dl_osversion. + * sysdeps/unix/sysv/linux/configure.in: Define __ABI_TAG_VERSION. + * Makerules (build-shlib-helper, build-module-helper): New. + (build-shlib, build-module-helper): Make sure .note.ABI-tag comes + early. + * config.h.in (__ABI_TAG_VERSION): Add. + * elf/dl-minimal.c (__strtoul_internal): Set endptr on return. + * sysdeps/unix/sysv/linux/i386/dl-librecon.h (EXTRA_LD_ENVVARS): + Handle LD_ASSUME_KERNEL. + * sysdeps/unix/sysv/linux/dl-librecon.h: New. + +2001-03-15 Ulrich Drepper + + * timezone/antarctica: Update from tzdata2001a. + * timezone/asia: Likewise. + * timezone/australasia: Likewise. + * timezone/backward: Likewise. + * timezone/etcetera: Likewise. + * timezone/europe: Likewise. + * timezone/leapseconds: Likewise. + * timezone/northamerica: Likewise. + * timezone/southamerica: Likewise. + * timezone/systemv: Likewise. + * timezone/yearistype: Likewise. + * timezone/zone.tab: Likewise. + * timezone/tzdump.c: Update from tzcode2001a. + +2001-03-15 H.J. Lu + + * intl/Makefile: Fix a typo. + +2001-03-14 David Mosberger + + * gmon/gmon.c (write_call_graph): Avoid unaligned accesses when + writing arc structures. + +2001-03-15 H.J. Lu + + * elf/Makefile ($(objpfx)tst-pathopt.out): Protected against + cross-compiling. + +2001-03-13 Andreas Schwab + + * posix/PTESTS2C.sed: Replace literal CRs by `\r'. + +2001-03-15 Ulrich Drepper + + * sysdeps/unix/sysv/linux/cmsg_nxthdr.c (__cmsg_nxthdr): Fix test + for control message fitting into message data. + Patch by James Antill . + + * posix/tst-fnmatch.input: Add test case for FNM_PERIOD handling with + FNM_EXTMATCH. + + * posix/fnmatch_loop.c: Optimize handling of ?() and @(). + * posix/fnmatch.c: Define STRLEN and STRCAT appropriately. + + * posix/Versions [libc] (GLIBC_2.2.3): Add fnmatch. + * posix/fnmatch.c: Define with new default version GLIBC_2.2.3 to + avoid running binaries with libc versions without FNM_EXTMATCH support. + + * include/wchar.h: Add prototype for __wcscat. + * wcsmbs/wcscat.c: Define __wcscat and make wcscat weak alias. + + * posix/fnmatch.h (FNM_EXTMATCH): Define. + * posix/fnmatch.c (NO_LEADING_PERIOD): Define. + (posixly_correct): Move global variable here. + (INT, EXT, END): Name new functions defined in fnmatch_loop.c. + (fnmatch): Pretty printing. + * posix/fnmatch_loop.c: Add code to handle FNM_EXTMATCH. + * posix/tst-fnmatch.c: Recognize EXTMATCH flag. + * posix/tst-fnmatch.input: Add tests for extended matching. + + * posix/testfnm.c: Add test for patterns with multiple ** before /. + * posix/fnmatch_loop.c: Fix problem with the test above. + +2001-03-14 Ulrich Drepper + + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Remove + reference to usqrt. + + * resolv/res_data.c (fp_nquery): Call __res_ninit not __res_init. + +2001-03-12 Andreas Jaeger + + * sysdeps/unix/sysv/linux/i386/readelflib.c (process_elf_file): + Use EM_X86_64 instead of EM_X8664. + +2001-03-12 Ulrich Drepper + + * sysdeps/ieee754/dbl-64/upow.h: Define nZERO and nINF. + + * sysdeps/ieee754/dbl-64/e_remainder.c: Fix handling of boundary + conditions. + + * sysdeps/ieee754/dbl-64/e_pow.c: Fix handling of boundary + conditions. + + * sysdeps/ieee754/dbl-64/s_sin.c (__sin): Handle Inf and NaN + correctly. + (__cos): Likewise. + + * sysdeps/ieee754/dbl-64/e_asin.c (__ieee754_asin): Handle NaN + correctly. + (__ieee754_acos): Likewise. + +2001-03-12 Andreas Jaeger + + * sysdeps/unix/sysv/linux/s390/sysdep.h (_LINUX_S390_SYSDEP_H): + Fix typo. Patch by Martin Schwidefsky . + + * sysdeps/s390/bits/string.h: Protect __STRING_INLINE against + redefinition. + +2001-03-11 Roland McGrath + + * sysdeps/mach/hurd/configure.in: Add a sanity check on $prefix. + +2001-03-11 Ulrich Drepper + + * sysdeps/ieee754/dbl-64/endian.h: Define also one of BIG_ENDI and + LITTLE_ENDI. + + * sysdeps/ieee754/dbl-64/MathLib.h (Init_Lib): Use void as + parameter list. + + Last-bit accurate math library implementation by IBM Haifa. + Contributed by Abraham Ziv , Moshe Olshansky + , Ealan Henis , and + Anna Reitman . + * math/Makefile (dbl-only-routines): New variable. + (libm-routines): Add $(dbl-only-routines). + * sysdeps/ieee754/dbl-64/e_acos.c: Empty, definition is in e_asin.c. + * sysdeps/ieee754/dbl-64/e_asin.c: Replaced with accurate asin + implementation. + * sysdeps/ieee754/dbl-64/e_atan2.c: Replaced with accurate atan2 + implementation. + * sysdeps/ieee754/dbl-64/e_exp.c: Replaced with accurate exp + implementation. + * sysdeps/ieee754/dbl-64/e_lgamma_r.c: Don't use __kernel_sin and + __kernel_cos. + * sysdeps/ieee754/dbl-64/e_log.c: Replaced with accurate log + implementation. + * sysdeps/ieee754/dbl-64/e_remainder.c: Replaced with accurate + remainder implementation. + * sysdeps/ieee754/dbl-64/e_pow.c: Replaced with accurate pow + implementation. + * sysdeps/ieee754/dbl-64/e_sqrt.c: Replaced with accurate sqrt + implementation. + * sysdeps/ieee754/dbl-64/k_cos.c: Empty, definition is in s_sin.c. + * sysdeps/ieee754/dbl-64/k_sin.c: Empty, definition is in s_sin.c. + * sysdeps/ieee754/dbl-64/s_atan.c: Replaced with accurate atan + implementation. + * sysdeps/ieee754/dbl-64/s_cos.c: Empty, definition is in s_sin.c. + * sysdeps/ieee754/dbl-64/s_sin.c: Replaced with accurate sin/cos + implementation. + * sysdeps/ieee754/dbl-64/s_sincos.c: Rewritten to not use __kernel_sin + and __kernel_cos. + * sysdeps/ieee754/dbl-64/s_tan.c: Replaced with accurate tan + implementation. + * sysdeps/ieee754/dbl-64/Dist: Add new non-code files. + * sysdeps/ieee754/dbl-64/MathLib.h: New file. + * sysdeps/ieee754/dbl-64/asincos.tbl: New file. + * sysdeps/ieee754/dbl-64/atnat.h: New file. + * sysdeps/ieee754/dbl-64/atnat2.h: New file. + * sysdeps/ieee754/dbl-64/branred.c: New file. + * sysdeps/ieee754/dbl-64/branred.h: New file. + * sysdeps/ieee754/dbl-64/dla.h: New file. + * sysdeps/ieee754/dbl-64/doasin.c: New file. + * sysdeps/ieee754/dbl-64/doasin.h: New file. + * sysdeps/ieee754/dbl-64/dosincos.c: New file. + * sysdeps/ieee754/dbl-64/dosincos.h: New file. + * sysdeps/ieee754/dbl-64/endian.h: New file. + * sysdeps/ieee754/dbl-64/halfulp.c: New file. + * sysdeps/ieee754/dbl-64/mpa.c: New file. + * sysdeps/ieee754/dbl-64/mpa.h: New file. + * sysdeps/ieee754/dbl-64/mpa2.h: New file. + * sysdeps/ieee754/dbl-64/mpatan.c: New file. + * sysdeps/ieee754/dbl-64/mpatan.h: New file. + * sysdeps/ieee754/dbl-64/mpatan2.c: New file. + * sysdeps/ieee754/dbl-64/mpexp.c: New file. + * sysdeps/ieee754/dbl-64/mpexp.h: New file. + * sysdeps/ieee754/dbl-64/mplog.c: New file. + * sysdeps/ieee754/dbl-64/mplog.h: New file. + * sysdeps/ieee754/dbl-64/mpsqrt.c: New file. + * sysdeps/ieee754/dbl-64/mpsqrt.h: New file. + * sysdeps/ieee754/dbl-64/mptan.c: New file. + * sysdeps/ieee754/dbl-64/mydefs.h: New file. + * sysdeps/ieee754/dbl-64/powtwo.tbl: New file. + * sysdeps/ieee754/dbl-64/root.tbl: New file. + * sysdeps/ieee754/dbl-64/sincos.tbl: New file. + * sysdeps/ieee754/dbl-64/sincos32.c: New file. + * sysdeps/ieee754/dbl-64/sincos32.h: New file. + * sysdeps/ieee754/dbl-64/slowexp.c: New file. + * sysdeps/ieee754/dbl-64/slowpow.c: New file. + * sysdeps/ieee754/dbl-64/uasncs.h: New file. + * sysdeps/ieee754/dbl-64/uatan.tbl: New file. + * sysdeps/ieee754/dbl-64/uexp.h: New file. + * sysdeps/ieee754/dbl-64/uexp.tbl: New file. + * sysdeps/ieee754/dbl-64/ulog.h: New file. + * sysdeps/ieee754/dbl-64/ulog.tbl: New file. + * sysdeps/ieee754/dbl-64/upow.h: New file. + * sysdeps/ieee754/dbl-64/upow.tbl: New file. + * sysdeps/ieee754/dbl-64/urem.h: New file. + * sysdeps/ieee754/dbl-64/uroot.h: New file. + * sysdeps/ieee754/dbl-64/usncs.h: New file. + * sysdeps/ieee754/dbl-64/utan.h: New file. + * sysdeps/ieee754/dbl-64/utan.tbl: New file. + * sysdeps/i386/fpu/branred.c: New file. + * sysdeps/i386/fpu/doasin.c: New file. + * sysdeps/i386/fpu/dosincos.c: New file. + * sysdeps/i386/fpu/halfulp.c: New file. + * sysdeps/i386/fpu/mpa.c: New file. + * sysdeps/i386/fpu/mpatan.c: New file. + * sysdeps/i386/fpu/mpatan2.c: New file. + * sysdeps/i386/fpu/mpexp.c: New file. + * sysdeps/i386/fpu/mplog.c: New file. + * sysdeps/i386/fpu/mpsqrt.c: New file. + * sysdeps/i386/fpu/mptan.c: New file. + * sysdeps/i386/fpu/sincos32.c: New file. + * sysdeps/i386/fpu/slowexp.c: New file. + * sysdeps/i386/fpu/slowpow.c: New file. + * sysdeps/ia64/fpu/branred.c: New file. + * sysdeps/ia64/fpu/doasin.c: New file. + * sysdeps/ia64/fpu/dosincos.c: New file. + * sysdeps/ia64/fpu/halfulp.c: New file. + * sysdeps/ia64/fpu/mpa.c: New file. + * sysdeps/ia64/fpu/mpatan.c: New file. + * sysdeps/ia64/fpu/mpatan2.c: New file. + * sysdeps/ia64/fpu/mpexp.c: New file. + * sysdeps/ia64/fpu/mplog.c: New file. + * sysdeps/ia64/fpu/mpsqrt.c: New file. + * sysdeps/ia64/fpu/mptan.c: New file. + * sysdeps/ia64/fpu/sincos32.c: New file. + * sysdeps/ia64/fpu/slowexp.c: New file. + * sysdeps/ia64/fpu/slowpow.c: New file. + * sysdeps/m68k/fpu/branred.c: New file. + * sysdeps/m68k/fpu/doasin.c: New file. + * sysdeps/m68k/fpu/dosincos.c: New file. + * sysdeps/m68k/fpu/halfulp.c: New file. + * sysdeps/m68k/fpu/mpa.c: New file. + * sysdeps/m68k/fpu/mpatan.c: New file. + * sysdeps/m68k/fpu/mpatan2.c: New file. + * sysdeps/m68k/fpu/mpexp.c: New file. + * sysdeps/m68k/fpu/mplog.c: New file. + * sysdeps/m68k/fpu/mpsqrt.c: New file. + * sysdeps/m68k/fpu/mptan.c: New file. + * sysdeps/m68k/fpu/sincos32.c: New file. + * sysdeps/m68k/fpu/slowexp.c: New file. + * sysdeps/m68k/fpu/slowpow.c: New file. + + * iconvdata/gconv-modules: Add a number of alias, mostly for IBM + codepages. + +2001-03-11 Andreas Jaeger + + * elf/elf.h (EM_*): Synch with official list. + +2001-03-07 David Mosberger + + * sysdeps/ia64/bits/fenv.h (FE_NONIEEE_ENV): New macro. + +2001-03-07 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/ioperm.c (_ioperm): Remove unused + variables addr & len. + +2001-02-22 Jes Sorensen + + * sysdeps/ia64/fpu/feenablxcpt.c (feenableexcept): Remove + punctuation in asm constraint. + +2001-03-07 Mark Kettenis + + * resolv/netdb.h [__USE_GNU]: Define __need_timespec and include + to get definition of `struct timespec'. + +2001-03-08 Jakub Jelinek + + * elf/rtld.c (dl_main): If tracing, warn about undefined symbols if + LD_WARN=1, not if LD_WARN is unset. + +2001-03-07 Andreas Schwab + + * elf/ldconfig.h: Moved to ... + * sysdeps/generic/ldconfig.h: ... here. + * sysdeps/unix/sysv/linux/i386/ldconfig.h: New file. + * sysdeps/unix/sysv/linux/m68k/ldconfig.h: New file. + * sysdeps/unix/sysv/linux/ia64/ldconfig.h: New file. + * elf/readlib.c (interpreters, known_libs): Use + SYSDEP_KNOWN_INTERPRETER_NAMES and SYSDEP_KNOWN_LIBRARY_NAMES + instead of hard coding old names. + +2001-03-09 Ulrich Drepper + + * catgets/Makefile (generated): Add test-gencat.h. + (sample.SJIS.cat): Also generate header. + * catgets/sample.SJIS: Add new set and message, both with symbolic + names. + * catgets/test-gencat.sh: Also compare generated header with what + we expect. + +2001-03-07 Jakub Jelinek + + * catgets/gencat.c (read_input_file): Preserve properly symbolic + names. + +2001-03-06 Andreas Jaeger + + * sysdeps/s390/dl-machine.h (elf_machine_relplt): Removed, it's not + needed. + (elf_machine_pltrel_p): Likewise. + * sysdeps/powerpc/dl-machine.h: Likewise. + * sysdeps/generic/dl-machine.h (elf_machine_pltrel_p): Likewise. + +2001-03-09 Ulrich Drepper + + * sysdeps/unix/sysv/linux/arm/Dist: Add dl-procinfo.c and + dl-procinfo.h. + +2001-03-05 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/dl-procinfo.c: New file. + * sysdeps/unix/sysv/linux/arm/dl-procinfo.h: New file. + * sysdeps/unix/sysv/linux/arm/Makefile [subdir=elf] + (sysdep-dl-routines, sysdep_routines, sysdep-rtld-routines): Add + dl-procinfo. + +2001-03-09 Ulrich Drepper + + * dlfcn/tstatexit.c (main): Don't perform the test if __dso_handle + is not available. + * dlfcn/tstcxaatexit.c (main): Likewise. + +2001-03-10 Andreas Jaeger + + * sysdeps/i386/fpu/libm-test-ulps: Revert last patch. + +2001-03-09 Andreas Jaeger + + * sysdeps/s390/dl-machine.h (elf_machine_matches_host): Handle + both new and old EM_S390 values. + (EM_S390_OLD): New constant. + + * elf/elf.h (EM_S390): Use official value. + +2001-03-09 Ulrich Drepper + + * conform/data/sys/socket.h-data: Allow SO* symbols. + +2001-03-07 Andreas Schwab + + * sysdeps/ia64/fpu/Makefile: Modify sysdep_routines instead of + routines, and sysdep-CPPFLAGS instead of CPPFLAGS. + +2001-03-07 Andreas Jaeger + + * resolv/Makefile (routines): Only build gai_sigqueue when threads + are available. + +2001-03-07 Jakub Jelinek + + * elf/ldconfig.c (_dl_sysdep_message): Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Include + ldsodefs.h. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise. + + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Use + _dl_error_printf instead of _dl_sysdep_error. + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h (_dl_procinfo): + Use _dl_printf instead of _dl_sysdep_message. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h (_dl_procinfo): + Likewise. + +2001-03-06 Ben Collins + + * manual/arith.texi (Integers): Fix documentation of fast and + least integer typedefs. + +2001-03-06 Jakub Jelinek + + * resolv/Depend: New file. + * resolv/Makefile (extra-libs, tests): Build libanl and ga_test only + when libpthread is built. + +2001-03-06 Andreas Jaeger + + * sysdeps/i386/fpu/libm-test-ulps: Add some deltas. + + * sysdeps/sh/dl-machine.h (elf_machine_rela): Add missing comma. + Patch by kaz Kojima . + +2001-03-05 Ulrich Drepper + + * stdlib/Versions: Remove __new_exitfn again. Not needed. + +2001-03-05 Andreas Jaeger + + * stdlib/msort.c (qsort): Don't use alloca in a function call. + +2001-03-05 Ulrich Drepper + + * sysdeps/unix/sysv/linux/bits/stat.h (__S_TYPEISMQ, __S_TYPEISSEM, + __S_TYPEISSHM): Rewrite to enforce correct use the macros. They still + always return zero. + * sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/m68k/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise. + +2001-03-04 Andreas Jaeger + + * stdlib/longlong.h: Don't use multi-line strings. + * iconvdata/tst-loading.c: Likewise. + + * csu/Makefile ($(objpfx)version-info.h): Don't use multi-line + string. + +2001-03-04 Ulrich Drepper + + * sysdeps/ia64/fpu/libm-test-ulps: Adjust for addition of lgammal. + + * rt/lio_listio.c: Add a few asserts. + + * elf/global.c: New file. + * elf/globalmod1.c: New file. + * elf/Makefile: Add rules to build and run global. + + * sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Define SI_ASYNCNL. + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Likewise. + + * sysdeps/ieee754/ldbl-96/e_lgammal_r.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/ieee754/ldbl-96/e_gammal_r.c: Fix handling of boundary cases. + + * sysdeps/ieee754/dbl-64/e_gamma_r.c: Always initialize sign variable. + * sysdeps/ieee754/flt-32/e_gammaf_r.c: Likewise. + + * sysdeps/i386/fpu/libm-test-ulps: Adjust after addition of lgammal. + + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Fix typo in last change. + +2001-03-04 Andreas Jaeger + + * resolv/tst-aton.c: Add testcase for IP with four periods. + + * resolv/inet_addr.c: Don't recognize an IP with four periods. + Patch by Andre' Breiler . + +2001-02-27 Philip Blundell + + * elf/elf.h: Add new ARM definitions from latest (B-01) + specification. Correct naming of EF_ARM_ALIGN8 et al. + +2001-03-04 Ulrich Drepper + + * stdio-common/tst-printf.sh: Remove bashisms. + Patch by Matthew Clarke . + +2001-03-03 Ulrich Drepper + + * Versions.def: Add libanl definition. + * shlib-versions: Add entry for libanl. + * resolv/Makefile (distribute): Add gai_misc.h and ga_test.c. + (routines): Add gai_sigqueue. + (extra-libs): Add libanl. + (libanl-routines): New variable. + Add rules to build libanl and ga_test. + * resolv/Versions [libc] (GLIBC_2.2.3): Add __gai_sigqueue. + [libanl]: New library. + * resolv/netdb.h: Add definitions for libanl. + * resolv/getaddrinfo_a.c: New file. + * resolv/gai_cancel.c: New file. + * resolv/gai_error.c: New file. + * resolv/gai_misc.c: New file. + * resolv/gai_misc.h: New file. + * resolv/gai_notify.c: New file. + * resolv/gai_suspend.c: New file. + * resolv/ga_test.c: New file. + * sysdeps/generic/gai_sigqueue.c: New file. + * sysdeps/unix/sysv/linux/gai_sigqueue.c: New file. + * sysdeps/generic/bits/siginfo.h: Allow __need_sigevent_t being defined + and provide only that definition. + * sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Likewise. + + * rt/aio_misc.c: Fix typos in comments. + * rt/lio_listio.c: Pretty printing. Little optimization in request + list handling. + + * elf/rtld.c: Remove commented out code. + + * sysdeps/unix/sysv/linux/linux_fsinfo.h (SHMFS_SUPER_MAGIC): + Update for real 2.4 kernels. + +2001-03-01 Ulrich Drepper + + * elf/dl-load.c: Pretty printing. + + * elf/dl-object.c (_dl_new_object): Don't add the loader's scope + twice. + +2001-02-28 Ulrich Drepper + + * sysdeps/alpha/dl-machine.h (elf_machine_rela): Don't handle + relocations which are not in ld.so if RTLD_BOOTSTRAP is defined. + + * sysdeps/powerpc/dl-machine.c (__process_machine_rela): Fix typo. + + * elf/dl-misc.c (_dl_debug_vdprintf): Fix typo visible on 64-bit + machines. + + * sysdeps/unix/sysv/linux/powerpc/sysdep.h (C_TEXT): Define. + +2001-02-27 Ulrich Drepper + + * sysdeps/powerpc/elf/libc-start.c: Use new output functions and + _dl_debug_mask. + + * elf/Versions [ld]: Don't export _dl_debug_message anymore. Export + _dl_debug_printf. + * elf/dl-misc.c: Remove definition of _dl_sysdep_output and + _dl_debug_message. Define _dl_debug_vdprintf, _dl_debug_printf, + _dl_debug_printf_c, and _dl_printf. + * sysdeps/generic/ldsodefs.h: Don't declare _dl_sysdep_output, + _dl_debug_message, _dl_sysdep_message, _dl_sysdep_error, and + _dl_sysdep_fatal. Declare _dl_debug_printf, _dl_debug_printf_c, + _dl_printf, _dl_error_printf, and _dl_fatal_printf. + * elf/dl-close.c: Replace use of old output functions with the new + ones. + * elf/dl-deps.c: Likewise. + * elf/dl-error.c: Likewise. + * elf/dl-fini.c: Likewise. + * elf/dl-init.c: Likewise. + * elf/dl-load.c: Likewise. + * elf/dl-lookup.c: Likewise. + * elf/dl-minimal.c: Likewise. + * elf/dl-open.c: Likewise. + * elf/dl-profile.c: Likewise. + * elf/dl-reloc.c: Likewise. + * elf/dl-version.c: Likewise. + * elf/do-lookup.h: Likewise. + * elf/rtld.c: Likewise. + * sysdeps/generic/dl-cache.c: Likewise. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + * sysdeps/i386/dl-machine.h: Likewise. + * sysdeps/arm/dl-machine.h: Likewise. + * sysdeps/hppa/dl-machine.h: Likewise. + * sysdeps/m68k/dl-machine.h: Likewise. + * sysdeps/powerpc/dl-machine.h: Likewise. + * sysdeps/s390/dl-machine.h: Likewise. + * sysdeps/sh/dl-machine.h: Likewise. + * sysdeps/unix/sysv/linux/dl-osinfo.h: Likewise. + * sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise. + * sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Likewise. + + * sysdeps/generic/ldsodefs.h: Remove _dl_secure declaration. + + * dlfcn/Makefile: Don't run tstatexit test unless .hidden is + supported by assembler. + + * sysdeps/generic/ldsodefs.h: Remove commented-out variable + declaractions. + + * elf/rtld.c: Little optimizations in handling _dl_lazy. + + * elf/cache.c (save_cache): Portability changes. + * elf/dl-profile.c (_dl_start_profile): Likewise. + + * elf/sln.c: Cleanups. Remove arbitrary limits. + + * elf/dl-close.c: Replace _dl_debug_* variables with _dl_debug_mask. + * elf/dl-deps.c: Likewise. + * elf/dl-fini.c: Likewise. + * elf/dl-init.c: Likewise. + * elf/dl-load.c: Likewise. + * elf/dl-lookup.c: Likewise. + * elf/dl-open.c: Likewise. + * elf/dl-reloc.c: Likewise. + * elf/dl-support.c: Likewise. + * elf/dl-version.c: Likewise. + * elf/do-lookup.h: Likewise. + * elf/rtld.c: Likewise. + * sysdeps/generic/dl-cache.c: Likewise. + * sysdeps/generic/ldsodefs.h: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + * elf/Versions: Don't export _dl_debug_impcalls and _dl_debug_files. + Export _dl_debug_mask. + * Versions.def: Define GLIBC_2.2.3 for ld. + +2001-02-26 Greg McGary + + * sysdeps/unix/make-syscalls.sh (ptr): Handle `V' keyletter. + +2001-02-26 Paul Eggert + + Modify mkstemp.c and tempname.c so that they can be used by + GNU applications on non-glibc platforms. + + * misc/mkstemp.c (__GT_FILE): Define to zero if not defined. + + * sysdeps/posix/tempname.c: Include if HAVE_CONFIG_H. + Include , , only if + STDC_HEADERS || _LIBC. + Include only if HAVE_FCNTL_H || _LIBC. + Include only if HAVE_UNISTD_H || _LIBC. + Include only if HAVE_SYS_TIME_H || _LIBC. + (__set_errno): Define this macro if doesn't. + (P_tmpdir, TMP_MAX, __GT_FILE, __GT_BIGFILE, __GT_DIR, __GT_NOCREATE): + Define these macros if doesn't. + (S_ISDIR, S_IRUSR, S_IWUSR, S_IXUSR): + Define these macros if doesn't. + Ignore S_ISDIR if STAT_MACROS_BROKEN. + (stat64, __getpid, __gettimeofday, __mkdir, __open, __open64, + lxstat64, __xstat64): Define if not _LIBC. + (struct_stat64): New macro. + (direxists, __gen_tempname): Use it, to avoid a + portability problem with Solaris 8. + (__secure_getenv): Define if ! (HAVE___SECURE_GETENV || _LIBC). + (__gen_tempname): Invoke gettimeofday only if + HAVE_GETTIMEOFDAY || _LIBC; otherwise, fall back on plain "time". + Use portable macros like S_IRUSR | S_IWUSR rather than nonportable + octal values like 0600. + +2001-02-26 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_jnl.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/i386/fpu/libm-test-ulps: Update for jnl and ynl introduction. + * sysdeps/ia64/fpu/libm-test-ulps: Likewise. + + * posix/wordexp-test.c (testit): Remove warnings. + + * dlfcn/Makefile (distribute): Add modatexit.c and modcxaatexit.c. + (tests): Add tstatexit and tstcxaatexit. + (module-names): Add modatexit and modcxaatexit. + Add rules to build and run tstatexit and tstcxaatexit. + * dlfcn/modatexit.c: New file. + * dlfcn/modcxaatexit.c: New file. + * dlfcn/tstatexit.c: New file. + * dlfcn/tstcxaatexit.c: New file. + + * io/Makefile: Pass -DHAVE_DOT_HIDDEN to stat and mknod functions if + .hidden is available. + * io/stat.c: If .hidden is available use it to avoid exporting + functions. + * io/fstat.c: Likewise. + * io/lstat.c: Likewise. + * io/stat64.c: Likewise. + * io/fstat64.c: Likewise. + * io/lstat64.c: Likewise. + * sysdeps/generic/mknod.c: Likewise. + + * malloc/mtrace.c: Use __cxa_atexit and not atexit. + * sysdeps/generic/bb_init_func.c: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + + * stdlib/atexit.c (__new_exitfn): Move to cxa_atexit.c. + (atexit): Implement using __cxa_atexit. + Use .hidden if availble to avoid exporting atexit. + * stdlib/cxa_atexit.c (__new_exitfn): Moved to here from atexit.c. + * stdlib/Versions: Export __new_exitfn for GLIBC_2.2.3. + * stdlib/Makefile (routines): Add old_atexit. + (static-only-routines): Add atexit. + Pass -DHAVE_DOT_HIDDEN for atexit.c if .hidden is available. + * stdlib/old_atexit.c: New file. + + * intl/Makefile: Remove bogus endif. + +2001-02-26 Andreas Jaeger + + * iconvdata/Makefile (tests): Fix typo in last patch. + + * intl/Makefile (tests): Run mtrace-tst-gettext only when perl is + available. + Reported by Achim Gottinger . + +2001-02-25 Andreas Jaeger + + * intl/Makefile (plural.c): Reorder rules so that they work if + BISON doesn't exist. + +2001-02-25 Ulrich Drepper + + * intl/locale.alias: Don't use nb_NO but define aliases for it. + +2001-02-23 Ulrich Drepper + + * sysdeps/i386/strtok.S: Continue to return NULL after the first + time this happened. + +2001-02-23 Andreas Jaeger + + * string/tester.c (test_strtok_r): Add testcase. + (test_strtok_r): Always initialize cp for proper checking. + + * sysdeps/generic/strtok.c (strtok): Handle case of first strtok + returning NULL correctly. + Patch by Fumitoshi UKAI . + * sysdeps/generic/strtok_r.c (__strtok_r): Likewise. + +2001-02-23 Ulrich Drepper + + * sysdeps/unix/sysv/aix/bits/types.h: Define __need_NULL before + including . + * sysdeps/unix/sysv/aix/write.c: Define alias __libc_write. + * include/libc-symbols.h (weak_alias): Don't use .weak if + HAVE_ASM_GLOBAL_DOT_NAME is defined. + Patches by Michael Keezer . + + * sysdeps/generic/ftime.c: Don't include at all. + Patch by Michael Keezer . + + * sysdeps/unix/sysv/aix/Dist: Remove restf.S and savef.S. + * sysdeps/unix/sysv/aix/Makefile [$(subdir) == misc] + (sysdep_routines): Remove restf.S and savef.S. + * sysdeps/unix/sysv/aix/restf.S. Removed. + * sysdeps/unix/sysv/aix/savef.S. Removed. + * sysdeps/powerpc/fprrest.S: Use C_TEXT to define label. Also define + alternative names used on some platforms. + * sysdeps/powerpc/fprsave.S: Likewise. + * sysdeps/powerpc/gprrest0.S: Likewise. + * sysdeps/powerpc/gprrest1.S: Likewise. + * sysdeps/powerpc/gprsave0.S: Likewise. + * sysdeps/powerpc/gprsave1.S: Likewise. + Patch by Michael Keezer . + +2001-02-22 Ulrich Drepper + + * sysdeps/i386/elf/start.S (_fp_hw): Actually define label. + +2001-02-22 Andreas Jaeger + + * string/tst-strtok.c (main): Fix error messages. + +2001-02-22 Andreas Jaeger + + * math/Makefile: Remove omit-long-double-fcts. + +2001-02-18 Maciej W. Rozycki + + * sysdeps/mips/bsd-_setjmp.S (_setjmp): Reorder instructions to + avoid problems on MIPS I. + * sysdeps/mips/bsd-setjmp.S (setjmp): Likewise. + + * sysdeps/mips/dl-machine.h (RTLD_START): Remove duplicate ".set + noreorder". + +2001-02-21 Ulrich Drepper + + * posix/fnmatch_loop.c: Handle ranges outside glibc correctly. + + * sysdeps/generic/ftime.c: Include . + + * configure.in: Don't check for libgd if user passed --without-gd. + Patch by Achim Gottinger . + + * sysdeps/i386/i686/strtok.S: Continue to return NULL after the + first time this happened. + * string/Makefile (tests): Add tst-strtok. + +2001-02-21 Andreas Jaeger + + * string/tst-strtok.c: New testcase, reported by + Andrew Church . + +2001-02-20 Ulrich Drepper + + * libio/iofwide.c: Remove fwide alias. + +2001-02-20 Andreas Jaeger + + * iconvdata/Makefile (tests): Only run mtrace-tst-loading if perl + is available. + Reported by Achim Gottinger . + +2001-02-19 Ulrich Drepper + + * iconv/tst-iconv1.c (main): Remove debugging code. + + * sysdeps/ieee754/flt-32/e_powf.c: Handle x == +-1 correctly. + * sysdeps/ieee754/dbl-64/e_pow.c: Likewise. + + * sysdeps/generic/e_scalb.c: Set invalid exception for invalid + parameters. + * sysdeps/generic/e_scalbf.c: Likewise. + * sysdeps/generic/e_scalbl.c: Likewise. + + * sysdeps/ia64/fpu/Makefile (libm-sysdep-routines): Add libm_error, + libm_frexp4, libm_frexp4f, libm_frexp4l, and all the functions also + in libc. + (routines): Replace libm_error with libc_libm_error. + * sysdeps/ia64/fpu/Dist: Add libc_libm_error.c. + * sysdeps/ia64/fpu/libc_libm_error.c: New file. + +2001-02-18 Mark Kettenis + + * malloc/mtrace.c [USE_IN_LIBIO]: Define fopen as _IO_fopen64. + (mtrace): Revert 2001-02-13 patch: use fopen instead of fopen64. + +2001-02-17 H.J. Lu + + * sysdeps/unix/sysv/linux/ia64/clone2.S: Use clone2 and don't use + scratch registers across the system call. + +2001-02-19 Andreas Jaeger + + * malloc/Makefile (tests): Run mtrace only when perl is available. + Reported by Achim Gottinger . + +2001-02-19 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_j1l.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/i386/fpu/libm-test-ulps: Adjust error values for j1 and y1. + * sysdeps/ia64/fpu/libm-test-ulps: Adjust error values for y1. + * math/libm-test.inc (j1_test): Mark constants as long double. + (jn_test): Likewise. + (y1_test): Likewise. + (yn_test): Likewise. + + * libio/iogetline.c: Move return until after last statement. + + * localedata/show-ucs-data.c: Don't show < > for better readability. + + * sysdeps/ia64/fpu/Dist: New file. + * sysdeps/ia64/fpu/Makefile: New file. + * sysdeps/ia64/fpu/Versions: New file. + * sysdeps/ia64/fpu/e_acos.S: New file. + * sysdeps/ia64/fpu/e_acosf.S: New file. + * sysdeps/ia64/fpu/e_acosl.S: New file. + * sysdeps/ia64/fpu/e_asin.S: New file. + * sysdeps/ia64/fpu/e_asinf.S: New file. + * sysdeps/ia64/fpu/e_asinl.S: New file. + * sysdeps/ia64/fpu/e_atan2.S: New file. + * sysdeps/ia64/fpu/e_atan2f.S: New file. + * sysdeps/ia64/fpu/e_atan2l.c: New file. + * sysdeps/ia64/fpu/e_cosh.S: New file. + * sysdeps/ia64/fpu/e_coshf.S: New file. + * sysdeps/ia64/fpu/e_coshl.S: New file. + * sysdeps/ia64/fpu/e_exp.S: New file. + * sysdeps/ia64/fpu/e_expf.S: New file. + * sysdeps/ia64/fpu/e_expl.c: New file. + * sysdeps/ia64/fpu/e_fmod.S: New file. + * sysdeps/ia64/fpu/e_fmodf.S: New file. + * sysdeps/ia64/fpu/e_fmodl.S: New file. + * sysdeps/ia64/fpu/e_hypot.S: New file. + * sysdeps/ia64/fpu/e_hypotf.S: New file. + * sysdeps/ia64/fpu/e_hypotl.S: New file. + * sysdeps/ia64/fpu/e_log.S: New file. + * sysdeps/ia64/fpu/e_log10.c: New file. + * sysdeps/ia64/fpu/e_log10f.c: New file. + * sysdeps/ia64/fpu/e_log10l.c: New file. + * sysdeps/ia64/fpu/e_logf.S: New file. + * sysdeps/ia64/fpu/e_logl.c: New file. + * sysdeps/ia64/fpu/e_pow.S: New file. + * sysdeps/ia64/fpu/e_powf.S: New file. + * sysdeps/ia64/fpu/e_powl.S: New file. + * sysdeps/ia64/fpu/e_rem_pio2.c: New file. + * sysdeps/ia64/fpu/e_rem_pio2f.c: New file. + * sysdeps/ia64/fpu/e_remainder.S: New file. + * sysdeps/ia64/fpu/e_remainderf.S: New file. + * sysdeps/ia64/fpu/e_remainderl.S: New file. + * sysdeps/ia64/fpu/e_scalb.S: New file. + * sysdeps/ia64/fpu/e_scalbf.S: New file. + * sysdeps/ia64/fpu/e_scalbl.S: New file. + * sysdeps/ia64/fpu/e_sinh.S: New file. + * sysdeps/ia64/fpu/e_sinhf.S: New file. + * sysdeps/ia64/fpu/e_sinhl.S: New file. + * sysdeps/ia64/fpu/e_sqrt.S: New file. + * sysdeps/ia64/fpu/e_sqrtf.S: New file. + * sysdeps/ia64/fpu/e_sqrtl.S: New file. + * sysdeps/ia64/fpu/k_rem_pio2.c: New file. + * sysdeps/ia64/fpu/k_rem_pio2f.c: New file. + * sysdeps/ia64/fpu/k_rem_pio2l.c: New file. + * sysdeps/ia64/fpu/libm_atan2_reg.S: New file. + * sysdeps/ia64/fpu/libm_error.c: New file. + * sysdeps/ia64/fpu/libm_frexp4.S: New file. + * sysdeps/ia64/fpu/libm_frexp4f.S: New file. + * sysdeps/ia64/fpu/libm_frexp4l.S: New file. + * sysdeps/ia64/fpu/libm_reduce.S: New file. + * sysdeps/ia64/fpu/libm_support.h: New file. + * sysdeps/ia64/fpu/libm_tan.S: New file. + * sysdeps/ia64/fpu/s_atan.S: New file. + * sysdeps/ia64/fpu/s_atanf.S: New file. + * sysdeps/ia64/fpu/s_atanl.S: New file. + * sysdeps/ia64/fpu/s_cbrt.S: New file. + * sysdeps/ia64/fpu/s_cbrtf.S: New file. + * sysdeps/ia64/fpu/s_cbrtl.S: New file. + * sysdeps/ia64/fpu/s_ceil.S: New file. + * sysdeps/ia64/fpu/s_ceilf.S: New file. + * sysdeps/ia64/fpu/s_ceill.S: New file. + * sysdeps/ia64/fpu/s_cos.S: New file. + * sysdeps/ia64/fpu/s_cosf.S: New file. + * sysdeps/ia64/fpu/s_cosl.S: New file. + * sysdeps/ia64/fpu/s_expm1.S: New file. + * sysdeps/ia64/fpu/s_expm1f.S: New file. + * sysdeps/ia64/fpu/s_expm1l.S: New file. + * sysdeps/ia64/fpu/s_floor.S: New file. + * sysdeps/ia64/fpu/s_floorf.S: New file. + * sysdeps/ia64/fpu/s_floorl.S: New file. + * sysdeps/ia64/fpu/s_frexp.c: New file. + * sysdeps/ia64/fpu/s_frexpf.c: New file. + * sysdeps/ia64/fpu/s_frexpl.c: New file. + * sysdeps/ia64/fpu/s_ilogb.S: New file. + * sysdeps/ia64/fpu/s_ilogbf.S: New file. + * sysdeps/ia64/fpu/s_ilogbl.S: New file. + * sysdeps/ia64/fpu/s_ldexp.S: New file. + * sysdeps/ia64/fpu/s_ldexpf.S: New file. + * sysdeps/ia64/fpu/s_ldexpl.S: New file. + * sysdeps/ia64/fpu/s_log1p.S: New file. + * sysdeps/ia64/fpu/s_log1pf.S: New file. + * sysdeps/ia64/fpu/s_log1pl.S: New file. + * sysdeps/ia64/fpu/s_logb.S: New file. + * sysdeps/ia64/fpu/s_logbf.S: New file. + * sysdeps/ia64/fpu/s_logbl.S: New file. + * sysdeps/ia64/fpu/s_matherrf.c: New file. + * sysdeps/ia64/fpu/s_matherrl.c: New file. + * sysdeps/ia64/fpu/s_modf.S: New file. + * sysdeps/ia64/fpu/s_modff.S: New file. + * sysdeps/ia64/fpu/s_modfl.S: New file. + * sysdeps/ia64/fpu/s_nearbyint.S: New file. + * sysdeps/ia64/fpu/s_nearbyintf.S: New file. + * sysdeps/ia64/fpu/s_nearbyintl.S: New file. + * sysdeps/ia64/fpu/s_rint.S: New file. + * sysdeps/ia64/fpu/s_rintf.S: New file. + * sysdeps/ia64/fpu/s_rintl.S: New file. + * sysdeps/ia64/fpu/s_round.S: New file. + * sysdeps/ia64/fpu/s_roundf.S: New file. + * sysdeps/ia64/fpu/s_roundl.S: New file. + * sysdeps/ia64/fpu/s_scalbn.S: New file. + * sysdeps/ia64/fpu/s_scalbnf.S: New file. + * sysdeps/ia64/fpu/s_scalbnl.S: New file. + * sysdeps/ia64/fpu/s_significand.S: New file. + * sysdeps/ia64/fpu/s_significandf.S: New file. + * sysdeps/ia64/fpu/s_significandl.S: New file. + * sysdeps/ia64/fpu/s_sin.c: New file. + * sysdeps/ia64/fpu/s_sincos.c: New file. + * sysdeps/ia64/fpu/s_sincosf.c: New file. + * sysdeps/ia64/fpu/s_sincosl.c: New file. + * sysdeps/ia64/fpu/s_sinf.c: New file. + * sysdeps/ia64/fpu/s_sinl.c: New file. + * sysdeps/ia64/fpu/s_tan.S: New file. + * sysdeps/ia64/fpu/s_tanf.S: New file. + * sysdeps/ia64/fpu/s_tanl.S: New file. + * sysdeps/ia64/fpu/s_trunc.S: New file. + * sysdeps/ia64/fpu/s_truncf.S: New file. + * sysdeps/ia64/fpu/s_truncl.S: New file. + * sysdeps/ia64/fpu/w_acos.c: New file. + * sysdeps/ia64/fpu/w_acosf.c: New file. + * sysdeps/ia64/fpu/w_acosl.c: New file. + * sysdeps/ia64/fpu/w_asin.c: New file. + * sysdeps/ia64/fpu/w_asinf.c: New file. + * sysdeps/ia64/fpu/w_asinl.c: New file. + * sysdeps/ia64/fpu/w_atan2.c: New file. + * sysdeps/ia64/fpu/w_atan2f.c: New file. + * sysdeps/ia64/fpu/w_atan2l.c: New file. + * sysdeps/ia64/fpu/w_cosh.c: New file. + * sysdeps/ia64/fpu/w_coshf.c: New file. + * sysdeps/ia64/fpu/w_coshl.c: New file. + * sysdeps/ia64/fpu/w_exp.c: New file. + * sysdeps/ia64/fpu/w_expf.c: New file. + * sysdeps/ia64/fpu/w_fmod.c: New file. + * sysdeps/ia64/fpu/w_fmodf.c: New file. + * sysdeps/ia64/fpu/w_fmodl.c: New file. + * sysdeps/ia64/fpu/w_hypot.c: New file. + * sysdeps/ia64/fpu/w_hypotf.c: New file. + * sysdeps/ia64/fpu/w_hypotl.c: New file. + * sysdeps/ia64/fpu/w_log.c: New file. + * sysdeps/ia64/fpu/w_log10.c: New file. + * sysdeps/ia64/fpu/w_log10f.c: New file. + * sysdeps/ia64/fpu/w_log10l.c: New file. + * sysdeps/ia64/fpu/w_logf.c: New file. + * sysdeps/ia64/fpu/w_logl.c: New file. + * sysdeps/ia64/fpu/w_pow.c: New file. + * sysdeps/ia64/fpu/w_powf.c: New file. + * sysdeps/ia64/fpu/w_powl.c: New file. + * sysdeps/ia64/fpu/w_remainder.c: New file. + * sysdeps/ia64/fpu/w_remainderf.c: New file. + * sysdeps/ia64/fpu/w_remainderl.c: New file. + * sysdeps/ia64/fpu/w_scalb.c: New file. + * sysdeps/ia64/fpu/w_scalbf.c: New file. + * sysdeps/ia64/fpu/w_scalbl.c: New file. + * sysdeps/ia64/fpu/w_sqrt.c: New file. + * sysdeps/ia64/fpu/w_sqrtf.c: New file. + * sysdeps/ia64/fpu/w_sqrtl.c: New file. + * sysdeps/ia64/fpu/libm-test-ulps: Adjust for long double + implementation. + * sysdeps/ia64/fpu/bits/mathdef.h: Correct float_t and double_t types. + Change FP_ILOGBNAN for new implementation. + * Verions.def: Add 2.2.3 versions. + +2001-02-18 Ulrich Drepper + + * math/libm-test.inc (scalb_test): Require invalid exception being + raised for invalid parameters. + * sysdeps/i386/fpu/e_scalb.S: Raise invalid exception if necessary. + * sysdeps/i386/fpu/e_scalbf.S: Likewise. + * sysdeps/i386/fpu/e_scalbl.S: Likewise. + +2001-02-18 Mark Kettenis + + * sysdeps/mach/getsysstats.c (__get_phys_pages): Change return + value to long int. + (__get_avphys_pages): Likewise. + +2001-02-18 Ulrich Drepper + + * math/libm-test.inc (pow_test): Correct expected results for x == +-1. + * sysdeps/i386/fpu/e_pow.S: Handle x == +-1 correctly. + * sysdeps/i386/fpu/e_powf.S: Likewise. + * sysdeps/i386/fpu/e_powl.S: Likewise. + + * sysdeps/i386/fpu/bits/mathinline.h: Remove pow inline code. + +2001-02-17 Ulrich Drepper + + * math/Makefile (libm-calls): It's e_exp2 not s_exp2. + + * sysdeps/generic/s_exp2l.c: Renamed to... + * sysdeps/generic/e_exp2l.c: ...this. New file. + * sysdeps/i386/fpu/s_exp2.S: Renamed to... + * sysdeps/i386/fpu/e_exp2.S: ...this. New file. + * sysdeps/i386/fpu/s_exp2f.S: Renamed to... + * sysdeps/i386/fpu/e_exp2f.S: ...this. New file. + * sysdeps/i386/fpu/s_exp2l.S: Renamed to... + * sysdeps/i386/fpu/e_exp2l.S: ...this. New file. + * sysdeps/ieee754/flt-32/s_exp2f.c: Renamed to... + * sysdeps/ieee754/flt-32/e_exp2f.c: ...this. New file. + * sysdeps/ieee754/dbl-64/s_exp2.c: Renamed to... + * sysdeps/ieee754/dbl-64/e_exp2.c: ...this. New file. + * sysdeps/m68k/fpu/s_exp2.c: Renamed to... + * sysdeps/m68k/fpu/e_exp2.c: ...this. New file. + * sysdeps/m68k/fpu/s_exp2f.c: Renamed to... + * sysdeps/m68k/fpu/e_exp2f.c: ...this. New file. + * sysdeps/m68k/fpu/s_exp2l.c: Renamed to... + * sysdeps/m68k/fpu/e_exp2l.c: ...this. New file. + +2001-02-17 Andreas Jaeger + + * configure.in: Allow gcc 3. + +2001-02-16 Ulrich Drepper + + * math/w_acos.c: Move to ... + * sysdeps/generic/w_acos.c: ...here. New file. + * math/w_acosf.c: Move to ... + * sysdeps/generic/w_acosf.c: ...here. New file. + * math/w_acosh.c: Move to ... + * sysdeps/generic/w_acosh.c: ...here. New file. + * math/w_acoshf.c: Move to ... + * sysdeps/generic/w_acoshf.c: ...here. New file. + * math/w_acoshl.c: Move to ... + * sysdeps/generic/w_acoshl.c: ...here. New file. + * math/w_acosl.c: Move to ... + * sysdeps/generic/w_acosl.c: ...here. New file. + * math/w_asin.c: Move to ... + * sysdeps/generic/w_asin.c: ...here. New file. + * math/w_asinf.c: Move to ... + * sysdeps/generic/w_asinf.c: ...here. New file. + * math/w_asinl.c: Move to ... + * sysdeps/generic/w_asinl.c: ...here. New file. + * math/w_atan2.c: Move to ... + * sysdeps/generic/w_atan2.c: ...here. New file. + * math/w_atan2f.c: Move to ... + * sysdeps/generic/w_atan2f.c: ...here. New file. + * math/w_atan2l.c: Move to ... + * sysdeps/generic/w_atan2l.c: ...here. New file. + * math/w_atanh.c: Move to ... + * sysdeps/generic/w_atanh.c: ...here. New file. + * math/w_atanhf.c: Move to ... + * sysdeps/generic/w_atanhf.c: ...here. New file. + * math/w_atanhl.c: Move to ... + * sysdeps/generic/w_atanhl.c: ...here. New file. + * math/w_cosh.c: Move to ... + * sysdeps/generic/w_cosh.c: ...here. New file. + * math/w_coshf.c: Move to ... + * sysdeps/generic/w_coshf.c: ...here. New file. + * math/w_coshl.c: Move to ... + * sysdeps/generic/w_coshl.c: ...here. New file. + * math/w_drem.c: Move to ... + * sysdeps/generic/w_drem.c: ...here. New file. + * math/w_dremf.c: Move to ... + * sysdeps/generic/w_dremf.c: ...here. New file. + * math/w_dreml.c: Move to ... + * sysdeps/generic/w_dreml.c: ...here. New file. + * math/w_exp10.c: Move to ... + * sysdeps/generic/w_exp10.c: ...here. New file. + * math/w_exp10f.c: Move to ... + * sysdeps/generic/w_exp10f.c: ...here. New file. + * math/w_exp10l.c: Move to ... + * sysdeps/generic/w_exp10l.c: ...here. New file. + * math/w_exp2.c: Move to ... + * sysdeps/generic/w_exp2.c: ...here. New file. + * math/w_exp2f.c: Move to ... + * sysdeps/generic/w_exp2f.c: ...here. New file. + * math/w_exp2l.c: Move to ... + * sysdeps/generic/w_exp2l.c: ...here. New file. + * math/w_fmod.c: Move to ... + * sysdeps/generic/w_fmod.c: ...here. New file. + * math/w_fmodf.c: Move to ... + * sysdeps/generic/w_fmodf.c: ...here. New file. + * math/w_fmodl.c: Move to ... + * sysdeps/generic/w_fmodl.c: ...here. New file. + * math/w_hypot.c: Move to ... + * sysdeps/generic/w_hypot.c: ...here. New file. + * math/w_hypotf.c: Move to ... + * sysdeps/generic/w_hypotf.c: ...here. New file. + * math/w_hypotl.c: Move to ... + * sysdeps/generic/w_hypotl.c: ...here. New file. + * math/w_j0.c: Move to ... + * sysdeps/generic/w_j0.c: ...here. New file. + * math/w_j0f.c: Move to ... + * sysdeps/generic/w_j0f.c: ...here. New file. + * math/w_j0l.c: Move to ... + * sysdeps/generic/w_j0l.c: ...here. New file. + * math/w_j1.c: Move to ... + * sysdeps/generic/w_j1.c: ...here. New file. + * math/w_j1f.c: Move to ... + * sysdeps/generic/w_j1f.c: ...here. New file. + * math/w_j1l.c: Move to ... + * sysdeps/generic/w_j1l.c: ...here. New file. + * math/w_jn.c: Move to ... + * sysdeps/generic/w_jn.c: ...here. New file. + * math/w_jnf.c: Move to ... + * sysdeps/generic/w_jnf.c: ...here. New file. + * math/w_jnl.c: Move to ... + * sysdeps/generic/w_jnl.c: ...here. New file. + * math/w_lgamma.c: Move to ... + * sysdeps/generic/w_lgamma.c: ...here. New file. + * math/w_lgammaf.c: Move to ... + * sysdeps/generic/w_lgammaf.c: ...here. New file. + * math/w_lgammaf_r.c: Move to ... + * sysdeps/generic/w_lgammaf_r.c: ...here. New file. + * math/w_lgammal.c: Move to ... + * sysdeps/generic/w_lgammal.c: ...here. New file. + * math/w_lgammal_r.c: Move to ... + * sysdeps/generic/w_lgammal_r.c: ...here. New file. + * math/w_lgamma_r.c: Move to ... + * sysdeps/generic/w_lgamma_r.c: ...here. New file. + * math/w_log10.c: Move to ... + * sysdeps/generic/w_log10.c: ...here. New file. + * math/w_log10f.c: Move to ... + * sysdeps/generic/w_log10f.c: ...here. New file. + * math/w_log10l.c: Move to ... + * sysdeps/generic/w_log10l.c: ...here. New file. + * math/w_log.c: Move to ... + * sysdeps/generic/w_log.c: ...here. New file. + * math/w_logf.c: Move to ... + * sysdeps/generic/w_logf.c: ...here. New file. + * math/w_logl.c: Move to ... + * sysdeps/generic/w_logl.c: ...here. New file. + * math/w_pow.c: Move to ... + * sysdeps/generic/w_pow.c: ...here. New file. + * math/w_powf.c: Move to ... + * sysdeps/generic/w_powf.c: ...here. New file. + * math/w_powl.c: Move to ... + * sysdeps/generic/w_powl.c: ...here. New file. + * math/w_remainder.c: Move to ... + * sysdeps/generic/w_remainder.c: ...here. New file. + * math/w_remainderf.c: Move to ... + * sysdeps/generic/w_remainderf.c: ...here. New file. + * math/w_remainderl.c: Move to ... + * sysdeps/generic/w_remainderl.c: ...here. New file. + * math/w_scalb.c: Move to ... + * sysdeps/generic/w_scalb.c: ...here. New file. + * math/w_scalbf.c: Move to ... + * sysdeps/generic/w_scalbf.c: ...here. New file. + * math/w_scalbl.c: Move to ... + * sysdeps/generic/w_scalbl.c: ...here. New file. + * math/w_sinh.c: Move to ... + * sysdeps/generic/w_sinh.c: ...here. New file. + * math/w_sinhf.c: Move to ... + * sysdeps/generic/w_sinhf.c: ...here. New file. + * math/w_sinhl.c: Move to ... + * sysdeps/generic/w_sinhl.c: ...here. New file. + * math/w_sqrtl.c: Move to ... + * sysdeps/generic/w_sqrtl.c: ...here. New file. + * math/w_tgamma.c: Move to ... + * sysdeps/generic/w_tgamma.c: ...here. New file. + * math/w_tgammaf.c: Move to ... + * sysdeps/generic/w_tgammaf.c: ...here. New file. + * math/w_tgammal.c: Move to ... + * sysdeps/generic/w_tgammal.c: ...here. New file. + + * locale/programs/ld-address.c (address_finish): Add 'S' to allow + formats for postal_fmt. + +2001-02-16 Jakub Jelinek + + * sysdeps/unix/sysv/linux/alpha/syscalls.list (ftruncate): Add + __ftruncate64 alias. + * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (ftruncate): + Likewise. + +2001-02-15 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/__longjmp.S (__longjmp): No need to + do "loadrs". Writing to bspstore already takes care of + invalidating the "clean" partition. + +2001-02-16 Andreas Schwab + + * sysdeps/m68k/fpu/s_nextafterl.c: New file. + * sysdeps/m68k/fpu/s_fpclassifyl.c: New file. + 2001-02-15 Jakub Jelinek * posix/regex.c (init_syntax_once): Add prototype. diff -durpNa glibc-2.2.2/FAQ glibc-2.2.3/FAQ --- glibc-2.2.2/FAQ Thu Feb 15 14:34:52 2001 +++ glibc-2.2.3/FAQ Thu Apr 26 21:37:52 2001 @@ -163,6 +163,7 @@ please let me know. when I try to use it, it always returns -1 and sets errno to ENOSYS. 3.22. My program segfaults when I call fclose() on the FILE* returned from setmntent(). Is this a glibc bug? +3.23. I get "undefined reference to `atexit'" 4. Miscellaneous @@ -183,6 +184,8 @@ please let me know. 4.8. The conversion table for character set XX does not match with what I expect. 4.9. How can I find out which version of glibc I am using in the moment? +4.10. Context switching with setcontext() does not work from within + signal handlers. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ @@ -211,6 +214,8 @@ in the future, are: mips*-*-linux-gnu Linux-2.x on MIPS ia64-*-linux-gnu Linux-2.x on ia64 s390-*-linux-gnu Linux-2.x on IBM S/390 + s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit + cris-*-linux-gnu Linux-2.4+ on CRIS Ports to other Linux platforms are in development, and may in fact work already, but no one has sent us success reports for them. Currently no @@ -273,7 +278,7 @@ them. 1.5. Which compiler should I use for powerpc? {GK} You want to use at least gcc 2.95 (together with the right versions -of all the other tools, of course). See also question question 2.8. +of all the other tools, of course). See also question 2.8. 1.6. Which tools should I use for ARM? @@ -295,9 +300,7 @@ Binutils 2.10.1 or later is also require `message catalog' files containing translated versions of system messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror site. (We distribute compiled message catalogs, but they may not be - updated in patches.) Please note that the required minimal version - (0.10.35) of gettext is alpha software and available from - ftp://alpha.gnu.org/gnu . + updated in patches.) * Some files are built with special tools. E.g., files ending in .gperf need a `gperf' program. The GNU version (now available in a separate @@ -929,7 +932,7 @@ necessary conversion and calls to create `db-Makefile' in the subdirectory `nss' and you can call it with `make -f db-Makefile'. Please note that not all services are capable of using a database. Currently passwd, group, ethers, protocol, rpc, services shadow -and netgroup are implemented. See also question question 2.31. +and netgroup are implemented. See also question 2.31. 2.17. I have /usr/include/net and /usr/include/scsi as symlinks @@ -1248,9 +1251,9 @@ http://clisp.cons.org/~haible/gccinclude 2.35. When recompiling GCC, I get compilation errors in libio. -{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.2.1 instead. +{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.3 instead. This version is needed because the fpos_t type and a few libio internals -have changed in glibc 2.2, and gcc 2.95.2.1 contains a corresponding patch. +have changed in glibc 2.2, and gcc 2.95.3 contains a corresponding patch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -1682,6 +1685,17 @@ In the case of setmntent(), it may appea won't always work. Unfortunately, for compatibility reasons, we can't change the return type of setmntent() to something other than FILE *. + +3.23. I get "undefined reference to `atexit'" + +{UD} This means that your installation is somehow broken. The situation is +the same as for 'stat', 'fstat', etc (see question 2.7). Investigate why the +linker does not pick up libc_nonshared.a. + +If a similar message is issued at runtime this means that the application or +DSO is not linked against libc. This can cause problems since 'atexit' is +not exported anymore. + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -1840,12 +1854,56 @@ int main (void) { puts (gnu_get_libc_ver This interface can also obviously be used to perform tests at runtime if this should be necessary. + +4.10. Context switching with setcontext() does not work from within + signal handlers. + +{DMT} The Linux implementations (IA-64, S390 so far) of setcontext() +supports synchronous context switches only. There are several reasons for +this: + + o UNIX provides no other (portable) way of effecting a synchronous + context switch (also known as co-routine switch). Some versions + support this via setjmp()/longjmp() but this does not work + universally. + + o As defined by the UNIX '98 standard, the only way setcontext() + could trigger an asychronous context switch is if this function + were invoked on the ucontext_t pointer passed as the third argument + to a signal handler. But according to draft 5, XPG6, XBD 2.4.3, + setcontext() is not among the set of routines that may be called + from a signal handler. + + o If setcontext() were to be used for asynchronous context switches, + all kinds of synchronization and re-entrancy issues could arise and + these problems have already been solved by real multi-threading + libraries (e.g., POSIX threads or Linux threads). + + o Synchronous context switching can be implemented entirely in + user-level and less state needs to be saved/restored than for an + asynchronous context switch. It is therefore useful to distinguish + between the two types of context switches. Indeed, some + application vendors are known to use setcontext() to implement + co-routines on top of normal (heavier-weight) pre-emptable threads. + +It should be noted that if someone was dead-bent on using setcontext() +on the third arg of a signal handler, then IA-64 Linux could support +this via a special version of sigaction() which arranges that all +signal handlers start executing in a shim function which takes care of +saving the preserved registers before calling the real signal handler +and restoring them afterwards. In other words, we could provide a +compatibility layer which would support setcontext() for asynchronous +context switches. However, given the arguments above, I don't think +that makes sense. setcontext() provides a decent co-routine interface +and we should just discourage any asynchronous use (which just calls +for trouble at any rate). + ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Answers were given by: -{UD} Ulrich Drepper, -{DMT} David Mosberger-Tang, +{UD} Ulrich Drepper, +{DMT} David Mosberger-Tang, {RM} Roland McGrath, {AJ} Andreas Jaeger, {EY} Eric Youngdale, @@ -1853,10 +1911,10 @@ Answers were given by: {MK} Mark Kettenis, {ZW} Zack Weinberg, {TK} Thorsten Kukuk, -{GK} Geoffrey Keating, +{GK} Geoffrey Keating, {HJ} H.J. Lu, {CG} Cristian Gafton, -{AO} Alexandre Oliva, +{AO} Alexandre Oliva, {BH} Bruno Haible, Local Variables: diff -durpNa glibc-2.2.2/FAQ.in glibc-2.2.3/FAQ.in --- glibc-2.2.2/FAQ.in Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/FAQ.in Wed Apr 25 14:50:52 2001 @@ -38,6 +38,8 @@ in the future, are: mips*-*-linux-gnu Linux-2.x on MIPS ia64-*-linux-gnu Linux-2.x on ia64 s390-*-linux-gnu Linux-2.x on IBM S/390 + s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit + cris-*-linux-gnu Linux-2.4+ on CRIS Ports to other Linux platforms are in development, and may in fact work already, but no one has sent us success reports for them. Currently no @@ -96,7 +98,7 @@ them. ??powerpc Which compiler should I use for powerpc? {GK} You want to use at least gcc 2.95 (together with the right versions -of all the other tools, of course). See also question ?excpt. +of all the other tools, of course). See also ?excpt. ??arm Which tools should I use for ARM? @@ -116,9 +118,7 @@ Binutils 2.10.1 or later is also require `message catalog' files containing translated versions of system messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror site. (We distribute compiled message catalogs, but they may not be - updated in patches.) Please note that the required minimal version - (0.10.35) of gettext is alpha software and available from - ftp://alpha.gnu.org/gnu . + updated in patches.) * Some files are built with special tools. E.g., files ending in .gperf need a `gperf' program. The GNU version (now available in a separate @@ -564,7 +564,7 @@ exactly what to use. Version 2.7.2.3 does and future versions of GCC will automatically provide the correct specs. -?? Looking through the shared libc file I haven't found the +??nonsh Looking through the shared libc file I haven't found the functions `stat', `lstat', `fstat', and `mknod' and while linking on my Linux system I get error messages. How is this supposed to work? @@ -723,7 +723,7 @@ necessary conversion and calls to create `db-Makefile' in the subdirectory `nss' and you can call it with `make -f db-Makefile'. Please note that not all services are capable of using a database. Currently passwd, group, ethers, protocol, rpc, services shadow -and netgroup are implemented. See also question ?nssdb. +and netgroup are implemented. See also ?nssdb. ?? I have /usr/include/net and /usr/include/scsi as symlinks into my Linux source tree. Is that wrong? @@ -1023,9 +1023,9 @@ http://clisp.cons.org/~haible/gccinclude ?? When recompiling GCC, I get compilation errors in libio. -{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.2.1 instead. +{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.3 instead. This version is needed because the fpos_t type and a few libio internals -have changed in glibc 2.2, and gcc 2.95.2.1 contains a corresponding patch. +have changed in glibc 2.2, and gcc 2.95.3 contains a corresponding patch. ? Source and binary incompatibilities, and what to do about them @@ -1437,6 +1437,16 @@ In the case of setmntent(), it may appea won't always work. Unfortunately, for compatibility reasons, we can't change the return type of setmntent() to something other than FILE *. +?? I get "undefined reference to `atexit'" + +{UD} This means that your installation is somehow broken. The situation is +the same as for 'stat', 'fstat', etc (see ?nonsh). Investigate why the +linker does not pick up libc_nonshared.a. + +If a similar message is issued at runtime this means that the application or +DSO is not linked against libc. This can cause problems since 'atexit' is +not exported anymore. + ? Miscellaneous @@ -1585,10 +1595,54 @@ int main (void) { puts (gnu_get_libc_ver This interface can also obviously be used to perform tests at runtime if this should be necessary. +?? Context switching with setcontext() does not work from within + signal handlers. + +{DMT} The Linux implementations (IA-64, S390 so far) of setcontext() +supports synchronous context switches only. There are several reasons for +this: + + o UNIX provides no other (portable) way of effecting a synchronous + context switch (also known as co-routine switch). Some versions + support this via setjmp()/longjmp() but this does not work + universally. + + o As defined by the UNIX '98 standard, the only way setcontext() + could trigger an asychronous context switch is if this function + were invoked on the ucontext_t pointer passed as the third argument + to a signal handler. But according to draft 5, XPG6, XBD 2.4.3, + setcontext() is not among the set of routines that may be called + from a signal handler. + + o If setcontext() were to be used for asynchronous context switches, + all kinds of synchronization and re-entrancy issues could arise and + these problems have already been solved by real multi-threading + libraries (e.g., POSIX threads or Linux threads). + + o Synchronous context switching can be implemented entirely in + user-level and less state needs to be saved/restored than for an + asynchronous context switch. It is therefore useful to distinguish + between the two types of context switches. Indeed, some + application vendors are known to use setcontext() to implement + co-routines on top of normal (heavier-weight) pre-emptable threads. + +It should be noted that if someone was dead-bent on using setcontext() +on the third arg of a signal handler, then IA-64 Linux could support +this via a special version of sigaction() which arranges that all +signal handlers start executing in a shim function which takes care of +saving the preserved registers before calling the real signal handler +and restoring them afterwards. In other words, we could provide a +compatibility layer which would support setcontext() for asynchronous +context switches. However, given the arguments above, I don't think +that makes sense. setcontext() provides a decent co-routine interface +and we should just discourage any asynchronous use (which just calls +for trouble at any rate). + + Answers were given by: -{UD} Ulrich Drepper, -{DMT} David Mosberger-Tang, +{UD} Ulrich Drepper, +{DMT} David Mosberger-Tang, {RM} Roland McGrath, {AJ} Andreas Jaeger, {EY} Eric Youngdale, @@ -1596,10 +1650,10 @@ Answers were given by: {MK} Mark Kettenis, {ZW} Zack Weinberg, {TK} Thorsten Kukuk, -{GK} Geoffrey Keating, +{GK} Geoffrey Keating, {HJ} H.J. Lu, {CG} Cristian Gafton, -{AO} Alexandre Oliva, +{AO} Alexandre Oliva, {BH} Bruno Haible, Local Variables: diff -durpNa glibc-2.2.2/INSTALL glibc-2.2.3/INSTALL --- glibc-2.2.2/INSTALL Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/INSTALL Wed Apr 25 14:50:52 2001 @@ -303,7 +303,7 @@ build the GNU C library: The GNU C library can only be compiled with the GNU C compiler family. As of the 2.2 release, GCC 2.95.2 or higher is required. - As of this writing, GCC 2.95.2 is the compiler we advise to use. + As of this writing, GCC 2.95.3 is the compiler we advise to use. You can use whatever compiler you like to compile programs that use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in @@ -362,8 +362,7 @@ If you change any of the `configure.in' and if you change any of the message translation files you will need - * GNU `gettext' 0.10.35 or later (version 0.10.35 is a alpha release - and available via ftp from alpha.gnu.org/gnu) + * GNU `gettext' 0.10.36 or later You may also need these packages if you upgrade your source tree using patches, although we try to avoid this. @@ -376,6 +375,7 @@ following patterns: alpha*-*-linux arm-*-linux + cris-*-linux hppa-*-linux iX86-*-gnu iX86-*-linux @@ -384,6 +384,7 @@ following patterns: mips*-*-linux powerpc-*-linux s390-*-linux + s390x-*-linux sparc-*-linux sparc64-*-linux diff -durpNa glibc-2.2.2/Makeconfig glibc-2.2.3/Makeconfig --- glibc-2.2.2/Makeconfig Sat Jan 6 20:35:10 2001 +++ glibc-2.2.3/Makeconfig Tue Apr 17 08:17:07 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1991-1999,2000 Free Software Foundation, Inc. +# Copyright (C) 1991-2000, 2001 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 @@ -725,11 +725,15 @@ $(common-objpfx)soversions.i: $(..)shlib test -n "$$version" && \ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ : "$$conf"` != 0 || continue; \ - lib=`echo $$version | sed 's/=.*$$//'`; \ - if eval test -z "\$${versioned_$${lib}}"; then \ - eval versioned_$${lib}=yes; \ - number=`echo $$version | sed "s/^.*=//"`; \ - echo $$lib $$number $$setname; \ + if test "x$$version" = xDEFAULT; then \ + default_setname="$$setname"; \ + else \ + lib=`echo $$version | sed 's/=.*$$//'`; \ + if eval test -z "\$${versioned_$${lib}}"; then \ + eval versioned_$${lib}=yes; \ + number=`echo $$version | sed "s/^.*=//"`; \ + echo $$lib $$number $${setname:-$${default_setname}}; \ + fi; \ fi; \ done > $@T; exit 0 mv -f $@T $@ diff -durpNa glibc-2.2.2/Makefile glibc-2.2.3/Makefile --- glibc-2.2.2/Makefile Fri Feb 9 11:52:46 2001 +++ glibc-2.2.3/Makefile Mon Apr 9 20:03:22 2001 @@ -267,7 +267,7 @@ distribute := README README.libm INSTAL mkinstalldirs move-if-change install-sh \ test-installation.pl gen-FAQ.pl versions.awk\ gen-sorted.awk abi-versions.awk \ - firstversions.awk) + firstversions.awk documented.sh) distribute := $(strip $(distribute)) generated := $(generated) stubs.h diff -durpNa glibc-2.2.2/Makerules glibc-2.2.3/Makerules --- glibc-2.2.2/Makerules Fri Feb 9 10:03:56 2001 +++ glibc-2.2.3/Makerules Wed Apr 25 14:50:52 2001 @@ -413,29 +413,75 @@ endif lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(+interp) $(build-shlib) -define build-shlib -$(LINK.o) -shared -Wl,-O1 -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \ +define build-shlib-helper +$(LINK.o) -shared -Wl,-O1 $(sysdep-LDFLAGS) $(config-LDFLAGS) \ $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \ $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \ -Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \ $(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \ - -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \ - -Wl,--whole-archive \ + -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) +endef + +ifeq (yes,$(elf)) +# binutils only position loadable notes into the first page for binaries, +# not for shared objects +define build-shlib +$(build-shlib-helper) \ + -o $@.new $(csu-objpfx)abi-note.o -Wl,--verbose \ + $(LDLIBS-$(@F:lib%.so=%).so) 2>&1 | \ + sed -e '/^=========/,/^=========/!d;/^=========/d' \ + -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : { *(.note.ABI-tag) } &/' \ + > $@.lds +rm -f $@.new +$(build-shlib-helper) -o $@ -T $@.lds \ + -Wl,--whole-archive $(csu-objpfx)abi-note.o \ + $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ + $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so) +rm -f $@.lds +endef +else +define build-shlib +$(build-shlib-helper) \ + -o $@ -Wl,--whole-archive \ $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so) endef +endif + +define build-module-helper +$(LINK.o) -shared $(sysdep-LDFLAGS) $(config-LDFLAGS) \ + -B$(csu-objpfx) $(load-map-file) \ + $(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \ + -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) +endef # This macro is similar to build-shlib but it does not define a soname # and it does not depend on the destination name to start with `lib'. +ifeq (yes,$(elf)) +# binutils only position loadable notes into the first page for binaries, +# not for shared objects define build-module -$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \ - -B$(csu-objpfx) $(load-map-file) \ - $(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \ - -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \ - -Wl,--whole-archive \ +$(build-module-helper) \ + -o $@.new $(csu-objpfx)abi-note.o -Wl,--verbose \ + $(LDLIBS-$(@F:lib%.so=%).so) 2>&1 | \ + sed -e '/^=========/,/^=========/!d;/^=========/d' \ + -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : { *(.note.ABI-tag) } &/' \ + > $@.lds +rm -f $@.new +$(build-module-helper) -o $@ -T $@.lds \ + -Wl,--whole-archive $(csu-objpfx)abi-note.o \ + $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ + $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so) +rm -f $@.lds +endef +else +define build-module +$(build-module-helper) \ + -o $@ -Wl,--whole-archive \ $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ $(no-whole-archive) $(LDLIBS-$(@F:%.so=%).so) endef +endif # Don't try to use -lc when making libc.so itself. # Also omits crti.o and crtn.o, which we do not want @@ -454,7 +500,7 @@ LDFLAGS-c.so += -u __register_frame # between libc.so and ld.so, which can make it impossible to upgrade. $(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a $(LINK.o) -nostdlib -nostartfiles -r -o $@ \ - -Wl,-d -Wl,--whole-archive $^ + $(LDFLAGS-c_pic.os) -Wl,-d -Wl,--whole-archive $^ # Use our own special initializer and finalizer files for libc.so. $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \ $(common-objpfx)libc_pic.os \ diff -durpNa glibc-2.2.2/NEWS glibc-2.2.3/NEWS --- glibc-2.2.2/NEWS Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/NEWS Wed Apr 25 14:50:52 2001 @@ -1,11 +1,47 @@ -GNU C Library NEWS -- history of user-visible changes. 2001-2-9 - -Copyright (C) 1992-1999, 2000, 2001 Free Software Foundation, Inc. +GNU C Library NEWS -- history of user-visible changes. 2001-4-20 +Copyright (C) 1992-2000, 2001 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports using the `glibcbug' script to . Questions and suggestions should be send to . + +Version 2.2.3 + +* Intel's IA-64 math library is largely integrated. It provides fast and + accurate implementatations for most basic and standard math functions + in float, double, and long double format. + +* Stephen Moshier implemented j0, j1, jn, y0, y1, yn, lgamma, erf, erfc, + and asin for the 96-bit long double format and asin, log, tan for the + 128-bit long double format. + +* The beginning of a last-bit accurate math library by IBM Haifa were added. + The basic double functions exist today. Contributed by Abraham Ziv + , Moshe Olshansky , Ealan Henis + , and Anna Reitman . + +* An asynchronous name lookup library was added. The interface is designed + after POSIX AIO. The proposal was circulated beforehand to get comments. + No negative ones came in. Implemented by Ulrich Drepper. + +* Port to S390/64bit contributed by Martin Schwidefsky + . + +* David Mosberger implemented the setcontext family + of functions for Linux/IA-64. + +* The RPC code is now thread safe. Threads can now use the same service + of different services at the same time. Patch by Eric Norum + with some help by Ulrich Drepper. + +* Martin Schwidefsky implemented the setcontext + family of functions for Linux/S390. + +* Ulrich Drepper implemented the setcontext family + of functions for Linux/x86. + +* Port to Linux/CRIS contributed by Axis Communications. Version 2.2.2 diff -durpNa glibc-2.2.2/PROJECTS glibc-2.2.3/PROJECTS --- glibc-2.2.2/PROJECTS Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/PROJECTS Mon Mar 26 20:52:47 2001 @@ -37,8 +37,7 @@ contact . for the current status (of course better use a mirror of ftp.gnu.org). -[ 6] Write `long double' versions of the math functions. This should be - done in collaboration with the NetBSD and FreeBSD people. +[ 6] Write `long double' versions of the math functions. The libm is in fact fdlibm (not the same as in Linux libc 5). @@ -124,6 +123,9 @@ contact . [19] A user-level STREAMS implementation should be available if the kernel does not provide the support. +*** This is a much lower priority job now that STREAMS are optional in + XPG. + [20] More conversion modules for iconv(3). Existing modules should be extended to do things like transliteration if this is wanted. @@ -140,9 +142,12 @@ contact . - the nscd creates the hash tables and the information it stores in it in a mmap()ed region. This means no pointers must be used, only offsets. + OR + if POSIX shared memory is available use a named shared memory + region to put the data in - each program using NSS functionality tries to open the file with the data. - - by checking some timestamp (which the nscd renew frequently) + - by checking some timestamp (which the nscd renews frequently) the programs can test whether the file is still valid - if the file is valid look through the nscd and locate the appropriate hash table for the database and lookup the data. @@ -152,7 +157,7 @@ contact . [22] It should be possible to have the information gconv-modules in - a simple database which is faster to access. Using libdb is probably + a simple cache which is faster to access. Using libdb is probably overkill and loading it would probably be slower than reading the plain text file. But a file format with a simple hash table and some data it points to should be fine. Probably it should be @@ -163,7 +168,7 @@ contact . && stat ("gconv-modules.db", &std) == 0 && stp.st_mtime < std.st_mtime) { - ... use the database ... + ... use the cache ... { else { @@ -194,3 +199,9 @@ contact . [26] ...done + + +[27] We need a second test suite with tests which cannot run during a normal + `make check' run. This test suite can require root priviledges and + can test things like DNS (i.e., require network access), + user-interaction, networking in general, and probably many other things. diff -durpNa glibc-2.2.2/README glibc-2.2.3/README --- glibc-2.2.2/README Fri Feb 9 11:10:02 2001 +++ glibc-2.2.3/README Wed Apr 25 16:16:36 2001 @@ -1,4 +1,4 @@ -This directory contains the version 2.2.2 release of the GNU C Library. +This directory contains the version 2.2.3 release of the GNU C Library. Many bugs have been fixed since the last release. Some bugs surely remain. @@ -11,13 +11,16 @@ configurations: alpha*-*-linux-gnu Linux-2.x on DEC Alpha powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems sparc-*-linux-gnu Linux-2.x on SPARC - sparc64-*-linux-gnu Linux-2.x on UltraSPARC + sparc64-*-linux-gnu Linux-2.x on UltraSPARC 64-bit arm-*-none ARM standalone systems arm-*-linux Linux-2.x on ARM arm-*-linuxaout Linux-2.x on ARM using a.out binaries mips*-*-linux-gnu Linux-2.x on MIPS ia64-*-linux-gnu Linux-2.x on ia64 s390-*-linux-gnu Linux-2.x on IBM S/390 + s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit + sh-*-linux-gnu Linux-2.x on Super Hitachi + cris-*-linux-gnu Linux-2.4+ on CRIS Former releases of this library (version 1.09.1 and perhaps earlier versions) used to run on the following configurations: diff -durpNa glibc-2.2.2/Versions.def glibc-2.2.3/Versions.def --- glibc-2.2.2/Versions.def Tue Jan 23 14:07:15 2001 +++ glibc-2.2.3/Versions.def Mon Mar 26 20:52:47 2001 @@ -11,6 +11,7 @@ libc { GLIBC_2.2 GLIBC_2.2.1 GLIBC_2.2.2 + GLIBC_2.2.3 %ifdef USE_IN_LIBIO HURD_CTHREADS_0.3 %endif @@ -31,6 +32,7 @@ libm { GLIBC_2.0 GLIBC_2.1 GLIBC_2.2 + GLIBC_2.2.3 } libnsl { GLIBC_2.0 @@ -88,7 +90,11 @@ ld { GLIBC_2.1.1 GLIBC_2.2 GLIBC_2.2.1 + GLIBC_2.2.3 } libthread_db { GLIBC_2.1.3 +} +libanl { + GLIBC_2.2.3 } diff -durpNa glibc-2.2.2/catgets/Makefile glibc-2.2.3/catgets/Makefile --- glibc-2.2.2/catgets/Makefile Sat Jan 6 20:35:10 2001 +++ glibc-2.2.3/catgets/Makefile Mon Mar 26 20:52:47 2001 @@ -45,7 +45,7 @@ $(objpfx)gencat: $(gencat-modules:%=$(ob catgets-CPPFLAGS := -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%N:$(msgcatdir)/%l/%N:$(msgcatdir)/%l/LC_MESSAGES/%N:"' \ -DHAVE_CONFIG_H -generated = de.msg test1.cat test1.h sample.SJIS.cat +generated = de.msg test1.cat test1.h sample.SJIS.cat test-gencat.h generated-dirs = de tst-catgets-ENV = NLSPATH="$(objpfx)%l/%N.cat" LANG=de @@ -74,5 +74,5 @@ $(objpfx)test-gencat.out: test-gencat.sh $(objpfx)sample.SJIS.cat: sample.SJIS $(objpfx)gencat GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ - $(built-program-cmd) < $(word 1,$^) > $@ + $(built-program-cmd) -H $(objpfx)test-gencat.h < $(word 1,$^) > $@ endif diff -durpNa glibc-2.2.2/catgets/gencat.c glibc-2.2.3/catgets/gencat.c --- glibc-2.2.2/catgets/gencat.c Sat Jan 6 20:35:10 2001 +++ glibc-2.2.3/catgets/gencat.c Mon Mar 26 20:52:47 2001 @@ -649,6 +649,7 @@ duplicated message identifier")); size_t outlen; struct message_list *newp; size_t line_len = strlen (line) + 1; + size_t ident_len = 0; /* We need the conversion. */ if (cd_towc == (iconv_t) -1 @@ -699,6 +700,9 @@ invalid character: message ignored")); normalize_line (fname, start_line, cd_towc, wbuf, current->quote_char, escape_char); + if (ident) + ident_len = line - this_line; + /* Now the string is free of escape sequences. Convert it back into a multibyte character string. First free the memory allocated for the original string. */ @@ -714,7 +718,8 @@ invalid character: message ignored")); outlen = obstack_room (¤t->mem_pool); obstack_blank (¤t->mem_pool, outlen); this_line = (char *) obstack_base (¤t->mem_pool); - outbuf = this_line; + outbuf = this_line + ident_len; + outlen -= ident_len; /* Flush the state. */ iconv (cd_tomb, NULL, NULL, NULL, NULL); @@ -734,9 +739,9 @@ invalid character: message ignored")); newp = (struct message_list *) xmalloc (sizeof (*newp)); newp->number = message_number; - newp->message = line; + newp->message = line + ident_len; /* Remember symbolic name; is NULL if no is given. */ - newp->symbol = ident; + newp->symbol = ident ? line : NULL; /* Remember where we found the character. */ newp->fname = fname; newp->line = start_line; diff -durpNa glibc-2.2.2/catgets/sample.SJIS glibc-2.2.3/catgets/sample.SJIS --- glibc-2.2.2/catgets/sample.SJIS Tue Nov 28 05:55:03 2000 +++ glibc-2.2.3/catgets/sample.SJIS Mon Mar 26 20:52:47 2001 @@ -8,3 +8,5 @@ $set 1 3 sample3:—\’è•\: 4 sample4:TEST\tTAB: 5 sample5:‹@”\\t\Ží—Þ: +$set Another +FOO "message foo" diff -durpNa glibc-2.2.2/catgets/test-gencat.sh glibc-2.2.3/catgets/test-gencat.sh --- glibc-2.2.2/catgets/test-gencat.sh Tue Nov 28 05:55:43 2000 +++ glibc-2.2.3/catgets/test-gencat.sh Mon Mar 26 20:52:47 2001 @@ -1,6 +1,6 @@ #! /bin/sh # Test escape character handling in gencat. -# Copyright (C) 2000 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001 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 @@ -36,5 +36,12 @@ sample3:—\’è•\: sample4:TEST TAB: sample5:‹@”\ \Ží—Þ: EOF +res=$? -exit $? +cat <&6 -echo "configure:1044: checking sysdep dirs" >&5 +echo "configure:1050: checking sysdep dirs" >&5 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1. os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`" @@ -1246,7 +1252,7 @@ echo "$ac_t""$default_sysnames" 1>&6 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1250: checking for a BSD compatible install" >&5 +echo "configure:1256: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1303,7 +1309,7 @@ if test "$INSTALL" = "${srcdir}/scripts/ INSTALL='\$(..)./scripts/install-sh -c' fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1307: checking whether ln -s works" >&5 +echo "configure:1313: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1332,7 +1338,7 @@ fi # Extract the first word of "pwd", so it can be a program name with args. set dummy pwd; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1336: checking for $ac_word" >&5 +echo "configure:1342: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PWD_P'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1371,7 +1377,7 @@ fi # These programs are version sensitive. echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1375: checking build system type" >&5 +echo "configure:1381: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1399,7 +1405,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1403: checking for $ac_word" >&5 +echo "configure:1409: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1433,11 +1439,11 @@ if test -z "$CC"; then else # Found it, now check the version. echo $ac_n "checking version of $CC""... $ac_c" 1>&6 -echo "configure:1437: checking version of $CC" >&5 +echo "configure:1443: checking version of $CC" >&5 ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*) + *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; @@ -1453,7 +1459,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1457: checking for $ac_word" >&5 +echo "configure:1463: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1487,7 +1493,7 @@ if test -z "$MAKE"; then else # Found it, now check the version. echo $ac_n "checking version of $MAKE""... $ac_c" 1>&6 -echo "configure:1491: checking version of $MAKE" >&5 +echo "configure:1497: checking version of $MAKE" >&5 ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1503,12 +1509,20 @@ if test $ac_verc_fail = yes; then fi + +if test -n "$critic_missing"; then +{ echo "configure: error: +*** Some critical program is missing or too old. +*** Check the INSTALL file for required versions." 1>&2; exit 1; } +fi + + for ac_prog in gnumsgfmt gmsgfmt msgfmt do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1512: checking for $ac_word" >&5 +echo "configure:1526: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1542,11 +1556,11 @@ if test -z "$MSGFMT"; then else # Found it, now check the version. echo $ac_n "checking version of $MSGFMT""... $ac_c" 1>&6 -echo "configure:1546: checking version of $MSGFMT" >&5 +echo "configure:1560: checking version of $MSGFMT" >&5 ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 0.[1-9][0-9].* | [1-9].*) + 0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; @@ -1562,7 +1576,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1566: checking for $ac_word" >&5 +echo "configure:1580: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1596,7 +1610,7 @@ if test -z "$MAKEINFO"; then else # Found it, now check the version. echo $ac_n "checking version of $MAKEINFO""... $ac_c" 1>&6 -echo "configure:1600: checking version of $MAKEINFO" >&5 +echo "configure:1614: checking version of $MAKEINFO" >&5 ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1616,7 +1630,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1620: checking for $ac_word" >&5 +echo "configure:1634: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_SED'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1650,7 +1664,7 @@ if test -z "$SED"; then else # Found it, now check the version. echo $ac_n "checking version of $SED""... $ac_c" 1>&6 -echo "configure:1654: checking version of $SED" >&5 +echo "configure:1668: checking version of $SED" >&5 ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1668,7 +1682,7 @@ fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1672: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1686: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1682,12 +1696,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 1686 "configure" +#line 1700 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1718,7 +1732,7 @@ else cross_linkable=yes fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1722: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1736: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_cross'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1730,7 +1744,7 @@ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1734: checking whether we are using GNU C" >&5 +echo "configure:1748: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1739,7 +1753,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1757: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1752,7 +1766,7 @@ if test $ac_cv_prog_gcc != yes; then fi echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1756: checking build system type" >&5 +echo "configure:1770: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1775,7 +1789,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1779: checking for $ac_word" >&5 +echo "configure:1793: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1807,7 +1821,7 @@ done fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1811: checking how to run the C preprocessor" >&5 +echo "configure:1825: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1822,13 +1836,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1846: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1839,13 +1853,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1863: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1856,13 +1870,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1880: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1905,7 +1919,7 @@ if test $RANLIB = ranlib; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1909: checking for $ac_word" >&5 +echo "configure:1923: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1937,7 +1951,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1941: checking for $ac_word" >&5 +echo "configure:1955: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1974,7 +1988,7 @@ fi # Determine whether we are using GNU binutils. echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6 -echo "configure:1978: checking whether $AS is GNU as" >&5 +echo "configure:1992: checking whether $AS is GNU as" >&5 if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1993,7 +2007,7 @@ rm -f a.out gnu_as=$libc_cv_prog_as_gnu echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6 -echo "configure:1997: checking whether $LD is GNU ld" >&5 +echo "configure:2011: checking whether $LD is GNU ld" >&5 if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2013,7 +2027,7 @@ gnu_ld=$libc_cv_prog_ld_gnu # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args. set dummy ${ac_tool_prefix}mig; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2017: checking for $ac_word" >&5 +echo "configure:2031: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2050,12 +2064,6 @@ fi # [GNU assembler.* \([0-9]*\.[0-9.]*\(-ia64-[0-9]*\)*\)], # [2.10.[1-9]* | 2.1[1-9]* | 2.9-ia64-*], AS=: critic_missing=t) -if test -n "$critic_missing"; then -{ echo "configure: error: -*** Some critical program is missing or too old. -*** Check the INSTALL file for required versions." 1>&2; exit 1; } -fi - test -n "$aux_missing" && echo "configure: warning: *** An auxiliary program is missing or too old; *** some features will be disabled. @@ -2076,7 +2084,7 @@ fi # check if ranlib is necessary echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6 -echo "configure:2080: checking whether ranlib is necessary" >&5 +echo "configure:2088: checking whether ranlib is necessary" >&5 if eval "test \"`echo '$''{'libc_cv_ranlib_necessary'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2110,7 +2118,7 @@ fi # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking LD_LIBRARY_PATH variable""... $ac_c" 1>&6 -echo "configure:2114: checking LD_LIBRARY_PATH variable" >&5 +echo "configure:2122: checking LD_LIBRARY_PATH variable" >&5 case ${LD_LIBRARY_PATH} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) ld_library_path_setting="contains current directory" @@ -2130,7 +2138,7 @@ fi # Extract the first word of "bash", so it can be a program name with args. set dummy bash; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2134: checking for $ac_word" >&5 +echo "configure:2142: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2176,7 +2184,7 @@ if test "$BASH" = no; then # Extract the first word of "ksh", so it can be a program name with args. set dummy ksh; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2180: checking for $ac_word" >&5 +echo "configure:2188: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2226,7 +2234,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2230: checking for $ac_word" >&5 +echo "configure:2238: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2258,7 +2266,7 @@ done # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2262: checking for $ac_word" >&5 +echo "configure:2270: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2298,7 +2306,7 @@ fi # Extract the first word of "install-info", so it can be a program name with args. set dummy install-info; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2302: checking for $ac_word" >&5 +echo "configure:2310: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_INSTALL_INFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2333,7 +2341,7 @@ fi if test "$INSTALL_INFO" != "no"; then echo $ac_n "checking for old Debian install-info""... $ac_c" 1>&6 -echo "configure:2337: checking for old Debian install-info" >&5 +echo "configure:2345: checking for old Debian install-info" >&5 if eval "test \"`echo '$''{'libc_cv_old_debian_install_info'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2368,7 +2376,7 @@ fi # Extract the first word of "bison", so it can be a program name with args. set dummy bison; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2372: checking for $ac_word" >&5 +echo "configure:2380: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_BISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2403,7 +2411,7 @@ fi echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6 -echo "configure:2407: checking for signed size_t type" >&5 +echo "configure:2415: checking for signed size_t type" >&5 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2427,12 +2435,12 @@ EOF fi echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6 -echo "configure:2431: checking for libc-friendly stddef.h" >&5 +echo "configure:2439: checking for libc-friendly stddef.h" >&5 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2459: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_friendly_stddef=yes else @@ -2466,7 +2474,7 @@ override stddef.h = # The installed &6 -echo "configure:2470: checking whether we need to use -P to assemble .S files" >&5 +echo "configure:2478: checking whether we need to use -P to assemble .S files" >&5 if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2489,7 +2497,7 @@ asm-CPPFLAGS = -P # The assembler can't fi echo $ac_n "checking whether .text pseudo-op must be used""... $ac_c" 1>&6 -echo "configure:2493: checking whether .text pseudo-op must be used" >&5 +echo "configure:2501: checking whether .text pseudo-op must be used" >&5 if eval "test \"`echo '$''{'libc_cv_dot_text'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2510,7 +2518,7 @@ else fi echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6 -echo "configure:2514: checking for assembler global-symbol directive" >&5 +echo "configure:2522: checking for assembler global-symbol directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2540,7 +2548,7 @@ EOF fi echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6 -echo "configure:2544: checking for .set assembler directive" >&5 +echo "configure:2552: checking for .set assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2583,7 +2591,7 @@ EOF esac echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6 -echo "configure:2587: checking for .symver assembler directive" >&5 +echo "configure:2595: checking for .symver assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2602,7 +2610,7 @@ fi echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6 echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6 -echo "configure:2606: checking for ld --version-script" >&5 +echo "configure:2614: checking for ld --version-script" >&5 if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2625,7 +2633,7 @@ EOF if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o -nostartfiles -nostdlib -Wl,--version-script,conftest.map - 1>&5'; { (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; + 1>&5'; { (eval echo configure:2637: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_version_script_option=yes else @@ -2664,7 +2672,7 @@ if test $shared != no && test $VERSIONIN fi if test $elf = yes; then echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 -echo "configure:2668: checking for .previous assembler directive" >&5 +echo "configure:2676: checking for .previous assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2672,7 +2680,7 @@ else .section foo_section .previous EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2676: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_previous_directive=yes else libc_cv_asm_previous_directive=no @@ -2688,7 +2696,7 @@ EOF else echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 -echo "configure:2692: checking for .popsection assembler directive" >&5 +echo "configure:2700: checking for .popsection assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2696,7 +2704,7 @@ else .pushsection foo_section .popsection EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2708: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_popsection_directive=yes else libc_cv_asm_popsection_directive=no @@ -2713,7 +2721,7 @@ EOF fi fi echo $ac_n "checking for .protected and .hidden assembler directive""... $ac_c" 1>&6 -echo "configure:2717: checking for .protected and .hidden assembler directive" >&5 +echo "configure:2725: checking for .protected and .hidden assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_protected_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2723,7 +2731,7 @@ foo: .hidden bar bar: EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2727: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_protected_directive=yes else libc_cv_asm_protected_directive=no @@ -2735,14 +2743,14 @@ echo "$ac_t""$libc_cv_asm_protected_dire echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6 -echo "configure:2739: checking for -z nodelete option" >&5 +echo "configure:2747: checking for -z nodelete option" >&5 if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2754: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then libc_cv_z_nodelete=yes else @@ -2755,14 +2763,14 @@ echo "$ac_t""$libc_cv_z_nodelete" 1>&6 echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6 -echo "configure:2759: checking for -z nodlopen option" >&5 +echo "configure:2767: checking for -z nodlopen option" >&5 if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then libc_cv_z_nodlopen=yes else @@ -2775,14 +2783,14 @@ echo "$ac_t""$libc_cv_z_nodlopen" 1>&6 echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6 -echo "configure:2779: checking for -z initfirst option" >&5 +echo "configure:2787: checking for -z initfirst option" >&5 if eval "test \"`echo '$''{'libc_cv_z_initfirst'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then libc_cv_z_initfirst=yes else @@ -2793,16 +2801,36 @@ fi echo "$ac_t""$libc_cv_z_initfirst" 1>&6 + + echo $ac_n "checking for -Bgroup option""... $ac_c" 1>&6 +echo "configure:2807: checking for -Bgroup option" >&5 +if eval "test \"`echo '$''{'libc_cv_Bgroup'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + then + libc_cv_Bgroup=yes + else + libc_cv_Bgroup=no + fi + rm -f conftest* +fi + +echo "$ac_t""$libc_cv_Bgroup" 1>&6 + fi if test $elf != yes; then echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 -echo "configure:2801: checking for .init and .fini sections" >&5 +echo "configure:2829: checking for .init and .fini sections" >&5 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_have_initfini=yes else @@ -2834,7 +2862,7 @@ fi if test $elf = yes -a $gnu_ld = yes; then echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6 -echo "configure:2838: checking whether cc puts quotes around section names" >&5 +echo "configure:2866: checking whether cc puts quotes around section names" >&5 if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2871,19 +2899,19 @@ if test $elf = yes; then else if test $ac_cv_prog_cc_works = yes; then echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:2875: checking for _ prefix on C symbol names" >&5 +echo "configure:2903: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* libc_cv_asm_underscores=yes else @@ -2898,17 +2926,17 @@ fi echo "$ac_t""$libc_cv_asm_underscores" 1>&6 else echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:2902: checking for _ prefix on C symbol names" >&5 +echo "configure:2930: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if grep _underscore_test conftest* >/dev/null; then rm -f conftest* libc_cv_asm_underscores=yes @@ -2940,7 +2968,7 @@ if test $elf = yes; then fi echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 -echo "configure:2944: checking for assembler .weak directive" >&5 +echo "configure:2972: checking for assembler .weak directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2963,7 +2991,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive if test $libc_cv_asm_weak_directive = no; then echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 -echo "configure:2967: checking for assembler .weakext directive" >&5 +echo "configure:2995: checking for assembler .weakext directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3001,16 +3029,23 @@ EOF fi case "${host_cpu}-${host_os}" in + cris*) + libc_cv_asm_line_sep='@' + cat >> confdefs.h <&6 -echo "configure:3007: checking for assembler line separator" >&5 +echo "configure:3042: checking for assembler line separator" >&5 if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.s <&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_line_sep='!' else if test -z "$enable_hacker_mode"; then @@ -3032,7 +3067,7 @@ EOF esac echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 -echo "configure:3036: checking for ld --no-whole-archive" >&5 +echo "configure:3071: checking for ld --no-whole-archive" >&5 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3043,7 +3078,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -Wl,--no-whole-archive - -o conftest conftest.c 1>&5'; { (eval echo configure:3047: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:3082: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_no_whole_archive=yes else libc_cv_ld_no_whole_archive=no @@ -3057,7 +3092,7 @@ if test $libc_cv_ld_no_whole_archive = y fi echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6 -echo "configure:3061: checking for gcc -fexceptions" >&5 +echo "configure:3096: checking for gcc -fexceptions" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3068,7 +3103,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -fexceptions - -o conftest conftest.c 1>&5'; { (eval echo configure:3072: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:3107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_exceptions=yes else libc_cv_gcc_exceptions=no @@ -3083,14 +3118,14 @@ fi if test "$base_machine" = alpha ; then echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6 -echo "configure:3087: checking for function ..ng prefix" >&5 +echo "configure:3122: checking for function ..ng prefix" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <<\EOF foo () { } EOF -if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; +if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_alpha_ng_prefix=yes else @@ -3117,19 +3152,19 @@ if test "$host_cpu" = powerpc ; then # Check for a bug present in at least versions 2.8.x of GCC # and versions 1.0.x of EGCS. echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6 -echo "configure:3121: checking whether clobbering cr0 causes problems" >&5 +echo "configure:3156: checking whether clobbering cr0 causes problems" >&5 if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_c_asmcr0_bug='no' else @@ -3151,12 +3186,12 @@ fi fi echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6 -echo "configure:3155: checking for DWARF2 unwind info support" >&5 +echo "configure:3190: checking for DWARF2 unwind info support" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_dwarf2_unwind_info=static else libc_cv_gcc_dwarf2_unwind_info=no @@ -3191,7 +3226,7 @@ fi if test $libc_cv_gcc_dwarf2_unwind_info = no; then if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame -nostdlib -nostartfiles - -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3195: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_dwarf2_unwind_info=yes else libc_cv_gcc_dwarf2_unwind_info=no @@ -3221,12 +3256,12 @@ EOF esac echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6 -echo "configure:3225: checking for __builtin_expect" >&5 +echo "configure:3260: checking for __builtin_expect" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3273: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_builtin_expect=yes else libc_cv_gcc_builtin_expect=no @@ -3251,12 +3286,12 @@ EOF fi echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6 -echo "configure:3255: checking for local label subtraction" >&5 +echo "configure:3290: checking for local label subtraction" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3308: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_subtract_local_labels=yes else libc_cv_gcc_subtract_local_labels=no @@ -3286,22 +3321,23 @@ EOF fi echo $ac_n "checking for libgd""... $ac_c" 1>&6 -echo "configure:3290: checking for libgd" >&5 -old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $libgd_include" -old_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS $libgd_ldflags" -old_LIBS="$LIBS" -LIBS="$LIBS -lgd -lpng -lz -lm" -cat > conftest.$ac_ext <&5 +if test "$with_gd" != "no"; then + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $libgd_include" + old_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $libgd_ldflags" + old_LIBS="$LIBS" + LIBS="$LIBS -lgd -lpng -lz -lm" + cat > conftest.$ac_ext < int main() { gdImagePng (0, 0) ; return 0; } EOF -if { (eval echo configure:3305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBGD=yes else @@ -3311,14 +3347,17 @@ else LIBGD=no fi rm -f conftest* -CFLAGS="$old_CFLAGS" -LDFLAGS="$old_LDFLAGS" -LIBS="$old_LIBS" + CFLAGS="$old_CFLAGS" + LDFLAGS="$old_LDFLAGS" + LIBS="$old_LIBS" +else + LIBGD=no +fi echo "$ac_t""$LIBGD" 1>&6 echo $ac_n "checking size of long double""... $ac_c" 1>&6 -echo "configure:3322: checking size of long double" >&5 +echo "configure:3361: checking size of long double" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3326,7 +3365,7 @@ else ac_cv_sizeof_long_double=0 else cat > conftest.$ac_ext < main() @@ -3337,7 +3376,7 @@ main() exit(0); } EOF -if { (eval echo configure:3341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long_double=`cat conftestval` else @@ -3405,7 +3444,7 @@ if test "$uname" = "sysdeps/generic"; th fi echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 -echo "configure:3409: checking OS release for uname" >&5 +echo "configure:3448: checking OS release for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3427,7 +3466,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>& uname_release="$libc_cv_uname_release" echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 -echo "configure:3431: checking OS version for uname" >&5 +echo "configure:3470: checking OS version for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3449,7 +3488,7 @@ else fi echo $ac_n "checking stdio selection""... $ac_c" 1>&6 -echo "configure:3453: checking stdio selection" >&5 +echo "configure:3492: checking stdio selection" >&5 case $stdio in libio) cat >> confdefs.h <<\EOF @@ -3463,7 +3502,7 @@ echo "$ac_t""$stdio" 1>&6 # Test for old glibc 2.0.x headers so that they can be removed properly # Search only in includedir. echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6 -echo "configure:3467: checking for old glibc 2.0.x headers" >&5 +echo "configure:3506: checking for old glibc 2.0.x headers" >&5 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h" then old_glibc_headers=yes @@ -3518,7 +3557,7 @@ if test $shared = default; then fi echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 -echo "configure:3522: checking whether -fPIC is default" >&5 +echo "configure:3561: checking whether -fPIC is default" >&5 if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3745,6 +3784,7 @@ s%@libc_cv_asm_protected_directive@%$lib s%@libc_cv_z_nodelete@%$libc_cv_z_nodelete%g s%@libc_cv_z_nodlopen@%$libc_cv_z_nodlopen%g s%@libc_cv_z_initfirst@%$libc_cv_z_initfirst%g +s%@libc_cv_Bgroup@%$libc_cv_Bgroup%g s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g s%@no_whole_archive@%$no_whole_archive%g s%@exceptions@%$exceptions%g diff -durpNa glibc-2.2.2/configure.in glibc-2.2.3/configure.in --- glibc-2.2.2/configure.in Fri Feb 9 10:36:07 2001 +++ glibc-2.2.3/configure.in Wed Apr 25 14:50:58 2001 @@ -309,6 +309,8 @@ mips*) base_machine=mips IP22) machine=mips/mips3 ;; *) machine=mips/$machine ;; esac ;; +s390) base_machine=s390 machine=s390/s390-32 ;; +s390x) base_machine=s390 machine=s390/s390-64 ;; sh3*) base_machine=sh machine=sh/sh3 ;; sh4*) base_machine=sh machine=sh/sh4 ;; sparc | sparcv[67]) @@ -317,8 +319,12 @@ sparcv8 | supersparc | hypersparc) base_machine=sparc machine=sparc/sparc32/sparcv8 ;; sparcv8plus | sparcv8plusa | sparcv9) base_machine=sparc machine=sparc/sparc32/sparcv9 ;; +sparcv8plusb | sparcv9b) + base_machine=sparc machine=sparc/sparc32/sparcv9b ;; sparc64 | ultrasparc) base_machine=sparc machine=sparc/sparc64 ;; +sparc64b | ultrasparc3) + base_machine=sparc machine=sparc/sparc64/sparcv9b ;; thumb*) base_machine=thumb machine=arm/thumb/$machine ;; esac changequote([,])dnl @@ -552,15 +558,23 @@ fi AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v, [version \([egcygnustpi-]*[0-9.]*\)], - [*gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*], + [*gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*], critic_missing=t) AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version, [GNU Make[^0-9]*\([0-9][0-9.]*\)], [3.79* | 3.[89]*], critic_missing=t) + +if test -n "$critic_missing"; then +AC_MSG_ERROR([ +*** Some critical program is missing or too old. +*** Check the INSTALL file for required versions.]) +fi + + AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version, [GNU gettext.* \([0-9]*\.[0-9.]*\)], - [0.[1-9][0-9].* | [1-9].*], MSGFMT=: aux_missing=t) + [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*], MSGFMT=: aux_missing=t) AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version, [GNU texinfo.* \([0-9][0-9.]*\)], [4.*], MAKEINFO=: aux_missing=t) @@ -585,12 +599,6 @@ AC_CHECK_TOOL(MIG, mig) # [GNU assembler.* \([0-9]*\.[0-9.]*\(-ia64-[0-9]*\)*\)], # [2.10.[1-9]* | 2.1[1-9]* | 2.9-ia64-*], AS=: critic_missing=t) -if test -n "$critic_missing"; then -AC_MSG_ERROR([ -*** Some critical program is missing or too old. -*** Check the INSTALL file for required versions.]) -fi - test -n "$aux_missing" && AC_MSG_WARN([ *** An auxiliary program is missing or too old; *** some features will be disabled. @@ -990,6 +998,20 @@ EOF fi rm -f conftest*]) AC_SUBST(libc_cv_z_initfirst) + + AC_CACHE_CHECK(for -Bgroup option, + libc_cv_Bgroup, [dnl + cat > conftest.c <&AC_FD_CC]) + then + libc_cv_Bgroup=yes + else + libc_cv_Bgroup=no + fi + rm -f conftest*]) + AC_SUBST(libc_cv_Bgroup) fi if test $elf != yes; then @@ -1121,8 +1143,13 @@ elif test $libc_cv_asm_weakext_directive fi dnl The standard hppa assembler uses `;' to start comments and `!' -dnl as a line separator. +dnl as a line separator. CRIS uses `;' to start comments and `@' for +dnl line separator. case "${host_cpu}-${host_os}" in + cris*) + libc_cv_asm_line_sep='@' + AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) + ;; hppa*linux*) AC_CACHE_CHECK(for assembler line separator, libc_cv_asm_line_sep, [dnl @@ -1324,16 +1351,20 @@ fi dnl Check whether we have the gd library available. AC_MSG_CHECKING(for libgd) -old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $libgd_include" -old_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS $libgd_ldflags" -old_LIBS="$LIBS" -LIBS="$LIBS -lgd -lpng -lz -lm" -AC_TRY_LINK([#include ], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no) -CFLAGS="$old_CFLAGS" -LDFLAGS="$old_LDFLAGS" -LIBS="$old_LIBS" +if test "$with_gd" != "no"; then + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $libgd_include" + old_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $libgd_ldflags" + old_LIBS="$LIBS" + LIBS="$LIBS -lgd -lpng -lz -lm" + AC_TRY_LINK([#include ], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no) + CFLAGS="$old_CFLAGS" + LDFLAGS="$old_LDFLAGS" + LIBS="$old_LIBS" +else + LIBGD=no +fi AC_MSG_RESULT($LIBGD) AC_SUBST(LIBGD) diff -durpNa glibc-2.2.2/conform/data/sys/socket.h-data glibc-2.2.3/conform/data/sys/socket.h-data --- glibc-2.2.2/conform/data/sys/socket.h-data Fri Feb 9 10:04:01 2001 +++ glibc-2.2.3/conform/data/sys/socket.h-data Mon Mar 26 20:52:47 2001 @@ -116,4 +116,5 @@ allow ifra_* allow msg_* allow cmsg_* allow l_* +allow SO* #endif diff -durpNa glibc-2.2.2/conform/data/unistd.h-data glibc-2.2.3/conform/data/unistd.h-data --- glibc-2.2.2/conform/data/unistd.h-data Fri Feb 9 10:04:00 2001 +++ glibc-2.2.3/conform/data/unistd.h-data Mon Mar 26 20:52:47 2001 @@ -313,6 +313,7 @@ function uid_t geteuid (void) function gid_t getgid (void) function int getgroups (int, gid_t[]) function long gethostid (void) +function int gethostname (char*, size_t) function {char*} getlogin (void) function int getlogin_r (char*, size_t) function int getopt (int, char*const[], const char*) diff -durpNa glibc-2.2.2/crypt/Makefile glibc-2.2.3/crypt/Makefile --- glibc-2.2.2/crypt/Makefile Thu Aug 31 14:44:55 2000 +++ glibc-2.2.3/crypt/Makefile Mon Mar 26 20:52:47 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 2000 Free Software Foundation, Inc. +# Copyright (C) 1996, 2000, 2001 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 @@ -57,4 +57,4 @@ endif # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libcrypt.so: $(common-objpfx)libc.so +$(objpfx)libcrypt.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/csu/Makefile glibc-2.2.3/csu/Makefile --- glibc-2.2.2/csu/Makefile Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/csu/Makefile Mon Mar 26 20:52:47 2001 @@ -1,6 +1,6 @@ # Makefile for csu code for GNU C library. -# Copyright (C) 1995,1996,1997,1998,1999,2000 Free Software Foundation, Inc. +# Copyright (C) 1995,1996,1997,1998,1999,2000,2001 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 @@ -10,7 +10,7 @@ # 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 +# 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 @@ -20,7 +20,7 @@ # This directory contains the C startup code (that which calls main). This # consists of the startfile, built from start.c and installed as crt0.o -# (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and +# (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and # crtn.o, special "initializer" and "finalizer" files used in the link # to make the .init and .fini sections work right; both these files are # built (in an arcane manner) from initfini.c. @@ -94,7 +94,7 @@ $(objpfx)initfini.s: initfini.c $(compile.c) -S $(CFLAGS-initfini.s) -finhibit-size-directive \ $(patsubst -f%,-fno-%,$(exceptions)) -o $@ -# We only have one kind of startup code files. Static binaries and +# We only have one kind of startup code files. Static binaries and # shared libraries are build using the PIC version. $(objpfx)crti.S: $(objpfx)initfini.s sed -n -e '1,/@HEADER_ENDS/p' \ @@ -167,13 +167,18 @@ $(addprefix $(objpfx),$(filter-out $(sta $(objpfx)abi-tag.h: $(..)abi-tags $(make-target-directory) rm -f $@.new - sed -e 's/#.*$$//' -e '/^[ ]*$$/d' $< | \ - while read conf tag; do \ + sed -e 's/#.*$$//' -e '/^[ ]*$$/d' $< | \ + while read conf tagos tagver; do \ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ : "$$conf"` != 0 || continue; \ - echo "$$tag" | \ - sed -e 's/[^0-9xXa-fA-F]/ /g' -e 's/ *$$//' \ - -e 's/ /,/g' -e 's/^ */#define ABI_TAG /' > $@.new; \ + ( echo "$$tagos" | \ + sed -e 's/[^0-9xXa-fA-F ]//' \ + -e 's/^/#define __ABI_TAG_OS /'; \ + echo "#ifndef __ABI_TAG_VERSION"; \ + echo "$$tagver" | \ + sed -e 's/[^0-9xXa-fA-F]/ /g' -e 's/ *$$//' \ + -e 's/ /,/g' -e 's/^/# define __ABI_TAG_VERSION /'; \ + echo "#endif" ) > $@.new; \ done if test -r $@.new; then mv -f $@.new $@; \ else echo >&2 'This configuration not matched in $<'; exit 1; fi @@ -199,13 +204,13 @@ $(objpfx)version-info.h: $(common-objpfx os=Linux; \ fi; \ echo "\"Compiled on a $$os $$version system" \ - "on `date +%Y-%m-%d`.\\n\"" ;; \ + "on `date +%Y-%m-%d`.\\n\"" ;; \ *) ;; \ esac; \ files="$(all-Banner-files)"; \ if test -n "$$files"; then \ - echo "\"Available extensions:"; \ - sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \ - echo "\""; \ + echo "\"Available extensions:\\n\""; \ + sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \ + -e 's/\(^.*$$\)/\"\1\\n\"/' $$files; \ fi) > $@T mv -f $@T $@ diff -durpNa glibc-2.2.2/csu/abi-note.S glibc-2.2.3/csu/abi-note.S --- glibc-2.2.2/csu/abi-note.S Fri Dec 1 11:55:01 2000 +++ glibc-2.2.3/csu/abi-note.S Mon Mar 26 20:52:47 2001 @@ -1,5 +1,5 @@ /* Special .init and .fini section support. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it @@ -54,6 +54,7 @@ offset length contents identify the earliest release of that OS that supports this ABI. See abi-tags (top level) for details. */ +#include #include /* OS-specific ABI tag value */ /* The linker (GNU ld 2.8 and later) recognizes an allocated section whose @@ -67,5 +68,6 @@ offset length contents .long 1 /* note type */ 0: .asciz "GNU" /* vendor name */ 1: .align 4 -2: .long ABI_TAG /* note data: the ABI tag */ +2: .long __ABI_TAG_OS /* note data: the ABI tag */ + .long __ABI_TAG_VERSION 3: .align 4 /* pad out section */ diff -durpNa glibc-2.2.2/csu/version.c glibc-2.2.3/csu/version.c --- glibc-2.2.2/csu/version.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/csu/version.c Mon Mar 26 20:52:47 2001 @@ -44,6 +44,7 @@ __libc_print_version (void) __write (STDOUT_FILENO, banner, sizeof banner - 1); } +extern const char *__gnu_get_libc_release (void); const char * __gnu_get_libc_release (void) { @@ -51,6 +52,7 @@ __gnu_get_libc_release (void) } weak_alias (__gnu_get_libc_release, gnu_get_libc_release) +extern const char *__gnu_get_libc_version (void); const char * __gnu_get_libc_version (void) { diff -durpNa glibc-2.2.2/ctype/ctype_l.c glibc-2.2.3/ctype/ctype_l.c --- glibc-2.2.2/ctype/ctype_l.c Fri Feb 14 20:26:11 1997 +++ glibc-2.2.3/ctype/ctype_l.c Thu Apr 12 14:02:00 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1997, 2001 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 @@ -39,11 +39,11 @@ func (__isxdigit_l, _ISxdigit) int (__tolower_l) (int c, __locale_t l) { - return __tolower_l (c, l); + return l->__ctype_tolower[c]; } int (__toupper_l) (int c, __locale_t l) { - return __toupper_l (c, l); + return l->__ctype_toupper[c]; } diff -durpNa glibc-2.2.2/debug/Makefile glibc-2.2.3/debug/Makefile --- glibc-2.2.2/debug/Makefile Fri Jul 7 10:57:25 2000 +++ glibc-2.2.3/debug/Makefile Mon Mar 26 20:52:48 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1998, 1999, 2000, 2001 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 @@ -71,5 +71,9 @@ $(objpfx)xtrace: xtrace.sh # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libSegFault.so: $(common-objpfx)libc.so $(common-objpfx)elf/ld.so -$(objpfx)libpcprofile.so: $(common-objpfx)libc.so $(common-objpfx)elf/ld.so +$(objpfx)libSegFault.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a \ + $(common-objpfx)elf/ld.so +$(objpfx)libpcprofile.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a \ + $(common-objpfx)elf/ld.so diff -durpNa glibc-2.2.2/debug/xtrace.sh glibc-2.2.3/debug/xtrace.sh --- glibc-2.2.2/debug/xtrace.sh Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/debug/xtrace.sh Sat Apr 7 14:02:33 2001 @@ -18,7 +18,7 @@ # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -pcprofileso=@LIBDIR@/libpcprofile.so +pcprofileso=@SLIBDIR@/libpcprofile.so pcprofiledump=@BINDIR@/pcprofiledump # Print usage message. diff -durpNa glibc-2.2.2/dlfcn/Makefile glibc-2.2.3/dlfcn/Makefile --- glibc-2.2.2/dlfcn/Makefile Sat Jan 6 23:38:07 2001 +++ glibc-2.2.3/dlfcn/Makefile Mon Mar 26 20:52:49 2001 @@ -21,7 +21,8 @@ headers := bits/dlfcn.h dlfcn.h extra-libs := libdl libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr eval distribute := dlopenold.c glreflib1.c glreflib2.c failtestmod.c eval.c \ - defaultmod1.c defaultmod2.c errmsg1mod.c + defaultmod1.c defaultmod2.c errmsg1mod.c modatexit.c \ + modcxaatexit.c extra-libs-others := libdl @@ -34,10 +35,13 @@ endif libdl-shared-only-routines += eval ifeq (yes,$(build-shared)) -tests = glrefmain failtest tst-dladdr default errmsg1 +tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit +ifeq (yes,$(have-protected)) +tests += tstatexit +endif endif modules-names = glreflib1 glreflib2 failtestmod defaultmod1 defaultmod2 \ - errmsg1mod + errmsg1mod modatexit modcxaatexit extra-objs += $(modules-names:=.os) eval.os generated := $(modules-names:=.so) @@ -67,3 +71,16 @@ $(objpfx)defaultmod2.so: $(libdl) $(objpfx)errmsg1: $(libdl) $(objpfx)errmsg1.out: $(objpfx)errmsg1 $(objpfx)errmsg1mod.so + +$(objpfx)tstatexit: $(libdl) +$(objpfx)tstatexit.out: $(objpfx)tstatexit $(objpfx)modatexit.so + +$(objpfx)tstcxaatexit: $(libdl) +$(objpfx)tstcxaatexit.out: $(objpfx)tstcxaatexit $(objpfx)modcxaatexit.so + +$(objpfx)modatexit.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a + +# Depend on libc.so so a DT_NEEDED is generated in the shared objects. +# This ensures they will load libc.so for needed symbols if loaded by +# a statically-linked program that hasn't already loaded it. +$(objpfx)libdl.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/dlfcn/modatexit.c glibc-2.2.3/dlfcn/modatexit.c --- glibc-2.2.2/dlfcn/modatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/modatexit.c Sat Apr 7 14:02:33 2001 @@ -0,0 +1,44 @@ +/* Copyright (C) 2001 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. */ + +#include +#include + +int global; +int *ip; + +extern void dummy (void); +extern void foo (void *p); + +void +dummy (void) +{ + printf ("This is %s\n", __FUNCTION__); + *ip = global = 1; +} + + +void +foo (void *p) +{ + extern void *__dso_handle __attribute__ ((__weak__)); + printf ("This is %s\n", __FUNCTION__); + atexit (dummy); + if (&__dso_handle) puts ("have dso handle"); else puts ("no dso handle"); + ip = p; +} diff -durpNa glibc-2.2.2/dlfcn/modcxaatexit.c glibc-2.2.3/dlfcn/modcxaatexit.c --- glibc-2.2.2/dlfcn/modcxaatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/modcxaatexit.c Sat Apr 7 14:02:33 2001 @@ -0,0 +1,41 @@ +/* Copyright (C) 2001 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. */ + +#include +#include + +extern void fluffy (void *p); +extern void bar (void *p); + +int global; + +void +fluffy (void *p) +{ + printf ("This is %s\n", __FUNCTION__); + *(int *) p = global = 1; +} + + +void +bar (void *p) +{ + extern void *__dso_handle; + printf ("This is %s\n", __FUNCTION__); + __cxa_atexit (fluffy, p, __dso_handle); +} diff -durpNa glibc-2.2.2/dlfcn/tstatexit.c glibc-2.2.3/dlfcn/tstatexit.c --- glibc-2.2.2/dlfcn/tstatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/tstatexit.c Fri Mar 9 22:32:33 2001 @@ -0,0 +1,71 @@ +/* Copyright (C) 2001 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. */ + +#include +#include +#include + + +extern void *__dso_handle __attribute__ ((__weak__)); + +int +main (void) +{ + const char fname[] = "modatexit.so"; + void *h; + void (*fp) (void *); + int v = 0; + + if (&__dso_handle == NULL) + { + puts ("__dso_handle not available, cannot perform the test"); + exit (0); + } + + h = dlopen (fname, RTLD_NOW); + if (h == NULL) + { + printf ("cannot open \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + fp = dlsym (h, "foo"); + if (fp == NULL) + { + printf ("cannot find \"foo\": %s\n", dlerror ()); + exit (1); + } + + fp (&v); + + if (dlclose (h) != 0) + { + printf ("cannot close \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + if (v != 1) + { + puts ("module unload didn't change `v'"); + exit (1); + } + + puts ("finishing now"); + + return 0; +} diff -durpNa glibc-2.2.2/dlfcn/tstcxaatexit.c glibc-2.2.3/dlfcn/tstcxaatexit.c --- glibc-2.2.2/dlfcn/tstcxaatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/tstcxaatexit.c Fri Mar 9 22:31:25 2001 @@ -0,0 +1,70 @@ +/* Copyright (C) 2001 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. */ + +#include +#include +#include + +extern void *__dso_handle __attribute__ ((__weak__)); + +int +main (void) +{ + const char fname[] = "modcxaatexit.so"; + void *h; + void (*fp) (void *); + int v = 0; + + if (&__dso_handle == NULL) + { + puts ("__dso_handle not available, cannot perform the test"); + exit (0); + } + + h = dlopen (fname, RTLD_LAZY); + if (h == NULL) + { + printf ("cannot open \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + fp = dlsym (h, "bar"); + if (fp == NULL) + { + printf ("cannot find \"bar\": %s\n", dlerror ()); + exit (1); + } + + fp (&v); + + if (dlclose (h) != 0) + { + printf ("cannot close \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + if (v != 1) + { + puts ("module unload didn't change `v'"); + exit (1); + } + + puts ("finishing now"); + + return 0; +} diff -durpNa glibc-2.2.2/elf/Makefile glibc-2.2.3/elf/Makefile --- glibc-2.2.2/elf/Makefile Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/elf/Makefile Mon Mar 26 20:52:49 2001 @@ -57,7 +57,7 @@ distribute := $(rtld-routines:=.c) dynam neededobj1.c neededobj2.c neededobj3.c neededobj4.c \ neededobj5.c neededobj6.c firstobj.c \ unload2mod.c unload2dep.c ltglobmod1.c ltglobmod2.c \ - testobj.h vismod.h + testobj.h vismod.h globalmod1.c include ../Makeconfig @@ -101,7 +101,7 @@ tests = loadtest restest1 preloadtest lo constload1 order $(tests-vis-$(have-protected)) noload filter unload \ reldep reldep2 reldep3 next $(tests-nodelete-$(have-z-nodelete)) \ $(tests-nodlopen-$(have-z-nodlopen)) neededtest neededtest2 \ - neededtest3 neededtest4 unload2 lateglobal initfirst + neededtest3 neededtest4 unload2 lateglobal initfirst global test-srcs = tst-pathopt tests-vis-yes = vismain tests-nodelete-yes = nodelete @@ -114,7 +114,7 @@ modules-names = testobj1 testobj2 testob $(modules-nodlopen-$(have-z-nodlopen)) filtmod1 filtmod2 \ reldepmod1 reldepmod2 reldepmod3 reldepmod4 nextmod1 nextmod2 \ neededobj1 neededobj2 neededobj3 neededobj4 \ - neededobj5 neededobj6 firstobj \ + neededobj5 neededobj6 firstobj globalmod1 \ unload2mod unload2dep ltglobmod1 ltglobmod2 pathoptobj modules-vis-yes = vismod1 vismod2 vismod3 modules-nodelete-yes = nodelmod1 nodelmod2 nodelmod3 nodelmod4 @@ -188,7 +188,7 @@ $(objpfx)trusted-dirs.st: Makefile $(..) | $(AWK) -f gen-trusted-dirs.awk > ${@:st=T}; $(move-if-change) ${@:st=T} ${@:st=h} touch $@ -CPPFLAGS-dl-load.c = -I$(objpfx). +CPPFLAGS-dl-load.c = -I$(objpfx). -I$(csu-objpfx). ifeq (yes,$(build-shared)) $(inst_slibdir)/$(rtld-version-installed-name): $(objpfx)ld.so $(+force) @@ -246,8 +246,10 @@ test-modules = $(addprefix $(objpfx),$(a generated += $(addsuffix .so,$(strip $(modules-names))) ifeq (yes,$(build-shared)) +ifeq ($(cross-compiling),no) tests: $(objpfx)tst-pathopt.out endif +endif $(objpfx)testobj1.so: $(libdl) $(objpfx)testobj1_1.so: $(objpfx)testobj1.so $(libdl) @@ -271,6 +273,7 @@ $(objpfx)neededobj6.so: $(objpfx)neededo $(objpfx)unload2mod.so: $(objpfx)unload2dep.so $(objpfx)ltglobmod2.so: $(libdl) $(objpfx)firstobj.so: $(shared-thread-library) +$(objpfx)globalmod1.so: $(libdl) # filtmod1.so has a special rule $(filter-out $(objpfx)filtmod1.so, $(test-modules)): $(objpfx)%.so: $(objpfx)%.os @@ -394,3 +397,6 @@ $(objpfx)tst-pathopt.out: tst-pathopt.sh $(objpfx)initfirst: $(libdl) $(objpfx)initfirst.out: $(objpfx)firstobj.so + +$(objpfx)global: $(objpfx)globalmod1.so +$(objpfx)global.out: $(objpfx)reldepmod1.so diff -durpNa glibc-2.2.2/elf/Versions glibc-2.2.3/elf/Versions --- glibc-2.2.2/elf/Versions Thu Nov 2 16:50:07 2000 +++ glibc-2.2.3/elf/Versions Mon Mar 26 20:52:49 2001 @@ -19,7 +19,7 @@ libc { ld { GLIBC_2.0 { # global variables - _dl_debug_impcalls; _dl_debug_fd; + _dl_debug_fd; # Those are in the dynamic linker, but used by libc.so. __libc_enable_secure; _dl_catch_error; _dl_check_all_versions; @@ -30,7 +30,6 @@ ld { _dl_sysdep_start; _r_debug; _dl_global_scope; _dl_lookup_symbol_skip; _dl_lookup_versioned_symbol; _dl_lookup_versioned_symbol_skip; - _dl_debug_message; # Function from libc.so which must be shared with libc. calloc; free; malloc; realloc; @@ -52,8 +51,6 @@ ld { _dl_dst_count; _dl_dst_substitute; } GLIBC_2.2 { - _dl_debug_files; - _dl_init; _dl_load_lock; _dl_argv; _dl_nloaded; _dl_check_map_versions; # this is defined in ld.so and overridden by libc @@ -62,5 +59,8 @@ ld { # variables used elsewhere _dl_out_of_memory; _dl_all_dirs; _dl_init_all_dirs; _dl_clktck; _dl_pagesize; + } + GLIBC_2.2.3 { + _dl_debug_mask; _dl_debug_printf; } } diff -durpNa glibc-2.2.2/elf/cache.c glibc-2.2.3/elf/cache.c --- glibc-2.2.2/elf/cache.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/cache.c Mon Mar 26 20:52:49 2001 @@ -39,6 +39,7 @@ struct cache_entry char *lib; /* Library name. */ char *path; /* Path to find library. */ int flags; /* Flags to indicate kind of library. */ + unsigned int osversion; /* Required OS version. */ uint64_t hwcap; /* Important hardware capabilities. */ int bits_hwcap; /* Number of bits set in hwcap. */ struct cache_entry *next; /* Next entry in list. */ @@ -52,7 +53,8 @@ static const char *flag_descr[] = /* Print a single entry. */ static void -print_entry (const char *lib, int flag, uint64_t hwcap, const char *key) +print_entry (const char *lib, int flag, unsigned int osversion, + uint64_t hwcap, const char *key) { printf ("\t%s (", lib); switch (flag & FLAG_TYPE_MASK) @@ -61,10 +63,10 @@ print_entry (const char *lib, int flag, case FLAG_ELF: case FLAG_ELF_LIBC5: case FLAG_ELF_LIBC6: - fputs (flag_descr [flag & FLAG_TYPE_MASK], stdout); + fputs (flag_descr[flag & FLAG_TYPE_MASK], stdout); break; default: - fputs ("unknown", stdout); + fputs (_("unknown"), stdout); break; } switch (flag & FLAG_REQUIRED_MASK) @@ -77,6 +79,10 @@ print_entry (const char *lib, int flag, case FLAG_IA64_LIB64: fputs (",IA-64", stdout); #endif +#if defined __s390__ || defined __s390x__ + case FLAG_S390_LIB64: + fputs(",64bit", stdout); +#endif case 0: break; default: @@ -85,6 +91,23 @@ print_entry (const char *lib, int flag, } if (hwcap != 0) printf (", hwcap: 0x%" PRIx64, hwcap); + if (osversion != 0) + { + static const char *const abi_tag_os[] = + { + [0] = "Linux", + [1] = "Hurd", + [2] = "Solaris", + [3] = N_("Unknown OS") + }; + unsigned int os = osversion >> 24; + + printf (_(", OS ABI: %s %d.%d.%d"), + _(abi_tag_os[os > 3 ? 3 : os]), + (osversion >> 16) & 0xff, + (osversion >> 8) & 0xff, + osversion & 0xff); + } printf (") => %s\n", key); } @@ -139,7 +162,8 @@ print_cache (const char *cache_name) else { size_t offset = ALIGN_CACHE (sizeof (struct cache_file) - + cache->nlibs * sizeof (struct file_entry)); + + (cache->nlibs + * sizeof (struct file_entry))); /* This is where the strings start. */ cache_data = (const char *) &cache->libs[cache->nlibs]; @@ -150,9 +174,10 @@ print_cache (const char *cache_name) cache_new = (struct cache_file_new *) ((void *)cache + offset); - if (!memcmp (cache_new->magic, CACHEMAGIC_NEW, sizeof CACHEMAGIC_NEW - 1) - && !memcmp (cache_new->version, CACHE_VERSION, - sizeof CACHE_VERSION - 1)) + if (memcmp (cache_new->magic, CACHEMAGIC_NEW, + sizeof CACHEMAGIC_NEW - 1) == 0 + && memcmp (cache_new->version, CACHE_VERSION, + sizeof CACHE_VERSION - 1) == 0) { cache_data = (const char *) cache_new; format = 1; @@ -167,17 +192,19 @@ print_cache (const char *cache_name) /* Print everything. */ for (i = 0; i < cache->nlibs; i++) print_entry (cache_data + cache->libs[i].key, - cache->libs[i].flags, 0, + cache->libs[i].flags, 0, 0, cache_data + cache->libs[i].value); } else if (format == 1) { - printf (_("%d libs found in cache `%s'\n"), cache_new->nlibs, cache_name); + printf (_("%d libs found in cache `%s'\n"), + cache_new->nlibs, cache_name); /* Print everything. */ for (i = 0; i < cache_new->nlibs; i++) print_entry (cache_data + cache_new->libs[i].key, cache_new->libs[i].flags, + cache_new->libs[i].osversion, cache_new->libs[i].hwcap, cache_data + cache_new->libs[i].value); } @@ -217,6 +244,10 @@ int compare (const struct cache_entry *e return 1; else if (e2->hwcap < e1->hwcap) return -1; + if (e2->osversion > e1->osversion) + return 1; + if (e2->osversion < e1->osversion) + return -1; } return res; } @@ -280,12 +311,15 @@ save_cache (const char *cache_name) /* And the list of all entries in the new format. */ file_entries_new_size = sizeof (struct cache_file_new) + cache_entry_count * sizeof (struct file_entry_new); - file_entries_new = (struct cache_file_new *) xmalloc (file_entries_new_size); + file_entries_new = + (struct cache_file_new *) xmalloc (file_entries_new_size); /* Fill in the header. */ memset (file_entries_new, 0, sizeof (struct cache_file_new)); - memcpy (file_entries_new->magic, CACHEMAGIC_NEW, sizeof CACHEMAGIC_NEW - 1); - memcpy (file_entries_new->version, CACHE_VERSION, sizeof CACHE_VERSION - 1); + memcpy (file_entries_new->magic, CACHEMAGIC_NEW, + sizeof CACHEMAGIC_NEW - 1); + memcpy (file_entries_new->version, CACHE_VERSION, + sizeof CACHE_VERSION - 1); file_entries_new->nlibs = cache_entry_count; file_entries_new->len_strings = total_strlen; @@ -319,9 +353,9 @@ save_cache (const char *cache_name) always begins at the beginning of the the new cache struct. */ file_entries_new->libs[idx_new].flags = entry->flags; + file_entries_new->libs[idx_new].osversion = entry->osversion; file_entries_new->libs[idx_new].hwcap = entry->hwcap; file_entries_new->libs[idx_new].key = str_offset; - file_entries_new->libs[idx_new].__unused = 0; } len = strlen (entry->lib); str = stpcpy (str, entry->lib); @@ -354,7 +388,8 @@ save_cache (const char *cache_name) temp_name); /* Create file. */ - fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, 0644); + fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, + S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR); if (fd < 0) error (EXIT_FAILURE, errno, _("Can't create temporary cache file %s"), temp_name); @@ -362,7 +397,8 @@ save_cache (const char *cache_name) /* Write contents. */ if (opt_format != 2) { - if (write (fd, file_entries, file_entries_size) != (ssize_t)file_entries_size) + if (write (fd, file_entries, file_entries_size) + != (ssize_t)file_entries_size) error (EXIT_FAILURE, errno, _("Writing of cache data failed")); } if (opt_format != 0) @@ -370,7 +406,7 @@ save_cache (const char *cache_name) /* Align cache. */ if (opt_format != 2) { - char zero [pad]; + char zero[pad]; if (write (fd, zero, pad) != (ssize_t)pad) error (EXIT_FAILURE, errno, _("Writing of cache data failed")); } @@ -385,9 +421,10 @@ save_cache (const char *cache_name) close (fd); /* Make sure user can always read cache file */ - if (chmod (temp_name, 0644)) + if (chmod (temp_name, S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR)) error (EXIT_FAILURE, errno, - _("Changing access rights of %s to 0644 failed"), temp_name); + _("Changing access rights of %s to %#o failed"), temp_name, + S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR); /* Move temporary to its final location. */ if (rename (temp_name, cache_name)) @@ -412,7 +449,7 @@ save_cache (const char *cache_name) /* Add one library to the cache. */ void add_to_cache (const char *path, const char *lib, int flags, - uint64_t hwcap) + unsigned int osversion, uint64_t hwcap) { struct cache_entry *new_entry, *ptr, *prev; char *full_path; @@ -428,6 +465,7 @@ add_to_cache (const char *path, const ch new_entry->lib = xstrdup (lib); new_entry->path = full_path; new_entry->flags = flags; + new_entry->osversion = osversion; new_entry->hwcap = hwcap; new_entry->bits_hwcap = 0; diff -durpNa glibc-2.2.2/elf/dl-close.c glibc-2.2.3/elf/dl-close.c --- glibc-2.2.2/elf/dl-close.c Sat Jan 13 10:48:47 2001 +++ glibc-2.2.3/elf/dl-close.c Mon Mar 26 20:52:49 2001 @@ -27,8 +27,6 @@ #include #include -#include - /* Type of the constructor functions. */ typedef void (*fini_t) (void); @@ -69,17 +67,15 @@ _dl_close (void *_map) if (map->l_opencount > 1 || map->l_type != lt_loaded) { /* There are still references to this object. Do nothing more. */ - if (__builtin_expect (_dl_debug_files, 0)) + if (//__builtin_expect (_dl_debug_files, 0)) + __builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) { char buf[20]; buf[sizeof buf - 1] = '\0'; - _dl_debug_message (1, "\nclosing file=", map->l_name, - "; opencount == ", - _itoa_word (map->l_opencount, - buf + sizeof buf - 1, 10, 0), - "\n", NULL); + _dl_debug_printf ("\nclosing file=%s; opencount == %u\n", + map->l_name, map->l_opencount); } /* One decrement the object itself, not the dependencies. */ @@ -133,9 +129,8 @@ _dl_close (void *_map) && imap->l_init_called) { /* When debugging print a message first. */ - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling fini: ", imap->l_name, - "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling fini: %s\n\n", imap->l_name); /* Call its termination function. */ if (imap->l_info[DT_FINI_ARRAY] != NULL) diff -durpNa glibc-2.2.2/elf/dl-deps.c glibc-2.2.3/elf/dl-deps.c --- glibc-2.2.2/elf/dl-deps.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-deps.c Thu Apr 12 14:02:01 2001 @@ -1,5 +1,5 @@ /* Load the dependencies of a mapped object. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -120,10 +120,10 @@ empty dynamics string token substitution else \ { \ /* This is for DT_AUXILIARY. */ \ - if (__builtin_expect (_dl_debug_libs, 0)) \ - _dl_debug_message (1, "cannot load auxiliary `", __str, \ - "' because of empty dynamic string" \ - " token substitution\n", NULL); \ + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) \ + _dl_debug_printf ("cannot load auxiliary `%s' because of" \ + "empty dynamic string token " \ + "substitution\n", __str); \ continue; \ } \ } \ @@ -145,6 +145,7 @@ _dl_map_object_deps (struct link_map *ma const char *name; int errno_saved; int errno_reason; + const char *errstring; auto inline void preload (struct link_map *map); @@ -198,6 +199,7 @@ _dl_map_object_deps (struct link_map *ma alloca means we cannot use recursive function calls. */ errno_saved = errno; errno_reason = 0; + errstring = NULL; errno = 0; name = NULL; for (runp = known; runp; ) @@ -236,7 +238,6 @@ _dl_map_object_deps (struct link_map *ma /* Allocate new entry. */ struct list *newp; const char *objname; - const char *errstring; /* Recognize DSTs. */ name = expand_dst (l, strtab + d->d_un.d_val, 0); @@ -281,7 +282,6 @@ _dl_map_object_deps (struct link_map *ma else if (d->d_tag == DT_AUXILIARY || d->d_tag == DT_FILTER) { const char *objname; - const char *errstring; struct list *newp; /* Recognize DSTs. */ @@ -293,12 +293,11 @@ _dl_map_object_deps (struct link_map *ma if (d->d_tag == DT_AUXILIARY) { /* Say that we are about to load an auxiliary library. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "load auxiliary object=", - name, " requested by file=", - l->l_name[0] - ? l->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("load auxiliary object=%s" + " requested by file=%s\n", name, + l->l_name[0] + ? l->l_name : _dl_argv[0]); /* We must be prepared that the addressed shared object is not available. */ @@ -308,6 +307,7 @@ _dl_map_object_deps (struct link_map *ma assert (errstring != NULL); if (errstring != _dl_out_of_memory) free ((char *) errstring); + errstring = NULL; /* Simply ignore this error and continue the work. */ continue; @@ -316,12 +316,11 @@ _dl_map_object_deps (struct link_map *ma else { /* Say that we are about to load an auxiliary library. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "load filtered object=", name, - " requested by file=", - l->l_name[0] - ? l->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("load filtered object=%s" + " requested by file=%s\n", name, + l->l_name[0] + ? l->l_name : _dl_argv[0]); /* For filter objects the dependency must be available. */ if (_dl_catch_error (&objname, &errstring, openaux, &args)) @@ -583,5 +582,5 @@ out: if (errno_reason) _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, - name ?: "", N_("cannot load shared object file")); + errstring ?: "", N_("cannot load shared object file")); } diff -durpNa glibc-2.2.2/elf/dl-dst.h glibc-2.2.3/elf/dl-dst.h --- glibc-2.2.2/elf/dl-dst.h Wed Jun 23 14:50:46 1999 +++ glibc-2.2.3/elf/dl-dst.h Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Handling of dynamic sring tokens. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 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 @@ -24,7 +24,7 @@ size_t __cnt = 0; \ const char *__sf = strchr (name, '$'); \ \ - if (__sf != NULL) \ + if (__builtin_expect (__sf != NULL, 0)) \ __cnt = _dl_dst_count (__sf, is_path); \ \ __cnt; }) diff -durpNa glibc-2.2.2/elf/dl-error.c glibc-2.2.3/elf/dl-error.c --- glibc-2.2.2/elf/dl-error.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-error.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Error handling for runtime dynamic linker. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -97,13 +97,14 @@ _dl_signal_error (int errcode, const cha { /* Lossage while resolving the program's own symbols is always fatal. */ char buffer[1024]; - _dl_sysdep_fatal (_dl_argv[0] ?: "", - ": error while loading shared libraries: ", + _dl_fatal_printf ("\ +%s: error while loading shared libraries: %s%s%s%s%s\n", + _dl_argv[0] ?: "", objname ?: "", objname && *objname ? ": " : "", errstring, errcode ? ": " : "", (errcode ? __strerror_r (errcode, buffer, sizeof buffer) - : ""), "\n", NULL); + : "")); } } @@ -143,7 +144,7 @@ _dl_catch_error (const char **objname, c old = tsd_getspecific (); errcode = setjmp (c.env); - if (errcode == 0) + if (__builtin_expect (errcode, 0) == 0) { tsd_setspecific (&c); (*operate) (args); diff -durpNa glibc-2.2.2/elf/dl-fini.c glibc-2.2.3/elf/dl-fini.c --- glibc-2.2.2/elf/dl-fini.c Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/elf/dl-fini.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Call the termination functions of loaded shared objects. - Copyright (C) 1995,96,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,98,99,2000,2001 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 @@ -146,10 +146,9 @@ _dl_fini (void) continue; /* When debugging print a message first. */ - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling fini: ", - l->l_name[0] ? l->l_name : _dl_argv[0], - "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling fini: %s\n\n", + l->l_name[0] ? l->l_name : _dl_argv[0]); /* First see whether an array is given. */ if (l->l_info[DT_FINI_ARRAY] != NULL) diff -durpNa glibc-2.2.2/elf/dl-init.c glibc-2.2.3/elf/dl-init.c --- glibc-2.2.2/elf/dl-init.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/dl-init.c Mon Mar 26 20:52:49 2001 @@ -53,9 +53,9 @@ call_init (struct link_map *l, int argc, return; /* Print a debug message if wanted. */ - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling init: ", - l->l_name[0] ? l->l_name : _dl_argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling init: %s\n\n", + l->l_name[0] ? l->l_name : _dl_argv[0]); /* Now run the local constructors. There are two forms of them: - the one named by DT_INIT @@ -108,10 +108,10 @@ _dl_init (struct link_map *main_map, int ElfW(Addr) *addrs; unsigned int cnt; - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling preinit: ", - main_map->l_name[0] - ? main_map->l_name : _dl_argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling preinit: %s\n\n", + main_map->l_name[0] + ? main_map->l_name : _dl_argv[0]); addrs = (ElfW(Addr) *) (main_map->l_info[DT_PREINIT_ARRAY]->d_un.d_ptr + main_map->l_addr); diff -durpNa glibc-2.2.2/elf/dl-load.c glibc-2.2.3/elf/dl-load.c --- glibc-2.2.2/elf/dl-load.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/dl-load.c Mon Mar 26 20:52:49 2001 @@ -30,7 +30,8 @@ #include #include #include "dynamic-link.h" -#include +#include +#include #include @@ -112,6 +113,8 @@ struct filebuf size_t _dl_pagesize; +unsigned int _dl_osversion; + int _dl_clktck; extern const char *_dl_platform; @@ -177,26 +180,28 @@ _dl_dst_count (const char *name, int is_ { size_t len = 1; - /* $ORIGIN is not expanded for SUID/GUID programs. + /* $ORIGIN is not expanded for SUID/GUID programs and it must + always appear first in path. - Note that it is no bug that the strings in the first two `strncmp' - calls are longer than the sequence which is actually tested. */ - if ((((strncmp (&name[1], "ORIGIN}", 6) == 0 - && (!__libc_enable_secure - || ((name[7] == '\0' || (is_path && name[7] == ':')) - && (name == start || (is_path && name[-1] == ':')))) - && (len = 7) != 0) - || (strncmp (&name[1], "PLATFORM}", 8) == 0 && (len = 9) != 0)) - && (name[len] == '\0' || name[len] == '/' - || (is_path && name[len] == ':'))) - || (name[1] == '{' - && ((strncmp (&name[2], "ORIGIN}", 7) == 0 - && (!__libc_enable_secure - || ((name[9] == '\0' || (is_path && name[9] == ':')) - && (name == start || (is_path && name[-1] == ':')))) - && (len = 9) != 0) - || (strncmp (&name[2], "PLATFORM}", 9) == 0 - && (len = 11) != 0)))) + Note that it is no bug that the string in the second and + fourth `strncmp' call is longer than the sequence which is + actually tested. */ + if (((strncmp (&name[1], "{ORIGIN}", 8) == 0 && (len = 9) != 0) + || (strncmp (&name[1], "{ORIGIN}" + 1, 6) == 0 + && (name[7] == '\0' || name[7] == '/' + || (is_path && name[7] == ':')) + && (len = 7) != 0))) + { + if (__builtin_expect (!__libc_enable_secure, 1) + && (name == start || (is_path && name[-1] == ':'))) + ++cnt; + } + else if ((strncmp (&name[1], "{PLATFORM}", 10) == 0 + && (len = 11) != 0) + || (strncmp (&name[1], "{PLATFORM}" + 1, 8) == 0 + && (name[9] == '\0' || name[9] == '/' + || (is_path && name[9] == ':')) + && (len = 9) != 0)) ++cnt; name = strchr (name + len, '$'); @@ -222,57 +227,56 @@ _dl_dst_substitute (struct link_map *l, do { - if (*name == '$') + if (__builtin_expect (*name, 'a') == '$') { - const char *repl; - size_t len; + const char *repl = NULL; + size_t len = 1; - /* Note that it is no bug that the strings in the first two `strncmp' - calls are longer than the sequence which is actually tested. */ - if ((((strncmp (&name[1], "ORIGIN}", 6) == 0 && (len = 7) != 0) - || (strncmp (&name[1], "PLATFORM}", 8) == 0 && (len = 9) != 0)) - && (name[len] == '\0' || name[len] == '/' - || (is_path && name[len] == ':'))) - || (name[1] == '{' - && ((strncmp (&name[2], "ORIGIN}", 7) == 0 && (len = 9) != 0) - || (strncmp (&name[2], "PLATFORM}", 9) == 0 - && (len = 11) != 0)))) + /* Note that it is no bug that the string in the second and + fourth `strncmp' call is longer than the sequence which + is actually tested. */ + if (((strncmp (&name[1], "{ORIGIN}", 8) == 0 && (len = 9) != 0) + || (strncmp (&name[1], "{ORIGIN}" + 1, 6) == 0 + && (name[7] == '\0' || name[7] == '/' + || (is_path && name[7] == ':')) + && (len = 7) != 0))) { - repl = ((len == 7 || name[2] == 'O') - ? (__libc_enable_secure - && ((name[len] != '\0' - && (!is_path || name[len] != ':')) - || (name != start - && (!is_path || name[-1] != ':'))) - ? NULL : l->l_origin) - : _dl_platform); + if (__builtin_expect (!__libc_enable_secure, 1) + && (name == start || (is_path && name[-1] == ':'))) + repl = l->l_origin; + } + else if ((strncmp (&name[1], "{PLATFORM}", 10) == 0 + && (len = 11) != 0) + || (strncmp (&name[1], "{PLATFORM}" + 1, 8) == 0 + && (name[9] == '\0' || name[9] == '/' || name[9] == ':') + && (len = 9) != 0)) + repl = _dl_platform; - if (repl != NULL && repl != (const char *) -1) - { - wp = __stpcpy (wp, repl); - name += len; - } - else - { - /* We cannot use this path element, the value of the - replacement is unknown. */ - wp = last_elem; - name += len; - while (*name != '\0' && (!is_path || *name != ':')) - ++name; - } + + if (repl != NULL && repl != (const char *) -1) + { + wp = __stpcpy (wp, repl); + name += len; + } + else if (len > 1) + { + /* We cannot use this path element, the value of the + replacement is unknown. */ + wp = last_elem; + name += len; + while (*name != '\0' && (!is_path || *name != ':')) + ++name; } else /* No DST we recognize. */ *wp++ = *name++; } - else if (is_path && *name == ':') + else { *wp++ = *name++; - last_elem = wp; + if (is_path && *name == ':') + last_elem = wp; } - else - *wp++ = *name++; } while (*name != '\0'); @@ -302,7 +306,7 @@ expand_dynamic_string_token (struct link cnt = DL_DST_COUNT (s, 1); /* If we do not have to replace anything simply copy the string. */ - if (cnt == 0) + if (__builtin_expect (cnt, 0) == 0) return local_strdup (s); /* Determine the length of the substituted string. */ @@ -801,8 +805,8 @@ _dl_map_object_from_fd (const char *name return NULL; /* Print debugging message. */ - if (__builtin_expect (_dl_debug_files, 0)) - _dl_debug_message (1, "file=", name, "; generating link map\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("file=%s; generating link map\n", name); /* This is the ELF header. We read it in `open_verify'. */ header = (void *) fbp->buf; @@ -901,8 +905,8 @@ _dl_map_object_from_fd (const char *name if (ph->p_flags & PF_X) c->prot |= PROT_EXEC; } - break; } + break; } /* Now process the load commands and map segments into memory. */ @@ -949,7 +953,7 @@ _dl_map_object_from_fd (const char *name { /* This object is loaded at a fixed address. This must never happen for objects loaded with dlopen(). */ - if (mode & __RTLD_DLOPEN) + if (__builtin_expect (mode & __RTLD_DLOPEN, 0)) { LOSE (0, N_("cannot dynamically load executable")); } @@ -1003,7 +1007,7 @@ _dl_map_object_from_fd (const char *name _dl_pagesize, c->prot|PROT_WRITE) < 0) LOSE (errno, N_("cannot change memory protections")); } - memset ((void *) zero, 0, zeropage - zero); + memset ((void *) zero, '\0', zeropage - zero); if ((c->prot & PROT_WRITE) == 0) __mprotect ((caddr_t) (zero & ~(_dl_pagesize - 1)), _dl_pagesize, c->prot); @@ -1026,7 +1030,7 @@ _dl_map_object_from_fd (const char *name if (l->l_phdr == NULL) { - /* The program header is not contained in any of the segmenst. + /* The program header is not contained in any of the segments. We have to allocate memory ourself and copy it over from out temporary place. */ ElfW(Phdr) *newp = (ElfW(Phdr) *) malloc (header->e_phnum @@ -1059,35 +1063,15 @@ _dl_map_object_from_fd (const char *name l->l_entry += l->l_addr; - if (__builtin_expect (_dl_debug_files, 0)) - { - const size_t nibbles = sizeof (void *) * 2; - char buf1[nibbles + 1]; - char buf2[nibbles + 1]; - char buf3[nibbles + 1]; - - buf1[nibbles] = '\0'; - buf2[nibbles] = '\0'; - buf3[nibbles] = '\0'; - - memset (buf1, '0', nibbles); - memset (buf2, '0', nibbles); - memset (buf3, '0', nibbles); - _itoa_word ((unsigned long int) l->l_ld, &buf1[nibbles], 16, 0); - _itoa_word ((unsigned long int) l->l_addr, &buf2[nibbles], 16, 0); - _itoa_word (maplength, &buf3[nibbles], 16, 0); - - _dl_debug_message (1, " dynamic: 0x", buf1, " base: 0x", buf2, - " size: 0x", buf3, "\n", NULL); - memset (buf1, '0', nibbles); - memset (buf2, '0', nibbles); - memset (buf3, ' ', nibbles); - _itoa_word ((unsigned long int) l->l_entry, &buf1[nibbles], 16, 0); - _itoa_word ((unsigned long int) l->l_phdr, &buf2[nibbles], 16, 0); - _itoa_word (l->l_phnum, &buf3[nibbles], 10, 0); - _dl_debug_message (1, " entry: 0x", buf1, " phdr: 0x", buf2, - " phnum: ", buf3, "\n\n", NULL); - } + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf (" dynamic: 0x%0*lx base: 0x%0*lx size: 0x%0*Zx\n" + " entry: 0x%0*lx phdr: 0x%0*lx phnum: %*u\n\n", + (int) sizeof (void *) * 2, (unsigned long int) l->l_ld, + (int) sizeof (void *) * 2, (unsigned long int) l->l_addr, + (int) sizeof (void *) * 2, maplength, + (int) sizeof (void *) * 2, (unsigned long int) l->l_entry, + (int) sizeof (void *) * 2, (unsigned long int) l->l_phdr, + (int) sizeof (void *) * 2, l->l_phnum); elf_get_dynamic_info (l); @@ -1126,7 +1110,7 @@ _dl_map_object_from_fd (const char *name /* If this object has DT_SYMBOLIC set modify now its scope. We don't have to do this for the main map. */ if (__builtin_expect (l->l_info[DT_SYMBOLIC] != NULL, 0) - && &l->l_searchlist != l->l_scope[0]) + && &l->l_searchlist != l->l_scope[0]) { /* Create an appropriate searchlist. It contains only this map. @@ -1154,7 +1138,7 @@ _dl_map_object_from_fd (const char *name } /* Remember whether this object must be initialized first. */ - if (l->l_flags_1 & DF_1_INITFIRST) + if (__builtin_expect (l->l_flags_1 & DF_1_INITFIRST, 0)) _dl_initfirst = l; /* Finally the file information. */ @@ -1172,7 +1156,7 @@ print_search_path (struct r_search_path_ char buf[max_dirnamelen + max_capstrlen]; int first = 1; - _dl_debug_message (1, " search path=", NULL); + _dl_debug_printf (" search path="); while (*list != NULL && (*list)->what == what) /* Yes, ==. */ { @@ -1187,18 +1171,23 @@ print_search_path (struct r_search_path_ cp[0] = '\0'; else cp[-1] = '\0'; - _dl_debug_message (0, first ? "" : ":", buf, NULL); - first = 0; + if (first) + { + _dl_debug_printf_c ("%s", buf); + first = 0; + } + else + _dl_debug_printf_c (":%s", buf); } ++list; } if (name != NULL) - _dl_debug_message (0, "\t\t(", what, " from file ", - name[0] ? name : _dl_argv[0], ")\n", NULL); + _dl_debug_printf_c ("\t\t(%s from file %s)\n", what, + name[0] ? name : _dl_argv[0]); else - _dl_debug_message (0, "\t\t(", what, ")\n", NULL); + _dl_debug_printf_c ("\t\t(%s)\n", what); } /* Open a file and verify it is an ELF file for this architecture. We @@ -1229,6 +1218,10 @@ open_verify (const char *name, struct fi [EI_OSABI] = ELFOSABI_SYSV, [EI_ABIVERSION] = 0 }; + static const struct { + ElfW(Word) vendorlen, datalen, type; + char vendor[4]; + } expected_note = { 4, 16, 1, "GNU" }; int fd; /* Open the file. We always open files read-only. */ @@ -1236,6 +1229,10 @@ open_verify (const char *name, struct fi if (fd != -1) { ElfW(Ehdr) *ehdr; + ElfW(Phdr) *phdr, *ph; + ElfW(Word) *abi_note, abi_note_buf[8]; + unsigned int osversion; + size_t maplength; /* We successfully openened the file. Now verify it is a file we can use. */ @@ -1303,12 +1300,7 @@ open_verify (const char *name, struct fi lose (0, fd, name, NULL, NULL, N_("ELF file version does not match current one")); if (! __builtin_expect (elf_machine_matches_host (ehdr), 1)) - { - close_and_out: - __close (fd); - __set_errno (ENOENT); - fd = -1; - } + goto close_and_out; else if (__builtin_expect (ehdr->e_phentsize, sizeof (ElfW(Phdr))) != sizeof (ElfW(Phdr))) lose (0, fd, name, NULL, NULL, @@ -1317,6 +1309,50 @@ open_verify (const char *name, struct fi && __builtin_expect (ehdr->e_type, ET_EXEC) != ET_EXEC) lose (0, fd, name, NULL, NULL, N_("only ET_DYN and ET_EXEC can be loaded")); + + maplength = ehdr->e_phnum * sizeof (ElfW(Phdr)); + if (ehdr->e_phoff + maplength <= fbp->len) + phdr = (void *) (fbp->buf + ehdr->e_phoff); + else + { + phdr = alloca (maplength); + __lseek (fd, SEEK_SET, ehdr->e_phoff); + if (__libc_read (fd, (void *) phdr, maplength) != maplength) + lose (errno, fd, name, NULL, NULL, N_("cannot read file data")); + } + + /* Check .note.ABI-tag if present. */ + for (ph = phdr; ph < &phdr[ehdr->e_phnum]; ++ph) + if (ph->p_type == PT_NOTE && ph->p_filesz == 32 && ph->p_align >= 4) + { + if (ph->p_offset + 32 <= fbp->len) + abi_note = (void *) (fbp->buf + ph->p_offset); + else + { + __lseek (fd, SEEK_SET, ph->p_offset); + if (__libc_read (fd, (void *) abi_note_buf, 32) != 32) + lose (errno, fd, name, NULL, NULL, + N_("cannot read file data")); + abi_note = abi_note_buf; + } + + if (memcmp (abi_note, &expected_note, sizeof (expected_note))) + continue; + + osversion = (abi_note[5] & 0xff) * 65536 + + (abi_note[6] & 0xff) * 256 + + (abi_note[7] & 0xff); + if (abi_note[4] != __ABI_TAG_OS + || (_dl_osversion && _dl_osversion < osversion)) + { + close_and_out: + __close (fd); + __set_errno (ENOENT); + fd = -1; + } + + break; + } } return fd; @@ -1348,10 +1384,11 @@ open_path (const char *name, size_t name size_t cnt; char *edp; int here_any = 0; + int err; /* If we are debugging the search for libraries print the path now if it hasn't happened now. */ - if (__builtin_expect (_dl_debug_libs, 0) + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0) && current_what != this_dir->what) { current_what = this_dir->what; @@ -1372,8 +1409,8 @@ open_path (const char *name, size_t name - buf); /* Print name we try if this is wanted. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, " trying file=", buf, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf (" trying file=%s\n", buf); fd = open_verify (buf, fbp); if (this_dir->status[cnt] == unknown) @@ -1400,7 +1437,8 @@ open_path (const char *name, size_t name /* Remember whether we found any existing directory. */ here_any |= this_dir->status[cnt] == existing; - if (fd != -1 && preloaded && __libc_enable_secure) + if (fd != -1 && __builtin_expect (preloaded, 0) + && __libc_enable_secure) { /* This is an extra security effort to make sure nobody can preload broken shared objects which are in the trusted @@ -1438,7 +1476,7 @@ open_path (const char *name, size_t name return -1; } } - if (here_any && errno != ENOENT && errno != EACCES) + if (here_any && (err = errno) != ENOENT && err != EACCES) /* The file exists and is readable, but something went wrong. */ return -1; @@ -1448,7 +1486,7 @@ open_path (const char *name, size_t name while (*++dirs != NULL); /* Remove the whole path if none of the directories exists. */ - if (! any) + if (__builtin_expect (! any, 0)) { /* Paths which were allocated using the minimal malloc() in ld.so must not be freed using the general free() in libc. */ @@ -1479,9 +1517,7 @@ _dl_map_object (struct link_map *loader, /* If the requested name matches the soname of a loaded object, use that object. Elide this check for names that have not yet been opened. */ - /* XXX Is this test still correct after the reference counter - handling rewrite? */ - if (l->l_opencount == 0) + if (__builtin_expect (l->l_faked, 0) != 0) continue; if (!_dl_name_match_p (name, l)) { @@ -1506,10 +1542,9 @@ _dl_map_object (struct link_map *loader, } /* Display information if we are debugging. */ - if (__builtin_expect (_dl_debug_files, 0) && loader != NULL) - _dl_debug_message (1, "\nfile=", name, "; needed by ", - loader->l_name[0] ? loader->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0) && loader != NULL) + _dl_debug_printf ("\nfile=%s; needed by %s\n", name, + loader->l_name[0] ? loader->l_name : _dl_argv[0]); if (strchr (name, '/') == NULL) { @@ -1517,8 +1552,8 @@ _dl_map_object (struct link_map *loader, size_t namelen = strlen (name) + 1; - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "find library=", name, "; searching\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("find library=%s; searching\n", name); fd = -1; @@ -1593,7 +1628,8 @@ _dl_map_object (struct link_map *loader, &loader->l_runpath_dirs, &realname, &fb); } - if (fd == -1 && (! preloaded || ! __libc_enable_secure)) + if (fd == -1 + && (__builtin_expect (! preloaded, 1) || ! __libc_enable_secure)) { /* Check the list of libraries in the file /etc/ld.so.cache, for compatibility with Linux's ldconfig program. */ @@ -1632,7 +1668,7 @@ _dl_map_object (struct link_map *loader, if (cached) { fd = open_verify (cached, &fb); - if (fd != -1) + if (__builtin_expect (fd, 0) != -1) { realname = local_strdup (cached); if (realname == NULL) @@ -1654,8 +1690,8 @@ _dl_map_object (struct link_map *loader, &realname, &fb); /* Add another newline when we a tracing the library loading. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("\n"); } else { @@ -1668,12 +1704,12 @@ _dl_map_object (struct link_map *loader, else { fd = open_verify (realname, &fb); - if (fd == -1) + if (__builtin_expect (fd, 0) == -1) free (realname); } } - if (fd == -1) + if (__builtin_expect (fd, 0) == -1) { if (trace_mode) { diff -durpNa glibc-2.2.2/elf/dl-lookup.c glibc-2.2.3/elf/dl-lookup.c --- glibc-2.2.2/elf/dl-lookup.c Thu Oct 26 22:57:22 2000 +++ glibc-2.2.3/elf/dl-lookup.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -161,13 +161,12 @@ add_dependency (struct link_map *undef_m ++map->l_opencount; /* Display information if we are debugging. */ - if (__builtin_expect (_dl_debug_files, 0)) - _dl_debug_message (1, "\nfile=", - map->l_name[0] ? map->l_name : _dl_argv[0], - "; needed by ", - undef_map->l_name[0] - ? undef_map->l_name : _dl_argv[0], - " (relocation dependency)\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("\ +\nfile=%s; needed by %s (relocation dependency)\n\n", + map->l_name[0] ? map->l_name : _dl_argv[0], + undef_map->l_name[0] + ? undef_map->l_name : _dl_argv[0]); } else /* Whoa, that was bad luck. We have to search again. */ @@ -242,15 +241,13 @@ _dl_lookup_symbol (const char *undef_nam protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", - (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s'\n", + (reference_name && reference_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "'\n", NULL); + protected ? "protected" : "normal", undef_name); if (__builtin_expect (protected == 0, 1)) { @@ -321,15 +318,13 @@ _dl_lookup_symbol_skip (const char *unde protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s'\n", (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "'\n", NULL); + protected ? "protected" : "normal", undef_name); if (__builtin_expect (protected == 0, 1)) { @@ -449,16 +444,14 @@ _dl_lookup_versioned_symbol (const char protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s' [%s]\n", (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "' [", version->name, - "]\n", NULL); + protected ? "protected" : "normal", + undef_name, version->name); if (__builtin_expect (protected == 0, 1)) { @@ -540,16 +533,14 @@ _dl_lookup_versioned_symbol_skip (const protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", - (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] - ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "' [", version->name, - "]\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s' [%s]\n", + (reference_name && reference_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] + ? current_value.m->l_name : _dl_argv[0], + protected ? "protected" : "normal", + undef_name, version->name); if (__builtin_expect (protected == 0, 1)) { diff -durpNa glibc-2.2.2/elf/dl-minimal.c glibc-2.2.3/elf/dl-minimal.c --- glibc-2.2.2/elf/dl-minimal.c Tue Jan 23 14:07:16 2001 +++ glibc-2.2.3/elf/dl-minimal.c Thu Apr 12 14:02:01 2001 @@ -187,13 +187,10 @@ void weak_function __assert_fail (const char *assertion, const char *file, unsigned int line, const char *function) { - char buf[64]; - buf[sizeof buf - 1] = '\0'; - _dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ", - file, ": ", _itoa_word (line, buf + sizeof buf - 1, 10, 0), - ": ", function ?: "", function ? ": " : "", - "Assertion `", assertion, "' failed!\n", - NULL); + _dl_fatal_printf ("\ +Inconsistency detected by ld.so: %s: %u: %s%sAssertion `%s' failed!\n", + file, line, function ?: "", function ? ": " : "", + assertion); } @@ -203,15 +200,10 @@ __assert_perror_fail (int errnum, const char *function) { char errbuf[64]; - char buf[64]; - buf[sizeof buf - 1] = '\0'; - _dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ", - file, ": ", _itoa_word (line, buf + sizeof buf - 1, 10, 0), - ": ", function ?: "", function ? ": " : "", - "Unexpected error: ", - __strerror_r (errnum, errbuf, sizeof (errbuf)), "\n", - NULL); - + _dl_fatal_printf ("\ +Inconsistency detected by ld.so: %s: %u: %s%sUnexpected error: %s\n", + file, line, function ?: "", function ? ": " : "", + __strerror_r (errnum, errbuf, sizeof (errbuf))); } #endif @@ -260,6 +252,8 @@ __strtoul_internal (const char *nptr, ch || (result == ULONG_MAX / 10 && digval > ULONG_MAX % 10)) { errno = ERANGE; + if (endptr != NULL) + *endptr = (char *) nptr; return ULONG_MAX; } result *= base; @@ -267,5 +261,7 @@ __strtoul_internal (const char *nptr, ch ++nptr; } + if (endptr != NULL) + *endptr = (char *) nptr; return result * sign; } diff -durpNa glibc-2.2.2/elf/dl-misc.c glibc-2.2.3/elf/dl-misc.c --- glibc-2.2.2/elf/dl-misc.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-misc.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Miscellaneous support functions for dynamic linker - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 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 @@ -20,12 +20,16 @@ #include #include #include +#include #include #include +#include #include #include #include +#include #include +#include #include #ifndef MAP_ANON @@ -82,71 +86,190 @@ _dl_sysdep_read_whole_file (const char * int _dl_debug_fd = 2; -void -_dl_sysdep_output (int fd, const char *msg, ...) +/* Bare-bone printf implementation. This function only knows about + the formats and flags needed and can handle only up to 64 stripes in + the output. */ +static void +_dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg) { - va_list ap; + const int niovmax = 64; + struct iovec iov[niovmax]; + int niov = 0; + pid_t pid = 0; + char pidbuf[7]; - va_start (ap, msg); - do + while (*fmt != '\0') { - size_t len = strlen (msg); - __libc_write (fd, msg, len); - msg = va_arg (ap, const char *); + const char *startp = fmt; + + if (tag_p > 0) + { + /* Generate the tag line once. It consists of the PID and a + colon followed by a tab. */ + if (pid == 0) + { + char *p; + pid = __getpid (); + assert (pid >= 0 && pid < 100000); + p = _itoa_word (pid, &pidbuf[5], 10, 0); + while (p > pidbuf) + *--p = '0'; + pidbuf[5] = ':'; + pidbuf[6] = '\t'; + } + + /* Append to the output. */ + assert (niov < niovmax); + iov[niov].iov_len = 7; + iov[niov++].iov_base = pidbuf; + + /* No more tags until we see the next newline. */ + tag_p = -1; + } + + /* Skip everything except % and \n (if tags are needed). */ + while (*fmt != '\0' && *fmt != '%' && (! tag_p || *fmt != '\n')) + ++fmt; + + /* Append constant string. */ + assert (niov < niovmax); + if ((iov[niov].iov_len = fmt - startp) != 0) + iov[niov++].iov_base = (char *) startp; + + if (*fmt == '%') + { + /* It is a format specifier. */ + char fill = ' '; + int width = -1; +#if LONG_MAX != INT_MAX + int long_mod = 0; +#endif + + /* Recognize zero-digit fill flag. */ + if (*++fmt == '0') + { + fill = '0'; + ++fmt; + } + + /* See whether with comes from a parameter. Note that no other + way to specify the width is implemented. */ + if (*fmt == '*') + { + width = va_arg (arg, int); + ++fmt; + } + + /* Recognize the l modifier. It is only important on some + platforms where long and int have a different size. We + can use the same code for size_t. */ + if (*fmt == 'l' || *fmt == 'Z') + { +#if LONG_MAX != INT_MAX + long_mod = 1; +#endif + ++fmt; + } + + switch (*fmt) + { + /* Integer formatting. */ + case 'u': + case 'x': + { + /* We have to make a difference if long and int have a + different size. */ +#if LONG_MAX != INT_MAX + unsigned long int num = (long_mod + ? va_arg (arg, unsigned long int) + : va_arg (arg, unsigned int)); +#else + unsigned long int num = va_arg (arg, unsigned int); +#endif + /* We use alloca() to allocate the buffer with the most + pessimistic guess for the size. Using alloca() allows + having more than one integer formatting in a call. */ + char *buf = (char *) alloca (3 * sizeof (unsigned long int)); + char *endp = &buf[3 * sizeof (unsigned long int)]; + char *cp = _itoa_word (num, endp, *fmt == 'x' ? 16 : 10, 0); + + /* Pad to the width the user specified. */ + if (width != -1) + while (endp - cp < width) + *--cp = fill; + + iov[niov].iov_base = cp; + iov[niov].iov_len = endp - cp; + ++niov; + } + break; + + case 's': + /* Get the string argument. */ + iov[niov].iov_base = va_arg (arg, char *); + iov[niov].iov_len = strlen (iov[niov].iov_base); + ++niov; + break; + + default: + assert (! "invalid format specifier"); + } + ++fmt; + } + else if (*fmt == '\n') + { + /* See whether we have to print a single newline character. */ + if (fmt == startp) + { + iov[niov].iov_base = (char *) startp; + iov[niov++].iov_len = 1; + } + else + /* No, just add it to the rest of the string. */ + ++iov[niov - 1].iov_len; + + /* Next line, print a tag again. */ + tag_p = 1; + ++fmt; + } } - while (msg != NULL); - va_end (ap); + + /* Finally write the result. */ + __writev (fd, iov, niov); } +/* Write to debug file. */ void -_dl_debug_message (int new_line, const char *msg, ...) +_dl_debug_printf (const char *fmt, ...) { - /* We print the strings we get passed one after the other but start all - lines using the current PID. */ - int pid = 0; - va_list ap; + va_list arg; - va_start (ap, msg); - do - if (msg[0] == '\0') - /* Get the next argument. */ - msg = va_arg (ap, const char *); - else - { - const char *endp; + va_start (arg, fmt); + _dl_debug_vdprintf (_dl_debug_fd, 1, fmt, arg); + va_end (arg); +} - /* We actually will print something in this line. So print the - PID now if needed. */ - if (new_line) - { - char buf[7]; - char *p; - if (pid == 0) - pid = __getpid (); - assert (pid >= 0 && pid < 100000); - p = _itoa_word (pid, &buf[5], 10, 0); - while (p > buf) - *--p = '0'; - buf[5] = ':'; - buf[6] = '\t'; - __libc_write (_dl_debug_fd, buf, 7); - new_line = 0; - } - endp = msg + strcspn (msg, "\n"); - if (*endp == '\0') - { - __libc_write (_dl_debug_fd, msg, endp - msg); - msg = va_arg (ap, const char *); - } - else - { - __libc_write (_dl_debug_fd, msg, endp - msg + 1); - msg = endp + 1; - new_line = 1; - } - } - while (msg != NULL); - va_end (ap); +/* Write to debug file but don't start with a tag. */ +void +_dl_debug_printf_c (const char *fmt, ...) +{ + va_list arg; + + va_start (arg, fmt); + _dl_debug_vdprintf (_dl_debug_fd, -1, fmt, arg); + va_end (arg); +} + + +/* Write the given file descriptor. */ +void +_dl_dprintf (int fd, const char *fmt, ...) +{ + va_list arg; + + va_start (arg, fmt); + _dl_debug_vdprintf (fd, 0, fmt, arg); + va_end (arg); } diff -durpNa glibc-2.2.2/elf/dl-object.c glibc-2.2.3/elf/dl-object.c --- glibc-2.2.2/elf/dl-object.c Thu Aug 31 14:44:57 2000 +++ glibc-2.2.3/elf/dl-object.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Storage management for the chain of loaded shared objects. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -73,9 +73,10 @@ _dl_new_object (char *realname, const ch { while (loader->l_loader != NULL) loader = loader->l_loader; - new->l_scope[idx] = &loader->l_searchlist; + if (idx == 0 || &loader->l_searchlist != new->l_scope[0]) + new->l_scope[idx] = &loader->l_searchlist; } - else + else if (idx == 0 || &new->l_searchlist != new->l_scope[0]) new->l_scope[idx] = &new->l_searchlist; new->l_local_scope[0] = &new->l_searchlist; diff -durpNa glibc-2.2.2/elf/dl-open.c glibc-2.2.3/elf/dl-open.c --- glibc-2.2.2/elf/dl-open.c Sat Jan 13 10:48:47 2001 +++ glibc-2.2.3/elf/dl-open.c Mon Mar 26 20:52:49 2001 @@ -242,18 +242,9 @@ dl_open_worker (void *a) if (new->l_searchlist.r_list != NULL) { /* Let the user know about the opencount. */ - if (__builtin_expect (_dl_debug_files, 0)) - { - char buf[20]; - - buf[sizeof buf - 1] = '\0'; - - _dl_debug_message (1, "opening file=", new->l_name, - "; opencount == ", - _itoa_word (new->l_opencount, - buf + sizeof buf - 1, 10, 0), - "\n\n", NULL); - } + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("opening file=%s; opencount == %u\n\n", + new->l_name, new->l_opencount); /* If the user requested the object to be in the global namespace but it is not so far, add it now. */ @@ -342,18 +333,9 @@ dl_open_worker (void *a) __libc_multiple_libcs = 1; /* Let the user know about the opencount. */ - if (__builtin_expect (_dl_debug_files, 0)) - { - char buf[20]; - - buf[sizeof buf - 1] = '\0'; - - _dl_debug_message (1, "opening file=", new->l_name, - "; opencount == ", - _itoa_word (new->l_opencount, - buf + sizeof buf - 1, 10, 0), - "\n\n", NULL); - } + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("opening file=%s; opencount == %u\n\n", + new->l_name, new->l_opencount); } @@ -453,17 +435,15 @@ show_scope (struct link_map *new) numbuf[0] = '0' + scope_cnt; numbuf[1] = '\0'; - _dl_sysdep_message ("scope ", numbuf, ":", NULL); + _dl_printf ("scope %s:", numbuf); for (cnt = 0; cnt < new->l_scope[scope_cnt]->r_nlist; ++cnt) if (*new->l_scope[scope_cnt]->r_list[cnt]->l_name) - _dl_sysdep_message (" ", - new->l_scope[scope_cnt]->r_list[cnt]->l_name, - NULL); + _dl_printf (" %s", new->l_scope[scope_cnt]->r_list[cnt]->l_name) else - _dl_sysdep_message ("
", NULL); + _dl_printf ("
", NULL); - _dl_sysdep_message ("\n", NULL); + _dl_printf ("\n", NULL); } } #endif diff -durpNa glibc-2.2.2/elf/dl-profile.c glibc-2.2.3/elf/dl-profile.c --- glibc-2.2.2/elf/dl-profile.c Wed Jan 10 15:54:22 2001 +++ glibc-2.2.3/elf/dl-profile.c Mon Mar 26 20:52:49 2001 @@ -261,14 +261,13 @@ _dl_start_profile (struct link_map *map, #else # define EXTRA_FLAGS #endif - fd = __open (filename, O_RDWR | O_CREAT EXTRA_FLAGS, 0666); + fd = __open (filename, O_RDWR | O_CREAT EXTRA_FLAGS, DEFFILEMODE); if (fd == -1) { /* We cannot write the profiling data so don't do anything. */ char buf[400]; - _dl_sysdep_message (filename, ": cannot open file: ", - __strerror_r (errno, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot open file: %s\n", filename, + __strerror_r (errno, buf, sizeof buf)); return; } @@ -278,9 +277,8 @@ _dl_start_profile (struct link_map *map, char buf[400]; int errnum = errno; __close (fd); - _dl_sysdep_message (filename, ": cannot stat file: ", - __strerror_r (errnum, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot stat file: %s\n", filename, + __strerror_r (errnum, buf, sizeof buf)); return; } @@ -300,9 +298,8 @@ _dl_start_profile (struct link_map *map, cannot_create: errnum = errno; __close (fd); - _dl_sysdep_message (filename, ": cannot create file: ", - __strerror_r (errnum, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot create file: %s\n", filename, + __strerror_r (errnum, buf, sizeof buf)); return; } @@ -319,9 +316,8 @@ _dl_start_profile (struct link_map *map, if (addr != NULL) __munmap ((void *) addr, expected_size); - _dl_sysdep_message (filename, - ": file is no correct profile data file for `", - _dl_profile, "'\n", NULL); + _dl_error_printf ("%s: file is no correct profile data file for `%s'\n", + filename, _dl_profile); return; } @@ -332,9 +328,8 @@ _dl_start_profile (struct link_map *map, char buf[400]; int errnum = errno; __close (fd); - _dl_sysdep_message (filename, ": cannot map file: ", - __strerror_r (errnum, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot map file: %s\n", filename, + __strerror_r (errnum, buf, sizeof buf)); return; } @@ -377,7 +372,7 @@ _dl_start_profile (struct link_map *map, if (tos == NULL) { __munmap ((void *) addr, expected_size); - _dl_sysdep_fatal ("Out of memory while initializing profiler\n", NULL); + _dl_fatal_printf ("Out of memory while initializing profiler\n"); /* NOTREACHED */ } diff -durpNa glibc-2.2.2/elf/dl-reloc.c glibc-2.2.3/elf/dl-reloc.c --- glibc-2.2.2/elf/dl-reloc.c Thu Aug 31 14:44:57 2000 +++ glibc-2.2.3/elf/dl-reloc.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Relocate a shared object and resolve its references to other loaded objects. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -40,10 +40,9 @@ _dl_relocate_object (struct link_map *l, && __builtin_expect (l->l_info[DT_BIND_NOW] != NULL, 0)) lazy = 0; - if (__builtin_expect (_dl_debug_reloc, 0)) - _dl_debug_message (1, "\nrelocation processing: ", - l->l_name[0] ? l->l_name : _dl_argv[0], - lazy ? " (lazy)\n" : "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_RELOC, 0)) + _dl_printf ("\nrelocation processing: %s%s\n", + l->l_name[0] ? l->l_name : _dl_argv[0], lazy ? " (lazy)" : ""); if (__builtin_expect (l->l_info[DT_TEXTREL] != NULL, 0)) { @@ -99,17 +98,18 @@ cannot make segment writable for relocat if it only contains lead function) the l_info[DT_PLTRELSZ] will be NULL. */ if (l->l_info[DT_PLTRELSZ] == NULL) - _dl_sysdep_fatal (_dl_argv[0] ?: "", - ": profiler found no PLTREL in object ", - l->l_name, "\n", NULL); + _dl_fatal_printf ("%s: profiler found no PLTREL in object %s\n", + _dl_argv[0] ?: "", + l->l_name); l->l_reloc_result = (ElfW(Addr) *) calloc (sizeof (ElfW(Addr)), l->l_info[DT_PLTRELSZ]->d_un.d_val); if (l->l_reloc_result == NULL) - _dl_sysdep_fatal (_dl_argv[0] ?: "", - ": profiler out of memory shadowing PLTREL of ", - l->l_name, "\n", NULL); + _dl_fatal_printf ("\ +%s: profiler out of memory shadowing PLTREL of %s\n", + _dl_argv[0] ?: "", + l->l_name); } } diff -durpNa glibc-2.2.2/elf/dl-support.c glibc-2.2.3/elf/dl-support.c --- glibc-2.2.2/elf/dl-support.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-support.c Wed Apr 25 14:50:58 2001 @@ -29,6 +29,7 @@ #include #include #include +#include extern char *__progname; char **_dl_argv = &__progname; /* This is checked for some error messages. */ @@ -37,13 +38,7 @@ char **_dl_argv = &__progname; /* This i const char *_dl_platform; size_t _dl_platformlen; -int _dl_debug_libs; -int _dl_debug_impcalls; -int _dl_debug_bindings; -int _dl_debug_symbols; -int _dl_debug_versions; -int _dl_debug_reloc; -int _dl_debug_files; +int _dl_debug_mask; int _dl_lazy; /* XXX I know about at least one case where we depend on the old weak behavior (it has to do with librt). Until we get DSO groups implemented @@ -98,6 +93,11 @@ struct r_scope_elem *_dl_main_searchlist /* Nonzero during startup. */ int _dl_starting_up = 1; +/* Initial value of the CPU clock. */ +#if HP_TIMING_AVAIL +hp_timing_t _dl_cpuclock_offset; +#endif + /* During the program run we must not modify the global data of loaded shared object simultanously in two threads. Therefore we protect `_dl_open' and `_dl_close' in dl-close.c. @@ -133,6 +133,10 @@ static void non_dynamic_init (void) __at static void non_dynamic_init (void) { +#if HP_TIMING_AVAIL + HP_TIMING_NOW (_dl_cpuclock_offset); +#endif + if (!_dl_pagesize) _dl_pagesize = __getpagesize (); diff -durpNa glibc-2.2.2/elf/dl-version.c glibc-2.2.3/elf/dl-version.c --- glibc-2.2.2/elf/dl-version.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-version.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Handle symbol and library versioning. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -83,10 +83,11 @@ match_symbol (const char *name, ElfW(Wor ElfW(Verdef) *def; /* Display information about what we are doing while debugging. */ - if (__builtin_expect (_dl_debug_versions, 0)) - _dl_debug_message (1, "checking for version `", string, "' in file ", - map->l_name[0] ? map->l_name : _dl_argv[0], - " required by file ", name, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_VERSIONS, 0)) + _dl_debug_printf ("\ +checking for version `%s' in file %s required by file %s\n", + string, map->l_name[0] ? map->l_name : _dl_argv[0], + name); if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0)) { diff -durpNa glibc-2.2.2/elf/do-lookup.h glibc-2.2.3/elf/do-lookup.h --- glibc-2.2.2/elf/do-lookup.h Thu Aug 31 14:44:57 2000 +++ glibc-2.2.3/elf/do-lookup.h Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -60,10 +60,9 @@ FCT (const char *undef_name, unsigned lo continue; /* Print some debugging info if wanted. */ - if (__builtin_expect (_dl_debug_symbols, 0)) - _dl_debug_message (1, "symbol=", undef_name, "; lookup in file=", - map->l_name[0] ? map->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_SYMBOLS, 0)) + _dl_debug_printf ("symbol=%s; lookup in file=%s\n", undef_name, + map->l_name[0] ? map->l_name : _dl_argv[0]); symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); diff -durpNa glibc-2.2.2/elf/elf.h glibc-2.2.3/elf/elf.h --- glibc-2.2.2/elf/elf.h Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/elf/elf.h Wed Apr 25 14:50:58 2001 @@ -169,6 +169,7 @@ typedef struct #define EM_88K 5 /* Motorola m88k family */ #define EM_860 7 /* Intel 80860 */ #define EM_MIPS 8 /* MIPS R3000 big-endian */ +#define EM_S370 9 /* IBM System/370 */ #define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */ #define EM_PARISC 15 /* HPPA */ @@ -177,6 +178,7 @@ typedef struct #define EM_960 19 /* Intel 80960 */ #define EM_PPC 20 /* PowerPC */ #define EM_PPC64 21 /* PowerPC 64-bit */ +#define EM_S390 22 /* IBM S390 */ #define EM_V800 36 /* NEC V800 series */ #define EM_FR20 37 /* Fujitsu FR20 */ @@ -204,7 +206,8 @@ typedef struct #define EM_ME16 59 /* Toyota ME16 processor */ #define EM_ST100 60 /* STMicroelectronic ST100 processor */ #define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ -#define EM_X8664 62 /* AMD x86-64 */ +#define EM_X86_64 62 /* AMD x86-64 architecture */ +#define EM_PDSP 63 /* Sony DSP Processor */ #define EM_FX66 66 /* Siemens FX66 microcontroller */ #define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ @@ -216,14 +219,29 @@ typedef struct #define EM_SVX 73 /* Silicon Graphics SVx */ #define EM_AT19 74 /* STMicroelectronics ST19 8 bit mc */ #define EM_VAX 75 /* Digital VAX */ -#define EM_NUM 76 +#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ +#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ +#define EM_HUANY 81 /* Harvard University machine-independent object files */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi D10V */ +#define EM_D30V 86 /* Mitsubishi D30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10300 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_NUM 92 /* If it is necessary to assign new unofficial EM_* values, please pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision with official or non-GNU unofficial values. */ #define EM_ALPHA 0x9026 -#define EM_S390 0xA390 /* IBM S390 */ /* Legal values for e_version (version). */ @@ -875,6 +893,15 @@ typedef struct performed by the kernel. */ #define AT_FPUCW 18 /* Used FPU control word. */ +/* Cache block sizes. */ +#define AT_DCACHEBSIZE 19 /* Data cache block size. */ +#define AT_ICACHEBSIZE 20 /* Instruction cache block size. */ +#define AT_UCACHEBSIZE 21 /* Unified cache block size. */ + +/* A special ignored value for PPC, used by the kernel to control the + interpretation of the AUXV. Must be > 16. */ +#define AT_IGNOREPPC 22 /* Entry should be ignored */ + /* Note section contents. Each entry in the note section begins with a header of a fixed form. */ @@ -1099,6 +1126,7 @@ typedef struct #define HWCAP_SPARC_SWAP 4 #define HWCAP_SPARC_MULDIV 8 #define HWCAP_SPARC_V9 16 /* The cpu is v9, so v8plus is ok. */ +#define HWCAP_SPARC_ULTRA3 32 /* MIPS R3000 specific definitions. */ @@ -1509,12 +1537,14 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */ #define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */ #define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */ -#define R_PARISC_DIR14R 5 /* Right 14 bits of eff. address. */ +#define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */ #define R_PARISC_PCREL32 9 /* 32-bit rel. address. */ #define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */ #define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */ #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ +#define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ +#define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ @@ -1772,9 +1802,21 @@ typedef Elf32_Addr Elf32_Conflict; #define EF_ARM_APCS_26 0x08 #define EF_ARM_APCS_FLOAT 0x10 #define EF_ARM_PIC 0x20 -#define EF_ALIGN8 0x40 /* 8-bit structure alignment is in use */ -#define EF_NEW_ABI 0x80 -#define EF_OLD_ABI 0x100 +#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */ +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 + +/* Other constants defined in the ARM ELF spec. version B-01. */ +/* NB. These conflict with values defined above. */ +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 /* Additional symbol types for Thumb */ #define STT_ARM_TFUNC 0xd @@ -1814,6 +1856,12 @@ typedef Elf32_Addr Elf32_Conflict; #define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */ #define R_ARM_GOT32 26 /* 32 bit GOT entry */ #define R_ARM_PLT32 27 /* 32 bit PLT address */ +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 #define R_ARM_GNU_VTENTRY 100 #define R_ARM_GNU_VTINHERIT 101 #define R_ARM_THM_PC11 102 /* thumb unconditional branch */ @@ -1992,9 +2040,42 @@ typedef Elf32_Addr Elf32_Conflict; #define R_390_GOT16 15 /* 16 bit GOT offset. */ #define R_390_PC16 16 /* PC relative 16 bit. */ #define R_390_PC16DBL 17 /* PC relative 16 bit shifted by 1. */ -#define R_390_PLT16DBL 18 /* 32 bit PC rel. PLT shifted by 1. */ +#define R_390_PLT16DBL 18 /* 16 bit PC rel. PLT shifted by 1. */ +#define R_390_PC32DBL 19 /* PC relative 32 bit shifted by 1. */ +#define R_390_PLT32DBL 20 /* 32 bit PC rel. PLT shifted by 1. */ +#define R_390_GOTPCDBL 21 /* 32 bit PC rel. GOT shifted by 1. */ +#define R_390_64 22 /* Direct 64 bit. */ +#define R_390_PC64 23 /* PC relative 64 bit. */ +#define R_390_GOT64 24 /* 64 bit GOT offset. */ +#define R_390_PLT64 25 /* 64 bit PC relative PLT address. */ +#define R_390_GOTENT 26 /* 32 bit PC rel. to GOT entry >> 1. */ + /* Keep this the last entry. */ #define R_390_NUM 19 + +/* CRIS relocations. */ +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 __END_DECLS diff -durpNa glibc-2.2.2/elf/global.c glibc-2.2.3/elf/global.c --- glibc-2.2.2/elf/global.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/elf/global.c Tue Mar 20 23:21:34 2001 @@ -0,0 +1,7 @@ +extern int test (void); + +int +main (void) +{ + return test (); +} diff -durpNa glibc-2.2.2/elf/globalmod1.c glibc-2.2.3/elf/globalmod1.c --- glibc-2.2.2/elf/globalmod1.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/elf/globalmod1.c Sat Apr 7 14:02:34 2001 @@ -0,0 +1,17 @@ +#include +#include + +extern int test (void); + +int +test (void) +{ + (void) dlopen ("reldepmod4.so", RTLD_LAZY | RTLD_GLOBAL); + if (dlsym (RTLD_DEFAULT, "call_me") != NULL) + { + puts ("found \"call_me\""); + return 0; + } + puts ("didn't find \"call_me\""); + return 1; +} diff -durpNa glibc-2.2.2/elf/ldconfig.c glibc-2.2.3/elf/ldconfig.c --- glibc-2.2.2/elf/ldconfig.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/ldconfig.c Mon Mar 26 20:52:49 2001 @@ -37,9 +37,6 @@ #include "ldconfig.h" #include "dl-cache.h" -/* We don't need this here - silence the compiler. */ -#define _dl_sysdep_message(string, args...) do {} while (0); - #include "dl-procinfo.h" #ifndef LD_SO_CONF @@ -51,19 +48,11 @@ #define PACKAGE _libc_intl_domainname -struct lib_entry - { - int flags; - uint64_t hwcap; - char *lib; - char *path; - }; - static const struct { const char *name; int flag; -} lib_types [] = +} lib_types[] = { {"libc4", FLAG_LIBC4}, {"libc5", FLAG_ELF_LIBC5}, @@ -319,7 +308,7 @@ add_dir (const char *line) *equal_sign = '\0'; ++equal_sign; entry->flag = FLAG_ANY; - for (i = 0; i < sizeof (lib_types) / sizeof (lib_types [0]); ++i) + for (i = 0; i < sizeof (lib_types) / sizeof (lib_types[0]); ++i) if (strcmp (equal_sign, lib_types[i].name) == 0) { entry->flag = lib_types[i].flag; @@ -337,7 +326,7 @@ add_dir (const char *line) i = strlen (entry->path) - 1; while (entry->path[i] == '/' && i > 0) { - entry->path [i] = '\0'; + entry->path[i] = '\0'; --i; } @@ -463,6 +452,7 @@ manual_link (char *library) char *soname; struct stat64 stat_buf; int flag; + unsigned int osversion; /* Prepare arguments for create_links call. Split library name in directory and filename first. Since path is allocated, we've got @@ -527,7 +517,8 @@ manual_link (char *library) free (path); return; } - if (process_file (real_library, library, libname, &flag, &soname, 0)) + if (process_file (real_library, library, libname, &flag, &osversion, + &soname, 0)) { error (0, 0, _("No link created since soname could not be found for %s"), library); @@ -571,6 +562,7 @@ struct dlib_entry char *soname; int flag; int is_link; + unsigned int osversion; struct dlib_entry *next; }; @@ -588,6 +580,7 @@ search_dir (const struct dir_entry *entr struct stat64 stat_buf; int is_link; uint64_t hwcap = path_hwcap (entry->path); + unsigned int osversion; file_name_len = PATH_MAX; file_name = alloca (file_name_len); @@ -703,7 +696,7 @@ search_dir (const struct dir_entry *entr real_name = real_file_name; if (process_file (real_name, file_name, direntry->d_name, &flag, - &soname, is_link)) + &osversion, &soname, is_link)) { if (real_name != real_file_name) free (real_name); @@ -766,6 +759,7 @@ search_dir (const struct dir_entry *entr dlib_ptr->name, direntry->d_name, entry->path); } free (dlib_ptr->name); + dlib_ptr->osversion = osversion; dlib_ptr->name = xstrdup (direntry->d_name); dlib_ptr->is_link = is_link; } @@ -781,6 +775,7 @@ search_dir (const struct dir_entry *entr dlib_ptr = (struct dlib_entry *)xmalloc (sizeof (struct dlib_entry)); dlib_ptr->name = xstrdup (direntry->d_name); dlib_ptr->flag = flag; + dlib_ptr->osversion = osversion; dlib_ptr->soname = soname; dlib_ptr->is_link = is_link; /* Add at head of list. */ @@ -800,7 +795,8 @@ search_dir (const struct dir_entry *entr create_links (dir_name, entry->path, dlib_ptr->name, dlib_ptr->soname); if (opt_build_cache) - add_to_cache (entry->path, dlib_ptr->soname, dlib_ptr->flag, hwcap); + add_to_cache (entry->path, dlib_ptr->soname, dlib_ptr->flag, + dlib_ptr->osversion, hwcap); } /* Free all resources. */ @@ -912,7 +908,7 @@ main (int argc, char **argv) { int i; for (i = remaining; i < argc; ++i) - add_dir (argv [i]); + add_dir (argv[i]); } if (opt_chroot) @@ -993,7 +989,7 @@ main (int argc, char **argv) int i; for (i = remaining; i < argc; ++i) - manual_link (argv [i]); + manual_link (argv[i]); exit (0); } diff -durpNa glibc-2.2.2/elf/ldconfig.h glibc-2.2.3/elf/ldconfig.h --- glibc-2.2.2/elf/ldconfig.h Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/elf/ldconfig.h Wed Dec 31 16:00:00 1969 @@ -1,68 +0,0 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999. - - 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 _LDCONFIG_H -#define _LDCONFIG_H - -#define FLAG_ANY -1 -#define FLAG_TYPE_MASK 0x00ff -#define FLAG_LIBC4 0x0000 -#define FLAG_ELF 0x0001 -#define FLAG_ELF_LIBC5 0x0002 -#define FLAG_ELF_LIBC6 0x0003 -#define FLAG_REQUIRED_MASK 0xff00 -#define FLAG_SPARC_LIB64 0x0100 -#define FLAG_IA64_LIB64 0x0200 -#define FLAG_X8664_LIB64 0x0300 - -/* Declared in cache.c. */ -extern void print_cache (const char *cache_name); - -extern void init_cache (void); - -extern void save_cache (const char *cache_name); - -extern void add_to_cache (const char *path, const char *lib, int flags, - uint64_t hwcap); - -/* Declared in readlib.c. */ -extern int process_file (const char *real_file_name, const char *file_name, - const char *lib, int *flag, char **soname, - int is_link); - -/* Declared in readelflib.c. */ -extern int process_elf_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, - size_t file_length); - -/* Declared in chroot_canon.c. */ -extern char *chroot_canon (const char *chroot, const char *name); - -/* Declared in ldconfig.c. */ -extern int opt_verbose; - -extern int opt_format; - -/* Prototypes for a few program-wide used functions. */ -extern void *xmalloc (size_t __n); -extern void *xcalloc (size_t __n, size_t __size); -extern void *xrealloc (void *__p, size_t __n); -extern char *xstrdup (const char *__str); - -#endif /* ! _LDCONFIG_H */ diff -durpNa glibc-2.2.2/elf/readlib.c glibc-2.2.3/elf/readlib.c --- glibc-2.2.2/elf/readlib.c Sun Oct 8 17:04:48 2000 +++ glibc-2.2.3/elf/readlib.c Mon Mar 26 20:52:49 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger , 1999 and Jakub Jelinek , 1999. @@ -48,20 +48,21 @@ struct known_names int flag; }; -static struct known_names interpreters [] = +static struct known_names interpreters[] = { - {"/lib/" LD_SO, FLAG_ELF_LIBC6}, - {"/lib/ld-linux.so.1", FLAG_ELF_LIBC5} + { "/lib/" LD_SO, FLAG_ELF_LIBC6 }, +#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES + SYSDEP_KNOWN_INTERPRETER_NAMES +#endif }; -static struct known_names known_libs [] = +static struct known_names known_libs[] = { - /* Old names: */ - {"libc.so.5", FLAG_ELF_LIBC5}, - {"libm.so.5", FLAG_ELF_LIBC5}, - /* Current names: */ - {LIBC_SO, FLAG_ELF_LIBC6}, - {LIBM_SO, FLAG_ELF_LIBC6} + { LIBC_SO, FLAG_ELF_LIBC6 }, + { LIBM_SO, FLAG_ELF_LIBC6 }, +#ifdef SYSDEP_KNOWN_LIBRARY_NAMES + SYSDEP_KNOWN_LIBRARY_NAMES +#endif }; @@ -69,13 +70,13 @@ static struct known_names known_libs [] /* Returns 0 if everything is ok, != 0 in case of error. */ int process_file (const char *real_file_name, const char *file_name, - const char *lib, int *flag, char **soname, int is_link) + const char *lib, int *flag, unsigned int *osversion, + char **soname, int is_link) { FILE *file; struct stat64 statbuf; void *file_contents; int ret; - ElfW(Ehdr) *elf_header; struct exec *aout_header; @@ -141,10 +142,7 @@ process_file (const char *real_file_name } elf_header = (ElfW(Ehdr) *) file_contents; - if (elf_header->e_ident [EI_MAG0] != ELFMAG0 - || elf_header->e_ident [EI_MAG1] != ELFMAG1 - || elf_header->e_ident [EI_MAG2] != ELFMAG2 - || elf_header->e_ident [EI_MAG3] != ELFMAG3) + if (memcmp (elf_header->e_ident, ELFMAG, SELFMAG) != 0) { /* The file is neither ELF nor aout. Check if it's a linker script, like libc.so - otherwise complain. */ @@ -160,8 +158,8 @@ process_file (const char *real_file_name goto done; } - if (process_elf_file (file_name, lib, flag, soname, file_contents, - statbuf.st_size)) + if (process_elf_file (file_name, lib, flag, osversion, soname, + file_contents, statbuf.st_size)) ret = 1; done: diff -durpNa glibc-2.2.2/elf/rtld.c glibc-2.2.3/elf/rtld.c --- glibc-2.2.2/elf/rtld.c Tue Jan 23 14:07:16 2001 +++ glibc-2.2.3/elf/rtld.c Thu Apr 12 14:02:01 2001 @@ -22,6 +22,7 @@ #include #include #include /* Check if MAP_ANON is defined. */ +#include #include #include #include @@ -51,7 +52,7 @@ enum mode { normal, list, verify, trace /* Process all environments variables the dynamic linker must recognize. Since all of them start with `LD_' we are a bit smarter while finding all the entries. */ -static void process_envvars (enum mode *modep, int *lazyp); +static void process_envvars (enum mode *modep); int _dl_argc; char **_dl_argv; @@ -65,7 +66,7 @@ struct r_search_path *_dl_search_paths; const char *_dl_profile; const char *_dl_profile_output; struct link_map *_dl_profile_map; -int _dl_lazy; +int _dl_lazy = 1; /* XXX I know about at least one case where we depend on the old weak behavior (it has to do with librt). Until we get DSO groups implemented we have to make this the default. Bummer. --drepper */ @@ -74,14 +75,7 @@ int _dl_dynamic_weak; #else int _dl_dynamic_weak = 1; #endif -int _dl_debug_libs; -int _dl_debug_impcalls; -int _dl_debug_bindings; -int _dl_debug_symbols; -int _dl_debug_versions; -int _dl_debug_reloc; -int _dl_debug_files; -int _dl_debug_statistics; +int _dl_debug_mask; const char *_dl_inhibit_rpath; /* RPATH values which should be ignored. */ const char *_dl_origin_path; @@ -257,7 +251,7 @@ _dl_start_final (void *arg, struct link_ } #endif - if (__builtin_expect (_dl_debug_statistics, 0)) + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_STATISTICS, 0)) print_statistics (); return *start_addr; @@ -266,8 +260,6 @@ _dl_start_final (void *arg, struct link_ /* Now life is peachy; we can do all normal operations. On to the real work. */ -void ENTRY_POINT (void); - /* Some helper functions. */ /* Arguments to relocate_doit. */ @@ -390,12 +382,12 @@ dl_main (const ElfW(Phdr) *phdr, #endif /* Process the environment variable which control the behaviour. */ - process_envvars (&mode, &_dl_lazy); + process_envvars (&mode); /* Set up a flag which tells we are just starting. */ _dl_starting_up = 1; - if (*user_entry == (ElfW(Addr)) &ENTRY_POINT) + if (*user_entry == (ElfW(Addr)) ENTRY_POINT) { /* Ho ho. We are not the program interpreter! We are the program itself! This means someone ran ld.so as a command. Well, that @@ -457,7 +449,7 @@ dl_main (const ElfW(Phdr) *phdr, /* If we have no further argument the program was called incorrectly. Grant the user some education. */ if (_dl_argc < 2) - _dl_sysdep_fatal ("\ + _dl_fatal_printf ("\ Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]\n\ You have invoked `ld.so', the helper program for shared library executables.\n\ This program usually lives in the file `/lib/ld.so', and special directives\n\ @@ -477,8 +469,7 @@ of this helper program; chances are you --library-path PATH use given PATH instead of content of the environment\n\ variable LD_LIBRARY_PATH\n\ --inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\ - in LIST\n", - NULL); + in LIST\n"); ++_dl_skip_args; --_dl_argc; @@ -527,7 +518,7 @@ of this helper program; chances are you This will be what dlopen on "" returns. */ _dl_new_object ((char *) "", "", lt_executable, NULL); if (_dl_loaded == NULL) - _dl_sysdep_fatal ("cannot allocate memory for link map\n", NULL); + _dl_fatal_printf ("cannot allocate memory for link map\n"); _dl_loaded->l_phdr = phdr; _dl_loaded->l_phnum = phnum; _dl_loaded->l_entry = *user_entry; @@ -870,7 +861,7 @@ of this helper program; chances are you functions we call below for output may no longer work properly after relocation. */ if (! _dl_loaded->l_info[DT_NEEDED]) - _dl_sysdep_message ("\t", "statically linked\n", NULL); + _dl_printf ("\tstatically linked\n"); else { struct link_map *l; @@ -878,19 +869,10 @@ of this helper program; chances are you for (l = _dl_loaded->l_next; l; l = l->l_next) if (l->l_faked) /* The library was not found. */ - _dl_sysdep_message ("\t", l->l_libname->name, " => not found\n", - NULL); + _dl_printf ("\t%s => not found\n", l->l_libname->name); else - { - char buf[20], *bp; - buf[sizeof buf - 1] = '\0'; - bp = _itoa_word (l->l_addr, &buf[sizeof buf - 1], 16, 0); - while ((size_t) (&buf[sizeof buf - 1] - bp) - < sizeof l->l_addr * 2) - *--bp = '0'; - _dl_sysdep_message ("\t", l->l_libname->name, " => ", - l->l_name, " (0x", bp, ")\n", NULL); - } + _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name, + l->l_name, (int) sizeof l->l_addr * 2, l->l_addr); } if (__builtin_expect (mode, trace) != trace) @@ -899,7 +881,6 @@ of this helper program; chances are you const ElfW(Sym) *ref = NULL; ElfW(Addr) loadbase; lookup_t result; - char buf[20], *bp; result = _dl_lookup_symbol (_dl_argv[i], _dl_loaded, &ref, _dl_loaded->l_scope, @@ -907,20 +888,15 @@ of this helper program; chances are you loadbase = LOOKUP_VALUE_ADDRESS (result); - buf[sizeof buf - 1] = '\0'; - bp = _itoa_word (ref->st_value, &buf[sizeof buf - 1], 16, 0); - while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2) - *--bp = '0'; - _dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL); - buf[sizeof buf - 1] = '\0'; - bp = _itoa_word (loadbase, &buf[sizeof buf - 1], 16, 0); - while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2) - *--bp = '0'; - _dl_sysdep_message (" in object at 0x", bp, "\n", NULL); + _dl_printf ("%s found at 0x%0*Zd in object at 0x%0*Zd\n", + _dl_argv[i], + (int) sizeof ref->st_value * 2, ref->st_value, + (int) sizeof loadbase * 2, loadbase); } else { - if (_dl_lazy >= 0) + /* If LD_WARN is set warn about undefined symbols. */ + if (_dl_lazy >= 0 && _dl_verbose) { /* We have to do symbol dependency testing. */ struct relocate_args args; @@ -965,13 +941,12 @@ of this helper program; chances are you if (first) { - _dl_sysdep_message ("\n\tVersion information:\n", NULL); + _dl_printf ("\n\tVersion information:\n"); first = 0; } - _dl_sysdep_message ("\t", (map->l_name[0] - ? map->l_name : _dl_argv[0]), - ":\n", NULL); + _dl_printf ("\t%s:\n", + map->l_name[0] ? map->l_name : _dl_argv[0]); while (1) { @@ -985,21 +960,17 @@ of this helper program; chances are you { const char *fname = NULL; - _dl_sysdep_message ("\t\t", - strtab + ent->vn_file, - " (", strtab + aux->vna_name, - ") ", - (aux->vna_flags - & VER_FLG_WEAK - ? "[WEAK] " : ""), - "=> ", NULL); - if (needed != NULL - && match_version (strtab+aux->vna_name, needed)) + && match_version (strtab + aux->vna_name, + needed)) fname = needed->l_name; - _dl_sysdep_message (fname ?: "not found", "\n", - NULL); + _dl_printf ("\t\t%s (%s) %s=> %s\n", + strtab + ent->vn_file, + strtab + aux->vna_name, + aux->vna_flags & VER_FLG_WEAK + ? "[WEAK] " : "", + fname ?: "not found"); if (aux->vna_next == 0) /* No more symbols. */ @@ -1158,7 +1129,7 @@ print_unresolved (int errcode __attribut { if (objname[0] == '\0') objname = _dl_argv[0] ?: "
"; - _dl_sysdep_error (errstring, " (", objname, ")\n", NULL); + _dl_error_printf ("%s (%s)\n", errstring, objname); } /* This is a little helper function for resolving symbols while @@ -1167,8 +1138,8 @@ static void print_missing_version (int errcode __attribute__ ((unused)), const char *objname, const char *errstring) { - _dl_sysdep_error (_dl_argv[0] ?: "", ": ", - objname, ": ", errstring, "\n", NULL); + _dl_error_printf ("%s: %s: %s\n", _dl_argv[0] ?: "", + objname, errstring); } /* Nonzero if any of the debugging options is enabled. */ @@ -1197,13 +1168,10 @@ process_dl_debug (const char *dl_debug) useful. */ if (memcmp (dl_debug, "all", 3) == 0) { - _dl_debug_libs = 1; - _dl_debug_impcalls = 1; - _dl_debug_reloc = 1; - _dl_debug_files = 1; - _dl_debug_symbols = 1; - _dl_debug_bindings = 1; - _dl_debug_versions = 1; + _dl_debug_mask = (DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS + | DL_DEBUG_RELOC | DL_DEBUG_FILES + | DL_DEBUG_SYMBOLS | DL_DEBUG_BINDINGS + | DL_DEBUG_VERSIONS); any_debug = 1; continue; } @@ -1212,7 +1180,7 @@ process_dl_debug (const char *dl_debug) case 4: if (memcmp (dl_debug, "help", 4) == 0) { - _dl_sysdep_message ("\ + _dl_printf ("\ Valid options for the LD_DEBUG environment variable are:\n\ \n\ bindings display information about symbol binding\n\ @@ -1225,15 +1193,13 @@ Valid options for the LD_DEBUG environme versions display version dependencies\n\ \n\ To direct the debugging output into a file instead of standard output\n\ -a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n", - NULL); +a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n"); _exit (0); } if (memcmp (dl_debug, "libs", 4) == 0) { - _dl_debug_libs = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1242,16 +1208,14 @@ a filename can be specified using the LD case 5: if (memcmp (dl_debug, "reloc", 5) == 0) { - _dl_debug_reloc = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_RELOC | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } if (memcmp (dl_debug, "files", 5) == 0) { - _dl_debug_files = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_FILES | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1260,8 +1224,7 @@ a filename can be specified using the LD case 7: if (memcmp (dl_debug, "symbols", 7) == 0) { - _dl_debug_symbols = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_SYMBOLS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1270,16 +1233,14 @@ a filename can be specified using the LD case 8: if (memcmp (dl_debug, "bindings", 8) == 0) { - _dl_debug_bindings = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_BINDINGS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } if (memcmp (dl_debug, "versions", 8) == 0) { - _dl_debug_versions = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1288,7 +1249,7 @@ a filename can be specified using the LD case 10: if (memcmp (dl_debug, "statistics", 10) == 0) { - _dl_debug_statistics = 1; + _dl_debug_mask |= DL_DEBUG_STATISTICS; continue; } break; @@ -1300,8 +1261,8 @@ a filename can be specified using the LD { /* Display a warning and skip everything until next separator. */ char *startp = strndupa (dl_debug, len); - _dl_sysdep_error ("warning: debug option `", startp, - "' unknown; try LD_DEBUG=help\n", NULL); + _dl_error_printf ("\ +warning: debug option `%s' unknown; try LD_DEBUG=help\n", startp); break; } } @@ -1313,12 +1274,11 @@ a filename can be specified using the LD Since all of them start with `LD_' we are a bit smarter while finding all the entries. */ static void -process_envvars (enum mode *modep, int *lazyp) +process_envvars (enum mode *modep) { char **runp = NULL; char *envline; enum mode mode = normal; - int bind_now = 0; char *debug_output = NULL; /* This is the default place for profiling data file. */ @@ -1372,7 +1332,7 @@ process_envvars (enum mode *modep, int * /* Do we bind early? */ if (memcmp (&envline[3], "BIND_NOW", 8) == 0) { - bind_now = envline[12] != '\0'; + _dl_lazy = envline[12] == '\0'; break; } if (memcmp (&envline[3], "BIND_NOT", 8) == 0) @@ -1447,7 +1407,7 @@ process_envvars (enum mode *modep, int * /* Extra security for SUID binaries. Remove all dangerous environment variables. */ - if (__libc_enable_secure) + if (__builtin_expect (__libc_enable_secure, 0)) { static const char *unsecure_envvars[] = { @@ -1501,19 +1461,12 @@ process_envvars (enum mode *modep, int * *--startp = '.'; startp = memcpy (startp - name_len, debug_output, name_len); - _dl_debug_fd = __open (startp, flags, 0666); + _dl_debug_fd = __open (startp, flags, DEFFILEMODE); if (_dl_debug_fd == -1) /* We use standard output if opening the file failed. */ _dl_debug_fd = STDOUT_FILENO; } - /* LAZY is determined by the environment variable LD_WARN and - LD_BIND_NOW if we trace the binary. */ - if (__builtin_expect (mode, normal) == trace) - *lazyp = _dl_verbose ? !bind_now : -1; - else - *lazyp = !bind_now; - *modep = mode; } @@ -1522,8 +1475,8 @@ process_envvars (enum mode *modep, int * static void print_statistics (void) { - char buf[200]; #ifndef HP_TIMING_NONAVAIL + char buf[200]; char *cp; char *wp; @@ -1531,21 +1484,19 @@ print_statistics (void) if (HP_TIMING_AVAIL) { HP_TIMING_PRINT (buf, sizeof (buf), rtld_total_time); - _dl_debug_message (1, "\nruntime linker statistics:\n" - " total startup time in dynamic loader: ", - buf, "\n", NULL); + _dl_debug_printf ("\nruntime linker statistics:\n" + " total startup time in dynamic loader: %s\n", buf); } /* Print relocation statistics. */ if (HP_TIMING_AVAIL) { + char pbuf[30]; HP_TIMING_PRINT (buf, sizeof (buf), relocate_time); - _dl_debug_message (1, " time needed for relocation: ", buf, - NULL); cp = _itoa_word ((1000 * relocate_time) / rtld_total_time, - buf + sizeof (buf), 10, 0); - wp = buf; - switch (buf + sizeof (buf) - cp) + pbuf + sizeof (pbuf), 10, 0); + wp = pbuf; + switch (pbuf + sizeof (pbuf) - cp) { case 3: *wp++ = *cp++; @@ -1556,26 +1507,23 @@ print_statistics (void) *wp++ = *cp++; } *wp = '\0'; - _dl_debug_message (0, " (", buf, "%)\n", NULL); + _dl_debug_printf (" time needed for relocation: %s (%s)\n", + buf, pbuf); } #endif - buf[sizeof (buf) - 1] = '\0'; - _dl_debug_message (1, " number of relocations: ", - _itoa_word (_dl_num_relocations, - buf + sizeof (buf) - 1, 10, 0), - "\n", NULL); + _dl_debug_printf (" number of relocations: %lu\n", + _dl_num_relocations); #ifndef HP_TIMING_NONAVAIL /* Time spend while loading the object and the dependencies. */ if (HP_TIMING_AVAIL) { + char pbuf[30]; HP_TIMING_PRINT (buf, sizeof (buf), load_time); - _dl_debug_message (1, " time needed to load objects: ", buf, - NULL); cp = _itoa_word ((1000 * load_time) / rtld_total_time, - buf + sizeof (buf), 10, 0); - wp = buf; - switch (buf + sizeof (buf) - cp) + pbuf + sizeof (pbuf), 10, 0); + wp = pbuf; + switch (pbuf + sizeof (pbuf) - cp) { case 3: *wp++ = *cp++; @@ -1586,7 +1534,8 @@ print_statistics (void) *wp++ = *cp++; } *wp = '\0'; - _dl_debug_message (0, " (", buf, "%)\n", NULL); + _dl_debug_printf (" time needed to load objects: %s (%s)\n", + buf, pbuf); } #endif } diff -durpNa glibc-2.2.2/elf/sln.c glibc-2.2.3/elf/sln.c --- glibc-2.2.2/elf/sln.c Mon Jan 3 13:04:40 2000 +++ glibc-2.2.3/elf/sln.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ -/* `sln' program to create symboblic links between files. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* `sln' program to create symbolic links between files. + Copyright (C) 1998, 1999, 2001 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 @@ -17,6 +17,8 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include +#include #include #include #include @@ -26,7 +28,7 @@ #include #include -#if !defined(S_ISDIR) && defined(S_IFDIR) +#if !defined S_ISDIR && defined S_IFDIR #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif @@ -39,11 +41,11 @@ main (int argc, char **argv) switch (argc) { case 2: - return makesymlinks (argv [1]) == 0 ? 0 : 1; + return makesymlinks (argv [1]); break; case 3: - return makesymlink (argv [1], argv [2]) == 0 ? 0 : 1; + return makesymlink (argv [1], argv [2]); break; default: @@ -60,70 +62,69 @@ makesymlinks (file) #ifndef PATH_MAX #define PATH_MAX 4095 #endif - char buffer [PATH_MAX * 4]; - int i, ret, len; + char *buffer = NULL; + size_t bufferlen = 0; + int ret; int lineno; - const char *src; - const char *dest; - const char *error; FILE *fp; - fp = fopen (file, "r"); - if (fp == NULL) + if (strcmp (file, "-") == 0) + fp = stdin; + else { - error = strerror (errno); - fprintf (stderr, "%s: file open error: %s\n", file, error); - return -1; + fp = fopen (file, "r"); + if (fp == NULL) + { + fprintf (stderr, "%s: file open error: %m\n", file); + return 1; + } } ret = 0; lineno = 0; - while (fgets (buffer, sizeof (buffer) - 1, fp)) + while (!feof_unlocked (fp)) { - lineno++; - src = dest = NULL; - buffer [sizeof (buffer) - 1] = '\0'; - len = strlen (buffer); - for (i = 0; i < len && isspace (buffer [i]); i++); - if (i >= len) - { - fprintf (stderr, "Fail to parse line %d: \"%s\"\n", lineno, - buffer); - ret--; - continue; - } + ssize_t n = getline (&buffer, &bufferlen, fp); + char *src; + char *dest; + char *cp = buffer; - src = &buffer [i]; - for (; i < len && !isspace (buffer [i]); i++); - if (i < len) + if (n < 0) + break; + if (buffer[n - 1] == '\n') + buffer[n - 1] = '\0'; + + ++lineno; + while (isspace (*cp)) + ++cp; + if (*cp == '\0') + /* Ignore empty lines. */ + continue; + src = cp; + + do + ++cp; + while (*cp != '\0' && ! isspace (*cp)); + if (*cp != '\0') + *cp++ = '\0'; + + while (isspace (*cp)) + ++cp; + if (*cp == '\0') { - buffer [i++] = '\0'; - for (; i < len && isspace (buffer [i]); i++); - if (i >= len) - { - fprintf (stderr, "No target in line %d: \"%s\"\n", lineno, - buffer); - ret--; - continue; - } - dest = &buffer [i]; - for (; i < len && !isspace (buffer [i]); i++); - buffer [i] = '\0'; - } - else - { - fprintf (stderr, "No target in line %d: \"%s\"\n", lineno, - buffer); - ret--; + fprintf (stderr, "No target in line %d\n", lineno); + ret = 1; continue; } + dest = cp; - if (makesymlink (src, dest)) - { - fprintf (stderr, "Failed to make link from \"%s\" to \"%s\" in line %d\n", - src, dest, lineno); - ret--; - } + do + ++cp; + while (*cp != '\0' && ! isspace (*cp)); + if (*cp != '\0') + *cp++ = '\0'; + + ret |= makesymlink (src, dest); } fclose (fp); @@ -145,13 +146,13 @@ makesymlink (src, dest) { fprintf (stderr, "%s: destination must not be a directory\n", dest); - return -1; + return 1; } else if (unlink (dest) && errno != ENOENT) { fprintf (stderr, "%s: failed to remove the old destination\n", dest); - return -1; + return 1; } } else if (errno != ENOENT) @@ -174,7 +175,7 @@ makesymlink (src, dest) unlink (dest); fprintf (stderr, "Invalid link from \"%s\" to \"%s\": %s\n", src, dest, error); - return -1; + return 1; } return 0; } @@ -183,6 +184,6 @@ makesymlink (src, dest) error = strerror (errno); fprintf (stderr, "Invalid link from \"%s\" to \"%s\": %s\n", src, dest, error); - return -1; + return 1; } } diff -durpNa glibc-2.2.2/glibcbug.in glibc-2.2.3/glibcbug.in --- glibc-2.2.2/glibcbug.in Mon Aug 30 11:34:23 1999 +++ glibc-2.2.3/glibcbug.in Wed Apr 25 14:50:58 2001 @@ -36,12 +36,7 @@ if test $? -ne 0; then chmod 600 $TEMPx fi -if test "$RELEASE" = "stable"; then - BUGGLIBC="bugs@gnu.org" -else - BUGGLIBC="libc-alpha@sourceware.cygnus.com" -fi - +BUGGLIBC="glibc-bug-reports-${RELEASE}@gnu.org" BUGADDR=${1-$BUGGLIBC} : ${EDITOR=emacs} diff -durpNa glibc-2.2.2/gmon/Makefile glibc-2.2.3/gmon/Makefile --- glibc-2.2.2/gmon/Makefile Tue Aug 19 20:29:10 1997 +++ glibc-2.2.3/gmon/Makefile Tue Mar 27 22:27:28 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# Copyright (C) 1995, 1996, 1997, 2001 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 @@ -21,9 +21,11 @@ # subdir := gmon -headers := sys/gmon.h sys/gmon_out.h +headers := sys/gmon.h sys/gmon_out.h sys/profil.h distribute := machine-gmon.h profil-counter.h -routines := gmon mcount profil bb_init_func bb_exit_func prof-freq +routines := gmon mcount profil sprofil bb_init_func bb_exit_func prof-freq + +tests := tst-sprofil include ../Rules @@ -37,7 +39,7 @@ CFLAGS-mcount.c := -fno-omit-frame-point noprof := mcount ifeq (,$(filter profil,$(unix-syscalls))) -noprof += profil +noprof += profil sprofil endif $(noprof:%=$(objpfx)%.op): %.op: %.o diff -durpNa glibc-2.2.2/gmon/Versions glibc-2.2.3/gmon/Versions --- glibc-2.2.2/gmon/Versions Fri Apr 21 12:25:18 2000 +++ glibc-2.2.3/gmon/Versions Mon Mar 26 20:52:49 2001 @@ -16,4 +16,7 @@ libc { # m* moncontrol; } + GLIBC_2.2.3 { + sprofil; + } } diff -durpNa glibc-2.2.2/gmon/gmon.c glibc-2.2.3/gmon/gmon.c --- glibc-2.2.2/gmon/gmon.c Sat Jan 6 20:35:12 2001 +++ glibc-2.2.3/gmon/gmon.c Mon Mar 26 20:52:50 2001 @@ -235,10 +235,18 @@ write_call_graph (fd) to_index != 0; to_index = _gmonparam.tos[to_index].link) { - *(char **) raw_arc[nfilled].from_pc = (char *) frompc; - *(char **) raw_arc[nfilled].self_pc = - (char *)_gmonparam.tos[to_index].selfpc; - *(int *) raw_arc[nfilled].count = _gmonparam.tos[to_index].count; + struct arc + { + char *frompc; + char *selfpc; + int32_t count; + } + arc; + + arc.frompc = (char *) frompc; + arc.selfpc = (char *) _gmonparam.tos[to_index].selfpc; + arc.count = _gmonparam.tos[to_index].count; + memcpy (raw_arc + nfilled, &arc, sizeof (raw_arc [0])); if (++nfilled == NARCS_PER_WRITEV) { diff -durpNa glibc-2.2.2/gmon/sys/profil.h glibc-2.2.3/gmon/sys/profil.h --- glibc-2.2.2/gmon/sys/profil.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/gmon/sys/profil.h Tue Mar 27 22:27:28 2001 @@ -0,0 +1,61 @@ +/* Copyright (C) 2001 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 _PROFIL_H +#define _PROFIL_H 1 + +#include + +#include +#include + +/* This interface is intended to follow the sprofil() system calls as + described by the sprofil(2) man page of Irix v6.5, except that: + + - there is no a priori limit on number of text sections + - pr_scale is declared as unsigned long (instead of "unsigned int") + - pr_size is declared as size_t (instead of "unsigned int") + - pr_off is declared as void * (instead of "__psunsigned_t") + - the overflow bin (pr_base==0, pr_scale==2) can appear anywhere + in the profp array + - PROF_FAST has no effect */ + +struct prof + { + void *pr_base; /* buffer base */ + size_t pr_size; /* buffer size */ + size_t pr_off; /* pc offset */ + unsigned long int pr_scale; /* pc scaling (fixed-point number) */ + }; + +enum + { + PROF_USHORT = 0, /* use 16-bit counters (default) */ + PROF_UINT = 1 << 0, /* use 32-bit counters */ + PROF_FAST = 1 << 1 /* profile faster than usual */ + }; + + +__BEGIN_DECLS + +extern int sprofil (struct prof *__profp, int __profcnt, + struct timeval *__tvp, unsigned int __flags) __THROW; + +__END_DECLS + +#endif /* profil.h */ diff -durpNa glibc-2.2.2/gmon/tst-sprofil.c glibc-2.2.3/gmon/tst-sprofil.c --- glibc-2.2.2/gmon/tst-sprofil.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/gmon/tst-sprofil.c Wed Mar 21 12:12:28 2001 @@ -0,0 +1,172 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang . + + 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 +#include +#include +#include + +#include + +#define NELEMS(a) (sizeof (a)/sizeof ((a)[0])) + +size_t taddr[] = + { + 0x00001000, /* elf32/hppa */ + 0x08048000, /* Linux elf32/x86 */ + 0x80000000, /* Linux elf32/m68k */ + 0x00400000, /* Linux elf32/mips */ + 0x01800000, /* Linux elf32/ppc */ + 0x00010000 /* Linux elf32/sparc */ +#if __WORDSIZE > 32 + , + 0x4000000000000000, /* Linux elf64/ia64 */ + 0x0000000120000000, /* Linux elf64/alpha */ + 0x4000000000001000, /* elf64/hppa */ + 0x0000000100000000 /* Linux elf64/sparc */ +#endif + }; + +unsigned int buf[NELEMS (taddr)][0x10000 / sizeof (int)]; +unsigned int bshort[5][0x100 / sizeof (int)]; +unsigned int blong[1][0x1000 / sizeof (int)]; +unsigned int vlong[1][0x2000 / sizeof (int)]; + +long int +fac (long int n) +{ + if (n == 0) + return 1; + return n * fac (n - 1); +} + +int +main (int argc, char **argv) +{ + unsigned int ovfl = 0, profcnt = 0; + struct timeval tv, start; + struct prof prof[32]; + double t_tick, delta; + long int sum = 0; + int i, j; + + for (i = 0; i < NELEMS (taddr); ++i) + { + prof[profcnt].pr_base = buf[i]; + prof[profcnt].pr_size = sizeof (buf[i]); + prof[profcnt].pr_off = taddr[i]; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + } + + prof[profcnt].pr_base = blong[0]; + prof[profcnt].pr_size = sizeof (blong[0]); + prof[profcnt].pr_off = 0x80001000; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[0]; + prof[profcnt].pr_size = sizeof (bshort[0]); + prof[profcnt].pr_off = 0x80000080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[1]; + prof[profcnt].pr_size = sizeof (bshort[1]); + prof[profcnt].pr_off = 0x80000f80; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[2]; + prof[profcnt].pr_size = sizeof (bshort[2]); + prof[profcnt].pr_off = 0x80001080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[3]; + prof[profcnt].pr_size = sizeof (bshort[3]); + prof[profcnt].pr_off = 0x80001f80; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[4]; + prof[profcnt].pr_size = sizeof (bshort[4]); + prof[profcnt].pr_off = 0x80002080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = vlong[0]; + prof[profcnt].pr_size = sizeof (vlong[0]); + prof[profcnt].pr_off = 0x80000080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + /* Set up overflow counter (must be last on Irix). */ + prof[profcnt].pr_base = &ovfl; + prof[profcnt].pr_size = sizeof (ovfl); + prof[profcnt].pr_off = 0; + prof[profcnt].pr_scale = 2; + ++profcnt; + + /* Turn it on. */ + if (sprofil (prof, profcnt, &tv, PROF_UINT) < 0) + { + if (errno == ENOSYS) + exit (0); + perror ("sprofil"); + exit (1); + } + + t_tick = tv.tv_sec + 1e-6 * tv.tv_usec; + printf ("profiling period = %g ms\n", 1e3 * t_tick); + + gettimeofday (&start, NULL); + do + { + for (i = 0; i < 21; ++i) + sum += fac (i); + + gettimeofday (&tv, NULL); + timersub (&tv, &start, &tv); + delta = tv.tv_sec + 1e-6 * tv.tv_usec; + } + while (delta < 1000 * t_tick); + + printf ("sum = 0x%lx\n", sum); + + /* Turn it off. */ + if (sprofil (NULL, 0, NULL, 0) < 0) + { + if (errno == ENOSYS) + exit (0); + perror ("sprofil"); + exit (1); + } + + printf ("overflow = %u\n", ovfl); + for (i = 0; i < NELEMS (taddr); ++i) + for (j = 0; j < 0x10000 / sizeof (int); ++j) + if (buf[i][j] != 0) + printf ("%0*Zx\t%u\t(buffer %d)\n", + (int) (sizeof (size_t) * 2), + (taddr[i] + (char *) &buf[i][j] - (char *) &buf[i][0]), + buf[i][j], i); + + return 0; +} diff -durpNa glibc-2.2.2/grp/initgroups.c glibc-2.2.3/grp/initgroups.c --- glibc-2.2.2/grp/initgroups.c Thu Aug 31 14:44:58 2000 +++ glibc-2.2.3/grp/initgroups.c Tue Apr 17 08:17:12 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 91, 93, 1996-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1989,91,93,1996-1999,2000,01 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 @@ -158,21 +158,21 @@ initgroups (user, group) /* Start is one, because we have the first group as parameter. */ long int start = 1; long int size; - long int limit; gid_t *groups; int result; -#ifdef NGROUPS_MAX - size = NGROUPS_MAX; - limit = -1; -#else + + /* We always use sysconf even if NGROUPS_MAX is defined. That way, the + limit can be raised in the kernel configuration without having to + recompile libc. */ long int limit = __sysconf (_SC_NGROUPS_MAX); if (limit > 0) size = limit; else - /* No fixed limit on groups. Pick a starting buffer size. */ - size = 16; -#endif + { + /* No fixed limit on groups. Pick a starting buffer size. */ + size = 16; + } groups = (gid_t *) malloc (size * sizeof (gid_t)); if (__builtin_expect (groups == NULL, 0)) diff -durpNa glibc-2.2.2/hesiod/Makefile glibc-2.2.3/hesiod/Makefile --- glibc-2.2.2/hesiod/Makefile Wed Aug 2 14:52:01 2000 +++ glibc-2.2.3/hesiod/Makefile Mon Mar 26 20:52:50 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 2000, 2001 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 @@ -43,4 +43,5 @@ include ../Rules # the file service. $(objpfx)libnss_hesiod.so: $(common-objpfx)resolv/libresolv.so \ $(common-objpfx)nss/libnss_files.so \ - $(common-objpfx)libc.so + $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/hurd/fopenport.c glibc-2.2.3/hurd/fopenport.c --- glibc-2.2.2/hurd/fopenport.c Tue Mar 14 16:46:43 2000 +++ glibc-2.2.3/hurd/fopenport.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994,95,97,2000 Free Software Foundation, Inc. +/* Copyright (C) 1994,95,97,2000,01 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 @@ -62,10 +62,27 @@ writeio (void *cookie, const char *buf, The current file position is stored in *POS. Returns zero if successful, nonzero if not. */ static int -seekio (void *cookie, off_t *pos, int whence) +seekio (void *cookie, +#ifdef USE_IN_LIBIO + _IO_off64_t *pos, +#else + fpos_t *pos, +#endif + int whence) { off_t res; - error_t error = __io_seek ((file_t) cookie, *pos, whence, &res); + error_t error; + + /* XXX We don't really support large files on the Hurd. So if POS + doesn't fit in an `off_t', we'll return `-1' and set errno. EOVERFLOW + probably isn't the right error value, but seems appropriate here. */ + if ((off_t) *pos != *pos) + { + __set_errno (EOVERFLOW); + return -1; + } + + error = __io_seek ((file_t) cookie, *pos, whence, &res); if (error) return __hurd_fail (error); *pos = res; diff -durpNa glibc-2.2.2/hurd/get-host.c glibc-2.2.3/hurd/get-host.c --- glibc-2.2.2/hurd/get-host.c Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/hurd/get-host.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Get a host configuration item kept as the whole contents of a file. - Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,97,99,2000,2001 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 @@ -21,6 +21,7 @@ #include #include #include "hurdhost.h" +#include ssize_t _hurd_get_host_config (const char *item, char *buf, size_t buflen) diff -durpNa glibc-2.2.2/hurd/hurd/ioctl.h glibc-2.2.3/hurd/hurd/ioctl.h --- glibc-2.2.2/hurd/hurd/ioctl.h Sat Jan 6 20:35:12 2001 +++ glibc-2.2.3/hurd/hurd/ioctl.h Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* User-registered handlers for specific `ioctl' requests. - Copyright (C) 1993,94,95,96,97,2000 Free Software Foundation, Inc. + Copyright (C) 1993,94,95,96,97,2000,01 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 @@ -59,7 +59,7 @@ extern int hurd_register_ioctl_handler ( { _IOC_NOTYPE (first), _IOC_NOTYPE (last), \ (int (*) (int, int, void *)) (handler), NULL }; \ text_set_element (_hurd_ioctl_handler_lists, \ - ##handler##_ioctl_handler##moniker) + handler##_ioctl_handler##moniker) #define _HURD_HANDLE_IOCTLS(handler, first, last) \ _HURD_HANDLE_IOCTLS_1 (handler, first, last, first##_to_##last) diff -durpNa glibc-2.2.2/hurd/hurd/threadvar.h glibc-2.2.3/hurd/hurd/threadvar.h --- glibc-2.2.2/hurd/hurd/threadvar.h Mon Jun 28 11:57:43 1999 +++ glibc-2.2.3/hurd/hurd/threadvar.h Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Internal per-thread variables for the Hurd. - Copyright (C) 1994, 95, 97, 98, 99 Free Software Foundation, Inc. + Copyright (C) 1994,95,97,98,99,2001 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 @@ -59,9 +59,10 @@ enum __hurd_threadvar_index _HURD_THREADVAR_MIG_REPLY, /* Reply port for MiG user stub functions. */ _HURD_THREADVAR_ERRNO, /* `errno' value for this thread. */ _HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */ - _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ - _HURD_THREADVAR_MALLOC, /* For use of malloc. */ - _HURD_THREADVAR_DL_ERROR, /* For use of -ldl and dynamic linker. */ + _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ + _HURD_THREADVAR_MALLOC, /* For use of malloc. */ + _HURD_THREADVAR_DL_ERROR, /* For use of -ldl and dynamic linker. */ + _HURD_THREADVAR_RPC_VARS, /* For state of RPC functions. */ _HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */ }; @@ -73,6 +74,8 @@ enum __hurd_threadvar_index /* Return the location of the value for the per-thread variable with index INDEX used by the thread whose stack pointer is SP. */ +extern unsigned long int *__hurd_threadvar_location_from_sp + (enum __hurd_threadvar_index __index, void *__sp); _HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, void *__sp) diff -durpNa glibc-2.2.2/hurd/hurd.h glibc-2.2.3/hurd/hurd.h --- glibc-2.2.2/hurd/hurd.h Mon Nov 15 16:23:25 1999 +++ glibc-2.2.3/hurd/hurd.h Wed Apr 25 14:50:58 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,94,95,96,97,98,99 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,95,96,97,98,99,2001 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 @@ -292,6 +292,8 @@ extern error_t hurd_sig_post (pid_t pid, other than the proc server (such as a bootstrap filesystem) can set these variables to install the ports. */ +extern kern_return_t __get_privileged_ports (host_priv_t *host_priv_ptr, + device_t *device_master_ptr); extern kern_return_t get_privileged_ports (host_priv_t *host_priv_ptr, device_t *device_master_ptr); extern mach_port_t _hurd_host_priv, _hurd_device_master; diff -durpNa glibc-2.2.2/hurd/hurdchdir.c glibc-2.2.3/hurd/hurdchdir.c --- glibc-2.2.2/hurd/hurdchdir.c Sat Feb 27 12:00:59 1999 +++ glibc-2.2.3/hurd/hurdchdir.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Change a port cell to a directory by looking up a name. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 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 @@ -23,6 +23,7 @@ #include #include #include +#include int _hurd_change_directory_port_from_name (struct hurd_port *portcell, diff -durpNa glibc-2.2.2/hurd/hurdmalloc.c glibc-2.2.3/hurd/hurdmalloc.c --- glibc-2.2.2/hurd/hurdmalloc.c Thu Dec 19 17:32:01 1996 +++ glibc-2.2.3/hurd/hurdmalloc.c Sat Apr 7 14:02:34 2001 @@ -9,34 +9,40 @@ #define vm_allocate __vm_allocate #define vm_page_size __vm_page_size -/* +/* * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ /* * HISTORY * $Log: hurdmalloc.c,v $ + * Revision 1.14 2001/04/01 05:03:14 roland + * 2001-03-11 Roland McGrath + * + * * mach/mach_error.h: Fix ancient #endif syntax. + * * hurd/hurdmalloc.c: Likewise. + * * Revision 1.13 1996/12/20 01:32:01 drepper * Update from main archive 961219 * @@ -178,7 +184,7 @@ typedef struct free_list { header_t head; /* head of free list for this size */ #ifdef DEBUG int in_use; /* # mallocs - # frees */ -#endif DEBUG +#endif /* DEBUG */ } *free_list_t; /* @@ -301,7 +307,7 @@ malloc(size) #ifdef DEBUG fl->in_use += 1; -#endif DEBUG +#endif /* DEBUG */ spin_unlock(&fl->lock); /* * Store free list pointer in block header @@ -359,7 +365,7 @@ free(base) fl->head = h; #ifdef DEBUG fl->in_use -= 1; -#endif DEBUG +#endif /* DEBUG */ spin_unlock(&fl->lock); return; } @@ -455,7 +461,7 @@ print_malloc_free_list() fprintf(stderr, " all sizes %10d %10d %10d\n", total_used, total_free, total_used + total_free); } -#endif DEBUG +#endif /* DEBUG */ static void malloc_fork_prepare(void) diff -durpNa glibc-2.2.2/hurd/hurdsig.c glibc-2.2.3/hurd/hurdsig.c --- glibc-2.2.2/hurd/hurdsig.c Fri Feb 9 10:04:05 2001 +++ glibc-2.2.3/hurd/hurdsig.c Wed Apr 25 14:50:58 2001 @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,01 + 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 @@ -125,6 +126,7 @@ _hurd_thread_sigstate (thread_t thread) #include #include +#include #include #include #include @@ -136,7 +138,6 @@ _hurd_thread_sigstate (thread_t thread) #include #include -int _hurd_core_limit; /* XXX */ /* Call the crash dump server to mummify us before we die. Returns nonzero if a core file was written. */ @@ -147,6 +148,15 @@ write_corefile (int signo, const struct mach_port_t coreserver; file_t file, coredir; const char *name; + + /* Don't bother locking since we just read the one word. */ + rlim_t corelimit = _hurd_rlimits[RLIMIT_CORE].rlim_cur; + + if (corelimit == 0) + /* No core dumping, thank you very much. Note that this makes + `ulimit -c 0' prevent crash-suspension too, which is probably + what the user wanted. */ + return 0; /* XXX RLIMIT_CORE: When we have a protocol to make the server return an error diff -durpNa glibc-2.2.2/hurd/privports.c glibc-2.2.3/hurd/privports.c --- glibc-2.2.2/hurd/privports.c Fri Feb 14 20:27:05 1997 +++ glibc-2.2.3/hurd/privports.c Wed Apr 25 14:50:58 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,97,2001 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 @@ -25,7 +25,8 @@ mach_port_t _hurd_host_priv, _hurd_devic kern_return_t -get_privileged_ports (host_priv_t *host_priv_ptr, device_t *device_master_ptr) +__get_privileged_ports (host_priv_t *host_priv_ptr, + device_t *device_master_ptr) { if (! _hurd_host_priv) { @@ -46,15 +47,16 @@ get_privileged_ports (host_priv_t *host_ if (host_priv_ptr) { - mach_port_mod_refs (mach_task_self (), - _hurd_host_priv, MACH_PORT_RIGHT_SEND, 1); + __mach_port_mod_refs (mach_task_self (), + _hurd_host_priv, MACH_PORT_RIGHT_SEND, 1); *host_priv_ptr = _hurd_host_priv; } if (device_master_ptr) { - mach_port_mod_refs (mach_task_self (), - _hurd_device_master, MACH_PORT_RIGHT_SEND, 1); + __mach_port_mod_refs (mach_task_self (), + _hurd_device_master, MACH_PORT_RIGHT_SEND, 1); *device_master_ptr = _hurd_device_master; } return KERN_SUCCESS; } +weak_alias (__get_privileged_ports, get_privileged_ports) diff -durpNa glibc-2.2.2/hurd/vpprintf.c glibc-2.2.3/hurd/vpprintf.c --- glibc-2.2.2/hurd/vpprintf.c Wed Aug 2 14:52:02 2000 +++ glibc-2.2.3/hurd/vpprintf.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,94,97,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,94,97,2000,01 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 @@ -58,7 +58,7 @@ vpprintf (io_t port, const char *format, _IO_cookie_init (&temp_f.cfile, _IO_NO_READS, (void *) port, (cookie_io_functions_t) { write: do_write }); - done = _IO_vfprintf (&temp_f.cfile.__fp, format, arg); + done = _IO_vfprintf (&temp_f.cfile.__fp.file, format, arg); #else diff -durpNa glibc-2.2.2/iconv/Makefile glibc-2.2.3/iconv/Makefile --- glibc-2.2.2/iconv/Makefile Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/iconv/Makefile Sat Apr 7 16:38:06 2001 @@ -43,12 +43,12 @@ CFLAGS-iconv_prog.c = -I../locale/progra CFLAGS-iconv_charmap.c = -I../locale/programs CFLAGS-dummy-repertoire.c = -I../locale/programs CFLAGS-charmap.c = -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ - -DDEFAULT_CHARMAP=null_pointer + -DDEFAULT_CHARMAP=null_pointer -DNEED_NULL_POINTER tests = tst-iconv1 tst-iconv2 tst-iconv3 distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \ - iconv_charmap.c dummy-repertoire.c + iconv_charmap.c dummy-repertoire.c gconv_charset.h others = iconv_prog install-others = $(inst_bindir)/iconv diff -durpNa glibc-2.2.2/iconv/gconv.c glibc-2.2.3/iconv/gconv.c --- glibc-2.2.2/iconv/gconv.c Wed Nov 22 10:59:47 2000 +++ glibc-2.2.3/iconv/gconv.c Sun Apr 8 22:19:10 2001 @@ -1,6 +1,6 @@ /* Convert characters in input buffer using conversion descriptor to output buffer. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -31,11 +31,13 @@ __gconv (__gconv_t cd, const unsigned ch const unsigned char *inbufend, unsigned char **outbuf, unsigned char *outbufend, size_t *irreversible) { - size_t last_step = cd->__nsteps - 1; + size_t last_step; int result; if (cd == (__gconv_t) -1L) return __GCONV_ILLEGAL_DESCRIPTOR; + + last_step = cd->__nsteps - 1; assert (irreversible != NULL); *irreversible = 0; diff -durpNa glibc-2.2.2/iconv/gconv_charset.h glibc-2.2.3/iconv/gconv_charset.h --- glibc-2.2.2/iconv/gconv_charset.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconv/gconv_charset.h Fri Apr 6 10:32:46 2001 @@ -0,0 +1,60 @@ +/* Charset name normalization. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + + +static inline void +strip (char *wp, const char *s) +{ + int slash_count = 0; + + while (*s != '\0') + { + if (isalnum (*s) || *s == '_' || *s == '-' || *s == '.') + *wp++ = toupper (*s); + else if (*s == '/') + { + if (++slash_count == 3) + break; + *wp++ = '/'; + } + ++s; + } + + while (slash_count++ < 2) + *wp++ = '/'; + + *wp = '\0'; +} + + +static char * +upstr (char *dst, const char *str) +{ + char *cp = dst; + while ((*cp++ = toupper (*str++)) != '\0') + /* nothing */; + return dst; +} + + +/* If NAME is an codeset alias expand it. */ +extern const char *__gconv_lookup_alias (const char *name); diff -durpNa glibc-2.2.2/iconv/gconv_conf.c glibc-2.2.3/iconv/gconv_conf.c --- glibc-2.2.2/iconv/gconv_conf.c Fri Dec 1 11:55:02 2000 +++ glibc-2.2.3/iconv/gconv_conf.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Handle configuration data. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -506,7 +506,7 @@ __gconv_get_path (void) result[n].len = 0; } - __gconv_path_elem = result ?: &empty_path_elem; + __gconv_path_elem = result ?: (struct path_elem *) &empty_path_elem; if (cwd != NULL) free (cwd); @@ -552,7 +552,7 @@ __gconv_read_conf (void) { struct gconv_alias fake_alias; - fake_alias.fromname = builtin_modules[cnt].from_string; + fake_alias.fromname = (char *) builtin_modules[cnt].from_string; if (__tfind (&fake_alias, &__gconv_alias_db, __gconv_alias_compare) != NULL) diff -durpNa glibc-2.2.2/iconv/gconv_db.c glibc-2.2.3/iconv/gconv_db.c --- glibc-2.2.2/iconv/gconv_db.c Wed Nov 22 10:59:47 2000 +++ glibc-2.2.3/iconv/gconv_db.c Tue Apr 17 08:17:12 2001 @@ -1,5 +1,5 @@ /* Provide access to the collection of available transformation modules. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -27,6 +27,7 @@ #include #include +#include /* Simple data structure for alias mapping. We have two names, `from' @@ -225,7 +226,7 @@ gen_steps (struct derivation_step *best, { result[step_cnt].__from_name = (step_cnt == 0 ? __strdup (fromset) - : current->last->result_set); + : (char *)current->last->result_set); result[step_cnt].__to_name = (step_cnt + 1 == *nsteps ? __strdup (current->result_set) : result[step_cnt + 1].__from_name); @@ -614,13 +615,38 @@ find_derivation (const char *toset, cons } +/* Control of initialization. */ +__libc_once_define (static, once); + + +static const char * +do_lookup_alias (const char *name) +{ + struct gconv_alias key; + struct gconv_alias **found; + + key.fromname = (char *) name; + found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare); + return found != NULL ? (*found)->toname : NULL; +} + + +const char * +__gconv_lookup_alias (const char *name) +{ + /* Ensure that the configuration data is read. */ + __libc_once (once, __gconv_read_conf); + + return do_lookup_alias (name) ?: name; +} + + int internal_function __gconv_find_transform (const char *toset, const char *fromset, struct __gconv_step **handle, size_t *nsteps, int flags) { - __libc_once_define (static, once); const char *fromset_expand = NULL; const char *toset_expand = NULL; int result; @@ -641,16 +667,8 @@ __gconv_find_transform (const char *tose /* See whether the names are aliases. */ if (__gconv_alias_db != NULL) { - struct gconv_alias key; - struct gconv_alias **found; - - key.fromname = fromset; - found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare); - fromset_expand = found != NULL ? (*found)->toname : NULL; - - key.fromname = toset; - found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare); - toset_expand = found != NULL ? (*found)->toname : NULL; + fromset_expand = do_lookup_alias (fromset); + toset_expand = do_lookup_alias (toset); } if (__builtin_expect (flags & GCONV_AVOID_NOCONV, 0) diff -durpNa glibc-2.2.2/iconv/gconv_simple.c glibc-2.2.3/iconv/gconv_simple.c --- glibc-2.2.2/iconv/gconv_simple.c Sat Jan 6 20:35:12 2001 +++ glibc-2.2.3/iconv/gconv_simple.c Sun Apr 8 22:19:10 2001 @@ -135,10 +135,10 @@ internal_ucs4_loop_unaligned (struct __g # endif /* Determine the status. */ - if (*outptrp + 4 > outend) - result = __GCONV_FULL_OUTPUT; - else if (*inptrp == inend) + if (*inptrp == inend) result = __GCONV_EMPTY_INPUT; + else if (*outptrp + 4 > outend) + result = __GCONV_FULL_OUTPUT; else result = __GCONV_INCOMPLETE_INPUT; diff -durpNa glibc-2.2.2/iconv/iconv_open.c glibc-2.2.3/iconv/iconv_open.c --- glibc-2.2.2/iconv/iconv_open.c Fri Apr 21 12:25:18 2000 +++ glibc-2.2.3/iconv/iconv_open.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Get descriptor for character set conversion. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -18,48 +18,13 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include #include #include #include #include - - -static inline void -strip (char *wp, const char *s) -{ - int slash_count = 0; - - while (*s != '\0') - { - if (isalnum (*s) || *s == '_' || *s == '-' || *s == '.') - *wp++ = toupper (*s); - else if (*s == '/') - { - if (++slash_count == 3) - break; - *wp++ = '/'; - } - ++s; - } - - while (slash_count++ < 2) - *wp++ = '/'; - - *wp = '\0'; -} - - -static char * -upstr (char *dst, const char *str) -{ - char *cp = dst; - while ((*cp++ = toupper (*str++)) != '\0') - /* nothing */; - return dst; -} +#include "gconv_charset.h" iconv_t diff -durpNa glibc-2.2.2/iconv/iconv_prog.c glibc-2.2.3/iconv/iconv_prog.c --- glibc-2.2.2/iconv/iconv_prog.c Fri Feb 9 10:04:05 2001 +++ glibc-2.2.3/iconv/iconv_prog.c Wed Apr 25 14:50:58 2001 @@ -586,7 +586,7 @@ insert_print_list (const void *nodep, VI } static void -do_print (const void *nodep, VISIT value, int level) +do_print_human (const void *nodep, VISIT value, int level) { if (value == leaf || value == postorder) { @@ -628,6 +628,17 @@ do_print (const void *nodep, VISIT valu } static void +do_print (const void *nodep, VISIT value, int level) +{ + if (value == leaf || value == postorder) + { + const char *s = *(const char **) nodep; + + puts (s); + } +} + +static void internal_function add_known_names (struct gconv_module *node) { @@ -672,8 +683,13 @@ listed with several different names (ali /* Now print the collected names. */ column = 2; - twalk (printlist, do_print); + if (isatty (fileno (stdout))) + { + twalk (printlist, do_print_human); - if (column != 0) - puts (""); + if (column != 0) + puts (""); + } + else + twalk (printlist, do_print); } diff -durpNa glibc-2.2.2/iconv/tst-iconv1.c glibc-2.2.3/iconv/tst-iconv1.c --- glibc-2.2.2/iconv/tst-iconv1.c Mon May 22 02:01:33 2000 +++ glibc-2.2.3/iconv/tst-iconv1.c Mon Mar 26 20:52:51 2001 @@ -29,15 +29,11 @@ main (void) inbuf = utf8; inbytes = 4; outbuf = (char *) ucs4; -#ifdef OK - outbytes = 5 * sizeof (wchar_t); /* Ok. */ -#else outbytes = 4 * sizeof (wchar_t); /* "Argument list too long" error. */ -#endif n = iconv (cd, &inbuf, &inbytes, &outbuf, &outbytes); if (n == (size_t) -1) { - perror ("iconv"); + printf ("iconv: %m\n"); iconv_close (cd); return 1; } diff -durpNa glibc-2.2.2/iconvdata/Makefile glibc-2.2.3/iconvdata/Makefile --- glibc-2.2.2/iconvdata/Makefile Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/iconvdata/Makefile Thu Apr 12 22:58:39 2001 @@ -46,7 +46,7 @@ modules := ISO8859-1 ISO8859-2 ISO8859-3 INIS-CYRILLIC ISO_6937-2 ISO_2033 ISO_5427 ISO_5427-EXT \ ISO_5428 ISO_10367-BOX MAC-IS MAC-UK NATS-DANO NATS-SEFI \ SAMI-WS2 ISO-IR-197 TIS-620 KOI8-U GBK ISIRI-3342 GBGBK \ - ISO-2022-CN libISOIR165 UTF-16 UNICODE UTF-7 BIG5HKSCS \ + ISO-2022-CN libISOIR165 UTF-16 UNICODE UTF-32 UTF-7 BIG5HKSCS \ GB18030 ISO-2022-CN-EXT VISCII GBBIG5 modules.so := $(addsuffix .so, $(modules)) @@ -96,7 +96,7 @@ LDFLAGS-libISOIR165.so = -Wl,-soname,$(@ distribute := gconv-modules extra-module.mk gap.awk gaptab.awk \ gen-8bit.sh gen-8bit-gap.sh gen-8bit-gap-1.sh \ TESTS $(filter-out testdata/CVS%, $(wildcard testdata/*)) \ - run-iconv-test.sh tst-tables.sh tst-table.sh \ + TESTS2 run-iconv-test.sh tst-tables.sh tst-table.sh \ tst-table-charmap.sh tst-table-from.c tst-table-to.c \ EUC-JP.irreversible ISIRI-3342.irreversible SJIS.irreversible \ EUC-KR.irreversible BIG5HKSCS.irreversible BIG5.irreversible \ @@ -134,7 +134,7 @@ distribute := gconv-modules extra-module macintosh.c mac-is.c mac-uk.c nats-dano.c nats-sefi.c sjis.c \ t.61.c uhc.c sami-ws2.c iso-ir-197.c tis-620.c koi8-u.c \ isiri-3342.c isiri-3342.h gbgbk.c iso-2022-cn.c cns11643l2.h \ - iso8859-16.c utf-16.c unicode.c utf-7.c big5hkscs.c \ + iso8859-16.c utf-16.c unicode.c utf-32.c utf-7.c big5hkscs.c \ iso-ir-165.c iso-ir-165.h gb18030.c iso-2022-cn-ext.c \ ibm932.c ibm932.h ibm943.c ibm943.h gbbig5.c @@ -184,7 +184,7 @@ generated-modules := $(gen-8bit-modules) generated = $(generated-modules:=.h) $(generated-modules:=.stmp) \ iconv-test.out iconv-rules tst-loading.mtrace \ - mtrace-tst-loading tst-tables.out + mtrace-tst-loading tst-tables.out iconv-test.xxx ifdef objpfx generated += gconv-modules endif @@ -259,8 +259,10 @@ include ../Rules ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) -tests: $(objpfx)iconv-test.out $(objpfx)tst-tables.out \ - $(objpfx)mtrace-tst-loading +tests: $(objpfx)iconv-test.out $(objpfx)tst-tables.out +ifneq (no,$(PERL)) +tests: $(objpfx)mtrace-tst-loading +endif endif endif diff -durpNa glibc-2.2.2/iconvdata/TESTS2 glibc-2.2.3/iconvdata/TESTS2 --- glibc-2.2.2/iconvdata/TESTS2 Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/TESTS2 Thu Apr 12 13:24:42 2001 @@ -0,0 +1,27 @@ +# Tests for endianness dependent iconv(1) (and therefore iconv(3)) in GNU libc. +# Copyright (C) 2001 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# Contributed by Bruno Haible , 2001. +# +# 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. + +# Each line consists of three fields: +# 1. The endianness independent encoding. +# 2. The endianness dependent encoding. +# 3. The filename stem. + +UTF-8 UTF-16 alfabeta +UTF-8 UTF-32 alfabeta diff -durpNa glibc-2.2.2/iconvdata/extra-module.mk glibc-2.2.3/iconvdata/extra-module.mk --- glibc-2.2.2/iconvdata/extra-module.mk Sun Dec 14 13:33:18 1997 +++ glibc-2.2.3/iconvdata/extra-module.mk Mon Mar 26 20:52:51 2001 @@ -9,7 +9,7 @@ $(objpfx)$(mod).so: $(addprefix $(objpfx # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)$(mod).so: $(common-objpfx)libc.so +$(objpfx)$(mod).so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a ifneq (,$(extra-modules-left)) include extra-module.mk diff -durpNa glibc-2.2.2/iconvdata/gconv-modules glibc-2.2.3/iconvdata/gconv-modules --- glibc-2.2.2/iconvdata/gconv-modules Thu Feb 15 14:08:30 2001 +++ glibc-2.2.3/iconvdata/gconv-modules Thu Apr 12 14:02:01 2001 @@ -199,6 +199,7 @@ module INTERNAL SEN_850200_C// ISO646 alias ISO-IR-100// ISO-8859-1// alias ISO_8859-1:1987// ISO-8859-1// alias ISO_8859-1// ISO-8859-1// +alias ISO8859-1// ISO-8859-1// alias LATIN1// ISO-8859-1// alias L1// ISO-8859-1// alias IBM819// ISO-8859-1// @@ -213,11 +214,14 @@ module INTERNAL ISO-8859-1// ISO8859-1 alias ISO-IR-101// ISO-8859-2// alias ISO_8859-2:1987// ISO-8859-2// alias ISO_8859-2// ISO-8859-2// +alias ISO8859-2// ISO-8859-2// alias LATIN2// ISO-8859-2// alias L2// ISO-8859-2// alias CSISOLATIN2// ISO-8859-2// alias 8859_2// ISO-8859-2// alias OSF00010002// ISO-8859-2// +alias IBM912// ISO-8859-2// +alias CP912// ISO-8859-2// module ISO-8859-2// INTERNAL ISO8859-2 1 module INTERNAL ISO-8859-2// ISO8859-2 1 @@ -225,6 +229,7 @@ module INTERNAL ISO-8859-2// ISO8859-2 alias ISO-IR-109// ISO-8859-3// alias ISO_8859-3:1988// ISO-8859-3// alias ISO_8859-3// ISO-8859-3// +alias ISO8859-3// ISO-8859-3// alias LATIN3// ISO-8859-3// alias L3// ISO-8859-3// alias CSISOLATIN3// ISO-8859-3// @@ -237,6 +242,7 @@ module INTERNAL ISO-8859-3// ISO8859-3 alias ISO-IR-110// ISO-8859-4// alias ISO_8859-4:1988// ISO-8859-4// alias ISO_8859-4// ISO-8859-4// +alias ISO8859-4// ISO-8859-4// alias LATIN4// ISO-8859-4// alias L4// ISO-8859-4// alias CSISOLATIN4// ISO-8859-4// @@ -249,10 +255,13 @@ module INTERNAL ISO-8859-4// ISO8859-4 alias ISO-IR-144// ISO-8859-5// alias ISO_8859-5:1988// ISO-8859-5// alias ISO_8859-5// ISO-8859-5// +alias ISO8859-5// ISO-8859-5// alias CYRILLIC// ISO-8859-5// alias CSISOLATINCYRILLIC// ISO-8859-5// alias 8859_5// ISO-8859-5// alias OSF00010005// ISO-8859-5// +alias IBM915// ISO-8859-5// +alias CP915// ISO-8859-5// module ISO-8859-5// INTERNAL ISO8859-5 1 module INTERNAL ISO-8859-5// ISO8859-5 1 @@ -260,12 +269,15 @@ module INTERNAL ISO-8859-5// ISO8859-5 alias ISO-IR-127// ISO-8859-6// alias ISO_8859-6:1987// ISO-8859-6// alias ISO_8859-6// ISO-8859-6// +alias ISO8859-6// ISO-8859-6// alias ECMA-114// ISO-8859-6// alias ASMO-708// ISO-8859-6// alias ARABIC// ISO-8859-6// alias CSISOLATINARABIC// ISO-8859-6// alias 8859_6// ISO-8859-6// alias OSF00010006// ISO-8859-6// +alias IBM1089// ISO-8859-6// +alias CP1089// ISO-8859-6// module ISO-8859-6// INTERNAL ISO8859-6 1 module INTERNAL ISO-8859-6// ISO8859-6 1 @@ -273,6 +285,7 @@ module INTERNAL ISO-8859-6// ISO8859-6 alias ISO-IR-126// ISO-8859-7// alias ISO_8859-7:1987// ISO-8859-7// alias ISO_8859-7// ISO-8859-7// +alias ISO8859-7// ISO-8859-7// alias ELOT_928// ISO-8859-7// alias ECMA-118// ISO-8859-7// alias GREEK// ISO-8859-7// @@ -280,6 +293,8 @@ alias GREEK8// ISO-8859-7// alias CSISOLATINGREEK// ISO-8859-7// alias 8859_7// ISO-8859-7// alias OSF00010007// ISO-8859-7// +alias IBM813// ISO-8859-7// +alias CP813// ISO-8859-7// module ISO-8859-7// INTERNAL ISO8859-7 1 module INTERNAL ISO-8859-7// ISO8859-7 1 @@ -287,10 +302,13 @@ module INTERNAL ISO-8859-7// ISO8859-7 alias ISO-IR-138// ISO-8859-8// alias ISO_8859-8:1988// ISO-8859-8// alias ISO_8859-8// ISO-8859-8// +alias ISO8859-8// ISO-8859-8// alias HEBREW// ISO-8859-8// alias CSISOLATINHEBREW// ISO-8859-8// alias 8859_8// ISO-8859-8// alias OSF00010008// ISO-8859-8// +alias IBM916// ISO-8859-8// +alias CP916// ISO-8859-8// module ISO-8859-8// INTERNAL ISO8859-8 1 module INTERNAL ISO-8859-8// ISO8859-8 1 @@ -298,11 +316,16 @@ module INTERNAL ISO-8859-8// ISO8859-8 alias ISO-IR-148// ISO-8859-9// alias ISO_8859-9:1989// ISO-8859-9// alias ISO_8859-9// ISO-8859-9// +alias ISO8859-9// ISO-8859-9// alias LATIN5// ISO-8859-9// alias L5// ISO-8859-9// alias CSISOLATIN5// ISO-8859-9// alias 8859_9// ISO-8859-9// alias OSF00010009// ISO-8859-9// +alias IBM920// ISO-8859-9// +alias CP920// ISO-8859-9// +alias TS-5881// ISO-8859-9// +alias ECMA-128// ISO-8859-9// module ISO-8859-9// INTERNAL ISO8859-9 1 module INTERNAL ISO-8859-9// ISO8859-9 1 @@ -310,6 +333,7 @@ module INTERNAL ISO-8859-9// ISO8859-9 alias ISO-IR-157// ISO-8859-10// alias ISO_8859-10:1992// ISO-8859-10// alias ISO_8859-10// ISO-8859-10// +alias ISO8859-10// ISO-8859-10// alias LATIN6// ISO-8859-10// alias L6// ISO-8859-10// alias CSISOLATIN6// ISO-8859-10// @@ -322,6 +346,7 @@ module ISO-8859-11// INTERNAL ISO8859- module INTERNAL ISO-8859-11// ISO8859-11 1 # from to module cost +alias ISO8859-13// ISO-8859-13// alias ISO-IR-179// ISO-8859-13// alias LATIN7// ISO-8859-13// alias L7// ISO-8859-13// @@ -330,6 +355,7 @@ module ISO-8859-13// INTERNAL ISO8859- module INTERNAL ISO-8859-13// ISO8859-13 1 # from to module cost +alias ISO8859-14// ISO-8859-14// alias ISO-IR-199// ISO-8859-14// alias LATIN8// ISO-8859-14// alias L8// ISO-8859-14// @@ -338,12 +364,14 @@ module ISO-8859-14// INTERNAL ISO8859- module INTERNAL ISO-8859-14// ISO8859-14 1 # from to module cost +alias ISO8859-15// ISO-8859-15// alias ISO-IR-203// ISO-8859-15// alias ISO_8859-15:1998// ISO-8859-15// module ISO-8859-15// INTERNAL ISO8859-15 1 module INTERNAL ISO-8859-15// ISO8859-15 1 # from to module cost +alias ISO8859-16// ISO-8859-16// alias ISO-IR-226// ISO-8859-16// alias LATIN10// ISO-8859-16// alias L10// ISO-8859-16// @@ -497,6 +525,8 @@ alias EBCDIC-CP-WT// IBM037// alias EBCDIC-CP-NL// IBM037// alias CSIBM037// IBM037// alias OSF10020025// IBM037// +alias CP1070// IBM037// +alias CP282// IBM037// module IBM037// INTERNAL IBM037 1 module INTERNAL IBM037// IBM037 1 @@ -570,6 +600,7 @@ alias CP284// IBM284// alias EBCDIC-CP-ES// IBM284// alias CSIBM284// IBM284// alias OSF1002011C// IBM284// +alias CP1079// IBM284// module IBM284// INTERNAL IBM284 1 module INTERNAL IBM284// IBM284 1 @@ -594,6 +625,7 @@ alias CP297// IBM297// alias EBCDIC-CP-FR// IBM297// alias CSIBM297// IBM297// alias OSF10020129// IBM297// +alias CP1081// IBM297// module IBM297// INTERNAL IBM297 1 module INTERNAL IBM297// IBM297 1 @@ -636,6 +668,7 @@ alias EBCDIC-CP-BE// IBM500// alias EBCDIC-CP-CH// IBM500// alias CSIBM500// IBM500// alias OSF100201F4// IBM500// +alias CP1084// IBM500// module IBM500// INTERNAL IBM500 1 module INTERNAL IBM500// IBM500 1 @@ -1284,6 +1317,18 @@ module INTERNAL UTF-16BE// UTF-16 1 alias CSUNICODE// UNICODE// module UNICODE// INTERNAL UNICODE 1 module INTERNAL UNICODE// UNICODE 1 + +# from to module cost +module UTF-32// INTERNAL UTF-32 1 +module INTERNAL UTF-32// UTF-32 1 + +# from to module cost +module UTF-32LE// INTERNAL UTF-32 1 +module INTERNAL UTF-32LE// UTF-32 1 + +# from to module cost +module UTF-32BE// INTERNAL UTF-32 1 +module INTERNAL UTF-32BE// UTF-32 1 # from to module cost module UTF-7// INTERNAL UTF-7 1 diff -durpNa glibc-2.2.2/iconvdata/run-iconv-test.sh glibc-2.2.3/iconvdata/run-iconv-test.sh --- glibc-2.2.2/iconvdata/run-iconv-test.sh Fri Feb 9 10:04:06 2001 +++ glibc-2.2.3/iconvdata/run-iconv-test.sh Thu Apr 12 14:02:01 2001 @@ -127,7 +127,7 @@ while read from to subset targets; do fi if test "$subset" != Y; then - echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c" + echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c" $PROG -f ASCII -t $to testdata/suntzus | $PROG -f $to -t ASCII > $temp1 || { if test $? -gt 128; then exit 1; fi @@ -138,6 +138,49 @@ while read from to subset targets; do echo "/OK" fi done < TESTS + +# We read the file named TESTS2. All non-empty lines not starting with +# `#' are interpreted as commands. +while read utf8 from filename; do + # Ignore empty and comment lines. + if test -z "$filename" || test "$utf8" = '#'; then continue; fi + + # Expand the variables now. + PROG=`eval echo $ICONV` + + # Test conversion to the endianness dependent encoding. + echo $ac_n "test encoder: $utf8 -> $from $ac_c" + $PROG -f $utf8 -t $from < testdata/${filename}..${utf8} > $temp1 + cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 || + cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + + # Test conversion from the endianness dependent encoding. + echo $ac_n "test decoder: $from -> $utf8 $ac_c" + $PROG -f $from -t $utf8 < testdata/${filename}..${from}.BE > $temp1 + cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + $PROG -f $from -t $utf8 < testdata/${filename}..${from}.LE > $temp1 + cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + + # Test byte swapping behaviour. + echo $ac_n "test non-BOM: ${from}BE -> ${from}LE $ac_c" + $PROG -f ${from}BE -t ${from}LE < testdata/${filename}..${from}.BE > $temp1 + cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + + # Test byte swapping behaviour. + echo $ac_n "test non-BOM: ${from}LE -> ${from}BE $ac_c" + $PROG -f ${from}LE -t ${from}BE < testdata/${filename}..${from}.LE > $temp1 + cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + +done < TESTS2 exit $failed # Local Variables: diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.BE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.BE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.BE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.BE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,7 @@ +þÿ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +ØßØßØßØßØßØßØßØßØßØß Øß +Øß Øß Øß ØßØßØßØßØßØßØßØßØßØßØßØßØßØßØßØß <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +Øß0Øß1Øß2Øß3Øß4Øß5Øß6Øß7Øß8Øß9Øß:Øß;Øß<Øß=Øß>Øß?Øß@ØßAØßBØßCØßDØßEØßFØßGØßH <- Gothic +ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.LE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.LE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.LE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.LE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,8 @@ +ÿþ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +ØßØßØßØßØßØßØßØßØßØ ßØ +ßØ ßØ ßØ ßØßØßØßØßØßØßØßØßØßØßØßØßØßØßØßØß <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +Ø0ßØ1ßØ2ßØ3ßØ4ßØ5ßØ6ßØ7ßØ8ßØ9ßØ:ßØ;ßØ<ßØ=ßØ>ßØ?ßØ@ßØAßØBßØCßØDßØEßØFßØGßØHß <- Gothic +ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew + \ No newline at end of file diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.BE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.BE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.BE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.BE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,7 @@ +þÿ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +  +    <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +0123456789:;<=>?@ABCDEFGH <- Gothic +ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.LE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.LE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.LE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.LE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,8 @@ +ÿþ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +  +    <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +0123456789:;<=>?@ABCDEFGH <- Gothic +ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew + \ No newline at end of file diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-8 glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-8 --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-8 Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-8 Thu Apr 12 13:25:38 2001 @@ -0,0 +1,6 @@ +ΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩ <- Greek +ðŒ€ðŒðŒ‚ðŒƒðŒ„ðŒ…ðŒ†ðŒ‡ðŒˆðŒ‰ðŒŠðŒ‹ðŒŒðŒðŒŽðŒðŒðŒ‘ðŒ’ðŒ“ðŒ”ðŒ•ðŒ–ðŒ—ðŒ˜ðŒ™ðŒšðŒ›ðŒœðŒ <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin +ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯ <- Cyrillic +ðŒ°ðŒ±ðŒ²ðŒ³ðŒ´ðŒµðŒ¶ðŒ·ðŒ¸ðŒ¹ðŒºðŒ»ðŒ¼ðŒ½ðŒ¾ðŒ¿ð€ðð‚ðƒð„ð…ð†ð‡ðˆ <- Gothic +×בגדהוזחטיךכל×מןנסעףפץצקרש <- Hebrew diff -durpNa glibc-2.2.2/iconvdata/tst-loading.c glibc-2.2.3/iconvdata/tst-loading.c --- glibc-2.2.2/iconvdata/tst-loading.c Wed Aug 30 15:38:30 2000 +++ glibc-2.2.3/iconvdata/tst-loading.c Mon Mar 26 20:52:51 2001 @@ -1,5 +1,5 @@ /* Tests for loading and unloading of iconv modules. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2000. @@ -59,61 +59,60 @@ struct /* The test data. */ -static const char inbuf[] = "\ -The first step is the function to create a handle. - - - Function: iconv_t iconv_open (const char *TOCODE, const char - *FROMCODE) - The `iconv_open' function has to be used before starting a - conversion. The two parameters this function takes determine the - source and destination character set for the conversion and if the - implementation has the possibility to perform such a conversion the - function returns a handle. - - If the wanted conversion is not available the function returns - `(iconv_t) -1'. In this case the global variable `errno' can have - the following values: - - `EMFILE' - The process already has `OPEN_MAX' file descriptors open. - - `ENFILE' - The system limit of open file is reached. - - `ENOMEM' - Not enough memory to carry out the operation. - - `EINVAL' - The conversion from FROMCODE to TOCODE is not supported. - - It is not possible to use the same descriptor in different threads - to perform independent conversions. Within the data structures - associated with the descriptor there is information about the - conversion state. This must not be messed up by using it in - different conversions. - - An `iconv' descriptor is like a file descriptor as for every use a - new descriptor must be created. The descriptor does not stand for - all of the conversions from FROMSET to TOSET. - - The GNU C library implementation of `iconv_open' has one - significant extension to other implementations. To ease the - extension of the set of available conversions the implementation - allows storing the necessary files with data and code in - arbitrarily many directories. How this extension has to be - written will be explained below (*note glibc iconv - Implementation::). Here it is only important to say that all - directories mentioned in the `GCONV_PATH' environment variable are - considered if they contain a file `gconv-modules'. These - directories need not necessarily be created by the system - administrator. In fact, this extension is introduced to help users - writing and using their own, new conversions. Of course this does - not work for security reasons in SUID binaries; in this case only - the system directory is considered and this normally is - `PREFIX/lib/gconv'. The `GCONV_PATH' environment variable is - examined exactly once at the first call of the `iconv_open' - function. Later modifications of the variable have no effect. -"; +static const char inbuf[] = +"The first step is the function to create a handle.\n" +"\n" +" - Function: iconv_t iconv_open (const char *TOCODE, const char\n" +" *FROMCODE)\n" +" The `iconv_open' function has to be used before starting a\n" +" conversion. The two parameters this function takes determine the\n" +" source and destination character set for the conversion and if the\n" +" implementation has the possibility to perform such a conversion the\n" +" function returns a handle.\n" +"\n" +" If the wanted conversion is not available the function returns\n" +" `(iconv_t) -1'. In this case the global variable `errno' can have\n" +" the following values:\n" +"\n" +" `EMFILE'\n" +" The process already has `OPEN_MAX' file descriptors open.\n" +"\n" +" `ENFILE'\n" +" The system limit of open file is reached.\n" +"\n" +" `ENOMEM'\n" +" Not enough memory to carry out the operation.\n" +"\n" +" `EINVAL'\n" +" The conversion from FROMCODE to TOCODE is not supported.\n" +"\n" +" It is not possible to use the same descriptor in different threads\n" +" to perform independent conversions. Within the data structures\n" +" associated with the descriptor there is information about the\n" +" conversion state. This must not be messed up by using it in\n" +" different conversions.\n" +"\n" +" An `iconv' descriptor is like a file descriptor as for every use a\n" +" new descriptor must be created. The descriptor does not stand for\n" +" all of the conversions from FROMSET to TOSET.\n" +"\n" +" The GNU C library implementation of `iconv_open' has one\n" +" significant extension to other implementations. To ease the\n" +" extension of the set of available conversions the implementation\n" +" allows storing the necessary files with data and code in\n" +" arbitrarily many directories. How this extension has to be\n" +" written will be explained below (*note glibc iconv\n" +" Implementation::). Here it is only important to say that all\n" +" directories mentioned in the `GCONV_PATH' environment variable are\n" +" considered if they contain a file `gconv-modules'. These\n" +" directories need not necessarily be created by the system\n" +" administrator. In fact, this extension is introduced to help users\n" +" writing and using their own, new conversions. Of course this does\n" +" not work for security reasons in SUID binaries; in this case only\n" +" the system directory is considered and this normally is\n" +" `PREFIX/lib/gconv'. The `GCONV_PATH' environment variable is\n" +" examined exactly once at the first call of the `iconv_open'\n" +" function. Later modifications of the variable have no effect.\n"; int diff -durpNa glibc-2.2.2/iconvdata/unicode.c glibc-2.2.3/iconvdata/unicode.c --- glibc-2.2.2/iconvdata/unicode.c Fri Dec 1 11:55:06 2000 +++ glibc-2.2.3/iconvdata/unicode.c Thu Apr 12 14:02:01 2001 @@ -53,11 +53,11 @@ \ if (get16u (inptr) == BOM) \ /* Simply ignore the BOM character. */ \ - inptr += 2; \ + *inptrp = inptr += 2; \ else if (get16u (inptr) == BOM_OE) \ { \ ((struct unicode_data *) step->__data)->swap = 1; \ - inptr += 2; \ + *inptrp = inptr += 2; \ } \ } \ } \ diff -durpNa glibc-2.2.2/iconvdata/utf-16.c glibc-2.2.3/iconvdata/utf-16.c --- glibc-2.2.2/iconvdata/utf-16.c Fri Dec 1 11:55:06 2000 +++ glibc-2.2.3/iconvdata/utf-16.c Thu Apr 12 14:02:01 2001 @@ -1,5 +1,5 @@ /* Conversion module for UTF-16. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1999. @@ -44,7 +44,7 @@ #define PREPARE_LOOP \ enum direction dir = ((struct utf16_data *) step->__data)->dir; \ enum variant var = ((struct utf16_data *) step->__data)->var; \ - int swap = ((struct utf16_data *) step->__data)->swap; \ + int swap; \ if (FROM_DIRECTION && var == UTF_16) \ { \ if (data->__invocation_counter == 0) \ @@ -55,11 +55,11 @@ \ if (get16u (inptr) == BOM) \ /* Simply ignore the BOM character. */ \ - inptr += 2; \ + *inptrp = inptr += 2; \ else if (get16u (inptr) == BOM_OE) \ { \ ((struct utf16_data *) step->__data)->swap = 1; \ - inptr += 2; \ + *inptrp = inptr += 2; \ } \ } \ } \ @@ -72,7 +72,8 @@ \ put16u (outbuf, BOM); \ outbuf += 2; \ - } + } \ + swap = ((struct utf16_data *) step->__data)->swap; #define EXTRA_LOOP_ARGS , var, swap @@ -159,7 +160,7 @@ gconv_init (struct __gconv_step *step) if (dir == from_utf16) { step->__min_needed_from = MIN_NEEDED_FROM; - step->__max_needed_from = MIN_NEEDED_FROM; + step->__max_needed_from = MAX_NEEDED_FROM; step->__min_needed_to = MIN_NEEDED_TO; step->__max_needed_to = MIN_NEEDED_TO; } @@ -168,7 +169,7 @@ gconv_init (struct __gconv_step *step) step->__min_needed_from = MIN_NEEDED_TO; step->__max_needed_from = MIN_NEEDED_TO; step->__min_needed_to = MIN_NEEDED_FROM; - step->__max_needed_to = MIN_NEEDED_FROM; + step->__max_needed_to = MAX_NEEDED_FROM; } step->__stateful = 0; diff -durpNa glibc-2.2.2/iconvdata/utf-32.c glibc-2.2.3/iconvdata/utf-32.c --- glibc-2.2.2/iconvdata/utf-32.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/utf-32.c Thu Apr 12 13:22:38 2001 @@ -0,0 +1,270 @@ +/* Conversion module for UTF-32. + Copyright (C) 1999, 2000, 2001 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. */ + +#include +#include +#include +#include +#include +#include +#include + +/* This is the Byte Order Mark character (BOM). */ +#define BOM 0x0000feffu +/* And in the other byte order. */ +#define BOM_OE 0xfffe0000u + + +/* Definitions used in the body of the `gconv' function. */ +#define FROM_LOOP from_utf32_loop +#define TO_LOOP to_utf32_loop +#define DEFINE_INIT 0 +#define DEFINE_FINI 0 +#define MIN_NEEDED_FROM 4 +#define MIN_NEEDED_TO 4 +#define FROM_DIRECTION (dir == from_utf32) +#define PREPARE_LOOP \ + enum direction dir = ((struct utf32_data *) step->__data)->dir; \ + enum variant var = ((struct utf32_data *) step->__data)->var; \ + int swap; \ + if (FROM_DIRECTION && var == UTF_32) \ + { \ + if (data->__invocation_counter == 0) \ + { \ + /* We have to find out which byte order the file is encoded in. */ \ + if (inptr + 4 > inend) \ + return __GCONV_EMPTY_INPUT; \ + \ + if (get32u (inptr) == BOM) \ + /* Simply ignore the BOM character. */ \ + *inptrp = inptr += 4; \ + else if (get32u (inptr) == BOM_OE) \ + { \ + ((struct utf32_data *) step->__data)->swap = 1; \ + *inptrp = inptr += 4; \ + } \ + } \ + } \ + else if (!FROM_DIRECTION && var == UTF_32 && !data->__internal_use \ + && data->__invocation_counter == 0) \ + { \ + /* Emit the Byte Order Mark. */ \ + if (__builtin_expect (outbuf + 4 > outend, 0)) \ + return __GCONV_FULL_OUTPUT; \ + \ + put32u (outbuf, BOM); \ + outbuf += 4; \ + } \ + swap = ((struct utf32_data *) step->__data)->swap; +#define EXTRA_LOOP_ARGS , var, swap + + +/* Direction of the transformation. */ +enum direction +{ + illegal_dir, + to_utf32, + from_utf32 +}; + +enum variant +{ + illegal_var, + UTF_32, + UTF_32LE, + UTF_32BE +}; + +struct utf32_data +{ + enum direction dir; + enum variant var; + int swap; +}; + + +extern int gconv_init (struct __gconv_step *step); +int +gconv_init (struct __gconv_step *step) +{ + /* Determine which direction. */ + struct utf32_data *new_data; + enum direction dir = illegal_dir; + enum variant var = illegal_var; + int result; + + if (__strcasecmp (step->__from_name, "UTF-32//") == 0) + { + dir = from_utf32; + var = UTF_32; + } + else if (__strcasecmp (step->__to_name, "UTF-32//") == 0) + { + dir = to_utf32; + var = UTF_32; + } + else if (__strcasecmp (step->__from_name, "UTF-32BE//") == 0) + { + dir = from_utf32; + var = UTF_32BE; + } + else if (__strcasecmp (step->__to_name, "UTF-32BE//") == 0) + { + dir = to_utf32; + var = UTF_32BE; + } + else if (__strcasecmp (step->__from_name, "UTF-32LE//") == 0) + { + dir = from_utf32; + var = UTF_32LE; + } + else if (__strcasecmp (step->__to_name, "UTF-32LE//") == 0) + { + dir = to_utf32; + var = UTF_32LE; + } + + result = __GCONV_NOCONV; + if (__builtin_expect (dir, to_utf32) != illegal_dir) + { + new_data = (struct utf32_data *) malloc (sizeof (struct utf32_data)); + + result = __GCONV_NOMEM; + if (new_data != NULL) + { + new_data->dir = dir; + new_data->var = var; + new_data->swap = ((var == UTF_32LE && BYTE_ORDER == BIG_ENDIAN) + || (var == UTF_32BE + && BYTE_ORDER == LITTLE_ENDIAN)); + step->__data = new_data; + + if (dir == from_utf32) + { + step->__min_needed_from = MIN_NEEDED_FROM; + step->__max_needed_from = MIN_NEEDED_FROM; + step->__min_needed_to = MIN_NEEDED_TO; + step->__max_needed_to = MIN_NEEDED_TO; + } + else + { + step->__min_needed_from = MIN_NEEDED_TO; + step->__max_needed_from = MIN_NEEDED_TO; + step->__min_needed_to = MIN_NEEDED_FROM; + step->__max_needed_to = MIN_NEEDED_FROM; + } + + step->__stateful = 0; + + result = __GCONV_OK; + } + } + + return result; +} + + +extern void gconv_end (struct __gconv_step *data); +void +gconv_end (struct __gconv_step *data) +{ + free (data->__data); +} + + +/* Convert from the internal (UCS4-like) format to UTF-32. */ +#define MIN_NEEDED_INPUT MIN_NEEDED_TO +#define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM +#define LOOPFCT TO_LOOP +#define BODY \ + { \ + uint32_t c = get32 (inptr); \ + \ + if (__builtin_expect (c >= 0x110000, 0)) \ + { \ + STANDARD_ERR_HANDLER (4); \ + } \ + else if (__builtin_expect (c >= 0xd800 && c < 0xe000, 0)) \ + { \ + /* Surrogate characters in UCS-4 input are not valid. \ + We must catch this. If we let surrogates pass through, \ + attackers could make a security hole exploit by \ + generating "irregular UTF-32" sequences. */ \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + inptr += 4; \ + ++*irreversible; \ + continue; \ + } \ + \ + if (swap) \ + put32 (outptr, bswap_32 (c)); \ + else \ + put32 (outptr, c); \ + \ + outptr += 4; \ + inptr += 4; \ + } +#define LOOP_NEED_FLAGS +#define EXTRA_LOOP_DECLS \ + , enum variant var, int swap +#include + + +/* Convert from UTF-32 to the internal (UCS4-like) format. */ +#define MIN_NEEDED_INPUT MIN_NEEDED_FROM +#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO +#define LOOPFCT FROM_LOOP +#define BODY \ + { \ + uint32_t u1 = get32 (inptr); \ + \ + if (swap) \ + u1 = bswap_32 (u1); \ + \ + if (__builtin_expect (u1 >= 0x110000, 0)) \ + { \ + /* This is illegal. */ \ + if (! ignore_errors_p ()) \ + { \ + /* This is an illegal character. */ \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + inptr += 4; \ + ++*irreversible; \ + continue; \ + } \ + \ + put32 (outptr, u1); \ + inptr += 4; \ + outptr += 4; \ + } +#define LOOP_NEED_FLAGS +#define EXTRA_LOOP_DECLS \ + , enum variant var, int swap +#include + + +/* Now define the toplevel functions. */ +#include diff -durpNa glibc-2.2.2/include/endian.h glibc-2.2.3/include/endian.h --- glibc-2.2.2/include/endian.h Fri Jun 20 18:16:45 1997 +++ glibc-2.2.3/include/endian.h Sat Apr 7 14:02:34 2001 @@ -1 +1,17 @@ #include + +#if defined _LIBC && !defined _ISOMAC +# if __FLOAT_WORD_ORDER == __BIG_ENDIAN +# define BIG_ENDI 1 +# undef LITTLE_ENDI +# define HIGH_HALF 0 +# define LOW_HALF 1 +# else +# if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN +# undef BIG_ENDI +# define LITTLE_ENDI 1 +# define HIGH_HALF 1 +# define LOW_HALF 0 +# endif +# endif +#endif diff -durpNa glibc-2.2.2/include/gnu/libc-version.h glibc-2.2.3/include/gnu/libc-version.h --- glibc-2.2.2/include/gnu/libc-version.h Tue Nov 23 09:36:35 1999 +++ glibc-2.2.3/include/gnu/libc-version.h Mon Mar 26 20:52:52 2001 @@ -1,5 +1,5 @@ /* Interface to GNU libc specific functions for version information. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001 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 @@ -25,11 +25,9 @@ __BEGIN_DECLS /* Return string describing release status of currently running GNU libc. */ -extern const char *__gnu_get_libc_release (void) __THROW; extern const char *gnu_get_libc_release (void) __THROW; /* Return string describing version of currently running GNU libc. */ -extern const char *__gnu_get_libc_version (void) __THROW; extern const char *gnu_get_libc_version (void) __THROW; __END_DECLS diff -durpNa glibc-2.2.2/include/libc-internal.h glibc-2.2.3/include/libc-internal.h --- glibc-2.2.2/include/libc-internal.h Sun Dec 31 11:12:37 2000 +++ glibc-2.2.3/include/libc-internal.h Wed Apr 25 14:50:58 2001 @@ -4,6 +4,8 @@ #ifndef _LIBC_INTERNAL # define _LIBC_INTERNAL 1 +#include + /* Initialize the `__libc_enable_secure' flag. */ extern void __libc_init_secure (void); @@ -19,7 +21,7 @@ extern void __cyg_profile_func_enter (vo extern void __cyg_profile_func_exit (void *this_fn, void *call_site); /* Get frequency of the system processor. */ -extern unsigned long long int __get_clockfreq (void); +extern hp_timing_t __get_clockfreq (void); /* Free all allocated resources. */ extern void __libc_freeres (void); diff -durpNa glibc-2.2.2/include/libc-symbols.h glibc-2.2.3/include/libc-symbols.h --- glibc-2.2.2/include/libc-symbols.h Sat Jan 6 20:35:16 2001 +++ glibc-2.2.3/include/libc-symbols.h Mon Mar 26 20:52:52 2001 @@ -1,6 +1,6 @@ /* Support macros for making weak and strong aliases for symbols, and for using symbol sets and linker warnings with GNU ld. - Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,1996,1997,1998,2000,2001 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 @@ -154,7 +154,7 @@ # define weak_alias(original, alias) \ .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \ C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP \ - .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ + ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original) # else # define weak_alias(original, alias) \ diff -durpNa glibc-2.2.2/include/rpc/rpc.h glibc-2.2.3/include/rpc/rpc.h --- glibc-2.2.2/include/rpc/rpc.h Sat Jan 6 20:35:16 2001 +++ glibc-2.2.3/include/rpc/rpc.h Mon Mar 26 20:52:52 2001 @@ -4,4 +4,50 @@ /* Now define the internal interfaces. */ extern unsigned long _create_xid (void); +/* + * Multi-threaded support + * Group all global and static variables into a single spot. + * This area is allocated on a per-thread basis + */ +#ifdef _RPC_THREAD_SAFE_ +struct rpc_thread_variables { + fd_set svc_fdset_s; /* Global, rpc_common.c */ + struct rpc_createerr rpc_createerr_s; /* Global, rpc_common.c */ + struct pollfd *svc_pollfd_s; /* Global, rpc_common.c */ + int svc_max_pollfd_s; /* Global, rpc_common.c */ + + void *authnone_private_s; /* auth_none.c */ + + void *clnt_perr_buf_s; /* clnt_perr.c */ + + void *clntraw_private_s; /* clnt_raw.c */ + + void *callrpc_private_s; /* clnt_simp.c */ + + void *key_call_private_s; /* key_call.c */ + + void *authdes_cache_s; /* svcauth_des.c */ + void *authdes_lru_s; /* svcauth_des.c */ + + void *svc_xports_s; /* svc.c */ + void *svc_head_s; /* svc.c */ + + void *svcraw_private_s; /* svc_raw.c */ + + void *svcsimple_proglst_s; /* svc_simple.c */ + void *svcsimple_transp_s; /* svc_simple.c */ +}; + +extern struct rpc_thread_variables *__rpc_thread_variables(void) + __attribute__ ((const)); +extern void __rpc_thread_svc_cleanup (void); +extern void __rpc_thread_clnt_cleanup (void); +extern void __rpc_thread_key_cleanup (void); + +extern void __rpc_thread_destroy (void); + +#define RPC_THREAD_VARIABLE(x) (__rpc_thread_variables()->x) + +#endif /* _RPC_THREAD_SAFE_ */ + #endif diff -durpNa glibc-2.2.2/include/sys/profil.h glibc-2.2.3/include/sys/profil.h --- glibc-2.2.2/include/sys/profil.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/include/sys/profil.h Fri Apr 6 08:22:21 2001 @@ -0,0 +1,9 @@ +#ifndef _PROFIL_H +#include + +/* Now define the internal interfaces. */ + +extern int __sprofil (struct prof *__profp, int __profcnt, + struct timeval *__tvp, unsigned int __flags); + +#endif /* _PROFIL_H */ diff -durpNa glibc-2.2.2/include/sys/socket.h glibc-2.2.3/include/sys/socket.h --- glibc-2.2.2/include/sys/socket.h Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/include/sys/socket.h Wed Apr 25 14:50:58 2001 @@ -20,7 +20,7 @@ extern int __opensock (void) internal_fu extern int __getpeername (int __fd, __SOCKADDR_ARG __addr, socklen_t *__len); /* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ -extern int __send (int __fd, __const void *__buf, size_t __n, int __flags); +extern ssize_t __send (int __fd, __const void *__buf, size_t __n, int __flags); /* Open a connection on socket FD to peer at ADDR (which LEN bytes long). For connectionless socket types, just set the default address to send to diff -durpNa glibc-2.2.2/include/unistd.h glibc-2.2.3/include/unistd.h --- glibc-2.2.2/include/unistd.h Thu Feb 15 14:08:30 2001 +++ glibc-2.2.3/include/unistd.h Mon Mar 26 20:52:52 2001 @@ -77,7 +77,7 @@ extern int __link (__const char *__from, extern int __symlink (__const char *__from, __const char *__to); extern int __readlink (__const char *__path, char *__buf, size_t __len); extern int __unlink (__const char *__name); -extern int __gethostname (char *__name, socklen_t __len); +extern int __gethostname (char *__name, size_t __len); extern int __profil (unsigned short int *__sample_buffer, size_t __size, size_t __offset, unsigned int __scale); extern int __getdtablesize (void); diff -durpNa glibc-2.2.2/include/wchar.h glibc-2.2.3/include/wchar.h --- glibc-2.2.2/include/wchar.h Fri Feb 9 10:04:06 2001 +++ glibc-2.2.3/include/wchar.h Mon Mar 26 20:52:52 2001 @@ -11,6 +11,7 @@ extern int __wcsncasecmp (__const wchar_ extern size_t __wcslen (__const wchar_t *__s) __attribute_pure__; extern size_t __wcsnlen (__const wchar_t *__s, size_t __maxlen) __attribute_pure__; +extern wchar_t *__wcscat (wchar_t *dest, const wchar_t *src); extern wint_t __btowc (int __c); extern int __mbsinit (__const __mbstate_t *__ps); extern size_t __mbrtowc (wchar_t *__restrict __pwc, diff -durpNa glibc-2.2.2/inet/Makefile glibc-2.2.3/inet/Makefile --- glibc-2.2.2/inet/Makefile Tue Aug 15 11:16:20 2000 +++ glibc-2.2.3/inet/Makefile Mon Mar 26 20:52:52 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1991-1999, 2000, 2001 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 @@ -48,7 +48,7 @@ routines := htonl htons \ in6_addr getnameinfo if_index tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \ - tst-gethnm # tst-ipnode + tst-gethnm include ../Rules diff -durpNa glibc-2.2.2/inet/rcmd.c glibc-2.2.3/inet/rcmd.c --- glibc-2.2.2/inet/rcmd.c Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/inet/rcmd.c Sat Apr 7 14:02:34 2001 @@ -117,7 +117,7 @@ rcmd_af(ahost, rport, locuser, remuser, char num[8]; ssize_t n; - if (af != AF_INET && af != AF_INET6) + if (af != AF_INET && af != AF_INET6 && af != AF_UNSPEC) { __set_errno (EAFNOSUPPORT); return -1; diff -durpNa glibc-2.2.2/inet/rexec.c glibc-2.2.3/inet/rexec.c --- glibc-2.2.2/inet/rexec.c Tue Oct 31 11:09:52 2000 +++ glibc-2.2.3/inet/rexec.c Sun Apr 8 22:19:10 2001 @@ -117,9 +117,12 @@ retry: } listen(s2, 1); sa2len = sizeof (sa2); - if (getsockname(s2, (struct sockaddr *)&sa2, &sa2len) < 0 || - sa2len != SA_LEN((struct sockaddr *)&sa2)) { + if (getsockname(s2, (struct sockaddr *)&sa2, &sa2len) < 0) { perror("getsockname"); + (void) __close(s2); + goto bad; + } else if (sa2len != SA_LEN((struct sockaddr *)&sa2)) { + __set_errno(EINVAL); (void) __close(s2); goto bad; } diff -durpNa glibc-2.2.2/intl/Makefile glibc-2.2.3/intl/Makefile --- glibc-2.2.2/intl/Makefile Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/intl/Makefile Wed Apr 25 14:50:59 2001 @@ -25,10 +25,10 @@ routines = bindtextdom dcgettext dgettex finddomain loadmsgcat localealias textdomain \ l10nflist explodename plural distribute = gettext.h gettextP.h hash-string.h loadinfo.h locale.alias \ - plural.y po2test.sed tst-gettext.sh tst-translit.sh \ - translit.po tst-gettext2.sh tstlang1.po tstlang2.po + plural.y po2test.sed tst-gettext.sh tst-translit.sh tst-codeset.sh \ + translit.po tst-gettext2.sh tstlang1.po tstlang2.po tstcodeset.po -test-srcs := tst-gettext tst-translit tst-gettext2 +test-srcs := tst-gettext tst-translit tst-gettext2 tst-codeset tests = tst-ngettext before-compile = $(objpfx)msgs.h @@ -43,10 +43,10 @@ include ../Makeconfig ifneq (no,$(BISON)) plural.c: plural.y $(BISON) $(BISONFLAGS) $@ $^ -endif ifeq ($(with-cvs),yes) test ! -d CVS || cvs $(CVSOPTS) commit -m'$(BISON) $(BISONFLAGS) $@ $^' $@ endif +endif $(objpfx)plural.o: plural.c include ../Rules @@ -54,8 +54,12 @@ include ../Rules ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) ifneq ($(strip $(MSGFMT)),:) -tests: $(objpfx)mtrace-tst-gettext $(objpfx)tst-translit.out \ - $(objpfx)tst-gettext2.out +tests: $(objpfx)tst-translit.out $(objpfx)tst-gettext2.out \ + $(objpfx)tst-codeset.out +ifneq (no,$(PERL)) +tests: $(objpfx)mtrace-tst-gettext +endif +endif $(objpfx)mtrace-tst-gettext: $(objpfx)tst-gettext.out $(common-objpfx)malloc/mtrace $(objpfx)tst-gettext.mtrace > $@ $(objpfx)tst-gettext.out: tst-gettext.sh $(objpfx)tst-gettext @@ -65,7 +69,8 @@ $(objpfx)tst-translit.out: tst-translit. $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ $(objpfx)tst-gettext2.out: tst-gettext2.sh $(objpfx)tst-gettext2 $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ -endif +$(objpfx)tst-codeset.out: tst-codeset.sh $(objpfx)tst-codeset + $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ endif endif @@ -76,10 +81,11 @@ $(objpfx)msgs.h: po2test.sed ../po/de.po CFLAGS-tst-gettext.c = -DTESTSTRS_H=\"$(objpfx)msgs.h\" CFLAGS-tst-gettext2.c = -DOBJPFX=\"$(objpfx)\" CFLAGS-tst-translit.c = -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-codeset.c = -DOBJPFX=\"$(objpfx)\" $(objpfx)tst-translit.out: $(objpfx)tst-gettext.out -CPPFLAGS += -D'GNULOCALEDIR="$(msgcatdir)"' \ +CPPFLAGS += -D'LOCALEDIR="$(msgcatdir)"' \ -D'LOCALE_ALIAS_PATH="$(msgcatdir)"' BISONFLAGS = --yacc --name-prefix=__gettext --output diff -durpNa glibc-2.2.2/intl/bindtextdom.c glibc-2.2.3/intl/bindtextdom.c --- glibc-2.2.2/intl/bindtextdom.c Sat Jan 6 20:35:19 2001 +++ glibc-2.2.3/intl/bindtextdom.c Mon Apr 9 20:03:25 2001 @@ -1,5 +1,5 @@ /* Implementation of the bindtextdomain(3) function - Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000, 2001 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 @@ -42,9 +42,8 @@ void free (); #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC @@ -65,6 +64,11 @@ void free (); # define _nl_domain_bindings _nl_domain_bindings__ #endif +/* Some compilers, like SunOS4 cc, don't have offsetof in . */ +#ifndef offsetof +# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) +#endif + /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ @@ -93,9 +97,10 @@ __libc_rwlock_define (extern, _nl_state_ #endif /* Prototypes for local functions. */ -static void set_binding_values (const char *domainname, const char **dirnamep, - const char **codesetp); - +static void set_binding_values PARAMS ((const char *domainname, + const char **dirnamep, + const char **codesetp)); + /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not @@ -213,6 +218,7 @@ set_binding_values (domainname, dirnamep free (binding->codeset); binding->codeset = result; + ++binding->codeset_cntr; modified = 1; } } @@ -234,7 +240,7 @@ set_binding_values (domainname, dirnamep /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = - (struct binding *) malloc (sizeof (*new_binding) + len); + (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; @@ -276,6 +282,8 @@ set_binding_values (domainname, dirnamep /* The default value. */ new_binding->dirname = (char *) _nl_default_dirname; + new_binding->codeset_cntr = 0; + if (codesetp) { const char *codeset = *codesetp; @@ -296,6 +304,7 @@ set_binding_values (domainname, dirnamep memcpy (result, codeset, len); #endif codeset = result; + ++new_binding->codeset_cntr; } *codesetp = codeset; new_binding->codeset = (char *) codeset; diff -durpNa glibc-2.2.2/intl/dcgettext.c glibc-2.2.3/intl/dcgettext.c --- glibc-2.2.2/intl/dcgettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dcgettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dcgettext(3) function. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 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 @@ -20,12 +20,11 @@ # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/dcigettext.c glibc-2.2.3/intl/dcigettext.c --- glibc-2.2.2/intl/dcigettext.c Wed Jan 10 15:54:26 2001 +++ glibc-2.2.3/intl/dcigettext.c Mon Apr 9 20:03:25 2001 @@ -89,12 +89,11 @@ void free (); # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif #include "hash-string.h" @@ -129,6 +128,11 @@ void free (); # define _nl_domain_bindings _nl_domain_bindings__ #endif +/* Some compilers, like SunOS4 cc, don't have offsetof in . */ +#ifndef offsetof +# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) +#endif + /* @@ end of prolog @@ */ #ifdef _LIBC @@ -190,21 +194,13 @@ static void *mempcpy PARAMS ((void *dest /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' - However it does not specify the exact format. And even worse: POSIX - defines this not at all. So we can use this feature only on selected - system (e.g. those using GNU C Library). */ + However it does not specify the exact format. Neither do SUSV2 and + ISO C 99. So we can use this feature only on selected systems (e.g. + those using GNU C Library). */ #ifdef _LIBC # define HAVE_LOCALE_NULL #endif -/* We want to allocate a string at the end of the struct. gcc makes - this easy. */ -#ifdef __GNUC__ -# define ZERO 0 -#else -# define ZERO 1 -#endif - /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t @@ -241,8 +237,11 @@ static void *root; # endif /* Function to compare two entries in the table of known translations. */ +static int transcmp PARAMS ((const void *p1, const void *p2)); static int -transcmp (const void *p1, const void *p2) +transcmp (p1, p2) + const void *p1; + const void *p2; { const struct known_translation_t *s1; const struct known_translation_t *s2; @@ -274,7 +273,7 @@ const char _nl_default_default_domain[] const char *_nl_current_default_domain = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ -const char _nl_default_dirname[] = GNULOCALEDIR; +const char _nl_default_dirname[] = LOCALEDIR; /* List with bindings of specific domains created by bindtextdomain() calls. */ @@ -336,11 +335,11 @@ struct block_list typedef struct transmem_list { struct transmem_list *next; - char data[0]; + char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else -typedef char transmem_block_t; +typedef unsigned char transmem_block_t; #endif @@ -423,8 +422,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, /* Try to find the translation among those which we found at some time. */ - search = - (struct known_translation_t *) alloca (sizeof (*search) + msgid_len); + search = (struct known_translation_t *) + alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); search->domainname = (char *) domainname; search->category = category; @@ -575,7 +574,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, if (domain != NULL) { - retval = _nl_find_msg (domain, msgid1, &retlen); + retval = _nl_find_msg (domain, binding, msgid1, &retlen); if (retval == NULL) { @@ -583,8 +582,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { - retval = _nl_find_msg (domain->successor[cnt], msgid1, - &retlen); + retval = _nl_find_msg (domain->successor[cnt], binding, + msgid1, &retlen); if (retval != NULL) { @@ -607,8 +606,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, struct known_translation_t *newp; newp = (struct known_translation_t *) - malloc (sizeof (*newp) + msgid_len - + domainname_len + 1 - ZERO); + malloc (offsetof (struct known_translation_t, msgid) + + msgid_len + domainname_len + 1); if (newp != NULL) { newp->domainname = @@ -653,8 +652,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, char * internal_function -_nl_find_msg (domain_file, msgid, lengthp) +_nl_find_msg (domain_file, domainbinding, msgid, lengthp) struct loaded_l10nfile *domain_file; + struct binding *domainbinding; const char *msgid; size_t *lengthp; { @@ -664,7 +664,7 @@ _nl_find_msg (domain_file, msgid, length size_t resultlen; if (domain_file->decided == 0) - _nl_load_domain (domain_file); + _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; @@ -679,14 +679,15 @@ _nl_find_msg (domain_file, msgid, length nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); - nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); - - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; while (1) { + nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + /* Compare msgid with the original string at index nstr-1. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ @@ -704,11 +705,6 @@ _nl_find_msg (domain_file, msgid, length idx -= domain->hash_size - incr; else idx += incr; - - nstr = W (domain->must_swap, domain->hash_tab[idx]); - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; } /* NOTREACHED */ } @@ -747,6 +743,16 @@ _nl_find_msg (domain_file, msgid, length resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; #if defined _LIBC || HAVE_ICONV + if (domain->codeset_cntr + != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) + { + /* The domain's codeset has changed through bind_textdomain_codeset() + since the message catalog was initialized or last accessed. We + have to reinitialize the converter. */ + _nl_free_domain_conv (domain); + _nl_init_domain_conv (domain_file, domain, domainbinding); + } + if ( # ifdef _LIBC domain->conv != (__gconv_t) -1 @@ -798,7 +804,7 @@ _nl_find_msg (domain_file, msgid, length __libc_lock_lock (lock); - inbuf = result; + inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); malloc_count = 0; @@ -839,7 +845,9 @@ _nl_find_msg (domain_file, msgid, length goto resize_freemem; outleft = freemem_size - sizeof (size_t); - if (iconv (domain->conv, &inptr, &inleft, &outptr, &outleft) + if (iconv (domain->conv, + (ICONV_CONST char **) &inptr, &inleft, + &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; @@ -906,7 +914,7 @@ _nl_find_msg (domain_file, msgid, length /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); - domain->conv_tab[act] = freemem; + domain->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; @@ -980,43 +988,74 @@ plural_eval (pexp, n) struct expression *pexp; unsigned long int n; { - switch (pexp->operation) + switch (pexp->nargs) { - case var: - return n; - case num: - return pexp->val.num; - case mult: - return (plural_eval (pexp->val.args2.left, n) - * plural_eval (pexp->val.args2.right, n)); - case divide: - return (plural_eval (pexp->val.args2.left, n) - / plural_eval (pexp->val.args2.right, n)); - case module: - return (plural_eval (pexp->val.args2.left, n) - % plural_eval (pexp->val.args2.right, n)); - case plus: - return (plural_eval (pexp->val.args2.left, n) - + plural_eval (pexp->val.args2.right, n)); - case minus: - return (plural_eval (pexp->val.args2.left, n) - - plural_eval (pexp->val.args2.right, n)); - case equal: - return (plural_eval (pexp->val.args2.left, n) - == plural_eval (pexp->val.args2.right, n)); - case not_equal: - return (plural_eval (pexp->val.args2.left, n) - != plural_eval (pexp->val.args2.right, n)); - case land: - return (plural_eval (pexp->val.args2.left, n) - && plural_eval (pexp->val.args2.right, n)); - case lor: - return (plural_eval (pexp->val.args2.left, n) - || plural_eval (pexp->val.args2.right, n)); - case qmop: - return (plural_eval (pexp->val.args3.bexp, n) - ? plural_eval (pexp->val.args3.tbranch, n) - : plural_eval (pexp->val.args3.fbranch, n)); + case 0: + switch (pexp->operation) + { + case var: + return n; + case num: + return pexp->val.num; + default: + break; + } + /* NOTREACHED */ + break; + case 1: + { + /* pexp->operation must be lnot. */ + unsigned long int arg = plural_eval (pexp->val.args[0], n); + return ! arg; + } + case 2: + { + unsigned long int leftarg = plural_eval (pexp->val.args[0], n); + if (pexp->operation == lor) + return leftarg || plural_eval (pexp->val.args[1], n); + else if (pexp->operation == land) + return leftarg && plural_eval (pexp->val.args[1], n); + else + { + unsigned long int rightarg = plural_eval (pexp->val.args[1], n); + + switch (pexp->operation) + { + case mult: + return leftarg * rightarg; + case divide: + return leftarg / rightarg; + case module: + return leftarg % rightarg; + case plus: + return leftarg + rightarg; + case minus: + return leftarg - rightarg; + case less_than: + return leftarg < rightarg; + case greater_than: + return leftarg > rightarg; + case less_or_equal: + return leftarg <= rightarg; + case greater_or_equal: + return leftarg >= rightarg; + case equal: + return leftarg == rightarg; + case not_equal: + return leftarg != rightarg; + default: + break; + } + } + /* NOTREACHED */ + break; + } + case 3: + { + /* pexp->operation must be qmop. */ + unsigned long int boolarg = plural_eval (pexp->val.args[0], n); + return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); + } } /* NOTREACHED */ return 0; diff -durpNa glibc-2.2.2/intl/dcngettext.c glibc-2.2.3/intl/dcngettext.c --- glibc-2.2.2/intl/dcngettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dcngettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dcngettext(3) function. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 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 @@ -20,12 +20,11 @@ # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/dgettext.c glibc-2.2.3/intl/dgettext.c --- glibc-2.2.2/intl/dgettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dgettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dgettext(3) function. - Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1997, 2000, 2001 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 @@ -24,10 +24,11 @@ # include #endif +#include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/dngettext.c glibc-2.2.3/intl/dngettext.c --- glibc-2.2.2/intl/dngettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dngettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dngettext(3) function. - Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1997, 2000, 2001 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 @@ -24,12 +24,11 @@ # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/explodename.c glibc-2.2.3/intl/explodename.c --- glibc-2.2.2/intl/explodename.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/explodename.c Mon Mar 26 20:52:53 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -45,7 +45,8 @@ /* @@ end of prolog @@ */ char * -_nl_find_language (const char *name) +_nl_find_language (name) + const char *name; { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '+' && name[0] != ',') diff -durpNa glibc-2.2.2/intl/finddomain.c glibc-2.2.3/intl/finddomain.c --- glibc-2.2.2/intl/finddomain.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/finddomain.c Mon Apr 9 20:03:25 2001 @@ -1,5 +1,5 @@ /* Handle list of needed message catalogs - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -47,12 +47,11 @@ void free (); # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ @@ -108,15 +107,14 @@ _nl_find_domain (dirname, locale, domain be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, domainname, - domainbinding, 0); + NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) - _nl_load_domain (retval); + _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; @@ -124,7 +122,7 @@ _nl_find_domain (dirname, locale, domain for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) - _nl_load_domain (retval->successor[cnt]); + _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; @@ -165,21 +163,20 @@ _nl_find_domain (dirname, locale, domain retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, domainname, domainbinding, - 1); + sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) - _nl_load_domain (retval); + _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) - _nl_load_domain (retval->successor[cnt]); + _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } diff -durpNa glibc-2.2.2/intl/gettext.c glibc-2.2.3/intl/gettext.c --- glibc-2.2.2/intl/gettext.c Fri Apr 7 12:09:23 2000 +++ glibc-2.2.3/intl/gettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of gettext(3) function. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 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 @@ -35,13 +35,12 @@ # endif #endif +#include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif - -#include /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/gettext.h glibc-2.2.3/intl/gettext.h --- glibc-2.2.2/intl/gettext.h Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/gettext.h Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Internal header for GNU gettext internationalization functions. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 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 @@ -19,8 +19,6 @@ #ifndef _GETTEXT_H #define _GETTEXT_H 1 -#include - #if HAVE_LIMITS_H || _LIBC # include #endif @@ -37,9 +35,8 @@ /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but - doing that would require that the configure script compile and *run* - the resulting executable. Locally running cross-compiled executables - is usually not possible. */ + as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work + when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U diff -durpNa glibc-2.2.2/intl/gettextP.h glibc-2.2.3/intl/gettextP.h --- glibc-2.2.2/intl/gettextP.h Thu May 4 10:09:25 2000 +++ glibc-2.2.3/intl/gettextP.h Mon Apr 9 20:03:25 2001 @@ -1,5 +1,5 @@ -/* Header describing internals of gettext library - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Header describing internals of libintl library. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -20,6 +20,8 @@ #ifndef _GETTEXTP_H #define _GETTEXTP_H +#include /* Get size_t. */ + #ifdef _LIBC # include "../iconv/gconv_int.h" #else @@ -30,6 +32,8 @@ #include "loadinfo.h" +#include "gettext.h" /* Get nls_uint32. */ + /* @@ end of prolog @@ */ #ifndef PARAMS @@ -74,35 +78,35 @@ SWAP (i) plural form. */ struct expression { + int nargs; /* Number of arguments. */ enum operator { + /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ + /* Unary operators: */ + lnot, /* Logical NOT. */ + /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Module operation. */ plus, /* Addition. */ minus, /* Subtraction. */ + less_than, /* Comparison. */ + greater_than, /* Comparison. */ + less_or_equal, /* Comparison. */ + greater_or_equal, /* Comparison. */ equal, /* Comparision for equality. */ not_equal, /* Comparision for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ + /* Ternary operators: */ qmop /* Question mark operator. */ } operation; union { unsigned long int num; /* Number value for `num'. */ - struct - { - struct expression *left; /* Left expression in binary operation. */ - struct expression *right; /* Right expression in binary operation. */ - } args2; - struct - { - struct expression *bexp; /* Boolean expression in ?: operation. */ - struct expression *tbranch; /* True-branch in ?: operation. */ - struct expression *fbranch; /* False-branch in ?: operation. */ - } args3; + struct expression *args[3]; /* Up to three arguments. */ } val; }; @@ -115,6 +119,7 @@ struct parse_args }; +/* The representation of an opened message catalog. */ struct loaded_domain { const char *data; @@ -126,6 +131,7 @@ struct loaded_domain struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; + int codeset_cntr; #ifdef _LIBC __gconv_t conv; #else @@ -139,18 +145,28 @@ struct loaded_domain unsigned long int nplurals; }; +/* We want to allocate a string at the end of the struct. But ISO C + doesn't allow zero sized arrays. */ +#ifdef __GNUC__ +# define ZERO 0 +#else +# define ZERO 1 +#endif + +/* A set of settings bound to a message domain. Used to store settings + from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; + int codeset_cntr; /* Incremented each time codeset changes. */ char *codeset; -#ifdef __GNUC__ - char domainname[0]; -#else - char domainname[1]; -#endif + char domainname[ZERO]; }; +/* A counter which is incremented each time some previous translations + become invalid. + This variable is part of the external ABI of the GNU libintl. */ extern int _nl_msg_cat_cntr; struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, @@ -158,38 +174,80 @@ struct loaded_l10nfile *_nl_find_domain const char *__domainname, struct binding *__domainbinding)) internal_function; -void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) +void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, + struct binding *__domainbinding)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; +const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, + struct loaded_domain *__domain, + struct binding *__domainbinding)) + internal_function; +void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) + internal_function; + +char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, + struct binding *domainbinding, + const char *msgid, size_t *lengthp)) + internal_function; #ifdef _LIBC -extern char *__ngettext PARAMS ((const char *msgid1, const char *msgid2, - unsigned long int n)); -extern char *__dngettext PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n)); -extern char *__dcngettext PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n, - int category)); -extern char *__dcigettext PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, int plural, - unsigned long int n, int category)); +extern char *__gettext PARAMS ((const char *__msgid)); +extern char *__dgettext PARAMS ((const char *__domainname, + const char *__msgid)); +extern char *__dcgettext PARAMS ((const char *__domainname, + const char *__msgid, int __category)); +extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *__dngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int n)); +extern char *__dcngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); +extern char *__dcigettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); +extern char *__textdomain PARAMS ((const char *__domainname)); +extern char *__bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, + const char *__codeset)); #else -extern char *ngettext__ PARAMS ((const char *msgid1, const char *msgid2, - unsigned long int n)); -extern char *dngettext__ PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n)); -extern char *dcngettext__ PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n, - int category)); -extern char *dcigettext__ PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, int plural, - unsigned long int n, int category)); +extern char *gettext__ PARAMS ((const char *__msgid)); +extern char *dgettext__ PARAMS ((const char *__domainname, + const char *__msgid)); +extern char *dcgettext__ PARAMS ((const char *__domainname, + const char *__msgid, int __category)); +extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *dngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *dcngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); +extern char *dcigettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); +extern char *textdomain__ PARAMS ((const char *__domainname)); +extern char *bindtextdomain__ PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, + const char *__codeset)); #endif -extern int __gettextdebug; -extern void __gettext_free_exp (struct expression *exp) internal_function; -extern int __gettextparse (void *arg); +#ifdef _LIBC +extern void __gettext_free_exp PARAMS ((struct expression *exp)) + internal_function; +extern int __gettextparse PARAMS ((void *arg)); +#else +extern void gettext_free_exp__ PARAMS ((struct expression *exp)) + internal_function; +extern int gettextparse__ PARAMS ((void *arg)); +#endif /* @@ begin of epilog @@ */ diff -durpNa glibc-2.2.2/intl/l10nflist.c glibc-2.2.3/intl/l10nflist.c --- glibc-2.2.2/intl/l10nflist.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/l10nflist.c Mon Apr 9 20:03:25 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -175,7 +175,7 @@ pop (x) struct loaded_l10nfile * _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, filename, domainbinding, do_allocate) + sponsor, revision, filename, do_allocate) struct loaded_l10nfile **l10nfile_list; const char *dirlist; size_t dirlist_len; @@ -189,7 +189,6 @@ _nl_make_l10nflist (l10nfile_list, dirli const char *sponsor; const char *revision; const char *filename; - struct binding *domainbinding; int do_allocate; { char *abs_filename; @@ -310,7 +309,6 @@ _nl_make_l10nflist (l10nfile_list, dirli return NULL; retval->filename = abs_filename; - retval->domainbinding = domainbinding; retval->decided = (__argz_count (dirlist, dirlist_len) != 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); @@ -346,8 +344,7 @@ _nl_make_l10nflist (l10nfile_list, dirli = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, filename, domainbinding, - 1); + sponsor, revision, filename, 1); } retval->successor[entries] = NULL; @@ -389,7 +386,7 @@ _nl_normalize_codeset (codeset, name_len for (cnt = 0; cnt < name_len; ++cnt) if (isalpha (codeset[cnt])) - *wp++ = _tolower (codeset[cnt]); + *wp++ = tolower (codeset[cnt]); else if (isdigit (codeset[cnt])) *wp++ = codeset[cnt]; diff -durpNa glibc-2.2.2/intl/loadinfo.h glibc-2.2.3/intl/loadinfo.h --- glibc-2.2.2/intl/loadinfo.h Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/loadinfo.h Mon Apr 9 20:03:25 2001 @@ -55,7 +55,6 @@ struct loaded_l10nfile { const char *filename; - struct binding *domainbinding; int decided; const void *data; @@ -80,8 +79,7 @@ _nl_make_l10nflist PARAMS ((struct loade const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, - const char *filename, - struct binding *domainbinding, int do_allocate)); + const char *filename, int do_allocate)); extern const char *_nl_expand_alias PARAMS ((const char *name)); @@ -98,10 +96,5 @@ extern int _nl_explode_name PARAMS ((cha const char **revision)); extern char *_nl_find_language PARAMS ((const char *name)); - - -extern char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, - const char *msgid, size_t *lengthp)) - internal_function; #endif /* loadinfo.h */ diff -durpNa glibc-2.2.2/intl/loadmsgcat.c glibc-2.2.3/intl/loadmsgcat.c --- glibc-2.2.2/intl/loadmsgcat.c Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/intl/loadmsgcat.c Mon Apr 9 20:03:25 2001 @@ -33,6 +33,23 @@ #include #include +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + #if defined STDC_HEADERS || defined _LIBC # include #endif @@ -81,6 +98,25 @@ # define munmap __munmap #endif +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define PLURAL_PARSE __gettextparse +#else +# define PLURAL_PARSE gettextparse__ +#endif + +/* For those losing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +# define freea(p) /* nothing */ +#else +# define alloca(n) malloc (n) +# define freea(p) free (p) +#endif + /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ @@ -93,10 +129,12 @@ int _nl_msg_cat_cntr; form determination. It represents the expression "n != 1". */ static const struct expression plvar = { + .nargs = 0, .operation = var, }; static const struct expression plone = { + .nargs = 0, .operation = num, .val = { @@ -105,13 +143,14 @@ static const struct expression plone = }; static struct expression germanic_plural = { + .nargs = 2, .operation = not_equal, .val = { - .args2 = + .args = { - .left = (struct expression *) &plvar, - .right = (struct expression *) &plone + [0] = (struct expression *) &plvar, + [1] = (struct expression *) &plone } } }; @@ -132,14 +171,17 @@ init_germanic_plural () { if (plone.val.num == 0) { + plvar.nargs = 0; plvar.operation = var; + plone.nargs = 0; plone.operation = num; plone.val.num = 1; + germanic_plural.nargs = 2; germanic_plural.operation = not_equal; - germanic_plural.val.args2.left = &plvar; - germanic_plural.val.args2.right = &plone; + germanic_plural.val.args[0] = &plvar; + germanic_plural.val.args[1] = &plone; } } @@ -148,25 +190,166 @@ init_germanic_plural () #endif +/* Initialize the codeset dependent parts of an opened message catalog. + Return the header entry. */ +const char * +internal_function +_nl_init_domain_conv (domain_file, domain, domainbinding) + struct loaded_l10nfile *domain_file; + struct loaded_domain *domain; + struct binding *domainbinding; +{ + /* Find out about the character set the file is encoded with. + This can be found (in textual form) in the entry "". If this + entry does not exist or if this does not contain the `charset=' + information, we will assume the charset matches the one the + current locale and we don't have to perform any conversion. */ + char *nullentry; + size_t nullentrylen; + + /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ + domain->codeset_cntr = + (domainbinding != NULL ? domainbinding->codeset_cntr : 0); +#ifdef _LIBC + domain->conv = (__gconv_t) -1; +#else +# if HAVE_ICONV + domain->conv = (iconv_t) -1; +# endif +#endif + domain->conv_tab = NULL; + + /* Get the header entry. */ + nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); + + if (nullentry != NULL) + { +#if defined _LIBC || HAVE_ICONV + const char *charsetstr; + + charsetstr = strstr (nullentry, "charset="); + if (charsetstr != NULL) + { + size_t len; + char *charset; + const char *outcharset; + + charsetstr += strlen ("charset="); + len = strcspn (charsetstr, " \t\n"); + + charset = (char *) alloca (len + 1); +# if defined _LIBC || HAVE_MEMPCPY + *((char *) mempcpy (charset, charsetstr, len)) = '\0'; +# else + memcpy (charset, charsetstr, len); + charset[len] = '\0'; +# endif + + /* The output charset should normally be determined by the + locale. But sometimes the locale is not used or not correctly + set up, so we provide a possibility for the user to override + this. Moreover, the value specified through + bind_textdomain_codeset overrides both. */ + if (domainbinding != NULL && domainbinding->codeset != NULL) + outcharset = domainbinding->codeset; + else + { + outcharset = getenv ("OUTPUT_CHARSET"); + if (outcharset == NULL || outcharset[0] == '\0') + { +# ifdef _LIBC + outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; +# else +# if HAVE_ICONV + extern const char *locale_charset (void); + outcharset = locale_charset (); +# endif +# endif + } + } + +# ifdef _LIBC + /* We always want to use transliteration. */ + outcharset = norm_add_slashes (outcharset, "TRANSLIT"); + charset = norm_add_slashes (charset, NULL); + if (__gconv_open (outcharset, charset, &domain->conv, + GCONV_AVOID_NOCONV) + != __GCONV_OK) + domain->conv = (__gconv_t) -1; +# else +# if HAVE_ICONV + /* When using GNU libiconv, we want to use transliteration. */ +# if _LIBICONV_VERSION + len = strlen (outcharset); + { + char *tmp = (char *) alloca (len + 10 + 1); + memcpy (tmp, outcharset, len); + memcpy (tmp + len, "//TRANSLIT", 10 + 1); + outcharset = tmp; + } +# endif + domain->conv = iconv_open (outcharset, charset); +# if _LIBICONV_VERSION + freea (outcharset); +# endif +# endif +# endif + + freea (charset); + } +#endif /* _LIBC || HAVE_ICONV */ + } + + return nullentry; +} + +/* Frees the codeset dependent parts of an opened message catalog. */ +void +internal_function +_nl_free_domain_conv (domain) + struct loaded_domain *domain; +{ + if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) + free (domain->conv_tab); + +#ifdef _LIBC + if (domain->conv != (__gconv_t) -1) + __gconv_close (domain->conv); +#else +# if HAVE_ICONV + if (domain->conv != (iconv_t) -1) + iconv_close (domain->conv); +# endif +#endif +} + /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function -_nl_load_domain (domain_file) +_nl_load_domain (domain_file, domainbinding) struct loaded_l10nfile *domain_file; + struct binding *domainbinding; { int fd; size_t size; +#ifdef _LIBC struct stat64 st; +#else + struct stat st; +#endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; - char *nullentry; - size_t nullentrylen; + const char *nullentry; domain_file->decided = 1; domain_file->data = NULL; + /* Note that it would be useless to store domainbinding in domain_file + because domainbinding might be == NULL now but != NULL later (after + a call to bind_textdomain_codeset). */ + /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN @@ -180,7 +363,12 @@ _nl_load_domain (domain_file) return; /* We must know about the size of the file. */ - if (__builtin_expect (fstat64 (fd, &st) != 0, 0) + if ( +#ifdef _LIBC + __builtin_expect (fstat64 (fd, &st) != 0, 0) +#else + __builtin_expect (fstat (fd, &st) != 0, 0) +#endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) { @@ -287,85 +475,10 @@ _nl_load_domain (domain_file) return; } - /* Now find out about the character set the file is encoded with. - This can be found (in textual form) in the entry "". If this - entry does not exist or if this does not contain the `charset=' - information, we will assume the charset matches the one the - current locale and we don't have to perform any conversion. */ -#ifdef _LIBC - domain->conv = (__gconv_t) -1; -#else -# if HAVE_ICONV - domain->conv = (iconv_t) -1; -# endif -#endif - domain->conv_tab = NULL; - nullentry = _nl_find_msg (domain_file, "", &nullentrylen); - if (nullentry != NULL) - { -#if defined _LIBC || HAVE_ICONV - const char *charsetstr; - - charsetstr = strstr (nullentry, "charset="); - if (charsetstr != NULL) - { - size_t len; - char *charset; - const char *outcharset; - - charsetstr += strlen ("charset="); - len = strcspn (charsetstr, " \t\n"); - - charset = (char *) alloca (len + 1); -# if defined _LIBC || HAVE_MEMPCPY - *((char *) mempcpy (charset, charsetstr, len)) = '\0'; -# else - memcpy (charset, charsetstr, len); - charset[len] = '\0'; -# endif - - /* The output charset should normally be determined by the - locale. But sometimes the locale is not used or not correctly - set up, so we provide a possibility for the user to override - this. Moreover, the value specified through - bind_textdomain_codeset overrides both. */ - if (domain_file->domainbinding != NULL - && domain_file->domainbinding->codeset != NULL) - outcharset = domain_file->domainbinding->codeset; - else - { - outcharset = getenv ("OUTPUT_CHARSET"); - if (outcharset == NULL || outcharset[0] == '\0') - { -# ifdef _LIBC - outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; -# else -# if HAVE_ICONV - extern const char *locale_charset (void); - outcharset = locale_charset (); - if (outcharset == NULL) - outcharset = ""; -# endif -# endif - } - } - -# ifdef _LIBC - /* We always want to use transliteration. */ - outcharset = norm_add_slashes (outcharset, "TRANSLIT"); - charset = norm_add_slashes (charset, NULL); - if (__gconv_open (outcharset, charset, &domain->conv, - GCONV_AVOID_NOCONV) - != __GCONV_OK) - domain->conv = (__gconv_t) -1; -# else -# if HAVE_ICONV - domain->conv = iconv_open (outcharset, charset); -# endif -# endif - } -#endif /* _LIBC || HAVE_ICONV */ - } + /* Now initialize the character set converter from the character set + the file is encoded with (found in the header entry) to the domain's + specified character set or the locale's character set. */ + nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); /* Also look for a plural specification. */ if (nullentry != NULL) @@ -381,12 +494,19 @@ _nl_load_domain (domain_file) { /* First get the number. */ char *endp; + unsigned long int n; struct parse_args args; nplurals += 9; while (*nplurals != '\0' && isspace (*nplurals)) ++nplurals; - domain->nplurals = strtoul (nplurals, &endp, 10); +#if defined HAVE_STRTOUL || defined _LIBC + n = strtoul (nplurals, &endp, 10); +#else + for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) + n = n * 10 + (*endp - '0'); +#endif + domain->nplurals = n; if (nplurals == endp) goto no_plural; @@ -396,7 +516,7 @@ _nl_load_domain (domain_file) is passed down to the parser. */ plural += 7; args.cp = plural; - if (__gettextparse (&args) != 0) + if (PLURAL_PARSE (&args) != 0) goto no_plural; domain->plural = args.res; } @@ -423,11 +543,7 @@ _nl_unload_domain (domain) if (domain->plural != &germanic_plural) __gettext_free_exp (domain->plural); - if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) - free (domain->conv_tab); - - if (domain->conv != (__gconv_t) -1) - __gconv_close (domain->conv); + _nl_free_domain_conv (domain); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) diff -durpNa glibc-2.2.2/intl/locale.alias glibc-2.2.3/intl/locale.alias --- glibc-2.2.2/intl/locale.alias Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/intl/locale.alias Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ # Locale name alias data base. -# Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,8 +26,8 @@ # it with the rest of us. Send it using the `glibcbug' script to # bugs@gnu.org. -bokmal nb_NO.ISO-8859-1 -bokmål nb_NO.ISO-8859-1 +bokmal no_NO.ISO-8859-1 +bokmål no_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 @@ -59,6 +59,7 @@ korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 nb_NO no_NO.ISO-8859-1 +nb_NO.ISO-8859-1 no_NO.ISO-8859-1 norwegian no_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 diff -durpNa glibc-2.2.2/intl/localealias.c glibc-2.2.3/intl/localealias.c --- glibc-2.2.2/intl/localealias.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/localealias.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Handle aliases for locale names. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 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 @@ -73,7 +73,6 @@ void free (); # endif #endif -#include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ @@ -99,40 +98,14 @@ __libc_lock_define_initialized (static, # define internal_function #endif -/* For those loosing systems which don't have `alloca' we have to add +/* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA -/* Nothing has to be done. */ -# define ADD_BLOCK(list, address) /* nothing */ -# define FREE_BLOCKS(list) /* nothing */ +# define freea(p) /* nothing */ #else -struct block_list -{ - void *address; - struct block_list *next; -}; -# define ADD_BLOCK(list, addr) \ - do { \ - struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ - /* If we cannot get a free block we cannot add the new element to \ - the list. */ \ - if (newp != NULL) { \ - newp->address = (addr); \ - newp->next = (list); \ - (list) = newp; \ - } \ - } while (0) -# define FREE_BLOCKS(list) \ - do { \ - while (list != NULL) { \ - struct block_list *old = list; \ - list = list->next; \ - free (old); \ - } \ - } while (0) -# undef alloca -# define alloca(size) (malloc (size)) -#endif /* have alloca */ +# define alloca(n) malloc (n) +# define freea(p) free (p) +#endif #if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED # undef fgets @@ -235,16 +208,12 @@ read_alias_file (fname, fname_len) const char *fname; int fname_len; { -#ifndef HAVE_ALLOCA - struct block_list *block_list = NULL; -#endif FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); - ADD_BLOCK (block_list, full_fname); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); @@ -254,11 +223,9 @@ read_alias_file (fname, fname_len) #endif fp = fopen (full_fname, "r"); + freea (full_fname); if (fp == NULL) - { - FREE_BLOCKS (block_list); - return 0; - } + return 0; added = 0; while (!feof (fp)) @@ -331,10 +298,7 @@ read_alias_file (fname, fname_len) if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) - { - FREE_BLOCKS (block_list); - return added; - } + return added; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; @@ -347,10 +311,7 @@ read_alias_file (fname, fname_len) ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) - { - FREE_BLOCKS (block_list); - return added; - } + return added; if (__builtin_expect (string_space != new_pool, 0)) { @@ -389,7 +350,6 @@ read_alias_file (fname, fname_len) qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); - FREE_BLOCKS (block_list); return added; } diff -durpNa glibc-2.2.2/intl/ngettext.c glibc-2.2.3/intl/ngettext.c --- glibc-2.2.2/intl/ngettext.c Mon May 1 14:56:37 2000 +++ glibc-2.2.3/intl/ngettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of ngettext(3) function. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 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 @@ -35,12 +35,11 @@ # endif #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif #include diff -durpNa glibc-2.2.2/intl/plural.c glibc-2.2.3/intl/plural.c --- glibc-2.2.2/intl/plural.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/plural.c Mon Mar 26 20:52:53 2001 @@ -11,7 +11,11 @@ #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs -#define NUMBER 257 +#define EQUOP2 257 +#define CMPOP2 258 +#define ADDOP2 259 +#define MULOP2 260 +#define NUMBER 261 #line 1 "plural.y" @@ -38,25 +42,127 @@ # include #endif -#include #include -#include "gettext.h" #include "gettextP.h" +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define FREE_EXPRESSION __gettext_free_exp +#else +# define FREE_EXPRESSION gettext_free_exp__ +# define __gettextparse gettextparse__ +#endif + #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg -#line 36 "plural.y" +#line 45 "plural.y" typedef union { unsigned long int num; + enum operator op; struct expression *exp; } YYSTYPE; -#line 41 "plural.y" +#line 51 "plural.y" /* Prototypes for local functions. */ -static struct expression *new_exp (enum operator op, int n, ...); -static int yylex (YYSTYPE *lval, const char **pexp); -static void yyerror (const char *str); +static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); +static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); +static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); +static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); +static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +static void yyerror PARAMS ((const char *str)); + +/* Allocation of expressions. */ + +static struct expression * +new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; +{ + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; +} + +static inline struct expression * +new_exp_0 (op) + enum operator op; +{ + return new_exp (0, op, NULL); +} + +static inline struct expression * +new_exp_1 (op, right) + enum operator op; + struct expression *right; +{ + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); +} + +static struct expression * +new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; +{ + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); +} + +static inline struct expression * +new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; +{ + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); +} + #include #ifndef __cplusplus @@ -67,24 +173,24 @@ static void yyerror (const char *str); -#define YYFINAL 31 +#define YYFINAL 27 #define YYFLAG -32768 -#define YYNTBASE 18 +#define YYNTBASE 16 -#define YYTRANSLATE(x) ((unsigned)(x) <= 257 ? yytranslate[x] : 20) +#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 7, 2, 2, 2, 12, 5, 2, 16, - 17, 10, 8, 2, 9, 2, 11, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, - 6, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -99,30 +205,30 @@ static const char yytranslate[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 13 + 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, + 11 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, - 0, 2, 8, 12, 16, 20, 24, 28, 32, 36, - 40, 44, 46, 48 + 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, + 37, 39 }; -static const short yyrhs[] = { 19, - 0, 19, 3, 19, 14, 19, 0, 19, 4, 19, - 0, 19, 5, 19, 0, 19, 6, 19, 0, 19, - 7, 19, 0, 19, 8, 19, 0, 19, 9, 19, - 0, 19, 10, 19, 0, 19, 11, 19, 0, 19, - 12, 19, 0, 15, 0, 13, 0, 16, 19, 17, - 0 +static const short yyrhs[] = { 17, + 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, + 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, + 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, + 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, + 15, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 59, 65, 70, 75, 80, 85, 90, 95, 100, 105, - 110, 115, 120, 126 + 170, 178, 182, 186, 190, 194, 198, 202, 206, 210, + 214, 219 }; #endif @@ -130,67 +236,61 @@ static const short yyrline[] = { 0, #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", -"'&'","'='","'!'","'+'","'-'","'*'","'/'","'%'","NUMBER","':'","'n'","'('","')'", +"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", "start","exp", NULL }; #endif static const short yyr1[] = { 0, - 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19 + 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17 }; static const short yyr2[] = { 0, - 1, 5, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 3 + 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, + 1, 3 }; static const short yydefact[] = { 0, - 13, 12, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 0, 2, 0, 0, - 0 + 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, + 7, 8, 0, 2, 0, 0, 0 }; -static const short yydefgoto[] = { 29, - 4 +static const short yydefgoto[] = { 25, + 5 }; -static const short yypact[] = { 58, --32768,-32768, 58, 37, 10, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58,-32768, 25, 45, 52, 57, - 57, 65, 65,-32768,-32768,-32768, 58, 37, 1, 2, --32768 +static const short yypact[] = { -9, + -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, + -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, + -3,-32768, -9, 34, 21, 53,-32768 }; static const short yypgoto[] = {-32768, - -3 + -1 }; -#define YYLAST 77 +#define YYLAST 53 -static const short yytable[] = { 5, - 30, 31, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 28, 0, 0, 16, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 0, 27, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 8, - 9, 10, 11, 12, 13, 14, 15, 9, 10, 11, - 12, 13, 14, 15, 11, 12, 13, 14, 15, 0, - 1, 0, 2, 3, 13, 14, 15 +static const short yytable[] = { 6, + 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, + 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, + 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, + 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, + 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, + 13, 14, 27 }; -static const short yycheck[] = { 3, - 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, 27, -1, -1, 17, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, -1, 14, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, - 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, - 9, 10, 11, 12, 8, 9, 10, 11, 12, -1, - 13, -1, 15, 16, 10, 11, 12 +static const short yycheck[] = { 1, + 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, + 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, + 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, + 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, + 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, + 8, 9, 0 }; #define YYPURE 1 @@ -738,100 +838,78 @@ yyreduce: switch (yyn) { case 1: -#line 60 "plural.y" +#line 171 "plural.y" { + if (yyvsp[0].exp == NULL) + YYABORT; ((struct parse_args *) arg)->res = yyvsp[0].exp; ; break;} case 2: -#line 66 "plural.y" +#line 179 "plural.y" { - if ((yyval.exp = new_exp (qmop, 3, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 3: -#line 71 "plural.y" +#line 183 "plural.y" { - if ((yyval.exp = new_exp (lor, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 4: -#line 76 "plural.y" +#line 187 "plural.y" { - if ((yyval.exp = new_exp (land, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 5: -#line 81 "plural.y" +#line 191 "plural.y" { - if ((yyval.exp = new_exp (equal, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 6: -#line 86 "plural.y" +#line 195 "plural.y" { - if ((yyval.exp = new_exp (not_equal, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 7: -#line 91 "plural.y" +#line 199 "plural.y" { - if ((yyval.exp = new_exp (plus, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 8: -#line 96 "plural.y" +#line 203 "plural.y" { - if ((yyval.exp = new_exp (minus, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 9: -#line 101 "plural.y" +#line 207 "plural.y" { - if ((yyval.exp = new_exp (mult, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); ; break;} case 10: -#line 106 "plural.y" +#line 211 "plural.y" { - if ((yyval.exp = new_exp (divide, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_0 (var); ; break;} case 11: -#line 111 "plural.y" +#line 215 "plural.y" { - if ((yyval.exp = new_exp (module, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + if ((yyval.exp = new_exp_0 (num)) != NULL) + yyval.exp->val.num = yyvsp[0].num; ; break;} case 12: -#line 116 "plural.y" -{ - if ((yyval.exp = new_exp (var, 0)) == NULL) - YYABORT - ; - break;} -case 13: -#line 121 "plural.y" -{ - if ((yyval.exp = new_exp (num, 0)) == NULL) - YYABORT; - yyval.exp->val.num = yyvsp[0].num - ; - break;} -case 14: -#line 127 "plural.y" +#line 220 "plural.y" { - yyval.exp = yyvsp[-1].exp + yyval.exp = yyvsp[-1].exp; ; break;} } @@ -1056,73 +1134,29 @@ yyerrhandle: } return 1; } -#line 132 "plural.y" - - -static struct expression * -new_exp (enum operator op, int n, ...) -{ - struct expression *newp = (struct expression *) calloc (1, sizeof (*newp)); - va_list va; - - va_start (va, n); - - if (newp == NULL) - while (n-- > 0) - __gettext_free_exp (va_arg (va, struct expression *)); - else - { - newp->operation = op; - if (n > 0) - { - newp->val.args3.bexp = va_arg (va, struct expression *); - newp->val.args3.tbranch = va_arg (va, struct expression *); - - if (n > 2) - newp->val.args3.fbranch = va_arg (va, struct expression *); - - if (newp->val.args3.bexp == NULL - || newp->val.args3.tbranch == NULL - || (n > 2 && newp->val.args3.fbranch == NULL)) - { - __gettext_free_exp (newp); - newp = NULL; - } - } - } - - va_end (va); +#line 225 "plural.y" - return newp; -} void internal_function -__gettext_free_exp (struct expression *exp) +FREE_EXPRESSION (exp) + struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ - switch (exp->operation) + switch (exp->nargs) { - case qmop: - __gettext_free_exp (exp->val.args3.fbranch); + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ - - case mult: - case divide: - case module: - case plus: - case minus: - case equal: - case not_equal: - case land: - case lor: - __gettext_free_exp (exp->val.args2.right); - __gettext_free_exp (exp->val.args2.left); - break; - default: break; } @@ -1132,19 +1166,15 @@ __gettext_free_exp (struct expression *e static int -yylex (YYSTYPE *lval, const char **pexp) +yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; { const char *exp = *pexp; int result; while (1) { - if (exp[0] == '\\' && exp[1] == '\n') - { - exp += 2; - continue; - } - if (exp[0] == '\0') { *pexp = exp; @@ -1176,13 +1206,25 @@ yylex (YYSTYPE *lval, const char **pexp) break; case '=': - case '!': if (exp[0] == '=') - ++exp; + { + ++exp; + lval->op = equal; + result = EQUOP2; + } else result = YYERRCODE; break; + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + case '&': case '|': if (exp[0] == result) @@ -1191,12 +1233,54 @@ yylex (YYSTYPE *lval, const char **pexp) result = YYERRCODE; break; - case 'n': + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + case '*': + lval->op = mult; + result = MULOP2; + break; + case '/': + lval->op = divide; + result = MULOP2; + break; + case '%': + lval->op = module; + result = MULOP2; + break; + case '+': + lval->op = plus; + result = ADDOP2; + break; + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': case '?': case ':': case '(': @@ -1227,7 +1311,8 @@ yylex (YYSTYPE *lval, const char **pexp) static void -yyerror (const char *str) +yyerror (str) + const char *str; { /* Do nothing. We don't print error messages here. */ } diff -durpNa glibc-2.2.2/intl/plural.y glibc-2.2.3/intl/plural.y --- glibc-2.2.2/intl/plural.y Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/plural.y Mon Mar 26 20:52:53 2001 @@ -22,11 +22,20 @@ # include #endif -#include #include -#include "gettext.h" #include "gettextP.h" +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define FREE_EXPRESSION __gettext_free_exp +#else +# define FREE_EXPRESSION gettext_free_exp__ +# define __gettextparse gettextparse__ +#endif + #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg %} @@ -35,22 +44,124 @@ %union { unsigned long int num; + enum operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ -static struct expression *new_exp (enum operator op, int n, ...); -static int yylex (YYSTYPE *lval, const char **pexp); -static void yyerror (const char *str); +static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); +static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); +static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); +static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); +static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +static void yyerror PARAMS ((const char *str)); + +/* Allocation of expressions. */ + +static struct expression * +new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; +{ + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; +} + +static inline struct expression * +new_exp_0 (op) + enum operator op; +{ + return new_exp (0, op, NULL); +} + +static inline struct expression * +new_exp_1 (op, right) + enum operator op; + struct expression *right; +{ + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); +} + +static struct expression * +new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; +{ + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); +} + +static inline struct expression * +new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; +{ + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); +} + %} -%left '?' -%left '|' -%left '&' -%left '=', '!' -%left '+', '-' -%left '*', '/', '%' +/* This declares that all operators have the same associativity and the + precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. + There is no unary minus and no bitwise operators. + Operators with the same syntactic behaviour have been merged into a single + token, to save space in the array generated by bison. */ +%right '?' /* ? */ +%left '|' /* || */ +%left '&' /* && */ +%left EQUOP2 /* == != */ +%left CMPOP2 /* < > <= >= */ +%left ADDOP2 /* + - */ +%left MULOP2 /* * / % */ +%right '!' /* ! */ + +%token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp @@ -58,143 +169,81 @@ static void yyerror (const char *str); start: exp { + if ($1 == NULL) + YYABORT; ((struct parse_args *) arg)->res = $1; } ; exp: exp '?' exp ':' exp { - if (($$ = new_exp (qmop, 3, $1, $3, $5)) == NULL) - YYABORT + $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { - if (($$ = new_exp (lor, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { - if (($$ = new_exp (land, 2, $1, $3)) == NULL) - YYABORT - } - | exp '=' exp - { - if (($$ = new_exp (equal, 2, $1, $3)) == NULL) - YYABORT - } - | exp '!' exp - { - if (($$ = new_exp (not_equal, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 (land, $1, $3); } - | exp '+' exp + | exp EQUOP2 exp { - if (($$ = new_exp (plus, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '-' exp + | exp CMPOP2 exp { - if (($$ = new_exp (minus, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '*' exp + | exp ADDOP2 exp { - if (($$ = new_exp (mult, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '/' exp + | exp MULOP2 exp { - if (($$ = new_exp (divide, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '%' exp + | '!' exp { - if (($$ = new_exp (module, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_1 (lnot, $2); } | 'n' { - if (($$ = new_exp (var, 0)) == NULL) - YYABORT + $$ = new_exp_0 (var); } | NUMBER { - if (($$ = new_exp (num, 0)) == NULL) - YYABORT; - $$->val.num = $1 + if (($$ = new_exp_0 (num)) != NULL) + $$->val.num = $1; } | '(' exp ')' { - $$ = $2 + $$ = $2; } ; %% -static struct expression * -new_exp (enum operator op, int n, ...) -{ - struct expression *newp = (struct expression *) calloc (1, sizeof (*newp)); - va_list va; - - va_start (va, n); - - if (newp == NULL) - while (n-- > 0) - __gettext_free_exp (va_arg (va, struct expression *)); - else - { - newp->operation = op; - if (n > 0) - { - newp->val.args3.bexp = va_arg (va, struct expression *); - newp->val.args3.tbranch = va_arg (va, struct expression *); - - if (n > 2) - newp->val.args3.fbranch = va_arg (va, struct expression *); - - if (newp->val.args3.bexp == NULL - || newp->val.args3.tbranch == NULL - || (n > 2 && newp->val.args3.fbranch == NULL)) - { - __gettext_free_exp (newp); - newp = NULL; - } - } - } - - va_end (va); - - return newp; -} - void internal_function -__gettext_free_exp (struct expression *exp) +FREE_EXPRESSION (exp) + struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ - switch (exp->operation) + switch (exp->nargs) { - case qmop: - __gettext_free_exp (exp->val.args3.fbranch); + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ - - case mult: - case divide: - case module: - case plus: - case minus: - case equal: - case not_equal: - case land: - case lor: - __gettext_free_exp (exp->val.args2.right); - __gettext_free_exp (exp->val.args2.left); - break; - default: break; } @@ -204,19 +253,15 @@ __gettext_free_exp (struct expression *e static int -yylex (YYSTYPE *lval, const char **pexp) +yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; { const char *exp = *pexp; int result; while (1) { - if (exp[0] == '\\' && exp[1] == '\n') - { - exp += 2; - continue; - } - if (exp[0] == '\0') { *pexp = exp; @@ -248,13 +293,25 @@ yylex (YYSTYPE *lval, const char **pexp) break; case '=': - case '!': if (exp[0] == '=') - ++exp; + { + ++exp; + lval->op = equal; + result = EQUOP2; + } else result = YYERRCODE; break; + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + case '&': case '|': if (exp[0] == result) @@ -263,12 +320,54 @@ yylex (YYSTYPE *lval, const char **pexp) result = YYERRCODE; break; - case 'n': + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + case '*': + lval->op = mult; + result = MULOP2; + break; + case '/': + lval->op = divide; + result = MULOP2; + break; + case '%': + lval->op = module; + result = MULOP2; + break; + case '+': + lval->op = plus; + result = ADDOP2; + break; + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': case '?': case ':': case '(': @@ -299,7 +398,8 @@ yylex (YYSTYPE *lval, const char **pexp) static void -yyerror (const char *str) +yyerror (str) + const char *str; { /* Do nothing. We don't print error messages here. */ } diff -durpNa glibc-2.2.2/intl/textdomain.c glibc-2.2.3/intl/textdomain.c --- glibc-2.2.2/intl/textdomain.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/textdomain.c Mon Mar 26 20:52:54 2001 @@ -1,5 +1,5 @@ /* Implementation of the textdomain(3) function. - Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000, 2001 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 @@ -36,9 +36,8 @@ #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC diff -durpNa glibc-2.2.2/intl/tst-codeset.c glibc-2.2.3/intl/tst-codeset.c --- glibc-2.2.2/intl/tst-codeset.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/intl/tst-codeset.c Tue Apr 17 08:17:15 2001 @@ -0,0 +1,57 @@ +/* Test of bind_textdomain_codeset. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Bruno Haible , 2001. + + 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 +#include +#include +#include +#include + +int +main (void) +{ + char *s; + int result = 0; + + unsetenv ("LANGUAGE"); + unsetenv ("OUTPUT_CHARSET"); + setlocale (LC_ALL, "de_DE.ISO-8859-1"); + textdomain ("codeset"); + bindtextdomain ("codeset", OBJPFX "domaindir"); + + /* Here we expect output in ISO-8859-1. */ + s = gettext ("cheese"); + if (strcmp (s, "K\344se")) + { + printf ("call 1 returned: %s\n", s); + result = 1; + } + + bind_textdomain_codeset ("codeset", "UTF-8"); + + /* Here we expect output in UTF-8. */ + s = gettext ("cheese"); + if (strcmp (s, "K\303\244se")) + { + printf ("call 2 returned: %s\n", s); + result = 1; + } + + return result; +} diff -durpNa glibc-2.2.2/intl/tst-codeset.sh glibc-2.2.3/intl/tst-codeset.sh --- glibc-2.2.2/intl/tst-codeset.sh Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/intl/tst-codeset.sh Mon Apr 9 16:32:15 2001 @@ -0,0 +1,42 @@ +#! /bin/sh +# Test of bind_textdomain_codeset. +# Copyright (C) 2001 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. + +common_objpfx=$1 +objpfx=$2 + +GCONV_PATH=${common_objpfx}iconvdata +export GCONV_PATH +LOCPATH=${common_objpfx}localedata +export LOCPATH +LC_ALL=C +export LC_ALL + +# Generate the test data. +test -d ${objpfx}domaindir || mkdir ${objpfx}domaindir +# Create the domain directories. +test -d ${objpfx}domaindir/de_DE || mkdir ${objpfx}domaindir/de_DE +test -d ${objpfx}domaindir/de_DE/LC_MESSAGES || mkdir ${objpfx}domaindir/de_DE/LC_MESSAGES +# Populate them. +msgfmt -o ${objpfx}domaindir/de_DE/LC_MESSAGES/codeset.mo tstcodeset.po + +${common_objpfx}elf/ld.so --library-path $common_objpfx \ +${objpfx}tst-codeset > ${objpfx}tst-codeset.out + +exit $? diff -durpNa glibc-2.2.2/intl/tstcodeset.po glibc-2.2.3/intl/tstcodeset.po --- glibc-2.2.2/intl/tstcodeset.po Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/intl/tstcodeset.po Mon Apr 9 16:32:36 2001 @@ -0,0 +1,8 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +msgid "cheese" +msgstr "Käse" diff -durpNa glibc-2.2.2/io/Makefile glibc-2.2.3/io/Makefile --- glibc-2.2.2/io/Makefile Tue Jan 23 14:07:17 2001 +++ glibc-2.2.3/io/Makefile Mon Mar 26 20:52:55 2001 @@ -66,6 +66,16 @@ CFLAGS-fts.c = -Wno-uninitialized CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE CFLAGS-test-lfs.c = -D_LARGEFILE64_SOURCE +ifeq (yes,$(have-protected)) +CFLAGS-stat.c = -DHAVE_DOT_HIDDEN +CFLAGS-fstat.c = -DHAVE_DOT_HIDDEN +CFLAGS-lstat.c = -DHAVE_DOT_HIDDEN +CFLAGS-mknod.c = -DHAVE_DOT_HIDDEN +CFLAGS-stat64.c = -DHAVE_DOT_HIDDEN +CFLAGS-fstat64.c = -DHAVE_DOT_HIDDEN +CFLAGS-lstat64.c = -DHAVE_DOT_HIDDEN +endif + test-stat2-ARGS = Makefile . $(objpfx)test-stat2 ifeq ($(cross-compiling),no) diff -durpNa glibc-2.2.2/io/fstat.c glibc-2.2.3/io/fstat.c --- glibc-2.2.2/io/fstat.c Sun Aug 9 15:05:41 1998 +++ glibc-2.2.3/io/fstat.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2001 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 @@ -45,3 +45,10 @@ __fstat (int fd, struct stat *buf) } weak_alias (__fstat, fstat) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tfstat"); +asm (".hidden\t__fstat"); +#endif diff -durpNa glibc-2.2.2/io/fstat64.c glibc-2.2.3/io/fstat64.c --- glibc-2.2.2/io/fstat64.c Tue Nov 11 15:13:23 1997 +++ glibc-2.2.3/io/fstat64.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -42,3 +42,9 @@ fstat64 (int fd, struct stat64 *buf) { return __fxstat64 (_STAT_VER, fd, buf); } + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tfstat64"); +#endif diff -durpNa glibc-2.2.2/io/lstat.c glibc-2.2.3/io/lstat.c --- glibc-2.2.2/io/lstat.c Sun Aug 9 15:07:12 1998 +++ glibc-2.2.3/io/lstat.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -45,3 +45,10 @@ __lstat (const char *file, struct stat * } weak_alias (__lstat, lstat) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tlstat"); +asm (".hidden\t__lstat"); +#endif diff -durpNa glibc-2.2.2/io/lstat64.c glibc-2.2.3/io/lstat64.c --- glibc-2.2.2/io/lstat64.c Tue Nov 11 15:16:27 1997 +++ glibc-2.2.3/io/lstat64.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -42,3 +42,9 @@ lstat64 (const char *file, struct stat64 { return __lxstat64 (_STAT_VER, file, buf); } + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tlstat64"); +#endif diff -durpNa glibc-2.2.2/io/stat.c glibc-2.2.3/io/stat.c --- glibc-2.2.2/io/stat.c Tue Nov 11 15:16:39 1997 +++ glibc-2.2.3/io/stat.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -44,3 +44,10 @@ __stat (const char *file, struct stat *b } weak_alias (__stat, stat) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tstat"); +asm (".hidden\t__stat"); +#endif diff -durpNa glibc-2.2.2/io/stat64.c glibc-2.2.3/io/stat64.c --- glibc-2.2.2/io/stat64.c Tue Nov 11 15:16:50 1997 +++ glibc-2.2.3/io/stat64.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -42,3 +42,9 @@ stat64 (const char *file, struct stat64 { return __xstat64 (_STAT_VER, file, buf); } + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tstat64"); +#endif diff -durpNa glibc-2.2.2/libio/Makefile glibc-2.2.3/libio/Makefile --- glibc-2.2.2/libio/Makefile Thu Feb 15 14:08:31 2001 +++ glibc-2.2.3/libio/Makefile Mon Apr 9 21:48:46 2001 @@ -48,7 +48,7 @@ routines := \ libc_fatal fmemopen tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc \ - tst_wprintf2 tst-widetext test-fmemopen + tst_wprintf2 tst-widetext test-fmemopen tst-ext test-srcs = test-freopen all: # Make this the default target; it will be defined in Rules. @@ -93,7 +93,8 @@ shared-only-routines = oldiofopen oldiof oldiofgetpos oldiofgetpos64 oldiofsetpos \ oldiofsetpos64 -distribute := iolibio.h libioP.h strfile.h Banner test-freopen.sh +distribute := iolibio.h libioP.h strfile.h Banner test-freopen.sh \ + fd_to_filename.h include ../Rules diff -durpNa glibc-2.2.2/libio/freopen.c glibc-2.2.3/libio/freopen.c --- glibc-2.2.2/libio/freopen.c Thu Nov 16 11:12:02 2000 +++ glibc-2.2.3/libio/freopen.c Mon Apr 9 20:03:25 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,95,96,97,98,2000 Free Software Foundation, Inc. +/* Copyright (C) 1993,95,96,97,98,2000,2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -27,6 +27,7 @@ #include "stdio.h" #include +#include FILE* freopen (filename, mode, fp) @@ -35,11 +36,18 @@ freopen (filename, mode, fp) FILE* fp; { FILE *result; + int fd = -1; CHECK_FILE (fp, NULL); if (!(fp->_flags & _IO_IS_FILEBUF)) return NULL; _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); + if (filename == NULL && _IO_fileno (fp) >= 0) + { + fd = dup (_IO_fileno (fp)); + if (fd != -1) + filename = fd_to_filename (fd); + } #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) if (&_IO_stdin_used == NULL) /* If the shared C library is used by the application binary which @@ -54,6 +62,12 @@ freopen (filename, mode, fp) if (result != NULL) /* unbound stream orientation */ result->_mode = 0; + if (fd != -1) + { + close (fd); + if (filename != NULL) + free ((char *) filename); + } _IO_funlockfile (fp); _IO_cleanup_region_end (0); return result; diff -durpNa glibc-2.2.2/libio/freopen64.c glibc-2.2.3/libio/freopen64.c --- glibc-2.2.2/libio/freopen64.c Thu Nov 16 11:12:02 2000 +++ glibc-2.2.3/libio/freopen64.c Mon Apr 9 20:03:25 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,1995,1996,1997,1998,2000 Free Software Foundation, Inc. +/* Copyright (C) 1993,1995,1996,1997,1998,2000,2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -26,6 +26,8 @@ #include "libioP.h" #include "stdio.h" +#include + FILE * freopen64 (filename, mode, fp) const char* filename; @@ -34,15 +36,28 @@ freopen64 (filename, mode, fp) { #ifdef _G_OPEN64 FILE *result; + int fd = -1; CHECK_FILE (fp, NULL); if (!(fp->_flags & _IO_IS_FILEBUF)) return NULL; _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); + if (filename == NULL && _IO_fileno (fp) >= 0) + { + fd = dup (_IO_fileno (fp)); + if (fd != -1) + filename = fd_to_filename (fd); + } result = _IO_freopen64 (filename, mode, fp); if (result != NULL) /* unbound stream orientation */ result->_mode = 0; + if (fd != -1) + { + close (fd); + if (filename != NULL) + free ((char *) filename); + } _IO_funlockfile (fp); _IO_cleanup_region_end (0); return result; diff -durpNa glibc-2.2.2/libio/iofwide.c glibc-2.2.3/libio/iofwide.c --- glibc-2.2.2/libio/iofwide.c Thu Sep 7 11:56:28 2000 +++ glibc-2.2.3/libio/iofwide.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -203,10 +203,6 @@ _IO_fwide (fp, mode) return mode; } - -#ifdef weak_alias -weak_alias (_IO_fwide, fwide) -#endif static enum __codecvt_result diff -durpNa glibc-2.2.2/libio/iogetline.c glibc-2.2.3/libio/iogetline.c --- glibc-2.2.2/libio/iogetline.c Thu Aug 31 14:45:04 2000 +++ glibc-2.2.3/libio/iogetline.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -78,9 +78,9 @@ _IO_getline_info (fp, buf, n, delim, ext *ptr++ = c; else if (extract_delim < 0) _IO_sputbackc (fp, c); - return ptr - buf; if (extract_delim > 0) ++len; + return ptr - buf; } *ptr++ = c; n--; diff -durpNa glibc-2.2.2/libio/iosetvbuf.c glibc-2.2.3/libio/iosetvbuf.c --- glibc-2.2.2/libio/iosetvbuf.c Wed May 31 11:10:40 2000 +++ glibc-2.2.3/libio/iosetvbuf.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1993,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -82,6 +82,8 @@ _IO_setvbuf (fp, buf, mode, size) } break; case _IONBF: + fp->_IO_file_flags &= ~_IO_LINE_BUF; + fp->_IO_file_flags |= _IO_UNBUFFERED; buf = NULL; size = 0; break; diff -durpNa glibc-2.2.2/libio/tst-ext.c glibc-2.2.3/libio/tst-ext.c --- glibc-2.2.2/libio/tst-ext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/libio/tst-ext.c Mon Mar 26 16:15:41 2001 @@ -0,0 +1,141 @@ +#include +#include +#include + + +int +main (void) +{ + FILE *fp; + const char teststring[] = "hello world"; + char buf[3072]; + int result = 0; + char readbuf[256]; + + /* Open a file. */ + fp = tmpfile (); + + /* Set a buffer. */ + if (setvbuf (fp, buf, _IOFBF, sizeof buf) == EOF) + { + printf ("setvbuf failed: %m\n"); + exit (1); + } + + /* Get the buffer size. */ + if (__fbufsize (fp) != sizeof buf) + { + printf ("__fbusize() reported a buffer size of %Zd bytes;" + " we installed a buffer with %Zd bytes\n", + __fbufsize (fp), sizeof buf); + result = 1; + } + + /* Write something and read it back. */ + if (fputs (teststring, fp) == EOF) + { + printf ("writing to new stream failed: %m\n"); + exit (1); + } + rewind (fp); + if (fgets (readbuf, sizeof readbuf, fp) == NULL) + { + printf ("reading from new stream failed: %m\n"); + exit (1); + } + if (strcmp (readbuf, teststring) != 0) + { + puts ("not the correct string read"); + exit (1); + } + + /* The file must be opened for reading and writing. */ + if (__freading (fp) == 0) + { + puts ("__freading() reported stream is not last read from"); + result = 1; + } + if (__fwriting (fp) != 0) + { + puts ("__fwriting() reported stream is write-only or last written to"); + result = 1; + } + rewind (fp); + if (fputs (teststring, fp) == EOF) + { + printf ("writing(2) to new stream failed: %m\n"); + exit (1); + } + if (__fwriting (fp) == 0) + { + puts ("__fwriting() doe snot reported stream is last written to"); + result = 1; + } + if (__freading (fp) != 0) + { + puts ("__freading() reported stream is last read from"); + result = 1; + } + + if (__freadable (fp) == 0) + { + puts ("__freading() reported stream is last readable"); + result = 1; + } + if (__fwritable (fp) == 0) + { + puts ("__freading() reported stream is last writable"); + result = 1; + } + + /* The string we wrote above should still be in the buffer. */ + if (__fpending (fp) != strlen (teststring)) + { + printf ("__fpending() returned %Zd; expected %Zd\n", + __fpending (fp), strlen (teststring)); + result = 1; + } + /* Discard all the output. */ + __fpurge (fp); + /* And check again. */ + if (__fpending (fp) != 0) + { + printf ("__fpending() returned %Zd; expected 0\n", + __fpending (fp)); + result = 1; + } + + + /* Find out whether buffer is line buffered. */ + if (__flbf (fp) != 0) + { + puts ("__flbf() reports line buffered but it is fully buffered"); + result = 1; + } + + if (setvbuf (fp, buf, _IOLBF, sizeof buf) == EOF) + { + printf ("setvbuf(2) failed: %m\n"); + exit (1); + } + if (__flbf (fp) == 0) + { + puts ("__flbf() reports file is not line buffered"); + result = 1; + } + + if (setvbuf (fp, NULL, _IONBF, 0) == EOF) + { + printf ("setvbuf(3) failed: %m\n"); + exit (1); + } + if (__flbf (fp) != 0) + { + puts ("__flbf() reports line buffered but it is not buffered"); + result = 1; + } + + fclose (fp); + + return result; +} diff -durpNa glibc-2.2.2/locale/C-address.c glibc-2.2.3/locale/C-address.c --- glibc-2.2.2/locale/C-address.c Wed Jun 21 11:11:00 2000 +++ glibc-2.2.3/locale/C-address.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,7 +31,7 @@ const struct locale_data _nl_C_LC_ADDRES UNDELETABLE, 0, NULL, - 12, + 13, { { string: "%a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N" }, { string: "" }, @@ -44,6 +44,7 @@ const struct locale_data _nl_C_LC_ADDRES { string: "" }, { string: "" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-collate.c glibc-2.2.3/locale/C-collate.c --- glibc-2.2.2/locale/C-collate.c Thu Sep 7 11:56:28 2000 +++ glibc-2.2.3/locale/C-collate.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1997,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -105,7 +105,7 @@ const struct locale_data _nl_C_LC_COLLAT UNDELETABLE, 0, NULL, - 18, + 19, { /* _NL_COLLATE_NRULES */ { word: 0 }, @@ -142,6 +142,8 @@ const struct locale_data _nl_C_LC_COLLAT /* _NL_COLLATE_COLLSEQMB */ { string: collseqmb }, /* _NL_COLLATE_COLLSEQWC */ - { string: (const char *) collseqwc } + { string: (const char *) collseqwc }, + /* _NL_COLLATE_CODESET */ + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-ctype.c glibc-2.2.3/locale/C-ctype.c --- glibc-2.2.2/locale/C-ctype.c Sun Oct 8 17:04:52 2000 +++ glibc-2.2.3/locale/C-ctype.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -590,7 +590,7 @@ const struct locale_data _nl_C_LC_CTYPE /* _NL_CTYPE_MB_CUR_MAX */ { word: 1 }, /* _NL_CTYPE_CODESET_NAME */ - { string: "ANSI_X3.4-1968" }, + { string: _nl_C_codeset }, /* _NL_CTYPE_TOUPPER32 */ { string: (const char *) &_nl_C_LC_CTYPE_toupper[128] }, /* _NL_CTYPE_TOLOWER32 */ diff -durpNa glibc-2.2.2/locale/C-identification.c glibc-2.2.3/locale/C-identification.c --- glibc-2.2.2/locale/C-identification.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-identification.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,7 +31,7 @@ const struct locale_data _nl_C_LC_IDENTI UNDELETABLE, 0, NULL, - 15, + 16, { { string: "ISO/IEC 14652 i18n FDCC-set" }, { string: "ISO/IEC JTC1/SC22/WG20 - internationalization" }, @@ -51,6 +51,7 @@ const struct locale_data _nl_C_LC_IDENTI "i18n:1999\0" "i18n:1999\0" "\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" - "i18n:1999" } + "i18n:1999" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-measurement.c glibc-2.2.3/locale/C-measurement.c --- glibc-2.2.2/locale/C-measurement.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-measurement.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,8 +31,9 @@ const struct locale_data _nl_C_LC_MEASUR UNDELETABLE, 0, NULL, - 1, + 2, { - { string: "\1" } + { string: "\1" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-messages.c glibc-2.2.3/locale/C-messages.c --- glibc-2.2.2/locale/C-messages.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-messages.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -31,11 +31,12 @@ const struct locale_data _nl_C_LC_MESSAG UNDELETABLE, 0, NULL, - 4, + 5, { { string: "^[yY]" }, { string: "^[nN]" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-monetary.c glibc-2.2.3/locale/C-monetary.c --- glibc-2.2.2/locale/C-monetary.c Thu Oct 26 22:57:25 2000 +++ glibc-2.2.3/locale/C-monetary.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -35,7 +35,7 @@ const struct locale_data _nl_C_LC_MONETA UNDELETABLE, 0, NULL, - 45, + 46, { { string: "" }, { string: "" }, @@ -81,6 +81,7 @@ const struct locale_data _nl_C_LC_MONETA { word: 99991231 }, { word: 1 }, { word: (unsigned int) L'\0' }, - { word: (unsigned int) L'\0' } + { word: (unsigned int) L'\0' }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-name.c glibc-2.2.3/locale/C-name.c --- glibc-2.2.2/locale/C-name.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-name.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,13 +31,14 @@ const struct locale_data _nl_C_LC_NAME = UNDELETABLE, 0, NULL, - 6, + 7, { { string: "%p%t%g%t%m%t%f" }, { string: "" }, { string: "" }, { string: "" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-numeric.c glibc-2.2.3/locale/C-numeric.c --- glibc-2.2.2/locale/C-numeric.c Thu Oct 26 22:57:25 2000 +++ glibc-2.2.3/locale/C-numeric.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -28,12 +28,13 @@ const struct locale_data _nl_C_LC_NUMERI UNDELETABLE, 0, NULL, - 5, + 6, { { string: "." }, { string: "" }, { string: "" }, { word: (unsigned int) L'.' }, - { word: (unsigned int) L'\0' } + { word: (unsigned int) L'\0' }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-paper.c glibc-2.2.3/locale/C-paper.c --- glibc-2.2.2/locale/C-paper.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-paper.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,9 +31,10 @@ const struct locale_data _nl_C_LC_PAPER UNDELETABLE, 0, NULL, - 2, + 3, { { word: 297 }, - { word: 210 } + { word: 210 }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-telephone.c glibc-2.2.3/locale/C-telephone.c --- glibc-2.2.2/locale/C-telephone.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-telephone.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,11 +31,12 @@ const struct locale_data _nl_C_LC_TELEPH UNDELETABLE, 0, NULL, - 4, + 5, { { string: "+%c %a %l" }, { string: "" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-time.c glibc-2.2.3/locale/C-time.c --- glibc-2.2.2/locale/C-time.c Thu Nov 9 11:34:28 2000 +++ glibc-2.2.3/locale/C-time.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -30,7 +30,7 @@ const struct locale_data _nl_C_LC_TIME = UNDELETABLE, 0, NULL, - 110, + 111, { { string: "Sun" }, { string: "Mon" }, @@ -141,6 +141,7 @@ const struct locale_data _nl_C_LC_TIME = { string: "\1" }, { string: "" }, { string: "%a %b %e %H:%M:%S %Z %Y" }, - { wstr: (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y" } + { wstr: (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C_name.c glibc-2.2.3/locale/C_name.c --- glibc-2.2.2/locale/C_name.c Fri Sep 26 16:24:46 1997 +++ glibc-2.2.3/locale/C_name.c Sat Apr 7 14:02:35 2001 @@ -6,3 +6,6 @@ /* Name of our standard locale. */ const char _nl_C_name[] = "C"; const char _nl_POSIX_name[] = "POSIX"; + +/* The standard codeset. */ +const char _nl_C_codeset[] = "ANSI_X3.4-1968"; diff -durpNa glibc-2.2.2/locale/Makefile glibc-2.2.3/locale/Makefile --- glibc-2.2.2/locale/Makefile Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/Makefile Mon Mar 26 20:53:00 2001 @@ -100,4 +100,5 @@ CFLAGS-charmap-dir.c = -Wno-write-string # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libBrokenLocale.so: $(common-objpfx)libc.so +$(objpfx)libBrokenLocale.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/locale/categories.def glibc-2.2.3/locale/categories.def --- glibc-2.2.2/locale/categories.def Tue Oct 31 11:09:54 2000 +++ glibc-2.2.3/locale/categories.def Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* Definition of all available locale categories and their items. -*- C -*- - Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-2000, 2001 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 @@ -57,6 +57,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_COLLATE_SYMB_EXTRAMB, "collate-symb-extramb", std, wstring) DEFINE_ELEMENT (_NL_COLLATE_COLLSEQMB, "collate-collseqmb", std, wstring) DEFINE_ELEMENT (_NL_COLLATE_COLLSEQWC, "collate-collseqwc", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_CODESET, "collate-codeset", std, string) ), NO_POSTLOAD) @@ -182,6 +183,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_MONETARY_CONVERSION_RATE, "conversion_rate", std, wordarray, 2, 2) DEFINE_ELEMENT (_NL_MONETARY_DECIMAL_POINT_WC, "monetary-decimal-point-wc", std, word) DEFINE_ELEMENT (_NL_MONETARY_THOUSANDS_SEP_WC, "monetary-thousands-sep-wc", std, word) + DEFINE_ELEMENT (_NL_MONETARY_CODESET, "monetary-codeset", std, string) ), NO_POSTLOAD) @@ -194,6 +196,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (GROUPING, "grouping", std, bytearray) DEFINE_ELEMENT (_NL_NUMERIC_DECIMAL_POINT_WC, "numeric-decimal-point-wc", std, word) DEFINE_ELEMENT (_NL_NUMERIC_THOUSANDS_SEP_WC, "numeric-thousands-sep-wc", std, word) + DEFINE_ELEMENT (_NL_NUMERIC_CODESET, "numeric-codeset", std, string) ), NO_POSTLOAD) @@ -242,6 +245,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_TIME_TIMEZONE, "timezone", std, string) DEFINE_ELEMENT (_DATE_FMT, "date_fmt", opt, string) DEFINE_ELEMENT (_NL_W_DATE_FMT, "wide-date_fmt", opt, wstring) + DEFINE_ELEMENT (_NL_TIME_CODESET, "time-codeset", std, string) ), _nl_postload_time) @@ -253,6 +257,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (NOEXPR, "noexpr", std, string) DEFINE_ELEMENT (YESSTR, "yesstr", opt, string) DEFINE_ELEMENT (NOSTR, "nostr", opt, string) + DEFINE_ELEMENT (_NL_MESSAGES_CODESET, "messages-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -261,6 +266,7 @@ DEFINE_CATEGORY ( DEFINE_ELEMENT (_NL_PAPER_HEIGHT, "height", std, word) DEFINE_ELEMENT (_NL_PAPER_WIDTH, "width", std, word) + DEFINE_ELEMENT (_NL_PAPER_CODESET, "paper-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -273,6 +279,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_NAME_NAME_MRS, "name_mrs", std, string) DEFINE_ELEMENT (_NL_NAME_NAME_MISS, "name_miss", std, string) DEFINE_ELEMENT (_NL_NAME_NAME_MS, "name_ms", std, string) + DEFINE_ELEMENT (_NL_NAME_CODESET, "name-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -291,6 +298,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_ADDRESS_LANG_AB, "lang_ab", std, string) DEFINE_ELEMENT (_NL_ADDRESS_LANG_TERM, "lang_term", std, string) DEFINE_ELEMENT (_NL_ADDRESS_LANG_LIB, "lang_lib", std, string) + DEFINE_ELEMENT (_NL_ADDRESS_CODESET, "address-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -301,6 +309,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_TELEPHONE_TEL_DOM_FMT, "tel_dom_fmt", std, string) DEFINE_ELEMENT (_NL_TELEPHONE_INT_SELECT, "int_select", std, string) DEFINE_ELEMENT (_NL_TELEPHONE_INT_PREFIX, "int_prefix", std, string) + DEFINE_ELEMENT (_NL_TELEPHONE_CODESET, "telephone-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -308,6 +317,7 @@ DEFINE_CATEGORY LC_MEASUREMENT, "LC_MEASUREMENT", ( DEFINE_ELEMENT (_NL_MEASUREMENT_MEASUREMENT, "measurement", std, byte) + DEFINE_ELEMENT (_NL_MEASUREMENT_CODESET, "measurement-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -328,5 +338,6 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_IDENTIFICATION_ABBREVIATION, "abbreviation", std, string) DEFINE_ELEMENT (_NL_IDENTIFICATION_REVISION, "revision", std, string) DEFINE_ELEMENT (_NL_IDENTIFICATION_DATE, "date", std, string) - DEFINE_ELEMENT (_NL_IDENTIFICATION_CATEGORY, "category", std, stringarray, 13, 13) + DEFINE_ELEMENT (_NL_IDENTIFICATION_CATEGORY, "category", std, stringarray, 13, 13) + DEFINE_ELEMENT (_NL_IDENTIFICATION_CODESET, "identification-codeset", std, string) ), NO_POSTLOAD) diff -durpNa glibc-2.2.2/locale/findlocale.c glibc-2.2.3/locale/findlocale.c --- glibc-2.2.2/locale/findlocale.c Fri Dec 1 11:55:06 2000 +++ glibc-2.2.3/locale/findlocale.c Mon Apr 9 20:03:27 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -26,6 +27,7 @@ #endif #include "localeinfo.h" +#include "../iconv/gconv_charset.h" /* Constant data defined in setlocale.c. */ @@ -121,7 +123,7 @@ _nl_find_locale (const char *locale_path language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, - _nl_category_names[category], NULL, 0); + _nl_category_names[category], 0); if (locale_file == NULL) { @@ -132,7 +134,7 @@ _nl_find_locale (const char *locale_path language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, - _nl_category_names[category], NULL, 1); + _nl_category_names[category], 1); if (locale_file == NULL) /* This means we are out of core. */ return NULL; @@ -161,6 +163,54 @@ _nl_find_locale (const char *locale_path locale_file = locale_file->successor[cnt]; if (locale_file == NULL) + return NULL; + } + + /* The LC_CTYPE category allows to check whether a locale is really + usable. If the locale name contains a charset name and the + charset name used in the locale (present in the LC_CTYPE data) is + not the same (after resolving aliases etc) we reject the locale + since using it would irritate users expecting the charset named + in the locale name. */ + if (codeset != NULL) + { + /* Get the codeset information from the locale file. */ + static const int codeset_idx[] = + { + [__LC_CTYPE] = _NL_ITEM_INDEX (CODESET), + [__LC_NUMERIC] = _NL_ITEM_INDEX (_NL_NUMERIC_CODESET), + [__LC_TIME] = _NL_ITEM_INDEX (_NL_TIME_CODESET), + [__LC_COLLATE] = _NL_ITEM_INDEX (_NL_COLLATE_CODESET), + [__LC_MONETARY] = _NL_ITEM_INDEX (_NL_MONETARY_CODESET), + [__LC_MESSAGES] = _NL_ITEM_INDEX (_NL_MESSAGES_CODESET), + [__LC_PAPER] = _NL_ITEM_INDEX (_NL_PAPER_CODESET), + [__LC_NAME] = _NL_ITEM_INDEX (_NL_NAME_CODESET), + [__LC_ADDRESS] = _NL_ITEM_INDEX (_NL_ADDRESS_CODESET), + [__LC_TELEPHONE] = _NL_ITEM_INDEX (_NL_TELEPHONE_CODESET), + [__LC_MEASUREMENT] = _NL_ITEM_INDEX (_NL_MEASUREMENT_CODESET), + [__LC_IDENTIFICATION] = _NL_ITEM_INDEX (_NL_IDENTIFICATION_CODESET) + }; + const struct locale_data *data; + const char *locale_codeset; + char *clocale_codeset; + char *ccodeset; + + data = (const struct locale_data *) locale_file->data; + locale_codeset = + (const char *) data->values[codeset_idx[category]].string; + assert (locale_codeset != NULL); + /* Note the length of the allocated memory: +3 for up to two slashes + and the NUL byte. */ + clocale_codeset = (char *) alloca (strlen (locale_codeset) + 3); + strip (clocale_codeset, locale_codeset); + + ccodeset = (char *) alloca (strlen (codeset) + 3); + strip (ccodeset, codeset); + + if (strcmp (__gconv_lookup_alias (upstr (ccodeset, ccodeset)), + __gconv_lookup_alias (upstr (clocale_codeset, + clocale_codeset))) != 0) + /* The codesets are not identical, don't use the locale. */ return NULL; } diff -durpNa glibc-2.2.2/locale/langinfo.h glibc-2.2.3/locale/langinfo.h --- glibc-2.2.2/locale/langinfo.h Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/langinfo.h Sat Apr 7 14:02:35 2001 @@ -231,6 +231,8 @@ enum #define _DATE_FMT _DATE_FMT _NL_W_DATE_FMT, + _NL_TIME_CODESET, + _NL_NUM_LC_TIME, /* Number of indices in LC_TIME category. */ /* LC_COLLATE category: text sorting. @@ -254,6 +256,7 @@ enum _NL_COLLATE_SYMB_EXTRAMB, _NL_COLLATE_COLLSEQMB, _NL_COLLATE_COLLSEQWC, + _NL_COLLATE_CODESET, _NL_NUM_LC_COLLATE, /* LC_CTYPE category: character classification. @@ -459,6 +462,7 @@ enum _NL_MONETARY_CONVERSION_RATE, _NL_MONETARY_DECIMAL_POINT_WC, _NL_MONETARY_THOUSANDS_SEP_WC, + _NL_MONETARY_CODESET, _NL_NUM_LC_MONETARY, /* LC_NUMERIC category: formatting of numbers. @@ -481,6 +485,7 @@ enum #endif _NL_NUMERIC_DECIMAL_POINT_WC, _NL_NUMERIC_THOUSANDS_SEP_WC, + _NL_NUMERIC_CODESET, _NL_NUM_LC_NUMERIC, __YESEXPR = _NL_ITEM (__LC_MESSAGES, 0), /* Regex matching ``yes'' input. */ @@ -495,10 +500,12 @@ enum #if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K) # define NOSTR __NOSTR #endif + _NL_MESSAGES_CODESET, _NL_NUM_LC_MESSAGES, _NL_PAPER_HEIGHT = _NL_ITEM (__LC_PAPER, 0), _NL_PAPER_WIDTH, + _NL_PAPER_CODESET, _NL_NUM_LC_PAPER, _NL_NAME_NAME_FMT = _NL_ITEM (__LC_NAME, 0), @@ -507,6 +514,7 @@ enum _NL_NAME_NAME_MRS, _NL_NAME_NAME_MISS, _NL_NAME_NAME_MS, + _NL_NAME_CODESET, _NL_NUM_LC_NAME, _NL_ADDRESS_POSTAL_FMT = _NL_ITEM (__LC_ADDRESS, 0), @@ -521,15 +529,18 @@ enum _NL_ADDRESS_LANG_AB, _NL_ADDRESS_LANG_TERM, _NL_ADDRESS_LANG_LIB, + _NL_ADDRESS_CODESET, _NL_NUM_LC_ADDRESS, _NL_TELEPHONE_TEL_INT_FMT = _NL_ITEM (__LC_TELEPHONE, 0), _NL_TELEPHONE_TEL_DOM_FMT, _NL_TELEPHONE_INT_SELECT, _NL_TELEPHONE_INT_PREFIX, + _NL_TELEPHONE_CODESET, _NL_NUM_LC_TELEPHONE, _NL_MEASUREMENT_MEASUREMENT = _NL_ITEM (__LC_MEASUREMENT, 0), + _NL_MEASUREMENT_CODESET, _NL_NUM_LC_MEASUREMENT, _NL_IDENTIFICATION_TITLE = _NL_ITEM (__LC_IDENTIFICATION, 0), @@ -547,6 +558,7 @@ enum _NL_IDENTIFICATION_REVISION, _NL_IDENTIFICATION_DATE, _NL_IDENTIFICATION_CATEGORY, + _NL_IDENTIFICATION_CODESET, _NL_NUM_LC_IDENTIFICATION, /* This marks the highest value used. */ diff -durpNa glibc-2.2.2/locale/localeinfo.h glibc-2.2.3/locale/localeinfo.h --- glibc-2.2.2/locale/localeinfo.h Sat Jan 13 10:48:49 2001 +++ glibc-2.2.3/locale/localeinfo.h Sat Apr 7 14:02:35 2001 @@ -155,6 +155,9 @@ extern struct locale_data * *const _nl_c extern const char _nl_C_name[]; extern const char _nl_POSIX_name[]; +/* The standard codeset. */ +extern const char _nl_C_codeset[]; + /* Extract the current CATEGORY locale's string for ITEM. */ #define _NL_CURRENT(category, item) \ (_nl_current_##category->values[_NL_ITEM_INDEX (item)].string) diff -durpNa glibc-2.2.2/locale/newlocale.c glibc-2.2.3/locale/newlocale.c --- glibc-2.2.2/locale/newlocale.c Tue Jan 23 14:07:17 2001 +++ glibc-2.2.3/locale/newlocale.c Thu Apr 12 14:02:03 2001 @@ -173,11 +173,11 @@ __newlocale (int category_mask, const ch { union locale_data_value *ctypes = result_ptr->__locales[LC_CTYPE]->values; result_ptr->__ctype_b = (const unsigned short int *) - (ctypes[_NL_ITEM_INDEX (_NL_CTYPE_CLASS)].string); + ctypes[_NL_ITEM_INDEX (_NL_CTYPE_CLASS)].string + 128; result_ptr->__ctype_tolower = (const int *) - (ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER)].string); + ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER)].string + 128; result_ptr->__ctype_toupper = (const int *) - (ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER)].string); + ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER)].string + 128; } return result_ptr; diff -durpNa glibc-2.2.2/locale/programs/charmap-dir.c glibc-2.2.3/locale/programs/charmap-dir.c --- glibc-2.2.2/locale/programs/charmap-dir.c Sun Oct 1 12:10:24 2000 +++ glibc-2.2.3/locale/programs/charmap-dir.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000,2001 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 @@ -164,7 +164,7 @@ charmap_closedir (CHARMAP_DIR *cdir) a stream reading its output (the decompressed data). */ static FILE * -fopen_uncompressed (const char *pathname, char *compressor) +fopen_uncompressed (const char *pathname, const char *compressor) { int pfd; @@ -178,7 +178,8 @@ fopen_uncompressed (const char *pathname && S_ISREG (statbuf.st_mode) && pipe (fd) >= 0) { - char *argv[4] = { compressor, "-d", "-c", NULL }; + char *argv[4] + = { (char *) compressor, (char *) "-d", (char *) "-c", NULL }; posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) == 0) diff -durpNa glibc-2.2.2/locale/programs/charmap.c glibc-2.2.3/locale/programs/charmap.c --- glibc-2.2.2/locale/programs/charmap.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/charmap.c Sat Apr 7 14:02:35 2001 @@ -56,7 +56,9 @@ static void charmap_new_char (struct lin const char *to, int decimal_ellipsis, int step); +#ifdef NEED_NULL_POINTER static const char *null_pointer; +#endif static struct linereader * cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf) diff -durpNa glibc-2.2.2/locale/programs/ld-address.c glibc-2.2.3/locale/programs/ld-address.c --- glibc-2.2.2/locale/programs/ld-address.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-address.c Sat Apr 7 14:02:35 2001 @@ -161,7 +161,7 @@ address_finish (struct localedef_t *loca if (*++cp == 'R') /* Romanize-flag. */ ++cp; - if (strchr ("afdbshNtreCzTc%", *cp) == NULL) + if (strchr ("afdbshNtreCzTSc%", *cp) == NULL) { error (0, 0, _("\ %s: invalid escape `%%%c' sequence in field `%s'"), @@ -407,6 +407,11 @@ address_output (struct localedef_t *loca idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; iov[cnt].iov_base = (void *) address->lang_lib; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + + idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; ++cnt; diff -durpNa glibc-2.2.2/locale/programs/ld-collate.c glibc-2.2.3/locale/programs/ld-collate.c --- glibc-2.2.2/locale/programs/ld-collate.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-collate.c Sat Apr 7 14:02:35 2001 @@ -2522,7 +2522,13 @@ collate_output (struct localedef_t *loca 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; + idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (idx[cnt] % __alignof__ (int32_t) == 0); + ++cnt; + + assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_CODESET)); + iov[2 + cnt].iov_base = (void *) charmap->code_set_name; + iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1; ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE)); diff -durpNa glibc-2.2.2/locale/programs/ld-identification.c glibc-2.2.3/locale/programs/ld-identification.c --- glibc-2.2.2/locale/programs/ld-identification.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-identification.c Sat Apr 7 14:02:35 2001 @@ -185,6 +185,7 @@ identification_output (struct localedef_ uint32_t idx[_NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION)]; size_t cnt = 0; size_t num; + size_t last_idx; data.magic = LIMAGIC (LC_IDENTIFICATION); data.n = _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION); @@ -267,19 +268,26 @@ identification_output (struct localedef_ ++cnt; idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + last_idx = cnt - 1; + idx[last_idx] = idx[cnt - 2]; for (num = 0; num < __LC_LAST; ++num) if (num != LC_ALL) { iov[cnt].iov_base = (void *) identification->category[num]; iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + idx[last_idx] += iov[cnt].iov_len; ++cnt; } + assert (last_idx == _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION) - 1); + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == (2 + _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION) + (__LC_LAST - 2))); - write_locale_data (output_path, "LC_IDENTIFICATION", - 2 + _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION), iov); + write_locale_data (output_path, "LC_IDENTIFICATION", cnt, iov); } diff -durpNa glibc-2.2.2/locale/programs/ld-measurement.c glibc-2.2.3/locale/programs/ld-measurement.c --- glibc-2.2.2/locale/programs/ld-measurement.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-measurement.c Sat Apr 7 14:02:35 2001 @@ -141,6 +141,11 @@ measurement_output (struct localedef_t * iov[cnt].iov_len = 1; ++cnt; + idx[cnt - 2] = iov[0].iov_len + iov[1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_MEASUREMENT)); write_locale_data (output_path, "LC_MEASUREMENT", diff -durpNa glibc-2.2.2/locale/programs/ld-messages.c glibc-2.2.3/locale/programs/ld-messages.c --- glibc-2.2.2/locale/programs/ld-messages.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-messages.c Sat Apr 7 14:02:35 2001 @@ -216,6 +216,11 @@ messages_output (struct localedef_t *loc idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; iov[cnt].iov_base = (char *) messages->nostr; iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (char *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; assert (cnt + 1 == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_MESSAGES)); diff -durpNa glibc-2.2.2/locale/programs/ld-monetary.c glibc-2.2.3/locale/programs/ld-monetary.c --- glibc-2.2.2/locale/programs/ld-monetary.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-monetary.c Sat Apr 7 14:02:35 2001 @@ -608,6 +608,11 @@ monetary_output (struct localedef_t *loc iov[cnt].iov_len = sizeof (uint32_t); ++cnt; + idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 3 + _NL_ITEM_INDEX (_NL_NUM_LC_MONETARY)); write_locale_data (output_path, "LC_MONETARY", diff -durpNa glibc-2.2.2/locale/programs/ld-name.c glibc-2.2.3/locale/programs/ld-name.c --- glibc-2.2.2/locale/programs/ld-name.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-name.c Sat Apr 7 14:02:35 2001 @@ -200,6 +200,11 @@ name_output (struct localedef_t *locale, iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; ++cnt; + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_NAME)); write_locale_data (output_path, "LC_NAME", diff -durpNa glibc-2.2.2/locale/programs/ld-numeric.c glibc-2.2.3/locale/programs/ld-numeric.c --- glibc-2.2.2/locale/programs/ld-numeric.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-numeric.c Sat Apr 7 14:02:35 2001 @@ -178,6 +178,11 @@ numeric_output (struct localedef_t *loca idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; iov[cnt].iov_base = (void *) &numeric->thousands_sep_wc; iov[cnt].iov_len = sizeof (uint32_t); + ++cnt; + + idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; assert (cnt + 1 == 3 + _NL_ITEM_INDEX (_NL_NUM_LC_NUMERIC)); diff -durpNa glibc-2.2.2/locale/programs/ld-paper.c glibc-2.2.3/locale/programs/ld-paper.c --- glibc-2.2.2/locale/programs/ld-paper.c Thu Feb 15 14:08:32 2001 +++ glibc-2.2.3/locale/programs/ld-paper.c Sat Apr 7 14:02:35 2001 @@ -143,6 +143,11 @@ paper_output (struct localedef_t *locale iov[cnt].iov_len = 4; ++cnt; + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_PAPER)); write_locale_data (output_path, "LC_PAPER", diff -durpNa glibc-2.2.2/locale/programs/ld-telephone.c glibc-2.2.3/locale/programs/ld-telephone.c --- glibc-2.2.2/locale/programs/ld-telephone.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-telephone.c Sat Apr 7 14:02:35 2001 @@ -210,6 +210,11 @@ telephone_output (struct localedef_t *lo iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; ++cnt; + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name;; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_TELEPHONE)); write_locale_data (output_path, "LC_TELEPHONE", diff -durpNa glibc-2.2.2/locale/programs/ld-time.c glibc-2.2.3/locale/programs/ld-time.c --- glibc-2.2.2/locale/programs/ld-time.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-time.c Sat Apr 7 14:02:35 2001 @@ -869,6 +869,12 @@ time_output (struct localedef_t *locale, iov[2 + cnt].iov_base = (void *) time->wdate_fmt; iov[2 + cnt].iov_len = ((wcslen (iov[2 + cnt].iov_base) + 1) * sizeof (uint32_t)); + idx[1 + last_idx] = idx[last_idx] + iov[2 + cnt].iov_len; + ++cnt; + ++last_idx; + + iov[2 + cnt].iov_base = (void *) charmap->code_set_name; + iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1; ++cnt; ++last_idx; diff -durpNa glibc-2.2.2/locale/programs/localedef.c glibc-2.2.3/locale/programs/localedef.c --- glibc-2.2.2/locale/programs/localedef.c Fri Feb 9 10:04:13 2001 +++ glibc-2.2.3/locale/programs/localedef.c Wed Apr 25 14:50:59 2001 @@ -194,7 +194,7 @@ main (int argc, char *argv[]) /* Add the first entry in the locale list. */ memset (&global, '\0', sizeof (struct localedef_t)); - global.name = input_file; + global.name = input_file ?: "/dev/stdin"; global.needed = ALL_LOCALES; locales = &global; diff -durpNa glibc-2.2.2/locale/programs/locfile.c glibc-2.2.3/locale/programs/locfile.c --- glibc-2.2.2/locale/programs/locfile.c Fri Feb 9 10:04:13 2001 +++ glibc-2.2.3/locale/programs/locfile.c Wed Apr 25 14:50:59 2001 @@ -51,7 +51,7 @@ locfile_read (struct localedef_t *result ldfile = lr_open (filename, locfile_hash); if (ldfile == NULL) { - if (filename[0] != '/') + if (filename != NULL && filename[0] != '/') { char *i18npath = getenv ("I18NPATH"); if (i18npath != NULL && *i18npath != '\0') diff -durpNa glibc-2.2.2/locale/tst-C-locale.c glibc-2.2.3/locale/tst-C-locale.c --- glibc-2.2.2/locale/tst-C-locale.c Thu Oct 26 17:11:41 2000 +++ glibc-2.2.3/locale/tst-C-locale.c Thu Apr 12 14:02:03 2001 @@ -1,5 +1,5 @@ /* Tests of C and POSIX locale contents. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 2000. The GNU C Library is free software; you can redistribute it and/or @@ -17,12 +17,14 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include #include #include #include +#include static int @@ -32,6 +34,7 @@ run_test (const char *locname) const char *str; const wchar_t *wstr; int result = 0; + __locale_t loc; /* ISO C stuff. */ lc = localeconv (); @@ -92,7 +95,7 @@ run_test (const char *locname) str = nl_langinfo (name); \ if (strcmp (str, exp) != 0) \ { \ - printf ("nl_langinfo(" #name ") int locale %s wrong " \ + printf ("nl_langinfo(" #name ") in locale %s wrong " \ "(is \"%s\", should be \"%s\")\n", locname, str, exp); \ result = 1; \ } @@ -100,7 +103,7 @@ run_test (const char *locname) wstr = (wchar_t *) nl_langinfo (name); \ if (wcscmp (wstr, exp) != 0) \ { \ - printf ("nl_langinfo(" #name ") int locale %s wrong " \ + printf ("nl_langinfo(" #name ") in locale %s wrong " \ "(is \"%S\", should be \"%S\")\n", locname, wstr, exp); \ result = 1; \ } @@ -217,6 +220,230 @@ run_test (const char *locname) STRTEST (YESSTR, ""); STRTEST (NOSTR, ""); + + /* Test the new locale mechanisms. */ + loc = __newlocale (LC_ALL, locname, NULL); + if (loc == NULL) + { + printf ("cannot create locale object for locale %s\n", locname); + result = 1; + } + else + { + int c; + +#undef STRTEST +#define STRTEST(name, exp) \ + str = __nl_langinfo_l (name, loc); \ + if (strcmp (str, exp) != 0) \ + { \ + printf ("__nl_langinfo_l(" #name ") in locale %s wrong " \ + "(is \"%s\", should be \"%s\")\n", locname, str, exp); \ + result = 1; \ + } +#undef WSTRTEST +#define WSTRTEST(name, exp) \ + wstr = (wchar_t *) __nl_langinfo_l (name, loc); \ + if (wcscmp (wstr, exp) != 0) \ + { \ + printf ("__nl_langinfo_l(" #name ") in locale %s wrong " \ + "(is \"%S\", should be \"%S\")\n", locname, wstr, exp); \ + result = 1; \ + } + + /* Unix stuff. */ + STRTEST (ABDAY_1, "Sun"); + STRTEST (ABDAY_2, "Mon"); + STRTEST (ABDAY_3, "Tue"); + STRTEST (ABDAY_4, "Wed"); + STRTEST (ABDAY_5, "Thu"); + STRTEST (ABDAY_6, "Fri"); + STRTEST (ABDAY_7, "Sat"); + STRTEST (DAY_1, "Sunday"); + STRTEST (DAY_2, "Monday"); + STRTEST (DAY_3, "Tuesday"); + STRTEST (DAY_4, "Wednesday"); + STRTEST (DAY_5, "Thursday"); + STRTEST (DAY_6, "Friday"); + STRTEST (DAY_7, "Saturday"); + STRTEST (ABMON_1, "Jan"); + STRTEST (ABMON_2, "Feb"); + STRTEST (ABMON_3, "Mar"); + STRTEST (ABMON_4, "Apr"); + STRTEST (ABMON_5, "May"); + STRTEST (ABMON_6, "Jun"); + STRTEST (ABMON_7, "Jul"); + STRTEST (ABMON_8, "Aug"); + STRTEST (ABMON_9, "Sep"); + STRTEST (ABMON_10, "Oct"); + STRTEST (ABMON_11, "Nov"); + STRTEST (ABMON_12, "Dec"); + STRTEST (MON_1, "January"); + STRTEST (MON_2, "February"); + STRTEST (MON_3, "March"); + STRTEST (MON_4, "April"); + STRTEST (MON_5, "May"); + STRTEST (MON_6, "June"); + STRTEST (MON_7, "July"); + STRTEST (MON_8, "August"); + STRTEST (MON_9, "September"); + STRTEST (MON_10, "October"); + STRTEST (MON_11, "November"); + STRTEST (MON_12, "December"); + STRTEST (AM_STR, "AM"); + STRTEST (PM_STR, "PM"); + STRTEST (D_T_FMT, "%a %b %e %H:%M:%S %Y"); + STRTEST (D_FMT, "%m/%d/%y"); + STRTEST (T_FMT, "%H:%M:%S"); + STRTEST (T_FMT_AMPM, "%I:%M:%S %p"); + + STRTEST (RADIXCHAR, "."); + STRTEST (THOUSEP, ""); + + STRTEST (YESEXPR, "^[yY]"); + STRTEST (NOEXPR, "^[nN]"); + + /* Extensions. */ + WSTRTEST (_NL_WABDAY_1, L"Sun"); + WSTRTEST (_NL_WABDAY_2, L"Mon"); + WSTRTEST (_NL_WABDAY_3, L"Tue"); + WSTRTEST (_NL_WABDAY_4, L"Wed"); + WSTRTEST (_NL_WABDAY_5, L"Thu"); + WSTRTEST (_NL_WABDAY_6, L"Fri"); + WSTRTEST (_NL_WABDAY_7, L"Sat"); + WSTRTEST (_NL_WDAY_1, L"Sunday"); + WSTRTEST (_NL_WDAY_2, L"Monday"); + WSTRTEST (_NL_WDAY_3, L"Tuesday"); + WSTRTEST (_NL_WDAY_4, L"Wednesday"); + WSTRTEST (_NL_WDAY_5, L"Thursday"); + WSTRTEST (_NL_WDAY_6, L"Friday"); + WSTRTEST (_NL_WDAY_7, L"Saturday"); + WSTRTEST (_NL_WABMON_1, L"Jan"); + WSTRTEST (_NL_WABMON_2, L"Feb"); + WSTRTEST (_NL_WABMON_3, L"Mar"); + WSTRTEST (_NL_WABMON_4, L"Apr"); + WSTRTEST (_NL_WABMON_5, L"May"); + WSTRTEST (_NL_WABMON_6, L"Jun"); + WSTRTEST (_NL_WABMON_7, L"Jul"); + WSTRTEST (_NL_WABMON_8, L"Aug"); + WSTRTEST (_NL_WABMON_9, L"Sep"); + WSTRTEST (_NL_WABMON_10, L"Oct"); + WSTRTEST (_NL_WABMON_11, L"Nov"); + WSTRTEST (_NL_WABMON_12, L"Dec"); + WSTRTEST (_NL_WMON_1, L"January"); + WSTRTEST (_NL_WMON_2, L"February"); + WSTRTEST (_NL_WMON_3, L"March"); + WSTRTEST (_NL_WMON_4, L"April"); + WSTRTEST (_NL_WMON_5, L"May"); + WSTRTEST (_NL_WMON_6, L"June"); + WSTRTEST (_NL_WMON_7, L"July"); + WSTRTEST (_NL_WMON_8, L"August"); + WSTRTEST (_NL_WMON_9, L"September"); + WSTRTEST (_NL_WMON_10, L"October"); + WSTRTEST (_NL_WMON_11, L"November"); + WSTRTEST (_NL_WMON_12, L"December"); + WSTRTEST (_NL_WAM_STR, L"AM"); + WSTRTEST (_NL_WPM_STR, L"PM"); + WSTRTEST (_NL_WD_T_FMT, L"%a %b %e %H:%M:%S %Y"); + WSTRTEST (_NL_WD_FMT, L"%m/%d/%y"); + WSTRTEST (_NL_WT_FMT, L"%H:%M:%S"); + WSTRTEST (_NL_WT_FMT_AMPM, L"%I:%M:%S %p"); + + STRTEST (_DATE_FMT, "%a %b %e %H:%M:%S %Z %Y"); + WSTRTEST (_NL_W_DATE_FMT, L"%a %b %e %H:%M:%S %Z %Y"); + + STRTEST (INT_CURR_SYMBOL, ""); + STRTEST (CURRENCY_SYMBOL, ""); + STRTEST (MON_DECIMAL_POINT, ""); + STRTEST (MON_THOUSANDS_SEP, ""); + STRTEST (MON_GROUPING, ""); + STRTEST (POSITIVE_SIGN, ""); + STRTEST (NEGATIVE_SIGN, ""); + STRTEST (GROUPING, ""); + + STRTEST (YESSTR, ""); + STRTEST (NOSTR, ""); + + /* Character class tests. */ + for (c = 0; c < 128; ++c) + { +#define CLASSTEST(name) \ + if (is##name (c) != __is##name##_l (c, loc)) \ + { \ + printf ("is%s('\\%o') != __is%s_l('\\%o')\n", \ + #name, c, #name, c); \ + result = 1; \ + } + CLASSTEST (alnum); + CLASSTEST (alpha); + CLASSTEST (blank); + CLASSTEST (cntrl); + CLASSTEST (digit); + CLASSTEST (lower); + CLASSTEST (graph); + CLASSTEST (print); + CLASSTEST (punct); + CLASSTEST (space); + CLASSTEST (upper); + CLASSTEST (xdigit); + + /* Character mapping tests. */ +#define MAPTEST(name) \ + if (to##name (c) != __to##name##_l (c, loc)) \ + { \ + printf ("to%s('\\%o') != __to%s_l('\\%o'): '\\%o' vs '\\%o'\n", \ + #name, c, #name, c, \ + to##name (c), __to##name##_l (c, loc)); \ + result = 1; \ + } + MAPTEST (lower); + MAPTEST (upper); + } + + /* Character class tests, this time for wide characters. Note that + this only works because we know that the internal encoding is + UCS4. */ + for (c = 0; c < 128; ++c) + { +#undef CLASSTEST +#define CLASSTEST(name) \ + if (isw##name (c) != __isw##name##_l (c, loc)) \ + { \ + printf ("isw%s('\\%o') != __isw%s_l('\\%o')\n", \ + #name, c, #name, c); \ + result = 1; \ + } + CLASSTEST (alnum); + CLASSTEST (alpha); + CLASSTEST (blank); + CLASSTEST (cntrl); + CLASSTEST (digit); + CLASSTEST (lower); + CLASSTEST (graph); + CLASSTEST (print); + CLASSTEST (punct); + CLASSTEST (space); + CLASSTEST (upper); + CLASSTEST (xdigit); + + /* Character mapping tests. Note that + this only works because we know that the internal encoding is + UCS4. */ +#undef MAPTEST +#define MAPTEST(name) \ + if (tow##name (c) != __tow##name##_l (c, loc)) \ + { \ + printf ("tow%s('\\%o') != __tow%s_l('\\%o'): '\\%o' vs '\\%o'\n",\ + #name, c, #name, c, \ + tow##name (c), __tow##name##_l (c, loc)); \ + result = 1; \ + } + MAPTEST (lower); + MAPTEST (upper); + } + + __freelocale (loc); + } return result; } diff -durpNa glibc-2.2.2/localedata/ChangeLog glibc-2.2.3/localedata/ChangeLog --- glibc-2.2.2/localedata/ChangeLog Thu Feb 15 14:35:29 2001 +++ glibc-2.2.3/localedata/ChangeLog Wed Apr 25 14:50:59 2001 @@ -1,3 +1,30 @@ +2001-04-18 Jakub Jelinek + + * locales/be_BY: Fix syntax in LC_COLLATE section. + * locales/ru_UA: Likewise. + * locales/tr_TR: Likewise. + * locales/uk_UA: Likewise. + +2001-03-18 Ulrich Drepper + + * locales/fa_IR: Add outdigit information and collation. + Patch by Roozbeh Pournader . + +2001-02-21 Ulrich Drepper + + * locales/i18n: Don't define outdigit. + +2001-02-19 Ulrich Drepper + + * locales/th_TH: Remove name_ms entry. + Patch by Theppitak Karoonboonyanan . + +2001-02-16 Ulrich Drepper + + * locales/th_TH: Update era information and some of the new + categories. + Patch by Theppitak Karoonboonyanan . + 2001-02-15 Ulrich Drepper * locales/i18n: Correct classification of Thai characters. This diff -durpNa glibc-2.2.2/localedata/locales/be_BY glibc-2.2.3/localedata/locales/be_BY --- glibc-2.2.2/localedata/locales/be_BY Tue Oct 31 11:10:02 2000 +++ glibc-2.2.3/localedata/locales/be_BY Wed Apr 25 14:50:59 2001 @@ -1919,14 +1919,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/locales/fa_IR glibc-2.2.3/localedata/locales/fa_IR --- glibc-2.2.2/localedata/locales/fa_IR Thu Oct 26 22:57:29 2000 +++ glibc-2.2.3/localedata/locales/fa_IR Mon Mar 26 20:53:00 2001 @@ -2,17 +2,17 @@ comment_char % escape_char / % % Persian Language Locale for Iran with UTF-8 character set -% Source: The Persian Internet Project +% Source: The FarsiWeb Project % Address: Computing Center, Sharif University of Technology % Azadi Ave, Tehran, Iran % Contact: Roozbeh Pournader -% Email: roozbeh@sina.sharif.ac.ir +% Email: roozbeh@sharif.edu % Tel: +98 21 6022378 % Fax: +98 21 6019568 % Language: fa % Territory: IR -% Revision: 2.0 -% Date: 2000-10-17 +% Revision: 2.1 +% Date: 2001-03-18 % Users: general % Repertoiremap: % Charset: UTF-8 @@ -21,37 +21,147 @@ escape_char / LC_IDENTIFICATION title "Persian locale for Iran" -source "The Persian Internet Project" +source "The FarsiWeb Project" address "Computing Center, Sharif University of Technology, Azadi Ave, Tehran, Iran" contact "Roozbeh Pournader" -email "roozbeh@sina.sharif.ac.ir" +email "roozbeh@sharif.edu" tel "+98 21 6022378" fax "+98 21 6019568" language "Persian" territory "Iran" -revision "2.0" -date "2000-10-17" +revision "2.1" +date "2001-03-18" % -category "fa_IR:2000";LC_IDENTIFICATION -category "fa_IR:2000";LC_CTYPE -category "fa_IR:2000";LC_COLLATE -category "fa_IR:2000";LC_TIME -category "fa_IR:2000";LC_NUMERIC -category "fa_IR:2000";LC_MONETARY -category "fa_IR:2000";LC_MESSAGES -category "fa_IR:2000";LC_PAPER -category "fa_IR:2000";LC_NAME -category "fa_IR:2000";LC_ADDRESS -category "fa_IR:2000";LC_TELEPHONE +category "fa_IR:2001";LC_IDENTIFICATION +category "fa_IR:2001";LC_CTYPE +category "fa_IR:2001";LC_COLLATE +category "fa_IR:2001";LC_TIME +category "fa_IR:2001";LC_NUMERIC +category "fa_IR:2001";LC_MONETARY +category "fa_IR:2001";LC_MESSAGES +category "fa_IR:2001";LC_PAPER +category "fa_IR:2001";LC_NAME +category "fa_IR:2001";LC_ADDRESS +category "fa_IR:2001";LC_TELEPHONE END LC_IDENTIFICATION LC_CTYPE copy "i18n" + +outdigit .. END LC_CTYPE LC_COLLATE copy "iso14651_t1" + +% The Persian alphabet order is: ALEF WITH MADDA ABOVE, ALEF, HAMZA (all +% kinds), BEH, PEH, TEH, JEEM, TCHEH, HAH, KHAH, DAL, THAL, REH, ZAIN, JEH, +% SEEN, SHEEN, SAD, DAD, TAH, ZAH, AIN, GHAIN, FEH, QAF, KAF, GAF, LAM, +% MEEM, NOON, WAW, HEH, YEH. +% The various kind of HAMZA are sorted as ALEF WITH HAMZA ABOVE, ALEF WITH +% HAMZA BELOW, WAW WITH HAMZA ABOVE, YEH WITH HAMZA ABOVE. +% +% TODO: add "Waw + Hamza Above -> Waw With Hamza Above" suport and things +% like that. +% +% TODO: add Arabic contextual forms support. + +collating-symbol % accent hamza over yeh +collating-symbol % dotless +collating-symbol % with dots over +collating-symbol % with wasla over +collating-symbol +collating-symbol + +reorder-after + + + + + + + + + + +reorder-after + + + + +reorder-after + + + +% Persian uses fatha, kasra, damma, fathatan, kasratan, dammatan order. + +reorder-after + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + +reorder-after + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + +% Persian digits are sorted before Arabic ones: they are the basic forms. +reorder-after + <0>;;;IGNORE + <0>;;;IGNORE + <1>;;;IGNORE + <1>;;;IGNORE + <2>;;;IGNORE + <2>;;;IGNORE + <3>;;;IGNORE + <3>;;;IGNORE + <4>;;;IGNORE + <4>;;;IGNORE + <5>;;;IGNORE + <5>;;;IGNORE + <6>;;;IGNORE + <6>;;;IGNORE + <7>;;;IGNORE + <7>;;;IGNORE + <8>;;;IGNORE + <8>;;;IGNORE + <9>;;;IGNORE + <9>;;;IGNORE + +% And then the letters: + + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE +reorder-after + ;;;IGNORE + ;;;IGNORE +reorder-after + ;;;IGNORE + ;;;IGNORE +reorder-after + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE +reorder-end + END LC_COLLATE LC_MONETARY @@ -125,9 +235,9 @@ d_fmt "" t_fmt_ampm "/ " -date_fmt "/ -/ -" +%date_fmt "/ +%/ +%" first_weekday 7 first_workday 7 cal_direction 3 @@ -175,11 +285,9 @@ postal_fmt "/ " country_name "" -%country_post "???" country_ab2 "" country_ab3 "" country_num 364 -% right? country_car "" country_isbn "" lang_name "" diff -durpNa glibc-2.2.2/localedata/locales/i18n glibc-2.2.3/localedata/locales/i18n --- glibc-2.2.2/localedata/locales/i18n Thu Feb 15 14:35:29 2001 +++ glibc-2.2.3/localedata/locales/i18n Mon Mar 26 20:53:00 2001 @@ -351,7 +351,10 @@ alpha / digit / .. -outdigit .. +% The "outdigit" information is by default "0" to "9". We don't have to +% provide it here since localedef will fill in the bits and it would +% prevent locales copy-ing this file define their own values. +% outdigit .. space / % ISO/IEC 6429/ diff -durpNa glibc-2.2.2/localedata/locales/ru_UA glibc-2.2.3/localedata/locales/ru_UA --- glibc-2.2.2/localedata/locales/ru_UA Tue Oct 31 11:10:03 2000 +++ glibc-2.2.3/localedata/locales/ru_UA Wed Apr 25 14:50:59 2001 @@ -1923,14 +1923,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/locales/th_TH glibc-2.2.3/localedata/locales/th_TH --- glibc-2.2.2/localedata/locales/th_TH Tue Oct 31 11:10:03 2000 +++ glibc-2.2.3/localedata/locales/th_TH Mon Mar 26 20:53:00 2001 @@ -888,10 +888,10 @@ mon "";/ "";/ "" -% Appropriate date & time representation "%a %e %b %o, %H:%M:%S" -d_t_fmt "%a%e%b%Y%H%M%S" -% Appropriate date representation "%d/%m/%Y" -d_fmt "%d%m%Y" +% Appropriate date & time representation "%a %e %b %Ey, %H:%M:%S" +d_t_fmt "%a%e%b%Ey%H%M%S" +% Appropriate date representation "%d/%m/%Ey" +d_fmt "%d%m%Ey" % Appropriate time representation "%H:%M:%S" t_fmt "%H%M%S" % AM/PM signs @@ -899,14 +899,16 @@ am_pm "";" % Appropriate 12-hour clock representation "%I:%M:%S %p" t_fmt_ampm "%I%M%S%p" % Era : Buddhist Era -%era "+:1:-542/01/01:+*::%N%o" -%era_d_fmt "%d%b%o" -%era_t_fmt "%H%M%S" -%era_d_t_fmt "%A%d%B%N%o%H%M%S" -% Appropriate date representation (date(1)) "%a %b %e %H:%M:%S %Z %Y" -date_fmt "/ -/ -" +era "+:1:-5430101:+*::%EC%Ey" +era_d_fmt "%e%b%Ey" +era_t_fmt "%H%M%S" +era_d_t_fmt "%A%e%B%EC%Ey%H%M%S" +% Appropriate date representation (date(1)) "%a %e %b %Ey %H:%M:%S %Z" +date_fmt "/ +/ +" +% ICT-7ICT-7 +timezone "" END LC_TIME LC_MESSAGES @@ -916,23 +918,23 @@ LC_MESSAGES % yesstr = "Chai2" = MAIMUAN + CHO CHANG + MAI EK % nostr = "Mai2Chai2" = MAIMALAI + MO MA + MAI EK + MAIMUAN + CHO CHANG + MAI EK -yesexpr "^[]" -noexpr "^[]" +yesexpr "" +noexpr "" yesstr "" nostr "" END LC_MESSAGES LC_PAPER -% FIXME height 297 -% FIXME width 210 END LC_PAPER LC_TELEPHONE tel_int_fmt "/ " +tel_dom_fmt "" +int_select "" int_prefix "" END LC_TELEPHONE @@ -944,12 +946,31 @@ END LC_MEASUREMENT LC_NAME name_fmt "/ " +name_gen "" +name_miss "" +name_mr "" +name_mrs "" END LC_NAME LC_ADDRESS +% "%f%N%a%N%d%N%r%t%e%t%b%N%h%t%s%N%T%N%S%N%z%c%N" postal_fmt "/ -/ -/ -/ -" +/ +/ +/ +" +country_name "" +%FIXME +%country_post "" +country_ab2 "" +country_ab3 "" +%country_num "" +%FIXME +%country_car "" +%FIXME +%country_isbn "" +lang_name "" +lang_ab "" +lang_term "" +lang_lib "" END LC_ADDRESS diff -durpNa glibc-2.2.2/localedata/locales/tr_TR glibc-2.2.3/localedata/locales/tr_TR --- glibc-2.2.2/localedata/locales/tr_TR Tue Oct 31 11:10:03 2000 +++ glibc-2.2.3/localedata/locales/tr_TR Wed Apr 25 14:51:00 2001 @@ -1928,14 +1928,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/locales/uk_UA glibc-2.2.3/localedata/locales/uk_UA --- glibc-2.2.2/localedata/locales/uk_UA Tue Oct 31 11:10:05 2000 +++ glibc-2.2.3/localedata/locales/uk_UA Wed Apr 25 14:51:00 2001 @@ -1923,14 +1923,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/show-ucs-data.c glibc-2.2.3/localedata/show-ucs-data.c --- glibc-2.2.2/localedata/show-ucs-data.c Sun Jun 25 17:28:25 2000 +++ glibc-2.2.3/localedata/show-ucs-data.c Mon Mar 26 20:53:00 2001 @@ -32,7 +32,7 @@ main (int argc, char *argv[]) { unsigned int val = strtoul (runp + 2, NULL, 16); - putchar ('<'); + //putchar ('<'); if (val < 128) putchar (val); else if (val < 0x800) @@ -46,7 +46,7 @@ main (int argc, char *argv[]) putchar (0x80 | ((val >> 6) & 0x3f)); putchar (0x80 | (val & 0x3f)); } - putchar ('>'); + //putchar ('>'); runp += 7; } else diff -durpNa glibc-2.2.2/localedata/tests-mbwc/tst_funcs.h glibc-2.2.3/localedata/tests-mbwc/tst_funcs.h --- glibc-2.2.2/localedata/tests-mbwc/tst_funcs.h Thu Aug 31 14:45:13 2000 +++ glibc-2.2.3/localedata/tests-mbwc/tst_funcs.h Sat Apr 7 14:02:35 2001 @@ -103,6 +103,7 @@ extern int result (FILE * fp, char res, fprintf (stderr, "Warning : can't set locale: %s\nskipping ...\n", \ locale); \ result (fp, C_LOCALES, s_func, locale, 0, 0, 0, "can't set locale"); \ + ++err_count; \ continue; \ } diff -durpNa glibc-2.2.2/login/Makefile glibc-2.2.3/login/Makefile --- glibc-2.2.2/login/Makefile Wed Jun 21 11:11:02 2000 +++ glibc-2.2.3/login/Makefile Mon Mar 26 20:53:01 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 2000, 2001 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 @@ -60,4 +60,4 @@ $(inst_libexecdir)/pt_chown: $(objpfx)pt # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libutil.so: $(common-objpfx)libc.so +$(objpfx)libutil.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/login/tst-utmp.c glibc-2.2.3/login/tst-utmp.c --- glibc-2.2.2/login/tst-utmp.c Tue Jun 2 12:50:30 1998 +++ glibc-2.2.3/login/tst-utmp.c Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* Tests for UTMP functions. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2001 Free Software Foundation, Inc. Contributed by Mark Kettenis , 1998. The GNU C Library is free software; you can redistribute it and/or @@ -71,20 +71,24 @@ do_prepare (int argc, char *argv[]) error (EXIT_FAILURE, errno, "cannot open test file `%s'", name); } - struct utmp entry[] = { - { ut_type: BOOT_TIME, ut_pid: 1, ut_tv: { tv_sec: 1000 } }, - { ut_type: RUN_LVL, ut_pid: 1, ut_tv: { tv_sec: 2000 } }, - { ut_type: INIT_PROCESS, ut_pid: 5, ut_id: "si", ut_tv: { tv_sec: 3000 } }, +#if _HAVE_UT_TV || defined UTMPX +#define UT(a) ut_tv:{tv_sec:(a)} +#else +#define UT(a) ut_time:(a) +#endif + + { ut_type: BOOT_TIME, ut_pid: 1, UT(1000) }, + { ut_type: RUN_LVL, ut_pid: 1, UT(2000) }, + { ut_type: INIT_PROCESS, ut_pid: 5, ut_id: "si", UT(3000) }, { ut_type: LOGIN_PROCESS, ut_pid: 23, ut_line: "tty1", ut_id: "1", - ut_user: "LOGIN", ut_session: 23, ut_tv: { tv_sec: 4000 } }, + ut_user: "LOGIN", UT(4000) }, { ut_type: USER_PROCESS, ut_pid: 24, ut_line: "tty2", ut_id: "2", - ut_user: "albert", ut_session: 24, ut_tv: { tv_sec: 8000 } }, + ut_user: "albert", UT(8000) }, { ut_type: USER_PROCESS, ut_pid: 196, ut_line: "ttyp0", ut_id: "p0", - ut_user: "niels", ut_session: 196, ut_tv: { tv_sec: 10000 } }, - { ut_type: DEAD_PROCESS, ut_line: "ttyp1", ut_id: "p1", - ut_tv: { tv_sec: 16000 } }, + ut_user: "niels", UT(10000) }, + { ut_type: DEAD_PROCESS, ut_line: "ttyp1", ut_id: "p1", UT(16000) }, { ut_type: EMPTY }, { ut_type: EMPTY } }; @@ -161,8 +165,11 @@ simulate_login (const char *line, const entry[n].ut_pid = (entry_pid += 27); entry[n].ut_type = USER_PROCESS; strcpy (entry[n].ut_user, user); +#if _HAVE_UT_TV - 0 || defined UTMPX entry[n].ut_tv.tv_sec = (entry_time += 1000); - +#else + entry[n].ut_time = (entry_time += 1000); +#endif setutent (); if (pututline (&entry[n]) == NULL) @@ -192,8 +199,11 @@ simulate_logout (const char *line) { entry[n].ut_type = DEAD_PROCESS; entry[n].ut_user[0] = '\0'; - entry[n].ut_tv.tv_sec = (entry_time += 1000); - +#if _HAVE_UT_TV - 0 || defined UTMPX + entry[n].ut_tv.tv_sec = (entry_time += 1000); +#else + entry[n].ut_time = (entry_time += 1000); +#endif setutent (); if (pututline (&entry[n]) == NULL) diff -durpNa glibc-2.2.2/mach/Machrules glibc-2.2.3/mach/Machrules --- glibc-2.2.2/mach/Machrules Mon Mar 29 16:15:55 1999 +++ glibc-2.2.3/mach/Machrules Sat Apr 7 14:02:35 2001 @@ -1,6 +1,6 @@ # Rules for MiG interfaces that want to go into the C library. -# Copyright (C) 1991,92,93,94,95,96,98,99 Free Software Foundation, Inc. +# Copyright (C) 1991,92,93,94,95,96,98,99,2001 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 @@ -55,6 +55,9 @@ $(objpfx)dummy.mk: MIGFLAGS = -DMACH_IPC_COMPAT=0 -DSTANDALONE -DTypeCheck=0 \ $(+includes) $(migdefines) -subrprefix __ +# Putting CC in the enivronment makes the mig wrapper script +# use the same compiler setup we are using to run cpp. +MIG := CC='${CC}' $(MIG) .SUFFIXES: .defs # Just to set specified_rule_matched. diff -durpNa glibc-2.2.2/mach/errsystems.awk glibc-2.2.3/mach/errsystems.awk --- glibc-2.2.2/mach/errsystems.awk Fri Dec 17 13:10:15 1993 +++ glibc-2.2.3/mach/errsystems.awk Sat Apr 7 14:02:35 2001 @@ -16,6 +16,6 @@ const struct error_system __mach_error_s } END { print " };"; - printf "\n\ + print "\n\ const int __mach_error_system_count = errlib_count (__mach_error_systems);"; } diff -durpNa glibc-2.2.2/mach/mach/mig_support.h glibc-2.2.3/mach/mach/mig_support.h --- glibc-2.2.2/mach/mach/mig_support.h Fri Oct 8 10:41:21 1999 +++ glibc-2.2.3/mach/mach/mig_support.h Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,97,99,2001 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 @@ -65,6 +65,8 @@ extern void mig_reply_setup (const mach_ mach_msg_header_t *__reply); /* Idiocy support function. */ +extern vm_size_t mig_strncpy (char *__dst, const char *__src, vm_size_t __len); +extern vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t); extern __inline vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t __len) { diff -durpNa glibc-2.2.2/mach/mach_error.h glibc-2.2.3/mach/mach_error.h --- glibc-2.2.2/mach/mach_error.h Sun Mar 16 09:42:25 1997 +++ glibc-2.2.3/mach/mach_error.h Sat Apr 7 14:02:35 2001 @@ -1,31 +1,37 @@ -/* +/* * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ /* * HISTORY * $Log: mach_error.h,v $ + * Revision 1.4 2001/04/01 05:03:14 roland + * 2001-03-11 Roland McGrath + * + * * mach/mach_error.h: Fix ancient #endif syntax. + * * hurd/hurdmalloc.c: Likewise. + * * Revision 1.3 1997/03/16 17:42:25 drepper * (mach_error_string, mach_error, mach_error_type): Always provide * prototypes. @@ -53,10 +59,10 @@ * * Revision 2.2 92/01/16 00:08:10 rpd * Moved from user collection to mk collection. - * + * * Revision 2.2 91/03/27 15:39:13 mrt * First checkin - * + * */ /* * File: mach_error.h @@ -93,4 +99,4 @@ const char *mach_error_type( mach_error_t error_value ); -#endif _MACH_ERROR_ +#endif /* _MACH_ERROR_ */ diff -durpNa glibc-2.2.2/mach/mach_init.c glibc-2.2.3/mach/mach_init.c --- glibc-2.2.2/mach/mach_init.c Sun Mar 16 09:42:35 1997 +++ glibc-2.2.3/mach/mach_init.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1993, 1995, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1992,93,95,97,2001 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 @@ -19,6 +19,7 @@ #include #include #include +#include mach_port_t __mach_task_self_; vm_size_t __vm_page_size = 0; /* Must be data not bss for weak alias. */ diff -durpNa glibc-2.2.2/mach/msgserver.c glibc-2.2.3/mach/msgserver.c --- glibc-2.2.2/mach/msgserver.c Thu Dec 19 17:32:35 1996 +++ glibc-2.2.3/mach/msgserver.c Mon Apr 9 20:03:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1994, 1995, 1996, 2001 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 @@ -49,6 +49,11 @@ /* * HISTORY * $Log: msgserver.c,v $ + * Revision 1.6 2001/04/09 21:23:38 roland + * 2001-04-07 Roland McGrath + * + * * mach/msgserver.c (__mach_msg_server_timeout): Add an assert. + * * Revision 1.5 1996/12/20 01:32:35 drepper * Update from main archive 961219 * @@ -83,6 +88,7 @@ #include #include #include /* For malloc and free. */ +#include mach_msg_return_t __mach_msg_server_timeout (boolean_t (*demux) (mach_msg_header_t *request, @@ -116,6 +122,7 @@ __mach_msg_server_timeout (boolean_t (*d Pass it to DEMUX for processing. */ (void) (*demux) (&request->Head, &reply->Head); + assert (reply->Head.msgh_size <= max_size); switch (reply->RetCode) { diff -durpNa glibc-2.2.2/malloc/Makefile glibc-2.2.3/malloc/Makefile --- glibc-2.2.2/malloc/Makefile Fri Feb 9 10:04:14 2001 +++ glibc-2.2.3/malloc/Makefile Sun Apr 8 22:19:10 2001 @@ -55,7 +55,7 @@ aux := set-freeres include ../Makeconfig -# The AWK script to analyze the output of the mtrace functions. +# The Perl script to analyze the output of the mtrace functions. ifneq ($(PERL),no) install-bin = mtrace generated = mtrace @@ -100,9 +100,11 @@ lib: $(objpfx)libmcheck.a ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) +ifneq ($(PERL),no) tests: $(objpfx)tst-mtrace.out $(objpfx)tst-mtrace.out: tst-mtrace.sh $(objpfx)tst-mtrace $(SHELL) -e $< $(common-objpfx) +endif endif endif diff -durpNa glibc-2.2.2/malloc/malloc.c glibc-2.2.3/malloc/malloc.c --- glibc-2.2.2/malloc/malloc.c Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/malloc/malloc.c Thu Apr 26 20:07:06 2001 @@ -19,7 +19,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: malloc.c,v 1.79 2001/02/15 03:38:09 drepper Exp $ +/* $Id: malloc.c,v 1.80 2001/04/26 00:04:36 drepper Exp $ This work is mainly derived from malloc-2.6.4 by Doug Lea , which is available from: @@ -1292,7 +1292,10 @@ static void free_atfork(); /* sizes, alignments */ #define SIZE_SZ (sizeof(INTERNAL_SIZE_T)) -#define MALLOC_ALIGNMENT (SIZE_SZ + SIZE_SZ) +/* Allow the default to be overwritten on the compiler command line. */ +#ifndef MALLOC_ALIGNMENT +# define MALLOC_ALIGNMENT (SIZE_SZ + SIZE_SZ) +#endif #define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1) #define MINSIZE (sizeof(struct malloc_chunk)) diff -durpNa glibc-2.2.2/malloc/mcheck.c glibc-2.2.3/malloc/mcheck.c --- glibc-2.2.2/malloc/mcheck.c Tue Mar 28 11:05:32 2000 +++ glibc-2.2.3/malloc/mcheck.c Thu Apr 26 20:07:06 2001 @@ -1,5 +1,5 @@ /* Standard debugging hooks for `malloc'. - Copyright (C) 1990-1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1990-1997, 1999, 2000, 2001 Free Software Foundation, Inc. Written May 1989 by Mike Haertel. This library is free software; you can redistribute it and/or @@ -270,7 +270,8 @@ reallochook (ptr, size, caller) return (__ptr_t) (hdr + 1); } -static void mabort __P ((enum mcheck_status status)); +static void mabort __P ((enum mcheck_status status)) + __attribute__ ((noreturn)); static void mabort (status) enum mcheck_status status; @@ -314,6 +315,10 @@ mcheck (func) /* These hooks may not be safely inserted if malloc is already in use. */ if (__malloc_initialized <= 0 && !mcheck_used) { + /* We call malloc() once here to ensure it is initialized. */ + void *p = malloc (0); + free (p); + old_free_hook = __free_hook; __free_hook = freehook; old_malloc_hook = __malloc_hook; diff -durpNa glibc-2.2.2/malloc/memusage.sh glibc-2.2.3/malloc/memusage.sh --- glibc-2.2.2/malloc/memusage.sh Sat Jan 6 20:35:23 2001 +++ glibc-2.2.3/malloc/memusage.sh Sat Apr 7 14:02:35 2001 @@ -18,7 +18,7 @@ # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -memusageso=@LIBDIR@/libmemusage.so +memusageso=@SLIBDIR@/libmemusage.so memusagestat=@BINDIR@/memusagestat # Print usage message. diff -durpNa glibc-2.2.2/malloc/mtrace.c glibc-2.2.3/malloc/mtrace.c --- glibc-2.2.2/malloc/mtrace.c Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/malloc/mtrace.c Mon Mar 26 20:53:01 2001 @@ -42,6 +42,7 @@ #ifdef USE_IN_LIBIO # include +# define fopen(f, n) _IO_fopen64 (f, n) # define setvbuf(s, b, f, l) _IO_setvbuf (s, b, f, l) #endif @@ -268,7 +269,7 @@ mtrace () #endif if (mallfile != NULL || mallwatch != NULL) { - mallstream = fopen64 (mallfile != NULL ? mallfile : "/dev/null", "w"); + mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "w"); if (mallstream != NULL) { /* Make sure we close the file descriptor on exec. */ @@ -290,8 +291,10 @@ mtrace () #ifdef _LIBC if (!added_atexit_handler) { + extern void *__dso_handle __attribute__ ((__weak__)); added_atexit_handler = 1; - atexit (release_libc_mem); + __cxa_atexit ((void (*) (void *)) release_libc_mem, NULL, + &__dso_handle ? __dso_handle : NULL); } #endif } diff -durpNa glibc-2.2.2/malloc/obstack.c glibc-2.2.3/malloc/obstack.c --- glibc-2.2.2/malloc/obstack.c Thu Nov 16 11:12:03 2000 +++ glibc-2.2.3/malloc/obstack.c Wed Apr 25 14:51:00 2001 @@ -1,5 +1,5 @@ /* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988-1994,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1988-1994,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. @@ -472,6 +472,7 @@ _obstack_memory_used (h) #endif static void +__attribute__ ((noreturn)) print_and_abort () { fputs (_("memory exhausted"), stderr); diff -durpNa glibc-2.2.2/manual/Makefile glibc-2.2.3/manual/Makefile --- glibc-2.2.2/manual/Makefile Tue Jan 23 14:07:18 2001 +++ glibc-2.2.3/manual/Makefile Mon Mar 26 20:53:01 2001 @@ -178,14 +178,14 @@ ifneq ($(strip $(MAKEINFO)),:) ifneq ($(OLD_DEBIAN_INSTALL_INFO),yes) install: $(inst_infodir)/libc.info dir-add.info @if $(SHELL) -c '$(INSTALL_INFO) --version' >/dev/null 2>&1; then \ - test -f $(inst_infodir)/dir || cp dir $(inst_infodir);\ + test -f $(inst_infodir)/dir || $(INSTALL_DATA) dir $(inst_infodir);\ $(INSTALL_INFO) --info-dir=$(inst_infodir) $(inst_infodir)/libc.info;\ $(INSTALL_INFO) --info-dir=$(inst_infodir) dir-add.info;\ else : ; fi else install: $(inst_infodir)/libc.info dir-add.info @if $(SHELL) -c '$(INSTALL_INFO) --version' >/dev/null 2>&1; then \ - test -f $(inst_infodir)/dir || cp dir $(inst_infodir);\ + test -f $(inst_infodir)/dir || $(INSTALL_DATA) dir $(inst_infodir);\ $(INSTALL_INFO) --info-dir=$(inst_infodir) \ --section '^GNU Libraries:' 'GNU Libraries:' \ $(inst_infodir)/libc.info;\ diff -durpNa glibc-2.2.2/manual/arith.texi glibc-2.2.3/manual/arith.texi --- glibc-2.2.2/manual/arith.texi Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/manual/arith.texi Mon Mar 26 20:53:02 2001 @@ -69,14 +69,14 @@ If you don't need a specific storage siz structure with @emph{at least} N bits, use one of these: @itemize @bullet -@item int8_least_t -@item int16_least_t -@item int32_least_t -@item int64_least_t -@item uint8_least_t -@item uint16_least_t -@item uint32_least_t -@item uint64_least_t +@item int_least8_t +@item int_least16_t +@item int_least32_t +@item int_least64_t +@item uint_least8_t +@item uint_least16_t +@item uint_least32_t +@item uint_least64_t @end itemize If you don't need a specific storage size, but want the data structure @@ -85,14 +85,14 @@ among data structures with the same acce one of these: @itemize @bullet -@item int8_fast_t -@item int16_fast_t -@item int32_fast_t -@item int64_fast_t -@item uint8_fast_t -@item uint16_fast_t -@item uint32_fast_t -@item uint64_fast_t +@item int_fast8_t +@item int_fast16_t +@item int_fast32_t +@item int_fast64_t +@item uint_fast8_t +@item uint_fast16_t +@item uint_fast32_t +@item uint_fast64_t @end itemize If you want an integer with the widest range possible on the platform on diff -durpNa glibc-2.2.2/manual/charset.texi glibc-2.2.3/manual/charset.texi --- glibc-2.2.2/manual/charset.texi Sat Jan 6 20:35:23 2001 +++ glibc-2.2.3/manual/charset.texi Wed Apr 25 14:51:01 2001 @@ -1821,12 +1821,12 @@ file2wcs (int fd, const char *charset, w int result = 0; iconv_t cd; - cd = iconv_open ("UCS-4", charset); + cd = iconv_open ("WCHAR_T", charset); if (cd == (iconv_t) -1) @{ /* @r{Something went wrong.} */ if (errno == EINVAL) - error (0, 0, "conversion from '%s' to 'UCS-4' not available", + error (0, 0, "conversion from '%s' to wchar_t not available", charset); else perror ("iconv_open"); diff -durpNa glibc-2.2.2/manual/dir-add.info glibc-2.2.3/manual/dir-add.info --- glibc-2.2.2/manual/dir-add.info Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/dir-add.info Wed Apr 25 14:55:23 2001 @@ -237,6 +237,7 @@ START-INFO-DIR-ENTRY * L_cuserid: (libc)Who Logged In. * L_tmpnam: (libc)Temporary Files. * MAXNAMLEN: (libc)Limits for Files. +* MAXSYMLINKS: (libc)Symbolic Links. * MAX_CANON: (libc)Limits for Files. * MAX_INPUT: (libc)Limits for Files. * MB_CUR_MAX: (libc)Selecting the Conversion. @@ -533,6 +534,7 @@ START-INFO-DIR-ENTRY * cacoshl: (libc)Hyperbolic Functions. * cacosl: (libc)Inverse Trig Functions. * calloc: (libc)Allocating Cleared Space. +* canonicalize_file_name: (libc)Symbolic Links. * carg: (libc)Operations on Complex. * cargf: (libc)Operations on Complex. * cargl: (libc)Operations on Complex. @@ -830,13 +832,16 @@ START-INFO-DIR-ENTRY * gammaf: (libc)Special Functions. * gammal: (libc)Special Functions. * gcvt: (libc)System V Number Conversion. +* get_avphys_pages: (libc)Query Memory Parameters. * get_current_dir_name: (libc)Working Directory. * get_nprocs: (libc)Processor Resources. * get_nprocs_conf: (libc)Processor Resources. +* get_phys_pages: (libc)Query Memory Parameters. * getc: (libc)Character Input. * getc_unlocked: (libc)Character Input. * getchar: (libc)Character Input. * getchar_unlocked: (libc)Character Input. +* getcontext: (libc)System V contexts. * getcwd: (libc)Working Directory. * getdate: (libc)General Time String Parsing. * getdate_r: (libc)General Time String Parsing. @@ -978,10 +983,8 @@ START-INFO-DIR-ENTRY * infnan: (libc)Floating Point Classes. * initgroups: (libc)Setting Groups. * initstate: (libc)BSD Random. +* initstate_r: (libc)BSD Random. * innetgr: (libc)Netgroup Membership. -* int: (libc)Query Memory Parameters. -* int: (libc)Query Memory Parameters. -* int: (libc)System Calls. * ioctl: (libc)IOCTLs. * isalnum: (libc)Classification of Characters. * isalpha: (libc)Classification of Characters. @@ -1104,6 +1107,7 @@ START-INFO-DIR-ENTRY * lseek: (libc)File Position Primitive. * lstat64: (libc)Reading Attributes. * lstat: (libc)Reading Attributes. +* makecontext: (libc)System V contexts. * mallinfo: (libc)Statistics of Malloc. * malloc: (libc)Basic Allocation. * mallopt: (libc)Malloc Tunable Parameters. @@ -1284,7 +1288,6 @@ START-INFO-DIR-ENTRY * putc: (libc)Simple Output. * putc_unlocked: (libc)Simple Output. * putchar: (libc)Simple Output. -* putchar: (libc)Simple Output. * putchar_unlocked: (libc)Simple Output. * putenv: (libc)Environment Access. * putpwent: (libc)Writing a User Entry. @@ -1294,6 +1297,7 @@ START-INFO-DIR-ENTRY * putw: (libc)Simple Output. * putwc: (libc)Simple Output. * putwc_unlocked: (libc)Simple Output. +* putwchar: (libc)Simple Output. * putwchar_unlocked: (libc)Simple Output. * pwrite64: (libc)I/O Primitives. * pwrite: (libc)I/O Primitives. @@ -1307,6 +1311,7 @@ START-INFO-DIR-ENTRY * rand: (libc)ISO Random. * rand_r: (libc)ISO Random. * random: (libc)BSD Random. +* random_r: (libc)BSD Random. * rawmemchr: (libc)Search Functions. * read: (libc)I/O Primitives. * readdir64: (libc)Reading/Closing Directory. @@ -1316,6 +1321,7 @@ START-INFO-DIR-ENTRY * readlink: (libc)Symbolic Links. * readv: (libc)Scatter-Gather. * realloc: (libc)Changing Block Size. +* realpath: (libc)Symbolic Links. * recv: (libc)Receiving Data. * recvfrom: (libc)Receiving Datagrams. * recvmsg: (libc)Receiving Datagrams. @@ -1375,6 +1381,7 @@ START-INFO-DIR-ENTRY * sendto: (libc)Sending Datagrams. * setbuf: (libc)Controlling Buffering. * setbuffer: (libc)Controlling Buffering. +* setcontext: (libc)System V contexts. * setdomainname: (libc)Host Identification. * setegid: (libc)Setting Groups. * setenv: (libc)Environment Access. @@ -1409,6 +1416,7 @@ START-INFO-DIR-ENTRY * setsid: (libc)Process Group Functions. * setsockopt: (libc)Socket Option Functions. * setstate: (libc)BSD Random. +* setstate_r: (libc)BSD Random. * settimeofday: (libc)High-Resolution Calendar. * setuid: (libc)Setting User ID. * setutent: (libc)Manipulating the Database. @@ -1461,6 +1469,7 @@ START-INFO-DIR-ENTRY * srand48_r: (libc)SVID Random. * srand: (libc)ISO Random. * srandom: (libc)BSD Random. +* srandom_r: (libc)BSD Random. * sscanf: (libc)Formatted Input Functions. * ssignal: (libc)Basic Signal Handling. * stat64: (libc)Reading Attributes. @@ -1515,10 +1524,12 @@ START-INFO-DIR-ENTRY * strverscmp: (libc)String/Array Comparison. * strxfrm: (libc)Collation Functions. * stty: (libc)BSD Terminal Modes. +* swapcontext: (libc)System V contexts. * swprintf: (libc)Formatted Output Functions. * swscanf: (libc)Formatted Input Functions. * symlink: (libc)Symbolic Links. * sync: (libc)Synchronizing I/O. +* syscall: (libc)System Calls. * sysconf: (libc)Sysconf Definition. * sysctl: (libc)System Parameters. * syslog: (libc)syslog; vsyslog. diff -durpNa glibc-2.2.2/manual/examples/swapcontext.c glibc-2.2.3/manual/examples/swapcontext.c --- glibc-2.2.2/manual/examples/swapcontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/manual/examples/swapcontext.c Sun Apr 8 15:47:59 2001 @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include + +/* Set by the signal handler. */ +static volatile int expired; + +/* The contexts. */ +static ucontext_t uc[3]; + +/* We do only a certain number of switches. */ +static int switches; + + +/* This is the function doing the work. It is just a + skeleton, real code has to be filled in. */ +static void +f (int n) +{ + int m = 0; + while (1) + { + /* This is where the work would be done. */ + if (++m % 100 == 0) + { + putchar ('.'); + fflush (stdout); + } + + /* Regularly the @var{expire} variable must be checked. */ + if (expired) + { + /* We do not want the program to run forever. */ + if (++switches == 20) + return; + + printf ("\nswitching from %d to %d\n", n, 3 - n); + expired = 0; + /* Switch to the other context, saving the current one. */ + swapcontext (&uc[n], &uc[3 - n]); + } + } +} + +/* This is the signal handler which simply set the variable. */ +void +handler (int signal) +{ + expired = 1; +} + + +int +main (void) +{ + struct sigaction sa; + struct itimerval it; + char st1[8192]; + char st2[8192]; + + /* Initialize the data structures for the interval timer. */ + sa.sa_flags = SA_RESTART; + sigfillset (&sa.sa_mask); + sa.sa_handler = handler; + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 1; + it.it_value = it.it_interval; + + /* Install the timer and get the context we can manipulate. */ + if (sigaction (SIGPROF, &sa, NULL) < 0 + || setitimer (ITIMER_PROF, &it, NULL) < 0 + || getcontext (&uc[1]) == -1 + || getcontext (&uc[2]) == -1) + abort (); + + /* Create a context with a separate stack which causes the + function @code{f} to be call with the parameter @code{1}. + Note that the @code{uc_link} points to the main context + which will cause the program to terminate once the function + return. */ + uc[1].uc_link = &uc[0]; + uc[1].uc_stack.ss_sp = st1; + uc[1].uc_stack.ss_size = sizeof st1; + makecontext (&uc[1], (void (*) (void)) f, 1, 1); + + /* Similarly, but @code{2} is passed as the parameter to @code{f}. */ + uc[2].uc_link = &uc[0]; + uc[2].uc_stack.ss_sp = st2; + uc[2].uc_stack.ss_size = sizeof st2; + makecontext (&uc[2], (void (*) (void)) f, 1, 2); + + /* Start running. */ + swapcontext (&uc[0], &uc[1]); + putchar ('\n'); + + return 0; +} diff -durpNa glibc-2.2.2/manual/filesys.texi glibc-2.2.3/manual/filesys.texi --- glibc-2.2.2/manual/filesys.texi Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/manual/filesys.texi Sun Apr 8 22:19:11 2001 @@ -1065,7 +1065,23 @@ purpose is to obtain information about t function that makes a hard link, does too. It makes a hard link to the symbolic link, which one rarely wants. -Prototypes for the functions listed in this section are in +Some systems have for some functions operating on files have a limit on +how many symbolic links are followed when resolving a path name. The +limit if it exists is published in the @file{sys/param.h} header file. + +@comment sys/param.h +@comment BSD +@deftypevr Macro int MAXSYMLINKS + +The macro @code{MAXSYMLINKS} specifies how many symlinks some function +will follow before returning @code{ELOOP}. Not all functions behave the +same and this value is not the same a that returned for +@code{_SC_SYMLOOP} by @code{sysconf}. In fact, the @code{sysconf} +result can indicate that there is no fixed limit although +@code{MAXSYMLINKS} exists and has a finite value. +@end deftypevr + +Prototypes for most of the functions listed in this section are in @file{unistd.h}. @pindex unistd.h @@ -1153,6 +1169,73 @@ A hardware error occurred while reading @c @end group @end deftypefun +In some situations it is desirable to resolve all the to get the real +name of a file where no prefix names a symbolic link which is followed +and no filename in the path is @code{.} or @code{..}. This is for +instance desirable if files have to be compare in which case different +names can refer to the same inode. + +@comment stdlib.h +@comment GNU +@deftypefun {char *} canonicalize_file_name (const char *@var{name}) + +The @code{canonicalize_file_name} function returns the absolute name of +the file named by @var{name} which contains no @code{.}, @code{..} +components nor any repeated path separators (@code{/}) or symlinks. The +result is passed back as the return value of the function in a block of +memory allocated with @code{malloc}. If the result is not used anymore +the memory should be freed with a call to @code{free}. + +In any of the path components except the last one is missing the +function returns a NULL pointer. This is also what is returned if the +length of the path reaches or exceeds @code{PATH_MAX} characters. In +any case @code{errno} is set accordingly. + +@table @code +@item ENAMETOOLONG +The resulting path is too long. This error only occurs on systems which +have a limit on the file name length. + +@item EACCES +At least one of the path components is not readable. + +@item ENOENT +The input file name is empty. + +@item ENOENT +At least one of the path components does not exist. + +@item ELOOP +More than @code{MAXSYMLINKS} many symlinks have been followed. +@end table + +This function is a GNU extension and is declared in @file{stdlib.h}. +@end deftypefun + +The Unix standard includes a similar function which differs from +@code{canonicalize_file_name} in that the user has to provide the buffer +where the result is placed in. + +@comment stdlib.h +@comment XPG +@deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved}) + +The @code{realpath} function behaves just like +@code{canonicalize_file_name} but instead of allocating a buffer for the +result it is placed in the buffer pointed to by @var{resolved}. + +One other difference is that the buffer @var{resolved} will contain the +part of the path component which does not exist or is not readable if +the function returns @code{NULL} and @code{errno} is set to +@code{EACCES} or @code{ENOENT}. + +This function is declared in @file{stdlib.h}. +@end deftypefun + +The advantage of using this function is that it is more widely +available. The drawback is that it reports failures for long path on +systems which have no limits on the file name length. + @node Deleting Files @section Deleting Files @cindex deleting a file @@ -1935,7 +2018,7 @@ the whole @code{struct stat} structure. @comment sys/stat.h @comment POSIX -@deftypefn Macro int S_TYPEISMQ (struct stat @var{s}) +@deftypefn Macro int S_TYPEISMQ (struct stat *@var{s}) If the system implement POSIX message queues as distinct objects and the file is a message queue object, this macro returns a non-zero value. In all other cases the result is zero. @@ -1943,7 +2026,7 @@ In all other cases the result is zero. @comment sys/stat.h @comment POSIX -@deftypefn Macro int S_TYPEISSEM (struct stat @var{s}) +@deftypefn Macro int S_TYPEISSEM (struct stat *@var{s}) If the system implement POSIX semaphores as distinct objects and the file is a semaphore object, this macro returns a non-zero value. In all other cases the result is zero. @@ -1951,7 +2034,7 @@ In all other cases the result is zero. @comment sys/stat.h @comment POSIX -@deftypefn Macro int S_TYPEISSHM (struct stat @var{s}) +@deftypefn Macro int S_TYPEISSHM (struct stat *@var{s}) If the system implement POSIX shared memory objects as distinct objects and the file is an shared memory object, this macro returns a non-zero value. In all other cases the result is zero. diff -durpNa glibc-2.2.2/manual/install.texi glibc-2.2.3/manual/install.texi --- glibc-2.2.2/manual/install.texi Fri Feb 9 10:04:14 2001 +++ glibc-2.2.3/manual/install.texi Wed Apr 25 14:51:01 2001 @@ -336,7 +336,7 @@ GCC 2.95 or newer The GNU C library can only be compiled with the GNU C compiler family. As of the 2.2 release, GCC 2.95.2 or higher is required. As of this -writing, GCC 2.95.2 is the compiler we advise to use. +writing, GCC 2.95.3 is the compiler we advise to use. You can use whatever compiler you like to compile programs that use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in their @@ -406,8 +406,7 @@ and if you change any of the message tra @itemize @bullet @item -GNU @code{gettext} 0.10.35 or later (version 0.10.35 is a alpha release -and available via ftp from alpha.gnu.org/gnu) +GNU @code{gettext} 0.10.36 or later @end itemize @noindent @@ -424,6 +423,7 @@ following patterns: @smallexample alpha@var{*}-@var{*}-linux arm-@var{*}-linux +cris-@var{*}-linux hppa-@var{*}-linux i@var{x}86-@var{*}-gnu i@var{x}86-@var{*}-linux @@ -432,6 +432,7 @@ m68k-@var{*}-linux mips@var{*}-@var{*}-linux powerpc-@var{*}-linux s390-@var{*}-linux +s390x-@var{*}-linux sparc-@var{*}-linux sparc64-@var{*}-linux @end smallexample diff -durpNa glibc-2.2.2/manual/libc.cp glibc-2.2.3/manual/libc.cp --- glibc-2.2.2/manual/libc.cp Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.cp Wed Apr 25 16:06:31 2001 @@ -229,12 +229,13 @@ \entry{array sort function}{204}{array sort function} \entry{stable sorting}{204}{stable sorting} \entry{Kermit the frog}{207}{Kermit the frog} +\entry{Korn Shell}{214}{Korn Shell} \entry{globbing}{214}{globbing} -\entry{word expansion}{226}{word expansion} -\entry{expansion of shell words}{226}{expansion of shell words} -\entry{tilde expansion}{226}{tilde expansion} -\entry{variable substitution}{226}{variable substitution} -\entry{substitution of variables and commands}{226}{substitution of variables and commands} +\entry{word expansion}{227}{word expansion} +\entry{expansion of shell words}{227}{expansion of shell words} +\entry{tilde expansion}{227}{tilde expansion} +\entry{variable substitution}{227}{variable substitution} +\entry{substitution of variables and commands}{227}{substitution of variables and commands} \entry{command substitution}{227}{command substitution} \entry{arithmetic expansion}{227}{arithmetic expansion} \entry{field splitting}{227}{field splitting} @@ -403,37 +404,37 @@ \entry{link, soft}{375}{link, soft} \entry{symbolic link}{375}{symbolic link} \entry{link, symbolic}{375}{link, symbolic} -\entry{deleting a file}{376}{deleting a file} -\entry{removing a file}{376}{removing a file} -\entry{unlinking a file}{376}{unlinking a file} -\entry{directories, deleting}{377}{directories, deleting} -\entry{deleting a directory}{377}{deleting a directory} -\entry{renaming a file}{377}{renaming a file} -\entry{creating a directory}{379}{creating a directory} -\entry{directories, creating}{379}{directories, creating} -\entry{status of a file}{379}{status of a file} -\entry{attributes of a file}{379}{attributes of a file} -\entry{file attributes}{379}{file attributes} -\entry{inode number}{383}{inode number} -\entry{file owner}{387}{file owner} -\entry{owner of a file}{387}{owner of a file} -\entry{group owner of a file}{387}{group owner of a file} -\entry{file permission bits}{388}{file permission bits} -\entry{sticky bit}{389}{sticky bit} -\entry{permission to access a file}{390}{permission to access a file} -\entry{access permission for a file}{390}{access permission for a file} -\entry{file access permission}{390}{file access permission} -\entry{file creation mask}{390}{file creation mask} -\entry{umask}{390}{umask} -\entry{testing access permission}{392}{testing access permission} -\entry{access, testing for}{392}{access, testing for} -\entry{setuid programs and file access}{392}{setuid programs and file access} -\entry{file access time}{393}{file access time} -\entry{file modification time}{393}{file modification time} -\entry{file attribute modification time}{393}{file attribute modification time} -\entry{creating special files}{397}{creating special files} -\entry{special files}{397}{special files} -\entry{TMPDIR environment variable}{400}{TMPDIR environment variable} +\entry{deleting a file}{377}{deleting a file} +\entry{removing a file}{377}{removing a file} +\entry{unlinking a file}{377}{unlinking a file} +\entry{directories, deleting}{378}{directories, deleting} +\entry{deleting a directory}{378}{deleting a directory} +\entry{renaming a file}{378}{renaming a file} +\entry{creating a directory}{380}{creating a directory} +\entry{directories, creating}{380}{directories, creating} +\entry{status of a file}{380}{status of a file} +\entry{attributes of a file}{380}{attributes of a file} +\entry{file attributes}{380}{file attributes} +\entry{inode number}{384}{inode number} +\entry{file owner}{388}{file owner} +\entry{owner of a file}{388}{owner of a file} +\entry{group owner of a file}{388}{group owner of a file} +\entry{file permission bits}{389}{file permission bits} +\entry{sticky bit}{390}{sticky bit} +\entry{permission to access a file}{391}{permission to access a file} +\entry{access permission for a file}{391}{access permission for a file} +\entry{file access permission}{391}{file access permission} +\entry{file creation mask}{391}{file creation mask} +\entry{umask}{391}{umask} +\entry{testing access permission}{393}{testing access permission} +\entry{access, testing for}{393}{access, testing for} +\entry{setuid programs and file access}{393}{setuid programs and file access} +\entry{file access time}{394}{file access time} +\entry{file modification time}{394}{file modification time} +\entry{file attribute modification time}{394}{file attribute modification time} +\entry{creating special files}{398}{creating special files} +\entry{special files}{398}{special files} +\entry{TMPDIR environment variable}{401}{TMPDIR environment variable} \entry{pipe}{403}{pipe} \entry{FIFO special file}{403}{FIFO special file} \entry{creating a pipe}{403}{creating a pipe} @@ -605,449 +606,449 @@ \entry{pseudo-random numbers}{511}{pseudo-random numbers} \entry{seed (for random numbers)}{511}{seed (for random numbers)} \entry{Optimization}{518}{Optimization} -\entry{integer}{519}{integer} -\entry{signedness}{519}{signedness} -\entry{maximum possible integer}{520}{maximum possible integer} -\entry{mininum possible integer}{520}{mininum possible integer} -\entry{integer division functions}{520}{integer division functions} -\entry{floating point}{522}{floating point} -\entry{IEEE 754}{522}{IEEE 754} -\entry{IEEE floating point}{522}{IEEE floating point} -\entry{floating-point classes}{522}{floating-point classes} -\entry{classes, floating-point}{522}{classes, floating-point} -\entry{exception}{524}{exception} -\entry{signal}{524}{signal} -\entry{zero divide}{524}{zero divide} -\entry{division by zero}{524}{division by zero} -\entry{inexact exception}{524}{inexact exception} -\entry{invalid exception}{524}{invalid exception} -\entry{overflow exception}{524}{overflow exception} -\entry{underflow exception}{524}{underflow exception} -\entry{infinity}{526}{infinity} -\entry{not a number}{526}{not a number} -\entry{NaN}{526}{NaN} -\entry{errors, mathematical}{529}{errors, mathematical} -\entry{domain error}{529}{domain error} -\entry{range error}{529}{range error} -\entry{absolute value functions}{533}{absolute value functions} -\entry{normalization functions (floating-point)}{534}{normalization functions (floating-point)} -\entry{converting floats to integers}{535}{converting floats to integers} -\entry{FP arithmetic}{538}{FP arithmetic} -\entry{NaN}{539}{NaN} -\entry{unordered comparison}{539}{unordered comparison} -\entry{minimum}{540}{minimum} -\entry{maximum}{540}{maximum} -\entry{positive difference}{540}{positive difference} -\entry{multiply-add}{540}{multiply-add} -\entry{butterfly}{540}{butterfly} -\entry{complex numbers}{541}{complex numbers} -\entry{project complex numbers}{541}{project complex numbers} -\entry{conjugate complex numbers}{541}{conjugate complex numbers} -\entry{decompose complex numbers}{541}{decompose complex numbers} -\entry{parsing numbers (in formatted input)}{542}{parsing numbers (in formatted input)} -\entry{converting strings to numbers}{542}{converting strings to numbers} -\entry{number syntax, parsing}{542}{number syntax, parsing} -\entry{syntax, for reading numbers}{542}{syntax, for reading numbers} -\entry{gcvt{\_}r}{550}{gcvt_r} -\entry{time}{551}{time} -\entry{calendar time}{551}{calendar time} -\entry{date}{551}{date} -\entry{interval}{551}{interval} -\entry{elapsed time}{551}{elapsed time} -\entry{time, elapsed}{551}{time, elapsed} -\entry{period of time}{551}{period of time} -\entry{CPU time}{551}{CPU time} -\entry{processor time}{551}{processor time} -\entry{elapsed time}{551}{elapsed time} -\entry{timeval}{552}{timeval} -\entry{timespec}{552}{timespec} +\entry{integer}{521}{integer} +\entry{signedness}{521}{signedness} +\entry{maximum possible integer}{522}{maximum possible integer} +\entry{mininum possible integer}{522}{mininum possible integer} +\entry{integer division functions}{522}{integer division functions} +\entry{floating point}{524}{floating point} +\entry{IEEE 754}{524}{IEEE 754} +\entry{IEEE floating point}{524}{IEEE floating point} +\entry{floating-point classes}{524}{floating-point classes} +\entry{classes, floating-point}{524}{classes, floating-point} +\entry{exception}{526}{exception} +\entry{signal}{526}{signal} +\entry{zero divide}{526}{zero divide} +\entry{division by zero}{526}{division by zero} +\entry{inexact exception}{526}{inexact exception} +\entry{invalid exception}{526}{invalid exception} +\entry{overflow exception}{526}{overflow exception} +\entry{underflow exception}{526}{underflow exception} +\entry{infinity}{528}{infinity} +\entry{not a number}{528}{not a number} +\entry{NaN}{528}{NaN} +\entry{errors, mathematical}{531}{errors, mathematical} +\entry{domain error}{531}{domain error} +\entry{range error}{531}{range error} +\entry{absolute value functions}{535}{absolute value functions} +\entry{normalization functions (floating-point)}{536}{normalization functions (floating-point)} +\entry{converting floats to integers}{537}{converting floats to integers} +\entry{FP arithmetic}{540}{FP arithmetic} +\entry{NaN}{541}{NaN} +\entry{unordered comparison}{541}{unordered comparison} +\entry{minimum}{542}{minimum} +\entry{maximum}{542}{maximum} +\entry{positive difference}{542}{positive difference} +\entry{multiply-add}{542}{multiply-add} +\entry{butterfly}{542}{butterfly} +\entry{complex numbers}{543}{complex numbers} +\entry{project complex numbers}{543}{project complex numbers} +\entry{conjugate complex numbers}{543}{conjugate complex numbers} +\entry{decompose complex numbers}{543}{decompose complex numbers} +\entry{parsing numbers (in formatted input)}{544}{parsing numbers (in formatted input)} +\entry{converting strings to numbers}{544}{converting strings to numbers} +\entry{number syntax, parsing}{544}{number syntax, parsing} +\entry{syntax, for reading numbers}{544}{syntax, for reading numbers} +\entry{gcvt{\_}r}{552}{gcvt_r} +\entry{time}{553}{time} +\entry{calendar time}{553}{calendar time} +\entry{date}{553}{date} +\entry{interval}{553}{interval} +\entry{elapsed time}{553}{elapsed time} +\entry{time, elapsed}{553}{time, elapsed} +\entry{period of time}{553}{period of time} \entry{CPU time}{553}{CPU time} -\entry{clock ticks}{553}{clock ticks} -\entry{ticks, clock}{553}{ticks, clock} -\entry{processor time}{554}{processor time} -\entry{CPU time}{554}{CPU time} -\entry{child process}{555}{child process} -\entry{simple time}{555}{simple time} -\entry{high-resolution time}{555}{high-resolution time} -\entry{local time}{555}{local time} -\entry{broken-down time}{555}{broken-down time} -\entry{Gregorian calendar}{555}{Gregorian calendar} -\entry{calendar, Gregorian}{555}{calendar, Gregorian} -\entry{epoch}{556}{epoch} -\entry{broken-down time}{558}{broken-down time} -\entry{calendar time and broken-down time}{558}{calendar time and broken-down time} -\entry{leap second}{559}{leap second} -\entry{Daylight Saving Time}{559}{Daylight Saving Time} -\entry{summer time}{559}{summer time} -\entry{time, high precision}{561}{time, high precision} -\entry{clock, high accuracy}{561}{clock, high accuracy} -\entry{time zone}{577}{time zone} -\entry{time zone database}{578}{time zone database} -\entry{setting an alarm}{580}{setting an alarm} -\entry{interval timer, setting}{580}{interval timer, setting} -\entry{alarms, setting}{580}{alarms, setting} -\entry{timers, setting}{580}{timers, setting} -\entry{real-time timer}{580}{real-time timer} -\entry{timer, real-time}{580}{timer, real-time} -\entry{virtual timer}{580}{virtual timer} -\entry{timer, virtual}{580}{timer, virtual} -\entry{profiling timer}{581}{profiling timer} -\entry{timer, profiling}{581}{timer, profiling} -\entry{resource limits}{587}{resource limits} -\entry{limits on resource usage}{587}{limits on resource usage} -\entry{usage limits}{587}{usage limits} -\entry{limit}{587}{limit} -\entry{current limit}{587}{current limit} -\entry{soft limit}{587}{soft limit} -\entry{maximum limit}{587}{maximum limit} -\entry{hard limit}{587}{hard limit} -\entry{process priority}{591}{process priority} -\entry{cpu priority}{591}{cpu priority} -\entry{priority of a process}{591}{priority of a process} -\entry{absolute priority}{592}{absolute priority} -\entry{priority, absolute}{592}{priority, absolute} -\entry{realtime CPU scheduling}{592}{realtime CPU scheduling} -\entry{ready to run}{592}{ready to run} -\entry{preemptive scheduling}{592}{preemptive scheduling} -\entry{runnable process}{592}{runnable process} -\entry{realtime scheduling}{593}{realtime scheduling} -\entry{scheduling, traditional}{597}{scheduling, traditional} -\entry{address space}{600}{address space} -\entry{physical memory}{600}{physical memory} -\entry{physical address}{600}{physical address} -\entry{shared memory}{600}{shared memory} -\entry{thrashing}{601}{thrashing} -\entry{memory page}{601}{memory page} -\entry{page, memory}{601}{page, memory} -\entry{sysconf}{601}{sysconf} -\entry{sysconf}{601}{sysconf} -\entry{sysconf}{602}{sysconf} -\entry{sysconf}{602}{sysconf} -\entry{load average}{603}{load average} -\entry{non-local exits}{605}{non-local exits} -\entry{long jumps}{605}{long jumps} -\entry{signal}{609}{signal} -\entry{generation of signals}{610}{generation of signals} -\entry{delivery of signals}{610}{delivery of signals} -\entry{pending signals}{610}{pending signals} -\entry{blocked signals}{610}{blocked signals} -\entry{specified action (for a signal)}{610}{specified action (for a signal)} -\entry{default action (for a signal)}{610}{default action (for a signal)} -\entry{signal action}{610}{signal action} -\entry{catching signals}{610}{catching signals} -\entry{signal names}{611}{signal names} -\entry{names of signals}{611}{names of signals} -\entry{signal number}{611}{signal number} -\entry{program error signals}{611}{program error signals} -\entry{exception}{612}{exception} -\entry{floating-point exception}{612}{floating-point exception} -\entry{illegal instruction}{613}{illegal instruction} -\entry{segmentation violation}{613}{segmentation violation} -\entry{bus error}{613}{bus error} -\entry{abort signal}{614}{abort signal} -\entry{program termination signals}{614}{program termination signals} -\entry{termination signal}{614}{termination signal} -\entry{interrupt signal}{614}{interrupt signal} -\entry{quit signal}{615}{quit signal} -\entry{quit signal}{615}{quit signal} -\entry{kill signal}{615}{kill signal} -\entry{hangup signal}{615}{hangup signal} -\entry{alarm signal}{616}{alarm signal} -\entry{virtual time alarm signal}{616}{virtual time alarm signal} -\entry{profiling alarm signal}{616}{profiling alarm signal} -\entry{input available signal}{616}{input available signal} -\entry{output possible signal}{616}{output possible signal} -\entry{urgent data signal}{616}{urgent data signal} -\entry{job control signals}{616}{job control signals} -\entry{child process signal}{616}{child process signal} -\entry{continue signal}{617}{continue signal} -\entry{stop signal}{617}{stop signal} -\entry{interactive stop signal}{617}{interactive stop signal} -\entry{terminal input signal}{617}{terminal input signal} -\entry{terminal output signal}{618}{terminal output signal} -\entry{pipe signal}{618}{pipe signal} -\entry{broken pipe signal}{618}{broken pipe signal} -\entry{lost resource signal}{618}{lost resource signal} -\entry{user signals}{619}{user signals} -\entry{signal messages}{619}{signal messages} -\entry{signal actions}{620}{signal actions} -\entry{establishing a handler}{620}{establishing a handler} -\entry{signal function}{620}{\code {signal} function} -\entry{default action for a signal}{621}{default action for a signal} -\entry{ignore action for a signal}{621}{ignore action for a signal} -\entry{sigaction function}{622}{\code {sigaction} function} -\entry{signal flags}{625}{signal flags} -\entry{flags for sigaction}{625}{flags for \code {sigaction}} -\entry{sigaction flags}{625}{\code {sigaction} flags} -\entry{initial signal actions}{626}{initial signal actions} -\entry{signal handler function}{626}{signal handler function} -\entry{non-local exit, from signal handler}{629}{non-local exit, from signal handler} -\entry{race conditions, relating to signals}{630}{race conditions, relating to signals} -\entry{handling multiple signals}{631}{handling multiple signals} -\entry{successive signals}{631}{successive signals} -\entry{merging of signals}{631}{merging of signals} -\entry{restrictions on signal handler functions}{633}{restrictions on signal handler functions} -\entry{volatile declarations}{634}{\code {volatile} declarations} -\entry{reentrant functions}{634}{reentrant functions} -\entry{EINTR, and restarting interrupted primitives}{638}{EINTR, and restarting interrupted primitives} -\entry{restarting interrupted primitives}{638}{restarting interrupted primitives} -\entry{interrupting primitives}{638}{interrupting primitives} -\entry{primitives, interrupting}{638}{primitives, interrupting} -\entry{sending signals}{638}{sending signals} -\entry{raising signals}{638}{raising signals} -\entry{signals, generating}{638}{signals, generating} -\entry{killing a process}{639}{killing a process} -\entry{interprocess communication, with signals}{641}{interprocess communication, with signals} -\entry{blocking signals}{642}{blocking signals} -\entry{signal set}{643}{signal set} -\entry{signal mask}{644}{signal mask} -\entry{process signal mask}{644}{process signal mask} -\entry{blocking signals, in a handler}{646}{blocking signals, in a handler} -\entry{pending signals, checking for}{647}{pending signals, checking for} -\entry{blocked signals, checking for}{647}{blocked signals, checking for} -\entry{checking for pending signals}{647}{checking for pending signals} -\entry{timing error in signal handling}{649}{timing error in signal handling} -\entry{waiting for a signal}{649}{waiting for a signal} -\entry{pause function}{649}{\code {pause} function} -\entry{process}{657}{process} -\entry{program}{657}{program} -\entry{address space}{657}{address space} -\entry{thread of control}{657}{thread of control} -\entry{program arguments}{657}{program arguments} -\entry{command line arguments}{657}{command line arguments} -\entry{arguments, to program}{657}{arguments, to program} -\entry{program startup}{657}{program startup} -\entry{startup of program}{657}{startup of program} -\entry{invocation of program}{657}{invocation of program} -\entry{main function}{657}{\code {main} function} -\entry{argc (program argument count)}{657}{argc (program argument count)} -\entry{argv (program argument vector)}{657}{argv (program argument vector)} -\entry{program argument syntax}{658}{program argument syntax} -\entry{syntax, for program arguments}{658}{syntax, for program arguments} -\entry{command argument syntax}{658}{command argument syntax} -\entry{long-named options}{658}{long-named options} -\entry{program arguments, parsing}{659}{program arguments, parsing} -\entry{command arguments, parsing}{659}{command arguments, parsing} -\entry{parsing program arguments}{659}{parsing program arguments} -\entry{argp (program argument parser)}{666}{argp (program argument parser)} -\entry{argument parsing with argp}{666}{argument parsing with argp} -\entry{option parsing with argp}{666}{option parsing with argp} -\entry{argp parser functions}{671}{argp parser functions} -\entry{usage messages, in argp}{674}{usage messages, in argp} -\entry{syntax error messages, in argp}{674}{syntax error messages, in argp} -\entry{error messages, in argp}{674}{error messages, in argp} -\entry{ARGP{\_}HELP{\_}FMT environment variable}{689}{ARGP_HELP_FMT environment variable} -\entry{environment variable}{692}{environment variable} -\entry{environment}{693}{environment} -\entry{environment access}{693}{environment access} -\entry{environment representation}{693}{environment representation} -\entry{standard environment variables}{695}{standard environment variables} -\entry{HOME environment variable}{695}{\code {HOME} environment variable} -\entry{home directory}{695}{home directory} -\entry{LOGNAME environment variable}{695}{\code {LOGNAME} environment variable} -\entry{PATH environment variable}{695}{\code {PATH} environment variable} -\entry{TERM environment variable}{695}{\code {TERM} environment variable} -\entry{TZ environment variable}{696}{\code {TZ} environment variable} -\entry{LANG environment variable}{696}{\code {LANG} environment variable} -\entry{LC{\_}ALL environment variable}{696}{\code {LC_ALL} environment variable} -\entry{LC{\_}COLLATE environment variable}{696}{\code {LC_COLLATE} environment variable} -\entry{LC{\_}CTYPE environment variable}{696}{\code {LC_CTYPE} environment variable} -\entry{LC{\_}MESSAGES environment variable}{696}{\code {LC_MESSAGES} environment variable} -\entry{LC{\_}MONETARY environment variable}{696}{\code {LC_MONETARY} environment variable} -\entry{LC{\_}NUMERIC environment variable}{696}{\code {LC_NUMERIC} environment variable} -\entry{LC{\_}TIME environment variable}{696}{\code {LC_TIME} environment variable} -\entry{NLSPATH environment variable}{696}{\code {NLSPATH} environment variable} -\entry{{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{696}{\code {_POSIX_OPTION_ORDER} environment variable.} -\entry{system call}{696}{system call} -\entry{kernel call}{696}{kernel call} -\entry{system call number}{697}{system call number} -\entry{errno}{697}{errno} -\entry{program termination}{698}{program termination} -\entry{process termination}{698}{process termination} -\entry{exit status value}{698}{exit status value} -\entry{exit status}{699}{exit status} -\entry{aborting a program}{701}{aborting a program} -\entry{process}{703}{process} -\entry{child process}{703}{child process} -\entry{parent process}{703}{parent process} -\entry{running a command}{703}{running a command} -\entry{process ID}{704}{process ID} -\entry{process lifetime}{704}{process lifetime} -\entry{creating a process}{704}{creating a process} -\entry{forking a process}{704}{forking a process} -\entry{child process}{704}{child process} -\entry{parent process}{704}{parent process} -\entry{process image}{704}{process image} -\entry{executing a file}{706}{executing a file} -\entry{exec functions}{706}{\code {exec} functions} -\entry{process completion}{708}{process completion} -\entry{waiting for completion of child process}{708}{waiting for completion of child process} -\entry{testing exit status of child process}{708}{testing exit status of child process} -\entry{process groups}{715}{process groups} -\entry{job control}{715}{job control} -\entry{job}{715}{job} -\entry{session}{715}{session} -\entry{shell}{715}{shell} -\entry{session}{715}{session} -\entry{session leader}{715}{session leader} -\entry{controlling terminal}{715}{controlling terminal} -\entry{foreground job}{715}{foreground job} -\entry{background job}{715}{background job} -\entry{stopped job}{716}{stopped job} -\entry{job control is optional}{716}{job control is optional} -\entry{controlling process}{716}{controlling process} -\entry{controlling terminal, access to}{716}{controlling terminal, access to} -\entry{SIGTTIN, from background job}{716}{\code {SIGTTIN}, from background job} -\entry{SIGTTOU, from background job}{717}{\code {SIGTTOU}, from background job} -\entry{orphaned process group}{717}{orphaned process group} -\entry{job control, enabling}{719}{job control, enabling} -\entry{subshell}{719}{subshell} -\entry{job control, enabling}{719}{job control, enabling} -\entry{launching jobs}{721}{launching jobs} -\entry{process group leader}{721}{process group leader} -\entry{process group ID}{721}{process group ID} -\entry{race conditions, relating to job control}{721}{race conditions, relating to job control} -\entry{foreground job, launching}{724}{foreground job, launching} -\entry{background job, launching}{725}{background job, launching} -\entry{stopped jobs, detecting}{725}{stopped jobs, detecting} -\entry{terminated jobs, detecting}{725}{terminated jobs, detecting} -\entry{SIGCHLD, handling of}{726}{\code {SIGCHLD}, handling of} -\entry{stopped jobs, continuing}{728}{stopped jobs, continuing} -\entry{process group functions}{730}{process group functions} -\entry{job control functions}{730}{job control functions} -\entry{controlling terminal, determining}{730}{controlling terminal, determining} -\entry{BSD compatibility library}{731}{BSD compatibility library} -\entry{Name Service Switch}{735}{Name Service Switch} -\entry{NSS}{735}{NSS} -\entry{databases}{735}{databases} -\entry{ethers}{735}{ethers} -\entry{group}{735}{group} -\entry{hosts}{735}{hosts} -\entry{netgroup}{735}{netgroup} -\entry{networks}{735}{networks} -\entry{protocols}{735}{protocols} -\entry{passwd}{735}{passwd} -\entry{rpc}{735}{rpc} -\entry{services}{735}{services} -\entry{shadow}{735}{shadow} -\entry{/etc/nsswitch.conf}{736}{\file {/etc/nsswitch.conf}} -\entry{nsswitch.conf}{736}{\file {nsswitch.conf}} -\entry{DNS server unavailable}{737}{DNS server unavailable} -\entry{nisplus, and completeness}{737}{nisplus, and completeness} -\entry{nisplus, and booting}{737}{nisplus, and booting} -\entry{bootstrapping, and services}{737}{bootstrapping, and services} -\entry{default value, and NSS}{738}{default value, and NSS} -\entry{optimizing NSS}{738}{optimizing NSS} -\entry{reentrant NSS functions}{739}{reentrant NSS functions} -\entry{login name}{745}{login name} -\entry{user name}{745}{user name} -\entry{user ID}{745}{user ID} -\entry{group name}{745}{group name} -\entry{group ID}{745}{group ID} -\entry{persona}{745}{persona} -\entry{effective user ID}{745}{effective user ID} -\entry{effective group ID}{745}{effective group ID} -\entry{supplementary group IDs}{745}{supplementary group IDs} -\entry{real user ID}{745}{real user ID} -\entry{real group ID}{745}{real group ID} -\entry{setuid programs}{746}{\code {setuid} programs} -\entry{saved set-user-ID}{746}{saved set-user-ID} -\entry{saved set-group-ID}{746}{saved set-group-ID} -\entry{{\_}POSIX{\_}SAVED{\_}IDS}{746}{\code {_POSIX_SAVED_IDS}} -\entry{login name, determining}{754}{login name, determining} -\entry{user ID, determining}{754}{user ID, determining} -\entry{user accounting database}{755}{user accounting database} -\entry{user database}{763}{user database} -\entry{password database}{763}{password database} -\entry{converting user ID to user name}{763}{converting user ID to user name} -\entry{converting user name to user ID}{763}{converting user name to user ID} -\entry{scanning the user list}{764}{scanning the user list} -\entry{group database}{766}{group database} -\entry{converting group name to group ID}{766}{converting group name to group ID} -\entry{converting group ID to group name}{766}{converting group ID to group name} -\entry{scanning the group list}{767}{scanning the group list} -\entry{Netgroup}{769}{Netgroup} -\entry{host name}{773}{host name} -\entry{DNS}{773}{DNS} -\entry{Domain Name System}{773}{Domain Name System} -\entry{hostname}{773}{hostname} -\entry{domain name}{773}{domain name} -\entry{FQDN}{773}{FQDN} -\entry{YP}{773}{YP} -\entry{NIS}{773}{NIS} -\entry{NIS domain name}{773}{NIS domain name} -\entry{YP domain name}{773}{YP domain name} -\entry{/etc/hostname}{774}{/etc/hostname} -\entry{NIS domain name}{774}{NIS domain name} -\entry{YP domain name}{774}{YP domain name} -\entry{NIS domain name}{774}{NIS domain name} -\entry{YP domain name}{774}{YP domain name} -\entry{POSIX capacity limits}{789}{POSIX capacity limits} -\entry{limits, POSIX}{789}{limits, POSIX} -\entry{capacity limits, POSIX}{789}{capacity limits, POSIX} -\entry{limits, program argument size}{789}{limits, program argument size} -\entry{limits, number of processes}{789}{limits, number of processes} -\entry{limits, number of open files}{789}{limits, number of open files} -\entry{limits, time zone name length}{789}{limits, time zone name length} -\entry{limits, number of supplementary group IDs}{790}{limits, number of supplementary group IDs} -\entry{POSIX optional features}{790}{POSIX optional features} -\entry{optional POSIX features}{790}{optional POSIX features} -\entry{limits, link count of files}{802}{limits, link count of files} -\entry{limits, terminal input queue}{802}{limits, terminal input queue} -\entry{limits, file name length}{802}{limits, file name length} -\entry{limits, pipe buffer size}{803}{limits, pipe buffer size} -\entry{backtrace}{819}{backtrace} -\entry{backtrace{\_}symbols}{819}{backtrace_symbols} -\entry{backtrace{\_}fd}{819}{backtrace_fd} -\entry{consistency checking}{845}{consistency checking} -\entry{impossible events}{845}{impossible events} -\entry{assertions}{845}{assertions} -\entry{variable number of arguments}{846}{variable number of arguments} -\entry{variadic functions}{846}{variadic functions} -\entry{optional arguments}{846}{optional arguments} -\entry{function prototypes (variadic)}{847}{function prototypes (variadic)} -\entry{prototypes for variadic functions}{847}{prototypes for variadic functions} -\entry{variadic function prototypes}{847}{variadic function prototypes} -\entry{variadic function argument access}{848}{variadic function argument access} -\entry{arguments (variadic functions)}{848}{arguments (variadic functions)} -\entry{number of arguments passed}{848}{number of arguments passed} -\entry{how many arguments}{848}{how many arguments} -\entry{arguments, how many}{848}{arguments, how many} -\entry{variadic functions, calling}{849}{variadic functions, calling} -\entry{calling variadic functions}{849}{calling variadic functions} -\entry{declaring variadic functions}{849}{declaring variadic functions} -\entry{default argument promotions}{849}{default argument promotions} -\entry{argument promotion}{849}{argument promotion} -\entry{null pointer constant}{852}{null pointer constant} -\entry{integer type width}{854}{integer type width} -\entry{width of integer type}{854}{width of integer type} -\entry{type measurements, integer}{854}{type measurements, integer} -\entry{integer type range}{854}{integer type range} -\entry{range of integer type}{854}{range of integer type} -\entry{limits, integer types}{854}{limits, integer types} -\entry{floating type measurements}{856}{floating type measurements} -\entry{measurements of floating types}{856}{measurements of floating types} -\entry{type measurements, floating}{856}{type measurements, floating} -\entry{limits, floating types}{856}{limits, floating types} -\entry{sign (of floating point number)}{856}{sign (of floating point number)} -\entry{base (of floating point number)}{856}{base (of floating point number)} -\entry{radix (of floating point number)}{856}{radix (of floating point number)} -\entry{exponent (of floating point number)}{856}{exponent (of floating point number)} -\entry{bias (of floating point number exponent)}{856}{bias (of floating point number exponent)} -\entry{mantissa (of floating point number)}{856}{mantissa (of floating point number)} -\entry{significand (of floating point number)}{856}{significand (of floating point number)} -\entry{precision (of floating point number)}{856}{precision (of floating point number)} -\entry{hidden bit (of floating point number mantissa)}{856}{hidden bit (of floating point number mantissa)} -\entry{normalized floating point number}{857}{normalized floating point number} -\entry{IEEE floating point representation}{860}{IEEE floating point representation} -\entry{floating point, IEEE}{860}{floating point, IEEE} -\entry{configuring}{969}{configuring} -\entry{compiling}{969}{compiling} -\entry{installing}{972}{installing} -\entry{installation tools}{973}{installation tools} -\entry{tools, for installing library}{973}{tools, for installing library} -\entry{configurations, all supported}{974}{configurations, all supported} -\entry{upgrading from libc5}{976}{upgrading from libc5} -\entry{kernel header files}{976}{kernel header files} -\entry{reporting bugs}{976}{reporting bugs} -\entry{bugs, reporting}{976}{bugs, reporting} +\entry{processor time}{553}{processor time} +\entry{elapsed time}{553}{elapsed time} +\entry{timeval}{554}{timeval} +\entry{timespec}{554}{timespec} +\entry{CPU time}{555}{CPU time} +\entry{clock ticks}{555}{clock ticks} +\entry{ticks, clock}{555}{ticks, clock} +\entry{processor time}{556}{processor time} +\entry{CPU time}{556}{CPU time} +\entry{child process}{557}{child process} +\entry{simple time}{557}{simple time} +\entry{high-resolution time}{557}{high-resolution time} +\entry{local time}{557}{local time} +\entry{broken-down time}{557}{broken-down time} +\entry{Gregorian calendar}{557}{Gregorian calendar} +\entry{calendar, Gregorian}{557}{calendar, Gregorian} +\entry{epoch}{558}{epoch} +\entry{broken-down time}{560}{broken-down time} +\entry{calendar time and broken-down time}{560}{calendar time and broken-down time} +\entry{leap second}{561}{leap second} +\entry{Daylight Saving Time}{561}{Daylight Saving Time} +\entry{summer time}{561}{summer time} +\entry{time, high precision}{563}{time, high precision} +\entry{clock, high accuracy}{563}{clock, high accuracy} +\entry{time zone}{579}{time zone} +\entry{time zone database}{580}{time zone database} +\entry{setting an alarm}{582}{setting an alarm} +\entry{interval timer, setting}{582}{interval timer, setting} +\entry{alarms, setting}{582}{alarms, setting} +\entry{timers, setting}{582}{timers, setting} +\entry{real-time timer}{582}{real-time timer} +\entry{timer, real-time}{582}{timer, real-time} +\entry{virtual timer}{582}{virtual timer} +\entry{timer, virtual}{582}{timer, virtual} +\entry{profiling timer}{583}{profiling timer} +\entry{timer, profiling}{583}{timer, profiling} +\entry{resource limits}{589}{resource limits} +\entry{limits on resource usage}{589}{limits on resource usage} +\entry{usage limits}{589}{usage limits} +\entry{limit}{589}{limit} +\entry{current limit}{589}{current limit} +\entry{soft limit}{589}{soft limit} +\entry{maximum limit}{589}{maximum limit} +\entry{hard limit}{589}{hard limit} +\entry{process priority}{593}{process priority} +\entry{cpu priority}{593}{cpu priority} +\entry{priority of a process}{593}{priority of a process} +\entry{absolute priority}{594}{absolute priority} +\entry{priority, absolute}{594}{priority, absolute} +\entry{realtime CPU scheduling}{594}{realtime CPU scheduling} +\entry{ready to run}{594}{ready to run} +\entry{preemptive scheduling}{594}{preemptive scheduling} +\entry{runnable process}{594}{runnable process} +\entry{realtime scheduling}{595}{realtime scheduling} +\entry{scheduling, traditional}{599}{scheduling, traditional} +\entry{address space}{602}{address space} +\entry{physical memory}{602}{physical memory} +\entry{physical address}{602}{physical address} +\entry{shared memory}{602}{shared memory} +\entry{thrashing}{603}{thrashing} +\entry{memory page}{603}{memory page} +\entry{page, memory}{603}{page, memory} +\entry{sysconf}{603}{sysconf} +\entry{sysconf}{603}{sysconf} +\entry{sysconf}{604}{sysconf} +\entry{sysconf}{604}{sysconf} +\entry{load average}{605}{load average} +\entry{non-local exits}{607}{non-local exits} +\entry{long jumps}{607}{long jumps} +\entry{signal}{617}{signal} +\entry{generation of signals}{618}{generation of signals} +\entry{delivery of signals}{618}{delivery of signals} +\entry{pending signals}{618}{pending signals} +\entry{blocked signals}{618}{blocked signals} +\entry{specified action (for a signal)}{618}{specified action (for a signal)} +\entry{default action (for a signal)}{618}{default action (for a signal)} +\entry{signal action}{618}{signal action} +\entry{catching signals}{618}{catching signals} +\entry{signal names}{619}{signal names} +\entry{names of signals}{619}{names of signals} +\entry{signal number}{619}{signal number} +\entry{program error signals}{619}{program error signals} +\entry{exception}{620}{exception} +\entry{floating-point exception}{620}{floating-point exception} +\entry{illegal instruction}{621}{illegal instruction} +\entry{segmentation violation}{621}{segmentation violation} +\entry{bus error}{621}{bus error} +\entry{abort signal}{622}{abort signal} +\entry{program termination signals}{622}{program termination signals} +\entry{termination signal}{622}{termination signal} +\entry{interrupt signal}{622}{interrupt signal} +\entry{quit signal}{623}{quit signal} +\entry{quit signal}{623}{quit signal} +\entry{kill signal}{623}{kill signal} +\entry{hangup signal}{623}{hangup signal} +\entry{alarm signal}{624}{alarm signal} +\entry{virtual time alarm signal}{624}{virtual time alarm signal} +\entry{profiling alarm signal}{624}{profiling alarm signal} +\entry{input available signal}{624}{input available signal} +\entry{output possible signal}{624}{output possible signal} +\entry{urgent data signal}{624}{urgent data signal} +\entry{job control signals}{624}{job control signals} +\entry{child process signal}{624}{child process signal} +\entry{continue signal}{625}{continue signal} +\entry{stop signal}{625}{stop signal} +\entry{interactive stop signal}{625}{interactive stop signal} +\entry{terminal input signal}{625}{terminal input signal} +\entry{terminal output signal}{626}{terminal output signal} +\entry{pipe signal}{626}{pipe signal} +\entry{broken pipe signal}{626}{broken pipe signal} +\entry{lost resource signal}{626}{lost resource signal} +\entry{user signals}{627}{user signals} +\entry{signal messages}{627}{signal messages} +\entry{signal actions}{628}{signal actions} +\entry{establishing a handler}{628}{establishing a handler} +\entry{signal function}{628}{\code {signal} function} +\entry{default action for a signal}{629}{default action for a signal} +\entry{ignore action for a signal}{629}{ignore action for a signal} +\entry{sigaction function}{630}{\code {sigaction} function} +\entry{signal flags}{633}{signal flags} +\entry{flags for sigaction}{633}{flags for \code {sigaction}} +\entry{sigaction flags}{633}{\code {sigaction} flags} +\entry{initial signal actions}{634}{initial signal actions} +\entry{signal handler function}{634}{signal handler function} +\entry{non-local exit, from signal handler}{637}{non-local exit, from signal handler} +\entry{race conditions, relating to signals}{638}{race conditions, relating to signals} +\entry{handling multiple signals}{639}{handling multiple signals} +\entry{successive signals}{639}{successive signals} +\entry{merging of signals}{639}{merging of signals} +\entry{restrictions on signal handler functions}{641}{restrictions on signal handler functions} +\entry{volatile declarations}{642}{\code {volatile} declarations} +\entry{reentrant functions}{642}{reentrant functions} +\entry{EINTR, and restarting interrupted primitives}{646}{EINTR, and restarting interrupted primitives} +\entry{restarting interrupted primitives}{646}{restarting interrupted primitives} +\entry{interrupting primitives}{646}{interrupting primitives} +\entry{primitives, interrupting}{646}{primitives, interrupting} +\entry{sending signals}{646}{sending signals} +\entry{raising signals}{646}{raising signals} +\entry{signals, generating}{646}{signals, generating} +\entry{killing a process}{647}{killing a process} +\entry{interprocess communication, with signals}{649}{interprocess communication, with signals} +\entry{blocking signals}{650}{blocking signals} +\entry{signal set}{651}{signal set} +\entry{signal mask}{652}{signal mask} +\entry{process signal mask}{652}{process signal mask} +\entry{blocking signals, in a handler}{654}{blocking signals, in a handler} +\entry{pending signals, checking for}{655}{pending signals, checking for} +\entry{blocked signals, checking for}{655}{blocked signals, checking for} +\entry{checking for pending signals}{655}{checking for pending signals} +\entry{timing error in signal handling}{657}{timing error in signal handling} +\entry{waiting for a signal}{657}{waiting for a signal} +\entry{pause function}{657}{\code {pause} function} +\entry{process}{665}{process} +\entry{program}{665}{program} +\entry{address space}{665}{address space} +\entry{thread of control}{665}{thread of control} +\entry{program arguments}{665}{program arguments} +\entry{command line arguments}{665}{command line arguments} +\entry{arguments, to program}{665}{arguments, to program} +\entry{program startup}{665}{program startup} +\entry{startup of program}{665}{startup of program} +\entry{invocation of program}{665}{invocation of program} +\entry{main function}{665}{\code {main} function} +\entry{argc (program argument count)}{665}{argc (program argument count)} +\entry{argv (program argument vector)}{665}{argv (program argument vector)} +\entry{program argument syntax}{666}{program argument syntax} +\entry{syntax, for program arguments}{666}{syntax, for program arguments} +\entry{command argument syntax}{666}{command argument syntax} +\entry{long-named options}{666}{long-named options} +\entry{program arguments, parsing}{667}{program arguments, parsing} +\entry{command arguments, parsing}{667}{command arguments, parsing} +\entry{parsing program arguments}{667}{parsing program arguments} +\entry{argp (program argument parser)}{674}{argp (program argument parser)} +\entry{argument parsing with argp}{674}{argument parsing with argp} +\entry{option parsing with argp}{674}{option parsing with argp} +\entry{argp parser functions}{679}{argp parser functions} +\entry{usage messages, in argp}{682}{usage messages, in argp} +\entry{syntax error messages, in argp}{682}{syntax error messages, in argp} +\entry{error messages, in argp}{682}{error messages, in argp} +\entry{ARGP{\_}HELP{\_}FMT environment variable}{697}{ARGP_HELP_FMT environment variable} +\entry{environment variable}{700}{environment variable} +\entry{environment}{701}{environment} +\entry{environment access}{701}{environment access} +\entry{environment representation}{701}{environment representation} +\entry{standard environment variables}{703}{standard environment variables} +\entry{HOME environment variable}{703}{\code {HOME} environment variable} +\entry{home directory}{703}{home directory} +\entry{LOGNAME environment variable}{703}{\code {LOGNAME} environment variable} +\entry{PATH environment variable}{703}{\code {PATH} environment variable} +\entry{TERM environment variable}{703}{\code {TERM} environment variable} +\entry{TZ environment variable}{704}{\code {TZ} environment variable} +\entry{LANG environment variable}{704}{\code {LANG} environment variable} +\entry{LC{\_}ALL environment variable}{704}{\code {LC_ALL} environment variable} +\entry{LC{\_}COLLATE environment variable}{704}{\code {LC_COLLATE} environment variable} +\entry{LC{\_}CTYPE environment variable}{704}{\code {LC_CTYPE} environment variable} +\entry{LC{\_}MESSAGES environment variable}{704}{\code {LC_MESSAGES} environment variable} +\entry{LC{\_}MONETARY environment variable}{704}{\code {LC_MONETARY} environment variable} +\entry{LC{\_}NUMERIC environment variable}{704}{\code {LC_NUMERIC} environment variable} +\entry{LC{\_}TIME environment variable}{704}{\code {LC_TIME} environment variable} +\entry{NLSPATH environment variable}{704}{\code {NLSPATH} environment variable} +\entry{{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{704}{\code {_POSIX_OPTION_ORDER} environment variable.} +\entry{system call}{704}{system call} +\entry{kernel call}{704}{kernel call} +\entry{system call number}{705}{system call number} +\entry{errno}{705}{errno} +\entry{program termination}{706}{program termination} +\entry{process termination}{706}{process termination} +\entry{exit status value}{706}{exit status value} +\entry{exit status}{707}{exit status} +\entry{aborting a program}{709}{aborting a program} +\entry{process}{711}{process} +\entry{child process}{711}{child process} +\entry{parent process}{711}{parent process} +\entry{running a command}{711}{running a command} +\entry{process ID}{712}{process ID} +\entry{process lifetime}{712}{process lifetime} +\entry{creating a process}{712}{creating a process} +\entry{forking a process}{712}{forking a process} +\entry{child process}{712}{child process} +\entry{parent process}{712}{parent process} +\entry{process image}{712}{process image} +\entry{executing a file}{714}{executing a file} +\entry{exec functions}{714}{\code {exec} functions} +\entry{process completion}{716}{process completion} +\entry{waiting for completion of child process}{716}{waiting for completion of child process} +\entry{testing exit status of child process}{716}{testing exit status of child process} +\entry{process groups}{723}{process groups} +\entry{job control}{723}{job control} +\entry{job}{723}{job} +\entry{session}{723}{session} +\entry{shell}{723}{shell} +\entry{session}{723}{session} +\entry{session leader}{723}{session leader} +\entry{controlling terminal}{723}{controlling terminal} +\entry{foreground job}{723}{foreground job} +\entry{background job}{723}{background job} +\entry{stopped job}{724}{stopped job} +\entry{job control is optional}{724}{job control is optional} +\entry{controlling process}{724}{controlling process} +\entry{controlling terminal, access to}{724}{controlling terminal, access to} +\entry{SIGTTIN, from background job}{724}{\code {SIGTTIN}, from background job} +\entry{SIGTTOU, from background job}{725}{\code {SIGTTOU}, from background job} +\entry{orphaned process group}{725}{orphaned process group} +\entry{job control, enabling}{727}{job control, enabling} +\entry{subshell}{727}{subshell} +\entry{job control, enabling}{727}{job control, enabling} +\entry{launching jobs}{729}{launching jobs} +\entry{process group leader}{729}{process group leader} +\entry{process group ID}{729}{process group ID} +\entry{race conditions, relating to job control}{729}{race conditions, relating to job control} +\entry{foreground job, launching}{732}{foreground job, launching} +\entry{background job, launching}{733}{background job, launching} +\entry{stopped jobs, detecting}{733}{stopped jobs, detecting} +\entry{terminated jobs, detecting}{733}{terminated jobs, detecting} +\entry{SIGCHLD, handling of}{734}{\code {SIGCHLD}, handling of} +\entry{stopped jobs, continuing}{736}{stopped jobs, continuing} +\entry{process group functions}{738}{process group functions} +\entry{job control functions}{738}{job control functions} +\entry{controlling terminal, determining}{738}{controlling terminal, determining} +\entry{BSD compatibility library}{739}{BSD compatibility library} +\entry{Name Service Switch}{743}{Name Service Switch} +\entry{NSS}{743}{NSS} +\entry{databases}{743}{databases} +\entry{ethers}{743}{ethers} +\entry{group}{743}{group} +\entry{hosts}{743}{hosts} +\entry{netgroup}{743}{netgroup} +\entry{networks}{743}{networks} +\entry{protocols}{743}{protocols} +\entry{passwd}{743}{passwd} +\entry{rpc}{743}{rpc} +\entry{services}{743}{services} +\entry{shadow}{743}{shadow} +\entry{/etc/nsswitch.conf}{744}{\file {/etc/nsswitch.conf}} +\entry{nsswitch.conf}{744}{\file {nsswitch.conf}} +\entry{DNS server unavailable}{745}{DNS server unavailable} +\entry{nisplus, and completeness}{745}{nisplus, and completeness} +\entry{nisplus, and booting}{745}{nisplus, and booting} +\entry{bootstrapping, and services}{745}{bootstrapping, and services} +\entry{default value, and NSS}{746}{default value, and NSS} +\entry{optimizing NSS}{746}{optimizing NSS} +\entry{reentrant NSS functions}{747}{reentrant NSS functions} +\entry{login name}{753}{login name} +\entry{user name}{753}{user name} +\entry{user ID}{753}{user ID} +\entry{group name}{753}{group name} +\entry{group ID}{753}{group ID} +\entry{persona}{753}{persona} +\entry{effective user ID}{753}{effective user ID} +\entry{effective group ID}{753}{effective group ID} +\entry{supplementary group IDs}{753}{supplementary group IDs} +\entry{real user ID}{753}{real user ID} +\entry{real group ID}{753}{real group ID} +\entry{setuid programs}{754}{\code {setuid} programs} +\entry{saved set-user-ID}{754}{saved set-user-ID} +\entry{saved set-group-ID}{754}{saved set-group-ID} +\entry{{\_}POSIX{\_}SAVED{\_}IDS}{754}{\code {_POSIX_SAVED_IDS}} +\entry{login name, determining}{762}{login name, determining} +\entry{user ID, determining}{762}{user ID, determining} +\entry{user accounting database}{763}{user accounting database} +\entry{user database}{771}{user database} +\entry{password database}{771}{password database} +\entry{converting user ID to user name}{771}{converting user ID to user name} +\entry{converting user name to user ID}{771}{converting user name to user ID} +\entry{scanning the user list}{772}{scanning the user list} +\entry{group database}{774}{group database} +\entry{converting group name to group ID}{774}{converting group name to group ID} +\entry{converting group ID to group name}{774}{converting group ID to group name} +\entry{scanning the group list}{775}{scanning the group list} +\entry{Netgroup}{777}{Netgroup} +\entry{host name}{781}{host name} +\entry{DNS}{781}{DNS} +\entry{Domain Name System}{781}{Domain Name System} +\entry{hostname}{781}{hostname} +\entry{domain name}{781}{domain name} +\entry{FQDN}{781}{FQDN} +\entry{YP}{781}{YP} +\entry{NIS}{781}{NIS} +\entry{NIS domain name}{781}{NIS domain name} +\entry{YP domain name}{781}{YP domain name} +\entry{/etc/hostname}{782}{/etc/hostname} +\entry{NIS domain name}{782}{NIS domain name} +\entry{YP domain name}{782}{YP domain name} +\entry{NIS domain name}{782}{NIS domain name} +\entry{YP domain name}{782}{YP domain name} +\entry{POSIX capacity limits}{797}{POSIX capacity limits} +\entry{limits, POSIX}{797}{limits, POSIX} +\entry{capacity limits, POSIX}{797}{capacity limits, POSIX} +\entry{limits, program argument size}{797}{limits, program argument size} +\entry{limits, number of processes}{797}{limits, number of processes} +\entry{limits, number of open files}{797}{limits, number of open files} +\entry{limits, time zone name length}{797}{limits, time zone name length} +\entry{limits, number of supplementary group IDs}{798}{limits, number of supplementary group IDs} +\entry{POSIX optional features}{798}{POSIX optional features} +\entry{optional POSIX features}{798}{optional POSIX features} +\entry{limits, link count of files}{810}{limits, link count of files} +\entry{limits, terminal input queue}{810}{limits, terminal input queue} +\entry{limits, file name length}{810}{limits, file name length} +\entry{limits, pipe buffer size}{811}{limits, pipe buffer size} +\entry{backtrace}{827}{backtrace} +\entry{backtrace{\_}symbols}{827}{backtrace_symbols} +\entry{backtrace{\_}fd}{827}{backtrace_fd} +\entry{consistency checking}{853}{consistency checking} +\entry{impossible events}{853}{impossible events} +\entry{assertions}{853}{assertions} +\entry{variable number of arguments}{854}{variable number of arguments} +\entry{variadic functions}{854}{variadic functions} +\entry{optional arguments}{854}{optional arguments} +\entry{function prototypes (variadic)}{855}{function prototypes (variadic)} +\entry{prototypes for variadic functions}{855}{prototypes for variadic functions} +\entry{variadic function prototypes}{855}{variadic function prototypes} +\entry{variadic function argument access}{856}{variadic function argument access} +\entry{arguments (variadic functions)}{856}{arguments (variadic functions)} +\entry{number of arguments passed}{856}{number of arguments passed} +\entry{how many arguments}{856}{how many arguments} +\entry{arguments, how many}{856}{arguments, how many} +\entry{variadic functions, calling}{857}{variadic functions, calling} +\entry{calling variadic functions}{857}{calling variadic functions} +\entry{declaring variadic functions}{857}{declaring variadic functions} +\entry{default argument promotions}{857}{default argument promotions} +\entry{argument promotion}{857}{argument promotion} +\entry{null pointer constant}{860}{null pointer constant} +\entry{integer type width}{862}{integer type width} +\entry{width of integer type}{862}{width of integer type} +\entry{type measurements, integer}{862}{type measurements, integer} +\entry{integer type range}{862}{integer type range} +\entry{range of integer type}{862}{range of integer type} +\entry{limits, integer types}{862}{limits, integer types} +\entry{floating type measurements}{864}{floating type measurements} +\entry{measurements of floating types}{864}{measurements of floating types} +\entry{type measurements, floating}{864}{type measurements, floating} +\entry{limits, floating types}{864}{limits, floating types} +\entry{sign (of floating point number)}{864}{sign (of floating point number)} +\entry{base (of floating point number)}{864}{base (of floating point number)} +\entry{radix (of floating point number)}{864}{radix (of floating point number)} +\entry{exponent (of floating point number)}{864}{exponent (of floating point number)} +\entry{bias (of floating point number exponent)}{864}{bias (of floating point number exponent)} +\entry{mantissa (of floating point number)}{864}{mantissa (of floating point number)} +\entry{significand (of floating point number)}{864}{significand (of floating point number)} +\entry{precision (of floating point number)}{864}{precision (of floating point number)} +\entry{hidden bit (of floating point number mantissa)}{864}{hidden bit (of floating point number mantissa)} +\entry{normalized floating point number}{865}{normalized floating point number} +\entry{IEEE floating point representation}{868}{IEEE floating point representation} +\entry{floating point, IEEE}{868}{floating point, IEEE} +\entry{configuring}{979}{configuring} +\entry{compiling}{979}{compiling} +\entry{installing}{982}{installing} +\entry{installation tools}{983}{installation tools} +\entry{tools, for installing library}{983}{tools, for installing library} +\entry{configurations, all supported}{984}{configurations, all supported} +\entry{upgrading from libc5}{986}{upgrading from libc5} +\entry{kernel header files}{986}{kernel header files} +\entry{reporting bugs}{986}{reporting bugs} +\entry{bugs, reporting}{986}{bugs, reporting} diff -durpNa glibc-2.2.2/manual/libc.cps glibc-2.2.3/manual/libc.cps --- glibc-2.2.2/manual/libc.cps Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.cps Wed Apr 25 16:05:56 2001 @@ -1,26 +1,26 @@ \initial {/} -\entry {/etc/hostname}{774} -\entry {\file {/etc/nsswitch.conf}}{736} +\entry {/etc/hostname}{782} +\entry {\file {/etc/nsswitch.conf}}{744} \initial {{\_}} \entry {__va_copy}{88} -\entry {\code {_POSIX_OPTION_ORDER} environment variable.}{696} -\entry {\code {_POSIX_SAVED_IDS}}{746} +\entry {\code {_POSIX_OPTION_ORDER} environment variable.}{704} +\entry {\code {_POSIX_SAVED_IDS}}{754} \initial {4} \entry {4.\var {n} BSD Unix}{3} \initial {A} -\entry {abort signal}{614} -\entry {aborting a program}{701} +\entry {abort signal}{622} +\entry {aborting a program}{709} \entry {absolute file name}{236} -\entry {absolute priority}{592} -\entry {absolute value functions}{533} +\entry {absolute priority}{594} +\entry {absolute value functions}{535} \entry {accepting connections}{436} -\entry {access permission for a file}{390} -\entry {access, testing for}{392} +\entry {access permission for a file}{391} +\entry {access, testing for}{393} \entry {accessing directories}{363} \entry {address of socket}{411} -\entry {address space}{600, 657} -\entry {alarm signal}{616} -\entry {alarms, setting}{580} +\entry {address space}{602, 665} +\entry {alarm signal}{624} +\entry {alarms, setting}{582} \entry {alignment (in obstacks)}{57} \entry {alignment (with \code {malloc})}{38} \entry {\code {alloca} disadvantages}{61} @@ -35,17 +35,17 @@ \entry {alphabetic character}{67, 71} \entry {alphanumeric character}{68, 70} \entry {append-access files}{235} -\entry {argc (program argument count)}{657} -\entry {argp (program argument parser)}{666} -\entry {argp parser functions}{671} -\entry {ARGP_HELP_FMT environment variable}{689} -\entry {argument parsing with argp}{666} -\entry {argument promotion}{849} +\entry {argc (program argument count)}{665} +\entry {argp (program argument parser)}{674} +\entry {argp parser functions}{679} +\entry {ARGP_HELP_FMT environment variable}{697} +\entry {argument parsing with argp}{674} +\entry {argument promotion}{857} \entry {argument vectors, null-character separated}{111} -\entry {arguments (variadic functions)}{848} -\entry {arguments, how many}{848} -\entry {arguments, to program}{657} -\entry {argv (program argument vector)}{657} +\entry {arguments (variadic functions)}{856} +\entry {arguments, how many}{856} +\entry {arguments, to program}{665} +\entry {argv (program argument vector)}{665} \entry {argz vectors (string vectors)}{111} \entry {arithmetic expansion}{227} \entry {array comparison functions}{92} @@ -53,23 +53,23 @@ \entry {array search function}{203} \entry {array sort function}{204} \entry {ASCII character}{69} -\entry {assertions}{845} -\entry {attributes of a file}{379} +\entry {assertions}{853} +\entry {attributes of a file}{380} \entry {automatic freeing}{60} \entry {automatic memory allocation}{33} \entry {automatic storage class}{33} \entry {automatic storage with variable size}{60} \initial {B} -\entry {background job}{715} -\entry {background job, launching}{725} -\entry {backtrace}{819} -\entry {backtrace_fd}{819} -\entry {backtrace_symbols}{819} -\entry {base (of floating point number)}{856} +\entry {background job}{723} +\entry {background job, launching}{733} +\entry {backtrace}{827} +\entry {backtrace_fd}{827} +\entry {backtrace_symbols}{827} +\entry {base (of floating point number)}{864} \entry {baud rate}{469} \entry {Berkeley Unix}{3} \entry {Bessel functions}{503} -\entry {bias (of floating point number exponent)}{856} +\entry {bias (of floating point number exponent)}{864} \entry {big-endian}{428} \entry {binary I/O to a stream}{257} \entry {binary search function (for arrays)}{203} @@ -77,37 +77,37 @@ \entry {binding a socket address}{411} \entry {blank character}{68, 73} \entry {block I/O to a stream}{257} -\entry {blocked signals}{610} -\entry {blocked signals, checking for}{647} -\entry {blocking signals}{642} -\entry {blocking signals, in a handler}{646} -\entry {bootstrapping, and services}{737} +\entry {blocked signals}{618} +\entry {blocked signals, checking for}{655} +\entry {blocking signals}{650} +\entry {blocking signals, in a handler}{654} +\entry {bootstrapping, and services}{745} \entry {break condition, detecting}{463} \entry {break condition, generating}{477} \entry {breaking a string into tokens}{104} -\entry {broken pipe signal}{618} -\entry {broken-down time}{555, 558} -\entry {BSD compatibility library}{731} +\entry {broken pipe signal}{626} +\entry {broken-down time}{557, 560} +\entry {BSD compatibility library}{739} \entry {BSD compatibility library.}{8} \entry {BSD Unix}{3} \entry {buffering of streams}{297} \entry {buffering, controlling}{299} -\entry {bugs, reporting}{976} -\entry {bus error}{613} -\entry {butterfly}{540} +\entry {bugs, reporting}{986} +\entry {bus error}{621} +\entry {butterfly}{542} \entry {byte order conversion, for socket}{428} \entry {byte stream}{409} \initial {C} \entry {C++ streams}{248} -\entry {calendar time}{551} -\entry {calendar time and broken-down time}{558} -\entry {calendar, Gregorian}{555} -\entry {calling variadic functions}{849} +\entry {calendar time}{553} +\entry {calendar time and broken-down time}{560} +\entry {calendar, Gregorian}{557} +\entry {calling variadic functions}{857} \entry {canonical input processing}{458} -\entry {capacity limits, POSIX}{789} +\entry {capacity limits, POSIX}{797} \entry {carrier detect}{465} \entry {case conversion of characters}{69} -\entry {catching signals}{610} +\entry {catching signals}{618} \entry {categories for locales}{162} \entry {change working directory}{361} \entry {changing the locale}{163} @@ -117,60 +117,60 @@ \entry {character case conversion}{69} \entry {character predicates}{67} \entry {character testing}{67} -\entry {checking for pending signals}{647} -\entry {child process}{555, 703, 704} -\entry {child process signal}{616} +\entry {checking for pending signals}{655} +\entry {child process}{557, 711, 712} +\entry {child process signal}{624} \entry {chunks}{58} -\entry {classes, floating-point}{522} +\entry {classes, floating-point}{524} \entry {classification of characters}{67} \entry {cleaning up a stream}{324} \entry {clearing terminal input queue}{478} \entry {client}{434} -\entry {clock ticks}{553} -\entry {clock, high accuracy}{561} +\entry {clock ticks}{555} +\entry {clock, high accuracy}{563} \entry {close-on-exec (file descriptor flag)}{349} \entry {closing a file descriptor}{313} \entry {closing a socket}{433} \entry {closing a stream}{243} \entry {collating strings}{95} \entry {combining locales}{162} -\entry {command argument syntax}{658} -\entry {command arguments, parsing}{659} -\entry {command line arguments}{657} +\entry {command argument syntax}{666} +\entry {command arguments, parsing}{667} +\entry {command line arguments}{665} \entry {command substitution}{227} \entry {communication style (of a socket)}{409} \entry {comparing strings and arrays}{92} \entry {Comparison Function}{203} -\entry {compiling}{969} +\entry {compiling}{979} \entry {complex exponentiation functions}{500} \entry {complex logarithm functions}{500} -\entry {complex numbers}{541} +\entry {complex numbers}{543} \entry {complex trigonometric functions}{495} \entry {concatenating strings}{81} -\entry {configurations, all supported}{974} -\entry {configuring}{969} -\entry {conjugate complex numbers}{541} +\entry {configurations, all supported}{984} +\entry {configuring}{979} +\entry {conjugate complex numbers}{543} \entry {connecting a socket}{434} \entry {connection}{434} -\entry {consistency checking}{845} +\entry {consistency checking}{853} \entry {consistency checking, of heap}{39} \entry {constants}{32, 493} -\entry {continue signal}{617} +\entry {continue signal}{625} \entry {control character}{68, 71} \entry {control operations on files}{345} -\entry {controlling process}{716} -\entry {controlling terminal}{715} -\entry {controlling terminal, access to}{716} -\entry {controlling terminal, determining}{730} +\entry {controlling process}{724} +\entry {controlling terminal}{723} +\entry {controlling terminal, access to}{724} +\entry {controlling terminal, determining}{738} \entry {controlling terminal, setting}{351} \entry {conversion specifications (\code {printf})}{259} \entry {conversion specifications (\code {scanf})}{282} \entry {converting byte order}{428} \entry {converting case of characters}{69} \entry {converting file descriptor to stream}{323} -\entry {converting floats to integers}{535} -\entry {converting group ID to group name}{766} -\entry {converting group name to group ID}{766} +\entry {converting floats to integers}{537} +\entry {converting group ID to group name}{774} +\entry {converting group name to group ID}{774} \entry {converting host address to name}{423} \entry {converting host name to address}{423} \entry {converting network name to network number}{454} @@ -178,69 +178,69 @@ \entry {converting port number to service name}{427} \entry {converting service name to port number}{427} \entry {converting string to collation order}{96} -\entry {converting strings to numbers}{542} -\entry {converting user ID to user name}{763} -\entry {converting user name to user ID}{763} +\entry {converting strings to numbers}{544} +\entry {converting user ID to user name}{771} +\entry {converting user name to user ID}{771} \entry {cookie, for custom stream}{305} \entry {copy-on-write page fault}{64} \entry {copying strings and arrays}{81} -\entry {cpu priority}{591} -\entry {CPU time}{551, 553, 554} +\entry {cpu priority}{593} +\entry {CPU time}{553, 555, 556} \entry {create on open (file status flag)}{351} -\entry {creating a directory}{379} +\entry {creating a directory}{380} \entry {creating a FIFO special file}{406} \entry {creating a pipe}{403} \entry {creating a pipe to a subprocess}{405} -\entry {creating a process}{704} +\entry {creating a process}{712} \entry {creating a socket}{432} \entry {creating a socket pair}{433} -\entry {creating special files}{397} +\entry {creating special files}{398} \entry {cube root function}{499} \entry {currency symbols}{167} -\entry {current limit}{587} +\entry {current limit}{589} \entry {current working directory}{361} \entry {custom streams}{305} \entry {customizing \code {printf}}{275} \initial {D} \entry {data loss on sockets}{409} -\entry {databases}{735} +\entry {databases}{743} \entry {datagram socket}{447} \entry {datagrams, transmitting}{447} -\entry {date}{551} -\entry {Daylight Saving Time}{559} +\entry {date}{553} +\entry {Daylight Saving Time}{561} \entry {decimal digit character}{68} \entry {decimal-point separator}{166} \entry {declaration (compared to definition)}{4} -\entry {declaring variadic functions}{849} -\entry {decompose complex numbers}{541} -\entry {default action (for a signal)}{610} -\entry {default action for a signal}{621} -\entry {default argument promotions}{849} -\entry {default value, and NSS}{738} +\entry {declaring variadic functions}{857} +\entry {decompose complex numbers}{543} +\entry {default action (for a signal)}{618} +\entry {default action for a signal}{629} +\entry {default argument promotions}{857} +\entry {default value, and NSS}{746} \entry {defining new \code {printf} conversions}{275} \entry {definition (compared to declaration)}{4} \entry {delayed suspend character}{473} -\entry {deleting a directory}{377} -\entry {deleting a file}{376} -\entry {delivery of signals}{610} +\entry {deleting a directory}{378} +\entry {deleting a file}{377} +\entry {delivery of signals}{618} \entry {descriptors and streams}{324} \entry {digit character}{68, 71} \entry {directories, accessing}{363} -\entry {directories, creating}{379} -\entry {directories, deleting}{377} +\entry {directories, creating}{380} +\entry {directories, deleting}{378} \entry {directory}{235} \entry {directory entry}{235} \entry {directory hierarchy}{370} \entry {directory stream}{363} \entry {disadvantages of \code {alloca}}{61} \entry {DISCARD character}{474} -\entry {division by zero}{524} -\entry {DNS}{773} -\entry {DNS server unavailable}{737} +\entry {division by zero}{526} +\entry {DNS}{781} +\entry {DNS server unavailable}{745} \entry {domain (of socket)}{409} -\entry {domain error}{529} -\entry {domain name}{773} -\entry {Domain Name System}{773} +\entry {domain error}{531} +\entry {domain name}{781} +\entry {Domain Name System}{781} \entry {dot notation, for Internet addresses}{419} \entry {DSUSP character}{473} \entry {duplicating file descriptors}{346} @@ -248,47 +248,47 @@ \initial {E} \entry {EBCDIC}{119} \entry {echo of terminal input}{467} -\entry {effective group ID}{745} -\entry {effective user ID}{745} +\entry {effective group ID}{753} +\entry {effective user ID}{753} \entry {efficiency and \code {malloc}}{38} \entry {efficiency and obstacks}{55} \entry {efficiency of chunks}{58} -\entry {EINTR, and restarting interrupted primitives}{638} -\entry {elapsed time}{551} +\entry {EINTR, and restarting interrupted primitives}{646} +\entry {elapsed time}{553} \entry {encryption}{109} \entry {end of file, on a stream}{291} \entry {end-of-file, on a file descriptor}{316} -\entry {environment}{693} -\entry {environment access}{693} -\entry {environment representation}{693} -\entry {environment variable}{692} +\entry {environment}{701} +\entry {environment access}{701} +\entry {environment representation}{701} +\entry {environment variable}{700} \entry {environment vectors, null-character separated}{111} \entry {envz vectors (environment vectors)}{111} \entry {EOF character}{471} \entry {EOL character}{471} \entry {EOL2 character}{471} -\entry {epoch}{556} +\entry {epoch}{558} \entry {ERASE character}{472} -\entry {errno}{697} +\entry {errno}{705} \entry {error codes}{15} -\entry {error messages, in argp}{674} +\entry {error messages, in argp}{682} \entry {error reporting}{15} -\entry {errors, mathematical}{529} -\entry {establishing a handler}{620} -\entry {ethers}{735} +\entry {errors, mathematical}{531} +\entry {establishing a handler}{628} +\entry {ethers}{743} \entry {EUC}{120} \entry {EUC-JP}{147} -\entry {exception}{524, 612} +\entry {exception}{526, 620} \entry {exclusive lock}{355} -\entry {\code {exec} functions}{706} +\entry {\code {exec} functions}{714} \entry {execing a program}{32} \entry {executable}{32} -\entry {executing a file}{706} -\entry {exit status}{699} -\entry {exit status value}{698} +\entry {executing a file}{714} +\entry {exit status}{707} +\entry {exit status value}{706} \entry {exiting a program}{32} -\entry {expansion of shell words}{226} -\entry {exponent (of floating point number)}{856} +\entry {expansion of shell words}{227} +\entry {exponent (of floating point number)}{864} \entry {exponentiation functions}{497} \entry {extending \code {printf}}{275} \entry {extracting file descriptor from stream}{323} @@ -297,24 +297,24 @@ \entry {feature test macros}{7} \entry {field splitting}{227} \entry {FIFO special file}{403} -\entry {file access permission}{390} -\entry {file access time}{393} -\entry {file attribute modification time}{393} -\entry {file attributes}{379} -\entry {file creation mask}{390} +\entry {file access permission}{391} +\entry {file access time}{394} +\entry {file attribute modification time}{394} +\entry {file attributes}{380} +\entry {file creation mask}{391} \entry {file descriptor flags}{348} \entry {file descriptor sets, for \code {select}}{330} \entry {file descriptors, standard}{323} \entry {file locks}{355} -\entry {file modification time}{393} +\entry {file modification time}{394} \entry {file name}{235} \entry {file name component}{235} \entry {file name errors}{236} \entry {file name resolution}{236} \entry {file name translation flags}{351} \entry {file names, multiple}{374} -\entry {file owner}{387} -\entry {file permission bits}{388} +\entry {file owner}{388} +\entry {file permission bits}{389} \entry {file pointer}{239} \entry {file position}{234} \entry {file positioning on a file descriptor}{320} @@ -324,121 +324,121 @@ \entry {filtering i/o through subprocess}{405} \entry {flag character (\code {printf})}{260} \entry {flag character (\code {scanf})}{283} -\entry {flags for \code {sigaction}}{625} +\entry {flags for \code {sigaction}}{633} \entry {flags, file name translation}{351} \entry {flags, open-time action}{351} -\entry {floating point}{522} -\entry {floating point, IEEE}{860} -\entry {floating type measurements}{856} -\entry {floating-point classes}{522} -\entry {floating-point exception}{612} +\entry {floating point}{524} +\entry {floating point, IEEE}{868} +\entry {floating type measurements}{864} +\entry {floating-point classes}{524} +\entry {floating-point exception}{620} \entry {flow control, terminal}{478} \entry {flushing a stream}{298} \entry {flushing terminal output queue}{477} -\entry {foreground job}{715} -\entry {foreground job, launching}{724} -\entry {forking a process}{704} +\entry {foreground job}{723} +\entry {foreground job, launching}{732} +\entry {forking a process}{712} \entry {format string, for \code {printf}}{258} \entry {format string, for \code {scanf}}{281} \entry {formatted input from a stream}{281} \entry {formatted messages}{307} \entry {formatted output to a stream}{258} -\entry {FP arithmetic}{538} -\entry {FQDN}{773} +\entry {FP arithmetic}{540} +\entry {FQDN}{781} \entry {frame, real memory}{31} \entry {freeing (obstacks)}{52} \entry {freeing memory}{32} \entry {freeing memory allocated with \code {malloc}}{35} \entry {fully buffered stream}{298} -\entry {function prototypes (variadic)}{847} +\entry {function prototypes (variadic)}{855} \initial {G} \entry {gamma function}{503} -\entry {gcvt_r}{550} +\entry {gcvt_r}{552} \entry {gencat}{184} -\entry {generation of signals}{610} +\entry {generation of signals}{618} \entry {generic i/o control operations}{358} \entry {globbing}{214} \entry {graphic character}{68, 71} -\entry {Gregorian calendar}{555} -\entry {group}{735} -\entry {group database}{766} -\entry {group ID}{745} -\entry {group name}{745} -\entry {group owner of a file}{387} +\entry {Gregorian calendar}{557} +\entry {group}{743} +\entry {group database}{774} +\entry {group ID}{753} +\entry {group name}{753} +\entry {group owner of a file}{388} \entry {grouping of digits}{166} \entry {growing objects (in obstacks)}{53} \initial {H} -\entry {handling multiple signals}{631} -\entry {hangup signal}{615} -\entry {hard limit}{587} +\entry {handling multiple signals}{639} +\entry {hangup signal}{623} +\entry {hard limit}{589} \entry {hard link}{374} \entry {header files}{4} \entry {heap consistency checking}{39} \entry {heap, dynamic allocation from}{34} \entry {heap, freeing memory from}{35} \entry {hexadecimal digit character}{68, 73} -\entry {hidden bit (of floating point number mantissa)}{856} +\entry {hidden bit (of floating point number mantissa)}{864} \entry {hierarchy, directory}{370} \entry {high-priority data}{444} -\entry {high-resolution time}{555} +\entry {high-resolution time}{557} \entry {holes in files}{321} -\entry {home directory}{695} -\entry {\code {HOME} environment variable}{695} +\entry {home directory}{703} +\entry {\code {HOME} environment variable}{703} \entry {hook functions (of custom streams)}{306} \entry {host address, Internet}{419} -\entry {host name}{773} -\entry {hostname}{773} -\entry {hosts}{735} +\entry {host name}{781} +\entry {hostname}{781} +\entry {hosts}{743} \entry {hosts database}{423} -\entry {how many arguments}{848} +\entry {how many arguments}{856} \entry {hyperbolic functions}{501} \initial {I} \entry {identifying terminals}{457} -\entry {IEEE 754}{522} -\entry {IEEE floating point}{522} -\entry {IEEE floating point representation}{860} +\entry {IEEE 754}{524} +\entry {IEEE floating point}{524} +\entry {IEEE floating point representation}{868} \entry {IEEE Std 1003.1}{2} \entry {IEEE Std 1003.2}{2} -\entry {ignore action for a signal}{621} -\entry {illegal instruction}{613} -\entry {impossible events}{845} +\entry {ignore action for a signal}{629} +\entry {illegal instruction}{621} +\entry {impossible events}{853} \entry {independent channels}{324} -\entry {inexact exception}{524} -\entry {infinity}{526} -\entry {initial signal actions}{626} -\entry {inode number}{383} -\entry {input available signal}{616} +\entry {inexact exception}{526} +\entry {infinity}{528} +\entry {initial signal actions}{634} +\entry {inode number}{384} +\entry {input available signal}{624} \entry {input conversions, for \code {scanf}}{283} \entry {input from multiple files}{330} -\entry {installation tools}{973} -\entry {installing}{972} -\entry {integer}{519} -\entry {integer division functions}{520} -\entry {integer type range}{854} -\entry {integer type width}{854} +\entry {installation tools}{983} +\entry {installing}{982} +\entry {integer}{521} +\entry {integer division functions}{522} +\entry {integer type range}{862} +\entry {integer type width}{862} \entry {interactive signals, from terminal}{468} -\entry {interactive stop signal}{617} +\entry {interactive stop signal}{625} \entry {internal representation}{117} \entry {internationalization}{161} \entry {Internet host address}{419} \entry {Internet namespace, for sockets}{417} \entry {interprocess communication, with FIFO}{406} \entry {interprocess communication, with pipes}{403} -\entry {interprocess communication, with signals}{641} +\entry {interprocess communication, with signals}{649} \entry {interprocess communication, with sockets}{409} \entry {interrupt character}{473} -\entry {interrupt signal}{614} +\entry {interrupt signal}{622} \entry {interrupt-driven input}{358} -\entry {interrupting primitives}{638} -\entry {interval}{551} -\entry {interval timer, setting}{580} +\entry {interrupting primitives}{646} +\entry {interval}{553} +\entry {interval timer, setting}{582} \entry {INTR character}{473} -\entry {invalid exception}{524} +\entry {invalid exception}{526} \entry {inverse complex hyperbolic functions}{502} \entry {inverse complex trigonometric functions}{496} \entry {inverse hyperbolic functions}{502} \entry {inverse trigonometric functions}{496} -\entry {invocation of program}{657} +\entry {invocation of program}{665} \entry {IOCTLs}{358} \entry {ISO 10646}{117} \entry {ISO 2022}{119} @@ -448,50 +448,51 @@ \entry {ISO/IEC 9945-1}{2} \entry {ISO/IEC 9945-2}{2} \initial {J} -\entry {job}{715} -\entry {job control}{715} -\entry {job control functions}{730} -\entry {job control is optional}{716} -\entry {job control signals}{616} -\entry {job control, enabling}{719} +\entry {job}{723} +\entry {job control}{723} +\entry {job control functions}{738} +\entry {job control is optional}{724} +\entry {job control signals}{624} +\entry {job control, enabling}{727} \initial {K} \entry {Kermit the frog}{207} -\entry {kernel call}{696} -\entry {kernel header files}{976} +\entry {kernel call}{704} +\entry {kernel header files}{986} \entry {KILL character}{472} -\entry {kill signal}{615} -\entry {killing a process}{639} +\entry {kill signal}{623} +\entry {killing a process}{647} +\entry {Korn Shell}{214} \initial {L} \entry {LANG environment variable}{181} -\entry {\code {LANG} environment variable}{696} -\entry {launching jobs}{721} +\entry {\code {LANG} environment variable}{704} +\entry {launching jobs}{729} \entry {LC_ALL environment variable}{181} -\entry {\code {LC_ALL} environment variable}{696} -\entry {\code {LC_COLLATE} environment variable}{696} -\entry {\code {LC_CTYPE} environment variable}{696} +\entry {\code {LC_ALL} environment variable}{704} +\entry {\code {LC_COLLATE} environment variable}{704} +\entry {\code {LC_CTYPE} environment variable}{704} \entry {LC_MESSAGES environment variable}{181} -\entry {\code {LC_MESSAGES} environment variable}{696} -\entry {\code {LC_MONETARY} environment variable}{696} -\entry {\code {LC_NUMERIC} environment variable}{696} -\entry {\code {LC_TIME} environment variable}{696} -\entry {leap second}{559} +\entry {\code {LC_MESSAGES} environment variable}{704} +\entry {\code {LC_MONETARY} environment variable}{704} +\entry {\code {LC_NUMERIC} environment variable}{704} +\entry {\code {LC_TIME} environment variable}{704} +\entry {leap second}{561} \entry {length of string}{78} \entry {level, for socket options}{452} \entry {library}{1} -\entry {limit}{587} -\entry {limits on resource usage}{587} -\entry {limits, file name length}{802} -\entry {limits, floating types}{856} -\entry {limits, integer types}{854} -\entry {limits, link count of files}{802} -\entry {limits, number of open files}{789} -\entry {limits, number of processes}{789} -\entry {limits, number of supplementary group IDs}{790} -\entry {limits, pipe buffer size}{803} -\entry {limits, POSIX}{789} -\entry {limits, program argument size}{789} -\entry {limits, terminal input queue}{802} -\entry {limits, time zone name length}{789} +\entry {limit}{589} +\entry {limits on resource usage}{589} +\entry {limits, file name length}{810} +\entry {limits, floating types}{864} +\entry {limits, integer types}{862} +\entry {limits, link count of files}{810} +\entry {limits, number of open files}{797} +\entry {limits, number of processes}{797} +\entry {limits, number of supplementary group IDs}{798} +\entry {limits, pipe buffer size}{811} +\entry {limits, POSIX}{797} +\entry {limits, program argument size}{797} +\entry {limits, terminal input queue}{810} +\entry {limits, time zone name length}{797} \entry {line buffered stream}{298} \entry {line speed}{469} \entry {lines (in a text file)}{293} @@ -504,48 +505,48 @@ \entry {literals}{32} \entry {little-endian}{428} \entry {LNEXT character}{474} -\entry {load average}{603} +\entry {load average}{605} \entry {local namespace, for sockets}{415} \entry {local network address number}{419} -\entry {local time}{555} +\entry {local time}{557} \entry {locale categories}{162} \entry {locale, changing}{163} \entry {locales}{161} \entry {locking pages}{63} \entry {logarithm functions}{497} -\entry {login name}{745} -\entry {login name, determining}{754} -\entry {\code {LOGNAME} environment variable}{695} -\entry {long jumps}{605} -\entry {long-named options}{658} +\entry {login name}{753} +\entry {login name, determining}{762} +\entry {\code {LOGNAME} environment variable}{703} +\entry {long jumps}{607} +\entry {long-named options}{666} \entry {longjmp}{61} \entry {loss of data on sockets}{409} -\entry {lost resource signal}{618} +\entry {lost resource signal}{626} \entry {lower-case character}{67, 72} \initial {M} \entry {macros}{53} -\entry {\code {main} function}{657} +\entry {\code {main} function}{665} \entry {malloc debugger}{46} \entry {\code {malloc} function}{34} -\entry {mantissa (of floating point number)}{856} +\entry {mantissa (of floating point number)}{864} \entry {matching failure, in \code {scanf}}{282} \entry {math errors}{505} \entry {mathematical constants}{493} -\entry {maximum}{540} +\entry {maximum}{542} \entry {maximum field width (\code {scanf})}{283} -\entry {maximum limit}{587} -\entry {maximum possible integer}{520} -\entry {measurements of floating types}{856} +\entry {maximum limit}{589} +\entry {maximum possible integer}{522} +\entry {measurements of floating types}{864} \entry {memory allocation}{31} \entry {memory lock}{63} \entry {memory mapped file}{32} \entry {memory mapped I/O}{32} -\entry {memory page}{601} -\entry {merging of signals}{631} +\entry {memory page}{603} +\entry {merging of signals}{639} \entry {MIN termios slot}{475} -\entry {minimum}{540} +\entry {minimum}{542} \entry {minimum field width (\code {printf})}{260} -\entry {mininum possible integer}{520} +\entry {mininum possible integer}{522} \entry {mixing descriptors and streams}{324} \entry {modem disconnect}{465} \entry {modem status lines}{465} @@ -556,42 +557,42 @@ \entry {multibyte string}{78} \entry {multiple names for one file}{374} \entry {multiplexing input}{330} -\entry {multiply-add}{540} +\entry {multiply-add}{542} \initial {N} \entry {name of running program}{28} \entry {name of socket}{411} -\entry {Name Service Switch}{735} +\entry {Name Service Switch}{743} \entry {name space}{5} -\entry {names of signals}{611} +\entry {names of signals}{619} \entry {namespace (of socket)}{409} -\entry {NaN}{526, 539} -\entry {netgroup}{735} -\entry {Netgroup}{769} +\entry {NaN}{528, 541} +\entry {netgroup}{743} +\entry {Netgroup}{777} \entry {network byte order}{428} \entry {network number}{419} \entry {network protocol}{409} -\entry {networks}{735} +\entry {networks}{743} \entry {networks database}{454} -\entry {NIS}{773} -\entry {NIS domain name}{773, 774} -\entry {nisplus, and booting}{737} -\entry {nisplus, and completeness}{737} +\entry {NIS}{781} +\entry {NIS domain name}{781, 782} +\entry {nisplus, and booting}{745} +\entry {nisplus, and completeness}{745} \entry {NLSPATH environment variable}{180} -\entry {\code {NLSPATH} environment variable}{696} +\entry {\code {NLSPATH} environment variable}{704} \entry {non-blocking open}{351} -\entry {non-local exit, from signal handler}{629} -\entry {non-local exits}{605} +\entry {non-local exit, from signal handler}{637} +\entry {non-local exits}{607} \entry {noncanonical input processing}{458} -\entry {normalization functions (floating-point)}{534} -\entry {normalized floating point number}{857} -\entry {not a number}{526} -\entry {NSS}{735} -\entry {\file {nsswitch.conf}}{736} +\entry {normalization functions (floating-point)}{536} +\entry {normalized floating point number}{865} +\entry {not a number}{528} +\entry {NSS}{743} +\entry {\file {nsswitch.conf}}{744} \entry {null character}{77} -\entry {null pointer constant}{852} +\entry {null pointer constant}{860} \entry {null wide character}{77} -\entry {number of arguments passed}{848} -\entry {number syntax, parsing}{542} +\entry {number of arguments passed}{856} +\entry {number syntax, parsing}{544} \entry {numeric value formatting}{166} \initial {O} \entry {obstack status}{57} @@ -605,101 +606,101 @@ \entry {opening a socket pair}{433} \entry {opening a stream}{240} \entry {Optimization}{518} -\entry {optimizing NSS}{738} -\entry {option parsing with argp}{666} -\entry {optional arguments}{846} -\entry {optional POSIX features}{790} +\entry {optimizing NSS}{746} +\entry {option parsing with argp}{674} +\entry {optional arguments}{854} +\entry {optional POSIX features}{798} \entry {orientation, stream}{241, 248} -\entry {orphaned process group}{717} +\entry {orphaned process group}{725} \entry {out-of-band data}{444} \entry {output conversions, for \code {printf}}{261} -\entry {output possible signal}{616} -\entry {overflow exception}{524} -\entry {owner of a file}{387} +\entry {output possible signal}{624} +\entry {overflow exception}{526} +\entry {owner of a file}{388} \initial {P} \entry {packet}{409} \entry {page boundary}{38} \entry {page fault}{31} \entry {page fault, copy-on-write}{64} \entry {page frame}{31} -\entry {page, memory}{601} +\entry {page, memory}{603} \entry {page, virtual memory}{31} \entry {paging}{31, 63} \entry {parameter promotion}{79} \entry {parent directory}{236} -\entry {parent process}{703, 704} +\entry {parent process}{711, 712} \entry {parity checking}{462} \entry {parsing a template string}{272} -\entry {parsing numbers (in formatted input)}{542} -\entry {parsing program arguments}{659} +\entry {parsing numbers (in formatted input)}{544} +\entry {parsing program arguments}{667} \entry {parsing tokens from a string}{104} -\entry {passwd}{735} -\entry {password database}{763} -\entry {\code {PATH} environment variable}{695} -\entry {\code {pause} function}{649} +\entry {passwd}{743} +\entry {password database}{771} +\entry {\code {PATH} environment variable}{703} +\entry {\code {pause} function}{657} \entry {peeking at input}{256} -\entry {pending signals}{610} -\entry {pending signals, checking for}{647} -\entry {period of time}{551} -\entry {permission to access a file}{390} -\entry {persona}{745} -\entry {physical address}{600} -\entry {physical memory}{600} +\entry {pending signals}{618} +\entry {pending signals, checking for}{655} +\entry {period of time}{553} +\entry {permission to access a file}{391} +\entry {persona}{753} +\entry {physical address}{602} +\entry {physical memory}{602} \entry {pi (trigonometric constant)}{494} \entry {pipe}{403} -\entry {pipe signal}{618} +\entry {pipe signal}{626} \entry {pipe to a subprocess}{405} \entry {port number}{426} \entry {positioning a file descriptor}{320} \entry {positioning a stream}{293} -\entry {positive difference}{540} +\entry {positive difference}{542} \entry {POSIX}{2} -\entry {POSIX capacity limits}{789} -\entry {POSIX optional features}{790} +\entry {POSIX capacity limits}{797} +\entry {POSIX optional features}{798} \entry {POSIX.1}{2} \entry {POSIX.2}{2} \entry {power functions}{497} -\entry {precision (of floating point number)}{856} +\entry {precision (of floating point number)}{864} \entry {precision (\code {printf})}{260} \entry {predicates on arrays}{92} \entry {predicates on characters}{67} \entry {predicates on strings}{92} -\entry {preemptive scheduling}{592} -\entry {primitives, interrupting}{638} +\entry {preemptive scheduling}{594} +\entry {primitives, interrupting}{646} \entry {printing character}{68, 72} -\entry {priority of a process}{591} -\entry {priority, absolute}{592} -\entry {process}{657, 703} -\entry {process completion}{708} -\entry {process group functions}{730} -\entry {process group ID}{721} -\entry {process group leader}{721} -\entry {process groups}{715} -\entry {process ID}{704} -\entry {process image}{704} -\entry {process lifetime}{704} -\entry {process priority}{591} -\entry {process signal mask}{644} -\entry {process termination}{698} -\entry {processor time}{551, 554} -\entry {profiling alarm signal}{616} -\entry {profiling timer}{581} -\entry {program}{657} -\entry {program argument syntax}{658} -\entry {program arguments}{657} -\entry {program arguments, parsing}{659} -\entry {program error signals}{611} +\entry {priority of a process}{593} +\entry {priority, absolute}{594} +\entry {process}{665, 711} +\entry {process completion}{716} +\entry {process group functions}{738} +\entry {process group ID}{729} +\entry {process group leader}{729} +\entry {process groups}{723} +\entry {process ID}{712} +\entry {process image}{712} +\entry {process lifetime}{712} +\entry {process priority}{593} +\entry {process signal mask}{652} +\entry {process termination}{706} +\entry {processor time}{553, 556} +\entry {profiling alarm signal}{624} +\entry {profiling timer}{583} +\entry {program}{665} +\entry {program argument syntax}{666} +\entry {program arguments}{665} +\entry {program arguments, parsing}{667} +\entry {program error signals}{619} \entry {program name}{28} -\entry {program startup}{657} -\entry {program termination}{698} -\entry {program termination signals}{614} +\entry {program startup}{665} +\entry {program termination}{706} +\entry {program termination signals}{622} \entry {programming your own streams}{305} -\entry {project complex numbers}{541} +\entry {project complex numbers}{543} \entry {protocol (of socket)}{409} \entry {protocol family}{409} -\entry {protocols}{735} +\entry {protocols}{743} \entry {protocols database}{429} -\entry {prototypes for variadic functions}{847} +\entry {prototypes for variadic functions}{855} \entry {pseudo-random numbers}{511} \entry {pseudo-terminals}{480} \entry {punctuation character}{68, 72} @@ -707,17 +708,17 @@ \initial {Q} \entry {quick sort function (for arrays)}{204} \entry {QUIT character}{473} -\entry {quit signal}{615} +\entry {quit signal}{623} \entry {quote removal}{227} \initial {R} -\entry {race conditions, relating to job control}{721} -\entry {race conditions, relating to signals}{630} -\entry {radix (of floating point number)}{856} -\entry {raising signals}{638} +\entry {race conditions, relating to job control}{729} +\entry {race conditions, relating to signals}{638} +\entry {radix (of floating point number)}{864} +\entry {raising signals}{646} \entry {random numbers}{511} \entry {random-access files}{234} -\entry {range error}{529} -\entry {range of integer type}{854} +\entry {range error}{531} +\entry {range of integer type}{862} \entry {read lock}{355} \entry {reading from a directory}{363} \entry {reading from a file descriptor}{316} @@ -725,90 +726,90 @@ \entry {reading from a stream, by blocks}{257} \entry {reading from a stream, by characters}{251} \entry {reading from a stream, formatted}{281} -\entry {ready to run}{592} -\entry {real group ID}{745} -\entry {real user ID}{745} -\entry {real-time timer}{580} -\entry {realtime CPU scheduling}{592} +\entry {ready to run}{594} +\entry {real group ID}{753} +\entry {real user ID}{753} +\entry {real-time timer}{582} +\entry {realtime CPU scheduling}{594} \entry {realtime processing}{63} -\entry {realtime scheduling}{593} +\entry {realtime scheduling}{595} \entry {receiving datagrams}{447} \entry {record locking}{355} \entry {redirecting input and output}{346} -\entry {reentrant functions}{634} -\entry {reentrant NSS functions}{739} +\entry {reentrant functions}{642} +\entry {reentrant NSS functions}{747} \entry {relative file name}{236} \entry {removal of quotes}{227} -\entry {removing a file}{376} +\entry {removing a file}{377} \entry {removing macros that shadow functions}{5} -\entry {renaming a file}{377} -\entry {reporting bugs}{976} +\entry {renaming a file}{378} +\entry {reporting bugs}{986} \entry {reporting errors}{15} \entry {REPRINT character}{472} \entry {reserved names}{5} -\entry {resource limits}{587} -\entry {restarting interrupted primitives}{638} -\entry {restrictions on signal handler functions}{633} +\entry {resource limits}{589} +\entry {restarting interrupted primitives}{646} +\entry {restrictions on signal handler functions}{641} \entry {root directory}{236} \entry {Rot13}{109} -\entry {rpc}{735} -\entry {runnable process}{592} -\entry {running a command}{703} +\entry {rpc}{743} +\entry {runnable process}{594} +\entry {running a command}{711} \initial {S} -\entry {saved set-group-ID}{746} -\entry {saved set-user-ID}{746} -\entry {scanning the group list}{767} -\entry {scanning the user list}{764} +\entry {saved set-group-ID}{754} +\entry {saved set-user-ID}{754} +\entry {scanning the group list}{775} +\entry {scanning the user list}{772} \entry {scatter-gather}{325} -\entry {scheduling, traditional}{597} +\entry {scheduling, traditional}{599} \entry {search function (for arrays)}{203} \entry {search functions (for strings)}{99} \entry {seed (for random numbers)}{511} \entry {seeking on a file descriptor}{320} \entry {seeking on a stream}{293} -\entry {segmentation violation}{613} +\entry {segmentation violation}{621} \entry {sending a datagram}{447} -\entry {sending signals}{638} +\entry {sending signals}{646} \entry {sequential-access files}{234} \entry {server}{434} -\entry {services}{735} +\entry {services}{743} \entry {services database}{427} -\entry {session}{715} -\entry {session leader}{715} -\entry {setting an alarm}{580} -\entry {\code {setuid} programs}{746} -\entry {setuid programs and file access}{392} +\entry {session}{723} +\entry {session leader}{723} +\entry {setting an alarm}{582} +\entry {\code {setuid} programs}{754} +\entry {setuid programs and file access}{393} \entry {severity class}{308, 310} \entry {sgettext}{198} -\entry {shadow}{735} +\entry {shadow}{743} \entry {shadowing functions with macros}{5} \entry {shared lock}{355} -\entry {shared memory}{600} -\entry {shell}{715} +\entry {shared memory}{602} +\entry {shell}{723} \entry {shift state}{123} \entry {shrinking objects}{55} \entry {shutting down a socket}{433} -\entry {\code {sigaction} flags}{625} -\entry {\code {sigaction} function}{622} -\entry {\code {SIGCHLD}, handling of}{726} -\entry {sign (of floating point number)}{856} -\entry {signal}{524, 609} -\entry {signal action}{610} -\entry {signal actions}{620} -\entry {signal flags}{625} -\entry {\code {signal} function}{620} -\entry {signal handler function}{626} -\entry {signal mask}{644} -\entry {signal messages}{619} -\entry {signal names}{611} -\entry {signal number}{611} -\entry {signal set}{643} -\entry {signals, generating}{638} -\entry {signedness}{519} -\entry {significand (of floating point number)}{856} -\entry {\code {SIGTTIN}, from background job}{716} -\entry {\code {SIGTTOU}, from background job}{717} -\entry {simple time}{555} +\entry {\code {sigaction} flags}{633} +\entry {\code {sigaction} function}{630} +\entry {\code {SIGCHLD}, handling of}{734} +\entry {sign (of floating point number)}{864} +\entry {signal}{526, 617} +\entry {signal action}{618} +\entry {signal actions}{628} +\entry {signal flags}{633} +\entry {\code {signal} function}{628} +\entry {signal handler function}{634} +\entry {signal mask}{652} +\entry {signal messages}{627} +\entry {signal names}{619} +\entry {signal number}{619} +\entry {signal set}{651} +\entry {signals, generating}{646} +\entry {signedness}{521} +\entry {significand (of floating point number)}{864} +\entry {\code {SIGTTIN}, from background job}{724} +\entry {\code {SIGTTOU}, from background job}{725} +\entry {simple time}{557} \entry {single-byte string}{78} \entry {size of string}{78} \entry {SJIS}{120} @@ -829,18 +830,18 @@ \entry {sockets, accepting connections}{436} \entry {sockets, listening}{436} \entry {sockets, server actions}{436} -\entry {soft limit}{587} +\entry {soft limit}{589} \entry {soft link}{375} \entry {sort function (for arrays)}{204} \entry {sparse files}{321} -\entry {special files}{397} +\entry {special files}{398} \entry {special functions}{503} -\entry {specified action (for a signal)}{610} +\entry {specified action (for a signal)}{618} \entry {speed of execution}{63} \entry {square root function}{499} \entry {stable sorting}{204} \entry {standard dot notation, for Internet addresses}{419} -\entry {standard environment variables}{695} +\entry {standard environment variables}{703} \entry {standard error file descriptor}{323} \entry {standard error stream}{240} \entry {standard file descriptors}{323} @@ -851,20 +852,20 @@ \entry {standard streams}{239} \entry {standards}{1} \entry {START character}{474} -\entry {startup of program}{657} +\entry {startup of program}{665} \entry {stateful}{122, 125, 131, 141, 144, 156} \entry {static memory allocation}{33} \entry {static storage class}{33} \entry {STATUS character}{475} \entry {status codes}{15} -\entry {status of a file}{379} +\entry {status of a file}{380} \entry {status of obstack}{57} -\entry {sticky bit}{389} +\entry {sticky bit}{390} \entry {STOP character}{474} -\entry {stop signal}{617} -\entry {stopped job}{716} -\entry {stopped jobs, continuing}{728} -\entry {stopped jobs, detecting}{725} +\entry {stop signal}{625} +\entry {stopped job}{724} +\entry {stopped jobs, continuing}{736} +\entry {stopped jobs, detecting}{733} \entry {storage allocation}{31} \entry {stream (sockets)}{409} \entry {stream orientation}{241, 248} @@ -886,12 +887,12 @@ \entry {string vectors, null-character separated}{111} \entry {string, representation of}{77} \entry {style of communication (of a socket)}{409} -\entry {subshell}{719} -\entry {substitution of variables and commands}{226} -\entry {successive signals}{631} -\entry {summer time}{559} +\entry {subshell}{727} +\entry {substitution of variables and commands}{227} +\entry {successive signals}{639} +\entry {summer time}{561} \entry {SunOS}{3} -\entry {supplementary group IDs}{745} +\entry {supplementary group IDs}{753} \entry {SUSP character}{473} \entry {suspend character}{473} \entry {SVID}{3} @@ -899,23 +900,23 @@ \entry {symbolic link}{375} \entry {symbolic link, opening}{352} \entry {synchronizing}{333, 342} -\entry {syntax error messages, in argp}{674} -\entry {syntax, for program arguments}{658} -\entry {syntax, for reading numbers}{542} -\entry {sysconf}{601, 602} -\entry {system call}{696} -\entry {system call number}{697} +\entry {syntax error messages, in argp}{682} +\entry {syntax, for program arguments}{666} +\entry {syntax, for reading numbers}{544} +\entry {sysconf}{603, 604} +\entry {system call}{704} +\entry {system call number}{705} \entry {System V Unix}{3} \initial {T} \entry {TCP (Internet protocol)}{429} \entry {template, for \code {printf}}{258} \entry {template, for \code {scanf}}{281} -\entry {\code {TERM} environment variable}{695} +\entry {\code {TERM} environment variable}{703} \entry {terminal flow control}{478} \entry {terminal identification}{457} \entry {terminal input queue}{458} \entry {terminal input queue, clearing}{478} -\entry {terminal input signal}{617} +\entry {terminal input signal}{625} \entry {terminal line control functions}{477} \entry {terminal line speed}{469} \entry {terminal mode data types}{459} @@ -923,98 +924,98 @@ \entry {terminal modes, BSD}{476} \entry {terminal output queue}{458} \entry {terminal output queue, flushing}{477} -\entry {terminal output signal}{618} -\entry {terminated jobs, detecting}{725} -\entry {termination signal}{614} -\entry {testing access permission}{392} -\entry {testing exit status of child process}{708} +\entry {terminal output signal}{626} +\entry {terminated jobs, detecting}{733} +\entry {termination signal}{622} +\entry {testing access permission}{393} +\entry {testing exit status of child process}{716} \entry {text stream}{292} -\entry {thrashing}{601} -\entry {thread of control}{657} +\entry {thrashing}{603} +\entry {thread of control}{665} \entry {threads}{244} -\entry {ticks, clock}{553} -\entry {tilde expansion}{226} -\entry {time}{551} +\entry {ticks, clock}{555} +\entry {tilde expansion}{227} +\entry {time}{553} \entry {TIME termios slot}{475} -\entry {time zone}{577} -\entry {time zone database}{578} -\entry {time, elapsed}{551} -\entry {time, high precision}{561} -\entry {timer, profiling}{581} -\entry {timer, real-time}{580} -\entry {timer, virtual}{580} -\entry {timers, setting}{580} -\entry {timespec}{552} -\entry {timeval}{552} -\entry {timing error in signal handling}{649} -\entry {TMPDIR environment variable}{400} +\entry {time zone}{579} +\entry {time zone database}{580} +\entry {time, elapsed}{553} +\entry {time, high precision}{563} +\entry {timer, profiling}{583} +\entry {timer, real-time}{582} +\entry {timer, virtual}{582} +\entry {timers, setting}{582} +\entry {timespec}{554} +\entry {timeval}{554} +\entry {timing error in signal handling}{657} +\entry {TMPDIR environment variable}{401} \entry {tokenizing strings}{104} -\entry {tools, for installing library}{973} +\entry {tools, for installing library}{983} \entry {transmitting datagrams}{447} \entry {tree, directory}{370} \entry {triangulation}{147} \entry {trigonometric functions}{494} -\entry {type measurements, floating}{856} -\entry {type measurements, integer}{854} +\entry {type measurements, floating}{864} +\entry {type measurements, integer}{862} \entry {type modifier character (\code {printf})}{261} \entry {type modifier character (\code {scanf})}{283} \entry {typeahead buffer}{458} -\entry {\code {TZ} environment variable}{696} +\entry {\code {TZ} environment variable}{704} \initial {U} \entry {UCS-2}{117} \entry {UCS-4}{117} \entry {ulps}{505} -\entry {umask}{390} +\entry {umask}{391} \entry {unbuffered stream}{298} \entry {unconstrained memory allocation}{34} \entry {undefining macros that shadow functions}{5} -\entry {underflow exception}{524} +\entry {underflow exception}{526} \entry {Unicode}{117} \entry {Unix, Berkeley}{3} \entry {Unix, System V}{3} -\entry {unlinking a file}{376} -\entry {unordered comparison}{539} +\entry {unlinking a file}{377} +\entry {unordered comparison}{541} \entry {unreading characters}{256} -\entry {upgrading from libc5}{976} +\entry {upgrading from libc5}{986} \entry {upper-case character}{67, 73} -\entry {urgent data signal}{616} +\entry {urgent data signal}{624} \entry {urgent socket condition}{444} -\entry {usage limits}{587} -\entry {usage messages, in argp}{674} -\entry {user accounting database}{755} -\entry {user database}{763} -\entry {user ID}{745} -\entry {user ID, determining}{754} -\entry {user name}{745} -\entry {user signals}{619} +\entry {usage limits}{589} +\entry {usage messages, in argp}{682} +\entry {user accounting database}{763} +\entry {user database}{771} +\entry {user ID}{753} +\entry {user ID, determining}{762} +\entry {user name}{753} +\entry {user signals}{627} \entry {usual file name errors}{236} \entry {UTF-16}{117} \entry {UTF-7}{120} \entry {UTF-8}{117, 120} \initial {V} \entry {va_copy}{88} -\entry {variable number of arguments}{846} -\entry {variable substitution}{226} +\entry {variable number of arguments}{854} +\entry {variable substitution}{227} \entry {variable-sized arrays}{62} -\entry {variadic function argument access}{848} -\entry {variadic function prototypes}{847} -\entry {variadic functions}{846} -\entry {variadic functions, calling}{849} -\entry {virtual time alarm signal}{616} -\entry {virtual timer}{580} -\entry {\code {volatile} declarations}{634} +\entry {variadic function argument access}{856} +\entry {variadic function prototypes}{855} +\entry {variadic functions}{854} +\entry {variadic functions, calling}{857} +\entry {virtual time alarm signal}{624} +\entry {virtual timer}{582} +\entry {\code {volatile} declarations}{642} \initial {W} -\entry {waiting for a signal}{649} -\entry {waiting for completion of child process}{708} +\entry {waiting for a signal}{657} +\entry {waiting for completion of child process}{716} \entry {waiting for input or output}{330} \entry {WERASE character}{472} \entry {whitespace character}{68, 72} \entry {wide character}{117} \entry {wide character string}{77, 78} -\entry {width of integer type}{854} +\entry {width of integer type}{862} \entry {wildcard expansion}{227} \entry {wint_t}{79} -\entry {word expansion}{226} +\entry {word expansion}{227} \entry {working directory}{361} \entry {write lock}{355} \entry {writing to a file descriptor}{318} @@ -1023,7 +1024,7 @@ \entry {writing to a stream, by characters}{249} \entry {writing to a stream, formatted}{258} \initial {Y} -\entry {YP}{773} -\entry {YP domain name}{773, 774} +\entry {YP}{781} +\entry {YP domain name}{781, 782} \initial {Z} -\entry {zero divide}{524} +\entry {zero divide}{526} diff -durpNa glibc-2.2.2/manual/libc.fn glibc-2.2.3/manual/libc.fn --- glibc-2.2.2/manual/libc.fn Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.fn Wed Apr 25 16:06:31 2001 @@ -232,16 +232,16 @@ \entry{tdestroy}{211}{\code {tdestroy}} \entry{twalk}{212}{\code {twalk}} \entry{fnmatch}{213}{\code {fnmatch}} -\entry{glob}{216}{\code {glob}} -\entry{glob64}{217}{\code {glob64}} -\entry{globfree}{220}{\code {globfree}} +\entry{glob}{217}{\code {glob}} +\entry{glob64}{218}{\code {glob64}} +\entry{globfree}{221}{\code {globfree}} \entry{globfree64}{221}{\code {globfree64}} -\entry{regcomp}{221}{\code {regcomp}} -\entry{regexec}{223}{\code {regexec}} -\entry{regfree}{225}{\code {regfree}} +\entry{regcomp}{222}{\code {regcomp}} +\entry{regexec}{224}{\code {regexec}} +\entry{regfree}{226}{\code {regfree}} \entry{regerror}{226}{\code {regerror}} -\entry{wordexp}{227}{\code {wordexp}} -\entry{wordfree}{228}{\code {wordfree}} +\entry{wordexp}{228}{\code {wordexp}} +\entry{wordfree}{229}{\code {wordfree}} \entry{fopen}{240}{\code {fopen}} \entry{fopen64}{241}{\code {fopen64}} \entry{freopen}{242}{\code {freopen}} @@ -266,7 +266,7 @@ \entry{putc{\_}unlocked}{250}{\code {putc_unlocked}} \entry{putwc{\_}unlocked}{250}{\code {putwc_unlocked}} \entry{putchar}{250}{\code {putchar}} -\entry{putchar}{250}{\code {putchar}} +\entry{putwchar}{250}{\code {putwchar}} \entry{putchar{\_}unlocked}{250}{\code {putchar_unlocked}} \entry{putwchar{\_}unlocked}{250}{\code {putwchar_unlocked}} \entry{fputs}{250}{\code {fputs}} @@ -450,52 +450,54 @@ \entry{nftw}{373}{\code {nftw}} \entry{nftw64}{374}{\code {nftw64}} \entry{link}{374}{\code {link}} -\entry{symlink}{375}{\code {symlink}} +\entry{symlink}{376}{\code {symlink}} \entry{readlink}{376}{\code {readlink}} -\entry{unlink}{376}{\code {unlink}} -\entry{rmdir}{377}{\code {rmdir}} -\entry{remove}{377}{\code {remove}} -\entry{rename}{377}{\code {rename}} -\entry{mkdir}{379}{\code {mkdir}} -\entry{stat}{383}{\code {stat}} -\entry{stat64}{384}{\code {stat64}} -\entry{fstat}{384}{\code {fstat}} -\entry{fstat64}{384}{\code {fstat64}} -\entry{lstat}{384}{\code {lstat}} -\entry{lstat64}{384}{\code {lstat64}} -\entry{S{\_}ISDIR}{385}{\code {S_ISDIR}} -\entry{S{\_}ISCHR}{385}{\code {S_ISCHR}} -\entry{S{\_}ISBLK}{385}{\code {S_ISBLK}} -\entry{S{\_}ISREG}{385}{\code {S_ISREG}} -\entry{S{\_}ISFIFO}{385}{\code {S_ISFIFO}} -\entry{S{\_}ISLNK}{385}{\code {S_ISLNK}} -\entry{S{\_}ISSOCK}{385}{\code {S_ISSOCK}} -\entry{S{\_}TYPEISMQ}{386}{\code {S_TYPEISMQ}} -\entry{S{\_}TYPEISSEM}{386}{\code {S_TYPEISSEM}} -\entry{S{\_}TYPEISSHM}{386}{\code {S_TYPEISSHM}} -\entry{chown}{387}{\code {chown}} -\entry{fchown}{387}{\code {fchown}} -\entry{chmod}{390}{\code {chmod}} -\entry{umask}{390}{\code {umask}} -\entry{getumask}{391}{\code {getumask}} +\entry{canonicalize{\_}file{\_}name}{377}{\code {canonicalize_file_name}} +\entry{realpath}{377}{\code {realpath}} +\entry{unlink}{377}{\code {unlink}} +\entry{rmdir}{378}{\code {rmdir}} +\entry{remove}{378}{\code {remove}} +\entry{rename}{378}{\code {rename}} +\entry{mkdir}{380}{\code {mkdir}} +\entry{stat}{384}{\code {stat}} +\entry{stat64}{385}{\code {stat64}} +\entry{fstat}{385}{\code {fstat}} +\entry{fstat64}{385}{\code {fstat64}} +\entry{lstat}{385}{\code {lstat}} +\entry{lstat64}{385}{\code {lstat64}} +\entry{S{\_}ISDIR}{386}{\code {S_ISDIR}} +\entry{S{\_}ISCHR}{386}{\code {S_ISCHR}} +\entry{S{\_}ISBLK}{386}{\code {S_ISBLK}} +\entry{S{\_}ISREG}{386}{\code {S_ISREG}} +\entry{S{\_}ISFIFO}{386}{\code {S_ISFIFO}} +\entry{S{\_}ISLNK}{386}{\code {S_ISLNK}} +\entry{S{\_}ISSOCK}{386}{\code {S_ISSOCK}} +\entry{S{\_}TYPEISMQ}{387}{\code {S_TYPEISMQ}} +\entry{S{\_}TYPEISSEM}{387}{\code {S_TYPEISSEM}} +\entry{S{\_}TYPEISSHM}{387}{\code {S_TYPEISSHM}} +\entry{chown}{388}{\code {chown}} +\entry{fchown}{388}{\code {fchown}} \entry{chmod}{391}{\code {chmod}} -\entry{fchmod}{391}{\code {fchmod}} -\entry{access}{392}{\code {access}} -\entry{utime}{394}{\code {utime}} -\entry{utimes}{394}{\code {utimes}} -\entry{truncate}{395}{\code {truncate}} -\entry{truncate64}{395}{\code {truncate64}} -\entry{ftruncate}{396}{\code {ftruncate}} -\entry{ftruncate64}{396}{\code {ftruncate64}} -\entry{mknod}{397}{\code {mknod}} -\entry{tmpfile}{398}{\code {tmpfile}} -\entry{tmpfile64}{398}{\code {tmpfile64}} -\entry{tmpnam}{398}{\code {tmpnam}} -\entry{tmpnam{\_}r}{399}{\code {tmpnam_r}} -\entry{tempnam}{399}{\code {tempnam}} -\entry{mktemp}{400}{\code {mktemp}} -\entry{mkstemp}{400}{\code {mkstemp}} -\entry{mkdtemp}{400}{\code {mkdtemp}} +\entry{umask}{391}{\code {umask}} +\entry{getumask}{392}{\code {getumask}} +\entry{chmod}{392}{\code {chmod}} +\entry{fchmod}{392}{\code {fchmod}} +\entry{access}{393}{\code {access}} +\entry{utime}{395}{\code {utime}} +\entry{utimes}{395}{\code {utimes}} +\entry{truncate}{396}{\code {truncate}} +\entry{truncate64}{396}{\code {truncate64}} +\entry{ftruncate}{397}{\code {ftruncate}} +\entry{ftruncate64}{397}{\code {ftruncate64}} +\entry{mknod}{398}{\code {mknod}} +\entry{tmpfile}{399}{\code {tmpfile}} +\entry{tmpfile64}{399}{\code {tmpfile64}} +\entry{tmpnam}{399}{\code {tmpnam}} +\entry{tmpnam{\_}r}{400}{\code {tmpnam_r}} +\entry{tempnam}{400}{\code {tempnam}} +\entry{mktemp}{401}{\code {mktemp}} +\entry{mkstemp}{401}{\code {mkstemp}} +\entry{mkdtemp}{401}{\code {mkdtemp}} \entry{pipe}{403}{\code {pipe}} \entry{popen}{405}{\code {popen}} \entry{pclose}{405}{\code {pclose}} @@ -767,548 +769,556 @@ \entry{srandom}{513}{\code {srandom}} \entry{initstate}{513}{\code {initstate}} \entry{setstate}{513}{\code {setstate}} -\entry{drand48}{513}{\code {drand48}} -\entry{erand48}{514}{\code {erand48}} -\entry{lrand48}{514}{\code {lrand48}} -\entry{nrand48}{514}{\code {nrand48}} -\entry{mrand48}{514}{\code {mrand48}} -\entry{jrand48}{514}{\code {jrand48}} -\entry{srand48}{514}{\code {srand48}} -\entry{seed48}{515}{\code {seed48}} -\entry{lcong48}{515}{\code {lcong48}} -\entry{drand48{\_}r}{515}{\code {drand48_r}} -\entry{erand48{\_}r}{516}{\code {erand48_r}} -\entry{lrand48{\_}r}{516}{\code {lrand48_r}} -\entry{nrand48{\_}r}{516}{\code {nrand48_r}} -\entry{mrand48{\_}r}{516}{\code {mrand48_r}} -\entry{jrand48{\_}r}{516}{\code {jrand48_r}} -\entry{srand48{\_}r}{517}{\code {srand48_r}} -\entry{seed48{\_}r}{517}{\code {seed48_r}} -\entry{lcong48{\_}r}{517}{\code {lcong48_r}} -\entry{div}{521}{\code {div}} -\entry{ldiv}{521}{\code {ldiv}} -\entry{lldiv}{521}{\code {lldiv}} -\entry{imaxdiv}{522}{\code {imaxdiv}} -\entry{fpclassify}{522}{\code {fpclassify}} -\entry{isfinite}{523}{\code {isfinite}} -\entry{isnormal}{523}{\code {isnormal}} -\entry{isnan}{523}{\code {isnan}} -\entry{isinf}{523}{\code {isinf}} -\entry{isinff}{523}{\code {isinff}} -\entry{isinfl}{523}{\code {isinfl}} -\entry{isnan}{524}{\code {isnan}} -\entry{isnanf}{524}{\code {isnanf}} -\entry{isnanl}{524}{\code {isnanl}} -\entry{finite}{524}{\code {finite}} -\entry{finitef}{524}{\code {finitef}} -\entry{finitel}{524}{\code {finitel}} -\entry{infnan}{524}{\code {infnan}} -\entry{matherr}{524}{\code {matherr}} -\entry{feclearexcept}{527}{\code {feclearexcept}} -\entry{feraiseexcept}{528}{\code {feraiseexcept}} -\entry{fetestexcept}{528}{\code {fetestexcept}} -\entry{fegetexceptflag}{528}{\code {fegetexceptflag}} -\entry{fesetexceptflag}{528}{\code {fesetexceptflag}} -\entry{fegetround}{530}{\code {fegetround}} -\entry{fesetround}{531}{\code {fesetround}} -\entry{fegetenv}{531}{\code {fegetenv}} -\entry{feholdexcept}{531}{\code {feholdexcept}} -\entry{fesetenv}{532}{\code {fesetenv}} -\entry{feupdateenv}{532}{\code {feupdateenv}} -\entry{feenableexcept}{532}{\code {feenableexcept}} -\entry{fedisableexcept}{532}{\code {fedisableexcept}} -\entry{fegetexcept}{532}{\code {fegetexcept}} -\entry{abs}{533}{\code {abs}} -\entry{labs}{533}{\code {labs}} -\entry{llabs}{533}{\code {llabs}} -\entry{imaxabs}{533}{\code {imaxabs}} -\entry{fabs}{533}{\code {fabs}} -\entry{fabsf}{533}{\code {fabsf}} -\entry{fabsl}{533}{\code {fabsl}} -\entry{cabs}{533}{\code {cabs}} -\entry{cabsf}{533}{\code {cabsf}} -\entry{cabsl}{533}{\code {cabsl}} -\entry{frexp}{534}{\code {frexp}} -\entry{frexpf}{534}{\code {frexpf}} -\entry{frexpl}{534}{\code {frexpl}} -\entry{ldexp}{534}{\code {ldexp}} -\entry{ldexpf}{534}{\code {ldexpf}} -\entry{ldexpl}{534}{\code {ldexpl}} -\entry{logb}{534}{\code {logb}} -\entry{logbf}{534}{\code {logbf}} -\entry{logbl}{534}{\code {logbl}} -\entry{scalb}{535}{\code {scalb}} -\entry{scalbf}{535}{\code {scalbf}} -\entry{scalbl}{535}{\code {scalbl}} -\entry{scalbn}{535}{\code {scalbn}} -\entry{scalbnf}{535}{\code {scalbnf}} -\entry{scalbnl}{535}{\code {scalbnl}} -\entry{scalbln}{535}{\code {scalbln}} -\entry{scalblnf}{535}{\code {scalblnf}} -\entry{scalblnl}{535}{\code {scalblnl}} -\entry{significand}{535}{\code {significand}} -\entry{significandf}{535}{\code {significandf}} -\entry{significandl}{535}{\code {significandl}} -\entry{ceil}{535}{\code {ceil}} -\entry{ceilf}{535}{\code {ceilf}} -\entry{ceill}{535}{\code {ceill}} -\entry{floor}{535}{\code {floor}} -\entry{floorf}{535}{\code {floorf}} -\entry{floorl}{535}{\code {floorl}} -\entry{trunc}{536}{\code {trunc}} -\entry{truncf}{536}{\code {truncf}} -\entry{truncl}{536}{\code {truncl}} -\entry{rint}{536}{\code {rint}} -\entry{rintf}{536}{\code {rintf}} -\entry{rintl}{536}{\code {rintl}} -\entry{nearbyint}{536}{\code {nearbyint}} -\entry{nearbyintf}{536}{\code {nearbyintf}} -\entry{nearbyintl}{536}{\code {nearbyintl}} -\entry{round}{536}{\code {round}} -\entry{roundf}{536}{\code {roundf}} -\entry{roundl}{536}{\code {roundl}} -\entry{lrint}{536}{\code {lrint}} -\entry{lrintf}{536}{\code {lrintf}} -\entry{lrintl}{536}{\code {lrintl}} -\entry{llrint}{536}{\code {llrint}} -\entry{llrintf}{536}{\code {llrintf}} -\entry{llrintl}{536}{\code {llrintl}} -\entry{lround}{536}{\code {lround}} -\entry{lroundf}{536}{\code {lroundf}} -\entry{lroundl}{536}{\code {lroundl}} -\entry{llround}{537}{\code {llround}} -\entry{llroundf}{537}{\code {llroundf}} -\entry{llroundl}{537}{\code {llroundl}} -\entry{modf}{537}{\code {modf}} -\entry{modff}{537}{\code {modff}} -\entry{modfl}{537}{\code {modfl}} -\entry{fmod}{537}{\code {fmod}} -\entry{fmodf}{537}{\code {fmodf}} -\entry{fmodl}{537}{\code {fmodl}} -\entry{drem}{537}{\code {drem}} -\entry{dremf}{537}{\code {dremf}} -\entry{dreml}{537}{\code {dreml}} -\entry{remainder}{538}{\code {remainder}} -\entry{remainderf}{538}{\code {remainderf}} -\entry{remainderl}{538}{\code {remainderl}} -\entry{copysign}{538}{\code {copysign}} -\entry{copysignf}{538}{\code {copysignf}} -\entry{copysignl}{538}{\code {copysignl}} -\entry{signbit}{538}{\code {signbit}} -\entry{nextafter}{538}{\code {nextafter}} -\entry{nextafterf}{538}{\code {nextafterf}} -\entry{nextafterl}{538}{\code {nextafterl}} -\entry{nexttoward}{538}{\code {nexttoward}} -\entry{nexttowardf}{538}{\code {nexttowardf}} -\entry{nexttowardl}{538}{\code {nexttowardl}} -\entry{nan}{539}{\code {nan}} -\entry{nanf}{539}{\code {nanf}} -\entry{nanl}{539}{\code {nanl}} -\entry{isgreater}{539}{\code {isgreater}} -\entry{isgreaterequal}{539}{\code {isgreaterequal}} -\entry{isless}{539}{\code {isless}} -\entry{islessequal}{539}{\code {islessequal}} -\entry{islessgreater}{539}{\code {islessgreater}} -\entry{isunordered}{540}{\code {isunordered}} -\entry{fmin}{540}{\code {fmin}} -\entry{fminf}{540}{\code {fminf}} -\entry{fminl}{540}{\code {fminl}} -\entry{fmax}{540}{\code {fmax}} -\entry{fmaxf}{540}{\code {fmaxf}} -\entry{fmaxl}{540}{\code {fmaxl}} -\entry{fdim}{540}{\code {fdim}} -\entry{fdimf}{540}{\code {fdimf}} -\entry{fdiml}{540}{\code {fdiml}} -\entry{fma}{540}{\code {fma}} -\entry{fmaf}{540}{\code {fmaf}} -\entry{fmal}{540}{\code {fmal}} -\entry{creal}{542}{\code {creal}} -\entry{crealf}{542}{\code {crealf}} -\entry{creall}{542}{\code {creall}} -\entry{cimag}{542}{\code {cimag}} -\entry{cimagf}{542}{\code {cimagf}} -\entry{cimagl}{542}{\code {cimagl}} -\entry{conj}{542}{\code {conj}} -\entry{conjf}{542}{\code {conjf}} -\entry{conjl}{542}{\code {conjl}} -\entry{carg}{542}{\code {carg}} -\entry{cargf}{542}{\code {cargf}} -\entry{cargl}{542}{\code {cargl}} -\entry{cproj}{542}{\code {cproj}} -\entry{cprojf}{542}{\code {cprojf}} -\entry{cprojl}{542}{\code {cprojl}} -\entry{strtol}{543}{\code {strtol}} -\entry{wcstol}{543}{\code {wcstol}} -\entry{strtoul}{543}{\code {strtoul}} -\entry{wcstoul}{544}{\code {wcstoul}} -\entry{strtoll}{544}{\code {strtoll}} -\entry{wcstoll}{544}{\code {wcstoll}} -\entry{strtoq}{544}{\code {strtoq}} -\entry{wcstoq}{544}{\code {wcstoq}} -\entry{strtoull}{544}{\code {strtoull}} -\entry{wcstoull}{545}{\code {wcstoull}} -\entry{strtouq}{545}{\code {strtouq}} -\entry{wcstouq}{545}{\code {wcstouq}} -\entry{strtoimax}{545}{\code {strtoimax}} -\entry{wcstoimax}{545}{\code {wcstoimax}} -\entry{strtoumax}{545}{\code {strtoumax}} -\entry{wcstoumax}{545}{\code {wcstoumax}} -\entry{atol}{546}{\code {atol}} -\entry{atoi}{546}{\code {atoi}} -\entry{atoll}{546}{\code {atoll}} -\entry{strtod}{547}{\code {strtod}} -\entry{strtof}{548}{\code {strtof}} -\entry{strtold}{548}{\code {strtold}} -\entry{wcstod}{548}{\code {wcstod}} -\entry{wcstof}{548}{\code {wcstof}} -\entry{wcstold}{548}{\code {wcstold}} -\entry{atof}{548}{\code {atof}} -\entry{ecvt}{549}{\code {ecvt}} -\entry{fcvt}{549}{\code {fcvt}} -\entry{gcvt}{549}{\code {gcvt}} -\entry{qecvt}{549}{\code {qecvt}} -\entry{qfcvt}{549}{\code {qfcvt}} -\entry{qgcvt}{549}{\code {qgcvt}} -\entry{ecvt{\_}r}{550}{\code {ecvt_r}} -\entry{fcvt{\_}r}{550}{\code {fcvt_r}} -\entry{qecvt{\_}r}{550}{\code {qecvt_r}} -\entry{qfcvt{\_}r}{550}{\code {qfcvt_r}} -\entry{difftime}{551}{\code {difftime}} -\entry{clock}{554}{\code {clock}} -\entry{times}{555}{\code {times}} -\entry{time}{556}{\code {time}} -\entry{stime}{556}{\code {stime}} -\entry{gettimeofday}{557}{\code {gettimeofday}} -\entry{settimeofday}{557}{\code {settimeofday}} -\entry{adjtime}{558}{\code {adjtime}} -\entry{adjtimex}{558}{\code {adjtimex}} -\entry{localtime}{560}{\code {localtime}} -\entry{localtime{\_}r}{560}{\code {localtime_r}} -\entry{gmtime}{560}{\code {gmtime}} -\entry{gmtime{\_}r}{560}{\code {gmtime_r}} -\entry{mktime}{560}{\code {mktime}} -\entry{timelocal}{561}{\code {timelocal}} -\entry{timegm}{561}{\code {timegm}} -\entry{ntp{\_}gettime}{562}{\code {ntp_gettime}} -\entry{ntp{\_}adjtime}{564}{\code {ntp_adjtime}} -\entry{asctime}{564}{\code {asctime}} -\entry{asctime{\_}r}{564}{\code {asctime_r}} -\entry{ctime}{565}{\code {ctime}} -\entry{ctime{\_}r}{565}{\code {ctime_r}} -\entry{strftime}{565}{\code {strftime}} -\entry{wcsftime}{569}{\code {wcsftime}} -\entry{strptime}{570}{\code {strptime}} -\entry{getdate}{575}{\code {getdate}} -\entry{getdate{\_}r}{576}{\code {getdate_r}} -\entry{tzset}{579}{\code {tzset}} -\entry{setitimer}{581}{\code {setitimer}} -\entry{getitimer}{581}{\code {getitimer}} -\entry{alarm}{582}{\code {alarm}} -\entry{sleep}{583}{\code {sleep}} -\entry{nanosleep}{583}{\code {nanosleep}} -\entry{getrusage}{585}{\code {getrusage}} -\entry{vtimes}{586}{\code {vtimes}} -\entry{getrlimit}{588}{\code {getrlimit}} -\entry{getrlimit64}{588}{\code {getrlimit64}} -\entry{setrlimit}{588}{\code {setrlimit}} -\entry{setrlimit64}{588}{\code {setrlimit64}} -\entry{ulimit}{590}{\code {ulimit}} -\entry{vlimit}{591}{\code {vlimit}} -\entry{sched{\_}setscheduler}{595}{\code {sched_setscheduler}} -\entry{sched{\_}getscheduler}{595}{\code {sched_getscheduler}} -\entry{sched{\_}setparam}{596}{\code {sched_setparam}} -\entry{sched{\_}getparam}{596}{\code {sched_getparam}} -\entry{sched{\_}get{\_}priority{\_}min}{596}{\code {sched_get_priority_min}} -\entry{sched{\_}get{\_}priority{\_}max}{596}{\code {sched_get_priority_max}} -\entry{sched{\_}rr{\_}get{\_}interval}{596}{\code {sched_rr_get_interval}} -\entry{sched{\_}yield}{597}{\code {sched_yield}} -\entry{getpriority}{599}{\code {getpriority}} -\entry{setpriority}{599}{\code {setpriority}} -\entry{nice}{600}{\code {nice}} -\entry{getpagesize}{601}{\code {getpagesize}} -\entry{int}{602}{\code {int}} -\entry{int}{602}{\code {int}} -\entry{get{\_}nprocs{\_}conf}{602}{\code {get_nprocs_conf}} -\entry{get{\_}nprocs}{602}{\code {get_nprocs}} -\entry{getloadavg}{603}{\code {getloadavg}} -\entry{setjmp}{606}{\code {setjmp}} -\entry{longjmp}{607}{\code {longjmp}} -\entry{sigsetjmp}{608}{\code {sigsetjmp}} -\entry{siglongjmp}{608}{\code {siglongjmp}} -\entry{strsignal}{619}{\code {strsignal}} -\entry{psignal}{620}{\code {psignal}} -\entry{signal}{620}{\code {signal}} -\entry{sysv{\_}signal}{622}{\code {sysv_signal}} -\entry{ssignal}{622}{\code {ssignal}} -\entry{sigaction}{623}{\code {sigaction}} -\entry{TEMP{\_}FAILURE{\_}RETRY}{637}{\code {TEMP_FAILURE_RETRY}} -\entry{raise}{638}{\code {raise}} -\entry{gsignal}{638}{\code {gsignal}} -\entry{kill}{639}{\code {kill}} -\entry{killpg}{640}{\code {killpg}} -\entry{sigemptyset}{644}{\code {sigemptyset}} -\entry{sigfillset}{644}{\code {sigfillset}} -\entry{sigaddset}{644}{\code {sigaddset}} -\entry{sigdelset}{644}{\code {sigdelset}} -\entry{sigismember}{644}{\code {sigismember}} -\entry{sigprocmask}{644}{\code {sigprocmask}} -\entry{sigpending}{647}{\code {sigpending}} -\entry{pause}{649}{\code {pause}} -\entry{sigsuspend}{651}{\code {sigsuspend}} -\entry{sigaltstack}{653}{\code {sigaltstack}} -\entry{sigstack}{653}{\code {sigstack}} -\entry{sigvec}{655}{\code {sigvec}} -\entry{siginterrupt}{655}{\code {siginterrupt}} -\entry{sigmask}{655}{\code {sigmask}} -\entry{sigblock}{655}{\code {sigblock}} -\entry{sigsetmask}{655}{\code {sigsetmask}} -\entry{sigpause}{655}{\code {sigpause}} -\entry{main}{657}{\code {main}} -\entry{getopt}{659}{\code {getopt}} -\entry{getopt{\_}long}{663}{\code {getopt_long}} -\entry{getopt{\_}long{\_}only}{664}{\code {getopt_long_only}} -\entry{argp{\_}parse}{666}{\code {argp_parse}} -\entry{argp{\_}usage}{674}{\code {argp_usage}} -\entry{argp{\_}error}{674}{\code {argp_error}} -\entry{argp{\_}failure}{674}{\code {argp_failure}} -\entry{argp{\_}state{\_}help}{675}{\code {argp_state_help}} -\entry{argp{\_}help}{679}{\code {argp_help}} -\entry{getsubopt}{690}{\code {getsubopt}} -\entry{getenv}{693}{\code {getenv}} -\entry{putenv}{693}{\code {putenv}} -\entry{setenv}{694}{\code {setenv}} -\entry{unsetenv}{694}{\code {unsetenv}} -\entry{clearenv}{694}{\code {clearenv}} -\entry{int}{697}{\code {int}} -\entry{exit}{698}{\code {exit}} -\entry{atexit}{700}{\code {atexit}} -\entry{on{\_}exit}{700}{\code {on_exit}} -\entry{abort}{701}{\code {abort}} -\entry{{\_}exit}{701}{\code {_exit}} -\entry{{\_}Exit}{701}{\code {_Exit}} -\entry{system}{703}{\code {system}} -\entry{getpid}{704}{\code {getpid}} -\entry{getppid}{704}{\code {getppid}} -\entry{fork}{705}{\code {fork}} -\entry{vfork}{705}{\code {vfork}} -\entry{execv}{706}{\code {execv}} -\entry{execl}{706}{\code {execl}} -\entry{execve}{706}{\code {execve}} -\entry{execle}{706}{\code {execle}} -\entry{execvp}{707}{\code {execvp}} -\entry{execlp}{707}{\code {execlp}} -\entry{waitpid}{708}{\code {waitpid}} -\entry{wait}{710}{\code {wait}} -\entry{wait4}{710}{\code {wait4}} -\entry{WIFEXITED}{711}{\code {WIFEXITED}} -\entry{WEXITSTATUS}{711}{\code {WEXITSTATUS}} -\entry{WIFSIGNALED}{711}{\code {WIFSIGNALED}} -\entry{WTERMSIG}{711}{\code {WTERMSIG}} -\entry{WCOREDUMP}{711}{\code {WCOREDUMP}} -\entry{WIFSTOPPED}{712}{\code {WIFSTOPPED}} -\entry{WSTOPSIG}{712}{\code {WSTOPSIG}} -\entry{wait3}{712}{\code {wait3}} -\entry{ctermid}{730}{\code {ctermid}} -\entry{setsid}{731}{\code {setsid}} -\entry{getsid}{731}{\code {getsid}} -\entry{getpgrp}{731}{\code {getpgrp}} -\entry{getpgrp}{731}{\code {getpgrp}} -\entry{getpgid}{731}{\code {getpgid}} -\entry{setpgid}{732}{\code {setpgid}} -\entry{setpgrp}{732}{\code {setpgrp}} -\entry{tcgetpgrp}{732}{\code {tcgetpgrp}} -\entry{tcsetpgrp}{733}{\code {tcsetpgrp}} -\entry{tcgetsid}{733}{\code {tcgetsid}} -\entry{success}{737}{\code {success}} -\entry{notfound}{737}{\code {notfound}} -\entry{unavail}{737}{\code {unavail}} -\entry{tryagain}{737}{\code {tryagain}} -\entry{getuid}{747}{\code {getuid}} -\entry{getgid}{747}{\code {getgid}} -\entry{geteuid}{747}{\code {geteuid}} -\entry{getegid}{747}{\code {getegid}} -\entry{getgroups}{747}{\code {getgroups}} -\entry{seteuid}{748}{\code {seteuid}} -\entry{setuid}{748}{\code {setuid}} -\entry{setreuid}{749}{\code {setreuid}} -\entry{setegid}{749}{\code {setegid}} -\entry{setgid}{749}{\code {setgid}} -\entry{setregid}{749}{\code {setregid}} -\entry{setgroups}{750}{\code {setgroups}} -\entry{initgroups}{750}{\code {initgroups}} -\entry{getlogin}{754}{\code {getlogin}} -\entry{cuserid}{754}{\code {cuserid}} -\entry{setutent}{757}{\code {setutent}} -\entry{getutent}{757}{\code {getutent}} -\entry{endutent}{757}{\code {endutent}} -\entry{getutid}{757}{\code {getutid}} -\entry{getutline}{758}{\code {getutline}} -\entry{pututline}{758}{\code {pututline}} -\entry{getutent{\_}r}{758}{\code {getutent_r}} -\entry{getutid{\_}r}{758}{\code {getutid_r}} -\entry{getutline{\_}r}{759}{\code {getutline_r}} -\entry{utmpname}{759}{\code {utmpname}} -\entry{updwtmp}{759}{\code {updwtmp}} -\entry{setutxent}{761}{\code {setutxent}} -\entry{getutxent}{761}{\code {getutxent}} -\entry{endutxent}{761}{\code {endutxent}} -\entry{getutxid}{761}{\code {getutxid}} -\entry{getutxline}{761}{\code {getutxline}} -\entry{pututxline}{761}{\code {pututxline}} -\entry{utmpxname}{761}{\code {utmpxname}} -\entry{getutmp}{762}{\code {getutmp}} -\entry{getutmpx}{762}{\code {getutmpx}} -\entry{login{\_}tty}{762}{\code {login_tty}} -\entry{login}{762}{\code {login}} -\entry{logout}{762}{\code {logout}} -\entry{logwtmp}{762}{\code {logwtmp}} -\entry{getpwuid}{763}{\code {getpwuid}} -\entry{getpwuid{\_}r}{764}{\code {getpwuid_r}} -\entry{getpwnam}{764}{\code {getpwnam}} -\entry{getpwnam{\_}r}{764}{\code {getpwnam_r}} -\entry{fgetpwent}{764}{\code {fgetpwent}} -\entry{fgetpwent{\_}r}{764}{\code {fgetpwent_r}} -\entry{setpwent}{765}{\code {setpwent}} -\entry{getpwent}{765}{\code {getpwent}} -\entry{getpwent{\_}r}{765}{\code {getpwent_r}} -\entry{endpwent}{765}{\code {endpwent}} -\entry{putpwent}{765}{\code {putpwent}} -\entry{getgrgid}{766}{\code {getgrgid}} -\entry{getgrgid{\_}r}{766}{\code {getgrgid_r}} -\entry{getgrnam}{767}{\code {getgrnam}} -\entry{getgrnam{\_}r}{767}{\code {getgrnam_r}} -\entry{fgetgrent}{767}{\code {fgetgrent}} -\entry{fgetgrent{\_}r}{767}{\code {fgetgrent_r}} -\entry{setgrent}{767}{\code {setgrent}} -\entry{getgrent}{768}{\code {getgrent}} -\entry{getgrent{\_}r}{768}{\code {getgrent_r}} -\entry{endgrent}{768}{\code {endgrent}} -\entry{setnetgrent}{770}{\code {setnetgrent}} -\entry{getnetgrent}{770}{\code {getnetgrent}} -\entry{getnetgrent{\_}r}{771}{\code {getnetgrent_r}} -\entry{endnetgrent}{771}{\code {endnetgrent}} -\entry{innetgr}{771}{\code {innetgr}} -\entry{gethostname}{773}{\code {gethostname}} -\entry{sethostname}{774}{\code {sethostname}} -\entry{getdomainnname}{774}{\code {getdomainnname}} -\entry{setdomainname}{774}{\code {setdomainname}} -\entry{gethostid}{774}{\code {gethostid}} -\entry{sethostid}{775}{\code {sethostid}} -\entry{uname}{776}{\code {uname}} -\entry{setfsent}{778}{\code {setfsent}} -\entry{endfsent}{779}{\code {endfsent}} -\entry{getfsent}{779}{\code {getfsent}} -\entry{getfsspec}{779}{\code {getfsspec}} -\entry{getfsfile}{779}{\code {getfsfile}} -\entry{setmntent}{781}{\code {setmntent}} -\entry{endmntent}{781}{\code {endmntent}} -\entry{getmntent}{781}{\code {getmntent}} -\entry{getmntent{\_}r}{782}{\code {getmntent_r}} -\entry{addmntent}{782}{\code {addmntent}} -\entry{hasmntopt}{782}{\code {hasmntopt}} -\entry{mount}{783}{\code {mount}} -\entry{umount2}{786}{\code {umount2}} -\entry{umount}{786}{\code {umount}} -\entry{sysctl}{787}{\code {sysctl}} -\entry{sysconf}{792}{\code {sysconf}} -\entry{pathconf}{805}{\code {pathconf}} -\entry{fpathconf}{805}{\code {fpathconf}} -\entry{confstr}{808}{\code {confstr}} -\entry{getpass}{812}{\code {getpass}} -\entry{crypt}{813}{\code {crypt}} -\entry{crypt{\_}r}{815}{\code {crypt_r}} -\entry{setkey}{815}{\code {setkey}} -\entry{encrypt}{815}{\code {encrypt}} -\entry{setkey{\_}r}{816}{\code {setkey_r}} -\entry{encrypt{\_}r}{816}{\code {encrypt_r}} -\entry{ecb{\_}crypt}{816}{\code {ecb_crypt}} -\entry{DES{\_}FAILED}{817}{\code {DES_FAILED}} -\entry{cbc{\_}crypt}{817}{\code {cbc_crypt}} -\entry{des{\_}setparity}{817}{\code {des_setparity}} -\entry{backtrace}{819}{\code {backtrace}} -\entry{backtrace{\_}symbols}{819}{\code {backtrace_symbols}} -\entry{backtrace{\_}symbols{\_}fd}{820}{\code {backtrace_symbols_fd}} -\entry{pthread{\_}create}{823}{\code {pthread_create}} -\entry{pthread{\_}exit}{823}{\code {pthread_exit}} -\entry{pthread{\_}cancel}{824}{\code {pthread_cancel}} -\entry{pthread{\_}join}{824}{\code {pthread_join}} -\entry{pthread{\_}attr{\_}init}{824}{\code {pthread_attr_init}} -\entry{pthread{\_}attr{\_}destroy}{825}{\code {pthread_attr_destroy}} -\entry{pthread{\_}attr{\_}setdetachstate}{825}{\code {pthread_attr_setdetachstate}} -\entry{pthread{\_}attr{\_}setguardsize}{825}{\code {pthread_attr_setguardsize}} -\entry{pthread{\_}attr{\_}setinheritsched}{825}{\code {pthread_attr_setinheritsched}} -\entry{pthread{\_}attr{\_}setschedparam}{825}{\code {pthread_attr_setschedparam}} -\entry{pthread{\_}attr{\_}setschedpolicy}{825}{\code {pthread_attr_setschedpolicy}} -\entry{pthread{\_}attr{\_}setscope}{825}{\code {pthread_attr_setscope}} -\entry{pthread{\_}attr{\_}setstack}{825}{\code {pthread_attr_setstack}} -\entry{pthread{\_}attr{\_}setstackaddr}{825}{\code {pthread_attr_setstackaddr}} -\entry{pthread{\_}attr{\_}setstacksize}{825}{\code {pthread_attr_setstacksize}} -\entry{pthread{\_}attr{\_}setattr}{825}{\code {pthread_attr_setattr}} -\entry{pthread{\_}attr{\_}getdetachstate}{825}{\code {pthread_attr_getdetachstate}} -\entry{pthread{\_}attr{\_}getguardsize}{825}{\code {pthread_attr_getguardsize}} -\entry{pthread{\_}attr{\_}getinheritsched}{825}{\code {pthread_attr_getinheritsched}} -\entry{pthread{\_}attr{\_}getschedparam}{825}{\code {pthread_attr_getschedparam}} -\entry{pthread{\_}attr{\_}getschedpolicy}{825}{\code {pthread_attr_getschedpolicy}} -\entry{pthread{\_}attr{\_}getscope}{825}{\code {pthread_attr_getscope}} -\entry{pthread{\_}attr{\_}getstack}{825}{\code {pthread_attr_getstack}} -\entry{pthread{\_}attr{\_}getstackaddr}{825}{\code {pthread_attr_getstackaddr}} -\entry{pthread{\_}attr{\_}getstacksize}{825}{\code {pthread_attr_getstacksize}} -\entry{pthread{\_}attr{\_}getattr}{825}{\code {pthread_attr_getattr}} -\entry{pthread{\_}setcancelstate}{827}{\code {pthread_setcancelstate}} -\entry{pthread{\_}setcanceltype}{828}{\code {pthread_setcanceltype}} -\entry{pthread{\_}testcancel}{828}{\code {pthread_testcancel}} -\entry{pthread{\_}cleanup{\_}push}{829}{\code {pthread_cleanup_push}} -\entry{pthread{\_}cleanup{\_}pop}{829}{\code {pthread_cleanup_pop}} -\entry{pthread{\_}cleanup{\_}push{\_}defer{\_}np}{829}{\code {pthread_cleanup_push_defer_np}} -\entry{pthread{\_}cleanup{\_}pop{\_}restore{\_}np}{829}{\code {pthread_cleanup_pop_restore_np}} -\entry{pthread{\_}mutex{\_}init}{830}{\code {pthread_mutex_init}} -\entry{pthread{\_}mutex{\_}lock}{831}{\code {pthread_mutex_lock}} -\entry{pthread{\_}mutex{\_}trylock}{831}{\code {pthread_mutex_trylock}} -\entry{pthread{\_}mutex{\_}timedlock}{831}{\code {pthread_mutex_timedlock}} -\entry{pthread{\_}mutex{\_}unlock}{831}{\code {pthread_mutex_unlock}} -\entry{pthread{\_}mutex{\_}destroy}{832}{\code {pthread_mutex_destroy}} -\entry{pthread{\_}mutexattr{\_}init}{832}{\code {pthread_mutexattr_init}} -\entry{pthread{\_}mutexattr{\_}destroy}{832}{\code {pthread_mutexattr_destroy}} -\entry{pthread{\_}mutexattr{\_}settype}{833}{\code {pthread_mutexattr_settype}} -\entry{pthread{\_}mutexattr{\_}gettype}{833}{\code {pthread_mutexattr_gettype}} -\entry{pthread{\_}cond{\_}init}{833}{\code {pthread_cond_init}} -\entry{pthread{\_}cond{\_}signal}{834}{\code {pthread_cond_signal}} -\entry{pthread{\_}cond{\_}broadcast}{834}{\code {pthread_cond_broadcast}} -\entry{pthread{\_}cond{\_}wait}{834}{\code {pthread_cond_wait}} -\entry{pthread{\_}cond{\_}timedwait}{834}{\code {pthread_cond_timedwait}} -\entry{pthread{\_}cond{\_}destroy}{834}{\code {pthread_cond_destroy}} -\entry{pthread{\_}condattr{\_}init}{836}{\code {pthread_condattr_init}} -\entry{pthread{\_}condattr{\_}destroy}{836}{\code {pthread_condattr_destroy}} -\entry{sem{\_}init}{836}{\code {sem_init}} -\entry{sem{\_}destroy}{836}{\code {sem_destroy}} -\entry{sem{\_}wait}{837}{\code {sem_wait}} -\entry{sem{\_}trywait}{837}{\code {sem_trywait}} -\entry{sem{\_}post}{837}{\code {sem_post}} -\entry{sem{\_}getvalue}{837}{\code {sem_getvalue}} -\entry{pthread{\_}key{\_}create}{837}{\code {pthread_key_create}} -\entry{pthread{\_}key{\_}delete}{838}{\code {pthread_key_delete}} -\entry{pthread{\_}setspecific}{838}{\code {pthread_setspecific}} -\entry{pthread{\_}getspecific}{838}{\code {pthread_getspecific}} -\entry{pthread{\_}sigmask}{839}{\code {pthread_sigmask}} -\entry{pthread{\_}kill}{839}{\code {pthread_kill}} -\entry{sigwait}{840}{\code {sigwait}} -\entry{pthread{\_}atfork}{841}{\code {pthread_atfork}} -\entry{pthread{\_}self}{842}{\code {pthread_self}} -\entry{pthread{\_}equal}{842}{\code {pthread_equal}} -\entry{pthread{\_}detach}{843}{\code {pthread_detach}} -\entry{pthread{\_}kill{\_}other{\_}threads{\_}np}{843}{\code {pthread_kill_other_threads_np}} -\entry{pthread{\_}once}{843}{\code {pthread_once}} -\entry{pthread{\_}setschedparam}{844}{\code {pthread_setschedparam}} -\entry{pthread{\_}getschedparam}{844}{\code {pthread_getschedparam}} -\entry{pthread{\_}setconcurrency}{844}{\code {pthread_setconcurrency}} -\entry{pthread{\_}getconcurrency}{844}{\code {pthread_getconcurrency}} -\entry{assert}{845}{\code {assert}} -\entry{assert{\_}perror}{846}{\code {assert_perror}} -\entry{va{\_}start}{850}{\code {va_start}} -\entry{va{\_}arg}{850}{\code {va_arg}} -\entry{va{\_}end}{850}{\code {va_end}} -\entry{{\_}{\_}va{\_}copy}{850}{\code {__va_copy}} -\entry{va{\_}alist}{852}{\code {va_alist}} -\entry{va{\_}dcl}{852}{\code {va_dcl}} -\entry{va{\_}start}{852}{\code {va_start}} -\entry{offsetof}{861}{\code {offsetof}} +\entry{random{\_}r}{513}{\code {random_r}} +\entry{srandom{\_}r}{514}{\code {srandom_r}} +\entry{initstate{\_}r}{514}{\code {initstate_r}} +\entry{setstate{\_}r}{514}{\code {setstate_r}} +\entry{drand48}{514}{\code {drand48}} +\entry{erand48}{515}{\code {erand48}} +\entry{lrand48}{515}{\code {lrand48}} +\entry{nrand48}{515}{\code {nrand48}} +\entry{mrand48}{515}{\code {mrand48}} +\entry{jrand48}{515}{\code {jrand48}} +\entry{srand48}{515}{\code {srand48}} +\entry{seed48}{516}{\code {seed48}} +\entry{lcong48}{516}{\code {lcong48}} +\entry{drand48{\_}r}{516}{\code {drand48_r}} +\entry{erand48{\_}r}{517}{\code {erand48_r}} +\entry{lrand48{\_}r}{517}{\code {lrand48_r}} +\entry{nrand48{\_}r}{517}{\code {nrand48_r}} +\entry{mrand48{\_}r}{517}{\code {mrand48_r}} +\entry{jrand48{\_}r}{517}{\code {jrand48_r}} +\entry{srand48{\_}r}{518}{\code {srand48_r}} +\entry{seed48{\_}r}{518}{\code {seed48_r}} +\entry{lcong48{\_}r}{518}{\code {lcong48_r}} +\entry{div}{523}{\code {div}} +\entry{ldiv}{523}{\code {ldiv}} +\entry{lldiv}{523}{\code {lldiv}} +\entry{imaxdiv}{524}{\code {imaxdiv}} +\entry{fpclassify}{524}{\code {fpclassify}} +\entry{isfinite}{525}{\code {isfinite}} +\entry{isnormal}{525}{\code {isnormal}} +\entry{isnan}{525}{\code {isnan}} +\entry{isinf}{525}{\code {isinf}} +\entry{isinff}{525}{\code {isinff}} +\entry{isinfl}{525}{\code {isinfl}} +\entry{isnan}{526}{\code {isnan}} +\entry{isnanf}{526}{\code {isnanf}} +\entry{isnanl}{526}{\code {isnanl}} +\entry{finite}{526}{\code {finite}} +\entry{finitef}{526}{\code {finitef}} +\entry{finitel}{526}{\code {finitel}} +\entry{infnan}{526}{\code {infnan}} +\entry{matherr}{526}{\code {matherr}} +\entry{feclearexcept}{529}{\code {feclearexcept}} +\entry{feraiseexcept}{530}{\code {feraiseexcept}} +\entry{fetestexcept}{530}{\code {fetestexcept}} +\entry{fegetexceptflag}{530}{\code {fegetexceptflag}} +\entry{fesetexceptflag}{530}{\code {fesetexceptflag}} +\entry{fegetround}{532}{\code {fegetround}} +\entry{fesetround}{533}{\code {fesetround}} +\entry{fegetenv}{533}{\code {fegetenv}} +\entry{feholdexcept}{533}{\code {feholdexcept}} +\entry{fesetenv}{534}{\code {fesetenv}} +\entry{feupdateenv}{534}{\code {feupdateenv}} +\entry{feenableexcept}{534}{\code {feenableexcept}} +\entry{fedisableexcept}{534}{\code {fedisableexcept}} +\entry{fegetexcept}{534}{\code {fegetexcept}} +\entry{abs}{535}{\code {abs}} +\entry{labs}{535}{\code {labs}} +\entry{llabs}{535}{\code {llabs}} +\entry{imaxabs}{535}{\code {imaxabs}} +\entry{fabs}{535}{\code {fabs}} +\entry{fabsf}{535}{\code {fabsf}} +\entry{fabsl}{535}{\code {fabsl}} +\entry{cabs}{535}{\code {cabs}} +\entry{cabsf}{535}{\code {cabsf}} +\entry{cabsl}{535}{\code {cabsl}} +\entry{frexp}{536}{\code {frexp}} +\entry{frexpf}{536}{\code {frexpf}} +\entry{frexpl}{536}{\code {frexpl}} +\entry{ldexp}{536}{\code {ldexp}} +\entry{ldexpf}{536}{\code {ldexpf}} +\entry{ldexpl}{536}{\code {ldexpl}} +\entry{logb}{536}{\code {logb}} +\entry{logbf}{536}{\code {logbf}} +\entry{logbl}{536}{\code {logbl}} +\entry{scalb}{537}{\code {scalb}} +\entry{scalbf}{537}{\code {scalbf}} +\entry{scalbl}{537}{\code {scalbl}} +\entry{scalbn}{537}{\code {scalbn}} +\entry{scalbnf}{537}{\code {scalbnf}} +\entry{scalbnl}{537}{\code {scalbnl}} +\entry{scalbln}{537}{\code {scalbln}} +\entry{scalblnf}{537}{\code {scalblnf}} +\entry{scalblnl}{537}{\code {scalblnl}} +\entry{significand}{537}{\code {significand}} +\entry{significandf}{537}{\code {significandf}} +\entry{significandl}{537}{\code {significandl}} +\entry{ceil}{537}{\code {ceil}} +\entry{ceilf}{537}{\code {ceilf}} +\entry{ceill}{537}{\code {ceill}} +\entry{floor}{537}{\code {floor}} +\entry{floorf}{537}{\code {floorf}} +\entry{floorl}{537}{\code {floorl}} +\entry{trunc}{538}{\code {trunc}} +\entry{truncf}{538}{\code {truncf}} +\entry{truncl}{538}{\code {truncl}} +\entry{rint}{538}{\code {rint}} +\entry{rintf}{538}{\code {rintf}} +\entry{rintl}{538}{\code {rintl}} +\entry{nearbyint}{538}{\code {nearbyint}} +\entry{nearbyintf}{538}{\code {nearbyintf}} +\entry{nearbyintl}{538}{\code {nearbyintl}} +\entry{round}{538}{\code {round}} +\entry{roundf}{538}{\code {roundf}} +\entry{roundl}{538}{\code {roundl}} +\entry{lrint}{538}{\code {lrint}} +\entry{lrintf}{538}{\code {lrintf}} +\entry{lrintl}{538}{\code {lrintl}} +\entry{llrint}{538}{\code {llrint}} +\entry{llrintf}{538}{\code {llrintf}} +\entry{llrintl}{538}{\code {llrintl}} +\entry{lround}{538}{\code {lround}} +\entry{lroundf}{538}{\code {lroundf}} +\entry{lroundl}{538}{\code {lroundl}} +\entry{llround}{539}{\code {llround}} +\entry{llroundf}{539}{\code {llroundf}} +\entry{llroundl}{539}{\code {llroundl}} +\entry{modf}{539}{\code {modf}} +\entry{modff}{539}{\code {modff}} +\entry{modfl}{539}{\code {modfl}} +\entry{fmod}{539}{\code {fmod}} +\entry{fmodf}{539}{\code {fmodf}} +\entry{fmodl}{539}{\code {fmodl}} +\entry{drem}{539}{\code {drem}} +\entry{dremf}{539}{\code {dremf}} +\entry{dreml}{539}{\code {dreml}} +\entry{remainder}{540}{\code {remainder}} +\entry{remainderf}{540}{\code {remainderf}} +\entry{remainderl}{540}{\code {remainderl}} +\entry{copysign}{540}{\code {copysign}} +\entry{copysignf}{540}{\code {copysignf}} +\entry{copysignl}{540}{\code {copysignl}} +\entry{signbit}{540}{\code {signbit}} +\entry{nextafter}{540}{\code {nextafter}} +\entry{nextafterf}{540}{\code {nextafterf}} +\entry{nextafterl}{540}{\code {nextafterl}} +\entry{nexttoward}{540}{\code {nexttoward}} +\entry{nexttowardf}{540}{\code {nexttowardf}} +\entry{nexttowardl}{540}{\code {nexttowardl}} +\entry{nan}{541}{\code {nan}} +\entry{nanf}{541}{\code {nanf}} +\entry{nanl}{541}{\code {nanl}} +\entry{isgreater}{541}{\code {isgreater}} +\entry{isgreaterequal}{541}{\code {isgreaterequal}} +\entry{isless}{541}{\code {isless}} +\entry{islessequal}{541}{\code {islessequal}} +\entry{islessgreater}{541}{\code {islessgreater}} +\entry{isunordered}{542}{\code {isunordered}} +\entry{fmin}{542}{\code {fmin}} +\entry{fminf}{542}{\code {fminf}} +\entry{fminl}{542}{\code {fminl}} +\entry{fmax}{542}{\code {fmax}} +\entry{fmaxf}{542}{\code {fmaxf}} +\entry{fmaxl}{542}{\code {fmaxl}} +\entry{fdim}{542}{\code {fdim}} +\entry{fdimf}{542}{\code {fdimf}} +\entry{fdiml}{542}{\code {fdiml}} +\entry{fma}{542}{\code {fma}} +\entry{fmaf}{542}{\code {fmaf}} +\entry{fmal}{542}{\code {fmal}} +\entry{creal}{544}{\code {creal}} +\entry{crealf}{544}{\code {crealf}} +\entry{creall}{544}{\code {creall}} +\entry{cimag}{544}{\code {cimag}} +\entry{cimagf}{544}{\code {cimagf}} +\entry{cimagl}{544}{\code {cimagl}} +\entry{conj}{544}{\code {conj}} +\entry{conjf}{544}{\code {conjf}} +\entry{conjl}{544}{\code {conjl}} +\entry{carg}{544}{\code {carg}} +\entry{cargf}{544}{\code {cargf}} +\entry{cargl}{544}{\code {cargl}} +\entry{cproj}{544}{\code {cproj}} +\entry{cprojf}{544}{\code {cprojf}} +\entry{cprojl}{544}{\code {cprojl}} +\entry{strtol}{545}{\code {strtol}} +\entry{wcstol}{545}{\code {wcstol}} +\entry{strtoul}{545}{\code {strtoul}} +\entry{wcstoul}{546}{\code {wcstoul}} +\entry{strtoll}{546}{\code {strtoll}} +\entry{wcstoll}{546}{\code {wcstoll}} +\entry{strtoq}{546}{\code {strtoq}} +\entry{wcstoq}{546}{\code {wcstoq}} +\entry{strtoull}{546}{\code {strtoull}} +\entry{wcstoull}{547}{\code {wcstoull}} +\entry{strtouq}{547}{\code {strtouq}} +\entry{wcstouq}{547}{\code {wcstouq}} +\entry{strtoimax}{547}{\code {strtoimax}} +\entry{wcstoimax}{547}{\code {wcstoimax}} +\entry{strtoumax}{547}{\code {strtoumax}} +\entry{wcstoumax}{547}{\code {wcstoumax}} +\entry{atol}{548}{\code {atol}} +\entry{atoi}{548}{\code {atoi}} +\entry{atoll}{548}{\code {atoll}} +\entry{strtod}{549}{\code {strtod}} +\entry{strtof}{550}{\code {strtof}} +\entry{strtold}{550}{\code {strtold}} +\entry{wcstod}{550}{\code {wcstod}} +\entry{wcstof}{550}{\code {wcstof}} +\entry{wcstold}{550}{\code {wcstold}} +\entry{atof}{550}{\code {atof}} +\entry{ecvt}{551}{\code {ecvt}} +\entry{fcvt}{551}{\code {fcvt}} +\entry{gcvt}{551}{\code {gcvt}} +\entry{qecvt}{551}{\code {qecvt}} +\entry{qfcvt}{551}{\code {qfcvt}} +\entry{qgcvt}{551}{\code {qgcvt}} +\entry{ecvt{\_}r}{552}{\code {ecvt_r}} +\entry{fcvt{\_}r}{552}{\code {fcvt_r}} +\entry{qecvt{\_}r}{552}{\code {qecvt_r}} +\entry{qfcvt{\_}r}{552}{\code {qfcvt_r}} +\entry{difftime}{553}{\code {difftime}} +\entry{clock}{556}{\code {clock}} +\entry{times}{557}{\code {times}} +\entry{time}{558}{\code {time}} +\entry{stime}{558}{\code {stime}} +\entry{gettimeofday}{559}{\code {gettimeofday}} +\entry{settimeofday}{559}{\code {settimeofday}} +\entry{adjtime}{560}{\code {adjtime}} +\entry{adjtimex}{560}{\code {adjtimex}} +\entry{localtime}{562}{\code {localtime}} +\entry{localtime{\_}r}{562}{\code {localtime_r}} +\entry{gmtime}{562}{\code {gmtime}} +\entry{gmtime{\_}r}{562}{\code {gmtime_r}} +\entry{mktime}{562}{\code {mktime}} +\entry{timelocal}{563}{\code {timelocal}} +\entry{timegm}{563}{\code {timegm}} +\entry{ntp{\_}gettime}{564}{\code {ntp_gettime}} +\entry{ntp{\_}adjtime}{566}{\code {ntp_adjtime}} +\entry{asctime}{566}{\code {asctime}} +\entry{asctime{\_}r}{566}{\code {asctime_r}} +\entry{ctime}{567}{\code {ctime}} +\entry{ctime{\_}r}{567}{\code {ctime_r}} +\entry{strftime}{567}{\code {strftime}} +\entry{wcsftime}{571}{\code {wcsftime}} +\entry{strptime}{572}{\code {strptime}} +\entry{getdate}{577}{\code {getdate}} +\entry{getdate{\_}r}{578}{\code {getdate_r}} +\entry{tzset}{581}{\code {tzset}} +\entry{setitimer}{583}{\code {setitimer}} +\entry{getitimer}{583}{\code {getitimer}} +\entry{alarm}{584}{\code {alarm}} +\entry{sleep}{585}{\code {sleep}} +\entry{nanosleep}{585}{\code {nanosleep}} +\entry{getrusage}{587}{\code {getrusage}} +\entry{vtimes}{588}{\code {vtimes}} +\entry{getrlimit}{590}{\code {getrlimit}} +\entry{getrlimit64}{590}{\code {getrlimit64}} +\entry{setrlimit}{590}{\code {setrlimit}} +\entry{setrlimit64}{590}{\code {setrlimit64}} +\entry{ulimit}{592}{\code {ulimit}} +\entry{vlimit}{593}{\code {vlimit}} +\entry{sched{\_}setscheduler}{597}{\code {sched_setscheduler}} +\entry{sched{\_}getscheduler}{597}{\code {sched_getscheduler}} +\entry{sched{\_}setparam}{598}{\code {sched_setparam}} +\entry{sched{\_}getparam}{598}{\code {sched_getparam}} +\entry{sched{\_}get{\_}priority{\_}min}{598}{\code {sched_get_priority_min}} +\entry{sched{\_}get{\_}priority{\_}max}{598}{\code {sched_get_priority_max}} +\entry{sched{\_}rr{\_}get{\_}interval}{598}{\code {sched_rr_get_interval}} +\entry{sched{\_}yield}{599}{\code {sched_yield}} +\entry{getpriority}{601}{\code {getpriority}} +\entry{setpriority}{601}{\code {setpriority}} +\entry{nice}{602}{\code {nice}} +\entry{getpagesize}{603}{\code {getpagesize}} +\entry{get{\_}phys{\_}pages}{604}{\code {get_phys_pages}} +\entry{get{\_}avphys{\_}pages}{604}{\code {get_avphys_pages}} +\entry{get{\_}nprocs{\_}conf}{604}{\code {get_nprocs_conf}} +\entry{get{\_}nprocs}{604}{\code {get_nprocs}} +\entry{getloadavg}{605}{\code {getloadavg}} +\entry{setjmp}{608}{\code {setjmp}} +\entry{longjmp}{609}{\code {longjmp}} +\entry{sigsetjmp}{610}{\code {sigsetjmp}} +\entry{siglongjmp}{610}{\code {siglongjmp}} +\entry{getcontext}{610}{\code {getcontext}} +\entry{makecontext}{611}{\code {makecontext}} +\entry{setcontext}{612}{\code {setcontext}} +\entry{swapcontext}{612}{\code {swapcontext}} +\entry{strsignal}{627}{\code {strsignal}} +\entry{psignal}{628}{\code {psignal}} +\entry{signal}{628}{\code {signal}} +\entry{sysv{\_}signal}{630}{\code {sysv_signal}} +\entry{ssignal}{630}{\code {ssignal}} +\entry{sigaction}{631}{\code {sigaction}} +\entry{TEMP{\_}FAILURE{\_}RETRY}{645}{\code {TEMP_FAILURE_RETRY}} +\entry{raise}{646}{\code {raise}} +\entry{gsignal}{646}{\code {gsignal}} +\entry{kill}{647}{\code {kill}} +\entry{killpg}{648}{\code {killpg}} +\entry{sigemptyset}{652}{\code {sigemptyset}} +\entry{sigfillset}{652}{\code {sigfillset}} +\entry{sigaddset}{652}{\code {sigaddset}} +\entry{sigdelset}{652}{\code {sigdelset}} +\entry{sigismember}{652}{\code {sigismember}} +\entry{sigprocmask}{652}{\code {sigprocmask}} +\entry{sigpending}{655}{\code {sigpending}} +\entry{pause}{657}{\code {pause}} +\entry{sigsuspend}{659}{\code {sigsuspend}} +\entry{sigaltstack}{661}{\code {sigaltstack}} +\entry{sigstack}{661}{\code {sigstack}} +\entry{sigvec}{663}{\code {sigvec}} +\entry{siginterrupt}{663}{\code {siginterrupt}} +\entry{sigmask}{663}{\code {sigmask}} +\entry{sigblock}{663}{\code {sigblock}} +\entry{sigsetmask}{663}{\code {sigsetmask}} +\entry{sigpause}{663}{\code {sigpause}} +\entry{main}{665}{\code {main}} +\entry{getopt}{667}{\code {getopt}} +\entry{getopt{\_}long}{671}{\code {getopt_long}} +\entry{getopt{\_}long{\_}only}{672}{\code {getopt_long_only}} +\entry{argp{\_}parse}{674}{\code {argp_parse}} +\entry{argp{\_}usage}{682}{\code {argp_usage}} +\entry{argp{\_}error}{682}{\code {argp_error}} +\entry{argp{\_}failure}{682}{\code {argp_failure}} +\entry{argp{\_}state{\_}help}{683}{\code {argp_state_help}} +\entry{argp{\_}help}{687}{\code {argp_help}} +\entry{getsubopt}{698}{\code {getsubopt}} +\entry{getenv}{701}{\code {getenv}} +\entry{putenv}{701}{\code {putenv}} +\entry{setenv}{702}{\code {setenv}} +\entry{unsetenv}{702}{\code {unsetenv}} +\entry{clearenv}{702}{\code {clearenv}} +\entry{syscall}{705}{\code {syscall}} +\entry{exit}{706}{\code {exit}} +\entry{atexit}{708}{\code {atexit}} +\entry{on{\_}exit}{708}{\code {on_exit}} +\entry{abort}{709}{\code {abort}} +\entry{{\_}exit}{709}{\code {_exit}} +\entry{{\_}Exit}{709}{\code {_Exit}} +\entry{system}{711}{\code {system}} +\entry{getpid}{712}{\code {getpid}} +\entry{getppid}{712}{\code {getppid}} +\entry{fork}{713}{\code {fork}} +\entry{vfork}{713}{\code {vfork}} +\entry{execv}{714}{\code {execv}} +\entry{execl}{714}{\code {execl}} +\entry{execve}{714}{\code {execve}} +\entry{execle}{714}{\code {execle}} +\entry{execvp}{715}{\code {execvp}} +\entry{execlp}{715}{\code {execlp}} +\entry{waitpid}{716}{\code {waitpid}} +\entry{wait}{718}{\code {wait}} +\entry{wait4}{718}{\code {wait4}} +\entry{WIFEXITED}{719}{\code {WIFEXITED}} +\entry{WEXITSTATUS}{719}{\code {WEXITSTATUS}} +\entry{WIFSIGNALED}{719}{\code {WIFSIGNALED}} +\entry{WTERMSIG}{719}{\code {WTERMSIG}} +\entry{WCOREDUMP}{719}{\code {WCOREDUMP}} +\entry{WIFSTOPPED}{720}{\code {WIFSTOPPED}} +\entry{WSTOPSIG}{720}{\code {WSTOPSIG}} +\entry{wait3}{720}{\code {wait3}} +\entry{ctermid}{738}{\code {ctermid}} +\entry{setsid}{739}{\code {setsid}} +\entry{getsid}{739}{\code {getsid}} +\entry{getpgrp}{739}{\code {getpgrp}} +\entry{getpgrp}{739}{\code {getpgrp}} +\entry{getpgid}{739}{\code {getpgid}} +\entry{setpgid}{740}{\code {setpgid}} +\entry{setpgrp}{740}{\code {setpgrp}} +\entry{tcgetpgrp}{740}{\code {tcgetpgrp}} +\entry{tcsetpgrp}{741}{\code {tcsetpgrp}} +\entry{tcgetsid}{741}{\code {tcgetsid}} +\entry{success}{745}{\code {success}} +\entry{notfound}{745}{\code {notfound}} +\entry{unavail}{745}{\code {unavail}} +\entry{tryagain}{745}{\code {tryagain}} +\entry{getuid}{755}{\code {getuid}} +\entry{getgid}{755}{\code {getgid}} +\entry{geteuid}{755}{\code {geteuid}} +\entry{getegid}{755}{\code {getegid}} +\entry{getgroups}{755}{\code {getgroups}} +\entry{seteuid}{756}{\code {seteuid}} +\entry{setuid}{756}{\code {setuid}} +\entry{setreuid}{757}{\code {setreuid}} +\entry{setegid}{757}{\code {setegid}} +\entry{setgid}{757}{\code {setgid}} +\entry{setregid}{757}{\code {setregid}} +\entry{setgroups}{758}{\code {setgroups}} +\entry{initgroups}{758}{\code {initgroups}} +\entry{getlogin}{762}{\code {getlogin}} +\entry{cuserid}{762}{\code {cuserid}} +\entry{setutent}{765}{\code {setutent}} +\entry{getutent}{765}{\code {getutent}} +\entry{endutent}{765}{\code {endutent}} +\entry{getutid}{765}{\code {getutid}} +\entry{getutline}{766}{\code {getutline}} +\entry{pututline}{766}{\code {pututline}} +\entry{getutent{\_}r}{766}{\code {getutent_r}} +\entry{getutid{\_}r}{766}{\code {getutid_r}} +\entry{getutline{\_}r}{767}{\code {getutline_r}} +\entry{utmpname}{767}{\code {utmpname}} +\entry{updwtmp}{767}{\code {updwtmp}} +\entry{setutxent}{769}{\code {setutxent}} +\entry{getutxent}{769}{\code {getutxent}} +\entry{endutxent}{769}{\code {endutxent}} +\entry{getutxid}{769}{\code {getutxid}} +\entry{getutxline}{769}{\code {getutxline}} +\entry{pututxline}{769}{\code {pututxline}} +\entry{utmpxname}{769}{\code {utmpxname}} +\entry{getutmp}{770}{\code {getutmp}} +\entry{getutmpx}{770}{\code {getutmpx}} +\entry{login{\_}tty}{770}{\code {login_tty}} +\entry{login}{770}{\code {login}} +\entry{logout}{770}{\code {logout}} +\entry{logwtmp}{770}{\code {logwtmp}} +\entry{getpwuid}{771}{\code {getpwuid}} +\entry{getpwuid{\_}r}{772}{\code {getpwuid_r}} +\entry{getpwnam}{772}{\code {getpwnam}} +\entry{getpwnam{\_}r}{772}{\code {getpwnam_r}} +\entry{fgetpwent}{772}{\code {fgetpwent}} +\entry{fgetpwent{\_}r}{772}{\code {fgetpwent_r}} +\entry{setpwent}{773}{\code {setpwent}} +\entry{getpwent}{773}{\code {getpwent}} +\entry{getpwent{\_}r}{773}{\code {getpwent_r}} +\entry{endpwent}{773}{\code {endpwent}} +\entry{putpwent}{773}{\code {putpwent}} +\entry{getgrgid}{774}{\code {getgrgid}} +\entry{getgrgid{\_}r}{774}{\code {getgrgid_r}} +\entry{getgrnam}{775}{\code {getgrnam}} +\entry{getgrnam{\_}r}{775}{\code {getgrnam_r}} +\entry{fgetgrent}{775}{\code {fgetgrent}} +\entry{fgetgrent{\_}r}{775}{\code {fgetgrent_r}} +\entry{setgrent}{775}{\code {setgrent}} +\entry{getgrent}{776}{\code {getgrent}} +\entry{getgrent{\_}r}{776}{\code {getgrent_r}} +\entry{endgrent}{776}{\code {endgrent}} +\entry{setnetgrent}{778}{\code {setnetgrent}} +\entry{getnetgrent}{778}{\code {getnetgrent}} +\entry{getnetgrent{\_}r}{779}{\code {getnetgrent_r}} +\entry{endnetgrent}{779}{\code {endnetgrent}} +\entry{innetgr}{779}{\code {innetgr}} +\entry{gethostname}{781}{\code {gethostname}} +\entry{sethostname}{782}{\code {sethostname}} +\entry{getdomainnname}{782}{\code {getdomainnname}} +\entry{setdomainname}{782}{\code {setdomainname}} +\entry{gethostid}{782}{\code {gethostid}} +\entry{sethostid}{783}{\code {sethostid}} +\entry{uname}{784}{\code {uname}} +\entry{setfsent}{786}{\code {setfsent}} +\entry{endfsent}{787}{\code {endfsent}} +\entry{getfsent}{787}{\code {getfsent}} +\entry{getfsspec}{787}{\code {getfsspec}} +\entry{getfsfile}{787}{\code {getfsfile}} +\entry{setmntent}{789}{\code {setmntent}} +\entry{endmntent}{789}{\code {endmntent}} +\entry{getmntent}{789}{\code {getmntent}} +\entry{getmntent{\_}r}{790}{\code {getmntent_r}} +\entry{addmntent}{790}{\code {addmntent}} +\entry{hasmntopt}{790}{\code {hasmntopt}} +\entry{mount}{791}{\code {mount}} +\entry{umount2}{794}{\code {umount2}} +\entry{umount}{794}{\code {umount}} +\entry{sysctl}{795}{\code {sysctl}} +\entry{sysconf}{800}{\code {sysconf}} +\entry{pathconf}{813}{\code {pathconf}} +\entry{fpathconf}{813}{\code {fpathconf}} +\entry{confstr}{816}{\code {confstr}} +\entry{getpass}{820}{\code {getpass}} +\entry{crypt}{821}{\code {crypt}} +\entry{crypt{\_}r}{823}{\code {crypt_r}} +\entry{setkey}{823}{\code {setkey}} +\entry{encrypt}{823}{\code {encrypt}} +\entry{setkey{\_}r}{824}{\code {setkey_r}} +\entry{encrypt{\_}r}{824}{\code {encrypt_r}} +\entry{ecb{\_}crypt}{824}{\code {ecb_crypt}} +\entry{DES{\_}FAILED}{825}{\code {DES_FAILED}} +\entry{cbc{\_}crypt}{825}{\code {cbc_crypt}} +\entry{des{\_}setparity}{825}{\code {des_setparity}} +\entry{backtrace}{827}{\code {backtrace}} +\entry{backtrace{\_}symbols}{827}{\code {backtrace_symbols}} +\entry{backtrace{\_}symbols{\_}fd}{828}{\code {backtrace_symbols_fd}} +\entry{pthread{\_}create}{831}{\code {pthread_create}} +\entry{pthread{\_}exit}{831}{\code {pthread_exit}} +\entry{pthread{\_}cancel}{832}{\code {pthread_cancel}} +\entry{pthread{\_}join}{832}{\code {pthread_join}} +\entry{pthread{\_}attr{\_}init}{832}{\code {pthread_attr_init}} +\entry{pthread{\_}attr{\_}destroy}{833}{\code {pthread_attr_destroy}} +\entry{pthread{\_}attr{\_}setdetachstate}{833}{\code {pthread_attr_setdetachstate}} +\entry{pthread{\_}attr{\_}setguardsize}{833}{\code {pthread_attr_setguardsize}} +\entry{pthread{\_}attr{\_}setinheritsched}{833}{\code {pthread_attr_setinheritsched}} +\entry{pthread{\_}attr{\_}setschedparam}{833}{\code {pthread_attr_setschedparam}} +\entry{pthread{\_}attr{\_}setschedpolicy}{833}{\code {pthread_attr_setschedpolicy}} +\entry{pthread{\_}attr{\_}setscope}{833}{\code {pthread_attr_setscope}} +\entry{pthread{\_}attr{\_}setstack}{833}{\code {pthread_attr_setstack}} +\entry{pthread{\_}attr{\_}setstackaddr}{833}{\code {pthread_attr_setstackaddr}} +\entry{pthread{\_}attr{\_}setstacksize}{833}{\code {pthread_attr_setstacksize}} +\entry{pthread{\_}attr{\_}setattr}{833}{\code {pthread_attr_setattr}} +\entry{pthread{\_}attr{\_}getdetachstate}{833}{\code {pthread_attr_getdetachstate}} +\entry{pthread{\_}attr{\_}getguardsize}{833}{\code {pthread_attr_getguardsize}} +\entry{pthread{\_}attr{\_}getinheritsched}{833}{\code {pthread_attr_getinheritsched}} +\entry{pthread{\_}attr{\_}getschedparam}{833}{\code {pthread_attr_getschedparam}} +\entry{pthread{\_}attr{\_}getschedpolicy}{833}{\code {pthread_attr_getschedpolicy}} +\entry{pthread{\_}attr{\_}getscope}{833}{\code {pthread_attr_getscope}} +\entry{pthread{\_}attr{\_}getstack}{833}{\code {pthread_attr_getstack}} +\entry{pthread{\_}attr{\_}getstackaddr}{833}{\code {pthread_attr_getstackaddr}} +\entry{pthread{\_}attr{\_}getstacksize}{833}{\code {pthread_attr_getstacksize}} +\entry{pthread{\_}attr{\_}getattr}{833}{\code {pthread_attr_getattr}} +\entry{pthread{\_}setcancelstate}{835}{\code {pthread_setcancelstate}} +\entry{pthread{\_}setcanceltype}{836}{\code {pthread_setcanceltype}} +\entry{pthread{\_}testcancel}{836}{\code {pthread_testcancel}} +\entry{pthread{\_}cleanup{\_}push}{837}{\code {pthread_cleanup_push}} +\entry{pthread{\_}cleanup{\_}pop}{837}{\code {pthread_cleanup_pop}} +\entry{pthread{\_}cleanup{\_}push{\_}defer{\_}np}{837}{\code {pthread_cleanup_push_defer_np}} +\entry{pthread{\_}cleanup{\_}pop{\_}restore{\_}np}{837}{\code {pthread_cleanup_pop_restore_np}} +\entry{pthread{\_}mutex{\_}init}{838}{\code {pthread_mutex_init}} +\entry{pthread{\_}mutex{\_}lock}{839}{\code {pthread_mutex_lock}} +\entry{pthread{\_}mutex{\_}trylock}{839}{\code {pthread_mutex_trylock}} +\entry{pthread{\_}mutex{\_}timedlock}{839}{\code {pthread_mutex_timedlock}} +\entry{pthread{\_}mutex{\_}unlock}{839}{\code {pthread_mutex_unlock}} +\entry{pthread{\_}mutex{\_}destroy}{840}{\code {pthread_mutex_destroy}} +\entry{pthread{\_}mutexattr{\_}init}{840}{\code {pthread_mutexattr_init}} +\entry{pthread{\_}mutexattr{\_}destroy}{840}{\code {pthread_mutexattr_destroy}} +\entry{pthread{\_}mutexattr{\_}settype}{841}{\code {pthread_mutexattr_settype}} +\entry{pthread{\_}mutexattr{\_}gettype}{841}{\code {pthread_mutexattr_gettype}} +\entry{pthread{\_}cond{\_}init}{841}{\code {pthread_cond_init}} +\entry{pthread{\_}cond{\_}signal}{842}{\code {pthread_cond_signal}} +\entry{pthread{\_}cond{\_}broadcast}{842}{\code {pthread_cond_broadcast}} +\entry{pthread{\_}cond{\_}wait}{842}{\code {pthread_cond_wait}} +\entry{pthread{\_}cond{\_}timedwait}{842}{\code {pthread_cond_timedwait}} +\entry{pthread{\_}cond{\_}destroy}{842}{\code {pthread_cond_destroy}} +\entry{pthread{\_}condattr{\_}init}{844}{\code {pthread_condattr_init}} +\entry{pthread{\_}condattr{\_}destroy}{844}{\code {pthread_condattr_destroy}} +\entry{sem{\_}init}{844}{\code {sem_init}} +\entry{sem{\_}destroy}{844}{\code {sem_destroy}} +\entry{sem{\_}wait}{845}{\code {sem_wait}} +\entry{sem{\_}trywait}{845}{\code {sem_trywait}} +\entry{sem{\_}post}{845}{\code {sem_post}} +\entry{sem{\_}getvalue}{845}{\code {sem_getvalue}} +\entry{pthread{\_}key{\_}create}{845}{\code {pthread_key_create}} +\entry{pthread{\_}key{\_}delete}{846}{\code {pthread_key_delete}} +\entry{pthread{\_}setspecific}{846}{\code {pthread_setspecific}} +\entry{pthread{\_}getspecific}{846}{\code {pthread_getspecific}} +\entry{pthread{\_}sigmask}{847}{\code {pthread_sigmask}} +\entry{pthread{\_}kill}{847}{\code {pthread_kill}} +\entry{sigwait}{848}{\code {sigwait}} +\entry{pthread{\_}atfork}{849}{\code {pthread_atfork}} +\entry{pthread{\_}self}{850}{\code {pthread_self}} +\entry{pthread{\_}equal}{850}{\code {pthread_equal}} +\entry{pthread{\_}detach}{851}{\code {pthread_detach}} +\entry{pthread{\_}kill{\_}other{\_}threads{\_}np}{851}{\code {pthread_kill_other_threads_np}} +\entry{pthread{\_}once}{851}{\code {pthread_once}} +\entry{pthread{\_}setschedparam}{852}{\code {pthread_setschedparam}} +\entry{pthread{\_}getschedparam}{852}{\code {pthread_getschedparam}} +\entry{pthread{\_}setconcurrency}{852}{\code {pthread_setconcurrency}} +\entry{pthread{\_}getconcurrency}{852}{\code {pthread_getconcurrency}} +\entry{assert}{853}{\code {assert}} +\entry{assert{\_}perror}{854}{\code {assert_perror}} +\entry{va{\_}start}{858}{\code {va_start}} +\entry{va{\_}arg}{858}{\code {va_arg}} +\entry{va{\_}end}{858}{\code {va_end}} +\entry{{\_}{\_}va{\_}copy}{858}{\code {__va_copy}} +\entry{va{\_}alist}{860}{\code {va_alist}} +\entry{va{\_}dcl}{860}{\code {va_dcl}} +\entry{va{\_}start}{860}{\code {va_start}} +\entry{offsetof}{869}{\code {offsetof}} diff -durpNa glibc-2.2.2/manual/libc.fns glibc-2.2.3/manual/libc.fns --- glibc-2.2.2/manual/libc.fns Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.fns Wed Apr 25 16:05:56 2001 @@ -8,28 +8,28 @@ \entry {\code {__fsetlocking}}{247} \entry {\code {__fwritable}}{243} \entry {\code {__fwriting}}{243} -\entry {\code {__va_copy}}{850} -\entry {\code {_exit}}{701} -\entry {\code {_Exit}}{701} +\entry {\code {__va_copy}}{858} +\entry {\code {_exit}}{709} +\entry {\code {_Exit}}{709} \entry {\code {_flushlbf}}{299} \entry {\code {_tolower}}{69} \entry {\code {_toupper}}{69} \initial {A} \entry {\code {a64l}}{111} -\entry {\code {abort}}{701} -\entry {\code {abs}}{533} +\entry {\code {abort}}{709} +\entry {\code {abs}}{535} \entry {\code {accept}}{437} -\entry {\code {access}}{392} +\entry {\code {access}}{393} \entry {\code {acos}}{496} \entry {\code {acosf}}{496} \entry {\code {acosh}}{502} \entry {\code {acoshf}}{502} \entry {\code {acoshl}}{502} \entry {\code {acosl}}{496} -\entry {\code {addmntent}}{782} +\entry {\code {addmntent}}{790} \entry {\code {addseverity}}{310} -\entry {\code {adjtime}}{558} -\entry {\code {adjtimex}}{558} +\entry {\code {adjtime}}{560} +\entry {\code {adjtimex}}{560} \entry {\code {aio_cancel}}{344} \entry {\code {aio_cancel64}}{344} \entry {\code {aio_error}}{340} @@ -45,16 +45,16 @@ \entry {\code {aio_suspend64}}{343} \entry {\code {aio_write}}{338} \entry {\code {aio_write64}}{338} -\entry {\code {alarm}}{582} +\entry {\code {alarm}}{584} \entry {\code {alloca}}{60} \entry {\code {alphasort}}{368} \entry {\code {alphasort64}}{369} -\entry {\code {argp_error}}{674} -\entry {\code {argp_failure}}{674} -\entry {\code {argp_help}}{679} -\entry {\code {argp_parse}}{666} -\entry {\code {argp_state_help}}{675} -\entry {\code {argp_usage}}{674} +\entry {\code {argp_error}}{682} +\entry {\code {argp_failure}}{682} +\entry {\code {argp_help}}{687} +\entry {\code {argp_parse}}{674} +\entry {\code {argp_state_help}}{683} +\entry {\code {argp_usage}}{682} \entry {\code {argz_add}}{113} \entry {\code {argz_add_sep}}{113} \entry {\code {argz_append}}{113} @@ -67,8 +67,8 @@ \entry {\code {argz_next}}{113} \entry {\code {argz_replace}}{114} \entry {\code {argz_stringify}}{112} -\entry {\code {asctime}}{564} -\entry {\code {asctime_r}}{564} +\entry {\code {asctime}}{566} +\entry {\code {asctime_r}}{566} \entry {\code {asin}}{496} \entry {\code {asinf}}{496} \entry {\code {asinh}}{502} @@ -76,8 +76,8 @@ \entry {\code {asinhl}}{502} \entry {\code {asinl}}{496} \entry {\code {asprintf}}{269} -\entry {\code {assert}}{845} -\entry {\code {assert_perror}}{846} +\entry {\code {assert}}{853} +\entry {\code {assert_perror}}{854} \entry {\code {atan}}{496} \entry {\code {atan2}}{496} \entry {\code {atan2f}}{496} @@ -87,15 +87,15 @@ \entry {\code {atanhf}}{502} \entry {\code {atanhl}}{502} \entry {\code {atanl}}{496} -\entry {\code {atexit}}{700} -\entry {\code {atof}}{548} -\entry {\code {atoi}}{546} -\entry {\code {atol}}{546} -\entry {\code {atoll}}{546} +\entry {\code {atexit}}{708} +\entry {\code {atof}}{550} +\entry {\code {atoi}}{548} +\entry {\code {atol}}{548} +\entry {\code {atoll}}{548} \initial {B} -\entry {\code {backtrace}}{819} -\entry {\code {backtrace_symbols}}{819} -\entry {\code {backtrace_symbols_fd}}{820} +\entry {\code {backtrace}}{827} +\entry {\code {backtrace_symbols}}{827} +\entry {\code {backtrace_symbols_fd}}{828} \entry {\code {basename}}{107, 108} \entry {\code {bcmp}}{95} \entry {\code {bcopy}}{91} @@ -107,9 +107,9 @@ \entry {\code {btowc}}{124} \entry {\code {bzero}}{91} \initial {C} -\entry {\code {cabs}}{533} -\entry {\code {cabsf}}{533} -\entry {\code {cabsl}}{533} +\entry {\code {cabs}}{535} +\entry {\code {cabsf}}{535} +\entry {\code {cabsl}}{535} \entry {\code {cacos}}{497} \entry {\code {cacosf}}{497} \entry {\code {cacosh}}{502} @@ -117,9 +117,10 @@ \entry {\code {cacoshl}}{502} \entry {\code {cacosl}}{497} \entry {\code {calloc}}{37} -\entry {\code {carg}}{542} -\entry {\code {cargf}}{542} -\entry {\code {cargl}}{542} +\entry {\code {canonicalize_file_name}}{377} +\entry {\code {carg}}{544} +\entry {\code {cargf}}{544} +\entry {\code {cargl}}{544} \entry {\code {casin}}{497} \entry {\code {casinf}}{497} \entry {\code {casinh}}{502} @@ -135,7 +136,7 @@ \entry {\code {catclose}}{182} \entry {\code {catgets}}{182} \entry {\code {catopen}}{179} -\entry {\code {cbc_crypt}}{817} +\entry {\code {cbc_crypt}}{825} \entry {\code {cbrt}}{499} \entry {\code {cbrtf}}{499} \entry {\code {cbrtl}}{499} @@ -145,9 +146,9 @@ \entry {\code {ccoshf}}{502} \entry {\code {ccoshl}}{502} \entry {\code {ccosl}}{495} -\entry {\code {ceil}}{535} -\entry {\code {ceilf}}{535} -\entry {\code {ceill}}{535} +\entry {\code {ceil}}{537} +\entry {\code {ceilf}}{537} +\entry {\code {ceill}}{537} \entry {\code {cexp}}{500} \entry {\code {cexpf}}{500} \entry {\code {cexpl}}{500} @@ -159,15 +160,15 @@ \entry {\code {cfsetospeed}}{470} \entry {\code {cfsetspeed}}{470} \entry {\code {chdir}}{362} -\entry {\code {chmod}}{390, 391} -\entry {\code {chown}}{387} -\entry {\code {cimag}}{542} -\entry {\code {cimagf}}{542} -\entry {\code {cimagl}}{542} -\entry {\code {clearenv}}{694} +\entry {\code {chmod}}{391, 392} +\entry {\code {chown}}{388} +\entry {\code {cimag}}{544} +\entry {\code {cimagf}}{544} +\entry {\code {cimagl}}{544} +\entry {\code {clearenv}}{702} \entry {\code {clearerr}}{292} \entry {\code {clearerr_unlocked}}{292} -\entry {\code {clock}}{554} +\entry {\code {clock}}{556} \entry {\code {clog}}{500} \entry {\code {clog10}}{500} \entry {\code {clog10f}}{500} @@ -177,14 +178,14 @@ \entry {\code {close}}{315} \entry {\code {closedir}}{367} \entry {\code {closelog}}{490} -\entry {\code {confstr}}{808} -\entry {\code {conj}}{542} -\entry {\code {conjf}}{542} -\entry {\code {conjl}}{542} +\entry {\code {confstr}}{816} +\entry {\code {conj}}{544} +\entry {\code {conjf}}{544} +\entry {\code {conjl}}{544} \entry {\code {connect}}{435} -\entry {\code {copysign}}{538} -\entry {\code {copysignf}}{538} -\entry {\code {copysignl}}{538} +\entry {\code {copysign}}{540} +\entry {\code {copysignf}}{540} +\entry {\code {copysignl}}{540} \entry {\code {cos}}{494} \entry {\code {cosf}}{494} \entry {\code {cosh}}{501} @@ -194,16 +195,16 @@ \entry {\code {cpow}}{501} \entry {\code {cpowf}}{501} \entry {\code {cpowl}}{501} -\entry {\code {cproj}}{542} -\entry {\code {cprojf}}{542} -\entry {\code {cprojl}}{542} -\entry {\code {creal}}{542} -\entry {\code {crealf}}{542} -\entry {\code {creall}}{542} +\entry {\code {cproj}}{544} +\entry {\code {cprojf}}{544} +\entry {\code {cprojl}}{544} +\entry {\code {creal}}{544} +\entry {\code {crealf}}{544} +\entry {\code {creall}}{544} \entry {\code {creat}}{314} \entry {\code {creat64}}{315} -\entry {\code {crypt}}{813} -\entry {\code {crypt_r}}{815} +\entry {\code {crypt}}{821} +\entry {\code {crypt_r}}{823} \entry {\code {csin}}{495} \entry {\code {csinf}}{495} \entry {\code {csinh}}{501} @@ -219,66 +220,66 @@ \entry {\code {ctanhf}}{502} \entry {\code {ctanhl}}{502} \entry {\code {ctanl}}{495} -\entry {\code {ctermid}}{730} -\entry {\code {ctime}}{565} -\entry {\code {ctime_r}}{565} -\entry {\code {cuserid}}{754} +\entry {\code {ctermid}}{738} +\entry {\code {ctime}}{567} +\entry {\code {ctime_r}}{567} +\entry {\code {cuserid}}{762} \initial {D} \entry {\code {dcgettext}}{190} \entry {\code {dcngettext}}{194} -\entry {\code {DES_FAILED}}{817} -\entry {\code {des_setparity}}{817} +\entry {\code {DES_FAILED}}{825} +\entry {\code {des_setparity}}{825} \entry {\code {dgettext}}{190} -\entry {\code {difftime}}{551} +\entry {\code {difftime}}{553} \entry {\code {dirfd}}{365} \entry {\code {dirname}}{108} -\entry {\code {div}}{521} +\entry {\code {div}}{523} \entry {\code {dngettext}}{194} -\entry {\code {drand48}}{513} -\entry {\code {drand48_r}}{515} -\entry {\code {drem}}{537} -\entry {\code {dremf}}{537} -\entry {\code {dreml}}{537} +\entry {\code {drand48}}{514} +\entry {\code {drand48_r}}{516} +\entry {\code {drem}}{539} +\entry {\code {dremf}}{539} +\entry {\code {dreml}}{539} \entry {\code {DTTOIF}}{364} \entry {\code {dup}}{347} \entry {\code {dup2}}{347} \initial {E} -\entry {\code {ecb_crypt}}{816} -\entry {\code {ecvt}}{549} -\entry {\code {ecvt_r}}{550} -\entry {\code {encrypt}}{815} -\entry {\code {encrypt_r}}{816} -\entry {\code {endfsent}}{779} -\entry {\code {endgrent}}{768} +\entry {\code {ecb_crypt}}{824} +\entry {\code {ecvt}}{551} +\entry {\code {ecvt_r}}{552} +\entry {\code {encrypt}}{823} +\entry {\code {encrypt_r}}{824} +\entry {\code {endfsent}}{787} +\entry {\code {endgrent}}{776} \entry {\code {endhostent}}{426} -\entry {\code {endmntent}}{781} +\entry {\code {endmntent}}{789} \entry {\code {endnetent}}{455} -\entry {\code {endnetgrent}}{771} +\entry {\code {endnetgrent}}{779} \entry {\code {endprotoent}}{430} -\entry {\code {endpwent}}{765} +\entry {\code {endpwent}}{773} \entry {\code {endservent}}{428} -\entry {\code {endutent}}{757} -\entry {\code {endutxent}}{761} +\entry {\code {endutent}}{765} +\entry {\code {endutxent}}{769} \entry {\code {envz_add}}{114} \entry {\code {envz_entry}}{114} \entry {\code {envz_get}}{114} \entry {\code {envz_merge}}{115} \entry {\code {envz_strip}}{115} -\entry {\code {erand48}}{514} -\entry {\code {erand48_r}}{516} +\entry {\code {erand48}}{515} +\entry {\code {erand48_r}}{517} \entry {\code {erf}}{503} \entry {\code {erfc}}{503} \entry {\code {erfcf}}{503} \entry {\code {erfcl}}{503} \entry {\code {erff}}{503} \entry {\code {erfl}}{503} -\entry {\code {execl}}{706} -\entry {\code {execle}}{706} -\entry {\code {execlp}}{707} -\entry {\code {execv}}{706} -\entry {\code {execve}}{706} -\entry {\code {execvp}}{707} -\entry {\code {exit}}{698} +\entry {\code {execl}}{714} +\entry {\code {execle}}{714} +\entry {\code {execlp}}{715} +\entry {\code {execv}}{714} +\entry {\code {execve}}{714} +\entry {\code {execvp}}{715} +\entry {\code {exit}}{706} \entry {\code {exp}}{497} \entry {\code {exp10}}{497} \entry {\code {exp10f}}{497} @@ -292,55 +293,55 @@ \entry {\code {expm1f}}{500} \entry {\code {expm1l}}{500} \initial {F} -\entry {\code {fabs}}{533} -\entry {\code {fabsf}}{533} -\entry {\code {fabsl}}{533} +\entry {\code {fabs}}{535} +\entry {\code {fabsf}}{535} +\entry {\code {fabsl}}{535} \entry {\code {fchdir}}{362} -\entry {\code {fchmod}}{391} -\entry {\code {fchown}}{387} +\entry {\code {fchmod}}{392} +\entry {\code {fchown}}{388} \entry {\code {fclean}}{325} \entry {\code {fclose}}{243} \entry {\code {fcloseall}}{244} \entry {\code {fcntl}}{346} -\entry {\code {fcvt}}{549} -\entry {\code {fcvt_r}}{550} +\entry {\code {fcvt}}{551} +\entry {\code {fcvt_r}}{552} \entry {\code {FD_CLR}}{331} \entry {\code {FD_ISSET}}{331} \entry {\code {FD_SET}}{331} \entry {\code {FD_ZERO}}{330} \entry {\code {fdatasync}}{333} -\entry {\code {fdim}}{540} -\entry {\code {fdimf}}{540} -\entry {\code {fdiml}}{540} +\entry {\code {fdim}}{542} +\entry {\code {fdimf}}{542} +\entry {\code {fdiml}}{542} \entry {\code {fdopen}}{323} -\entry {\code {feclearexcept}}{527} -\entry {\code {fedisableexcept}}{532} -\entry {\code {feenableexcept}}{532} -\entry {\code {fegetenv}}{531} -\entry {\code {fegetexcept}}{532} -\entry {\code {fegetexceptflag}}{528} -\entry {\code {fegetround}}{530} -\entry {\code {feholdexcept}}{531} +\entry {\code {feclearexcept}}{529} +\entry {\code {fedisableexcept}}{534} +\entry {\code {feenableexcept}}{534} +\entry {\code {fegetenv}}{533} +\entry {\code {fegetexcept}}{534} +\entry {\code {fegetexceptflag}}{530} +\entry {\code {fegetround}}{532} +\entry {\code {feholdexcept}}{533} \entry {\code {feof}}{291} \entry {\code {feof_unlocked}}{291} -\entry {\code {feraiseexcept}}{528} +\entry {\code {feraiseexcept}}{530} \entry {\code {ferror}}{291} \entry {\code {ferror_unlocked}}{291} -\entry {\code {fesetenv}}{532} -\entry {\code {fesetexceptflag}}{528} -\entry {\code {fesetround}}{531} -\entry {\code {fetestexcept}}{528} -\entry {\code {feupdateenv}}{532} +\entry {\code {fesetenv}}{534} +\entry {\code {fesetexceptflag}}{530} +\entry {\code {fesetround}}{533} +\entry {\code {fetestexcept}}{530} +\entry {\code {feupdateenv}}{534} \entry {\code {fflush}}{299} \entry {\code {fflush_unlocked}}{299} \entry {\code {fgetc}}{252} \entry {\code {fgetc_unlocked}}{252} -\entry {\code {fgetgrent}}{767} -\entry {\code {fgetgrent_r}}{767} +\entry {\code {fgetgrent}}{775} +\entry {\code {fgetgrent_r}}{775} \entry {\code {fgetpos}}{297} \entry {\code {fgetpos64}}{297} -\entry {\code {fgetpwent}}{764} -\entry {\code {fgetpwent_r}}{764} +\entry {\code {fgetpwent}}{772} +\entry {\code {fgetpwent_r}}{772} \entry {\code {fgets}}{255} \entry {\code {fgets_unlocked}}{255} \entry {\code {fgetwc}}{252} @@ -349,35 +350,35 @@ \entry {\code {fgetws_unlocked}}{255} \entry {\code {fileno}}{323} \entry {\code {fileno_unlocked}}{323} -\entry {\code {finite}}{524} -\entry {\code {finitef}}{524} -\entry {\code {finitel}}{524} +\entry {\code {finite}}{526} +\entry {\code {finitef}}{526} +\entry {\code {finitel}}{526} \entry {\code {flockfile}}{245} -\entry {\code {floor}}{535} -\entry {\code {floorf}}{535} -\entry {\code {floorl}}{535} -\entry {\code {fma}}{540} -\entry {\code {fmaf}}{540} -\entry {\code {fmal}}{540} -\entry {\code {fmax}}{540} -\entry {\code {fmaxf}}{540} -\entry {\code {fmaxl}}{540} +\entry {\code {floor}}{537} +\entry {\code {floorf}}{537} +\entry {\code {floorl}}{537} +\entry {\code {fma}}{542} +\entry {\code {fmaf}}{542} +\entry {\code {fmal}}{542} +\entry {\code {fmax}}{542} +\entry {\code {fmaxf}}{542} +\entry {\code {fmaxl}}{542} \entry {\code {fmemopen}}{302} -\entry {\code {fmin}}{540} -\entry {\code {fminf}}{540} -\entry {\code {fminl}}{540} -\entry {\code {fmod}}{537} -\entry {\code {fmodf}}{537} -\entry {\code {fmodl}}{537} +\entry {\code {fmin}}{542} +\entry {\code {fminf}}{542} +\entry {\code {fminl}}{542} +\entry {\code {fmod}}{539} +\entry {\code {fmodf}}{539} +\entry {\code {fmodl}}{539} \entry {\code {fmtmsg}}{308} \entry {\code {fnmatch}}{213} \entry {\code {fopen}}{240} \entry {\code {fopen64}}{241} \entry {\code {fopencookie}}{306} -\entry {\code {fork}}{705} +\entry {\code {fork}}{713} \entry {\code {forkpty}}{483} -\entry {\code {fpathconf}}{805} -\entry {\code {fpclassify}}{522} +\entry {\code {fpathconf}}{813} +\entry {\code {fpclassify}}{524} \entry {\code {fprintf}}{267} \entry {\code {fputc}}{249} \entry {\code {fputc_unlocked}}{249} @@ -392,23 +393,23 @@ \entry {\code {free}}{35} \entry {\code {freopen}}{242} \entry {\code {freopen64}}{242} -\entry {\code {frexp}}{534} -\entry {\code {frexpf}}{534} -\entry {\code {frexpl}}{534} +\entry {\code {frexp}}{536} +\entry {\code {frexpf}}{536} +\entry {\code {frexpl}}{536} \entry {\code {fscanf}}{289} \entry {\code {fseek}}{294} \entry {\code {fseeko}}{294} \entry {\code {fseeko64}}{295} \entry {\code {fsetpos}}{297} \entry {\code {fsetpos64}}{297} -\entry {\code {fstat}}{384} -\entry {\code {fstat64}}{384} +\entry {\code {fstat}}{385} +\entry {\code {fstat64}}{385} \entry {\code {fsync}}{333} \entry {\code {ftell}}{293} \entry {\code {ftello}}{294} \entry {\code {ftello64}}{294} -\entry {\code {ftruncate}}{396} -\entry {\code {ftruncate64}}{396} +\entry {\code {ftruncate}}{397} +\entry {\code {ftruncate64}}{397} \entry {\code {ftrylockfile}}{245} \entry {\code {ftw}}{372} \entry {\code {ftw64}}{373} @@ -422,33 +423,36 @@ \entry {\code {gamma}}{504} \entry {\code {gammaf}}{504} \entry {\code {gammal}}{504} -\entry {\code {gcvt}}{549} +\entry {\code {gcvt}}{551} +\entry {\code {get_avphys_pages}}{604} \entry {\code {get_current_dir_name}}{362} -\entry {\code {get_nprocs}}{602} -\entry {\code {get_nprocs_conf}}{602} +\entry {\code {get_nprocs}}{604} +\entry {\code {get_nprocs_conf}}{604} +\entry {\code {get_phys_pages}}{604} \entry {\code {getc}}{252} \entry {\code {getc_unlocked}}{252} \entry {\code {getchar}}{252} \entry {\code {getchar_unlocked}}{253} +\entry {\code {getcontext}}{610} \entry {\code {getcwd}}{361} -\entry {\code {getdate}}{575} -\entry {\code {getdate_r}}{576} +\entry {\code {getdate}}{577} +\entry {\code {getdate_r}}{578} \entry {\code {getdelim}}{254} -\entry {\code {getdomainnname}}{774} -\entry {\code {getegid}}{747} -\entry {\code {getenv}}{693} -\entry {\code {geteuid}}{747} -\entry {\code {getfsent}}{779} -\entry {\code {getfsfile}}{779} -\entry {\code {getfsspec}}{779} -\entry {\code {getgid}}{747} -\entry {\code {getgrent}}{768} -\entry {\code {getgrent_r}}{768} -\entry {\code {getgrgid}}{766} -\entry {\code {getgrgid_r}}{766} -\entry {\code {getgrnam}}{767} -\entry {\code {getgrnam_r}}{767} -\entry {\code {getgroups}}{747} +\entry {\code {getdomainnname}}{782} +\entry {\code {getegid}}{755} +\entry {\code {getenv}}{701} +\entry {\code {geteuid}}{755} +\entry {\code {getfsent}}{787} +\entry {\code {getfsfile}}{787} +\entry {\code {getfsspec}}{787} +\entry {\code {getgid}}{755} +\entry {\code {getgrent}}{776} +\entry {\code {getgrent_r}}{776} +\entry {\code {getgrgid}}{774} +\entry {\code {getgrgid_r}}{774} +\entry {\code {getgrnam}}{775} +\entry {\code {getgrnam_r}}{775} +\entry {\code {getgroups}}{755} \entry {\code {gethostbyaddr}}{424} \entry {\code {gethostbyaddr_r}}{426} \entry {\code {gethostbyname}}{424} @@ -456,83 +460,83 @@ \entry {\code {gethostbyname2}}{424} \entry {\code {gethostbyname2_r}}{426} \entry {\code {gethostent}}{426} -\entry {\code {gethostid}}{774} -\entry {\code {gethostname}}{773} -\entry {\code {getitimer}}{581} +\entry {\code {gethostid}}{782} +\entry {\code {gethostname}}{781} +\entry {\code {getitimer}}{583} \entry {\code {getline}}{254} -\entry {\code {getloadavg}}{603} -\entry {\code {getlogin}}{754} -\entry {\code {getmntent}}{781} -\entry {\code {getmntent_r}}{782} +\entry {\code {getloadavg}}{605} +\entry {\code {getlogin}}{762} +\entry {\code {getmntent}}{789} +\entry {\code {getmntent_r}}{790} \entry {\code {getnetbyaddr}}{455} \entry {\code {getnetbyname}}{455} \entry {\code {getnetent}}{455} -\entry {\code {getnetgrent}}{770} -\entry {\code {getnetgrent_r}}{771} -\entry {\code {getopt}}{659} -\entry {\code {getopt_long}}{663} -\entry {\code {getopt_long_only}}{664} -\entry {\code {getpagesize}}{601} -\entry {\code {getpass}}{812} +\entry {\code {getnetgrent}}{778} +\entry {\code {getnetgrent_r}}{779} +\entry {\code {getopt}}{667} +\entry {\code {getopt_long}}{671} +\entry {\code {getopt_long_only}}{672} +\entry {\code {getpagesize}}{603} +\entry {\code {getpass}}{820} \entry {\code {getpeername}}{437} -\entry {\code {getpgid}}{731} -\entry {\code {getpgrp}}{731} -\entry {\code {getpid}}{704} -\entry {\code {getppid}}{704} -\entry {\code {getpriority}}{599} +\entry {\code {getpgid}}{739} +\entry {\code {getpgrp}}{739} +\entry {\code {getpid}}{712} +\entry {\code {getppid}}{712} +\entry {\code {getpriority}}{601} \entry {\code {getprotobyname}}{430} \entry {\code {getprotobynumber}}{430} \entry {\code {getprotoent}}{430} \entry {\code {getpt}}{481} -\entry {\code {getpwent}}{765} -\entry {\code {getpwent_r}}{765} -\entry {\code {getpwnam}}{764} -\entry {\code {getpwnam_r}}{764} -\entry {\code {getpwuid}}{763} -\entry {\code {getpwuid_r}}{764} -\entry {\code {getrlimit}}{588} -\entry {\code {getrlimit64}}{588} -\entry {\code {getrusage}}{585} +\entry {\code {getpwent}}{773} +\entry {\code {getpwent_r}}{773} +\entry {\code {getpwnam}}{772} +\entry {\code {getpwnam_r}}{772} +\entry {\code {getpwuid}}{771} +\entry {\code {getpwuid_r}}{772} +\entry {\code {getrlimit}}{590} +\entry {\code {getrlimit64}}{590} +\entry {\code {getrusage}}{587} \entry {\code {gets}}{255} \entry {\code {getservbyname}}{428} \entry {\code {getservbyport}}{428} \entry {\code {getservent}}{428} -\entry {\code {getsid}}{731} +\entry {\code {getsid}}{739} \entry {\code {getsockname}}{413} \entry {\code {getsockopt}}{452} -\entry {\code {getsubopt}}{690} +\entry {\code {getsubopt}}{698} \entry {\code {gettext}}{189} -\entry {\code {gettimeofday}}{557} -\entry {\code {getuid}}{747} -\entry {\code {getumask}}{391} -\entry {\code {getutent}}{757} -\entry {\code {getutent_r}}{758} -\entry {\code {getutid}}{757} -\entry {\code {getutid_r}}{758} -\entry {\code {getutline}}{758} -\entry {\code {getutline_r}}{759} -\entry {\code {getutmp}}{762} -\entry {\code {getutmpx}}{762} -\entry {\code {getutxent}}{761} -\entry {\code {getutxid}}{761} -\entry {\code {getutxline}}{761} +\entry {\code {gettimeofday}}{559} +\entry {\code {getuid}}{755} +\entry {\code {getumask}}{392} +\entry {\code {getutent}}{765} +\entry {\code {getutent_r}}{766} +\entry {\code {getutid}}{765} +\entry {\code {getutid_r}}{766} +\entry {\code {getutline}}{766} +\entry {\code {getutline_r}}{767} +\entry {\code {getutmp}}{770} +\entry {\code {getutmpx}}{770} +\entry {\code {getutxent}}{769} +\entry {\code {getutxid}}{769} +\entry {\code {getutxline}}{769} \entry {\code {getw}}{253} \entry {\code {getwc}}{252} \entry {\code {getwc_unlocked}}{252} \entry {\code {getwchar}}{253} \entry {\code {getwchar_unlocked}}{253} \entry {\code {getwd}}{362} -\entry {\code {glob}}{216} -\entry {\code {glob64}}{217} -\entry {\code {globfree}}{220} +\entry {\code {glob}}{217} +\entry {\code {glob64}}{218} +\entry {\code {globfree}}{221} \entry {\code {globfree64}}{221} -\entry {\code {gmtime}}{560} -\entry {\code {gmtime_r}}{560} +\entry {\code {gmtime}}{562} +\entry {\code {gmtime_r}}{562} \entry {\code {grantpt}}{481} -\entry {\code {gsignal}}{638} +\entry {\code {gsignal}}{646} \entry {\code {gtty}}{477} \initial {H} -\entry {\code {hasmntopt}}{782} +\entry {\code {hasmntopt}}{790} \entry {\code {hcreate}}{208} \entry {\code {hcreate_r}}{209} \entry {\code {hdestroy}}{208} @@ -556,8 +560,8 @@ \entry {\code {ilogb}}{498} \entry {\code {ilogbf}}{498} \entry {\code {ilogbl}}{498} -\entry {\code {imaxabs}}{533} -\entry {\code {imaxdiv}}{522} +\entry {\code {imaxabs}}{535} +\entry {\code {imaxdiv}}{524} \entry {\code {index}}{104} \entry {\code {inet_addr}}{422} \entry {\code {inet_aton}}{422} @@ -568,11 +572,11 @@ \entry {\code {inet_ntoa}}{422} \entry {\code {inet_ntop}}{423} \entry {\code {inet_pton}}{423} -\entry {\code {infnan}}{524} -\entry {\code {initgroups}}{750} +\entry {\code {infnan}}{526} +\entry {\code {initgroups}}{758} \entry {\code {initstate}}{513} -\entry {\code {innetgr}}{771} -\entry {\code {int}}{602, 697} +\entry {\code {initstate_r}}{514} +\entry {\code {innetgr}}{779} \entry {\code {ioctl}}{359} \entry {\code {isalnum}}{68} \entry {\code {isalpha}}{67} @@ -581,25 +585,25 @@ \entry {\code {isblank}}{68} \entry {\code {iscntrl}}{69} \entry {\code {isdigit}}{68} -\entry {\code {isfinite}}{523} +\entry {\code {isfinite}}{525} \entry {\code {isgraph}}{68} -\entry {\code {isgreater}}{539} -\entry {\code {isgreaterequal}}{539} -\entry {\code {isinf}}{523} -\entry {\code {isinff}}{523} -\entry {\code {isinfl}}{523} -\entry {\code {isless}}{539} -\entry {\code {islessequal}}{539} -\entry {\code {islessgreater}}{539} +\entry {\code {isgreater}}{541} +\entry {\code {isgreaterequal}}{541} +\entry {\code {isinf}}{525} +\entry {\code {isinff}}{525} +\entry {\code {isinfl}}{525} +\entry {\code {isless}}{541} +\entry {\code {islessequal}}{541} +\entry {\code {islessgreater}}{541} \entry {\code {islower}}{67} -\entry {\code {isnan}}{523, 524} -\entry {\code {isnanf}}{524} -\entry {\code {isnanl}}{524} -\entry {\code {isnormal}}{523} +\entry {\code {isnan}}{525, 526} +\entry {\code {isnanf}}{526} +\entry {\code {isnanl}}{526} +\entry {\code {isnormal}}{525} \entry {\code {isprint}}{68} \entry {\code {ispunct}}{68} \entry {\code {isspace}}{68} -\entry {\code {isunordered}}{540} +\entry {\code {isunordered}}{542} \entry {\code {isupper}}{67} \entry {\code {iswalnum}}{71} \entry {\code {iswalpha}}{71} @@ -625,20 +629,20 @@ \entry {\code {jn}}{504} \entry {\code {jnf}}{504} \entry {\code {jnl}}{504} -\entry {\code {jrand48}}{514} -\entry {\code {jrand48_r}}{516} +\entry {\code {jrand48}}{515} +\entry {\code {jrand48_r}}{517} \initial {K} -\entry {\code {kill}}{639} -\entry {\code {killpg}}{640} +\entry {\code {kill}}{647} +\entry {\code {killpg}}{648} \initial {L} \entry {\code {l64a}}{110} -\entry {\code {labs}}{533} -\entry {\code {lcong48}}{515} -\entry {\code {lcong48_r}}{517} -\entry {\code {ldexp}}{534} -\entry {\code {ldexpf}}{534} -\entry {\code {ldexpl}}{534} -\entry {\code {ldiv}}{521} +\entry {\code {labs}}{535} +\entry {\code {lcong48}}{516} +\entry {\code {lcong48_r}}{518} +\entry {\code {ldexp}}{536} +\entry {\code {ldexpf}}{536} +\entry {\code {ldexpl}}{536} +\entry {\code {ldiv}}{523} \entry {\code {lfind}}{203} \entry {\code {lgamma}}{503} \entry {\code {lgamma_r}}{504} @@ -650,17 +654,17 @@ \entry {\code {lio_listio}}{339} \entry {\code {lio_listio64}}{340} \entry {\code {listen}}{436} -\entry {\code {llabs}}{533} -\entry {\code {lldiv}}{521} -\entry {\code {llrint}}{536} -\entry {\code {llrintf}}{536} -\entry {\code {llrintl}}{536} -\entry {\code {llround}}{537} -\entry {\code {llroundf}}{537} -\entry {\code {llroundl}}{537} +\entry {\code {llabs}}{535} +\entry {\code {lldiv}}{523} +\entry {\code {llrint}}{538} +\entry {\code {llrintf}}{538} +\entry {\code {llrintl}}{538} +\entry {\code {llround}}{539} +\entry {\code {llroundf}}{539} +\entry {\code {llroundl}}{539} \entry {\code {localeconv}}{166} -\entry {\code {localtime}}{560} -\entry {\code {localtime_r}}{560} +\entry {\code {localtime}}{562} +\entry {\code {localtime_r}}{562} \entry {\code {log}}{498} \entry {\code {log10}}{498} \entry {\code {log10f}}{498} @@ -671,35 +675,36 @@ \entry {\code {log2}}{498} \entry {\code {log2f}}{498} \entry {\code {log2l}}{498} -\entry {\code {logb}}{498, 534} -\entry {\code {logbf}}{498, 534} -\entry {\code {logbl}}{498, 534} +\entry {\code {logb}}{498, 536} +\entry {\code {logbf}}{498, 536} +\entry {\code {logbl}}{498, 536} \entry {\code {logf}}{498} -\entry {\code {login}}{762} -\entry {\code {login_tty}}{762} +\entry {\code {login}}{770} +\entry {\code {login_tty}}{770} \entry {\code {logl}}{498} -\entry {\code {logout}}{762} -\entry {\code {logwtmp}}{762} -\entry {\code {longjmp}}{607} -\entry {\code {lrand48}}{514} -\entry {\code {lrand48_r}}{516} -\entry {\code {lrint}}{536} -\entry {\code {lrintf}}{536} -\entry {\code {lrintl}}{536} -\entry {\code {lround}}{536} -\entry {\code {lroundf}}{536} -\entry {\code {lroundl}}{536} +\entry {\code {logout}}{770} +\entry {\code {logwtmp}}{770} +\entry {\code {longjmp}}{609} +\entry {\code {lrand48}}{515} +\entry {\code {lrand48_r}}{517} +\entry {\code {lrint}}{538} +\entry {\code {lrintf}}{538} +\entry {\code {lrintl}}{538} +\entry {\code {lround}}{538} +\entry {\code {lroundf}}{538} +\entry {\code {lroundl}}{538} \entry {\code {lsearch}}{204} \entry {\code {lseek}}{320} \entry {\code {lseek64}}{321} -\entry {\code {lstat}}{384} -\entry {\code {lstat64}}{384} +\entry {\code {lstat}}{385} +\entry {\code {lstat64}}{385} \initial {M} -\entry {\code {main}}{657} +\entry {\code {main}}{665} +\entry {\code {makecontext}}{611} \entry {\code {mallinfo}}{45} \entry {\code {malloc}}{34} \entry {\code {mallopt}}{39} -\entry {\code {matherr}}{524} +\entry {\code {matherr}}{526} \entry {\code {mblen}}{136} \entry {\code {mbrlen}}{126} \entry {\code {mbrtowc}}{125} @@ -720,24 +725,24 @@ \entry {\code {mempcpy}}{82} \entry {\code {memrchr}}{100} \entry {\code {memset}}{83} -\entry {\code {mkdir}}{379} -\entry {\code {mkdtemp}}{400} +\entry {\code {mkdir}}{380} +\entry {\code {mkdtemp}}{401} \entry {\code {mkfifo}}{407} -\entry {\code {mknod}}{397} -\entry {\code {mkstemp}}{400} -\entry {\code {mktemp}}{400} -\entry {\code {mktime}}{560} +\entry {\code {mknod}}{398} +\entry {\code {mkstemp}}{401} +\entry {\code {mktemp}}{401} +\entry {\code {mktime}}{562} \entry {\code {mlock}}{64} \entry {\code {mlockall}}{65} \entry {\code {mmap}}{327} \entry {\code {mmap64}}{328} -\entry {\code {modf}}{537} -\entry {\code {modff}}{537} -\entry {\code {modfl}}{537} -\entry {\code {mount}}{783} +\entry {\code {modf}}{539} +\entry {\code {modff}}{539} +\entry {\code {modfl}}{539} +\entry {\code {mount}}{791} \entry {\code {mprobe}}{40} -\entry {\code {mrand48}}{514} -\entry {\code {mrand48_r}}{516} +\entry {\code {mrand48}}{515} +\entry {\code {mrand48_r}}{517} \entry {\code {mremap}}{329} \entry {\code {msync}}{329} \entry {\code {mtrace}}{46} @@ -746,31 +751,31 @@ \entry {\code {munmap}}{328} \entry {\code {muntrace}}{46} \initial {N} -\entry {\code {nan}}{539} -\entry {\code {nanf}}{539} -\entry {\code {nanl}}{539} -\entry {\code {nanosleep}}{583} -\entry {\code {nearbyint}}{536} -\entry {\code {nearbyintf}}{536} -\entry {\code {nearbyintl}}{536} -\entry {\code {nextafter}}{538} -\entry {\code {nextafterf}}{538} -\entry {\code {nextafterl}}{538} -\entry {\code {nexttoward}}{538} -\entry {\code {nexttowardf}}{538} -\entry {\code {nexttowardl}}{538} +\entry {\code {nan}}{541} +\entry {\code {nanf}}{541} +\entry {\code {nanl}}{541} +\entry {\code {nanosleep}}{585} +\entry {\code {nearbyint}}{538} +\entry {\code {nearbyintf}}{538} +\entry {\code {nearbyintl}}{538} +\entry {\code {nextafter}}{540} +\entry {\code {nextafterf}}{540} +\entry {\code {nextafterl}}{540} +\entry {\code {nexttoward}}{540} +\entry {\code {nexttowardf}}{540} +\entry {\code {nexttowardl}}{540} \entry {\code {nftw}}{373} \entry {\code {nftw64}}{374} \entry {\code {ngettext}}{194} -\entry {\code {nice}}{600} +\entry {\code {nice}}{602} \entry {\code {nl_langinfo}}{170} -\entry {\code {notfound}}{737} -\entry {\code {nrand48}}{514} -\entry {\code {nrand48_r}}{516} +\entry {\code {notfound}}{745} +\entry {\code {nrand48}}{515} +\entry {\code {nrand48_r}}{517} \entry {\code {ntohl}}{429} \entry {\code {ntohs}}{429} -\entry {\code {ntp_adjtime}}{564} -\entry {\code {ntp_gettime}}{562} +\entry {\code {ntp_adjtime}}{566} +\entry {\code {ntp_gettime}}{564} \initial {O} \entry {\code {obstack_1grow}}{54} \entry {\code {obstack_1grow_fast}}{55} @@ -798,8 +803,8 @@ \entry {\code {obstack_ptr_grow_fast}}{56} \entry {\code {obstack_room}}{55} \entry {\code {obstack_vprintf}}{272} -\entry {\code {offsetof}}{861} -\entry {\code {on_exit}}{700} +\entry {\code {offsetof}}{869} +\entry {\code {on_exit}}{708} \entry {\code {open}}{313} \entry {\code {open_memstream}}{303} \entry {\code {open_obstack_stream}}{304} @@ -809,8 +814,8 @@ \entry {\code {openpty}}{483} \initial {P} \entry {\code {parse_printf_format}}{272} -\entry {\code {pathconf}}{805} -\entry {\code {pause}}{649} +\entry {\code {pathconf}}{813} +\entry {\code {pause}}{657} \entry {\code {pclose}}{405} \entry {\code {perror}}{27} \entry {\code {pipe}}{403} @@ -827,103 +832,105 @@ \entry {\code {printf}}{267} \entry {\code {printf_size}}{280} \entry {\code {printf_size_info}}{281} -\entry {\code {psignal}}{620} -\entry {\code {pthread_atfork}}{841} -\entry {\code {pthread_attr_destroy}}{825} -\entry {\code {pthread_attr_getattr}}{825} -\entry {\code {pthread_attr_getdetachstate}}{825} -\entry {\code {pthread_attr_getguardsize}}{825} -\entry {\code {pthread_attr_getinheritsched}}{825} -\entry {\code {pthread_attr_getschedparam}}{825} -\entry {\code {pthread_attr_getschedpolicy}}{825} -\entry {\code {pthread_attr_getscope}}{825} -\entry {\code {pthread_attr_getstack}}{825} -\entry {\code {pthread_attr_getstackaddr}}{825} -\entry {\code {pthread_attr_getstacksize}}{825} -\entry {\code {pthread_attr_init}}{824} -\entry {\code {pthread_attr_setattr}}{825} -\entry {\code {pthread_attr_setdetachstate}}{825} -\entry {\code {pthread_attr_setguardsize}}{825} -\entry {\code {pthread_attr_setinheritsched}}{825} -\entry {\code {pthread_attr_setschedparam}}{825} -\entry {\code {pthread_attr_setschedpolicy}}{825} -\entry {\code {pthread_attr_setscope}}{825} -\entry {\code {pthread_attr_setstack}}{825} -\entry {\code {pthread_attr_setstackaddr}}{825} -\entry {\code {pthread_attr_setstacksize}}{825} -\entry {\code {pthread_cancel}}{824} -\entry {\code {pthread_cleanup_pop}}{829} -\entry {\code {pthread_cleanup_pop_restore_np}}{829} -\entry {\code {pthread_cleanup_push}}{829} -\entry {\code {pthread_cleanup_push_defer_np}}{829} -\entry {\code {pthread_cond_broadcast}}{834} -\entry {\code {pthread_cond_destroy}}{834} -\entry {\code {pthread_cond_init}}{833} -\entry {\code {pthread_cond_signal}}{834} -\entry {\code {pthread_cond_timedwait}}{834} -\entry {\code {pthread_cond_wait}}{834} -\entry {\code {pthread_condattr_destroy}}{836} -\entry {\code {pthread_condattr_init}}{836} -\entry {\code {pthread_create}}{823} -\entry {\code {pthread_detach}}{843} -\entry {\code {pthread_equal}}{842} -\entry {\code {pthread_exit}}{823} -\entry {\code {pthread_getconcurrency}}{844} -\entry {\code {pthread_getschedparam}}{844} -\entry {\code {pthread_getspecific}}{838} -\entry {\code {pthread_join}}{824} -\entry {\code {pthread_key_create}}{837} -\entry {\code {pthread_key_delete}}{838} -\entry {\code {pthread_kill}}{839} -\entry {\code {pthread_kill_other_threads_np}}{843} -\entry {\code {pthread_mutex_destroy}}{832} -\entry {\code {pthread_mutex_init}}{830} -\entry {\code {pthread_mutex_lock}}{831} -\entry {\code {pthread_mutex_timedlock}}{831} -\entry {\code {pthread_mutex_trylock}}{831} -\entry {\code {pthread_mutex_unlock}}{831} -\entry {\code {pthread_mutexattr_destroy}}{832} -\entry {\code {pthread_mutexattr_gettype}}{833} -\entry {\code {pthread_mutexattr_init}}{832} -\entry {\code {pthread_mutexattr_settype}}{833} -\entry {\code {pthread_once}}{843} -\entry {\code {pthread_self}}{842} -\entry {\code {pthread_setcancelstate}}{827} -\entry {\code {pthread_setcanceltype}}{828} -\entry {\code {pthread_setconcurrency}}{844} -\entry {\code {pthread_setschedparam}}{844} -\entry {\code {pthread_setspecific}}{838} -\entry {\code {pthread_sigmask}}{839} -\entry {\code {pthread_testcancel}}{828} +\entry {\code {psignal}}{628} +\entry {\code {pthread_atfork}}{849} +\entry {\code {pthread_attr_destroy}}{833} +\entry {\code {pthread_attr_getattr}}{833} +\entry {\code {pthread_attr_getdetachstate}}{833} +\entry {\code {pthread_attr_getguardsize}}{833} +\entry {\code {pthread_attr_getinheritsched}}{833} +\entry {\code {pthread_attr_getschedparam}}{833} +\entry {\code {pthread_attr_getschedpolicy}}{833} +\entry {\code {pthread_attr_getscope}}{833} +\entry {\code {pthread_attr_getstack}}{833} +\entry {\code {pthread_attr_getstackaddr}}{833} +\entry {\code {pthread_attr_getstacksize}}{833} +\entry {\code {pthread_attr_init}}{832} +\entry {\code {pthread_attr_setattr}}{833} +\entry {\code {pthread_attr_setdetachstate}}{833} +\entry {\code {pthread_attr_setguardsize}}{833} +\entry {\code {pthread_attr_setinheritsched}}{833} +\entry {\code {pthread_attr_setschedparam}}{833} +\entry {\code {pthread_attr_setschedpolicy}}{833} +\entry {\code {pthread_attr_setscope}}{833} +\entry {\code {pthread_attr_setstack}}{833} +\entry {\code {pthread_attr_setstackaddr}}{833} +\entry {\code {pthread_attr_setstacksize}}{833} +\entry {\code {pthread_cancel}}{832} +\entry {\code {pthread_cleanup_pop}}{837} +\entry {\code {pthread_cleanup_pop_restore_np}}{837} +\entry {\code {pthread_cleanup_push}}{837} +\entry {\code {pthread_cleanup_push_defer_np}}{837} +\entry {\code {pthread_cond_broadcast}}{842} +\entry {\code {pthread_cond_destroy}}{842} +\entry {\code {pthread_cond_init}}{841} +\entry {\code {pthread_cond_signal}}{842} +\entry {\code {pthread_cond_timedwait}}{842} +\entry {\code {pthread_cond_wait}}{842} +\entry {\code {pthread_condattr_destroy}}{844} +\entry {\code {pthread_condattr_init}}{844} +\entry {\code {pthread_create}}{831} +\entry {\code {pthread_detach}}{851} +\entry {\code {pthread_equal}}{850} +\entry {\code {pthread_exit}}{831} +\entry {\code {pthread_getconcurrency}}{852} +\entry {\code {pthread_getschedparam}}{852} +\entry {\code {pthread_getspecific}}{846} +\entry {\code {pthread_join}}{832} +\entry {\code {pthread_key_create}}{845} +\entry {\code {pthread_key_delete}}{846} +\entry {\code {pthread_kill}}{847} +\entry {\code {pthread_kill_other_threads_np}}{851} +\entry {\code {pthread_mutex_destroy}}{840} +\entry {\code {pthread_mutex_init}}{838} +\entry {\code {pthread_mutex_lock}}{839} +\entry {\code {pthread_mutex_timedlock}}{839} +\entry {\code {pthread_mutex_trylock}}{839} +\entry {\code {pthread_mutex_unlock}}{839} +\entry {\code {pthread_mutexattr_destroy}}{840} +\entry {\code {pthread_mutexattr_gettype}}{841} +\entry {\code {pthread_mutexattr_init}}{840} +\entry {\code {pthread_mutexattr_settype}}{841} +\entry {\code {pthread_once}}{851} +\entry {\code {pthread_self}}{850} +\entry {\code {pthread_setcancelstate}}{835} +\entry {\code {pthread_setcanceltype}}{836} +\entry {\code {pthread_setconcurrency}}{852} +\entry {\code {pthread_setschedparam}}{852} +\entry {\code {pthread_setspecific}}{846} +\entry {\code {pthread_sigmask}}{847} +\entry {\code {pthread_testcancel}}{836} \entry {\code {ptsname}}{482} \entry {\code {ptsname_r}}{482} \entry {\code {putc}}{250} \entry {\code {putc_unlocked}}{250} \entry {\code {putchar}}{250} \entry {\code {putchar_unlocked}}{250} -\entry {\code {putenv}}{693} -\entry {\code {putpwent}}{765} +\entry {\code {putenv}}{701} +\entry {\code {putpwent}}{773} \entry {\code {puts}}{251} -\entry {\code {pututline}}{758} -\entry {\code {pututxline}}{761} +\entry {\code {pututline}}{766} +\entry {\code {pututxline}}{769} \entry {\code {putw}}{251} \entry {\code {putwc}}{250} \entry {\code {putwc_unlocked}}{250} +\entry {\code {putwchar}}{250} \entry {\code {putwchar_unlocked}}{250} \entry {\code {pwrite}}{319} \entry {\code {pwrite64}}{320} \initial {Q} -\entry {\code {qecvt}}{549} -\entry {\code {qecvt_r}}{550} -\entry {\code {qfcvt}}{549} -\entry {\code {qfcvt_r}}{550} -\entry {\code {qgcvt}}{549} +\entry {\code {qecvt}}{551} +\entry {\code {qecvt_r}}{552} +\entry {\code {qfcvt}}{551} +\entry {\code {qfcvt_r}}{552} +\entry {\code {qgcvt}}{551} \entry {\code {qsort}}{204} \initial {R} -\entry {\code {raise}}{638} +\entry {\code {raise}}{646} \entry {\code {rand}}{512} \entry {\code {rand_r}}{512} \entry {\code {random}}{512} +\entry {\code {random_r}}{513} \entry {\code {rawmemchr}}{100} \entry {\code {read}}{316} \entry {\code {readdir}}{365} @@ -933,139 +940,142 @@ \entry {\code {readlink}}{376} \entry {\code {readv}}{326} \entry {\code {realloc}}{36} +\entry {\code {realpath}}{377} \entry {\code {recv}}{439} \entry {\code {recvfrom}}{448} -\entry {\code {regcomp}}{221} +\entry {\code {regcomp}}{222} \entry {\code {regerror}}{226} -\entry {\code {regexec}}{223} -\entry {\code {regfree}}{225} +\entry {\code {regexec}}{224} +\entry {\code {regfree}}{226} \entry {\code {register_printf_function}}{276} -\entry {\code {remainder}}{538} -\entry {\code {remainderf}}{538} -\entry {\code {remainderl}}{538} -\entry {\code {remove}}{377} -\entry {\code {rename}}{377} +\entry {\code {remainder}}{540} +\entry {\code {remainderf}}{540} +\entry {\code {remainderl}}{540} +\entry {\code {remove}}{378} +\entry {\code {rename}}{378} \entry {\code {rewind}}{295} \entry {\code {rewinddir}}{368} \entry {\code {rindex}}{104} -\entry {\code {rint}}{536} -\entry {\code {rintf}}{536} -\entry {\code {rintl}}{536} -\entry {\code {rmdir}}{377} -\entry {\code {round}}{536} -\entry {\code {roundf}}{536} -\entry {\code {roundl}}{536} +\entry {\code {rint}}{538} +\entry {\code {rintf}}{538} +\entry {\code {rintl}}{538} +\entry {\code {rmdir}}{378} +\entry {\code {round}}{538} +\entry {\code {roundf}}{538} +\entry {\code {roundl}}{538} \initial {S} -\entry {\code {S_ISBLK}}{385} -\entry {\code {S_ISCHR}}{385} -\entry {\code {S_ISDIR}}{385} -\entry {\code {S_ISFIFO}}{385} -\entry {\code {S_ISLNK}}{385} -\entry {\code {S_ISREG}}{385} -\entry {\code {S_ISSOCK}}{385} -\entry {\code {S_TYPEISMQ}}{386} -\entry {\code {S_TYPEISSEM}}{386} -\entry {\code {S_TYPEISSHM}}{386} +\entry {\code {S_ISBLK}}{386} +\entry {\code {S_ISCHR}}{386} +\entry {\code {S_ISDIR}}{386} +\entry {\code {S_ISFIFO}}{386} +\entry {\code {S_ISLNK}}{386} +\entry {\code {S_ISREG}}{386} +\entry {\code {S_ISSOCK}}{386} +\entry {\code {S_TYPEISMQ}}{387} +\entry {\code {S_TYPEISSEM}}{387} +\entry {\code {S_TYPEISSHM}}{387} \entry {\code {sbrk}}{63} -\entry {\code {scalb}}{535} -\entry {\code {scalbf}}{535} -\entry {\code {scalbl}}{535} -\entry {\code {scalbln}}{535} -\entry {\code {scalblnf}}{535} -\entry {\code {scalblnl}}{535} -\entry {\code {scalbn}}{535} -\entry {\code {scalbnf}}{535} -\entry {\code {scalbnl}}{535} +\entry {\code {scalb}}{537} +\entry {\code {scalbf}}{537} +\entry {\code {scalbl}}{537} +\entry {\code {scalbln}}{537} +\entry {\code {scalblnf}}{537} +\entry {\code {scalblnl}}{537} +\entry {\code {scalbn}}{537} +\entry {\code {scalbnf}}{537} +\entry {\code {scalbnl}}{537} \entry {\code {scandir}}{368} \entry {\code {scandir64}}{369} \entry {\code {scanf}}{289} -\entry {\code {sched_get_priority_max}}{596} -\entry {\code {sched_get_priority_min}}{596} -\entry {\code {sched_getparam}}{596} -\entry {\code {sched_getscheduler}}{595} -\entry {\code {sched_rr_get_interval}}{596} -\entry {\code {sched_setparam}}{596} -\entry {\code {sched_setscheduler}}{595} -\entry {\code {sched_yield}}{597} -\entry {\code {seed48}}{515} -\entry {\code {seed48_r}}{517} +\entry {\code {sched_get_priority_max}}{598} +\entry {\code {sched_get_priority_min}}{598} +\entry {\code {sched_getparam}}{598} +\entry {\code {sched_getscheduler}}{597} +\entry {\code {sched_rr_get_interval}}{598} +\entry {\code {sched_setparam}}{598} +\entry {\code {sched_setscheduler}}{597} +\entry {\code {sched_yield}}{599} +\entry {\code {seed48}}{516} +\entry {\code {seed48_r}}{518} \entry {\code {seekdir}}{368} \entry {\code {select}}{331} -\entry {\code {sem_destroy}}{836} -\entry {\code {sem_getvalue}}{837} -\entry {\code {sem_init}}{836} -\entry {\code {sem_post}}{837} -\entry {\code {sem_trywait}}{837} -\entry {\code {sem_wait}}{837} +\entry {\code {sem_destroy}}{844} +\entry {\code {sem_getvalue}}{845} +\entry {\code {sem_init}}{844} +\entry {\code {sem_post}}{845} +\entry {\code {sem_trywait}}{845} +\entry {\code {sem_wait}}{845} \entry {\code {send}}{438} \entry {\code {sendto}}{447} \entry {\code {setbuf}}{301} \entry {\code {setbuffer}}{301} -\entry {\code {setdomainname}}{774} -\entry {\code {setegid}}{749} -\entry {\code {setenv}}{694} -\entry {\code {seteuid}}{748} -\entry {\code {setfsent}}{778} -\entry {\code {setgid}}{749} -\entry {\code {setgrent}}{767} -\entry {\code {setgroups}}{750} +\entry {\code {setcontext}}{612} +\entry {\code {setdomainname}}{782} +\entry {\code {setegid}}{757} +\entry {\code {setenv}}{702} +\entry {\code {seteuid}}{756} +\entry {\code {setfsent}}{786} +\entry {\code {setgid}}{757} +\entry {\code {setgrent}}{775} +\entry {\code {setgroups}}{758} \entry {\code {sethostent}}{426} -\entry {\code {sethostid}}{775} -\entry {\code {sethostname}}{774} -\entry {\code {setitimer}}{581} -\entry {\code {setjmp}}{606} -\entry {\code {setkey}}{815} -\entry {\code {setkey_r}}{816} +\entry {\code {sethostid}}{783} +\entry {\code {sethostname}}{782} +\entry {\code {setitimer}}{583} +\entry {\code {setjmp}}{608} +\entry {\code {setkey}}{823} +\entry {\code {setkey_r}}{824} \entry {\code {setlinebuf}}{301} \entry {\code {setlocale}}{163} \entry {\code {setlogmask}}{490} -\entry {\code {setmntent}}{781} +\entry {\code {setmntent}}{789} \entry {\code {setnetent}}{455} -\entry {\code {setnetgrent}}{770} -\entry {\code {setpgid}}{732} -\entry {\code {setpgrp}}{732} -\entry {\code {setpriority}}{599} +\entry {\code {setnetgrent}}{778} +\entry {\code {setpgid}}{740} +\entry {\code {setpgrp}}{740} +\entry {\code {setpriority}}{601} \entry {\code {setprotoent}}{430} -\entry {\code {setpwent}}{765} -\entry {\code {setregid}}{749} -\entry {\code {setreuid}}{749} -\entry {\code {setrlimit}}{588} -\entry {\code {setrlimit64}}{588} +\entry {\code {setpwent}}{773} +\entry {\code {setregid}}{757} +\entry {\code {setreuid}}{757} +\entry {\code {setrlimit}}{590} +\entry {\code {setrlimit64}}{590} \entry {\code {setservent}}{428} -\entry {\code {setsid}}{731} +\entry {\code {setsid}}{739} \entry {\code {setsockopt}}{453} \entry {\code {setstate}}{513} -\entry {\code {settimeofday}}{557} -\entry {\code {setuid}}{748} -\entry {\code {setutent}}{757} -\entry {\code {setutxent}}{761} +\entry {\code {setstate_r}}{514} +\entry {\code {settimeofday}}{559} +\entry {\code {setuid}}{756} +\entry {\code {setutent}}{765} +\entry {\code {setutxent}}{769} \entry {\code {setvbuf}}{300} \entry {\code {shutdown}}{433} -\entry {\code {sigaction}}{623} -\entry {\code {sigaddset}}{644} -\entry {\code {sigaltstack}}{653} -\entry {\code {sigblock}}{655} -\entry {\code {sigdelset}}{644} -\entry {\code {sigemptyset}}{644} -\entry {\code {sigfillset}}{644} -\entry {\code {siginterrupt}}{655} -\entry {\code {sigismember}}{644} -\entry {\code {siglongjmp}}{608} -\entry {\code {sigmask}}{655} -\entry {\code {signal}}{620} -\entry {\code {signbit}}{538} -\entry {\code {significand}}{535} -\entry {\code {significandf}}{535} -\entry {\code {significandl}}{535} -\entry {\code {sigpause}}{655} -\entry {\code {sigpending}}{647} -\entry {\code {sigprocmask}}{644} -\entry {\code {sigsetjmp}}{608} -\entry {\code {sigsetmask}}{655} -\entry {\code {sigstack}}{653} -\entry {\code {sigsuspend}}{651} -\entry {\code {sigvec}}{655} -\entry {\code {sigwait}}{840} +\entry {\code {sigaction}}{631} +\entry {\code {sigaddset}}{652} +\entry {\code {sigaltstack}}{661} +\entry {\code {sigblock}}{663} +\entry {\code {sigdelset}}{652} +\entry {\code {sigemptyset}}{652} +\entry {\code {sigfillset}}{652} +\entry {\code {siginterrupt}}{663} +\entry {\code {sigismember}}{652} +\entry {\code {siglongjmp}}{610} +\entry {\code {sigmask}}{663} +\entry {\code {signal}}{628} +\entry {\code {signbit}}{540} +\entry {\code {significand}}{537} +\entry {\code {significandf}}{537} +\entry {\code {significandl}}{537} +\entry {\code {sigpause}}{663} +\entry {\code {sigpending}}{655} +\entry {\code {sigprocmask}}{652} +\entry {\code {sigsetjmp}}{610} +\entry {\code {sigsetmask}}{663} +\entry {\code {sigstack}}{661} +\entry {\code {sigsuspend}}{659} +\entry {\code {sigvec}}{663} +\entry {\code {sigwait}}{848} \entry {\code {sin}}{494} \entry {\code {sincos}}{495} \entry {\code {sincosf}}{495} @@ -1075,7 +1085,7 @@ \entry {\code {sinhf}}{501} \entry {\code {sinhl}}{501} \entry {\code {sinl}}{494} -\entry {\code {sleep}}{583} +\entry {\code {sleep}}{585} \entry {\code {snprintf}}{268} \entry {\code {socket}}{432} \entry {\code {socketpair}}{434} @@ -1084,14 +1094,15 @@ \entry {\code {sqrtf}}{499} \entry {\code {sqrtl}}{499} \entry {\code {srand}}{512} -\entry {\code {srand48}}{514} -\entry {\code {srand48_r}}{517} +\entry {\code {srand48}}{515} +\entry {\code {srand48_r}}{518} \entry {\code {srandom}}{513} +\entry {\code {srandom_r}}{514} \entry {\code {sscanf}}{289} -\entry {\code {ssignal}}{622} -\entry {\code {stat}}{383} -\entry {\code {stat64}}{384} -\entry {\code {stime}}{556} +\entry {\code {ssignal}}{630} +\entry {\code {stat}}{384} +\entry {\code {stat64}}{385} +\entry {\code {stime}}{558} \entry {\code {stpcpy}}{85} \entry {\code {stpncpy}}{86} \entry {\code {strcasecmp}}{93} @@ -1109,7 +1120,7 @@ \entry {\code {strerror_r}}{27} \entry {\code {strfmon}}{175} \entry {\code {strfry}}{109} -\entry {\code {strftime}}{565} +\entry {\code {strftime}}{567} \entry {\code {strlen}}{79} \entry {\code {strncasecmp}}{94} \entry {\code {strncat}}{90} @@ -1119,39 +1130,41 @@ \entry {\code {strndupa}}{87} \entry {\code {strnlen}}{80} \entry {\code {strpbrk}}{103} -\entry {\code {strptime}}{570} +\entry {\code {strptime}}{572} \entry {\code {strrchr}}{101} \entry {\code {strsep}}{106} -\entry {\code {strsignal}}{619} +\entry {\code {strsignal}}{627} \entry {\code {strspn}}{102} \entry {\code {strstr}}{102} -\entry {\code {strtod}}{547} -\entry {\code {strtof}}{548} -\entry {\code {strtoimax}}{545} +\entry {\code {strtod}}{549} +\entry {\code {strtof}}{550} +\entry {\code {strtoimax}}{547} \entry {\code {strtok}}{104} \entry {\code {strtok_r}}{106} -\entry {\code {strtol}}{543} -\entry {\code {strtold}}{548} -\entry {\code {strtoll}}{544} -\entry {\code {strtoq}}{544} -\entry {\code {strtoul}}{543} -\entry {\code {strtoull}}{544} -\entry {\code {strtoumax}}{545} -\entry {\code {strtouq}}{545} +\entry {\code {strtol}}{545} +\entry {\code {strtold}}{550} +\entry {\code {strtoll}}{546} +\entry {\code {strtoq}}{546} +\entry {\code {strtoul}}{545} +\entry {\code {strtoull}}{546} +\entry {\code {strtoumax}}{547} +\entry {\code {strtouq}}{547} \entry {\code {strverscmp}}{94} \entry {\code {strxfrm}}{96} \entry {\code {stty}}{477} -\entry {\code {success}}{737} +\entry {\code {success}}{745} \entry {\code {SUN_LEN}}{416} +\entry {\code {swapcontext}}{612} \entry {\code {swprintf}}{268} \entry {\code {swscanf}}{290} -\entry {\code {symlink}}{375} +\entry {\code {symlink}}{376} \entry {\code {sync}}{333} -\entry {\code {sysconf}}{792} -\entry {\code {sysctl}}{787} +\entry {\code {syscall}}{705} +\entry {\code {sysconf}}{800} +\entry {\code {sysctl}}{795} \entry {\code {syslog}}{487} -\entry {\code {system}}{703} -\entry {\code {sysv_signal}}{622} +\entry {\code {system}}{711} +\entry {\code {sysv_signal}}{630} \initial {T} \entry {\code {tan}}{494} \entry {\code {tanf}}{494} @@ -1163,79 +1176,79 @@ \entry {\code {tcflow}}{478} \entry {\code {tcflush}}{478} \entry {\code {tcgetattr}}{460} -\entry {\code {tcgetpgrp}}{732} -\entry {\code {tcgetsid}}{733} +\entry {\code {tcgetpgrp}}{740} +\entry {\code {tcgetsid}}{741} \entry {\code {tcsendbreak}}{477} \entry {\code {tcsetattr}}{460} -\entry {\code {tcsetpgrp}}{733} +\entry {\code {tcsetpgrp}}{741} \entry {\code {tdelete}}{211} \entry {\code {tdestroy}}{211} \entry {\code {telldir}}{368} -\entry {\code {TEMP_FAILURE_RETRY}}{637} -\entry {\code {tempnam}}{399} +\entry {\code {TEMP_FAILURE_RETRY}}{645} +\entry {\code {tempnam}}{400} \entry {\code {textdomain}}{192} \entry {\code {tfind}}{211} \entry {\code {tgamma}}{504} \entry {\code {tgammaf}}{504} \entry {\code {tgammal}}{504} -\entry {\code {time}}{556} -\entry {\code {timegm}}{561} -\entry {\code {timelocal}}{561} -\entry {\code {times}}{555} -\entry {\code {tmpfile}}{398} -\entry {\code {tmpfile64}}{398} -\entry {\code {tmpnam}}{398} -\entry {\code {tmpnam_r}}{399} +\entry {\code {time}}{558} +\entry {\code {timegm}}{563} +\entry {\code {timelocal}}{563} +\entry {\code {times}}{557} +\entry {\code {tmpfile}}{399} +\entry {\code {tmpfile64}}{399} +\entry {\code {tmpnam}}{399} +\entry {\code {tmpnam_r}}{400} \entry {\code {toascii}}{69} \entry {\code {tolower}}{69} \entry {\code {toupper}}{69} \entry {\code {towctrans}}{75} \entry {\code {towlower}}{75} \entry {\code {towupper}}{75} -\entry {\code {trunc}}{536} -\entry {\code {truncate}}{395} -\entry {\code {truncate64}}{395} -\entry {\code {truncf}}{536} -\entry {\code {truncl}}{536} -\entry {\code {tryagain}}{737} +\entry {\code {trunc}}{538} +\entry {\code {truncate}}{396} +\entry {\code {truncate64}}{396} +\entry {\code {truncf}}{538} +\entry {\code {truncl}}{538} +\entry {\code {tryagain}}{745} \entry {\code {tsearch}}{210} \entry {\code {ttyname}}{457} \entry {\code {ttyname_r}}{457} \entry {\code {twalk}}{212} -\entry {\code {tzset}}{579} +\entry {\code {tzset}}{581} \initial {U} -\entry {\code {ulimit}}{590} -\entry {\code {umask}}{390} -\entry {\code {umount}}{786} -\entry {\code {umount2}}{786} -\entry {\code {uname}}{776} -\entry {\code {unavail}}{737} +\entry {\code {ulimit}}{592} +\entry {\code {umask}}{391} +\entry {\code {umount}}{794} +\entry {\code {umount2}}{794} +\entry {\code {uname}}{784} +\entry {\code {unavail}}{745} \entry {\code {ungetc}}{256} \entry {\code {ungetwc}}{257} -\entry {\code {unlink}}{376} +\entry {\code {unlink}}{377} \entry {\code {unlockpt}}{481} -\entry {\code {unsetenv}}{694} -\entry {\code {updwtmp}}{759} -\entry {\code {utime}}{394} -\entry {\code {utimes}}{394} -\entry {\code {utmpname}}{759} -\entry {\code {utmpxname}}{761} +\entry {\code {unsetenv}}{702} +\entry {\code {updwtmp}}{767} +\entry {\code {utime}}{395} +\entry {\code {utimes}}{395} +\entry {\code {utmpname}}{767} +\entry {\code {utmpxname}}{769} \initial {V} -\entry {\code {va_alist}}{852} -\entry {\code {va_arg}}{850} -\entry {\code {va_dcl}}{852} -\entry {\code {va_end}}{850} -\entry {\code {va_start}}{850, 852} +\entry {\code {va_alist}}{860} +\entry {\code {va_arg}}{858} +\entry {\code {va_dcl}}{860} +\entry {\code {va_end}}{858} +\entry {\code {va_start}}{858, 860} \entry {\code {valloc}}{39} \entry {\code {vasprintf}}{271} \entry {\code {versionsort}}{369} \entry {\code {versionsort64}}{369} -\entry {\code {vfork}}{705} +\entry {\code {vfork}}{713} \entry {\code {vfprintf}}{271} \entry {\code {vfscanf}}{290} \entry {\code {vfwprintf}}{271} \entry {\code {vfwscanf}}{290} -\entry {\code {vlimit}}{591} +\entry {\code {vlimit}}{593} \entry {\code {vprintf}}{271} \entry {\code {vscanf}}{290} \entry {\code {vsnprintf}}{271} @@ -1244,15 +1257,15 @@ \entry {\code {vswprintf}}{271} \entry {\code {vswscanf}}{290} \entry {\code {vsyslog}}{490} -\entry {\code {vtimes}}{586} +\entry {\code {vtimes}}{588} \entry {\code {vwprintf}}{271} \entry {\code {vwscanf}}{290} \initial {W} -\entry {\code {wait}}{710} -\entry {\code {wait3}}{712} -\entry {\code {wait4}}{710} -\entry {\code {waitpid}}{708} -\entry {\code {WCOREDUMP}}{711} +\entry {\code {wait}}{718} +\entry {\code {wait3}}{720} +\entry {\code {wait4}}{718} +\entry {\code {waitpid}}{716} +\entry {\code {WCOREDUMP}}{719} \entry {\code {wcpcpy}}{86} \entry {\code {wcpncpy}}{86} \entry {\code {wcrtomb}}{128} @@ -1265,7 +1278,7 @@ \entry {\code {wcscpy}}{84} \entry {\code {wcscspn}}{103} \entry {\code {wcsdup}}{85} -\entry {\code {wcsftime}}{569} +\entry {\code {wcsftime}}{571} \entry {\code {wcslen}}{80} \entry {\code {wcsncasecmp}}{94} \entry {\code {wcsncat}}{91} @@ -1278,43 +1291,43 @@ \entry {\code {wcsrtombs}}{131} \entry {\code {wcsspn}}{103} \entry {\code {wcsstr}}{102} -\entry {\code {wcstod}}{548} -\entry {\code {wcstof}}{548} -\entry {\code {wcstoimax}}{545} +\entry {\code {wcstod}}{550} +\entry {\code {wcstof}}{550} +\entry {\code {wcstoimax}}{547} \entry {\code {wcstok}}{105} -\entry {\code {wcstol}}{543} -\entry {\code {wcstold}}{548} -\entry {\code {wcstoll}}{544} +\entry {\code {wcstol}}{545} +\entry {\code {wcstold}}{550} +\entry {\code {wcstoll}}{546} \entry {\code {wcstombs}}{137} -\entry {\code {wcstoq}}{544} -\entry {\code {wcstoul}}{544} -\entry {\code {wcstoull}}{545} -\entry {\code {wcstoumax}}{545} -\entry {\code {wcstouq}}{545} +\entry {\code {wcstoq}}{546} +\entry {\code {wcstoul}}{546} +\entry {\code {wcstoull}}{547} +\entry {\code {wcstoumax}}{547} +\entry {\code {wcstouq}}{547} \entry {\code {wcswcs}}{102} \entry {\code {wcsxfrm}}{97} \entry {\code {wctob}}{125} \entry {\code {wctomb}}{135} \entry {\code {wctrans}}{74} \entry {\code {wctype}}{70} -\entry {\code {WEXITSTATUS}}{711} -\entry {\code {WIFEXITED}}{711} -\entry {\code {WIFSIGNALED}}{711} -\entry {\code {WIFSTOPPED}}{712} +\entry {\code {WEXITSTATUS}}{719} +\entry {\code {WIFEXITED}}{719} +\entry {\code {WIFSIGNALED}}{719} +\entry {\code {WIFSTOPPED}}{720} \entry {\code {wmemchr}}{100} \entry {\code {wmemcmp}}{92} \entry {\code {wmemcpy}}{81} \entry {\code {wmemmove}}{83} \entry {\code {wmempcpy}}{82} \entry {\code {wmemset}}{83} -\entry {\code {wordexp}}{227} -\entry {\code {wordfree}}{228} +\entry {\code {wordexp}}{228} +\entry {\code {wordfree}}{229} \entry {\code {wprintf}}{267} \entry {\code {write}}{318} \entry {\code {writev}}{326} \entry {\code {wscanf}}{289} -\entry {\code {WSTOPSIG}}{712} -\entry {\code {WTERMSIG}}{711} +\entry {\code {WSTOPSIG}}{720} +\entry {\code {WTERMSIG}}{719} \initial {Y} \entry {\code {y0}}{504} \entry {\code {y0f}}{504} diff -durpNa glibc-2.2.2/manual/libc.info glibc-2.2.3/manual/libc.info --- glibc-2.2.2/manual/libc.info Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info Wed Apr 25 14:55:23 2001 @@ -33,776 +33,778 @@ accuracy by the Foundation.  Indirect: libc.info-1: 1272 -libc.info-2: 61251 -libc.info-3: 106360 -libc.info-4: 155809 -libc.info-5: 205787 -libc.info-6: 252544 -libc.info-7: 300409 -libc.info-8: 349283 -libc.info-9: 391324 -libc.info-10: 439988 -libc.info-11: 486735 -libc.info-12: 530234 -libc.info-13: 571951 -libc.info-14: 618921 -libc.info-15: 667780 -libc.info-16: 715643 -libc.info-17: 765212 -libc.info-18: 813843 -libc.info-19: 862947 -libc.info-20: 908766 -libc.info-21: 949967 -libc.info-22: 994668 -libc.info-23: 1044215 -libc.info-24: 1091654 -libc.info-25: 1139430 -libc.info-26: 1188521 -libc.info-27: 1237881 -libc.info-28: 1286523 -libc.info-29: 1336486 -libc.info-30: 1385736 -libc.info-31: 1427222 -libc.info-32: 1474608 -libc.info-33: 1522037 -libc.info-34: 1564652 -libc.info-35: 1610942 -libc.info-36: 1659923 -libc.info-37: 1705918 -libc.info-38: 1755900 -libc.info-39: 1805365 -libc.info-40: 1854857 -libc.info-41: 1902841 -libc.info-42: 1952476 -libc.info-43: 2001853 -libc.info-44: 2050235 -libc.info-45: 2097679 -libc.info-46: 2147368 -libc.info-47: 2195197 -libc.info-48: 2243430 -libc.info-49: 2292350 -libc.info-50: 2323179 -libc.info-51: 2528717 -libc.info-52: 2573948 -libc.info-53: 2618159 -libc.info-54: 2681444 -libc.info-55: 2689108 -libc.info-56: 2770080 -libc.info-57: 2834287 +libc.info-2: 61325 +libc.info-3: 106434 +libc.info-4: 155883 +libc.info-5: 205861 +libc.info-6: 252618 +libc.info-7: 300483 +libc.info-8: 349357 +libc.info-9: 391398 +libc.info-10: 440064 +libc.info-11: 486811 +libc.info-12: 530310 +libc.info-13: 572027 +libc.info-14: 619160 +libc.info-15: 669075 +libc.info-16: 716938 +libc.info-17: 765716 +libc.info-18: 814355 +libc.info-19: 863327 +libc.info-20: 909102 +libc.info-21: 950303 +libc.info-22: 995004 +libc.info-23: 1044551 +libc.info-24: 1092148 +libc.info-25: 1138374 +libc.info-26: 1187352 +libc.info-27: 1236080 +libc.info-28: 1284752 +libc.info-29: 1332695 +libc.info-30: 1381687 +libc.info-31: 1428321 +libc.info-32: 1476759 +libc.info-33: 1522610 +libc.info-34: 1570391 +libc.info-35: 1616681 +libc.info-36: 1665662 +libc.info-37: 1711000 +libc.info-38: 1760433 +libc.info-39: 1807431 +libc.info-40: 1857053 +libc.info-41: 1901453 +libc.info-42: 1950851 +libc.info-43: 1997050 +libc.info-44: 2046345 +libc.info-45: 2095962 +libc.info-46: 2145425 +libc.info-47: 2194599 +libc.info-48: 2243561 +libc.info-49: 2289420 +libc.info-50: 2332600 +libc.info-51: 2342000 +libc.info-52: 2549959 +libc.info-53: 2595140 +libc.info-54: 2639351 +libc.info-55: 2702696 +libc.info-56: 2710473 +libc.info-57: 2792133 +libc.info-58: 2856397  Tag Table: (Indirect) Node: Top1272 -Node: Introduction61251 -Node: Getting Started62600 -Node: Standards and Portability64059 -Node: ISO C65507 -Node: POSIX67024 -Node: Berkeley Unix68761 -Node: SVID69525 -Node: XPG70525 -Node: Using the Library71466 -Node: Header Files72189 -Node: Macro Definitions76140 -Node: Reserved Names78485 -Node: Feature Test Macros83164 -Node: Roadmap to the Manual93948 -Node: Error Reporting101232 -Node: Checking for Errors102149 -Node: Error Codes106360 -Node: Error Messages125366 -Node: Memory131062 -Node: Memory Concepts131919 -Node: Memory Allocation137587 -Node: Memory Allocation and C138476 -Node: Unconstrained Allocation142025 -Node: Basic Allocation143445 -Node: Malloc Examples145145 -Node: Freeing after Malloc147112 -Node: Changing Block Size148927 -Node: Allocating Cleared Space151530 -Node: Efficiency and Malloc152538 -Node: Aligned Memory Blocks153637 -Node: Malloc Tunable Parameters155809 -Node: Heap Consistency Checking157471 -Node: Hooks for Malloc162571 -Node: Statistics of Malloc168769 -Node: Summary of Malloc170727 -Node: Allocation Debugging172889 -Node: Tracing malloc173992 -Node: Using the Memory Debugger175842 -Node: Tips for the Memory Debugger177728 -Node: Interpreting the traces179056 -Node: Obstacks182591 -Node: Creating Obstacks184205 -Node: Preparing for Obstacks186104 -Node: Allocation in an Obstack188847 -Node: Freeing Obstack Objects191254 -Node: Obstack Functions192588 -Node: Growing Objects194818 -Node: Extra Fast Growing199063 -Node: Status of an Obstack202682 -Node: Obstacks Data Alignment204101 -Node: Obstack Chunks205787 -Node: Summary of Obstacks208142 -Node: Variable Size Automatic211556 -Node: Alloca Example213082 -Node: Advantages of Alloca214203 -Node: Disadvantages of Alloca216090 -Node: GNU C Variable-Size Arrays216833 -Node: Resizing the Data Segment217991 -Node: Locking Pages220079 -Node: Why Lock Pages220841 -Node: Locked Memory Details222469 -Node: Page Lock Functions224725 -Node: Character Handling230588 -Node: Classification of Characters232043 -Node: Case Conversion235887 -Node: Classification of Wide Characters237777 -Node: Using Wide Char Classes245477 -Node: Wide Character Case Conversion247788 -Node: String and Array Utilities250480 -Node: Representation of Strings252544 -Node: String/Array Conventions258066 -Node: String Length261000 -Node: Copying and Concatenation264799 -Node: String/Array Comparison290266 -Node: Collation Functions300409 -Node: Search Functions310614 -Node: Finding Tokens in a String322734 -Node: strfry334932 -Node: Trivial Encryption335962 -Node: Encode Binary Data337420 -Node: Argz and Envz Vectors342122 -Node: Argz Functions342722 -Node: Envz Functions349283 -Node: Character Set Handling352333 -Node: Extended Char Intro353486 -Node: Charset Function Overview366474 -Node: Restartable multibyte conversion367479 -Node: Selecting the Conversion369590 -Node: Keeping the state372007 -Node: Converting a Character375222 -Node: Converting Strings391324 -Node: Multibyte Conversion Example401361 -Node: Non-reentrant Conversion404347 -Node: Non-reentrant Character Conversion405973 -Node: Non-reentrant String Conversion410675 -Node: Shift State413661 -Node: Generic Charset Conversion416324 -Node: Generic Conversion Interface419452 -Node: iconv Examples429319 -Node: Other iconv Implementations434654 -Node: glibc iconv Implementation439988 -Node: Locales479393 -Node: Effects of Locale480993 -Node: Choosing Locale482922 -Node: Locale Categories484296 -Node: Setting the Locale486735 -Node: Standard Locales491287 -Node: Locale Information492576 -Node: The Lame Way to Locale Data494292 -Node: General Numeric496163 -Node: Currency Symbol499142 -Node: Sign of Money Amount503330 -Node: The Elegant and Fast Way505460 -Node: Formatting Numbers517498 -Node: Message Translation526890 -Node: Message catalogs a la X/Open528936 -Node: The catgets Functions530234 -Node: The message catalog files539255 -Node: The gencat program546004 -Node: Common Usage549138 -Node: The Uniforum approach556264 -Node: Message catalogs with gettext557758 -Node: Translation with gettext558793 -Node: Locating gettext catalog565088 -Node: Advanced gettext functions571951 -Ref: Advanced gettext functions-Footnote-1581646 -Node: Charset conversion in gettext581738 -Node: GUI program problems584227 -Node: Using gettextized software589761 -Node: Helper programs for gettext598460 -Node: Searching and Sorting600224 -Node: Comparison Functions601139 -Node: Array Search Function602356 -Node: Array Sort Function605700 -Node: Search/Sort Example607831 -Node: Hash Search Function611322 -Node: Tree Search Function618921 -Node: Pattern Matching625836 -Node: Wildcard Matching626638 -Node: Globbing629516 -Node: Calling Glob630380 -Node: Flags for Globbing640362 -Node: More Flags for Globbing643892 -Node: Regular Expressions650022 -Node: POSIX Regexp Compilation651006 -Node: Flags for POSIX Regexps655121 -Node: Matching POSIX Regexps656028 -Node: Regexp Subexpressions658189 -Node: Subexpression Complications660243 -Node: Regexp Cleanup662606 -Node: Word Expansion664932 -Node: Expansion Stages666287 -Node: Calling Wordexp667780 -Node: Flags for Wordexp671743 -Node: Wordexp Example673696 -Node: Tilde Expansion675492 -Node: Variable Substitution676564 -Node: I/O Overview680679 -Node: I/O Concepts682193 -Node: Streams and File Descriptors683338 -Node: File Position686425 -Node: File Names688557 -Node: Directories689443 -Node: File Name Resolution691180 -Node: File Name Errors694108 -Node: File Name Portability695648 -Node: I/O on Streams697640 -Node: Streams699862 -Node: Standard Streams701203 -Node: Opening Streams702987 -Node: Closing Streams713090 -Node: Streams and Threads715643 -Node: Streams and I18N724634 -Node: Simple Output730797 -Node: Character Input736498 -Node: Line Input742008 -Node: Unreading748776 -Node: Unreading Idea749585 -Node: How Unread750411 -Node: Block Input/Output753066 -Node: Formatted Output755932 -Node: Formatted Output Basics757699 -Node: Output Conversion Syntax760192 -Node: Table of Output Conversions765212 -Node: Integer Conversions768218 -Node: Floating-Point Conversions773751 -Node: Other Output Conversions779547 -Node: Formatted Output Functions783353 -Node: Dynamic Output789295 -Node: Variable Arguments Output791150 -Node: Parsing a Template String797334 -Node: Example of Parsing801165 -Node: Customizing Printf803453 -Node: Registering New Conversions805372 -Node: Conversion Specifier Options807545 -Node: Defining the Output Handler811382 -Node: Printf Extension Example813843 -Node: Predefined Printf Handlers816252 -Node: Formatted Input819663 -Node: Formatted Input Basics820742 -Node: Input Conversion Syntax823422 -Node: Table of Input Conversions826784 -Node: Numeric Input Conversions830954 -Node: String Input Conversions835409 -Node: Dynamic String Input840529 -Node: Other Input Conversions841719 -Node: Formatted Input Functions843364 -Node: Variable Arguments Input846205 -Node: EOF and Errors848560 -Node: Error Recovery851562 -Node: Binary Streams853392 -Node: File Positioning855916 -Node: Portable Positioning862947 -Node: Stream Buffering868482 -Node: Buffering Concepts870081 -Node: Flushing Buffers871444 -Node: Controlling Buffering874595 -Node: Other Kinds of Streams880200 -Node: String Streams881489 -Node: Obstack Streams885623 -Node: Custom Streams887666 -Node: Streams and Cookies888383 -Node: Hook Functions891453 -Node: Formatted Messages893839 -Node: Printing Formatted Messages894504 -Node: Adding Severity Classes900948 -Node: Example902555 -Node: Low-Level I/O905758 -Node: Opening and Closing Files908766 -Node: I/O Primitives916742 -Node: File Position Primitive930840 -Node: Descriptors and Streams938154 -Node: Stream/Descriptor Precautions940838 -Node: Linked Channels942044 -Node: Independent Channels943272 -Node: Cleaning Streams945175 -Node: Scatter-Gather947378 -Node: Memory-mapped I/O949967 -Node: Waiting for I/O959428 -Node: Synchronizing I/O967185 -Node: Asynchronous I/O970619 -Node: Asynchronous Reads/Writes978662 -Node: Status of AIO Operations991098 -Node: Synchronizing AIO Operations994668 -Node: Cancel AIO Operations1001067 -Node: Configuration of AIO1004538 -Node: Control Operations1006634 -Node: Duplicating Descriptors1009326 -Node: Descriptor Flags1013582 -Node: File Status Flags1016983 -Node: Access Modes1018436 -Node: Open-time Flags1020725 -Node: Operating Modes1025441 -Node: Getting File Status Flags1028206 -Node: File Locks1030813 -Node: Interrupt Input1039708 -Node: IOCTLs1042138 -Ref: IOCTLs-Footnote-11044118 -Node: File System Interface1044215 -Node: Working Directory1045744 -Node: Accessing Directories1050748 -Node: Directory Entries1052175 -Node: Opening a Directory1055429 -Node: Reading/Closing Directory1057872 -Node: Simple Directory Lister1062543 -Node: Random Access Directory1063562 -Node: Scanning Directory Content1065064 -Node: Simple Directory Lister Mark II1069519 -Node: Working with Directory Trees1070628 -Node: Hard Links1082171 -Node: Symbolic Links1084969 -Node: Deleting Files1088736 -Node: Renaming Files1091654 -Node: Creating Directories1095258 -Node: File Attributes1097010 -Node: Attribute Meanings1098534 -Node: Reading Attributes1107756 -Node: Testing File Type1111826 -Node: File Owner1115979 -Node: Permission Bits1119631 -Node: Access Permission1124949 -Node: Setting Permissions1126091 -Node: Testing File Access1131297 -Node: File Times1134959 -Node: File Size1139430 -Node: Making Special Files1145853 -Node: Temporary Files1147529 -Node: Pipes and FIFOs1156749 -Node: Creating a Pipe1158332 -Node: Pipe to a Subprocess1161625 -Node: FIFO Special Files1164632 -Node: Pipe Atomicity1166204 -Node: Sockets1167087 -Node: Socket Concepts1169127 -Node: Communication Styles1173367 -Node: Socket Addresses1175217 -Node: Address Formats1177253 -Node: Setting Address1180454 -Node: Reading Address1182176 -Node: Interface Naming1183937 -Node: Local Namespace1186344 -Node: Local Namespace Concepts1187004 -Node: Local Namespace Details1188521 -Node: Local Socket Example1190468 -Node: Internet Namespace1191894 -Node: Internet Address Formats1194117 -Node: Host Addresses1196268 -Node: Abstract Host Addresses1197436 -Node: Host Address Data Type1201954 -Node: Host Address Functions1205077 -Node: Host Names1209429 -Node: Ports1218700 -Node: Services Database1220738 -Node: Byte Order1223561 -Node: Protocols Database1225869 -Node: Inet Example1229411 -Node: Misc Namespaces1231421 -Node: Open/Close Sockets1232167 -Node: Creating a Socket1232665 -Node: Closing a Socket1234346 -Node: Socket Pairs1235872 -Node: Connections1237881 -Node: Connecting1238975 -Node: Listening1241802 -Node: Accepting Connections1243875 -Node: Who is Connected1247006 -Node: Transferring Data1248105 -Node: Sending Data1249210 -Node: Receiving Data1251728 -Node: Socket Data Options1253464 -Node: Byte Stream Example1254327 -Node: Server Example1256384 -Node: Out-of-Band Data1260400 -Node: Datagrams1266311 -Node: Sending Datagrams1267340 -Node: Receiving Datagrams1269265 -Node: Datagram Example1271331 -Node: Example Receiver1273345 -Node: Inetd1275909 -Node: Inetd Servers1276718 -Node: Configuring Inetd1277960 -Node: Socket Options1280629 -Node: Socket Option Functions1281337 -Node: Socket-Level Options1282894 -Node: Networks Database1286523 -Node: Low-Level Terminal Interface1289407 -Node: Is It a Terminal1290877 -Node: I/O Queues1292780 -Node: Canonical or Not1294737 -Node: Terminal Modes1296583 -Node: Mode Data Types1298152 -Node: Mode Functions1299980 -Node: Setting Modes1303912 -Node: Input Modes1305909 -Node: Output Modes1311175 -Node: Control Modes1312787 -Node: Local Modes1316876 -Node: Line Speed1323189 -Node: Special Characters1327366 -Node: Editing Characters1329280 -Node: Signal Characters1333620 -Node: Start/Stop Characters1336486 -Node: Other Special1338356 -Node: Noncanonical Input1340170 -Node: BSD Terminal Modes1344983 -Node: Line Control1346455 -Node: Noncanon Example1351171 -Node: Pseudo-Terminals1353398 -Node: Allocation1354310 -Node: Pseudo-Terminal Pairs1359099 -Node: Syslog1361615 -Node: Overview of Syslog1362564 -Node: Submitting Syslog Messages1366748 -Node: openlog1367566 -Node: syslog; vsyslog1370922 -Node: closelog1375119 -Node: setlogmask1375766 -Node: Syslog Example1377609 -Node: Mathematics1378272 -Node: Mathematical Constants1379994 -Node: Trig Functions1382001 -Node: Inverse Trig Functions1385736 -Node: Exponents and Logarithms1389538 -Node: Hyperbolic Functions1397730 -Node: Special Functions1401770 -Node: Errors in Math Functions1406308 -Node: Pseudo-Random Numbers1420733 -Node: ISO Random1422974 -Node: BSD Random1424906 -Node: SVID Random1427222 -Node: FP Function Optimizations1440414 -Node: Arithmetic1442501 -Node: Integers1443780 -Node: Integer Division1446796 -Node: Floating Point Numbers1450481 -Node: Floating Point Classes1452223 -Node: Floating Point Errors1456621 -Node: FP Exceptions1457118 -Node: Infinity and NaN1461479 -Node: Status bit operations1464552 -Node: Math Error Reporting1468694 -Node: Rounding1471020 -Node: Control Functions1474608 -Node: Arithmetic Functions1479430 -Node: Absolute Value1480298 -Node: Normalization Functions1482358 -Node: Rounding Functions1486432 -Node: Remainder Functions1490814 -Node: FP Bit Twiddling1492958 -Node: FP Comparison Functions1496070 -Node: Misc FP Arithmetic1498783 -Node: Complex Numbers1501525 -Node: Operations on Complex1503230 -Node: Parsing of Numbers1505574 -Node: Parsing of Integers1506266 -Node: Parsing of Floats1516871 -Node: System V Number Conversion1522037 -Node: Date and Time1527353 -Node: Time Basics1528083 -Node: Elapsed Time1529963 -Node: Processor And CPU Time1533515 -Node: CPU Time1535386 -Node: Processor Time1537159 -Node: Calendar Time1539559 -Node: Simple Calendar Time1541492 -Node: High-Resolution Calendar1543896 -Node: Broken-down Time1549257 -Node: High Accuracy Clock1557216 -Node: Formatting Calendar Time1564652 -Node: Parsing Date and Time1579961 -Node: Low-Level Time String Parsing1580804 -Node: General Time String Parsing1593823 -Node: TZ Variable1600951 -Node: Time Zone Functions1606994 -Node: Time Functions Example1609834 -Node: Setting an Alarm1610942 -Node: Sleeping1616189 -Node: Resource Usage And Limitation1620792 -Node: Resource Usage1621469 -Node: Limits on Resources1627051 -Node: Priority1636269 -Node: Absolute Priority1638631 -Node: Realtime Scheduling1643727 -Node: Basic Scheduling Functions1647175 -Node: Traditional Scheduling1655108 -Node: Traditional Scheduling Intro1655661 -Node: Traditional Scheduling Functions1659923 -Node: Memory Resources1663585 -Node: Memory Subsystem1664435 -Node: Query Memory Parameters1666815 -Node: Processor Resources1670462 -Node: Non-Local Exits1672579 -Node: Non-Local Intro1673215 -Node: Non-Local Details1676946 -Node: Non-Local Exits and Signals1680022 -Node: Signal Handling1681493 -Node: Concepts of Signals1683527 -Node: Kinds of Signals1684091 -Node: Signal Generation1685486 -Node: Delivery of Signal1687753 -Node: Standard Signals1690607 -Node: Program Error Signals1692200 -Node: Termination Signals1699658 -Node: Alarm Signals1703496 -Node: Asynchronous I/O Signals1704728 -Node: Job Control Signals1705918 -Node: Operation Error Signals1710518 -Node: Miscellaneous Signals1712457 -Node: Signal Messages1714151 -Node: Signal Actions1716036 -Node: Basic Signal Handling1716981 -Node: Advanced Signal Handling1723054 -Node: Signal and Sigaction1726010 -Node: Sigaction Function Example1727762 -Node: Flags for Sigaction1730078 -Node: Initial Signal Actions1732456 -Node: Defining Handlers1733837 -Node: Handler Returns1736022 -Node: Termination in Handler1738072 -Node: Longjmp in Handler1739511 -Node: Signals in Handler1741615 -Node: Merged Signals1743735 -Node: Nonreentrancy1749448 -Node: Atomic Data Access1754854 -Node: Non-atomic Example1755900 -Node: Atomic Types1757677 -Node: Atomic Usage1758696 -Node: Interrupted Primitives1760166 -Node: Generating Signals1763465 -Node: Signaling Yourself1764058 -Node: Signaling Another Process1766041 -Node: Permission for kill1769417 -Node: Kill Example1771213 -Node: Blocking Signals1773565 -Node: Why Block1775337 -Node: Signal Sets1776873 -Node: Process Signal Mask1779899 -Node: Testing for Delivery1782906 -Node: Blocking for Handler1784164 -Node: Checking for Pending Signals1786583 -Node: Remembering a Signal1788595 -Node: Waiting for a Signal1792149 -Node: Using Pause1792694 -Node: Pause Problems1794319 -Node: Sigsuspend1796043 -Node: Signal Stack1798754 -Node: BSD Signal Handling1804091 -Node: BSD Handler1805365 -Node: Blocking in BSD1807797 -Node: Program Basics1809248 -Node: Program Arguments1811232 -Node: Argument Syntax1813231 -Node: Parsing Program Arguments1815905 -Node: Getopt1817008 -Node: Using Getopt1817646 -Node: Example of Getopt1821765 -Node: Getopt Long Options1824503 -Node: Getopt Long Option Example1829739 -Node: Argp1832860 -Node: Argp Global Variables1836210 -Node: Argp Parsers1838232 -Node: Argp Option Vectors1841579 -Node: Argp Option Flags1844814 -Node: Argp Parser Functions1846831 -Node: Argp Special Keys1849530 -Node: Argp Helper Functions1854857 -Node: Argp Parsing State1857914 -Node: Argp Children1861422 -Node: Argp Flags1863482 -Node: Argp Help Filtering1865799 -Node: Argp Help Filter Keys1867014 -Node: Argp Help1867887 -Node: Argp Help Flags1869075 -Node: Argp Examples1871369 -Node: Argp Example 11871839 -Node: Argp Example 21872643 -Node: Argp Example 31875587 -Node: Argp Example 41882632 -Node: Argp User Customization1890334 -Node: Suboptions1891946 -Node: Suboptions Example1893888 -Node: Environment Variables1896057 -Node: Environment Access1897922 -Node: Standard Environment1902841 -Node: System Calls1907013 -Node: Program Termination1910569 -Node: Normal Termination1911778 -Node: Exit Status1913175 -Node: Cleanups on Exit1916534 -Node: Aborting a Program1918351 -Node: Termination Internals1919250 -Node: Processes1921430 -Node: Running a Command1923452 -Node: Process Creation Concepts1925477 -Node: Process Identification1927486 -Node: Creating a Process1928410 -Node: Executing a File1932030 -Node: Process Completion1939165 -Node: Process Completion Status1945431 -Node: BSD Wait Functions1947074 -Node: Process Creation Example1948942 -Node: Job Control1951198 -Node: Concepts of Job Control1952476 -Node: Job Control is Optional1955830 -Node: Controlling Terminal1956879 -Node: Access to the Terminal1957786 -Node: Orphaned Process Groups1959389 -Node: Implementing a Shell1960380 -Node: Data Structures1961263 -Node: Initializing the Shell1963921 -Node: Launching Jobs1967657 -Node: Foreground and Background1975110 -Node: Stopped and Terminated Jobs1978229 -Node: Continuing Stopped Jobs1983439 -Node: Missing Pieces1985071 -Node: Functions for Job Control1986695 -Node: Identifying the Terminal1987175 -Node: Process Group Functions1988748 -Node: Terminal Access Functions1993758 -Node: Name Service Switch1997235 -Node: NSS Basics1998566 -Node: NSS Configuration File2000155 -Node: Services in the NSS configuration2001853 -Node: Actions in the NSS configuration2003134 -Node: Notes on NSS Configuration File2006295 -Node: NSS Module Internals2008172 -Node: NSS Module Names2008868 -Ref: NSS Module Names-Footnote-12010909 -Ref: NSS Module Names-Footnote-22011063 -Node: NSS Modules Interface2011241 -Node: Extending NSS2015939 -Node: Adding another Service to NSS2016870 -Node: NSS Module Function Internals2019101 -Node: Users and Groups2024005 -Node: User and Group IDs2026616 -Node: Process Persona2027524 -Node: Why Change Persona2029209 -Node: How Change Persona2031090 -Node: Reading Persona2032977 -Node: Setting User ID2035247 -Node: Setting Groups2038110 -Node: Enable/Disable Setuid2042212 -Node: Setuid Program Example2044246 -Node: Tips for Setuid2047720 -Node: Who Logged In2050235 -Node: User Accounting Database2052615 -Node: Manipulating the Database2053799 -Node: XPG Functions2066127 -Node: Logging In and Out2070542 -Node: User Database2072658 -Node: User Data Structure2073320 -Node: Lookup User2074577 -Node: Scanning All Users2077141 -Node: Writing a User Entry2080095 -Node: Group Database2080994 -Node: Group Data Structure2081570 -Node: Lookup Group2082333 -Node: Scanning All Groups2084834 -Node: Database Example2087864 -Node: Netgroup Database2090061 -Node: Netgroup Data2090472 -Node: Lookup Netgroup2092000 -Node: Netgroup Membership2095418 -Node: System Management2096748 -Node: Host Identification2097679 -Node: Platform Type2104158 -Node: Filesystem Handling2107463 -Node: Mount Information2108963 -Node: fstab2110982 -Node: mtab2116798 -Node: Other Mount Information2126090 -Node: Mount-Unmount-Remount2126604 -Node: System Parameters2136629 -Node: System Configuration2142162 -Node: General Limits2143733 -Node: System Options2147368 -Node: Version Supported2150700 -Node: Sysconf2152537 -Node: Sysconf Definition2153173 -Node: Constants for Sysconf2153845 -Node: Examples of Sysconf2166780 -Node: Minimums2167773 -Node: Limits for Files2170484 -Node: Options for Files2173485 -Node: File Minimums2175778 -Node: Pathconf2177998 -Node: Utility Limits2181373 -Node: Utility Minimums2183303 -Node: String Parameters2185055 -Node: Cryptographic Functions2188955 -Node: Legal Problems2190752 -Node: getpass2193027 -Node: crypt2195197 -Node: DES Encryption2199965 -Node: Debugging Support2206167 -Node: Backtraces2206809 -Node: POSIX Threads2211595 -Node: Basic Thread Operations2213199 -Node: Thread Attributes2217783 -Node: Cancellation2224740 -Node: Cleanup Handlers2228634 -Node: Mutexes2233772 -Node: Condition Variables2243430 -Node: POSIX Semaphores2250806 -Node: Thread-Specific Data2254687 -Node: Threads and Signal Handling2259320 -Node: Threads and Fork2263010 -Node: Streams and Fork2268437 -Node: Miscellaneous Thread Functions2270599 -Node: Language Features2277084 -Node: Consistency Checking2278010 -Node: Variadic Functions2282551 -Node: Why Variadic2283623 -Node: How Variadic2285587 -Node: Variadic Prototypes2286876 -Node: Receiving Arguments2288017 -Node: How Many Arguments2290688 -Node: Calling Variadics2292350 -Node: Argument Macros2294450 -Node: Variadic Example2297286 -Node: Old Varargs2298438 -Node: Null Pointer Constant2300113 -Node: Important Data Types2301198 -Node: Data Type Measurements2303762 -Node: Width of Type2304619 -Node: Range of Type2305525 -Node: Floating Type Macros2308793 -Node: Floating Point Concepts2310051 -Node: Floating Point Parameters2313779 -Node: IEEE Floating Point2320731 -Node: Structure Measurement2322484 -Node: Library Summary2323179 -Node: Installation2528717 -Node: Configuring and compiling2530406 -Node: Running make install2539711 -Node: Tools for Compilation2543769 -Node: Supported Configurations2547119 -Node: Linux2549286 -Node: Reporting Bugs2551432 -Node: Maintenance2554262 -Node: Source Layout2554645 -Node: Porting2558577 -Node: Hierarchy Conventions2566877 -Node: Porting to Unix2571933 -Node: Contributors2573948 -Node: Copying2591262 -Node: Concept Index2618159 -Node: Type Index2681444 -Node: Function Index2689108 -Node: Variable Index2770080 -Node: File Index2834287 +Node: Introduction61325 +Node: Getting Started62674 +Node: Standards and Portability64133 +Node: ISO C65581 +Node: POSIX67098 +Node: Berkeley Unix68835 +Node: SVID69599 +Node: XPG70599 +Node: Using the Library71540 +Node: Header Files72263 +Node: Macro Definitions76214 +Node: Reserved Names78559 +Node: Feature Test Macros83238 +Node: Roadmap to the Manual94022 +Node: Error Reporting101306 +Node: Checking for Errors102223 +Node: Error Codes106434 +Node: Error Messages125440 +Node: Memory131136 +Node: Memory Concepts131993 +Node: Memory Allocation137661 +Node: Memory Allocation and C138550 +Node: Unconstrained Allocation142099 +Node: Basic Allocation143519 +Node: Malloc Examples145219 +Node: Freeing after Malloc147186 +Node: Changing Block Size149001 +Node: Allocating Cleared Space151604 +Node: Efficiency and Malloc152612 +Node: Aligned Memory Blocks153711 +Node: Malloc Tunable Parameters155883 +Node: Heap Consistency Checking157545 +Node: Hooks for Malloc162645 +Node: Statistics of Malloc168843 +Node: Summary of Malloc170801 +Node: Allocation Debugging172963 +Node: Tracing malloc174066 +Node: Using the Memory Debugger175916 +Node: Tips for the Memory Debugger177802 +Node: Interpreting the traces179130 +Node: Obstacks182665 +Node: Creating Obstacks184279 +Node: Preparing for Obstacks186178 +Node: Allocation in an Obstack188921 +Node: Freeing Obstack Objects191328 +Node: Obstack Functions192662 +Node: Growing Objects194892 +Node: Extra Fast Growing199137 +Node: Status of an Obstack202756 +Node: Obstacks Data Alignment204175 +Node: Obstack Chunks205861 +Node: Summary of Obstacks208216 +Node: Variable Size Automatic211630 +Node: Alloca Example213156 +Node: Advantages of Alloca214277 +Node: Disadvantages of Alloca216164 +Node: GNU C Variable-Size Arrays216907 +Node: Resizing the Data Segment218065 +Node: Locking Pages220153 +Node: Why Lock Pages220915 +Node: Locked Memory Details222543 +Node: Page Lock Functions224799 +Node: Character Handling230662 +Node: Classification of Characters232117 +Node: Case Conversion235961 +Node: Classification of Wide Characters237851 +Node: Using Wide Char Classes245551 +Node: Wide Character Case Conversion247862 +Node: String and Array Utilities250554 +Node: Representation of Strings252618 +Node: String/Array Conventions258140 +Node: String Length261074 +Node: Copying and Concatenation264873 +Node: String/Array Comparison290340 +Node: Collation Functions300483 +Node: Search Functions310688 +Node: Finding Tokens in a String322808 +Node: strfry335006 +Node: Trivial Encryption336036 +Node: Encode Binary Data337494 +Node: Argz and Envz Vectors342196 +Node: Argz Functions342796 +Node: Envz Functions349357 +Node: Character Set Handling352407 +Node: Extended Char Intro353560 +Node: Charset Function Overview366548 +Node: Restartable multibyte conversion367553 +Node: Selecting the Conversion369664 +Node: Keeping the state372081 +Node: Converting a Character375296 +Node: Converting Strings391398 +Node: Multibyte Conversion Example401435 +Node: Non-reentrant Conversion404421 +Node: Non-reentrant Character Conversion406047 +Node: Non-reentrant String Conversion410749 +Node: Shift State413735 +Node: Generic Charset Conversion416398 +Node: Generic Conversion Interface419526 +Node: iconv Examples429393 +Node: Other iconv Implementations434730 +Node: glibc iconv Implementation440064 +Node: Locales479469 +Node: Effects of Locale481069 +Node: Choosing Locale482998 +Node: Locale Categories484372 +Node: Setting the Locale486811 +Node: Standard Locales491363 +Node: Locale Information492652 +Node: The Lame Way to Locale Data494368 +Node: General Numeric496239 +Node: Currency Symbol499218 +Node: Sign of Money Amount503406 +Node: The Elegant and Fast Way505536 +Node: Formatting Numbers517574 +Node: Message Translation526966 +Node: Message catalogs a la X/Open529012 +Node: The catgets Functions530310 +Node: The message catalog files539331 +Node: The gencat program546080 +Node: Common Usage549214 +Node: The Uniforum approach556340 +Node: Message catalogs with gettext557834 +Node: Translation with gettext558869 +Node: Locating gettext catalog565164 +Node: Advanced gettext functions572027 +Ref: Advanced gettext functions-Footnote-1581885 +Node: Charset conversion in gettext581977 +Node: GUI program problems584466 +Node: Using gettextized software590000 +Node: Helper programs for gettext598699 +Node: Searching and Sorting600463 +Node: Comparison Functions601378 +Node: Array Search Function602595 +Node: Array Sort Function605939 +Node: Search/Sort Example608070 +Node: Hash Search Function611561 +Node: Tree Search Function619160 +Node: Pattern Matching626075 +Node: Wildcard Matching626877 +Node: Globbing630811 +Node: Calling Glob631675 +Node: Flags for Globbing641657 +Node: More Flags for Globbing645187 +Node: Regular Expressions651317 +Node: POSIX Regexp Compilation652301 +Node: Flags for POSIX Regexps656416 +Node: Matching POSIX Regexps657323 +Node: Regexp Subexpressions659484 +Node: Subexpression Complications661538 +Node: Regexp Cleanup663901 +Node: Word Expansion666227 +Node: Expansion Stages667582 +Node: Calling Wordexp669075 +Node: Flags for Wordexp673038 +Node: Wordexp Example674991 +Node: Tilde Expansion676787 +Node: Variable Substitution677859 +Node: I/O Overview681974 +Node: I/O Concepts683488 +Node: Streams and File Descriptors684633 +Node: File Position687720 +Node: File Names689852 +Node: Directories690738 +Node: File Name Resolution692475 +Node: File Name Errors695403 +Node: File Name Portability696943 +Node: I/O on Streams698935 +Node: Streams701157 +Node: Standard Streams702498 +Node: Opening Streams704282 +Node: Closing Streams714385 +Node: Streams and Threads716938 +Node: Streams and I18N725929 +Node: Simple Output732092 +Node: Character Input737442 +Node: Line Input742688 +Node: Unreading749368 +Node: Unreading Idea750177 +Node: How Unread751003 +Node: Block Input/Output753658 +Node: Formatted Output756436 +Node: Formatted Output Basics758203 +Node: Output Conversion Syntax760696 +Node: Table of Output Conversions765716 +Node: Integer Conversions768722 +Node: Floating-Point Conversions774255 +Node: Other Output Conversions780051 +Node: Formatted Output Functions783857 +Node: Dynamic Output789807 +Node: Variable Arguments Output791662 +Node: Parsing a Template String797846 +Node: Example of Parsing801677 +Node: Customizing Printf803965 +Node: Registering New Conversions805884 +Node: Conversion Specifier Options808057 +Node: Defining the Output Handler811894 +Node: Printf Extension Example814355 +Node: Predefined Printf Handlers816764 +Node: Formatted Input820175 +Node: Formatted Input Basics821254 +Node: Input Conversion Syntax823934 +Node: Table of Input Conversions827296 +Node: Numeric Input Conversions831466 +Node: String Input Conversions835921 +Node: Dynamic String Input841041 +Node: Other Input Conversions842231 +Node: Formatted Input Functions843876 +Node: Variable Arguments Input846717 +Node: EOF and Errors849072 +Node: Error Recovery851986 +Node: Binary Streams853772 +Node: File Positioning856296 +Node: Portable Positioning863327 +Node: Stream Buffering868862 +Node: Buffering Concepts870461 +Node: Flushing Buffers871824 +Node: Controlling Buffering874931 +Node: Other Kinds of Streams880536 +Node: String Streams881825 +Node: Obstack Streams885959 +Node: Custom Streams888002 +Node: Streams and Cookies888719 +Node: Hook Functions891789 +Node: Formatted Messages894175 +Node: Printing Formatted Messages894840 +Node: Adding Severity Classes901284 +Node: Example902891 +Node: Low-Level I/O906094 +Node: Opening and Closing Files909102 +Node: I/O Primitives917078 +Node: File Position Primitive931176 +Node: Descriptors and Streams938490 +Node: Stream/Descriptor Precautions941174 +Node: Linked Channels942380 +Node: Independent Channels943608 +Node: Cleaning Streams945511 +Node: Scatter-Gather947714 +Node: Memory-mapped I/O950303 +Node: Waiting for I/O959764 +Node: Synchronizing I/O967521 +Node: Asynchronous I/O970955 +Node: Asynchronous Reads/Writes978998 +Node: Status of AIO Operations991434 +Node: Synchronizing AIO Operations995004 +Node: Cancel AIO Operations1001403 +Node: Configuration of AIO1004874 +Node: Control Operations1006970 +Node: Duplicating Descriptors1009662 +Node: Descriptor Flags1013918 +Node: File Status Flags1017319 +Node: Access Modes1018772 +Node: Open-time Flags1021061 +Node: Operating Modes1025777 +Node: Getting File Status Flags1028542 +Node: File Locks1031149 +Node: Interrupt Input1040044 +Node: IOCTLs1042474 +Ref: IOCTLs-Footnote-11044454 +Node: File System Interface1044551 +Node: Working Directory1046080 +Node: Accessing Directories1051084 +Node: Directory Entries1052511 +Node: Opening a Directory1055765 +Node: Reading/Closing Directory1058208 +Node: Simple Directory Lister1062879 +Node: Random Access Directory1063898 +Node: Scanning Directory Content1065400 +Node: Simple Directory Lister Mark II1069855 +Node: Working with Directory Trees1070964 +Node: Hard Links1082507 +Node: Symbolic Links1085305 +Node: Deleting Files1092148 +Node: Renaming Files1095066 +Node: Creating Directories1098670 +Node: File Attributes1100422 +Node: Attribute Meanings1101946 +Node: Reading Attributes1111168 +Node: Testing File Type1115238 +Node: File Owner1119394 +Node: Permission Bits1123046 +Node: Access Permission1128364 +Node: Setting Permissions1129506 +Node: Testing File Access1134712 +Node: File Times1138374 +Node: File Size1142845 +Node: Making Special Files1149268 +Node: Temporary Files1150944 +Node: Pipes and FIFOs1160164 +Node: Creating a Pipe1161747 +Node: Pipe to a Subprocess1165040 +Node: FIFO Special Files1168047 +Node: Pipe Atomicity1169619 +Node: Sockets1170502 +Node: Socket Concepts1172542 +Node: Communication Styles1176782 +Node: Socket Addresses1178632 +Node: Address Formats1180668 +Node: Setting Address1183869 +Node: Reading Address1185591 +Node: Interface Naming1187352 +Node: Local Namespace1189759 +Node: Local Namespace Concepts1190419 +Node: Local Namespace Details1191936 +Node: Local Socket Example1193883 +Node: Internet Namespace1195309 +Node: Internet Address Formats1197532 +Node: Host Addresses1199683 +Node: Abstract Host Addresses1200851 +Node: Host Address Data Type1205369 +Node: Host Address Functions1208492 +Node: Host Names1212844 +Node: Ports1222115 +Node: Services Database1224153 +Node: Byte Order1226976 +Node: Protocols Database1229284 +Node: Inet Example1232826 +Node: Misc Namespaces1234836 +Node: Open/Close Sockets1235582 +Node: Creating a Socket1236080 +Node: Closing a Socket1237761 +Node: Socket Pairs1239287 +Node: Connections1241296 +Node: Connecting1242390 +Node: Listening1245217 +Node: Accepting Connections1247290 +Node: Who is Connected1250421 +Node: Transferring Data1251520 +Node: Sending Data1252625 +Node: Receiving Data1255143 +Node: Socket Data Options1256879 +Node: Byte Stream Example1257742 +Node: Server Example1259799 +Node: Out-of-Band Data1263815 +Node: Datagrams1269726 +Node: Sending Datagrams1270755 +Node: Receiving Datagrams1272680 +Node: Datagram Example1274746 +Node: Example Receiver1276760 +Node: Inetd1279324 +Node: Inetd Servers1280133 +Node: Configuring Inetd1281375 +Node: Socket Options1284044 +Node: Socket Option Functions1284752 +Node: Socket-Level Options1286309 +Node: Networks Database1289938 +Node: Low-Level Terminal Interface1292822 +Node: Is It a Terminal1294292 +Node: I/O Queues1296195 +Node: Canonical or Not1298152 +Node: Terminal Modes1299998 +Node: Mode Data Types1301567 +Node: Mode Functions1303395 +Node: Setting Modes1307327 +Node: Input Modes1309324 +Node: Output Modes1314590 +Node: Control Modes1316202 +Node: Local Modes1320291 +Node: Line Speed1326604 +Node: Special Characters1330781 +Node: Editing Characters1332695 +Node: Signal Characters1337035 +Node: Start/Stop Characters1339901 +Node: Other Special1341771 +Node: Noncanonical Input1343585 +Node: BSD Terminal Modes1348398 +Node: Line Control1349870 +Node: Noncanon Example1354586 +Node: Pseudo-Terminals1356813 +Node: Allocation1357725 +Node: Pseudo-Terminal Pairs1362514 +Node: Syslog1365030 +Node: Overview of Syslog1365979 +Node: Submitting Syslog Messages1370163 +Node: openlog1370981 +Node: syslog; vsyslog1374337 +Node: closelog1378534 +Node: setlogmask1379181 +Node: Syslog Example1381024 +Node: Mathematics1381687 +Node: Mathematical Constants1383409 +Node: Trig Functions1385416 +Node: Inverse Trig Functions1389151 +Node: Exponents and Logarithms1392953 +Node: Hyperbolic Functions1401145 +Node: Special Functions1405185 +Node: Errors in Math Functions1409723 +Node: Pseudo-Random Numbers1424148 +Node: ISO Random1426389 +Node: BSD Random1428321 +Node: SVID Random1432903 +Node: FP Function Optimizations1446153 +Node: Arithmetic1448240 +Node: Integers1449519 +Node: Integer Division1452535 +Node: Floating Point Numbers1456220 +Node: Floating Point Classes1457962 +Node: Floating Point Errors1462360 +Node: FP Exceptions1462857 +Node: Infinity and NaN1467218 +Node: Status bit operations1470291 +Node: Math Error Reporting1474433 +Node: Rounding1476759 +Node: Control Functions1480347 +Node: Arithmetic Functions1485169 +Node: Absolute Value1486037 +Node: Normalization Functions1488097 +Node: Rounding Functions1492171 +Node: Remainder Functions1496553 +Node: FP Bit Twiddling1498697 +Node: FP Comparison Functions1501809 +Node: Misc FP Arithmetic1504522 +Node: Complex Numbers1507264 +Node: Operations on Complex1508969 +Node: Parsing of Numbers1511313 +Node: Parsing of Integers1512005 +Node: Parsing of Floats1522610 +Node: System V Number Conversion1527776 +Node: Date and Time1533092 +Node: Time Basics1533822 +Node: Elapsed Time1535702 +Node: Processor And CPU Time1539254 +Node: CPU Time1541125 +Node: Processor Time1542898 +Node: Calendar Time1545298 +Node: Simple Calendar Time1547231 +Node: High-Resolution Calendar1549635 +Node: Broken-down Time1554996 +Node: High Accuracy Clock1562955 +Node: Formatting Calendar Time1570391 +Node: Parsing Date and Time1585700 +Node: Low-Level Time String Parsing1586543 +Node: General Time String Parsing1599562 +Node: TZ Variable1606690 +Node: Time Zone Functions1612733 +Node: Time Functions Example1615573 +Node: Setting an Alarm1616681 +Node: Sleeping1621928 +Node: Resource Usage And Limitation1626531 +Node: Resource Usage1627208 +Node: Limits on Resources1632790 +Node: Priority1642008 +Node: Absolute Priority1644370 +Node: Realtime Scheduling1649466 +Node: Basic Scheduling Functions1652914 +Node: Traditional Scheduling1660847 +Node: Traditional Scheduling Intro1661400 +Node: Traditional Scheduling Functions1665662 +Node: Memory Resources1669324 +Node: Memory Subsystem1670174 +Node: Query Memory Parameters1672554 +Node: Processor Resources1676201 +Node: Non-Local Exits1678318 +Node: Non-Local Intro1679028 +Node: Non-Local Details1682759 +Node: Non-Local Exits and Signals1685835 +Node: System V contexts1687332 +Node: Signal Handling1700293 +Node: Concepts of Signals1702327 +Node: Kinds of Signals1702891 +Node: Signal Generation1704286 +Node: Delivery of Signal1706553 +Node: Standard Signals1709407 +Node: Program Error Signals1711000 +Node: Termination Signals1718458 +Node: Alarm Signals1722296 +Node: Asynchronous I/O Signals1723528 +Node: Job Control Signals1724718 +Node: Operation Error Signals1729318 +Node: Miscellaneous Signals1731257 +Node: Signal Messages1732951 +Node: Signal Actions1734836 +Node: Basic Signal Handling1735781 +Node: Advanced Signal Handling1741854 +Node: Signal and Sigaction1744828 +Node: Sigaction Function Example1746580 +Node: Flags for Sigaction1748896 +Node: Initial Signal Actions1751274 +Node: Defining Handlers1752655 +Node: Handler Returns1754840 +Node: Termination in Handler1756890 +Node: Longjmp in Handler1758329 +Node: Signals in Handler1760433 +Node: Merged Signals1762553 +Node: Nonreentrancy1768266 +Node: Atomic Data Access1773672 +Node: Non-atomic Example1774718 +Node: Atomic Types1776495 +Node: Atomic Usage1777514 +Node: Interrupted Primitives1778984 +Node: Generating Signals1782283 +Node: Signaling Yourself1782876 +Node: Signaling Another Process1784859 +Node: Permission for kill1788235 +Node: Kill Example1790031 +Node: Blocking Signals1792383 +Node: Why Block1794155 +Node: Signal Sets1795691 +Node: Process Signal Mask1798717 +Node: Testing for Delivery1801742 +Node: Blocking for Handler1803000 +Node: Checking for Pending Signals1805419 +Node: Remembering a Signal1807431 +Node: Waiting for a Signal1810985 +Node: Using Pause1811530 +Node: Pause Problems1813155 +Node: Sigsuspend1814879 +Node: Signal Stack1817590 +Node: BSD Signal Handling1822912 +Node: BSD Handler1824186 +Node: Blocking in BSD1826618 +Node: Program Basics1828069 +Node: Program Arguments1830053 +Node: Argument Syntax1832052 +Node: Parsing Program Arguments1834726 +Node: Getopt1835829 +Node: Using Getopt1836467 +Node: Example of Getopt1840586 +Node: Getopt Long Options1843324 +Node: Getopt Long Option Example1848560 +Node: Argp1851681 +Node: Argp Global Variables1855031 +Node: Argp Parsers1857053 +Node: Argp Option Vectors1860400 +Node: Argp Option Flags1863635 +Node: Argp Parser Functions1865652 +Node: Argp Special Keys1868351 +Node: Argp Helper Functions1873678 +Node: Argp Parsing State1876735 +Node: Argp Children1880243 +Node: Argp Flags1882303 +Node: Argp Help Filtering1884620 +Node: Argp Help Filter Keys1885835 +Node: Argp Help1886708 +Node: Argp Help Flags1887896 +Node: Argp Examples1890190 +Node: Argp Example 11890660 +Node: Argp Example 21891464 +Node: Argp Example 31894408 +Node: Argp Example 41901453 +Node: Argp User Customization1909155 +Node: Suboptions1910767 +Node: Suboptions Example1912709 +Node: Environment Variables1914878 +Node: Environment Access1916743 +Node: Standard Environment1921662 +Node: System Calls1925834 +Node: Program Termination1929390 +Node: Normal Termination1930599 +Node: Exit Status1931996 +Node: Cleanups on Exit1935355 +Node: Aborting a Program1937172 +Node: Termination Internals1938071 +Node: Processes1940251 +Node: Running a Command1942273 +Node: Process Creation Concepts1944298 +Node: Process Identification1946307 +Node: Creating a Process1947231 +Node: Executing a File1950851 +Node: Process Completion1957986 +Node: Process Completion Status1964252 +Node: BSD Wait Functions1965895 +Node: Process Creation Example1967763 +Node: Job Control1970019 +Node: Concepts of Job Control1971297 +Node: Job Control is Optional1974651 +Node: Controlling Terminal1975700 +Node: Access to the Terminal1976607 +Node: Orphaned Process Groups1978210 +Node: Implementing a Shell1979201 +Node: Data Structures1980084 +Node: Initializing the Shell1982742 +Node: Launching Jobs1986478 +Node: Foreground and Background1993931 +Node: Stopped and Terminated Jobs1997050 +Node: Continuing Stopped Jobs2002260 +Node: Missing Pieces2003892 +Node: Functions for Job Control2005516 +Node: Identifying the Terminal2005996 +Node: Process Group Functions2007569 +Node: Terminal Access Functions2012579 +Node: Name Service Switch2016056 +Node: NSS Basics2017387 +Node: NSS Configuration File2018976 +Node: Services in the NSS configuration2020674 +Node: Actions in the NSS configuration2021955 +Node: Notes on NSS Configuration File2025116 +Node: NSS Module Internals2026993 +Node: NSS Module Names2027689 +Ref: NSS Module Names-Footnote-12029730 +Ref: NSS Module Names-Footnote-22029884 +Node: NSS Modules Interface2030062 +Node: Extending NSS2034760 +Node: Adding another Service to NSS2035691 +Node: NSS Module Function Internals2037922 +Node: Users and Groups2042826 +Node: User and Group IDs2045437 +Node: Process Persona2046345 +Node: Why Change Persona2048030 +Node: How Change Persona2049911 +Node: Reading Persona2051798 +Node: Setting User ID2054068 +Node: Setting Groups2056931 +Node: Enable/Disable Setuid2061033 +Node: Setuid Program Example2063067 +Node: Tips for Setuid2066541 +Node: Who Logged In2069056 +Node: User Accounting Database2071436 +Node: Manipulating the Database2072620 +Node: XPG Functions2084948 +Node: Logging In and Out2089363 +Node: User Database2091479 +Node: User Data Structure2092141 +Node: Lookup User2093398 +Node: Scanning All Users2095962 +Node: Writing a User Entry2098916 +Node: Group Database2099815 +Node: Group Data Structure2100391 +Node: Lookup Group2101154 +Node: Scanning All Groups2103655 +Node: Database Example2106685 +Node: Netgroup Database2108882 +Node: Netgroup Data2109293 +Node: Lookup Netgroup2110821 +Node: Netgroup Membership2114239 +Node: System Management2115569 +Node: Host Identification2116500 +Node: Platform Type2122979 +Node: Filesystem Handling2126284 +Node: Mount Information2127784 +Node: fstab2129803 +Node: mtab2135619 +Node: Other Mount Information2144911 +Node: Mount-Unmount-Remount2145425 +Node: System Parameters2155450 +Node: System Configuration2160983 +Node: General Limits2162554 +Node: System Options2166189 +Node: Version Supported2169521 +Node: Sysconf2171358 +Node: Sysconf Definition2171994 +Node: Constants for Sysconf2172666 +Node: Examples of Sysconf2185601 +Node: Minimums2186594 +Node: Limits for Files2189305 +Node: Options for Files2192306 +Node: File Minimums2194599 +Node: Pathconf2196819 +Node: Utility Limits2200194 +Node: Utility Minimums2202124 +Node: String Parameters2203876 +Node: Cryptographic Functions2207776 +Node: Legal Problems2209573 +Node: getpass2211848 +Node: crypt2214018 +Node: DES Encryption2218786 +Node: Debugging Support2224988 +Node: Backtraces2225630 +Node: POSIX Threads2230416 +Node: Basic Thread Operations2232020 +Node: Thread Attributes2236604 +Node: Cancellation2243561 +Node: Cleanup Handlers2247455 +Node: Mutexes2252593 +Node: Condition Variables2262251 +Node: POSIX Semaphores2269627 +Node: Thread-Specific Data2273508 +Node: Threads and Signal Handling2278141 +Node: Threads and Fork2281831 +Node: Streams and Fork2287258 +Node: Miscellaneous Thread Functions2289420 +Node: Language Features2295905 +Node: Consistency Checking2296831 +Node: Variadic Functions2301372 +Node: Why Variadic2302444 +Node: How Variadic2304408 +Node: Variadic Prototypes2305697 +Node: Receiving Arguments2306838 +Node: How Many Arguments2309509 +Node: Calling Variadics2311171 +Node: Argument Macros2313271 +Node: Variadic Example2316107 +Node: Old Varargs2317259 +Node: Null Pointer Constant2318934 +Node: Important Data Types2320019 +Node: Data Type Measurements2322583 +Node: Width of Type2323440 +Node: Range of Type2324346 +Node: Floating Type Macros2327614 +Node: Floating Point Concepts2328872 +Node: Floating Point Parameters2332600 +Node: IEEE Floating Point2339552 +Node: Structure Measurement2341305 +Node: Library Summary2342000 +Node: Installation2549959 +Node: Configuring and compiling2551648 +Node: Running make install2560953 +Node: Tools for Compilation2565011 +Node: Supported Configurations2568274 +Node: Linux2570478 +Node: Reporting Bugs2572624 +Node: Maintenance2575454 +Node: Source Layout2575837 +Node: Porting2579769 +Node: Hierarchy Conventions2588069 +Node: Porting to Unix2593125 +Node: Contributors2595140 +Node: Copying2612454 +Node: Concept Index2639351 +Node: Type Index2702696 +Node: Function Index2710473 +Node: Variable Index2792133 +Node: File Index2856397  End Tag Table diff -durpNa glibc-2.2.2/manual/libc.info-1 glibc-2.2.3/manual/libc.info-1 --- glibc-2.2.2/manual/libc.info-1 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-1 Wed Apr 25 14:55:22 2001 @@ -920,8 +920,9 @@ Memory Resources Non-Local Exits * Intro: Non-Local Intro. When and how to use these facilities. -* Details: Non-Local Details. Functions for non-local exits. +* Details: Non-Local Details. Functions for non-local exits. * Non-Local Exits and Signals:: Portability issues. +* System V contexts:: Complete context control a la System V. Signal Handling diff -durpNa glibc-2.2.2/manual/libc.info-13 glibc-2.2.3/manual/libc.info-13 --- glibc-2.2.2/manual/libc.info-13 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-13 Wed Apr 25 14:55:22 2001 @@ -47,10 +47,10 @@ find code similar to the following: printf ("%d file%s deleted", n, n == 1 ? "" : "s"); -After the first complains from people internationalizing the code people -either completely avoided formulations like this or used strings like -`"file(s)"'. Both look unnatural and should be avoided. First tries -to solve the problem correctly looked like this: +After the first complaints from people internationalizing the code +people either completely avoided formulations like this or used strings +like `"file(s)"'. Both look unnatural and should be avoided. First +tries to solve the problem correctly looked like this: if (n == 1) printf ("%d file deleted", n); @@ -152,10 +152,10 @@ details are explained in the GNU `gettex of information is provided. The information about the plural form selection has to be stored in -the header entry (the one with the empty (`msgid' string). There should -be something like: +the header entry (the one with the empty (`msgid' string). It looks +like this: - nplurals=2; plural=n == 1 ? 0 : 1 + Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1; The `nplurals' value must be a decimal number which specifies how many different plural forms exist for this language. The string @@ -175,10 +175,10 @@ below).(1) Only one form: Some languages only require one single form. There is no - distinction between the singular and plural form. And appropriate + distinction between the singular and plural form. An appropriate header entry would look like this: - nplurals=1; plural=0 + Plural-Forms: nplurals=1; plural=0; Languages with this property include: @@ -195,7 +195,7 @@ Two forms, singular used for one only This is the form used in most existing programs since it is what English is using. A header entry would look like this: - nplurals=2; plural=n != 1 + Plural-Forms: nplurals=2; plural=n != 1; (Note: this uses the feature of C expressions that boolean expressions have to value zero or one.) @@ -224,7 +224,7 @@ Two forms, singular used for zero and on Exceptional case in the language family. The header entry would be: - nplurals=2; plural=n>1 + Plural-Forms: nplurals=2; plural=n>1; Languages with this property include: @@ -234,7 +234,7 @@ Two forms, singular used for zero and on Three forms, special cases for one and two The header entry would be: - nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2 + Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2; Languages with this property include: @@ -244,7 +244,8 @@ Three forms, special cases for one and t Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4] The header entry would look like this: - nplurals=3; plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1 + Plural-Forms: nplurals=3; \ + plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1; Languages with this property include: @@ -254,8 +255,9 @@ Three forms, special cases for numbers e Three forms, special case for one and some numbers ending in 2, 3, or 4 The header entry would look like this: - nplurals=3; plural=n==1 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2 + Plural-Forms: nplurals=3; \ + plural=n==1 ? 0 : \ + n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; (Continuation in the next line is possible.) @@ -267,7 +269,8 @@ Three forms, special case for one and so Four forms, special case for one and all numbers ending in 2, 3, or 4 The header entry would look like this: - nplurals=4; plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3 + Plural-Forms: nplurals=4; \ + plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3; Languages with this property include: diff -durpNa glibc-2.2.2/manual/libc.info-14 glibc-2.2.3/manual/libc.info-14 --- glibc-2.2.2/manual/libc.info-14 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-14 Wed Apr 25 14:55:22 2001 @@ -262,6 +262,32 @@ fit the pattern or not. The symbols des `FNM_CASEFOLD' Ignore case in comparing STRING to PATTERN. +`FNM_EXTMATCH' + Recognize beside the normal patterns also the extended patterns + introduced in `ksh'. The patterns are written in the form + explained in the following table where PATTERN-LIST is a `|' + separated list of patterns. + + `?(PATTERN-LIST)' + The pattern matches if zero or one occurences of any of the + patterns in the PATTERN-LIST allow matching the input string. + + `*(PATTERN-LIST)' + The pattern matches if zero or more occurences of any of the + patterns in the PATTERN-LIST allow matching the input string. + + `+(PATTERN-LIST)' + The pattern matches if one or more occurences of any of the + patterns in the PATTERN-LIST allow matching the input string. + + `@(PATTERN-LIST)' + The pattern matches if exactly one occurence of any of the + patterns in the PATTERN-LIST allows matching the input string. + + `!(PATTERN-LIST)' + The pattern matches if the input string cannot be matched + with any of the patterns in the PATTERN-LIST. +  File: libc.info, Node: Globbing, Next: Regular Expressions, Prev: Wildcard Matching, Up: Pattern Matching diff -durpNa glibc-2.2.2/manual/libc.info-16 glibc-2.2.3/manual/libc.info-16 --- glibc-2.2.2/manual/libc.info-16 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-16 Wed Apr 25 14:55:22 2001 @@ -374,13 +374,11 @@ line-oriented output. - Function: int fputc_unlocked (int C, FILE *STREAM) The `fputc_unlocked' function is equivalent to the `fputc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t fputwc_unlocked (wint_t WC, FILE *STREAM) The `fputwc_unlocked' function is equivalent to the `fputwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -400,13 +398,11 @@ line-oriented output. - Function: int putc_unlocked (int C, FILE *STREAM) The `putc_unlocked' function is equivalent to the `putc' function - except that it does not implicitly lock the stream if the state is - `FSETLOCKING_INTERNAL'. + except that it does not implicitly lock the stream. - Function: wint_t putwc_unlocked (wchar_t WC, FILE *STREAM) The `putwc_unlocked' function is equivalent to the `putwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -414,19 +410,17 @@ line-oriented output. The `putchar' function is equivalent to `putc' with `stdout' as the value of the STREAM argument. - - Function: wint_t putchar (wchar_t WC) + - Function: wint_t putwchar (wchar_t WC) The `putwchar' function is equivalent to `putwc' with `stdout' as the value of the STREAM argument. - Function: int putchar_unlocked (int C) The `putchar_unlocked' function is equivalent to the `putchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t putwchar_unlocked (wchar_t WC) The `putwchar_unlocked' function is equivalent to the `putwchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -458,15 +452,13 @@ line-oriented output. - Function: int fputs_unlocked (const char *S, FILE *STREAM) The `fputs_unlocked' function is equivalent to the `fputs' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. - Function: int fputws_unlocked (const wchar_t *WS, FILE *STREAM) The `fputws_unlocked' function is equivalent to the `fputws' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -523,13 +515,11 @@ sure that it will fit in a `char' variab - Function: int fgetc_unlocked (FILE *STREAM) The `fgetc_unlocked' function is equivalent to the `fgetc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t fgetwc_unlocked (FILE *STREAM) The `fgetwc_unlocked' function is equivalent to the `fgetwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -548,13 +538,11 @@ sure that it will fit in a `char' variab - Function: int getc_unlocked (FILE *STREAM) The `getc_unlocked' function is equivalent to the `getc' function - except that it does not implicitly lock the stream if the state is - `FSETLOCKING_INTERNAL'. + except that it does not implicitly lock the stream. - Function: wint_t getwc_unlocked (FILE *STREAM) The `getwc_unlocked' function is equivalent to the `getwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -568,13 +556,11 @@ sure that it will fit in a `char' variab - Function: int getchar_unlocked (void) The `getchar_unlocked' function is equivalent to the `getchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t getwchar_unlocked (void) The `getwchar_unlocked' function is equivalent to the `getwchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -733,16 +719,14 @@ of a specified delimiter character. - Function: char * fgets_unlocked (char *S, int COUNT, FILE *STREAM) The `fgets_unlocked' function is equivalent to the `fgets' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. - Function: wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE *STREAM) The `fgetws_unlocked' function is equivalent to the `fgetws' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -928,8 +912,7 @@ different kinds of computers. - Function: size_t fread_unlocked (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM) The `fread_unlocked' function is equivalent to the `fread' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -943,8 +926,7 @@ different kinds of computers. - Function: size_t fwrite_unlocked (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM) The `fwrite_unlocked' function is equivalent to the `fwrite' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. diff -durpNa glibc-2.2.2/manual/libc.info-17 glibc-2.2.3/manual/libc.info-17 --- glibc-2.2.2/manual/libc.info-17 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-17 Wed Apr 25 14:55:22 2001 @@ -603,11 +603,11 @@ way to make sure you have all the right In practice, it is often easier just to use `asprintf', below. - *Attention:* In the GNU C library version 2.0 the return value is - the number of characters stored, not including the terminating - null. If this value equals `SIZE - 1', then there was not enough - space in S for all the output. This change was necessary with the - adoption of snprintf by ISO C99. + *Attention:* In versions of the GNU C library prior to 2.1 the + return value is the number of characters stored, not including the + terminating null; unless there was not enough space in S to store + the result in which case `-1' is returned. This was changed in + order to comply with the ISO C99 standard.  File: libc.info, Node: Dynamic Output, Next: Variable Arguments Output, Prev: Formatted Output Functions, Up: Formatted Output diff -durpNa glibc-2.2.2/manual/libc.info-18 glibc-2.2.3/manual/libc.info-18 --- glibc-2.2.2/manual/libc.info-18 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-18 Wed Apr 25 14:55:22 2001 @@ -896,8 +896,7 @@ I/O operation on that stream. - Function: int feof_unlocked (FILE *STREAM) The `feof_unlocked' function is equivalent to the `feof' function - except that it does not implicitly lock the stream if the state is - `FSETLOCKING_INTERNAL'. + except that it does not implicitly lock the stream. This function is a GNU extension. @@ -912,8 +911,7 @@ I/O operation on that stream. - Function: int ferror_unlocked (FILE *STREAM) The `ferror_unlocked' function is equivalent to the `ferror' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -946,8 +944,7 @@ function. - Function: void clearerr_unlocked (FILE *STREAM) The `clearerr_unlocked' function is equivalent to the `clearerr' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. diff -durpNa glibc-2.2.2/manual/libc.info-19 glibc-2.2.3/manual/libc.info-19 --- glibc-2.2.2/manual/libc.info-19 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-19 Wed Apr 25 14:55:22 2001 @@ -247,8 +247,7 @@ buffered output on a stream is flushed a - Function: int fflush_unlocked (FILE *STREAM) The `fflush_unlocked' function is equivalent to the `fflush' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. The `fflush' function can be used to flush all streams currently opened. While this is useful in some situations it does often more than diff -durpNa glibc-2.2.2/manual/libc.info-23 glibc-2.2.3/manual/libc.info-23 --- glibc-2.2.2/manual/libc.info-23 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-23 Wed Apr 25 14:55:22 2001 @@ -1025,7 +1025,19 @@ obtain information about the link. `lin hard link, does too. It makes a hard link to the symbolic link, which one rarely wants. - Prototypes for the functions listed in this section are in + Some systems have for some functions operating on files have a limit +on how many symbolic links are followed when resolving a path name. The +limit if it exists is published in the `sys/param.h' header file. + + - Macro: int MAXSYMLINKS + The macro `MAXSYMLINKS' specifies how many symlinks some function + will follow before returning `ELOOP'. Not all functions behave the + same and this value is not the same a that returned for + `_SC_SYMLOOP' by `sysconf'. In fact, the `sysconf' result can + indicate that there is no fixed limit although `MAXSYMLINKS' + exists and has a finite value. + + Prototypes for most of the functions listed in this section are in `unistd.h'. - Function: int symlink (const char *OLDNAME, const char *NEWNAME) @@ -1092,77 +1104,61 @@ one rarely wants. A hardware error occurred while reading or writing data on the disk. - -File: libc.info, Node: Deleting Files, Next: Renaming Files, Prev: Symbolic Links, Up: File System Interface - -Deleting Files -============== - - You can delete a file with `unlink' or `remove'. - - Deletion actually deletes a file name. If this is the file's only -name, then the file is deleted as well. If the file has other -remaining names (*note Hard Links::), it remains accessible under those -names. + In some situations it is desirable to resolve all the to get the real +name of a file where no prefix names a symbolic link which is followed +and no filename in the path is `.' or `..'. This is for instance +desirable if files have to be compare in which case different names can +refer to the same inode. - - Function: int unlink (const char *FILENAME) - The `unlink' function deletes the file name FILENAME. If this is - a file's sole name, the file itself is also deleted. (Actually, - if any process has the file open when this happens, deletion is - postponed until all processes have closed the file.) + - Function: char * canonicalize_file_name (const char *NAME) + The `canonicalize_file_name' function returns the absolute name of + the file named by NAME which contains no `.', `..' components nor + any repeated path separators (`/') or symlinks. The result is + passed back as the return value of the function in a block of + memory allocated with `malloc'. If the result is not used anymore + the memory should be freed with a call to `free'. - The function `unlink' is declared in the header file `unistd.h'. + In any of the path components except the last one is missing the + function returns a NULL pointer. This is also what is returned if + the length of the path reaches or exceeds `PATH_MAX' characters. + In any case `errno' is set accordingly. - This function returns `0' on successful completion, and `-1' on - error. In addition to the usual file name errors (*note File Name - Errors::), the following `errno' error conditions are defined for - this function: + `ENAMETOOLONG' + The resulting path is too long. This error only occurs on + systems which have a limit on the file name length. `EACCES' - Write permission is denied for the directory from which the - file is to be removed, or the directory has the sticky bit - set and you do not own the file. - - `EBUSY' - This error indicates that the file is being used by the - system in such a way that it can't be unlinked. For example, - you might see this error if the file name specifies the root - directory or a mount point for a file system. + At least one of the path components is not readable. `ENOENT' - The file name to be deleted doesn't exist. + The input file name is empty. - `EPERM' - On some systems `unlink' cannot be used to delete the name of - a directory, or at least can only be used this way by a - privileged user. To avoid such problems, use `rmdir' to - delete directories. (In the GNU system `unlink' can never - delete the name of a directory.) + `ENOENT' + At least one of the path components does not exist. - `EROFS' - The directory containing the file name to be deleted is on a - read-only file system and can't be modified. + `ELOOP' + More than `MAXSYMLINKS' many symlinks have been followed. - - Function: int rmdir (const char *FILENAME) - The `rmdir' function deletes a directory. The directory must be - empty before it can be removed; in other words, it can only contain - entries for `.' and `..'. + This function is a GNU extension and is declared in `stdlib.h'. - In most other respects, `rmdir' behaves like `unlink'. There are - two additional `errno' error conditions defined for `rmdir': + The Unix standard includes a similar function which differs from +`canonicalize_file_name' in that the user has to provide the buffer +where the result is placed in. - `ENOTEMPTY' - `EEXIST' - The directory to be deleted is not empty. + - Function: char * realpath (const char *restrict NAME, char *restrict + RESOLVED) + The `realpath' function behaves just like `canonicalize_file_name' + but instead of allocating a buffer for the result it is placed in + the buffer pointed to by RESOLVED. - These two error codes are synonymous; some systems use one, and - some use the other. The GNU system always uses `ENOTEMPTY'. + One other difference is that the buffer RESOLVED will contain the + part of the path component which does not exist or is not readable + if the function returns `NULL' and `errno' is set to `EACCES' or + `ENOENT'. - The prototype for this function is declared in the header file - `unistd.h'. + This function is declared in `stdlib.h'. - - Function: int remove (const char *FILENAME) - This is the ISO C function to remove a file. It works like - `unlink' for files and like `rmdir' for directories. `remove' is - declared in `stdio.h'. + The advantage of using this function is that it is more widely +available. The drawback is that it reports failures for long path on +systems which have no limits on the file name length. diff -durpNa glibc-2.2.2/manual/libc.info-24 glibc-2.2.3/manual/libc.info-24 --- glibc-2.2.2/manual/libc.info-24 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-24 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,80 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Deleting Files, Next: Renaming Files, Prev: Symbolic Links, Up: File System Interface + +Deleting Files +============== + + You can delete a file with `unlink' or `remove'. + + Deletion actually deletes a file name. If this is the file's only +name, then the file is deleted as well. If the file has other +remaining names (*note Hard Links::), it remains accessible under those +names. + + - Function: int unlink (const char *FILENAME) + The `unlink' function deletes the file name FILENAME. If this is + a file's sole name, the file itself is also deleted. (Actually, + if any process has the file open when this happens, deletion is + postponed until all processes have closed the file.) + + The function `unlink' is declared in the header file `unistd.h'. + + This function returns `0' on successful completion, and `-1' on + error. In addition to the usual file name errors (*note File Name + Errors::), the following `errno' error conditions are defined for + this function: + + `EACCES' + Write permission is denied for the directory from which the + file is to be removed, or the directory has the sticky bit + set and you do not own the file. + + `EBUSY' + This error indicates that the file is being used by the + system in such a way that it can't be unlinked. For example, + you might see this error if the file name specifies the root + directory or a mount point for a file system. + + `ENOENT' + The file name to be deleted doesn't exist. + + `EPERM' + On some systems `unlink' cannot be used to delete the name of + a directory, or at least can only be used this way by a + privileged user. To avoid such problems, use `rmdir' to + delete directories. (In the GNU system `unlink' can never + delete the name of a directory.) + + `EROFS' + The directory containing the file name to be deleted is on a + read-only file system and can't be modified. + + - Function: int rmdir (const char *FILENAME) + The `rmdir' function deletes a directory. The directory must be + empty before it can be removed; in other words, it can only contain + entries for `.' and `..'. + + In most other respects, `rmdir' behaves like `unlink'. There are + two additional `errno' error conditions defined for `rmdir': + + `ENOTEMPTY' + `EEXIST' + The directory to be deleted is not empty. + + These two error codes are synonymous; some systems use one, and + some use the other. The GNU system always uses `ENOTEMPTY'. + + The prototype for this function is declared in the header file + `unistd.h'. + + - Function: int remove (const char *FILENAME) + This is the ISO C function to remove a file. It works like + `unlink' for files and like `rmdir' for directories. `remove' is + declared in `stdio.h'. + + File: libc.info, Node: Renaming Files, Next: Creating Directories, Prev: Deleting Files, Up: File System Interface Renaming Files @@ -618,17 +692,17 @@ introduces three new test macros. But u not take the value of the `st_mode' field as the parameter. Instead they expect a pointer to the whole `struct stat' structure. - - Macro: int S_TYPEISMQ (struct stat S) + - Macro: int S_TYPEISMQ (struct stat *S) If the system implement POSIX message queues as distinct objects and the file is a message queue object, this macro returns a non-zero value. In all other cases the result is zero. - - Macro: int S_TYPEISSEM (struct stat S) + - Macro: int S_TYPEISSEM (struct stat *S) If the system implement POSIX semaphores as distinct objects and the file is a semaphore object, this macro returns a non-zero value. In all other cases the result is zero. - - Macro: int S_TYPEISSHM (struct stat S) + - Macro: int S_TYPEISSHM (struct stat *S) If the system implement POSIX shared memory objects as distinct objects and the file is an shared memory object, this macro returns a non-zero value. In all other cases the result is zero. @@ -1084,109 +1158,4 @@ constants. - Macro: int F_OK Flag meaning test for existence of the file. - - -File: libc.info, Node: File Times, Next: File Size, Prev: Testing File Access, Up: File Attributes - -File Times ----------- - - Each file has three time stamps associated with it: its access time, -its modification time, and its attribute modification time. These -correspond to the `st_atime', `st_mtime', and `st_ctime' members of the -`stat' structure; see *Note File Attributes::. - - All of these times are represented in calendar time format, as -`time_t' objects. This data type is defined in `time.h'. For more -information about representation and manipulation of time values, see -*Note Calendar Time::. - - Reading from a file updates its access time attribute, and writing -updates its modification time. When a file is created, all three time -stamps for that file are set to the current time. In addition, the -attribute change time and modification time fields of the directory that -contains the new entry are updated. - - Adding a new name for a file with the `link' function updates the -attribute change time field of the file being linked, and both the -attribute change time and modification time fields of the directory -containing the new name. These same fields are affected if a file name -is deleted with `unlink', `remove' or `rmdir'. Renaming a file with -`rename' affects only the attribute change time and modification time -fields of the two parent directories involved, and not the times for -the file being renamed. - - Changing the attributes of a file (for example, with `chmod') -updates its attribute change time field. - - You can also change some of the time stamps of a file explicitly -using the `utime' function--all except the attribute change time. You -need to include the header file `utime.h' to use this facility. - - - Data Type: struct utimbuf - The `utimbuf' structure is used with the `utime' function to - specify new access and modification times for a file. It contains - the following members: - - `time_t actime' - This is the access time for the file. - - `time_t modtime' - This is the modification time for the file. - - - Function: int utime (const char *FILENAME, const struct utimbuf - *TIMES) - This function is used to modify the file times associated with the - file named FILENAME. - - If TIMES is a null pointer, then the access and modification times - of the file are set to the current time. Otherwise, they are set - to the values from the `actime' and `modtime' members - (respectively) of the `utimbuf' structure pointed to by TIMES. - - The attribute modification time for the file is set to the current - time in either case (since changing the time stamps is itself a - modification of the file attributes). - - The `utime' function returns `0' if successful and `-1' on - failure. In addition to the usual file name errors (*note File - Name Errors::), the following `errno' error conditions are defined - for this function: - - `EACCES' - There is a permission problem in the case where a null - pointer was passed as the TIMES argument. In order to update - the time stamp on the file, you must either be the owner of - the file, have write permission for the file, or be a - privileged user. - - `ENOENT' - The file doesn't exist. - - `EPERM' - If the TIMES argument is not a null pointer, you must either - be the owner of the file or be a privileged user. - - `EROFS' - The file lives on a read-only file system. - - Each of the three time stamps has a corresponding microsecond part, -which extends its resolution. These fields are called `st_atime_usec', -`st_mtime_usec', and `st_ctime_usec'; each has a value between 0 and -999,999, which indicates the time in microseconds. They correspond to -the `tv_usec' field of a `timeval' structure; see *Note High-Resolution -Calendar::. - - The `utimes' function is like `utime', but also lets you specify the -fractional part of the file times. The prototype for this function is -in the header file `sys/time.h'. - - - Function: int utimes (const char *FILENAME, struct timeval TVP[2]) - This function sets the file access and modification times of the - file FILENAME. The new file access time is specified by `TVP[0]', - and the new modification time by `TVP[1]'. This function comes - from BSD. - - The return values and error conditions are the same as for the - `utime' function. diff -durpNa glibc-2.2.2/manual/libc.info-25 glibc-2.2.3/manual/libc.info-25 --- glibc-2.2.2/manual/libc.info-25 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-25 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,111 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: File Times, Next: File Size, Prev: Testing File Access, Up: File Attributes + +File Times +---------- + + Each file has three time stamps associated with it: its access time, +its modification time, and its attribute modification time. These +correspond to the `st_atime', `st_mtime', and `st_ctime' members of the +`stat' structure; see *Note File Attributes::. + + All of these times are represented in calendar time format, as +`time_t' objects. This data type is defined in `time.h'. For more +information about representation and manipulation of time values, see +*Note Calendar Time::. + + Reading from a file updates its access time attribute, and writing +updates its modification time. When a file is created, all three time +stamps for that file are set to the current time. In addition, the +attribute change time and modification time fields of the directory that +contains the new entry are updated. + + Adding a new name for a file with the `link' function updates the +attribute change time field of the file being linked, and both the +attribute change time and modification time fields of the directory +containing the new name. These same fields are affected if a file name +is deleted with `unlink', `remove' or `rmdir'. Renaming a file with +`rename' affects only the attribute change time and modification time +fields of the two parent directories involved, and not the times for +the file being renamed. + + Changing the attributes of a file (for example, with `chmod') +updates its attribute change time field. + + You can also change some of the time stamps of a file explicitly +using the `utime' function--all except the attribute change time. You +need to include the header file `utime.h' to use this facility. + + - Data Type: struct utimbuf + The `utimbuf' structure is used with the `utime' function to + specify new access and modification times for a file. It contains + the following members: + + `time_t actime' + This is the access time for the file. + + `time_t modtime' + This is the modification time for the file. + + - Function: int utime (const char *FILENAME, const struct utimbuf + *TIMES) + This function is used to modify the file times associated with the + file named FILENAME. + + If TIMES is a null pointer, then the access and modification times + of the file are set to the current time. Otherwise, they are set + to the values from the `actime' and `modtime' members + (respectively) of the `utimbuf' structure pointed to by TIMES. + + The attribute modification time for the file is set to the current + time in either case (since changing the time stamps is itself a + modification of the file attributes). + + The `utime' function returns `0' if successful and `-1' on + failure. In addition to the usual file name errors (*note File + Name Errors::), the following `errno' error conditions are defined + for this function: + + `EACCES' + There is a permission problem in the case where a null + pointer was passed as the TIMES argument. In order to update + the time stamp on the file, you must either be the owner of + the file, have write permission for the file, or be a + privileged user. + + `ENOENT' + The file doesn't exist. + + `EPERM' + If the TIMES argument is not a null pointer, you must either + be the owner of the file or be a privileged user. + + `EROFS' + The file lives on a read-only file system. + + Each of the three time stamps has a corresponding microsecond part, +which extends its resolution. These fields are called `st_atime_usec', +`st_mtime_usec', and `st_ctime_usec'; each has a value between 0 and +999,999, which indicates the time in microseconds. They correspond to +the `tv_usec' field of a `timeval' structure; see *Note High-Resolution +Calendar::. + + The `utimes' function is like `utime', but also lets you specify the +fractional part of the file times. The prototype for this function is +in the header file `sys/time.h'. + + - Function: int utimes (const char *FILENAME, struct timeval TVP[2]) + This function sets the file access and modification times of the + file FILENAME. The new file access time is specified by `TVP[0]', + and the new modification time by `TVP[1]'. This function comes + from BSD. + + The return values and error conditions are the same as for the + `utime' function. + + File: libc.info, Node: File Size, Prev: File Times, Up: File Attributes File Size @@ -1124,115 +1229,4 @@ socket. The prototype for this function You can't read the address of a socket in the file namespace. This is consistent with the rest of the system; in general, there's no way to find a file's name from a descriptor for that file. - - -File: libc.info, Node: Interface Naming, Next: Local Namespace, Prev: Socket Addresses, Up: Sockets - -Interface Naming -================ - - Each network interface has a name. This usually consists of a few -letters that relate to the type of interface, which may be followed by a -number if there is more than one interface of that type. Examples -might be `lo' (the loopback interface) and `eth0' (the first Ethernet -interface). - - Although such names are convenient for humans, it would be clumsy to -have to use them whenever a program needs to refer to an interface. In -such situations an interface is referred to by its "index", which is an -arbitrarily-assigned small positive integer. - - The following functions, constants and data types are declared in the -header file `net/if.h'. - - - Constant: size_t IFNAMSIZ - This constant defines the maximum buffer size needed to hold an - interface name, including its terminating zero byte. - - - Function: unsigned int if_nametoindex (const char *ifname) - This function yields the interface index corresponding to a - particular name. If no interface exists with the name given, it - returns 0. - - - Function: char * if_indextoname (unsigned int ifindex, char *ifname) - This function maps an interface index to its corresponding name. - The returned name is placed in the buffer pointed to by `ifname', - which must be at least `IFNAMSIZ' bytes in length. If the index - was invalid, the function's return value is a null pointer, - otherwise it is `ifname'. - - - Data Type: struct if_nameindex - This data type is used to hold the information about a single - interface. It has the following members: - - `unsigned int if_index;' - This is the interface index. - - `char *if_name' - This is the null-terminated index name. - - - - Function: struct if_nameindex * if_nameindex (void) - This function returns an array of `if_nameindex' structures, one - for every interface that is present. The end of the list is - indicated by a structure with an interface of 0 and a null name - pointer. If an error occurs, this function returns a null pointer. - - The returned structure must be freed with `if_freenameindex' after - use. - - - Function: void if_freenameindex (struct if_nameindex *ptr) - This function frees the structure returned by an earlier call to - `if_nameindex'. - - -File: libc.info, Node: Local Namespace, Next: Internet Namespace, Prev: Interface Naming, Up: Sockets - -The Local Namespace -=================== - - This section describes the details of the local namespace, whose -symbolic name (required when you create a socket) is `PF_LOCAL'. The -local namespace is also known as "Unix domain sockets". Another name -is file namespace since socket addresses are normally implemented as -file names. - -* Menu: - -* Concepts: Local Namespace Concepts. What you need to understand. -* Details: Local Namespace Details. Address format, symbolic names, etc. -* Example: Local Socket Example. Example of creating a socket. - - -File: libc.info, Node: Local Namespace Concepts, Next: Local Namespace Details, Up: Local Namespace - -Local Namespace Concepts ------------------------- - - In the local namespace socket addresses are file names. You can -specify any file name you want as the address of the socket, but you -must have write permission on the directory containing it. It's common -to put these files in the `/tmp' directory. - - One peculiarity of the local namespace is that the name is only used -when opening the connection; once open the address is not meaningful and -may not exist. - - Another peculiarity is that you cannot connect to such a socket from -another machine-not even if the other machine shares the file system -which contains the name of the socket. You can see the socket in a -directory listing, but connecting to it never succeeds. Some programs -take advantage of this, such as by asking the client to send its own -process ID, and using the process IDs to distinguish between clients. -However, we recommend you not use this method in protocols you design, -as we might someday permit connections from other machines that mount -the same file systems. Instead, send each new client an identifying -number if you want it to have one. - - After you close a socket in the local namespace, you should delete -the file name from the file system. Use `unlink' or `remove' to do -this; see *Note Deleting Files::. - - The local namespace supports just one protocol for any communication -style; it is protocol number `0'. diff -durpNa glibc-2.2.2/manual/libc.info-26 glibc-2.2.3/manual/libc.info-26 --- glibc-2.2.2/manual/libc.info-26 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-26 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,117 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Interface Naming, Next: Local Namespace, Prev: Socket Addresses, Up: Sockets + +Interface Naming +================ + + Each network interface has a name. This usually consists of a few +letters that relate to the type of interface, which may be followed by a +number if there is more than one interface of that type. Examples +might be `lo' (the loopback interface) and `eth0' (the first Ethernet +interface). + + Although such names are convenient for humans, it would be clumsy to +have to use them whenever a program needs to refer to an interface. In +such situations an interface is referred to by its "index", which is an +arbitrarily-assigned small positive integer. + + The following functions, constants and data types are declared in the +header file `net/if.h'. + + - Constant: size_t IFNAMSIZ + This constant defines the maximum buffer size needed to hold an + interface name, including its terminating zero byte. + + - Function: unsigned int if_nametoindex (const char *ifname) + This function yields the interface index corresponding to a + particular name. If no interface exists with the name given, it + returns 0. + + - Function: char * if_indextoname (unsigned int ifindex, char *ifname) + This function maps an interface index to its corresponding name. + The returned name is placed in the buffer pointed to by `ifname', + which must be at least `IFNAMSIZ' bytes in length. If the index + was invalid, the function's return value is a null pointer, + otherwise it is `ifname'. + + - Data Type: struct if_nameindex + This data type is used to hold the information about a single + interface. It has the following members: + + `unsigned int if_index;' + This is the interface index. + + `char *if_name' + This is the null-terminated index name. + + + - Function: struct if_nameindex * if_nameindex (void) + This function returns an array of `if_nameindex' structures, one + for every interface that is present. The end of the list is + indicated by a structure with an interface of 0 and a null name + pointer. If an error occurs, this function returns a null pointer. + + The returned structure must be freed with `if_freenameindex' after + use. + + - Function: void if_freenameindex (struct if_nameindex *ptr) + This function frees the structure returned by an earlier call to + `if_nameindex'. + + +File: libc.info, Node: Local Namespace, Next: Internet Namespace, Prev: Interface Naming, Up: Sockets + +The Local Namespace +=================== + + This section describes the details of the local namespace, whose +symbolic name (required when you create a socket) is `PF_LOCAL'. The +local namespace is also known as "Unix domain sockets". Another name +is file namespace since socket addresses are normally implemented as +file names. + +* Menu: + +* Concepts: Local Namespace Concepts. What you need to understand. +* Details: Local Namespace Details. Address format, symbolic names, etc. +* Example: Local Socket Example. Example of creating a socket. + + +File: libc.info, Node: Local Namespace Concepts, Next: Local Namespace Details, Up: Local Namespace + +Local Namespace Concepts +------------------------ + + In the local namespace socket addresses are file names. You can +specify any file name you want as the address of the socket, but you +must have write permission on the directory containing it. It's common +to put these files in the `/tmp' directory. + + One peculiarity of the local namespace is that the name is only used +when opening the connection; once open the address is not meaningful and +may not exist. + + Another peculiarity is that you cannot connect to such a socket from +another machine-not even if the other machine shares the file system +which contains the name of the socket. You can see the socket in a +directory listing, but connecting to it never succeeds. Some programs +take advantage of this, such as by asking the client to send its own +process ID, and using the process IDs to distinguish between clients. +However, we recommend you not use this method in protocols you design, +as we might someday permit connections from other machines that mount +the same file systems. Instead, send each new client an identifying +number if you want it to have one. + + After you close a socket in the local namespace, you should delete +the file name from the file system. Use `unlink' or `remove' to do +this; see *Note Deleting Files::. + + The local namespace supports just one protocol for any communication +style; it is protocol number `0'. + + File: libc.info, Node: Local Namespace Details, Next: Local Socket Example, Prev: Local Namespace Concepts, Up: Local Namespace Details of Local Namespace @@ -1098,144 +1209,4 @@ connection styles. * Creating a Socket:: How to open a socket. * Closing a Socket:: How to close a socket. * Socket Pairs:: These are created like pipes. - - -File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets - -Creating a Socket ------------------ - - The primitive for creating a socket is the `socket' function, -declared in `sys/socket.h'. - - - Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL) - This function creates a socket and specifies communication style - STYLE, which should be one of the socket styles listed in *Note - Communication Styles::. The NAMESPACE argument specifies the - namespace; it must be `PF_LOCAL' (*note Local Namespace::) or - `PF_INET' (*note Internet Namespace::). PROTOCOL designates the - specific protocol (*note Socket Concepts::); zero is usually right - for PROTOCOL. - - The return value from `socket' is the file descriptor for the new - socket, or `-1' in case of error. The following `errno' error - conditions are defined for this function: - - `EPROTONOSUPPORT' - The PROTOCOL or STYLE is not supported by the NAMESPACE - specified. - - `EMFILE' - The process already has too many file descriptors open. - - `ENFILE' - The system already has too many file descriptors open. - - `EACCESS' - The process does not have the privilege to create a socket of - the specified STYLE or PROTOCOL. - - `ENOBUFS' - The system ran out of internal buffer space. - - The file descriptor returned by the `socket' function supports both - read and write operations. However, like pipes, sockets do not - support file positioning operations. - - For examples of how to call the `socket' function, see *Note Local -Socket Example::, or *Note Inet Example::. - - -File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets - -Closing a Socket ----------------- - - When you have finished using a socket, you can simply close its file -descriptor with `close'; see *Note Opening and Closing Files::. If -there is still data waiting to be transmitted over the connection, -normally `close' tries to complete this transmission. You can control -this behavior using the `SO_LINGER' socket option to specify a timeout -period; see *Note Socket Options::. - - You can also shut down only reception or transmission on a -connection by calling `shutdown', which is declared in `sys/socket.h'. - - - Function: int shutdown (int SOCKET, int HOW) - The `shutdown' function shuts down the connection of socket - SOCKET. The argument HOW specifies what action to perform: - - `0' - Stop receiving data for this socket. If further data arrives, - reject it. - - `1' - Stop trying to transmit data from this socket. Discard any - data waiting to be sent. Stop looking for acknowledgement of - data already sent; don't retransmit it if it is lost. - - `2' - Stop both reception and transmission. - - The return value is `0' on success and `-1' on failure. The - following `errno' error conditions are defined for this function: - - `EBADF' - SOCKET is not a valid file descriptor. - - `ENOTSOCK' - SOCKET is not a socket. - - `ENOTCONN' - SOCKET is not connected. - - -File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets - -Socket Pairs ------------- - - A "socket pair" consists of a pair of connected (but unnamed) -sockets. It is very similar to a pipe and is used in much the same -way. Socket pairs are created with the `socketpair' function, declared -in `sys/socket.h'. A socket pair is much like a pipe; the main -difference is that the socket pair is bidirectional, whereas the pipe -has one input-only end and one output-only end (*note Pipes and -FIFOs::). - - - Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, - int FILEDES[2]) - This function creates a socket pair, returning the file - descriptors in `FILEDES[0]' and `FILEDES[1]'. The socket pair is - a full-duplex communications channel, so that both reading and - writing may be performed at either end. - - The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for - the `socket' function. STYLE should be one of the communication - styles listed in *Note Communication Styles::. The NAMESPACE - argument specifies the namespace, which must be `AF_LOCAL' (*note - Local Namespace::); PROTOCOL specifies the communications - protocol, but zero is the only meaningful value. - - If STYLE specifies a connectionless communication style, then the - two sockets you get are not _connected_, strictly speaking, but - each of them knows the other as the default destination address, - so they can send packets to each other. - - The `socketpair' function returns `0' on success and `-1' on - failure. The following `errno' error conditions are defined for - this function: - - `EMFILE' - The process has too many file descriptors open. - - `EAFNOSUPPORT' - The specified namespace is not supported. - - `EPROTONOSUPPORT' - The specified protocol is not supported. - - `EOPNOTSUPP' - The specified protocol does not support the creation of - socket pairs. diff -durpNa glibc-2.2.2/manual/libc.info-27 glibc-2.2.3/manual/libc.info-27 --- glibc-2.2.2/manual/libc.info-27 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-27 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,146 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets + +Creating a Socket +----------------- + + The primitive for creating a socket is the `socket' function, +declared in `sys/socket.h'. + + - Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL) + This function creates a socket and specifies communication style + STYLE, which should be one of the socket styles listed in *Note + Communication Styles::. The NAMESPACE argument specifies the + namespace; it must be `PF_LOCAL' (*note Local Namespace::) or + `PF_INET' (*note Internet Namespace::). PROTOCOL designates the + specific protocol (*note Socket Concepts::); zero is usually right + for PROTOCOL. + + The return value from `socket' is the file descriptor for the new + socket, or `-1' in case of error. The following `errno' error + conditions are defined for this function: + + `EPROTONOSUPPORT' + The PROTOCOL or STYLE is not supported by the NAMESPACE + specified. + + `EMFILE' + The process already has too many file descriptors open. + + `ENFILE' + The system already has too many file descriptors open. + + `EACCESS' + The process does not have the privilege to create a socket of + the specified STYLE or PROTOCOL. + + `ENOBUFS' + The system ran out of internal buffer space. + + The file descriptor returned by the `socket' function supports both + read and write operations. However, like pipes, sockets do not + support file positioning operations. + + For examples of how to call the `socket' function, see *Note Local +Socket Example::, or *Note Inet Example::. + + +File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets + +Closing a Socket +---------------- + + When you have finished using a socket, you can simply close its file +descriptor with `close'; see *Note Opening and Closing Files::. If +there is still data waiting to be transmitted over the connection, +normally `close' tries to complete this transmission. You can control +this behavior using the `SO_LINGER' socket option to specify a timeout +period; see *Note Socket Options::. + + You can also shut down only reception or transmission on a +connection by calling `shutdown', which is declared in `sys/socket.h'. + + - Function: int shutdown (int SOCKET, int HOW) + The `shutdown' function shuts down the connection of socket + SOCKET. The argument HOW specifies what action to perform: + + `0' + Stop receiving data for this socket. If further data arrives, + reject it. + + `1' + Stop trying to transmit data from this socket. Discard any + data waiting to be sent. Stop looking for acknowledgement of + data already sent; don't retransmit it if it is lost. + + `2' + Stop both reception and transmission. + + The return value is `0' on success and `-1' on failure. The + following `errno' error conditions are defined for this function: + + `EBADF' + SOCKET is not a valid file descriptor. + + `ENOTSOCK' + SOCKET is not a socket. + + `ENOTCONN' + SOCKET is not connected. + + +File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets + +Socket Pairs +------------ + + A "socket pair" consists of a pair of connected (but unnamed) +sockets. It is very similar to a pipe and is used in much the same +way. Socket pairs are created with the `socketpair' function, declared +in `sys/socket.h'. A socket pair is much like a pipe; the main +difference is that the socket pair is bidirectional, whereas the pipe +has one input-only end and one output-only end (*note Pipes and +FIFOs::). + + - Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, + int FILEDES[2]) + This function creates a socket pair, returning the file + descriptors in `FILEDES[0]' and `FILEDES[1]'. The socket pair is + a full-duplex communications channel, so that both reading and + writing may be performed at either end. + + The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for + the `socket' function. STYLE should be one of the communication + styles listed in *Note Communication Styles::. The NAMESPACE + argument specifies the namespace, which must be `AF_LOCAL' (*note + Local Namespace::); PROTOCOL specifies the communications + protocol, but zero is the only meaningful value. + + If STYLE specifies a connectionless communication style, then the + two sockets you get are not _connected_, strictly speaking, but + each of them knows the other as the default destination address, + so they can send packets to each other. + + The `socketpair' function returns `0' on success and `-1' on + failure. The following `errno' error conditions are defined for + this function: + + `EMFILE' + The process has too many file descriptors open. + + `EAFNOSUPPORT' + The specified namespace is not supported. + + `EPROTONOSUPPORT' + The specified protocol is not supported. + + `EOPNOTSUPP' + The specified protocol does not support the creation of + socket pairs. + + File: libc.info, Node: Connections, Next: Datagrams, Prev: Open/Close Sockets, Up: Sockets Using Sockets with Connections @@ -1191,139 +1331,4 @@ protocol interface. * Socket Option Functions:: The basic functions for setting and getting socket options. * Socket-Level Options:: Details of the options at the socket level. - - -File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options - -Socket Option Functions ------------------------ - - Here are the functions for examining and modifying socket options. -They are declared in `sys/socket.h'. - - - Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void - *OPTVAL, socklen_t *OPTLEN-PTR) - The `getsockopt' function gets information about the value of - option OPTNAME at level LEVEL for socket SOCKET. - - The option value is stored in a buffer that OPTVAL points to. - Before the call, you should supply in `*OPTLEN-PTR' the size of - this buffer; on return, it contains the number of bytes of - information actually stored in the buffer. - - Most options interpret the OPTVAL buffer as a single `int' value. - - The actual return value of `getsockopt' is `0' on success and `-1' - on failure. The following `errno' error conditions are defined: - - `EBADF' - The SOCKET argument is not a valid file descriptor. - - `ENOTSOCK' - The descriptor SOCKET is not a socket. - - `ENOPROTOOPT' - The OPTNAME doesn't make sense for the given LEVEL. - - - Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void - *OPTVAL, socklen_t OPTLEN) - This function is used to set the socket option OPTNAME at level - LEVEL for socket SOCKET. The value of the option is passed in the - buffer OPTVAL of size OPTLEN. - - The return value and error codes for `setsockopt' are the same as - for `getsockopt'. - - - -File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options - -Socket-Level Options --------------------- - - - Constant: int SOL_SOCKET - Use this constant as the LEVEL argument to `getsockopt' or - `setsockopt' to manipulate the socket-level options described in - this section. - -Here is a table of socket-level option names; all are defined in the -header file `sys/socket.h'. - -`SO_DEBUG' - This option toggles recording of debugging information in the - underlying protocol modules. The value has type `int'; a nonzero - value means "yes". - -`SO_REUSEADDR' - This option controls whether `bind' (*note Setting Address::) - should permit reuse of local addresses for this socket. If you - enable this option, you can actually have two sockets with the - same Internet port number; but the system won't allow you to use - the two identically-named sockets in a way that would confuse the - Internet. The reason for this option is that some higher-level - Internet protocols, including FTP, require you to keep reusing the - same port number. - - The value has type `int'; a nonzero value means "yes". - -`SO_KEEPALIVE' - This option controls whether the underlying protocol should - periodically transmit messages on a connected socket. If the peer - fails to respond to these messages, the connection is considered - broken. The value has type `int'; a nonzero value means "yes". - -`SO_DONTROUTE' - This option controls whether outgoing messages bypass the normal - message routing facilities. If set, messages are sent directly to - the network interface instead. The value has type `int'; a nonzero - value means "yes". - -`SO_LINGER' - This option specifies what should happen when the socket of a type - that promises reliable delivery still has untransmitted messages - when it is closed; see *Note Closing a Socket::. The value has - type `struct linger'. - - - Data Type: struct linger - This structure type has the following members: - - `int l_onoff' - This field is interpreted as a boolean. If nonzero, - `close' blocks until the data are transmitted or the - timeout period has expired. - - `int l_linger' - This specifies the timeout period, in seconds. - -`SO_BROADCAST' - This option controls whether datagrams may be broadcast from the - socket. The value has type `int'; a nonzero value means "yes". - -`SO_OOBINLINE' - If this option is set, out-of-band data received on the socket is - placed in the normal input queue. This permits it to be read using - `read' or `recv' without specifying the `MSG_OOB' flag. *Note - Out-of-Band Data::. The value has type `int'; a nonzero value - means "yes". - -`SO_SNDBUF' - This option gets or sets the size of the output buffer. The value - is a `size_t', which is the size in bytes. - -`SO_RCVBUF' - This option gets or sets the size of the input buffer. The value - is a `size_t', which is the size in bytes. - -`SO_STYLE' -`SO_TYPE' - This option can be used with `getsockopt' only. It is used to get - the socket's communication style. `SO_TYPE' is the historical - name, and `SO_STYLE' is the preferred name in GNU. The value has - type `int' and its value designates a communication style; see - *Note Communication Styles::. - -`SO_ERROR' - This option can be used with `getsockopt' only. It is used to - reset the error status of the socket. The value is an `int', - which represents the previous error status. diff -durpNa glibc-2.2.2/manual/libc.info-28 glibc-2.2.3/manual/libc.info-28 --- glibc-2.2.2/manual/libc.info-28 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-28 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,141 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options + +Socket Option Functions +----------------------- + + Here are the functions for examining and modifying socket options. +They are declared in `sys/socket.h'. + + - Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void + *OPTVAL, socklen_t *OPTLEN-PTR) + The `getsockopt' function gets information about the value of + option OPTNAME at level LEVEL for socket SOCKET. + + The option value is stored in a buffer that OPTVAL points to. + Before the call, you should supply in `*OPTLEN-PTR' the size of + this buffer; on return, it contains the number of bytes of + information actually stored in the buffer. + + Most options interpret the OPTVAL buffer as a single `int' value. + + The actual return value of `getsockopt' is `0' on success and `-1' + on failure. The following `errno' error conditions are defined: + + `EBADF' + The SOCKET argument is not a valid file descriptor. + + `ENOTSOCK' + The descriptor SOCKET is not a socket. + + `ENOPROTOOPT' + The OPTNAME doesn't make sense for the given LEVEL. + + - Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void + *OPTVAL, socklen_t OPTLEN) + This function is used to set the socket option OPTNAME at level + LEVEL for socket SOCKET. The value of the option is passed in the + buffer OPTVAL of size OPTLEN. + + The return value and error codes for `setsockopt' are the same as + for `getsockopt'. + + + +File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options + +Socket-Level Options +-------------------- + + - Constant: int SOL_SOCKET + Use this constant as the LEVEL argument to `getsockopt' or + `setsockopt' to manipulate the socket-level options described in + this section. + +Here is a table of socket-level option names; all are defined in the +header file `sys/socket.h'. + +`SO_DEBUG' + This option toggles recording of debugging information in the + underlying protocol modules. The value has type `int'; a nonzero + value means "yes". + +`SO_REUSEADDR' + This option controls whether `bind' (*note Setting Address::) + should permit reuse of local addresses for this socket. If you + enable this option, you can actually have two sockets with the + same Internet port number; but the system won't allow you to use + the two identically-named sockets in a way that would confuse the + Internet. The reason for this option is that some higher-level + Internet protocols, including FTP, require you to keep reusing the + same port number. + + The value has type `int'; a nonzero value means "yes". + +`SO_KEEPALIVE' + This option controls whether the underlying protocol should + periodically transmit messages on a connected socket. If the peer + fails to respond to these messages, the connection is considered + broken. The value has type `int'; a nonzero value means "yes". + +`SO_DONTROUTE' + This option controls whether outgoing messages bypass the normal + message routing facilities. If set, messages are sent directly to + the network interface instead. The value has type `int'; a nonzero + value means "yes". + +`SO_LINGER' + This option specifies what should happen when the socket of a type + that promises reliable delivery still has untransmitted messages + when it is closed; see *Note Closing a Socket::. The value has + type `struct linger'. + + - Data Type: struct linger + This structure type has the following members: + + `int l_onoff' + This field is interpreted as a boolean. If nonzero, + `close' blocks until the data are transmitted or the + timeout period has expired. + + `int l_linger' + This specifies the timeout period, in seconds. + +`SO_BROADCAST' + This option controls whether datagrams may be broadcast from the + socket. The value has type `int'; a nonzero value means "yes". + +`SO_OOBINLINE' + If this option is set, out-of-band data received on the socket is + placed in the normal input queue. This permits it to be read using + `read' or `recv' without specifying the `MSG_OOB' flag. *Note + Out-of-Band Data::. The value has type `int'; a nonzero value + means "yes". + +`SO_SNDBUF' + This option gets or sets the size of the output buffer. The value + is a `size_t', which is the size in bytes. + +`SO_RCVBUF' + This option gets or sets the size of the input buffer. The value + is a `size_t', which is the size in bytes. + +`SO_STYLE' +`SO_TYPE' + This option can be used with `getsockopt' only. It is used to get + the socket's communication style. `SO_TYPE' is the historical + name, and `SO_STYLE' is the preferred name in GNU. The value has + type `int' and its value designates a communication style; see + *Note Communication Styles::. + +`SO_ERROR' + This option can be used with `getsockopt' only. It is used to + reset the error status of the socket. The value is an `int', + which represents the previous error status. + + File: libc.info, Node: Networks Database, Prev: Socket Options, Up: Sockets Networks Database @@ -1034,181 +1169,4 @@ system you are using supports `_POSIX_VD suspended output. * Other Special:: Other special characters for BSD systems: they can discard output, and print status. - - -File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters - -Characters for Input Editing -............................ - - These special characters are active only in canonical input mode. -*Note Canonical or Not::. - - - Macro: int VEOF - This is the subscript for the EOF character in the special control - character array. `TERMIOS.c_cc[VEOF]' holds the character itself. - - The EOF character is recognized only in canonical input mode. It - acts as a line terminator in the same way as a newline character, - but if the EOF character is typed at the beginning of a line it - causes `read' to return a byte count of zero, indicating - end-of-file. The EOF character itself is discarded. - - Usually, the EOF character is `C-d'. - - - Macro: int VEOL - This is the subscript for the EOL character in the special control - character array. `TERMIOS.c_cc[VEOL]' holds the character itself. - - The EOL character is recognized only in canonical input mode. It - acts as a line terminator, just like a newline character. The EOL - character is not discarded; it is read as the last character in - the input line. - - You don't need to use the EOL character to make end a line. - Just set the ICRNL flag. In fact, this is the default state of - affairs. - - - Macro: int VEOL2 - This is the subscript for the EOL2 character in the special control - character array. `TERMIOS.c_cc[VEOL2]' holds the character itself. - - The EOL2 character works just like the EOL character (see above), - but it can be a different character. Thus, you can specify two - characters to terminate an input line, by setting EOL to one of - them and EOL2 to the other. - - The EOL2 character is a BSD extension; it exists only on BSD - systems and the GNU system. - - - Macro: int VERASE - This is the subscript for the ERASE character in the special - control character array. `TERMIOS.c_cc[VERASE]' holds the - character itself. - - The ERASE character is recognized only in canonical input mode. - When the user types the erase character, the previous character - typed is discarded. (If the terminal generates multibyte - character sequences, this may cause more than one byte of input to - be discarded.) This cannot be used to erase past the beginning of - the current line of text. The ERASE character itself is discarded. - - Usually, the ERASE character is . - - - Macro: int VWERASE - This is the subscript for the WERASE character in the special - control character array. `TERMIOS.c_cc[VWERASE]' holds the - character itself. - - The WERASE character is recognized only in canonical mode. It - erases an entire word of prior input, and any whitespace after it; - whitespace characters before the word are not erased. - - The definition of a "word" depends on the setting of the - `ALTWERASE' mode; *note Local Modes::. - - If the `ALTWERASE' mode is not set, a word is defined as a sequence - of any characters except space or tab. - - If the `ALTWERASE' mode is set, a word is defined as a sequence of - characters containing only letters, numbers, and underscores, - optionally followed by one character that is not a letter, number, - or underscore. - - The WERASE character is usually `C-w'. - - This is a BSD extension. - - - Macro: int VKILL - This is the subscript for the KILL character in the special control - character array. `TERMIOS.c_cc[VKILL]' holds the character itself. - - The KILL character is recognized only in canonical input mode. - When the user types the kill character, the entire contents of the - current line of input are discarded. The kill character itself is - discarded too. - - The KILL character is usually `C-u'. - - - Macro: int VREPRINT - This is the subscript for the REPRINT character in the special - control character array. `TERMIOS.c_cc[VREPRINT]' holds the - character itself. - - The REPRINT character is recognized only in canonical mode. It - reprints the current input line. If some asynchronous output has - come while you are typing, this lets you see the line you are - typing clearly again. - - The REPRINT character is usually `C-r'. - - This is a BSD extension. - - -File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters - -Characters that Cause Signals -............................. - - These special characters may be active in either canonical or -noncanonical input mode, but only when the `ISIG' flag is set (*note -Local Modes::). - - - Macro: int VINTR - This is the subscript for the INTR character in the special control - character array. `TERMIOS.c_cc[VINTR]' holds the character itself. - - The INTR (interrupt) character raises a `SIGINT' signal for all - processes in the foreground job associated with the terminal. The - INTR character itself is then discarded. *Note Signal Handling::, - for more information about signals. - - Typically, the INTR character is `C-c'. - - - Macro: int VQUIT - This is the subscript for the QUIT character in the special control - character array. `TERMIOS.c_cc[VQUIT]' holds the character itself. - - The QUIT character raises a `SIGQUIT' signal for all processes in - the foreground job associated with the terminal. The QUIT - character itself is then discarded. *Note Signal Handling::, for - more information about signals. - - Typically, the QUIT character is `C-\'. - - - Macro: int VSUSP - This is the subscript for the SUSP character in the special control - character array. `TERMIOS.c_cc[VSUSP]' holds the character itself. - - The SUSP (suspend) character is recognized only if the - implementation supports job control (*note Job Control::). It - causes a `SIGTSTP' signal to be sent to all processes in the - foreground job associated with the terminal. The SUSP character - itself is then discarded. *Note Signal Handling::, for more - information about signals. - - Typically, the SUSP character is `C-z'. - - Few applications disable the normal interpretation of the SUSP -character. If your program does this, it should provide some other -mechanism for the user to stop the job. When the user invokes this -mechanism, the program should send a `SIGTSTP' signal to the process -group of the process, not just to the process itself. *Note Signaling -Another Process::. - - - Macro: int VDSUSP - This is the subscript for the DSUSP character in the special - control character array. `TERMIOS.c_cc[VDSUSP]' holds the - character itself. - - The DSUSP (suspend) character is recognized only if the - implementation supports job control (*note Job Control::). It - sends a `SIGTSTP' signal, like the SUSP character, but not right - away--only when the program tries to read it as input. Not all - systems with job control support DSUSP; only BSD-compatible - systems (including the GNU system). - - *Note Signal Handling::, for more information about signals. - - Typically, the DSUSP character is `C-y'. diff -durpNa glibc-2.2.2/manual/libc.info-29 glibc-2.2.3/manual/libc.info-29 --- glibc-2.2.2/manual/libc.info-29 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-29 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,183 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters + +Characters for Input Editing +............................ + + These special characters are active only in canonical input mode. +*Note Canonical or Not::. + + - Macro: int VEOF + This is the subscript for the EOF character in the special control + character array. `TERMIOS.c_cc[VEOF]' holds the character itself. + + The EOF character is recognized only in canonical input mode. It + acts as a line terminator in the same way as a newline character, + but if the EOF character is typed at the beginning of a line it + causes `read' to return a byte count of zero, indicating + end-of-file. The EOF character itself is discarded. + + Usually, the EOF character is `C-d'. + + - Macro: int VEOL + This is the subscript for the EOL character in the special control + character array. `TERMIOS.c_cc[VEOL]' holds the character itself. + + The EOL character is recognized only in canonical input mode. It + acts as a line terminator, just like a newline character. The EOL + character is not discarded; it is read as the last character in + the input line. + + You don't need to use the EOL character to make end a line. + Just set the ICRNL flag. In fact, this is the default state of + affairs. + + - Macro: int VEOL2 + This is the subscript for the EOL2 character in the special control + character array. `TERMIOS.c_cc[VEOL2]' holds the character itself. + + The EOL2 character works just like the EOL character (see above), + but it can be a different character. Thus, you can specify two + characters to terminate an input line, by setting EOL to one of + them and EOL2 to the other. + + The EOL2 character is a BSD extension; it exists only on BSD + systems and the GNU system. + + - Macro: int VERASE + This is the subscript for the ERASE character in the special + control character array. `TERMIOS.c_cc[VERASE]' holds the + character itself. + + The ERASE character is recognized only in canonical input mode. + When the user types the erase character, the previous character + typed is discarded. (If the terminal generates multibyte + character sequences, this may cause more than one byte of input to + be discarded.) This cannot be used to erase past the beginning of + the current line of text. The ERASE character itself is discarded. + + Usually, the ERASE character is . + + - Macro: int VWERASE + This is the subscript for the WERASE character in the special + control character array. `TERMIOS.c_cc[VWERASE]' holds the + character itself. + + The WERASE character is recognized only in canonical mode. It + erases an entire word of prior input, and any whitespace after it; + whitespace characters before the word are not erased. + + The definition of a "word" depends on the setting of the + `ALTWERASE' mode; *note Local Modes::. + + If the `ALTWERASE' mode is not set, a word is defined as a sequence + of any characters except space or tab. + + If the `ALTWERASE' mode is set, a word is defined as a sequence of + characters containing only letters, numbers, and underscores, + optionally followed by one character that is not a letter, number, + or underscore. + + The WERASE character is usually `C-w'. + + This is a BSD extension. + + - Macro: int VKILL + This is the subscript for the KILL character in the special control + character array. `TERMIOS.c_cc[VKILL]' holds the character itself. + + The KILL character is recognized only in canonical input mode. + When the user types the kill character, the entire contents of the + current line of input are discarded. The kill character itself is + discarded too. + + The KILL character is usually `C-u'. + + - Macro: int VREPRINT + This is the subscript for the REPRINT character in the special + control character array. `TERMIOS.c_cc[VREPRINT]' holds the + character itself. + + The REPRINT character is recognized only in canonical mode. It + reprints the current input line. If some asynchronous output has + come while you are typing, this lets you see the line you are + typing clearly again. + + The REPRINT character is usually `C-r'. + + This is a BSD extension. + + +File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters + +Characters that Cause Signals +............................. + + These special characters may be active in either canonical or +noncanonical input mode, but only when the `ISIG' flag is set (*note +Local Modes::). + + - Macro: int VINTR + This is the subscript for the INTR character in the special control + character array. `TERMIOS.c_cc[VINTR]' holds the character itself. + + The INTR (interrupt) character raises a `SIGINT' signal for all + processes in the foreground job associated with the terminal. The + INTR character itself is then discarded. *Note Signal Handling::, + for more information about signals. + + Typically, the INTR character is `C-c'. + + - Macro: int VQUIT + This is the subscript for the QUIT character in the special control + character array. `TERMIOS.c_cc[VQUIT]' holds the character itself. + + The QUIT character raises a `SIGQUIT' signal for all processes in + the foreground job associated with the terminal. The QUIT + character itself is then discarded. *Note Signal Handling::, for + more information about signals. + + Typically, the QUIT character is `C-\'. + + - Macro: int VSUSP + This is the subscript for the SUSP character in the special control + character array. `TERMIOS.c_cc[VSUSP]' holds the character itself. + + The SUSP (suspend) character is recognized only if the + implementation supports job control (*note Job Control::). It + causes a `SIGTSTP' signal to be sent to all processes in the + foreground job associated with the terminal. The SUSP character + itself is then discarded. *Note Signal Handling::, for more + information about signals. + + Typically, the SUSP character is `C-z'. + + Few applications disable the normal interpretation of the SUSP +character. If your program does this, it should provide some other +mechanism for the user to stop the job. When the user invokes this +mechanism, the program should send a `SIGTSTP' signal to the process +group of the process, not just to the process itself. *Note Signaling +Another Process::. + + - Macro: int VDSUSP + This is the subscript for the DSUSP character in the special + control character array. `TERMIOS.c_cc[VDSUSP]' holds the + character itself. + + The DSUSP (suspend) character is recognized only if the + implementation supports job control (*note Job Control::). It + sends a `SIGTSTP' signal, like the SUSP character, but not right + away--only when the program tries to read it as input. Not all + systems with job control support DSUSP; only BSD-compatible + systems (including the GNU system). + + *Note Signal Handling::, for more information about signals. + + Typically, the DSUSP character is `C-y'. + + File: libc.info, Node: Start/Stop Characters, Next: Other Special, Prev: Signal Characters, Up: Special Characters Special Characters for Flow Control @@ -1151,202 +1328,4 @@ messages get discarded without ever reac syslog (LOG_INFO, "A tree falls in a forest"); closelog (); - - -File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top - -Mathematics -*********** - - This chapter contains information about functions for performing -mathematical computations, such as trigonometric functions. Most of -these functions have prototypes declared in the header file `math.h'. -The complex-valued functions are defined in `complex.h'. - - All mathematical functions which take a floating-point argument have -three variants, one each for `double', `float', and `long double' -arguments. The `double' versions are mostly defined in ISO C89. The -`float' and `long double' versions are from the numeric extensions to C -included in ISO C99. - - Which of the three versions of a function should be used depends on -the situation. For most calculations, the `float' functions are the -fastest. On the other hand, the `long double' functions have the -highest precision. `double' is somewhere in between. It is usually -wise to pick the narrowest type that can accommodate your data. Not -all machines have a distinct `long double' type; it may be the same as -`double'. - -* Menu: - -* Mathematical Constants:: Precise numeric values for often-used - constants. -* Trig Functions:: Sine, cosine, tangent, and friends. -* Inverse Trig Functions:: Arcsine, arccosine, etc. -* Exponents and Logarithms:: Also pow and sqrt. -* Hyperbolic Functions:: sinh, cosh, tanh, etc. -* Special Functions:: Bessel, gamma, erf. -* Errors in Math Functions:: Known Maximum Errors in Math Functions. -* Pseudo-Random Numbers:: Functions for generating pseudo-random - numbers. -* FP Function Optimizations:: Fast code or small code. - - -File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics - -Predefined Mathematical Constants -================================= - - The header `math.h' defines several useful mathematical constants. -All values are defined as preprocessor macros starting with `M_'. The -values provided are: - -`M_E' - The base of natural logarithms. - -`M_LOG2E' - The logarithm to base `2' of `M_E'. - -`M_LOG10E' - The logarithm to base `10' of `M_E'. - -`M_LN2' - The natural logarithm of `2'. - -`M_LN10' - The natural logarithm of `10'. - -`M_PI' - Pi, the ratio of a circle's circumference to its diameter. - -`M_PI_2' - Pi divided by two. - -`M_PI_4' - Pi divided by four. - -`M_1_PI' - The reciprocal of pi (1/pi) - -`M_2_PI' - Two times the reciprocal of pi. - -`M_2_SQRTPI' - Two times the reciprocal of the square root of pi. - -`M_SQRT2' - The square root of two. - -`M_SQRT1_2' - The reciprocal of the square root of two (also the square root of - 1/2). - - These constants come from the Unix98 standard and were also -available in 4.4BSD; therefore they are only defined if `_BSD_SOURCE' or -`_XOPEN_SOURCE=500', or a more general feature select macro, is -defined. The default set of features includes these constants. *Note -Feature Test Macros::. - - All values are of type `double'. As an extension, the GNU C library -also defines these constants with type `long double'. The `long -double' macros have a lowercase `l' appended to their names: `M_El', -`M_PIl', and so forth. These are only available if `_GNU_SOURCE' is -defined. - - _Note:_ Some programs use a constant named `PI' which has the same -value as `M_PI'. This constant is not standard; it may have appeared -in some old AT&T headers, and is mentioned in Stroustrup's book on C++. -It infringes on the user's name space, so the GNU C library does not -define it. Fixing programs written to expect it is simple: replace -`PI' with `M_PI' throughout, or put `-DPI=M_PI' on the compiler command -line. - - -File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics - -Trigonometric Functions -======================= - - These are the familiar `sin', `cos', and `tan' functions. The -arguments to all of these functions are in units of radians; recall -that pi radians equals 180 degrees. - - The math library normally defines `M_PI' to a `double' approximation -of pi. If strict ISO and/or POSIX compliance are requested this -constant is not defined, but you can easily define it yourself: - - #define M_PI 3.14159265358979323846264338327 - -You can also compute the value of pi with the expression `acos (-1.0)'. - - - Function: double sin (double X) - - Function: float sinf (float X) - - Function: long double sinl (long double X) - These functions return the sine of X, where X is given in radians. - The return value is in the range `-1' to `1'. - - - Function: double cos (double X) - - Function: float cosf (float X) - - Function: long double cosl (long double X) - These functions return the cosine of X, where X is given in - radians. The return value is in the range `-1' to `1'. - - - Function: double tan (double X) - - Function: float tanf (float X) - - Function: long double tanl (long double X) - These functions return the tangent of X, where X is given in - radians. - - Mathematically, the tangent function has singularities at odd - multiples of pi/2. If the argument X is too close to one of these - singularities, `tan' will signal overflow. - - In many applications where `sin' and `cos' are used, the sine and -cosine of the same angle are needed at the same time. It is more -efficient to compute them simultaneously, so the library provides a -function to do that. - - - Function: void sincos (double X, double *SINX, double *COSX) - - Function: void sincosf (float X, float *SINX, float *COSX) - - Function: void sincosl (long double X, long double *SINX, long - double *COSX) - These functions return the sine of X in `*SINX' and the cosine of - X in `*COS', where X is given in radians. Both values, `*SINX' - and `*COSX', are in the range of `-1' to `1'. - - This function is a GNU extension. Portable programs should be - prepared to cope with its absence. - - ISO C99 defines variants of the trig functions which work on complex -numbers. The GNU C library provides these functions, but they are only -useful if your compiler supports the new complex types defined by the -standard. (As of this writing GCC supports complex numbers, but there -are bugs in the implementation.) - - - Function: complex double csin (complex double Z) - - Function: complex float csinf (complex float Z) - - Function: complex long double csinl (complex long double Z) - These functions return the complex sine of Z. The mathematical - definition of the complex sine is - - sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)). - - - Function: complex double ccos (complex double Z) - - Function: complex float ccosf (complex float Z) - - Function: complex long double ccosl (complex long double Z) - These functions return the complex cosine of Z. The mathematical - definition of the complex cosine is - - cos (z) = 1/2 * (exp (z*i) + exp (-z*i)) - - - Function: complex double ctan (complex double Z) - - Function: complex float ctanf (complex float Z) - - Function: complex long double ctanl (complex long double Z) - These functions return the complex tangent of Z. The mathematical - definition of the complex tangent is - - tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i)) - - The complex tangent has poles at pi/2 + 2n, where n is an integer. - `ctan' may signal overflow if Z is too close to a pole. diff -durpNa glibc-2.2.2/manual/libc.info-30 glibc-2.2.3/manual/libc.info-30 --- glibc-2.2.2/manual/libc.info-30 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-30 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,204 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top + +Mathematics +*********** + + This chapter contains information about functions for performing +mathematical computations, such as trigonometric functions. Most of +these functions have prototypes declared in the header file `math.h'. +The complex-valued functions are defined in `complex.h'. + + All mathematical functions which take a floating-point argument have +three variants, one each for `double', `float', and `long double' +arguments. The `double' versions are mostly defined in ISO C89. The +`float' and `long double' versions are from the numeric extensions to C +included in ISO C99. + + Which of the three versions of a function should be used depends on +the situation. For most calculations, the `float' functions are the +fastest. On the other hand, the `long double' functions have the +highest precision. `double' is somewhere in between. It is usually +wise to pick the narrowest type that can accommodate your data. Not +all machines have a distinct `long double' type; it may be the same as +`double'. + +* Menu: + +* Mathematical Constants:: Precise numeric values for often-used + constants. +* Trig Functions:: Sine, cosine, tangent, and friends. +* Inverse Trig Functions:: Arcsine, arccosine, etc. +* Exponents and Logarithms:: Also pow and sqrt. +* Hyperbolic Functions:: sinh, cosh, tanh, etc. +* Special Functions:: Bessel, gamma, erf. +* Errors in Math Functions:: Known Maximum Errors in Math Functions. +* Pseudo-Random Numbers:: Functions for generating pseudo-random + numbers. +* FP Function Optimizations:: Fast code or small code. + + +File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics + +Predefined Mathematical Constants +================================= + + The header `math.h' defines several useful mathematical constants. +All values are defined as preprocessor macros starting with `M_'. The +values provided are: + +`M_E' + The base of natural logarithms. + +`M_LOG2E' + The logarithm to base `2' of `M_E'. + +`M_LOG10E' + The logarithm to base `10' of `M_E'. + +`M_LN2' + The natural logarithm of `2'. + +`M_LN10' + The natural logarithm of `10'. + +`M_PI' + Pi, the ratio of a circle's circumference to its diameter. + +`M_PI_2' + Pi divided by two. + +`M_PI_4' + Pi divided by four. + +`M_1_PI' + The reciprocal of pi (1/pi) + +`M_2_PI' + Two times the reciprocal of pi. + +`M_2_SQRTPI' + Two times the reciprocal of the square root of pi. + +`M_SQRT2' + The square root of two. + +`M_SQRT1_2' + The reciprocal of the square root of two (also the square root of + 1/2). + + These constants come from the Unix98 standard and were also +available in 4.4BSD; therefore they are only defined if `_BSD_SOURCE' or +`_XOPEN_SOURCE=500', or a more general feature select macro, is +defined. The default set of features includes these constants. *Note +Feature Test Macros::. + + All values are of type `double'. As an extension, the GNU C library +also defines these constants with type `long double'. The `long +double' macros have a lowercase `l' appended to their names: `M_El', +`M_PIl', and so forth. These are only available if `_GNU_SOURCE' is +defined. + + _Note:_ Some programs use a constant named `PI' which has the same +value as `M_PI'. This constant is not standard; it may have appeared +in some old AT&T headers, and is mentioned in Stroustrup's book on C++. +It infringes on the user's name space, so the GNU C library does not +define it. Fixing programs written to expect it is simple: replace +`PI' with `M_PI' throughout, or put `-DPI=M_PI' on the compiler command +line. + + +File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics + +Trigonometric Functions +======================= + + These are the familiar `sin', `cos', and `tan' functions. The +arguments to all of these functions are in units of radians; recall +that pi radians equals 180 degrees. + + The math library normally defines `M_PI' to a `double' approximation +of pi. If strict ISO and/or POSIX compliance are requested this +constant is not defined, but you can easily define it yourself: + + #define M_PI 3.14159265358979323846264338327 + +You can also compute the value of pi with the expression `acos (-1.0)'. + + - Function: double sin (double X) + - Function: float sinf (float X) + - Function: long double sinl (long double X) + These functions return the sine of X, where X is given in radians. + The return value is in the range `-1' to `1'. + + - Function: double cos (double X) + - Function: float cosf (float X) + - Function: long double cosl (long double X) + These functions return the cosine of X, where X is given in + radians. The return value is in the range `-1' to `1'. + + - Function: double tan (double X) + - Function: float tanf (float X) + - Function: long double tanl (long double X) + These functions return the tangent of X, where X is given in + radians. + + Mathematically, the tangent function has singularities at odd + multiples of pi/2. If the argument X is too close to one of these + singularities, `tan' will signal overflow. + + In many applications where `sin' and `cos' are used, the sine and +cosine of the same angle are needed at the same time. It is more +efficient to compute them simultaneously, so the library provides a +function to do that. + + - Function: void sincos (double X, double *SINX, double *COSX) + - Function: void sincosf (float X, float *SINX, float *COSX) + - Function: void sincosl (long double X, long double *SINX, long + double *COSX) + These functions return the sine of X in `*SINX' and the cosine of + X in `*COS', where X is given in radians. Both values, `*SINX' + and `*COSX', are in the range of `-1' to `1'. + + This function is a GNU extension. Portable programs should be + prepared to cope with its absence. + + ISO C99 defines variants of the trig functions which work on complex +numbers. The GNU C library provides these functions, but they are only +useful if your compiler supports the new complex types defined by the +standard. (As of this writing GCC supports complex numbers, but there +are bugs in the implementation.) + + - Function: complex double csin (complex double Z) + - Function: complex float csinf (complex float Z) + - Function: complex long double csinl (complex long double Z) + These functions return the complex sine of Z. The mathematical + definition of the complex sine is + + sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)). + + - Function: complex double ccos (complex double Z) + - Function: complex float ccosf (complex float Z) + - Function: complex long double ccosl (complex long double Z) + These functions return the complex cosine of Z. The mathematical + definition of the complex cosine is + + cos (z) = 1/2 * (exp (z*i) + exp (-z*i)) + + - Function: complex double ctan (complex double Z) + - Function: complex float ctanf (complex float Z) + - Function: complex long double ctanl (complex long double Z) + These functions return the complex tangent of Z. The mathematical + definition of the complex tangent is + + tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i)) + + The complex tangent has poles at pi/2 + 2n, where n is an integer. + `ctan' may signal overflow if Z is too close to a pole. + + File: libc.info, Node: Inverse Trig Functions, Next: Exponents and Logarithms, Prev: Trig Functions, Up: Mathematics Inverse Trigonometric Functions @@ -914,59 +1112,4 @@ badly designed and unsuitable for seriou reentrant GNU extensions to the SVID random number generator. The POSIX.1 interface should only be used when the GNU extensions are not available. - - -File: libc.info, Node: BSD Random, Next: SVID Random, Prev: ISO Random, Up: Pseudo-Random Numbers - -BSD Random Number Functions ---------------------------- - - This section describes a set of random number generation functions -that are derived from BSD. There is no advantage to using these -functions with the GNU C library; we support them for BSD compatibility -only. - - The prototypes for these functions are in `stdlib.h'. - - - Function: long int random (void) - This function returns the next pseudo-random number in the - sequence. The value returned ranges from `0' to `RAND_MAX'. - - *Note:* Temporarily this function was defined to return a - `int32_t' value to indicate that the return value always contains - 32 bits even if `long int' is wider. The standard demands it - differently. Users must always be aware of the 32-bit limitation, - though. - - - Function: void srandom (unsigned int SEED) - The `srandom' function sets the state of the random number - generator based on the integer SEED. If you supply a SEED value - of `1', this will cause `random' to reproduce the default set of - random numbers. - - To produce a different set of pseudo-random numbers each time your - program runs, do `srandom (time (0))'. - - - Function: void * initstate (unsigned int SEED, void *STATE, size_t - SIZE) - The `initstate' function is used to initialize the random number - generator state. The argument STATE is an array of SIZE bytes, - used to hold the state information. It is initialized based on - SEED. The size must be between 8 and 256 bytes, and should be a - power of two. The bigger the STATE array, the better. - - The return value is the previous value of the state information - array. You can use this value later as an argument to `setstate' - to restore that state. - - - Function: void * setstate (void *STATE) - The `setstate' function restores the random number state - information STATE. The argument must have been the result of a - previous call to INITSTATE or SETSTATE. - - The return value is the previous value of the state information - array. You can use this value later as an argument to `setstate' - to restore that state. - - If the function fails the return value is `NULL'. diff -durpNa glibc-2.2.2/manual/libc.info-31 glibc-2.2.3/manual/libc.info-31 --- glibc-2.2.2/manual/libc.info-31 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-31 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,107 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: BSD Random, Next: SVID Random, Prev: ISO Random, Up: Pseudo-Random Numbers + +BSD Random Number Functions +--------------------------- + + This section describes a set of random number generation functions +that are derived from BSD. There is no advantage to using these +functions with the GNU C library; we support them for BSD compatibility +only. + + The prototypes for these functions are in `stdlib.h'. + + - Function: long int random (void) + This function returns the next pseudo-random number in the + sequence. The value returned ranges from `0' to `RAND_MAX'. + + *Note:* Temporarily this function was defined to return a + `int32_t' value to indicate that the return value always contains + 32 bits even if `long int' is wider. The standard demands it + differently. Users must always be aware of the 32-bit limitation, + though. + + - Function: void srandom (unsigned int SEED) + The `srandom' function sets the state of the random number + generator based on the integer SEED. If you supply a SEED value + of `1', this will cause `random' to reproduce the default set of + random numbers. + + To produce a different set of pseudo-random numbers each time your + program runs, do `srandom (time (0))'. + + - Function: void * initstate (unsigned int SEED, void *STATE, size_t + SIZE) + The `initstate' function is used to initialize the random number + generator state. The argument STATE is an array of SIZE bytes, + used to hold the state information. It is initialized based on + SEED. The size must be between 8 and 256 bytes, and should be a + power of two. The bigger the STATE array, the better. + + The return value is the previous value of the state information + array. You can use this value later as an argument to `setstate' + to restore that state. + + - Function: void * setstate (void *STATE) + The `setstate' function restores the random number state + information STATE. The argument must have been the result of a + previous call to INITSTATE or SETSTATE. + + The return value is the previous value of the state information + array. You can use this value later as an argument to `setstate' + to restore that state. + + If the function fails the return value is `NULL'. + + The four functions described so far in this section all work on a +state which is shared by all threads. The state is not directly +accessible to the user and can only be modified by these functions. +This makes it hard to deal with situations where each thread should +have its own pseudo-random number generator. + + The GNU C library contains four additional functions which contain +the state as an explicit parameter and therefore make it possible to +handle thread-local PRNGs. Beside this there are no difference. In +fact, the four functions already discussed are implemented internally +using the following interfaces. + + The `stdlib.h' header contains a definition of the following type: + + - Data Type: struct random_data + Objects of type `struct random_data' contain the information + necessary to represent the state of the PRNG. Although a complete + definition of the type is present the type should be treated as + opaque. + + The functions modifying the state follow exactly the already +described functions. + + - Function: int random_r (struct random_data *restrict BUF, int32_t + *restrict RESULT) + The `random_r' function behaves exactly like the `random' function + except that it uses and modifies the state in the object pointed + to by the first parameter instead of the global state. + + - Function: int srandom_r (unsigned int SEED, struct random_data *BUF) + The `srandom_r' function behaves exactly like the `srandom' + function except that it uses and modifies the state in the object + pointed to by the second parameter instead of the global state. + + - Function: int initstate_r (unsigned int SEED, char *restrict + STATEBUF, size_t STATELEN, struct random_data *restrict BUF) + The `initstate_r' function behaves exactly like the `initstate' + function except that it uses and modifies the state in the object + pointed to by the fourth parameter instead of the global state. + + - Function: int setstate_r (char *restrict STATEBUF, struct + random_data *restrict BUF) + The `setstate_r' function behaves exactly like the `setstate' + function except that it uses and modifies the state in the object + pointed to by the first parameter instead of the global state. + + File: libc.info, Node: SVID Random, Prev: BSD Random, Up: Pseudo-Random Numbers SVID Random Number Function @@ -61,6 +162,8 @@ generator works. By default they are but they can also be changed by the user. `m' is of course 2^48 since the state consists of a 48-bit array. + The prototypes for these functions are in `stdlib.h'. + - Function: double drand48 (void) This function returns a `double' value in the range of `0.0' to `1.0' (exclusive). The random bits are determined by the global @@ -438,42 +541,42 @@ certain size, the corresponding above ty If you don't need a specific storage size, but want the smallest data structure with _at least_ N bits, use one of these: - * int8_least_t + * int_least8_t - * int16_least_t + * int_least16_t - * int32_least_t + * int_least32_t - * int64_least_t + * int_least64_t - * uint8_least_t + * uint_least8_t - * uint16_least_t + * uint_least16_t - * uint32_least_t + * uint_least32_t - * uint64_least_t + * uint_least64_t If you don't need a specific storage size, but want the data structure that allows the fastest access while having at least N bits (and among data structures with the same access speed, the smallest one), use one of these: - * int8_fast_t + * int_fast8_t - * int16_fast_t + * int_fast16_t - * int32_fast_t + * int_fast32_t - * int64_fast_t + * int_fast64_t - * uint8_fast_t + * uint_fast8_t - * uint16_fast_t + * uint_fast16_t - * uint32_fast_t + * uint_fast32_t - * uint64_fast_t + * uint_fast64_t If you want an integer with the widest range possible on the platform on which it is being used, use one of the following. If you @@ -1092,91 +1195,4 @@ test for overflow on both old and new ha Mathematical functions return the appropriately typed version of `HUGE_VAL' or `-HUGE_VAL' when the result is too large to be represented. - - -File: libc.info, Node: Rounding, Next: Control Functions, Prev: Floating Point Errors, Up: Arithmetic - -Rounding Modes -============== - - Floating-point calculations are carried out internally with extra -precision, and then rounded to fit into the destination type. This -ensures that results are as precise as the input data. IEEE 754 -defines four possible rounding modes: - -Round to nearest. - This is the default mode. It should be used unless there is a - specific need for one of the others. In this mode results are - rounded to the nearest representable value. If the result is - midway between two representable values, the even representable is - chosen. "Even" here means the lowest-order bit is zero. This - rounding mode prevents statistical bias and guarantees numeric - stability: round-off errors in a lengthy calculation will remain - smaller than half of `FLT_EPSILON'. - -Round toward plus Infinity. - All results are rounded to the smallest representable value which - is greater than the result. - -Round toward minus Infinity. - All results are rounded to the largest representable value which - is less than the result. - -Round toward zero. - All results are rounded to the largest representable value whose - magnitude is less than that of the result. In other words, if the - result is negative it is rounded up; if it is positive, it is - rounded down. - -`fenv.h' defines constants which you can use to refer to the various -rounding modes. Each one will be defined if and only if the FPU -supports the corresponding rounding mode. - -`FE_TONEAREST' - Round to nearest. - -`FE_UPWARD' - Round toward +oo. - -`FE_DOWNWARD' - Round toward -oo. - -`FE_TOWARDZERO' - Round toward zero. - - Underflow is an unusual case. Normally, IEEE 754 floating point -numbers are always normalized (*note Floating Point Concepts::). -Numbers smaller than 2^r (where r is the minimum exponent, -`FLT_MIN_RADIX-1' for FLOAT) cannot be represented as normalized -numbers. Rounding all such numbers to zero or 2^r would cause some -algorithms to fail at 0. Therefore, they are left in denormalized -form. That produces loss of precision, since some bits of the mantissa -are stolen to indicate the decimal point. - - If a result is too small to be represented as a denormalized number, -it is rounded to zero. However, the sign of the result is preserved; if -the calculation was negative, the result is "negative zero". Negative -zero can also result from some operations on infinity, such as 4/-oo. -Negative zero behaves identically to zero except when the `copysign' or -`signbit' functions are used to check the sign bit directly. - - At any time one of the above four rounding modes is selected. You -can find out which one with this function: - - - Function: int fegetround (void) - Returns the currently selected rounding mode, represented by one - of the values of the defined rounding mode macros. - -To change the rounding mode, use this function: - - - Function: int fesetround (int ROUND) - Changes the currently selected rounding mode to ROUND. If ROUND - does not correspond to one of the supported rounding modes nothing - is changed. `fesetround' returns zero if it changed the rounding - mode, a nonzero value if the mode is not supported. - - You should avoid changing the rounding mode if possible. It can be -an expensive operation; also, some hardware requires you to compile your -program differently for it to work. The resulting code may run slower. -See your compiler documentation for details. diff -durpNa glibc-2.2.2/manual/libc.info-32 glibc-2.2.3/manual/libc.info-32 --- glibc-2.2.2/manual/libc.info-32 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-32 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,93 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Rounding, Next: Control Functions, Prev: Floating Point Errors, Up: Arithmetic + +Rounding Modes +============== + + Floating-point calculations are carried out internally with extra +precision, and then rounded to fit into the destination type. This +ensures that results are as precise as the input data. IEEE 754 +defines four possible rounding modes: + +Round to nearest. + This is the default mode. It should be used unless there is a + specific need for one of the others. In this mode results are + rounded to the nearest representable value. If the result is + midway between two representable values, the even representable is + chosen. "Even" here means the lowest-order bit is zero. This + rounding mode prevents statistical bias and guarantees numeric + stability: round-off errors in a lengthy calculation will remain + smaller than half of `FLT_EPSILON'. + +Round toward plus Infinity. + All results are rounded to the smallest representable value which + is greater than the result. + +Round toward minus Infinity. + All results are rounded to the largest representable value which + is less than the result. + +Round toward zero. + All results are rounded to the largest representable value whose + magnitude is less than that of the result. In other words, if the + result is negative it is rounded up; if it is positive, it is + rounded down. + +`fenv.h' defines constants which you can use to refer to the various +rounding modes. Each one will be defined if and only if the FPU +supports the corresponding rounding mode. + +`FE_TONEAREST' + Round to nearest. + +`FE_UPWARD' + Round toward +oo. + +`FE_DOWNWARD' + Round toward -oo. + +`FE_TOWARDZERO' + Round toward zero. + + Underflow is an unusual case. Normally, IEEE 754 floating point +numbers are always normalized (*note Floating Point Concepts::). +Numbers smaller than 2^r (where r is the minimum exponent, +`FLT_MIN_RADIX-1' for FLOAT) cannot be represented as normalized +numbers. Rounding all such numbers to zero or 2^r would cause some +algorithms to fail at 0. Therefore, they are left in denormalized +form. That produces loss of precision, since some bits of the mantissa +are stolen to indicate the decimal point. + + If a result is too small to be represented as a denormalized number, +it is rounded to zero. However, the sign of the result is preserved; if +the calculation was negative, the result is "negative zero". Negative +zero can also result from some operations on infinity, such as 4/-oo. +Negative zero behaves identically to zero except when the `copysign' or +`signbit' functions are used to check the sign bit directly. + + At any time one of the above four rounding modes is selected. You +can find out which one with this function: + + - Function: int fegetround (void) + Returns the currently selected rounding mode, represented by one + of the values of the defined rounding mode macros. + +To change the rounding mode, use this function: + + - Function: int fesetround (int ROUND) + Changes the currently selected rounding mode to ROUND. If ROUND + does not correspond to one of the supported rounding modes nothing + is changed. `fesetround' returns zero if it changed the rounding + mode, a nonzero value if the mode is not supported. + + You should avoid changing the rounding mode if possible. It can be +an expensive operation; also, some hardware requires you to compile your +program differently for it to work. The resulting code may run slower. +See your compiler documentation for details. + + File: libc.info, Node: Control Functions, Next: Arithmetic Functions, Prev: Rounding, Up: Arithmetic Floating-Point Control Functions @@ -999,117 +1086,4 @@ and returns the sum of them: return sum; } - - -File: libc.info, Node: Parsing of Floats, Prev: Parsing of Integers, Up: Parsing of Numbers - -Parsing of Floats ------------------ - - The `str' functions are declared in `stdlib.h' and those beginning -with `wcs' are declared in `wchar.h'. One might wonder about the use -of `restrict' in the prototypes of the functions in this section. It -is seemingly useless but the ISO C standard uses it (for the functions -defined there) so we have to do it as well. - - - Function: double strtod (const char *restrict STRING, char - **restrict TAILPTR) - The `strtod' ("string-to-double") function converts the initial - part of STRING to a floating-point number, which is returned as a - value of type `double'. - - This function attempts to decompose STRING as follows: - - * A (possibly empty) sequence of whitespace characters. Which - characters are whitespace is determined by the `isspace' - function (*note Classification of Characters::). These are - discarded. - - * An optional plus or minus sign (`+' or `-'). - - * A floating point number in decimal or hexadecimal format. The - decimal format is: - - A nonempty sequence of digits optionally containing a - decimal-point character--normally `.', but it depends on - the locale (*note General Numeric::). - - - An optional exponent part, consisting of a character `e' - or `E', an optional sign, and a sequence of digits. - - - The hexadecimal format is as follows: - - A 0x or 0X followed by a nonempty sequence of - hexadecimal digits optionally containing a decimal-point - character--normally `.', but it depends on the locale - (*note General Numeric::). - - - An optional binary-exponent part, consisting of a - character `p' or `P', an optional sign, and a sequence - of digits. - - - * Any remaining characters in the string. If TAILPTR is not a - null pointer, a pointer to this tail of the string is stored - in `*TAILPTR'. - - If the string is empty, contains only whitespace, or does not - contain an initial substring that has the expected syntax for a - floating-point number, no conversion is performed. In this case, - `strtod' returns a value of zero and the value returned in - `*TAILPTR' is the value of STRING. - - In a locale other than the standard `"C"' or `"POSIX"' locales, - this function may recognize additional locale-dependent syntax. - - If the string has valid syntax for a floating-point number but the - value is outside the range of a `double', `strtod' will signal - overflow or underflow as described in *Note Math Error Reporting::. - - `strtod' recognizes four special input strings. The strings - `"inf"' and `"infinity"' are converted to oo, or to the largest - representable value if the floating-point format doesn't support - infinities. You can prepend a `"+"' or `"-"' to specify the sign. - Case is ignored when scanning these strings. - - The strings `"nan"' and `"nan(CHARS...)"' are converted to NaN. - Again, case is ignored. If CHARS... are provided, they are used - in some unspecified fashion to select a particular representation - of NaN (there can be several). - - Since zero is a valid result as well as the value returned on - error, you should check for errors in the same way as for - `strtol', by examining ERRNO and TAILPTR. - - - Function: float strtof (const char *STRING, char **TAILPTR) - - Function: long double strtold (const char *STRING, char **TAILPTR) - These functions are analogous to `strtod', but return `float' and - `long double' values respectively. They report errors in the same - way as `strtod'. `strtof' can be substantially faster than - `strtod', but has less precision; conversely, `strtold' can be - much slower but has more precision (on systems where `long double' - is a separate type). - - These functions have been GNU extensions and are new to ISO C99. - - - Function: double wcstod (const wchar_t *restrict STRING, wchar_t - **restrict TAILPTR) - - Function: float wcstof (const wchar_t *STRING, wchar_t **TAILPTR) - - Function: long double wcstold (const wchar_t *STRING, wchar_t - **TAILPTR) - The `wcstod', `wcstof', and `wcstol' functions are equivalent in - nearly all aspect to the `strtod', `strtof', and `strtold' - functions but it handles wide character string. - - The `wcstod' function was introduced in Amendment 1 of ISO C90. - The `wcstof' and `wcstold' functions were introduced in ISO C99. - - - Function: double atof (const char *STRING) - This function is similar to the `strtod' function, except that it - need not detect overflow and underflow errors. The `atof' function - is provided mostly for compatibility with existing code; using - `strtod' is more robust. - - The GNU C library also provides `_l' versions of these functions, -which take an additional argument, the locale to use in conversion. -*Note Parsing of Integers::. diff -durpNa glibc-2.2.2/manual/libc.info-33 glibc-2.2.3/manual/libc.info-33 --- glibc-2.2.2/manual/libc.info-33 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-33 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,119 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Parsing of Floats, Prev: Parsing of Integers, Up: Parsing of Numbers + +Parsing of Floats +----------------- + + The `str' functions are declared in `stdlib.h' and those beginning +with `wcs' are declared in `wchar.h'. One might wonder about the use +of `restrict' in the prototypes of the functions in this section. It +is seemingly useless but the ISO C standard uses it (for the functions +defined there) so we have to do it as well. + + - Function: double strtod (const char *restrict STRING, char + **restrict TAILPTR) + The `strtod' ("string-to-double") function converts the initial + part of STRING to a floating-point number, which is returned as a + value of type `double'. + + This function attempts to decompose STRING as follows: + + * A (possibly empty) sequence of whitespace characters. Which + characters are whitespace is determined by the `isspace' + function (*note Classification of Characters::). These are + discarded. + + * An optional plus or minus sign (`+' or `-'). + + * A floating point number in decimal or hexadecimal format. The + decimal format is: + - A nonempty sequence of digits optionally containing a + decimal-point character--normally `.', but it depends on + the locale (*note General Numeric::). + + - An optional exponent part, consisting of a character `e' + or `E', an optional sign, and a sequence of digits. + + + The hexadecimal format is as follows: + - A 0x or 0X followed by a nonempty sequence of + hexadecimal digits optionally containing a decimal-point + character--normally `.', but it depends on the locale + (*note General Numeric::). + + - An optional binary-exponent part, consisting of a + character `p' or `P', an optional sign, and a sequence + of digits. + + + * Any remaining characters in the string. If TAILPTR is not a + null pointer, a pointer to this tail of the string is stored + in `*TAILPTR'. + + If the string is empty, contains only whitespace, or does not + contain an initial substring that has the expected syntax for a + floating-point number, no conversion is performed. In this case, + `strtod' returns a value of zero and the value returned in + `*TAILPTR' is the value of STRING. + + In a locale other than the standard `"C"' or `"POSIX"' locales, + this function may recognize additional locale-dependent syntax. + + If the string has valid syntax for a floating-point number but the + value is outside the range of a `double', `strtod' will signal + overflow or underflow as described in *Note Math Error Reporting::. + + `strtod' recognizes four special input strings. The strings + `"inf"' and `"infinity"' are converted to oo, or to the largest + representable value if the floating-point format doesn't support + infinities. You can prepend a `"+"' or `"-"' to specify the sign. + Case is ignored when scanning these strings. + + The strings `"nan"' and `"nan(CHARS...)"' are converted to NaN. + Again, case is ignored. If CHARS... are provided, they are used + in some unspecified fashion to select a particular representation + of NaN (there can be several). + + Since zero is a valid result as well as the value returned on + error, you should check for errors in the same way as for + `strtol', by examining ERRNO and TAILPTR. + + - Function: float strtof (const char *STRING, char **TAILPTR) + - Function: long double strtold (const char *STRING, char **TAILPTR) + These functions are analogous to `strtod', but return `float' and + `long double' values respectively. They report errors in the same + way as `strtod'. `strtof' can be substantially faster than + `strtod', but has less precision; conversely, `strtold' can be + much slower but has more precision (on systems where `long double' + is a separate type). + + These functions have been GNU extensions and are new to ISO C99. + + - Function: double wcstod (const wchar_t *restrict STRING, wchar_t + **restrict TAILPTR) + - Function: float wcstof (const wchar_t *STRING, wchar_t **TAILPTR) + - Function: long double wcstold (const wchar_t *STRING, wchar_t + **TAILPTR) + The `wcstod', `wcstof', and `wcstol' functions are equivalent in + nearly all aspect to the `strtod', `strtof', and `strtold' + functions but it handles wide character string. + + The `wcstod' function was introduced in Amendment 1 of ISO C90. + The `wcstof' and `wcstold' functions were introduced in ISO C99. + + - Function: double atof (const char *STRING) + This function is similar to the `strtod' function, except that it + need not detect overflow and underflow errors. The `atof' function + is provided mostly for compatibility with existing code; using + `strtod' is more robust. + + The GNU C library also provides `_l' versions of these functions, +which take an additional argument, the locale to use in conversion. +*Note Parsing of Integers::. + + File: libc.info, Node: System V Number Conversion, Prev: Parsing of Numbers, Up: Arithmetic Old-fashioned System V number-to-string functions diff -durpNa glibc-2.2.2/manual/libc.info-36 glibc-2.2.3/manual/libc.info-36 --- glibc-2.2.2/manual/libc.info-36 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-36 Wed Apr 25 14:55:22 2001 @@ -344,8 +344,9 @@ describes how you can do such "non-local * Menu: * Intro: Non-Local Intro. When and how to use these facilities. -* Details: Non-Local Details. Functions for non-local exits. +* Details: Non-Local Details. Functions for non-local exits. * Non-Local Exits and Signals:: Portability issues. +* System V contexts:: Complete context control a la System V.  File: libc.info, Node: Non-Local Intro, Next: Non-Local Details, Up: Non-Local Exits @@ -514,7 +515,7 @@ call to `setjmp' are indeterminate, unle `volatile'.  -File: libc.info, Node: Non-Local Exits and Signals, Prev: Non-Local Details, Up: Non-Local Exits +File: libc.info, Node: Non-Local Exits and Signals, Next: System V contexts, Prev: Non-Local Details, Up: Non-Local Exits Non-Local Exits and Signals =========================== @@ -549,6 +550,319 @@ behavior. blocked signals.  +File: libc.info, Node: System V contexts, Prev: Non-Local Exits and Signals, Up: Non-Local Exits + +Complete Context Control +======================== + + The Unix standard one more set of function to control the execution +path and these functions are more powerful than those discussed in this +chapter so far. These function were part of the original System V API +and by this route were added to the Unix API. Beside on branded Unix +implementations these interfaces are not widely available. Not all +platforms and/or architectures the GNU C Library is available on provide +this interface. Use `configure' to detect the availability. + + Similar to the `jmp_buf' and `sigjmp_buf' types used for the +variables to contain the state of the `longjmp' functions the +interfaces of interest here have an appropriate type as well. Objects +of this type are normally much larger since more information is +contained. The type is also used in a few more places as we will see. +The types and functions described in this section are all defined and +declared respectively in the `ucontext.h' header file. + + - Data Type: ucontext_t + The `ucontext_t' type is defined as a structure with as least the + following elements: + + `ucontext_t *uc_link' + This is a pointer to the next context structure which is used + if the context described in the current structure returns. + + `sigset_t uc_sigmask' + Set of signals which are blocked when this context is used. + + `stack_t uc_stack' + Stack used for this context. The value need not be (and + normally is not) the stack pointer. *Note Signal Stack::. + + `mcontext_t uc_mcontext' + This element contains the actual state of the process. The + `mcontext_t' type is also defined in this header but the + definition should be treated as opaque. Any use of knowledge + of the type makes applications less portable. + + + Objects of this type have to be created by the user. The +initialization and modification happens through one of the following +functions: + + - Function: int getcontext (ucontext_t *UCP) + The `getcontext' function initializes the variable pointed to by + UCP with the context of the calling thread. The context contains + the content of the registers, the signal mask, and the current + stack. Executing the contents would start at the point where the + `getcontext' call just returned. + + The function returns `0' if succesful. Otherwise it returns `-1' + and sets ERRNO accordingly. + + The `getcontext' function is similar to `setjmp' but it does not +provide an indication of whether the function returns for the first +time or whether the initialized context was used and the execution is +resumed at just that point. If this is necessary the user has to take +determine this herself. This must be done carefully since the context +contains registers which might contain register variables. This is a +good situation to define variables with `volatile'. + + Once the context variable is initialized it can be used as is or it +can be modified. The latter is normally done to implement co-routines +or similar constructs. The `makecontext' function is what has to be +used to do that. + + - Function: void makecontext (ucontext_t *UCP, void (*FUNC) (void), + int ARGC, ...) + The UCP parameter passed to the `makecontext' shall be initialized + by a call to `getcontext'. The context will be modified to in a + way so that if the context is resumed it will start by calling the + function `func' which gets ARGC integer arguments passed. The + integer arguments which are to be passed should follow the ARGC + parameter in the call to `makecontext'. + + Before the call to this function the `uc_stack' and `uc_link' + element of the UCP structure should be initialized. The + `uc_stack' element describes the stack which is used for this + context. No two contexts which are used at the same time should + use the same memory region for a stack. + + The `uc_link' element of the object pointed to by UCP should be a + pointer to the context to be executed when the function FUNC + returns or it should be a null pointer. See `setcontext' for more + information about the exact use. + + While allocating the memory for the stack one has to be careful. +Most modern processors keep track of whether a certain memory region is +allowed to contain code which is executed or not. Data segments and +heap memory is normally not tagged to allow this. The result is that +programs would fail. Examples for such code include the calling +sequences the GNU C compiler generates for calls to nested functions. +Safe ways to allocate stacks correctly include using memory on the +original threads stack or explicitly allocate memory tagged for +execution using (*note Memory-mapped I/O::). + + *Compatibility note*: The current Unix standard is very imprecise +about the way the stack is allocated. All implementations seem to agree +that the `uc_stack' element must be used but the values stored in the +elements of the `stack_t' value are unclear. The GNU C library and +most other Unix implementations require the `ss_sp' value of the +`uc_stack' element to point to the base of the memory region allocated +for the stack and the size of the memory region is stored in `ss_size'. +There are implements out there which require `ss_sp' to be set to the +value the stack pointer will have (which can depending on the direction +the stack grows be different). This difference makes the `makecontext' +function hard to use and it requires detection of the platform at +compile time. + + - Function: int setcontext (const ucontext_t *UCP) + The `setcontext' function restores the context described by UCP. + The context is not modified and can be reused as often as wanted. + + If the context was created by `getcontext' execution resumes with + the registers filled with the same values and the same stack as if + the `getcontext' call just returned. + + If the context was modified with a call to `makecontext' execution + continues with the function passed to `makecontext' which gets the + specified parameters passed. If this function returns execution is + resumed in the context which was referenced by the `uc_link' + element of the context structure passed to `makecontext' at the + time of the call. If `uc_link' was a null pointer the application + terminates in this case. + + Since the context contains information about the stack no two + threads should use the same context at the same time. The result + in most cases would be disastrous. + + The `setcontext' function does not return unless an error occurred + in which case it returns `-1'. + + The `setcontext' function simply replaces the current context with +the one described by the UCP parameter. This is often useful but there +are situations where the current context has to be preserved. + + - Function: int swapcontext (ucontext_t *restrict OUCP, const + ucontext_t *restrict UCP) + The `swapcontext' function is similar to `setcontext' but instead + of just replacing the current context the latter is first saved in + the object pointed to by OUCP as if this was a call to + `getcontext'. The saved context would resume after the call to + `swapcontext'. + + Once the current context is saved the context described in UCP is + installed and execution continues as described in this context. + + If `swapcontext' succeeds the function does not return unless the + context OUCP is used without prior modification by `makecontext'. + The return value in this case is `0'. If the function fails it + returns `-1' and set ERRNO accordingly. + +Example for SVID Context Handling +================================= + + The easiest way to use the context handling functions is as a +replacement for `setjmp' and `longjmp'. The context contains on most +platforms more information which might lead to less surprises but this +also means using these functions is more expensive (beside being less +portable). + + int + random_search (int n, int (*fp) (int, ucontext_t *)) + { + volatile int cnt = 0; + ucontext_t uc; + + /* Safe current context. */ + if (getcontext (&uc) < 0) + return -1; + + /* If we have not tried N times try again. */ + if (cnt++ < n) + /* Call the function with a new random number + and the context. */ + if (fp (rand (), &uc) != 0) + /* We found what we were looking for. */ + return 1; + + /* Not found. */ + return 0; + } + + Using contexts in such a way enables emulating exception handling. +The search functions passed in the FP parameter could be very large, +nested, and complex which would make it complicated (or at least would +require a lot of code) to leave the function with an error value which +has to be passed down to the caller. By using the context it is +possible to leave the search function in one step and allow restarting +the search which also has the nice side effect that it can be +significantly faster. + + Something which is harder to implement with `setjmp' and `longjmp' +is to switch temporarily to a different execution path and then resume +where execution was stopped. + + #include + #include + #include + #include + #include + + /* Set by the signal handler. */ + static volatile int expired; + + /* The contexts. */ + static ucontext_t uc[3]; + + /* We do only a certain number of switches. */ + static int switches; + + + /* This is the function doing the work. It is just a + skeleton, real code has to be filled in. */ + static void + f (int n) + { + int m = 0; + while (1) + { + /* This is where the work would be done. */ + if (++m % 100 == 0) + { + putchar ('.'); + fflush (stdout); + } + + /* Regularly the EXPIRE variable must be checked. */ + if (expired) + { + /* We do not want the program to run forever. */ + if (++switches == 20) + return; + + printf ("\nswitching from %d to %d\n", n, 3 - n); + expired = 0; + /* Switch to the other context, saving the current one. */ + swapcontext (&uc[n], &uc[3 - n]); + } + } + } + + /* This is the signal handler which simply set the variable. */ + void + handler (int signal) + { + expired = 1; + } + + + int + main (void) + { + struct sigaction sa; + struct itimerval it; + char st1[8192]; + char st2[8192]; + + /* Initialize the data structures for the interval timer. */ + sa.sa_flags = SA_RESTART; + sigfillset (&sa.sa_mask); + sa.sa_handler = handler; + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 1; + it.it_value = it.it_interval; + + /* Install the timer and get the context we can manipulate. */ + if (sigaction (SIGPROF, &sa, NULL) < 0 + || setitimer (ITIMER_PROF, &it, NULL) < 0 + || getcontext (&uc[1]) == -1 + || getcontext (&uc[2]) == -1) + abort (); + + /* Create a context with a separate stack which causes the + function `f' to be call with the parameter `1'. + Note that the `uc_link' points to the main context + which will cause the program to terminate once the function + return. */ + uc[1].uc_link = &uc[0]; + uc[1].uc_stack.ss_sp = st1; + uc[1].uc_stack.ss_size = sizeof st1; + makecontext (&uc[1], (void (*) (void)) f, 1, 1); + + /* Similarly, but `2' is passed as the parameter to `f'. */ + uc[2].uc_link = &uc[0]; + uc[2].uc_stack.ss_sp = st2; + uc[2].uc_stack.ss_size = sizeof st2; + makecontext (&uc[2], (void (*) (void)) f, 1, 2); + + /* Start running. */ + swapcontext (&uc[0], &uc[1]); + putchar ('\n'); + + return 0; + } + + This an example how the context functions can be used to implement +co-routines or cooperative multi-threading. All that has to be done is +to call every once in a while `swapcontext' to continue running a +different context. It is not allowed to do the context switching from +the signal handler directly since neither `setcontext' nor +`swapcontext' are functions which can be called from a signal handler. +But setting a variable in the signal handler and checking it in the +body of the functions which are executed. Since `swapcontext' is +saving the current context it is possible to have multiple different +scheduling points in the code. Execution will always resume where it +was left. + + File: libc.info, Node: Signal Handling, Next: Program Basics, Prev: Non-Local Exits, Up: Top Signal Handling @@ -781,307 +1095,4 @@ the names are standardized and fairly un * Operation Error Signals:: Used to report operational system errors. * Miscellaneous Signals:: Miscellaneous Signals. * Signal Messages:: Printing a message describing a signal. - - -File: libc.info, Node: Program Error Signals, Next: Termination Signals, Up: Standard Signals - -Program Error Signals ---------------------- - - The following signals are generated when a serious program error is -detected by the operating system or the computer itself. In general, -all of these signals are indications that your program is seriously -broken in some way, and there's usually no way to continue the -computation which encountered the error. - - Some programs handle program error signals in order to tidy up before -terminating; for example, programs that turn off echoing of terminal -input should handle program error signals in order to turn echoing back -on. The handler should end by specifying the default action for the -signal that happened and then reraising it; this will cause the program -to terminate with that signal, as if it had not had a handler. (*Note -Termination in Handler::.) - - Termination is the sensible ultimate outcome from a program error in -most programs. However, programming systems such as Lisp that can load -compiled user programs might need to keep executing even if a user -program incurs an error. These programs have handlers which use -`longjmp' to return control to the command level. - - The default action for all of these signals is to cause the process -to terminate. If you block or ignore these signals or establish -handlers for them that return normally, your program will probably -break horribly when such signals happen, unless they are generated by -`raise' or `kill' instead of a real error. - - When one of these program error signals terminates a process, it also -writes a "core dump file" which records the state of the process at the -time of termination. The core dump file is named `core' and is written -in whichever directory is current in the process at the time. (On the -GNU system, you can specify the file name for core dumps with the -environment variable `COREFILE'.) The purpose of core dump files is so -that you can examine them with a debugger to investigate what caused -the error. - - - Macro: int SIGFPE - The `SIGFPE' signal reports a fatal arithmetic error. Although the - name is derived from "floating-point exception", this signal - actually covers all arithmetic errors, including division by zero - and overflow. If a program stores integer data in a location - which is then used in a floating-point operation, this often - causes an "invalid operation" exception, because the processor - cannot recognize the data as a floating-point number. - - Actual floating-point exceptions are a complicated subject because - there are many types of exceptions with subtly different meanings, - and the `SIGFPE' signal doesn't distinguish between them. The - `IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std - 754-1985 and ANSI/IEEE Std 854-1987)' defines various - floating-point exceptions and requires conforming computer systems - to report their occurrences. However, this standard does not - specify how the exceptions are reported, or what kinds of handling - and control the operating system can offer to the programmer. - - BSD systems provide the `SIGFPE' handler with an extra argument that -distinguishes various causes of the exception. In order to access this -argument, you must define the handler to accept two arguments, which -means you must cast it to a one-argument function type in order to -establish the handler. The GNU library does provide this extra -argument, but the value is meaningful only on operating systems that -provide the information (BSD systems and GNU systems). - -`FPE_INTOVF_TRAP' - Integer overflow (impossible in a C program unless you enable - overflow trapping in a hardware-specific fashion). - -`FPE_INTDIV_TRAP' - Integer division by zero. - -`FPE_SUBRNG_TRAP' - Subscript-range (something that C programs never check for). - -`FPE_FLTOVF_TRAP' - Floating overflow trap. - -`FPE_FLTDIV_TRAP' - Floating/decimal division by zero. - -`FPE_FLTUND_TRAP' - Floating underflow trap. (Trapping on floating underflow is not - normally enabled.) - -`FPE_DECOVF_TRAP' - Decimal overflow trap. (Only a few machines have decimal - arithmetic and C never uses it.) - - - Macro: int SIGILL - The name of this signal is derived from "illegal instruction"; it - usually means your program is trying to execute garbage or a - privileged instruction. Since the C compiler generates only valid - instructions, `SIGILL' typically indicates that the executable - file is corrupted, or that you are trying to execute data. Some - common ways of getting into the latter situation are by passing an - invalid object where a pointer to a function was expected, or by - writing past the end of an automatic array (or similar problems - with pointers to automatic variables) and corrupting other data on - the stack such as the return address of a stack frame. - - `SIGILL' can also be generated when the stack overflows, or when - the system has trouble running the handler for a signal. - - - Macro: int SIGSEGV - This signal is generated when a program tries to read or write - outside the memory that is allocated for it, or to write memory - that can only be read. (Actually, the signals only occur when the - program goes far enough outside to be detected by the system's - memory protection mechanism.) The name is an abbreviation for - "segmentation violation". - - Common ways of getting a `SIGSEGV' condition include dereferencing - a null or uninitialized pointer, or when you use a pointer to step - through an array, but fail to check for the end of the array. It - varies among systems whether dereferencing a null pointer generates - `SIGSEGV' or `SIGBUS'. - - - Macro: int SIGBUS - This signal is generated when an invalid pointer is dereferenced. - Like `SIGSEGV', this signal is typically the result of - dereferencing an uninitialized pointer. The difference between - the two is that `SIGSEGV' indicates an invalid access to valid - memory, while `SIGBUS' indicates an access to an invalid address. - In particular, `SIGBUS' signals often result from dereferencing a - misaligned pointer, such as referring to a four-word integer at an - address not divisible by four. (Each kind of computer has its own - requirements for address alignment.) - - The name of this signal is an abbreviation for "bus error". - - - Macro: int SIGABRT - This signal indicates an error detected by the program itself and - reported by calling `abort'. *Note Aborting a Program::. - - - Macro: int SIGIOT - Generated by the PDP-11 "iot" instruction. On most machines, this - is just another name for `SIGABRT'. - - - Macro: int SIGTRAP - Generated by the machine's breakpoint instruction, and possibly - other trap instructions. This signal is used by debuggers. Your - program will probably only see `SIGTRAP' if it is somehow - executing bad instructions. - - - Macro: int SIGEMT - Emulator trap; this results from certain unimplemented instructions - which might be emulated in software, or the operating system's - failure to properly emulate them. - - - Macro: int SIGSYS - Bad system call; that is to say, the instruction to trap to the - operating system was executed, but the code number for the system - call to perform was invalid. - - -File: libc.info, Node: Termination Signals, Next: Alarm Signals, Prev: Program Error Signals, Up: Standard Signals - -Termination Signals -------------------- - - These signals are all used to tell a process to terminate, in one way -or another. They have different names because they're used for slightly -different purposes, and programs might want to handle them differently. - - The reason for handling these signals is usually so your program can -tidy up as appropriate before actually terminating. For example, you -might want to save state information, delete temporary files, or restore -the previous terminal modes. Such a handler should end by specifying -the default action for the signal that happened and then reraising it; -this will cause the program to terminate with that signal, as if it had -not had a handler. (*Note Termination in Handler::.) - - The (obvious) default action for all of these signals is to cause the -process to terminate. - - - Macro: int SIGTERM - The `SIGTERM' signal is a generic signal used to cause program - termination. Unlike `SIGKILL', this signal can be blocked, - handled, and ignored. It is the normal way to politely ask a - program to terminate. - - The shell command `kill' generates `SIGTERM' by default. - - - Macro: int SIGINT - The `SIGINT' ("program interrupt") signal is sent when the user - types the INTR character (normally `C-c'). *Note Special - Characters::, for information about terminal driver support for - `C-c'. - - - Macro: int SIGQUIT - The `SIGQUIT' signal is similar to `SIGINT', except that it's - controlled by a different key--the QUIT character, usually - `C-\'--and produces a core dump when it terminates the process, - just like a program error signal. You can think of this as a - program error condition "detected" by the user. - - *Note Program Error Signals::, for information about core dumps. - *Note Special Characters::, for information about terminal driver - support. - - Certain kinds of cleanups are best omitted in handling `SIGQUIT'. - For example, if the program creates temporary files, it should - handle the other termination requests by deleting the temporary - files. But it is better for `SIGQUIT' not to delete them, so that - the user can examine them in conjunction with the core dump. - - - Macro: int SIGKILL - The `SIGKILL' signal is used to cause immediate program - termination. It cannot be handled or ignored, and is therefore - always fatal. It is also not possible to block this signal. - - This signal is usually generated only by explicit request. Since - it cannot be handled, you should generate it only as a last - resort, after first trying a less drastic method such as `C-c' or - `SIGTERM'. If a process does not respond to any other termination - signals, sending it a `SIGKILL' signal will almost always cause it - to go away. - - In fact, if `SIGKILL' fails to terminate a process, that by itself - constitutes an operating system bug which you should report. - - The system will generate `SIGKILL' for a process itself under some - unusual conditions where the program cannot possibly continue to - run (even to run a signal handler). - - - Macro: int SIGHUP - The `SIGHUP' ("hang-up") signal is used to report that the user's - terminal is disconnected, perhaps because a network or telephone - connection was broken. For more information about this, see *Note - Control Modes::. - - This signal is also used to report the termination of the - controlling process on a terminal to jobs associated with that - session; this termination effectively disconnects all processes in - the session from the controlling terminal. For more information, - see *Note Termination Internals::. - - -File: libc.info, Node: Alarm Signals, Next: Asynchronous I/O Signals, Prev: Termination Signals, Up: Standard Signals - -Alarm Signals -------------- - - These signals are used to indicate the expiration of timers. *Note -Setting an Alarm::, for information about functions that cause these -signals to be sent. - - The default behavior for these signals is to cause program -termination. This default is rarely useful, but no other default would -be useful; most of the ways of using these signals would require -handler functions in any case. - - - Macro: int SIGALRM - This signal typically indicates expiration of a timer that - measures real or clock time. It is used by the `alarm' function, - for example. - - - Macro: int SIGVTALRM - This signal typically indicates expiration of a timer that - measures CPU time used by the current process. The name is an - abbreviation for "virtual time alarm". - - - Macro: int SIGPROF - This signal typically indicates expiration of a timer that measures - both CPU time used by the current process, and CPU time expended on - behalf of the process by the system. Such a timer is used to - implement code profiling facilities, hence the name of this signal. - - -File: libc.info, Node: Asynchronous I/O Signals, Next: Job Control Signals, Prev: Alarm Signals, Up: Standard Signals - -Asynchronous I/O Signals ------------------------- - - The signals listed in this section are used in conjunction with -asynchronous I/O facilities. You have to take explicit action by -calling `fcntl' to enable a particular file descriptor to generate -these signals (*note Interrupt Input::). The default action for these -signals is to ignore them. - - - Macro: int SIGIO - This signal is sent when a file descriptor is ready to perform - input or output. - - On most operating systems, terminals and sockets are the only - kinds of files that can generate `SIGIO'; other kinds, including - ordinary files, never generate `SIGIO' even if you ask them to. - - In the GNU system `SIGIO' will always be generated properly if you - successfully set asynchronous mode with `fcntl'. - - - Macro: int SIGURG - This signal is sent when "urgent" or out-of-band data arrives on a - socket. *Note Out-of-Band Data::. - - - Macro: int SIGPOLL - This is a System V signal name, more or less similar to `SIGIO'. - It is defined only for compatibility. diff -durpNa glibc-2.2.2/manual/libc.info-37 glibc-2.2.3/manual/libc.info-37 --- glibc-2.2.2/manual/libc.info-37 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-37 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,309 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Program Error Signals, Next: Termination Signals, Up: Standard Signals + +Program Error Signals +--------------------- + + The following signals are generated when a serious program error is +detected by the operating system or the computer itself. In general, +all of these signals are indications that your program is seriously +broken in some way, and there's usually no way to continue the +computation which encountered the error. + + Some programs handle program error signals in order to tidy up before +terminating; for example, programs that turn off echoing of terminal +input should handle program error signals in order to turn echoing back +on. The handler should end by specifying the default action for the +signal that happened and then reraising it; this will cause the program +to terminate with that signal, as if it had not had a handler. (*Note +Termination in Handler::.) + + Termination is the sensible ultimate outcome from a program error in +most programs. However, programming systems such as Lisp that can load +compiled user programs might need to keep executing even if a user +program incurs an error. These programs have handlers which use +`longjmp' to return control to the command level. + + The default action for all of these signals is to cause the process +to terminate. If you block or ignore these signals or establish +handlers for them that return normally, your program will probably +break horribly when such signals happen, unless they are generated by +`raise' or `kill' instead of a real error. + + When one of these program error signals terminates a process, it also +writes a "core dump file" which records the state of the process at the +time of termination. The core dump file is named `core' and is written +in whichever directory is current in the process at the time. (On the +GNU system, you can specify the file name for core dumps with the +environment variable `COREFILE'.) The purpose of core dump files is so +that you can examine them with a debugger to investigate what caused +the error. + + - Macro: int SIGFPE + The `SIGFPE' signal reports a fatal arithmetic error. Although the + name is derived from "floating-point exception", this signal + actually covers all arithmetic errors, including division by zero + and overflow. If a program stores integer data in a location + which is then used in a floating-point operation, this often + causes an "invalid operation" exception, because the processor + cannot recognize the data as a floating-point number. + + Actual floating-point exceptions are a complicated subject because + there are many types of exceptions with subtly different meanings, + and the `SIGFPE' signal doesn't distinguish between them. The + `IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std + 754-1985 and ANSI/IEEE Std 854-1987)' defines various + floating-point exceptions and requires conforming computer systems + to report their occurrences. However, this standard does not + specify how the exceptions are reported, or what kinds of handling + and control the operating system can offer to the programmer. + + BSD systems provide the `SIGFPE' handler with an extra argument that +distinguishes various causes of the exception. In order to access this +argument, you must define the handler to accept two arguments, which +means you must cast it to a one-argument function type in order to +establish the handler. The GNU library does provide this extra +argument, but the value is meaningful only on operating systems that +provide the information (BSD systems and GNU systems). + +`FPE_INTOVF_TRAP' + Integer overflow (impossible in a C program unless you enable + overflow trapping in a hardware-specific fashion). + +`FPE_INTDIV_TRAP' + Integer division by zero. + +`FPE_SUBRNG_TRAP' + Subscript-range (something that C programs never check for). + +`FPE_FLTOVF_TRAP' + Floating overflow trap. + +`FPE_FLTDIV_TRAP' + Floating/decimal division by zero. + +`FPE_FLTUND_TRAP' + Floating underflow trap. (Trapping on floating underflow is not + normally enabled.) + +`FPE_DECOVF_TRAP' + Decimal overflow trap. (Only a few machines have decimal + arithmetic and C never uses it.) + + - Macro: int SIGILL + The name of this signal is derived from "illegal instruction"; it + usually means your program is trying to execute garbage or a + privileged instruction. Since the C compiler generates only valid + instructions, `SIGILL' typically indicates that the executable + file is corrupted, or that you are trying to execute data. Some + common ways of getting into the latter situation are by passing an + invalid object where a pointer to a function was expected, or by + writing past the end of an automatic array (or similar problems + with pointers to automatic variables) and corrupting other data on + the stack such as the return address of a stack frame. + + `SIGILL' can also be generated when the stack overflows, or when + the system has trouble running the handler for a signal. + + - Macro: int SIGSEGV + This signal is generated when a program tries to read or write + outside the memory that is allocated for it, or to write memory + that can only be read. (Actually, the signals only occur when the + program goes far enough outside to be detected by the system's + memory protection mechanism.) The name is an abbreviation for + "segmentation violation". + + Common ways of getting a `SIGSEGV' condition include dereferencing + a null or uninitialized pointer, or when you use a pointer to step + through an array, but fail to check for the end of the array. It + varies among systems whether dereferencing a null pointer generates + `SIGSEGV' or `SIGBUS'. + + - Macro: int SIGBUS + This signal is generated when an invalid pointer is dereferenced. + Like `SIGSEGV', this signal is typically the result of + dereferencing an uninitialized pointer. The difference between + the two is that `SIGSEGV' indicates an invalid access to valid + memory, while `SIGBUS' indicates an access to an invalid address. + In particular, `SIGBUS' signals often result from dereferencing a + misaligned pointer, such as referring to a four-word integer at an + address not divisible by four. (Each kind of computer has its own + requirements for address alignment.) + + The name of this signal is an abbreviation for "bus error". + + - Macro: int SIGABRT + This signal indicates an error detected by the program itself and + reported by calling `abort'. *Note Aborting a Program::. + + - Macro: int SIGIOT + Generated by the PDP-11 "iot" instruction. On most machines, this + is just another name for `SIGABRT'. + + - Macro: int SIGTRAP + Generated by the machine's breakpoint instruction, and possibly + other trap instructions. This signal is used by debuggers. Your + program will probably only see `SIGTRAP' if it is somehow + executing bad instructions. + + - Macro: int SIGEMT + Emulator trap; this results from certain unimplemented instructions + which might be emulated in software, or the operating system's + failure to properly emulate them. + + - Macro: int SIGSYS + Bad system call; that is to say, the instruction to trap to the + operating system was executed, but the code number for the system + call to perform was invalid. + + +File: libc.info, Node: Termination Signals, Next: Alarm Signals, Prev: Program Error Signals, Up: Standard Signals + +Termination Signals +------------------- + + These signals are all used to tell a process to terminate, in one way +or another. They have different names because they're used for slightly +different purposes, and programs might want to handle them differently. + + The reason for handling these signals is usually so your program can +tidy up as appropriate before actually terminating. For example, you +might want to save state information, delete temporary files, or restore +the previous terminal modes. Such a handler should end by specifying +the default action for the signal that happened and then reraising it; +this will cause the program to terminate with that signal, as if it had +not had a handler. (*Note Termination in Handler::.) + + The (obvious) default action for all of these signals is to cause the +process to terminate. + + - Macro: int SIGTERM + The `SIGTERM' signal is a generic signal used to cause program + termination. Unlike `SIGKILL', this signal can be blocked, + handled, and ignored. It is the normal way to politely ask a + program to terminate. + + The shell command `kill' generates `SIGTERM' by default. + + - Macro: int SIGINT + The `SIGINT' ("program interrupt") signal is sent when the user + types the INTR character (normally `C-c'). *Note Special + Characters::, for information about terminal driver support for + `C-c'. + + - Macro: int SIGQUIT + The `SIGQUIT' signal is similar to `SIGINT', except that it's + controlled by a different key--the QUIT character, usually + `C-\'--and produces a core dump when it terminates the process, + just like a program error signal. You can think of this as a + program error condition "detected" by the user. + + *Note Program Error Signals::, for information about core dumps. + *Note Special Characters::, for information about terminal driver + support. + + Certain kinds of cleanups are best omitted in handling `SIGQUIT'. + For example, if the program creates temporary files, it should + handle the other termination requests by deleting the temporary + files. But it is better for `SIGQUIT' not to delete them, so that + the user can examine them in conjunction with the core dump. + + - Macro: int SIGKILL + The `SIGKILL' signal is used to cause immediate program + termination. It cannot be handled or ignored, and is therefore + always fatal. It is also not possible to block this signal. + + This signal is usually generated only by explicit request. Since + it cannot be handled, you should generate it only as a last + resort, after first trying a less drastic method such as `C-c' or + `SIGTERM'. If a process does not respond to any other termination + signals, sending it a `SIGKILL' signal will almost always cause it + to go away. + + In fact, if `SIGKILL' fails to terminate a process, that by itself + constitutes an operating system bug which you should report. + + The system will generate `SIGKILL' for a process itself under some + unusual conditions where the program cannot possibly continue to + run (even to run a signal handler). + + - Macro: int SIGHUP + The `SIGHUP' ("hang-up") signal is used to report that the user's + terminal is disconnected, perhaps because a network or telephone + connection was broken. For more information about this, see *Note + Control Modes::. + + This signal is also used to report the termination of the + controlling process on a terminal to jobs associated with that + session; this termination effectively disconnects all processes in + the session from the controlling terminal. For more information, + see *Note Termination Internals::. + + +File: libc.info, Node: Alarm Signals, Next: Asynchronous I/O Signals, Prev: Termination Signals, Up: Standard Signals + +Alarm Signals +------------- + + These signals are used to indicate the expiration of timers. *Note +Setting an Alarm::, for information about functions that cause these +signals to be sent. + + The default behavior for these signals is to cause program +termination. This default is rarely useful, but no other default would +be useful; most of the ways of using these signals would require +handler functions in any case. + + - Macro: int SIGALRM + This signal typically indicates expiration of a timer that + measures real or clock time. It is used by the `alarm' function, + for example. + + - Macro: int SIGVTALRM + This signal typically indicates expiration of a timer that + measures CPU time used by the current process. The name is an + abbreviation for "virtual time alarm". + + - Macro: int SIGPROF + This signal typically indicates expiration of a timer that measures + both CPU time used by the current process, and CPU time expended on + behalf of the process by the system. Such a timer is used to + implement code profiling facilities, hence the name of this signal. + + +File: libc.info, Node: Asynchronous I/O Signals, Next: Job Control Signals, Prev: Alarm Signals, Up: Standard Signals + +Asynchronous I/O Signals +------------------------ + + The signals listed in this section are used in conjunction with +asynchronous I/O facilities. You have to take explicit action by +calling `fcntl' to enable a particular file descriptor to generate +these signals (*note Interrupt Input::). The default action for these +signals is to ignore them. + + - Macro: int SIGIO + This signal is sent when a file descriptor is ready to perform + input or output. + + On most operating systems, terminals and sockets are the only + kinds of files that can generate `SIGIO'; other kinds, including + ordinary files, never generate `SIGIO' even if you ask them to. + + In the GNU system `SIGIO' will always be generated properly if you + successfully set asynchronous mode with `fcntl'. + + - Macro: int SIGURG + This signal is sent when "urgent" or out-of-band data arrives on a + socket. *Note Out-of-Band Data::. + + - Macro: int SIGPOLL + This is a System V signal name, more or less similar to `SIGIO'. + It is defined only for compatibility. + + File: libc.info, Node: Job Control Signals, Next: Operation Error Signals, Prev: Asynchronous I/O Signals, Up: Standard Signals Job Control Signals @@ -466,8 +769,8 @@ control when the signal is generated and the signal. These are described in more detail in *Note Flags for Sigaction::. - - Function: int sigaction (int SIGNUM, const struct sigaction *ACTION, - struct sigaction *OLD-ACTION) + - Function: int sigaction (int SIGNUM, const struct sigaction + *restrict ACTION, struct sigaction *restrict OLD-ACTION) The ACTION argument is used to set up a new action for the signal SIGNUM, while the OLD-ACTION argument is used to return information about the action previously associated with this @@ -905,328 +1208,4 @@ one global variable. ... } } - - -File: libc.info, Node: Signals in Handler, Next: Merged Signals, Prev: Longjmp in Handler, Up: Defining Handlers - -Signals Arriving While a Handler Runs -------------------------------------- - - What happens if another signal arrives while your signal handler -function is running? - - When the handler for a particular signal is invoked, that signal is -automatically blocked until the handler returns. That means that if two -signals of the same kind arrive close together, the second one will be -held until the first has been handled. (The handler can explicitly -unblock the signal using `sigprocmask', if you want to allow more -signals of this type to arrive; see *Note Process Signal Mask::.) - - However, your handler can still be interrupted by delivery of another -kind of signal. To avoid this, you can use the `sa_mask' member of the -action structure passed to `sigaction' to explicitly specify which -signals should be blocked while the signal handler runs. These signals -are in addition to the signal for which the handler was invoked, and -any other signals that are normally blocked by the process. *Note -Blocking for Handler::. - - When the handler returns, the set of blocked signals is restored to -the value it had before the handler ran. So using `sigprocmask' inside -the handler only affects what signals can arrive during the execution of -the handler itself, not what signals can arrive once the handler -returns. - - *Portability Note:* Always use `sigaction' to establish a handler -for a signal that you expect to receive asynchronously, if you want -your program to work properly on System V Unix. On this system, the -handling of a signal whose handler was established with `signal' -automatically sets the signal's action back to `SIG_DFL', and the -handler must re-establish itself each time it runs. This practice, -while inconvenient, does work when signals cannot arrive in succession. -However, if another signal can arrive right away, it may arrive before -the handler can re-establish itself. Then the second signal would -receive the default handling, which could terminate the process. - - -File: libc.info, Node: Merged Signals, Next: Nonreentrancy, Prev: Signals in Handler, Up: Defining Handlers - -Signals Close Together Merge into One -------------------------------------- - - If multiple signals of the same type are delivered to your process -before your signal handler has a chance to be invoked at all, the -handler may only be invoked once, as if only a single signal had -arrived. In effect, the signals merge into one. This situation can -arise when the signal is blocked, or in a multiprocessing environment -where the system is busy running some other processes while the signals -are delivered. This means, for example, that you cannot reliably use a -signal handler to count signals. The only distinction you can reliably -make is whether at least one signal has arrived since a given time in -the past. - - Here is an example of a handler for `SIGCHLD' that compensates for -the fact that the number of signals received may not equal the number of -child processes that generate them. It assumes that the program keeps -track of all the child processes with a chain of structures as follows: - - struct process - { - struct process *next; - /* The process ID of this child. */ - int pid; - /* The descriptor of the pipe or pseudo terminal - on which output comes from this child. */ - int input_descriptor; - /* Nonzero if this process has stopped or terminated. */ - sig_atomic_t have_status; - /* The status of this child; 0 if running, - otherwise a status value from `waitpid'. */ - int status; - }; - - struct process *process_list; - - This example also uses a flag to indicate whether signals have -arrived since some time in the past--whenever the program last cleared -it to zero. - - /* Nonzero means some child's status has changed - so look at `process_list' for the details. */ - int process_status_change; - - Here is the handler itself: - - void - sigchld_handler (int signo) - { - int old_errno = errno; - - while (1) { - register int pid; - int w; - struct process *p; - - /* Keep asking for a status until we get a definitive result. */ - do - { - errno = 0; - pid = waitpid (WAIT_ANY, &w, WNOHANG | WUNTRACED); - } - while (pid <= 0 && errno == EINTR); - - if (pid <= 0) { - /* A real failure means there are no more - stopped or terminated child processes, so return. */ - errno = old_errno; - return; - } - - /* Find the process that signaled us, and record its status. */ - - for (p = process_list; p; p = p->next) - if (p->pid == pid) { - p->status = w; - /* Indicate that the `status' field - has data to look at. We do this only after storing it. */ - p->have_status = 1; - - /* If process has terminated, stop waiting for its output. */ - if (WIFSIGNALED (w) || WIFEXITED (w)) - if (p->input_descriptor) - FD_CLR (p->input_descriptor, &input_wait_mask); - - /* The program should check this flag from time to time - to see if there is any news in `process_list'. */ - ++process_status_change; - } - - /* Loop around to handle all the processes - that have something to tell us. */ - } - } - - Here is the proper way to check the flag `process_status_change': - - if (process_status_change) { - struct process *p; - process_status_change = 0; - for (p = process_list; p; p = p->next) - if (p->have_status) { - ... Examine `p->status' ... - } - } - -It is vital to clear the flag before examining the list; otherwise, if a -signal were delivered just before the clearing of the flag, and after -the appropriate element of the process list had been checked, the status -change would go unnoticed until the next signal arrived to set the flag -again. You could, of course, avoid this problem by blocking the signal -while scanning the list, but it is much more elegant to guarantee -correctness by doing things in the right order. - - The loop which checks process status avoids examining `p->status' -until it sees that status has been validly stored. This is to make sure -that the status cannot change in the middle of accessing it. Once -`p->have_status' is set, it means that the child process is stopped or -terminated, and in either case, it cannot stop or terminate again until -the program has taken notice. *Note Atomic Usage::, for more -information about coping with interruptions during accesses of a -variable. - - Here is another way you can test whether the handler has run since -the last time you checked. This technique uses a counter which is never -changed outside the handler. Instead of clearing the count, the program -remembers the previous value and sees whether it has changed since the -previous check. The advantage of this method is that different parts of -the program can check independently, each part checking whether there -has been a signal since that part last checked. - - sig_atomic_t process_status_change; - - sig_atomic_t last_process_status_change; - - ... - { - sig_atomic_t prev = last_process_status_change; - last_process_status_change = process_status_change; - if (last_process_status_change != prev) { - struct process *p; - for (p = process_list; p; p = p->next) - if (p->have_status) { - ... Examine `p->status' ... - } - } - } - - -File: libc.info, Node: Nonreentrancy, Next: Atomic Data Access, Prev: Merged Signals, Up: Defining Handlers - -Signal Handling and Nonreentrant Functions ------------------------------------------- - - Handler functions usually don't do very much. The best practice is -to write a handler that does nothing but set an external variable that -the program checks regularly, and leave all serious work to the program. -This is best because the handler can be called asynchronously, at -unpredictable times--perhaps in the middle of a primitive function, or -even between the beginning and the end of a C operator that requires -multiple instructions. The data structures being manipulated might -therefore be in an inconsistent state when the handler function is -invoked. Even copying one `int' variable into another can take two -instructions on most machines. - - This means you have to be very careful about what you do in a signal -handler. - - * If your handler needs to access any global variables from your - program, declare those variables `volatile'. This tells the - compiler that the value of the variable might change - asynchronously, and inhibits certain optimizations that would be - invalidated by such modifications. - - * If you call a function in the handler, make sure it is "reentrant" - with respect to signals, or else make sure that the signal cannot - interrupt a call to a related function. - - A function can be non-reentrant if it uses memory that is not on the -stack. - - * If a function uses a static variable or a global variable, or a - dynamically-allocated object that it finds for itself, then it is - non-reentrant and any two calls to the function can interfere. - - For example, suppose that the signal handler uses `gethostbyname'. - This function returns its value in a static object, reusing the - same object each time. If the signal happens to arrive during a - call to `gethostbyname', or even after one (while the program is - still using the value), it will clobber the value that the program - asked for. - - However, if the program does not use `gethostbyname' or any other - function that returns information in the same object, or if it - always blocks signals around each use, then you are safe. - - There are a large number of library functions that return values - in a fixed object, always reusing the same object in this fashion, - and all of them cause the same problem. Function descriptions in - this manual always mention this behavior. - - * If a function uses and modifies an object that you supply, then it - is potentially non-reentrant; two calls can interfere if they use - the same object. - - This case arises when you do I/O using streams. Suppose that the - signal handler prints a message with `fprintf'. Suppose that the - program was in the middle of an `fprintf' call using the same - stream when the signal was delivered. Both the signal handler's - message and the program's data could be corrupted, because both - calls operate on the same data structure--the stream itself. - - However, if you know that the stream that the handler uses cannot - possibly be used by the program at a time when signals can arrive, - then you are safe. It is no problem if the program uses some - other stream. - - * On most systems, `malloc' and `free' are not reentrant, because - they use a static data structure which records what memory blocks - are free. As a result, no library functions that allocate or free - memory are reentrant. This includes functions that allocate space - to store a result. - - The best way to avoid the need to allocate memory in a handler is - to allocate in advance space for signal handlers to use. - - The best way to avoid freeing memory in a handler is to flag or - record the objects to be freed, and have the program check from - time to time whether anything is waiting to be freed. But this - must be done with care, because placing an object on a chain is - not atomic, and if it is interrupted by another signal handler - that does the same thing, you could "lose" one of the objects. - - * Any function that modifies `errno' is non-reentrant, but you can - correct for this: in the handler, save the original value of - `errno' and restore it before returning normally. This prevents - errors that occur within the signal handler from being confused - with errors from system calls at the point the program is - interrupted to run the handler. - - This technique is generally applicable; if you want to call in a - handler a function that modifies a particular object in memory, - you can make this safe by saving and restoring that object. - - * Merely reading from a memory object is safe provided that you can - deal with any of the values that might appear in the object at a - time when the signal can be delivered. Keep in mind that - assignment to some data types requires more than one instruction, - which means that the handler could run "in the middle of" an - assignment to the variable if its type is not atomic. *Note - Atomic Data Access::. - - * Merely writing into a memory object is safe as long as a sudden - change in the value, at any time when the handler might run, will - not disturb anything. - - -File: libc.info, Node: Atomic Data Access, Prev: Nonreentrancy, Up: Defining Handlers - -Atomic Data Access and Signal Handling --------------------------------------- - - Whether the data in your application concerns atoms, or mere text, -you have to be careful about the fact that access to a single datum is -not necessarily "atomic". This means that it can take more than one -instruction to read or write a single object. In such cases, a signal -handler might be invoked in the middle of reading or writing the object. - - There are three ways you can cope with this problem. You can use -data types that are always accessed atomically; you can carefully -arrange that nothing untoward happens if an access is interrupted, or -you can block all signals around any access that had better not be -interrupted (*note Blocking Signals::). - -* Menu: - -* Non-atomic Example:: A program illustrating interrupted access. -* Types: Atomic Types. Data types that guarantee no interruption. -* Usage: Atomic Usage. Proving that interruption is harmless. diff -durpNa glibc-2.2.2/manual/libc.info-38 glibc-2.2.3/manual/libc.info-38 --- glibc-2.2.2/manual/libc.info-38 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-38 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,330 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Signals in Handler, Next: Merged Signals, Prev: Longjmp in Handler, Up: Defining Handlers + +Signals Arriving While a Handler Runs +------------------------------------- + + What happens if another signal arrives while your signal handler +function is running? + + When the handler for a particular signal is invoked, that signal is +automatically blocked until the handler returns. That means that if two +signals of the same kind arrive close together, the second one will be +held until the first has been handled. (The handler can explicitly +unblock the signal using `sigprocmask', if you want to allow more +signals of this type to arrive; see *Note Process Signal Mask::.) + + However, your handler can still be interrupted by delivery of another +kind of signal. To avoid this, you can use the `sa_mask' member of the +action structure passed to `sigaction' to explicitly specify which +signals should be blocked while the signal handler runs. These signals +are in addition to the signal for which the handler was invoked, and +any other signals that are normally blocked by the process. *Note +Blocking for Handler::. + + When the handler returns, the set of blocked signals is restored to +the value it had before the handler ran. So using `sigprocmask' inside +the handler only affects what signals can arrive during the execution of +the handler itself, not what signals can arrive once the handler +returns. + + *Portability Note:* Always use `sigaction' to establish a handler +for a signal that you expect to receive asynchronously, if you want +your program to work properly on System V Unix. On this system, the +handling of a signal whose handler was established with `signal' +automatically sets the signal's action back to `SIG_DFL', and the +handler must re-establish itself each time it runs. This practice, +while inconvenient, does work when signals cannot arrive in succession. +However, if another signal can arrive right away, it may arrive before +the handler can re-establish itself. Then the second signal would +receive the default handling, which could terminate the process. + + +File: libc.info, Node: Merged Signals, Next: Nonreentrancy, Prev: Signals in Handler, Up: Defining Handlers + +Signals Close Together Merge into One +------------------------------------- + + If multiple signals of the same type are delivered to your process +before your signal handler has a chance to be invoked at all, the +handler may only be invoked once, as if only a single signal had +arrived. In effect, the signals merge into one. This situation can +arise when the signal is blocked, or in a multiprocessing environment +where the system is busy running some other processes while the signals +are delivered. This means, for example, that you cannot reliably use a +signal handler to count signals. The only distinction you can reliably +make is whether at least one signal has arrived since a given time in +the past. + + Here is an example of a handler for `SIGCHLD' that compensates for +the fact that the number of signals received may not equal the number of +child processes that generate them. It assumes that the program keeps +track of all the child processes with a chain of structures as follows: + + struct process + { + struct process *next; + /* The process ID of this child. */ + int pid; + /* The descriptor of the pipe or pseudo terminal + on which output comes from this child. */ + int input_descriptor; + /* Nonzero if this process has stopped or terminated. */ + sig_atomic_t have_status; + /* The status of this child; 0 if running, + otherwise a status value from `waitpid'. */ + int status; + }; + + struct process *process_list; + + This example also uses a flag to indicate whether signals have +arrived since some time in the past--whenever the program last cleared +it to zero. + + /* Nonzero means some child's status has changed + so look at `process_list' for the details. */ + int process_status_change; + + Here is the handler itself: + + void + sigchld_handler (int signo) + { + int old_errno = errno; + + while (1) { + register int pid; + int w; + struct process *p; + + /* Keep asking for a status until we get a definitive result. */ + do + { + errno = 0; + pid = waitpid (WAIT_ANY, &w, WNOHANG | WUNTRACED); + } + while (pid <= 0 && errno == EINTR); + + if (pid <= 0) { + /* A real failure means there are no more + stopped or terminated child processes, so return. */ + errno = old_errno; + return; + } + + /* Find the process that signaled us, and record its status. */ + + for (p = process_list; p; p = p->next) + if (p->pid == pid) { + p->status = w; + /* Indicate that the `status' field + has data to look at. We do this only after storing it. */ + p->have_status = 1; + + /* If process has terminated, stop waiting for its output. */ + if (WIFSIGNALED (w) || WIFEXITED (w)) + if (p->input_descriptor) + FD_CLR (p->input_descriptor, &input_wait_mask); + + /* The program should check this flag from time to time + to see if there is any news in `process_list'. */ + ++process_status_change; + } + + /* Loop around to handle all the processes + that have something to tell us. */ + } + } + + Here is the proper way to check the flag `process_status_change': + + if (process_status_change) { + struct process *p; + process_status_change = 0; + for (p = process_list; p; p = p->next) + if (p->have_status) { + ... Examine `p->status' ... + } + } + +It is vital to clear the flag before examining the list; otherwise, if a +signal were delivered just before the clearing of the flag, and after +the appropriate element of the process list had been checked, the status +change would go unnoticed until the next signal arrived to set the flag +again. You could, of course, avoid this problem by blocking the signal +while scanning the list, but it is much more elegant to guarantee +correctness by doing things in the right order. + + The loop which checks process status avoids examining `p->status' +until it sees that status has been validly stored. This is to make sure +that the status cannot change in the middle of accessing it. Once +`p->have_status' is set, it means that the child process is stopped or +terminated, and in either case, it cannot stop or terminate again until +the program has taken notice. *Note Atomic Usage::, for more +information about coping with interruptions during accesses of a +variable. + + Here is another way you can test whether the handler has run since +the last time you checked. This technique uses a counter which is never +changed outside the handler. Instead of clearing the count, the program +remembers the previous value and sees whether it has changed since the +previous check. The advantage of this method is that different parts of +the program can check independently, each part checking whether there +has been a signal since that part last checked. + + sig_atomic_t process_status_change; + + sig_atomic_t last_process_status_change; + + ... + { + sig_atomic_t prev = last_process_status_change; + last_process_status_change = process_status_change; + if (last_process_status_change != prev) { + struct process *p; + for (p = process_list; p; p = p->next) + if (p->have_status) { + ... Examine `p->status' ... + } + } + } + + +File: libc.info, Node: Nonreentrancy, Next: Atomic Data Access, Prev: Merged Signals, Up: Defining Handlers + +Signal Handling and Nonreentrant Functions +------------------------------------------ + + Handler functions usually don't do very much. The best practice is +to write a handler that does nothing but set an external variable that +the program checks regularly, and leave all serious work to the program. +This is best because the handler can be called asynchronously, at +unpredictable times--perhaps in the middle of a primitive function, or +even between the beginning and the end of a C operator that requires +multiple instructions. The data structures being manipulated might +therefore be in an inconsistent state when the handler function is +invoked. Even copying one `int' variable into another can take two +instructions on most machines. + + This means you have to be very careful about what you do in a signal +handler. + + * If your handler needs to access any global variables from your + program, declare those variables `volatile'. This tells the + compiler that the value of the variable might change + asynchronously, and inhibits certain optimizations that would be + invalidated by such modifications. + + * If you call a function in the handler, make sure it is "reentrant" + with respect to signals, or else make sure that the signal cannot + interrupt a call to a related function. + + A function can be non-reentrant if it uses memory that is not on the +stack. + + * If a function uses a static variable or a global variable, or a + dynamically-allocated object that it finds for itself, then it is + non-reentrant and any two calls to the function can interfere. + + For example, suppose that the signal handler uses `gethostbyname'. + This function returns its value in a static object, reusing the + same object each time. If the signal happens to arrive during a + call to `gethostbyname', or even after one (while the program is + still using the value), it will clobber the value that the program + asked for. + + However, if the program does not use `gethostbyname' or any other + function that returns information in the same object, or if it + always blocks signals around each use, then you are safe. + + There are a large number of library functions that return values + in a fixed object, always reusing the same object in this fashion, + and all of them cause the same problem. Function descriptions in + this manual always mention this behavior. + + * If a function uses and modifies an object that you supply, then it + is potentially non-reentrant; two calls can interfere if they use + the same object. + + This case arises when you do I/O using streams. Suppose that the + signal handler prints a message with `fprintf'. Suppose that the + program was in the middle of an `fprintf' call using the same + stream when the signal was delivered. Both the signal handler's + message and the program's data could be corrupted, because both + calls operate on the same data structure--the stream itself. + + However, if you know that the stream that the handler uses cannot + possibly be used by the program at a time when signals can arrive, + then you are safe. It is no problem if the program uses some + other stream. + + * On most systems, `malloc' and `free' are not reentrant, because + they use a static data structure which records what memory blocks + are free. As a result, no library functions that allocate or free + memory are reentrant. This includes functions that allocate space + to store a result. + + The best way to avoid the need to allocate memory in a handler is + to allocate in advance space for signal handlers to use. + + The best way to avoid freeing memory in a handler is to flag or + record the objects to be freed, and have the program check from + time to time whether anything is waiting to be freed. But this + must be done with care, because placing an object on a chain is + not atomic, and if it is interrupted by another signal handler + that does the same thing, you could "lose" one of the objects. + + * Any function that modifies `errno' is non-reentrant, but you can + correct for this: in the handler, save the original value of + `errno' and restore it before returning normally. This prevents + errors that occur within the signal handler from being confused + with errors from system calls at the point the program is + interrupted to run the handler. + + This technique is generally applicable; if you want to call in a + handler a function that modifies a particular object in memory, + you can make this safe by saving and restoring that object. + + * Merely reading from a memory object is safe provided that you can + deal with any of the values that might appear in the object at a + time when the signal can be delivered. Keep in mind that + assignment to some data types requires more than one instruction, + which means that the handler could run "in the middle of" an + assignment to the variable if its type is not atomic. *Note + Atomic Data Access::. + + * Merely writing into a memory object is safe as long as a sudden + change in the value, at any time when the handler might run, will + not disturb anything. + + +File: libc.info, Node: Atomic Data Access, Prev: Nonreentrancy, Up: Defining Handlers + +Atomic Data Access and Signal Handling +-------------------------------------- + + Whether the data in your application concerns atoms, or mere text, +you have to be careful about the fact that access to a single datum is +not necessarily "atomic". This means that it can take more than one +instruction to read or write a single object. In such cases, a signal +handler might be invoked in the middle of reading or writing the object. + + There are three ways you can cope with this problem. You can use +data types that are always accessed atomically; you can carefully +arrange that nothing untoward happens if an access is interrupted, or +you can block all signals around any access that had better not be +interrupted (*note Blocking Signals::). + +* Menu: + +* Non-atomic Example:: A program illustrating interrupted access. +* Types: Atomic Types. Data types that guarantee no interruption. +* Usage: Atomic Usage. Proving that interruption is harmless. + + File: libc.info, Node: Non-atomic Example, Next: Atomic Types, Up: Atomic Data Access Problems with Non-Atomic Access @@ -646,8 +970,8 @@ modifying the signal mask. The prototype for the `sigprocmask' function is in `signal.h'. - - Function: int sigprocmask (int HOW, const sigset_t *SET, sigset_t - *OLDSET) + - Function: int sigprocmask (int HOW, const sigset_t *restrict SET, + sigset_t *restrict OLDSET) The `sigprocmask' function is used to examine or change the calling process's signal mask. The HOW argument determines how the signal mask is changed, and must be one of the following values: @@ -857,417 +1181,4 @@ probably only see one of them when you u *Portability Note:* The `sigpending' function is new in POSIX.1. Older systems have no equivalent facility. - - -File: libc.info, Node: Remembering a Signal, Prev: Checking for Pending Signals, Up: Blocking Signals - -Remembering a Signal to Act On Later ------------------------------------- - - Instead of blocking a signal using the library facilities, you can -get almost the same results by making the handler set a flag to be -tested later, when you "unblock". Here is an example: - - /* If this flag is nonzero, don't handle the signal right away. */ - volatile sig_atomic_t signal_pending; - - /* This is nonzero if a signal arrived and was not handled. */ - volatile sig_atomic_t defer_signal; - - void - handler (int signum) - { - if (defer_signal) - signal_pending = signum; - else - ... /* "Really" handle the signal. */ - } - - ... - - void - update_mumble (int frob) - { - /* Prevent signals from having immediate effect. */ - defer_signal++; - /* Now update `mumble', without worrying about interruption. */ - mumble.a = 1; - mumble.b = hack (); - mumble.c = frob; - /* We have updated `mumble'. Handle any signal that came in. */ - defer_signal--; - if (defer_signal == 0 && signal_pending != 0) - raise (signal_pending); - } - - Note how the particular signal that arrives is stored in -`signal_pending'. That way, we can handle several types of -inconvenient signals with the same mechanism. - - We increment and decrement `defer_signal' so that nested critical -sections will work properly; thus, if `update_mumble' were called with -`signal_pending' already nonzero, signals would be deferred not only -within `update_mumble', but also within the caller. This is also why -we do not check `signal_pending' if `defer_signal' is still nonzero. - - The incrementing and decrementing of `defer_signal' each require more -than one instruction; it is possible for a signal to happen in the -middle. But that does not cause any problem. If the signal happens -early enough to see the value from before the increment or decrement, -that is equivalent to a signal which came before the beginning of the -increment or decrement, which is a case that works properly. - - It is absolutely vital to decrement `defer_signal' before testing -`signal_pending', because this avoids a subtle bug. If we did these -things in the other order, like this, - - if (defer_signal == 1 && signal_pending != 0) - raise (signal_pending); - defer_signal--; - -then a signal arriving in between the `if' statement and the decrement -would be effectively "lost" for an indefinite amount of time. The -handler would merely set `defer_signal', but the program having already -tested this variable, it would not test the variable again. - - Bugs like these are called "timing errors". They are especially bad -because they happen only rarely and are nearly impossible to reproduce. -You can't expect to find them with a debugger as you would find a -reproducible bug. So it is worth being especially careful to avoid -them. - - (You would not be tempted to write the code in this order, given the -use of `defer_signal' as a counter which must be tested along with -`signal_pending'. After all, testing for zero is cleaner than testing -for one. But if you did not use `defer_signal' as a counter, and gave -it values of zero and one only, then either order might seem equally -simple. This is a further advantage of using a counter for -`defer_signal': it will reduce the chance you will write the code in -the wrong order and create a subtle bug.) - - -File: libc.info, Node: Waiting for a Signal, Next: Signal Stack, Prev: Blocking Signals, Up: Signal Handling - -Waiting for a Signal -==================== - - If your program is driven by external events, or uses signals for -synchronization, then when it has nothing to do it should probably wait -until a signal arrives. - -* Menu: - -* Using Pause:: The simple way, using `pause'. -* Pause Problems:: Why the simple way is often not very good. -* Sigsuspend:: Reliably waiting for a specific signal. - - -File: libc.info, Node: Using Pause, Next: Pause Problems, Up: Waiting for a Signal - -Using `pause' -------------- - - The simple way to wait until a signal arrives is to call `pause'. -Please read about its disadvantages, in the following section, before -you use it. - - - Function: int pause () - The `pause' function suspends program execution until a signal - arrives whose action is either to execute a handler function, or to - terminate the process. - - If the signal causes a handler function to be executed, then - `pause' returns. This is considered an unsuccessful return (since - "successful" behavior would be to suspend the program forever), so - the return value is `-1'. Even if you specify that other - primitives should resume when a system handler returns (*note - Interrupted Primitives::), this has no effect on `pause'; it - always fails when a signal is handled. - - The following `errno' error conditions are defined for this - function: - - `EINTR' - The function was interrupted by delivery of a signal. - - If the signal causes program termination, `pause' doesn't return - (obviously). - - This function is a cancellation point in multithreaded programs. - This is a problem if the thread allocates some resources (like - memory, file descriptors, semaphores or whatever) at the time - `pause' is called. If the thread gets cancelled these resources - stay allocated until the program ends. To avoid this calls to - `pause' should be protected using cancellation handlers. - - The `pause' function is declared in `unistd.h'. - - -File: libc.info, Node: Pause Problems, Next: Sigsuspend, Prev: Using Pause, Up: Waiting for a Signal - -Problems with `pause' ---------------------- - - The simplicity of `pause' can conceal serious timing errors that can -make a program hang mysteriously. - - It is safe to use `pause' if the real work of your program is done -by the signal handlers themselves, and the "main program" does nothing -but call `pause'. Each time a signal is delivered, the handler will do -the next batch of work that is to be done, and then return, so that the -main loop of the program can call `pause' again. - - You can't safely use `pause' to wait until one more signal arrives, -and then resume real work. Even if you arrange for the signal handler -to cooperate by setting a flag, you still can't use `pause' reliably. -Here is an example of this problem: - - /* `usr_interrupt' is set by the signal handler. */ - if (!usr_interrupt) - pause (); - - /* Do work once the signal arrives. */ - ... - -This has a bug: the signal could arrive after the variable -`usr_interrupt' is checked, but before the call to `pause'. If no -further signals arrive, the process would never wake up again. - - You can put an upper limit on the excess waiting by using `sleep' in -a loop, instead of using `pause'. (*Note Sleeping::, for more about -`sleep'.) Here is what this looks like: - - /* `usr_interrupt' is set by the signal handler. - while (!usr_interrupt) - sleep (1); - - /* Do work once the signal arrives. */ - ... - - For some purposes, that is good enough. But with a little more -complexity, you can wait reliably until a particular signal handler is -run, using `sigsuspend'. *Note Sigsuspend::. - - -File: libc.info, Node: Sigsuspend, Prev: Pause Problems, Up: Waiting for a Signal - -Using `sigsuspend' ------------------- - - The clean and reliable way to wait for a signal to arrive is to -block it and then use `sigsuspend'. By using `sigsuspend' in a loop, -you can wait for certain kinds of signals, while letting other kinds of -signals be handled by their handlers. - - - Function: int sigsuspend (const sigset_t *SET) - This function replaces the process's signal mask with SET and then - suspends the process until a signal is delivered whose action is - either to terminate the process or invoke a signal handling - function. In other words, the program is effectively suspended - until one of the signals that is not a member of SET arrives. - - If the process is woken up by delivery of a signal that invokes a - handler function, and the handler function returns, then - `sigsuspend' also returns. - - The mask remains SET only as long as `sigsuspend' is waiting. The - function `sigsuspend' always restores the previous signal mask - when it returns. - - The return value and error conditions are the same as for `pause'. - - With `sigsuspend', you can replace the `pause' or `sleep' loop in -the previous section with something completely reliable: - - sigset_t mask, oldmask; - - ... - - /* Set up the mask of signals to temporarily block. */ - sigemptyset (&mask); - sigaddset (&mask, SIGUSR1); - - ... - - /* Wait for a signal to arrive. */ - sigprocmask (SIG_BLOCK, &mask, &oldmask); - while (!usr_interrupt) - sigsuspend (&oldmask); - sigprocmask (SIG_UNBLOCK, &mask, NULL); - - This last piece of code is a little tricky. The key point to -remember here is that when `sigsuspend' returns, it resets the process's -signal mask to the original value, the value from before the call to -`sigsuspend'--in this case, the `SIGUSR1' signal is once again blocked. -The second call to `sigprocmask' is necessary to explicitly unblock -this signal. - - One other point: you may be wondering why the `while' loop is -necessary at all, since the program is apparently only waiting for one -`SIGUSR1' signal. The answer is that the mask passed to `sigsuspend' -permits the process to be woken up by the delivery of other kinds of -signals, as well--for example, job control signals. If the process is -woken up by a signal that doesn't set `usr_interrupt', it just suspends -itself again until the "right" kind of signal eventually arrives. - - This technique takes a few more lines of preparation, but that is -needed just once for each kind of wait criterion you want to use. The -code that actually waits is just four lines. - - -File: libc.info, Node: Signal Stack, Next: BSD Signal Handling, Prev: Waiting for a Signal, Up: Signal Handling - -Using a Separate Signal Stack -============================= - - A signal stack is a special area of memory to be used as the -execution stack during signal handlers. It should be fairly large, to -avoid any danger that it will overflow in turn; the macro `SIGSTKSZ' is -defined to a canonical size for signal stacks. You can use `malloc' to -allocate the space for the stack. Then call `sigaltstack' or -`sigstack' to tell the system to use that space for the signal stack. - - You don't need to write signal handlers differently in order to use a -signal stack. Switching from one stack to the other happens -automatically. (Some non-GNU debuggers on some machines may get -confused if you examine a stack trace while a handler that uses the -signal stack is running.) - - There are two interfaces for telling the system to use a separate -signal stack. `sigstack' is the older interface, which comes from 4.2 -BSD. `sigaltstack' is the newer interface, and comes from 4.4 BSD. -The `sigaltstack' interface has the advantage that it does not require -your program to know which direction the stack grows, which depends on -the specific machine and operating system. - - - Data Type: struct sigaltstack - This structure describes a signal stack. It contains the - following members: - - `void *ss_sp' - This points to the base of the signal stack. - - `size_t ss_size' - This is the size (in bytes) of the signal stack which `ss_sp' - points to. You should set this to however much space you - allocated for the stack. - - There are two macros defined in `signal.h' that you should - use in calculating this size: - - `SIGSTKSZ' - This is the canonical size for a signal stack. It is - judged to be sufficient for normal uses. - - `MINSIGSTKSZ' - This is the amount of signal stack space the operating - system needs just to implement signal delivery. The - size of a signal stack *must* be greater than this. - - For most cases, just using `SIGSTKSZ' for `ss_size' is - sufficient. But if you know how much stack space your - program's signal handlers will need, you may want to use - a different size. In this case, you should allocate - `MINSIGSTKSZ' additional bytes for the signal stack and - increase `ss_size' accordingly. - - `int ss_flags' - This field contains the bitwise OR of these flags: - - `SS_DISABLE' - This tells the system that it should not use the signal - stack. - - `SS_ONSTACK' - This is set by the system, and indicates that the signal - stack is currently in use. If this bit is not set, then - signals will be delivered on the normal user stack. - - - Function: int sigaltstack (const struct sigaltstack *STACK, struct - sigaltstack *OLDSTACK) - The `sigaltstack' function specifies an alternate stack for use - during signal handling. When a signal is received by the process - and its action indicates that the signal stack is used, the system - arranges a switch to the currently installed signal stack while - the handler for that signal is executed. - - If OLDSTACK is not a null pointer, information about the currently - installed signal stack is returned in the location it points to. - If STACK is not a null pointer, then this is installed as the new - stack for use by signal handlers. - - The return value is `0' on success and `-1' on failure. If - `sigaltstack' fails, it sets `errno' to one of these values: - - `EINVAL' - You tried to disable a stack that was in fact currently in - use. - - `ENOMEM' - The size of the alternate stack was too small. It must be - greater than `MINSIGSTKSZ'. - - Here is the older `sigstack' interface. You should use -`sigaltstack' instead on systems that have it. - - - Data Type: struct sigstack - This structure describes a signal stack. It contains the - following members: - - `void *ss_sp' - This is the stack pointer. If the stack grows downwards on - your machine, this should point to the top of the area you - allocated. If the stack grows upwards, it should point to - the bottom. - - `int ss_onstack' - This field is true if the process is currently using this - stack. - - - Function: int sigstack (const struct sigstack *STACK, struct - sigstack *OLDSTACK) - The `sigstack' function specifies an alternate stack for use during - signal handling. When a signal is received by the process and its - action indicates that the signal stack is used, the system - arranges a switch to the currently installed signal stack while - the handler for that signal is executed. - - If OLDSTACK is not a null pointer, information about the currently - installed signal stack is returned in the location it points to. - If STACK is not a null pointer, then this is installed as the new - stack for use by signal handlers. - - The return value is `0' on success and `-1' on failure. - - -File: libc.info, Node: BSD Signal Handling, Prev: Signal Stack, Up: Signal Handling - -BSD Signal Handling -=================== - - This section describes alternative signal handling functions derived -from BSD Unix. These facilities were an advance, in their time; today, -they are mostly obsolete, and supported mainly for compatibility with -BSD Unix. - - There are many similarities between the BSD and POSIX signal handling -facilities, because the POSIX facilities were inspired by the BSD -facilities. Besides having different names for all the functions to -avoid conflicts, the main differences between the two are: - - * BSD Unix represents signal masks as an `int' bit mask, rather than - as a `sigset_t' object. - - * The BSD facilities use a different default for whether an - interrupted primitive should fail or resume. The POSIX facilities - make system calls fail unless you specify that they should resume. - With the BSD facility, the default is to make system calls resume - unless you say they should fail. *Note Interrupted Primitives::. - - The BSD facilities are declared in `signal.h'. - -* Menu: - -* BSD Handler:: BSD Function to Establish a Handler. -* Blocking in BSD:: BSD Functions for Blocking Signals. diff -durpNa glibc-2.2.2/manual/libc.info-39 glibc-2.2.3/manual/libc.info-39 --- glibc-2.2.2/manual/libc.info-39 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-39 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,419 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Remembering a Signal, Prev: Checking for Pending Signals, Up: Blocking Signals + +Remembering a Signal to Act On Later +------------------------------------ + + Instead of blocking a signal using the library facilities, you can +get almost the same results by making the handler set a flag to be +tested later, when you "unblock". Here is an example: + + /* If this flag is nonzero, don't handle the signal right away. */ + volatile sig_atomic_t signal_pending; + + /* This is nonzero if a signal arrived and was not handled. */ + volatile sig_atomic_t defer_signal; + + void + handler (int signum) + { + if (defer_signal) + signal_pending = signum; + else + ... /* "Really" handle the signal. */ + } + + ... + + void + update_mumble (int frob) + { + /* Prevent signals from having immediate effect. */ + defer_signal++; + /* Now update `mumble', without worrying about interruption. */ + mumble.a = 1; + mumble.b = hack (); + mumble.c = frob; + /* We have updated `mumble'. Handle any signal that came in. */ + defer_signal--; + if (defer_signal == 0 && signal_pending != 0) + raise (signal_pending); + } + + Note how the particular signal that arrives is stored in +`signal_pending'. That way, we can handle several types of +inconvenient signals with the same mechanism. + + We increment and decrement `defer_signal' so that nested critical +sections will work properly; thus, if `update_mumble' were called with +`signal_pending' already nonzero, signals would be deferred not only +within `update_mumble', but also within the caller. This is also why +we do not check `signal_pending' if `defer_signal' is still nonzero. + + The incrementing and decrementing of `defer_signal' each require more +than one instruction; it is possible for a signal to happen in the +middle. But that does not cause any problem. If the signal happens +early enough to see the value from before the increment or decrement, +that is equivalent to a signal which came before the beginning of the +increment or decrement, which is a case that works properly. + + It is absolutely vital to decrement `defer_signal' before testing +`signal_pending', because this avoids a subtle bug. If we did these +things in the other order, like this, + + if (defer_signal == 1 && signal_pending != 0) + raise (signal_pending); + defer_signal--; + +then a signal arriving in between the `if' statement and the decrement +would be effectively "lost" for an indefinite amount of time. The +handler would merely set `defer_signal', but the program having already +tested this variable, it would not test the variable again. + + Bugs like these are called "timing errors". They are especially bad +because they happen only rarely and are nearly impossible to reproduce. +You can't expect to find them with a debugger as you would find a +reproducible bug. So it is worth being especially careful to avoid +them. + + (You would not be tempted to write the code in this order, given the +use of `defer_signal' as a counter which must be tested along with +`signal_pending'. After all, testing for zero is cleaner than testing +for one. But if you did not use `defer_signal' as a counter, and gave +it values of zero and one only, then either order might seem equally +simple. This is a further advantage of using a counter for +`defer_signal': it will reduce the chance you will write the code in +the wrong order and create a subtle bug.) + + +File: libc.info, Node: Waiting for a Signal, Next: Signal Stack, Prev: Blocking Signals, Up: Signal Handling + +Waiting for a Signal +==================== + + If your program is driven by external events, or uses signals for +synchronization, then when it has nothing to do it should probably wait +until a signal arrives. + +* Menu: + +* Using Pause:: The simple way, using `pause'. +* Pause Problems:: Why the simple way is often not very good. +* Sigsuspend:: Reliably waiting for a specific signal. + + +File: libc.info, Node: Using Pause, Next: Pause Problems, Up: Waiting for a Signal + +Using `pause' +------------- + + The simple way to wait until a signal arrives is to call `pause'. +Please read about its disadvantages, in the following section, before +you use it. + + - Function: int pause () + The `pause' function suspends program execution until a signal + arrives whose action is either to execute a handler function, or to + terminate the process. + + If the signal causes a handler function to be executed, then + `pause' returns. This is considered an unsuccessful return (since + "successful" behavior would be to suspend the program forever), so + the return value is `-1'. Even if you specify that other + primitives should resume when a system handler returns (*note + Interrupted Primitives::), this has no effect on `pause'; it + always fails when a signal is handled. + + The following `errno' error conditions are defined for this + function: + + `EINTR' + The function was interrupted by delivery of a signal. + + If the signal causes program termination, `pause' doesn't return + (obviously). + + This function is a cancellation point in multithreaded programs. + This is a problem if the thread allocates some resources (like + memory, file descriptors, semaphores or whatever) at the time + `pause' is called. If the thread gets cancelled these resources + stay allocated until the program ends. To avoid this calls to + `pause' should be protected using cancellation handlers. + + The `pause' function is declared in `unistd.h'. + + +File: libc.info, Node: Pause Problems, Next: Sigsuspend, Prev: Using Pause, Up: Waiting for a Signal + +Problems with `pause' +--------------------- + + The simplicity of `pause' can conceal serious timing errors that can +make a program hang mysteriously. + + It is safe to use `pause' if the real work of your program is done +by the signal handlers themselves, and the "main program" does nothing +but call `pause'. Each time a signal is delivered, the handler will do +the next batch of work that is to be done, and then return, so that the +main loop of the program can call `pause' again. + + You can't safely use `pause' to wait until one more signal arrives, +and then resume real work. Even if you arrange for the signal handler +to cooperate by setting a flag, you still can't use `pause' reliably. +Here is an example of this problem: + + /* `usr_interrupt' is set by the signal handler. */ + if (!usr_interrupt) + pause (); + + /* Do work once the signal arrives. */ + ... + +This has a bug: the signal could arrive after the variable +`usr_interrupt' is checked, but before the call to `pause'. If no +further signals arrive, the process would never wake up again. + + You can put an upper limit on the excess waiting by using `sleep' in +a loop, instead of using `pause'. (*Note Sleeping::, for more about +`sleep'.) Here is what this looks like: + + /* `usr_interrupt' is set by the signal handler. + while (!usr_interrupt) + sleep (1); + + /* Do work once the signal arrives. */ + ... + + For some purposes, that is good enough. But with a little more +complexity, you can wait reliably until a particular signal handler is +run, using `sigsuspend'. *Note Sigsuspend::. + + +File: libc.info, Node: Sigsuspend, Prev: Pause Problems, Up: Waiting for a Signal + +Using `sigsuspend' +------------------ + + The clean and reliable way to wait for a signal to arrive is to +block it and then use `sigsuspend'. By using `sigsuspend' in a loop, +you can wait for certain kinds of signals, while letting other kinds of +signals be handled by their handlers. + + - Function: int sigsuspend (const sigset_t *SET) + This function replaces the process's signal mask with SET and then + suspends the process until a signal is delivered whose action is + either to terminate the process or invoke a signal handling + function. In other words, the program is effectively suspended + until one of the signals that is not a member of SET arrives. + + If the process is woken up by delivery of a signal that invokes a + handler function, and the handler function returns, then + `sigsuspend' also returns. + + The mask remains SET only as long as `sigsuspend' is waiting. The + function `sigsuspend' always restores the previous signal mask + when it returns. + + The return value and error conditions are the same as for `pause'. + + With `sigsuspend', you can replace the `pause' or `sleep' loop in +the previous section with something completely reliable: + + sigset_t mask, oldmask; + + ... + + /* Set up the mask of signals to temporarily block. */ + sigemptyset (&mask); + sigaddset (&mask, SIGUSR1); + + ... + + /* Wait for a signal to arrive. */ + sigprocmask (SIG_BLOCK, &mask, &oldmask); + while (!usr_interrupt) + sigsuspend (&oldmask); + sigprocmask (SIG_UNBLOCK, &mask, NULL); + + This last piece of code is a little tricky. The key point to +remember here is that when `sigsuspend' returns, it resets the process's +signal mask to the original value, the value from before the call to +`sigsuspend'--in this case, the `SIGUSR1' signal is once again blocked. +The second call to `sigprocmask' is necessary to explicitly unblock +this signal. + + One other point: you may be wondering why the `while' loop is +necessary at all, since the program is apparently only waiting for one +`SIGUSR1' signal. The answer is that the mask passed to `sigsuspend' +permits the process to be woken up by the delivery of other kinds of +signals, as well--for example, job control signals. If the process is +woken up by a signal that doesn't set `usr_interrupt', it just suspends +itself again until the "right" kind of signal eventually arrives. + + This technique takes a few more lines of preparation, but that is +needed just once for each kind of wait criterion you want to use. The +code that actually waits is just four lines. + + +File: libc.info, Node: Signal Stack, Next: BSD Signal Handling, Prev: Waiting for a Signal, Up: Signal Handling + +Using a Separate Signal Stack +============================= + + A signal stack is a special area of memory to be used as the +execution stack during signal handlers. It should be fairly large, to +avoid any danger that it will overflow in turn; the macro `SIGSTKSZ' is +defined to a canonical size for signal stacks. You can use `malloc' to +allocate the space for the stack. Then call `sigaltstack' or +`sigstack' to tell the system to use that space for the signal stack. + + You don't need to write signal handlers differently in order to use a +signal stack. Switching from one stack to the other happens +automatically. (Some non-GNU debuggers on some machines may get +confused if you examine a stack trace while a handler that uses the +signal stack is running.) + + There are two interfaces for telling the system to use a separate +signal stack. `sigstack' is the older interface, which comes from 4.2 +BSD. `sigaltstack' is the newer interface, and comes from 4.4 BSD. +The `sigaltstack' interface has the advantage that it does not require +your program to know which direction the stack grows, which depends on +the specific machine and operating system. + + - Data Type: stack_t + This structure describes a signal stack. It contains the + following members: + + `void *ss_sp' + This points to the base of the signal stack. + + `size_t ss_size' + This is the size (in bytes) of the signal stack which `ss_sp' + points to. You should set this to however much space you + allocated for the stack. + + There are two macros defined in `signal.h' that you should + use in calculating this size: + + `SIGSTKSZ' + This is the canonical size for a signal stack. It is + judged to be sufficient for normal uses. + + `MINSIGSTKSZ' + This is the amount of signal stack space the operating + system needs just to implement signal delivery. The + size of a signal stack *must* be greater than this. + + For most cases, just using `SIGSTKSZ' for `ss_size' is + sufficient. But if you know how much stack space your + program's signal handlers will need, you may want to use + a different size. In this case, you should allocate + `MINSIGSTKSZ' additional bytes for the signal stack and + increase `ss_size' accordingly. + + `int ss_flags' + This field contains the bitwise OR of these flags: + + `SS_DISABLE' + This tells the system that it should not use the signal + stack. + + `SS_ONSTACK' + This is set by the system, and indicates that the signal + stack is currently in use. If this bit is not set, then + signals will be delivered on the normal user stack. + + - Function: int sigaltstack (const stack_t *restrict STACK, stack_t + *restrict OLDSTACK) + The `sigaltstack' function specifies an alternate stack for use + during signal handling. When a signal is received by the process + and its action indicates that the signal stack is used, the system + arranges a switch to the currently installed signal stack while + the handler for that signal is executed. + + If OLDSTACK is not a null pointer, information about the currently + installed signal stack is returned in the location it points to. + If STACK is not a null pointer, then this is installed as the new + stack for use by signal handlers. + + The return value is `0' on success and `-1' on failure. If + `sigaltstack' fails, it sets `errno' to one of these values: + + `EINVAL' + You tried to disable a stack that was in fact currently in + use. + + `ENOMEM' + The size of the alternate stack was too small. It must be + greater than `MINSIGSTKSZ'. + + Here is the older `sigstack' interface. You should use +`sigaltstack' instead on systems that have it. + + - Data Type: struct sigstack + This structure describes a signal stack. It contains the + following members: + + `void *ss_sp' + This is the stack pointer. If the stack grows downwards on + your machine, this should point to the top of the area you + allocated. If the stack grows upwards, it should point to + the bottom. + + `int ss_onstack' + This field is true if the process is currently using this + stack. + + - Function: int sigstack (const struct sigstack *STACK, struct + sigstack *OLDSTACK) + The `sigstack' function specifies an alternate stack for use during + signal handling. When a signal is received by the process and its + action indicates that the signal stack is used, the system + arranges a switch to the currently installed signal stack while + the handler for that signal is executed. + + If OLDSTACK is not a null pointer, information about the currently + installed signal stack is returned in the location it points to. + If STACK is not a null pointer, then this is installed as the new + stack for use by signal handlers. + + The return value is `0' on success and `-1' on failure. + + +File: libc.info, Node: BSD Signal Handling, Prev: Signal Stack, Up: Signal Handling + +BSD Signal Handling +=================== + + This section describes alternative signal handling functions derived +from BSD Unix. These facilities were an advance, in their time; today, +they are mostly obsolete, and supported mainly for compatibility with +BSD Unix. + + There are many similarities between the BSD and POSIX signal handling +facilities, because the POSIX facilities were inspired by the BSD +facilities. Besides having different names for all the functions to +avoid conflicts, the main differences between the two are: + + * BSD Unix represents signal masks as an `int' bit mask, rather than + as a `sigset_t' object. + + * The BSD facilities use a different default for whether an + interrupted primitive should fail or resume. The POSIX facilities + make system calls fail unless you specify that they should resume. + With the BSD facility, the default is to make system calls resume + unless you say they should fail. *Note Interrupted Primitives::. + + The BSD facilities are declared in `signal.h'. + +* Menu: + +* BSD Handler:: BSD Function to Establish a Handler. +* Blocking in BSD:: BSD Functions for Blocking Signals. + + File: libc.info, Node: BSD Handler, Next: Blocking in BSD, Up: BSD Signal Handling BSD Function to Establish a Handler @@ -833,393 +1246,4 @@ the `--version' option and provide a bug The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to `EX_USAGE' from `'. - - -File: libc.info, Node: Argp Parsers, Next: Argp Flags, Prev: Argp Global Variables, Up: Argp - -Specifying Argp Parsers ------------------------ - - The first argument to the `argp_parse' function is a pointer to a -`struct argp', which known as an "argp parser": - - - Data Type: struct argp - This structure specifies how to parse a given set of options and - arguments, perhaps in conjunction with other argp parsers. It has - the following fields: - - `const struct argp_option *options' - A pointer to a vector of `argp_option' structures specifying - which options this argp parser understands; it may be zero if - there are no options at all. *Note Argp Option Vectors::. - - `argp_parser_t parser' - A pointer to a function that defines actions for this parser; - it is called for each option parsed, and at other - well-defined points in the parsing process. A value of zero - is the same as a pointer to a function that always returns - `ARGP_ERR_UNKNOWN'. *Note Argp Parser Functions::. - - `const char *args_doc' - If non-zero, a string describing what non-option arguments - are wanted by this parser; it is only used to print the - `Usage:' message. If it contains newlines, the strings - separated by them are considered alternative usage patterns, - and printed on separate lines (lines after the first are - prefixed by ` or: ' instead of `Usage:'). - - `const char *doc' - If non-zero, a string containing extra text to be printed - before and after the options in a long help message, with the - two sections separated by a vertical tab (`'\v'', `'\013'') - character. By convention, the documentation before the - options is just a short string saying what the program does, - and that afterwards is longer, describing the behavior in - more detail. - - `const struct argp_child *children' - A pointer to a vector of `argp_children' structures specifying - additional argp parsers that should be combined with this one. - *Note Argp Children::. - - `char *(*help_filter)(int KEY, const char *TEXT, void *INPUT)' - If non-zero, a pointer to a function to filter the output of - help messages. *Note Argp Help Filtering::. - - `const char *argp_domain' - If non-zero, the strings used in the argp library are - translated using the domain described by this string. - Otherwise the currently installed default domain is used. - - - The `options', `parser', `args_doc', and `doc' fields are usually -all that are needed. If an argp parser is defined as an initialized C -variable, only the used fields need be specified in the -initializer--the rest will default to zero due to the way C structure -initialization works (this fact is exploited for most argp structures, -grouping the most-used fields near the beginning, so that unused fields -can simply be left unspecified). - -* Menu: - -* Options: Argp Option Vectors. Specifying options in an argp parser. -* Argp Parser Functions:: Defining actions for an argp parser. -* Children: Argp Children. Combining multiple argp parsers. -* Help Filtering: Argp Help Filtering. Customizing help output for an argp parser. - - -File: libc.info, Node: Argp Option Vectors, Next: Argp Parser Functions, Prev: Argp Parsers, Up: Argp Parsers - -Specifying Options in an Argp Parser ------------------------------------- - - The `options' field in a `struct argp' points to a vector of `struct -argp_option' structures, each of which specifies an option that argp -parser supports (actually, sometimes multiple entries may used for a -single option if it has many names). It should be terminated by an -entry with zero in all fields (note that when using an initialized C -array for options, writing `{ 0 }' is enough to achieve this). - - - Data Type: struct argp_option - This structure specifies a single option that an argp parser - understands, and how to parse and document it. It has the - following fields: - - `const char *name' - The long name for this option, corresponding to the long - option `--NAME'; this field can be zero if this option only - has a short name. To specify multiple names for an option, - additional entries may follow this one, with the - `OPTION_ALIAS' flag set (*note Argp Option Flags::). - - `int key' - The integer key that is provided to the argp parser's parsing - function when this option is being parsed. Also, if KEY has - a value that is a printable ASCII character (i.e., `isascii - (KEY)' is true), it _also_ specifies a short option `-CHAR', - where CHAR is the ASCII character with the code KEY. - - `const char *arg' - If non-zero, this is the name of an argument associated with - this option, which must be provided (e.g., with the - `--NAME=VALUE' or `-CHAR VALUE' syntaxes) unless the - `OPTION_ARG_OPTIONAL' flag (*note Argp Option Flags::) is - set, in which case it _may_ be provided. - - `int flags' - Flags associated with this option (some of which are referred - to above). *Note Argp Option Flags::. - - `const char *doc' - A documentation string for this option, for printing in help - messages. - - If both the `name' and `key' fields are zero, this string - will be printed out-dented from the normal option column, - making it useful as a group header (it will be the first - thing printed in its group); in this usage, it's conventional - to end the string with a `:' character. - - `int group' - The group this option is in. - - In a long help message, options are sorted alphabetically - within each group, and the groups presented in the order 0, - 1, 2, ..., N, -M, ..., -2, -1. Every entry in an options - array with this field 0 will inherit the group number of the - previous entry, or zero if it's the first one, unless its a - group header (`name' and `key' fields both zero), in which - case, the previous entry + 1 is the default. Automagic - options such as `--help' are put into group -1. - - Note that because of C structure initialization rules, this - field often need not be specified, because 0 is the right - value. - -* Menu: - -* Flags: Argp Option Flags. Flags for options. - - -File: libc.info, Node: Argp Option Flags, Up: Argp Option Vectors - -Flags for Argp Options -...................... - - The following flags may be or'd together in the `flags' field of a -`struct argp_option', and control various aspects of how that option is -parsed or displayed in help messages: - -`OPTION_ARG_OPTIONAL' - The argument associated with this option is optional. - -`OPTION_HIDDEN' - This option isn't displayed in any help messages. - -`OPTION_ALIAS' - This option is an alias for the closest previous non-alias option. - This means that it will be displayed in the same help entry, and - will inherit fields other than `name' and `key' from the aliased - option. - -`OPTION_DOC' - This option isn't actually an option (and so should be ignored by - the actual option parser), but rather an arbitrary piece of - documentation that should be displayed in much the same manner as - the options (known as a "documentation option"). - - If this flag is set, then the option `name' field is displayed - unmodified (e.g., no `--' prefix is added) at the left-margin - (where a _short_ option would normally be displayed), and the - documentation string in the normal place. For purposes of - sorting, any leading whitespace and punctuation is ignored, except - that if the first non-whitespace character is not `-', this entry - is displayed after all options (and `OPTION_DOC' entries with a - leading `-') in the same group. - -`OPTION_NO_USAGE' - This option shouldn't be included in `long' usage messages (but is - still included in help messages). This is mainly intended for - options that are completely documented in an argp's `args_doc' - field (*note Argp Parsers::), in which case including the option - in the generic usage list would be redundant. - - For instance, if `args_doc' is `"FOO BAR\n-x BLAH"', and the `-x' - option's purpose is to distinguish these two cases, `-x' should - probably be marked `OPTION_NO_USAGE'. - - -File: libc.info, Node: Argp Parser Functions, Next: Argp Children, Prev: Argp Option Vectors, Up: Argp Parsers - -Argp Parser Functions ---------------------- - - The function pointed to by the `parser' field in a `struct argp' -(*note Argp Parsers::) defines what actions take place in response to -each option or argument that is parsed, and is also used as a hook, to -allow a parser to do something at certain other points during parsing. - - Argp parser functions have the following type signature: - - error_t PARSER (int KEY, char *ARG, struct argp_state *STATE) - -where the arguments are as follows: - -KEY - For each option that is parsed, PARSER is called with a value of - KEY from that option's `key' field in the option vector (*note - Argp Option Vectors::). PARSER is also called at other times with - special reserved keys, such as `ARGP_KEY_ARG' for non-option - arguments. *Note Argp Special Keys::. - -ARG - If KEY is an option, ARG is the value given for it, or zero if no - value was specified. Only options that have a non-zero `arg' - field can ever have a value, and those must _always_ have a value, - unless the `OPTION_ARG_OPTIONAL' flag was specified (if the input - being parsed specifies a value for an option that doesn't allow - one, an error results before PARSER ever gets called). - - If KEY is `ARGP_KEY_ARG', ARG is a non-option argument; other - special keys always have a zero ARG. - -STATE - STATE points to a `struct argp_state', containing useful - information about the current parsing state for use by PARSER. - *Note Argp Parsing State::. - - When PARSER is called, it should perform whatever action is -appropriate for KEY, and return either `0' for success, -`ARGP_ERR_UNKNOWN', if the value of KEY is not handled by this parser -function, or a unix error code if a real error occurred (*note Error -Codes::). - - - Macro: int ARGP_ERR_UNKNOWN - Argp parser functions should return `ARGP_ERR_UNKNOWN' for any KEY - value they do not recognize, or for non-option arguments (`KEY == - ARGP_KEY_ARG') that they do not wish to handle. - - A typical parser function uses a switch statement on KEY: - - error_t - parse_opt (int key, char *arg, struct argp_state *state) - { - switch (key) - { - case OPTION_KEY: - ACTION - break; - ... - default: - return ARGP_ERR_UNKNOWN; - } - return 0; - } - -* Menu: - -* Keys: Argp Special Keys. Special values for the KEY argument. -* State: Argp Parsing State. What the STATE argument refers to. -* Functions: Argp Helper Functions. Functions to help during argp parsing. - - -File: libc.info, Node: Argp Special Keys, Next: Argp Parsing State, Up: Argp Parser Functions - -Special Keys for Argp Parser Functions -...................................... - - In addition to key values corresponding to user options, the KEY -argument to argp parser functions may have a number of other special -values (ARG and STATE refer to parser function arguments; *note Argp -Parser Functions::): - -`ARGP_KEY_ARG' - This is not an option at all, but rather a command line argument, - whose value is pointed to by ARG. - - When there are multiple parser functions (due to argp parsers being - combined), it's impossible to know which one wants to handle an - argument, so each is called in turn, until one returns 0 or an - error other than `ARGP_ERR_UNKNOWN'; if an argument is handled by - no one, `argp_parse' immediately returns success, without parsing - any more arguments. - - Once a parser function returns success for this key, that fact is - recorded, and the `ARGP_KEY_NO_ARGS' case won't be used. - _However_, if while processing the argument, a parser function - decrements the `next' field of its STATE argument, the option - won't be considered processed; this is to allow you to actually - modify the argument (perhaps into an option), and have it - processed again. - -`ARGP_KEY_ARGS' - If a parser function returns `ARGP_ERR_UNKNOWN' for - `ARGP_KEY_ARG', it is immediately called again with the key - `ARGP_KEY_ARGS', which has a similar meaning, but is slightly more - convenient for consuming all remaining arguments. ARG is 0, and - the tail of the argument vector may be found at `STATE->argv + - STATE->next'. If success is returned for this key, and - `STATE->next' is unchanged, then all remaining arguments are - considered to have been consumed, otherwise, the amount by which - `STATE->next' has been adjust indicates how many were used. For - instance, here's an example that uses both, for different args: - - ... - case ARGP_KEY_ARG: - if (STATE->arg_num == 0) - /* First argument */ - first_arg = ARG; - else - /* Let the next case parse it. */ - return ARGP_KEY_UNKNOWN; - break; - case ARGP_KEY_ARGS: - remaining_args = STATE->argv + STATE->next; - num_remaining_args = STATE->argc - STATE->next; - break; - -`ARGP_KEY_END' - There are no more command line arguments at all. The parser - functions are called in different order (means children first) for - this value which allows each parser to clean up its state for the - parent. - -`ARGP_KEY_NO_ARGS' - Because it's common to want to do some special processing if there - aren't any non-option args, parser functions are called with this - key if they didn't successfully process any non-option arguments. - Called just before `ARGP_KEY_END' (where more general validity - checks on previously parsed arguments can take place). - -`ARGP_KEY_INIT' - Passed in before any parsing is done. Afterwards, the values of - each element of the `child_input' field of STATE, if any, are - copied to each child's state to be the initial value of the `input' - when _their_ parsers are called. - -`ARGP_KEY_SUCCESS' - Passed in when parsing has successfully been completed (even if - there are still arguments remaining). - -`ARGP_KEY_ERROR' - Passed in if an error has occurred, and parsing terminated (in - which case a call with a key of `ARGP_KEY_SUCCESS' is never made). - -`ARGP_KEY_FINI' - The final key ever seen by any parser (even after - `ARGP_KEY_SUCCESS' and `ARGP_KEY_ERROR'). Any resources allocated - by `ARGP_KEY_INIT' may be freed here (although sometimes certain - resources allocated there are to be returned to the caller after a - successful parse; in that case, those particular resources can be - freed in the `ARGP_KEY_ERROR' case). - - In all cases, `ARGP_KEY_INIT' is the first key seen by parser -functions, and `ARGP_KEY_FINI' the last (unless an error was returned -by the parser for `ARGP_KEY_INIT'). Other keys can occur in one the -following orders (OPT refers to an arbitrary option key): - -OPT... `ARGP_KEY_NO_ARGS' `ARGP_KEY_END' `ARGP_KEY_SUCCESS' - The arguments being parsed contained no non-option arguments at - all. - -( OPT | `ARGP_KEY_ARG' )... `ARGP_KEY_END' `ARGP_KEY_SUCCESS' - All non-option arguments were successfully handled by a parser - function (there may be multiple parser functions if multiple argp - parsers were combined). - -( OPT | `ARGP_KEY_ARG' )... `ARGP_KEY_SUCCESS' - Some non-option argument was unrecognized. - - This occurs when every parser function returns `ARGP_KEY_UNKNOWN' - for an argument, in which case parsing stops at that argument. If - ARG_INDEX is a null pointer otherwise an error occurs. - - In all cases, if a non-null value for ARG_INDEX was passed to -`argp_parse', the index of the first unparsed command-line argument is -passed back in it. - - If an error occurs (either detected by argp, or because a parser -function returned an error value), then each parser is called with -`ARGP_KEY_ERROR', and no further calls are made except the final call -with `ARGP_KEY_FINI'. diff -durpNa glibc-2.2.2/manual/libc.info-40 glibc-2.2.3/manual/libc.info-40 --- glibc-2.2.2/manual/libc.info-40 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-40 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,395 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Argp Parsers, Next: Argp Flags, Prev: Argp Global Variables, Up: Argp + +Specifying Argp Parsers +----------------------- + + The first argument to the `argp_parse' function is a pointer to a +`struct argp', which known as an "argp parser": + + - Data Type: struct argp + This structure specifies how to parse a given set of options and + arguments, perhaps in conjunction with other argp parsers. It has + the following fields: + + `const struct argp_option *options' + A pointer to a vector of `argp_option' structures specifying + which options this argp parser understands; it may be zero if + there are no options at all. *Note Argp Option Vectors::. + + `argp_parser_t parser' + A pointer to a function that defines actions for this parser; + it is called for each option parsed, and at other + well-defined points in the parsing process. A value of zero + is the same as a pointer to a function that always returns + `ARGP_ERR_UNKNOWN'. *Note Argp Parser Functions::. + + `const char *args_doc' + If non-zero, a string describing what non-option arguments + are wanted by this parser; it is only used to print the + `Usage:' message. If it contains newlines, the strings + separated by them are considered alternative usage patterns, + and printed on separate lines (lines after the first are + prefixed by ` or: ' instead of `Usage:'). + + `const char *doc' + If non-zero, a string containing extra text to be printed + before and after the options in a long help message, with the + two sections separated by a vertical tab (`'\v'', `'\013'') + character. By convention, the documentation before the + options is just a short string saying what the program does, + and that afterwards is longer, describing the behavior in + more detail. + + `const struct argp_child *children' + A pointer to a vector of `argp_children' structures specifying + additional argp parsers that should be combined with this one. + *Note Argp Children::. + + `char *(*help_filter)(int KEY, const char *TEXT, void *INPUT)' + If non-zero, a pointer to a function to filter the output of + help messages. *Note Argp Help Filtering::. + + `const char *argp_domain' + If non-zero, the strings used in the argp library are + translated using the domain described by this string. + Otherwise the currently installed default domain is used. + + + The `options', `parser', `args_doc', and `doc' fields are usually +all that are needed. If an argp parser is defined as an initialized C +variable, only the used fields need be specified in the +initializer--the rest will default to zero due to the way C structure +initialization works (this fact is exploited for most argp structures, +grouping the most-used fields near the beginning, so that unused fields +can simply be left unspecified). + +* Menu: + +* Options: Argp Option Vectors. Specifying options in an argp parser. +* Argp Parser Functions:: Defining actions for an argp parser. +* Children: Argp Children. Combining multiple argp parsers. +* Help Filtering: Argp Help Filtering. Customizing help output for an argp parser. + + +File: libc.info, Node: Argp Option Vectors, Next: Argp Parser Functions, Prev: Argp Parsers, Up: Argp Parsers + +Specifying Options in an Argp Parser +------------------------------------ + + The `options' field in a `struct argp' points to a vector of `struct +argp_option' structures, each of which specifies an option that argp +parser supports (actually, sometimes multiple entries may used for a +single option if it has many names). It should be terminated by an +entry with zero in all fields (note that when using an initialized C +array for options, writing `{ 0 }' is enough to achieve this). + + - Data Type: struct argp_option + This structure specifies a single option that an argp parser + understands, and how to parse and document it. It has the + following fields: + + `const char *name' + The long name for this option, corresponding to the long + option `--NAME'; this field can be zero if this option only + has a short name. To specify multiple names for an option, + additional entries may follow this one, with the + `OPTION_ALIAS' flag set (*note Argp Option Flags::). + + `int key' + The integer key that is provided to the argp parser's parsing + function when this option is being parsed. Also, if KEY has + a value that is a printable ASCII character (i.e., `isascii + (KEY)' is true), it _also_ specifies a short option `-CHAR', + where CHAR is the ASCII character with the code KEY. + + `const char *arg' + If non-zero, this is the name of an argument associated with + this option, which must be provided (e.g., with the + `--NAME=VALUE' or `-CHAR VALUE' syntaxes) unless the + `OPTION_ARG_OPTIONAL' flag (*note Argp Option Flags::) is + set, in which case it _may_ be provided. + + `int flags' + Flags associated with this option (some of which are referred + to above). *Note Argp Option Flags::. + + `const char *doc' + A documentation string for this option, for printing in help + messages. + + If both the `name' and `key' fields are zero, this string + will be printed out-dented from the normal option column, + making it useful as a group header (it will be the first + thing printed in its group); in this usage, it's conventional + to end the string with a `:' character. + + `int group' + The group this option is in. + + In a long help message, options are sorted alphabetically + within each group, and the groups presented in the order 0, + 1, 2, ..., N, -M, ..., -2, -1. Every entry in an options + array with this field 0 will inherit the group number of the + previous entry, or zero if it's the first one, unless its a + group header (`name' and `key' fields both zero), in which + case, the previous entry + 1 is the default. Automagic + options such as `--help' are put into group -1. + + Note that because of C structure initialization rules, this + field often need not be specified, because 0 is the right + value. + +* Menu: + +* Flags: Argp Option Flags. Flags for options. + + +File: libc.info, Node: Argp Option Flags, Up: Argp Option Vectors + +Flags for Argp Options +...................... + + The following flags may be or'd together in the `flags' field of a +`struct argp_option', and control various aspects of how that option is +parsed or displayed in help messages: + +`OPTION_ARG_OPTIONAL' + The argument associated with this option is optional. + +`OPTION_HIDDEN' + This option isn't displayed in any help messages. + +`OPTION_ALIAS' + This option is an alias for the closest previous non-alias option. + This means that it will be displayed in the same help entry, and + will inherit fields other than `name' and `key' from the aliased + option. + +`OPTION_DOC' + This option isn't actually an option (and so should be ignored by + the actual option parser), but rather an arbitrary piece of + documentation that should be displayed in much the same manner as + the options (known as a "documentation option"). + + If this flag is set, then the option `name' field is displayed + unmodified (e.g., no `--' prefix is added) at the left-margin + (where a _short_ option would normally be displayed), and the + documentation string in the normal place. For purposes of + sorting, any leading whitespace and punctuation is ignored, except + that if the first non-whitespace character is not `-', this entry + is displayed after all options (and `OPTION_DOC' entries with a + leading `-') in the same group. + +`OPTION_NO_USAGE' + This option shouldn't be included in `long' usage messages (but is + still included in help messages). This is mainly intended for + options that are completely documented in an argp's `args_doc' + field (*note Argp Parsers::), in which case including the option + in the generic usage list would be redundant. + + For instance, if `args_doc' is `"FOO BAR\n-x BLAH"', and the `-x' + option's purpose is to distinguish these two cases, `-x' should + probably be marked `OPTION_NO_USAGE'. + + +File: libc.info, Node: Argp Parser Functions, Next: Argp Children, Prev: Argp Option Vectors, Up: Argp Parsers + +Argp Parser Functions +--------------------- + + The function pointed to by the `parser' field in a `struct argp' +(*note Argp Parsers::) defines what actions take place in response to +each option or argument that is parsed, and is also used as a hook, to +allow a parser to do something at certain other points during parsing. + + Argp parser functions have the following type signature: + + error_t PARSER (int KEY, char *ARG, struct argp_state *STATE) + +where the arguments are as follows: + +KEY + For each option that is parsed, PARSER is called with a value of + KEY from that option's `key' field in the option vector (*note + Argp Option Vectors::). PARSER is also called at other times with + special reserved keys, such as `ARGP_KEY_ARG' for non-option + arguments. *Note Argp Special Keys::. + +ARG + If KEY is an option, ARG is the value given for it, or zero if no + value was specified. Only options that have a non-zero `arg' + field can ever have a value, and those must _always_ have a value, + unless the `OPTION_ARG_OPTIONAL' flag was specified (if the input + being parsed specifies a value for an option that doesn't allow + one, an error results before PARSER ever gets called). + + If KEY is `ARGP_KEY_ARG', ARG is a non-option argument; other + special keys always have a zero ARG. + +STATE + STATE points to a `struct argp_state', containing useful + information about the current parsing state for use by PARSER. + *Note Argp Parsing State::. + + When PARSER is called, it should perform whatever action is +appropriate for KEY, and return either `0' for success, +`ARGP_ERR_UNKNOWN', if the value of KEY is not handled by this parser +function, or a unix error code if a real error occurred (*note Error +Codes::). + + - Macro: int ARGP_ERR_UNKNOWN + Argp parser functions should return `ARGP_ERR_UNKNOWN' for any KEY + value they do not recognize, or for non-option arguments (`KEY == + ARGP_KEY_ARG') that they do not wish to handle. + + A typical parser function uses a switch statement on KEY: + + error_t + parse_opt (int key, char *arg, struct argp_state *state) + { + switch (key) + { + case OPTION_KEY: + ACTION + break; + ... + default: + return ARGP_ERR_UNKNOWN; + } + return 0; + } + +* Menu: + +* Keys: Argp Special Keys. Special values for the KEY argument. +* State: Argp Parsing State. What the STATE argument refers to. +* Functions: Argp Helper Functions. Functions to help during argp parsing. + + +File: libc.info, Node: Argp Special Keys, Next: Argp Parsing State, Up: Argp Parser Functions + +Special Keys for Argp Parser Functions +...................................... + + In addition to key values corresponding to user options, the KEY +argument to argp parser functions may have a number of other special +values (ARG and STATE refer to parser function arguments; *note Argp +Parser Functions::): + +`ARGP_KEY_ARG' + This is not an option at all, but rather a command line argument, + whose value is pointed to by ARG. + + When there are multiple parser functions (due to argp parsers being + combined), it's impossible to know which one wants to handle an + argument, so each is called in turn, until one returns 0 or an + error other than `ARGP_ERR_UNKNOWN'; if an argument is handled by + no one, `argp_parse' immediately returns success, without parsing + any more arguments. + + Once a parser function returns success for this key, that fact is + recorded, and the `ARGP_KEY_NO_ARGS' case won't be used. + _However_, if while processing the argument, a parser function + decrements the `next' field of its STATE argument, the option + won't be considered processed; this is to allow you to actually + modify the argument (perhaps into an option), and have it + processed again. + +`ARGP_KEY_ARGS' + If a parser function returns `ARGP_ERR_UNKNOWN' for + `ARGP_KEY_ARG', it is immediately called again with the key + `ARGP_KEY_ARGS', which has a similar meaning, but is slightly more + convenient for consuming all remaining arguments. ARG is 0, and + the tail of the argument vector may be found at `STATE->argv + + STATE->next'. If success is returned for this key, and + `STATE->next' is unchanged, then all remaining arguments are + considered to have been consumed, otherwise, the amount by which + `STATE->next' has been adjust indicates how many were used. For + instance, here's an example that uses both, for different args: + + ... + case ARGP_KEY_ARG: + if (STATE->arg_num == 0) + /* First argument */ + first_arg = ARG; + else + /* Let the next case parse it. */ + return ARGP_KEY_UNKNOWN; + break; + case ARGP_KEY_ARGS: + remaining_args = STATE->argv + STATE->next; + num_remaining_args = STATE->argc - STATE->next; + break; + +`ARGP_KEY_END' + There are no more command line arguments at all. The parser + functions are called in different order (means children first) for + this value which allows each parser to clean up its state for the + parent. + +`ARGP_KEY_NO_ARGS' + Because it's common to want to do some special processing if there + aren't any non-option args, parser functions are called with this + key if they didn't successfully process any non-option arguments. + Called just before `ARGP_KEY_END' (where more general validity + checks on previously parsed arguments can take place). + +`ARGP_KEY_INIT' + Passed in before any parsing is done. Afterwards, the values of + each element of the `child_input' field of STATE, if any, are + copied to each child's state to be the initial value of the `input' + when _their_ parsers are called. + +`ARGP_KEY_SUCCESS' + Passed in when parsing has successfully been completed (even if + there are still arguments remaining). + +`ARGP_KEY_ERROR' + Passed in if an error has occurred, and parsing terminated (in + which case a call with a key of `ARGP_KEY_SUCCESS' is never made). + +`ARGP_KEY_FINI' + The final key ever seen by any parser (even after + `ARGP_KEY_SUCCESS' and `ARGP_KEY_ERROR'). Any resources allocated + by `ARGP_KEY_INIT' may be freed here (although sometimes certain + resources allocated there are to be returned to the caller after a + successful parse; in that case, those particular resources can be + freed in the `ARGP_KEY_ERROR' case). + + In all cases, `ARGP_KEY_INIT' is the first key seen by parser +functions, and `ARGP_KEY_FINI' the last (unless an error was returned +by the parser for `ARGP_KEY_INIT'). Other keys can occur in one the +following orders (OPT refers to an arbitrary option key): + +OPT... `ARGP_KEY_NO_ARGS' `ARGP_KEY_END' `ARGP_KEY_SUCCESS' + The arguments being parsed contained no non-option arguments at + all. + +( OPT | `ARGP_KEY_ARG' )... `ARGP_KEY_END' `ARGP_KEY_SUCCESS' + All non-option arguments were successfully handled by a parser + function (there may be multiple parser functions if multiple argp + parsers were combined). + +( OPT | `ARGP_KEY_ARG' )... `ARGP_KEY_SUCCESS' + Some non-option argument was unrecognized. + + This occurs when every parser function returns `ARGP_KEY_UNKNOWN' + for an argument, in which case parsing stops at that argument. If + ARG_INDEX is a null pointer otherwise an error occurs. + + In all cases, if a non-null value for ARG_INDEX was passed to +`argp_parse', the index of the first unparsed command-line argument is +passed back in it. + + If an error occurs (either detected by argp, or because a parser +function returned an error value), then each parser is called with +`ARGP_KEY_ERROR', and no further calls are made except the final call +with `ARGP_KEY_FINI'. + + File: libc.info, Node: Argp Helper Functions, Prev: Argp Parsing State, Up: Argp Parser Functions Functions For Use in Argp Parsers @@ -728,527 +1117,4 @@ flexible and clean. exit (0); } - - -File: libc.info, Node: Argp Example 4, Prev: Argp Example 3, Up: Argp Examples - -A Program Using Multiple Combined Argp Parsers -.............................................. - - This program uses the same features as example 3, but has more -options, and somewhat more structure in the `--help' output. It also -shows how you can `steal' the remainder of the input arguments past a -certain point, for programs that accept a list of items, and the special -KEY value `ARGP_KEY_NO_ARGS', which is only given if no non-option -arguments were supplied to the program (*note Argp Special Keys::). - - For structuring the help output, two features are used: _headers_, -which are entries in the options vector (*note Argp Option Vectors::) -with the first four fields being zero, and a two part documentation -string (in the variable `doc'), which allows documentation both before -and after the options (*note Argp Parsers::); the two parts of `doc' -are separated by a vertical-tab character (`'\v'', or `'\013''). By -convention, the documentation before the options is just a short string -saying what the program does, and that afterwards is longer, describing -the behavior in more detail. All documentation strings are -automatically filled for output, although newlines may be included to -force a line break at a particular point. All documentation strings -are also passed to the `gettext' function, for possible translation -into the current locale. - - /* Argp example #4 - a program with somewhat more complicated options */ - - /* This program uses the same features as example 3, but has more - options, and somewhat more structure in the -help output. It - also shows how you can `steal' the remainder of the input - arguments past a certain point, for programs that accept a - list of items. It also shows the special argp KEY value - ARGP_KEY_NO_ARGS, which is only given if no non-option - arguments were supplied to the program. - - For structuring the help output, two features are used, - *headers* which are entries in the options vector with the - first four fields being zero, and a two part documentation - string (in the variable DOC), which allows documentation both - before and after the options; the two parts of DOC are - separated by a vertical-tab character ('\v', or '\013'). By - convention, the documentation before the options is just a - short string saying what the program does, and that afterwards - is longer, describing the behavior in more detail. All - documentation strings are automatically filled for output, - although newlines may be included to force a line break at a - particular point. All documentation strings are also passed to - the `gettext' function, for possible translation into the - current locale. */ - - #include - #include - #include - - const char *argp_program_version = - "argp-ex4 1.0"; - const char *argp_program_bug_address = - ""; - - /* Program documentation. */ - static char doc[] = - "Argp example #4 -- a program with somewhat more complicated\ - options\ - \vThis part of the documentation comes *after* the options;\ - note that the text is automatically filled, but it's possible\ - to force a line-break, e.g.\n<-- here."; - - /* A description of the arguments we accept. */ - static char args_doc[] = "ARG1 [STRING...]"; - - /* Keys for options without short-options. */ - #define OPT_ABORT 1 /* -abort */ - - /* The options we understand. */ - static struct argp_option options[] = { - {"verbose", 'v', 0, 0, "Produce verbose output" }, - {"quiet", 'q', 0, 0, "Don't produce any output" }, - {"silent", 's', 0, OPTION_ALIAS }, - {"output", 'o', "FILE", 0, - "Output to FILE instead of standard output" }, - - {0,0,0,0, "The following options should be grouped together:" }, - {"repeat", 'r', "COUNT", OPTION_ARG_OPTIONAL, - "Repeat the output COUNT (default 10) times"}, - {"abort", OPT_ABORT, 0, 0, "Abort before showing any output"}, - - { 0 } - }; - - /* Used by `main' to communicate with `parse_opt'. */ - struct arguments - { - char *arg1; /* ARG1 */ - char **strings; /* [STRING...] */ - int silent, verbose, abort; /* `-s', `-v', `--abort' */ - char *output_file; /* FILE arg to `--output' */ - int repeat_count; /* COUNT arg to `--repeat' */ - }; - - /* Parse a single option. */ - static error_t - parse_opt (int key, char *arg, struct argp_state *state) - { - /* Get the `input' argument from `argp_parse', which we - know is a pointer to our arguments structure. */ - struct arguments *arguments = state->input; - - switch (key) - { - case 'q': case 's': - arguments->silent = 1; - break; - case 'v': - arguments->verbose = 1; - break; - case 'o': - arguments->output_file = arg; - break; - case 'r': - arguments->repeat_count = arg ? atoi (arg) : 10; - break; - case OPT_ABORT: - arguments->abort = 1; - break; - - case ARGP_KEY_NO_ARGS: - argp_usage (state); - - case ARGP_KEY_ARG: - /* Here we know that `state->arg_num == 0', since we - force argument parsing to end before any more arguments can - get here. */ - arguments->arg1 = arg; - - /* Now we consume all the rest of the arguments. - `state->next' is the index in `state->argv' of the - next argument to be parsed, which is the first STRING - we're interested in, so we can just use - `&state->argv[state->next]' as the value for - arguments->strings. - - _In addition_, by setting `state->next' to the end - of the arguments, we can force argp to stop parsing here and - return. */ - arguments->strings = &state->argv[state->next]; - state->next = state->argc; - - break; - - default: - return ARGP_ERR_UNKNOWN; - } - return 0; - } - - /* Our argp parser. */ - static struct argp argp = { options, parse_opt, args_doc, doc }; - - int main (int argc, char **argv) - { - int i, j; - struct arguments arguments; - - /* Default values. */ - arguments.silent = 0; - arguments.verbose = 0; - arguments.output_file = "-"; - arguments.repeat_count = 1; - arguments.abort = 0; - - /* Parse our arguments; every option seen by `parse_opt' will be - reflected in `arguments'. */ - argp_parse (&argp, argc, argv, 0, 0, &arguments); - - if (arguments.abort) - error (10, 0, "ABORTED"); - - for (i = 0; i < arguments.repeat_count; i++) - { - printf ("ARG1 = %s\n", arguments.arg1); - printf ("STRINGS = "); - for (j = 0; arguments.strings[j]; j++) - printf (j == 0 ? "%s" : ", %s", arguments.strings[j]); - printf ("\n"); - printf ("OUTPUT_FILE = %s\nVERBOSE = %s\nSILENT = %s\n", - arguments.output_file, - arguments.verbose ? "yes" : "no", - arguments.silent ? "yes" : "no"); - } - - exit (0); - } - - -File: libc.info, Node: Argp User Customization, Prev: Argp Examples, Up: Argp - -Argp User Customization ------------------------ - - The way formatting of argp `--help' output may be controlled to some -extent by a program's users, by setting the `ARGP_HELP_FMT' environment -variable to a comma-separated list (whitespace is ignored) of the -following tokens: - -`dup-args' -`no-dup-args' - Turn "duplicate-argument-mode" on or off. In duplicate argument - mode, if an option which accepts an argument has multiple names, - the argument is shown for each name; otherwise, it is only shown - for the first long option, and a note is emitted later so the user - knows that it applies to the other names as well. The default is - `no-dup-args', which is less consistent, but prettier. - -`dup-args-note' - -`no-dup-args-note' - Enable or disable the note informing the user of suppressed option - argument duplication. The default is `dup-args-note'. - -`short-opt-col=N' - Show the first short option in column N (default 2). - -`long-opt-col=N' - Show the first long option in column N (default 6). - -`doc-opt-col=N' - Show `documentation options' (*note Argp Option Flags::) in column - N (default 2). - -`opt-doc-col=N' - Show the documentation for options starting in column N (default - 29). - -`header-col=N' - Indent group headers (which document groups of options) to column - N (default 1). - -`usage-indent=N' - Indent continuation lines in `Usage:' messages to column N - (default 12). - -`rmargin=N' - Word wrap help output at or before column N (default 79). - - -File: libc.info, Node: Suboptions, Next: Suboptions Example, Prev: Argp, Up: Parsing Program Arguments - -Parsing of Suboptions -..................... - - Having a single level of options is sometimes not enough. There -might be too many options which have to be available or a set of -options is closely related. - - For this case some programs use suboptions. One of the most -prominent programs is certainly `mount'(8). The `-o' option take one -argument which itself is a comma separated list of options. To ease the -programming of code like this the function `getsubopt' is available. - - - Function: int getsubopt (char **OPTIONP, const char* const *TOKENS, - char **VALUEP) - The OPTIONP parameter must be a pointer to a variable containing - the address of the string to process. When the function returns - the reference is updated to point to the next suboption or to the - terminating `\0' character if there is no more suboption available. - - The TOKENS parameter references an array of strings containing the - known suboptions. All strings must be `\0' terminated and to mark - the end a null pointer must be stored. When `getsubopt' finds a - possible legal suboption it compares it with all strings available - in the TOKENS array and returns the index in the string as the - indicator. - - In case the suboption has an associated value introduced by a `=' - character, a pointer to the value is returned in VALUEP. The - string is `\0' terminated. If no argument is available VALUEP is - set to the null pointer. By doing this the caller can check - whether a necessary value is given or whether no unexpected value - is present. - - In case the next suboption in the string is not mentioned in the - TOKENS array the starting address of the suboption including a - possible value is returned in VALUEP and the return value of the - function is `-1'. - - -File: libc.info, Node: Suboptions Example, Prev: Suboptions, Up: Parsing Program Arguments - -Parsing of Suboptions Example ------------------------------ - - The code which might appear in the `mount'(8) program is a perfect -example of the use of `getsubopt': - - #include - #include - #include - - int do_all; - const char *type; - int read_size; - int write_size; - int read_only; - - enum - { - RO_OPTION = 0, - RW_OPTION, - READ_SIZE_OPTION, - WRITE_SIZE_OPTION, - THE_END - }; - - const char *mount_opts[] = - { - [RO_OPTION] = "ro", - [RW_OPTION] = "rw", - [READ_SIZE_OPTION] = "rsize", - [WRITE_SIZE_OPTION] = "wsize", - [THE_END] = NULL - }; - - int - main (int argc, char *argv[]) - { - char *subopts, *value; - int opt; - - while ((opt = getopt (argc, argv, "at:o:")) != -1) - switch (opt) - { - case 'a': - do_all = 1; - break; - case 't': - type = optarg; - break; - case 'o': - subopts = optarg; - while (*subopts != '\0') - switch (getsubopt (&subopts, mount_opts, &value)) - { - case RO_OPTION: - read_only = 1; - break; - case RW_OPTION: - read_only = 0; - break; - case READ_SIZE_OPTION: - if (value == NULL) - abort (); - read_size = atoi (value); - break; - case WRITE_SIZE_OPTION: - if (value == NULL) - abort (); - write_size = atoi (value); - break; - default: - /* Unknown suboption. */ - printf ("Unknown suboption `%s'\n", value); - break; - } - break; - default: - abort (); - } - - /* Do the real work. */ - - return 0; - } - - -File: libc.info, Node: Environment Variables, Next: System Calls, Prev: Program Arguments, Up: Program Basics - -Environment Variables -===================== - - When a program is executed, it receives information about the -context in which it was invoked in two ways. The first mechanism uses -the ARGV and ARGC arguments to its `main' function, and is discussed in -*Note Program Arguments::. The second mechanism uses "environment -variables" and is discussed in this section. - - The ARGV mechanism is typically used to pass command-line arguments -specific to the particular program being invoked. The environment, on -the other hand, keeps track of information that is shared by many -programs, changes infrequently, and that is less frequently used. - - The environment variables discussed in this section are the same -environment variables that you set using assignments and the `export' -command in the shell. Programs executed from the shell inherit all of -the environment variables from the shell. - - Standard environment variables are used for information about the -user's home directory, terminal type, current locale, and so on; you -can define additional variables for other purposes. The set of all -environment variables that have values is collectively known as the -"environment". - - Names of environment variables are case-sensitive and must not -contain the character `='. System-defined environment variables are -invariably uppercase. - - The values of environment variables can be anything that can be -represented as a string. A value must not contain an embedded null -character, since this is assumed to terminate the string. - -* Menu: - -* Environment Access:: How to get and set the values of - environment variables. -* Standard Environment:: These environment variables have - standard interpretations. - - -File: libc.info, Node: Environment Access, Next: Standard Environment, Up: Environment Variables - -Environment Access ------------------- - - The value of an environment variable can be accessed with the -`getenv' function. This is declared in the header file `stdlib.h'. -All of the following functions can be safely used in multi-threaded -programs. It is made sure that concurrent modifications to the -environment do not lead to errors. - - - Function: char * getenv (const char *NAME) - This function returns a string that is the value of the environment - variable NAME. You must not modify this string. In some non-Unix - systems not using the GNU library, it might be overwritten by - subsequent calls to `getenv' (but not by any other library - function). If the environment variable NAME is not defined, the - value is a null pointer. - - - Function: int putenv (char *STRING) - The `putenv' function adds or removes definitions from the - environment. If the STRING is of the form `NAME=VALUE', the - definition is added to the environment. Otherwise, the STRING is - interpreted as the name of an environment variable, and any - definition for this variable in the environment is removed. - - The difference to the `setenv' function is that the exact string - given as the parameter STRING is put into the environment. If the - user should change the string after the `putenv' call this will - reflect in automatically in the environment. This also requires - that STRING is no automatic variable which scope is left before the - variable is removed from the environment. The same applies of - course to dynamically allocated variables which are freed later. - - This function is part of the extended Unix interface. Since it - was also available in old SVID libraries you should define either - _XOPEN_SOURCE or _SVID_SOURCE before including any header. - - - Function: int setenv (const char *NAME, const char *VALUE, int - REPLACE) - The `setenv' function can be used to add a new definition to the - environment. The entry with the name NAME is replaced by the - value `NAME=VALUE'. Please note that this is also true if VALUE - is the empty string. To do this a new string is created and the - strings NAME and VALUE are copied. A null pointer for the VALUE - parameter is illegal. If the environment already contains an - entry with key NAME the REPLACE parameter controls the action. If - replace is zero, nothing happens. Otherwise the old entry is - replaced by the new one. - - Please note that you cannot remove an entry completely using this - function. - - This function was originally part of the BSD library but is now - part of the Unix standard. - - - Function: int unsetenv (const char *NAME) - Using this function one can remove an entry completely from the - environment. If the environment contains an entry with the key - NAME this whole entry is removed. A call to this function is - equivalent to a call to `putenv' when the VALUE part of the string - is empty. - - The function return `-1' if NAME is a null pointer, points to an - empty string, or points to a string containing a `=' character. - It returns `0' if the call succeeded. - - This function was originall part of the BSD library but is now - part of the Unix standard. The BSD version had no return value, - though. - - There is one more function to modify the whole environment. This -function is said to be used in the POSIX.9 (POSIX bindings for Fortran -77) and so one should expect it did made it into POSIX.1. But this -never happened. But we still provide this function as a GNU extension -to enable writing standard compliant Fortran environments. - - - Function: int clearenv (void) - The `clearenv' function removes all entries from the environment. - Using `putenv' and `setenv' new entries can be added again later. - - If the function is successful it returns `0'. Otherwise the return - value is nonzero. - - You can deal directly with the underlying representation of -environment objects to add more variables to the environment (for -example, to communicate with another program you are about to execute; -*note Executing a File::). - - - Variable: char ** environ - The environment is represented as an array of strings. Each - string is of the format `NAME=VALUE'. The order in which strings - appear in the environment is not significant, but the same NAME - must not appear more than once. The last element of the array is - a null pointer. - - This variable is declared in the header file `unistd.h'. - - If you just want to get the value of an environment variable, use - `getenv'. - - Unix systems, and the GNU system, pass the initial value of -`environ' as the third argument to `main'. *Note Program Arguments::. diff -durpNa glibc-2.2.2/manual/libc.info-41 glibc-2.2.3/manual/libc.info-41 --- glibc-2.2.2/manual/libc.info-41 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-41 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,529 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Argp Example 4, Prev: Argp Example 3, Up: Argp Examples + +A Program Using Multiple Combined Argp Parsers +.............................................. + + This program uses the same features as example 3, but has more +options, and somewhat more structure in the `--help' output. It also +shows how you can `steal' the remainder of the input arguments past a +certain point, for programs that accept a list of items, and the special +KEY value `ARGP_KEY_NO_ARGS', which is only given if no non-option +arguments were supplied to the program (*note Argp Special Keys::). + + For structuring the help output, two features are used: _headers_, +which are entries in the options vector (*note Argp Option Vectors::) +with the first four fields being zero, and a two part documentation +string (in the variable `doc'), which allows documentation both before +and after the options (*note Argp Parsers::); the two parts of `doc' +are separated by a vertical-tab character (`'\v'', or `'\013''). By +convention, the documentation before the options is just a short string +saying what the program does, and that afterwards is longer, describing +the behavior in more detail. All documentation strings are +automatically filled for output, although newlines may be included to +force a line break at a particular point. All documentation strings +are also passed to the `gettext' function, for possible translation +into the current locale. + + /* Argp example #4 - a program with somewhat more complicated options */ + + /* This program uses the same features as example 3, but has more + options, and somewhat more structure in the -help output. It + also shows how you can `steal' the remainder of the input + arguments past a certain point, for programs that accept a + list of items. It also shows the special argp KEY value + ARGP_KEY_NO_ARGS, which is only given if no non-option + arguments were supplied to the program. + + For structuring the help output, two features are used, + *headers* which are entries in the options vector with the + first four fields being zero, and a two part documentation + string (in the variable DOC), which allows documentation both + before and after the options; the two parts of DOC are + separated by a vertical-tab character ('\v', or '\013'). By + convention, the documentation before the options is just a + short string saying what the program does, and that afterwards + is longer, describing the behavior in more detail. All + documentation strings are automatically filled for output, + although newlines may be included to force a line break at a + particular point. All documentation strings are also passed to + the `gettext' function, for possible translation into the + current locale. */ + + #include + #include + #include + + const char *argp_program_version = + "argp-ex4 1.0"; + const char *argp_program_bug_address = + ""; + + /* Program documentation. */ + static char doc[] = + "Argp example #4 -- a program with somewhat more complicated\ + options\ + \vThis part of the documentation comes *after* the options;\ + note that the text is automatically filled, but it's possible\ + to force a line-break, e.g.\n<-- here."; + + /* A description of the arguments we accept. */ + static char args_doc[] = "ARG1 [STRING...]"; + + /* Keys for options without short-options. */ + #define OPT_ABORT 1 /* -abort */ + + /* The options we understand. */ + static struct argp_option options[] = { + {"verbose", 'v', 0, 0, "Produce verbose output" }, + {"quiet", 'q', 0, 0, "Don't produce any output" }, + {"silent", 's', 0, OPTION_ALIAS }, + {"output", 'o', "FILE", 0, + "Output to FILE instead of standard output" }, + + {0,0,0,0, "The following options should be grouped together:" }, + {"repeat", 'r', "COUNT", OPTION_ARG_OPTIONAL, + "Repeat the output COUNT (default 10) times"}, + {"abort", OPT_ABORT, 0, 0, "Abort before showing any output"}, + + { 0 } + }; + + /* Used by `main' to communicate with `parse_opt'. */ + struct arguments + { + char *arg1; /* ARG1 */ + char **strings; /* [STRING...] */ + int silent, verbose, abort; /* `-s', `-v', `--abort' */ + char *output_file; /* FILE arg to `--output' */ + int repeat_count; /* COUNT arg to `--repeat' */ + }; + + /* Parse a single option. */ + static error_t + parse_opt (int key, char *arg, struct argp_state *state) + { + /* Get the `input' argument from `argp_parse', which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'q': case 's': + arguments->silent = 1; + break; + case 'v': + arguments->verbose = 1; + break; + case 'o': + arguments->output_file = arg; + break; + case 'r': + arguments->repeat_count = arg ? atoi (arg) : 10; + break; + case OPT_ABORT: + arguments->abort = 1; + break; + + case ARGP_KEY_NO_ARGS: + argp_usage (state); + + case ARGP_KEY_ARG: + /* Here we know that `state->arg_num == 0', since we + force argument parsing to end before any more arguments can + get here. */ + arguments->arg1 = arg; + + /* Now we consume all the rest of the arguments. + `state->next' is the index in `state->argv' of the + next argument to be parsed, which is the first STRING + we're interested in, so we can just use + `&state->argv[state->next]' as the value for + arguments->strings. + + _In addition_, by setting `state->next' to the end + of the arguments, we can force argp to stop parsing here and + return. */ + arguments->strings = &state->argv[state->next]; + state->next = state->argc; + + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; + } + + /* Our argp parser. */ + static struct argp argp = { options, parse_opt, args_doc, doc }; + + int main (int argc, char **argv) + { + int i, j; + struct arguments arguments; + + /* Default values. */ + arguments.silent = 0; + arguments.verbose = 0; + arguments.output_file = "-"; + arguments.repeat_count = 1; + arguments.abort = 0; + + /* Parse our arguments; every option seen by `parse_opt' will be + reflected in `arguments'. */ + argp_parse (&argp, argc, argv, 0, 0, &arguments); + + if (arguments.abort) + error (10, 0, "ABORTED"); + + for (i = 0; i < arguments.repeat_count; i++) + { + printf ("ARG1 = %s\n", arguments.arg1); + printf ("STRINGS = "); + for (j = 0; arguments.strings[j]; j++) + printf (j == 0 ? "%s" : ", %s", arguments.strings[j]); + printf ("\n"); + printf ("OUTPUT_FILE = %s\nVERBOSE = %s\nSILENT = %s\n", + arguments.output_file, + arguments.verbose ? "yes" : "no", + arguments.silent ? "yes" : "no"); + } + + exit (0); + } + + +File: libc.info, Node: Argp User Customization, Prev: Argp Examples, Up: Argp + +Argp User Customization +----------------------- + + The way formatting of argp `--help' output may be controlled to some +extent by a program's users, by setting the `ARGP_HELP_FMT' environment +variable to a comma-separated list (whitespace is ignored) of the +following tokens: + +`dup-args' +`no-dup-args' + Turn "duplicate-argument-mode" on or off. In duplicate argument + mode, if an option which accepts an argument has multiple names, + the argument is shown for each name; otherwise, it is only shown + for the first long option, and a note is emitted later so the user + knows that it applies to the other names as well. The default is + `no-dup-args', which is less consistent, but prettier. + +`dup-args-note' + +`no-dup-args-note' + Enable or disable the note informing the user of suppressed option + argument duplication. The default is `dup-args-note'. + +`short-opt-col=N' + Show the first short option in column N (default 2). + +`long-opt-col=N' + Show the first long option in column N (default 6). + +`doc-opt-col=N' + Show `documentation options' (*note Argp Option Flags::) in column + N (default 2). + +`opt-doc-col=N' + Show the documentation for options starting in column N (default + 29). + +`header-col=N' + Indent group headers (which document groups of options) to column + N (default 1). + +`usage-indent=N' + Indent continuation lines in `Usage:' messages to column N + (default 12). + +`rmargin=N' + Word wrap help output at or before column N (default 79). + + +File: libc.info, Node: Suboptions, Next: Suboptions Example, Prev: Argp, Up: Parsing Program Arguments + +Parsing of Suboptions +..................... + + Having a single level of options is sometimes not enough. There +might be too many options which have to be available or a set of +options is closely related. + + For this case some programs use suboptions. One of the most +prominent programs is certainly `mount'(8). The `-o' option take one +argument which itself is a comma separated list of options. To ease the +programming of code like this the function `getsubopt' is available. + + - Function: int getsubopt (char **OPTIONP, const char* const *TOKENS, + char **VALUEP) + The OPTIONP parameter must be a pointer to a variable containing + the address of the string to process. When the function returns + the reference is updated to point to the next suboption or to the + terminating `\0' character if there is no more suboption available. + + The TOKENS parameter references an array of strings containing the + known suboptions. All strings must be `\0' terminated and to mark + the end a null pointer must be stored. When `getsubopt' finds a + possible legal suboption it compares it with all strings available + in the TOKENS array and returns the index in the string as the + indicator. + + In case the suboption has an associated value introduced by a `=' + character, a pointer to the value is returned in VALUEP. The + string is `\0' terminated. If no argument is available VALUEP is + set to the null pointer. By doing this the caller can check + whether a necessary value is given or whether no unexpected value + is present. + + In case the next suboption in the string is not mentioned in the + TOKENS array the starting address of the suboption including a + possible value is returned in VALUEP and the return value of the + function is `-1'. + + +File: libc.info, Node: Suboptions Example, Prev: Suboptions, Up: Parsing Program Arguments + +Parsing of Suboptions Example +----------------------------- + + The code which might appear in the `mount'(8) program is a perfect +example of the use of `getsubopt': + + #include + #include + #include + + int do_all; + const char *type; + int read_size; + int write_size; + int read_only; + + enum + { + RO_OPTION = 0, + RW_OPTION, + READ_SIZE_OPTION, + WRITE_SIZE_OPTION, + THE_END + }; + + const char *mount_opts[] = + { + [RO_OPTION] = "ro", + [RW_OPTION] = "rw", + [READ_SIZE_OPTION] = "rsize", + [WRITE_SIZE_OPTION] = "wsize", + [THE_END] = NULL + }; + + int + main (int argc, char *argv[]) + { + char *subopts, *value; + int opt; + + while ((opt = getopt (argc, argv, "at:o:")) != -1) + switch (opt) + { + case 'a': + do_all = 1; + break; + case 't': + type = optarg; + break; + case 'o': + subopts = optarg; + while (*subopts != '\0') + switch (getsubopt (&subopts, mount_opts, &value)) + { + case RO_OPTION: + read_only = 1; + break; + case RW_OPTION: + read_only = 0; + break; + case READ_SIZE_OPTION: + if (value == NULL) + abort (); + read_size = atoi (value); + break; + case WRITE_SIZE_OPTION: + if (value == NULL) + abort (); + write_size = atoi (value); + break; + default: + /* Unknown suboption. */ + printf ("Unknown suboption `%s'\n", value); + break; + } + break; + default: + abort (); + } + + /* Do the real work. */ + + return 0; + } + + +File: libc.info, Node: Environment Variables, Next: System Calls, Prev: Program Arguments, Up: Program Basics + +Environment Variables +===================== + + When a program is executed, it receives information about the +context in which it was invoked in two ways. The first mechanism uses +the ARGV and ARGC arguments to its `main' function, and is discussed in +*Note Program Arguments::. The second mechanism uses "environment +variables" and is discussed in this section. + + The ARGV mechanism is typically used to pass command-line arguments +specific to the particular program being invoked. The environment, on +the other hand, keeps track of information that is shared by many +programs, changes infrequently, and that is less frequently used. + + The environment variables discussed in this section are the same +environment variables that you set using assignments and the `export' +command in the shell. Programs executed from the shell inherit all of +the environment variables from the shell. + + Standard environment variables are used for information about the +user's home directory, terminal type, current locale, and so on; you +can define additional variables for other purposes. The set of all +environment variables that have values is collectively known as the +"environment". + + Names of environment variables are case-sensitive and must not +contain the character `='. System-defined environment variables are +invariably uppercase. + + The values of environment variables can be anything that can be +represented as a string. A value must not contain an embedded null +character, since this is assumed to terminate the string. + +* Menu: + +* Environment Access:: How to get and set the values of + environment variables. +* Standard Environment:: These environment variables have + standard interpretations. + + +File: libc.info, Node: Environment Access, Next: Standard Environment, Up: Environment Variables + +Environment Access +------------------ + + The value of an environment variable can be accessed with the +`getenv' function. This is declared in the header file `stdlib.h'. +All of the following functions can be safely used in multi-threaded +programs. It is made sure that concurrent modifications to the +environment do not lead to errors. + + - Function: char * getenv (const char *NAME) + This function returns a string that is the value of the environment + variable NAME. You must not modify this string. In some non-Unix + systems not using the GNU library, it might be overwritten by + subsequent calls to `getenv' (but not by any other library + function). If the environment variable NAME is not defined, the + value is a null pointer. + + - Function: int putenv (char *STRING) + The `putenv' function adds or removes definitions from the + environment. If the STRING is of the form `NAME=VALUE', the + definition is added to the environment. Otherwise, the STRING is + interpreted as the name of an environment variable, and any + definition for this variable in the environment is removed. + + The difference to the `setenv' function is that the exact string + given as the parameter STRING is put into the environment. If the + user should change the string after the `putenv' call this will + reflect in automatically in the environment. This also requires + that STRING is no automatic variable which scope is left before the + variable is removed from the environment. The same applies of + course to dynamically allocated variables which are freed later. + + This function is part of the extended Unix interface. Since it + was also available in old SVID libraries you should define either + _XOPEN_SOURCE or _SVID_SOURCE before including any header. + + - Function: int setenv (const char *NAME, const char *VALUE, int + REPLACE) + The `setenv' function can be used to add a new definition to the + environment. The entry with the name NAME is replaced by the + value `NAME=VALUE'. Please note that this is also true if VALUE + is the empty string. To do this a new string is created and the + strings NAME and VALUE are copied. A null pointer for the VALUE + parameter is illegal. If the environment already contains an + entry with key NAME the REPLACE parameter controls the action. If + replace is zero, nothing happens. Otherwise the old entry is + replaced by the new one. + + Please note that you cannot remove an entry completely using this + function. + + This function was originally part of the BSD library but is now + part of the Unix standard. + + - Function: int unsetenv (const char *NAME) + Using this function one can remove an entry completely from the + environment. If the environment contains an entry with the key + NAME this whole entry is removed. A call to this function is + equivalent to a call to `putenv' when the VALUE part of the string + is empty. + + The function return `-1' if NAME is a null pointer, points to an + empty string, or points to a string containing a `=' character. + It returns `0' if the call succeeded. + + This function was originall part of the BSD library but is now + part of the Unix standard. The BSD version had no return value, + though. + + There is one more function to modify the whole environment. This +function is said to be used in the POSIX.9 (POSIX bindings for Fortran +77) and so one should expect it did made it into POSIX.1. But this +never happened. But we still provide this function as a GNU extension +to enable writing standard compliant Fortran environments. + + - Function: int clearenv (void) + The `clearenv' function removes all entries from the environment. + Using `putenv' and `setenv' new entries can be added again later. + + If the function is successful it returns `0'. Otherwise the return + value is nonzero. + + You can deal directly with the underlying representation of +environment objects to add more variables to the environment (for +example, to communicate with another program you are about to execute; +*note Executing a File::). + + - Variable: char ** environ + The environment is represented as an array of strings. Each + string is of the format `NAME=VALUE'. The order in which strings + appear in the environment is not significant, but the same NAME + must not appear more than once. The last element of the array is + a null pointer. + + This variable is declared in the header file `unistd.h'. + + If you just want to get the value of an environment variable, use + `getenv'. + + Unix systems, and the GNU system, pass the initial value of +`environ' as the third argument to `main'. *Note Program Arguments::. + + File: libc.info, Node: Standard Environment, Prev: Environment Access, Up: Environment Variables Standard Environment Variables @@ -726,499 +1249,4 @@ parent process are: executes `fork' if `vfork' isn't available. If you follow the proper precautions for using `vfork', your program will still work even if the system uses `fork' instead. - - -File: libc.info, Node: Executing a File, Next: Process Completion, Prev: Creating a Process, Up: Processes - -Executing a File -================ - - This section describes the `exec' family of functions, for executing -a file as a process image. You can use these functions to make a child -process execute a new program after it has been forked. - - To see the effects of `exec' from the point of view of the called -program, *Note Program Basics::. - - The functions in this family differ in how you specify the arguments, -but otherwise they all do the same thing. They are declared in the -header file `unistd.h'. - - - Function: int execv (const char *FILENAME, char *const ARGV[]) - The `execv' function executes the file named by FILENAME as a new - process image. - - The ARGV argument is an array of null-terminated strings that is - used to provide a value for the `argv' argument to the `main' - function of the program to be executed. The last element of this - array must be a null pointer. By convention, the first element of - this array is the file name of the program sans directory names. - *Note Program Arguments::, for full details on how programs can - access these arguments. - - The environment for the new process image is taken from the - `environ' variable of the current process image; see *Note - Environment Variables::, for information about environments. - - - Function: int execl (const char *FILENAME, const char *ARG0, ...) - This is similar to `execv', but the ARGV strings are specified - individually instead of as an array. A null pointer must be - passed as the last such argument. - - - Function: int execve (const char *FILENAME, char *const ARGV[], char - *const ENV[]) - This is similar to `execv', but permits you to specify the - environment for the new program explicitly as the ENV argument. - This should be an array of strings in the same format as for the - `environ' variable; see *Note Environment Access::. - - - Function: int execle (const char *FILENAME, const char *ARG0, char - *const ENV[], ...) - This is similar to `execl', but permits you to specify the - environment for the new program explicitly. The environment - argument is passed following the null pointer that marks the last - ARGV argument, and should be an array of strings in the same - format as for the `environ' variable. - - - Function: int execvp (const char *FILENAME, char *const ARGV[]) - The `execvp' function is similar to `execv', except that it - searches the directories listed in the `PATH' environment variable - (*note Standard Environment::) to find the full file name of a - file from FILENAME if FILENAME does not contain a slash. - - This function is useful for executing system utility programs, - because it looks for them in the places that the user has chosen. - Shells use it to run the commands that users type. - - - Function: int execlp (const char *FILENAME, const char *ARG0, ...) - This function is like `execl', except that it performs the same - file name searching as the `execvp' function. - - The size of the argument list and environment list taken together -must not be greater than `ARG_MAX' bytes. *Note General Limits::. In -the GNU system, the size (which compares against `ARG_MAX') includes, -for each string, the number of characters in the string, plus the size -of a `char *', plus one, rounded up to a multiple of the size of a -`char *'. Other systems may have somewhat different rules for counting. - - These functions normally don't return, since execution of a new -program causes the currently executing program to go away completely. -A value of `-1' is returned in the event of a failure. In addition to -the usual file name errors (*note File Name Errors::), the following -`errno' error conditions are defined for these functions: - -`E2BIG' - The combined size of the new program's argument list and - environment list is larger than `ARG_MAX' bytes. The GNU system - has no specific limit on the argument list size, so this error - code cannot result, but you may get `ENOMEM' instead if the - arguments are too big for available memory. - -`ENOEXEC' - The specified file can't be executed because it isn't in the right - format. - -`ENOMEM' - Executing the specified file requires more storage than is - available. - - If execution of the new file succeeds, it updates the access time -field of the file as if the file had been read. *Note File Times::, -for more details about access times of files. - - The point at which the file is closed again is not specified, but is -at some point before the process exits or before another process image -is executed. - - Executing a new process image completely changes the contents of -memory, copying only the argument and environment strings to new -locations. But many other attributes of the process are unchanged: - - * The process ID and the parent process ID. *Note Process Creation - Concepts::. - - * Session and process group membership. *Note Concepts of Job - Control::. - - * Real user ID and group ID, and supplementary group IDs. *Note - Process Persona::. - - * Pending alarms. *Note Setting an Alarm::. - - * Current working directory and root directory. *Note Working - Directory::. In the GNU system, the root directory is not copied - when executing a setuid program; instead the system default root - directory is used for the new program. - - * File mode creation mask. *Note Setting Permissions::. - - * Process signal mask; see *Note Process Signal Mask::. - - * Pending signals; see *Note Blocking Signals::. - - * Elapsed processor time associated with the process; see *Note - Processor Time::. - - If the set-user-ID and set-group-ID mode bits of the process image -file are set, this affects the effective user ID and effective group ID -(respectively) of the process. These concepts are discussed in detail -in *Note Process Persona::. - - Signals that are set to be ignored in the existing process image are -also set to be ignored in the new process image. All other signals are -set to the default action in the new process image. For more -information about signals, see *Note Signal Handling::. - - File descriptors open in the existing process image remain open in -the new process image, unless they have the `FD_CLOEXEC' -(close-on-exec) flag set. The files that remain open inherit all -attributes of the open file description from the existing process image, -including file locks. File descriptors are discussed in *Note -Low-Level I/O::. - - Streams, by contrast, cannot survive through `exec' functions, -because they are located in the memory of the process itself. The new -process image has no streams except those it creates afresh. Each of -the streams in the pre-`exec' process image has a descriptor inside it, -and these descriptors do survive through `exec' (provided that they do -not have `FD_CLOEXEC' set). The new process image can reconnect these -to new streams using `fdopen' (*note Descriptors and Streams::). - - -File: libc.info, Node: Process Completion, Next: Process Completion Status, Prev: Executing a File, Up: Processes - -Process Completion -================== - - The functions described in this section are used to wait for a child -process to terminate or stop, and determine its status. These functions -are declared in the header file `sys/wait.h'. - - - Function: pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS) - The `waitpid' function is used to request status information from a - child process whose process ID is PID. Normally, the calling - process is suspended until the child process makes status - information available by terminating. - - Other values for the PID argument have special interpretations. A - value of `-1' or `WAIT_ANY' requests status information for any - child process; a value of `0' or `WAIT_MYPGRP' requests - information for any child process in the same process group as the - calling process; and any other negative value - PGID requests - information for any child process whose process group ID is PGID. - - If status information for a child process is available - immediately, this function returns immediately without waiting. - If more than one eligible child process has status information - available, one of them is chosen randomly, and its status is - returned immediately. To get the status from the other eligible - child processes, you need to call `waitpid' again. - - The OPTIONS argument is a bit mask. Its value should be the - bitwise OR (that is, the `|' operator) of zero or more of the - `WNOHANG' and `WUNTRACED' flags. You can use the `WNOHANG' flag - to indicate that the parent process shouldn't wait; and the - `WUNTRACED' flag to request status information from stopped - processes as well as processes that have terminated. - - The status information from the child process is stored in the - object that STATUS-PTR points to, unless STATUS-PTR is a null - pointer. - - This function is a cancelation point in multi-threaded programs. - This is a problem if the thread allocates some resources (like - memory, file descriptors, semaphores or whatever) at the time - `waitpid' is called. If the thread gets canceled these resources - stay allocated until the program ends. To avoid this calls to - `waitpid' should be protected using cancelation handlers. - - The return value is normally the process ID of the child process - whose status is reported. If there are child processes but none - of them is waiting to be noticed, `waitpid' will block until one - is. However, if the `WNOHANG' option was specified, `waitpid' - will return zero instead of blocking. - - If a specific PID to wait for was given to `waitpid', it will - ignore all other children (if any). Therefore if there are - children waiting to be noticed but the child whose PID was - specified is not one of them, `waitpid' will block or return zero - as described above. - - A value of `-1' is returned in case of error. The following - `errno' error conditions are defined for this function: - - `EINTR' - The function was interrupted by delivery of a signal to the - calling process. *Note Interrupted Primitives::. - - `ECHILD' - There are no child processes to wait for, or the specified PID - is not a child of the calling process. - - `EINVAL' - An invalid value was provided for the OPTIONS argument. - - These symbolic constants are defined as values for the PID argument -to the `waitpid' function. - -`WAIT_ANY' - This constant macro (whose value is `-1') specifies that `waitpid' - should return status information about any child process. - -`WAIT_MYPGRP' - This constant (with value `0') specifies that `waitpid' should - return status information about any child process in the same - process group as the calling process. - - These symbolic constants are defined as flags for the OPTIONS -argument to the `waitpid' function. You can bitwise-OR the flags -together to obtain a value to use as the argument. - -`WNOHANG' - This flag specifies that `waitpid' should return immediately - instead of waiting, if there is no child process ready to be - noticed. - -`WUNTRACED' - This flag specifies that `waitpid' should report the status of any - child processes that have been stopped as well as those that have - terminated. - - - Function: pid_t wait (int *STATUS-PTR) - This is a simplified version of `waitpid', and is used to wait - until any one child process terminates. The call: - - wait (&status) - - is exactly equivalent to: - - waitpid (-1, &status, 0) - - This function is a cancelation point in multi-threaded programs. - This is a problem if the thread allocates some resources (like - memory, file descriptors, semaphores or whatever) at the time - `wait' is called. If the thread gets canceled these resources - stay allocated until the program ends. To avoid this calls to - `wait' should be protected using cancelation handlers. - - - Function: pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS, - struct rusage *USAGE) - If USAGE is a null pointer, `wait4' is equivalent to `waitpid - (PID, STATUS-PTR, OPTIONS)'. - - If USAGE is not null, `wait4' stores usage figures for the child - process in `*RUSAGE' (but only if the child has terminated, not if - it has stopped). *Note Resource Usage::. - - This function is a BSD extension. - - Here's an example of how to use `waitpid' to get the status from all -child processes that have terminated, without ever waiting. This -function is designed to be a handler for `SIGCHLD', the signal that -indicates that at least one child process has terminated. - - void - sigchld_handler (int signum) - { - int pid, status, serrno; - serrno = errno; - while (1) - { - pid = waitpid (WAIT_ANY, &status, WNOHANG); - if (pid < 0) - { - perror ("waitpid"); - break; - } - if (pid == 0) - break; - notice_termination (pid, status); - } - errno = serrno; - } - - -File: libc.info, Node: Process Completion Status, Next: BSD Wait Functions, Prev: Process Completion, Up: Processes - -Process Completion Status -========================= - - If the exit status value (*note Program Termination::) of the child -process is zero, then the status value reported by `waitpid' or `wait' -is also zero. You can test for other kinds of information encoded in -the returned status value using the following macros. These macros are -defined in the header file `sys/wait.h'. - - - Macro: int WIFEXITED (int STATUS) - This macro returns a nonzero value if the child process terminated - normally with `exit' or `_exit'. - - - Macro: int WEXITSTATUS (int STATUS) - If `WIFEXITED' is true of STATUS, this macro returns the low-order - 8 bits of the exit status value from the child process. *Note - Exit Status::. - - - Macro: int WIFSIGNALED (int STATUS) - This macro returns a nonzero value if the child process terminated - because it received a signal that was not handled. *Note Signal - Handling::. - - - Macro: int WTERMSIG (int STATUS) - If `WIFSIGNALED' is true of STATUS, this macro returns the signal - number of the signal that terminated the child process. - - - Macro: int WCOREDUMP (int STATUS) - This macro returns a nonzero value if the child process terminated - and produced a core dump. - - - Macro: int WIFSTOPPED (int STATUS) - This macro returns a nonzero value if the child process is stopped. - - - Macro: int WSTOPSIG (int STATUS) - If `WIFSTOPPED' is true of STATUS, this macro returns the signal - number of the signal that caused the child process to stop. - - -File: libc.info, Node: BSD Wait Functions, Next: Process Creation Example, Prev: Process Completion Status, Up: Processes - -BSD Process Wait Functions -========================== - - The GNU library also provides these related facilities for -compatibility with BSD Unix. BSD uses the `union wait' data type to -represent status values rather than an `int'. The two representations -are actually interchangeable; they describe the same bit patterns. The -GNU C Library defines macros such as `WEXITSTATUS' so that they will -work on either kind of object, and the `wait' function is defined to -accept either type of pointer as its STATUS-PTR argument. - - These functions are declared in `sys/wait.h'. - - - Data Type: union wait - This data type represents program termination status values. It - has the following members: - - `int w_termsig' - The value of this member is the same as that of the - `WTERMSIG' macro. - - `int w_coredump' - The value of this member is the same as that of the - `WCOREDUMP' macro. - - `int w_retcode' - The value of this member is the same as that of the - `WEXITSTATUS' macro. - - `int w_stopsig' - The value of this member is the same as that of the - `WSTOPSIG' macro. - - Instead of accessing these members directly, you should use the - equivalent macros. - - The `wait3' function is the predecessor to `wait4', which is more -flexible. `wait3' is now obsolete. - - - Function: pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct - rusage *USAGE) - If USAGE is a null pointer, `wait3' is equivalent to `waitpid (-1, - STATUS-PTR, OPTIONS)'. - - If USAGE is not null, `wait3' stores usage figures for the child - process in `*RUSAGE' (but only if the child has terminated, not if - it has stopped). *Note Resource Usage::. - - -File: libc.info, Node: Process Creation Example, Prev: BSD Wait Functions, Up: Processes - -Process Creation Example -======================== - - Here is an example program showing how you might write a function -similar to the built-in `system'. It executes its COMMAND argument -using the equivalent of `sh -c COMMAND'. - - #include - #include - #include - #include - #include - - /* Execute the command using this shell program. */ - #define SHELL "/bin/sh" - - int - my_system (const char *command) - { - int status; - pid_t pid; - - pid = fork (); - if (pid == 0) - { - /* This is the child process. Execute the shell command. */ - execl (SHELL, SHELL, "-c", command, NULL); - _exit (EXIT_FAILURE); - } - else if (pid < 0) - /* The fork failed. Report failure. */ - status = -1; - else - /* This is the parent process. Wait for the child to complete. */ - if (waitpid (pid, &status, 0) != pid) - status = -1; - return status; - } - - There are a couple of things you should pay attention to in this -example. - - Remember that the first `argv' argument supplied to the program -represents the name of the program being executed. That is why, in the -call to `execl', `SHELL' is supplied once to name the program to -execute and a second time to supply a value for `argv[0]'. - - The `execl' call in the child process doesn't return if it is -successful. If it fails, you must do something to make the child -process terminate. Just returning a bad status code with `return' -would leave two processes running the original program. Instead, the -right behavior is for the child process to report failure to its parent -process. - - Call `_exit' to accomplish this. The reason for using `_exit' -instead of `exit' is to avoid flushing fully buffered streams such as -`stdout'. The buffers of these streams probably contain data that was -copied from the parent process by the `fork', data that will be output -eventually by the parent process. Calling `exit' in the child would -output the data twice. *Note Termination Internals::. - - -File: libc.info, Node: Job Control, Next: Name Service Switch, Prev: Processes, Up: Top - -Job Control -*********** - - "Job control" refers to the protocol for allowing a user to move -between multiple "process groups" (or "jobs") within a single "login -session". The job control facilities are set up so that appropriate -behavior for most programs happens automatically and they need not do -anything special about job control. So you can probably ignore the -material in this chapter unless you are writing a shell or login -program. - - You need to be familiar with concepts relating to process creation -(*note Process Creation Concepts::) and signal handling (*note Signal -Handling::) in order to understand this material presented in this -chapter. - -* Menu: - -* Concepts of Job Control:: Jobs can be controlled by a shell. -* Job Control is Optional:: Not all POSIX systems support job control. -* Controlling Terminal:: How a process gets its controlling terminal. -* Access to the Terminal:: How processes share the controlling terminal. -* Orphaned Process Groups:: Jobs left after the user logs out. -* Implementing a Shell:: What a shell must do to implement job control. -* Functions for Job Control:: Functions to control process groups. diff -durpNa glibc-2.2.2/manual/libc.info-42 glibc-2.2.3/manual/libc.info-42 --- glibc-2.2.2/manual/libc.info-42 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-42 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,501 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Executing a File, Next: Process Completion, Prev: Creating a Process, Up: Processes + +Executing a File +================ + + This section describes the `exec' family of functions, for executing +a file as a process image. You can use these functions to make a child +process execute a new program after it has been forked. + + To see the effects of `exec' from the point of view of the called +program, *Note Program Basics::. + + The functions in this family differ in how you specify the arguments, +but otherwise they all do the same thing. They are declared in the +header file `unistd.h'. + + - Function: int execv (const char *FILENAME, char *const ARGV[]) + The `execv' function executes the file named by FILENAME as a new + process image. + + The ARGV argument is an array of null-terminated strings that is + used to provide a value for the `argv' argument to the `main' + function of the program to be executed. The last element of this + array must be a null pointer. By convention, the first element of + this array is the file name of the program sans directory names. + *Note Program Arguments::, for full details on how programs can + access these arguments. + + The environment for the new process image is taken from the + `environ' variable of the current process image; see *Note + Environment Variables::, for information about environments. + + - Function: int execl (const char *FILENAME, const char *ARG0, ...) + This is similar to `execv', but the ARGV strings are specified + individually instead of as an array. A null pointer must be + passed as the last such argument. + + - Function: int execve (const char *FILENAME, char *const ARGV[], char + *const ENV[]) + This is similar to `execv', but permits you to specify the + environment for the new program explicitly as the ENV argument. + This should be an array of strings in the same format as for the + `environ' variable; see *Note Environment Access::. + + - Function: int execle (const char *FILENAME, const char *ARG0, char + *const ENV[], ...) + This is similar to `execl', but permits you to specify the + environment for the new program explicitly. The environment + argument is passed following the null pointer that marks the last + ARGV argument, and should be an array of strings in the same + format as for the `environ' variable. + + - Function: int execvp (const char *FILENAME, char *const ARGV[]) + The `execvp' function is similar to `execv', except that it + searches the directories listed in the `PATH' environment variable + (*note Standard Environment::) to find the full file name of a + file from FILENAME if FILENAME does not contain a slash. + + This function is useful for executing system utility programs, + because it looks for them in the places that the user has chosen. + Shells use it to run the commands that users type. + + - Function: int execlp (const char *FILENAME, const char *ARG0, ...) + This function is like `execl', except that it performs the same + file name searching as the `execvp' function. + + The size of the argument list and environment list taken together +must not be greater than `ARG_MAX' bytes. *Note General Limits::. In +the GNU system, the size (which compares against `ARG_MAX') includes, +for each string, the number of characters in the string, plus the size +of a `char *', plus one, rounded up to a multiple of the size of a +`char *'. Other systems may have somewhat different rules for counting. + + These functions normally don't return, since execution of a new +program causes the currently executing program to go away completely. +A value of `-1' is returned in the event of a failure. In addition to +the usual file name errors (*note File Name Errors::), the following +`errno' error conditions are defined for these functions: + +`E2BIG' + The combined size of the new program's argument list and + environment list is larger than `ARG_MAX' bytes. The GNU system + has no specific limit on the argument list size, so this error + code cannot result, but you may get `ENOMEM' instead if the + arguments are too big for available memory. + +`ENOEXEC' + The specified file can't be executed because it isn't in the right + format. + +`ENOMEM' + Executing the specified file requires more storage than is + available. + + If execution of the new file succeeds, it updates the access time +field of the file as if the file had been read. *Note File Times::, +for more details about access times of files. + + The point at which the file is closed again is not specified, but is +at some point before the process exits or before another process image +is executed. + + Executing a new process image completely changes the contents of +memory, copying only the argument and environment strings to new +locations. But many other attributes of the process are unchanged: + + * The process ID and the parent process ID. *Note Process Creation + Concepts::. + + * Session and process group membership. *Note Concepts of Job + Control::. + + * Real user ID and group ID, and supplementary group IDs. *Note + Process Persona::. + + * Pending alarms. *Note Setting an Alarm::. + + * Current working directory and root directory. *Note Working + Directory::. In the GNU system, the root directory is not copied + when executing a setuid program; instead the system default root + directory is used for the new program. + + * File mode creation mask. *Note Setting Permissions::. + + * Process signal mask; see *Note Process Signal Mask::. + + * Pending signals; see *Note Blocking Signals::. + + * Elapsed processor time associated with the process; see *Note + Processor Time::. + + If the set-user-ID and set-group-ID mode bits of the process image +file are set, this affects the effective user ID and effective group ID +(respectively) of the process. These concepts are discussed in detail +in *Note Process Persona::. + + Signals that are set to be ignored in the existing process image are +also set to be ignored in the new process image. All other signals are +set to the default action in the new process image. For more +information about signals, see *Note Signal Handling::. + + File descriptors open in the existing process image remain open in +the new process image, unless they have the `FD_CLOEXEC' +(close-on-exec) flag set. The files that remain open inherit all +attributes of the open file description from the existing process image, +including file locks. File descriptors are discussed in *Note +Low-Level I/O::. + + Streams, by contrast, cannot survive through `exec' functions, +because they are located in the memory of the process itself. The new +process image has no streams except those it creates afresh. Each of +the streams in the pre-`exec' process image has a descriptor inside it, +and these descriptors do survive through `exec' (provided that they do +not have `FD_CLOEXEC' set). The new process image can reconnect these +to new streams using `fdopen' (*note Descriptors and Streams::). + + +File: libc.info, Node: Process Completion, Next: Process Completion Status, Prev: Executing a File, Up: Processes + +Process Completion +================== + + The functions described in this section are used to wait for a child +process to terminate or stop, and determine its status. These functions +are declared in the header file `sys/wait.h'. + + - Function: pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS) + The `waitpid' function is used to request status information from a + child process whose process ID is PID. Normally, the calling + process is suspended until the child process makes status + information available by terminating. + + Other values for the PID argument have special interpretations. A + value of `-1' or `WAIT_ANY' requests status information for any + child process; a value of `0' or `WAIT_MYPGRP' requests + information for any child process in the same process group as the + calling process; and any other negative value - PGID requests + information for any child process whose process group ID is PGID. + + If status information for a child process is available + immediately, this function returns immediately without waiting. + If more than one eligible child process has status information + available, one of them is chosen randomly, and its status is + returned immediately. To get the status from the other eligible + child processes, you need to call `waitpid' again. + + The OPTIONS argument is a bit mask. Its value should be the + bitwise OR (that is, the `|' operator) of zero or more of the + `WNOHANG' and `WUNTRACED' flags. You can use the `WNOHANG' flag + to indicate that the parent process shouldn't wait; and the + `WUNTRACED' flag to request status information from stopped + processes as well as processes that have terminated. + + The status information from the child process is stored in the + object that STATUS-PTR points to, unless STATUS-PTR is a null + pointer. + + This function is a cancelation point in multi-threaded programs. + This is a problem if the thread allocates some resources (like + memory, file descriptors, semaphores or whatever) at the time + `waitpid' is called. If the thread gets canceled these resources + stay allocated until the program ends. To avoid this calls to + `waitpid' should be protected using cancelation handlers. + + The return value is normally the process ID of the child process + whose status is reported. If there are child processes but none + of them is waiting to be noticed, `waitpid' will block until one + is. However, if the `WNOHANG' option was specified, `waitpid' + will return zero instead of blocking. + + If a specific PID to wait for was given to `waitpid', it will + ignore all other children (if any). Therefore if there are + children waiting to be noticed but the child whose PID was + specified is not one of them, `waitpid' will block or return zero + as described above. + + A value of `-1' is returned in case of error. The following + `errno' error conditions are defined for this function: + + `EINTR' + The function was interrupted by delivery of a signal to the + calling process. *Note Interrupted Primitives::. + + `ECHILD' + There are no child processes to wait for, or the specified PID + is not a child of the calling process. + + `EINVAL' + An invalid value was provided for the OPTIONS argument. + + These symbolic constants are defined as values for the PID argument +to the `waitpid' function. + +`WAIT_ANY' + This constant macro (whose value is `-1') specifies that `waitpid' + should return status information about any child process. + +`WAIT_MYPGRP' + This constant (with value `0') specifies that `waitpid' should + return status information about any child process in the same + process group as the calling process. + + These symbolic constants are defined as flags for the OPTIONS +argument to the `waitpid' function. You can bitwise-OR the flags +together to obtain a value to use as the argument. + +`WNOHANG' + This flag specifies that `waitpid' should return immediately + instead of waiting, if there is no child process ready to be + noticed. + +`WUNTRACED' + This flag specifies that `waitpid' should report the status of any + child processes that have been stopped as well as those that have + terminated. + + - Function: pid_t wait (int *STATUS-PTR) + This is a simplified version of `waitpid', and is used to wait + until any one child process terminates. The call: + + wait (&status) + + is exactly equivalent to: + + waitpid (-1, &status, 0) + + This function is a cancelation point in multi-threaded programs. + This is a problem if the thread allocates some resources (like + memory, file descriptors, semaphores or whatever) at the time + `wait' is called. If the thread gets canceled these resources + stay allocated until the program ends. To avoid this calls to + `wait' should be protected using cancelation handlers. + + - Function: pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS, + struct rusage *USAGE) + If USAGE is a null pointer, `wait4' is equivalent to `waitpid + (PID, STATUS-PTR, OPTIONS)'. + + If USAGE is not null, `wait4' stores usage figures for the child + process in `*RUSAGE' (but only if the child has terminated, not if + it has stopped). *Note Resource Usage::. + + This function is a BSD extension. + + Here's an example of how to use `waitpid' to get the status from all +child processes that have terminated, without ever waiting. This +function is designed to be a handler for `SIGCHLD', the signal that +indicates that at least one child process has terminated. + + void + sigchld_handler (int signum) + { + int pid, status, serrno; + serrno = errno; + while (1) + { + pid = waitpid (WAIT_ANY, &status, WNOHANG); + if (pid < 0) + { + perror ("waitpid"); + break; + } + if (pid == 0) + break; + notice_termination (pid, status); + } + errno = serrno; + } + + +File: libc.info, Node: Process Completion Status, Next: BSD Wait Functions, Prev: Process Completion, Up: Processes + +Process Completion Status +========================= + + If the exit status value (*note Program Termination::) of the child +process is zero, then the status value reported by `waitpid' or `wait' +is also zero. You can test for other kinds of information encoded in +the returned status value using the following macros. These macros are +defined in the header file `sys/wait.h'. + + - Macro: int WIFEXITED (int STATUS) + This macro returns a nonzero value if the child process terminated + normally with `exit' or `_exit'. + + - Macro: int WEXITSTATUS (int STATUS) + If `WIFEXITED' is true of STATUS, this macro returns the low-order + 8 bits of the exit status value from the child process. *Note + Exit Status::. + + - Macro: int WIFSIGNALED (int STATUS) + This macro returns a nonzero value if the child process terminated + because it received a signal that was not handled. *Note Signal + Handling::. + + - Macro: int WTERMSIG (int STATUS) + If `WIFSIGNALED' is true of STATUS, this macro returns the signal + number of the signal that terminated the child process. + + - Macro: int WCOREDUMP (int STATUS) + This macro returns a nonzero value if the child process terminated + and produced a core dump. + + - Macro: int WIFSTOPPED (int STATUS) + This macro returns a nonzero value if the child process is stopped. + + - Macro: int WSTOPSIG (int STATUS) + If `WIFSTOPPED' is true of STATUS, this macro returns the signal + number of the signal that caused the child process to stop. + + +File: libc.info, Node: BSD Wait Functions, Next: Process Creation Example, Prev: Process Completion Status, Up: Processes + +BSD Process Wait Functions +========================== + + The GNU library also provides these related facilities for +compatibility with BSD Unix. BSD uses the `union wait' data type to +represent status values rather than an `int'. The two representations +are actually interchangeable; they describe the same bit patterns. The +GNU C Library defines macros such as `WEXITSTATUS' so that they will +work on either kind of object, and the `wait' function is defined to +accept either type of pointer as its STATUS-PTR argument. + + These functions are declared in `sys/wait.h'. + + - Data Type: union wait + This data type represents program termination status values. It + has the following members: + + `int w_termsig' + The value of this member is the same as that of the + `WTERMSIG' macro. + + `int w_coredump' + The value of this member is the same as that of the + `WCOREDUMP' macro. + + `int w_retcode' + The value of this member is the same as that of the + `WEXITSTATUS' macro. + + `int w_stopsig' + The value of this member is the same as that of the + `WSTOPSIG' macro. + + Instead of accessing these members directly, you should use the + equivalent macros. + + The `wait3' function is the predecessor to `wait4', which is more +flexible. `wait3' is now obsolete. + + - Function: pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct + rusage *USAGE) + If USAGE is a null pointer, `wait3' is equivalent to `waitpid (-1, + STATUS-PTR, OPTIONS)'. + + If USAGE is not null, `wait3' stores usage figures for the child + process in `*RUSAGE' (but only if the child has terminated, not if + it has stopped). *Note Resource Usage::. + + +File: libc.info, Node: Process Creation Example, Prev: BSD Wait Functions, Up: Processes + +Process Creation Example +======================== + + Here is an example program showing how you might write a function +similar to the built-in `system'. It executes its COMMAND argument +using the equivalent of `sh -c COMMAND'. + + #include + #include + #include + #include + #include + + /* Execute the command using this shell program. */ + #define SHELL "/bin/sh" + + int + my_system (const char *command) + { + int status; + pid_t pid; + + pid = fork (); + if (pid == 0) + { + /* This is the child process. Execute the shell command. */ + execl (SHELL, SHELL, "-c", command, NULL); + _exit (EXIT_FAILURE); + } + else if (pid < 0) + /* The fork failed. Report failure. */ + status = -1; + else + /* This is the parent process. Wait for the child to complete. */ + if (waitpid (pid, &status, 0) != pid) + status = -1; + return status; + } + + There are a couple of things you should pay attention to in this +example. + + Remember that the first `argv' argument supplied to the program +represents the name of the program being executed. That is why, in the +call to `execl', `SHELL' is supplied once to name the program to +execute and a second time to supply a value for `argv[0]'. + + The `execl' call in the child process doesn't return if it is +successful. If it fails, you must do something to make the child +process terminate. Just returning a bad status code with `return' +would leave two processes running the original program. Instead, the +right behavior is for the child process to report failure to its parent +process. + + Call `_exit' to accomplish this. The reason for using `_exit' +instead of `exit' is to avoid flushing fully buffered streams such as +`stdout'. The buffers of these streams probably contain data that was +copied from the parent process by the `fork', data that will be output +eventually by the parent process. Calling `exit' in the child would +output the data twice. *Note Termination Internals::. + + +File: libc.info, Node: Job Control, Next: Name Service Switch, Prev: Processes, Up: Top + +Job Control +*********** + + "Job control" refers to the protocol for allowing a user to move +between multiple "process groups" (or "jobs") within a single "login +session". The job control facilities are set up so that appropriate +behavior for most programs happens automatically and they need not do +anything special about job control. So you can probably ignore the +material in this chapter unless you are writing a shell or login +program. + + You need to be familiar with concepts relating to process creation +(*note Process Creation Concepts::) and signal handling (*note Signal +Handling::) in order to understand this material presented in this +chapter. + +* Menu: + +* Concepts of Job Control:: Jobs can be controlled by a shell. +* Job Control is Optional:: Not all POSIX systems support job control. +* Controlling Terminal:: How a process gets its controlling terminal. +* Access to the Terminal:: How processes share the controlling terminal. +* Orphaned Process Groups:: Jobs left after the user logs out. +* Implementing a Shell:: What a shell must do to implement job control. +* Functions for Job Control:: Functions to control process groups. + + File: libc.info, Node: Concepts of Job Control, Next: Job Control is Optional, Up: Job Control Concepts of Job Control @@ -675,641 +1170,4 @@ a job into the background. Here is the if (kill (-j->pgid, SIGCONT) < 0) perror ("kill (SIGCONT)"); } - - -File: libc.info, Node: Stopped and Terminated Jobs, Next: Continuing Stopped Jobs, Prev: Foreground and Background, Up: Implementing a Shell - -Stopped and Terminated Jobs ---------------------------- - - When a foreground process is launched, the shell must block until -all of the processes in that job have either terminated or stopped. It -can do this by calling the `waitpid' function; see *Note Process -Completion::. Use the `WUNTRACED' option so that status is reported -for processes that stop as well as processes that terminate. - - The shell must also check on the status of background jobs so that it -can report terminated and stopped jobs to the user; this can be done by -calling `waitpid' with the `WNOHANG' option. A good place to put a -such a check for terminated and stopped jobs is just before prompting -for a new command. - - The shell can also receive asynchronous notification that there is -status information available for a child process by establishing a -handler for `SIGCHLD' signals. *Note Signal Handling::. - - In the sample shell program, the `SIGCHLD' signal is normally -ignored. This is to avoid reentrancy problems involving the global data -structures the shell manipulates. But at specific times when the shell -is not using these data structures--such as when it is waiting for -input on the terminal--it makes sense to enable a handler for -`SIGCHLD'. The same function that is used to do the synchronous status -checks (`do_job_notification', in this case) can also be called from -within this handler. - - Here are the parts of the sample shell program that deal with -checking the status of jobs and reporting the information to the user. - - /* Store the status of the process PID that was returned by waitpid. - Return 0 if all went well, nonzero otherwise. */ - - int - mark_process_status (pid_t pid, int status) - { - job *j; - process *p; - - if (pid > 0) - { - /* Update the record for the process. */ - for (j = first_job; j; j = j->next) - for (p = j->first_process; p; p = p->next) - if (p->pid == pid) - { - p->status = status; - if (WIFSTOPPED (status)) - p->stopped = 1; - else - { - p->completed = 1; - if (WIFSIGNALED (status)) - fprintf (stderr, "%d: Terminated by signal %d.\n", - (int) pid, WTERMSIG (p->status)); - } - return 0; - } - fprintf (stderr, "No child process %d.\n", pid); - return -1; - } - else if (pid == 0 || errno == ECHILD) - /* No processes ready to report. */ - return -1; - else { - /* Other weird errors. */ - perror ("waitpid"); - return -1; - } - } - - /* Check for processes that have status information available, - without blocking. */ - - void - update_status (void) - { - int status; - pid_t pid; - - do - pid = waitpid (WAIT_ANY, &status, WUNTRACED|WNOHANG); - while (!mark_process_status (pid, status)); - } - - /* Check for processes that have status information available, - blocking until all processes in the given job have reported. */ - - void - wait_for_job (job *j) - { - int status; - pid_t pid; - - do - pid = waitpid (WAIT_ANY, &status, WUNTRACED); - while (!mark_process_status (pid, status) - && !job_is_stopped (j) - && !job_is_completed (j)); - } - - /* Format information about job status for the user to look at. */ - - void - format_job_info (job *j, const char *status) - { - fprintf (stderr, "%ld (%s): %s\n", (long)j->pgid, status, j->command); - } - - /* Notify the user about stopped or terminated jobs. - Delete terminated jobs from the active job list. */ - - void - do_job_notification (void) - { - job *j, *jlast, *jnext; - process *p; - - /* Update status information for child processes. */ - update_status (); - - jlast = NULL; - for (j = first_job; j; j = jnext) - { - jnext = j->next; - - /* If all processes have completed, tell the user the job has - completed and delete it from the list of active jobs. */ - if (job_is_completed (j)) { - format_job_info (j, "completed"); - if (jlast) - jlast->next = jnext; - else - first_job = jnext; - free_job (j); - } - - /* Notify the user about stopped jobs, - marking them so that we won't do this more than once. */ - else if (job_is_stopped (j) && !j->notified) { - format_job_info (j, "stopped"); - j->notified = 1; - jlast = j; - } - - /* Don't say anything about jobs that are still running. */ - else - jlast = j; - } - } - - -File: libc.info, Node: Continuing Stopped Jobs, Next: Missing Pieces, Prev: Stopped and Terminated Jobs, Up: Implementing a Shell - -Continuing Stopped Jobs ------------------------ - - The shell can continue a stopped job by sending a `SIGCONT' signal -to its process group. If the job is being continued in the foreground, -the shell should first invoke `tcsetpgrp' to give the job access to the -terminal, and restore the saved terminal settings. After continuing a -job in the foreground, the shell should wait for the job to stop or -complete, as if the job had just been launched in the foreground. - - The sample shell program handles both newly created and continued -jobs with the same pair of functions, `put_job_in_foreground' and -`put_job_in_background'. The definitions of these functions were given -in *Note Foreground and Background::. When continuing a stopped job, a -nonzero value is passed as the CONT argument to ensure that the -`SIGCONT' signal is sent and the terminal modes reset, as appropriate. - - This leaves only a function for updating the shell's internal -bookkeeping about the job being continued: - - /* Mark a stopped job J as being running again. */ - - void - mark_job_as_running (job *j) - { - Process *p; - - for (p = j->first_process; p; p = p->next) - p->stopped = 0; - j->notified = 0; - } - - /* Continue the job J. */ - - void - continue_job (job *j, int foreground) - { - mark_job_as_running (j); - if (foreground) - put_job_in_foreground (j, 1); - else - put_job_in_background (j, 1); - } - - -File: libc.info, Node: Missing Pieces, Prev: Continuing Stopped Jobs, Up: Implementing a Shell - -The Missing Pieces ------------------- - - The code extracts for the sample shell included in this chapter are -only a part of the entire shell program. In particular, nothing at all -has been said about how `job' and `program' data structures are -allocated and initialized. - - Most real shells provide a complex user interface that has support -for a command language; variables; abbreviations, substitutions, and -pattern matching on file names; and the like. All of this is far too -complicated to explain here! Instead, we have concentrated on showing -how to implement the core process creation and job control functions -that can be called from such a shell. - - Here is a table summarizing the major entry points we have presented: - -`void init_shell (void)' - Initialize the shell's internal state. *Note Initializing the - Shell::. - -`void launch_job (job *J, int FOREGROUND)' - Launch the job J as either a foreground or background job. *Note - Launching Jobs::. - -`void do_job_notification (void)' - Check for and report any jobs that have terminated or stopped. - Can be called synchronously or within a handler for `SIGCHLD' - signals. *Note Stopped and Terminated Jobs::. - -`void continue_job (job *J, int FOREGROUND)' - Continue the job J. *Note Continuing Stopped Jobs::. - - Of course, a real shell would also want to provide other functions -for managing jobs. For example, it would be useful to have commands to -list all active jobs or to send a signal (such as `SIGKILL') to a job. - - -File: libc.info, Node: Functions for Job Control, Prev: Implementing a Shell, Up: Job Control - -Functions for Job Control -========================= - - This section contains detailed descriptions of the functions relating -to job control. - -* Menu: - -* Identifying the Terminal:: Determining the controlling terminal's name. -* Process Group Functions:: Functions for manipulating process groups. -* Terminal Access Functions:: Functions for controlling terminal access. - - -File: libc.info, Node: Identifying the Terminal, Next: Process Group Functions, Up: Functions for Job Control - -Identifying the Controlling Terminal ------------------------------------- - - You can use the `ctermid' function to get a file name that you can -use to open the controlling terminal. In the GNU library, it returns -the same string all the time: `"/dev/tty"'. That is a special "magic" -file name that refers to the controlling terminal of the current -process (if it has one). To find the name of the specific terminal -device, use `ttyname'; *note Is It a Terminal::. - - The function `ctermid' is declared in the header file `stdio.h'. - - - Function: char * ctermid (char *STRING) - The `ctermid' function returns a string containing the file name of - the controlling terminal for the current process. If STRING is - not a null pointer, it should be an array that can hold at least - `L_ctermid' characters; the string is returned in this array. - Otherwise, a pointer to a string in a static area is returned, - which might get overwritten on subsequent calls to this function. - - An empty string is returned if the file name cannot be determined - for any reason. Even if a file name is returned, access to the - file it represents is not guaranteed. - - - Macro: int L_ctermid - The value of this macro is an integer constant expression that - represents the size of a string large enough to hold the file name - returned by `ctermid'. - - See also the `isatty' and `ttyname' functions, in *Note Is It a -Terminal::. - - -File: libc.info, Node: Process Group Functions, Next: Terminal Access Functions, Prev: Identifying the Terminal, Up: Functions for Job Control - -Process Group Functions ------------------------ - - Here are descriptions of the functions for manipulating process -groups. Your program should include the header files `sys/types.h' and -`unistd.h' to use these functions. - - - Function: pid_t setsid (void) - The `setsid' function creates a new session. The calling process - becomes the session leader, and is put in a new process group whose - process group ID is the same as the process ID of that process. - There are initially no other processes in the new process group, - and no other process groups in the new session. - - This function also makes the calling process have no controlling - terminal. - - The `setsid' function returns the new process group ID of the - calling process if successful. A return value of `-1' indicates an - error. The following `errno' error conditions are defined for this - function: - - `EPERM' - The calling process is already a process group leader, or - there is already another process group around that has the - same process group ID. - - - Function: pid_t getsid (pid_t PID) - The `getsid' function returns the process group ID of the session - leader of the specified process. If a PID is `0', the process - group ID of the session leader of the current process is returned. - - In case of error `-1' is returned and `errno' is set. The - following `errno' error conditions are defined for this function: - - `ESRCH' - There is no process with the given process ID PID. - - `EPERM' - The calling process and the process specified by PID are in - different sessions, and the implementation doesn't allow to - access the process group ID of the session leader of the - process with ID PID from the calling process. - - The `getpgrp' function has two definitions: one derived from BSD -Unix, and one from the POSIX.1 standard. The feature test macros you -have selected (*note Feature Test Macros::) determine which definition -you get. Specifically, you get the BSD version if you define -`_BSD_SOURCE'; otherwise, you get the POSIX version if you define -`_POSIX_SOURCE' or `_GNU_SOURCE'. Programs written for old BSD systems -will not include `unistd.h', which defines `getpgrp' specially under -`_BSD_SOURCE'. You must link such programs with the `-lbsd-compat' -option to get the BSD definition. - - - POSIX.1 Function: pid_t getpgrp (void) - The POSIX.1 definition of `getpgrp' returns the process group ID of - the calling process. - - - BSD Function: pid_t getpgrp (pid_t PID) - The BSD definition of `getpgrp' returns the process group ID of the - process PID. You can supply a value of `0' for the PID argument - to get information about the calling process. - - - System V Function: int getpgid (pid_t PID) - `getpgid' is the same as the BSD function `getpgrp'. It returns - the process group ID of the process PID. You can supply a value - of `0' for the PID argument to get information about the calling - process. - - In case of error `-1' is returned and `errno' is set. The - following `errno' error conditions are defined for this function: - - `ESRCH' - There is no process with the given process ID PID. The - calling process and the process specified by PID are in - different sessions, and the implementation doesn't allow to - access the process group ID of the process with ID PID from - the calling process. - - - Function: int setpgid (pid_t PID, pid_t PGID) - The `setpgid' function puts the process PID into the process group - PGID. As a special case, either PID or PGID can be zero to - indicate the process ID of the calling process. - - This function fails on a system that does not support job control. - *Note Job Control is Optional::, for more information. - - If the operation is successful, `setpgid' returns zero. Otherwise - it returns `-1'. The following `errno' error conditions are - defined for this function: - - `EACCES' - The child process named by PID has executed an `exec' - function since it was forked. - - `EINVAL' - The value of the PGID is not valid. - - `ENOSYS' - The system doesn't support job control. - - `EPERM' - The process indicated by the PID argument is a session leader, - or is not in the same session as the calling process, or the - value of the PGID argument doesn't match a process group ID - in the same session as the calling process. - - `ESRCH' - The process indicated by the PID argument is not the calling - process or a child of the calling process. - - - Function: int setpgrp (pid_t PID, pid_t PGID) - This is the BSD Unix name for `setpgid'. Both functions do exactly - the same thing. - - -File: libc.info, Node: Terminal Access Functions, Prev: Process Group Functions, Up: Functions for Job Control - -Functions for Controlling Terminal Access ------------------------------------------ - - These are the functions for reading or setting the foreground -process group of a terminal. You should include the header files -`sys/types.h' and `unistd.h' in your application to use these functions. - - Although these functions take a file descriptor argument to specify -the terminal device, the foreground job is associated with the terminal -file itself and not a particular open file descriptor. - - - Function: pid_t tcgetpgrp (int FILEDES) - This function returns the process group ID of the foreground - process group associated with the terminal open on descriptor - FILEDES. - - If there is no foreground process group, the return value is a - number greater than `1' that does not match the process group ID - of any existing process group. This can happen if all of the - processes in the job that was formerly the foreground job have - terminated, and no other job has yet been moved into the - foreground. - - In case of an error, a value of `-1' is returned. The following - `errno' error conditions are defined for this function: - - `EBADF' - The FILEDES argument is not a valid file descriptor. - - `ENOSYS' - The system doesn't support job control. - - `ENOTTY' - The terminal file associated with the FILEDES argument isn't - the controlling terminal of the calling process. - - - Function: int tcsetpgrp (int FILEDES, pid_t PGID) - This function is used to set a terminal's foreground process group - ID. The argument FILEDES is a descriptor which specifies the - terminal; PGID specifies the process group. The calling process - must be a member of the same session as PGID and must have the same - controlling terminal. - - For terminal access purposes, this function is treated as output. - If it is called from a background process on its controlling - terminal, normally all processes in the process group are sent a - `SIGTTOU' signal. The exception is if the calling process itself - is ignoring or blocking `SIGTTOU' signals, in which case the - operation is performed and no signal is sent. - - If successful, `tcsetpgrp' returns `0'. A return value of `-1' - indicates an error. The following `errno' error conditions are - defined for this function: - - `EBADF' - The FILEDES argument is not a valid file descriptor. - - `EINVAL' - The PGID argument is not valid. - - `ENOSYS' - The system doesn't support job control. - - `ENOTTY' - The FILEDES isn't the controlling terminal of the calling - process. - - `EPERM' - The PGID isn't a process group in the same session as the - calling process. - - - Function: pid_t tcgetsid (int FILDES) - This function is used to obtain the process group ID of the session - for which the terminal specified by FILDES is the controlling - terminal. If the call is successful the group ID is returned. - Otherwise the return value is `(pid_t) -1' and the global variable - ERRNO is set to the following value: - `EBADF' - The FILEDES argument is not a valid file descriptor. - - `ENOTTY' - The calling process does not have a controlling terminal, or - the file is not the controlling terminal. - - -File: libc.info, Node: Name Service Switch, Next: Users and Groups, Prev: Job Control, Up: Top - -System Databases and Name Service Switch -**************************************** - - Various functions in the C Library need to be configured to work -correctly in the local environment. Traditionally, this was done by -using files (e.g., `/etc/passwd'), but other nameservices (like the -Network Information Service (NIS) and the Domain Name Service (DNS)) -became popular, and were hacked into the C library, usually with a fixed -search order (*note frobnicate: (jargon)frobnicate.). - - The GNU C Library contains a cleaner solution of this problem. It is -designed after a method used by Sun Microsystems in the C library of -Solaris 2. GNU C Library follows their name and calls this scheme -"Name Service Switch" (NSS). - - Though the interface might be similar to Sun's version there is no -common code. We never saw any source code of Sun's implementation and -so the internal interface is incompatible. This also manifests in the -file names we use as we will see later. - -* Menu: - -* NSS Basics:: What is this NSS good for. -* NSS Configuration File:: Configuring NSS. -* NSS Module Internals:: How does it work internally. -* Extending NSS:: What to do to add services or databases. - - -File: libc.info, Node: NSS Basics, Next: NSS Configuration File, Prev: Name Service Switch, Up: Name Service Switch - -NSS Basics -========== - - The basic idea is to put the implementation of the different services -offered to access the databases in separate modules. This has some -advantages: - - 1. Contributors can add new services without adding them to GNU C - Library. - - 2. The modules can be updated separately. - - 3. The C library image is smaller. - - To fulfill the first goal above the ABI of the modules will be -described below. For getting the implementation of a new service right -it is important to understand how the functions in the modules get -called. They are in no way designed to be used by the programmer -directly. Instead the programmer should only use the documented and -standardized functions to access the databases. - -The databases available in the NSS are - -`aliases' - Mail aliases - -`ethers' - Ethernet numbers, - -`group' - Groups of users, *note Group Database::. - -`hosts' - Host names and numbers, *note Host Names::. - -`netgroup' - Network wide list of host and users, *note Netgroup Database::. - -`networks' - Network names and numbers, *note Networks Database::. - -`protocols' - Network protocols, *note Protocols Database::. - -`passwd' - User passwords, *note User Database::. - -`rpc' - Remote procedure call names and numbers, - -`services' - Network services, *note Services Database::. - -`shadow' - Shadow user passwords, - -There will be some more added later (`automount', `bootparams', -`netmasks', and `publickey'). - - -File: libc.info, Node: NSS Configuration File, Next: NSS Module Internals, Prev: NSS Basics, Up: Name Service Switch - -The NSS Configuration File -========================== - - Somehow the NSS code must be told about the wishes of the user. For -this reason there is the file `/etc/nsswitch.conf'. For each database -this file contain a specification how the lookup process should work. -The file could look like this: - - # /etc/nsswitch.conf - # - # Name Service Switch configuration file. - # - - passwd: db files nis - shadow: files - group: db files nis - - hosts: files nisplus nis dns - networks: nisplus [NOTFOUND=return] files - - ethers: nisplus [NOTFOUND=return] db files - protocols: nisplus [NOTFOUND=return] db files - rpc: nisplus [NOTFOUND=return] db files - services: nisplus [NOTFOUND=return] db files - - The first column is the database as you can guess from the table -above. The rest of the line specifies how the lookup process works. -Please note that you specify the way it works for each database -individually. This cannot be done with the old way of a monolithic -implementation. - - The configuration specification for each database can contain two -different items: - - * the service specification like `files', `db', or `nis'. - - * the reaction on lookup result like `[NOTFOUND=return]'. - -* Menu: - -* Services in the NSS configuration:: Service names in the NSS configuration. -* Actions in the NSS configuration:: React appropriately to the lookup result. -* Notes on NSS Configuration File:: Things to take care about while - configuring NSS. diff -durpNa glibc-2.2.2/manual/libc.info-43 glibc-2.2.3/manual/libc.info-43 --- glibc-2.2.2/manual/libc.info-43 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-43 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,643 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Stopped and Terminated Jobs, Next: Continuing Stopped Jobs, Prev: Foreground and Background, Up: Implementing a Shell + +Stopped and Terminated Jobs +--------------------------- + + When a foreground process is launched, the shell must block until +all of the processes in that job have either terminated or stopped. It +can do this by calling the `waitpid' function; see *Note Process +Completion::. Use the `WUNTRACED' option so that status is reported +for processes that stop as well as processes that terminate. + + The shell must also check on the status of background jobs so that it +can report terminated and stopped jobs to the user; this can be done by +calling `waitpid' with the `WNOHANG' option. A good place to put a +such a check for terminated and stopped jobs is just before prompting +for a new command. + + The shell can also receive asynchronous notification that there is +status information available for a child process by establishing a +handler for `SIGCHLD' signals. *Note Signal Handling::. + + In the sample shell program, the `SIGCHLD' signal is normally +ignored. This is to avoid reentrancy problems involving the global data +structures the shell manipulates. But at specific times when the shell +is not using these data structures--such as when it is waiting for +input on the terminal--it makes sense to enable a handler for +`SIGCHLD'. The same function that is used to do the synchronous status +checks (`do_job_notification', in this case) can also be called from +within this handler. + + Here are the parts of the sample shell program that deal with +checking the status of jobs and reporting the information to the user. + + /* Store the status of the process PID that was returned by waitpid. + Return 0 if all went well, nonzero otherwise. */ + + int + mark_process_status (pid_t pid, int status) + { + job *j; + process *p; + + if (pid > 0) + { + /* Update the record for the process. */ + for (j = first_job; j; j = j->next) + for (p = j->first_process; p; p = p->next) + if (p->pid == pid) + { + p->status = status; + if (WIFSTOPPED (status)) + p->stopped = 1; + else + { + p->completed = 1; + if (WIFSIGNALED (status)) + fprintf (stderr, "%d: Terminated by signal %d.\n", + (int) pid, WTERMSIG (p->status)); + } + return 0; + } + fprintf (stderr, "No child process %d.\n", pid); + return -1; + } + else if (pid == 0 || errno == ECHILD) + /* No processes ready to report. */ + return -1; + else { + /* Other weird errors. */ + perror ("waitpid"); + return -1; + } + } + + /* Check for processes that have status information available, + without blocking. */ + + void + update_status (void) + { + int status; + pid_t pid; + + do + pid = waitpid (WAIT_ANY, &status, WUNTRACED|WNOHANG); + while (!mark_process_status (pid, status)); + } + + /* Check for processes that have status information available, + blocking until all processes in the given job have reported. */ + + void + wait_for_job (job *j) + { + int status; + pid_t pid; + + do + pid = waitpid (WAIT_ANY, &status, WUNTRACED); + while (!mark_process_status (pid, status) + && !job_is_stopped (j) + && !job_is_completed (j)); + } + + /* Format information about job status for the user to look at. */ + + void + format_job_info (job *j, const char *status) + { + fprintf (stderr, "%ld (%s): %s\n", (long)j->pgid, status, j->command); + } + + /* Notify the user about stopped or terminated jobs. + Delete terminated jobs from the active job list. */ + + void + do_job_notification (void) + { + job *j, *jlast, *jnext; + process *p; + + /* Update status information for child processes. */ + update_status (); + + jlast = NULL; + for (j = first_job; j; j = jnext) + { + jnext = j->next; + + /* If all processes have completed, tell the user the job has + completed and delete it from the list of active jobs. */ + if (job_is_completed (j)) { + format_job_info (j, "completed"); + if (jlast) + jlast->next = jnext; + else + first_job = jnext; + free_job (j); + } + + /* Notify the user about stopped jobs, + marking them so that we won't do this more than once. */ + else if (job_is_stopped (j) && !j->notified) { + format_job_info (j, "stopped"); + j->notified = 1; + jlast = j; + } + + /* Don't say anything about jobs that are still running. */ + else + jlast = j; + } + } + + +File: libc.info, Node: Continuing Stopped Jobs, Next: Missing Pieces, Prev: Stopped and Terminated Jobs, Up: Implementing a Shell + +Continuing Stopped Jobs +----------------------- + + The shell can continue a stopped job by sending a `SIGCONT' signal +to its process group. If the job is being continued in the foreground, +the shell should first invoke `tcsetpgrp' to give the job access to the +terminal, and restore the saved terminal settings. After continuing a +job in the foreground, the shell should wait for the job to stop or +complete, as if the job had just been launched in the foreground. + + The sample shell program handles both newly created and continued +jobs with the same pair of functions, `put_job_in_foreground' and +`put_job_in_background'. The definitions of these functions were given +in *Note Foreground and Background::. When continuing a stopped job, a +nonzero value is passed as the CONT argument to ensure that the +`SIGCONT' signal is sent and the terminal modes reset, as appropriate. + + This leaves only a function for updating the shell's internal +bookkeeping about the job being continued: + + /* Mark a stopped job J as being running again. */ + + void + mark_job_as_running (job *j) + { + Process *p; + + for (p = j->first_process; p; p = p->next) + p->stopped = 0; + j->notified = 0; + } + + /* Continue the job J. */ + + void + continue_job (job *j, int foreground) + { + mark_job_as_running (j); + if (foreground) + put_job_in_foreground (j, 1); + else + put_job_in_background (j, 1); + } + + +File: libc.info, Node: Missing Pieces, Prev: Continuing Stopped Jobs, Up: Implementing a Shell + +The Missing Pieces +------------------ + + The code extracts for the sample shell included in this chapter are +only a part of the entire shell program. In particular, nothing at all +has been said about how `job' and `program' data structures are +allocated and initialized. + + Most real shells provide a complex user interface that has support +for a command language; variables; abbreviations, substitutions, and +pattern matching on file names; and the like. All of this is far too +complicated to explain here! Instead, we have concentrated on showing +how to implement the core process creation and job control functions +that can be called from such a shell. + + Here is a table summarizing the major entry points we have presented: + +`void init_shell (void)' + Initialize the shell's internal state. *Note Initializing the + Shell::. + +`void launch_job (job *J, int FOREGROUND)' + Launch the job J as either a foreground or background job. *Note + Launching Jobs::. + +`void do_job_notification (void)' + Check for and report any jobs that have terminated or stopped. + Can be called synchronously or within a handler for `SIGCHLD' + signals. *Note Stopped and Terminated Jobs::. + +`void continue_job (job *J, int FOREGROUND)' + Continue the job J. *Note Continuing Stopped Jobs::. + + Of course, a real shell would also want to provide other functions +for managing jobs. For example, it would be useful to have commands to +list all active jobs or to send a signal (such as `SIGKILL') to a job. + + +File: libc.info, Node: Functions for Job Control, Prev: Implementing a Shell, Up: Job Control + +Functions for Job Control +========================= + + This section contains detailed descriptions of the functions relating +to job control. + +* Menu: + +* Identifying the Terminal:: Determining the controlling terminal's name. +* Process Group Functions:: Functions for manipulating process groups. +* Terminal Access Functions:: Functions for controlling terminal access. + + +File: libc.info, Node: Identifying the Terminal, Next: Process Group Functions, Up: Functions for Job Control + +Identifying the Controlling Terminal +------------------------------------ + + You can use the `ctermid' function to get a file name that you can +use to open the controlling terminal. In the GNU library, it returns +the same string all the time: `"/dev/tty"'. That is a special "magic" +file name that refers to the controlling terminal of the current +process (if it has one). To find the name of the specific terminal +device, use `ttyname'; *note Is It a Terminal::. + + The function `ctermid' is declared in the header file `stdio.h'. + + - Function: char * ctermid (char *STRING) + The `ctermid' function returns a string containing the file name of + the controlling terminal for the current process. If STRING is + not a null pointer, it should be an array that can hold at least + `L_ctermid' characters; the string is returned in this array. + Otherwise, a pointer to a string in a static area is returned, + which might get overwritten on subsequent calls to this function. + + An empty string is returned if the file name cannot be determined + for any reason. Even if a file name is returned, access to the + file it represents is not guaranteed. + + - Macro: int L_ctermid + The value of this macro is an integer constant expression that + represents the size of a string large enough to hold the file name + returned by `ctermid'. + + See also the `isatty' and `ttyname' functions, in *Note Is It a +Terminal::. + + +File: libc.info, Node: Process Group Functions, Next: Terminal Access Functions, Prev: Identifying the Terminal, Up: Functions for Job Control + +Process Group Functions +----------------------- + + Here are descriptions of the functions for manipulating process +groups. Your program should include the header files `sys/types.h' and +`unistd.h' to use these functions. + + - Function: pid_t setsid (void) + The `setsid' function creates a new session. The calling process + becomes the session leader, and is put in a new process group whose + process group ID is the same as the process ID of that process. + There are initially no other processes in the new process group, + and no other process groups in the new session. + + This function also makes the calling process have no controlling + terminal. + + The `setsid' function returns the new process group ID of the + calling process if successful. A return value of `-1' indicates an + error. The following `errno' error conditions are defined for this + function: + + `EPERM' + The calling process is already a process group leader, or + there is already another process group around that has the + same process group ID. + + - Function: pid_t getsid (pid_t PID) + The `getsid' function returns the process group ID of the session + leader of the specified process. If a PID is `0', the process + group ID of the session leader of the current process is returned. + + In case of error `-1' is returned and `errno' is set. The + following `errno' error conditions are defined for this function: + + `ESRCH' + There is no process with the given process ID PID. + + `EPERM' + The calling process and the process specified by PID are in + different sessions, and the implementation doesn't allow to + access the process group ID of the session leader of the + process with ID PID from the calling process. + + The `getpgrp' function has two definitions: one derived from BSD +Unix, and one from the POSIX.1 standard. The feature test macros you +have selected (*note Feature Test Macros::) determine which definition +you get. Specifically, you get the BSD version if you define +`_BSD_SOURCE'; otherwise, you get the POSIX version if you define +`_POSIX_SOURCE' or `_GNU_SOURCE'. Programs written for old BSD systems +will not include `unistd.h', which defines `getpgrp' specially under +`_BSD_SOURCE'. You must link such programs with the `-lbsd-compat' +option to get the BSD definition. + + - POSIX.1 Function: pid_t getpgrp (void) + The POSIX.1 definition of `getpgrp' returns the process group ID of + the calling process. + + - BSD Function: pid_t getpgrp (pid_t PID) + The BSD definition of `getpgrp' returns the process group ID of the + process PID. You can supply a value of `0' for the PID argument + to get information about the calling process. + + - System V Function: int getpgid (pid_t PID) + `getpgid' is the same as the BSD function `getpgrp'. It returns + the process group ID of the process PID. You can supply a value + of `0' for the PID argument to get information about the calling + process. + + In case of error `-1' is returned and `errno' is set. The + following `errno' error conditions are defined for this function: + + `ESRCH' + There is no process with the given process ID PID. The + calling process and the process specified by PID are in + different sessions, and the implementation doesn't allow to + access the process group ID of the process with ID PID from + the calling process. + + - Function: int setpgid (pid_t PID, pid_t PGID) + The `setpgid' function puts the process PID into the process group + PGID. As a special case, either PID or PGID can be zero to + indicate the process ID of the calling process. + + This function fails on a system that does not support job control. + *Note Job Control is Optional::, for more information. + + If the operation is successful, `setpgid' returns zero. Otherwise + it returns `-1'. The following `errno' error conditions are + defined for this function: + + `EACCES' + The child process named by PID has executed an `exec' + function since it was forked. + + `EINVAL' + The value of the PGID is not valid. + + `ENOSYS' + The system doesn't support job control. + + `EPERM' + The process indicated by the PID argument is a session leader, + or is not in the same session as the calling process, or the + value of the PGID argument doesn't match a process group ID + in the same session as the calling process. + + `ESRCH' + The process indicated by the PID argument is not the calling + process or a child of the calling process. + + - Function: int setpgrp (pid_t PID, pid_t PGID) + This is the BSD Unix name for `setpgid'. Both functions do exactly + the same thing. + + +File: libc.info, Node: Terminal Access Functions, Prev: Process Group Functions, Up: Functions for Job Control + +Functions for Controlling Terminal Access +----------------------------------------- + + These are the functions for reading or setting the foreground +process group of a terminal. You should include the header files +`sys/types.h' and `unistd.h' in your application to use these functions. + + Although these functions take a file descriptor argument to specify +the terminal device, the foreground job is associated with the terminal +file itself and not a particular open file descriptor. + + - Function: pid_t tcgetpgrp (int FILEDES) + This function returns the process group ID of the foreground + process group associated with the terminal open on descriptor + FILEDES. + + If there is no foreground process group, the return value is a + number greater than `1' that does not match the process group ID + of any existing process group. This can happen if all of the + processes in the job that was formerly the foreground job have + terminated, and no other job has yet been moved into the + foreground. + + In case of an error, a value of `-1' is returned. The following + `errno' error conditions are defined for this function: + + `EBADF' + The FILEDES argument is not a valid file descriptor. + + `ENOSYS' + The system doesn't support job control. + + `ENOTTY' + The terminal file associated with the FILEDES argument isn't + the controlling terminal of the calling process. + + - Function: int tcsetpgrp (int FILEDES, pid_t PGID) + This function is used to set a terminal's foreground process group + ID. The argument FILEDES is a descriptor which specifies the + terminal; PGID specifies the process group. The calling process + must be a member of the same session as PGID and must have the same + controlling terminal. + + For terminal access purposes, this function is treated as output. + If it is called from a background process on its controlling + terminal, normally all processes in the process group are sent a + `SIGTTOU' signal. The exception is if the calling process itself + is ignoring or blocking `SIGTTOU' signals, in which case the + operation is performed and no signal is sent. + + If successful, `tcsetpgrp' returns `0'. A return value of `-1' + indicates an error. The following `errno' error conditions are + defined for this function: + + `EBADF' + The FILEDES argument is not a valid file descriptor. + + `EINVAL' + The PGID argument is not valid. + + `ENOSYS' + The system doesn't support job control. + + `ENOTTY' + The FILEDES isn't the controlling terminal of the calling + process. + + `EPERM' + The PGID isn't a process group in the same session as the + calling process. + + - Function: pid_t tcgetsid (int FILDES) + This function is used to obtain the process group ID of the session + for which the terminal specified by FILDES is the controlling + terminal. If the call is successful the group ID is returned. + Otherwise the return value is `(pid_t) -1' and the global variable + ERRNO is set to the following value: + `EBADF' + The FILEDES argument is not a valid file descriptor. + + `ENOTTY' + The calling process does not have a controlling terminal, or + the file is not the controlling terminal. + + +File: libc.info, Node: Name Service Switch, Next: Users and Groups, Prev: Job Control, Up: Top + +System Databases and Name Service Switch +**************************************** + + Various functions in the C Library need to be configured to work +correctly in the local environment. Traditionally, this was done by +using files (e.g., `/etc/passwd'), but other nameservices (like the +Network Information Service (NIS) and the Domain Name Service (DNS)) +became popular, and were hacked into the C library, usually with a fixed +search order (*note frobnicate: (jargon)frobnicate.). + + The GNU C Library contains a cleaner solution of this problem. It is +designed after a method used by Sun Microsystems in the C library of +Solaris 2. GNU C Library follows their name and calls this scheme +"Name Service Switch" (NSS). + + Though the interface might be similar to Sun's version there is no +common code. We never saw any source code of Sun's implementation and +so the internal interface is incompatible. This also manifests in the +file names we use as we will see later. + +* Menu: + +* NSS Basics:: What is this NSS good for. +* NSS Configuration File:: Configuring NSS. +* NSS Module Internals:: How does it work internally. +* Extending NSS:: What to do to add services or databases. + + +File: libc.info, Node: NSS Basics, Next: NSS Configuration File, Prev: Name Service Switch, Up: Name Service Switch + +NSS Basics +========== + + The basic idea is to put the implementation of the different services +offered to access the databases in separate modules. This has some +advantages: + + 1. Contributors can add new services without adding them to GNU C + Library. + + 2. The modules can be updated separately. + + 3. The C library image is smaller. + + To fulfill the first goal above the ABI of the modules will be +described below. For getting the implementation of a new service right +it is important to understand how the functions in the modules get +called. They are in no way designed to be used by the programmer +directly. Instead the programmer should only use the documented and +standardized functions to access the databases. + +The databases available in the NSS are + +`aliases' + Mail aliases + +`ethers' + Ethernet numbers, + +`group' + Groups of users, *note Group Database::. + +`hosts' + Host names and numbers, *note Host Names::. + +`netgroup' + Network wide list of host and users, *note Netgroup Database::. + +`networks' + Network names and numbers, *note Networks Database::. + +`protocols' + Network protocols, *note Protocols Database::. + +`passwd' + User passwords, *note User Database::. + +`rpc' + Remote procedure call names and numbers, + +`services' + Network services, *note Services Database::. + +`shadow' + Shadow user passwords, + +There will be some more added later (`automount', `bootparams', +`netmasks', and `publickey'). + + +File: libc.info, Node: NSS Configuration File, Next: NSS Module Internals, Prev: NSS Basics, Up: Name Service Switch + +The NSS Configuration File +========================== + + Somehow the NSS code must be told about the wishes of the user. For +this reason there is the file `/etc/nsswitch.conf'. For each database +this file contain a specification how the lookup process should work. +The file could look like this: + + # /etc/nsswitch.conf + # + # Name Service Switch configuration file. + # + + passwd: db files nis + shadow: files + group: db files nis + + hosts: files nisplus nis dns + networks: nisplus [NOTFOUND=return] files + + ethers: nisplus [NOTFOUND=return] db files + protocols: nisplus [NOTFOUND=return] db files + rpc: nisplus [NOTFOUND=return] db files + services: nisplus [NOTFOUND=return] db files + + The first column is the database as you can guess from the table +above. The rest of the line specifies how the lookup process works. +Please note that you specify the way it works for each database +individually. This cannot be done with the old way of a monolithic +implementation. + + The configuration specification for each database can contain two +different items: + + * the service specification like `files', `db', or `nis'. + + * the reaction on lookup result like `[NOTFOUND=return]'. + +* Menu: + +* Services in the NSS configuration:: Service names in the NSS configuration. +* Actions in the NSS configuration:: React appropriately to the lookup result. +* Notes on NSS Configuration File:: Things to take care about while + configuring NSS. + + File: libc.info, Node: Services in the NSS configuration, Next: Actions in the NSS configuration, Prev: NSS Configuration File, Up: NSS Configuration File Services in the NSS configuration File @@ -603,576 +1240,4 @@ groups". Users who are members of the sa of that group. Each group has a "group name" and "group ID". *Note Group Database::, for how to find information about a group ID or group name. - - -File: libc.info, Node: Process Persona, Next: Why Change Persona, Prev: User and Group IDs, Up: Users and Groups - -The Persona of a Process -======================== - - At any time, each process has an "effective user ID", a "effective -group ID", and a set of "supplementary group IDs". These IDs determine -the privileges of the process. They are collectively called the -"persona" of the process, because they determine "who it is" for -purposes of access control. - - Your login shell starts out with a persona which consists of your -user ID, your default group ID, and your supplementary group IDs (if -you are in more than one group). In normal circumstances, all your -other processes inherit these values. - - A process also has a "real user ID" which identifies the user who -created the process, and a "real group ID" which identifies that user's -default group. These values do not play a role in access control, so -we do not consider them part of the persona. But they are also -important. - - Both the real and effective user ID can be changed during the -lifetime of a process. *Note Why Change Persona::. - - For details on how a process's effective user ID and group IDs affect -its permission to access files, see *Note Access Permission::. - - The effective user ID of a process also controls permissions for -sending signals using the `kill' function. *Note Signaling Another -Process::. - - Finally, there are many operations which can only be performed by a -process whose effective user ID is zero. A process with this user ID is -a "privileged process". Commonly the user name `root' is associated -with user ID 0, but there may be other user names with this ID. - - -File: libc.info, Node: Why Change Persona, Next: How Change Persona, Prev: Process Persona, Up: Users and Groups - -Why Change the Persona of a Process? -==================================== - - The most obvious situation where it is necessary for a process to -change its user and/or group IDs is the `login' program. When `login' -starts running, its user ID is `root'. Its job is to start a shell -whose user and group IDs are those of the user who is logging in. (To -accomplish this fully, `login' must set the real user and group IDs as -well as its persona. But this is a special case.) - - The more common case of changing persona is when an ordinary user -program needs access to a resource that wouldn't ordinarily be -accessible to the user actually running it. - - For example, you may have a file that is controlled by your program -but that shouldn't be read or modified directly by other users, either -because it implements some kind of locking protocol, or because you want -to preserve the integrity or privacy of the information it contains. -This kind of restricted access can be implemented by having the program -change its effective user or group ID to match that of the resource. - - Thus, imagine a game program that saves scores in a file. The game -program itself needs to be able to update this file no matter who is -running it, but if users can write the file without going through the -game, they can give themselves any scores they like. Some people -consider this undesirable, or even reprehensible. It can be prevented -by creating a new user ID and login name (say, `games') to own the -scores file, and make the file writable only by this user. Then, when -the game program wants to update this file, it can change its effective -user ID to be that for `games'. In effect, the program must adopt the -persona of `games' so it can write the scores file. - - -File: libc.info, Node: How Change Persona, Next: Reading Persona, Prev: Why Change Persona, Up: Users and Groups - -How an Application Can Change Persona -===================================== - - The ability to change the persona of a process can be a source of -unintentional privacy violations, or even intentional abuse. Because of -the potential for problems, changing persona is restricted to special -circumstances. - - You can't arbitrarily set your user ID or group ID to anything you -want; only privileged processes can do that. Instead, the normal way -for a program to change its persona is that it has been set up in -advance to change to a particular user or group. This is the function -of the setuid and setgid bits of a file's access mode. *Note -Permission Bits::. - - When the setuid bit of an executable file is on, executing that file -gives the process a third user ID: the "file user ID". This ID is set -to the owner ID of the file. The system then changes the effective -user ID to the file user ID. The real user ID remains as it was. -Likewise, if the setgid bit is on, the process is given a "file group -ID" equal to the group ID of the file, and its effective group ID is -changed to the file group ID. - - If a process has a file ID (user or group), then it can at any time -change its effective ID to its real ID and back to its file ID. -Programs use this feature to relinquish their special privileges except -when they actually need them. This makes it less likely that they can -be tricked into doing something inappropriate with their privileges. - - *Portability Note:* Older systems do not have file IDs. To -determine if a system has this feature, you can test the compiler -define `_POSIX_SAVED_IDS'. (In the POSIX standard, file IDs are known -as saved IDs.) - - *Note File Attributes::, for a more general discussion of file modes -and accessibility. - - -File: libc.info, Node: Reading Persona, Next: Setting User ID, Prev: How Change Persona, Up: Users and Groups - -Reading the Persona of a Process -================================ - - Here are detailed descriptions of the functions for reading the user -and group IDs of a process, both real and effective. To use these -facilities, you must include the header files `sys/types.h' and -`unistd.h'. - - - Data Type: uid_t - This is an integer data type used to represent user IDs. In the - GNU library, this is an alias for `unsigned int'. - - - Data Type: gid_t - This is an integer data type used to represent group IDs. In the - GNU library, this is an alias for `unsigned int'. - - - Function: uid_t getuid (void) - The `getuid' function returns the real user ID of the process. - - - Function: gid_t getgid (void) - The `getgid' function returns the real group ID of the process. - - - Function: uid_t geteuid (void) - The `geteuid' function returns the effective user ID of the - process. - - - Function: gid_t getegid (void) - The `getegid' function returns the effective group ID of the - process. - - - Function: int getgroups (int COUNT, gid_t *GROUPS) - The `getgroups' function is used to inquire about the supplementary - group IDs of the process. Up to COUNT of these group IDs are - stored in the array GROUPS; the return value from the function is - the number of group IDs actually stored. If COUNT is smaller than - the total number of supplementary group IDs, then `getgroups' - returns a value of `-1' and `errno' is set to `EINVAL'. - - If COUNT is zero, then `getgroups' just returns the total number - of supplementary group IDs. On systems that do not support - supplementary groups, this will always be zero. - - Here's how to use `getgroups' to read all the supplementary group - IDs: - - gid_t * - read_all_groups (void) - { - int ngroups = getgroups (0, NULL); - gid_t *groups - = (gid_t *) xmalloc (ngroups * sizeof (gid_t)); - int val = getgroups (ngroups, groups); - if (val < 0) - { - free (groups); - return NULL; - } - return groups; - } - - -File: libc.info, Node: Setting User ID, Next: Setting Groups, Prev: Reading Persona, Up: Users and Groups - -Setting the User ID -=================== - - This section describes the functions for altering the user ID (real -and/or effective) of a process. To use these facilities, you must -include the header files `sys/types.h' and `unistd.h'. - - - Function: int seteuid (uid_t NEWEUID) - This function sets the effective user ID of a process to NEWUID, - provided that the process is allowed to change its effective user - ID. A privileged process (effective user ID zero) can change its - effective user ID to any legal value. An unprivileged process - with a file user ID can change its effective user ID to its real - user ID or to its file user ID. Otherwise, a process may not - change its effective user ID at all. - - The `seteuid' function returns a value of `0' to indicate - successful completion, and a value of `-1' to indicate an error. - The following `errno' error conditions are defined for this - function: - - `EINVAL' - The value of the NEWUID argument is invalid. - - `EPERM' - The process may not change to the specified ID. - - Older systems (those without the `_POSIX_SAVED_IDS' feature) do not - have this function. - - - Function: int setuid (uid_t NEWUID) - If the calling process is privileged, this function sets both the - real and effective user ID of the process to NEWUID. It also - deletes the file user ID of the process, if any. NEWUID may be any - legal value. (Once this has been done, there is no way to recover - the old effective user ID.) - - If the process is not privileged, and the system supports the - `_POSIX_SAVED_IDS' feature, then this function behaves like - `seteuid'. - - The return values and error conditions are the same as for - `seteuid'. - - - Function: int setreuid (uid_t RUID, uid_t EUID) - This function sets the real user ID of the process to RUID and the - effective user ID to EUID. If RUID is `-1', it means not to - change the real user ID; likewise if EUID is `-1', it means not to - change the effective user ID. - - The `setreuid' function exists for compatibility with 4.3 BSD Unix, - which does not support file IDs. You can use this function to - swap the effective and real user IDs of the process. (Privileged - processes are not limited to this particular usage.) If file IDs - are supported, you should use that feature instead of this - function. *Note Enable/Disable Setuid::. - - The return value is `0' on success and `-1' on failure. The - following `errno' error conditions are defined for this function: - - `EPERM' - The process does not have the appropriate privileges; you do - not have permission to change to the specified ID. - - -File: libc.info, Node: Setting Groups, Next: Enable/Disable Setuid, Prev: Setting User ID, Up: Users and Groups - -Setting the Group IDs -===================== - - This section describes the functions for altering the group IDs (real -and effective) of a process. To use these facilities, you must include -the header files `sys/types.h' and `unistd.h'. - - - Function: int setegid (gid_t NEWGID) - This function sets the effective group ID of the process to - NEWGID, provided that the process is allowed to change its group - ID. Just as with `seteuid', if the process is privileged it may - change its effective group ID to any value; if it isn't, but it - has a file group ID, then it may change to its real group ID or - file group ID; otherwise it may not change its effective group ID. - - Note that a process is only privileged if its effective _user_ ID - is zero. The effective group ID only affects access permissions. - - The return values and error conditions for `setegid' are the same - as those for `seteuid'. - - This function is only present if `_POSIX_SAVED_IDS' is defined. - - - Function: int setgid (gid_t NEWGID) - This function sets both the real and effective group ID of the - process to NEWGID, provided that the process is privileged. It - also deletes the file group ID, if any. - - If the process is not privileged, then `setgid' behaves like - `setegid'. - - The return values and error conditions for `setgid' are the same - as those for `seteuid'. - - - Function: int setregid (gid_t RGID, gid_t EGID) - This function sets the real group ID of the process to RGID and - the effective group ID to EGID. If RGID is `-1', it means not to - change the real group ID; likewise if EGID is `-1', it means not - to change the effective group ID. - - The `setregid' function is provided for compatibility with 4.3 BSD - Unix, which does not support file IDs. You can use this function - to swap the effective and real group IDs of the process. - (Privileged processes are not limited to this usage.) If file IDs - are supported, you should use that feature instead of using this - function. *Note Enable/Disable Setuid::. - - The return values and error conditions for `setregid' are the same - as those for `setreuid'. - - `setuid' and `setgid' behave differently depending on whether the -effective user ID at the time is zero. If it is not zero, they behave -like `seteuid' and `setegid'. If it is, they change both effective and -real IDs and delete the file ID. To avoid confusion, we recommend you -always use `seteuid' and `setegid' except when you know the effective -user ID is zero and your intent is to change the persona permanently. -This case is rare--most of the programs that need it, such as `login' -and `su', have already been written. - - Note that if your program is setuid to some user other than `root', -there is no way to drop privileges permanently. - - The system also lets privileged processes change their supplementary -group IDs. To use `setgroups' or `initgroups', your programs should -include the header file `grp.h'. - - - Function: int setgroups (size_t COUNT, gid_t *GROUPS) - This function sets the process's supplementary group IDs. It can - only be called from privileged processes. The COUNT argument - specifies the number of group IDs in the array GROUPS. - - This function returns `0' if successful and `-1' on error. The - following `errno' error conditions are defined for this function: - - `EPERM' - The calling process is not privileged. - - - Function: int initgroups (const char *USER, gid_t GID) - The `initgroups' function sets the process's supplementary group - IDs to be the normal default for the user name USER. If GID is not - -1, it includes that group also. - - This function works by scanning the group database for all the - groups USER belongs to. It then calls `setgroups' with the list it - has constructed. - - The return values and error conditions are the same as for - `setgroups'. - - -File: libc.info, Node: Enable/Disable Setuid, Next: Setuid Program Example, Prev: Setting Groups, Up: Users and Groups - -Enabling and Disabling Setuid Access -==================================== - - A typical setuid program does not need its special access all of the -time. It's a good idea to turn off this access when it isn't needed, -so it can't possibly give unintended access. - - If the system supports the `_POSIX_SAVED_IDS' feature, you can -accomplish this with `seteuid'. When the game program starts, its real -user ID is `jdoe', its effective user ID is `games', and its saved user -ID is also `games'. The program should record both user ID values once -at the beginning, like this: - - user_user_id = getuid (); - game_user_id = geteuid (); - - Then it can turn off game file access with - - seteuid (user_user_id); - -and turn it on with - - seteuid (game_user_id); - -Throughout this process, the real user ID remains `jdoe' and the file -user ID remains `games', so the program can always set its effective -user ID to either one. - - On other systems that don't support file user IDs, you can turn -setuid access on and off by using `setreuid' to swap the real and -effective user IDs of the process, as follows: - - setreuid (geteuid (), getuid ()); - -This special case is always allowed--it cannot fail. - - Why does this have the effect of toggling the setuid access? -Suppose a game program has just started, and its real user ID is `jdoe' -while its effective user ID is `games'. In this state, the game can -write the scores file. If it swaps the two uids, the real becomes -`games' and the effective becomes `jdoe'; now the program has only -`jdoe' access. Another swap brings `games' back to the effective user -ID and restores access to the scores file. - - In order to handle both kinds of systems, test for the saved user ID -feature with a preprocessor conditional, like this: - - #ifdef _POSIX_SAVED_IDS - setuid (user_user_id); - #else - setreuid (geteuid (), getuid ()); - #endif - - -File: libc.info, Node: Setuid Program Example, Next: Tips for Setuid, Prev: Enable/Disable Setuid, Up: Users and Groups - -Setuid Program Example -====================== - - Here's an example showing how to set up a program that changes its -effective user ID. - - This is part of a game program called `caber-toss' that manipulates -a file `scores' that should be writable only by the game program -itself. The program assumes that its executable file will be installed -with the setuid bit set and owned by the same user as the `scores' -file. Typically, a system administrator will set up an account like -`games' for this purpose. - - The executable file is given mode `4755', so that doing an `ls -l' -on it produces output like: - - -rwsr-xr-x 1 games 184422 Jul 30 15:17 caber-toss - -The setuid bit shows up in the file modes as the `s'. - - The scores file is given mode `644', and doing an `ls -l' on it -shows: - - -rw-r--r-- 1 games 0 Jul 31 15:33 scores - - Here are the parts of the program that show how to set up the changed -user ID. This program is conditionalized so that it makes use of the -file IDs feature if it is supported, and otherwise uses `setreuid' to -swap the effective and real user IDs. - - #include - #include - #include - #include - - - /* Remember the effective and real UIDs. */ - - static uid_t euid, ruid; - - - /* Restore the effective UID to its original value. */ - - void - do_setuid (void) - { - int status; - - #ifdef _POSIX_SAVED_IDS - status = seteuid (euid); - #else - status = setreuid (ruid, euid); - #endif - if (status < 0) { - fprintf (stderr, "Couldn't set uid.\n"); - exit (status); - } - } - - - /* Set the effective UID to the real UID. */ - - void - undo_setuid (void) - { - int status; - - #ifdef _POSIX_SAVED_IDS - status = seteuid (ruid); - #else - status = setreuid (euid, ruid); - #endif - if (status < 0) { - fprintf (stderr, "Couldn't set uid.\n"); - exit (status); - } - } - - /* Main program. */ - - int - main (void) - { - /* Remember the real and effective user IDs. */ - ruid = getuid (); - euid = geteuid (); - undo_setuid (); - - /* Do the game and record the score. */ - ... - } - - Notice how the first thing the `main' function does is to set the -effective user ID back to the real user ID. This is so that any other -file accesses that are performed while the user is playing the game use -the real user ID for determining permissions. Only when the program -needs to open the scores file does it switch back to the file user ID, -like this: - - /* Record the score. */ - - int - record_score (int score) - { - FILE *stream; - char *myname; - - /* Open the scores file. */ - do_setuid (); - stream = fopen (SCORES_FILE, "a"); - undo_setuid (); - - /* Write the score to the file. */ - if (stream) - { - myname = cuserid (NULL); - if (score < 0) - fprintf (stream, "%10s: Couldn't lift the caber.\n", myname); - else - fprintf (stream, "%10s: %d feet.\n", myname, score); - fclose (stream); - return 0; - } - else - return -1; - } - - -File: libc.info, Node: Tips for Setuid, Next: Who Logged In, Prev: Setuid Program Example, Up: Users and Groups - -Tips for Writing Setuid Programs -================================ - - It is easy for setuid programs to give the user access that isn't -intended--in fact, if you want to avoid this, you need to be careful. -Here are some guidelines for preventing unintended access and -minimizing its consequences when it does occur: - - * Don't have `setuid' programs with privileged user IDs such as - `root' unless it is absolutely necessary. If the resource is - specific to your particular program, it's better to define a new, - nonprivileged user ID or group ID just to manage that resource. - It's better if you can write your program to use a special group - than a special user. - - * Be cautious about using the `exec' functions in combination with - changing the effective user ID. Don't let users of your program - execute arbitrary programs under a changed user ID. Executing a - shell is especially bad news. Less obviously, the `execlp' and - `execvp' functions are a potential risk (since the program they - execute depends on the user's `PATH' environment variable). - - If you must `exec' another program under a changed ID, specify an - absolute file name (*note File Name Resolution::) for the - executable, and make sure that the protections on that executable - and _all_ containing directories are such that ordinary users - cannot replace it with some other program. - - You should also check the arguments passed to the program to make - sure they do not have unexpected effects. Likewise, you should - examine the environment variables. Decide which arguments and - variables are safe, and reject all others. - - You should never use `system' in a privileged program, because it - invokes a shell. - - * Only use the user ID controlling the resource in the part of the - program that actually uses that resource. When you're finished - with it, restore the effective user ID back to the actual user's - user ID. *Note Enable/Disable Setuid::. - - * If the `setuid' part of your program needs to access other files - besides the controlled resource, it should verify that the real - user would ordinarily have permission to access those files. You - can use the `access' function (*note Access Permission::) to check - this; it uses the real user and group IDs, rather than the - effective IDs. diff -durpNa glibc-2.2.2/manual/libc.info-44 glibc-2.2.3/manual/libc.info-44 --- glibc-2.2.2/manual/libc.info-44 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-44 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,578 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Process Persona, Next: Why Change Persona, Prev: User and Group IDs, Up: Users and Groups + +The Persona of a Process +======================== + + At any time, each process has an "effective user ID", a "effective +group ID", and a set of "supplementary group IDs". These IDs determine +the privileges of the process. They are collectively called the +"persona" of the process, because they determine "who it is" for +purposes of access control. + + Your login shell starts out with a persona which consists of your +user ID, your default group ID, and your supplementary group IDs (if +you are in more than one group). In normal circumstances, all your +other processes inherit these values. + + A process also has a "real user ID" which identifies the user who +created the process, and a "real group ID" which identifies that user's +default group. These values do not play a role in access control, so +we do not consider them part of the persona. But they are also +important. + + Both the real and effective user ID can be changed during the +lifetime of a process. *Note Why Change Persona::. + + For details on how a process's effective user ID and group IDs affect +its permission to access files, see *Note Access Permission::. + + The effective user ID of a process also controls permissions for +sending signals using the `kill' function. *Note Signaling Another +Process::. + + Finally, there are many operations which can only be performed by a +process whose effective user ID is zero. A process with this user ID is +a "privileged process". Commonly the user name `root' is associated +with user ID 0, but there may be other user names with this ID. + + +File: libc.info, Node: Why Change Persona, Next: How Change Persona, Prev: Process Persona, Up: Users and Groups + +Why Change the Persona of a Process? +==================================== + + The most obvious situation where it is necessary for a process to +change its user and/or group IDs is the `login' program. When `login' +starts running, its user ID is `root'. Its job is to start a shell +whose user and group IDs are those of the user who is logging in. (To +accomplish this fully, `login' must set the real user and group IDs as +well as its persona. But this is a special case.) + + The more common case of changing persona is when an ordinary user +program needs access to a resource that wouldn't ordinarily be +accessible to the user actually running it. + + For example, you may have a file that is controlled by your program +but that shouldn't be read or modified directly by other users, either +because it implements some kind of locking protocol, or because you want +to preserve the integrity or privacy of the information it contains. +This kind of restricted access can be implemented by having the program +change its effective user or group ID to match that of the resource. + + Thus, imagine a game program that saves scores in a file. The game +program itself needs to be able to update this file no matter who is +running it, but if users can write the file without going through the +game, they can give themselves any scores they like. Some people +consider this undesirable, or even reprehensible. It can be prevented +by creating a new user ID and login name (say, `games') to own the +scores file, and make the file writable only by this user. Then, when +the game program wants to update this file, it can change its effective +user ID to be that for `games'. In effect, the program must adopt the +persona of `games' so it can write the scores file. + + +File: libc.info, Node: How Change Persona, Next: Reading Persona, Prev: Why Change Persona, Up: Users and Groups + +How an Application Can Change Persona +===================================== + + The ability to change the persona of a process can be a source of +unintentional privacy violations, or even intentional abuse. Because of +the potential for problems, changing persona is restricted to special +circumstances. + + You can't arbitrarily set your user ID or group ID to anything you +want; only privileged processes can do that. Instead, the normal way +for a program to change its persona is that it has been set up in +advance to change to a particular user or group. This is the function +of the setuid and setgid bits of a file's access mode. *Note +Permission Bits::. + + When the setuid bit of an executable file is on, executing that file +gives the process a third user ID: the "file user ID". This ID is set +to the owner ID of the file. The system then changes the effective +user ID to the file user ID. The real user ID remains as it was. +Likewise, if the setgid bit is on, the process is given a "file group +ID" equal to the group ID of the file, and its effective group ID is +changed to the file group ID. + + If a process has a file ID (user or group), then it can at any time +change its effective ID to its real ID and back to its file ID. +Programs use this feature to relinquish their special privileges except +when they actually need them. This makes it less likely that they can +be tricked into doing something inappropriate with their privileges. + + *Portability Note:* Older systems do not have file IDs. To +determine if a system has this feature, you can test the compiler +define `_POSIX_SAVED_IDS'. (In the POSIX standard, file IDs are known +as saved IDs.) + + *Note File Attributes::, for a more general discussion of file modes +and accessibility. + + +File: libc.info, Node: Reading Persona, Next: Setting User ID, Prev: How Change Persona, Up: Users and Groups + +Reading the Persona of a Process +================================ + + Here are detailed descriptions of the functions for reading the user +and group IDs of a process, both real and effective. To use these +facilities, you must include the header files `sys/types.h' and +`unistd.h'. + + - Data Type: uid_t + This is an integer data type used to represent user IDs. In the + GNU library, this is an alias for `unsigned int'. + + - Data Type: gid_t + This is an integer data type used to represent group IDs. In the + GNU library, this is an alias for `unsigned int'. + + - Function: uid_t getuid (void) + The `getuid' function returns the real user ID of the process. + + - Function: gid_t getgid (void) + The `getgid' function returns the real group ID of the process. + + - Function: uid_t geteuid (void) + The `geteuid' function returns the effective user ID of the + process. + + - Function: gid_t getegid (void) + The `getegid' function returns the effective group ID of the + process. + + - Function: int getgroups (int COUNT, gid_t *GROUPS) + The `getgroups' function is used to inquire about the supplementary + group IDs of the process. Up to COUNT of these group IDs are + stored in the array GROUPS; the return value from the function is + the number of group IDs actually stored. If COUNT is smaller than + the total number of supplementary group IDs, then `getgroups' + returns a value of `-1' and `errno' is set to `EINVAL'. + + If COUNT is zero, then `getgroups' just returns the total number + of supplementary group IDs. On systems that do not support + supplementary groups, this will always be zero. + + Here's how to use `getgroups' to read all the supplementary group + IDs: + + gid_t * + read_all_groups (void) + { + int ngroups = getgroups (0, NULL); + gid_t *groups + = (gid_t *) xmalloc (ngroups * sizeof (gid_t)); + int val = getgroups (ngroups, groups); + if (val < 0) + { + free (groups); + return NULL; + } + return groups; + } + + +File: libc.info, Node: Setting User ID, Next: Setting Groups, Prev: Reading Persona, Up: Users and Groups + +Setting the User ID +=================== + + This section describes the functions for altering the user ID (real +and/or effective) of a process. To use these facilities, you must +include the header files `sys/types.h' and `unistd.h'. + + - Function: int seteuid (uid_t NEWEUID) + This function sets the effective user ID of a process to NEWUID, + provided that the process is allowed to change its effective user + ID. A privileged process (effective user ID zero) can change its + effective user ID to any legal value. An unprivileged process + with a file user ID can change its effective user ID to its real + user ID or to its file user ID. Otherwise, a process may not + change its effective user ID at all. + + The `seteuid' function returns a value of `0' to indicate + successful completion, and a value of `-1' to indicate an error. + The following `errno' error conditions are defined for this + function: + + `EINVAL' + The value of the NEWUID argument is invalid. + + `EPERM' + The process may not change to the specified ID. + + Older systems (those without the `_POSIX_SAVED_IDS' feature) do not + have this function. + + - Function: int setuid (uid_t NEWUID) + If the calling process is privileged, this function sets both the + real and effective user ID of the process to NEWUID. It also + deletes the file user ID of the process, if any. NEWUID may be any + legal value. (Once this has been done, there is no way to recover + the old effective user ID.) + + If the process is not privileged, and the system supports the + `_POSIX_SAVED_IDS' feature, then this function behaves like + `seteuid'. + + The return values and error conditions are the same as for + `seteuid'. + + - Function: int setreuid (uid_t RUID, uid_t EUID) + This function sets the real user ID of the process to RUID and the + effective user ID to EUID. If RUID is `-1', it means not to + change the real user ID; likewise if EUID is `-1', it means not to + change the effective user ID. + + The `setreuid' function exists for compatibility with 4.3 BSD Unix, + which does not support file IDs. You can use this function to + swap the effective and real user IDs of the process. (Privileged + processes are not limited to this particular usage.) If file IDs + are supported, you should use that feature instead of this + function. *Note Enable/Disable Setuid::. + + The return value is `0' on success and `-1' on failure. The + following `errno' error conditions are defined for this function: + + `EPERM' + The process does not have the appropriate privileges; you do + not have permission to change to the specified ID. + + +File: libc.info, Node: Setting Groups, Next: Enable/Disable Setuid, Prev: Setting User ID, Up: Users and Groups + +Setting the Group IDs +===================== + + This section describes the functions for altering the group IDs (real +and effective) of a process. To use these facilities, you must include +the header files `sys/types.h' and `unistd.h'. + + - Function: int setegid (gid_t NEWGID) + This function sets the effective group ID of the process to + NEWGID, provided that the process is allowed to change its group + ID. Just as with `seteuid', if the process is privileged it may + change its effective group ID to any value; if it isn't, but it + has a file group ID, then it may change to its real group ID or + file group ID; otherwise it may not change its effective group ID. + + Note that a process is only privileged if its effective _user_ ID + is zero. The effective group ID only affects access permissions. + + The return values and error conditions for `setegid' are the same + as those for `seteuid'. + + This function is only present if `_POSIX_SAVED_IDS' is defined. + + - Function: int setgid (gid_t NEWGID) + This function sets both the real and effective group ID of the + process to NEWGID, provided that the process is privileged. It + also deletes the file group ID, if any. + + If the process is not privileged, then `setgid' behaves like + `setegid'. + + The return values and error conditions for `setgid' are the same + as those for `seteuid'. + + - Function: int setregid (gid_t RGID, gid_t EGID) + This function sets the real group ID of the process to RGID and + the effective group ID to EGID. If RGID is `-1', it means not to + change the real group ID; likewise if EGID is `-1', it means not + to change the effective group ID. + + The `setregid' function is provided for compatibility with 4.3 BSD + Unix, which does not support file IDs. You can use this function + to swap the effective and real group IDs of the process. + (Privileged processes are not limited to this usage.) If file IDs + are supported, you should use that feature instead of using this + function. *Note Enable/Disable Setuid::. + + The return values and error conditions for `setregid' are the same + as those for `setreuid'. + + `setuid' and `setgid' behave differently depending on whether the +effective user ID at the time is zero. If it is not zero, they behave +like `seteuid' and `setegid'. If it is, they change both effective and +real IDs and delete the file ID. To avoid confusion, we recommend you +always use `seteuid' and `setegid' except when you know the effective +user ID is zero and your intent is to change the persona permanently. +This case is rare--most of the programs that need it, such as `login' +and `su', have already been written. + + Note that if your program is setuid to some user other than `root', +there is no way to drop privileges permanently. + + The system also lets privileged processes change their supplementary +group IDs. To use `setgroups' or `initgroups', your programs should +include the header file `grp.h'. + + - Function: int setgroups (size_t COUNT, gid_t *GROUPS) + This function sets the process's supplementary group IDs. It can + only be called from privileged processes. The COUNT argument + specifies the number of group IDs in the array GROUPS. + + This function returns `0' if successful and `-1' on error. The + following `errno' error conditions are defined for this function: + + `EPERM' + The calling process is not privileged. + + - Function: int initgroups (const char *USER, gid_t GID) + The `initgroups' function sets the process's supplementary group + IDs to be the normal default for the user name USER. If GID is not + -1, it includes that group also. + + This function works by scanning the group database for all the + groups USER belongs to. It then calls `setgroups' with the list it + has constructed. + + The return values and error conditions are the same as for + `setgroups'. + + +File: libc.info, Node: Enable/Disable Setuid, Next: Setuid Program Example, Prev: Setting Groups, Up: Users and Groups + +Enabling and Disabling Setuid Access +==================================== + + A typical setuid program does not need its special access all of the +time. It's a good idea to turn off this access when it isn't needed, +so it can't possibly give unintended access. + + If the system supports the `_POSIX_SAVED_IDS' feature, you can +accomplish this with `seteuid'. When the game program starts, its real +user ID is `jdoe', its effective user ID is `games', and its saved user +ID is also `games'. The program should record both user ID values once +at the beginning, like this: + + user_user_id = getuid (); + game_user_id = geteuid (); + + Then it can turn off game file access with + + seteuid (user_user_id); + +and turn it on with + + seteuid (game_user_id); + +Throughout this process, the real user ID remains `jdoe' and the file +user ID remains `games', so the program can always set its effective +user ID to either one. + + On other systems that don't support file user IDs, you can turn +setuid access on and off by using `setreuid' to swap the real and +effective user IDs of the process, as follows: + + setreuid (geteuid (), getuid ()); + +This special case is always allowed--it cannot fail. + + Why does this have the effect of toggling the setuid access? +Suppose a game program has just started, and its real user ID is `jdoe' +while its effective user ID is `games'. In this state, the game can +write the scores file. If it swaps the two uids, the real becomes +`games' and the effective becomes `jdoe'; now the program has only +`jdoe' access. Another swap brings `games' back to the effective user +ID and restores access to the scores file. + + In order to handle both kinds of systems, test for the saved user ID +feature with a preprocessor conditional, like this: + + #ifdef _POSIX_SAVED_IDS + setuid (user_user_id); + #else + setreuid (geteuid (), getuid ()); + #endif + + +File: libc.info, Node: Setuid Program Example, Next: Tips for Setuid, Prev: Enable/Disable Setuid, Up: Users and Groups + +Setuid Program Example +====================== + + Here's an example showing how to set up a program that changes its +effective user ID. + + This is part of a game program called `caber-toss' that manipulates +a file `scores' that should be writable only by the game program +itself. The program assumes that its executable file will be installed +with the setuid bit set and owned by the same user as the `scores' +file. Typically, a system administrator will set up an account like +`games' for this purpose. + + The executable file is given mode `4755', so that doing an `ls -l' +on it produces output like: + + -rwsr-xr-x 1 games 184422 Jul 30 15:17 caber-toss + +The setuid bit shows up in the file modes as the `s'. + + The scores file is given mode `644', and doing an `ls -l' on it +shows: + + -rw-r--r-- 1 games 0 Jul 31 15:33 scores + + Here are the parts of the program that show how to set up the changed +user ID. This program is conditionalized so that it makes use of the +file IDs feature if it is supported, and otherwise uses `setreuid' to +swap the effective and real user IDs. + + #include + #include + #include + #include + + + /* Remember the effective and real UIDs. */ + + static uid_t euid, ruid; + + + /* Restore the effective UID to its original value. */ + + void + do_setuid (void) + { + int status; + + #ifdef _POSIX_SAVED_IDS + status = seteuid (euid); + #else + status = setreuid (ruid, euid); + #endif + if (status < 0) { + fprintf (stderr, "Couldn't set uid.\n"); + exit (status); + } + } + + + /* Set the effective UID to the real UID. */ + + void + undo_setuid (void) + { + int status; + + #ifdef _POSIX_SAVED_IDS + status = seteuid (ruid); + #else + status = setreuid (euid, ruid); + #endif + if (status < 0) { + fprintf (stderr, "Couldn't set uid.\n"); + exit (status); + } + } + + /* Main program. */ + + int + main (void) + { + /* Remember the real and effective user IDs. */ + ruid = getuid (); + euid = geteuid (); + undo_setuid (); + + /* Do the game and record the score. */ + ... + } + + Notice how the first thing the `main' function does is to set the +effective user ID back to the real user ID. This is so that any other +file accesses that are performed while the user is playing the game use +the real user ID for determining permissions. Only when the program +needs to open the scores file does it switch back to the file user ID, +like this: + + /* Record the score. */ + + int + record_score (int score) + { + FILE *stream; + char *myname; + + /* Open the scores file. */ + do_setuid (); + stream = fopen (SCORES_FILE, "a"); + undo_setuid (); + + /* Write the score to the file. */ + if (stream) + { + myname = cuserid (NULL); + if (score < 0) + fprintf (stream, "%10s: Couldn't lift the caber.\n", myname); + else + fprintf (stream, "%10s: %d feet.\n", myname, score); + fclose (stream); + return 0; + } + else + return -1; + } + + +File: libc.info, Node: Tips for Setuid, Next: Who Logged In, Prev: Setuid Program Example, Up: Users and Groups + +Tips for Writing Setuid Programs +================================ + + It is easy for setuid programs to give the user access that isn't +intended--in fact, if you want to avoid this, you need to be careful. +Here are some guidelines for preventing unintended access and +minimizing its consequences when it does occur: + + * Don't have `setuid' programs with privileged user IDs such as + `root' unless it is absolutely necessary. If the resource is + specific to your particular program, it's better to define a new, + nonprivileged user ID or group ID just to manage that resource. + It's better if you can write your program to use a special group + than a special user. + + * Be cautious about using the `exec' functions in combination with + changing the effective user ID. Don't let users of your program + execute arbitrary programs under a changed user ID. Executing a + shell is especially bad news. Less obviously, the `execlp' and + `execvp' functions are a potential risk (since the program they + execute depends on the user's `PATH' environment variable). + + If you must `exec' another program under a changed ID, specify an + absolute file name (*note File Name Resolution::) for the + executable, and make sure that the protections on that executable + and _all_ containing directories are such that ordinary users + cannot replace it with some other program. + + You should also check the arguments passed to the program to make + sure they do not have unexpected effects. Likewise, you should + examine the environment variables. Decide which arguments and + variables are safe, and reject all others. + + You should never use `system' in a privileged program, because it + invokes a shell. + + * Only use the user ID controlling the resource in the part of the + program that actually uses that resource. When you're finished + with it, restore the effective user ID back to the actual user's + user ID. *Note Enable/Disable Setuid::. + + * If the `setuid' part of your program needs to access other files + besides the controlled resource, it should verify that the real + user would ordinarily have permission to access those files. You + can use the `access' function (*note Access Permission::) to check + this; it uses the real user and group IDs, rather than the + effective IDs. + + File: libc.info, Node: Who Logged In, Next: User Accounting Database, Prev: Tips for Setuid, Up: Users and Groups Identifying Who Logged In @@ -677,503 +1249,4 @@ declared in `pwd.h'. BUFFER with the information instead of using a static buffer. The return values are the same as for `getpwuid_r'. - - -File: libc.info, Node: Scanning All Users, Next: Writing a User Entry, Prev: Lookup User, Up: User Database - -Scanning the List of All Users ------------------------------- - - This section explains how a program can read the list of all users in -the system, one user at a time. The functions described here are -declared in `pwd.h'. - - You can use the `fgetpwent' function to read user entries from a -particular file. - - - Function: struct passwd * fgetpwent (FILE *STREAM) - This function reads the next user entry from STREAM and returns a - pointer to the entry. The structure is statically allocated and is - rewritten on subsequent calls to `fgetpwent'. You must copy the - contents of the structure if you wish to save the information. - - The stream must correspond to a file in the same format as the - standard password database file. - - - Function: int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF, - char *BUFFER, size_t BUFLEN, struct passwd **RESULT) - This function is similar to `fgetpwent' in that it reads the next - user entry from STREAM. But the result is returned in the - structure pointed to by RESULT_BUF. The first BUFLEN bytes of the - additional buffer pointed to by BUFFER are used to contain - additional information, normally strings which are pointed to by - the elements of the result structure. - - The stream must correspond to a file in the same format as the - standard password database file. - - If the function returns zero RESULT points to the structure with - the wanted data (normally this is in RESULT_BUF). If errors - occurred the return value is nonzero and RESULT contains a null - pointer. - - The way to scan all the entries in the user database is with -`setpwent', `getpwent', and `endpwent'. - - - Function: void setpwent (void) - This function initializes a stream which `getpwent' and - `getpwent_r' use to read the user database. - - - Function: struct passwd * getpwent (void) - The `getpwent' function reads the next entry from the stream - initialized by `setpwent'. It returns a pointer to the entry. The - structure is statically allocated and is rewritten on subsequent - calls to `getpwent'. You must copy the contents of the structure - if you wish to save the information. - - A null pointer is returned when no more entries are available. - - - Function: int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER, - int BUFLEN, struct passwd **RESULT) - This function is similar to `getpwent' in that it returns the next - entry from the stream initialized by `setpwent'. Like - `fgetpwent_r', it uses the user-supplied buffers in RESULT_BUF and - BUFFER to return the information requested. - - The return values are the same as for `fgetpwent_r'. - - - - Function: void endpwent (void) - This function closes the internal stream used by `getpwent' or - `getpwent_r'. - - -File: libc.info, Node: Writing a User Entry, Prev: Scanning All Users, Up: User Database - -Writing a User Entry --------------------- - - - Function: int putpwent (const struct passwd *P, FILE *STREAM) - This function writes the user entry `*P' to the stream STREAM, in - the format used for the standard user database file. The return - value is zero on success and nonzero on failure. - - This function exists for compatibility with SVID. We recommend - that you avoid using it, because it makes sense only on the - assumption that the `struct passwd' structure has no members - except the standard ones; on a system which merges the traditional - Unix data base with other extended information about users, adding - an entry using this function would inevitably leave out much of - the important information. - - The function `putpwent' is declared in `pwd.h'. - - -File: libc.info, Node: Group Database, Next: Database Example, Prev: User Database, Up: Users and Groups - -Group Database -============== - - This section describes how to search and scan the database of -registered groups. The database itself is kept in the file -`/etc/group' on most systems, but on some systems a special network -service provides access to it. - -* Menu: - -* Group Data Structure:: What each group record contains. -* Lookup Group:: How to look for a particular group. -* Scanning All Groups:: Scanning the list of all groups. - - -File: libc.info, Node: Group Data Structure, Next: Lookup Group, Up: Group Database - -The Data Structure for a Group ------------------------------- - - The functions and data structures for accessing the system group -database are declared in the header file `grp.h'. - - - Data Type: struct group - The `group' structure is used to hold information about an entry in - the system group database. It has at least the following members: - - `char *gr_name' - The name of the group. - - `gid_t gr_gid' - The group ID of the group. - - `char **gr_mem' - A vector of pointers to the names of users in the group. - Each user name is a null-terminated string, and the vector - itself is terminated by a null pointer. - - -File: libc.info, Node: Lookup Group, Next: Scanning All Groups, Prev: Group Data Structure, Up: Group Database - -Looking Up One Group --------------------- - - You can search the group database for information about a specific -group using `getgrgid' or `getgrnam'. These functions are declared in -`grp.h'. - - - Function: struct group * getgrgid (gid_t GID) - This function returns a pointer to a statically-allocated structure - containing information about the group whose group ID is GID. - This structure may be overwritten by subsequent calls to - `getgrgid'. - - A null pointer indicates there is no group with ID GID. - - - Function: int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char - *BUFFER, size_t BUFLEN, struct group **RESULT) - This function is similar to `getgrgid' in that it returns - information about the group whose group ID is GID. However, it - fills the user supplied structure pointed to by RESULT_BUF with - the information instead of using a static buffer. The first - BUFLEN bytes of the additional buffer pointed to by BUFFER are - used to contain additional information, normally strings which are - pointed to by the elements of the result structure. - - If a group with ID GID is found, the pointer returned in RESULT - points to the record which contains the wanted data (i.e., RESULT - contains the value RESULT_BUF). If no group is found or if an - error occurred, the pointer returned in RESULT is a null pointer. - The function returns zero or an error code. If the buffer BUFFER - is too small to contain all the needed information, the error code - `ERANGE' is returned and ERRNO is set to `ERANGE'. - - - Function: struct group * getgrnam (const char *NAME) - This function returns a pointer to a statically-allocated structure - containing information about the group whose group name is NAME. - This structure may be overwritten by subsequent calls to - `getgrnam'. - - A null pointer indicates there is no group named NAME. - - - Function: int getgrnam_r (const char *NAME, struct group - *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group - **RESULT) - This function is similar to `getgrnam' in that is returns - information about the group whose group name is NAME. Like - `getgrgid_r', it uses the user supplied buffers in RESULT_BUF and - BUFFER, not a static buffer. - - The return values are the same as for `getgrgid_r' `ERANGE'. - - -File: libc.info, Node: Scanning All Groups, Prev: Lookup Group, Up: Group Database - -Scanning the List of All Groups -------------------------------- - - This section explains how a program can read the list of all groups -in the system, one group at a time. The functions described here are -declared in `grp.h'. - - You can use the `fgetgrent' function to read group entries from a -particular file. - - - Function: struct group * fgetgrent (FILE *STREAM) - The `fgetgrent' function reads the next entry from STREAM. It - returns a pointer to the entry. The structure is statically - allocated and is overwritten on subsequent calls to `fgetgrent'. - You must copy the contents of the structure if you wish to save the - information. - - The stream must correspond to a file in the same format as the - standard group database file. - - - Function: int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF, - char *BUFFER, size_t BUFLEN, struct group **RESULT) - This function is similar to `fgetgrent' in that it reads the next - user entry from STREAM. But the result is returned in the - structure pointed to by RESULT_BUF. The first BUFLEN bytes of the - additional buffer pointed to by BUFFER are used to contain - additional information, normally strings which are pointed to by - the elements of the result structure. - - This stream must correspond to a file in the same format as the - standard group database file. - - If the function returns zero RESULT points to the structure with - the wanted data (normally this is in RESULT_BUF). If errors - occurred the return value is non-zero and RESULT contains a null - pointer. - - The way to scan all the entries in the group database is with -`setgrent', `getgrent', and `endgrent'. - - - Function: void setgrent (void) - This function initializes a stream for reading from the group data - base. You use this stream by calling `getgrent' or `getgrent_r'. - - - Function: struct group * getgrent (void) - The `getgrent' function reads the next entry from the stream - initialized by `setgrent'. It returns a pointer to the entry. The - structure is statically allocated and is overwritten on subsequent - calls to `getgrent'. You must copy the contents of the structure - if you wish to save the information. - - - Function: int getgrent_r (struct group *RESULT_BUF, char *BUFFER, - size_t BUFLEN, struct group **RESULT) - This function is similar to `getgrent' in that it returns the next - entry from the stream initialized by `setgrent'. Like - `fgetgrent_r', it places the result in user-supplied buffers - pointed to RESULT_BUF and BUFFER. - - If the function returns zero RESULT contains a pointer to the data - (normally equal to RESULT_BUF). If errors occurred the return - value is non-zero and RESULT contains a null pointer. - - - Function: void endgrent (void) - This function closes the internal stream used by `getgrent' or - `getgrent_r'. - - -File: libc.info, Node: Database Example, Next: Netgroup Database, Prev: Group Database, Up: Users and Groups - -User and Group Database Example -=============================== - - Here is an example program showing the use of the system database -inquiry functions. The program prints some information about the user -running the program. - - #include - #include - #include - #include - #include - - int - main (void) - { - uid_t me; - struct passwd *my_passwd; - struct group *my_group; - char **members; - - /* Get information about the user ID. */ - me = getuid (); - my_passwd = getpwuid (me); - if (!my_passwd) - { - printf ("Couldn't find out about user %d.\n", (int) me); - exit (EXIT_FAILURE); - } - - /* Print the information. */ - printf ("I am %s.\n", my_passwd->pw_gecos); - printf ("My login name is %s.\n", my_passwd->pw_name); - printf ("My uid is %d.\n", (int) (my_passwd->pw_uid)); - printf ("My home directory is %s.\n", my_passwd->pw_dir); - printf ("My default shell is %s.\n", my_passwd->pw_shell); - - /* Get information about the default group ID. */ - my_group = getgrgid (my_passwd->pw_gid); - if (!my_group) - { - printf ("Couldn't find out about group %d.\n", - (int) my_passwd->pw_gid); - exit (EXIT_FAILURE); - } - - /* Print the information. */ - printf ("My default group is %s (%d).\n", - my_group->gr_name, (int) (my_passwd->pw_gid)); - printf ("The members of this group are:\n"); - members = my_group->gr_mem; - while (*members) - { - printf (" %s\n", *(members)); - members++; - } - - return EXIT_SUCCESS; - } - - Here is some output from this program: - - I am Throckmorton Snurd. - My login name is snurd. - My uid is 31093. - My home directory is /home/fsg/snurd. - My default shell is /bin/sh. - My default group is guest (12). - The members of this group are: - friedman - tami - - -File: libc.info, Node: Netgroup Database, Prev: Database Example, Up: Users and Groups - -Netgroup Database -================= - -* Menu: - -* Netgroup Data:: Data in the Netgroup database and where - it comes from. -* Lookup Netgroup:: How to look for a particular netgroup. -* Netgroup Membership:: How to test for netgroup membership. - - -File: libc.info, Node: Netgroup Data, Next: Lookup Netgroup, Up: Netgroup Database - -Netgroup Data -------------- - - Sometimes it is useful to group users according to other criteria -(*note Group Database::). E.g., it is useful to associate a certain -group of users with a certain machine. On the other hand grouping of -host names is not supported so far. - - In Sun Microsystems SunOS appeared a new kind of database, the -netgroup database. It allows grouping hosts, users, and domains -freely, giving them individual names. To be more concrete, a netgroup -is a list of triples consisting of a host name, a user name, and a -domain name where any of the entries can be a wildcard entry matching -all inputs. A last possibility is that names of other netgroups can -also be given in the list specifying a netgroup. So one can construct -arbitrary hierarchies without loops. - - Sun's implementation allows netgroups only for the `nis' or -`nisplus' service, *note Services in the NSS configuration::. The -implementation in the GNU C library has no such restriction. An entry -in either of the input services must have the following form: - - GROUPNAME ( GROUPNAME | `('HOSTNAME`,'USERNAME`,'`domainname'`)' )+ - - Any of the fields in the triple can be empty which means anything -matches. While describing the functions we will see that the opposite -case is useful as well. I.e., there may be entries which will not -match any input. For entries like this, a name consisting of the single -character `-' shall be used. - - -File: libc.info, Node: Lookup Netgroup, Next: Netgroup Membership, Prev: Netgroup Data, Up: Netgroup Database - -Looking up one Netgroup ------------------------ - - The lookup functions for netgroups are a bit different to all other -system database handling functions. Since a single netgroup can contain -many entries a two-step process is needed. First a single netgroup is -selected and then one can iterate over all entries in this netgroup. -These functions are declared in `netdb.h'. - - - Function: int setnetgrent (const char *NETGROUP) - A call to this function initializes the internal state of the - library to allow following calls of the `getnetgrent' to iterate - over all entries in the netgroup with name NETGROUP. - - When the call is successful (i.e., when a netgroup with this name - exists) the return value is `1'. When the return value is `0' no - netgroup of this name is known or some other error occurred. - - It is important to remember that there is only one single state for -iterating the netgroups. Even if the programmer uses the -`getnetgrent_r' function the result is not really reentrant since -always only one single netgroup at a time can be processed. If the -program needs to process more than one netgroup simultaneously she must -protect this by using external locking. This problem was introduced in -the original netgroups implementation in SunOS and since we must stay -compatible it is not possible to change this. - - Some other functions also use the netgroups state. Currently these -are the `innetgr' function and parts of the implementation of the -`compat' service part of the NSS implementation. - - - Function: int getnetgrent (char **HOSTP, char **USERP, char - **DOMAINP) - This function returns the next unprocessed entry of the currently - selected netgroup. The string pointers, in which addresses are - passed in the arguments HOSTP, USERP, and DOMAINP, will contain - after a successful call pointers to appropriate strings. If the - string in the next entry is empty the pointer has the value `NULL'. - The returned string pointers are only valid if none of the netgroup - related functions are called. - - The return value is `1' if the next entry was successfully read. A - value of `0' means no further entries exist or internal errors - occurred. - - - Function: int getnetgrent_r (char **HOSTP, char **USERP, char - **DOMAINP, char *BUFFER, int BUFLEN) - This function is similar to `getnetgrent' with only one exception: - the strings the three string pointers HOSTP, USERP, and DOMAINP - point to, are placed in the buffer of BUFLEN bytes starting at - BUFFER. This means the returned values are valid even after other - netgroup related functions are called. - - The return value is `1' if the next entry was successfully read and - the buffer contains enough room to place the strings in it. `0' is - returned in case no more entries are found, the buffer is too - small, or internal errors occurred. - - This function is a GNU extension. The original implementation in - the SunOS libc does not provide this function. - - - Function: void endnetgrent (void) - This function frees all buffers which were allocated to process - the last selected netgroup. As a result all string pointers - returned by calls to `getnetgrent' are invalid afterwards. - - -File: libc.info, Node: Netgroup Membership, Prev: Lookup Netgroup, Up: Netgroup Database - -Testing for Netgroup Membership -------------------------------- - - It is often not necessary to scan the whole netgroup since often the -only interesting question is whether a given entry is part of the -selected netgroup. - - - Function: int innetgr (const char *NETGROUP, const char *HOST, const - char *USER, const char *DOMAIN) - This function tests whether the triple specified by the parameters - HOSTP, USERP, and DOMAINP is part of the netgroup NETGROUP. Using - this function has the advantage that - - 1. no other netgroup function can use the global netgroup state - since internal locking is used and - - 2. the function is implemented more efficiently than successive - calls to the other `set'/`get'/`endnetgrent' functions. - - Any of the pointers HOSTP, USERP, and DOMAINP can be `NULL' which - means any value is accepted in this position. This is also true - for the name `-' which should not match any other string otherwise. - - The return value is `1' if an entry matching the given triple is - found in the netgroup. The return value is `0' if the netgroup - itself is not found, the netgroup does not contain the triple or - internal errors occurred. - - -File: libc.info, Node: System Management, Next: System Configuration, Prev: Users and Groups, Up: Top - -System Management -***************** - - This chapter describes facilities for controlling the system that -underlies a process (including the operating system and hardware) and -for getting information about it. Anyone can generally use the -informational facilities, but usually only a properly privileged process -can make changes. - -* Menu: - -* Host Identification:: Determining the name of the machine. -* Platform Type:: Determining operating system and basic - machine type -* Filesystem Handling:: Controlling/querying mounts -* System Parameters:: Getting and setting various system parameters - - To get information on parameters of the system that are built into -the system, such as the maximum length of a filename, *Note System -Configuration::. diff -durpNa glibc-2.2.2/manual/libc.info-45 glibc-2.2.3/manual/libc.info-45 --- glibc-2.2.2/manual/libc.info-45 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-45 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,505 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Scanning All Users, Next: Writing a User Entry, Prev: Lookup User, Up: User Database + +Scanning the List of All Users +------------------------------ + + This section explains how a program can read the list of all users in +the system, one user at a time. The functions described here are +declared in `pwd.h'. + + You can use the `fgetpwent' function to read user entries from a +particular file. + + - Function: struct passwd * fgetpwent (FILE *STREAM) + This function reads the next user entry from STREAM and returns a + pointer to the entry. The structure is statically allocated and is + rewritten on subsequent calls to `fgetpwent'. You must copy the + contents of the structure if you wish to save the information. + + The stream must correspond to a file in the same format as the + standard password database file. + + - Function: int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF, + char *BUFFER, size_t BUFLEN, struct passwd **RESULT) + This function is similar to `fgetpwent' in that it reads the next + user entry from STREAM. But the result is returned in the + structure pointed to by RESULT_BUF. The first BUFLEN bytes of the + additional buffer pointed to by BUFFER are used to contain + additional information, normally strings which are pointed to by + the elements of the result structure. + + The stream must correspond to a file in the same format as the + standard password database file. + + If the function returns zero RESULT points to the structure with + the wanted data (normally this is in RESULT_BUF). If errors + occurred the return value is nonzero and RESULT contains a null + pointer. + + The way to scan all the entries in the user database is with +`setpwent', `getpwent', and `endpwent'. + + - Function: void setpwent (void) + This function initializes a stream which `getpwent' and + `getpwent_r' use to read the user database. + + - Function: struct passwd * getpwent (void) + The `getpwent' function reads the next entry from the stream + initialized by `setpwent'. It returns a pointer to the entry. The + structure is statically allocated and is rewritten on subsequent + calls to `getpwent'. You must copy the contents of the structure + if you wish to save the information. + + A null pointer is returned when no more entries are available. + + - Function: int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER, + int BUFLEN, struct passwd **RESULT) + This function is similar to `getpwent' in that it returns the next + entry from the stream initialized by `setpwent'. Like + `fgetpwent_r', it uses the user-supplied buffers in RESULT_BUF and + BUFFER to return the information requested. + + The return values are the same as for `fgetpwent_r'. + + + - Function: void endpwent (void) + This function closes the internal stream used by `getpwent' or + `getpwent_r'. + + +File: libc.info, Node: Writing a User Entry, Prev: Scanning All Users, Up: User Database + +Writing a User Entry +-------------------- + + - Function: int putpwent (const struct passwd *P, FILE *STREAM) + This function writes the user entry `*P' to the stream STREAM, in + the format used for the standard user database file. The return + value is zero on success and nonzero on failure. + + This function exists for compatibility with SVID. We recommend + that you avoid using it, because it makes sense only on the + assumption that the `struct passwd' structure has no members + except the standard ones; on a system which merges the traditional + Unix data base with other extended information about users, adding + an entry using this function would inevitably leave out much of + the important information. + + The function `putpwent' is declared in `pwd.h'. + + +File: libc.info, Node: Group Database, Next: Database Example, Prev: User Database, Up: Users and Groups + +Group Database +============== + + This section describes how to search and scan the database of +registered groups. The database itself is kept in the file +`/etc/group' on most systems, but on some systems a special network +service provides access to it. + +* Menu: + +* Group Data Structure:: What each group record contains. +* Lookup Group:: How to look for a particular group. +* Scanning All Groups:: Scanning the list of all groups. + + +File: libc.info, Node: Group Data Structure, Next: Lookup Group, Up: Group Database + +The Data Structure for a Group +------------------------------ + + The functions and data structures for accessing the system group +database are declared in the header file `grp.h'. + + - Data Type: struct group + The `group' structure is used to hold information about an entry in + the system group database. It has at least the following members: + + `char *gr_name' + The name of the group. + + `gid_t gr_gid' + The group ID of the group. + + `char **gr_mem' + A vector of pointers to the names of users in the group. + Each user name is a null-terminated string, and the vector + itself is terminated by a null pointer. + + +File: libc.info, Node: Lookup Group, Next: Scanning All Groups, Prev: Group Data Structure, Up: Group Database + +Looking Up One Group +-------------------- + + You can search the group database for information about a specific +group using `getgrgid' or `getgrnam'. These functions are declared in +`grp.h'. + + - Function: struct group * getgrgid (gid_t GID) + This function returns a pointer to a statically-allocated structure + containing information about the group whose group ID is GID. + This structure may be overwritten by subsequent calls to + `getgrgid'. + + A null pointer indicates there is no group with ID GID. + + - Function: int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char + *BUFFER, size_t BUFLEN, struct group **RESULT) + This function is similar to `getgrgid' in that it returns + information about the group whose group ID is GID. However, it + fills the user supplied structure pointed to by RESULT_BUF with + the information instead of using a static buffer. The first + BUFLEN bytes of the additional buffer pointed to by BUFFER are + used to contain additional information, normally strings which are + pointed to by the elements of the result structure. + + If a group with ID GID is found, the pointer returned in RESULT + points to the record which contains the wanted data (i.e., RESULT + contains the value RESULT_BUF). If no group is found or if an + error occurred, the pointer returned in RESULT is a null pointer. + The function returns zero or an error code. If the buffer BUFFER + is too small to contain all the needed information, the error code + `ERANGE' is returned and ERRNO is set to `ERANGE'. + + - Function: struct group * getgrnam (const char *NAME) + This function returns a pointer to a statically-allocated structure + containing information about the group whose group name is NAME. + This structure may be overwritten by subsequent calls to + `getgrnam'. + + A null pointer indicates there is no group named NAME. + + - Function: int getgrnam_r (const char *NAME, struct group + *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group + **RESULT) + This function is similar to `getgrnam' in that is returns + information about the group whose group name is NAME. Like + `getgrgid_r', it uses the user supplied buffers in RESULT_BUF and + BUFFER, not a static buffer. + + The return values are the same as for `getgrgid_r' `ERANGE'. + + +File: libc.info, Node: Scanning All Groups, Prev: Lookup Group, Up: Group Database + +Scanning the List of All Groups +------------------------------- + + This section explains how a program can read the list of all groups +in the system, one group at a time. The functions described here are +declared in `grp.h'. + + You can use the `fgetgrent' function to read group entries from a +particular file. + + - Function: struct group * fgetgrent (FILE *STREAM) + The `fgetgrent' function reads the next entry from STREAM. It + returns a pointer to the entry. The structure is statically + allocated and is overwritten on subsequent calls to `fgetgrent'. + You must copy the contents of the structure if you wish to save the + information. + + The stream must correspond to a file in the same format as the + standard group database file. + + - Function: int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF, + char *BUFFER, size_t BUFLEN, struct group **RESULT) + This function is similar to `fgetgrent' in that it reads the next + user entry from STREAM. But the result is returned in the + structure pointed to by RESULT_BUF. The first BUFLEN bytes of the + additional buffer pointed to by BUFFER are used to contain + additional information, normally strings which are pointed to by + the elements of the result structure. + + This stream must correspond to a file in the same format as the + standard group database file. + + If the function returns zero RESULT points to the structure with + the wanted data (normally this is in RESULT_BUF). If errors + occurred the return value is non-zero and RESULT contains a null + pointer. + + The way to scan all the entries in the group database is with +`setgrent', `getgrent', and `endgrent'. + + - Function: void setgrent (void) + This function initializes a stream for reading from the group data + base. You use this stream by calling `getgrent' or `getgrent_r'. + + - Function: struct group * getgrent (void) + The `getgrent' function reads the next entry from the stream + initialized by `setgrent'. It returns a pointer to the entry. The + structure is statically allocated and is overwritten on subsequent + calls to `getgrent'. You must copy the contents of the structure + if you wish to save the information. + + - Function: int getgrent_r (struct group *RESULT_BUF, char *BUFFER, + size_t BUFLEN, struct group **RESULT) + This function is similar to `getgrent' in that it returns the next + entry from the stream initialized by `setgrent'. Like + `fgetgrent_r', it places the result in user-supplied buffers + pointed to RESULT_BUF and BUFFER. + + If the function returns zero RESULT contains a pointer to the data + (normally equal to RESULT_BUF). If errors occurred the return + value is non-zero and RESULT contains a null pointer. + + - Function: void endgrent (void) + This function closes the internal stream used by `getgrent' or + `getgrent_r'. + + +File: libc.info, Node: Database Example, Next: Netgroup Database, Prev: Group Database, Up: Users and Groups + +User and Group Database Example +=============================== + + Here is an example program showing the use of the system database +inquiry functions. The program prints some information about the user +running the program. + + #include + #include + #include + #include + #include + + int + main (void) + { + uid_t me; + struct passwd *my_passwd; + struct group *my_group; + char **members; + + /* Get information about the user ID. */ + me = getuid (); + my_passwd = getpwuid (me); + if (!my_passwd) + { + printf ("Couldn't find out about user %d.\n", (int) me); + exit (EXIT_FAILURE); + } + + /* Print the information. */ + printf ("I am %s.\n", my_passwd->pw_gecos); + printf ("My login name is %s.\n", my_passwd->pw_name); + printf ("My uid is %d.\n", (int) (my_passwd->pw_uid)); + printf ("My home directory is %s.\n", my_passwd->pw_dir); + printf ("My default shell is %s.\n", my_passwd->pw_shell); + + /* Get information about the default group ID. */ + my_group = getgrgid (my_passwd->pw_gid); + if (!my_group) + { + printf ("Couldn't find out about group %d.\n", + (int) my_passwd->pw_gid); + exit (EXIT_FAILURE); + } + + /* Print the information. */ + printf ("My default group is %s (%d).\n", + my_group->gr_name, (int) (my_passwd->pw_gid)); + printf ("The members of this group are:\n"); + members = my_group->gr_mem; + while (*members) + { + printf (" %s\n", *(members)); + members++; + } + + return EXIT_SUCCESS; + } + + Here is some output from this program: + + I am Throckmorton Snurd. + My login name is snurd. + My uid is 31093. + My home directory is /home/fsg/snurd. + My default shell is /bin/sh. + My default group is guest (12). + The members of this group are: + friedman + tami + + +File: libc.info, Node: Netgroup Database, Prev: Database Example, Up: Users and Groups + +Netgroup Database +================= + +* Menu: + +* Netgroup Data:: Data in the Netgroup database and where + it comes from. +* Lookup Netgroup:: How to look for a particular netgroup. +* Netgroup Membership:: How to test for netgroup membership. + + +File: libc.info, Node: Netgroup Data, Next: Lookup Netgroup, Up: Netgroup Database + +Netgroup Data +------------- + + Sometimes it is useful to group users according to other criteria +(*note Group Database::). E.g., it is useful to associate a certain +group of users with a certain machine. On the other hand grouping of +host names is not supported so far. + + In Sun Microsystems SunOS appeared a new kind of database, the +netgroup database. It allows grouping hosts, users, and domains +freely, giving them individual names. To be more concrete, a netgroup +is a list of triples consisting of a host name, a user name, and a +domain name where any of the entries can be a wildcard entry matching +all inputs. A last possibility is that names of other netgroups can +also be given in the list specifying a netgroup. So one can construct +arbitrary hierarchies without loops. + + Sun's implementation allows netgroups only for the `nis' or +`nisplus' service, *note Services in the NSS configuration::. The +implementation in the GNU C library has no such restriction. An entry +in either of the input services must have the following form: + + GROUPNAME ( GROUPNAME | `('HOSTNAME`,'USERNAME`,'`domainname'`)' )+ + + Any of the fields in the triple can be empty which means anything +matches. While describing the functions we will see that the opposite +case is useful as well. I.e., there may be entries which will not +match any input. For entries like this, a name consisting of the single +character `-' shall be used. + + +File: libc.info, Node: Lookup Netgroup, Next: Netgroup Membership, Prev: Netgroup Data, Up: Netgroup Database + +Looking up one Netgroup +----------------------- + + The lookup functions for netgroups are a bit different to all other +system database handling functions. Since a single netgroup can contain +many entries a two-step process is needed. First a single netgroup is +selected and then one can iterate over all entries in this netgroup. +These functions are declared in `netdb.h'. + + - Function: int setnetgrent (const char *NETGROUP) + A call to this function initializes the internal state of the + library to allow following calls of the `getnetgrent' to iterate + over all entries in the netgroup with name NETGROUP. + + When the call is successful (i.e., when a netgroup with this name + exists) the return value is `1'. When the return value is `0' no + netgroup of this name is known or some other error occurred. + + It is important to remember that there is only one single state for +iterating the netgroups. Even if the programmer uses the +`getnetgrent_r' function the result is not really reentrant since +always only one single netgroup at a time can be processed. If the +program needs to process more than one netgroup simultaneously she must +protect this by using external locking. This problem was introduced in +the original netgroups implementation in SunOS and since we must stay +compatible it is not possible to change this. + + Some other functions also use the netgroups state. Currently these +are the `innetgr' function and parts of the implementation of the +`compat' service part of the NSS implementation. + + - Function: int getnetgrent (char **HOSTP, char **USERP, char + **DOMAINP) + This function returns the next unprocessed entry of the currently + selected netgroup. The string pointers, in which addresses are + passed in the arguments HOSTP, USERP, and DOMAINP, will contain + after a successful call pointers to appropriate strings. If the + string in the next entry is empty the pointer has the value `NULL'. + The returned string pointers are only valid if none of the netgroup + related functions are called. + + The return value is `1' if the next entry was successfully read. A + value of `0' means no further entries exist or internal errors + occurred. + + - Function: int getnetgrent_r (char **HOSTP, char **USERP, char + **DOMAINP, char *BUFFER, int BUFLEN) + This function is similar to `getnetgrent' with only one exception: + the strings the three string pointers HOSTP, USERP, and DOMAINP + point to, are placed in the buffer of BUFLEN bytes starting at + BUFFER. This means the returned values are valid even after other + netgroup related functions are called. + + The return value is `1' if the next entry was successfully read and + the buffer contains enough room to place the strings in it. `0' is + returned in case no more entries are found, the buffer is too + small, or internal errors occurred. + + This function is a GNU extension. The original implementation in + the SunOS libc does not provide this function. + + - Function: void endnetgrent (void) + This function frees all buffers which were allocated to process + the last selected netgroup. As a result all string pointers + returned by calls to `getnetgrent' are invalid afterwards. + + +File: libc.info, Node: Netgroup Membership, Prev: Lookup Netgroup, Up: Netgroup Database + +Testing for Netgroup Membership +------------------------------- + + It is often not necessary to scan the whole netgroup since often the +only interesting question is whether a given entry is part of the +selected netgroup. + + - Function: int innetgr (const char *NETGROUP, const char *HOST, const + char *USER, const char *DOMAIN) + This function tests whether the triple specified by the parameters + HOSTP, USERP, and DOMAINP is part of the netgroup NETGROUP. Using + this function has the advantage that + + 1. no other netgroup function can use the global netgroup state + since internal locking is used and + + 2. the function is implemented more efficiently than successive + calls to the other `set'/`get'/`endnetgrent' functions. + + Any of the pointers HOSTP, USERP, and DOMAINP can be `NULL' which + means any value is accepted in this position. This is also true + for the name `-' which should not match any other string otherwise. + + The return value is `1' if an entry matching the given triple is + found in the netgroup. The return value is `0' if the netgroup + itself is not found, the netgroup does not contain the triple or + internal errors occurred. + + +File: libc.info, Node: System Management, Next: System Configuration, Prev: Users and Groups, Up: Top + +System Management +***************** + + This chapter describes facilities for controlling the system that +underlies a process (including the operating system and hardware) and +for getting information about it. Anyone can generally use the +informational facilities, but usually only a properly privileged process +can make changes. + +* Menu: + +* Host Identification:: Determining the name of the machine. +* Platform Type:: Determining operating system and basic + machine type +* Filesystem Handling:: Controlling/querying mounts +* System Parameters:: Getting and setting various system parameters + + To get information on parameters of the system that are built into +the system, such as the maximum length of a filename, *Note System +Configuration::. + + File: libc.info, Node: Host Identification, Next: Platform Type, Up: System Management Host Identification @@ -693,508 +1192,4 @@ get information on currently mounted fil in the `proc' filesystem. Its format is similar to that of the `mtab' file, but represents what is truly mounted without relying on facilities outside the kernel to keep `mtab' up to date. - - -File: libc.info, Node: Mount-Unmount-Remount, Prev: Mount Information, Up: Filesystem Handling - -Mount, Unmount, Remount ------------------------ - - This section describes the functions for mounting, unmounting, and -remounting filesystems. - - Only the superuser can mount, unmount, or remount a filesystem. - - These functions do not access the `fstab' and `mtab' files. You -should maintain and use these separately. *Note Mount Information::. - - The symbols in this section are declared in `sys/mount.h'. - - - Function: int mount (const char *SPECIAL_FILE, const char *DIR, - const char *FSTYPE, unsigned long int OPTIONS, const void - *DATA) - `mount' mounts or remounts a filesystem. The two operations are - quite different and are merged rather unnnaturally into this one - function. The `MS_REMOUNT' option, explained below, determines - whether `mount' mounts or remounts. - - For a mount, the filesystem on the block device represented by the - device special file named SPECIAL_FILE gets mounted over the mount - point DIR. This means that the directory DIR (along with any - files in it) is no longer visible; in its place (and still with - the name DIR) is the root directory of the filesystem on the - device. - - As an exception, if the filesystem type (see below) is one which - is not based on a device (e.g. "proc"), `mount' instantiates a - filesystem and mounts it over DIR and ignores SPECIAL_FILE. - - For a remount, DIR specifies the mount point where the filesystem - to be remounted is (and remains) mounted and SPECIAL_FILE is - ignored. Remounting a filesystem means changing the options that - control operations on the filesystem while it is mounted. It does - not mean unmounting and mounting again. - - For a mount, you must identify the type of the filesystem as - FSTYPE. This type tells the kernel how to access the filesystem - and can be thought of as the name of a filesystem driver. The - acceptable values are system dependent. On a system with a Linux - kernel and the `proc' filesystem, the list of possible values is - in the file `filesystems' in the `proc' filesystem (e.g. type `cat - /proc/filesystems' to see the list). With a Linux kernel, the - types of filesystems that `mount' can mount, and their type names, - depends on what filesystem drivers are configured into the kernel - or loaded as loadable kernel modules. An example of a common - value for FSTYPE is `ext2'. - - For a remount, `mount' ignores FSTYPE. - - OPTIONS specifies a variety of options that apply until the - filesystem is unmounted or remounted. The precise meaning of an - option depends on the filesystem and with some filesystems, an - option may have no effect at all. Furthermore, for some - filesystems, some of these options (but never `MS_RDONLY') can be - overridden for individual file accesses via `ioctl'. - - OPTIONS is a bit string with bit fields defined using the - following mask and masked value macros: - - `MS_MGC_MASK' - This multibit field contains a magic number. If it does not - have the value `MS_MGC_VAL', `mount' assumes all the - following bits are zero and the DATA argument is a null - string, regardless of their actual values. - - `MS_REMOUNT' - This bit on means to remount the filesystem. Off means to - mount it. - - `MS_RDONLY' - This bit on specifies that no writing to the filesystem shall - be allowed while it is mounted. This cannot be overridden by - `ioctl'. This option is available on nearly all filesystems. - - `S_IMMUTABLE' - This bit on specifies that no writing to the files in the - filesystem shall be allowed while it is mounted. This can be - overridden for a particular file access by a properly - privileged call to `ioctl'. This option is a relatively new - invention and is not available on many filesystems. - - `S_APPEND' - This bit on specifies that the only file writing that shall - be allowed while the filesystem is mounted is appending. - Some filesystems allow this to be overridden for a particular - process by a properly privileged call to `ioctl'. This is a - relatively new invention and is not available on many - filesystems. - - `MS_NOSUID' - This bit on specifies that Setuid and Setgid permissions on - files in the filesystem shall be ignored while it is mounted. - - `MS_NOEXEC' - This bit on specifies that no files in the filesystem shall - be executed while the filesystem is mounted. - - `MS_NODEV' - This bit on specifies that no device special files in the - filesystem shall be accessible while the filesystem is - mounted. - - `MS_SYNCHRONOUS' - This bit on specifies that all writes to the filesystem while - it is mounted shall be synchronous; i.e. data shall be synced - before each write completes rather than held in the buffer - cache. - - `MS_MANDLOCK' - This bit on specifies that mandatory locks on files shall be - permitted while the filesystem is mounted. - - `MS_NOATIME' - This bit on specifies that access times of files shall not be - updated when the files are accessed while the filesystem is - mounted. - - `MS_NODIRATIME' - This bit on specifies that access times of directories shall - not be updated when the directories are accessed while the - filesystem in mounted. - - Any bits not covered by the above masks should be set off; - otherwise, results are undefined. - - The meaning of DATA depends on the filesystem type and is - controlled entirely by the filesystem driver in the kernel. - - Example: - - #include - - mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, ""); - - mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, ""); - - Appropriate arguments for `mount' are conventionally recorded in - the `fstab' table. *Note Mount Information::. - - The return value is zero if the mount or remount is successful. - Otherwise, it is `-1' and `errno' is set appropriately. The - values of `errno' are filesystem dependent, but here is a general - list: - - `EPERM' - The process is not superuser. - - `ENODEV' - The file system type FSTYPE is not known to the kernel. - - `ENOTBLK' - The file DEV is not a block device special file. - - `EBUSY' - * The device is already mounted. - - * The mount point is busy. (E.g. it is some process' - working directory or has a filesystem mounted on it - already). - - * The request is to remount read-only, but there are files - open for write. - - `EINVAL' - * A remount was attempted, but there is no filesystem - mounted over the specified mount point. - - * The supposed filesystem has an invalid superblock. - - - `EACCESS' - * The filesystem is inherently read-only (possibly due to - a switch on the device) and the process attempted to - mount it read/write (by setting the `MS_RDONLY' bit off). - - * SPECIAL_FILE or DIR is not accessible due to file - permissions. - - * SPECIAL_FILE is not accessible because it is in a - filesystem that is mounted with the `MS_NODEV' option. - - - `EM_FILE' - The table of dummy devices is full. `mount' needs to create a - dummy device (aka "unnamed" device) if the filesystem being - mounted is not one that uses a device. - - - - Function: int umount2 (const char *FILE, int FLAGS) - `umount2' unmounts a filesystem. - - You can identify the filesystem to unmount either by the device - special file that contains the filesystem or by the mount point. - The effect is the same. Specify either as the string FILE. - - FLAGS contains the one-bit field identified by the following mask - macro: - - `MNT_FORCE' - This bit on means to force the unmounting even if the - filesystem is busy, by making it unbusy first. If the bit is - off and the filesystem is busy, `umount2' fails with `errno' - = `EBUSY'. Depending on the filesystem, this may override - all, some, or no busy conditions. - - All other bits in FLAGS should be set to zero; otherwise, the - result is undefined. - - Example: - - #include - - umount2("/mnt", MNT_FORCE); - - umount2("/dev/hdd1", 0); - - After the filesystem is unmounted, the directory that was the - mount point is visible, as are any files in it. - - As part of unmounting, `umount2' syncs the filesystem. - - If the unmounting is successful, the return value is zero. - Otherwise, it is `-1' and `errno' is set accordingly: - - `EPERM' - The process is not superuser. - - `EBUSY' - The filesystem cannot be unmounted because it is busy. E.g. - it contains a directory that is some process's working - directory or a file that some process has open. With some - filesystems in some cases, you can avoid this failure with - the `MNT_FORCE' option. - - `EINVAL' - FILE validly refers to a file, but that file is neither a - mount point nor a device special file of a currently mounted - filesystem. - - This function is not available on all systems. - - - Function: int umount (const char *FILE) - `umount' does the same thing as `umount2' with FLAGS set to - zeroes. It is more widely available than `umount2' but since it - lacks the possibility to forcefully unmount a filesystem is - deprecated when `umount2' is also available. - - -File: libc.info, Node: System Parameters, Prev: Filesystem Handling, Up: System Management - -System Parameters -================= - - This section describes the `sysctl' function, which gets and sets a -variety of system parameters. - - The symbols used in this section are declared in the file `sysctl.h'. - - - Function: int sysctl (int *NAMES, int NLEN, void *OLDVAL, - size_t *OLDLENP, void *NEWVAL, size_t NEWLEN) - - `sysctl' gets or sets a specified system parameter. There are so - many of these parameters that it is not practical to list them all - here, but here are some examples: - - * network domain name - - * paging parameters - - * network Address Resolution Protocol timeout time - - * maximum number of files that may be open - - * root filesystem device - - * when kernel was built - - The set of available parameters depends on the kernel - configuration and can change while the system is running, - particularly when you load and unload loadable kernel modules. - - The system parameters with which `syslog' is concerned are arranged - in a hierarchical structure like a hierarchical filesystem. To - identify a particular parameter, you specify a path through the - structure in a way analogous to specifying the pathname of a file. - Each component of the path is specified by an integer and each of - these integers has a macro defined for it by `sysctl.h'. NAMES is - the path, in the form of an array of integers. Each component of - the path is one element of the array, in order. NLEN is the - number of components in the path. - - For example, the first component of the path for all the paging - parameters is the value `CTL_VM'. For the free page thresholds, - the second component of the path is `VM_FREEPG'. So to get the - free page threshold values, make NAMES an array containing the two - elements `CTL_VM' and `VM_FREEPG' and make NLEN = 2. - - The format of the value of a parameter depends on the parameter. - Sometimes it is an integer; sometimes it is an ASCII string; - sometimes it is an elaborate structure. In the case of the free - page thresholds used in the example above, the parameter value is - a structure containing several integers. - - In any case, you identify a place to return the parameter's value - with OLDVAL and specify the amount of storage available at that - location as *OLDLENP. *OLDLENP does double duty because it is - also the output location that contains the actual length of the - returned value. - - If you don't want the parameter value returned, specify a null - pointer for OLDVAL. - - To set the parameter, specify the address and length of the new - value as NEWVAL and NEWLEN. If you don't want to set the - parameter, specify a null pointer as NEWVAL. - - If you get and set a parameter in the same `sysctl' call, the value - returned is the value of the parameter before it was set. - - Each system parameter has a set of permissions similar to the - permissions for a file (including the permissions on directories - in its path) that determine whether you may get or set it. For - the purposes of these permissions, every parameter is considered - to be owned by the superuser and Group 0 so processes with that - effective uid or gid may have more access to system parameters. - Unlike with files, the superuser does not invariably have full - permission to all system parameters, because some of them are - designed not to be changed ever. - - `sysctl' returns a zero return value if it succeeds. Otherwise, it - returns `-1' and sets `errno' appropriately. Besides the failures - that apply to all system calls, the following are the `errno' - codes for all possible failures: - - `EPERM' - The process is not permitted to access one of the components - of the path of the system parameter or is not permitted to - access the system parameter itself in the way (read or write) - that it requested. - - `ENOTDIR' - There is no system parameter corresponding to NAME. - - `EFAULT' - OLDVAL is not null, which means the process wanted to read - the parameter, but *OLDLENP is zero, so there is no place to - return it. - - `EINVAL' - * The process attempted to set a system parameter to a - value that is not valid for that parameter. - - * The space provided for the return of the system - parameter is not the right size for that parameter. - - `ENOMEM' - This value may be returned instead of the more correct - `EINVAL' in some cases where the space provided for the - return of the system parameter is too small. - - - If you have a Linux kernel with the `proc' filesystem, you can get -and set most of the same parameters by reading and writing to files in -the `sys' directory of the `proc' filesystem. In the `sys' directory, -the directory structure represents the hierarchical structure of the -parameters. E.g. you can display the free page thresholds with - cat /proc/sys/vm/freepages - - Some more traditional and more widely available, though less general, -GNU C library functions for getting and setting some of the same system -parameters are: - - * `getdomainname', `setdomainname' - - * `gethostname', `sethostname' (*Note Host Identification::.) - - * `uname' (*Note Platform Type::.) - - * `bdflush' - - -File: libc.info, Node: System Configuration, Next: Cryptographic Functions, Prev: System Management, Up: Top - -System Configuration Parameters -******************************* - - The functions and macros listed in this chapter give information -about configuration parameters of the operating system--for example, -capacity limits, presence of optional POSIX features, and the default -path for executable files (*note String Parameters::). - -* Menu: - -* General Limits:: Constants and functions that describe - various process-related limits that have - one uniform value for any given machine. -* System Options:: Optional POSIX features. -* Version Supported:: Version numbers of POSIX.1 and POSIX.2. -* Sysconf:: Getting specific configuration values - of general limits and system options. -* Minimums:: Minimum values for general limits. - -* Limits for Files:: Size limitations that pertain to individual files. - These can vary between file systems - or even from file to file. -* Options for Files:: Optional features that some files may support. -* File Minimums:: Minimum values for file limits. -* Pathconf:: Getting the limit values for a particular file. - -* Utility Limits:: Capacity limits of some POSIX.2 utility programs. -* Utility Minimums:: Minimum allowable values of those limits. - -* String Parameters:: Getting the default search path. - - -File: libc.info, Node: General Limits, Next: System Options, Up: System Configuration - -General Capacity Limits -======================= - - The POSIX.1 and POSIX.2 standards specify a number of parameters that -describe capacity limitations of the system. These limits can be fixed -constants for a given operating system, or they can vary from machine to -machine. For example, some limit values may be configurable by the -system administrator, either at run time or by rebuilding the kernel, -and this should not require recompiling application programs. - - Each of the following limit parameters has a macro that is defined in -`limits.h' only if the system has a fixed, uniform limit for the -parameter in question. If the system allows different file systems or -files to have different limits, then the macro is undefined; use -`sysconf' to find out the limit that applies at a particular time on a -particular machine. *Note Sysconf::. - - Each of these parameters also has another macro, with a name starting -with `_POSIX', which gives the lowest value that the limit is allowed -to have on _any_ POSIX system. *Note Minimums::. - - - Macro: int ARG_MAX - If defined, the unvarying maximum combined length of the ARGV and - ENVIRON arguments that can be passed to the `exec' functions. - - - Macro: int CHILD_MAX - If defined, the unvarying maximum number of processes that can - exist with the same real user ID at any one time. In BSD and GNU, - this is controlled by the `RLIMIT_NPROC' resource limit; *note - Limits on Resources::. - - - Macro: int OPEN_MAX - If defined, the unvarying maximum number of files that a single - process can have open simultaneously. In BSD and GNU, this is - controlled by the `RLIMIT_NOFILE' resource limit; *note Limits on - Resources::. - - - Macro: int STREAM_MAX - If defined, the unvarying maximum number of streams that a single - process can have open simultaneously. *Note Opening Streams::. - - - Macro: int TZNAME_MAX - If defined, the unvarying maximum length of a time zone name. - *Note Time Zone Functions::. - - These limit macros are always defined in `limits.h'. - - - Macro: int NGROUPS_MAX - The maximum number of supplementary group IDs that one process can - have. - - The value of this macro is actually a lower bound for the maximum. - That is, you can count on being able to have that many - supplementary group IDs, but a particular machine might let you - have even more. You can use `sysconf' to see whether a particular - machine will let you have more (*note Sysconf::). - - - Macro: int SSIZE_MAX - The largest value that can fit in an object of type `ssize_t'. - Effectively, this is the limit on the number of bytes that can be - read or written in a single operation. - - This macro is defined in all POSIX systems because this limit is - never configurable. - - - Macro: int RE_DUP_MAX - The largest number of repetitions you are guaranteed is allowed in - the construct `\{MIN,MAX\}' in a regular expression. - - The value of this macro is actually a lower bound for the maximum. - That is, you can count on being able to have that many - repetitions, but a particular machine might let you have even - more. You can use `sysconf' to see whether a particular machine - will let you have more (*note Sysconf::). And even the value that - `sysconf' tells you is just a lower bound--larger values might - work. - - This macro is defined in all POSIX.2 systems, because POSIX.2 says - it should always be defined even if there is no specific imposed - limit. diff -durpNa glibc-2.2.2/manual/libc.info-46 glibc-2.2.3/manual/libc.info-46 --- glibc-2.2.2/manual/libc.info-46 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-46 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,510 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Mount-Unmount-Remount, Prev: Mount Information, Up: Filesystem Handling + +Mount, Unmount, Remount +----------------------- + + This section describes the functions for mounting, unmounting, and +remounting filesystems. + + Only the superuser can mount, unmount, or remount a filesystem. + + These functions do not access the `fstab' and `mtab' files. You +should maintain and use these separately. *Note Mount Information::. + + The symbols in this section are declared in `sys/mount.h'. + + - Function: int mount (const char *SPECIAL_FILE, const char *DIR, + const char *FSTYPE, unsigned long int OPTIONS, const void + *DATA) + `mount' mounts or remounts a filesystem. The two operations are + quite different and are merged rather unnnaturally into this one + function. The `MS_REMOUNT' option, explained below, determines + whether `mount' mounts or remounts. + + For a mount, the filesystem on the block device represented by the + device special file named SPECIAL_FILE gets mounted over the mount + point DIR. This means that the directory DIR (along with any + files in it) is no longer visible; in its place (and still with + the name DIR) is the root directory of the filesystem on the + device. + + As an exception, if the filesystem type (see below) is one which + is not based on a device (e.g. "proc"), `mount' instantiates a + filesystem and mounts it over DIR and ignores SPECIAL_FILE. + + For a remount, DIR specifies the mount point where the filesystem + to be remounted is (and remains) mounted and SPECIAL_FILE is + ignored. Remounting a filesystem means changing the options that + control operations on the filesystem while it is mounted. It does + not mean unmounting and mounting again. + + For a mount, you must identify the type of the filesystem as + FSTYPE. This type tells the kernel how to access the filesystem + and can be thought of as the name of a filesystem driver. The + acceptable values are system dependent. On a system with a Linux + kernel and the `proc' filesystem, the list of possible values is + in the file `filesystems' in the `proc' filesystem (e.g. type `cat + /proc/filesystems' to see the list). With a Linux kernel, the + types of filesystems that `mount' can mount, and their type names, + depends on what filesystem drivers are configured into the kernel + or loaded as loadable kernel modules. An example of a common + value for FSTYPE is `ext2'. + + For a remount, `mount' ignores FSTYPE. + + OPTIONS specifies a variety of options that apply until the + filesystem is unmounted or remounted. The precise meaning of an + option depends on the filesystem and with some filesystems, an + option may have no effect at all. Furthermore, for some + filesystems, some of these options (but never `MS_RDONLY') can be + overridden for individual file accesses via `ioctl'. + + OPTIONS is a bit string with bit fields defined using the + following mask and masked value macros: + + `MS_MGC_MASK' + This multibit field contains a magic number. If it does not + have the value `MS_MGC_VAL', `mount' assumes all the + following bits are zero and the DATA argument is a null + string, regardless of their actual values. + + `MS_REMOUNT' + This bit on means to remount the filesystem. Off means to + mount it. + + `MS_RDONLY' + This bit on specifies that no writing to the filesystem shall + be allowed while it is mounted. This cannot be overridden by + `ioctl'. This option is available on nearly all filesystems. + + `S_IMMUTABLE' + This bit on specifies that no writing to the files in the + filesystem shall be allowed while it is mounted. This can be + overridden for a particular file access by a properly + privileged call to `ioctl'. This option is a relatively new + invention and is not available on many filesystems. + + `S_APPEND' + This bit on specifies that the only file writing that shall + be allowed while the filesystem is mounted is appending. + Some filesystems allow this to be overridden for a particular + process by a properly privileged call to `ioctl'. This is a + relatively new invention and is not available on many + filesystems. + + `MS_NOSUID' + This bit on specifies that Setuid and Setgid permissions on + files in the filesystem shall be ignored while it is mounted. + + `MS_NOEXEC' + This bit on specifies that no files in the filesystem shall + be executed while the filesystem is mounted. + + `MS_NODEV' + This bit on specifies that no device special files in the + filesystem shall be accessible while the filesystem is + mounted. + + `MS_SYNCHRONOUS' + This bit on specifies that all writes to the filesystem while + it is mounted shall be synchronous; i.e. data shall be synced + before each write completes rather than held in the buffer + cache. + + `MS_MANDLOCK' + This bit on specifies that mandatory locks on files shall be + permitted while the filesystem is mounted. + + `MS_NOATIME' + This bit on specifies that access times of files shall not be + updated when the files are accessed while the filesystem is + mounted. + + `MS_NODIRATIME' + This bit on specifies that access times of directories shall + not be updated when the directories are accessed while the + filesystem in mounted. + + Any bits not covered by the above masks should be set off; + otherwise, results are undefined. + + The meaning of DATA depends on the filesystem type and is + controlled entirely by the filesystem driver in the kernel. + + Example: + + #include + + mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, ""); + + mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, ""); + + Appropriate arguments for `mount' are conventionally recorded in + the `fstab' table. *Note Mount Information::. + + The return value is zero if the mount or remount is successful. + Otherwise, it is `-1' and `errno' is set appropriately. The + values of `errno' are filesystem dependent, but here is a general + list: + + `EPERM' + The process is not superuser. + + `ENODEV' + The file system type FSTYPE is not known to the kernel. + + `ENOTBLK' + The file DEV is not a block device special file. + + `EBUSY' + * The device is already mounted. + + * The mount point is busy. (E.g. it is some process' + working directory or has a filesystem mounted on it + already). + + * The request is to remount read-only, but there are files + open for write. + + `EINVAL' + * A remount was attempted, but there is no filesystem + mounted over the specified mount point. + + * The supposed filesystem has an invalid superblock. + + + `EACCESS' + * The filesystem is inherently read-only (possibly due to + a switch on the device) and the process attempted to + mount it read/write (by setting the `MS_RDONLY' bit off). + + * SPECIAL_FILE or DIR is not accessible due to file + permissions. + + * SPECIAL_FILE is not accessible because it is in a + filesystem that is mounted with the `MS_NODEV' option. + + + `EM_FILE' + The table of dummy devices is full. `mount' needs to create a + dummy device (aka "unnamed" device) if the filesystem being + mounted is not one that uses a device. + + + - Function: int umount2 (const char *FILE, int FLAGS) + `umount2' unmounts a filesystem. + + You can identify the filesystem to unmount either by the device + special file that contains the filesystem or by the mount point. + The effect is the same. Specify either as the string FILE. + + FLAGS contains the one-bit field identified by the following mask + macro: + + `MNT_FORCE' + This bit on means to force the unmounting even if the + filesystem is busy, by making it unbusy first. If the bit is + off and the filesystem is busy, `umount2' fails with `errno' + = `EBUSY'. Depending on the filesystem, this may override + all, some, or no busy conditions. + + All other bits in FLAGS should be set to zero; otherwise, the + result is undefined. + + Example: + + #include + + umount2("/mnt", MNT_FORCE); + + umount2("/dev/hdd1", 0); + + After the filesystem is unmounted, the directory that was the + mount point is visible, as are any files in it. + + As part of unmounting, `umount2' syncs the filesystem. + + If the unmounting is successful, the return value is zero. + Otherwise, it is `-1' and `errno' is set accordingly: + + `EPERM' + The process is not superuser. + + `EBUSY' + The filesystem cannot be unmounted because it is busy. E.g. + it contains a directory that is some process's working + directory or a file that some process has open. With some + filesystems in some cases, you can avoid this failure with + the `MNT_FORCE' option. + + `EINVAL' + FILE validly refers to a file, but that file is neither a + mount point nor a device special file of a currently mounted + filesystem. + + This function is not available on all systems. + + - Function: int umount (const char *FILE) + `umount' does the same thing as `umount2' with FLAGS set to + zeroes. It is more widely available than `umount2' but since it + lacks the possibility to forcefully unmount a filesystem is + deprecated when `umount2' is also available. + + +File: libc.info, Node: System Parameters, Prev: Filesystem Handling, Up: System Management + +System Parameters +================= + + This section describes the `sysctl' function, which gets and sets a +variety of system parameters. + + The symbols used in this section are declared in the file `sysctl.h'. + + - Function: int sysctl (int *NAMES, int NLEN, void *OLDVAL, + size_t *OLDLENP, void *NEWVAL, size_t NEWLEN) + + `sysctl' gets or sets a specified system parameter. There are so + many of these parameters that it is not practical to list them all + here, but here are some examples: + + * network domain name + + * paging parameters + + * network Address Resolution Protocol timeout time + + * maximum number of files that may be open + + * root filesystem device + + * when kernel was built + + The set of available parameters depends on the kernel + configuration and can change while the system is running, + particularly when you load and unload loadable kernel modules. + + The system parameters with which `syslog' is concerned are arranged + in a hierarchical structure like a hierarchical filesystem. To + identify a particular parameter, you specify a path through the + structure in a way analogous to specifying the pathname of a file. + Each component of the path is specified by an integer and each of + these integers has a macro defined for it by `sysctl.h'. NAMES is + the path, in the form of an array of integers. Each component of + the path is one element of the array, in order. NLEN is the + number of components in the path. + + For example, the first component of the path for all the paging + parameters is the value `CTL_VM'. For the free page thresholds, + the second component of the path is `VM_FREEPG'. So to get the + free page threshold values, make NAMES an array containing the two + elements `CTL_VM' and `VM_FREEPG' and make NLEN = 2. + + The format of the value of a parameter depends on the parameter. + Sometimes it is an integer; sometimes it is an ASCII string; + sometimes it is an elaborate structure. In the case of the free + page thresholds used in the example above, the parameter value is + a structure containing several integers. + + In any case, you identify a place to return the parameter's value + with OLDVAL and specify the amount of storage available at that + location as *OLDLENP. *OLDLENP does double duty because it is + also the output location that contains the actual length of the + returned value. + + If you don't want the parameter value returned, specify a null + pointer for OLDVAL. + + To set the parameter, specify the address and length of the new + value as NEWVAL and NEWLEN. If you don't want to set the + parameter, specify a null pointer as NEWVAL. + + If you get and set a parameter in the same `sysctl' call, the value + returned is the value of the parameter before it was set. + + Each system parameter has a set of permissions similar to the + permissions for a file (including the permissions on directories + in its path) that determine whether you may get or set it. For + the purposes of these permissions, every parameter is considered + to be owned by the superuser and Group 0 so processes with that + effective uid or gid may have more access to system parameters. + Unlike with files, the superuser does not invariably have full + permission to all system parameters, because some of them are + designed not to be changed ever. + + `sysctl' returns a zero return value if it succeeds. Otherwise, it + returns `-1' and sets `errno' appropriately. Besides the failures + that apply to all system calls, the following are the `errno' + codes for all possible failures: + + `EPERM' + The process is not permitted to access one of the components + of the path of the system parameter or is not permitted to + access the system parameter itself in the way (read or write) + that it requested. + + `ENOTDIR' + There is no system parameter corresponding to NAME. + + `EFAULT' + OLDVAL is not null, which means the process wanted to read + the parameter, but *OLDLENP is zero, so there is no place to + return it. + + `EINVAL' + * The process attempted to set a system parameter to a + value that is not valid for that parameter. + + * The space provided for the return of the system + parameter is not the right size for that parameter. + + `ENOMEM' + This value may be returned instead of the more correct + `EINVAL' in some cases where the space provided for the + return of the system parameter is too small. + + + If you have a Linux kernel with the `proc' filesystem, you can get +and set most of the same parameters by reading and writing to files in +the `sys' directory of the `proc' filesystem. In the `sys' directory, +the directory structure represents the hierarchical structure of the +parameters. E.g. you can display the free page thresholds with + cat /proc/sys/vm/freepages + + Some more traditional and more widely available, though less general, +GNU C library functions for getting and setting some of the same system +parameters are: + + * `getdomainname', `setdomainname' + + * `gethostname', `sethostname' (*Note Host Identification::.) + + * `uname' (*Note Platform Type::.) + + * `bdflush' + + +File: libc.info, Node: System Configuration, Next: Cryptographic Functions, Prev: System Management, Up: Top + +System Configuration Parameters +******************************* + + The functions and macros listed in this chapter give information +about configuration parameters of the operating system--for example, +capacity limits, presence of optional POSIX features, and the default +path for executable files (*note String Parameters::). + +* Menu: + +* General Limits:: Constants and functions that describe + various process-related limits that have + one uniform value for any given machine. +* System Options:: Optional POSIX features. +* Version Supported:: Version numbers of POSIX.1 and POSIX.2. +* Sysconf:: Getting specific configuration values + of general limits and system options. +* Minimums:: Minimum values for general limits. + +* Limits for Files:: Size limitations that pertain to individual files. + These can vary between file systems + or even from file to file. +* Options for Files:: Optional features that some files may support. +* File Minimums:: Minimum values for file limits. +* Pathconf:: Getting the limit values for a particular file. + +* Utility Limits:: Capacity limits of some POSIX.2 utility programs. +* Utility Minimums:: Minimum allowable values of those limits. + +* String Parameters:: Getting the default search path. + + +File: libc.info, Node: General Limits, Next: System Options, Up: System Configuration + +General Capacity Limits +======================= + + The POSIX.1 and POSIX.2 standards specify a number of parameters that +describe capacity limitations of the system. These limits can be fixed +constants for a given operating system, or they can vary from machine to +machine. For example, some limit values may be configurable by the +system administrator, either at run time or by rebuilding the kernel, +and this should not require recompiling application programs. + + Each of the following limit parameters has a macro that is defined in +`limits.h' only if the system has a fixed, uniform limit for the +parameter in question. If the system allows different file systems or +files to have different limits, then the macro is undefined; use +`sysconf' to find out the limit that applies at a particular time on a +particular machine. *Note Sysconf::. + + Each of these parameters also has another macro, with a name starting +with `_POSIX', which gives the lowest value that the limit is allowed +to have on _any_ POSIX system. *Note Minimums::. + + - Macro: int ARG_MAX + If defined, the unvarying maximum combined length of the ARGV and + ENVIRON arguments that can be passed to the `exec' functions. + + - Macro: int CHILD_MAX + If defined, the unvarying maximum number of processes that can + exist with the same real user ID at any one time. In BSD and GNU, + this is controlled by the `RLIMIT_NPROC' resource limit; *note + Limits on Resources::. + + - Macro: int OPEN_MAX + If defined, the unvarying maximum number of files that a single + process can have open simultaneously. In BSD and GNU, this is + controlled by the `RLIMIT_NOFILE' resource limit; *note Limits on + Resources::. + + - Macro: int STREAM_MAX + If defined, the unvarying maximum number of streams that a single + process can have open simultaneously. *Note Opening Streams::. + + - Macro: int TZNAME_MAX + If defined, the unvarying maximum length of a time zone name. + *Note Time Zone Functions::. + + These limit macros are always defined in `limits.h'. + + - Macro: int NGROUPS_MAX + The maximum number of supplementary group IDs that one process can + have. + + The value of this macro is actually a lower bound for the maximum. + That is, you can count on being able to have that many + supplementary group IDs, but a particular machine might let you + have even more. You can use `sysconf' to see whether a particular + machine will let you have more (*note Sysconf::). + + - Macro: int SSIZE_MAX + The largest value that can fit in an object of type `ssize_t'. + Effectively, this is the limit on the number of bytes that can be + read or written in a single operation. + + This macro is defined in all POSIX systems because this limit is + never configurable. + + - Macro: int RE_DUP_MAX + The largest number of repetitions you are guaranteed is allowed in + the construct `\{MIN,MAX\}' in a regular expression. + + The value of this macro is actually a lower bound for the maximum. + That is, you can count on being able to have that many + repetitions, but a particular machine might let you have even + more. You can use `sysconf' to see whether a particular machine + will let you have more (*note Sysconf::). And even the value that + `sysconf' tells you is just a lower bound--larger values might + work. + + This macro is defined in all POSIX.2 systems, because POSIX.2 says + it should always be defined even if there is no specific imposed + limit. + + File: libc.info, Node: System Options, Next: Version Supported, Prev: General Limits, Up: System Configuration Overall System Options @@ -847,521 +1351,4 @@ library. If one of these macros is undefined, that means that the option might be in effect for some files and not for others. To inquire about a particular file, call `pathconf' or `fpathconf'. *Note Pathconf::. - - -File: libc.info, Node: File Minimums, Next: Pathconf, Prev: Options for Files, Up: System Configuration - -Minimum Values for File System Limits -===================================== - - Here are the names for the POSIX minimum upper bounds for some of the -above parameters. The significance of these values is that you can -safely push to these limits without checking whether the particular -system you are using can go that far. In most cases GNU systems do not -have these strict limitations. The actual limit should be requested if -necessary. - -`_POSIX_LINK_MAX' - The most restrictive limit permitted by POSIX for the maximum - value of a file's link count. The value of this constant is `8'; - thus, you can always make up to eight names for a file without - running into a system limit. - -`_POSIX_MAX_CANON' - The most restrictive limit permitted by POSIX for the maximum - number of bytes in a canonical input line from a terminal device. - The value of this constant is `255'. - -`_POSIX_MAX_INPUT' - The most restrictive limit permitted by POSIX for the maximum - number of bytes in a terminal device input queue (or typeahead - buffer). *Note Input Modes::. The value of this constant is - `255'. - -`_POSIX_NAME_MAX' - The most restrictive limit permitted by POSIX for the maximum - number of bytes in a file name component. The value of this - constant is `14'. - -`_POSIX_PATH_MAX' - The most restrictive limit permitted by POSIX for the maximum - number of bytes in a file name. The value of this constant is - `256'. - -`_POSIX_PIPE_BUF' - The most restrictive limit permitted by POSIX for the maximum - number of bytes that can be written atomically to a pipe. The - value of this constant is `512'. - -`SYMLINK_MAX' - Maximum number of bytes in a symbolic link. - -`POSIX_REC_INCR_XFER_SIZE' - Recommended increment for file transfer sizes between the - `POSIX_REC_MIN_XFER_SIZE' and `POSIX_REC_MAX_XFER_SIZE' values. - -`POSIX_REC_MAX_XFER_SIZE' - Maximum recommended file transfer size. - -`POSIX_REC_MIN_XFER_SIZE' - Minimum recommended file transfer size. - -`POSIX_REC_XFER_ALIGN' - Recommended file transfer buffer alignment. - - -File: libc.info, Node: Pathconf, Next: Utility Limits, Prev: File Minimums, Up: System Configuration - -Using `pathconf' -================ - - When your machine allows different files to have different values -for a file system parameter, you can use the functions in this section -to find out the value that applies to any particular file. - - These functions and the associated constants for the PARAMETER -argument are declared in the header file `unistd.h'. - - - Function: long int pathconf (const char *FILENAME, int PARAMETER) - This function is used to inquire about the limits that apply to - the file named FILENAME. - - The PARAMETER argument should be one of the `_PC_' constants - listed below. - - The normal return value from `pathconf' is the value you requested. - A value of `-1' is returned both if the implementation does not - impose a limit, and in case of an error. In the former case, - `errno' is not set, while in the latter case, `errno' is set to - indicate the cause of the problem. So the only way to use this - function robustly is to store `0' into `errno' just before calling - it. - - Besides the usual file name errors (*note File Name Errors::), the - following error condition is defined for this function: - - `EINVAL' - The value of PARAMETER is invalid, or the implementation - doesn't support the PARAMETER for the specific file. - - - Function: long int fpathconf (int FILEDES, int PARAMETER) - This is just like `pathconf' except that an open file descriptor - is used to specify the file for which information is requested, - instead of a file name. - - The following `errno' error conditions are defined for this - function: - - `EBADF' - The FILEDES argument is not a valid file descriptor. - - `EINVAL' - The value of PARAMETER is invalid, or the implementation - doesn't support the PARAMETER for the specific file. - - Here are the symbolic constants that you can use as the PARAMETER -argument to `pathconf' and `fpathconf'. The values are all integer -constants. - -`_PC_LINK_MAX' - Inquire about the value of `LINK_MAX'. - -`_PC_MAX_CANON' - Inquire about the value of `MAX_CANON'. - -`_PC_MAX_INPUT' - Inquire about the value of `MAX_INPUT'. - -`_PC_NAME_MAX' - Inquire about the value of `NAME_MAX'. - -`_PC_PATH_MAX' - Inquire about the value of `PATH_MAX'. - -`_PC_PIPE_BUF' - Inquire about the value of `PIPE_BUF'. - -`_PC_CHOWN_RESTRICTED' - Inquire about the value of `_POSIX_CHOWN_RESTRICTED'. - -`_PC_NO_TRUNC' - Inquire about the value of `_POSIX_NO_TRUNC'. - -`_PC_VDISABLE' - Inquire about the value of `_POSIX_VDISABLE'. - -`_PC_SYNC_IO' - Inquire about the value of `_POSIX_SYNC_IO'. - -`_PC_ASYNC_IO' - Inquire about the value of `_POSIX_ASYNC_IO'. - -`_PC_PRIO_IO' - Inquire about the value of `_POSIX_PRIO_IO'. - -`_PC_SOCK_MAXBUF' - Inquire about the value of `_POSIX_PIPE_BUF'. - -`_PC_FILESIZEBITS' - Inquire about the availability of large files on the filesystem. - -`_PC_REC_INCR_XFER_SIZE' - Inquire about the value of `POSIX_REC_INCR_XFER_SIZE'. - -`_PC_REC_MAX_XFER_SIZE' - Inquire about the value of `POSIX_REC_MAX_XFER_SIZE'. - -`_PC_REC_MIN_XFER_SIZE' - Inquire about the value of `POSIX_REC_MIN_XFER_SIZE'. - -`_PC_REC_XFER_ALIGN' - Inquire about the value of `POSIX_REC_XFER_ALIGN'. - - -File: libc.info, Node: Utility Limits, Next: Utility Minimums, Prev: Pathconf, Up: System Configuration - -Utility Program Capacity Limits -=============================== - - The POSIX.2 standard specifies certain system limits that you can -access through `sysconf' that apply to utility behavior rather than the -behavior of the library or the operating system. - - The GNU C library defines macros for these limits, and `sysconf' -returns values for them if you ask; but these values convey no -meaningful information. They are simply the smallest values that -POSIX.2 permits. - - - Macro: int BC_BASE_MAX - The largest value of `obase' that the `bc' utility is guaranteed - to support. - - - Macro: int BC_DIM_MAX - The largest number of elements in one array that the `bc' utility - is guaranteed to support. - - - Macro: int BC_SCALE_MAX - The largest value of `scale' that the `bc' utility is guaranteed - to support. - - - Macro: int BC_STRING_MAX - The largest number of characters in one string constant that the - `bc' utility is guaranteed to support. - - - Macro: int COLL_WEIGHTS_MAX - The largest number of weights that can necessarily be used in - defining the collating sequence for a locale. - - - Macro: int EXPR_NEST_MAX - The maximum number of expressions that can be nested within - parenthesis by the `expr' utility. - - - Macro: int LINE_MAX - The largest text line that the text-oriented POSIX.2 utilities can - support. (If you are using the GNU versions of these utilities, - then there is no actual limit except that imposed by the available - virtual memory, but there is no way that the library can tell you - this.) - - - Macro: int EQUIV_CLASS_MAX - The maximum number of weights that can be assigned to an entry of - the `LC_COLLATE' category `order' keyword in a locale definition. - The GNU C library does not presently support locale definitions. - - -File: libc.info, Node: Utility Minimums, Next: String Parameters, Prev: Utility Limits, Up: System Configuration - -Minimum Values for Utility Limits -================================= - -`_POSIX2_BC_BASE_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - value of `obase' in the `bc' utility. Its value is `99'. - -`_POSIX2_BC_DIM_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - size of an array in the `bc' utility. Its value is `2048'. - -`_POSIX2_BC_SCALE_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - value of `scale' in the `bc' utility. Its value is `99'. - -`_POSIX2_BC_STRING_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - size of a string constant in the `bc' utility. Its value is - `1000'. - -`_POSIX2_COLL_WEIGHTS_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - number of weights that can necessarily be used in defining the - collating sequence for a locale. Its value is `2'. - -`_POSIX2_EXPR_NEST_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - number of expressions nested within parenthesis when using the - `expr' utility. Its value is `32'. - -`_POSIX2_LINE_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - size of a text line that the text utilities can handle. Its value - is `2048'. - -`_POSIX2_EQUIV_CLASS_MAX' - The most restrictive limit permitted by POSIX.2 for the maximum - number of weights that can be assigned to an entry of the - `LC_COLLATE' category `order' keyword in a locale definition. Its - value is `2'. The GNU C library does not presently support locale - definitions. - - -File: libc.info, Node: String Parameters, Prev: Utility Minimums, Up: System Configuration - -String-Valued Parameters -======================== - - POSIX.2 defines a way to get string-valued parameters from the -operating system with the function `confstr': - - - Function: size_t confstr (int PARAMETER, char *BUF, size_t LEN) - This function reads the value of a string-valued system parameter, - storing the string into LEN bytes of memory space starting at BUF. - The PARAMETER argument should be one of the `_CS_' symbols listed - below. - - The normal return value from `confstr' is the length of the string - value that you asked for. If you supply a null pointer for BUF, - then `confstr' does not try to store the string; it just returns - its length. A value of `0' indicates an error. - - If the string you asked for is too long for the buffer (that is, - longer than `LEN - 1'), then `confstr' stores just that much - (leaving room for the terminating null character). You can tell - that this has happened because `confstr' returns a value greater - than or equal to LEN. - - The following `errno' error conditions are defined for this - function: - - `EINVAL' - The value of the PARAMETER is invalid. - - Currently there is just one parameter you can read with `confstr': - -`_CS_PATH' - This parameter's value is the recommended default path for - searching for executable files. This is the path that a user has - by default just after logging in. - -`_CS_LFS_CFLAGS' - The returned string specifies which additional flags must be given - to the C compiler if a source is compiled using the - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS_LDFLAGS' - The returned string specifies which additional flags must be given - to the linker if a source is compiled using the - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS_LIBS' - The returned string specifies which additional libraries must be - linked to the application if a source is compiled using the - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS_LINTFLAGS' - The returned string specifies which additional flags must be given - to the lint tool if a source is compiled using the - `_LARGEFILE_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS64_CFLAGS' - The returned string specifies which additional flags must be given - to the C compiler if a source is compiled using the - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS64_LDFLAGS' - The returned string specifies which additional flags must be given - to the linker if a source is compiled using the - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS64_LIBS' - The returned string specifies which additional libraries must be - linked to the application if a source is compiled using the - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test - Macros::. - -`_CS_LFS64_LINTFLAGS' - The returned string specifies which additional flags must be given - to the lint tool if a source is compiled using the - `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test - Macros::. - - The way to use `confstr' without any arbitrary limit on string size -is to call it twice: first call it to get the length, allocate the -buffer accordingly, and then call `confstr' again to fill the buffer, -like this: - - char * - get_default_path (void) - { - size_t len = confstr (_CS_PATH, NULL, 0); - char *buffer = (char *) xmalloc (len); - - if (confstr (_CS_PATH, buf, len + 1) == 0) - { - free (buffer); - return NULL; - } - - return buffer; - } - - -File: libc.info, Node: Cryptographic Functions, Next: Debugging Support, Prev: System Configuration, Up: Top - -DES Encryption and Password Handling -************************************ - - On many systems, it is unnecessary to have any kind of user -authentication; for instance, a workstation which is not connected to a -network probably does not need any user authentication, because to use -the machine an intruder must have physical access. - - Sometimes, however, it is necessary to be sure that a user is -authorised to use some service a machine provides--for instance, to log -in as a particular user id (*note Users and Groups::). One traditional -way of doing this is for each user to choose a secret "password"; then, -the system can ask someone claiming to be a user what the user's -password is, and if the person gives the correct password then the -system can grant the appropriate privileges. - - If all the passwords are just stored in a file somewhere, then this -file has to be very carefully protected. To avoid this, passwords are -run through a "one-way function", a function which makes it difficult to -work out what its input was by looking at its output, before storing in -the file. - - The GNU C library already provides a one-way function based on MD5 -and for compatibility with Unix systems the standard one-way function -based on the Data Encryption Standard. - - It also provides support for Secure RPC, and some library functions -that can be used to perform normal DES encryption. - -* Menu: - -* Legal Problems:: This software can get you locked up, or worse. -* getpass:: Prompting the user for a password. -* crypt:: A one-way function for UNIX passwords. -* DES Encryption:: Routines for DES encryption. - - -File: libc.info, Node: Legal Problems, Next: getpass, Up: Cryptographic Functions - -Legal Problems -============== - - Because of the continuously changing state of the law, it's not -possible to provide a definitive survey of the laws affecting -cryptography. Instead, this section warns you of some of the known -trouble spots; this may help you when you try to find out what the laws -of your country are. - - Some countries require that you have a licence to use, posess, or -import cryptography. These countries are believed to include -Byelorussia, Burma, India, Indonesia, Israel, Kazakhstan, Pakistan, -Russia, and Saudi Arabia. - - Some countries restrict the transmission of encrypted messages by -radio; some telecommunications carriers restrict the transmission of -encrypted messages over their network. - - Many countries have some form of export control for encryption -software. The Wassenaar Arrangement is a multilateral agreement -between 33 countries (Argentina, Australia, Austria, Belgium, Bulgaria, -Canada, the Czech Republic, Denmark, Finland, France, Germany, Greece, -Hungary, Ireland, Italy, Japan, Luxembourg, the Netherlands, New -Zealand, Norway, Poland, Portugal, the Republic of Korea, Romania, the -Russian Federation, the Slovak Republic, Spain, Sweden, Switzerland, -Turkey, Ukraine, the United Kingdom and the United States) which -restricts some kinds of encryption exports. Different countries apply -the arrangement in different ways; some do not allow the exception for -certain kinds of "public domain" software (which would include this -library), some only restrict the export of software in tangible form, -and others impose significant additional restrictions. - - The United States has additional rules. This software would -generally be exportable under 15 CFR 740.13(e), which permits exports of -"encryption source code" which is "publicly available" and which is -"not subject to an express agreement for the payment of a licensing fee -or royalty for commercial production or sale of any product developed -with the source code" to most countries. - - The rules in this area are continuously changing. If you know of any -information in this manual that is out-of-date, please report it using -the `glibcbug' script. *Note Reporting Bugs::. - - -File: libc.info, Node: getpass, Next: crypt, Prev: Legal Problems, Up: Cryptographic Functions - -Reading Passwords -================= - - When reading in a password, it is desirable to avoid displaying it on -the screen, to help keep it secret. The following function handles this -in a convenient way. - - - Function: char * getpass (const char *PROMPT) - `getpass' outputs PROMPT, then reads a string in from the terminal - without echoing it. It tries to connect to the real terminal, - `/dev/tty', if possible, to encourage users not to put plaintext - passwords in files; otherwise, it uses `stdin' and `stderr'. - `getpass' also disables the INTR, QUIT, and SUSP characters on the - terminal using the `ISIG' terminal attribute (*note Local Modes::). - The terminal is flushed before and after `getpass', so that - characters of a mistyped password are not accidentally visible. - - In other C libraries, `getpass' may only return the first - `PASS_MAX' bytes of a password. The GNU C library has no limit, so - `PASS_MAX' is undefined. - - The prototype for this function is in `unistd.h'. `PASS_MAX' - would be defined in `limits.h'. - - This precise set of operations may not suit all possible situations. -In this case, it is recommended that users write their own `getpass' -substitute. For instance, a very simple substitute is as follows: - - #include - #include - - ssize_t - my_getpass (char **lineptr, size_t *n, FILE *stream) - { - struct termios old, new; - int nread; - - /* Turn echoing off and fail if we can't. */ - if (tcgetattr (fileno (stream), &old) != 0) - return -1; - new = old; - new.c_lflag &= ~ECHO; - if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0) - return -1; - - /* Read the password. */ - nread = getline (lineptr, n, stream); - - /* Restore terminal. */ - (void) tcsetattr (fileno (stream), TCSAFLUSH, &old); - - return nread; - } - - The substitute takes the same parameters as `getline' (*note Line -Input::); the user must print any prompt desired. diff -durpNa glibc-2.2.2/manual/libc.info-47 glibc-2.2.3/manual/libc.info-47 --- glibc-2.2.2/manual/libc.info-47 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-47 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,523 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: File Minimums, Next: Pathconf, Prev: Options for Files, Up: System Configuration + +Minimum Values for File System Limits +===================================== + + Here are the names for the POSIX minimum upper bounds for some of the +above parameters. The significance of these values is that you can +safely push to these limits without checking whether the particular +system you are using can go that far. In most cases GNU systems do not +have these strict limitations. The actual limit should be requested if +necessary. + +`_POSIX_LINK_MAX' + The most restrictive limit permitted by POSIX for the maximum + value of a file's link count. The value of this constant is `8'; + thus, you can always make up to eight names for a file without + running into a system limit. + +`_POSIX_MAX_CANON' + The most restrictive limit permitted by POSIX for the maximum + number of bytes in a canonical input line from a terminal device. + The value of this constant is `255'. + +`_POSIX_MAX_INPUT' + The most restrictive limit permitted by POSIX for the maximum + number of bytes in a terminal device input queue (or typeahead + buffer). *Note Input Modes::. The value of this constant is + `255'. + +`_POSIX_NAME_MAX' + The most restrictive limit permitted by POSIX for the maximum + number of bytes in a file name component. The value of this + constant is `14'. + +`_POSIX_PATH_MAX' + The most restrictive limit permitted by POSIX for the maximum + number of bytes in a file name. The value of this constant is + `256'. + +`_POSIX_PIPE_BUF' + The most restrictive limit permitted by POSIX for the maximum + number of bytes that can be written atomically to a pipe. The + value of this constant is `512'. + +`SYMLINK_MAX' + Maximum number of bytes in a symbolic link. + +`POSIX_REC_INCR_XFER_SIZE' + Recommended increment for file transfer sizes between the + `POSIX_REC_MIN_XFER_SIZE' and `POSIX_REC_MAX_XFER_SIZE' values. + +`POSIX_REC_MAX_XFER_SIZE' + Maximum recommended file transfer size. + +`POSIX_REC_MIN_XFER_SIZE' + Minimum recommended file transfer size. + +`POSIX_REC_XFER_ALIGN' + Recommended file transfer buffer alignment. + + +File: libc.info, Node: Pathconf, Next: Utility Limits, Prev: File Minimums, Up: System Configuration + +Using `pathconf' +================ + + When your machine allows different files to have different values +for a file system parameter, you can use the functions in this section +to find out the value that applies to any particular file. + + These functions and the associated constants for the PARAMETER +argument are declared in the header file `unistd.h'. + + - Function: long int pathconf (const char *FILENAME, int PARAMETER) + This function is used to inquire about the limits that apply to + the file named FILENAME. + + The PARAMETER argument should be one of the `_PC_' constants + listed below. + + The normal return value from `pathconf' is the value you requested. + A value of `-1' is returned both if the implementation does not + impose a limit, and in case of an error. In the former case, + `errno' is not set, while in the latter case, `errno' is set to + indicate the cause of the problem. So the only way to use this + function robustly is to store `0' into `errno' just before calling + it. + + Besides the usual file name errors (*note File Name Errors::), the + following error condition is defined for this function: + + `EINVAL' + The value of PARAMETER is invalid, or the implementation + doesn't support the PARAMETER for the specific file. + + - Function: long int fpathconf (int FILEDES, int PARAMETER) + This is just like `pathconf' except that an open file descriptor + is used to specify the file for which information is requested, + instead of a file name. + + The following `errno' error conditions are defined for this + function: + + `EBADF' + The FILEDES argument is not a valid file descriptor. + + `EINVAL' + The value of PARAMETER is invalid, or the implementation + doesn't support the PARAMETER for the specific file. + + Here are the symbolic constants that you can use as the PARAMETER +argument to `pathconf' and `fpathconf'. The values are all integer +constants. + +`_PC_LINK_MAX' + Inquire about the value of `LINK_MAX'. + +`_PC_MAX_CANON' + Inquire about the value of `MAX_CANON'. + +`_PC_MAX_INPUT' + Inquire about the value of `MAX_INPUT'. + +`_PC_NAME_MAX' + Inquire about the value of `NAME_MAX'. + +`_PC_PATH_MAX' + Inquire about the value of `PATH_MAX'. + +`_PC_PIPE_BUF' + Inquire about the value of `PIPE_BUF'. + +`_PC_CHOWN_RESTRICTED' + Inquire about the value of `_POSIX_CHOWN_RESTRICTED'. + +`_PC_NO_TRUNC' + Inquire about the value of `_POSIX_NO_TRUNC'. + +`_PC_VDISABLE' + Inquire about the value of `_POSIX_VDISABLE'. + +`_PC_SYNC_IO' + Inquire about the value of `_POSIX_SYNC_IO'. + +`_PC_ASYNC_IO' + Inquire about the value of `_POSIX_ASYNC_IO'. + +`_PC_PRIO_IO' + Inquire about the value of `_POSIX_PRIO_IO'. + +`_PC_SOCK_MAXBUF' + Inquire about the value of `_POSIX_PIPE_BUF'. + +`_PC_FILESIZEBITS' + Inquire about the availability of large files on the filesystem. + +`_PC_REC_INCR_XFER_SIZE' + Inquire about the value of `POSIX_REC_INCR_XFER_SIZE'. + +`_PC_REC_MAX_XFER_SIZE' + Inquire about the value of `POSIX_REC_MAX_XFER_SIZE'. + +`_PC_REC_MIN_XFER_SIZE' + Inquire about the value of `POSIX_REC_MIN_XFER_SIZE'. + +`_PC_REC_XFER_ALIGN' + Inquire about the value of `POSIX_REC_XFER_ALIGN'. + + +File: libc.info, Node: Utility Limits, Next: Utility Minimums, Prev: Pathconf, Up: System Configuration + +Utility Program Capacity Limits +=============================== + + The POSIX.2 standard specifies certain system limits that you can +access through `sysconf' that apply to utility behavior rather than the +behavior of the library or the operating system. + + The GNU C library defines macros for these limits, and `sysconf' +returns values for them if you ask; but these values convey no +meaningful information. They are simply the smallest values that +POSIX.2 permits. + + - Macro: int BC_BASE_MAX + The largest value of `obase' that the `bc' utility is guaranteed + to support. + + - Macro: int BC_DIM_MAX + The largest number of elements in one array that the `bc' utility + is guaranteed to support. + + - Macro: int BC_SCALE_MAX + The largest value of `scale' that the `bc' utility is guaranteed + to support. + + - Macro: int BC_STRING_MAX + The largest number of characters in one string constant that the + `bc' utility is guaranteed to support. + + - Macro: int COLL_WEIGHTS_MAX + The largest number of weights that can necessarily be used in + defining the collating sequence for a locale. + + - Macro: int EXPR_NEST_MAX + The maximum number of expressions that can be nested within + parenthesis by the `expr' utility. + + - Macro: int LINE_MAX + The largest text line that the text-oriented POSIX.2 utilities can + support. (If you are using the GNU versions of these utilities, + then there is no actual limit except that imposed by the available + virtual memory, but there is no way that the library can tell you + this.) + + - Macro: int EQUIV_CLASS_MAX + The maximum number of weights that can be assigned to an entry of + the `LC_COLLATE' category `order' keyword in a locale definition. + The GNU C library does not presently support locale definitions. + + +File: libc.info, Node: Utility Minimums, Next: String Parameters, Prev: Utility Limits, Up: System Configuration + +Minimum Values for Utility Limits +================================= + +`_POSIX2_BC_BASE_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + value of `obase' in the `bc' utility. Its value is `99'. + +`_POSIX2_BC_DIM_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + size of an array in the `bc' utility. Its value is `2048'. + +`_POSIX2_BC_SCALE_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + value of `scale' in the `bc' utility. Its value is `99'. + +`_POSIX2_BC_STRING_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + size of a string constant in the `bc' utility. Its value is + `1000'. + +`_POSIX2_COLL_WEIGHTS_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + number of weights that can necessarily be used in defining the + collating sequence for a locale. Its value is `2'. + +`_POSIX2_EXPR_NEST_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + number of expressions nested within parenthesis when using the + `expr' utility. Its value is `32'. + +`_POSIX2_LINE_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + size of a text line that the text utilities can handle. Its value + is `2048'. + +`_POSIX2_EQUIV_CLASS_MAX' + The most restrictive limit permitted by POSIX.2 for the maximum + number of weights that can be assigned to an entry of the + `LC_COLLATE' category `order' keyword in a locale definition. Its + value is `2'. The GNU C library does not presently support locale + definitions. + + +File: libc.info, Node: String Parameters, Prev: Utility Minimums, Up: System Configuration + +String-Valued Parameters +======================== + + POSIX.2 defines a way to get string-valued parameters from the +operating system with the function `confstr': + + - Function: size_t confstr (int PARAMETER, char *BUF, size_t LEN) + This function reads the value of a string-valued system parameter, + storing the string into LEN bytes of memory space starting at BUF. + The PARAMETER argument should be one of the `_CS_' symbols listed + below. + + The normal return value from `confstr' is the length of the string + value that you asked for. If you supply a null pointer for BUF, + then `confstr' does not try to store the string; it just returns + its length. A value of `0' indicates an error. + + If the string you asked for is too long for the buffer (that is, + longer than `LEN - 1'), then `confstr' stores just that much + (leaving room for the terminating null character). You can tell + that this has happened because `confstr' returns a value greater + than or equal to LEN. + + The following `errno' error conditions are defined for this + function: + + `EINVAL' + The value of the PARAMETER is invalid. + + Currently there is just one parameter you can read with `confstr': + +`_CS_PATH' + This parameter's value is the recommended default path for + searching for executable files. This is the path that a user has + by default just after logging in. + +`_CS_LFS_CFLAGS' + The returned string specifies which additional flags must be given + to the C compiler if a source is compiled using the + `_LARGEFILE_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS_LDFLAGS' + The returned string specifies which additional flags must be given + to the linker if a source is compiled using the + `_LARGEFILE_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS_LIBS' + The returned string specifies which additional libraries must be + linked to the application if a source is compiled using the + `_LARGEFILE_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS_LINTFLAGS' + The returned string specifies which additional flags must be given + to the lint tool if a source is compiled using the + `_LARGEFILE_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS64_CFLAGS' + The returned string specifies which additional flags must be given + to the C compiler if a source is compiled using the + `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS64_LDFLAGS' + The returned string specifies which additional flags must be given + to the linker if a source is compiled using the + `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS64_LIBS' + The returned string specifies which additional libraries must be + linked to the application if a source is compiled using the + `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test + Macros::. + +`_CS_LFS64_LINTFLAGS' + The returned string specifies which additional flags must be given + to the lint tool if a source is compiled using the + `_LARGEFILE64_SOURCE' feature select macro; *note Feature Test + Macros::. + + The way to use `confstr' without any arbitrary limit on string size +is to call it twice: first call it to get the length, allocate the +buffer accordingly, and then call `confstr' again to fill the buffer, +like this: + + char * + get_default_path (void) + { + size_t len = confstr (_CS_PATH, NULL, 0); + char *buffer = (char *) xmalloc (len); + + if (confstr (_CS_PATH, buf, len + 1) == 0) + { + free (buffer); + return NULL; + } + + return buffer; + } + + +File: libc.info, Node: Cryptographic Functions, Next: Debugging Support, Prev: System Configuration, Up: Top + +DES Encryption and Password Handling +************************************ + + On many systems, it is unnecessary to have any kind of user +authentication; for instance, a workstation which is not connected to a +network probably does not need any user authentication, because to use +the machine an intruder must have physical access. + + Sometimes, however, it is necessary to be sure that a user is +authorised to use some service a machine provides--for instance, to log +in as a particular user id (*note Users and Groups::). One traditional +way of doing this is for each user to choose a secret "password"; then, +the system can ask someone claiming to be a user what the user's +password is, and if the person gives the correct password then the +system can grant the appropriate privileges. + + If all the passwords are just stored in a file somewhere, then this +file has to be very carefully protected. To avoid this, passwords are +run through a "one-way function", a function which makes it difficult to +work out what its input was by looking at its output, before storing in +the file. + + The GNU C library already provides a one-way function based on MD5 +and for compatibility with Unix systems the standard one-way function +based on the Data Encryption Standard. + + It also provides support for Secure RPC, and some library functions +that can be used to perform normal DES encryption. + +* Menu: + +* Legal Problems:: This software can get you locked up, or worse. +* getpass:: Prompting the user for a password. +* crypt:: A one-way function for UNIX passwords. +* DES Encryption:: Routines for DES encryption. + + +File: libc.info, Node: Legal Problems, Next: getpass, Up: Cryptographic Functions + +Legal Problems +============== + + Because of the continuously changing state of the law, it's not +possible to provide a definitive survey of the laws affecting +cryptography. Instead, this section warns you of some of the known +trouble spots; this may help you when you try to find out what the laws +of your country are. + + Some countries require that you have a licence to use, posess, or +import cryptography. These countries are believed to include +Byelorussia, Burma, India, Indonesia, Israel, Kazakhstan, Pakistan, +Russia, and Saudi Arabia. + + Some countries restrict the transmission of encrypted messages by +radio; some telecommunications carriers restrict the transmission of +encrypted messages over their network. + + Many countries have some form of export control for encryption +software. The Wassenaar Arrangement is a multilateral agreement +between 33 countries (Argentina, Australia, Austria, Belgium, Bulgaria, +Canada, the Czech Republic, Denmark, Finland, France, Germany, Greece, +Hungary, Ireland, Italy, Japan, Luxembourg, the Netherlands, New +Zealand, Norway, Poland, Portugal, the Republic of Korea, Romania, the +Russian Federation, the Slovak Republic, Spain, Sweden, Switzerland, +Turkey, Ukraine, the United Kingdom and the United States) which +restricts some kinds of encryption exports. Different countries apply +the arrangement in different ways; some do not allow the exception for +certain kinds of "public domain" software (which would include this +library), some only restrict the export of software in tangible form, +and others impose significant additional restrictions. + + The United States has additional rules. This software would +generally be exportable under 15 CFR 740.13(e), which permits exports of +"encryption source code" which is "publicly available" and which is +"not subject to an express agreement for the payment of a licensing fee +or royalty for commercial production or sale of any product developed +with the source code" to most countries. + + The rules in this area are continuously changing. If you know of any +information in this manual that is out-of-date, please report it using +the `glibcbug' script. *Note Reporting Bugs::. + + +File: libc.info, Node: getpass, Next: crypt, Prev: Legal Problems, Up: Cryptographic Functions + +Reading Passwords +================= + + When reading in a password, it is desirable to avoid displaying it on +the screen, to help keep it secret. The following function handles this +in a convenient way. + + - Function: char * getpass (const char *PROMPT) + `getpass' outputs PROMPT, then reads a string in from the terminal + without echoing it. It tries to connect to the real terminal, + `/dev/tty', if possible, to encourage users not to put plaintext + passwords in files; otherwise, it uses `stdin' and `stderr'. + `getpass' also disables the INTR, QUIT, and SUSP characters on the + terminal using the `ISIG' terminal attribute (*note Local Modes::). + The terminal is flushed before and after `getpass', so that + characters of a mistyped password are not accidentally visible. + + In other C libraries, `getpass' may only return the first + `PASS_MAX' bytes of a password. The GNU C library has no limit, so + `PASS_MAX' is undefined. + + The prototype for this function is in `unistd.h'. `PASS_MAX' + would be defined in `limits.h'. + + This precise set of operations may not suit all possible situations. +In this case, it is recommended that users write their own `getpass' +substitute. For instance, a very simple substitute is as follows: + + #include + #include + + ssize_t + my_getpass (char **lineptr, size_t *n, FILE *stream) + { + struct termios old, new; + int nread; + + /* Turn echoing off and fail if we can't. */ + if (tcgetattr (fileno (stream), &old) != 0) + return -1; + new = old; + new.c_lflag &= ~ECHO; + if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0) + return -1; + + /* Read the password. */ + nread = getline (lineptr, n, stream); + + /* Restore terminal. */ + (void) tcsetattr (fileno (stream), TCSAFLUSH, &old); + + return nread; + } + + The substitute takes the same parameters as `getline' (*note Line +Input::); the user must print any prompt desired. + + File: libc.info, Node: crypt, Next: DES Encryption, Prev: getpass, Up: Cryptographic Functions Encrypting Passwords @@ -729,407 +1246,4 @@ change the attributes of the thread prev If the value exceeds the `stacksize', `pthread_atrr_setguardsize' will fail and return `EINVAL'. - - -File: libc.info, Node: Cancellation, Next: Cleanup Handlers, Prev: Thread Attributes, Up: POSIX Threads - -Cancellation -============ - - Cancellation is the mechanism by which a thread can terminate the -execution of another thread. More precisely, a thread can send a -cancellation request to another thread. Depending on its settings, the -target thread can then either ignore the request, honor it immediately, -or defer it till it reaches a cancellation point. When threads are -first created by `pthread_create', they always defer cancellation -requests. - - When a thread eventually honors a cancellation request, it behaves -as if `pthread_exit(PTHREAD_CANCELED)' was called. All cleanup handlers -are executed in reverse order, finalization functions for -thread-specific data are called, and finally the thread stops executing. -If the cancelled thread was joinable, the return value -`PTHREAD_CANCELED' is provided to whichever thread calls PTHREAD_JOIN -on it. See `pthread_exit' for more information. - - Cancellation points are the points where the thread checks for -pending cancellation requests and performs them. The POSIX threads -functions `pthread_join', `pthread_cond_wait', -`pthread_cond_timedwait', `pthread_testcancel', `sem_wait', and -`sigwait' are cancellation points. In addition, these system calls are -cancellation points: - -accept open sendmsg -close pause sendto -connect read system -fcntl recv tcdrain -fsync recvfrom wait -lseek recvmsg waitpid -msync send write -nanosleep - -All library functions that call these functions (such as `printf') are -also cancellation points. - - - Function: int pthread_setcancelstate (int STATE, int *OLDSTATE) - `pthread_setcancelstate' changes the cancellation state for the - calling thread - that is, whether cancellation requests are - ignored or not. The STATE argument is the new cancellation state: - either `PTHREAD_CANCEL_ENABLE' to enable cancellation, or - `PTHREAD_CANCEL_DISABLE' to disable cancellation (cancellation - requests are ignored). - - If OLDSTATE is not `NULL', the previous cancellation state is - stored in the location pointed to by OLDSTATE, and can thus be - restored later by another call to `pthread_setcancelstate'. - - If the STATE argument is not `PTHREAD_CANCEL_ENABLE' or - `PTHREAD_CANCEL_DISABLE', `pthread_setcancelstate' fails and - returns `EINVAL'. Otherwise it returns 0. - - - Function: int pthread_setcanceltype (int TYPE, int *OLDTYPE) - `pthread_setcanceltype' changes the type of responses to - cancellation requests for the calling thread: asynchronous - (immediate) or deferred. The TYPE argument is the new - cancellation type: either `PTHREAD_CANCEL_ASYNCHRONOUS' to cancel - the calling thread as soon as the cancellation request is - received, or `PTHREAD_CANCEL_DEFERRED' to keep the cancellation - request pending until the next cancellation point. If OLDTYPE is - not `NULL', the previous cancellation state is stored in the - location pointed to by OLDTYPE, and can thus be restored later by - another call to `pthread_setcanceltype'. - - If the TYPE argument is not `PTHREAD_CANCEL_DEFERRED' or - `PTHREAD_CANCEL_ASYNCHRONOUS', `pthread_setcanceltype' fails and - returns `EINVAL'. Otherwise it returns 0. - - - Function: void pthread_testcancel (VOID) - `pthread_testcancel' does nothing except testing for pending - cancellation and executing it. Its purpose is to introduce explicit - checks for cancellation in long sequences of code that do not call - cancellation point functions otherwise. - - -File: libc.info, Node: Cleanup Handlers, Next: Mutexes, Prev: Cancellation, Up: POSIX Threads - -Cleanup Handlers -================ - - Cleanup handlers are functions that get called when a thread -terminates, either by calling `pthread_exit' or because of -cancellation. Cleanup handlers are installed and removed following a -stack-like discipline. - - The purpose of cleanup handlers is to free the resources that a -thread may hold at the time it terminates. In particular, if a thread -exits or is cancelled while it owns a locked mutex, the mutex will -remain locked forever and prevent other threads from executing -normally. The best way to avoid this is, just before locking the mutex, -to install a cleanup handler whose effect is to unlock the mutex. -Cleanup handlers can be used similarly to free blocks allocated with -`malloc' or close file descriptors on thread termination. - - Here is how to lock a mutex MUT in such a way that it will be -unlocked if the thread is canceled while MUT is locked: - - pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut); - pthread_mutex_lock(&mut); - /* do some work */ - pthread_mutex_unlock(&mut); - pthread_cleanup_pop(0); - - Equivalently, the last two lines can be replaced by - - pthread_cleanup_pop(1); - - Notice that the code above is safe only in deferred cancellation mode -(see `pthread_setcanceltype'). In asynchronous cancellation mode, a -cancellation can occur between `pthread_cleanup_push' and -`pthread_mutex_lock', or between `pthread_mutex_unlock' and -`pthread_cleanup_pop', resulting in both cases in the thread trying to -unlock a mutex not locked by the current thread. This is the main -reason why asynchronous cancellation is difficult to use. - - If the code above must also work in asynchronous cancellation mode, -then it must switch to deferred mode for locking and unlocking the -mutex: - - pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype); - pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut); - pthread_mutex_lock(&mut); - /* do some work */ - pthread_cleanup_pop(1); - pthread_setcanceltype(oldtype, NULL); - - The code above can be rewritten in a more compact and efficient way, -using the non-portable functions `pthread_cleanup_push_defer_np' and -`pthread_cleanup_pop_restore_np': - - pthread_cleanup_push_defer_np(pthread_mutex_unlock, (void *) &mut); - pthread_mutex_lock(&mut); - /* do some work */ - pthread_cleanup_pop_restore_np(1); - - - Function: void pthread_cleanup_push (void (*ROUTINE) (void *), void - *ARG) - `pthread_cleanup_push' installs the ROUTINE function with argument - ARG as a cleanup handler. From this point on to the matching - `pthread_cleanup_pop', the function ROUTINE will be called with - arguments ARG when the thread terminates, either through - `pthread_exit' or by cancellation. If several cleanup handlers are - active at that point, they are called in LIFO order: the most - recently installed handler is called first. - - - Function: void pthread_cleanup_pop (int EXECUTE) - `pthread_cleanup_pop' removes the most recently installed cleanup - handler. If the EXECUTE argument is not 0, it also executes the - handler, by calling the ROUTINE function with arguments ARG. If - the EXECUTE argument is 0, the handler is only removed but not - executed. - - Matching pairs of `pthread_cleanup_push' and `pthread_cleanup_pop' -must occur in the same function, at the same level of block nesting. -Actually, `pthread_cleanup_push' and `pthread_cleanup_pop' are macros, -and the expansion of `pthread_cleanup_push' introduces an open brace -`{' with the matching closing brace `}' being introduced by the -expansion of the matching `pthread_cleanup_pop'. - - - Function: void pthread_cleanup_push_defer_np (void (*ROUTINE) (void - *), void *ARG) - `pthread_cleanup_push_defer_np' is a non-portable extension that - combines `pthread_cleanup_push' and `pthread_setcanceltype'. It - pushes a cleanup handler just as `pthread_cleanup_push' does, but - also saves the current cancellation type and sets it to deferred - cancellation. This ensures that the cleanup mechanism is effective - even if the thread was initially in asynchronous cancellation mode. - - - Function: void pthread_cleanup_pop_restore_np (int EXECUTE) - `pthread_cleanup_pop_restore_np' pops a cleanup handler introduced - by `pthread_cleanup_push_defer_np', and restores the cancellation - type to its value at the time `pthread_cleanup_push_defer_np' was - called. - - `pthread_cleanup_push_defer_np' and `pthread_cleanup_pop_restore_np' -must occur in matching pairs, at the same level of block nesting. - - The sequence - - pthread_cleanup_push_defer_np(routine, arg); - ... - pthread_cleanup_pop_defer_np(execute); - -is functionally equivalent to (but more compact and efficient than) - - { - int oldtype; - pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype); - pthread_cleanup_push(routine, arg); - ... - pthread_cleanup_pop(execute); - pthread_setcanceltype(oldtype, NULL); - } - - -File: libc.info, Node: Mutexes, Next: Condition Variables, Prev: Cleanup Handlers, Up: POSIX Threads - -Mutexes -======= - - A mutex is a MUTual EXclusion device, and is useful for protecting -shared data structures from concurrent modifications, and implementing -critical sections and monitors. - - A mutex has two possible states: unlocked (not owned by any thread), -and locked (owned by one thread). A mutex can never be owned by two -different threads simultaneously. A thread attempting to lock a mutex -that is already locked by another thread is suspended until the owning -thread unlocks the mutex first. - - None of the mutex functions is a cancellation point, not even -`pthread_mutex_lock', in spite of the fact that it can suspend a thread -for arbitrary durations. This way, the status of mutexes at -cancellation points is predictable, allowing cancellation handlers to -unlock precisely those mutexes that need to be unlocked before the -thread stops executing. Consequently, threads using deferred -cancellation should never hold a mutex for extended periods of time. - - It is not safe to call mutex functions from a signal handler. In -particular, calling `pthread_mutex_lock' or `pthread_mutex_unlock' from -a signal handler may deadlock the calling thread. - - - Function: int pthread_mutex_init (pthread_mutex_t *MUTEX, const - pthread_mutexattr_t *MUTEXATTR) - `pthread_mutex_init' initializes the mutex object pointed to by - MUTEX according to the mutex attributes specified in MUTEXATTR. - If MUTEXATTR is `NULL', default attributes are used instead. - - The LinuxThreads implementation supports only one mutex attribute, - the MUTEX TYPE, which is either "fast", "recursive", or "error - checking". The type of a mutex determines whether it can be locked - again by a thread that already owns it. The default type is - "fast". - - Variables of type `pthread_mutex_t' can also be initialized - statically, using the constants `PTHREAD_MUTEX_INITIALIZER' (for - timed mutexes), `PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' (for - recursive mutexes), `PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' (for - fast mutexes(, and `PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP' (for - error checking mutexes). - - `pthread_mutex_init' always returns 0. - - - Function: int pthread_mutex_lock (pthread_mutex_t *mutex)) - `pthread_mutex_lock' locks the given mutex. If the mutex is - currently unlocked, it becomes locked and owned by the calling - thread, and `pthread_mutex_lock' returns immediately. If the mutex - is already locked by another thread, `pthread_mutex_lock' suspends - the calling thread until the mutex is unlocked. - - If the mutex is already locked by the calling thread, the behavior - of `pthread_mutex_lock' depends on the type of the mutex. If the - mutex is of the "fast" type, the calling thread is suspended. It - will remain suspended forever, because no other thread can unlock - the mutex. If the mutex is of the "error checking" type, - `pthread_mutex_lock' returns immediately with the error code - `EDEADLK'. If the mutex is of the "recursive" type, - `pthread_mutex_lock' succeeds and returns immediately, recording - the number of times the calling thread has locked the mutex. An - equal number of `pthread_mutex_unlock' operations must be - performed before the mutex returns to the unlocked state. - - - Function: int pthread_mutex_trylock (pthread_mutex_t *MUTEX) - `pthread_mutex_trylock' behaves identically to - `pthread_mutex_lock', except that it does not block the calling - thread if the mutex is already locked by another thread (or by the - calling thread in the case of a "fast" mutex). Instead, - `pthread_mutex_trylock' returns immediately with the error code - `EBUSY'. - - - Function: int pthread_mutex_timedlock (pthread_mutex_t *MUTEX, const - struct timespec *ABSTIME) - The `pthread_mutex_timedlock' is similar to the - `pthread_mutex_lock' function but instead of blocking for in - indefinite time if the mutex is locked by another thread, it - returns when the time specified in ABSTIME is reached. - - This function can only be used on standard ("timed") and "error - checking" mutexes. It behaves just like `pthread_mutex_lock' for - all other types. - - If the mutex is successfully locked, the function returns zero. - If the time specified in ABSTIME is reached without the mutex - being locked, `ETIMEDOUT' is returned. - - This function was introduced in the POSIX.1d revision of the POSIX - standard. - - - Function: int pthread_mutex_unlock (pthread_mutex_t *MUTEX) - `pthread_mutex_unlock' unlocks the given mutex. The mutex is - assumed to be locked and owned by the calling thread on entrance to - `pthread_mutex_unlock'. If the mutex is of the "fast" type, - `pthread_mutex_unlock' always returns it to the unlocked state. If - it is of the "recursive" type, it decrements the locking count of - the mutex (number of `pthread_mutex_lock' operations performed on - it by the calling thread), and only when this count reaches zero - is the mutex actually unlocked. - - On "error checking" mutexes, `pthread_mutex_unlock' actually - checks at run-time that the mutex is locked on entrance, and that - it was locked by the same thread that is now calling - `pthread_mutex_unlock'. If these conditions are not met, - `pthread_mutex_unlock' returns `EPERM', and the mutex remains - unchanged. "Fast" and "recursive" mutexes perform no such checks, - thus allowing a locked mutex to be unlocked by a thread other than - its owner. This is non-portable behavior and must not be relied - upon. - - - Function: int pthread_mutex_destroy (pthread_mutex_t *MUTEX) - `pthread_mutex_destroy' destroys a mutex object, freeing the - resources it might hold. The mutex must be unlocked on entrance. - In the LinuxThreads implementation, no resources are associated - with mutex objects, thus `pthread_mutex_destroy' actually does - nothing except checking that the mutex is unlocked. - - If the mutex is locked by some thread, `pthread_mutex_destroy' - returns `EBUSY'. Otherwise it returns 0. - - If any of the above functions (except `pthread_mutex_init') is -applied to an uninitialized mutex, they will simply return `EINVAL' and -do nothing. - - A shared global variable X can be protected by a mutex as follows: - - int x; - pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; - - All accesses and modifications to X should be bracketed by calls to -`pthread_mutex_lock' and `pthread_mutex_unlock' as follows: - - pthread_mutex_lock(&mut); - /* operate on x */ - pthread_mutex_unlock(&mut); - - Mutex attributes can be specified at mutex creation time, by passing -a mutex attribute object as second argument to `pthread_mutex_init'. -Passing `NULL' is equivalent to passing a mutex attribute object with -all attributes set to their default values. - - - Function: int pthread_mutexattr_init (pthread_mutexattr_t *ATTR) - `pthread_mutexattr_init' initializes the mutex attribute object - ATTR and fills it with default values for the attributes. - - This function always returns 0. - - - Function: int pthread_mutexattr_destroy (pthread_mutexattr_t *ATTR) - `pthread_mutexattr_destroy' destroys a mutex attribute object, - which must not be reused until it is reinitialized. - `pthread_mutexattr_destroy' does nothing in the LinuxThreads - implementation. - - This function always returns 0. - - LinuxThreads supports only one mutex attribute: the mutex type, -which is either `PTHREAD_MUTEX_ADAPTIVE_NP' for "fast" mutexes, -`PTHREAD_MUTEX_RECURSIVE_NP' for "recursive" mutexes, -`PTHREAD_MUTEX_TIMED_NP' for "timed" mutexes, or -`PTHREAD_MUTEX_ERRORCHECK_NP' for "error checking" mutexes. As the -`NP' suffix indicates, this is a non-portable extension to the POSIX -standard and should not be employed in portable programs. - - The mutex type determines what happens if a thread attempts to lock a -mutex it already owns with `pthread_mutex_lock'. If the mutex is of the -"fast" type, `pthread_mutex_lock' simply suspends the calling thread -forever. If the mutex is of the "error checking" type, -`pthread_mutex_lock' returns immediately with the error code `EDEADLK'. -If the mutex is of the "recursive" type, the call to -`pthread_mutex_lock' returns immediately with a success return code. -The number of times the thread owning the mutex has locked it is -recorded in the mutex. The owning thread must call -`pthread_mutex_unlock' the same number of times before the mutex -returns to the unlocked state. - - The default mutex type is "timed", that is, `PTHREAD_MUTEX_TIMED_NP'. - - - Function: int pthread_mutexattr_settype (pthread_mutexattr_t *ATTR, - int TYPE) - `pthread_mutexattr_settype' sets the mutex type attribute in ATTR - to the value specified by TYPE. - - If TYPE is not `PTHREAD_MUTEX_ADAPTIVE_NP', - `PTHREAD_MUTEX_RECURSIVE_NP', `PTHREAD_MUTEX_TIMED_NP', or - `PTHREAD_MUTEX_ERRORCHECK_NP', this function will return `EINVAL' - and leave ATTR unchanged. - - The standard Unix98 identifiers `PTHREAD_MUTEX_DEFAULT', - `PTHREAD_MUTEX_NORMAL', `PTHREAD_MUTEX_RECURSIVE', and - `PTHREAD_MUTEX_ERRORCHECK' are also permitted. - - - - Function: int pthread_mutexattr_gettype (const pthread_mutexattr_t - *ATTR, int *TYPE) - `pthread_mutexattr_gettype' retrieves the current value of the - mutex type attribute in ATTR and stores it in the location pointed - to by TYPE. - - This function always returns 0. diff -durpNa glibc-2.2.2/manual/libc.info-48 glibc-2.2.3/manual/libc.info-48 --- glibc-2.2.2/manual/libc.info-48 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-48 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,409 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Cancellation, Next: Cleanup Handlers, Prev: Thread Attributes, Up: POSIX Threads + +Cancellation +============ + + Cancellation is the mechanism by which a thread can terminate the +execution of another thread. More precisely, a thread can send a +cancellation request to another thread. Depending on its settings, the +target thread can then either ignore the request, honor it immediately, +or defer it till it reaches a cancellation point. When threads are +first created by `pthread_create', they always defer cancellation +requests. + + When a thread eventually honors a cancellation request, it behaves +as if `pthread_exit(PTHREAD_CANCELED)' was called. All cleanup handlers +are executed in reverse order, finalization functions for +thread-specific data are called, and finally the thread stops executing. +If the cancelled thread was joinable, the return value +`PTHREAD_CANCELED' is provided to whichever thread calls PTHREAD_JOIN +on it. See `pthread_exit' for more information. + + Cancellation points are the points where the thread checks for +pending cancellation requests and performs them. The POSIX threads +functions `pthread_join', `pthread_cond_wait', +`pthread_cond_timedwait', `pthread_testcancel', `sem_wait', and +`sigwait' are cancellation points. In addition, these system calls are +cancellation points: + +accept open sendmsg +close pause sendto +connect read system +fcntl recv tcdrain +fsync recvfrom wait +lseek recvmsg waitpid +msync send write +nanosleep + +All library functions that call these functions (such as `printf') are +also cancellation points. + + - Function: int pthread_setcancelstate (int STATE, int *OLDSTATE) + `pthread_setcancelstate' changes the cancellation state for the + calling thread - that is, whether cancellation requests are + ignored or not. The STATE argument is the new cancellation state: + either `PTHREAD_CANCEL_ENABLE' to enable cancellation, or + `PTHREAD_CANCEL_DISABLE' to disable cancellation (cancellation + requests are ignored). + + If OLDSTATE is not `NULL', the previous cancellation state is + stored in the location pointed to by OLDSTATE, and can thus be + restored later by another call to `pthread_setcancelstate'. + + If the STATE argument is not `PTHREAD_CANCEL_ENABLE' or + `PTHREAD_CANCEL_DISABLE', `pthread_setcancelstate' fails and + returns `EINVAL'. Otherwise it returns 0. + + - Function: int pthread_setcanceltype (int TYPE, int *OLDTYPE) + `pthread_setcanceltype' changes the type of responses to + cancellation requests for the calling thread: asynchronous + (immediate) or deferred. The TYPE argument is the new + cancellation type: either `PTHREAD_CANCEL_ASYNCHRONOUS' to cancel + the calling thread as soon as the cancellation request is + received, or `PTHREAD_CANCEL_DEFERRED' to keep the cancellation + request pending until the next cancellation point. If OLDTYPE is + not `NULL', the previous cancellation state is stored in the + location pointed to by OLDTYPE, and can thus be restored later by + another call to `pthread_setcanceltype'. + + If the TYPE argument is not `PTHREAD_CANCEL_DEFERRED' or + `PTHREAD_CANCEL_ASYNCHRONOUS', `pthread_setcanceltype' fails and + returns `EINVAL'. Otherwise it returns 0. + + - Function: void pthread_testcancel (VOID) + `pthread_testcancel' does nothing except testing for pending + cancellation and executing it. Its purpose is to introduce explicit + checks for cancellation in long sequences of code that do not call + cancellation point functions otherwise. + + +File: libc.info, Node: Cleanup Handlers, Next: Mutexes, Prev: Cancellation, Up: POSIX Threads + +Cleanup Handlers +================ + + Cleanup handlers are functions that get called when a thread +terminates, either by calling `pthread_exit' or because of +cancellation. Cleanup handlers are installed and removed following a +stack-like discipline. + + The purpose of cleanup handlers is to free the resources that a +thread may hold at the time it terminates. In particular, if a thread +exits or is cancelled while it owns a locked mutex, the mutex will +remain locked forever and prevent other threads from executing +normally. The best way to avoid this is, just before locking the mutex, +to install a cleanup handler whose effect is to unlock the mutex. +Cleanup handlers can be used similarly to free blocks allocated with +`malloc' or close file descriptors on thread termination. + + Here is how to lock a mutex MUT in such a way that it will be +unlocked if the thread is canceled while MUT is locked: + + pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut); + pthread_mutex_lock(&mut); + /* do some work */ + pthread_mutex_unlock(&mut); + pthread_cleanup_pop(0); + + Equivalently, the last two lines can be replaced by + + pthread_cleanup_pop(1); + + Notice that the code above is safe only in deferred cancellation mode +(see `pthread_setcanceltype'). In asynchronous cancellation mode, a +cancellation can occur between `pthread_cleanup_push' and +`pthread_mutex_lock', or between `pthread_mutex_unlock' and +`pthread_cleanup_pop', resulting in both cases in the thread trying to +unlock a mutex not locked by the current thread. This is the main +reason why asynchronous cancellation is difficult to use. + + If the code above must also work in asynchronous cancellation mode, +then it must switch to deferred mode for locking and unlocking the +mutex: + + pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype); + pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut); + pthread_mutex_lock(&mut); + /* do some work */ + pthread_cleanup_pop(1); + pthread_setcanceltype(oldtype, NULL); + + The code above can be rewritten in a more compact and efficient way, +using the non-portable functions `pthread_cleanup_push_defer_np' and +`pthread_cleanup_pop_restore_np': + + pthread_cleanup_push_defer_np(pthread_mutex_unlock, (void *) &mut); + pthread_mutex_lock(&mut); + /* do some work */ + pthread_cleanup_pop_restore_np(1); + + - Function: void pthread_cleanup_push (void (*ROUTINE) (void *), void + *ARG) + `pthread_cleanup_push' installs the ROUTINE function with argument + ARG as a cleanup handler. From this point on to the matching + `pthread_cleanup_pop', the function ROUTINE will be called with + arguments ARG when the thread terminates, either through + `pthread_exit' or by cancellation. If several cleanup handlers are + active at that point, they are called in LIFO order: the most + recently installed handler is called first. + + - Function: void pthread_cleanup_pop (int EXECUTE) + `pthread_cleanup_pop' removes the most recently installed cleanup + handler. If the EXECUTE argument is not 0, it also executes the + handler, by calling the ROUTINE function with arguments ARG. If + the EXECUTE argument is 0, the handler is only removed but not + executed. + + Matching pairs of `pthread_cleanup_push' and `pthread_cleanup_pop' +must occur in the same function, at the same level of block nesting. +Actually, `pthread_cleanup_push' and `pthread_cleanup_pop' are macros, +and the expansion of `pthread_cleanup_push' introduces an open brace +`{' with the matching closing brace `}' being introduced by the +expansion of the matching `pthread_cleanup_pop'. + + - Function: void pthread_cleanup_push_defer_np (void (*ROUTINE) (void + *), void *ARG) + `pthread_cleanup_push_defer_np' is a non-portable extension that + combines `pthread_cleanup_push' and `pthread_setcanceltype'. It + pushes a cleanup handler just as `pthread_cleanup_push' does, but + also saves the current cancellation type and sets it to deferred + cancellation. This ensures that the cleanup mechanism is effective + even if the thread was initially in asynchronous cancellation mode. + + - Function: void pthread_cleanup_pop_restore_np (int EXECUTE) + `pthread_cleanup_pop_restore_np' pops a cleanup handler introduced + by `pthread_cleanup_push_defer_np', and restores the cancellation + type to its value at the time `pthread_cleanup_push_defer_np' was + called. + + `pthread_cleanup_push_defer_np' and `pthread_cleanup_pop_restore_np' +must occur in matching pairs, at the same level of block nesting. + + The sequence + + pthread_cleanup_push_defer_np(routine, arg); + ... + pthread_cleanup_pop_defer_np(execute); + +is functionally equivalent to (but more compact and efficient than) + + { + int oldtype; + pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype); + pthread_cleanup_push(routine, arg); + ... + pthread_cleanup_pop(execute); + pthread_setcanceltype(oldtype, NULL); + } + + +File: libc.info, Node: Mutexes, Next: Condition Variables, Prev: Cleanup Handlers, Up: POSIX Threads + +Mutexes +======= + + A mutex is a MUTual EXclusion device, and is useful for protecting +shared data structures from concurrent modifications, and implementing +critical sections and monitors. + + A mutex has two possible states: unlocked (not owned by any thread), +and locked (owned by one thread). A mutex can never be owned by two +different threads simultaneously. A thread attempting to lock a mutex +that is already locked by another thread is suspended until the owning +thread unlocks the mutex first. + + None of the mutex functions is a cancellation point, not even +`pthread_mutex_lock', in spite of the fact that it can suspend a thread +for arbitrary durations. This way, the status of mutexes at +cancellation points is predictable, allowing cancellation handlers to +unlock precisely those mutexes that need to be unlocked before the +thread stops executing. Consequently, threads using deferred +cancellation should never hold a mutex for extended periods of time. + + It is not safe to call mutex functions from a signal handler. In +particular, calling `pthread_mutex_lock' or `pthread_mutex_unlock' from +a signal handler may deadlock the calling thread. + + - Function: int pthread_mutex_init (pthread_mutex_t *MUTEX, const + pthread_mutexattr_t *MUTEXATTR) + `pthread_mutex_init' initializes the mutex object pointed to by + MUTEX according to the mutex attributes specified in MUTEXATTR. + If MUTEXATTR is `NULL', default attributes are used instead. + + The LinuxThreads implementation supports only one mutex attribute, + the MUTEX TYPE, which is either "fast", "recursive", or "error + checking". The type of a mutex determines whether it can be locked + again by a thread that already owns it. The default type is + "fast". + + Variables of type `pthread_mutex_t' can also be initialized + statically, using the constants `PTHREAD_MUTEX_INITIALIZER' (for + timed mutexes), `PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' (for + recursive mutexes), `PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' (for + fast mutexes(, and `PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP' (for + error checking mutexes). + + `pthread_mutex_init' always returns 0. + + - Function: int pthread_mutex_lock (pthread_mutex_t *mutex)) + `pthread_mutex_lock' locks the given mutex. If the mutex is + currently unlocked, it becomes locked and owned by the calling + thread, and `pthread_mutex_lock' returns immediately. If the mutex + is already locked by another thread, `pthread_mutex_lock' suspends + the calling thread until the mutex is unlocked. + + If the mutex is already locked by the calling thread, the behavior + of `pthread_mutex_lock' depends on the type of the mutex. If the + mutex is of the "fast" type, the calling thread is suspended. It + will remain suspended forever, because no other thread can unlock + the mutex. If the mutex is of the "error checking" type, + `pthread_mutex_lock' returns immediately with the error code + `EDEADLK'. If the mutex is of the "recursive" type, + `pthread_mutex_lock' succeeds and returns immediately, recording + the number of times the calling thread has locked the mutex. An + equal number of `pthread_mutex_unlock' operations must be + performed before the mutex returns to the unlocked state. + + - Function: int pthread_mutex_trylock (pthread_mutex_t *MUTEX) + `pthread_mutex_trylock' behaves identically to + `pthread_mutex_lock', except that it does not block the calling + thread if the mutex is already locked by another thread (or by the + calling thread in the case of a "fast" mutex). Instead, + `pthread_mutex_trylock' returns immediately with the error code + `EBUSY'. + + - Function: int pthread_mutex_timedlock (pthread_mutex_t *MUTEX, const + struct timespec *ABSTIME) + The `pthread_mutex_timedlock' is similar to the + `pthread_mutex_lock' function but instead of blocking for in + indefinite time if the mutex is locked by another thread, it + returns when the time specified in ABSTIME is reached. + + This function can only be used on standard ("timed") and "error + checking" mutexes. It behaves just like `pthread_mutex_lock' for + all other types. + + If the mutex is successfully locked, the function returns zero. + If the time specified in ABSTIME is reached without the mutex + being locked, `ETIMEDOUT' is returned. + + This function was introduced in the POSIX.1d revision of the POSIX + standard. + + - Function: int pthread_mutex_unlock (pthread_mutex_t *MUTEX) + `pthread_mutex_unlock' unlocks the given mutex. The mutex is + assumed to be locked and owned by the calling thread on entrance to + `pthread_mutex_unlock'. If the mutex is of the "fast" type, + `pthread_mutex_unlock' always returns it to the unlocked state. If + it is of the "recursive" type, it decrements the locking count of + the mutex (number of `pthread_mutex_lock' operations performed on + it by the calling thread), and only when this count reaches zero + is the mutex actually unlocked. + + On "error checking" mutexes, `pthread_mutex_unlock' actually + checks at run-time that the mutex is locked on entrance, and that + it was locked by the same thread that is now calling + `pthread_mutex_unlock'. If these conditions are not met, + `pthread_mutex_unlock' returns `EPERM', and the mutex remains + unchanged. "Fast" and "recursive" mutexes perform no such checks, + thus allowing a locked mutex to be unlocked by a thread other than + its owner. This is non-portable behavior and must not be relied + upon. + + - Function: int pthread_mutex_destroy (pthread_mutex_t *MUTEX) + `pthread_mutex_destroy' destroys a mutex object, freeing the + resources it might hold. The mutex must be unlocked on entrance. + In the LinuxThreads implementation, no resources are associated + with mutex objects, thus `pthread_mutex_destroy' actually does + nothing except checking that the mutex is unlocked. + + If the mutex is locked by some thread, `pthread_mutex_destroy' + returns `EBUSY'. Otherwise it returns 0. + + If any of the above functions (except `pthread_mutex_init') is +applied to an uninitialized mutex, they will simply return `EINVAL' and +do nothing. + + A shared global variable X can be protected by a mutex as follows: + + int x; + pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; + + All accesses and modifications to X should be bracketed by calls to +`pthread_mutex_lock' and `pthread_mutex_unlock' as follows: + + pthread_mutex_lock(&mut); + /* operate on x */ + pthread_mutex_unlock(&mut); + + Mutex attributes can be specified at mutex creation time, by passing +a mutex attribute object as second argument to `pthread_mutex_init'. +Passing `NULL' is equivalent to passing a mutex attribute object with +all attributes set to their default values. + + - Function: int pthread_mutexattr_init (pthread_mutexattr_t *ATTR) + `pthread_mutexattr_init' initializes the mutex attribute object + ATTR and fills it with default values for the attributes. + + This function always returns 0. + + - Function: int pthread_mutexattr_destroy (pthread_mutexattr_t *ATTR) + `pthread_mutexattr_destroy' destroys a mutex attribute object, + which must not be reused until it is reinitialized. + `pthread_mutexattr_destroy' does nothing in the LinuxThreads + implementation. + + This function always returns 0. + + LinuxThreads supports only one mutex attribute: the mutex type, +which is either `PTHREAD_MUTEX_ADAPTIVE_NP' for "fast" mutexes, +`PTHREAD_MUTEX_RECURSIVE_NP' for "recursive" mutexes, +`PTHREAD_MUTEX_TIMED_NP' for "timed" mutexes, or +`PTHREAD_MUTEX_ERRORCHECK_NP' for "error checking" mutexes. As the +`NP' suffix indicates, this is a non-portable extension to the POSIX +standard and should not be employed in portable programs. + + The mutex type determines what happens if a thread attempts to lock a +mutex it already owns with `pthread_mutex_lock'. If the mutex is of the +"fast" type, `pthread_mutex_lock' simply suspends the calling thread +forever. If the mutex is of the "error checking" type, +`pthread_mutex_lock' returns immediately with the error code `EDEADLK'. +If the mutex is of the "recursive" type, the call to +`pthread_mutex_lock' returns immediately with a success return code. +The number of times the thread owning the mutex has locked it is +recorded in the mutex. The owning thread must call +`pthread_mutex_unlock' the same number of times before the mutex +returns to the unlocked state. + + The default mutex type is "timed", that is, `PTHREAD_MUTEX_TIMED_NP'. + + - Function: int pthread_mutexattr_settype (pthread_mutexattr_t *ATTR, + int TYPE) + `pthread_mutexattr_settype' sets the mutex type attribute in ATTR + to the value specified by TYPE. + + If TYPE is not `PTHREAD_MUTEX_ADAPTIVE_NP', + `PTHREAD_MUTEX_RECURSIVE_NP', `PTHREAD_MUTEX_TIMED_NP', or + `PTHREAD_MUTEX_ERRORCHECK_NP', this function will return `EINVAL' + and leave ATTR unchanged. + + The standard Unix98 identifiers `PTHREAD_MUTEX_DEFAULT', + `PTHREAD_MUTEX_NORMAL', `PTHREAD_MUTEX_RECURSIVE', and + `PTHREAD_MUTEX_ERRORCHECK' are also permitted. + + + - Function: int pthread_mutexattr_gettype (const pthread_mutexattr_t + *ATTR, int *TYPE) + `pthread_mutexattr_gettype' retrieves the current value of the + mutex type attribute in ATTR and stores it in the location pointed + to by TYPE. + + This function always returns 0. + + File: libc.info, Node: Condition Variables, Next: POSIX Semaphores, Prev: Mutexes, Up: POSIX Threads Condition Variables @@ -632,489 +1035,4 @@ might not provide any way for streams to multithreaded process. POSIX requires that such a child process confines itself to calling only asynchronous safe functions, which excludes much of the library, including standard I/O. - - -File: libc.info, Node: Miscellaneous Thread Functions, Prev: Streams and Fork, Up: POSIX Threads - -Miscellaneous Thread Functions -============================== - - - Function: pthread_t pthread_self (VOID) - `pthread_self' returns the thread identifier for the calling - thread. - - - Function: int pthread_equal (pthread_t thread1, pthread_t thread2) - `pthread_equal' determines if two thread identifiers refer to the - same thread. - - A non-zero value is returned if THREAD1 and THREAD2 refer to the - same thread. Otherwise, 0 is returned. - - - Function: int pthread_detach (pthread_t TH) - `pthread_detach' puts the thread TH in the detached state. This - guarantees that the memory resources consumed by TH will be freed - immediately when TH terminates. However, this prevents other - threads from synchronizing on the termination of TH using - `pthread_join'. - - A thread can be created initially in the detached state, using the - `detachstate' attribute to `pthread_create'. In contrast, - `pthread_detach' applies to threads created in the joinable state, - and which need to be put in the detached state later. - - After `pthread_detach' completes, subsequent attempts to perform - `pthread_join' on TH will fail. If another thread is already - joining the thread TH at the time `pthread_detach' is called, - `pthread_detach' does nothing and leaves TH in the joinable state. - - On success, 0 is returned. On error, one of the following codes is - returned: - `ESRCH' - No thread could be found corresponding to that specified by TH - - `EINVAL' - The thread TH is already in the detached state - - - Function: void pthread_kill_other_threads_np (VOID) - `pthread_kill_other_threads_np' is a non-portable LinuxThreads - extension. It causes all threads in the program to terminate - immediately, except the calling thread which proceeds normally. It - is intended to be called just before a thread calls one of the - `exec' functions, e.g. `execve'. - - Termination of the other threads is not performed through - `pthread_cancel' and completely bypasses the cancellation - mechanism. Hence, the current settings for cancellation state and - cancellation type are ignored, and the cleanup handlers are not - executed in the terminated threads. - - According to POSIX 1003.1c, a successful `exec*' in one of the - threads should automatically terminate all other threads in the - program. This behavior is not yet implemented in LinuxThreads. - Calling `pthread_kill_other_threads_np' before `exec*' achieves - much of the same behavior, except that if `exec*' ultimately - fails, then all other threads are already killed. - - - Function: int pthread_once (pthread_once_t *once_CONTROL, void - (*INIT_ROUTINE) (void)) - The purpose of `pthread_once' is to ensure that a piece of - initialization code is executed at most once. The ONCE_CONTROL - argument points to a static or extern variable statically - initialized to `PTHREAD_ONCE_INIT'. - - The first time `pthread_once' is called with a given ONCE_CONTROL - argument, it calls INIT_ROUTINE with no argument and changes the - value of the ONCE_CONTROL variable to record that initialization - has been performed. Subsequent calls to `pthread_once' with the - same `once_control' argument do nothing. - - If a thread is cancelled while executing INIT_ROUTINE the state of - the ONCE_CONTROL variable is reset so that a future call to - `pthread_once' will call the routine again. - - If the process forks while one or more threads are executing - `pthread_once' initialization routines, the states of their - respective ONCE_CONTROL variables will appear to be reset in the - child process so that if the child calls `pthread_once', the - routines will be executed. - - `pthread_once' always returns 0. - - - Function: int pthread_setschedparam (pthread_t target_THREAD, int - POLICY, const struct sched_param *PARAM) - `pthread_setschedparam' sets the scheduling parameters for the - thread TARGET_THREAD as indicated by POLICY and PARAM. POLICY can - be either `SCHED_OTHER' (regular, non-realtime scheduling), - `SCHED_RR' (realtime, round-robin) or `SCHED_FIFO' (realtime, - first-in first-out). PARAM specifies the scheduling priority for - the two realtime policies. See `sched_setpolicy' for more - information on scheduling policies. - - The realtime scheduling policies `SCHED_RR' and `SCHED_FIFO' are - available only to processes with superuser privileges. - - On success, `pthread_setschedparam' returns 0. On error it returns - one of the following codes: - `EINVAL' - POLICY is not one of `SCHED_OTHER', `SCHED_RR', `SCHED_FIFO', - or the priority value specified by PARAM is not valid for the - specified policy - - `EPERM' - Realtime scheduling was requested but the calling process - does not have sufficient privileges. - - `ESRCH' - The TARGET_THREAD is invalid or has already terminated - - `EFAULT' - PARAM points outside the process memory space - - - Function: int pthread_getschedparam (pthread_t target_THREAD, int - *POLICY, struct sched_param *PARAM) - `pthread_getschedparam' retrieves the scheduling policy and - scheduling parameters for the thread TARGET_THREAD and stores them - in the locations pointed to by POLICY and PARAM, respectively. - - `pthread_getschedparam' returns 0 on success, or one of the - following error codes on failure: - `ESRCH' - The TARGET_THREAD is invalid or has already terminated. - - `EFAULT' - POLICY or PARAM point outside the process memory space. - - - - Function: int pthread_setconcurrency (int LEVEL) - `pthread_setconcurrency' is unused in LinuxThreads due to the lack - of a mapping of user threads to kernel threads. It exists for - source compatibility. It does store the value LEVEL so that it - can be returned by a subsequent call to `pthread_getconcurrency'. - It takes no other action however. - - - Function: int pthread_getconcurrency () - `pthread_getconcurrency' is unused in LinuxThreads due to the lack - of a mapping of user threads to kernel threads. It exists for - source compatibility. However, it will return the value that was - set by the last call to `pthread_setconcurrency'. - - -File: libc.info, Node: Language Features, Next: Library Summary, Prev: POSIX Threads, Up: Top - -C Language Facilities in the Library -************************************ - - Some of the facilities implemented by the C library really should be -thought of as parts of the C language itself. These facilities ought to -be documented in the C Language Manual, not in the library manual; but -since we don't have the language manual yet, and documentation for these -features has been written, we are publishing it here. - -* Menu: - -* Consistency Checking:: Using `assert' to abort if - something ``impossible'' happens. -* Variadic Functions:: Defining functions with varying numbers - of args. -* Null Pointer Constant:: The macro `NULL'. -* Important Data Types:: Data types for object sizes. -* Data Type Measurements:: Parameters of data type representations. - - -File: libc.info, Node: Consistency Checking, Next: Variadic Functions, Up: Language Features - -Explicitly Checking Internal Consistency -======================================== - - When you're writing a program, it's often a good idea to put in -checks at strategic places for "impossible" errors or violations of -basic assumptions. These kinds of checks are helpful in debugging -problems with the interfaces between different parts of the program, -for example. - - The `assert' macro, defined in the header file `assert.h', provides -a convenient way to abort the program while printing a message about -where in the program the error was detected. - - Once you think your program is debugged, you can disable the error -checks performed by the `assert' macro by recompiling with the macro -`NDEBUG' defined. This means you don't actually have to change the -program source code to disable these checks. - - But disabling these consistency checks is undesirable unless they -make the program significantly slower. All else being equal, more error -checking is good no matter who is running the program. A wise user -would rather have a program crash, visibly, than have it return nonsense -without indicating anything might be wrong. - - - Macro: void assert (int EXPRESSION) - Verify the programmer's belief that EXPRESSION is nonzero at this - point in the program. - - If `NDEBUG' is not defined, `assert' tests the value of - EXPRESSION. If it is false (zero), `assert' aborts the program - (*note Aborting a Program::) after printing a message of the form: - - `FILE':LINENUM: FUNCTION: Assertion `EXPRESSION' failed. - - on the standard error stream `stderr' (*note Standard Streams::). - The filename and line number are taken from the C preprocessor - macros `__FILE__' and `__LINE__' and specify where the call to - `assert' was made. When using the GNU C compiler, the name of the - function which calls `assert' is taken from the built-in variable - `__PRETTY_FUNCTION__'; with older compilers, the function name and - following colon are omitted. - - If the preprocessor macro `NDEBUG' is defined before `assert.h' is - included, the `assert' macro is defined to do absolutely nothing. - - *Warning:* Even the argument expression EXPRESSION is not - evaluated if `NDEBUG' is in effect. So never use `assert' with - arguments that involve side effects. For example, `assert (++i > - 0);' is a bad idea, because `i' will not be incremented if - `NDEBUG' is defined. - - Sometimes the "impossible" condition you want to check for is an -error return from an operating system function. Then it is useful to -display not only where the program crashes, but also what error was -returned. The `assert_perror' macro makes this easy. - - - Macro: void assert_perror (int ERRNUM) - Similar to `assert', but verifies that ERRNUM is zero. - - If `NDEBUG' is defined, `assert_perror' tests the value of ERRNUM. - If it is nonzero, `assert_perror' aborts the program after - printing a message of the form: - - `FILE':LINENUM: FUNCTION: ERROR TEXT - - on the standard error stream. The file name, line number, and - function name are as for `assert'. The error text is the result of - `strerror (ERRNUM)'. *Note Error Messages::. - - Like `assert', if `NDEBUG' is defined before `assert.h' is - included, the `assert_perror' macro does absolutely nothing. It - does not evaluate the argument, so ERRNUM should not have any side - effects. It is best for ERRNUM to be just a simple variable - reference; often it will be `errno'. - - This macro is a GNU extension. - - *Usage note:* The `assert' facility is designed for detecting -_internal inconsistency_; it is not suitable for reporting invalid -input or improper usage by the _user_ of the program. - - The information in the diagnostic messages printed by the `assert' -and `assert_perror' macro is intended to help you, the programmer, -track down the cause of a bug, but is not really useful for telling a -user of your program why his or her input was invalid or why a command -could not be carried out. What's more, your program should not abort -when given invalid input, as `assert' would do--it should exit with -nonzero status (*note Exit Status::) after printing its error messages, -or perhaps read another command or move on to the next input file. - - *Note Error Messages::, for information on printing error messages -for problems that _do not_ represent bugs in the program. - - -File: libc.info, Node: Variadic Functions, Next: Null Pointer Constant, Prev: Consistency Checking, Up: Language Features - -Variadic Functions -================== - - ISO C defines a syntax for declaring a function to take a variable -number or type of arguments. (Such functions are referred to as -"varargs functions" or "variadic functions".) However, the language -itself provides no mechanism for such functions to access their -non-required arguments; instead, you use the variable arguments macros -defined in `stdarg.h'. - - This section describes how to declare variadic functions, how to -write them, and how to call them properly. - - *Compatibility Note:* Many older C dialects provide a similar, but -incompatible, mechanism for defining functions with variable numbers of -arguments, using `varargs.h'. - -* Menu: - -* Why Variadic:: Reasons for making functions take - variable arguments. -* How Variadic:: How to define and call variadic functions. -* Variadic Example:: A complete example. - - -File: libc.info, Node: Why Variadic, Next: How Variadic, Up: Variadic Functions - -Why Variadic Functions are Used -------------------------------- - - Ordinary C functions take a fixed number of arguments. When you -define a function, you specify the data type for each argument. Every -call to the function should supply the expected number of arguments, -with types that can be converted to the specified ones. Thus, if the -function `foo' is declared with `int foo (int, char *);' then you must -call it with two arguments, a number (any kind will do) and a string -pointer. - - But some functions perform operations that can meaningfully accept an -unlimited number of arguments. - - In some cases a function can handle any number of values by -operating on all of them as a block. For example, consider a function -that allocates a one-dimensional array with `malloc' to hold a -specified set of values. This operation makes sense for any number of -values, as long as the length of the array corresponds to that number. -Without facilities for variable arguments, you would have to define a -separate function for each possible array size. - - The library function `printf' (*note Formatted Output::) is an -example of another class of function where variable arguments are -useful. This function prints its arguments (which can vary in type as -well as number) under the control of a format template string. - - These are good reasons to define a "variadic" function which can -handle as many arguments as the caller chooses to pass. - - Some functions such as `open' take a fixed set of arguments, but -occasionally ignore the last few. Strict adherence to ISO C requires -these functions to be defined as variadic; in practice, however, the GNU -C compiler and most other C compilers let you define such a function to -take a fixed set of arguments--the most it can ever use--and then only -_declare_ the function as variadic (or not declare its arguments at -all!). - - -File: libc.info, Node: How Variadic, Next: Variadic Example, Prev: Why Variadic, Up: Variadic Functions - -How Variadic Functions are Defined and Used -------------------------------------------- - - Defining and using a variadic function involves three steps: - - * _Define_ the function as variadic, using an ellipsis (`...') in - the argument list, and using special macros to access the variable - arguments. *Note Receiving Arguments::. - - * _Declare_ the function as variadic, using a prototype with an - ellipsis (`...'), in all the files which call it. *Note Variadic - Prototypes::. - - * _Call_ the function by writing the fixed arguments followed by the - additional variable arguments. *Note Calling Variadics::. - -* Menu: - -* Variadic Prototypes:: How to make a prototype for a function - with variable arguments. -* Receiving Arguments:: Steps you must follow to access the - optional argument values. -* How Many Arguments:: How to decide whether there are more arguments. -* Calling Variadics:: Things you need to know about calling - variable arguments functions. -* Argument Macros:: Detailed specification of the macros - for accessing variable arguments. -* Old Varargs:: The pre-ISO way of defining variadic functions. - - -File: libc.info, Node: Variadic Prototypes, Next: Receiving Arguments, Up: How Variadic - -Syntax for Variable Arguments -............................. - - A function that accepts a variable number of arguments must be -declared with a prototype that says so. You write the fixed arguments -as usual, and then tack on `...' to indicate the possibility of -additional arguments. The syntax of ISO C requires at least one fixed -argument before the `...'. For example, - - int - func (const char *a, int b, ...) - { - ... - } - -defines a function `func' which returns an `int' and takes two required -arguments, a `const char *' and an `int'. These are followed by any -number of anonymous arguments. - - *Portability note:* For some C compilers, the last required argument -must not be declared `register' in the function definition. -Furthermore, this argument's type must be "self-promoting": that is, -the default promotions must not change its type. This rules out array -and function types, as well as `float', `char' (whether signed or not) -and `short int' (whether signed or not). This is actually an ISO C -requirement. - - -File: libc.info, Node: Receiving Arguments, Next: How Many Arguments, Prev: Variadic Prototypes, Up: How Variadic - -Receiving the Argument Values -............................. - - Ordinary fixed arguments have individual names, and you can use these -names to access their values. But optional arguments have no -names--nothing but `...'. How can you access them? - - The only way to access them is sequentially, in the order they were -written, and you must use special macros from `stdarg.h' in the -following three step process: - - 1. You initialize an argument pointer variable of type `va_list' using - `va_start'. The argument pointer when initialized points to the - first optional argument. - - 2. You access the optional arguments by successive calls to `va_arg'. - The first call to `va_arg' gives you the first optional argument, - the next call gives you the second, and so on. - - You can stop at any time if you wish to ignore any remaining - optional arguments. It is perfectly all right for a function to - access fewer arguments than were supplied in the call, but you - will get garbage values if you try to access too many arguments. - - 3. You indicate that you are finished with the argument pointer - variable by calling `va_end'. - - (In practice, with most C compilers, calling `va_end' does nothing. - This is always true in the GNU C compiler. But you might as well - call `va_end' just in case your program is someday compiled with a - peculiar compiler.) - - *Note Argument Macros::, for the full definitions of `va_start', -`va_arg' and `va_end'. - - Steps 1 and 3 must be performed in the function that accepts the -optional arguments. However, you can pass the `va_list' variable as an -argument to another function and perform all or part of step 2 there. - - You can perform the entire sequence of three steps multiple times -within a single function invocation. If you want to ignore the optional -arguments, you can do these steps zero times. - - You can have more than one argument pointer variable if you like. -You can initialize each variable with `va_start' when you wish, and -then you can fetch arguments with each argument pointer as you wish. -Each argument pointer variable will sequence through the same set of -argument values, but at its own pace. - - *Portability note:* With some compilers, once you pass an argument -pointer value to a subroutine, you must not keep using the same -argument pointer value after that subroutine returns. For full -portability, you should just pass it to `va_end'. This is actually an -ISO C requirement, but most ANSI C compilers work happily regardless. - - -File: libc.info, Node: How Many Arguments, Next: Calling Variadics, Prev: Receiving Arguments, Up: How Variadic - -How Many Arguments Were Supplied -................................ - - There is no general way for a function to determine the number and -type of the optional arguments it was called with. So whoever designs -the function typically designs a convention for the caller to specify -the number and type of arguments. It is up to you to define an -appropriate calling convention for each variadic function, and write -all calls accordingly. - - One kind of calling convention is to pass the number of optional -arguments as one of the fixed arguments. This convention works provided -all of the optional arguments are of the same type. - - A similar alternative is to have one of the required arguments be a -bit mask, with a bit for each possible purpose for which an optional -argument might be supplied. You would test the bits in a predefined -sequence; if the bit is set, fetch the value of the next argument, -otherwise use a default value. - - A required argument can be used as a pattern to specify both the -number and types of the optional arguments. The format string argument -to `printf' is one example of this (*note Formatted Output Functions::). - - Another possibility is to pass an "end marker" value as the last -optional argument. For example, for a function that manipulates an -arbitrary number of pointer arguments, a null pointer might indicate the -end of the argument list. (This assumes that a null pointer isn't -otherwise meaningful to the function.) The `execl' function works in -just this way; see *Note Executing a File::. diff -durpNa glibc-2.2.2/manual/libc.info-49 glibc-2.2.3/manual/libc.info-49 --- glibc-2.2.2/manual/libc.info-49 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-49 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,491 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Miscellaneous Thread Functions, Prev: Streams and Fork, Up: POSIX Threads + +Miscellaneous Thread Functions +============================== + + - Function: pthread_t pthread_self (VOID) + `pthread_self' returns the thread identifier for the calling + thread. + + - Function: int pthread_equal (pthread_t thread1, pthread_t thread2) + `pthread_equal' determines if two thread identifiers refer to the + same thread. + + A non-zero value is returned if THREAD1 and THREAD2 refer to the + same thread. Otherwise, 0 is returned. + + - Function: int pthread_detach (pthread_t TH) + `pthread_detach' puts the thread TH in the detached state. This + guarantees that the memory resources consumed by TH will be freed + immediately when TH terminates. However, this prevents other + threads from synchronizing on the termination of TH using + `pthread_join'. + + A thread can be created initially in the detached state, using the + `detachstate' attribute to `pthread_create'. In contrast, + `pthread_detach' applies to threads created in the joinable state, + and which need to be put in the detached state later. + + After `pthread_detach' completes, subsequent attempts to perform + `pthread_join' on TH will fail. If another thread is already + joining the thread TH at the time `pthread_detach' is called, + `pthread_detach' does nothing and leaves TH in the joinable state. + + On success, 0 is returned. On error, one of the following codes is + returned: + `ESRCH' + No thread could be found corresponding to that specified by TH + + `EINVAL' + The thread TH is already in the detached state + + - Function: void pthread_kill_other_threads_np (VOID) + `pthread_kill_other_threads_np' is a non-portable LinuxThreads + extension. It causes all threads in the program to terminate + immediately, except the calling thread which proceeds normally. It + is intended to be called just before a thread calls one of the + `exec' functions, e.g. `execve'. + + Termination of the other threads is not performed through + `pthread_cancel' and completely bypasses the cancellation + mechanism. Hence, the current settings for cancellation state and + cancellation type are ignored, and the cleanup handlers are not + executed in the terminated threads. + + According to POSIX 1003.1c, a successful `exec*' in one of the + threads should automatically terminate all other threads in the + program. This behavior is not yet implemented in LinuxThreads. + Calling `pthread_kill_other_threads_np' before `exec*' achieves + much of the same behavior, except that if `exec*' ultimately + fails, then all other threads are already killed. + + - Function: int pthread_once (pthread_once_t *once_CONTROL, void + (*INIT_ROUTINE) (void)) + The purpose of `pthread_once' is to ensure that a piece of + initialization code is executed at most once. The ONCE_CONTROL + argument points to a static or extern variable statically + initialized to `PTHREAD_ONCE_INIT'. + + The first time `pthread_once' is called with a given ONCE_CONTROL + argument, it calls INIT_ROUTINE with no argument and changes the + value of the ONCE_CONTROL variable to record that initialization + has been performed. Subsequent calls to `pthread_once' with the + same `once_control' argument do nothing. + + If a thread is cancelled while executing INIT_ROUTINE the state of + the ONCE_CONTROL variable is reset so that a future call to + `pthread_once' will call the routine again. + + If the process forks while one or more threads are executing + `pthread_once' initialization routines, the states of their + respective ONCE_CONTROL variables will appear to be reset in the + child process so that if the child calls `pthread_once', the + routines will be executed. + + `pthread_once' always returns 0. + + - Function: int pthread_setschedparam (pthread_t target_THREAD, int + POLICY, const struct sched_param *PARAM) + `pthread_setschedparam' sets the scheduling parameters for the + thread TARGET_THREAD as indicated by POLICY and PARAM. POLICY can + be either `SCHED_OTHER' (regular, non-realtime scheduling), + `SCHED_RR' (realtime, round-robin) or `SCHED_FIFO' (realtime, + first-in first-out). PARAM specifies the scheduling priority for + the two realtime policies. See `sched_setpolicy' for more + information on scheduling policies. + + The realtime scheduling policies `SCHED_RR' and `SCHED_FIFO' are + available only to processes with superuser privileges. + + On success, `pthread_setschedparam' returns 0. On error it returns + one of the following codes: + `EINVAL' + POLICY is not one of `SCHED_OTHER', `SCHED_RR', `SCHED_FIFO', + or the priority value specified by PARAM is not valid for the + specified policy + + `EPERM' + Realtime scheduling was requested but the calling process + does not have sufficient privileges. + + `ESRCH' + The TARGET_THREAD is invalid or has already terminated + + `EFAULT' + PARAM points outside the process memory space + + - Function: int pthread_getschedparam (pthread_t target_THREAD, int + *POLICY, struct sched_param *PARAM) + `pthread_getschedparam' retrieves the scheduling policy and + scheduling parameters for the thread TARGET_THREAD and stores them + in the locations pointed to by POLICY and PARAM, respectively. + + `pthread_getschedparam' returns 0 on success, or one of the + following error codes on failure: + `ESRCH' + The TARGET_THREAD is invalid or has already terminated. + + `EFAULT' + POLICY or PARAM point outside the process memory space. + + + - Function: int pthread_setconcurrency (int LEVEL) + `pthread_setconcurrency' is unused in LinuxThreads due to the lack + of a mapping of user threads to kernel threads. It exists for + source compatibility. It does store the value LEVEL so that it + can be returned by a subsequent call to `pthread_getconcurrency'. + It takes no other action however. + + - Function: int pthread_getconcurrency () + `pthread_getconcurrency' is unused in LinuxThreads due to the lack + of a mapping of user threads to kernel threads. It exists for + source compatibility. However, it will return the value that was + set by the last call to `pthread_setconcurrency'. + + +File: libc.info, Node: Language Features, Next: Library Summary, Prev: POSIX Threads, Up: Top + +C Language Facilities in the Library +************************************ + + Some of the facilities implemented by the C library really should be +thought of as parts of the C language itself. These facilities ought to +be documented in the C Language Manual, not in the library manual; but +since we don't have the language manual yet, and documentation for these +features has been written, we are publishing it here. + +* Menu: + +* Consistency Checking:: Using `assert' to abort if + something ``impossible'' happens. +* Variadic Functions:: Defining functions with varying numbers + of args. +* Null Pointer Constant:: The macro `NULL'. +* Important Data Types:: Data types for object sizes. +* Data Type Measurements:: Parameters of data type representations. + + +File: libc.info, Node: Consistency Checking, Next: Variadic Functions, Up: Language Features + +Explicitly Checking Internal Consistency +======================================== + + When you're writing a program, it's often a good idea to put in +checks at strategic places for "impossible" errors or violations of +basic assumptions. These kinds of checks are helpful in debugging +problems with the interfaces between different parts of the program, +for example. + + The `assert' macro, defined in the header file `assert.h', provides +a convenient way to abort the program while printing a message about +where in the program the error was detected. + + Once you think your program is debugged, you can disable the error +checks performed by the `assert' macro by recompiling with the macro +`NDEBUG' defined. This means you don't actually have to change the +program source code to disable these checks. + + But disabling these consistency checks is undesirable unless they +make the program significantly slower. All else being equal, more error +checking is good no matter who is running the program. A wise user +would rather have a program crash, visibly, than have it return nonsense +without indicating anything might be wrong. + + - Macro: void assert (int EXPRESSION) + Verify the programmer's belief that EXPRESSION is nonzero at this + point in the program. + + If `NDEBUG' is not defined, `assert' tests the value of + EXPRESSION. If it is false (zero), `assert' aborts the program + (*note Aborting a Program::) after printing a message of the form: + + `FILE':LINENUM: FUNCTION: Assertion `EXPRESSION' failed. + + on the standard error stream `stderr' (*note Standard Streams::). + The filename and line number are taken from the C preprocessor + macros `__FILE__' and `__LINE__' and specify where the call to + `assert' was made. When using the GNU C compiler, the name of the + function which calls `assert' is taken from the built-in variable + `__PRETTY_FUNCTION__'; with older compilers, the function name and + following colon are omitted. + + If the preprocessor macro `NDEBUG' is defined before `assert.h' is + included, the `assert' macro is defined to do absolutely nothing. + + *Warning:* Even the argument expression EXPRESSION is not + evaluated if `NDEBUG' is in effect. So never use `assert' with + arguments that involve side effects. For example, `assert (++i > + 0);' is a bad idea, because `i' will not be incremented if + `NDEBUG' is defined. + + Sometimes the "impossible" condition you want to check for is an +error return from an operating system function. Then it is useful to +display not only where the program crashes, but also what error was +returned. The `assert_perror' macro makes this easy. + + - Macro: void assert_perror (int ERRNUM) + Similar to `assert', but verifies that ERRNUM is zero. + + If `NDEBUG' is defined, `assert_perror' tests the value of ERRNUM. + If it is nonzero, `assert_perror' aborts the program after + printing a message of the form: + + `FILE':LINENUM: FUNCTION: ERROR TEXT + + on the standard error stream. The file name, line number, and + function name are as for `assert'. The error text is the result of + `strerror (ERRNUM)'. *Note Error Messages::. + + Like `assert', if `NDEBUG' is defined before `assert.h' is + included, the `assert_perror' macro does absolutely nothing. It + does not evaluate the argument, so ERRNUM should not have any side + effects. It is best for ERRNUM to be just a simple variable + reference; often it will be `errno'. + + This macro is a GNU extension. + + *Usage note:* The `assert' facility is designed for detecting +_internal inconsistency_; it is not suitable for reporting invalid +input or improper usage by the _user_ of the program. + + The information in the diagnostic messages printed by the `assert' +and `assert_perror' macro is intended to help you, the programmer, +track down the cause of a bug, but is not really useful for telling a +user of your program why his or her input was invalid or why a command +could not be carried out. What's more, your program should not abort +when given invalid input, as `assert' would do--it should exit with +nonzero status (*note Exit Status::) after printing its error messages, +or perhaps read another command or move on to the next input file. + + *Note Error Messages::, for information on printing error messages +for problems that _do not_ represent bugs in the program. + + +File: libc.info, Node: Variadic Functions, Next: Null Pointer Constant, Prev: Consistency Checking, Up: Language Features + +Variadic Functions +================== + + ISO C defines a syntax for declaring a function to take a variable +number or type of arguments. (Such functions are referred to as +"varargs functions" or "variadic functions".) However, the language +itself provides no mechanism for such functions to access their +non-required arguments; instead, you use the variable arguments macros +defined in `stdarg.h'. + + This section describes how to declare variadic functions, how to +write them, and how to call them properly. + + *Compatibility Note:* Many older C dialects provide a similar, but +incompatible, mechanism for defining functions with variable numbers of +arguments, using `varargs.h'. + +* Menu: + +* Why Variadic:: Reasons for making functions take + variable arguments. +* How Variadic:: How to define and call variadic functions. +* Variadic Example:: A complete example. + + +File: libc.info, Node: Why Variadic, Next: How Variadic, Up: Variadic Functions + +Why Variadic Functions are Used +------------------------------- + + Ordinary C functions take a fixed number of arguments. When you +define a function, you specify the data type for each argument. Every +call to the function should supply the expected number of arguments, +with types that can be converted to the specified ones. Thus, if the +function `foo' is declared with `int foo (int, char *);' then you must +call it with two arguments, a number (any kind will do) and a string +pointer. + + But some functions perform operations that can meaningfully accept an +unlimited number of arguments. + + In some cases a function can handle any number of values by +operating on all of them as a block. For example, consider a function +that allocates a one-dimensional array with `malloc' to hold a +specified set of values. This operation makes sense for any number of +values, as long as the length of the array corresponds to that number. +Without facilities for variable arguments, you would have to define a +separate function for each possible array size. + + The library function `printf' (*note Formatted Output::) is an +example of another class of function where variable arguments are +useful. This function prints its arguments (which can vary in type as +well as number) under the control of a format template string. + + These are good reasons to define a "variadic" function which can +handle as many arguments as the caller chooses to pass. + + Some functions such as `open' take a fixed set of arguments, but +occasionally ignore the last few. Strict adherence to ISO C requires +these functions to be defined as variadic; in practice, however, the GNU +C compiler and most other C compilers let you define such a function to +take a fixed set of arguments--the most it can ever use--and then only +_declare_ the function as variadic (or not declare its arguments at +all!). + + +File: libc.info, Node: How Variadic, Next: Variadic Example, Prev: Why Variadic, Up: Variadic Functions + +How Variadic Functions are Defined and Used +------------------------------------------- + + Defining and using a variadic function involves three steps: + + * _Define_ the function as variadic, using an ellipsis (`...') in + the argument list, and using special macros to access the variable + arguments. *Note Receiving Arguments::. + + * _Declare_ the function as variadic, using a prototype with an + ellipsis (`...'), in all the files which call it. *Note Variadic + Prototypes::. + + * _Call_ the function by writing the fixed arguments followed by the + additional variable arguments. *Note Calling Variadics::. + +* Menu: + +* Variadic Prototypes:: How to make a prototype for a function + with variable arguments. +* Receiving Arguments:: Steps you must follow to access the + optional argument values. +* How Many Arguments:: How to decide whether there are more arguments. +* Calling Variadics:: Things you need to know about calling + variable arguments functions. +* Argument Macros:: Detailed specification of the macros + for accessing variable arguments. +* Old Varargs:: The pre-ISO way of defining variadic functions. + + +File: libc.info, Node: Variadic Prototypes, Next: Receiving Arguments, Up: How Variadic + +Syntax for Variable Arguments +............................. + + A function that accepts a variable number of arguments must be +declared with a prototype that says so. You write the fixed arguments +as usual, and then tack on `...' to indicate the possibility of +additional arguments. The syntax of ISO C requires at least one fixed +argument before the `...'. For example, + + int + func (const char *a, int b, ...) + { + ... + } + +defines a function `func' which returns an `int' and takes two required +arguments, a `const char *' and an `int'. These are followed by any +number of anonymous arguments. + + *Portability note:* For some C compilers, the last required argument +must not be declared `register' in the function definition. +Furthermore, this argument's type must be "self-promoting": that is, +the default promotions must not change its type. This rules out array +and function types, as well as `float', `char' (whether signed or not) +and `short int' (whether signed or not). This is actually an ISO C +requirement. + + +File: libc.info, Node: Receiving Arguments, Next: How Many Arguments, Prev: Variadic Prototypes, Up: How Variadic + +Receiving the Argument Values +............................. + + Ordinary fixed arguments have individual names, and you can use these +names to access their values. But optional arguments have no +names--nothing but `...'. How can you access them? + + The only way to access them is sequentially, in the order they were +written, and you must use special macros from `stdarg.h' in the +following three step process: + + 1. You initialize an argument pointer variable of type `va_list' using + `va_start'. The argument pointer when initialized points to the + first optional argument. + + 2. You access the optional arguments by successive calls to `va_arg'. + The first call to `va_arg' gives you the first optional argument, + the next call gives you the second, and so on. + + You can stop at any time if you wish to ignore any remaining + optional arguments. It is perfectly all right for a function to + access fewer arguments than were supplied in the call, but you + will get garbage values if you try to access too many arguments. + + 3. You indicate that you are finished with the argument pointer + variable by calling `va_end'. + + (In practice, with most C compilers, calling `va_end' does nothing. + This is always true in the GNU C compiler. But you might as well + call `va_end' just in case your program is someday compiled with a + peculiar compiler.) + + *Note Argument Macros::, for the full definitions of `va_start', +`va_arg' and `va_end'. + + Steps 1 and 3 must be performed in the function that accepts the +optional arguments. However, you can pass the `va_list' variable as an +argument to another function and perform all or part of step 2 there. + + You can perform the entire sequence of three steps multiple times +within a single function invocation. If you want to ignore the optional +arguments, you can do these steps zero times. + + You can have more than one argument pointer variable if you like. +You can initialize each variable with `va_start' when you wish, and +then you can fetch arguments with each argument pointer as you wish. +Each argument pointer variable will sequence through the same set of +argument values, but at its own pace. + + *Portability note:* With some compilers, once you pass an argument +pointer value to a subroutine, you must not keep using the same +argument pointer value after that subroutine returns. For full +portability, you should just pass it to `va_end'. This is actually an +ISO C requirement, but most ANSI C compilers work happily regardless. + + +File: libc.info, Node: How Many Arguments, Next: Calling Variadics, Prev: Receiving Arguments, Up: How Variadic + +How Many Arguments Were Supplied +................................ + + There is no general way for a function to determine the number and +type of the optional arguments it was called with. So whoever designs +the function typically designs a convention for the caller to specify +the number and type of arguments. It is up to you to define an +appropriate calling convention for each variadic function, and write +all calls accordingly. + + One kind of calling convention is to pass the number of optional +arguments as one of the fixed arguments. This convention works provided +all of the optional arguments are of the same type. + + A similar alternative is to have one of the required arguments be a +bit mask, with a bit for each possible purpose for which an optional +argument might be supplied. You would test the bits in a predefined +sequence; if the bit is set, fetch the value of the next argument, +otherwise use a default value. + + A required argument can be used as a pattern to specify both the +number and types of the optional arguments. The format string argument +to `printf' is one example of this (*note Formatted Output Functions::). + + Another possibility is to pass an "end marker" value as the last +optional argument. For example, for a function that manipulates an +arbitrary number of pointer arguments, a null pointer might indicate the +end of the argument list. (This assumes that a null pointer isn't +otherwise meaningful to the function.) The `execl' function works in +just this way; see *Note Executing a File::. + + File: libc.info, Node: Calling Variadics, Next: Argument Macros, Prev: How Many Arguments, Up: How Variadic Calling Variadic Functions @@ -555,249 +1040,4 @@ considered normalized. Another exceptio where the exponent is as small as the representation can hold. Then it is impossible to subtract `1' from the exponent, so a number may be normalized even if its fraction is less than `1/B'.) - - -File: libc.info, Node: Floating Point Parameters, Next: IEEE Floating Point, Prev: Floating Point Concepts, Up: Floating Type Macros - -Floating Point Parameters -......................... - - These macro definitions can be accessed by including the header file -`float.h' in your program. - - Macro names starting with `FLT_' refer to the `float' type, while -names beginning with `DBL_' refer to the `double' type and names -beginning with `LDBL_' refer to the `long double' type. (If GCC does -not support `long double' as a distinct data type on a target machine -then the values for the `LDBL_' constants are equal to the -corresponding constants for the `double' type.) - - Of these macros, only `FLT_RADIX' is guaranteed to be a constant -expression. The other macros listed here cannot be reliably used in -places that require constant expressions, such as `#if' preprocessing -directives or in the dimensions of static arrays. - - Although the ISO C standard specifies minimum and maximum values for -most of these parameters, the GNU C implementation uses whatever values -describe the floating point representation of the target machine. So in -principle GNU C actually satisfies the ISO C requirements only if the -target machine is suitable. In practice, all the machines currently -supported are suitable. - -`FLT_ROUNDS' - This value characterizes the rounding mode for floating point - addition. The following values indicate standard rounding modes: - - `-1' - The mode is indeterminable. - - `0' - Rounding is towards zero. - - `1' - Rounding is to the nearest number. - - `2' - Rounding is towards positive infinity. - - `3' - Rounding is towards negative infinity. - - Any other value represents a machine-dependent nonstandard rounding - mode. - - On most machines, the value is `1', in accordance with the IEEE - standard for floating point. - - Here is a table showing how certain values round for each possible - value of `FLT_ROUNDS', if the other aspects of the representation - match the IEEE single-precision standard. - - 0 1 2 3 - 1.00000003 1.0 1.0 1.00000012 1.0 - 1.00000007 1.0 1.00000012 1.00000012 1.0 - -1.00000003 -1.0 -1.0 -1.0 -1.00000012 - -1.00000007 -1.0 -1.00000012 -1.0 -1.00000012 - -`FLT_RADIX' - This is the value of the base, or radix, of the exponent - representation. This is guaranteed to be a constant expression, - unlike the other macros described in this section. The value is 2 - on all machines we know of except the IBM 360 and derivatives. - -`FLT_MANT_DIG' - This is the number of base-`FLT_RADIX' digits in the floating point - mantissa for the `float' data type. The following expression - yields `1.0' (even though mathematically it should not) due to the - limited number of mantissa digits: - - float radix = FLT_RADIX; - - 1.0f + 1.0f / radix / radix / ... / radix - - where `radix' appears `FLT_MANT_DIG' times. - -`DBL_MANT_DIG' -`LDBL_MANT_DIG' - This is the number of base-`FLT_RADIX' digits in the floating point - mantissa for the data types `double' and `long double', - respectively. - -`FLT_DIG' - This is the number of decimal digits of precision for the `float' - data type. Technically, if P and B are the precision and base - (respectively) for the representation, then the decimal precision - Q is the maximum number of decimal digits such that any floating - point number with Q base 10 digits can be rounded to a floating - point number with P base B digits and back again, without change - to the Q decimal digits. - - The value of this macro is supposed to be at least `6', to satisfy - ISO C. - -`DBL_DIG' -`LDBL_DIG' - These are similar to `FLT_DIG', but for the data types `double' - and `long double', respectively. The values of these macros are - supposed to be at least `10'. - -`FLT_MIN_EXP' - This is the smallest possible exponent value for type `float'. - More precisely, is the minimum negative integer such that the value - `FLT_RADIX' raised to this power minus 1 can be represented as a - normalized floating point number of type `float'. - -`DBL_MIN_EXP' -`LDBL_MIN_EXP' - These are similar to `FLT_MIN_EXP', but for the data types - `double' and `long double', respectively. - -`FLT_MIN_10_EXP' - This is the minimum negative integer such that `10' raised to this - power minus 1 can be represented as a normalized floating point - number of type `float'. This is supposed to be `-37' or even less. - -`DBL_MIN_10_EXP' -`LDBL_MIN_10_EXP' - These are similar to `FLT_MIN_10_EXP', but for the data types - `double' and `long double', respectively. - -`FLT_MAX_EXP' - This is the largest possible exponent value for type `float'. More - precisely, this is the maximum positive integer such that value - `FLT_RADIX' raised to this power minus 1 can be represented as a - floating point number of type `float'. - -`DBL_MAX_EXP' -`LDBL_MAX_EXP' - These are similar to `FLT_MAX_EXP', but for the data types - `double' and `long double', respectively. - -`FLT_MAX_10_EXP' - This is the maximum positive integer such that `10' raised to this - power minus 1 can be represented as a normalized floating point - number of type `float'. This is supposed to be at least `37'. - -`DBL_MAX_10_EXP' -`LDBL_MAX_10_EXP' - These are similar to `FLT_MAX_10_EXP', but for the data types - `double' and `long double', respectively. - -`FLT_MAX' - The value of this macro is the maximum number representable in type - `float'. It is supposed to be at least `1E+37'. The value has - type `float'. - - The smallest representable number is `- FLT_MAX'. - -`DBL_MAX' -`LDBL_MAX' - These are similar to `FLT_MAX', but for the data types `double' - and `long double', respectively. The type of the macro's value is - the same as the type it describes. - -`FLT_MIN' - The value of this macro is the minimum normalized positive floating - point number that is representable in type `float'. It is supposed - to be no more than `1E-37'. - -`DBL_MIN' -`LDBL_MIN' - These are similar to `FLT_MIN', but for the data types `double' - and `long double', respectively. The type of the macro's value is - the same as the type it describes. - -`FLT_EPSILON' - This is the maximum positive floating point number of type `float' - such that `1.0 + FLT_EPSILON != 1.0' is true. It's supposed to be - no greater than `1E-5'. - -`DBL_EPSILON' -`LDBL_EPSILON' - These are similar to `FLT_EPSILON', but for the data types - `double' and `long double', respectively. The type of the macro's - value is the same as the type it describes. The values are not - supposed to be greater than `1E-9'. - - -File: libc.info, Node: IEEE Floating Point, Prev: Floating Point Parameters, Up: Floating Type Macros - -IEEE Floating Point -................... - - Here is an example showing how the floating type measurements come -out for the most common floating point representation, specified by the -`IEEE Standard for Binary Floating Point Arithmetic (ANSI/IEEE Std -754-1985)'. Nearly all computers designed since the 1980s use this -format. - - The IEEE single-precision float representation uses a base of 2. -There is a sign bit, a mantissa with 23 bits plus one hidden bit (so -the total precision is 24 base-2 digits), and an 8-bit exponent that -can represent values in the range -125 to 128, inclusive. - - So, for an implementation that uses this representation for the -`float' data type, appropriate values for the corresponding parameters -are: - - FLT_RADIX 2 - FLT_MANT_DIG 24 - FLT_DIG 6 - FLT_MIN_EXP -125 - FLT_MIN_10_EXP -37 - FLT_MAX_EXP 128 - FLT_MAX_10_EXP +38 - FLT_MIN 1.17549435E-38F - FLT_MAX 3.40282347E+38F - FLT_EPSILON 1.19209290E-07F - - Here are the values for the `double' data type: - - DBL_MANT_DIG 53 - DBL_DIG 15 - DBL_MIN_EXP -1021 - DBL_MIN_10_EXP -307 - DBL_MAX_EXP 1024 - DBL_MAX_10_EXP 308 - DBL_MAX 1.7976931348623157E+308 - DBL_MIN 2.2250738585072014E-308 - DBL_EPSILON 2.2204460492503131E-016 - - -File: libc.info, Node: Structure Measurement, Prev: Floating Type Macros, Up: Data Type Measurements - -Structure Field Offset Measurement ----------------------------------- - - You can use `offsetof' to measure the location within a structure -type of a particular structure member. - - - Macro: size_t offsetof (TYPE, MEMBER) - This expands to a integer constant expression that is the offset - of the structure member named MEMBER in a the structure type TYPE. - For example, `offsetof (struct s, elem)' is the offset, in bytes, - of the member `elem' in a `struct s'. - - This macro won't work if MEMBER is a bit field; you get an error - from the C compiler in that case. diff -durpNa glibc-2.2.2/manual/libc.info-50 glibc-2.2.3/manual/libc.info-50 --- glibc-2.2.2/manual/libc.info-50 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-50 Wed Apr 25 14:55:22 2001 @@ -31,6905 +31,247 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Library Summary, Next: Installation, Prev: Language Features, Up: Top - -Summary of Library Facilities -***************************** - - This appendix is a complete list of the facilities declared within -the header files supplied with the GNU C library. Each entry also -lists the standard or other source from which each facility is derived, -and tells you where in the manual you can find more information about -how to use it. - -`long int a64l (const char *STRING)' - `stdlib.h' (XPG): *Note Encode Binary Data::. - -`void abort (void)' - `stdlib.h' (ISO): *Note Aborting a Program::. - -`int abs (int NUMBER)' - `stdlib.h' (ISO): *Note Absolute Value::. - -`int accept (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH_PTR)' - `sys/socket.h' (BSD): *Note Accepting Connections::. - -`int access (const char *FILENAME, int HOW)' - `unistd.h' (POSIX.1): *Note Testing File Access::. - -`ACCOUNTING' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`double acos (double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`float acosf (float X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`double acosh (double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`float acoshf (float X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double acoshl (long double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double acosl (long double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`int addmntent (FILE *STREAM, const struct mntent *MNT)' - `mntent.h' (BSD): *Note mtab::. - -`int adjtime (const struct timeval *DELTA, struct timeval *OLDDELTA)' - `sys/time.h' (BSD): *Note High-Resolution Calendar::. - -`int adjtimex (struct timex *TIMEX)' - `sys/timex.h' (GNU): *Note High-Resolution Calendar::. - -`AF_FILE' - `sys/socket.h' (GNU): *Note Address Formats::. - -`AF_INET' - `sys/socket.h' (BSD): *Note Address Formats::. - -`AF_INET6' - `sys/socket.h' (IPv6 Basic API): *Note Address Formats::. - -`AF_LOCAL' - `sys/socket.h' (POSIX): *Note Address Formats::. - -`AF_UNIX' - `sys/socket.h' (BSD, Unix98): *Note Address Formats::. - -`AF_UNSPEC' - `sys/socket.h' (BSD): *Note Address Formats::. - -`int aio_cancel (int FILDES, struct aiocb *AIOCBP)' - `aio.h' (POSIX.1b): *Note Cancel AIO Operations::. - -`int aio_cancel64 (int FILDES, struct aiocb *AIOCBP)' - `aio.h' (Unix98): *Note Cancel AIO Operations::. - -`int aio_error (const struct aiocb *AIOCBP)' - `aio.h' (POSIX.1b): *Note Status of AIO Operations::. - -`int aio_error64 (const struct aiocb64 *AIOCBP)' - `aio.h' (Unix98): *Note Status of AIO Operations::. - -`int aio_fsync (int OP, struct aiocb *AIOCBP)' - `aio.h' (POSIX.1b): *Note Synchronizing AIO Operations::. - -`int aio_fsync64 (int OP, struct aiocb64 *AIOCBP)' - `aio.h' (Unix98): *Note Synchronizing AIO Operations::. - -`void aio_init (const struct aioinit *INIT)' - `aio.h' (GNU): *Note Configuration of AIO::. - -`int aio_read (struct aiocb *AIOCBP)' - `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::. - -`int aio_read64 (struct aiocb *AIOCBP)' - `aio.h' (Unix98): *Note Asynchronous Reads/Writes::. - -`ssize_t aio_return (const struct aiocb *AIOCBP)' - `aio.h' (POSIX.1b): *Note Status of AIO Operations::. - -`int aio_return64 (const struct aiocb64 *AIOCBP)' - `aio.h' (Unix98): *Note Status of AIO Operations::. - -`int aio_suspend (const struct aiocb *const LIST[], int NENT, const struct timespec *TIMEOUT)' - `aio.h' (POSIX.1b): *Note Synchronizing AIO Operations::. - -`int aio_suspend64 (const struct aiocb64 *const LIST[], int NENT, const struct timespec *TIMEOUT)' - `aio.h' (Unix98): *Note Synchronizing AIO Operations::. - -`int aio_write (struct aiocb *AIOCBP)' - `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::. - -`int aio_write64 (struct aiocb *AIOCBP)' - `aio.h' (Unix98): *Note Asynchronous Reads/Writes::. - -`unsigned int alarm (unsigned int SECONDS)' - `unistd.h' (POSIX.1): *Note Setting an Alarm::. - -`void * alloca (size_t SIZE);' - `stdlib.h' (GNU, BSD): *Note Variable Size Automatic::. - -`int alphasort (const void *A, const void *B)' - `dirent.h' (BSD/SVID): *Note Scanning Directory Content::. - -`int alphasort64 (const void *A, const void *B)' - `dirent.h' (GNU): *Note Scanning Directory Content::. - -`tcflag_t ALTWERASE' - `termios.h' (BSD): *Note Local Modes::. - -`int ARG_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`error_t argp_err_exit_status' - `argp.h' (GNU): *Note Argp Global Variables::. - -`void argp_error (const struct argp_state *STATE, const char *FMT, ...)' - `argp.h' (GNU): *Note Argp Helper Functions::. - -`int ARGP_ERR_UNKNOWN' - `argp.h' (GNU): *Note Argp Parser Functions::. - -`void argp_failure (const struct argp_state *STATE, int STATUS, int ERRNUM, const char *FMT, ...)' - `argp.h' (GNU): *Note Argp Helper Functions::. - -`void argp_help (const struct argp *ARGP, FILE *STREAM, unsigned FLAGS, char *NAME)' - `argp.h' (GNU): *Note Argp Help::. - -`ARGP_IN_ORDER' - `argp.h' (GNU): *Note Argp Flags::. - -`ARGP_KEY_ARG' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_ARGS' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_END' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_ERROR' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_FINI' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_HELP_ARGS_DOC' - `argp.h' (GNU): *Note Argp Help Filter Keys::. - -`ARGP_KEY_HELP_DUP_ARGS_NOTE' - `argp.h' (GNU): *Note Argp Help Filter Keys::. - -`ARGP_KEY_HELP_EXTRA' - `argp.h' (GNU): *Note Argp Help Filter Keys::. - -`ARGP_KEY_HELP_HEADER' - `argp.h' (GNU): *Note Argp Help Filter Keys::. - -`ARGP_KEY_HELP_POST_DOC' - `argp.h' (GNU): *Note Argp Help Filter Keys::. - -`ARGP_KEY_HELP_PRE_DOC' - `argp.h' (GNU): *Note Argp Help Filter Keys::. - -`ARGP_KEY_INIT' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_NO_ARGS' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_KEY_SUCCESS' - `argp.h' (GNU): *Note Argp Special Keys::. - -`ARGP_LONG_ONLY' - `argp.h' (GNU): *Note Argp Flags::. - -`ARGP_NO_ARGS' - `argp.h' (GNU): *Note Argp Flags::. - -`ARGP_NO_ERRS' - `argp.h' (GNU): *Note Argp Flags::. - -`ARGP_NO_EXIT' - `argp.h' (GNU): *Note Argp Flags::. - -`ARGP_NO_HELP' - `argp.h' (GNU): *Note Argp Flags::. - -`error_t argp_parse (const struct argp *ARGP, int ARGC, char **ARGV, unsigned FLAGS, int *ARG_INDEX, void *INPUT)' - `argp.h' (GNU): *Note Suboptions: Argp. - -`ARGP_PARSE_ARGV0' - `argp.h' (GNU): *Note Argp Flags::. - -`const char * argp_program_bug_address' - `argp.h' (GNU): *Note Argp Global Variables::. - -`const char * argp_program_version' - `argp.h' (GNU): *Note Argp Global Variables::. - -`argp_program_version_hook' - `argp.h' (GNU): *Note Argp Global Variables::. - -`ARGP_SILENT' - `argp.h' (GNU): *Note Argp Flags::. - -`void argp_state_help (const struct argp_state *STATE, FILE *STREAM, unsigned FLAGS)' - `argp.h' (GNU): *Note Argp Helper Functions::. - -`void argp_usage (const struct argp_state *STATE)' - `argp.h' (GNU): *Note Argp Helper Functions::. - -`error_t argz_add (char **ARGZ, size_t *ARGZ_LEN, const char *STR)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_add_sep (char **ARGZ, size_t *ARGZ_LEN, const char *STR, int DELIM)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_append (char **ARGZ, size_t *ARGZ_LEN, const char *BUF, size_t BUF_LEN)' - `argz.h' (GNU): *Note Argz Functions::. - -`size_t argz_count (const char *ARGZ, size_t ARG_LEN)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_create (char *const ARGV[], char **ARGZ, size_t *ARGZ_LEN)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_create_sep (const char *STRING, int SEP, char **ARGZ, size_t *ARGZ_LEN)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_delete (char **ARGZ, size_t *ARGZ_LEN, char *ENTRY)' - `argz.h' (GNU): *Note Argz Functions::. - -`void argz_extract (char *ARGZ, size_t ARGZ_LEN, char **ARGV)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_insert (char **ARGZ, size_t *ARGZ_LEN, char *BEFORE, const char *ENTRY)' - `argz.h' (GNU): *Note Argz Functions::. - -`char * argz_next (char *ARGZ, size_t ARGZ_LEN, const char *ENTRY)' - `argz.h' (GNU): *Note Argz Functions::. - -`error_t argz_replace (char **ARGZ, size_t *ARGZ_LEN, const char *STR, const char *WITH, unsigned *REPLACE_COUNT)' - `argz.h' (GNU): *Note Argz Functions::. - -`void argz_stringify (char *ARGZ, size_t LEN, int SEP)' - `argz.h' (GNU): *Note Argz Functions::. - -`char * asctime (const struct tm *BROKENTIME)' - `time.h' (ISO): *Note Formatting Calendar Time::. - -`char * asctime_r (const struct tm *BROKENTIME, char *BUFFER)' - `time.h' (POSIX.1c): *Note Formatting Calendar Time::. - -`double asin (double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`float asinf (float X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`double asinh (double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`float asinhf (float X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double asinhl (long double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double asinl (long double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`int asprintf (char **PTR, const char *TEMPLATE, ...)' - `stdio.h' (GNU): *Note Dynamic Output::. - -`void assert (int EXPRESSION)' - `assert.h' (ISO): *Note Consistency Checking::. - -`void assert_perror (int ERRNUM)' - `assert.h' (GNU): *Note Consistency Checking::. - -`double atan (double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`double atan2 (double Y, double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`float atan2f (float Y, float X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`long double atan2l (long double Y, long double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`float atanf (float X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`double atanh (double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`float atanhf (float X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double atanhl (long double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double atanl (long double X)' - `math.h' (ISO): *Note Inverse Trig Functions::. - -`int atexit (void (*FUNCTION) (void))' - `stdlib.h' (ISO): *Note Cleanups on Exit::. - -`double atof (const char *STRING)' - `stdlib.h' (ISO): *Note Parsing of Floats::. - -`int atoi (const char *STRING)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`long int atol (const char *STRING)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`long long int atoll (const char *STRING)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`B0' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B110' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B115200' - `termios.h' (GNU): *Note Line Speed::. - -`B1200' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B134' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B150' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B1800' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B19200' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B200' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B230400' - `termios.h' (GNU): *Note Line Speed::. - -`B2400' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B300' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B38400' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B460800' - `termios.h' (GNU): *Note Line Speed::. - -`B4800' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B50' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B57600' - `termios.h' (GNU): *Note Line Speed::. - -`B600' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B75' - `termios.h' (POSIX.1): *Note Line Speed::. - -`B9600' - `termios.h' (POSIX.1): *Note Line Speed::. - -`int backtrace (void **BUFFER, int SIZE)' - `execinfo.h' (GNU): *Note Backtraces::. - -`char ** backtrace_symbols (void *const *BUFFER, int SIZE)' - `execinfo.h' (GNU): *Note Backtraces::. - -`void backtrace_symbols_fd (void *const *BUFFER, int SIZE, int FD)' - `execinfo.h' (GNU): *Note Backtraces::. - -`char * basename (char *PATH)' - `libgen.h' (XPG): *Note Finding Tokens in a String::. - -`char * basename (const char *FILENAME)' - `string.h' (GNU): *Note Finding Tokens in a String::. - -`int BC_BASE_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`int BC_DIM_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`int bcmp (const void *A1, const void *A2, size_t SIZE)' - `string.h' (BSD): *Note String/Array Comparison::. - -`void bcopy (const void *FROM, void *TO, size_t SIZE)' - `string.h' (BSD): *Note Copying and Concatenation::. - -`int BC_SCALE_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`int BC_STRING_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`int bind (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)' - `sys/socket.h' (BSD): *Note Setting Address::. - -`char * bindtextdomain (const char *DOMAINNAME, const char *DIRNAME)' - `libintl.h' (GNU): *Note Locating gettext catalog::. - -`char * bind_textdomain_codeset (const char *DOMAINNAME, const char *CODESET)' - `libintl.h' (GNU): *Note Charset conversion in gettext::. - -`blkcnt64_t' - `sys/types.h' (Unix98): *Note Attribute Meanings::. - -`blkcnt_t' - `sys/types.h' (Unix98): *Note Attribute Meanings::. - -`BOOT_TIME' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`BOOT_TIME' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int brk (void *ADDR)' - `unistd.h' (BSD): *Note Resizing the Data Segment::. - -`tcflag_t BRKINT' - `termios.h' (POSIX.1): *Note Input Modes::. - -`_BSD_SOURCE' - (GNU): *Note Feature Test Macros::. - -`void * bsearch (const void *KEY, const void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)' - `stdlib.h' (ISO): *Note Array Search Function::. - -`wint_t btowc (int C)' - `wchar.h' (ISO): *Note Converting a Character::. - -`int BUFSIZ' - `stdio.h' (ISO): *Note Controlling Buffering::. - -`void bzero (void *BLOCK, size_t SIZE)' - `string.h' (BSD): *Note Copying and Concatenation::. - -`double cabs (complex double Z)' - `complex.h' (ISO): *Note Absolute Value::. - -`float cabsf (complex float Z)' - `complex.h' (ISO): *Note Absolute Value::. - -`long double cabsl (complex long double Z)' - `complex.h' (ISO): *Note Absolute Value::. - -`complex double cacos (complex double Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex float cacosf (complex float Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex double cacosh (complex double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex float cacoshf (complex float Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double cacoshl (complex long double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double cacosl (complex long double Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`void * calloc (size_t COUNT, size_t ELTSIZE)' - `malloc.h', `stdlib.h' (ISO): *Note Allocating Cleared Space::. - -`double carg (complex double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`float cargf (complex float Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`long double cargl (complex long double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`complex double casin (complex double Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex float casinf (complex float Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex double casinh (complex double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex float casinhf (complex float Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double casinhl (complex long double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double casinl (complex long double Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex double catan (complex double Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex float catanf (complex float Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`complex double catanh (complex double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex float catanhf (complex float Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double catanhl (complex long double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double catanl (complex long double Z)' - `complex.h' (ISO): *Note Inverse Trig Functions::. - -`nl_catd catopen (const char *CAT_NAME, int FLAG)' - `nl_types.h' (X/Open): *Note The catgets Functions::. - -`int cbc_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE, char *IVEC)' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`double cbrt (double X)' - `math.h' (BSD): *Note Exponents and Logarithms::. - -`float cbrtf (float X)' - `math.h' (BSD): *Note Exponents and Logarithms::. - -`long double cbrtl (long double X)' - `math.h' (BSD): *Note Exponents and Logarithms::. - -`complex double ccos (complex double Z)' - `complex.h' (ISO): *Note Trig Functions::. - -`complex float ccosf (complex float Z)' - `complex.h' (ISO): *Note Trig Functions::. - -`complex double ccosh (complex double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex float ccoshf (complex float Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double ccoshl (complex long double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double ccosl (complex long double Z)' - `complex.h' (ISO): *Note Trig Functions::. - -`cc_t' - `termios.h' (POSIX.1): *Note Mode Data Types::. - -`tcflag_t CCTS_OFLOW' - `termios.h' (BSD): *Note Control Modes::. - -`double ceil (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`float ceilf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long double ceill (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`complex double cexp (complex double Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex float cexpf (complex float Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex long double cexpl (complex long double Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`speed_t cfgetispeed (const struct termios *TERMIOS-P)' - `termios.h' (POSIX.1): *Note Line Speed::. - -`speed_t cfgetospeed (const struct termios *TERMIOS-P)' - `termios.h' (POSIX.1): *Note Line Speed::. - -`int cfmakeraw (struct termios *TERMIOS-P)' - `termios.h' (BSD): *Note Noncanonical Input::. - -`void cfree (void *PTR)' - `stdlib.h' (Sun): *Note Freeing after Malloc::. - -`int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)' - `termios.h' (POSIX.1): *Note Line Speed::. - -`int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)' - `termios.h' (POSIX.1): *Note Line Speed::. - -`int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)' - `termios.h' (BSD): *Note Line Speed::. - -`CHAR_BIT' - `limits.h' (ISO): *Note Width of Type::. - -`CHAR_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`CHAR_MIN' - `limits.h' (ISO): *Note Range of Type::. - -`int chdir (const char *FILENAME)' - `unistd.h' (POSIX.1): *Note Working Directory::. - -`int CHILD_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`int chmod (const char *FILENAME, mode_t MODE)' - `sys/stat.h' (POSIX.1): *Note Setting Permissions::. - -`int chown (const char *FILENAME, uid_t OWNER, gid_t GROUP)' - `unistd.h' (POSIX.1): *Note File Owner::. - -`tcflag_t CIGNORE' - `termios.h' (BSD): *Note Control Modes::. - -`double cimag (complex double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`float cimagf (complex float Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`long double cimagl (complex long double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`int clearenv (void)' - `stdlib.h' (GNU): *Note Environment Access::. - -`void clearerr (FILE *STREAM)' - `stdio.h' (ISO): *Note Error Recovery::. - -`void clearerr_unlocked (FILE *STREAM)' - `stdio.h' (GNU): *Note Error Recovery::. - -`int CLK_TCK' - `time.h' (POSIX.1): *Note CPU Time::. - -`tcflag_t CLOCAL' - `termios.h' (POSIX.1): *Note Control Modes::. - -`clock_t clock (void)' - `time.h' (ISO): *Note CPU Time::. - -`int CLOCKS_PER_SEC' - `time.h' (ISO): *Note CPU Time::. - -`clock_t' - `time.h' (ISO): *Note CPU Time::. - -`complex double clog (complex double Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex double clog10 (complex double Z)' - `complex.h' (GNU): *Note Exponents and Logarithms::. - -`complex float clog10f (complex float Z)' - `complex.h' (GNU): *Note Exponents and Logarithms::. - -`complex long double clog10l (complex long double Z)' - `complex.h' (GNU): *Note Exponents and Logarithms::. - -`complex float clogf (complex float Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex long double clogl (complex long double Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`int close (int FILEDES)' - `unistd.h' (POSIX.1): *Note Opening and Closing Files::. - -`int closedir (DIR *DIRSTREAM)' - `dirent.h' (POSIX.1): *Note Reading/Closing Directory::. - -`void closelog (void)' - `syslog.h' (BSD): *Note closelog::. - -`int COLL_WEIGHTS_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`size_t confstr (int PARAMETER, char *BUF, size_t LEN)' - `unistd.h' (POSIX.2): *Note String Parameters::. - -`complex double conj (complex double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`complex float conjf (complex float Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`complex long double conjl (complex long double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`int connect (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)' - `sys/socket.h' (BSD): *Note Connecting::. - -`cookie_close_function' - `stdio.h' (GNU): *Note Hook Functions::. - -`cookie_io_functions_t' - `stdio.h' (GNU): *Note Streams and Cookies::. - -`cookie_read_function' - `stdio.h' (GNU): *Note Hook Functions::. - -`cookie_seek_function' - `stdio.h' (GNU): *Note Hook Functions::. - -`cookie_write_function' - `stdio.h' (GNU): *Note Hook Functions::. - -`double copysign (double X, double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`float copysignf (float X, float Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`long double copysignl (long double X, long double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`double cos (double X)' - `math.h' (ISO): *Note Trig Functions::. - -`float cosf (float X)' - `math.h' (ISO): *Note Trig Functions::. - -`double cosh (double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`float coshf (float X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double coshl (long double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double cosl (long double X)' - `math.h' (ISO): *Note Trig Functions::. - -`complex double cpow (complex double BASE, complex double POWER)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex float cpowf (complex float BASE, complex float POWER)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex long double cpowl (complex long double BASE, complex long double POWER)' - `complex.h' (ISO): *Note Exponents and Logarithms::. - -`complex double cproj (complex double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`complex float cprojf (complex float Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`complex long double cprojl (complex long double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`tcflag_t CREAD' - `termios.h' (POSIX.1): *Note Control Modes::. - -`double creal (complex double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`float crealf (complex float Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`long double creall (complex long double Z)' - `complex.h' (ISO): *Note Operations on Complex::. - -`int creat (const char *FILENAME, mode_t MODE)' - `fcntl.h' (POSIX.1): *Note Opening and Closing Files::. - -`int creat64 (const char *FILENAME, mode_t MODE)' - `fcntl.h' (Unix98): *Note Opening and Closing Files::. - -`tcflag_t CRTS_IFLOW' - `termios.h' (BSD): *Note Control Modes::. - -`char * crypt (const char *KEY, const char *SALT)' - `crypt.h' (BSD, SVID): *Note crypt::. - -`char * crypt_r (const char *KEY, const char *SALT, struct crypt_data * DATA)' - `crypt.h' (GNU): *Note crypt::. - -`tcflag_t CS5' - `termios.h' (POSIX.1): *Note Control Modes::. - -`tcflag_t CS6' - `termios.h' (POSIX.1): *Note Control Modes::. - -`tcflag_t CS7' - `termios.h' (POSIX.1): *Note Control Modes::. - -`tcflag_t CS8' - `termios.h' (POSIX.1): *Note Control Modes::. - -`complex double csin (complex double Z)' - `complex.h' (ISO): *Note Trig Functions::. - -`complex float csinf (complex float Z)' - `complex.h' (ISO): *Note Trig Functions::. - -`complex double csinh (complex double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex float csinhf (complex float Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double csinhl (complex long double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. - -`complex long double csinl (complex long double Z)' - `complex.h' (ISO): *Note Trig Functions::. - -`tcflag_t CSIZE' - `termios.h' (POSIX.1): *Note Control Modes::. - -`_CS_LFS64_CFLAGS' - `unistd.h' (Unix98): *Note String Parameters::. - -`_CS_LFS64_LDFLAGS' - `unistd.h' (Unix98): *Note String Parameters::. - -`_CS_LFS64_LIBS' - `unistd.h' (Unix98): *Note String Parameters::. - -`_CS_LFS64_LINTFLAGS' - `unistd.h' (Unix98): *Note String Parameters::. - -`_CS_LFS_CFLAGS' - `unistd.h' (Unix98): *Note String Parameters::. - -`_CS_LFS_LDFLAGS' - `unistd.h' (Unix98): *Note String Parameters::. - -`_CS_LFS_LIBS' - `unistd.h' (Unix98): *Note String Parameters::. +File: libc.info, Node: Floating Point Parameters, Next: IEEE Floating Point, Prev: Floating Point Concepts, Up: Floating Type Macros -`_CS_LFS_LINTFLAGS' - `unistd.h' (Unix98): *Note String Parameters::. +Floating Point Parameters +......................... -`_CS_PATH' - `unistd.h' (POSIX.2): *Note String Parameters::. + These macro definitions can be accessed by including the header file +`float.h' in your program. -`complex double csqrt (complex double Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. + Macro names starting with `FLT_' refer to the `float' type, while +names beginning with `DBL_' refer to the `double' type and names +beginning with `LDBL_' refer to the `long double' type. (If GCC does +not support `long double' as a distinct data type on a target machine +then the values for the `LDBL_' constants are equal to the +corresponding constants for the `double' type.) -`complex float csqrtf (complex float Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. + Of these macros, only `FLT_RADIX' is guaranteed to be a constant +expression. The other macros listed here cannot be reliably used in +places that require constant expressions, such as `#if' preprocessing +directives or in the dimensions of static arrays. -`complex long double csqrtl (complex long double Z)' - `complex.h' (ISO): *Note Exponents and Logarithms::. + Although the ISO C standard specifies minimum and maximum values for +most of these parameters, the GNU C implementation uses whatever values +describe the floating point representation of the target machine. So in +principle GNU C actually satisfies the ISO C requirements only if the +target machine is suitable. In practice, all the machines currently +supported are suitable. -`tcflag_t CSTOPB' - `termios.h' (POSIX.1): *Note Control Modes::. +`FLT_ROUNDS' + This value characterizes the rounding mode for floating point + addition. The following values indicate standard rounding modes: -`complex double ctan (complex double Z)' - `complex.h' (ISO): *Note Trig Functions::. + `-1' + The mode is indeterminable. -`complex float ctanf (complex float Z)' - `complex.h' (ISO): *Note Trig Functions::. + `0' + Rounding is towards zero. -`complex double ctanh (complex double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. + `1' + Rounding is to the nearest number. -`complex float ctanhf (complex float Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. + `2' + Rounding is towards positive infinity. -`complex long double ctanhl (complex long double Z)' - `complex.h' (ISO): *Note Hyperbolic Functions::. + `3' + Rounding is towards negative infinity. -`complex long double ctanl (complex long double Z)' - `complex.h' (ISO): *Note Trig Functions::. + Any other value represents a machine-dependent nonstandard rounding + mode. -`char * ctermid (char *STRING)' - `stdio.h' (POSIX.1): *Note Identifying the Terminal::. + On most machines, the value is `1', in accordance with the IEEE + standard for floating point. -`char * ctime (const time_t *TIME)' - `time.h' (ISO): *Note Formatting Calendar Time::. + Here is a table showing how certain values round for each possible + value of `FLT_ROUNDS', if the other aspects of the representation + match the IEEE single-precision standard. -`char * ctime_r (const time_t *TIME, char *BUFFER)' - `time.h' (POSIX.1c): *Note Formatting Calendar Time::. + 0 1 2 3 + 1.00000003 1.0 1.0 1.00000012 1.0 + 1.00000007 1.0 1.00000012 1.00000012 1.0 + -1.00000003 -1.0 -1.0 -1.0 -1.00000012 + -1.00000007 -1.0 -1.00000012 -1.0 -1.00000012 -`char * cuserid (char *STRING)' - `stdio.h' (POSIX.1): *Note Who Logged In::. +`FLT_RADIX' + This is the value of the base, or radix, of the exponent + representation. This is guaranteed to be a constant expression, + unlike the other macros described in this section. The value is 2 + on all machines we know of except the IBM 360 and derivatives. -`int daylight' - `time.h' (SVID): *Note Time Zone Functions::. +`FLT_MANT_DIG' + This is the number of base-`FLT_RADIX' digits in the floating point + mantissa for the `float' data type. The following expression + yields `1.0' (even though mathematically it should not) due to the + limited number of mantissa digits: -`DBL_DIG' - `float.h' (ISO): *Note Floating Point Parameters::. + float radix = FLT_RADIX; + + 1.0f + 1.0f / radix / radix / ... / radix -`DBL_EPSILON' - `float.h' (ISO): *Note Floating Point Parameters::. + where `radix' appears `FLT_MANT_DIG' times. `DBL_MANT_DIG' - `float.h' (ISO): *Note Floating Point Parameters::. - -`DBL_MAX' - `float.h' (ISO): *Note Floating Point Parameters::. +`LDBL_MANT_DIG' + This is the number of base-`FLT_RADIX' digits in the floating point + mantissa for the data types `double' and `long double', + respectively. -`DBL_MAX_10_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. +`FLT_DIG' + This is the number of decimal digits of precision for the `float' + data type. Technically, if P and B are the precision and base + (respectively) for the representation, then the decimal precision + Q is the maximum number of decimal digits such that any floating + point number with Q base 10 digits can be rounded to a floating + point number with P base B digits and back again, without change + to the Q decimal digits. -`DBL_MAX_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. + The value of this macro is supposed to be at least `6', to satisfy + ISO C. -`DBL_MIN' - `float.h' (ISO): *Note Floating Point Parameters::. +`DBL_DIG' +`LDBL_DIG' + These are similar to `FLT_DIG', but for the data types `double' + and `long double', respectively. The values of these macros are + supposed to be at least `10'. -`DBL_MIN_10_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. +`FLT_MIN_EXP' + This is the smallest possible exponent value for type `float'. + More precisely, is the minimum negative integer such that the value + `FLT_RADIX' raised to this power minus 1 can be represented as a + normalized floating point number of type `float'. `DBL_MIN_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. - -`char * dcgettext (const char *DOMAINNAME, const char *MSGID, int CATEGORY)' - `libintl.h' (GNU): *Note Translation with gettext::. - -`char * dcngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N, int CATEGORY)' - `libintl.h' (GNU): *Note Advanced gettext functions::. - -`DEAD_PROCESS' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`DEAD_PROCESS' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`DES_DECRYPT' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DES_ENCRYPT' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DESERR_BADPARAM' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DESERR_HWERROR' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DESERR_NOHWDEVICE' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DESERR_NONE' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`int DES_FAILED (int ERR)' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DES_HW' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`void des_setparity (char *KEY)' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`DES_SW' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`dev_t' - `sys/types.h' (POSIX.1): *Note Attribute Meanings::. - -`char * dgettext (const char *DOMAINNAME, const char *MSGID)' - `libintl.h' (GNU): *Note Translation with gettext::. - -`double difftime (time_t TIME1, time_t TIME0)' - `time.h' (ISO): *Note Elapsed Time::. - -`DIR' - `dirent.h' (POSIX.1): *Note Opening a Directory::. - -`int dirfd (DIR *DIRSTREAM)' - `dirent.h' (GNU): *Note Opening a Directory::. - -`char * dirname (char *PATH)' - `libgen.h' (XPG): *Note Finding Tokens in a String::. - -`div_t div (int NUMERATOR, int DENOMINATOR)' - `stdlib.h' (ISO): *Note Integer Division::. - -`div_t' - `stdlib.h' (ISO): *Note Integer Division::. - -`char * dngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N)' - `libintl.h' (GNU): *Note Advanced gettext functions::. - -`double drand48 (void)' - `stdlib.h' (SVID): *Note SVID Random::. - -`int drand48_r (struct drand48_data *BUFFER, double *RESULT)' - `stdlib.h' (GNU): *Note SVID Random::. - -`double drem (double NUMERATOR, double DENOMINATOR)' - `math.h' (BSD): *Note Remainder Functions::. - -`float dremf (float NUMERATOR, float DENOMINATOR)' - `math.h' (BSD): *Note Remainder Functions::. - -`long double dreml (long double NUMERATOR, long double DENOMINATOR)' - `math.h' (BSD): *Note Remainder Functions::. - -`mode_t DTTOIF (int DTYPE)' - `dirent.h' (BSD): *Note Directory Entries::. - -`int dup (int OLD)' - `unistd.h' (POSIX.1): *Note Duplicating Descriptors::. - -`int dup2 (int OLD, int NEW)' - `unistd.h' (POSIX.1): *Note Duplicating Descriptors::. - -`int E2BIG' - `errno.h' (POSIX.1: Argument list too long): *Note Error Codes::. - -`int EACCES' - `errno.h' (POSIX.1: Permission denied): *Note Error Codes::. - -`int EADDRINUSE' - `errno.h' (BSD: Address already in use): *Note Error Codes::. - -`int EADDRNOTAVAIL' - `errno.h' (BSD: Cannot assign requested address): *Note Error - Codes::. - -`int EADV' - `errno.h' (Linux???: Advertise error): *Note Error Codes::. - -`int EAFNOSUPPORT' - `errno.h' (BSD: Address family not supported by protocol): *Note - Error Codes::. - -`int EAGAIN' - `errno.h' (POSIX.1: Resource temporarily unavailable): *Note - Error Codes::. - -`int EALREADY' - `errno.h' (BSD: Operation already in progress): *Note Error - Codes::. - -`int EAUTH' - `errno.h' (BSD: Authentication error): *Note Error Codes::. - -`int EBACKGROUND' - `errno.h' (GNU: Inappropriate operation for background process): - *Note Error Codes::. - -`int EBADE' - `errno.h' (Linux???: Invalid exchange): *Note Error Codes::. - -`int EBADF' - `errno.h' (POSIX.1: Bad file descriptor): *Note Error Codes::. - -`int EBADFD' - `errno.h' (Linux???: File descriptor in bad state): *Note Error - Codes::. - -`int EBADMSG' - `errno.h' (XOPEN: Bad message): *Note Error Codes::. - -`int EBADR' - `errno.h' (Linux???: Invalid request descriptor): *Note Error - Codes::. - -`int EBADRPC' - `errno.h' (BSD: RPC struct is bad): *Note Error Codes::. - -`int EBADRQC' - `errno.h' (Linux???: Invalid request code): *Note Error Codes::. - -`int EBADSLT' - `errno.h' (Linux???: Invalid slot): *Note Error Codes::. - -`int EBFONT' - `errno.h' (Linux???: Bad font file format): *Note Error Codes::. - -`int EBUSY' - `errno.h' (POSIX.1: Device or resource busy): *Note Error Codes::. - -`int ecb_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE)' - `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. - -`int ECHILD' - `errno.h' (POSIX.1: No child processes): *Note Error Codes::. - -`tcflag_t ECHO' - `termios.h' (POSIX.1): *Note Local Modes::. - -`tcflag_t ECHOCTL' - `termios.h' (BSD): *Note Local Modes::. - -`tcflag_t ECHOE' - `termios.h' (POSIX.1): *Note Local Modes::. - -`tcflag_t ECHOK' - `termios.h' (POSIX.1): *Note Local Modes::. - -`tcflag_t ECHOKE' - `termios.h' (BSD): *Note Local Modes::. - -`tcflag_t ECHONL' - `termios.h' (POSIX.1): *Note Local Modes::. - -`tcflag_t ECHOPRT' - `termios.h' (BSD): *Note Local Modes::. - -`int ECHRNG' - `errno.h' (Linux???: Channel number out of range): *Note Error - Codes::. - -`int ECOMM' - `errno.h' (Linux???: Communication error on send): *Note Error - Codes::. - -`int ECONNABORTED' - `errno.h' (BSD: Software caused connection abort): *Note Error - Codes::. - -`int ECONNREFUSED' - `errno.h' (BSD: Connection refused): *Note Error Codes::. - -`int ECONNRESET' - `errno.h' (BSD: Connection reset by peer): *Note Error Codes::. - -`char * ecvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)' - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. - -`char * ecvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' - `stdlib.h' (GNU): *Note System V Number Conversion::. - -`int ED' - `errno.h' (GNU: ?): *Note Error Codes::. - -`int EDEADLK' - `errno.h' (POSIX.1: Resource deadlock avoided): *Note Error - Codes::. - -`int EDEADLOCK' - `errno.h' (Linux???: File locking deadlock error): *Note Error - Codes::. - -`int EDESTADDRREQ' - `errno.h' (BSD: Destination address required): *Note Error - Codes::. - -`int EDIED' - `errno.h' (GNU: Translator died): *Note Error Codes::. - -`int EDOM' - `errno.h' (ISO: Numerical argument out of domain): *Note Error - Codes::. - -`int EDOTDOT' - `errno.h' (Linux???: RFS specific error): *Note Error Codes::. - -`int EDQUOT' - `errno.h' (BSD: Disk quota exceeded): *Note Error Codes::. - -`int EEXIST' - `errno.h' (POSIX.1: File exists): *Note Error Codes::. - -`int EFAULT' - `errno.h' (POSIX.1: Bad address): *Note Error Codes::. - -`int EFBIG' - `errno.h' (POSIX.1: File too large): *Note Error Codes::. - -`int EFTYPE' - `errno.h' (BSD: Inappropriate file type or format): *Note Error - Codes::. - -`int EGRATUITOUS' - `errno.h' (GNU: Gratuitous error): *Note Error Codes::. - -`int EGREGIOUS' - `errno.h' (GNU: You really blew it this time): *Note Error - Codes::. - -`int EHOSTDOWN' - `errno.h' (BSD: Host is down): *Note Error Codes::. - -`int EHOSTUNREACH' - `errno.h' (BSD: No route to host): *Note Error Codes::. - -`int EIDRM' - `errno.h' (XOPEN: Identifier removed): *Note Error Codes::. - -`int EIEIO' - `errno.h' (GNU: Computer bought the farm): *Note Error Codes::. - -`int EILSEQ' - `errno.h' (ISO: Invalid or incomplete multibyte or wide - character): *Note Error Codes::. - -`int EINPROGRESS' - `errno.h' (BSD: Operation now in progress): *Note Error Codes::. - -`int EINTR' - `errno.h' (POSIX.1: Interrupted system call): *Note Error Codes::. - -`int EINVAL' - `errno.h' (POSIX.1: Invalid argument): *Note Error Codes::. - -`int EIO' - `errno.h' (POSIX.1: Input/output error): *Note Error Codes::. - -`int EISCONN' - `errno.h' (BSD: Transport endpoint is already connected): *Note - Error Codes::. - -`int EISDIR' - `errno.h' (POSIX.1: Is a directory): *Note Error Codes::. - -`int EISNAM' - `errno.h' (Linux???: Is a named type file): *Note Error Codes::. - -`int EL2HLT' - `errno.h' (Obsolete: Level 2 halted): *Note Error Codes::. - -`int EL2NSYNC' - `errno.h' (Obsolete: Level 2 not synchronized): *Note Error - Codes::. - -`int EL3HLT' - `errno.h' (Obsolete: Level 3 halted): *Note Error Codes::. - -`int EL3RST' - `errno.h' (Obsolete: Level 3 reset): *Note Error Codes::. - -`int ELIBACC' - `errno.h' (Linux???: Can not access a needed shared library): - *Note Error Codes::. - -`int ELIBBAD' - `errno.h' (Linux???: Accessing a corrupted shared library): *Note - Error Codes::. - -`int ELIBEXEC' - `errno.h' (Linux???: Cannot exec a shared library directly): - *Note Error Codes::. - -`int ELIBMAX' - `errno.h' (Linux???: Attempting to link in too many shared - libraries): *Note Error Codes::. - -`int ELIBSCN' - `errno.h' (Linux???: .lib section in a.out corrupted): *Note - Error Codes::. - -`int ELNRNG' - `errno.h' (Linux???: Link number out of range): *Note Error - Codes::. - -`int ELOOP' - `errno.h' (BSD: Too many levels of symbolic links): *Note Error - Codes::. - -`int EMEDIUMTYPE' - `errno.h' (Linux???: Wrong medium type): *Note Error Codes::. - -`int EMFILE' - `errno.h' (POSIX.1: Too many open files): *Note Error Codes::. - -`int EMLINK' - `errno.h' (POSIX.1: Too many links): *Note Error Codes::. - -`EMPTY' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`EMPTY' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int EMSGSIZE' - `errno.h' (BSD: Message too long): *Note Error Codes::. - -`int EMULTIHOP' - `errno.h' (XOPEN: Multihop attempted): *Note Error Codes::. - -`int ENAMETOOLONG' - `errno.h' (POSIX.1: File name too long): *Note Error Codes::. - -`int ENAVAIL' - `errno.h' (Linux???: No XENIX semaphores available): *Note Error - Codes::. - -`void encrypt (char *BLOCK, int EDFLAG)' - `crypt.h' (BSD, SVID): *Note DES Encryption::. - -`void encrypt_r (char *BLOCK, int EDFLAG, struct crypt_data * DATA)' - `crypt.h' (GNU): *Note DES Encryption::. - -`void endfsent (void)' - `fstab.h' (BSD): *Note fstab::. - -`void endgrent (void)' - `grp.h' (SVID, BSD): *Note Scanning All Groups::. - -`void endhostent (void)' - `netdb.h' (BSD): *Note Host Names::. - -`int endmntent (FILE *STREAM)' - `mntent.h' (BSD): *Note mtab::. - -`void endnetent (void)' - `netdb.h' (BSD): *Note Networks Database::. - -`void endnetgrent (void)' - `netdb.h' (BSD): *Note Lookup Netgroup::. - -`void endprotoent (void)' - `netdb.h' (BSD): *Note Protocols Database::. - -`void endpwent (void)' - `pwd.h' (SVID, BSD): *Note Scanning All Users::. - -`void endservent (void)' - `netdb.h' (BSD): *Note Services Database::. - -`void endutent (void)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`void endutxent (void)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int ENEEDAUTH' - `errno.h' (BSD: Need authenticator): *Note Error Codes::. - -`int ENETDOWN' - `errno.h' (BSD: Network is down): *Note Error Codes::. - -`int ENETRESET' - `errno.h' (BSD: Network dropped connection on reset): *Note Error - Codes::. - -`int ENETUNREACH' - `errno.h' (BSD: Network is unreachable): *Note Error Codes::. - -`int ENFILE' - `errno.h' (POSIX.1: Too many open files in system): *Note Error - Codes::. - -`int ENOANO' - `errno.h' (Linux???: No anode): *Note Error Codes::. - -`int ENOBUFS' - `errno.h' (BSD: No buffer space available): *Note Error Codes::. - -`int ENOCSI' - `errno.h' (Linux???: No CSI structure available): *Note Error - Codes::. - -`int ENODATA' - `errno.h' (XOPEN: No data available): *Note Error Codes::. - -`int ENODEV' - `errno.h' (POSIX.1: No such device): *Note Error Codes::. - -`int ENOENT' - `errno.h' (POSIX.1: No such file or directory): *Note Error - Codes::. - -`int ENOEXEC' - `errno.h' (POSIX.1: Exec format error): *Note Error Codes::. - -`int ENOLCK' - `errno.h' (POSIX.1: No locks available): *Note Error Codes::. - -`int ENOLINK' - `errno.h' (XOPEN: Link has been severed): *Note Error Codes::. - -`int ENOMEDIUM' - `errno.h' (Linux???: No medium found): *Note Error Codes::. - -`int ENOMEM' - `errno.h' (POSIX.1: Cannot allocate memory): *Note Error Codes::. - -`int ENOMSG' - `errno.h' (XOPEN: No message of desired type): *Note Error - Codes::. - -`int ENONET' - `errno.h' (Linux???: Machine is not on the network): *Note Error - Codes::. - -`int ENOPKG' - `errno.h' (Linux???: Package not installed): *Note Error Codes::. - -`int ENOPROTOOPT' - `errno.h' (BSD: Protocol not available): *Note Error Codes::. - -`int ENOSPC' - `errno.h' (POSIX.1: No space left on device): *Note Error Codes::. - -`int ENOSR' - `errno.h' (XOPEN: Out of streams resources): *Note Error Codes::. - -`int ENOSTR' - `errno.h' (XOPEN: Device not a stream): *Note Error Codes::. - -`int ENOSYS' - `errno.h' (POSIX.1: Function not implemented): *Note Error - Codes::. - -`int ENOTBLK' - `errno.h' (BSD: Block device required): *Note Error Codes::. - -`int ENOTCONN' - `errno.h' (BSD: Transport endpoint is not connected): *Note Error - Codes::. - -`int ENOTDIR' - `errno.h' (POSIX.1: Not a directory): *Note Error Codes::. - -`int ENOTEMPTY' - `errno.h' (POSIX.1: Directory not empty): *Note Error Codes::. - -`int ENOTNAM' - `errno.h' (Linux???: Not a XENIX named type file): *Note Error - Codes::. - -`int ENOTSOCK' - `errno.h' (BSD: Socket operation on non-socket): *Note Error - Codes::. - -`int ENOTSUP' - `errno.h' (POSIX.1: Not supported): *Note Error Codes::. - -`int ENOTTY' - `errno.h' (POSIX.1: Inappropriate ioctl for device): *Note Error - Codes::. - -`int ENOTUNIQ' - `errno.h' (Linux???: Name not unique on network): *Note Error - Codes::. - -`char ** environ' - `unistd.h' (POSIX.1): *Note Environment Access::. - -`error_t envz_add (char **ENVZ, size_t *ENVZ_LEN, const char *NAME, const char *VALUE)' - `envz.h' (GNU): *Note Envz Functions::. - -`char * envz_entry (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)' - `envz.h' (GNU): *Note Envz Functions::. - -`char * envz_get (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)' - `envz.h' (GNU): *Note Envz Functions::. - -`error_t envz_merge (char **ENVZ, size_t *ENVZ_LEN, const char *ENVZ2, size_t ENVZ2_LEN, int OVERRIDE)' - `envz.h' (GNU): *Note Envz Functions::. - -`void envz_strip (char **ENVZ, size_t *ENVZ_LEN)' - `envz.h' (GNU): *Note Envz Functions::. - -`int ENXIO' - `errno.h' (POSIX.1: No such device or address): *Note Error - Codes::. - -`int EOF' - `stdio.h' (ISO): *Note EOF and Errors::. - -`int EOPNOTSUPP' - `errno.h' (BSD: Operation not supported): *Note Error Codes::. - -`int EOVERFLOW' - `errno.h' (XOPEN: Value too large for defined data type): *Note - Error Codes::. - -`int EPERM' - `errno.h' (POSIX.1: Operation not permitted): *Note Error Codes::. - -`int EPFNOSUPPORT' - `errno.h' (BSD: Protocol family not supported): *Note Error - Codes::. - -`int EPIPE' - `errno.h' (POSIX.1: Broken pipe): *Note Error Codes::. - -`int EPROCLIM' - `errno.h' (BSD: Too many processes): *Note Error Codes::. - -`int EPROCUNAVAIL' - `errno.h' (BSD: RPC bad procedure for program): *Note Error - Codes::. - -`int EPROGMISMATCH' - `errno.h' (BSD: RPC program version wrong): *Note Error Codes::. - -`int EPROGUNAVAIL' - `errno.h' (BSD: RPC program not available): *Note Error Codes::. - -`int EPROTO' - `errno.h' (XOPEN: Protocol error): *Note Error Codes::. - -`int EPROTONOSUPPORT' - `errno.h' (BSD: Protocol not supported): *Note Error Codes::. - -`int EPROTOTYPE' - `errno.h' (BSD: Protocol wrong type for socket): *Note Error - Codes::. - -`int EQUIV_CLASS_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`double erand48 (unsigned short int XSUBI[3])' - `stdlib.h' (SVID): *Note SVID Random::. - -`int erand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, double *RESULT)' - `stdlib.h' (GNU): *Note SVID Random::. - -`int ERANGE' - `errno.h' (ISO: Numerical result out of range): *Note Error - Codes::. - -`int EREMCHG' - `errno.h' (Linux???: Remote address changed): *Note Error Codes::. - -`int EREMOTE' - `errno.h' (BSD: Object is remote): *Note Error Codes::. - -`int EREMOTEIO' - `errno.h' (Linux???: Remote I/O error): *Note Error Codes::. - -`int ERESTART' - `errno.h' (Linux???: Interrupted system call should be restarted): - *Note Error Codes::. - -`double erf (double X)' - `math.h' (SVID): *Note Special Functions::. - -`double erfc (double X)' - `math.h' (SVID): *Note Special Functions::. - -`float erfcf (float X)' - `math.h' (SVID): *Note Special Functions::. - -`long double erfcl (long double X)' - `math.h' (SVID): *Note Special Functions::. - -`float erff (float X)' - `math.h' (SVID): *Note Special Functions::. - -`long double erfl (long double X)' - `math.h' (SVID): *Note Special Functions::. - -`int EROFS' - `errno.h' (POSIX.1: Read-only file system): *Note Error Codes::. - -`int ERPCMISMATCH' - `errno.h' (BSD: RPC version wrong): *Note Error Codes::. - -`volatile int errno' - `errno.h' (ISO): *Note Checking for Errors::. - -`int ESHUTDOWN' - `errno.h' (BSD: Cannot send after transport endpoint shutdown): - *Note Error Codes::. - -`int ESOCKTNOSUPPORT' - `errno.h' (BSD: Socket type not supported): *Note Error Codes::. - -`int ESPIPE' - `errno.h' (POSIX.1: Illegal seek): *Note Error Codes::. - -`int ESRCH' - `errno.h' (POSIX.1: No such process): *Note Error Codes::. - -`int ESRMNT' - `errno.h' (Linux???: Srmount error): *Note Error Codes::. - -`int ESTALE' - `errno.h' (BSD: Stale NFS file handle): *Note Error Codes::. - -`int ESTRPIPE' - `errno.h' (Linux???: Streams pipe error): *Note Error Codes::. - -`int ETIME' - `errno.h' (XOPEN: Timer expired): *Note Error Codes::. - -`int ETIMEDOUT' - `errno.h' (BSD: Connection timed out): *Note Error Codes::. - -`int ETOOMANYREFS' - `errno.h' (BSD: Too many references: cannot splice): *Note Error - Codes::. - -`int ETXTBSY' - `errno.h' (BSD: Text file busy): *Note Error Codes::. - -`int EUCLEAN' - `errno.h' (Linux???: Structure needs cleaning): *Note Error - Codes::. - -`int EUNATCH' - `errno.h' (Linux???: Protocol driver not attached): *Note Error - Codes::. - -`int EUSERS' - `errno.h' (BSD: Too many users): *Note Error Codes::. - -`int EWOULDBLOCK' - `errno.h' (BSD: Operation would block): *Note Error Codes::. - -`int EXDEV' - `errno.h' (POSIX.1: Invalid cross-device link): *Note Error - Codes::. - -`int execl (const char *FILENAME, const char *ARG0, ...)' - `unistd.h' (POSIX.1): *Note Executing a File::. - -`int execle (const char *FILENAME, const char *ARG0, char *const ENV[], ...)' - `unistd.h' (POSIX.1): *Note Executing a File::. - -`int execlp (const char *FILENAME, const char *ARG0, ...)' - `unistd.h' (POSIX.1): *Note Executing a File::. - -`int execv (const char *FILENAME, char *const ARGV[])' - `unistd.h' (POSIX.1): *Note Executing a File::. - -`int execve (const char *FILENAME, char *const ARGV[], char *const ENV[])' - `unistd.h' (POSIX.1): *Note Executing a File::. - -`int execvp (const char *FILENAME, char *const ARGV[])' - `unistd.h' (POSIX.1): *Note Executing a File::. - -`int EXFULL' - `errno.h' (Linux???: Exchange full): *Note Error Codes::. - -`void _Exit (int STATUS)' - `stdlib.h' (ISO): *Note Termination Internals::. - -`void _exit (int STATUS)' - `unistd.h' (POSIX.1): *Note Termination Internals::. - -`void exit (int STATUS)' - `stdlib.h' (ISO): *Note Normal Termination::. - -`int EXIT_FAILURE' - `stdlib.h' (ISO): *Note Exit Status::. - -`int EXIT_SUCCESS' - `stdlib.h' (ISO): *Note Exit Status::. - -`double exp (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double exp10 (double X)' - `math.h' (GNU): *Note Exponents and Logarithms::. - -`float exp10f (float X)' - `math.h' (GNU): *Note Exponents and Logarithms::. - -`long double exp10l (long double X)' - `math.h' (GNU): *Note Exponents and Logarithms::. - -`double exp2 (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float exp2f (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double exp2l (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float expf (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double expl (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double expm1 (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float expm1f (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double expm1l (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`int EXPR_NEST_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`double fabs (double NUMBER)' - `math.h' (ISO): *Note Absolute Value::. - -`float fabsf (float NUMBER)' - `math.h' (ISO): *Note Absolute Value::. - -`long double fabsl (long double NUMBER)' - `math.h' (ISO): *Note Absolute Value::. - -`size_t __fbufsize (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Controlling Buffering::. - -`int fchdir (int FILEDES)' - `unistd.h' (XPG): *Note Working Directory::. - -`int fchmod (int FILEDES, int MODE)' - `sys/stat.h' (BSD): *Note Setting Permissions::. - -`int fchown (int FILEDES, int OWNER, int GROUP)' - `unistd.h' (BSD): *Note File Owner::. - -`int fclean (FILE *STREAM)' - `stdio.h' (GNU): *Note Cleaning Streams::. - -`int fclose (FILE *STREAM)' - `stdio.h' (ISO): *Note Closing Streams::. - -`int fcloseall (void)' - `stdio.h' (GNU): *Note Closing Streams::. - -`int fcntl (int FILEDES, int COMMAND, ...)' - `fcntl.h' (POSIX.1): *Note Control Operations::. - -`char * fcvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)' - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. - -`char * fcvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. - -`int fdatasync (int FILDES)' - `unistd.h' (POSIX): *Note Synchronizing I/O::. - -`int FD_CLOEXEC' - `fcntl.h' (POSIX.1): *Note Descriptor Flags::. - -`void FD_CLR (int FILEDES, fd_set *SET)' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`double fdim (double X, double Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`float fdimf (float X, float Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`long double fdiml (long double X, long double Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`int FD_ISSET (int FILEDES, fd_set *SET)' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`FILE * fdopen (int FILEDES, const char *OPENTYPE)' - `stdio.h' (POSIX.1): *Note Descriptors and Streams::. - -`void FD_SET (int FILEDES, fd_set *SET)' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`fd_set' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`int FD_SETSIZE' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`int F_DUPFD' - `fcntl.h' (POSIX.1): *Note Duplicating Descriptors::. - -`void FD_ZERO (fd_set *SET)' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`int feclearexcept (int EXCEPTS)' - `fenv.h' (ISO): *Note Status bit operations::. - -`int fedisableexcept (int EXCEPTS)' - `fenv.h' (GNU): *Note Control Functions::. - -`FE_DIVBYZERO' - `fenv.h' (ISO): *Note Status bit operations::. - -`FE_DOWNWARD' - `fenv.h' (ISO): *Note Rounding::. - -`int feenableexcept (int EXCEPTS)' - `fenv.h' (GNU): *Note Control Functions::. - -`int fegetenv (fenv_t *ENVP)' - `fenv.h' (ISO): *Note Control Functions::. - -`int fegetexcept (int EXCEPTS)' - `fenv.h' (GNU): *Note Control Functions::. - -`int fegetexceptflag (fexcept_t *FLAGP, int EXCEPTS)' - `fenv.h' (ISO): *Note Status bit operations::. - -`int fegetround (void)' - `fenv.h' (ISO): *Note Rounding::. - -`int feholdexcept (fenv_t *ENVP)' - `fenv.h' (ISO): *Note Control Functions::. - -`FE_INEXACT' - `fenv.h' (ISO): *Note Status bit operations::. - -`FE_INVALID' - `fenv.h' (ISO): *Note Status bit operations::. - -`int feof (FILE *STREAM)' - `stdio.h' (ISO): *Note EOF and Errors::. - -`int feof_unlocked (FILE *STREAM)' - `stdio.h' (GNU): *Note EOF and Errors::. - -`FE_OVERFLOW' - `fenv.h' (ISO): *Note Status bit operations::. - -`int feraiseexcept (int EXCEPTS)' - `fenv.h' (ISO): *Note Status bit operations::. - -`int ferror (FILE *STREAM)' - `stdio.h' (ISO): *Note EOF and Errors::. - -`int ferror_unlocked (FILE *STREAM)' - `stdio.h' (GNU): *Note EOF and Errors::. - -`int fesetenv (const fenv_t *ENVP)' - `fenv.h' (ISO): *Note Control Functions::. - -`int fesetexceptflag (const fexcept_t *FLAGP, int' - `fenv.h' (ISO): *Note Status bit operations::. - -`int fesetround (int ROUND)' - `fenv.h' (ISO): *Note Rounding::. - -`int fetestexcept (int EXCEPTS)' - `fenv.h' (ISO): *Note Status bit operations::. - -`FE_TONEAREST' - `fenv.h' (ISO): *Note Rounding::. - -`FE_TOWARDZERO' - `fenv.h' (ISO): *Note Rounding::. - -`FE_UNDERFLOW' - `fenv.h' (ISO): *Note Status bit operations::. - -`int feupdateenv (const fenv_t *ENVP)' - `fenv.h' (ISO): *Note Control Functions::. - -`FE_UPWARD' - `fenv.h' (ISO): *Note Rounding::. - -`int fflush (FILE *STREAM)' - `stdio.h' (ISO): *Note Flushing Buffers::. - -`int fflush_unlocked (FILE *STREAM)' - `stdio.h' (POSIX): *Note Flushing Buffers::. - -`int fgetc (FILE *STREAM)' - `stdio.h' (ISO): *Note Character Input::. - -`int fgetc_unlocked (FILE *STREAM)' - `stdio.h' (POSIX): *Note Character Input::. - -`int F_GETFD' - `fcntl.h' (POSIX.1): *Note Descriptor Flags::. - -`int F_GETFL' - `fcntl.h' (POSIX.1): *Note Getting File Status Flags::. - -`struct group * fgetgrent (FILE *STREAM)' - `grp.h' (SVID): *Note Scanning All Groups::. - -`int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' - `grp.h' (GNU): *Note Scanning All Groups::. - -`int F_GETLK' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`int F_GETOWN' - `fcntl.h' (BSD): *Note Interrupt Input::. - -`int fgetpos (FILE *STREAM, fpos_t *POSITION)' - `stdio.h' (ISO): *Note Portable Positioning::. - -`int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)' - `stdio.h' (Unix98): *Note Portable Positioning::. - -`struct passwd * fgetpwent (FILE *STREAM)' - `pwd.h' (SVID): *Note Scanning All Users::. - -`int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)' - `pwd.h' (GNU): *Note Scanning All Users::. - -`char * fgets (char *S, int COUNT, FILE *STREAM)' - `stdio.h' (ISO): *Note Line Input::. - -`char * fgets_unlocked (char *S, int COUNT, FILE *STREAM)' - `stdio.h' (GNU): *Note Line Input::. - -`wint_t fgetwc (FILE *STREAM)' - `wchar.h' (ISO): *Note Character Input::. - -`wint_t fgetwc_unlocked (FILE *STREAM)' - `wchar.h' (GNU): *Note Character Input::. - -`wchar_t * fgetws (wchar_t *WS, int COUNT, FILE *STREAM)' - `wchar.h' (ISO): *Note Line Input::. - -`wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE *STREAM)' - `wchar.h' (GNU): *Note Line Input::. - -`FILE' - `stdio.h' (ISO): *Note Streams::. - -`int FILENAME_MAX' - `stdio.h' (ISO): *Note Limits for Files::. - -`int fileno (FILE *STREAM)' - `stdio.h' (POSIX.1): *Note Descriptors and Streams::. - -`int fileno_unlocked (FILE *STREAM)' - `stdio.h' (GNU): *Note Descriptors and Streams::. - -`int finite (double X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int finitef (float X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int finitel (long double X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int __flbf (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Controlling Buffering::. - -`void flockfile (FILE *STREAM)' - `stdio.h' (POSIX): *Note Streams and Threads::. +`LDBL_MIN_EXP' + These are similar to `FLT_MIN_EXP', but for the data types + `double' and `long double', respectively. -`double floor (double X)' - `math.h' (ISO): *Note Rounding Functions::. +`FLT_MIN_10_EXP' + This is the minimum negative integer such that `10' raised to this + power minus 1 can be represented as a normalized floating point + number of type `float'. This is supposed to be `-37' or even less. -`float floorf (float X)' - `math.h' (ISO): *Note Rounding Functions::. +`DBL_MIN_10_EXP' +`LDBL_MIN_10_EXP' + These are similar to `FLT_MIN_10_EXP', but for the data types + `double' and `long double', respectively. -`long double floorl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. +`FLT_MAX_EXP' + This is the largest possible exponent value for type `float'. More + precisely, this is the maximum positive integer such that value + `FLT_RADIX' raised to this power minus 1 can be represented as a + floating point number of type `float'. -`FLT_DIG' - `float.h' (ISO): *Note Floating Point Parameters::. +`DBL_MAX_EXP' +`LDBL_MAX_EXP' + These are similar to `FLT_MAX_EXP', but for the data types + `double' and `long double', respectively. -`FLT_EPSILON' - `float.h' (ISO): *Note Floating Point Parameters::. +`FLT_MAX_10_EXP' + This is the maximum positive integer such that `10' raised to this + power minus 1 can be represented as a normalized floating point + number of type `float'. This is supposed to be at least `37'. -`FLT_MANT_DIG' - `float.h' (ISO): *Note Floating Point Parameters::. +`DBL_MAX_10_EXP' +`LDBL_MAX_10_EXP' + These are similar to `FLT_MAX_10_EXP', but for the data types + `double' and `long double', respectively. `FLT_MAX' - `float.h' (ISO): *Note Floating Point Parameters::. + The value of this macro is the maximum number representable in type + `float'. It is supposed to be at least `1E+37'. The value has + type `float'. -`FLT_MAX_10_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. + The smallest representable number is `- FLT_MAX'. -`FLT_MAX_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. +`DBL_MAX' +`LDBL_MAX' + These are similar to `FLT_MAX', but for the data types `double' + and `long double', respectively. The type of the macro's value is + the same as the type it describes. `FLT_MIN' - `float.h' (ISO): *Note Floating Point Parameters::. - -`FLT_MIN_10_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. - -`FLT_MIN_EXP' - `float.h' (ISO): *Note Floating Point Parameters::. - -`FLT_RADIX' - `float.h' (ISO): *Note Floating Point Parameters::. - -`FLT_ROUNDS' - `float.h' (ISO): *Note Floating Point Parameters::. - -`void _flushlbf (void)' - `stdio.h' (GNU): *Note Flushing Buffers::. - -`tcflag_t FLUSHO' - `termios.h' (BSD): *Note Local Modes::. - -`double fma (double X, double Y, double Z)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`float fmaf (float X, float Y, float Z)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`long double fmal (long double X, long double Y, long double Z)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`double fmax (double X, double Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`float fmaxf (float X, float Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`long double fmaxl (long double X, long double Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`FILE * fmemopen (void *BUF, size_t SIZE, const char *OPENTYPE)' - `stdio.h' (GNU): *Note String Streams::. - -`double fmin (double X, double Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`float fminf (float X, float Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`long double fminl (long double X, long double Y)' - `math.h' (ISO): *Note Misc FP Arithmetic::. - -`double fmod (double NUMERATOR, double DENOMINATOR)' - `math.h' (ISO): *Note Remainder Functions::. - -`float fmodf (float NUMERATOR, float DENOMINATOR)' - `math.h' (ISO): *Note Remainder Functions::. - -`long double fmodl (long double NUMERATOR, long double DENOMINATOR)' - `math.h' (ISO): *Note Remainder Functions::. - -`int fmtmsg (long int CLASSIFICATION, const char *LABEL, int SEVERITY, const char *TEXT, const char *ACTION, const char *TAG)' - `fmtmsg.h' (XPG): *Note Printing Formatted Messages::. - -`int fnmatch (const char *PATTERN, const char *STRING, int FLAGS)' - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. - -`FNM_CASEFOLD' - `fnmatch.h' (GNU): *Note Wildcard Matching::. - -`FNM_FILE_NAME' - `fnmatch.h' (GNU): *Note Wildcard Matching::. - -`FNM_LEADING_DIR' - `fnmatch.h' (GNU): *Note Wildcard Matching::. - -`FNM_NOESCAPE' - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. - -`FNM_PATHNAME' - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. - -`FNM_PERIOD' - `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. - -`int F_OK' - `unistd.h' (POSIX.1): *Note Testing File Access::. - -`FILE * fopen (const char *FILENAME, const char *OPENTYPE)' - `stdio.h' (ISO): *Note Opening Streams::. - -`FILE * fopen64 (const char *FILENAME, const char *OPENTYPE)' - `stdio.h' (Unix98): *Note Opening Streams::. - -`FILE * fopencookie (void *COOKIE, const char *OPENTYPE, cookie_io_functions_t IO-FUNCTIONS)' - `stdio.h' (GNU): *Note Streams and Cookies::. - -`int FOPEN_MAX' - `stdio.h' (ISO): *Note Opening Streams::. - -`pid_t fork (void)' - `unistd.h' (POSIX.1): *Note Creating a Process::. - -`int forkpty (int *AMASTER, char *NAME, struct termios *TERMP, struct winsize *WINP)' - `pty.h' (BSD): *Note Pseudo-Terminal Pairs::. - -`long int fpathconf (int FILEDES, int PARAMETER)' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`int fpclassify (_float-type_ X)' - `math.h' (ISO): *Note Floating Point Classes::. - -`FPE_DECOVF_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_FLTDIV_FAULT' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_FLTDIV_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_FLTOVF_FAULT' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_FLTOVF_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_FLTUND_FAULT' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_FLTUND_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_INTDIV_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`FPE_INTOVF_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`size_t __fpending (FILE *STREAM) The `__fpending'' - `stdio_ext.h' (GNU): *Note Controlling Buffering::. - -`FPE_SUBRNG_TRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`int FP_ILOGB0' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`int FP_ILOGBNAN' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`fpos64_t' - `stdio.h' (Unix98): *Note Portable Positioning::. - -`fpos_t' - `stdio.h' (ISO): *Note Portable Positioning::. - -`int fprintf (FILE *STREAM, const char *TEMPLATE, ...)' - `stdio.h' (ISO): *Note Formatted Output Functions::. - -`void __fpurge (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Flushing Buffers::. - -`int fputc (int C, FILE *STREAM)' - `stdio.h' (ISO): *Note Simple Output::. - -`int fputc_unlocked (int C, FILE *STREAM)' - `stdio.h' (POSIX): *Note Simple Output::. - -`int fputs (const char *S, FILE *STREAM)' - `stdio.h' (ISO): *Note Simple Output::. - -`int fputs_unlocked (const char *S, FILE *STREAM)' - `stdio.h' (GNU): *Note Simple Output::. - -`wint_t fputwc (wchar_t WC, FILE *STREAM)' - `wchar.h' (ISO): *Note Simple Output::. - -`wint_t fputwc_unlocked (wint_t WC, FILE *STREAM)' - `wchar.h' (POSIX): *Note Simple Output::. - -`int fputws (const wchar_t *WS, FILE *STREAM)' - `wchar.h' (ISO): *Note Simple Output::. - -`int fputws_unlocked (const wchar_t *WS, FILE *STREAM)' - `wchar.h' (GNU): *Note Simple Output::. - -`F_RDLCK' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`size_t fread (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' - `stdio.h' (ISO): *Note Block Input/Output::. - -`int __freadable (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Opening Streams::. - -`int __freading (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Opening Streams::. - -`size_t fread_unlocked (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' - `stdio.h' (GNU): *Note Block Input/Output::. - -`void free (void *PTR)' - `malloc.h', `stdlib.h' (ISO): *Note Freeing after Malloc::. - -`__free_hook' - `malloc.h' (GNU): *Note Hooks for Malloc::. - -`FILE * freopen (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)' - `stdio.h' (ISO): *Note Opening Streams::. - -`FILE * freopen64 (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)' - `stdio.h' (Unix98): *Note Opening Streams::. - -`double frexp (double VALUE, int *EXPONENT)' - `math.h' (ISO): *Note Normalization Functions::. - -`float frexpf (float VALUE, int *EXPONENT)' - `math.h' (ISO): *Note Normalization Functions::. - -`long double frexpl (long double VALUE, int *EXPONENT)' - `math.h' (ISO): *Note Normalization Functions::. - -`int fscanf (FILE *STREAM, const char *TEMPLATE, ...)' - `stdio.h' (ISO): *Note Formatted Input Functions::. - -`int fseek (FILE *STREAM, long int OFFSET, int WHENCE)' - `stdio.h' (ISO): *Note File Positioning::. - -`int fseeko (FILE *STREAM, off_t OFFSET, int WHENCE)' - `stdio.h' (Unix98): *Note File Positioning::. - -`int fseeko64 (FILE *STREAM, off64_t OFFSET, int WHENCE)' - `stdio.h' (Unix98): *Note File Positioning::. - -`int F_SETFD' - `fcntl.h' (POSIX.1): *Note Descriptor Flags::. - -`int F_SETFL' - `fcntl.h' (POSIX.1): *Note Getting File Status Flags::. - -`int F_SETLK' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`int F_SETLKW' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`int __fsetlocking (FILE *STREAM, int TYPE)' - `stdio_ext.h' (GNU): *Note Streams and Threads::. - -`int F_SETOWN' - `fcntl.h' (BSD): *Note Interrupt Input::. - -`int fsetpos (FILE *STREAM, const fpos_t *POSITION)' - `stdio.h' (ISO): *Note Portable Positioning::. - -`int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)' - `stdio.h' (Unix98): *Note Portable Positioning::. - -`int fstat (int FILEDES, struct stat *BUF)' - `sys/stat.h' (POSIX.1): *Note Reading Attributes::. - -`int fstat64 (int FILEDES, struct stat64 *BUF)' - `sys/stat.h' (Unix98): *Note Reading Attributes::. - -`int fsync (int FILDES)' - `unistd.h' (POSIX): *Note Synchronizing I/O::. - -`long int ftell (FILE *STREAM)' - `stdio.h' (ISO): *Note File Positioning::. - -`off_t ftello (FILE *STREAM)' - `stdio.h' (Unix98): *Note File Positioning::. - -`off64_t ftello64 (FILE *STREAM)' - `stdio.h' (Unix98): *Note File Positioning::. - -`int ftruncate (int FD, off_t LENGTH)' - `unistd.h' (POSIX): *Note File Size::. - -`int ftruncate64 (int ID, off64_t LENGTH)' - `unistd.h' (Unix98): *Note File Size::. - -`int ftrylockfile (FILE *STREAM)' - `stdio.h' (POSIX): *Note Streams and Threads::. - -`int ftw (const char *FILENAME, __ftw_func_t FUNC, int DESCRIPTORS)' - `ftw.h' (SVID): *Note Working with Directory Trees::. - -`int ftw64 (const char *FILENAME, __ftw64_func_t FUNC, int DESCRIPTORS)' - `ftw.h' (Unix98): *Note Working with Directory Trees::. - -`__ftw64_func_t' - `ftw.h' (GNU): *Note Working with Directory Trees::. - -`__ftw_func_t' - `ftw.h' (GNU): *Note Working with Directory Trees::. - -`F_UNLCK' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`void funlockfile (FILE *STREAM)' - `stdio.h' (POSIX): *Note Streams and Threads::. - -`int fwide (FILE *STREAM, int MODE)' - `wchar.h' (ISO): *Note Streams and I18N::. - -`int fwprintf (FILE *STREAM, const wchar_t *TEMPLATE, ...)' - `wchar.h' (ISO): *Note Formatted Output Functions::. - -`int __fwritable (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Opening Streams::. - -`size_t fwrite (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' - `stdio.h' (ISO): *Note Block Input/Output::. - -`size_t fwrite_unlocked (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' - `stdio.h' (GNU): *Note Block Input/Output::. - -`int __fwriting (FILE *STREAM)' - `stdio_ext.h' (GNU): *Note Opening Streams::. - -`F_WRLCK' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`int fwscanf (FILE *STREAM, const wchar_t *TEMPLATE, ...)' - `wchar.h' (ISO): *Note Formatted Input Functions::. - -`double gamma (double X)' - `math.h' (SVID): *Note Special Functions::. - -`float gammaf (float X)' - `math.h' (SVID): *Note Special Functions::. - -`long double gammal (long double X)' - `math.h' (SVID): *Note Special Functions::. - -`void (*__gconv_end_fct) (struct gconv_step *)' - `gconv.h' (GNU): *Note glibc iconv Implementation::. - -`int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, const char **, const char *, size_t *, int)' - `gconv.h' (GNU): *Note glibc iconv Implementation::. - -`int (*__gconv_init_fct) (struct __gconv_step *)' - `gconv.h' (GNU): *Note glibc iconv Implementation::. - -`char * gcvt (double VALUE, int NDIGIT, char *BUF)' - `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. - -`int getc (FILE *STREAM)' - `stdio.h' (ISO): *Note Character Input::. - -`int getchar (void)' - `stdio.h' (ISO): *Note Character Input::. - -`int getchar_unlocked (void)' - `stdio.h' (POSIX): *Note Character Input::. - -`int getc_unlocked (FILE *STREAM)' - `stdio.h' (POSIX): *Note Character Input::. - -`char * get_current_dir_name (void)' - `unistd.h' (GNU): *Note Working Directory::. - -`char * getcwd (char *BUFFER, size_t SIZE)' - `unistd.h' (POSIX.1): *Note Working Directory::. - -`struct tm * getdate (const char *STRING)' - `time.h' (Unix98): *Note General Time String Parsing::. - -`getdate_err' - `time.h' (Unix98): *Note General Time String Parsing::. - -`int getdate_r (const char *STRING, struct tm *TP)' - `time.h' (GNU): *Note General Time String Parsing::. - -`ssize_t getdelim (char **LINEPTR, size_t *N, int DELIMITER, FILE *STREAM)' - `stdio.h' (GNU): *Note Line Input::. - -`int getdomainnname (char *NAME, size_t LENGTH)' - `unistd.h' (???): *Note Host Identification::. - -`gid_t getegid (void)' - `unistd.h' (POSIX.1): *Note Reading Persona::. - -`char * getenv (const char *NAME)' - `stdlib.h' (ISO): *Note Environment Access::. - -`uid_t geteuid (void)' - `unistd.h' (POSIX.1): *Note Reading Persona::. - -`struct fstab * getfsent (void)' - `fstab.h' (BSD): *Note fstab::. - -`struct fstab * getfsfile (const char *NAME)' - `fstab.h' (BSD): *Note fstab::. - -`struct fstab * getfsspec (const char *NAME)' - `fstab.h' (BSD): *Note fstab::. - -`gid_t getgid (void)' - `unistd.h' (POSIX.1): *Note Reading Persona::. - -`struct group * getgrent (void)' - `grp.h' (SVID, BSD): *Note Scanning All Groups::. - -`int getgrent_r (struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' - `grp.h' (GNU): *Note Scanning All Groups::. - -`struct group * getgrgid (gid_t GID)' - `grp.h' (POSIX.1): *Note Lookup Group::. - -`int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' - `grp.h' (POSIX.1c): *Note Lookup Group::. - -`struct group * getgrnam (const char *NAME)' - `grp.h' (SVID, BSD): *Note Lookup Group::. - -`int getgrnam_r (const char *NAME, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' - `grp.h' (POSIX.1c): *Note Lookup Group::. - -`int getgroups (int COUNT, gid_t *GROUPS)' - `unistd.h' (POSIX.1): *Note Reading Persona::. - -`struct hostent * gethostbyaddr (const char *ADDR, size_t LENGTH, int FORMAT)' - `netdb.h' (BSD): *Note Host Names::. - -`int gethostbyaddr_r (const char *ADDR, size_t LENGTH, int FORMAT, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)' - `netdb.h' (GNU): *Note Host Names::. - -`struct hostent * gethostbyname (const char *NAME)' - `netdb.h' (BSD): *Note Host Names::. - -`struct hostent * gethostbyname2 (const char *NAME, int AF)' - `netdb.h' (IPv6 Basic API): *Note Host Names::. - -`int gethostbyname2_r (const char *NAME, int AF, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)' - `netdb.h' (GNU): *Note Host Names::. - -`int gethostbyname_r (const char *restrict NAME, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)' - `netdb.h' (GNU): *Note Host Names::. - -`struct hostent * gethostent (void)' - `netdb.h' (BSD): *Note Host Names::. - -`long int gethostid (void)' - `unistd.h' (BSD): *Note Host Identification::. - -`int gethostname (char *NAME, size_t SIZE)' - `unistd.h' (BSD): *Note Host Identification::. - -`int getitimer (int WHICH, struct itimerval *OLD)' - `sys/time.h' (BSD): *Note Setting an Alarm::. - -`ssize_t getline (char **LINEPTR, size_t *N, FILE *STREAM)' - `stdio.h' (GNU): *Note Line Input::. - -`int getloadavg (double LOADAVG[], int NELEM)' - `stdlib.h' (BSD): *Note Processor Resources::. - -`char * getlogin (void)' - `unistd.h' (POSIX.1): *Note Who Logged In::. - -`struct mntent * getmntent (FILE *STREAM)' - `mntent.h' (BSD): *Note mtab::. - -`struct mntent * getmntent_r (FILE *STREAM, struct mentent *RESULT, char *BUFFER, int BUFSIZE)' - `mntent.h' (BSD): *Note mtab::. - -`struct netent * getnetbyaddr (unsigned long int NET, int TYPE)' - `netdb.h' (BSD): *Note Networks Database::. - -`struct netent * getnetbyname (const char *NAME)' - `netdb.h' (BSD): *Note Networks Database::. - -`struct netent * getnetent (void)' - `netdb.h' (BSD): *Note Networks Database::. - -`int getnetgrent (char **HOSTP, char **USERP, char **DOMAINP)' - `netdb.h' (BSD): *Note Lookup Netgroup::. - -`int getnetgrent_r (char **HOSTP, char **USERP, char **DOMAINP, char *BUFFER, int BUFLEN)' - `netdb.h' (GNU): *Note Lookup Netgroup::. - -`int get_nprocs (void)' - `sys/sysinfo.h' (GNU): *Note Processor Resources::. - -`int get_nprocs_conf (void)' - `sys/sysinfo.h' (GNU): *Note Processor Resources::. - -`int getopt (int ARGC, char **ARGV, const char *OPTIONS)' - `unistd.h' (POSIX.2): *Note Using Getopt::. - -`int getopt_long (int ARGC, char *const *ARGV, const char *SHORTOPTS, struct option *LONGOPTS, int *INDEXPTR)' - `getopt.h' (GNU): *Note Getopt Long Options::. - -`int getopt_long_only (int ARGC, char *const *ARGV, const char *SHORTOPTS, struct option *LONGOPTS, int *INDEXPTR)' - `getopt.h' (GNU): *Note Getopt Long Options::. - -`int getpagesize (void)' - `unistd.h' (BSD): *Note Query Memory Parameters::. - -`char * getpass (const char *PROMPT)' - `unistd.h' (BSD): *Note getpass::. - -`int getpeername (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)' - `sys/socket.h' (BSD): *Note Who is Connected::. - -`int getpgid (pid_t PID)' - `unistd.h' (SVID): *Note Process Group Functions::. - -`pid_t getpgrp (pid_t PID)' - `unistd.h' (BSD): *Note Process Group Functions::. - -`pid_t getpgrp (void)' - `unistd.h' (POSIX.1): *Note Process Group Functions::. - -`pid_t getpid (void)' - `unistd.h' (POSIX.1): *Note Process Identification::. - -`pid_t getppid (void)' - `unistd.h' (POSIX.1): *Note Process Identification::. - -`int getpriority (int CLASS, int ID)' - `sys/resource.h' (BSD,POSIX): *Note Traditional Scheduling - Functions::. - -`struct protoent * getprotobyname (const char *NAME)' - `netdb.h' (BSD): *Note Protocols Database::. - -`struct protoent * getprotobynumber (int PROTOCOL)' - `netdb.h' (BSD): *Note Protocols Database::. - -`struct protoent * getprotoent (void)' - `netdb.h' (BSD): *Note Protocols Database::. - -`int getpt (void)' - `stdlib.h' (GNU): *Note Allocation::. - -`struct passwd * getpwent (void)' - `pwd.h' (POSIX.1): *Note Scanning All Users::. - -`int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER, int BUFLEN, struct passwd **RESULT)' - `pwd.h' (GNU): *Note Scanning All Users::. - -`struct passwd * getpwnam (const char *NAME)' - `pwd.h' (POSIX.1): *Note Lookup User::. - -`int getpwnam_r (const char *NAME, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)' - `pwd.h' (POSIX.1c): *Note Lookup User::. - -`struct passwd * getpwuid (uid_t UID)' - `pwd.h' (POSIX.1): *Note Lookup User::. - -`int getpwuid_r (uid_t UID, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)' - `pwd.h' (POSIX.1c): *Note Lookup User::. - -`int getrlimit (int RESOURCE, struct rlimit *RLP)' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`int getrlimit64 (int RESOURCE, struct rlimit64 *RLP)' - `sys/resource.h' (Unix98): *Note Limits on Resources::. - -`int getrusage (int PROCESSES, struct rusage *RUSAGE)' - `sys/resource.h' (BSD): *Note Resource Usage::. - -`char * gets (char *S)' - `stdio.h' (ISO): *Note Line Input::. - -`struct servent * getservbyname (const char *NAME, const char *PROTO)' - `netdb.h' (BSD): *Note Services Database::. - -`struct servent * getservbyport (int PORT, const char *PROTO)' - `netdb.h' (BSD): *Note Services Database::. - -`struct servent * getservent (void)' - `netdb.h' (BSD): *Note Services Database::. - -`pid_t getsid (pid_t PID)' - `unistd.h' (SVID): *Note Process Group Functions::. - -`int getsockname (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)' - `sys/socket.h' (BSD): *Note Reading Address::. - -`int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t *OPTLEN-PTR)' - `sys/socket.h' (BSD): *Note Socket Option Functions::. - -`int getsubopt (char **OPTIONP, const char* const *TOKENS, char **VALUEP)' - `stdlib.h' (stdlib.h): *Note Suboptions Example: Suboptions. - -`char * gettext (const char *MSGID)' - `libintl.h' (GNU): *Note Translation with gettext::. - -`int gettimeofday (struct timeval *TP, struct timezone *TZP)' - `sys/time.h' (BSD): *Note High-Resolution Calendar::. - -`uid_t getuid (void)' - `unistd.h' (POSIX.1): *Note Reading Persona::. - -`mode_t getumask (void)' - `sys/stat.h' (GNU): *Note Setting Permissions::. - -`struct utmp * getutent (void)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`int getutent_r (struct utmp *BUFFER, struct utmp **RESULT)' - `utmp.h' (GNU): *Note Manipulating the Database::. - -`struct utmp * getutid (const struct utmp *ID)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`int getutid_r (const struct utmp *ID, struct utmp *BUFFER, struct utmp **RESULT)' - `utmp.h' (GNU): *Note Manipulating the Database::. - -`struct utmp * getutline (const struct utmp *LINE)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`int getutline_r (const struct utmp *LINE, struct utmp *BUFFER, struct utmp **RESULT)' - `utmp.h' (GNU): *Note Manipulating the Database::. - -`int getutmp (const struct utmpx *utmpx, struct utmp *utmp)' - `utmp.h' (GNU): *Note XPG Functions::. - -`int getutmpx (const struct utmp *utmp, struct utmpx *utmpx)' - `utmp.h' (GNU): *Note XPG Functions::. - -`struct utmpx * getutxent (void)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`struct utmpx * getutxid (const struct utmpx *ID)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`struct utmpx * getutxline (const struct utmpx *LINE)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int getw (FILE *STREAM)' - `stdio.h' (SVID): *Note Character Input::. - -`wint_t getwc (FILE *STREAM)' - `wchar.h' (ISO): *Note Character Input::. - -`wint_t getwchar (void)' - `wchar.h' (ISO): *Note Character Input::. - -`wint_t getwchar_unlocked (void)' - `wchar.h' (GNU): *Note Character Input::. - -`wint_t getwc_unlocked (FILE *STREAM)' - `wchar.h' (GNU): *Note Character Input::. - -`char * getwd (char *BUFFER)' - `unistd.h' (BSD): *Note Working Directory::. - -`gid_t' - `sys/types.h' (POSIX.1): *Note Reading Persona::. - -`int glob (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob_t *VECTOR-PTR)' - `glob.h' (POSIX.2): *Note Calling Glob::. - -`int glob64 (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob64_t *VECTOR-PTR)' - `glob.h' (GNU): *Note Calling Glob::. - -`glob64_t' - `glob.h' (GNU): *Note Calling Glob::. - -`GLOB_ABORTED' - `glob.h' (POSIX.2): *Note Calling Glob::. - -`GLOB_ALTDIRFUNC' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_APPEND' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`GLOB_BRACE' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_DOOFFS' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`GLOB_ERR' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`void globfree (glob_t *PGLOB)' - `glob.h' (POSIX.2): *Note More Flags for Globbing::. - -`void globfree64 (glob64_t *PGLOB)' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_MAGCHAR' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_MARK' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`GLOB_NOCHECK' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`GLOB_NOESCAPE' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`GLOB_NOMAGIC' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_NOMATCH' - `glob.h' (POSIX.2): *Note Calling Glob::. - -`GLOB_NOSORT' - `glob.h' (POSIX.2): *Note Flags for Globbing::. - -`GLOB_NOSPACE' - `glob.h' (POSIX.2): *Note Calling Glob::. - -`GLOB_ONLYDIR' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_PERIOD' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`glob_t' - `glob.h' (POSIX.2): *Note Calling Glob::. - -`GLOB_TILDE' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`GLOB_TILDE_CHECK' - `glob.h' (GNU): *Note More Flags for Globbing::. - -`struct tm * gmtime (const time_t *TIME)' - `time.h' (ISO): *Note Broken-down Time::. - -`struct tm * gmtime_r (const time_t *TIME, struct tm *RESULTP)' - `time.h' (POSIX.1c): *Note Broken-down Time::. - -`_GNU_SOURCE' - (GNU): *Note Feature Test Macros::. - -`int grantpt (int FILEDES)' - `stdlib.h' (SVID, XPG4.2): *Note Allocation::. - -`int gsignal (int SIGNUM)' - `signal.h' (SVID): *Note Signaling Yourself::. - -`int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)' - `sgtty.h' (BSD): *Note BSD Terminal Modes::. - -`char * hasmntopt (const struct mntent *MNT, const char *OPT)' - `mntent.h' (BSD): *Note mtab::. - -`int hcreate (size_t NEL)' - `search.h' (SVID): *Note Hash Search Function::. - -`int hcreate_r (size_t NEL, struct hsearch_data *HTAB)' - `search.h' (GNU): *Note Hash Search Function::. - -`void hdestroy (void)' - `search.h' (SVID): *Note Hash Search Function::. - -`void hdestroy_r (struct hsearch_data *HTAB)' - `search.h' (GNU): *Note Hash Search Function::. - -`HOST_NOT_FOUND' - `netdb.h' (BSD): *Note Host Names::. - -`ENTRY * hsearch (ENTRY ITEM, ACTION ACTION)' - `search.h' (SVID): *Note Hash Search Function::. - -`int hsearch_r (ENTRY ITEM, ACTION ACTION, ENTRY **RETVAL, struct hsearch_data *HTAB)' - `search.h' (GNU): *Note Hash Search Function::. - -`uint32_t htonl (uint32_t HOSTLONG)' - `netinet/in.h' (BSD): *Note Byte Order::. - -`uint16_t htons (uint16_t HOSTSHORT)' - `netinet/in.h' (BSD): *Note Byte Order::. - -`double HUGE_VAL' - `math.h' (ISO): *Note Math Error Reporting::. - -`float HUGE_VALF' - `math.h' (ISO): *Note Math Error Reporting::. - -`long double HUGE_VALL' - `math.h' (ISO): *Note Math Error Reporting::. - -`tcflag_t HUPCL' - `termios.h' (POSIX.1): *Note Control Modes::. - -`double hypot (double X, double Y)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float hypotf (float X, float Y)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double hypotl (long double X, long double Y)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`tcflag_t ICANON' - `termios.h' (POSIX.1): *Note Local Modes::. - -`size_t iconv (iconv_t CD, char **INBUF, size_t *INBYTESLEFT, char **OUTBUF, size_t *OUTBYTESLEFT)' - `iconv.h' (XPG2): *Note Generic Conversion Interface::. - -`int iconv_close (iconv_t CD)' - `iconv.h' (XPG2): *Note Generic Conversion Interface::. - -`iconv_t iconv_open (const char *TOCODE, const char *FROMCODE)' - `iconv.h' (XPG2): *Note Generic Conversion Interface::. - -`iconv_t' - `iconv.h' (XPG2): *Note Generic Conversion Interface::. - -`tcflag_t ICRNL' - `termios.h' (POSIX.1): *Note Input Modes::. - -`tcflag_t IEXTEN' - `termios.h' (POSIX.1): *Note Local Modes::. - -`void if_freenameindex (struct if_nameindex *ptr)' - `net/if.h' (IPv6 basic API): *Note Interface Naming::. - -`char * if_indextoname (unsigned int ifindex, char *ifname)' - `net/if.h' (IPv6 basic API): *Note Interface Naming::. - -`struct if_nameindex * if_nameindex (void)' - `net/if.h' (IPv6 basic API): *Note Interface Naming::. - -`unsigned int if_nametoindex (const char *ifname)' - `net/if.h' (IPv6 basic API): *Note Interface Naming::. - -`size_t IFNAMSIZ' - `net/if.h' (net/if.h): *Note Interface Naming::. - -`int IFTODT (mode_t MODE)' - `dirent.h' (BSD): *Note Directory Entries::. - -`tcflag_t IGNBRK' - `termios.h' (POSIX.1): *Note Input Modes::. - -`tcflag_t IGNCR' - `termios.h' (POSIX.1): *Note Input Modes::. - -`tcflag_t IGNPAR' - `termios.h' (POSIX.1): *Note Input Modes::. - -`int ilogb (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`int ilogbf (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`int ilogbl (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`intmax_t imaxabs (intmax_t NUMBER)' - `inttypes.h' (ISO): *Note Absolute Value::. - -`tcflag_t IMAXBEL' - `termios.h' (BSD): *Note Input Modes::. - -`imaxdiv_t imaxdiv (intmax_t NUMERATOR, intmax_t DENOMINATOR)' - `inttypes.h' (ISO): *Note Integer Division::. - -`imaxdiv_t' - `inttypes.h' (ISO): *Note Integer Division::. - -`struct in6_addr in6addr_any' - `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::. - -`struct in6_addr in6addr_loopback' - `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::. - -`uint32_t INADDR_ANY' - `netinet/in.h' (BSD): *Note Host Address Data Type::. - -`uint32_t INADDR_BROADCAST' - `netinet/in.h' (BSD): *Note Host Address Data Type::. - -`uint32_t INADDR_LOOPBACK' - `netinet/in.h' (BSD): *Note Host Address Data Type::. - -`uint32_t INADDR_NONE' - `netinet/in.h' (BSD): *Note Host Address Data Type::. - -`char * index (const char *STRING, int C)' - `string.h' (BSD): *Note Search Functions::. - -`uint32_t inet_addr (const char *NAME)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`int inet_aton (const char *NAME, struct in_addr *ADDR)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`uint32_t inet_lnaof (struct in_addr ADDR)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`struct in_addr inet_makeaddr (uint32_t NET, uint32_t LOCAL)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`uint32_t inet_netof (struct in_addr ADDR)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`uint32_t inet_network (const char *NAME)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`char * inet_ntoa (struct in_addr ADDR)' - `arpa/inet.h' (BSD): *Note Host Address Functions::. - -`const char * inet_ntop (int AF, const void *CP, char *BUF, size_t LEN)' - `arpa/inet.h' (IPv6 basic API): *Note Host Address Functions::. - -`int inet_pton (int AF, const char *CP, void *BUF)' - `arpa/inet.h' (IPv6 basic API): *Note Host Address Functions::. - -`float INFINITY' - `math.h' (ISO): *Note Infinity and NaN::. - -`double infnan (int ERROR)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int initgroups (const char *USER, gid_t GID)' - `grp.h' (BSD): *Note Setting Groups::. - -`INIT_PROCESS' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`INIT_PROCESS' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`void * initstate (unsigned int SEED, void *STATE, size_t SIZE)' - `stdlib.h' (BSD): *Note BSD Random::. - -`tcflag_t INLCR' - `termios.h' (POSIX.1): *Note Input Modes::. - -`int innetgr (const char *NETGROUP, const char *HOST, const char *USER, const char *DOMAIN)' - `netdb.h' (BSD): *Note Netgroup Membership::. - -`ino64_t' - `sys/types.h' (Unix98): *Note Attribute Meanings::. - -`ino_t' - `sys/types.h' (POSIX.1): *Note Attribute Meanings::. - -`tcflag_t INPCK' - `termios.h' (POSIX.1): *Note Input Modes::. - -`long int get_avphys_pages (void)' - `sys/sysinfo.h' (GNU): *Note Query Memory Parameters::. - -`long int get_phys_pages (void)' - `sys/sysinfo.h' (GNU): *Note Query Memory Parameters::. - -`long int syscall (long int SYSNO, ...)' - `unistd.h' (???): *Note System Calls::. - -`INT_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`INT_MIN' - `limits.h' (ISO): *Note Range of Type::. - -`int _IOFBF' - `stdio.h' (ISO): *Note Controlling Buffering::. - -`int _IOLBF' - `stdio.h' (ISO): *Note Controlling Buffering::. - -`int _IONBF' - `stdio.h' (ISO): *Note Controlling Buffering::. - -`int IPPORT_RESERVED' - `netinet/in.h' (BSD): *Note Ports::. - -`int IPPORT_USERRESERVED' - `netinet/in.h' (BSD): *Note Ports::. - -`int isalnum (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isalpha (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isascii (int C)' - `ctype.h' (SVID, BSD): *Note Classification of Characters::. - -`int isatty (int FILEDES)' - `unistd.h' (POSIX.1): *Note Is It a Terminal::. - -`int isblank (int C)' - `ctype.h' (GNU): *Note Classification of Characters::. - -`int iscntrl (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isdigit (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isfinite (_float-type_ X)' - `math.h' (ISO): *Note Floating Point Classes::. - -`int isgraph (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isgreater (_real-floating_ X, _real-floating_ Y)' - `math.h' (ISO): *Note FP Comparison Functions::. - -`int isgreaterequal (_real-floating_ X, _real-floating_ Y)' - `math.h' (ISO): *Note FP Comparison Functions::. - -`tcflag_t ISIG' - `termios.h' (POSIX.1): *Note Local Modes::. - -`int isinf (double X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int isinff (float X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int isinfl (long double X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int isless (_real-floating_ X, _real-floating_ Y)' - `math.h' (ISO): *Note FP Comparison Functions::. - -`int islessequal (_real-floating_ X, _real-floating_ Y)' - `math.h' (ISO): *Note FP Comparison Functions::. - -`int islessgreater (_real-floating_ X, _real-floating_ Y)' - `math.h' (ISO): *Note FP Comparison Functions::. - -`int islower (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isnan (_float-type_ X)' - `math.h' (ISO): *Note Floating Point Classes::. - -`int isnan (double X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int isnanf (float X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int isnanl (long double X)' - `math.h' (BSD): *Note Floating Point Classes::. - -`int isnormal (_float-type_ X)' - `math.h' (ISO): *Note Floating Point Classes::. - -`_ISOC99_SOURCE' - (GNU): *Note Feature Test Macros::. - -`int isprint (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int ispunct (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int isspace (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`tcflag_t ISTRIP' - `termios.h' (POSIX.1): *Note Input Modes::. - -`int isunordered (_real-floating_ X, _real-floating_ Y)' - `math.h' (ISO): *Note FP Comparison Functions::. - -`int isupper (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`int iswalnum (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswalpha (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswblank (wint_t WC)' - `wctype.h' (GNU): *Note Classification of Wide Characters::. - -`int iswcntrl (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswctype (wint_t WC, wctype_t DESC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswdigit (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswgraph (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswlower (wint_t WC)' - `ctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswprint (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswpunct (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswspace (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswupper (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int iswxdigit (wint_t WC)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int isxdigit (int C)' - `ctype.h' (ISO): *Note Classification of Characters::. - -`ITIMER_PROF' - `sys/time.h' (BSD): *Note Setting an Alarm::. - -`ITIMER_REAL' - `sys/time.h' (BSD): *Note Setting an Alarm::. - -`ITIMER_VIRTUAL' - `sys/time.h' (BSD): *Note Setting an Alarm::. - -`tcflag_t IXANY' - `termios.h' (BSD): *Note Input Modes::. - -`tcflag_t IXOFF' - `termios.h' (POSIX.1): *Note Input Modes::. - -`tcflag_t IXON' - `termios.h' (POSIX.1): *Note Input Modes::. - -`double j0 (double X)' - `math.h' (SVID): *Note Special Functions::. - -`float j0f (float X)' - `math.h' (SVID): *Note Special Functions::. - -`long double j0l (long double X)' - `math.h' (SVID): *Note Special Functions::. - -`double j1 (double X)' - `math.h' (SVID): *Note Special Functions::. - -`float j1f (float X)' - `math.h' (SVID): *Note Special Functions::. - -`long double j1l (long double X)' - `math.h' (SVID): *Note Special Functions::. - -`jmp_buf' - `setjmp.h' (ISO): *Note Non-Local Details::. - -`double jn (int n, double X)' - `math.h' (SVID): *Note Special Functions::. - -`float jnf (int n, float X)' - `math.h' (SVID): *Note Special Functions::. - -`long double jnl (int n, long double X)' - `math.h' (SVID): *Note Special Functions::. - -`long int jrand48 (unsigned short int XSUBI[3])' - `stdlib.h' (SVID): *Note SVID Random::. - -`int jrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)' - `stdlib.h' (GNU): *Note SVID Random::. - -`int kill (pid_t PID, int SIGNUM)' - `signal.h' (POSIX.1): *Note Signaling Another Process::. - -`int killpg (int PGID, int SIGNUM)' - `signal.h' (BSD): *Note Signaling Another Process::. - -`char * l64a (long int N)' - `stdlib.h' (XPG): *Note Encode Binary Data::. - -`long int labs (long int NUMBER)' - `stdlib.h' (ISO): *Note Absolute Value::. - -`LANG' - `locale.h' (ISO): *Note Locale Categories::. - -`LC_ALL' - `locale.h' (ISO): *Note Locale Categories::. - -`LC_COLLATE' - `locale.h' (ISO): *Note Locale Categories::. - -`LC_CTYPE' - `locale.h' (ISO): *Note Locale Categories::. - -`LC_MESSAGES' - `locale.h' (XOPEN): *Note Locale Categories::. - -`LC_MONETARY' - `locale.h' (ISO): *Note Locale Categories::. - -`LC_NUMERIC' - `locale.h' (ISO): *Note Locale Categories::. - -`void lcong48 (unsigned short int PARAM[7])' - `stdlib.h' (SVID): *Note SVID Random::. - -`int lcong48_r (unsigned short int PARAM[7], struct drand48_data *BUFFER)' - `stdlib.h' (GNU): *Note SVID Random::. - -`int L_ctermid' - `stdio.h' (POSIX.1): *Note Identifying the Terminal::. - -`LC_TIME' - `locale.h' (ISO): *Note Locale Categories::. - -`int L_cuserid' - `stdio.h' (POSIX.1): *Note Who Logged In::. - -`double ldexp (double VALUE, int EXPONENT)' - `math.h' (ISO): *Note Normalization Functions::. - -`float ldexpf (float VALUE, int EXPONENT)' - `math.h' (ISO): *Note Normalization Functions::. - -`long double ldexpl (long double VALUE, int EXPONENT)' - `math.h' (ISO): *Note Normalization Functions::. - -`ldiv_t ldiv (long int NUMERATOR, long int DENOMINATOR)' - `stdlib.h' (ISO): *Note Integer Division::. - -`ldiv_t' - `stdlib.h' (ISO): *Note Integer Division::. - -`void * lfind (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)' - `search.h' (SVID): *Note Array Search Function::. - -`double lgamma (double X)' - `math.h' (SVID): *Note Special Functions::. - -`float lgammaf (float X)' - `math.h' (SVID): *Note Special Functions::. - -`float lgammaf_r (float X, int *SIGNP)' - `math.h' (XPG): *Note Special Functions::. - -`long double lgammal (long double X)' - `math.h' (SVID): *Note Special Functions::. - -`long double lgammal_r (long double X, int *SIGNP)' - `math.h' (XPG): *Note Special Functions::. - -`double lgamma_r (double X, int *SIGNP)' - `math.h' (XPG): *Note Special Functions::. - -`L_INCR' - `sys/file.h' (BSD): *Note File Positioning::. - -`int LINE_MAX' - `limits.h' (POSIX.2): *Note Utility Limits::. - -`int link (const char *OLDNAME, const char *NEWNAME)' - `unistd.h' (POSIX.1): *Note Hard Links::. - -`int LINK_MAX' - `limits.h' (POSIX.1): *Note Limits for Files::. - -`int lio_listio (int MODE, struct aiocb *const LIST[], int NENT, struct sigevent *SIG)' - `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::. - -`int lio_listio64 (int MODE, struct aiocb *const LIST, int NENT, struct sigevent *SIG)' - `aio.h' (Unix98): *Note Asynchronous Reads/Writes::. - -`int listen (int SOCKET, unsigned int N)' - `sys/socket.h' (BSD): *Note Listening::. - -`long long int llabs (long long int NUMBER)' - `stdlib.h' (ISO): *Note Absolute Value::. - -`lldiv_t lldiv (long long int NUMERATOR, long long int DENOMINATOR)' - `stdlib.h' (ISO): *Note Integer Division::. - -`lldiv_t' - `stdlib.h' (ISO): *Note Integer Division::. - -`long long int llrint (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long long int llrintf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long long int llrintl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long long int llround (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long long int llroundf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long long int llroundl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`struct lconv * localeconv (void)' - `locale.h' (ISO): *Note The Lame Way to Locale Data::. - -`struct tm * localtime (const time_t *TIME)' - `time.h' (ISO): *Note Broken-down Time::. - -`struct tm * localtime_r (const time_t *TIME, struct tm *RESULTP)' - `time.h' (POSIX.1c): *Note Broken-down Time::. - -`double log (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double log10 (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float log10f (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double log10l (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double log1p (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float log1pf (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double log1pl (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double log2 (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float log2f (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double log2l (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double logb (double X)' - `math.h' (BSD): *Note Normalization Functions::. - -`double logb (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float logbf (float X)' - `math.h' (BSD): *Note Normalization Functions::. - -`float logbf (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double logbl (long double X)' - `math.h' (BSD): *Note Normalization Functions::. - -`long double logbl (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float logf (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`void login (const struct utmp *ENTRY)' - `utmp.h' (BSD): *Note Logging In and Out::. - -`LOGIN_PROCESS' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`LOGIN_PROCESS' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int login_tty (int FILEDES)' - `utmp.h' (BSD): *Note Logging In and Out::. - -`long double logl (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`int logout (const char *UT_LINE)' - `utmp.h' (BSD): *Note Logging In and Out::. - -`void logwtmp (const char *UT_LINE, const char *UT_NAME, const char *UT_HOST)' - `utmp.h' (BSD): *Note Logging In and Out::. - -`void longjmp (jmp_buf STATE, int VALUE)' - `setjmp.h' (ISO): *Note Non-Local Details::. - -`LONG_LONG_MAX' - `limits.h' (GNU): *Note Range of Type::. - -`LONG_LONG_MIN' - `limits.h' (GNU): *Note Range of Type::. - -`LONG_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`LONG_MIN' - `limits.h' (ISO): *Note Range of Type::. - -`long int lrand48 (void)' - `stdlib.h' (SVID): *Note SVID Random::. - -`int lrand48_r (struct drand48_data *BUFFER, double *RESULT)' - `stdlib.h' (GNU): *Note SVID Random::. - -`long int lrint (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long int lrintf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long int lrintl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long int lround (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long int lroundf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long int lroundl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`void * lsearch (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)' - `search.h' (SVID): *Note Array Search Function::. - -`off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)' - `unistd.h' (POSIX.1): *Note File Position Primitive::. - -`off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)' - `unistd.h' (Unix98): *Note File Position Primitive::. - -`L_SET' - `sys/file.h' (BSD): *Note File Positioning::. - -`int lstat (const char *FILENAME, struct stat *BUF)' - `sys/stat.h' (BSD): *Note Reading Attributes::. - -`int lstat64 (const char *FILENAME, struct stat64 *BUF)' - `sys/stat.h' (Unix98): *Note Reading Attributes::. - -`int L_tmpnam' - `stdio.h' (ISO): *Note Temporary Files::. - -`L_XTND' - `sys/file.h' (BSD): *Note File Positioning::. - -`struct mallinfo mallinfo (void)' - `malloc.h' (SVID): *Note Statistics of Malloc::. - -`void * malloc (size_t SIZE)' - `malloc.h', `stdlib.h' (ISO): *Note Basic Allocation::. - -`__malloc_hook' - `malloc.h' (GNU): *Note Hooks for Malloc::. - -`__malloc_initialize_hook' - `malloc.h' (GNU): *Note Hooks for Malloc::. - -`int MAX_CANON' - `limits.h' (POSIX.1): *Note Limits for Files::. - -`int MAX_INPUT' - `limits.h' (POSIX.1): *Note Limits for Files::. - -`int MAXNAMLEN' - `dirent.h' (BSD): *Note Limits for Files::. - -`int MB_CUR_MAX' - `stdlib.h' (ISO): *Note Selecting the Conversion::. - -`int mblen (const char *STRING, size_t SIZE)' - `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::. - -`int MB_LEN_MAX' - `limits.h' (ISO): *Note Selecting the Conversion::. - -`size_t mbrlen (const char *restrict S, size_t N, mbstate_t *PS)' - `wchar.h' (ISO): *Note Converting a Character::. - -`size_t mbrtowc (wchar_t *restrict PWC, const char *restrict S, size_t N, mbstate_t *restrict PS)' - `wchar.h' (ISO): *Note Converting a Character::. - -`int mbsinit (const mbstate_t *PS)' - `wchar.h' (ISO): *Note Keeping the state::. - -`size_t mbsnrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t NMC, size_t LEN, mbstate_t *restrict PS)' - `wchar.h' (GNU): *Note Converting Strings::. - -`size_t mbsrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t LEN, mbstate_t *restrict PS)' - `wchar.h' (ISO): *Note Converting Strings::. - -`mbstate_t' - `wchar.h' (ISO): *Note Keeping the state::. - -`size_t mbstowcs (wchar_t *WSTRING, const char *STRING, size_t SIZE)' - `stdlib.h' (ISO): *Note Non-reentrant String Conversion::. - -`int mbtowc (wchar_t *restrict RESULT, const char *restrict STRING, size_t SIZE)' - `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::. - -`int mcheck (void (*ABORTFN) (enum mcheck_status STATUS))' - `mcheck.h' (GNU): *Note Heap Consistency Checking::. - -`tcflag_t MDMBUF' - `termios.h' (BSD): *Note Control Modes::. - -`void * memalign (size_t BOUNDARY, size_t SIZE)' - `malloc.h', `stdlib.h' (BSD): *Note Aligned Memory Blocks::. - -`__memalign_hook' - `malloc.h' (GNU): *Note Hooks for Malloc::. - -`void * memccpy (void *restrict TO, const void *restrict FROM, int C, size_t SIZE)' - `string.h' (SVID): *Note Copying and Concatenation::. - -`void * memchr (const void *BLOCK, int C, size_t SIZE)' - `string.h' (ISO): *Note Search Functions::. - -`int memcmp (const void *A1, const void *A2, size_t SIZE)' - `string.h' (ISO): *Note String/Array Comparison::. - -`void * memcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`void * memfrob (void *MEM, size_t LENGTH)' - `string.h' (GNU): *Note Trivial Encryption::. - -`void * memmem (const void *HAYSTACK, size_t HAYSTACK-LEN, - const void *NEEDLE, size_t NEEDLE-LEN)' - `string.h' (GNU): *Note Search Functions::. - -`void * memmove (void *TO, const void *FROM, size_t SIZE)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`void * mempcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)' - `string.h' (GNU): *Note Copying and Concatenation::. - -`void * memrchr (const void *BLOCK, int C, size_t SIZE)' - `string.h' (GNU): *Note Search Functions::. - -`void * memset (void *BLOCK, int C, size_t SIZE)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`int mkdir (const char *FILENAME, mode_t MODE)' - `sys/stat.h' (POSIX.1): *Note Creating Directories::. - -`char * mkdtemp (char *TEMPLATE)' - `stdlib.h' (BSD): *Note Temporary Files::. - -`int mkfifo (const char *FILENAME, mode_t MODE)' - `sys/stat.h' (POSIX.1): *Note FIFO Special Files::. - -`int mknod (const char *FILENAME, int MODE, int DEV)' - `sys/stat.h' (BSD): *Note Making Special Files::. - -`int mkstemp (char *TEMPLATE)' - `stdlib.h' (BSD): *Note Temporary Files::. - -`char * mktemp (char *TEMPLATE)' - `stdlib.h' (Unix): *Note Temporary Files::. - -`time_t mktime (struct tm *BROKENTIME)' - `time.h' (ISO): *Note Broken-down Time::. - -`int mlock (const void *ADDR, size_t LEN)' - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. - -`int mlockall (int FLAGS)' - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. - -`mode_t' - `sys/types.h' (POSIX.1): *Note Attribute Meanings::. - -`double modf (double VALUE, double *INTEGER-PART)' - `math.h' (ISO): *Note Rounding Functions::. - -`float modff (float VALUE, float *INTEGER-PART)' - `math.h' (ISO): *Note Rounding Functions::. - -`long double modfl (long double VALUE, long double *INTEGER-PART)' - `math.h' (ISO): *Note Rounding Functions::. - -`int mount (const char *SPECIAL_FILE, const char *DIR, const char *FSTYPE, unsigned long int OPTIONS, const void *DATA)' - `sys/mount.h' (SVID, BSD): *Note Mount-Unmount-Remount::. - -`long int mrand48 (void)' - `stdlib.h' (SVID): *Note SVID Random::. - -`int mrand48_r (struct drand48_data *BUFFER, double *RESULT)' - `stdlib.h' (GNU): *Note SVID Random::. - -`int MSG_DONTROUTE' - `sys/socket.h' (BSD): *Note Socket Data Options::. - -`int MSG_OOB' - `sys/socket.h' (BSD): *Note Socket Data Options::. - -`int MSG_PEEK' - `sys/socket.h' (BSD): *Note Socket Data Options::. - -`void mtrace (void)' - `mcheck.h' (GNU): *Note Tracing malloc::. - -`int munlock (const void *ADDR, size_t LEN)' - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. - -`int munlockall (void)' - `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. - -`void muntrace (void)' - `mcheck.h' (GNU): *Note Tracing malloc::. - -`int NAME_MAX' - `limits.h' (POSIX.1): *Note Limits for Files::. - -`float NAN' - `math.h' (GNU): *Note Infinity and NaN::. - -`double nan (const char *TAGP)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`float nanf (const char *TAGP)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`long double nanl (const char *TAGP)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`int nanosleep (const struct timespec *REQUESTED_TIME, struct timespec *REMAINING)' - `time.h' (POSIX.1): *Note Sleeping::. - -`int NCCS' - `termios.h' (POSIX.1): *Note Mode Data Types::. - -`double nearbyint (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`float nearbyintf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long double nearbyintl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`NEW_TIME' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`NEW_TIME' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`double nextafter (double X, double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`float nextafterf (float X, float Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`long double nextafterl (long double X, long double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`double nexttoward (double X, long double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`float nexttowardf (float X, long double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`long double nexttowardl (long double X, long double Y)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`int nftw (const char *FILENAME, __nftw_func_t FUNC, int DESCRIPTORS, int FLAG)' - `ftw.h' (XPG4.2): *Note Working with Directory Trees::. - -`int nftw64 (const char *FILENAME, __nftw64_func_t FUNC, int DESCRIPTORS, int FLAG)' - `ftw.h' (Unix98): *Note Working with Directory Trees::. - -`__nftw64_func_t' - `ftw.h' (GNU): *Note Working with Directory Trees::. - -`__nftw_func_t' - `ftw.h' (GNU): *Note Working with Directory Trees::. - -`char * ngettext (const char *MSGID1, const char *MSGID2, unsigned long int N)' - `libintl.h' (GNU): *Note Advanced gettext functions::. - -`int NGROUPS_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`int nice (int INCREMENT)' - `unistd.h' (BSD): *Note Traditional Scheduling Functions::. - -`nlink_t' - `sys/types.h' (POSIX.1): *Note Attribute Meanings::. - -`char * nl_langinfo (nl_item ITEM)' - `langinfo.h' (XOPEN): *Note The Elegant and Fast Way::. - -`NO_ADDRESS' - `netdb.h' (BSD): *Note Host Names::. - -`tcflag_t NOFLSH' - `termios.h' (POSIX.1): *Note Local Modes::. - -`tcflag_t NOKERNINFO' - `termios.h' (BSD): *Note Local Modes::. - -`NO_RECOVERY' - `netdb.h' (BSD): *Note Host Names::. - -`long int nrand48 (unsigned short int XSUBI[3])' - `stdlib.h' (SVID): *Note SVID Random::. - -`int nrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)' - `stdlib.h' (GNU): *Note SVID Random::. - -`int NSIG' - `signal.h' (BSD): *Note Standard Signals::. - -`uint32_t ntohl (uint32_t NETLONG)' - `netinet/in.h' (BSD): *Note Byte Order::. - -`uint16_t ntohs (uint16_t NETSHORT)' - `netinet/in.h' (BSD): *Note Byte Order::. - -`int ntp_adjtime (struct timex *TPTR)' - `sys/timex.h' (GNU): *Note High Accuracy Clock::. - -`int ntp_gettime (struct ntptimeval *TPTR)' - `sys/timex.h' (GNU): *Note High Accuracy Clock::. - -`void * NULL' - `stddef.h' (ISO): *Note Null Pointer Constant::. - -`int O_ACCMODE' - `fcntl.h' (POSIX.1): *Note Access Modes::. - -`int O_APPEND' - `fcntl.h' (POSIX.1): *Note Operating Modes::. - -`int O_ASYNC' - `fcntl.h' (BSD): *Note Operating Modes::. - -`void obstack_1grow (struct obstack *OBSTACK-PTR, char C)' - `obstack.h' (GNU): *Note Growing Objects::. - -`void obstack_1grow_fast (struct obstack *OBSTACK-PTR, char C)' - `obstack.h' (GNU): *Note Extra Fast Growing::. - -`int obstack_alignment_mask (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Obstacks Data Alignment::. - -`void * obstack_alloc (struct obstack *OBSTACK-PTR, int SIZE)' - `obstack.h' (GNU): *Note Allocation in an Obstack::. - -`obstack_alloc_failed_handler' - `obstack.h' (GNU): *Note Preparing for Obstacks::. - -`void * obstack_base (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Status of an Obstack::. - -`void obstack_blank (struct obstack *OBSTACK-PTR, int SIZE)' - `obstack.h' (GNU): *Note Growing Objects::. - -`void obstack_blank_fast (struct obstack *OBSTACK-PTR, int SIZE)' - `obstack.h' (GNU): *Note Extra Fast Growing::. - -`int obstack_chunk_size (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Obstack Chunks::. - -`void * obstack_copy (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)' - `obstack.h' (GNU): *Note Allocation in an Obstack::. - -`void * obstack_copy0 (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)' - `obstack.h' (GNU): *Note Allocation in an Obstack::. - -`void * obstack_finish (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Growing Objects::. - -`void obstack_free (struct obstack *OBSTACK-PTR, void *OBJECT)' - `obstack.h' (GNU): *Note Freeing Obstack Objects::. - -`void obstack_grow (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)' - `obstack.h' (GNU): *Note Growing Objects::. - -`void obstack_grow0 (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)' - `obstack.h' (GNU): *Note Growing Objects::. - -`int obstack_init (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Preparing for Obstacks::. - -`void obstack_int_grow (struct obstack *OBSTACK-PTR, int DATA)' - `obstack.h' (GNU): *Note Growing Objects::. - -`void obstack_int_grow_fast (struct obstack *OBSTACK-PTR, int DATA)' - `obstack.h' (GNU): *Note Extra Fast Growing::. - -`void * obstack_next_free (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Status of an Obstack::. - -`int obstack_object_size (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Growing Objects::. - -`int obstack_object_size (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Status of an Obstack::. - -`int obstack_printf (struct obstack *OBSTACK, const char *TEMPLATE, ...)' - `stdio.h' (GNU): *Note Dynamic Output::. - -`void obstack_ptr_grow (struct obstack *OBSTACK-PTR, void *DATA)' - `obstack.h' (GNU): *Note Growing Objects::. - -`void obstack_ptr_grow_fast (struct obstack *OBSTACK-PTR, void *DATA)' - `obstack.h' (GNU): *Note Extra Fast Growing::. - -`int obstack_room (struct obstack *OBSTACK-PTR)' - `obstack.h' (GNU): *Note Extra Fast Growing::. - -`int obstack_vprintf (struct obstack *OBSTACK, const char *TEMPLATE, va_list AP)' - `stdio.h' (GNU): *Note Variable Arguments Output::. - -`int O_CREAT' - `fcntl.h' (POSIX.1): *Note Open-time Flags::. - -`int O_EXCL' - `fcntl.h' (POSIX.1): *Note Open-time Flags::. - -`int O_EXEC' - `fcntl.h' (GNU): *Note Access Modes::. - -`int O_EXLOCK' - `fcntl.h' (BSD): *Note Open-time Flags::. - -`off64_t' - `sys/types.h' (Unix98): *Note File Position Primitive::. - -`size_t offsetof (TYPE, MEMBER)' - `stddef.h' (ISO): *Note Structure Measurement::. - -`off_t' - `sys/types.h' (POSIX.1): *Note File Position Primitive::. - -`int O_FSYNC' - `fcntl.h' (BSD): *Note Operating Modes::. - -`int O_IGNORE_CTTY' - `fcntl.h' (GNU): *Note Open-time Flags::. - -`OLD_TIME' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`OLD_TIME' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int O_NDELAY' - `fcntl.h' (BSD): *Note Operating Modes::. - -`int on_exit (void (*FUNCTION)(int STATUS, void *ARG), void *ARG)' - `stdlib.h' (SunOS): *Note Cleanups on Exit::. - -`tcflag_t ONLCR' - `termios.h' (BSD): *Note Output Modes::. - -`int O_NOATIME' - `fcntl.h' (GNU): *Note Operating Modes::. - -`int O_NOCTTY' - `fcntl.h' (POSIX.1): *Note Open-time Flags::. - -`tcflag_t ONOEOT' - `termios.h' (BSD): *Note Output Modes::. - -`int O_NOLINK' - `fcntl.h' (GNU): *Note Open-time Flags::. - -`int O_NONBLOCK' - `fcntl.h' (POSIX.1): *Note Open-time Flags::. - -`int O_NONBLOCK' - `fcntl.h' (POSIX.1): *Note Operating Modes::. - -`int O_NOTRANS' - `fcntl.h' (GNU): *Note Open-time Flags::. - -`int open (const char *FILENAME, int FLAGS[, mode_t MODE])' - `fcntl.h' (POSIX.1): *Note Opening and Closing Files::. - -`int open64 (const char *FILENAME, int FLAGS[, mode_t MODE])' - `fcntl.h' (Unix98): *Note Opening and Closing Files::. - -`DIR * opendir (const char *DIRNAME)' - `dirent.h' (POSIX.1): *Note Opening a Directory::. - -`void openlog (char *IDENT, int OPTION,' - `syslog.h' (BSD): *Note openlog::. - -`int OPEN_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`FILE * open_memstream (char **PTR, size_t *SIZELOC)' - `stdio.h' (GNU): *Note String Streams::. - -`FILE * open_obstack_stream (struct obstack *OBSTACK)' - `stdio.h' (GNU): *Note Obstack Streams::. - -`int openpty (int *AMASTER, int *ASLAVE, char *NAME, struct termios *TERMP, struct winsize *WINP)' - `pty.h' (BSD): *Note Pseudo-Terminal Pairs::. - -`tcflag_t OPOST' - `termios.h' (POSIX.1): *Note Output Modes::. - -`char * optarg' - `unistd.h' (POSIX.2): *Note Using Getopt::. - -`int opterr' - `unistd.h' (POSIX.2): *Note Using Getopt::. - -`int optind' - `unistd.h' (POSIX.2): *Note Using Getopt::. - -`OPTION_ALIAS' - `argp.h' (GNU): *Note Argp Option Flags::. - -`OPTION_ARG_OPTIONAL' - `argp.h' (GNU): *Note Argp Option Flags::. - -`OPTION_DOC' - `argp.h' (GNU): *Note Argp Option Flags::. - -`OPTION_HIDDEN' - `argp.h' (GNU): *Note Argp Option Flags::. - -`OPTION_NO_USAGE' - `argp.h' (GNU): *Note Argp Option Flags::. - -`int optopt' - `unistd.h' (POSIX.2): *Note Using Getopt::. - -`int O_RDONLY' - `fcntl.h' (POSIX.1): *Note Access Modes::. - -`int O_RDWR' - `fcntl.h' (POSIX.1): *Note Access Modes::. - -`int O_READ' - `fcntl.h' (GNU): *Note Access Modes::. - -`int O_SHLOCK' - `fcntl.h' (BSD): *Note Open-time Flags::. - -`int O_SYNC' - `fcntl.h' (BSD): *Note Operating Modes::. - -`int O_TRUNC' - `fcntl.h' (POSIX.1): *Note Open-time Flags::. - -`int O_WRITE' - `fcntl.h' (GNU): *Note Access Modes::. - -`int O_WRONLY' - `fcntl.h' (POSIX.1): *Note Access Modes::. - -`tcflag_t OXTABS' - `termios.h' (BSD): *Note Output Modes::. - -`PA_CHAR' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_DOUBLE' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_FLAG_LONG' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_FLAG_LONG_DOUBLE' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_FLAG_LONG_LONG' - `printf.h' (GNU): *Note Parsing a Template String::. - -`int PA_FLAG_MASK' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_FLAG_PTR' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_FLAG_SHORT' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_FLOAT' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_INT' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_LAST' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_POINTER' - `printf.h' (GNU): *Note Parsing a Template String::. - -`tcflag_t PARENB' - `termios.h' (POSIX.1): *Note Control Modes::. - -`tcflag_t PARMRK' - `termios.h' (POSIX.1): *Note Input Modes::. - -`tcflag_t PARODD' - `termios.h' (POSIX.1): *Note Control Modes::. - -`size_t parse_printf_format (const char *TEMPLATE, size_t N, int *ARGTYPES)' - `printf.h' (GNU): *Note Parsing a Template String::. - -`PA_STRING' - `printf.h' (GNU): *Note Parsing a Template String::. - -`long int pathconf (const char *FILENAME, int PARAMETER)' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`int PATH_MAX' - `limits.h' (POSIX.1): *Note Limits for Files::. - -`int pause ()' - `unistd.h' (POSIX.1): *Note Using Pause::. - -`_PC_ASYNC_IO' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_CHOWN_RESTRICTED' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_FILESIZEBITS' - `unistd.h' (LFS): *Note Pathconf::. - -`_PC_LINK_MAX' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`int pclose (FILE *STREAM)' - `stdio.h' (POSIX.2, SVID, BSD): *Note Pipe to a Subprocess::. - -`_PC_MAX_CANON' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_MAX_INPUT' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_NAME_MAX' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_NO_TRUNC' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_PATH_MAX' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_PIPE_BUF' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_PRIO_IO' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_REC_INCR_XFER_SIZE' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_REC_MAX_XFER_SIZE' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_REC_MIN_XFER_SIZE' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_REC_XFER_ALIGN' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_SOCK_MAXBUF' - `unistd.h' (POSIX.1g): *Note Pathconf::. - -`_PC_SYNC_IO' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`_PC_VDISABLE' - `unistd.h' (POSIX.1): *Note Pathconf::. - -`tcflag_t PENDIN' - `termios.h' (BSD): *Note Local Modes::. - -`void perror (const char *MESSAGE)' - `stdio.h' (ISO): *Note Error Messages::. - -`int PF_FILE' - `sys/socket.h' (GNU): *Note Local Namespace Details::. - -`int PF_INET' - `sys/socket.h' (BSD): *Note Internet Namespace::. - -`int PF_INET6' - `sys/socket.h' (X/Open): *Note Internet Namespace::. - -`int PF_LOCAL' - `sys/socket.h' (POSIX): *Note Local Namespace Details::. - -`int PF_UNIX' - `sys/socket.h' (BSD): *Note Local Namespace Details::. - -`pid_t' - `sys/types.h' (POSIX.1): *Note Process Identification::. - -`int pipe (int FILEDES[2])' - `unistd.h' (POSIX.1): *Note Creating a Pipe::. - -`int PIPE_BUF' - `limits.h' (POSIX.1): *Note Limits for Files::. - -`FILE * popen (const char *COMMAND, const char *MODE)' - `stdio.h' (POSIX.2, SVID, BSD): *Note Pipe to a Subprocess::. - -`_POSIX2_BC_BASE_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`_POSIX2_BC_DIM_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`_POSIX2_BC_SCALE_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`_POSIX2_BC_STRING_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`int _POSIX2_C_DEV' - `unistd.h' (POSIX.2): *Note System Options::. - -`_POSIX2_COLL_WEIGHTS_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`long int _POSIX2_C_VERSION' - `unistd.h' (POSIX.2): *Note Version Supported::. - -`_POSIX2_EQUIV_CLASS_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`_POSIX2_EXPR_NEST_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`int _POSIX2_FORT_DEV' - `unistd.h' (POSIX.2): *Note System Options::. - -`int _POSIX2_FORT_RUN' - `unistd.h' (POSIX.2): *Note System Options::. - -`_POSIX2_LINE_MAX' - `limits.h' (POSIX.2): *Note Utility Minimums::. - -`int _POSIX2_LOCALEDEF' - `unistd.h' (POSIX.2): *Note System Options::. - -`_POSIX2_RE_DUP_MAX' - `limits.h' (POSIX.2): *Note Minimums::. - -`int _POSIX2_SW_DEV' - `unistd.h' (POSIX.2): *Note System Options::. - -`_POSIX_AIO_LISTIO_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`_POSIX_AIO_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`_POSIX_ARG_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`_POSIX_CHILD_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`int _POSIX_CHOWN_RESTRICTED' - `unistd.h' (POSIX.1): *Note Options for Files::. - -`_POSIX_C_SOURCE' - (POSIX.2): *Note Feature Test Macros::. - -`int _POSIX_JOB_CONTROL' - `unistd.h' (POSIX.1): *Note System Options::. - -`_POSIX_LINK_MAX' - `limits.h' (POSIX.1): *Note File Minimums::. - -`_POSIX_MAX_CANON' - `limits.h' (POSIX.1): *Note File Minimums::. - -`_POSIX_MAX_INPUT' - `limits.h' (POSIX.1): *Note File Minimums::. - -`int posix_memalign (void **MEMPTR, size_t ALIGNMENT, size_t SIZE)' - `stdlib.h' (POSIX): *Note Aligned Memory Blocks::. - -`_POSIX_NAME_MAX' - `limits.h' (POSIX.1): *Note File Minimums::. - -`_POSIX_NGROUPS_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`int _POSIX_NO_TRUNC' - `unistd.h' (POSIX.1): *Note Options for Files::. - -`_POSIX_OPEN_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`_POSIX_PATH_MAX' - `limits.h' (POSIX.1): *Note File Minimums::. - -`_POSIX_PIPE_BUF' - `limits.h' (POSIX.1): *Note File Minimums::. - -`POSIX_REC_INCR_XFER_SIZE' - `limits.h' (POSIX.1): *Note File Minimums::. - -`POSIX_REC_MAX_XFER_SIZE' - `limits.h' (POSIX.1): *Note File Minimums::. - -`POSIX_REC_MIN_XFER_SIZE' - `limits.h' (POSIX.1): *Note File Minimums::. - -`POSIX_REC_XFER_ALIGN' - `limits.h' (POSIX.1): *Note File Minimums::. - -`int _POSIX_SAVED_IDS' - `unistd.h' (POSIX.1): *Note System Options::. - -`_POSIX_SOURCE' - (POSIX.1): *Note Feature Test Macros::. - -`_POSIX_SSIZE_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`_POSIX_STREAM_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`_POSIX_TZNAME_MAX' - `limits.h' (POSIX.1): *Note Minimums::. - -`unsigned char _POSIX_VDISABLE' - `unistd.h' (POSIX.1): *Note Options for Files::. - -`long int _POSIX_VERSION' - `unistd.h' (POSIX.1): *Note Version Supported::. - -`double pow (double BASE, double POWER)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`double pow10 (double X)' - `math.h' (GNU): *Note Exponents and Logarithms::. - -`float pow10f (float X)' - `math.h' (GNU): *Note Exponents and Logarithms::. - -`long double pow10l (long double X)' - `math.h' (GNU): *Note Exponents and Logarithms::. - -`float powf (float BASE, float POWER)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double powl (long double BASE, long double POWER)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE, off_t OFFSET)' - `unistd.h' (Unix98): *Note I/O Primitives::. - -`ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE, off64_t OFFSET)' - `unistd.h' (Unix98): *Note I/O Primitives::. - -`int printf (const char *TEMPLATE, ...)' - `stdio.h' (ISO): *Note Formatted Output Functions::. - -`printf_arginfo_function' - `printf.h' (GNU): *Note Defining the Output Handler::. - -`printf_function' - `printf.h' (GNU): *Note Defining the Output Handler::. - -`int printf_size (FILE *FP, const struct printf_info *INFO, const void *const *ARGS)' - `printf.h' (GNU): *Note Predefined Printf Handlers::. - -`int printf_size_info (const struct printf_info *INFO, size_t N, int *ARGTYPES)' - `printf.h' (GNU): *Note Predefined Printf Handlers::. - -`PRIO_MAX' - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. - -`PRIO_MIN' - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. - -`PRIO_PGRP' - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. - -`PRIO_PROCESS' - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. - -`PRIO_USER' - `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. - -`char * program_invocation_name' - `errno.h' (GNU): *Note Error Messages::. - -`char * program_invocation_short_name' - `errno.h' (GNU): *Note Error Messages::. - -`void psignal (int SIGNUM, const char *MESSAGE)' - `signal.h' (BSD): *Note Signal Messages::. - -`int pthread_atfork (void (*PREPARE)(void), void (*PARENT)(void), void (*CHILD)(void))' - `pthread.h' (POSIX): *Note Threads and Fork::. - -`int pthread_attr_destroy (pthread_attr_t *ATTR)' - `pthread.h' (POSIX): *Note Thread Attributes::. - -`int pthread_attr_getattr (const pthread_attr_t *OBJ, int *VALUE)' - `pthread.h' (POSIX): *Note Thread Attributes::. - -`int pthread_attr_init (pthread_attr_t *ATTR)' - `pthread.h' (POSIX): *Note Thread Attributes::. - -`int pthread_attr_setattr (pthread_attr_t *OBJ, int VALUE)' - `pthread.h' (POSIX): *Note Thread Attributes::. - -`int pthread_cancel (pthread_t THREAD)' - `pthread.h' (POSIX): *Note Basic Thread Operations::. - -`void pthread_cleanup_pop (int EXECUTE)' - `pthread.h' (POSIX): *Note Cleanup Handlers::. - -`void pthread_cleanup_pop_restore_np (int EXECUTE)' - `pthread.h' (GNU): *Note Cleanup Handlers::. - -`void pthread_cleanup_push (void (*ROUTINE) (void *), void *ARG)' - `pthread.h' (POSIX): *Note Cleanup Handlers::. - -`void pthread_cleanup_push_defer_np (void (*ROUTINE) (void *), void *ARG)' - `pthread.h' (GNU): *Note Cleanup Handlers::. - -`int pthread_condattr_init (pthread_condattr_t *ATTR)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_cond_broadcast (pthread_cond_t *COND)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_cond_destroy (pthread_cond_t *COND)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_cond_init (pthread_cond_t *COND, pthread_condattr_t *cond_ATTR)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_cond_signal (pthread_cond_t *COND)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_cond_timedwait (pthread_cond_t *COND, pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_cond_wait (pthread_cond_t *COND, pthread_mutex_t *MUTEX)' - `pthread.h' (POSIX): *Note Condition Variables::. - -`int pthread_create (pthread_t * THREAD, pthread_attr_t * ATTR, void * (*START_ROUTINE)(void *), void * ARG)' - `pthread.h' (POSIX): *Note Basic Thread Operations::. - -`int pthread_detach (pthread_t TH)' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`int pthread_equal (pthread_t thread1, pthread_t thread2)' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`void pthread_exit (void *RETVAL)' - `pthread.h' (POSIX): *Note Basic Thread Operations::. - -`int pthread_getconcurrency ()' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`int pthread_getschedparam (pthread_t target_THREAD, int *POLICY, struct sched_param *PARAM)' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`void * pthread_getspecific (pthread_key_t KEY)' - `pthread.h' (POSIX): *Note Thread-Specific Data::. - -`int pthread_join (pthread_t TH, void **thread_RETURN)' - `pthread.h' (POSIX): *Note Basic Thread Operations::. - -`int pthread_key_create (pthread_key_t *KEY, void (*destr_function) (void *))' - `pthread.h' (POSIX): *Note Thread-Specific Data::. - -`int pthread_key_delete (pthread_key_t KEY)' - `pthread.h' (POSIX): *Note Thread-Specific Data::. - -`int pthread_kill (pthread_t THREAD, int SIGNO)' - `pthread.h' (POSIX): *Note Threads and Signal Handling::. - -`void pthread_kill_other_threads_np (VOID)' - `pthread.h' (GNU): *Note Miscellaneous Thread Functions::. - -`int pthread_mutexattr_destroy (pthread_mutexattr_t *ATTR)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutexattr_gettype (const pthread_mutexattr_t *ATTR, int *TYPE)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutexattr_init (pthread_mutexattr_t *ATTR)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutexattr_settype (pthread_mutexattr_t *ATTR, int TYPE)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutex_destroy (pthread_mutex_t *MUTEX)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutex_init (pthread_mutex_t *MUTEX, const pthread_mutexattr_t *MUTEXATTR)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutex_lock (pthread_mutex_t *mutex))' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutex_timedlock (pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutex_trylock (pthread_mutex_t *MUTEX)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_mutex_unlock (pthread_mutex_t *MUTEX)' - `pthread.h' (POSIX): *Note Mutexes::. - -`int pthread_once (pthread_once_t *once_CONTROL, void (*INIT_ROUTINE) (void))' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`pthread_t pthread_self (VOID)' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`int pthread_setcancelstate (int STATE, int *OLDSTATE)' - `pthread.h' (POSIX): *Note Cancellation::. - -`int pthread_setcanceltype (int TYPE, int *OLDTYPE)' - `pthread.h' (POSIX): *Note Cancellation::. - -`int pthread_setconcurrency (int LEVEL)' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`int pthread_setschedparam (pthread_t target_THREAD, int POLICY, const struct sched_param *PARAM)' - `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. - -`int pthread_setspecific (pthread_key_t KEY, const void *POINTER)' - `pthread.h' (POSIX): *Note Thread-Specific Data::. - -`int pthread_sigmask (int HOW, const sigset_t *NEWMASK, sigset_t *OLDMASK)' - `pthread.h' (POSIX): *Note Threads and Signal Handling::. - -`void pthread_testcancel (VOID)' - `pthread.h' (POSIX): *Note Cancellation::. - -`char * P_tmpdir' - `stdio.h' (SVID): *Note Temporary Files::. - -`ptrdiff_t' - `stddef.h' (ISO): *Note Important Data Types::. - -`char * ptsname (int FILEDES)' - `stdlib.h' (SVID, XPG4.2): *Note Allocation::. - -`int ptsname_r (int FILEDES, char *BUF, size_t LEN)' - `stdlib.h' (GNU): *Note Allocation::. - -`int putc (int C, FILE *STREAM)' - `stdio.h' (ISO): *Note Simple Output::. - -`int putchar (int C)' - `stdio.h' (ISO): *Note Simple Output::. - -`wint_t putchar (wchar_t WC)' - `wchar.h' (ISO): *Note Simple Output::. - -`int putchar_unlocked (int C)' - `stdio.h' (POSIX): *Note Simple Output::. - -`int putc_unlocked (int C, FILE *STREAM)' - `stdio.h' (POSIX): *Note Simple Output::. - -`int putenv (char *STRING)' - `stdlib.h' (SVID): *Note Environment Access::. - -`int putpwent (const struct passwd *P, FILE *STREAM)' - `pwd.h' (SVID): *Note Writing a User Entry::. - -`int puts (const char *S)' - `stdio.h' (ISO): *Note Simple Output::. - -`struct utmp * pututline (const struct utmp *UTMP)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`struct utmpx * pututxline (const struct utmpx *UTMP)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int putw (int W, FILE *STREAM)' - `stdio.h' (SVID): *Note Simple Output::. - -`wint_t putwc (wchar_t WC, FILE *STREAM)' - `wchar.h' (ISO): *Note Simple Output::. - -`wint_t putwchar_unlocked (wchar_t WC)' - `wchar.h' (GNU): *Note Simple Output::. - -`wint_t putwc_unlocked (wchar_t WC, FILE *STREAM)' - `wchar.h' (GNU): *Note Simple Output::. - -`ssize_t pwrite (int FILEDES, const void *BUFFER, size_t SIZE, off_t OFFSET)' - `unistd.h' (Unix98): *Note I/O Primitives::. - -`ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t SIZE, off64_t OFFSET)' - `unistd.h' (Unix98): *Note I/O Primitives::. - -`char * qecvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)' - `stdlib.h' (GNU): *Note System V Number Conversion::. - -`char * qecvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' - `stdlib.h' (GNU): *Note System V Number Conversion::. - -`char * qfcvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)' - `stdlib.h' (GNU): *Note System V Number Conversion::. - -`char * qfcvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' - `stdlib.h' (GNU): *Note System V Number Conversion::. - -`char * qgcvt (long double VALUE, int NDIGIT, char *BUF)' - `stdlib.h' (GNU): *Note System V Number Conversion::. - -`void qsort (void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)' - `stdlib.h' (ISO): *Note Array Sort Function::. - -`int raise (int SIGNUM)' - `signal.h' (ISO): *Note Signaling Yourself::. - -`int rand (void)' - `stdlib.h' (ISO): *Note ISO Random::. - -`int RAND_MAX' - `stdlib.h' (ISO): *Note ISO Random::. - -`long int random (void)' - `stdlib.h' (BSD): *Note BSD Random::. - -`int rand_r (unsigned int *SEED)' - `stdlib.h' (POSIX.1): *Note ISO Random::. - -`void * rawmemchr (const void *BLOCK, int C)' - `string.h' (GNU): *Note Search Functions::. - -`ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)' - `unistd.h' (POSIX.1): *Note I/O Primitives::. - -`struct dirent * readdir (DIR *DIRSTREAM)' - `dirent.h' (POSIX.1): *Note Reading/Closing Directory::. - -`struct dirent64 * readdir64 (DIR *DIRSTREAM)' - `dirent.h' (LFS): *Note Reading/Closing Directory::. - -`int readdir64_r (DIR *DIRSTREAM, struct dirent64 *ENTRY, struct dirent64 **RESULT)' - `dirent.h' (LFS): *Note Reading/Closing Directory::. - -`int readdir_r (DIR *DIRSTREAM, struct dirent *ENTRY, struct dirent **RESULT)' - `dirent.h' (GNU): *Note Reading/Closing Directory::. - -`int readlink (const char *FILENAME, char *BUFFER, size_t SIZE)' - `unistd.h' (BSD): *Note Symbolic Links::. - -`void * realloc (void *PTR, size_t NEWSIZE)' - `malloc.h', `stdlib.h' (ISO): *Note Changing Block Size::. - -`__realloc_hook' - `malloc.h' (GNU): *Note Hooks for Malloc::. - -`int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)' - `sys/socket.h' (BSD): *Note Receiving Data::. - -`int recvfrom (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)' - `sys/socket.h' (BSD): *Note Receiving Datagrams::. - -`int recvmsg (int SOCKET, struct msghdr *MESSAGE, int FLAGS)' - `sys/socket.h' (BSD): *Note Receiving Datagrams::. - -`int RE_DUP_MAX' - `limits.h' (POSIX.2): *Note General Limits::. - -`_REENTRANT' - (GNU): *Note Feature Test Macros::. - -`REG_BADBR' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_BADPAT' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_BADRPT' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`int regcomp (regex_t *COMPILED, const char *PATTERN, int CFLAGS)' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_EBRACE' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_EBRACK' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_ECOLLATE' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_ECTYPE' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_EESCAPE' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_EPAREN' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_ERANGE' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`size_t regerror (int ERRCODE, regex_t *COMPILED, char *BUFFER, size_t LENGTH)' - `regex.h' (POSIX.2): *Note Regexp Cleanup::. - -`REG_ESPACE' - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. - -`REG_ESPACE' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_ESUBREG' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`int regexec (regex_t *COMPILED, char *STRING, size_t NMATCH, regmatch_t MATCHPTR [], int EFLAGS)' - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. - -`regex_t' - `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. - -`REG_EXTENDED' - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. - -`void regfree (regex_t *COMPILED)' - `regex.h' (POSIX.2): *Note Regexp Cleanup::. - -`REG_ICASE' - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. - -`int register_printf_function (int SPEC, printf_function HANDLER-FUNCTION, printf_arginfo_function ARGINFO-FUNCTION)' - `printf.h' (GNU): *Note Registering New Conversions::. - -`regmatch_t' - `regex.h' (POSIX.2): *Note Regexp Subexpressions::. - -`REG_NEWLINE' - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. - -`REG_NOMATCH' - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. - -`REG_NOSUB' - `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. - -`REG_NOTBOL' - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. - -`REG_NOTEOL' - `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. - -`regoff_t' - `regex.h' (POSIX.2): *Note Regexp Subexpressions::. - -`double remainder (double NUMERATOR, double DENOMINATOR)' - `math.h' (BSD): *Note Remainder Functions::. - -`float remainderf (float NUMERATOR, float DENOMINATOR)' - `math.h' (BSD): *Note Remainder Functions::. - -`long double remainderl (long double NUMERATOR, long double DENOMINATOR)' - `math.h' (BSD): *Note Remainder Functions::. - -`int remove (const char *FILENAME)' - `stdio.h' (ISO): *Note Deleting Files::. - -`int rename (const char *OLDNAME, const char *NEWNAME)' - `stdio.h' (ISO): *Note Renaming Files::. - -`void rewind (FILE *STREAM)' - `stdio.h' (ISO): *Note File Positioning::. - -`void rewinddir (DIR *DIRSTREAM)' - `dirent.h' (POSIX.1): *Note Random Access Directory::. - -`char * rindex (const char *STRING, int C)' - `string.h' (BSD): *Note Search Functions::. - -`double rint (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`float rintf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long double rintl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`int RLIM_INFINITY' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_AS' - `sys/resource.h' (Unix98): *Note Limits on Resources::. - -`RLIMIT_CORE' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_CPU' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_DATA' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_FSIZE' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_MEMLOCK' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_NOFILE' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_NPROC' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_RSS' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIMIT_STACK' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`RLIM_NLIMITS' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`int rmdir (const char *FILENAME)' - `unistd.h' (POSIX.1): *Note Deleting Files::. - -`int R_OK' - `unistd.h' (POSIX.1): *Note Testing File Access::. - -`double round (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`float roundf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long double roundl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`RUN_LVL' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`RUN_LVL' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`RUSAGE_CHILDREN' - `sys/resource.h' (BSD): *Note Resource Usage::. - -`RUSAGE_SELF' - `sys/resource.h' (BSD): *Note Resource Usage::. - -`int SA_NOCLDSTOP' - `signal.h' (POSIX.1): *Note Flags for Sigaction::. - -`int SA_ONSTACK' - `signal.h' (BSD): *Note Flags for Sigaction::. - -`int SA_RESTART' - `signal.h' (BSD): *Note Flags for Sigaction::. - -`int sbrk (ptrdiff_t DELTA)' - `unistd.h' (BSD): *Note Resizing the Data Segment::. - -`_SC_2_C_DEV' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_2_FORT_DEV' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_2_FORT_RUN' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_2_LOCALEDEF' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_2_SW_DEV' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_2_VERSION' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_AIO_LISTIO_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_AIO_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_AIO_PRIO_DELTA_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`double scalb (double VALUE, int EXPONENT)' - `math.h' (BSD): *Note Normalization Functions::. - -`float scalbf (float VALUE, int EXPONENT)' - `math.h' (BSD): *Note Normalization Functions::. - -`long double scalbl (long double VALUE, int EXPONENT)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int scalbln (double X, long int n)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int scalblnf (float X, long int n)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int scalblnl (long double X, long int n)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int scalbn (double X, int n)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int scalbnf (float X, int n)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int scalbnl (long double X, int n)' - `math.h' (BSD): *Note Normalization Functions::. - -`int scandir (const char *DIR, struct dirent ***NAMELIST, int (*SELECTOR) (const struct dirent *), int (*CMP) (const void *, const void *))' - `dirent.h' (BSD/SVID): *Note Scanning Directory Content::. - -`int scandir64 (const char *DIR, struct dirent64 ***NAMELIST, int (*SELECTOR) (const struct dirent64 *), int (*CMP) (const void *, const void *))' - `dirent.h' (GNU): *Note Scanning Directory Content::. - -`int scanf (const char *TEMPLATE, ...)' - `stdio.h' (ISO): *Note Formatted Input Functions::. - -`_SC_ARG_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_ASYNCHRONOUS_IO' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_ATEXIT_MAX' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_AVPHYS_PAGES' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_BC_BASE_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_BC_DIM_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_BC_SCALE_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_BC_STRING_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_CHAR_BIT' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_CHARCLASS_NAME_MAX' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_CHAR_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_CHAR_MIN' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_CHILD_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_CLK_TCK' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_COLL_WEIGHTS_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_DELAYTIMER_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_EQUIV_CLASS_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_EXPR_NEST_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_FSYNC' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_GETGR_R_SIZE_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_GETPW_R_SIZE_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`SCHAR_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`SCHAR_MIN' - `limits.h' (ISO): *Note Range of Type::. - -`int sched_getparam (pid_t PID, const struct sched_param *PARAM)' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_get_priority_max (int *POLICY);' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_get_priority_min (int *POLICY);' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_getscheduler (pid_t PID)' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_rr_get_interval (pid_t PID, struct timespec *INTERVAL)' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_setparam (pid_t PID, const struct sched_param *PARAM)' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_setscheduler (pid_t PID, int POLICY, const struct sched_param *PARAM)' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`int sched_yield (void)' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`_SC_INT_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_INT_MIN' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_JOB_CONTROL' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_LINE_MAX' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_LOGIN_NAME_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_LONG_BIT' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_MAPPED_FILES' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_MB_LEN_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_MEMLOCK' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_MEMLOCK_RANGE' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_MEMORY_PROTECTION' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_MESSAGE_PASSING' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_MQ_OPEN_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_MQ_PRIO_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_NGROUPS_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_NL_ARGMAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_NL_LANGMAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_NL_MSGMAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_NL_NMAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_NL_SETMAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_NL_TEXTMAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_NPROCESSORS_CONF' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_NPROCESSORS_ONLN' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_NZERO' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_OPEN_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_PAGESIZE' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_PHYS_PAGES' - `unistd.h' (GNU): *Note Constants for Sysconf::. - -`_SC_PII' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_INTERNET' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_INTERNET_DGRAM' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_INTERNET_STREAM' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_OSI' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_OSI_CLTS' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_OSI_COTS' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_OSI_M' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_SOCKET' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PII_XTI' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_PRIORITIZED_IO' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_PRIORITY_SCHEDULING' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_REALTIME_SIGNALS' - `unistdh.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_RTSIG_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SAVED_IDS' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SCHAR_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_SCHAR_MIN' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_SELECT' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_SEMAPHORES' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SEM_NSEMS_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SEM_VALUE_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SHARED_MEMORY_OBJECTS' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SHRT_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_SHRT_MIN' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_SIGQUEUE_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`SC_SSIZE_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_STREAM_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_SYNCHRONIZED_IO' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_ATTR_STACKADDR' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_ATTR_STACKSIZE' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_DESTRUCTOR_ITERATIONS' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_KEYS_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_PRIO_INHERIT' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_PRIO_PROTECT' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_PRIORITY_SCHEDULING' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_PROCESS_SHARED' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREADS' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_SAFE_FUNCTIONS' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_STACK_MIN' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_THREAD_THREADS_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_TIMER_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_TIMERS' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_T_IOV_MAX' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_TTY_NAME_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_TZNAME_MAX' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_UCHAR_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_UINT_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_UIO_MAXIOV' - `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. - -`_SC_ULONG_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_USHRT_MAX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_VERSION' - `unistd.h' (POSIX.1): *Note Constants for Sysconf::. - -`_SC_VERSION' - `unistd.h' (POSIX.2): *Note Constants for Sysconf::. - -`_SC_WORD_BIT' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_CRYPT' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_ENH_I18N' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_LEGACY' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_REALTIME' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_REALTIME_THREADS' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_SHM' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_UNIX' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_VERSION' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_XCU_VERSION' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_XPG2' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_XPG3' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`_SC_XOPEN_XPG4' - `unistd.h' (X/Open): *Note Constants for Sysconf::. - -`unsigned short int * seed48 (unsigned short int SEED16V[3])' - `stdlib.h' (SVID): *Note SVID Random::. - -`int seed48_r (unsigned short int SEED16V[3], struct drand48_data *BUFFER)' - `stdlib.h' (GNU): *Note SVID Random::. - -`int SEEK_CUR' - `stdio.h' (ISO): *Note File Positioning::. - -`void seekdir (DIR *DIRSTREAM, off_t POS)' - `dirent.h' (BSD): *Note Random Access Directory::. - -`int SEEK_END' - `stdio.h' (ISO): *Note File Positioning::. - -`int SEEK_SET' - `stdio.h' (ISO): *Note File Positioning::. - -`int select (int NFDS, fd_set *READ-FDS, fd_set *WRITE-FDS, fd_set *EXCEPT-FDS, struct timeval *TIMEOUT)' - `sys/types.h' (BSD): *Note Waiting for I/O::. - -`int sem_destroy (sem_t * SEM)' - `semaphore.h' (POSIX): *Note POSIX Semaphores::. - -`int sem_getvalue (sem_t * SEM, int * SVAL)' - `semaphore.h' (POSIX): *Note POSIX Semaphores::. - -`int sem_init (sem_t *SEM, int PSHARED, unsigned int VALUE)' - `semaphore.h' (POSIX): *Note POSIX Semaphores::. - -`int sem_post (sem_t * SEM)' - `semaphore.h' (POSIX): *Note POSIX Semaphores::. - -`int sem_trywait (sem_t * SEM)' - `semaphore.h' (POSIX): *Note POSIX Semaphores::. - -`int sem_wait (sem_t * SEM)' - `semaphore.h' (POSIX): *Note POSIX Semaphores::. - -`int send (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)' - `sys/socket.h' (BSD): *Note Sending Data::. - -`int sendmsg (int SOCKET, const struct msghdr *MESSAGE, int FLAGS)' - `sys/socket.h' (BSD): *Note Receiving Datagrams::. - -`int sendto (int SOCKET, void *BUFFER. size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)' - `sys/socket.h' (BSD): *Note Sending Datagrams::. - -`void setbuf (FILE *STREAM, char *BUF)' - `stdio.h' (ISO): *Note Controlling Buffering::. - -`void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)' - `stdio.h' (BSD): *Note Controlling Buffering::. - -`int setdomainname (const char *NAME, size_t LENGTH)' - `unistd.h' (???): *Note Host Identification::. - -`int setegid (gid_t NEWGID)' - `unistd.h' (POSIX.1): *Note Setting Groups::. - -`int setenv (const char *NAME, const char *VALUE, int REPLACE)' - `stdlib.h' (BSD): *Note Environment Access::. - -`int seteuid (uid_t NEWEUID)' - `unistd.h' (POSIX.1): *Note Setting User ID::. - -`int setfsent (void)' - `fstab.h' (BSD): *Note fstab::. - -`int setgid (gid_t NEWGID)' - `unistd.h' (POSIX.1): *Note Setting Groups::. - -`void setgrent (void)' - `grp.h' (SVID, BSD): *Note Scanning All Groups::. - -`int setgroups (size_t COUNT, gid_t *GROUPS)' - `grp.h' (BSD): *Note Setting Groups::. - -`void sethostent (int STAYOPEN)' - `netdb.h' (BSD): *Note Host Names::. - -`int sethostid (long int ID)' - `unistd.h' (BSD): *Note Host Identification::. - -`int sethostname (const char *NAME, size_t LENGTH)' - `unistd.h' (BSD): *Note Host Identification::. - -`int setitimer (int WHICH, struct itimerval *NEW, struct itimerval *OLD)' - `sys/time.h' (BSD): *Note Setting an Alarm::. - -`int setjmp (jmp_buf STATE)' - `setjmp.h' (ISO): *Note Non-Local Details::. - -`void setkey (const char *KEY)' - `crypt.h' (BSD, SVID): *Note DES Encryption::. - -`void setkey_r (const char *KEY, struct crypt_data * DATA)' - `crypt.h' (GNU): *Note DES Encryption::. - -`void setlinebuf (FILE *STREAM)' - `stdio.h' (BSD): *Note Controlling Buffering::. - -`char * setlocale (int CATEGORY, const char *LOCALE)' - `locale.h' (ISO): *Note Setting the Locale::. - -`int setlogmask (int MASK)' - `syslog.h' (BSD): *Note setlogmask::. - -`FILE * setmntent (const char *FILE, const char *MODE)' - `mntent.h' (BSD): *Note mtab::. - -`void setnetent (int STAYOPEN)' - `netdb.h' (BSD): *Note Networks Database::. - -`int setnetgrent (const char *NETGROUP)' - `netdb.h' (BSD): *Note Lookup Netgroup::. - -`int setpgid (pid_t PID, pid_t PGID)' - `unistd.h' (POSIX.1): *Note Process Group Functions::. - -`int setpgrp (pid_t PID, pid_t PGID)' - `unistd.h' (BSD): *Note Process Group Functions::. - -`int setpriority (int CLASS, int ID, int NICEVAL)' - `sys/resource.h' (BSD,POSIX): *Note Traditional Scheduling - Functions::. - -`void setprotoent (int STAYOPEN)' - `netdb.h' (BSD): *Note Protocols Database::. - -`void setpwent (void)' - `pwd.h' (SVID, BSD): *Note Scanning All Users::. - -`int setregid (gid_t RGID, gid_t EGID)' - `unistd.h' (BSD): *Note Setting Groups::. - -`int setreuid (uid_t RUID, uid_t EUID)' - `unistd.h' (BSD): *Note Setting User ID::. - -`int setrlimit (int RESOURCE, const struct rlimit *RLP)' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`int setrlimit64 (int RESOURCE, const struct rlimit64 *RLP)' - `sys/resource.h' (Unix98): *Note Limits on Resources::. - -`void setservent (int STAYOPEN)' - `netdb.h' (BSD): *Note Services Database::. - -`pid_t setsid (void)' - `unistd.h' (POSIX.1): *Note Process Group Functions::. - -`int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t OPTLEN)' - `sys/socket.h' (BSD): *Note Socket Option Functions::. - -`void * setstate (void *STATE)' - `stdlib.h' (BSD): *Note BSD Random::. - -`int settimeofday (const struct timeval *TP, const struct timezone *TZP)' - `sys/time.h' (BSD): *Note High-Resolution Calendar::. - -`int setuid (uid_t NEWUID)' - `unistd.h' (POSIX.1): *Note Setting User ID::. - -`void setutent (void)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`void setutxent (void)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t SIZE)' - `stdio.h' (ISO): *Note Controlling Buffering::. - -`SHRT_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`SHRT_MIN' - `limits.h' (ISO): *Note Range of Type::. - -`int shutdown (int SOCKET, int HOW)' - `sys/socket.h' (BSD): *Note Closing a Socket::. - -`S_IEXEC' - `sys/stat.h' (BSD): *Note Permission Bits::. - -`S_IFBLK' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`S_IFCHR' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`S_IFDIR' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`S_IFIFO' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`S_IFLNK' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`int S_IFMT' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`S_IFREG' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`S_IFSOCK' - `sys/stat.h' (BSD): *Note Testing File Type::. - -`int SIGABRT' - `signal.h' (ISO): *Note Program Error Signals::. - -`int sigaction (int SIGNUM, const struct sigaction *ACTION, struct sigaction *OLD-ACTION)' - `signal.h' (POSIX.1): *Note Advanced Signal Handling::. - -`int sigaddset (sigset_t *SET, int SIGNUM)' - `signal.h' (POSIX.1): *Note Signal Sets::. - -`int SIGALRM' - `signal.h' (POSIX.1): *Note Alarm Signals::. - -`int sigaltstack (const struct sigaltstack *STACK, struct sigaltstack *OLDSTACK)' - `signal.h' (BSD): *Note Signal Stack::. - -`sig_atomic_t' - `signal.h' (ISO): *Note Atomic Types::. - -`SIG_BLOCK' - `signal.h' (POSIX.1): *Note Process Signal Mask::. - -`int sigblock (int MASK)' - `signal.h' (BSD): *Note Blocking in BSD::. - -`int SIGBUS' - `signal.h' (BSD): *Note Program Error Signals::. - -`int SIGCHLD' - `signal.h' (POSIX.1): *Note Job Control Signals::. - -`int SIGCLD' - `signal.h' (SVID): *Note Job Control Signals::. - -`int SIGCONT' - `signal.h' (POSIX.1): *Note Job Control Signals::. - -`int sigdelset (sigset_t *SET, int SIGNUM)' - `signal.h' (POSIX.1): *Note Signal Sets::. - -`int sigemptyset (sigset_t *SET)' - `signal.h' (POSIX.1): *Note Signal Sets::. - -`int SIGEMT' - `signal.h' (BSD): *Note Program Error Signals::. - -`sighandler_t SIG_ERR' - `signal.h' (ISO): *Note Basic Signal Handling::. - -`int sigfillset (sigset_t *SET)' - `signal.h' (POSIX.1): *Note Signal Sets::. - -`int SIGFPE' - `signal.h' (ISO): *Note Program Error Signals::. - -`sighandler_t' - `signal.h' (GNU): *Note Basic Signal Handling::. - -`int SIGHUP' - `signal.h' (POSIX.1): *Note Termination Signals::. - -`int SIGILL' - `signal.h' (ISO): *Note Program Error Signals::. - -`int SIGINFO' - `signal.h' (BSD): *Note Miscellaneous Signals::. - -`int SIGINT' - `signal.h' (ISO): *Note Termination Signals::. - -`int siginterrupt (int SIGNUM, int FAILFLAG)' - `signal.h' (BSD): *Note BSD Handler::. - -`int SIGIO' - `signal.h' (BSD): *Note Asynchronous I/O Signals::. - -`int SIGIOT' - `signal.h' (Unix): *Note Program Error Signals::. - -`int sigismember (const sigset_t *SET, int SIGNUM)' - `signal.h' (POSIX.1): *Note Signal Sets::. - -`sigjmp_buf' - `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::. - -`int SIGKILL' - `signal.h' (POSIX.1): *Note Termination Signals::. - -`void siglongjmp (sigjmp_buf STATE, int VALUE)' - `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::. - -`int SIGLOST' - `signal.h' (GNU): *Note Operation Error Signals::. - -`int sigmask (int SIGNUM)' - `signal.h' (BSD): *Note Blocking in BSD::. - -`sighandler_t signal (int SIGNUM, sighandler_t ACTION)' - `signal.h' (ISO): *Note Basic Signal Handling::. - -`int signbit (_float-type_ X)' - `math.h' (ISO): *Note FP Bit Twiddling::. - -`long long int significand (double X)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int significandf (float X)' - `math.h' (BSD): *Note Normalization Functions::. - -`long long int significandl (long double X)' - `math.h' (BSD): *Note Normalization Functions::. - -`int sigpause (int MASK)' - `signal.h' (BSD): *Note Blocking in BSD::. - -`int sigpending (sigset_t *SET)' - `signal.h' (POSIX.1): *Note Checking for Pending Signals::. - -`int SIGPIPE' - `signal.h' (POSIX.1): *Note Operation Error Signals::. - -`int SIGPOLL' - `signal.h' (SVID): *Note Asynchronous I/O Signals::. - -`int sigprocmask (int HOW, const sigset_t *SET, sigset_t *OLDSET)' - `signal.h' (POSIX.1): *Note Process Signal Mask::. - -`int SIGPROF' - `signal.h' (BSD): *Note Alarm Signals::. - -`int SIGQUIT' - `signal.h' (POSIX.1): *Note Termination Signals::. - -`int SIGSEGV' - `signal.h' (ISO): *Note Program Error Signals::. - -`int sigsetjmp (sigjmp_buf STATE, int SAVESIGS)' - `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::. - -`SIG_SETMASK' - `signal.h' (POSIX.1): *Note Process Signal Mask::. - -`int sigsetmask (int MASK)' - `signal.h' (BSD): *Note Blocking in BSD::. - -`sigset_t' - `signal.h' (POSIX.1): *Note Signal Sets::. - -`int sigstack (const struct sigstack *STACK, struct sigstack *OLDSTACK)' - `signal.h' (BSD): *Note Signal Stack::. - -`int SIGSTOP' - `signal.h' (POSIX.1): *Note Job Control Signals::. - -`int sigsuspend (const sigset_t *SET)' - `signal.h' (POSIX.1): *Note Sigsuspend::. - -`int SIGSYS' - `signal.h' (Unix): *Note Program Error Signals::. - -`int SIGTERM' - `signal.h' (ISO): *Note Termination Signals::. - -`int SIGTRAP' - `signal.h' (BSD): *Note Program Error Signals::. - -`int SIGTSTP' - `signal.h' (POSIX.1): *Note Job Control Signals::. - -`int SIGTTIN' - `signal.h' (POSIX.1): *Note Job Control Signals::. - -`int SIGTTOU' - `signal.h' (POSIX.1): *Note Job Control Signals::. - -`SIG_UNBLOCK' - `signal.h' (POSIX.1): *Note Process Signal Mask::. - -`int SIGURG' - `signal.h' (BSD): *Note Asynchronous I/O Signals::. - -`int SIGUSR1' - `signal.h' (POSIX.1): *Note Miscellaneous Signals::. - -`int SIGUSR2' - `signal.h' (POSIX.1): *Note Miscellaneous Signals::. - -`int sigvec (int SIGNUM, const struct sigvec *ACTION,struct sigvec *OLD-ACTION)' - `signal.h' (BSD): *Note BSD Handler::. - -`int SIGVTALRM' - `signal.h' (BSD): *Note Alarm Signals::. - -`int sigwait (const sigset_t *SET, int *SIG)' - `pthread.h' (POSIX): *Note Threads and Signal Handling::. - -`int SIGWINCH' - `signal.h' (BSD): *Note Miscellaneous Signals::. - -`int SIGXCPU' - `signal.h' (BSD): *Note Operation Error Signals::. - -`int SIGXFSZ' - `signal.h' (BSD): *Note Operation Error Signals::. - -`double sin (double X)' - `math.h' (ISO): *Note Trig Functions::. - -`void sincos (double X, double *SINX, double *COSX)' - `math.h' (GNU): *Note Trig Functions::. - -`void sincosf (float X, float *SINX, float *COSX)' - `math.h' (GNU): *Note Trig Functions::. - -`void sincosl (long double X, long double *SINX, long double *COSX)' - `math.h' (GNU): *Note Trig Functions::. - -`float sinf (float X)' - `math.h' (ISO): *Note Trig Functions::. - -`double sinh (double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`float sinhf (float X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double sinhl (long double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double sinl (long double X)' - `math.h' (ISO): *Note Trig Functions::. - -`S_IREAD' - `sys/stat.h' (BSD): *Note Permission Bits::. - -`S_IRGRP' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IROTH' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IRUSR' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IRWXG' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IRWXO' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IRWXU' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`int S_ISBLK (mode_t M)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int S_ISCHR (mode_t M)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int S_ISDIR (mode_t M)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int S_ISFIFO (mode_t M)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`S_ISGID' - `sys/stat.h' (POSIX): *Note Permission Bits::. - -`int S_ISLNK (mode_t M)' - `sys/stat.h' (GNU): *Note Testing File Type::. - -`int S_ISREG (mode_t M)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int S_ISSOCK (mode_t M)' - `sys/stat.h' (GNU): *Note Testing File Type::. - -`S_ISUID' - `sys/stat.h' (POSIX): *Note Permission Bits::. - -`S_ISVTX' - `sys/stat.h' (BSD): *Note Permission Bits::. - -`S_IWGRP' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IWOTH' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IWRITE' - `sys/stat.h' (BSD): *Note Permission Bits::. - -`S_IWUSR' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IXGRP' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IXOTH' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`S_IXUSR' - `sys/stat.h' (POSIX.1): *Note Permission Bits::. - -`size_t' - `stddef.h' (ISO): *Note Important Data Types::. - -`unsigned int sleep (unsigned int SECONDS)' - `unistd.h' (POSIX.1): *Note Sleeping::. - -`int snprintf (char *S, size_t SIZE, const char *TEMPLATE, ...)' - `stdio.h' (GNU): *Note Formatted Output Functions::. - -`SO_BROADCAST' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`int SOCK_DGRAM' - `sys/socket.h' (BSD): *Note Communication Styles::. - -`int socket (int NAMESPACE, int STYLE, int PROTOCOL)' - `sys/socket.h' (BSD): *Note Creating a Socket::. - -`int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, int FILEDES[2])' - `sys/socket.h' (BSD): *Note Socket Pairs::. - -`int SOCK_RAW' - `sys/socket.h' (BSD): *Note Communication Styles::. - -`int SOCK_RDM' - `sys/socket.h' (BSD): *Note Communication Styles::. - -`int SOCK_SEQPACKET' - `sys/socket.h' (BSD): *Note Communication Styles::. - -`int SOCK_STREAM' - `sys/socket.h' (BSD): *Note Communication Styles::. - -`SO_DEBUG' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_DONTROUTE' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_ERROR' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_KEEPALIVE' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_LINGER' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`int SOL_SOCKET' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_OOBINLINE' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_RCVBUF' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_REUSEADDR' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_SNDBUF' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`SO_STYLE' - `sys/socket.h' (GNU): *Note Socket-Level Options::. - -`SO_TYPE' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`speed_t' - `termios.h' (POSIX.1): *Note Line Speed::. - -`int sprintf (char *S, const char *TEMPLATE, ...)' - `stdio.h' (ISO): *Note Formatted Output Functions::. - -`double sqrt (double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`float sqrtf (float X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`long double sqrtl (long double X)' - `math.h' (ISO): *Note Exponents and Logarithms::. - -`void srand (unsigned int SEED)' - `stdlib.h' (ISO): *Note ISO Random::. - -`void srand48 (long int SEEDVAL)' - `stdlib.h' (SVID): *Note SVID Random::. - -`int srand48_r (long int SEEDVAL, struct drand48_data *BUFFER)' - `stdlib.h' (GNU): *Note SVID Random::. - -`void srandom (unsigned int SEED)' - `stdlib.h' (BSD): *Note BSD Random::. - -`int sscanf (const char *S, const char *TEMPLATE, ...)' - `stdio.h' (ISO): *Note Formatted Input Functions::. - -`sighandler_t ssignal (int SIGNUM, sighandler_t ACTION)' - `signal.h' (SVID): *Note Basic Signal Handling::. - -`int SSIZE_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`ssize_t' - `unistd.h' (POSIX.1): *Note I/O Primitives::. - -`int stat (const char *FILENAME, struct stat *BUF)' - `sys/stat.h' (POSIX.1): *Note Reading Attributes::. - -`int stat64 (const char *FILENAME, struct stat64 *BUF)' - `sys/stat.h' (Unix98): *Note Reading Attributes::. - -`FILE * stderr' - `stdio.h' (ISO): *Note Standard Streams::. - -`STDERR_FILENO' - `unistd.h' (POSIX.1): *Note Descriptors and Streams::. - -`FILE * stdin' - `stdio.h' (ISO): *Note Standard Streams::. - -`STDIN_FILENO' - `unistd.h' (POSIX.1): *Note Descriptors and Streams::. - -`FILE * stdout' - `stdio.h' (ISO): *Note Standard Streams::. - -`STDOUT_FILENO' - `unistd.h' (POSIX.1): *Note Descriptors and Streams::. - -`int stime (time_t *NEWTIME)' - `time.h' (SVID, XPG): *Note Simple Calendar Time::. - -`char * stpcpy (char *restrict TO, const char *restrict FROM)' - `string.h' (Unknown origin): *Note Copying and Concatenation::. - -`char * stpncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)' - `string.h' (GNU): *Note Copying and Concatenation::. - -`int strcasecmp (const char *S1, const char *S2)' - `string.h' (BSD): *Note String/Array Comparison::. - -`char * strcasestr (const char *HAYSTACK, const char *NEEDLE)' - `string.h' (GNU): *Note Search Functions::. - -`char * strcat (char *restrict TO, const char *restrict FROM)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`char * strchr (const char *STRING, int C)' - `string.h' (ISO): *Note Search Functions::. - -`char * strchrnul (const char *STRING, int C)' - `string.h' (GNU): *Note Search Functions::. - -`int strcmp (const char *S1, const char *S2)' - `string.h' (ISO): *Note String/Array Comparison::. - -`int strcoll (const char *S1, const char *S2)' - `string.h' (ISO): *Note Collation Functions::. - -`char * strcpy (char *restrict TO, const char *restrict FROM)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`size_t strcspn (const char *STRING, const char *STOPSET)' - `string.h' (ISO): *Note Search Functions::. - -`char * strdup (const char *S)' - `string.h' (SVID): *Note Copying and Concatenation::. - -`char * strdupa (const char *S)' - `string.h' (GNU): *Note Copying and Concatenation::. - -`int STREAM_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`char * strerror (int ERRNUM)' - `string.h' (ISO): *Note Error Messages::. - -`char * strerror_r (int ERRNUM, char *BUF, size_t N)' - `string.h' (GNU): *Note Error Messages::. - -`char * strfry (char *STRING)' - `string.h' (GNU): *Note strfry::. - -`size_t strftime (char *S, size_t SIZE, const char *TEMPLATE, const struct tm *BROKENTIME)' - `time.h' (ISO): *Note Formatting Calendar Time::. - -`size_t strlen (const char *S)' - `string.h' (ISO): *Note String Length::. - -`int strncasecmp (const char *S1, const char *S2, size_t N)' - `string.h' (BSD): *Note String/Array Comparison::. - -`char * strncat (char *restrict TO, const char *restrict FROM, size_t SIZE)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`int strncmp (const char *S1, const char *S2, size_t SIZE)' - `string.h' (ISO): *Note String/Array Comparison::. - -`char * strncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)' - `string.h' (ISO): *Note Copying and Concatenation::. - -`char * strndup (const char *S, size_t SIZE)' - `string.h' (GNU): *Note Copying and Concatenation::. - -`char * strndupa (const char *S, size_t SIZE)' - `string.h' (GNU): *Note Copying and Concatenation::. - -`size_t strnlen (const char *S, size_t MAXLEN)' - `string.h' (GNU): *Note String Length::. - -`char * strpbrk (const char *STRING, const char *STOPSET)' - `string.h' (ISO): *Note Search Functions::. - -`char * strptime (const char *S, const char *FMT, struct tm *TP)' - `time.h' (XPG4): *Note Low-Level Time String Parsing::. - -`char * strrchr (const char *STRING, int C)' - `string.h' (ISO): *Note Search Functions::. - -`char * strsep (char **STRING_PTR, const char *DELIMITER)' - `string.h' (BSD): *Note Finding Tokens in a String::. - -`char * strsignal (int SIGNUM)' - `string.h' (GNU): *Note Signal Messages::. - -`size_t strspn (const char *STRING, const char *SKIPSET)' - `string.h' (ISO): *Note Search Functions::. - -`char * strstr (const char *HAYSTACK, const char *NEEDLE)' - `string.h' (ISO): *Note Search Functions::. - -`double strtod (const char *restrict STRING, char **restrict TAILPTR)' - `stdlib.h' (ISO): *Note Parsing of Floats::. - -`float strtof (const char *STRING, char **TAILPTR)' - `stdlib.h' (ISO): *Note Parsing of Floats::. - -`intmax_t strtoimax (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `inttypes.h' (ISO): *Note Parsing of Integers::. - -`char * strtok (char *restrict NEWSTRING, const char *restrict DELIMITERS)' - `string.h' (ISO): *Note Finding Tokens in a String::. - -`char * strtok_r (char *NEWSTRING, const char *DELIMITERS, char **SAVE_PTR)' - `string.h' (POSIX): *Note Finding Tokens in a String::. - -`long int strtol (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`long double strtold (const char *STRING, char **TAILPTR)' - `stdlib.h' (ISO): *Note Parsing of Floats::. - -`long long int strtoll (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`long long int strtoq (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `stdlib.h' (BSD): *Note Parsing of Integers::. - -`unsigned long int strtoul (const char *retrict STRING, char **restrict TAILPTR, int BASE)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`unsigned long long int strtoull (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `stdlib.h' (ISO): *Note Parsing of Integers::. - -`uintmax_t strtoumax (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `inttypes.h' (ISO): *Note Parsing of Integers::. - -`unsigned long long int strtouq (const char *restrict STRING, char **restrict TAILPTR, int BASE)' - `stdlib.h' (BSD): *Note Parsing of Integers::. - -`struct aiocb' - `aio.h' (POSIX.1b): *Note Asynchronous I/O::. - -`struct aiocb64' - `aio.h' (POSIX.1b): *Note Asynchronous I/O::. - -`struct aioinit' - `aio.h' (GNU): *Note Configuration of AIO::. - -`struct argp' - `argp.h' (GNU): *Note Argp Parsers::. - -`struct argp_child' - `argp.h' (GNU): *Note Argp Children::. - -`struct argp_option' - `argp.h' (GNU): *Note Argp Option Vectors::. - -`struct argp_state' - `argp.h' (GNU): *Note Argp Parsing State::. - -`struct dirent' - `dirent.h' (POSIX.1): *Note Directory Entries::. - -`struct exit_status' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`struct flock' - `fcntl.h' (POSIX.1): *Note File Locks::. - -`struct fstab' - `fstab.h' (BSD): *Note fstab::. - -`struct FTW' - `ftw.h' (XPG4.2): *Note Working with Directory Trees::. - -`struct __gconv_step' - `gconv.h' (GNU): *Note glibc iconv Implementation::. - -`struct __gconv_step_data' - `gconv.h' (GNU): *Note glibc iconv Implementation::. - -`struct group' - `grp.h' (POSIX.1): *Note Group Data Structure::. - -`struct hostent' - `netdb.h' (BSD): *Note Host Names::. - -`struct if_nameindex' - `net/if.h' (IPv6 basic API): *Note Interface Naming::. - -`struct in6_addr' - `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::. - -`struct in_addr' - `netinet/in.h' (BSD): *Note Host Address Data Type::. - -`struct itimerval' - `sys/time.h' (BSD): *Note Setting an Alarm::. - -`struct lconv' - `locale.h' (ISO): *Note The Lame Way to Locale Data::. - -`struct linger' - `sys/socket.h' (BSD): *Note Socket-Level Options::. - -`struct mallinfo' - `malloc.h' (GNU): *Note Statistics of Malloc::. - -`struct mntent' - `mntent.h' (BSD): *Note mtab::. - -`struct msghdr' - `sys/socket.h' (BSD): *Note Receiving Datagrams::. - -`struct netent' - `netdb.h' (BSD): *Note Networks Database::. - -`struct obstack' - `obstack.h' (GNU): *Note Creating Obstacks::. - -`struct option' - `getopt.h' (GNU): *Note Getopt Long Options::. - -`struct passwd' - `pwd.h' (POSIX.1): *Note User Data Structure::. - -`struct printf_info' - `printf.h' (GNU): *Note Conversion Specifier Options::. - -`struct protoent' - `netdb.h' (BSD): *Note Protocols Database::. - -`struct rlimit' - `sys/resource.h' (BSD): *Note Limits on Resources::. - -`struct rlimit64' - `sys/resource.h' (Unix98): *Note Limits on Resources::. - -`struct rusage' - `sys/resource.h' (BSD): *Note Resource Usage::. - -`struct sched_param' - `sched.h' (POSIX): *Note Basic Scheduling Functions::. - -`struct servent' - `netdb.h' (BSD): *Note Services Database::. - -`struct sgttyb' - `termios.h' (BSD): *Note BSD Terminal Modes::. - -`struct sigaction' - `signal.h' (POSIX.1): *Note Advanced Signal Handling::. - -`struct sigaltstack' - `signal.h' (BSD): *Note Signal Stack::. - -`struct sigstack' - `signal.h' (BSD): *Note Signal Stack::. - -`struct sigvec' - `signal.h' (BSD): *Note BSD Handler::. - -`struct sockaddr' - `sys/socket.h' (BSD): *Note Address Formats::. - -`struct sockaddr_in' - `netinet/in.h' (BSD): *Note Internet Address Formats::. - -`struct sockaddr_un' - `sys/un.h' (BSD): *Note Local Namespace Details::. - -`struct stat' - `sys/stat.h' (POSIX.1): *Note Attribute Meanings::. - -`struct stat64' - `sys/stat.h' (LFS): *Note Attribute Meanings::. - -`struct termios' - `termios.h' (POSIX.1): *Note Mode Data Types::. - -`struct timespec' - `sys/time.h' (POSIX.1): *Note Elapsed Time::. - -`struct timeval' - `sys/time.h' (BSD): *Note Elapsed Time::. - -`struct timezone' - `sys/time.h' (BSD): *Note High-Resolution Calendar::. - -`struct tm' - `time.h' (ISO): *Note Broken-down Time::. - -`struct tms' - `sys/times.h' (POSIX.1): *Note Processor Time::. - -`struct utimbuf' - `time.h' (POSIX.1): *Note File Times::. - -`struct utsname' - `sys/utsname.h' (POSIX.1): *Note Platform Type::. - -`int strverscmp (const char *S1, const char *S2)' - `string.h' (GNU): *Note String/Array Comparison::. - -`size_t strxfrm (char *restrict TO, const char *restrict FROM, size_t SIZE)' - `string.h' (ISO): *Note Collation Functions::. - -`int stty (int FILEDES, struct sgttyb * attributes)' - `sgtty.h' (BSD): *Note BSD Terminal Modes::. - -`int S_TYPEISMQ (struct stat S)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int S_TYPEISSEM (struct stat S)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int S_TYPEISSHM (struct stat S)' - `sys/stat.h' (POSIX): *Note Testing File Type::. - -`int SUN_LEN (_struct sockaddr_un *_ PTR)' - `sys/un.h' (BSD): *Note Local Namespace Details::. - -`_SVID_SOURCE' - (GNU): *Note Feature Test Macros::. - -`int SV_INTERRUPT' - `signal.h' (BSD): *Note BSD Handler::. - -`int SV_ONSTACK' - `signal.h' (BSD): *Note BSD Handler::. - -`int SV_RESETHAND' - `signal.h' (Sun): *Note BSD Handler::. - -`int swprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, ...)' - `wchar.h' (GNU): *Note Formatted Output Functions::. - -`int swscanf (const wchar_t *WS, const char *TEMPLATE, ...)' - `wchar.h' (ISO): *Note Formatted Input Functions::. - -`int symlink (const char *OLDNAME, const char *NEWNAME)' - `unistd.h' (BSD): *Note Symbolic Links::. - -`SYMLINK_MAX' - `limits.h' (POSIX.1): *Note File Minimums::. - -`int sync (void)' - `unistd.h' (X/Open): *Note Synchronizing I/O::. - -`long int sysconf (int PARAMETER)' - `unistd.h' (POSIX.1): *Note Sysconf Definition::. - -`int sysctl (int *NAMES, int NLEN, void *OLDVAL,' - `sysctl.h' (BSD): *Note System Parameters::. - -`void syslog (int FACILITY_PRIORITY, char *FORMAT, ...)' - `syslog.h' (BSD): *Note syslog; vsyslog::. - -`int system (const char *COMMAND)' - `stdlib.h' (ISO): *Note Running a Command::. - -`sighandler_t sysv_signal (int SIGNUM, sighandler_t ACTION)' - `signal.h' (GNU): *Note Basic Signal Handling::. - -`double tan (double X)' - `math.h' (ISO): *Note Trig Functions::. - -`float tanf (float X)' - `math.h' (ISO): *Note Trig Functions::. - -`double tanh (double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`float tanhf (float X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double tanhl (long double X)' - `math.h' (ISO): *Note Hyperbolic Functions::. - -`long double tanl (long double X)' - `math.h' (ISO): *Note Trig Functions::. - -`int tcdrain (int FILEDES)' - `termios.h' (POSIX.1): *Note Line Control::. - -`tcflag_t' - `termios.h' (POSIX.1): *Note Mode Data Types::. - -`int tcflow (int FILEDES, int ACTION)' - `termios.h' (POSIX.1): *Note Line Control::. - -`int tcflush (int FILEDES, int QUEUE)' - `termios.h' (POSIX.1): *Note Line Control::. - -`int tcgetattr (int FILEDES, struct termios *TERMIOS-P)' - `termios.h' (POSIX.1): *Note Mode Functions::. - -`pid_t tcgetpgrp (int FILEDES)' - `unistd.h' (POSIX.1): *Note Terminal Access Functions::. - -`pid_t tcgetsid (int FILDES)' - `termios.h' (Unix98): *Note Terminal Access Functions::. - -`TCSADRAIN' - `termios.h' (POSIX.1): *Note Mode Functions::. - -`TCSAFLUSH' - `termios.h' (POSIX.1): *Note Mode Functions::. - -`TCSANOW' - `termios.h' (POSIX.1): *Note Mode Functions::. - -`TCSASOFT' - `termios.h' (BSD): *Note Mode Functions::. - -`int tcsendbreak (int FILEDES, int DURATION)' - `termios.h' (POSIX.1): *Note Line Control::. - -`int tcsetattr (int FILEDES, int WHEN, const struct termios *TERMIOS-P)' - `termios.h' (POSIX.1): *Note Mode Functions::. - -`int tcsetpgrp (int FILEDES, pid_t PGID)' - `unistd.h' (POSIX.1): *Note Terminal Access Functions::. - -`void * tdelete (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)' - `search.h' (SVID): *Note Tree Search Function::. - -`void tdestroy (void *VROOT, __free_fn_t FREEFCT)' - `search.h' (GNU): *Note Tree Search Function::. - -`off_t telldir (DIR *DIRSTREAM)' - `dirent.h' (BSD): *Note Random Access Directory::. - -`TEMP_FAILURE_RETRY (EXPRESSION)' - `unistd.h' (GNU): *Note Interrupted Primitives::. - -`char * tempnam (const char *DIR, const char *PREFIX)' - `stdio.h' (SVID): *Note Temporary Files::. - -`char * textdomain (const char *DOMAINNAME)' - `libintl.h' (GNU): *Note Locating gettext catalog::. - -`void * tfind (const void *KEY, void *const *ROOTP, comparison_fn_t COMPAR)' - `search.h' (SVID): *Note Tree Search Function::. - -`double tgamma (double X)' - `math.h' (XPG, ISO): *Note Special Functions::. - -`float tgammaf (float X)' - `math.h' (XPG, ISO): *Note Special Functions::. - -`long double tgammal (long double X)' - `math.h' (XPG, ISO): *Note Special Functions::. - -`time_t time (time_t *RESULT)' - `time.h' (ISO): *Note Simple Calendar Time::. - -`time_t timegm (struct tm *BROKENTIME)' - `time.h' (???): *Note Broken-down Time::. - -`time_t timelocal (struct tm *BROKENTIME)' - `time.h' (???): *Note Broken-down Time::. - -`clock_t times (struct tms *BUFFER)' - `sys/times.h' (POSIX.1): *Note Processor Time::. - -`time_t' - `time.h' (ISO): *Note Simple Calendar Time::. - -`long int timezone' - `time.h' (SVID): *Note Time Zone Functions::. - -`FILE * tmpfile (void)' - `stdio.h' (ISO): *Note Temporary Files::. - -`FILE * tmpfile64 (void)' - `stdio.h' (Unix98): *Note Temporary Files::. - -`int TMP_MAX' - `stdio.h' (ISO): *Note Temporary Files::. - -`char * tmpnam (char *RESULT)' - `stdio.h' (ISO): *Note Temporary Files::. - -`char * tmpnam_r (char *RESULT)' - `stdio.h' (GNU): *Note Temporary Files::. - -`int toascii (int C)' - `ctype.h' (SVID, BSD): *Note Case Conversion::. - -`int _tolower (int C)' - `ctype.h' (SVID): *Note Case Conversion::. - -`int tolower (int C)' - `ctype.h' (ISO): *Note Case Conversion::. - -`tcflag_t TOSTOP' - `termios.h' (POSIX.1): *Note Local Modes::. - -`int _toupper (int C)' - `ctype.h' (SVID): *Note Case Conversion::. - -`int toupper (int C)' - `ctype.h' (ISO): *Note Case Conversion::. - -`wint_t towctrans (wint_t WC, wctrans_t DESC)' - `wctype.h' (ISO): *Note Wide Character Case Conversion::. - -`wint_t towlower (wint_t WC)' - `wctype.h' (ISO): *Note Wide Character Case Conversion::. - -`wint_t towupper (wint_t WC)' - `wctype.h' (ISO): *Note Wide Character Case Conversion::. - -`double trunc (double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`int truncate (const char *FILENAME, off_t LENGTH)' - `unistd.h' (X/Open): *Note File Size::. - -`int truncate64 (const char *NAME, off64_t LENGTH)' - `unistd.h' (Unix98): *Note File Size::. - -`float truncf (float X)' - `math.h' (ISO): *Note Rounding Functions::. - -`long double truncl (long double X)' - `math.h' (ISO): *Note Rounding Functions::. - -`TRY_AGAIN' - `netdb.h' (BSD): *Note Host Names::. - -`void * tsearch (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)' - `search.h' (SVID): *Note Tree Search Function::. - -`char * ttyname (int FILEDES)' - `unistd.h' (POSIX.1): *Note Is It a Terminal::. - -`int ttyname_r (int FILEDES, char *BUF, size_t LEN)' - `unistd.h' (POSIX.1): *Note Is It a Terminal::. - -`void twalk (const void *ROOT, __action_fn_t ACTION)' - `search.h' (SVID): *Note Tree Search Function::. - -`char * tzname [2]' - `time.h' (POSIX.1): *Note Time Zone Functions::. - -`int TZNAME_MAX' - `limits.h' (POSIX.1): *Note General Limits::. - -`void tzset (void)' - `time.h' (POSIX.1): *Note Time Zone Functions::. - -`UCHAR_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`uid_t' - `sys/types.h' (POSIX.1): *Note Reading Persona::. - -`UINT_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`int ulimit (int CMD, ...)' - `ulimit.h' (BSD): *Note Limits on Resources::. - -`ULONG_LONG_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`ULONG_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`mode_t umask (mode_t MASK)' - `sys/stat.h' (POSIX.1): *Note Setting Permissions::. - -`int umount (const char *FILE)' - `sys/mount.h' (SVID, GNU): *Note Mount-Unmount-Remount::. - -`int umount2 (const char *FILE, int FLAGS)' - `sys/mount.h' (GNU): *Note Mount-Unmount-Remount::. - -`int uname (struct utsname *INFO)' - `sys/utsname.h' (POSIX.1): *Note Platform Type::. - -`int ungetc (int C, FILE *STREAM)' - `stdio.h' (ISO): *Note How Unread::. - -`wint_t ungetwc (wint_t WC, FILE *STREAM)' - `wchar.h' (ISO): *Note How Unread::. - -`union wait' - `sys/wait.h' (BSD): *Note BSD Wait Functions::. - -`int unlink (const char *FILENAME)' - `unistd.h' (POSIX.1): *Note Deleting Files::. - -`int unlockpt (int FILEDES)' - `stdlib.h' (SVID, XPG4.2): *Note Allocation::. - -`int unsetenv (const char *NAME)' - `stdlib.h' (BSD): *Note Environment Access::. - -`void updwtmp (const char *WTMP_FILE, const struct utmp *UTMP)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`USER_PROCESS' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`USER_PROCESS' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`USHRT_MAX' - `limits.h' (ISO): *Note Range of Type::. - -`int utime (const char *FILENAME, const struct utimbuf *TIMES)' - `time.h' (POSIX.1): *Note File Times::. - -`int utimes (const char *FILENAME, struct timeval TVP[2])' - `sys/time.h' (BSD): *Note File Times::. - -`int utmpname (const char *FILE)' - `utmp.h' (SVID): *Note Manipulating the Database::. - -`int utmpxname (const char *FILE)' - `utmpx.h' (XPG4.2): *Note XPG Functions::. - -`va_alist' - `varargs.h' (Unix): *Note Old Varargs::. - -`TYPE va_arg (va_list AP, TYPE)' - `stdarg.h' (ISO): *Note Argument Macros::. - -`void __va_copy (va_list DEST, va_list SRC)' - `stdarg.h' (GNU): *Note Argument Macros::. - -`va_dcl' - `varargs.h' (Unix): *Note Old Varargs::. - -`void va_end (va_list AP)' - `stdarg.h' (ISO): *Note Argument Macros::. - -`va_list' - `stdarg.h' (ISO): *Note Argument Macros::. - -`void * valloc (size_t SIZE)' - `malloc.h', `stdlib.h' (BSD): *Note Aligned Memory Blocks::. - -`int vasprintf (char **PTR, const char *TEMPLATE, va_list AP)' - `stdio.h' (GNU): *Note Variable Arguments Output::. - -`void va_start (va_list AP)' - `varargs.h' (Unix): *Note Old Varargs::. - -`void va_start (va_list AP, LAST-REQUIRED)' - `stdarg.h' (ISO): *Note Argument Macros::. - -`int VDISCARD' - `termios.h' (BSD): *Note Other Special::. - -`int VDSUSP' - `termios.h' (BSD): *Note Signal Characters::. - -`int VEOF' - `termios.h' (POSIX.1): *Note Editing Characters::. - -`int VEOL' - `termios.h' (POSIX.1): *Note Editing Characters::. - -`int VEOL2' - `termios.h' (BSD): *Note Editing Characters::. - -`int VERASE' - `termios.h' (POSIX.1): *Note Editing Characters::. - -`int versionsort (const void *A, const void *B)' - `dirent.h' (GNU): *Note Scanning Directory Content::. - -`int versionsort64 (const void *A, const void *B)' - `dirent.h' (GNU): *Note Scanning Directory Content::. - -`pid_t vfork (void)' - `unistd.h' (BSD): *Note Creating a Process::. - -`int vfprintf (FILE *STREAM, const char *TEMPLATE, va_list AP)' - `stdio.h' (ISO): *Note Variable Arguments Output::. - -`int vfscanf (FILE *STREAM, const char *TEMPLATE, va_list AP)' - `stdio.h' (ISO): *Note Variable Arguments Input::. - -`int vfwprintf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)' - `wchar.h' (ISO): *Note Variable Arguments Output::. - -`int vfwscanf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)' - `wchar.h' (ISO): *Note Variable Arguments Input::. - -`int VINTR' - `termios.h' (POSIX.1): *Note Signal Characters::. - -`int VKILL' - `termios.h' (POSIX.1): *Note Editing Characters::. - -`int vlimit (int RESOURCE, int LIMIT)' - `sys/vlimit.h' (BSD): *Note Limits on Resources::. - -`int VLNEXT' - `termios.h' (BSD): *Note Other Special::. - -`int VMIN' - `termios.h' (POSIX.1): *Note Noncanonical Input::. - -`int vprintf (const char *TEMPLATE, va_list AP)' - `stdio.h' (ISO): *Note Variable Arguments Output::. - -`int VQUIT' - `termios.h' (POSIX.1): *Note Signal Characters::. - -`int VREPRINT' - `termios.h' (BSD): *Note Editing Characters::. - -`int vscanf (const char *TEMPLATE, va_list AP)' - `stdio.h' (ISO): *Note Variable Arguments Input::. - -`int vsnprintf (char *S, size_t SIZE, const char *TEMPLATE, va_list AP)' - `stdio.h' (GNU): *Note Variable Arguments Output::. - -`int vsprintf (char *S, const char *TEMPLATE, va_list AP)' - `stdio.h' (ISO): *Note Variable Arguments Output::. - -`int vsscanf (const char *S, const char *TEMPLATE, va_list AP)' - `stdio.h' (ISO): *Note Variable Arguments Input::. - -`int VSTART' - `termios.h' (POSIX.1): *Note Start/Stop Characters::. - -`int VSTATUS' - `termios.h' (BSD): *Note Other Special::. - -`int VSTOP' - `termios.h' (POSIX.1): *Note Start/Stop Characters::. - -`int VSUSP' - `termios.h' (POSIX.1): *Note Signal Characters::. - -`int vswprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, va_list AP)' - `wchar.h' (GNU): *Note Variable Arguments Output::. - -`int vswscanf (const wchar_t *S, const wchar_t *TEMPLATE, va_list AP)' - `wchar.h' (ISO): *Note Variable Arguments Input::. - -`void vsyslog (int FACILITY_PRIORITY, char *FORMAT, va_list arglist)' - `syslog.h' (BSD): *Note syslog; vsyslog::. - -`int VTIME' - `termios.h' (POSIX.1): *Note Noncanonical Input::. - -`int vtimes (struct vtimes CURRENT, struct vtimes CHILD)' - `vtimes.h' (vtimes.h): *Note Resource Usage::. - -`int VWERASE' - `termios.h' (BSD): *Note Editing Characters::. - -`int vwprintf (const wchar_t *TEMPLATE, va_list AP)' - `wchar.h' (ISO): *Note Variable Arguments Output::. - -`int vwscanf (const wchar_t *TEMPLATE, va_list AP)' - `wchar.h' (ISO): *Note Variable Arguments Input::. - -`pid_t wait (int *STATUS-PTR)' - `sys/wait.h' (POSIX.1): *Note Process Completion::. - -`pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct rusage *USAGE)' - `sys/wait.h' (BSD): *Note BSD Wait Functions::. - -`pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS, struct rusage *USAGE)' - `sys/wait.h' (BSD): *Note Process Completion::. - -`pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)' - `sys/wait.h' (POSIX.1): *Note Process Completion::. - -`WCHAR_MAX' - `limits.h' (GNU): *Note Range of Type::. - -`wint_t WCHAR_MAX' - `wchar.h' (ISO): *Note Extended Char Intro::. - -`wint_t WCHAR_MIN' - `wchar.h' (ISO): *Note Extended Char Intro::. - -`wchar_t' - `stddef.h' (ISO): *Note Extended Char Intro::. - -`int WCOREDUMP (int STATUS)' - `sys/wait.h' (BSD): *Note Process Completion Status::. - -`wchar_t * wcpcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)' - `wchar.h' (GNU): *Note Copying and Concatenation::. - -`wchar_t * wcpncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' - `wchar.h' (GNU): *Note Copying and Concatenation::. - -`size_t wcrtomb (char *restrict S, wchar_t WC, mbstate_t *restrict PS)' - `wchar.h' (ISO): *Note Converting a Character::. - -`int wcscasecmp (const wchar_t *WS1, const wchar_T *WS2)' - `wchar.h' (GNU): *Note String/Array Comparison::. - -`wchar_t * wcscat (wchar_t *restrict WTO, const wchar_t *restrict WFROM)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`wchar_t * wcschr (const wchar_t *WSTRING, int WC)' - `wchar.h' (ISO): *Note Search Functions::. - -`wchar_t * wcschrnul (const wchar_t *WSTRING, wchar_t WC)' - `wchar.h' (GNU): *Note Search Functions::. - -`int wcscmp (const wchar_t *WS1, const wchar_t *WS2)' - `wchar.h' (ISO): *Note String/Array Comparison::. - -`int wcscoll (const wchar_t *WS1, const wchar_t *WS2)' - `wchar.h' (ISO): *Note Collation Functions::. - -`wchar_t * wcscpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`size_t wcscspn (const wchar_t *WSTRING, const wchar_t *STOPSET)' - `wchar.h' (ISO): *Note Search Functions::. - -`wchar_t * wcsdup (const wchar_t *WS)' - `wchar.h' (GNU): *Note Copying and Concatenation::. - -`size_t wcsftime (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, const struct tm *BROKENTIME)' - `time.h' (ISO/Amend1): *Note Formatting Calendar Time::. - -`size_t wcslen (const wchar_t *WS)' - `wchar.h' (ISO): *Note String Length::. - -`int wcsncasecmp (const wchar_t *WS1, const wchar_t *S2, size_t N)' - `wchar.h' (GNU): *Note String/Array Comparison::. - -`wchar_t * wcsncat (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`int wcsncmp (const wchar_t *WS1, const wchar_t *WS2, size_t SIZE)' - `wchar.h' (ISO): *Note String/Array Comparison::. - -`wchar_t * wcsncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`size_t wcsnlen (const wchar_t *WS, size_t MAXLEN)' - `wchar.h' (GNU): *Note String Length::. - -`size_t wcsnrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t NWC, size_t LEN, mbstate_t *restrict PS)' - `wchar.h' (GNU): *Note Converting Strings::. - -`wchar_t * wcspbrk (const wchar_t *WSTRING, const wchar_t *STOPSET)' - `wchar.h' (ISO): *Note Search Functions::. - -`wchar_t * wcsrchr (const wchar_t *WSTRING, wchar_t C)' - `wchar.h' (ISO): *Note Search Functions::. - -`size_t wcsrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t LEN, mbstate_t *restrict PS)' - `wchar.h' (ISO): *Note Converting Strings::. - -`size_t wcsspn (const wchar_t *WSTRING, const wchar_t *SKIPSET)' - `wchar.h' (ISO): *Note Search Functions::. - -`wchar_t * wcsstr (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)' - `wchar.h' (ISO): *Note Search Functions::. - -`double wcstod (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR)' - `wchar.h' (ISO): *Note Parsing of Floats::. - -`float wcstof (const wchar_t *STRING, wchar_t **TAILPTR)' - `stdlib.h' (ISO): *Note Parsing of Floats::. - -`intmax_t wcstoimax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (ISO): *Note Parsing of Integers::. - -`wchar_t * wcstok (wchar_t *NEWSTRING, const char *DELIMITERS)' - `wchar.h' (ISO): *Note Finding Tokens in a String::. - -`long int wcstol (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (ISO): *Note Parsing of Integers::. - -`long double wcstold (const wchar_t *STRING, wchar_t **TAILPTR)' - `stdlib.h' (ISO): *Note Parsing of Floats::. - -`long long int wcstoll (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (ISO): *Note Parsing of Integers::. - -`size_t wcstombs (char *STRING, const wchar_t *WSTRING, size_t SIZE)' - `stdlib.h' (ISO): *Note Non-reentrant String Conversion::. - -`long long int wcstoq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (GNU): *Note Parsing of Integers::. - -`unsigned long int wcstoul (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (ISO): *Note Parsing of Integers::. - -`unsigned long long int wcstoull (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (ISO): *Note Parsing of Integers::. - -`uintmax_t wcstoumax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (ISO): *Note Parsing of Integers::. - -`unsigned long long int wcstouq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' - `wchar.h' (GNU): *Note Parsing of Integers::. - -`wchar_t * wcswcs (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)' - `wchar.h' (XPG): *Note Search Functions::. - -`size_t wcsxfrm (wchar_t *restrict WTO, const wchar_t *WFROM, size_t SIZE)' - `wchar.h' (ISO): *Note Collation Functions::. - -`int wctob (wint_t C)' - `wchar.h' (ISO): *Note Converting a Character::. - -`int wctomb (char *STRING, wchar_t WCHAR)' - `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::. - -`wctrans_t wctrans (const char *PROPERTY)' - `wctype.h' (ISO): *Note Wide Character Case Conversion::. - -`wctrans_t' - `wctype.h' (ISO): *Note Wide Character Case Conversion::. - -`wctype_t wctype (const char *PROPERTY)' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`wctype_t' - `wctype.h' (ISO): *Note Classification of Wide Characters::. - -`int WEOF' - `wchar.h' (ISO): *Note EOF and Errors::. - -`wint_t WEOF' - `wchar.h' (ISO): *Note Extended Char Intro::. - -`int WEXITSTATUS (int STATUS)' - `sys/wait.h' (POSIX.1): *Note Process Completion Status::. - -`int WIFEXITED (int STATUS)' - `sys/wait.h' (POSIX.1): *Note Process Completion Status::. - -`int WIFSIGNALED (int STATUS)' - `sys/wait.h' (POSIX.1): *Note Process Completion Status::. - -`int WIFSTOPPED (int STATUS)' - `sys/wait.h' (POSIX.1): *Note Process Completion Status::. - -`wint_t' - `wchar.h' (ISO): *Note Extended Char Intro::. - -`wchar_t * wmemchr (const wchar_t *BLOCK, wchar_t WC, size_t SIZE)' - `wchar.h' (ISO): *Note Search Functions::. - -`int wmemcmp (const wchar_t *A1, const wchar_t *A2, size_t SIZE)' - `wcjar.h' (ISO): *Note String/Array Comparison::. - -`wchar_t * wmemcpy (wchar_t *restrict WTO, const wchar_t *restruct WFROM, size_t SIZE)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`wchar_t * wmemmove (wchar *WTO, const wchar_t *WFROM, size_t SIZE)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`wchar_t * wmempcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' - `wchar.h' (GNU): *Note Copying and Concatenation::. - -`wchar_t * wmemset (wchar_t *BLOCK, wchar_t WC, size_t SIZE)' - `wchar.h' (ISO): *Note Copying and Concatenation::. - -`int W_OK' - `unistd.h' (POSIX.1): *Note Testing File Access::. - -`int wordexp (const char *WORDS, wordexp_t *WORD-VECTOR-PTR, int FLAGS)' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`wordexp_t' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`void wordfree (wordexp_t *WORD-VECTOR-PTR)' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`int wprintf (const wchar_t *TEMPLATE, ...)' - `wchar.h' (ISO): *Note Formatted Output Functions::. - -`WRDE_APPEND' - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. - -`WRDE_BADCHAR' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`WRDE_BADVAL' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`WRDE_CMDSUB' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`WRDE_DOOFFS' - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. - -`WRDE_NOCMD' - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. - -`WRDE_NOSPACE' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`WRDE_REUSE' - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. - -`WRDE_SHOWERR' - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. - -`WRDE_SYNTAX' - `wordexp.h' (POSIX.2): *Note Calling Wordexp::. - -`WRDE_UNDEF' - `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + The value of this macro is the minimum normalized positive floating + point number that is representable in type `float'. It is supposed + to be no more than `1E-37'. -`ssize_t write (int FILEDES, const void *BUFFER, size_t SIZE)' - `unistd.h' (POSIX.1): *Note I/O Primitives::. +`DBL_MIN' +`LDBL_MIN' + These are similar to `FLT_MIN', but for the data types `double' + and `long double', respectively. The type of the macro's value is + the same as the type it describes. -`int wscanf (const wchar_t *TEMPLATE, ...)' - `wchar.h' (ISO): *Note Formatted Input Functions::. +`FLT_EPSILON' + This is the maximum positive floating point number of type `float' + such that `1.0 + FLT_EPSILON != 1.0' is true. It's supposed to be + no greater than `1E-5'. -`int WSTOPSIG (int STATUS)' - `sys/wait.h' (POSIX.1): *Note Process Completion Status::. +`DBL_EPSILON' +`LDBL_EPSILON' + These are similar to `FLT_EPSILON', but for the data types + `double' and `long double', respectively. The type of the macro's + value is the same as the type it describes. The values are not + supposed to be greater than `1E-9'. -`int WTERMSIG (int STATUS)' - `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +File: libc.info, Node: IEEE Floating Point, Prev: Floating Point Parameters, Up: Floating Type Macros -`int X_OK' - `unistd.h' (POSIX.1): *Note Testing File Access::. +IEEE Floating Point +................... -`_XOPEN_SOURCE' - (X/Open): *Note Feature Test Macros::. + Here is an example showing how the floating type measurements come +out for the most common floating point representation, specified by the +`IEEE Standard for Binary Floating Point Arithmetic (ANSI/IEEE Std +754-1985)'. Nearly all computers designed since the 1980s use this +format. -`_XOPEN_SOURCE_EXTENDED' - (X/Open): *Note Feature Test Macros::. + The IEEE single-precision float representation uses a base of 2. +There is a sign bit, a mantissa with 23 bits plus one hidden bit (so +the total precision is 24 base-2 digits), and an 8-bit exponent that +can represent values in the range -125 to 128, inclusive. -`double y0 (double X)' - `math.h' (SVID): *Note Special Functions::. + So, for an implementation that uses this representation for the +`float' data type, appropriate values for the corresponding parameters +are: -`float y0f (float X)' - `math.h' (SVID): *Note Special Functions::. + FLT_RADIX 2 + FLT_MANT_DIG 24 + FLT_DIG 6 + FLT_MIN_EXP -125 + FLT_MIN_10_EXP -37 + FLT_MAX_EXP 128 + FLT_MAX_10_EXP +38 + FLT_MIN 1.17549435E-38F + FLT_MAX 3.40282347E+38F + FLT_EPSILON 1.19209290E-07F -`long double y0l (long double X)' - `math.h' (SVID): *Note Special Functions::. + Here are the values for the `double' data type: -`double y1 (double X)' - `math.h' (SVID): *Note Special Functions::. + DBL_MANT_DIG 53 + DBL_DIG 15 + DBL_MIN_EXP -1021 + DBL_MIN_10_EXP -307 + DBL_MAX_EXP 1024 + DBL_MAX_10_EXP 308 + DBL_MAX 1.7976931348623157E+308 + DBL_MIN 2.2250738585072014E-308 + DBL_EPSILON 2.2204460492503131E-016 -`float y1f (float X)' - `math.h' (SVID): *Note Special Functions::. + +File: libc.info, Node: Structure Measurement, Prev: Floating Type Macros, Up: Data Type Measurements -`long double y1l (long double X)' - `math.h' (SVID): *Note Special Functions::. +Structure Field Offset Measurement +---------------------------------- -`double yn (int n, double X)' - `math.h' (SVID): *Note Special Functions::. + You can use `offsetof' to measure the location within a structure +type of a particular structure member. -`float ynf (int n, float X)' - `math.h' (SVID): *Note Special Functions::. + - Macro: size_t offsetof (TYPE, MEMBER) + This expands to a integer constant expression that is the offset + of the structure member named MEMBER in a the structure type TYPE. + For example, `offsetof (struct s, elem)' is the offset, in bytes, + of the member `elem' in a `struct s'. -`long double ynl (int n, long double X)' - `math.h' (SVID): *Note Special Functions::. + This macro won't work if MEMBER is a bit field; you get an error + from the C compiler in that case. diff -durpNa glibc-2.2.2/manual/libc.info-51 glibc-2.2.3/manual/libc.info-51 --- glibc-2.2.2/manual/libc.info-51 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-51 Wed Apr 25 14:55:22 2001 @@ -31,995 +31,6971 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Installation, Next: Maintenance, Prev: Library Summary, Up: Top +File: libc.info, Node: Library Summary, Next: Installation, Prev: Language Features, Up: Top -Installing the GNU C Library -**************************** +Summary of Library Facilities +***************************** - Before you do anything else, you should read the file `FAQ' found at -the top level of the source tree. This file answers common questions -and describes problems you may experience with compilation and -installation. It is updated more frequently than this manual. + This appendix is a complete list of the facilities declared within +the header files supplied with the GNU C library. Each entry also +lists the standard or other source from which each facility is derived, +and tells you where in the manual you can find more information about +how to use it. - Features can be added to GNU Libc via "add-on" bundles. These are -separate tarfiles which you unpack into the top level of the source -tree. Then you give `configure' the `--enable-add-ons' option to -activate them, and they will be compiled into the library. As of the -2.2 release, one important component of glibc is distributed as -"official" add-ons: the linuxthreads add-on. Unless you are doing an -unusual installation, you should get this. +`long int a64l (const char *STRING)' + `stdlib.h' (XPG): *Note Encode Binary Data::. - Support for POSIX threads is maintained by someone else, so it's in a -separate package. It is only available for Linux systems, but this will -change in the future. Get it from the same place you got the main -bundle; the file is `glibc-linuxthreads-VERSION.tar.gz'. +`void abort (void)' + `stdlib.h' (ISO): *Note Aborting a Program::. - You will need recent versions of several GNU tools: definitely GCC -and GNU Make, and possibly others. *Note Tools for Compilation::, -below. +`int abs (int NUMBER)' + `stdlib.h' (ISO): *Note Absolute Value::. -* Menu: +`int accept (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH_PTR)' + `sys/socket.h' (BSD): *Note Accepting Connections::. -* Configuring and compiling:: How to compile and test GNU libc. -* Running make install:: How to install it once you've got it compiled. -* Tools for Compilation:: You'll need these first. -* Supported Configurations:: What it runs on, what it doesn't. -* Linux:: Specific advice for Linux systems. -* Reporting Bugs:: So they'll get fixed. +`int access (const char *FILENAME, int HOW)' + `unistd.h' (POSIX.1): *Note Testing File Access::. - -File: libc.info, Node: Configuring and compiling, Next: Running make install, Up: Installation +`ACCOUNTING' + `utmp.h' (SVID): *Note Manipulating the Database::. -Configuring and compiling GNU Libc -================================== +`double acos (double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - GNU libc can be compiled in the source directory, but we strongly -advise to build it in a separate build directory. For example, if you -have unpacked the glibc sources in `/src/gnu/glibc-2.2.0', create a -directory `/src/gnu/glibc-build' to put the object files in. This -allows removing the whole build directory in case an error occurs, -which is the safest way to get a fresh start and should always be done. +`float acosf (float X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - From your object directory, run the shell script `configure' found -at the top level of the source tree. In the scenario above, you'd type +`double acosh (double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - $ ../glibc-2.2.0/configure ARGS... +`float acoshf (float X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - Please note that even if you're building in a separate build -directory, the compilation needs to modify a few files in the source -directory, especially some files in the manual subdirectory. +`long double acoshl (long double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. -`configure' takes many options, but you can get away with knowing only -two: `--prefix' and `--enable-add-ons'. The `--prefix' option tells -configure where you want glibc installed. This defaults to -`/usr/local'. The `--enable-add-ons' option tells configure to use all -the add-on bundles it finds in the source directory. Since important -functionality is provided in add-ons, you should always specify this -option. +`long double acosl (long double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - It may also be useful to set the CC and CFLAGS variables in the -environment when running `configure'. CC selects the C compiler that -will be used, and CFLAGS sets optimization options for the compiler. +`int addmntent (FILE *STREAM, const struct mntent *MNT)' + `mntent.h' (BSD): *Note mtab::. - The following list describes all of the available options for -`configure': +`int adjtime (const struct timeval *DELTA, struct timeval *OLDDELTA)' + `sys/time.h' (BSD): *Note High-Resolution Calendar::. -`--prefix=DIRECTORY' - Install machine-independent data files in subdirectories of - `DIRECTORY'. The default is to install in `/usr/local'. +`int adjtimex (struct timex *TIMEX)' + `sys/timex.h' (GNU): *Note High-Resolution Calendar::. -`--exec-prefix=DIRECTORY' - Install the library and other machine-dependent files in - subdirectories of `DIRECTORY'. The default is to the `--prefix' - directory if that option is specified, or `/usr/local' otherwise. +`AF_FILE' + `sys/socket.h' (GNU): *Note Address Formats::. -`--with-headers=DIRECTORY' - Look for kernel header files in DIRECTORY, not `/usr/include'. - Glibc needs information from the kernel's private header files. - It will normally look in `/usr/include' for them, but if you - specify this option, it will look in DIRECTORY instead. +`AF_INET' + `sys/socket.h' (BSD): *Note Address Formats::. - This option is primarily of use on a system where the headers in - `/usr/include' come from an older version of glibc. Conflicts can - occasionally happen in this case. Note that Linux libc5 qualifies - as an older version of glibc. You can also use this option if you - want to compile glibc with a newer set of kernel headers than the - ones found in `/usr/include'. +`AF_INET6' + `sys/socket.h' (IPv6 Basic API): *Note Address Formats::. -`--enable-add-ons[=LIST]' - Enable add-on packages in your source tree. If this option is - specified with no list, it enables all the add-on packages it - finds. If you do not wish to use some add-on package that you - have present in your source tree, give this option a list of the - add-ons that you _do_ want used, like this: - `--enable-add-ons=linuxthreads' +`AF_LOCAL' + `sys/socket.h' (POSIX): *Note Address Formats::. -`--enable-kernel=VERSION' - This option is currently only useful on Linux systems. The - VERSION parameter should have the form X.Y.Z and describes the - smallest version of the Linux kernel the generated library is - expected to support. The higher the VERSION number is, the less - compatibility code is added, and the faster the code gets. +`AF_UNIX' + `sys/socket.h' (BSD, Unix98): *Note Address Formats::. -`--with-binutils=DIRECTORY' - Use the binutils (assembler and linker) in `DIRECTORY', not the - ones the C compiler would default to. You could use this option if - the default binutils on your system cannot deal with all the - constructs in the GNU C library. In that case, `configure' will - detect the problem and suppress these constructs, so that the - library will still be usable, but functionality may be lost--for - example, you can't build a shared libc with old binutils. +`AF_UNSPEC' + `sys/socket.h' (BSD): *Note Address Formats::. -`--without-fp' - Use this option if your computer lacks hardware floating-point - support and your operating system does not emulate an FPU. +`int aio_cancel (int FILDES, struct aiocb *AIOCBP)' + `aio.h' (POSIX.1b): *Note Cancel AIO Operations::. -`--disable-shared' - Don't build shared libraries even if it is possible. Not all - systems support shared libraries; you need ELF support and - (currently) the GNU linker. +`int aio_cancel64 (int FILDES, struct aiocb *AIOCBP)' + `aio.h' (Unix98): *Note Cancel AIO Operations::. -`--disable-profile' - Don't build libraries with profiling information. You may want to - use this option if you don't plan to do profiling. +`int aio_error (const struct aiocb *AIOCBP)' + `aio.h' (POSIX.1b): *Note Status of AIO Operations::. -`--enable-omitfp' - Use maximum optimization for the normal (static and shared) - libraries, and compile separate static libraries with debugging - information and no optimisation. We recommend against this. The - extra optimization doesn't gain you much, it may provoke compiler - bugs, and you won't be able to trace bugs through the C library. +`int aio_error64 (const struct aiocb64 *AIOCBP)' + `aio.h' (Unix98): *Note Status of AIO Operations::. -`--disable-versioning' - Don't compile the shared libraries with symbol version information. - Doing this will make the resulting library incompatible with old - binaries, so it's not recommended. +`int aio_fsync (int OP, struct aiocb *AIOCBP)' + `aio.h' (POSIX.1b): *Note Synchronizing AIO Operations::. -`--enable-static-nss' - Compile static versions of the NSS (Name Service Switch) libraries. - This is not recommended because it defeats the purpose of NSS; a - program linked statically with the NSS libraries cannot be - dynamically reconfigured to use a different name database. +`int aio_fsync64 (int OP, struct aiocb64 *AIOCBP)' + `aio.h' (Unix98): *Note Synchronizing AIO Operations::. -`--build=BUILD-SYSTEM' -`--host=HOST-SYSTEM' - These options are for cross-compiling. If you specify both - options and BUILD-SYSTEM is different from HOST-SYSTEM, `configure' - will prepare to cross-compile glibc from BUILD-SYSTEM to be used - on HOST-SYSTEM. You'll probably need the `--with-headers' option - too, and you may have to override CONFIGURE's selection of the - compiler and/or binutils. +`void aio_init (const struct aioinit *INIT)' + `aio.h' (GNU): *Note Configuration of AIO::. - If you only specify `--host', configure will prepare for a native - compile but use what you specify instead of guessing what your - system is. This is most useful to change the CPU submodel. For - example, if configure guesses your machine as `i586-pc-linux-gnu' - but you want to compile a library for 386es, give - `--host=i386-pc-linux-gnu' or just `--host=i386-linux' and add the - appropriate compiler flags (`-mcpu=i386' will do the trick) to - CFLAGS. +`int aio_read (struct aiocb *AIOCBP)' + `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::. - If you specify just `--build', configure will get confused. +`int aio_read64 (struct aiocb *AIOCBP)' + `aio.h' (Unix98): *Note Asynchronous Reads/Writes::. - To build the library and related programs, type `make'. This will -produce a lot of output, some of which may look like errors from `make' -but isn't. Look for error messages from `make' containing `***'. -Those indicate that something is really wrong. +`ssize_t aio_return (const struct aiocb *AIOCBP)' + `aio.h' (POSIX.1b): *Note Status of AIO Operations::. - The compilation process takes several hours even on fast hardware. -Expect at least two hours for the default configuration on i586 for -Linux. For Hurd times are much longer. Except for EGCS 1.1 and GCC -2.95 (and later versions of GCC), all supported versions of GCC have a -problem which causes them to take several minutes to compile certain -files in the iconvdata directory. Do not panic if the compiler appears -to hang. +`int aio_return64 (const struct aiocb64 *AIOCBP)' + `aio.h' (Unix98): *Note Status of AIO Operations::. - If you want to run a parallel make, you can't just give `make' the -`-j' option, because it won't be passed down to the sub-makes. -Instead, edit the generated `Makefile' and uncomment the line +`int aio_suspend (const struct aiocb *const LIST[], int NENT, const struct timespec *TIMEOUT)' + `aio.h' (POSIX.1b): *Note Synchronizing AIO Operations::. - # PARALLELMFLAGS = -j 4 +`int aio_suspend64 (const struct aiocb64 *const LIST[], int NENT, const struct timespec *TIMEOUT)' + `aio.h' (Unix98): *Note Synchronizing AIO Operations::. -You can change the `4' to some other number as appropriate for your -system. Instead of changing the `Makefile', you could give this option -directly to `make' and call it as, for example, `make -PARALLELMFLAGS=-j4'. If you're building in the source directory, you -must use the latter approach since in this case no new `Makefile' is -generated for you to change. +`int aio_write (struct aiocb *AIOCBP)' + `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::. - To build and run test programs which exercise some of the library -facilities, type `make check'. If it does not complete successfully, -do not use the built library, and report a bug after verifying that the -problem is not already known. *Note Reporting Bugs::, for instructions -on reporting bugs. Note that some of the tests assume they are not -being run by `root'. We recommend you compile and test glibc as an -unprivileged user. +`int aio_write64 (struct aiocb *AIOCBP)' + `aio.h' (Unix98): *Note Asynchronous Reads/Writes::. - To format the `GNU C Library Reference Manual' for printing, type -`make dvi'. You need a working TeX installation to do this. The -distribution already includes the on-line formatted version of the -manual, as Info files. You can regenerate those with `make info', but -it shouldn't be necessary. +`unsigned int alarm (unsigned int SECONDS)' + `unistd.h' (POSIX.1): *Note Setting an Alarm::. - The library has a number of special-purpose configuration parameters -which you can find in `Makeconfig'. These can be overwritten with the -file `configparms'. To change them, create a `configparms' in your -build directory and add values as appropriate for your system. The -file is included and parsed by `make' and has to follow the conventions -for makefiles. +`void * alloca (size_t SIZE);' + `stdlib.h' (GNU, BSD): *Note Variable Size Automatic::. - It is easy to configure the GNU C library for cross-compilation by -setting a few variables in `configparms'. Set `CC' to the -cross-compiler for the target you configured the library for; it is -important to use this same `CC' value when running `configure', like -this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler -to use for for programs run on the build system as part of compiling -the library. You may need to set `AR' and `RANLIB' to cross-compiling -versions of `ar' and `ranlib' if the native tools are not configured to -work with object files for the target you configured for. +`int alphasort (const void *A, const void *B)' + `dirent.h' (BSD/SVID): *Note Scanning Directory Content::. - -File: libc.info, Node: Running make install, Next: Tools for Compilation, Prev: Configuring and compiling, Up: Installation +`int alphasort64 (const void *A, const void *B)' + `dirent.h' (GNU): *Note Scanning Directory Content::. -Installing the C Library -======================== +`tcflag_t ALTWERASE' + `termios.h' (BSD): *Note Local Modes::. - To install the library and its header files, and the Info files of -the manual, type `env LANGUAGE=C LC_ALL=C make install'. This will -build things if necessary, before installing them. However, you should -still compile everything first. If you are installing glibc as your -primary C library, we recommend that you shut the system down to -single-user mode first, and reboot afterward. This minimizes the risk -of breaking things when the library changes out from underneath. +`int ARG_MAX' + `limits.h' (POSIX.1): *Note General Limits::. - If you're upgrading from Linux libc5 or some other C library, you -need to replace the `/usr/include' with a fresh directory before -installing it. The new `/usr/include' should contain the Linux -headers, but nothing else. +`error_t argp_err_exit_status' + `argp.h' (GNU): *Note Argp Global Variables::. - You must first build the library (`make'), optionally check it -(`make check'), switch the include directories and then install (`make -install'). The steps must be done in this order. Not moving the -directory before install will result in an unusable mixture of header -files from both libraries, but configuring, building, and checking the -library requires the ability to compile and run programs against the old -library. +`void argp_error (const struct argp_state *STATE, const char *FMT, ...)' + `argp.h' (GNU): *Note Argp Helper Functions::. - If you are upgrading from a previous installation of glibc 2.0 or -2.1, `make install' will do the entire job. You do not need to remove -the old includes - if you want to do so anyway you must then follow the -order given above. +`int ARGP_ERR_UNKNOWN' + `argp.h' (GNU): *Note Argp Parser Functions::. - You may also need to reconfigure GCC to work with the new library. -The easiest way to do that is to figure out the compiler switches to -make it work again (`-Wl,--dynamic-linker=/lib/ld-linux.so.2' should -work on Linux systems) and use them to recompile gcc. You can also -edit the specs file (`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that -is a bit of a black art. +`void argp_failure (const struct argp_state *STATE, int STATUS, int ERRNUM, const char *FMT, ...)' + `argp.h' (GNU): *Note Argp Helper Functions::. - You can install glibc somewhere other than where you configured it -to go by setting the `install_root' variable on the command line for -`make install'. The value of this variable is prepended to all the -paths for installation. This is useful when setting up a chroot -environment or preparing a binary distribution. The directory should be -specified with an absolute file name. +`void argp_help (const struct argp *ARGP, FILE *STREAM, unsigned FLAGS, char *NAME)' + `argp.h' (GNU): *Note Argp Help::. - Glibc 2.2 includes a daemon called `nscd', which you may or may not -want to run. `nscd' caches name service lookups; it can dramatically -improve performance with NIS+, and may help with DNS as well. +`ARGP_IN_ORDER' + `argp.h' (GNU): *Note Argp Flags::. - One auxiliary program, `/usr/libexec/pt_chown', is installed setuid -`root'. This program is invoked by the `grantpt' function; it sets the -permissions on a pseudoterminal so it can be used by the calling -process. This means programs like `xterm' and `screen' do not have to -be setuid to get a pty. (There may be other reasons why they need -privileges.) If you are using a 2.1 or newer Linux kernel with the -`devptsfs' or `devfs' filesystems providing pty slaves, you don't need -this program; otherwise you do. The source for `pt_chown' is in -`login/programs/pt_chown.c'. +`ARGP_KEY_ARG' + `argp.h' (GNU): *Note Argp Special Keys::. - After installation you might want to configure the timezone and -locale installation of your system. The GNU C library comes with a -locale database which gets configured with `localedef'. For example, to -set up a German locale with name `de_DE', simply issue the command -`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales -that are supported by glibc, you can issue from your build directory the -command `make localedata/install-locales'. +`ARGP_KEY_ARGS' + `argp.h' (GNU): *Note Argp Special Keys::. - To configure the locally used timezone, you can either set the `TZ' -environment variable. The script `tzselect' helps you to select the -right value. As an example for Germany, tzselect would tell you to use -`TZ='Europe/Berlin''. For a system wide installation (the given paths -are for an installation with `--prefix=/usr'), link the timezone file -which is in `/usr/share/zoneinfo' to the file `/etc/localtime'. For -Germany, you might execute `ln -s /usr/share/zoneinfo/Europe/Berlin -/etc/localtime'. +`ARGP_KEY_END' + `argp.h' (GNU): *Note Argp Special Keys::. - -File: libc.info, Node: Tools for Compilation, Next: Supported Configurations, Prev: Running make install, Up: Installation +`ARGP_KEY_ERROR' + `argp.h' (GNU): *Note Argp Special Keys::. -Recommended Tools for Compilation -================================= +`ARGP_KEY_FINI' + `argp.h' (GNU): *Note Argp Special Keys::. - We recommend installing the following GNU tools before attempting to -build the GNU C library: +`ARGP_KEY_HELP_ARGS_DOC' + `argp.h' (GNU): *Note Argp Help Filter Keys::. - * GNU `make' 3.79 or newer +`ARGP_KEY_HELP_DUP_ARGS_NOTE' + `argp.h' (GNU): *Note Argp Help Filter Keys::. - You need the latest version of GNU `make'. Modifying the GNU C - Library to work with other `make' programs would be so difficult - that we recommend you port GNU `make' instead. *Really.* We - recommend version GNU `make' version 3.79. All earlier versions - have severe bugs or lack features. +`ARGP_KEY_HELP_EXTRA' + `argp.h' (GNU): *Note Argp Help Filter Keys::. - * GCC 2.95 or newer +`ARGP_KEY_HELP_HEADER' + `argp.h' (GNU): *Note Argp Help Filter Keys::. - The GNU C library can only be compiled with the GNU C compiler - family. As of the 2.2 release, GCC 2.95.2 or higher is required. - As of this writing, GCC 2.95.2 is the compiler we advise to use. +`ARGP_KEY_HELP_POST_DOC' + `argp.h' (GNU): *Note Argp Help Filter Keys::. - You can use whatever compiler you like to compile programs that - use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in - their floating-point support that may be triggered by the math - library. +`ARGP_KEY_HELP_PRE_DOC' + `argp.h' (GNU): *Note Argp Help Filter Keys::. - For PPC you might need some patches even on top of the last GCC - version. See the FAQ. +`ARGP_KEY_INIT' + `argp.h' (GNU): *Note Argp Special Keys::. - * GNU `binutils' 2.10.1 or later +`ARGP_KEY_NO_ARGS' + `argp.h' (GNU): *Note Argp Special Keys::. - You must use GNU binutils (as and ld) if you want to build a shared - library. Even if you don't, we recommend you use them anyway. No - one has tested compilation with non-GNU binutils in a long time. +`ARGP_KEY_SUCCESS' + `argp.h' (GNU): *Note Argp Special Keys::. - The quality of binutils releases has varied a bit recently. The - bugs are in obscure features, but glibc uses quite a few of those. - 2.10.1 and later releases are known to work. Versions after - 2.8.1.0.23 may or may not work. Older versions definitely don't. +`ARGP_LONG_ONLY' + `argp.h' (GNU): *Note Argp Flags::. - For PPC you might need some patches even on top of the last - binutils version. See the FAQ. +`ARGP_NO_ARGS' + `argp.h' (GNU): *Note Argp Flags::. - * GNU `texinfo' 3.12f +`ARGP_NO_ERRS' + `argp.h' (GNU): *Note Argp Flags::. - To correctly translate and install the Texinfo documentation you - need this version of the `texinfo' package. Earlier versions do - not understand all the tags used in the document, and the - installation mechanism for the info files is not present or works - differently. +`ARGP_NO_EXIT' + `argp.h' (GNU): *Note Argp Flags::. - * GNU `awk' 3.0, or some other POSIX awk +`ARGP_NO_HELP' + `argp.h' (GNU): *Note Argp Flags::. - Awk is used in several places to generate files. The scripts - should work with any POSIX-compliant awk implementation; `gawk' - 3.0 and `mawk' 1.3 are known to work. +`error_t argp_parse (const struct argp *ARGP, int ARGC, char **ARGV, unsigned FLAGS, int *ARG_INDEX, void *INPUT)' + `argp.h' (GNU): *Note Suboptions: Argp. - * Perl 5 +`ARGP_PARSE_ARGV0' + `argp.h' (GNU): *Note Argp Flags::. - Perl is not required, but it is used if present to test the - installation. We may decide to use it elsewhere in the future. +`const char * argp_program_bug_address' + `argp.h' (GNU): *Note Argp Global Variables::. - * GNU `sed' 3.02 or newer +`const char * argp_program_version' + `argp.h' (GNU): *Note Argp Global Variables::. - Sed is used in several places to generate files. Most scripts - work with any version of `sed'. The known exception is the script - `po2test.sed' in the `intl' subdirectory which is used to generate - `msgs.h' for the testsuite. This script works correctly only with - GNU `sed' 3.02. If you like to run the testsuite, you should - definitely upgrade `sed'. +`argp_program_version_hook' + `argp.h' (GNU): *Note Argp Global Variables::. +`ARGP_SILENT' + `argp.h' (GNU): *Note Argp Flags::. -If you change any of the `configure.in' files you will also need +`void argp_state_help (const struct argp_state *STATE, FILE *STREAM, unsigned FLAGS)' + `argp.h' (GNU): *Note Argp Helper Functions::. - * GNU `autoconf' 2.12 or higher +`void argp_usage (const struct argp_state *STATE)' + `argp.h' (GNU): *Note Argp Helper Functions::. -and if you change any of the message translation files you will need +`error_t argz_add (char **ARGZ, size_t *ARGZ_LEN, const char *STR)' + `argz.h' (GNU): *Note Argz Functions::. - * GNU `gettext' 0.10.35 or later (version 0.10.35 is a alpha release - and available via ftp from alpha.gnu.org/gnu) +`error_t argz_add_sep (char **ARGZ, size_t *ARGZ_LEN, const char *STR, int DELIM)' + `argz.h' (GNU): *Note Argz Functions::. -You may also need these packages if you upgrade your source tree using -patches, although we try to avoid this. +`error_t argz_append (char **ARGZ, size_t *ARGZ_LEN, const char *BUF, size_t BUF_LEN)' + `argz.h' (GNU): *Note Argz Functions::. - -File: libc.info, Node: Supported Configurations, Next: Linux, Prev: Tools for Compilation, Up: Installation +`size_t argz_count (const char *ARGZ, size_t ARG_LEN)' + `argz.h' (GNU): *Note Argz Functions::. -Supported Configurations -======================== +`error_t argz_create (char *const ARGV[], char **ARGZ, size_t *ARGZ_LEN)' + `argz.h' (GNU): *Note Argz Functions::. - The GNU C Library currently supports configurations that match the -following patterns: +`error_t argz_create_sep (const char *STRING, int SEP, char **ARGZ, size_t *ARGZ_LEN)' + `argz.h' (GNU): *Note Argz Functions::. - alpha*-*-linux - arm-*-linux - hppa-*-linux - iX86-*-gnu - iX86-*-linux - ia64-*-linux - m68k-*-linux - mips*-*-linux - powerpc-*-linux - s390-*-linux - sparc-*-linux - sparc64-*-linux +`error_t argz_delete (char **ARGZ, size_t *ARGZ_LEN, char *ENTRY)' + `argz.h' (GNU): *Note Argz Functions::. - Former releases of this library (version 2.1 and/or 2.0) used to run -on the following configurations: +`void argz_extract (char *ARGZ, size_t ARGZ_LEN, char **ARGV)' + `argz.h' (GNU): *Note Argz Functions::. - arm-*-linuxaout - arm-*-none +`error_t argz_insert (char **ARGZ, size_t *ARGZ_LEN, char *BEFORE, const char *ENTRY)' + `argz.h' (GNU): *Note Argz Functions::. - Very early releases (version 1.09.1 and perhaps earlier versions) -used to run on the following configurations: +`char * argz_next (char *ARGZ, size_t ARGZ_LEN, const char *ENTRY)' + `argz.h' (GNU): *Note Argz Functions::. - alpha-dec-osf1 - alpha-*-linuxecoff - iX86-*-bsd4.3 - iX86-*-isc2.2 - iX86-*-isc3.N - iX86-*-sco3.2 - iX86-*-sco3.2v4 - iX86-*-sysv - iX86-*-sysv4 - iX86-force_cpu386-none - iX86-sequent-bsd - i960-nindy960-none - m68k-hp-bsd4.3 - m68k-mvme135-none - m68k-mvme136-none - m68k-sony-newsos3 - m68k-sony-newsos4 - m68k-sun-sunos4.N - mips-dec-ultrix4.N - mips-sgi-irix4.N - sparc-sun-solaris2.N - sparc-sun-sunos4.N +`error_t argz_replace (char **ARGZ, size_t *ARGZ_LEN, const char *STR, const char *WITH, unsigned *REPLACE_COUNT)' + `argz.h' (GNU): *Note Argz Functions::. - Since no one has volunteered to test and fix these configurations, -they are not supported at the moment. They probably don't compile; -they definitely don't work anymore. Porting the library is not hard. -If you are interested in doing a port, please contact the glibc -maintainers by sending electronic mail to . +`void argz_stringify (char *ARGZ, size_t LEN, int SEP)' + `argz.h' (GNU): *Note Argz Functions::. - Valid cases of `iX86' include `i386', `i486', `i586', and `i686'. -All of those configurations produce a library that can run on this -processor and newer processors. The GCC compiler by default generates -code that's optimized for the machine it's configured for and will use -the instructions available on that machine. For example if your GCC is -configured for `i686', gcc will optimize for `i686' and might issue -some `i686' specific instructions. To generate code for other models, -you have to configure for that model and give GCC the appropriate -`-march=' and `-mcpu=' compiler switches via CFLAGS. +`char * asctime (const struct tm *BROKENTIME)' + `time.h' (ISO): *Note Formatting Calendar Time::. - -File: libc.info, Node: Linux, Next: Reporting Bugs, Prev: Supported Configurations, Up: Installation +`char * asctime_r (const struct tm *BROKENTIME, char *BUFFER)' + `time.h' (POSIX.1c): *Note Formatting Calendar Time::. -Specific advice for Linux systems -================================= +`double asin (double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - If you are installing GNU libc on a Linux system, you need to have -the header files from a 2.2 kernel around for reference. You do not -need to use the 2.2 kernel, just have its headers where glibc can access -at them. The easiest way to do this is to unpack it in a directory -such as `/usr/src/linux-2.2.1'. In that directory, run `make config' -and accept all the defaults. Then run `make include/linux/version.h'. -Finally, configure glibc with the option -`--with-headers=/usr/src/linux-2.2.1/include'. Use the most recent -kernel you can get your hands on. +`float asinf (float X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - An alternate tactic is to unpack the 2.2 kernel and run `make -config' as above. Then rename or delete `/usr/include', create a new -`/usr/include', and make the usual symbolic links of -`/usr/include/linux' and `/usr/include/asm' into the 2.2 kernel -sources. You can then configure glibc with no special options. This -tactic is recommended if you are upgrading from libc5, since you need -to get rid of the old header files anyway. +`double asinh (double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - Note that `/usr/include/net' and `/usr/include/scsi' should *not* be -symlinks into the kernel sources. GNU libc provides its own versions -of these files. +`float asinhf (float X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - Linux expects some components of the libc installation to be in -`/lib' and some in `/usr/lib'. This is handled automatically if you -configure glibc with `--prefix=/usr'. If you set some other prefix or -allow it to default to `/usr/local', then all the components are -installed there. +`long double asinhl (long double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - If you are upgrading from libc5, you need to recompile every shared -library on your system against the new library for the sake of new code, -but keep the old libraries around for old binaries to use. This is -complicated and difficult. Consult the Glibc2 HOWTO at - for details. +`long double asinl (long double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - You cannot use `nscd' with 2.0 kernels, due to bugs in the -kernel-side thread support. `nscd' happens to hit these bugs -particularly hard, but you might have problems with any threaded -program. +`int asprintf (char **PTR, const char *TEMPLATE, ...)' + `stdio.h' (GNU): *Note Dynamic Output::. - -File: libc.info, Node: Reporting Bugs, Prev: Linux, Up: Installation +`void assert (int EXPRESSION)' + `assert.h' (ISO): *Note Consistency Checking::. -Reporting Bugs -============== +`void assert_perror (int ERRNUM)' + `assert.h' (GNU): *Note Consistency Checking::. - There are probably bugs in the GNU C library. There are certainly -errors and omissions in this manual. If you report them, they will get -fixed. If you don't, no one will ever know about them and they will -remain unfixed for all eternity, if not longer. +`double atan (double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - It is a good idea to verify that the problem has not already been -reported. Bugs are documented in two places: The file `BUGS' describes -a number of well known bugs and the bug tracking system has a WWW -interface at . The -WWW interface gives you access to open and closed reports. The closed -reports normally include a patch or a hint on solving the problem. +`double atan2 (double Y, double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - To report a bug, first you must find it. Hopefully, this will be the -hard part. Once you've found a bug, make sure it's really a bug. A -good way to do this is to see if the GNU C library behaves the same way -some other C library does. If so, probably you are wrong and the -libraries are right (but not necessarily). If not, one of the libraries -is probably wrong. It might not be the GNU library. Many historical -Unix C libraries permit things that we don't, such as closing a file -twice. +`float atan2f (float Y, float X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - If you think you have found some way in which the GNU C library does -not conform to the ISO and POSIX standards (*note Standards and -Portability::), that is definitely a bug. Report it! +`long double atan2l (long double Y, long double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - Once you're sure you've found a bug, try to narrow it down to the -smallest test case that reproduces the problem. In the case of a C -library, you really only need to narrow it down to one library function -call, if possible. This should not be too difficult. +`float atanf (float X)' + `math.h' (ISO): *Note Inverse Trig Functions::. - The final step when you have a simple test case is to report the bug. -Do this using the `glibcbug' script. It is installed with libc, or if -you haven't installed it, will be in your build directory. Send your -test case, the results you got, the results you expected, and what you -think the problem might be (if you've thought of anything). `glibcbug' -will insert the configuration information we need to see, and ship the -report off to . Don't send a message there directly; it -is fed to a program that expects mail to be formatted in a particular -way. Use the script. +`double atanh (double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - If you are not sure how a function should behave, and this manual -doesn't tell you, that's a bug in the manual. Report that too! If the -function's behavior disagrees with the manual, then either the library -or the manual has a bug, so report the disagreement. If you find any -errors or omissions in this manual, please report them to the Internet -address . If you refer to specific sections -of the manual, please include the section names for easier -identification. +`float atanhf (float X)' + `math.h' (ISO): *Note Hyperbolic Functions::. - -File: libc.info, Node: Maintenance, Next: Contributors, Prev: Installation, Up: Top +`long double atanhl (long double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. -Library Maintenance -******************* +`long double atanl (long double X)' + `math.h' (ISO): *Note Inverse Trig Functions::. -* Menu: +`int atexit (void (*FUNCTION) (void))' + `stdlib.h' (ISO): *Note Cleanups on Exit::. -* Source Layout:: How to add new functions or header files - to the GNU C library. -* Porting:: How to port the GNU C library to - a new machine or operating system. +`double atof (const char *STRING)' + `stdlib.h' (ISO): *Note Parsing of Floats::. - -File: libc.info, Node: Source Layout, Next: Porting, Up: Maintenance +`int atoi (const char *STRING)' + `stdlib.h' (ISO): *Note Parsing of Integers::. -Adding New Functions -==================== +`long int atol (const char *STRING)' + `stdlib.h' (ISO): *Note Parsing of Integers::. - The process of building the library is driven by the makefiles, which -make heavy use of special features of GNU `make'. The makefiles are -very complex, and you probably don't want to try to understand them. -But what they do is fairly straightforward, and only requires that you -define a few variables in the right places. +`long long int atoll (const char *STRING)' + `stdlib.h' (ISO): *Note Parsing of Integers::. - The library sources are divided into subdirectories, grouped by -topic. +`B0' + `termios.h' (POSIX.1): *Note Line Speed::. - The `string' subdirectory has all the string-manipulation functions, -`math' has all the mathematical functions, etc. +`B110' + `termios.h' (POSIX.1): *Note Line Speed::. - Each subdirectory contains a simple makefile, called `Makefile', -which defines a few `make' variables and then includes the global -makefile `Rules' with a line like: +`B115200' + `termios.h' (GNU): *Note Line Speed::. - include ../Rules +`B1200' + `termios.h' (POSIX.1): *Note Line Speed::. -The basic variables that a subdirectory makefile defines are: +`B134' + `termios.h' (POSIX.1): *Note Line Speed::. -`subdir' - The name of the subdirectory, for example `stdio'. This variable - *must* be defined. +`B150' + `termios.h' (POSIX.1): *Note Line Speed::. -`headers' - The names of the header files in this section of the library, such - as `stdio.h'. +`B1800' + `termios.h' (POSIX.1): *Note Line Speed::. -`routines' -`aux' - The names of the modules (source files) in this section of the - library. These should be simple names, such as `strlen' (rather - than complete file names, such as `strlen.c'). Use `routines' for - modules that define functions in the library, and `aux' for - auxiliary modules containing things like data definitions. But the - values of `routines' and `aux' are just concatenated, so there - really is no practical difference. +`B19200' + `termios.h' (POSIX.1): *Note Line Speed::. -`tests' - The names of test programs for this section of the library. These - should be simple names, such as `tester' (rather than complete file - names, such as `tester.c'). `make tests' will build and run all - the test programs. If a test program needs input, put the test - data in a file called `TEST-PROGRAM.input'; it will be given to - the test program on its standard input. If a test program wants - to be run with arguments, put the arguments (all on a single line) - in a file called `TEST-PROGRAM.args'. Test programs should exit - with zero status when the test passes, and nonzero status when the - test indicates a bug in the library or error in building. +`B200' + `termios.h' (POSIX.1): *Note Line Speed::. -`others' - The names of "other" programs associated with this section of the - library. These are programs which are not tests per se, but are - other small programs included with the library. They are built by - `make others'. +`B230400' + `termios.h' (GNU): *Note Line Speed::. -`install-lib' -`install-data' -`install' - Files to be installed by `make install'. Files listed in - `install-lib' are installed in the directory specified by `libdir' - in `configparms' or `Makeconfig' (*note Installation::). Files - listed in `install-data' are installed in the directory specified - by `datadir' in `configparms' or `Makeconfig'. Files listed in - `install' are installed in the directory specified by `bindir' in - `configparms' or `Makeconfig'. +`B2400' + `termios.h' (POSIX.1): *Note Line Speed::. -`distribute' - Other files from this subdirectory which should be put into a - distribution tar file. You need not list here the makefile itself - or the source and header files listed in the other standard - variables. Only define `distribute' if there are files used in an - unusual way that should go into the distribution. +`B300' + `termios.h' (POSIX.1): *Note Line Speed::. -`generated' - Files which are generated by `Makefile' in this subdirectory. - These files will be removed by `make clean', and they will never - go into a distribution. +`B38400' + `termios.h' (POSIX.1): *Note Line Speed::. -`extra-objs' - Extra object files which are built by `Makefile' in this - subdirectory. This should be a list of file names like `foo.o'; - the files will actually be found in whatever directory object - files are being built in. These files will be removed by - `make clean'. This variable is used for secondary object files - needed to build `others' or `tests'. +`B460800' + `termios.h' (GNU): *Note Line Speed::. - -File: libc.info, Node: Porting, Prev: Source Layout, Up: Maintenance +`B4800' + `termios.h' (POSIX.1): *Note Line Speed::. -Porting the GNU C Library -========================= +`B50' + `termios.h' (POSIX.1): *Note Line Speed::. - The GNU C library is written to be easily portable to a variety of -machines and operating systems. Machine- and operating system-dependent -functions are well separated to make it easy to add implementations for -new machines or operating systems. This section describes the layout of -the library source tree and explains the mechanisms used to select -machine-dependent code to use. +`B57600' + `termios.h' (GNU): *Note Line Speed::. - All the machine-dependent and operating system-dependent files in the -library are in the subdirectory `sysdeps' under the top-level library -source directory. This directory contains a hierarchy of -subdirectories (*note Hierarchy Conventions::). +`B600' + `termios.h' (POSIX.1): *Note Line Speed::. - Each subdirectory of `sysdeps' contains source files for a -particular machine or operating system, or for a class of machine or -operating system (for example, systems by a particular vendor, or all -machines that use IEEE 754 floating-point format). A configuration -specifies an ordered list of these subdirectories. Each subdirectory -implicitly appends its parent directory to the list. For example, -specifying the list `unix/bsd/vax' is equivalent to specifying the list -`unix/bsd/vax unix/bsd unix'. A subdirectory can also specify that it -implies other subdirectories which are not directly above it in the -directory hierarchy. If the file `Implies' exists in a subdirectory, -it lists other subdirectories of `sysdeps' which are appended to the -list, appearing after the subdirectory containing the `Implies' file. -Lines in an `Implies' file that begin with a `#' character are ignored -as comments. For example, `unix/bsd/Implies' contains: - # BSD has Internet-related things. - unix/inet +`B75' + `termios.h' (POSIX.1): *Note Line Speed::. -and `unix/Implies' contains: - posix +`B9600' + `termios.h' (POSIX.1): *Note Line Speed::. -So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'. +`int backtrace (void **BUFFER, int SIZE)' + `execinfo.h' (GNU): *Note Backtraces::. - `sysdeps' has a "special" subdirectory called `generic'. It is -always implicitly appended to the list of subdirectories, so you -needn't put it in an `Implies' file, and you should not create any -subdirectories under it intended to be new specific categories. -`generic' serves two purposes. First, the makefiles do not bother to -look for a system-dependent version of a file that's not in `generic'. -This means that any system-dependent source file must have an analogue -in `generic', even if the routines defined by that file are not -implemented on other platforms. Second. the `generic' version of a -system-dependent file is used if the makefiles do not find a version -specific to the system you're compiling for. +`char ** backtrace_symbols (void *const *BUFFER, int SIZE)' + `execinfo.h' (GNU): *Note Backtraces::. - If it is possible to implement the routines in a `generic' file in -machine-independent C, using only other machine-independent functions in -the C library, then you should do so. Otherwise, make them stubs. A -"stub" function is a function which cannot be implemented on a -particular machine or operating system. Stub functions always return an -error, and set `errno' to `ENOSYS' (Function not implemented). *Note -Error Reporting::. If you define a stub function, you must place the -statement `stub_warning(FUNCTION)', where FUNCTION is the name of your -function, after its definition; also, you must include the file -`' into your file. This causes the function to be listed -in the installed `', and makes GNU ld warn when the -function is used. +`void backtrace_symbols_fd (void *const *BUFFER, int SIZE, int FD)' + `execinfo.h' (GNU): *Note Backtraces::. - Some rare functions are only useful on specific systems and aren't -defined at all on others; these do not appear anywhere in the -system-independent source code or makefiles (including the `generic' -directory), only in the system-dependent `Makefile' in the specific -system's subdirectory. +`char * basename (char *PATH)' + `libgen.h' (XPG): *Note Finding Tokens in a String::. - If you come across a file that is in one of the main source -directories (`string', `stdio', etc.), and you want to write a machine- -or operating system-dependent version of it, move the file into -`sysdeps/generic' and write your new implementation in the appropriate -system-specific subdirectory. Note that if a file is to be -system-dependent, it *must not* appear in one of the main source -directories. +`char * basename (const char *FILENAME)' + `string.h' (GNU): *Note Finding Tokens in a String::. - There are a few special files that may exist in each subdirectory of -`sysdeps': +`int BC_BASE_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. -`Makefile' - A makefile for this machine or operating system, or class of - machine or operating system. This file is included by the library - makefile `Makerules', which is used by the top-level makefile and - the subdirectory makefiles. It can change the variables set in the - including makefile or add new rules. It can use GNU `make' - conditional directives based on the variable `subdir' (see above) - to select different sets of variables and rules for different - sections of the library. It can also set the `make' variable - `sysdep-routines', to specify extra modules to be included in the - library. You should use `sysdep-routines' rather than adding - modules to `routines' because the latter is used in determining - what to distribute for each subdirectory of the main source tree. +`int BC_DIM_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. - Each makefile in a subdirectory in the ordered list of - subdirectories to be searched is included in order. Since several - system-dependent makefiles may be included, each should append to - `sysdep-routines' rather than simply setting it: +`int bcmp (const void *A1, const void *A2, size_t SIZE)' + `string.h' (BSD): *Note String/Array Comparison::. - sysdep-routines := $(sysdep-routines) foo bar +`void bcopy (const void *FROM, void *TO, size_t SIZE)' + `string.h' (BSD): *Note Copying and Concatenation::. -`Subdirs' - This file contains the names of new whole subdirectories under the - top-level library source tree that should be included for this - system. These subdirectories are treated just like the - system-independent subdirectories in the library source tree, such - as `stdio' and `math'. +`int BC_SCALE_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. - Use this when there are completely new sets of functions and header - files that should go into the library for the system this - subdirectory of `sysdeps' implements. For example, - `sysdeps/unix/inet/Subdirs' contains `inet'; the `inet' directory - contains various network-oriented operations which only make sense - to put in the library on systems that support the Internet. +`int BC_STRING_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. -`Dist' - This file contains the names of files (relative to the - subdirectory of `sysdeps' in which it appears) which should be - included in the distribution. List any new files used by rules in - the `Makefile' in the same directory, or header files used by the - source files in that directory. You don't need to list files that - are implementations (either C or assembly source) of routines - whose names are given in the machine-independent makefiles in the - main source tree. +`int bind (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)' + `sys/socket.h' (BSD): *Note Setting Address::. -`configure' - This file is a shell script fragment to be run at configuration - time. The top-level `configure' script uses the shell `.' command - to read the `configure' file in each system-dependent directory - chosen, in order. The `configure' files are often generated from - `configure.in' files using Autoconf. +`char * bindtextdomain (const char *DOMAINNAME, const char *DIRNAME)' + `libintl.h' (GNU): *Note Locating gettext catalog::. - A system-dependent `configure' script will usually add things to - the shell variables `DEFS' and `config_vars'; see the top-level - `configure' script for details. The script can check for - `--with-PACKAGE' options that were passed to the top-level - `configure'. For an option `--with-PACKAGE=VALUE' `configure' - sets the shell variable `with_PACKAGE' (with any dashes in PACKAGE - converted to underscores) to VALUE; if the option is just - `--with-PACKAGE' (no argument), then it sets `with_PACKAGE' to - `yes'. +`char * bind_textdomain_codeset (const char *DOMAINNAME, const char *CODESET)' + `libintl.h' (GNU): *Note Charset conversion in gettext::. -`configure.in' - This file is an Autoconf input fragment to be processed into the - file `configure' in this subdirectory. *Note Introduction: - (autoconf.info)Introduction, for a description of Autoconf. You - should write either `configure' or `configure.in', but not both. - The first line of `configure.in' should invoke the `m4' macro - `GLIBC_PROVIDES'. This macro does several `AC_PROVIDE' calls for - Autoconf macros which are used by the top-level `configure' - script; without this, those macros might be invoked again - unnecessarily by Autoconf. +`blkcnt64_t' + `sys/types.h' (Unix98): *Note Attribute Meanings::. - That is the general system for how system-dependencies are isolated. +`blkcnt_t' + `sys/types.h' (Unix98): *Note Attribute Meanings::. -* Menu: +`BOOT_TIME' + `utmp.h' (SVID): *Note Manipulating the Database::. -* Hierarchy Conventions:: The layout of the `sysdeps' hierarchy. -* Porting to Unix:: Porting the library to an average - Unix-like system. +`BOOT_TIME' + `utmpx.h' (XPG4.2): *Note XPG Functions::. - -File: libc.info, Node: Hierarchy Conventions, Next: Porting to Unix, Up: Porting +`int brk (void *ADDR)' + `unistd.h' (BSD): *Note Resizing the Data Segment::. -Layout of the `sysdeps' Directory Hierarchy -------------------------------------------- +`tcflag_t BRKINT' + `termios.h' (POSIX.1): *Note Input Modes::. - A GNU configuration name has three parts: the CPU type, the -manufacturer's name, and the operating system. `configure' uses these -to pick the list of system-dependent directories to look for. If the -`--nfp' option is _not_ passed to `configure', the directory -`MACHINE/fpu' is also used. The operating system often has a "base -operating system"; for example, if the operating system is `Linux', the -base operating system is `unix/sysv'. The algorithm used to pick the -list of directories is simple: `configure' makes a list of the base -operating system, manufacturer, CPU type, and operating system, in that -order. It then concatenates all these together with slashes in -between, to produce a directory name; for example, the configuration -`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'. `configure' -then tries removing each element of the list in turn, so -`unix/sysv/linux' and `unix/sysv' are also tried, among others. Since -the precise version number of the operating system is often not -important, and it would be very inconvenient, for example, to have -identical `irix6.2' and `irix6.3' directories, `configure' tries -successively less specific operating system names by removing trailing -suffixes starting with a period. +`_BSD_SOURCE' + (GNU): *Note Feature Test Macros::. - As an example, here is the complete list of directories that would be -tried for the configuration `i686-linux-gnu' (with the `crypt' and -`linuxthreads' add-on): +`void * bsearch (const void *KEY, const void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)' + `stdlib.h' (ISO): *Note Array Search Function::. - sysdeps/i386/elf - crypt/sysdeps/unix - linuxthreads/sysdeps/unix/sysv/linux - linuxthreads/sysdeps/pthread - linuxthreads/sysdeps/unix/sysv - linuxthreads/sysdeps/unix - linuxthreads/sysdeps/i386/i686 - linuxthreads/sysdeps/i386 - linuxthreads/sysdeps/pthread/no-cmpxchg - sysdeps/unix/sysv/linux/i386 - sysdeps/unix/sysv/linux - sysdeps/gnu - sysdeps/unix/common - sysdeps/unix/mman - sysdeps/unix/inet - sysdeps/unix/sysv/i386/i686 - sysdeps/unix/sysv/i386 - sysdeps/unix/sysv - sysdeps/unix/i386 - sysdeps/unix - sysdeps/posix - sysdeps/i386/i686 - sysdeps/i386/i486 - sysdeps/libm-i387/i686 - sysdeps/i386/fpu - sysdeps/libm-i387 - sysdeps/i386 - sysdeps/wordsize-32 - sysdeps/ieee754 - sysdeps/libm-ieee754 - sysdeps/generic +`wint_t btowc (int C)' + `wchar.h' (ISO): *Note Converting a Character::. - Different machine architectures are conventionally subdirectories at -the top level of the `sysdeps' directory tree. For example, -`sysdeps/sparc' and `sysdeps/m68k'. These contain files specific to -those machine architectures, but not specific to any particular -operating system. There might be subdirectories for specializations of -those architectures, such as `sysdeps/m68k/68020'. Code which is -specific to the floating-point coprocessor used with a particular -machine should go in `sysdeps/MACHINE/fpu'. +`int BUFSIZ' + `stdio.h' (ISO): *Note Controlling Buffering::. - There are a few directories at the top level of the `sysdeps' -hierarchy that are not for particular machine architectures. +`void bzero (void *BLOCK, size_t SIZE)' + `string.h' (BSD): *Note Copying and Concatenation::. -`generic' - As described above (*note Porting::), this is the subdirectory - that every configuration implicitly uses after all others. +`double cabs (complex double Z)' + `complex.h' (ISO): *Note Absolute Value::. -`ieee754' - This directory is for code using the IEEE 754 floating-point - format, where the C type `float' is IEEE 754 single-precision - format, and `double' is IEEE 754 double-precision format. Usually - this directory is referred to in the `Implies' file in a machine - architecture-specific directory, such as `m68k/Implies'. +`float cabsf (complex float Z)' + `complex.h' (ISO): *Note Absolute Value::. -`libm-ieee754' - This directory contains an implementation of a mathematical library - usable on platforms which use IEEE 754 conformant floating-point - arithmetic. +`long double cabsl (complex long double Z)' + `complex.h' (ISO): *Note Absolute Value::. -`libm-i387' - This is a special case. Ideally the code should be in - `sysdeps/i386/fpu' but for various reasons it is kept aside. +`complex double cacos (complex double Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. -`posix' - This directory contains implementations of things in the library in - terms of POSIX.1 functions. This includes some of the POSIX.1 - functions themselves. Of course, POSIX.1 cannot be completely - implemented in terms of itself, so a configuration using just - `posix' cannot be complete. +`complex float cacosf (complex float Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. -`unix' - This is the directory for Unix-like things. *Note Porting to - Unix::. `unix' implies `posix'. There are some special-purpose - subdirectories of `unix': +`complex double cacosh (complex double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. - `unix/common' - This directory is for things common to both BSD and System V - release 4. Both `unix/bsd' and `unix/sysv/sysv4' imply - `unix/common'. +`complex float cacoshf (complex float Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. - `unix/inet' - This directory is for `socket' and related functions on Unix - systems. `unix/inet/Subdirs' enables the `inet' top-level - subdirectory. `unix/common' implies `unix/inet'. +`complex long double cacoshl (complex long double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. -`mach' - This is the directory for things based on the Mach microkernel - from CMU (including the GNU operating system). Other basic - operating systems (VMS, for example) would have their own - directories at the top level of the `sysdeps' hierarchy, parallel - to `unix' and `mach'. +`complex long double cacosl (complex long double Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. - -File: libc.info, Node: Porting to Unix, Prev: Hierarchy Conventions, Up: Porting +`void * calloc (size_t COUNT, size_t ELTSIZE)' + `malloc.h', `stdlib.h' (ISO): *Note Allocating Cleared Space::. -Porting the GNU C Library to Unix Systems ------------------------------------------ +`char * canonicalize_file_name (const char *NAME)' + `stdlib.h' (GNU): *Note Symbolic Links::. - Most Unix systems are fundamentally very similar. There are -variations between different machines, and variations in what -facilities are provided by the kernel. But the interface to the -operating system facilities is, for the most part, pretty uniform and -simple. +`double carg (complex double Z)' + `complex.h' (ISO): *Note Operations on Complex::. - The code for Unix systems is in the directory `unix', at the top -level of the `sysdeps' hierarchy. This directory contains -subdirectories (and subdirectory trees) for various Unix variants. +`float cargf (complex float Z)' + `complex.h' (ISO): *Note Operations on Complex::. - The functions which are system calls in most Unix systems are -implemented in assembly code, which is generated automatically from -specifications in files named `syscalls.list'. There are several such -files, one in `sysdeps/unix' and others in its subdirectories. Some -special system calls are implemented in files that are named with a -suffix of `.S'; for example, `_exit.S'. Files ending in `.S' are run -through the C preprocessor before being fed to the assembler. +`long double cargl (complex long double Z)' + `complex.h' (ISO): *Note Operations on Complex::. - These files all use a set of macros that should be defined in -`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines -them; a `sysdep.h' file in another directory must finish defining them -for the particular machine and operating system variant. See -`sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h' -implementations to see what these macros are and what they should do. +`complex double casin (complex double Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. - The system-specific makefile for the `unix' directory -(`sysdeps/unix/Makefile') gives rules to generate several files from -the Unix system you are building the library on (which is assumed to be -the target system you are building the library _for_). All the -generated files are put in the directory where the object files are -kept; they should not affect the source tree itself. The files -generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c' -(for the `stdio' section of the library). +`complex float casinf (complex float Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. + +`complex double casinh (complex double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex float casinhf (complex float Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double casinhl (complex long double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double casinl (complex long double Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. + +`complex double catan (complex double Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. + +`complex float catanf (complex float Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. + +`complex double catanh (complex double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex float catanhf (complex float Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double catanhl (complex long double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double catanl (complex long double Z)' + `complex.h' (ISO): *Note Inverse Trig Functions::. + +`nl_catd catopen (const char *CAT_NAME, int FLAG)' + `nl_types.h' (X/Open): *Note The catgets Functions::. + +`int cbc_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE, char *IVEC)' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`double cbrt (double X)' + `math.h' (BSD): *Note Exponents and Logarithms::. + +`float cbrtf (float X)' + `math.h' (BSD): *Note Exponents and Logarithms::. + +`long double cbrtl (long double X)' + `math.h' (BSD): *Note Exponents and Logarithms::. + +`complex double ccos (complex double Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`complex float ccosf (complex float Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`complex double ccosh (complex double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex float ccoshf (complex float Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double ccoshl (complex long double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double ccosl (complex long double Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`cc_t' + `termios.h' (POSIX.1): *Note Mode Data Types::. + +`tcflag_t CCTS_OFLOW' + `termios.h' (BSD): *Note Control Modes::. + +`double ceil (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`float ceilf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double ceill (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`complex double cexp (complex double Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex float cexpf (complex float Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex long double cexpl (complex long double Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`speed_t cfgetispeed (const struct termios *TERMIOS-P)' + `termios.h' (POSIX.1): *Note Line Speed::. + +`speed_t cfgetospeed (const struct termios *TERMIOS-P)' + `termios.h' (POSIX.1): *Note Line Speed::. + +`int cfmakeraw (struct termios *TERMIOS-P)' + `termios.h' (BSD): *Note Noncanonical Input::. + +`void cfree (void *PTR)' + `stdlib.h' (Sun): *Note Freeing after Malloc::. + +`int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)' + `termios.h' (POSIX.1): *Note Line Speed::. + +`int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)' + `termios.h' (POSIX.1): *Note Line Speed::. + +`int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)' + `termios.h' (BSD): *Note Line Speed::. + +`CHAR_BIT' + `limits.h' (ISO): *Note Width of Type::. + +`CHAR_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`CHAR_MIN' + `limits.h' (ISO): *Note Range of Type::. + +`int chdir (const char *FILENAME)' + `unistd.h' (POSIX.1): *Note Working Directory::. + +`int CHILD_MAX' + `limits.h' (POSIX.1): *Note General Limits::. + +`int chmod (const char *FILENAME, mode_t MODE)' + `sys/stat.h' (POSIX.1): *Note Setting Permissions::. + +`int chown (const char *FILENAME, uid_t OWNER, gid_t GROUP)' + `unistd.h' (POSIX.1): *Note File Owner::. + +`tcflag_t CIGNORE' + `termios.h' (BSD): *Note Control Modes::. + +`double cimag (complex double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`float cimagf (complex float Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`long double cimagl (complex long double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`int clearenv (void)' + `stdlib.h' (GNU): *Note Environment Access::. + +`void clearerr (FILE *STREAM)' + `stdio.h' (ISO): *Note Error Recovery::. + +`void clearerr_unlocked (FILE *STREAM)' + `stdio.h' (GNU): *Note Error Recovery::. + +`int CLK_TCK' + `time.h' (POSIX.1): *Note CPU Time::. + +`tcflag_t CLOCAL' + `termios.h' (POSIX.1): *Note Control Modes::. + +`clock_t clock (void)' + `time.h' (ISO): *Note CPU Time::. + +`int CLOCKS_PER_SEC' + `time.h' (ISO): *Note CPU Time::. + +`clock_t' + `time.h' (ISO): *Note CPU Time::. + +`complex double clog (complex double Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex double clog10 (complex double Z)' + `complex.h' (GNU): *Note Exponents and Logarithms::. + +`complex float clog10f (complex float Z)' + `complex.h' (GNU): *Note Exponents and Logarithms::. + +`complex long double clog10l (complex long double Z)' + `complex.h' (GNU): *Note Exponents and Logarithms::. + +`complex float clogf (complex float Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex long double clogl (complex long double Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`int close (int FILEDES)' + `unistd.h' (POSIX.1): *Note Opening and Closing Files::. + +`int closedir (DIR *DIRSTREAM)' + `dirent.h' (POSIX.1): *Note Reading/Closing Directory::. + +`void closelog (void)' + `syslog.h' (BSD): *Note closelog::. + +`int COLL_WEIGHTS_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. + +`size_t confstr (int PARAMETER, char *BUF, size_t LEN)' + `unistd.h' (POSIX.2): *Note String Parameters::. + +`complex double conj (complex double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`complex float conjf (complex float Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`complex long double conjl (complex long double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`int connect (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)' + `sys/socket.h' (BSD): *Note Connecting::. + +`cookie_close_function' + `stdio.h' (GNU): *Note Hook Functions::. + +`cookie_io_functions_t' + `stdio.h' (GNU): *Note Streams and Cookies::. + +`cookie_read_function' + `stdio.h' (GNU): *Note Hook Functions::. + +`cookie_seek_function' + `stdio.h' (GNU): *Note Hook Functions::. + +`cookie_write_function' + `stdio.h' (GNU): *Note Hook Functions::. + +`double copysign (double X, double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`float copysignf (float X, float Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`long double copysignl (long double X, long double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`double cos (double X)' + `math.h' (ISO): *Note Trig Functions::. + +`float cosf (float X)' + `math.h' (ISO): *Note Trig Functions::. + +`double cosh (double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`float coshf (float X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`long double coshl (long double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`long double cosl (long double X)' + `math.h' (ISO): *Note Trig Functions::. + +`complex double cpow (complex double BASE, complex double POWER)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex float cpowf (complex float BASE, complex float POWER)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex long double cpowl (complex long double BASE, complex long double POWER)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex double cproj (complex double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`complex float cprojf (complex float Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`complex long double cprojl (complex long double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`tcflag_t CREAD' + `termios.h' (POSIX.1): *Note Control Modes::. + +`double creal (complex double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`float crealf (complex float Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`long double creall (complex long double Z)' + `complex.h' (ISO): *Note Operations on Complex::. + +`int creat (const char *FILENAME, mode_t MODE)' + `fcntl.h' (POSIX.1): *Note Opening and Closing Files::. + +`int creat64 (const char *FILENAME, mode_t MODE)' + `fcntl.h' (Unix98): *Note Opening and Closing Files::. + +`tcflag_t CRTS_IFLOW' + `termios.h' (BSD): *Note Control Modes::. + +`char * crypt (const char *KEY, const char *SALT)' + `crypt.h' (BSD, SVID): *Note crypt::. + +`char * crypt_r (const char *KEY, const char *SALT, struct crypt_data * DATA)' + `crypt.h' (GNU): *Note crypt::. + +`tcflag_t CS5' + `termios.h' (POSIX.1): *Note Control Modes::. + +`tcflag_t CS6' + `termios.h' (POSIX.1): *Note Control Modes::. + +`tcflag_t CS7' + `termios.h' (POSIX.1): *Note Control Modes::. + +`tcflag_t CS8' + `termios.h' (POSIX.1): *Note Control Modes::. + +`complex double csin (complex double Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`complex float csinf (complex float Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`complex double csinh (complex double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex float csinhf (complex float Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double csinhl (complex long double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double csinl (complex long double Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`tcflag_t CSIZE' + `termios.h' (POSIX.1): *Note Control Modes::. + +`_CS_LFS64_CFLAGS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS64_LDFLAGS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS64_LIBS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS64_LINTFLAGS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS_CFLAGS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS_LDFLAGS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS_LIBS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_LFS_LINTFLAGS' + `unistd.h' (Unix98): *Note String Parameters::. + +`_CS_PATH' + `unistd.h' (POSIX.2): *Note String Parameters::. + +`complex double csqrt (complex double Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex float csqrtf (complex float Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`complex long double csqrtl (complex long double Z)' + `complex.h' (ISO): *Note Exponents and Logarithms::. + +`tcflag_t CSTOPB' + `termios.h' (POSIX.1): *Note Control Modes::. + +`complex double ctan (complex double Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`complex float ctanf (complex float Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`complex double ctanh (complex double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex float ctanhf (complex float Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double ctanhl (complex long double Z)' + `complex.h' (ISO): *Note Hyperbolic Functions::. + +`complex long double ctanl (complex long double Z)' + `complex.h' (ISO): *Note Trig Functions::. + +`char * ctermid (char *STRING)' + `stdio.h' (POSIX.1): *Note Identifying the Terminal::. + +`char * ctime (const time_t *TIME)' + `time.h' (ISO): *Note Formatting Calendar Time::. + +`char * ctime_r (const time_t *TIME, char *BUFFER)' + `time.h' (POSIX.1c): *Note Formatting Calendar Time::. + +`char * cuserid (char *STRING)' + `stdio.h' (POSIX.1): *Note Who Logged In::. + +`int daylight' + `time.h' (SVID): *Note Time Zone Functions::. + +`DBL_DIG' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_EPSILON' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MANT_DIG' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MAX' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MAX_10_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MAX_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MIN' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MIN_10_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`DBL_MIN_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`char * dcgettext (const char *DOMAINNAME, const char *MSGID, int CATEGORY)' + `libintl.h' (GNU): *Note Translation with gettext::. + +`char * dcngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N, int CATEGORY)' + `libintl.h' (GNU): *Note Advanced gettext functions::. + +`DEAD_PROCESS' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`DEAD_PROCESS' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`DES_DECRYPT' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DES_ENCRYPT' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DESERR_BADPARAM' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DESERR_HWERROR' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DESERR_NOHWDEVICE' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DESERR_NONE' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`int DES_FAILED (int ERR)' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DES_HW' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`void des_setparity (char *KEY)' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`DES_SW' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`dev_t' + `sys/types.h' (POSIX.1): *Note Attribute Meanings::. + +`char * dgettext (const char *DOMAINNAME, const char *MSGID)' + `libintl.h' (GNU): *Note Translation with gettext::. + +`double difftime (time_t TIME1, time_t TIME0)' + `time.h' (ISO): *Note Elapsed Time::. + +`DIR' + `dirent.h' (POSIX.1): *Note Opening a Directory::. + +`int dirfd (DIR *DIRSTREAM)' + `dirent.h' (GNU): *Note Opening a Directory::. + +`char * dirname (char *PATH)' + `libgen.h' (XPG): *Note Finding Tokens in a String::. + +`div_t div (int NUMERATOR, int DENOMINATOR)' + `stdlib.h' (ISO): *Note Integer Division::. + +`div_t' + `stdlib.h' (ISO): *Note Integer Division::. + +`char * dngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N)' + `libintl.h' (GNU): *Note Advanced gettext functions::. + +`double drand48 (void)' + `stdlib.h' (SVID): *Note SVID Random::. + +`int drand48_r (struct drand48_data *BUFFER, double *RESULT)' + `stdlib.h' (GNU): *Note SVID Random::. + +`double drem (double NUMERATOR, double DENOMINATOR)' + `math.h' (BSD): *Note Remainder Functions::. + +`float dremf (float NUMERATOR, float DENOMINATOR)' + `math.h' (BSD): *Note Remainder Functions::. + +`long double dreml (long double NUMERATOR, long double DENOMINATOR)' + `math.h' (BSD): *Note Remainder Functions::. + +`mode_t DTTOIF (int DTYPE)' + `dirent.h' (BSD): *Note Directory Entries::. + +`int dup (int OLD)' + `unistd.h' (POSIX.1): *Note Duplicating Descriptors::. + +`int dup2 (int OLD, int NEW)' + `unistd.h' (POSIX.1): *Note Duplicating Descriptors::. + +`int E2BIG' + `errno.h' (POSIX.1: Argument list too long): *Note Error Codes::. + +`int EACCES' + `errno.h' (POSIX.1: Permission denied): *Note Error Codes::. + +`int EADDRINUSE' + `errno.h' (BSD: Address already in use): *Note Error Codes::. + +`int EADDRNOTAVAIL' + `errno.h' (BSD: Cannot assign requested address): *Note Error + Codes::. + +`int EADV' + `errno.h' (Linux???: Advertise error): *Note Error Codes::. + +`int EAFNOSUPPORT' + `errno.h' (BSD: Address family not supported by protocol): *Note + Error Codes::. + +`int EAGAIN' + `errno.h' (POSIX.1: Resource temporarily unavailable): *Note + Error Codes::. + +`int EALREADY' + `errno.h' (BSD: Operation already in progress): *Note Error + Codes::. + +`int EAUTH' + `errno.h' (BSD: Authentication error): *Note Error Codes::. + +`int EBACKGROUND' + `errno.h' (GNU: Inappropriate operation for background process): + *Note Error Codes::. + +`int EBADE' + `errno.h' (Linux???: Invalid exchange): *Note Error Codes::. + +`int EBADF' + `errno.h' (POSIX.1: Bad file descriptor): *Note Error Codes::. + +`int EBADFD' + `errno.h' (Linux???: File descriptor in bad state): *Note Error + Codes::. + +`int EBADMSG' + `errno.h' (XOPEN: Bad message): *Note Error Codes::. + +`int EBADR' + `errno.h' (Linux???: Invalid request descriptor): *Note Error + Codes::. + +`int EBADRPC' + `errno.h' (BSD: RPC struct is bad): *Note Error Codes::. + +`int EBADRQC' + `errno.h' (Linux???: Invalid request code): *Note Error Codes::. + +`int EBADSLT' + `errno.h' (Linux???: Invalid slot): *Note Error Codes::. + +`int EBFONT' + `errno.h' (Linux???: Bad font file format): *Note Error Codes::. + +`int EBUSY' + `errno.h' (POSIX.1: Device or resource busy): *Note Error Codes::. + +`int ecb_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE)' + `rpc/des_crypt.h' (SUNRPC): *Note DES Encryption::. + +`int ECHILD' + `errno.h' (POSIX.1: No child processes): *Note Error Codes::. + +`tcflag_t ECHO' + `termios.h' (POSIX.1): *Note Local Modes::. + +`tcflag_t ECHOCTL' + `termios.h' (BSD): *Note Local Modes::. + +`tcflag_t ECHOE' + `termios.h' (POSIX.1): *Note Local Modes::. + +`tcflag_t ECHOK' + `termios.h' (POSIX.1): *Note Local Modes::. + +`tcflag_t ECHOKE' + `termios.h' (BSD): *Note Local Modes::. + +`tcflag_t ECHONL' + `termios.h' (POSIX.1): *Note Local Modes::. + +`tcflag_t ECHOPRT' + `termios.h' (BSD): *Note Local Modes::. + +`int ECHRNG' + `errno.h' (Linux???: Channel number out of range): *Note Error + Codes::. + +`int ECOMM' + `errno.h' (Linux???: Communication error on send): *Note Error + Codes::. + +`int ECONNABORTED' + `errno.h' (BSD: Software caused connection abort): *Note Error + Codes::. + +`int ECONNREFUSED' + `errno.h' (BSD: Connection refused): *Note Error Codes::. + +`int ECONNRESET' + `errno.h' (BSD: Connection reset by peer): *Note Error Codes::. + +`char * ecvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)' + `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. + +`char * ecvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' + `stdlib.h' (GNU): *Note System V Number Conversion::. + +`int ED' + `errno.h' (GNU: ?): *Note Error Codes::. + +`int EDEADLK' + `errno.h' (POSIX.1: Resource deadlock avoided): *Note Error + Codes::. + +`int EDEADLOCK' + `errno.h' (Linux???: File locking deadlock error): *Note Error + Codes::. + +`int EDESTADDRREQ' + `errno.h' (BSD: Destination address required): *Note Error + Codes::. + +`int EDIED' + `errno.h' (GNU: Translator died): *Note Error Codes::. + +`int EDOM' + `errno.h' (ISO: Numerical argument out of domain): *Note Error + Codes::. + +`int EDOTDOT' + `errno.h' (Linux???: RFS specific error): *Note Error Codes::. + +`int EDQUOT' + `errno.h' (BSD: Disk quota exceeded): *Note Error Codes::. + +`int EEXIST' + `errno.h' (POSIX.1: File exists): *Note Error Codes::. + +`int EFAULT' + `errno.h' (POSIX.1: Bad address): *Note Error Codes::. + +`int EFBIG' + `errno.h' (POSIX.1: File too large): *Note Error Codes::. + +`int EFTYPE' + `errno.h' (BSD: Inappropriate file type or format): *Note Error + Codes::. + +`int EGRATUITOUS' + `errno.h' (GNU: Gratuitous error): *Note Error Codes::. + +`int EGREGIOUS' + `errno.h' (GNU: You really blew it this time): *Note Error + Codes::. + +`int EHOSTDOWN' + `errno.h' (BSD: Host is down): *Note Error Codes::. + +`int EHOSTUNREACH' + `errno.h' (BSD: No route to host): *Note Error Codes::. + +`int EIDRM' + `errno.h' (XOPEN: Identifier removed): *Note Error Codes::. + +`int EIEIO' + `errno.h' (GNU: Computer bought the farm): *Note Error Codes::. + +`int EILSEQ' + `errno.h' (ISO: Invalid or incomplete multibyte or wide + character): *Note Error Codes::. + +`int EINPROGRESS' + `errno.h' (BSD: Operation now in progress): *Note Error Codes::. + +`int EINTR' + `errno.h' (POSIX.1: Interrupted system call): *Note Error Codes::. + +`int EINVAL' + `errno.h' (POSIX.1: Invalid argument): *Note Error Codes::. + +`int EIO' + `errno.h' (POSIX.1: Input/output error): *Note Error Codes::. + +`int EISCONN' + `errno.h' (BSD: Transport endpoint is already connected): *Note + Error Codes::. + +`int EISDIR' + `errno.h' (POSIX.1: Is a directory): *Note Error Codes::. + +`int EISNAM' + `errno.h' (Linux???: Is a named type file): *Note Error Codes::. + +`int EL2HLT' + `errno.h' (Obsolete: Level 2 halted): *Note Error Codes::. + +`int EL2NSYNC' + `errno.h' (Obsolete: Level 2 not synchronized): *Note Error + Codes::. + +`int EL3HLT' + `errno.h' (Obsolete: Level 3 halted): *Note Error Codes::. + +`int EL3RST' + `errno.h' (Obsolete: Level 3 reset): *Note Error Codes::. + +`int ELIBACC' + `errno.h' (Linux???: Can not access a needed shared library): + *Note Error Codes::. + +`int ELIBBAD' + `errno.h' (Linux???: Accessing a corrupted shared library): *Note + Error Codes::. + +`int ELIBEXEC' + `errno.h' (Linux???: Cannot exec a shared library directly): + *Note Error Codes::. + +`int ELIBMAX' + `errno.h' (Linux???: Attempting to link in too many shared + libraries): *Note Error Codes::. + +`int ELIBSCN' + `errno.h' (Linux???: .lib section in a.out corrupted): *Note + Error Codes::. + +`int ELNRNG' + `errno.h' (Linux???: Link number out of range): *Note Error + Codes::. + +`int ELOOP' + `errno.h' (BSD: Too many levels of symbolic links): *Note Error + Codes::. + +`int EMEDIUMTYPE' + `errno.h' (Linux???: Wrong medium type): *Note Error Codes::. + +`int EMFILE' + `errno.h' (POSIX.1: Too many open files): *Note Error Codes::. + +`int EMLINK' + `errno.h' (POSIX.1: Too many links): *Note Error Codes::. + +`EMPTY' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`EMPTY' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int EMSGSIZE' + `errno.h' (BSD: Message too long): *Note Error Codes::. + +`int EMULTIHOP' + `errno.h' (XOPEN: Multihop attempted): *Note Error Codes::. + +`int ENAMETOOLONG' + `errno.h' (POSIX.1: File name too long): *Note Error Codes::. + +`int ENAVAIL' + `errno.h' (Linux???: No XENIX semaphores available): *Note Error + Codes::. + +`void encrypt (char *BLOCK, int EDFLAG)' + `crypt.h' (BSD, SVID): *Note DES Encryption::. + +`void encrypt_r (char *BLOCK, int EDFLAG, struct crypt_data * DATA)' + `crypt.h' (GNU): *Note DES Encryption::. + +`void endfsent (void)' + `fstab.h' (BSD): *Note fstab::. + +`void endgrent (void)' + `grp.h' (SVID, BSD): *Note Scanning All Groups::. + +`void endhostent (void)' + `netdb.h' (BSD): *Note Host Names::. + +`int endmntent (FILE *STREAM)' + `mntent.h' (BSD): *Note mtab::. + +`void endnetent (void)' + `netdb.h' (BSD): *Note Networks Database::. + +`void endnetgrent (void)' + `netdb.h' (BSD): *Note Lookup Netgroup::. + +`void endprotoent (void)' + `netdb.h' (BSD): *Note Protocols Database::. + +`void endpwent (void)' + `pwd.h' (SVID, BSD): *Note Scanning All Users::. + +`void endservent (void)' + `netdb.h' (BSD): *Note Services Database::. + +`void endutent (void)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`void endutxent (void)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int ENEEDAUTH' + `errno.h' (BSD: Need authenticator): *Note Error Codes::. + +`int ENETDOWN' + `errno.h' (BSD: Network is down): *Note Error Codes::. + +`int ENETRESET' + `errno.h' (BSD: Network dropped connection on reset): *Note Error + Codes::. + +`int ENETUNREACH' + `errno.h' (BSD: Network is unreachable): *Note Error Codes::. + +`int ENFILE' + `errno.h' (POSIX.1: Too many open files in system): *Note Error + Codes::. + +`int ENOANO' + `errno.h' (Linux???: No anode): *Note Error Codes::. + +`int ENOBUFS' + `errno.h' (BSD: No buffer space available): *Note Error Codes::. + +`int ENOCSI' + `errno.h' (Linux???: No CSI structure available): *Note Error + Codes::. + +`int ENODATA' + `errno.h' (XOPEN: No data available): *Note Error Codes::. + +`int ENODEV' + `errno.h' (POSIX.1: No such device): *Note Error Codes::. + +`int ENOENT' + `errno.h' (POSIX.1: No such file or directory): *Note Error + Codes::. + +`int ENOEXEC' + `errno.h' (POSIX.1: Exec format error): *Note Error Codes::. + +`int ENOLCK' + `errno.h' (POSIX.1: No locks available): *Note Error Codes::. + +`int ENOLINK' + `errno.h' (XOPEN: Link has been severed): *Note Error Codes::. + +`int ENOMEDIUM' + `errno.h' (Linux???: No medium found): *Note Error Codes::. + +`int ENOMEM' + `errno.h' (POSIX.1: Cannot allocate memory): *Note Error Codes::. + +`int ENOMSG' + `errno.h' (XOPEN: No message of desired type): *Note Error + Codes::. + +`int ENONET' + `errno.h' (Linux???: Machine is not on the network): *Note Error + Codes::. + +`int ENOPKG' + `errno.h' (Linux???: Package not installed): *Note Error Codes::. + +`int ENOPROTOOPT' + `errno.h' (BSD: Protocol not available): *Note Error Codes::. + +`int ENOSPC' + `errno.h' (POSIX.1: No space left on device): *Note Error Codes::. + +`int ENOSR' + `errno.h' (XOPEN: Out of streams resources): *Note Error Codes::. + +`int ENOSTR' + `errno.h' (XOPEN: Device not a stream): *Note Error Codes::. + +`int ENOSYS' + `errno.h' (POSIX.1: Function not implemented): *Note Error + Codes::. + +`int ENOTBLK' + `errno.h' (BSD: Block device required): *Note Error Codes::. + +`int ENOTCONN' + `errno.h' (BSD: Transport endpoint is not connected): *Note Error + Codes::. + +`int ENOTDIR' + `errno.h' (POSIX.1: Not a directory): *Note Error Codes::. + +`int ENOTEMPTY' + `errno.h' (POSIX.1: Directory not empty): *Note Error Codes::. + +`int ENOTNAM' + `errno.h' (Linux???: Not a XENIX named type file): *Note Error + Codes::. + +`int ENOTSOCK' + `errno.h' (BSD: Socket operation on non-socket): *Note Error + Codes::. + +`int ENOTSUP' + `errno.h' (POSIX.1: Not supported): *Note Error Codes::. + +`int ENOTTY' + `errno.h' (POSIX.1: Inappropriate ioctl for device): *Note Error + Codes::. + +`int ENOTUNIQ' + `errno.h' (Linux???: Name not unique on network): *Note Error + Codes::. + +`char ** environ' + `unistd.h' (POSIX.1): *Note Environment Access::. + +`error_t envz_add (char **ENVZ, size_t *ENVZ_LEN, const char *NAME, const char *VALUE)' + `envz.h' (GNU): *Note Envz Functions::. + +`char * envz_entry (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)' + `envz.h' (GNU): *Note Envz Functions::. + +`char * envz_get (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)' + `envz.h' (GNU): *Note Envz Functions::. + +`error_t envz_merge (char **ENVZ, size_t *ENVZ_LEN, const char *ENVZ2, size_t ENVZ2_LEN, int OVERRIDE)' + `envz.h' (GNU): *Note Envz Functions::. + +`void envz_strip (char **ENVZ, size_t *ENVZ_LEN)' + `envz.h' (GNU): *Note Envz Functions::. + +`int ENXIO' + `errno.h' (POSIX.1: No such device or address): *Note Error + Codes::. + +`int EOF' + `stdio.h' (ISO): *Note EOF and Errors::. + +`int EOPNOTSUPP' + `errno.h' (BSD: Operation not supported): *Note Error Codes::. + +`int EOVERFLOW' + `errno.h' (XOPEN: Value too large for defined data type): *Note + Error Codes::. + +`int EPERM' + `errno.h' (POSIX.1: Operation not permitted): *Note Error Codes::. + +`int EPFNOSUPPORT' + `errno.h' (BSD: Protocol family not supported): *Note Error + Codes::. + +`int EPIPE' + `errno.h' (POSIX.1: Broken pipe): *Note Error Codes::. + +`int EPROCLIM' + `errno.h' (BSD: Too many processes): *Note Error Codes::. + +`int EPROCUNAVAIL' + `errno.h' (BSD: RPC bad procedure for program): *Note Error + Codes::. + +`int EPROGMISMATCH' + `errno.h' (BSD: RPC program version wrong): *Note Error Codes::. + +`int EPROGUNAVAIL' + `errno.h' (BSD: RPC program not available): *Note Error Codes::. + +`int EPROTO' + `errno.h' (XOPEN: Protocol error): *Note Error Codes::. + +`int EPROTONOSUPPORT' + `errno.h' (BSD: Protocol not supported): *Note Error Codes::. + +`int EPROTOTYPE' + `errno.h' (BSD: Protocol wrong type for socket): *Note Error + Codes::. + +`int EQUIV_CLASS_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. + +`double erand48 (unsigned short int XSUBI[3])' + `stdlib.h' (SVID): *Note SVID Random::. + +`int erand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, double *RESULT)' + `stdlib.h' (GNU): *Note SVID Random::. + +`int ERANGE' + `errno.h' (ISO: Numerical result out of range): *Note Error + Codes::. + +`int EREMCHG' + `errno.h' (Linux???: Remote address changed): *Note Error Codes::. + +`int EREMOTE' + `errno.h' (BSD: Object is remote): *Note Error Codes::. + +`int EREMOTEIO' + `errno.h' (Linux???: Remote I/O error): *Note Error Codes::. + +`int ERESTART' + `errno.h' (Linux???: Interrupted system call should be restarted): + *Note Error Codes::. + +`double erf (double X)' + `math.h' (SVID): *Note Special Functions::. + +`double erfc (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float erfcf (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double erfcl (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`float erff (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double erfl (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`int EROFS' + `errno.h' (POSIX.1: Read-only file system): *Note Error Codes::. + +`int ERPCMISMATCH' + `errno.h' (BSD: RPC version wrong): *Note Error Codes::. + +`volatile int errno' + `errno.h' (ISO): *Note Checking for Errors::. + +`int ESHUTDOWN' + `errno.h' (BSD: Cannot send after transport endpoint shutdown): + *Note Error Codes::. + +`int ESOCKTNOSUPPORT' + `errno.h' (BSD: Socket type not supported): *Note Error Codes::. + +`int ESPIPE' + `errno.h' (POSIX.1: Illegal seek): *Note Error Codes::. + +`int ESRCH' + `errno.h' (POSIX.1: No such process): *Note Error Codes::. + +`int ESRMNT' + `errno.h' (Linux???: Srmount error): *Note Error Codes::. + +`int ESTALE' + `errno.h' (BSD: Stale NFS file handle): *Note Error Codes::. + +`int ESTRPIPE' + `errno.h' (Linux???: Streams pipe error): *Note Error Codes::. + +`int ETIME' + `errno.h' (XOPEN: Timer expired): *Note Error Codes::. + +`int ETIMEDOUT' + `errno.h' (BSD: Connection timed out): *Note Error Codes::. + +`int ETOOMANYREFS' + `errno.h' (BSD: Too many references: cannot splice): *Note Error + Codes::. + +`int ETXTBSY' + `errno.h' (BSD: Text file busy): *Note Error Codes::. + +`int EUCLEAN' + `errno.h' (Linux???: Structure needs cleaning): *Note Error + Codes::. + +`int EUNATCH' + `errno.h' (Linux???: Protocol driver not attached): *Note Error + Codes::. + +`int EUSERS' + `errno.h' (BSD: Too many users): *Note Error Codes::. + +`int EWOULDBLOCK' + `errno.h' (BSD: Operation would block): *Note Error Codes::. + +`int EXDEV' + `errno.h' (POSIX.1: Invalid cross-device link): *Note Error + Codes::. + +`int execl (const char *FILENAME, const char *ARG0, ...)' + `unistd.h' (POSIX.1): *Note Executing a File::. + +`int execle (const char *FILENAME, const char *ARG0, char *const ENV[], ...)' + `unistd.h' (POSIX.1): *Note Executing a File::. + +`int execlp (const char *FILENAME, const char *ARG0, ...)' + `unistd.h' (POSIX.1): *Note Executing a File::. + +`int execv (const char *FILENAME, char *const ARGV[])' + `unistd.h' (POSIX.1): *Note Executing a File::. + +`int execve (const char *FILENAME, char *const ARGV[], char *const ENV[])' + `unistd.h' (POSIX.1): *Note Executing a File::. + +`int execvp (const char *FILENAME, char *const ARGV[])' + `unistd.h' (POSIX.1): *Note Executing a File::. + +`int EXFULL' + `errno.h' (Linux???: Exchange full): *Note Error Codes::. + +`void _Exit (int STATUS)' + `stdlib.h' (ISO): *Note Termination Internals::. + +`void _exit (int STATUS)' + `unistd.h' (POSIX.1): *Note Termination Internals::. + +`void exit (int STATUS)' + `stdlib.h' (ISO): *Note Normal Termination::. + +`int EXIT_FAILURE' + `stdlib.h' (ISO): *Note Exit Status::. + +`int EXIT_SUCCESS' + `stdlib.h' (ISO): *Note Exit Status::. + +`double exp (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double exp10 (double X)' + `math.h' (GNU): *Note Exponents and Logarithms::. + +`float exp10f (float X)' + `math.h' (GNU): *Note Exponents and Logarithms::. + +`long double exp10l (long double X)' + `math.h' (GNU): *Note Exponents and Logarithms::. + +`double exp2 (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float exp2f (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double exp2l (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float expf (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double expl (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double expm1 (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float expm1f (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double expm1l (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`int EXPR_NEST_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. + +`double fabs (double NUMBER)' + `math.h' (ISO): *Note Absolute Value::. + +`float fabsf (float NUMBER)' + `math.h' (ISO): *Note Absolute Value::. + +`long double fabsl (long double NUMBER)' + `math.h' (ISO): *Note Absolute Value::. + +`size_t __fbufsize (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Controlling Buffering::. + +`int fchdir (int FILEDES)' + `unistd.h' (XPG): *Note Working Directory::. + +`int fchmod (int FILEDES, int MODE)' + `sys/stat.h' (BSD): *Note Setting Permissions::. + +`int fchown (int FILEDES, int OWNER, int GROUP)' + `unistd.h' (BSD): *Note File Owner::. + +`int fclean (FILE *STREAM)' + `stdio.h' (GNU): *Note Cleaning Streams::. + +`int fclose (FILE *STREAM)' + `stdio.h' (ISO): *Note Closing Streams::. + +`int fcloseall (void)' + `stdio.h' (GNU): *Note Closing Streams::. + +`int fcntl (int FILEDES, int COMMAND, ...)' + `fcntl.h' (POSIX.1): *Note Control Operations::. + +`char * fcvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)' + `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. + +`char * fcvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' + `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. + +`int fdatasync (int FILDES)' + `unistd.h' (POSIX): *Note Synchronizing I/O::. + +`int FD_CLOEXEC' + `fcntl.h' (POSIX.1): *Note Descriptor Flags::. + +`void FD_CLR (int FILEDES, fd_set *SET)' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`double fdim (double X, double Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`float fdimf (float X, float Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`long double fdiml (long double X, long double Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`int FD_ISSET (int FILEDES, fd_set *SET)' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`FILE * fdopen (int FILEDES, const char *OPENTYPE)' + `stdio.h' (POSIX.1): *Note Descriptors and Streams::. + +`void FD_SET (int FILEDES, fd_set *SET)' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`fd_set' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`int FD_SETSIZE' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`int F_DUPFD' + `fcntl.h' (POSIX.1): *Note Duplicating Descriptors::. + +`void FD_ZERO (fd_set *SET)' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`int feclearexcept (int EXCEPTS)' + `fenv.h' (ISO): *Note Status bit operations::. + +`int fedisableexcept (int EXCEPTS)' + `fenv.h' (GNU): *Note Control Functions::. + +`FE_DIVBYZERO' + `fenv.h' (ISO): *Note Status bit operations::. + +`FE_DOWNWARD' + `fenv.h' (ISO): *Note Rounding::. + +`int feenableexcept (int EXCEPTS)' + `fenv.h' (GNU): *Note Control Functions::. + +`int fegetenv (fenv_t *ENVP)' + `fenv.h' (ISO): *Note Control Functions::. + +`int fegetexcept (int EXCEPTS)' + `fenv.h' (GNU): *Note Control Functions::. + +`int fegetexceptflag (fexcept_t *FLAGP, int EXCEPTS)' + `fenv.h' (ISO): *Note Status bit operations::. + +`int fegetround (void)' + `fenv.h' (ISO): *Note Rounding::. + +`int feholdexcept (fenv_t *ENVP)' + `fenv.h' (ISO): *Note Control Functions::. + +`FE_INEXACT' + `fenv.h' (ISO): *Note Status bit operations::. + +`FE_INVALID' + `fenv.h' (ISO): *Note Status bit operations::. + +`int feof (FILE *STREAM)' + `stdio.h' (ISO): *Note EOF and Errors::. + +`int feof_unlocked (FILE *STREAM)' + `stdio.h' (GNU): *Note EOF and Errors::. + +`FE_OVERFLOW' + `fenv.h' (ISO): *Note Status bit operations::. + +`int feraiseexcept (int EXCEPTS)' + `fenv.h' (ISO): *Note Status bit operations::. + +`int ferror (FILE *STREAM)' + `stdio.h' (ISO): *Note EOF and Errors::. + +`int ferror_unlocked (FILE *STREAM)' + `stdio.h' (GNU): *Note EOF and Errors::. + +`int fesetenv (const fenv_t *ENVP)' + `fenv.h' (ISO): *Note Control Functions::. + +`int fesetexceptflag (const fexcept_t *FLAGP, int' + `fenv.h' (ISO): *Note Status bit operations::. + +`int fesetround (int ROUND)' + `fenv.h' (ISO): *Note Rounding::. + +`int fetestexcept (int EXCEPTS)' + `fenv.h' (ISO): *Note Status bit operations::. + +`FE_TONEAREST' + `fenv.h' (ISO): *Note Rounding::. + +`FE_TOWARDZERO' + `fenv.h' (ISO): *Note Rounding::. + +`FE_UNDERFLOW' + `fenv.h' (ISO): *Note Status bit operations::. + +`int feupdateenv (const fenv_t *ENVP)' + `fenv.h' (ISO): *Note Control Functions::. + +`FE_UPWARD' + `fenv.h' (ISO): *Note Rounding::. + +`int fflush (FILE *STREAM)' + `stdio.h' (ISO): *Note Flushing Buffers::. + +`int fflush_unlocked (FILE *STREAM)' + `stdio.h' (POSIX): *Note Flushing Buffers::. + +`int fgetc (FILE *STREAM)' + `stdio.h' (ISO): *Note Character Input::. + +`int fgetc_unlocked (FILE *STREAM)' + `stdio.h' (POSIX): *Note Character Input::. + +`int F_GETFD' + `fcntl.h' (POSIX.1): *Note Descriptor Flags::. + +`int F_GETFL' + `fcntl.h' (POSIX.1): *Note Getting File Status Flags::. + +`struct group * fgetgrent (FILE *STREAM)' + `grp.h' (SVID): *Note Scanning All Groups::. + +`int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' + `grp.h' (GNU): *Note Scanning All Groups::. + +`int F_GETLK' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`int F_GETOWN' + `fcntl.h' (BSD): *Note Interrupt Input::. + +`int fgetpos (FILE *STREAM, fpos_t *POSITION)' + `stdio.h' (ISO): *Note Portable Positioning::. + +`int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)' + `stdio.h' (Unix98): *Note Portable Positioning::. + +`struct passwd * fgetpwent (FILE *STREAM)' + `pwd.h' (SVID): *Note Scanning All Users::. + +`int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)' + `pwd.h' (GNU): *Note Scanning All Users::. + +`char * fgets (char *S, int COUNT, FILE *STREAM)' + `stdio.h' (ISO): *Note Line Input::. + +`char * fgets_unlocked (char *S, int COUNT, FILE *STREAM)' + `stdio.h' (GNU): *Note Line Input::. + +`wint_t fgetwc (FILE *STREAM)' + `wchar.h' (ISO): *Note Character Input::. + +`wint_t fgetwc_unlocked (FILE *STREAM)' + `wchar.h' (GNU): *Note Character Input::. + +`wchar_t * fgetws (wchar_t *WS, int COUNT, FILE *STREAM)' + `wchar.h' (ISO): *Note Line Input::. + +`wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE *STREAM)' + `wchar.h' (GNU): *Note Line Input::. + +`FILE' + `stdio.h' (ISO): *Note Streams::. + +`int FILENAME_MAX' + `stdio.h' (ISO): *Note Limits for Files::. + +`int fileno (FILE *STREAM)' + `stdio.h' (POSIX.1): *Note Descriptors and Streams::. + +`int fileno_unlocked (FILE *STREAM)' + `stdio.h' (GNU): *Note Descriptors and Streams::. + +`int finite (double X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int finitef (float X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int finitel (long double X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int __flbf (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Controlling Buffering::. + +`void flockfile (FILE *STREAM)' + `stdio.h' (POSIX): *Note Streams and Threads::. + +`double floor (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`float floorf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double floorl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`FLT_DIG' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_EPSILON' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MANT_DIG' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MAX' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MAX_10_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MAX_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MIN' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MIN_10_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_MIN_EXP' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_RADIX' + `float.h' (ISO): *Note Floating Point Parameters::. + +`FLT_ROUNDS' + `float.h' (ISO): *Note Floating Point Parameters::. + +`void _flushlbf (void)' + `stdio_ext.h' (GNU): *Note Flushing Buffers::. + +`tcflag_t FLUSHO' + `termios.h' (BSD): *Note Local Modes::. + +`double fma (double X, double Y, double Z)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`float fmaf (float X, float Y, float Z)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`long double fmal (long double X, long double Y, long double Z)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`double fmax (double X, double Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`float fmaxf (float X, float Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`long double fmaxl (long double X, long double Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`FILE * fmemopen (void *BUF, size_t SIZE, const char *OPENTYPE)' + `stdio.h' (GNU): *Note String Streams::. + +`double fmin (double X, double Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`float fminf (float X, float Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`long double fminl (long double X, long double Y)' + `math.h' (ISO): *Note Misc FP Arithmetic::. + +`double fmod (double NUMERATOR, double DENOMINATOR)' + `math.h' (ISO): *Note Remainder Functions::. + +`float fmodf (float NUMERATOR, float DENOMINATOR)' + `math.h' (ISO): *Note Remainder Functions::. + +`long double fmodl (long double NUMERATOR, long double DENOMINATOR)' + `math.h' (ISO): *Note Remainder Functions::. + +`int fmtmsg (long int CLASSIFICATION, const char *LABEL, int SEVERITY, const char *TEXT, const char *ACTION, const char *TAG)' + `fmtmsg.h' (XPG): *Note Printing Formatted Messages::. + +`int fnmatch (const char *PATTERN, const char *STRING, int FLAGS)' + `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. + +`FNM_CASEFOLD' + `fnmatch.h' (GNU): *Note Wildcard Matching::. + +`FNM_EXTMATCH' + `fnmatch.h' (GNU): *Note Wildcard Matching::. + +`FNM_FILE_NAME' + `fnmatch.h' (GNU): *Note Wildcard Matching::. + +`FNM_LEADING_DIR' + `fnmatch.h' (GNU): *Note Wildcard Matching::. + +`FNM_NOESCAPE' + `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. + +`FNM_PATHNAME' + `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. + +`FNM_PERIOD' + `fnmatch.h' (POSIX.2): *Note Wildcard Matching::. + +`int F_OK' + `unistd.h' (POSIX.1): *Note Testing File Access::. + +`FILE * fopen (const char *FILENAME, const char *OPENTYPE)' + `stdio.h' (ISO): *Note Opening Streams::. + +`FILE * fopen64 (const char *FILENAME, const char *OPENTYPE)' + `stdio.h' (Unix98): *Note Opening Streams::. + +`FILE * fopencookie (void *COOKIE, const char *OPENTYPE, cookie_io_functions_t IO-FUNCTIONS)' + `stdio.h' (GNU): *Note Streams and Cookies::. + +`int FOPEN_MAX' + `stdio.h' (ISO): *Note Opening Streams::. + +`pid_t fork (void)' + `unistd.h' (POSIX.1): *Note Creating a Process::. + +`int forkpty (int *AMASTER, char *NAME, struct termios *TERMP, struct winsize *WINP)' + `pty.h' (BSD): *Note Pseudo-Terminal Pairs::. + +`long int fpathconf (int FILEDES, int PARAMETER)' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`int fpclassify (_float-type_ X)' + `math.h' (ISO): *Note Floating Point Classes::. + +`FPE_DECOVF_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_FLTDIV_FAULT' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_FLTDIV_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_FLTOVF_FAULT' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_FLTOVF_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_FLTUND_FAULT' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_FLTUND_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_INTDIV_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`FPE_INTOVF_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`size_t __fpending (FILE *STREAM) The `__fpending'' + `stdio_ext.h' (GNU): *Note Controlling Buffering::. + +`FPE_SUBRNG_TRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`int FP_ILOGB0' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`int FP_ILOGBNAN' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`fpos64_t' + `stdio.h' (Unix98): *Note Portable Positioning::. + +`fpos_t' + `stdio.h' (ISO): *Note Portable Positioning::. + +`int fprintf (FILE *STREAM, const char *TEMPLATE, ...)' + `stdio.h' (ISO): *Note Formatted Output Functions::. + +`void __fpurge (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Flushing Buffers::. + +`int fputc (int C, FILE *STREAM)' + `stdio.h' (ISO): *Note Simple Output::. + +`int fputc_unlocked (int C, FILE *STREAM)' + `stdio.h' (POSIX): *Note Simple Output::. + +`int fputs (const char *S, FILE *STREAM)' + `stdio.h' (ISO): *Note Simple Output::. + +`int fputs_unlocked (const char *S, FILE *STREAM)' + `stdio.h' (GNU): *Note Simple Output::. + +`wint_t fputwc (wchar_t WC, FILE *STREAM)' + `wchar.h' (ISO): *Note Simple Output::. + +`wint_t fputwc_unlocked (wint_t WC, FILE *STREAM)' + `wchar.h' (POSIX): *Note Simple Output::. + +`int fputws (const wchar_t *WS, FILE *STREAM)' + `wchar.h' (ISO): *Note Simple Output::. + +`int fputws_unlocked (const wchar_t *WS, FILE *STREAM)' + `wchar.h' (GNU): *Note Simple Output::. + +`F_RDLCK' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`size_t fread (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' + `stdio.h' (ISO): *Note Block Input/Output::. + +`int __freadable (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Opening Streams::. + +`int __freading (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Opening Streams::. + +`size_t fread_unlocked (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' + `stdio.h' (GNU): *Note Block Input/Output::. + +`void free (void *PTR)' + `malloc.h', `stdlib.h' (ISO): *Note Freeing after Malloc::. + +`__free_hook' + `malloc.h' (GNU): *Note Hooks for Malloc::. + +`FILE * freopen (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)' + `stdio.h' (ISO): *Note Opening Streams::. + +`FILE * freopen64 (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)' + `stdio.h' (Unix98): *Note Opening Streams::. + +`double frexp (double VALUE, int *EXPONENT)' + `math.h' (ISO): *Note Normalization Functions::. + +`float frexpf (float VALUE, int *EXPONENT)' + `math.h' (ISO): *Note Normalization Functions::. + +`long double frexpl (long double VALUE, int *EXPONENT)' + `math.h' (ISO): *Note Normalization Functions::. + +`int fscanf (FILE *STREAM, const char *TEMPLATE, ...)' + `stdio.h' (ISO): *Note Formatted Input Functions::. + +`int fseek (FILE *STREAM, long int OFFSET, int WHENCE)' + `stdio.h' (ISO): *Note File Positioning::. + +`int fseeko (FILE *STREAM, off_t OFFSET, int WHENCE)' + `stdio.h' (Unix98): *Note File Positioning::. + +`int fseeko64 (FILE *STREAM, off64_t OFFSET, int WHENCE)' + `stdio.h' (Unix98): *Note File Positioning::. + +`int F_SETFD' + `fcntl.h' (POSIX.1): *Note Descriptor Flags::. + +`int F_SETFL' + `fcntl.h' (POSIX.1): *Note Getting File Status Flags::. + +`int F_SETLK' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`int F_SETLKW' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`int __fsetlocking (FILE *STREAM, int TYPE)' + `stdio_ext.h' (GNU): *Note Streams and Threads::. + +`int F_SETOWN' + `fcntl.h' (BSD): *Note Interrupt Input::. + +`int fsetpos (FILE *STREAM, const fpos_t *POSITION)' + `stdio.h' (ISO): *Note Portable Positioning::. + +`int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)' + `stdio.h' (Unix98): *Note Portable Positioning::. + +`int fstat (int FILEDES, struct stat *BUF)' + `sys/stat.h' (POSIX.1): *Note Reading Attributes::. + +`int fstat64 (int FILEDES, struct stat64 *BUF)' + `sys/stat.h' (Unix98): *Note Reading Attributes::. + +`int fsync (int FILDES)' + `unistd.h' (POSIX): *Note Synchronizing I/O::. + +`long int ftell (FILE *STREAM)' + `stdio.h' (ISO): *Note File Positioning::. + +`off_t ftello (FILE *STREAM)' + `stdio.h' (Unix98): *Note File Positioning::. + +`off64_t ftello64 (FILE *STREAM)' + `stdio.h' (Unix98): *Note File Positioning::. + +`int ftruncate (int FD, off_t LENGTH)' + `unistd.h' (POSIX): *Note File Size::. + +`int ftruncate64 (int ID, off64_t LENGTH)' + `unistd.h' (Unix98): *Note File Size::. + +`int ftrylockfile (FILE *STREAM)' + `stdio.h' (POSIX): *Note Streams and Threads::. + +`int ftw (const char *FILENAME, __ftw_func_t FUNC, int DESCRIPTORS)' + `ftw.h' (SVID): *Note Working with Directory Trees::. + +`int ftw64 (const char *FILENAME, __ftw64_func_t FUNC, int DESCRIPTORS)' + `ftw.h' (Unix98): *Note Working with Directory Trees::. + +`__ftw64_func_t' + `ftw.h' (GNU): *Note Working with Directory Trees::. + +`__ftw_func_t' + `ftw.h' (GNU): *Note Working with Directory Trees::. + +`F_UNLCK' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`void funlockfile (FILE *STREAM)' + `stdio.h' (POSIX): *Note Streams and Threads::. + +`int fwide (FILE *STREAM, int MODE)' + `wchar.h' (ISO): *Note Streams and I18N::. + +`int fwprintf (FILE *STREAM, const wchar_t *TEMPLATE, ...)' + `wchar.h' (ISO): *Note Formatted Output Functions::. + +`int __fwritable (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Opening Streams::. + +`size_t fwrite (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' + `stdio.h' (ISO): *Note Block Input/Output::. + +`size_t fwrite_unlocked (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)' + `stdio.h' (GNU): *Note Block Input/Output::. + +`int __fwriting (FILE *STREAM)' + `stdio_ext.h' (GNU): *Note Opening Streams::. + +`F_WRLCK' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`int fwscanf (FILE *STREAM, const wchar_t *TEMPLATE, ...)' + `wchar.h' (ISO): *Note Formatted Input Functions::. + +`double gamma (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float gammaf (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double gammal (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`void (*__gconv_end_fct) (struct gconv_step *)' + `gconv.h' (GNU): *Note glibc iconv Implementation::. + +`int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, const char **, const char *, size_t *, int)' + `gconv.h' (GNU): *Note glibc iconv Implementation::. + +`int (*__gconv_init_fct) (struct __gconv_step *)' + `gconv.h' (GNU): *Note glibc iconv Implementation::. + +`char * gcvt (double VALUE, int NDIGIT, char *BUF)' + `stdlib.h' (SVID, Unix98): *Note System V Number Conversion::. + +`long int get_avphys_pages (void)' + `sys/sysinfo.h' (GNU): *Note Query Memory Parameters::. + +`int getc (FILE *STREAM)' + `stdio.h' (ISO): *Note Character Input::. + +`int getchar (void)' + `stdio.h' (ISO): *Note Character Input::. + +`int getchar_unlocked (void)' + `stdio.h' (POSIX): *Note Character Input::. + +`int getcontext (ucontext_t *UCP)' + `ucontext.h' (SVID): *Note System V contexts::. + +`int getc_unlocked (FILE *STREAM)' + `stdio.h' (POSIX): *Note Character Input::. + +`char * get_current_dir_name (void)' + `unistd.h' (GNU): *Note Working Directory::. + +`char * getcwd (char *BUFFER, size_t SIZE)' + `unistd.h' (POSIX.1): *Note Working Directory::. + +`struct tm * getdate (const char *STRING)' + `time.h' (Unix98): *Note General Time String Parsing::. + +`getdate_err' + `time.h' (Unix98): *Note General Time String Parsing::. + +`int getdate_r (const char *STRING, struct tm *TP)' + `time.h' (GNU): *Note General Time String Parsing::. + +`ssize_t getdelim (char **LINEPTR, size_t *N, int DELIMITER, FILE *STREAM)' + `stdio.h' (GNU): *Note Line Input::. + +`int getdomainnname (char *NAME, size_t LENGTH)' + `unistd.h' (???): *Note Host Identification::. + +`gid_t getegid (void)' + `unistd.h' (POSIX.1): *Note Reading Persona::. + +`char * getenv (const char *NAME)' + `stdlib.h' (ISO): *Note Environment Access::. + +`uid_t geteuid (void)' + `unistd.h' (POSIX.1): *Note Reading Persona::. + +`struct fstab * getfsent (void)' + `fstab.h' (BSD): *Note fstab::. + +`struct fstab * getfsfile (const char *NAME)' + `fstab.h' (BSD): *Note fstab::. + +`struct fstab * getfsspec (const char *NAME)' + `fstab.h' (BSD): *Note fstab::. + +`gid_t getgid (void)' + `unistd.h' (POSIX.1): *Note Reading Persona::. + +`struct group * getgrent (void)' + `grp.h' (SVID, BSD): *Note Scanning All Groups::. + +`int getgrent_r (struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' + `grp.h' (GNU): *Note Scanning All Groups::. + +`struct group * getgrgid (gid_t GID)' + `grp.h' (POSIX.1): *Note Lookup Group::. + +`int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' + `grp.h' (POSIX.1c): *Note Lookup Group::. + +`struct group * getgrnam (const char *NAME)' + `grp.h' (SVID, BSD): *Note Lookup Group::. + +`int getgrnam_r (const char *NAME, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)' + `grp.h' (POSIX.1c): *Note Lookup Group::. + +`int getgroups (int COUNT, gid_t *GROUPS)' + `unistd.h' (POSIX.1): *Note Reading Persona::. + +`struct hostent * gethostbyaddr (const char *ADDR, size_t LENGTH, int FORMAT)' + `netdb.h' (BSD): *Note Host Names::. + +`int gethostbyaddr_r (const char *ADDR, size_t LENGTH, int FORMAT, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)' + `netdb.h' (GNU): *Note Host Names::. + +`struct hostent * gethostbyname (const char *NAME)' + `netdb.h' (BSD): *Note Host Names::. + +`struct hostent * gethostbyname2 (const char *NAME, int AF)' + `netdb.h' (IPv6 Basic API): *Note Host Names::. + +`int gethostbyname2_r (const char *NAME, int AF, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)' + `netdb.h' (GNU): *Note Host Names::. + +`int gethostbyname_r (const char *restrict NAME, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)' + `netdb.h' (GNU): *Note Host Names::. + +`struct hostent * gethostent (void)' + `netdb.h' (BSD): *Note Host Names::. + +`long int gethostid (void)' + `unistd.h' (BSD): *Note Host Identification::. + +`int gethostname (char *NAME, size_t SIZE)' + `unistd.h' (BSD): *Note Host Identification::. + +`int getitimer (int WHICH, struct itimerval *OLD)' + `sys/time.h' (BSD): *Note Setting an Alarm::. + +`ssize_t getline (char **LINEPTR, size_t *N, FILE *STREAM)' + `stdio.h' (GNU): *Note Line Input::. + +`int getloadavg (double LOADAVG[], int NELEM)' + `stdlib.h' (BSD): *Note Processor Resources::. + +`char * getlogin (void)' + `unistd.h' (POSIX.1): *Note Who Logged In::. + +`struct mntent * getmntent (FILE *STREAM)' + `mntent.h' (BSD): *Note mtab::. + +`struct mntent * getmntent_r (FILE *STREAM, struct mentent *RESULT, char *BUFFER, int BUFSIZE)' + `mntent.h' (BSD): *Note mtab::. + +`struct netent * getnetbyaddr (unsigned long int NET, int TYPE)' + `netdb.h' (BSD): *Note Networks Database::. + +`struct netent * getnetbyname (const char *NAME)' + `netdb.h' (BSD): *Note Networks Database::. + +`struct netent * getnetent (void)' + `netdb.h' (BSD): *Note Networks Database::. + +`int getnetgrent (char **HOSTP, char **USERP, char **DOMAINP)' + `netdb.h' (BSD): *Note Lookup Netgroup::. + +`int getnetgrent_r (char **HOSTP, char **USERP, char **DOMAINP, char *BUFFER, int BUFLEN)' + `netdb.h' (GNU): *Note Lookup Netgroup::. + +`int get_nprocs (void)' + `sys/sysinfo.h' (GNU): *Note Processor Resources::. + +`int get_nprocs_conf (void)' + `sys/sysinfo.h' (GNU): *Note Processor Resources::. + +`int getopt (int ARGC, char **ARGV, const char *OPTIONS)' + `unistd.h' (POSIX.2): *Note Using Getopt::. + +`int getopt_long (int ARGC, char *const *ARGV, const char *SHORTOPTS, struct option *LONGOPTS, int *INDEXPTR)' + `getopt.h' (GNU): *Note Getopt Long Options::. + +`int getopt_long_only (int ARGC, char *const *ARGV, const char *SHORTOPTS, struct option *LONGOPTS, int *INDEXPTR)' + `getopt.h' (GNU): *Note Getopt Long Options::. + +`int getpagesize (void)' + `unistd.h' (BSD): *Note Query Memory Parameters::. + +`char * getpass (const char *PROMPT)' + `unistd.h' (BSD): *Note getpass::. + +`int getpeername (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)' + `sys/socket.h' (BSD): *Note Who is Connected::. + +`int getpgid (pid_t PID)' + `unistd.h' (SVID): *Note Process Group Functions::. + +`pid_t getpgrp (pid_t PID)' + `unistd.h' (BSD): *Note Process Group Functions::. + +`pid_t getpgrp (void)' + `unistd.h' (POSIX.1): *Note Process Group Functions::. + +`long int get_phys_pages (void)' + `sys/sysinfo.h' (GNU): *Note Query Memory Parameters::. + +`pid_t getpid (void)' + `unistd.h' (POSIX.1): *Note Process Identification::. + +`pid_t getppid (void)' + `unistd.h' (POSIX.1): *Note Process Identification::. + +`int getpriority (int CLASS, int ID)' + `sys/resource.h' (BSD,POSIX): *Note Traditional Scheduling + Functions::. + +`struct protoent * getprotobyname (const char *NAME)' + `netdb.h' (BSD): *Note Protocols Database::. + +`struct protoent * getprotobynumber (int PROTOCOL)' + `netdb.h' (BSD): *Note Protocols Database::. + +`struct protoent * getprotoent (void)' + `netdb.h' (BSD): *Note Protocols Database::. + +`int getpt (void)' + `stdlib.h' (GNU): *Note Allocation::. + +`struct passwd * getpwent (void)' + `pwd.h' (POSIX.1): *Note Scanning All Users::. + +`int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER, int BUFLEN, struct passwd **RESULT)' + `pwd.h' (GNU): *Note Scanning All Users::. + +`struct passwd * getpwnam (const char *NAME)' + `pwd.h' (POSIX.1): *Note Lookup User::. + +`int getpwnam_r (const char *NAME, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)' + `pwd.h' (POSIX.1c): *Note Lookup User::. + +`struct passwd * getpwuid (uid_t UID)' + `pwd.h' (POSIX.1): *Note Lookup User::. + +`int getpwuid_r (uid_t UID, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)' + `pwd.h' (POSIX.1c): *Note Lookup User::. + +`int getrlimit (int RESOURCE, struct rlimit *RLP)' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`int getrlimit64 (int RESOURCE, struct rlimit64 *RLP)' + `sys/resource.h' (Unix98): *Note Limits on Resources::. + +`int getrusage (int PROCESSES, struct rusage *RUSAGE)' + `sys/resource.h' (BSD): *Note Resource Usage::. + +`char * gets (char *S)' + `stdio.h' (ISO): *Note Line Input::. + +`struct servent * getservbyname (const char *NAME, const char *PROTO)' + `netdb.h' (BSD): *Note Services Database::. + +`struct servent * getservbyport (int PORT, const char *PROTO)' + `netdb.h' (BSD): *Note Services Database::. + +`struct servent * getservent (void)' + `netdb.h' (BSD): *Note Services Database::. + +`pid_t getsid (pid_t PID)' + `unistd.h' (SVID): *Note Process Group Functions::. + +`int getsockname (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)' + `sys/socket.h' (BSD): *Note Reading Address::. + +`int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t *OPTLEN-PTR)' + `sys/socket.h' (BSD): *Note Socket Option Functions::. + +`int getsubopt (char **OPTIONP, const char* const *TOKENS, char **VALUEP)' + `stdlib.h' (stdlib.h): *Note Suboptions Example: Suboptions. + +`char * gettext (const char *MSGID)' + `libintl.h' (GNU): *Note Translation with gettext::. + +`int gettimeofday (struct timeval *TP, struct timezone *TZP)' + `sys/time.h' (BSD): *Note High-Resolution Calendar::. + +`uid_t getuid (void)' + `unistd.h' (POSIX.1): *Note Reading Persona::. + +`mode_t getumask (void)' + `sys/stat.h' (GNU): *Note Setting Permissions::. + +`struct utmp * getutent (void)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`int getutent_r (struct utmp *BUFFER, struct utmp **RESULT)' + `utmp.h' (GNU): *Note Manipulating the Database::. + +`struct utmp * getutid (const struct utmp *ID)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`int getutid_r (const struct utmp *ID, struct utmp *BUFFER, struct utmp **RESULT)' + `utmp.h' (GNU): *Note Manipulating the Database::. + +`struct utmp * getutline (const struct utmp *LINE)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`int getutline_r (const struct utmp *LINE, struct utmp *BUFFER, struct utmp **RESULT)' + `utmp.h' (GNU): *Note Manipulating the Database::. + +`int getutmp (const struct utmpx *utmpx, struct utmp *utmp)' + `utmp.h' (GNU): *Note XPG Functions::. + +`int getutmpx (const struct utmp *utmp, struct utmpx *utmpx)' + `utmp.h' (GNU): *Note XPG Functions::. + +`struct utmpx * getutxent (void)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`struct utmpx * getutxid (const struct utmpx *ID)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`struct utmpx * getutxline (const struct utmpx *LINE)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int getw (FILE *STREAM)' + `stdio.h' (SVID): *Note Character Input::. + +`wint_t getwc (FILE *STREAM)' + `wchar.h' (ISO): *Note Character Input::. + +`wint_t getwchar (void)' + `wchar.h' (ISO): *Note Character Input::. + +`wint_t getwchar_unlocked (void)' + `wchar.h' (GNU): *Note Character Input::. + +`wint_t getwc_unlocked (FILE *STREAM)' + `wchar.h' (GNU): *Note Character Input::. + +`char * getwd (char *BUFFER)' + `unistd.h' (BSD): *Note Working Directory::. + +`gid_t' + `sys/types.h' (POSIX.1): *Note Reading Persona::. + +`int glob (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob_t *VECTOR-PTR)' + `glob.h' (POSIX.2): *Note Calling Glob::. + +`int glob64 (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob64_t *VECTOR-PTR)' + `glob.h' (GNU): *Note Calling Glob::. + +`glob64_t' + `glob.h' (GNU): *Note Calling Glob::. + +`GLOB_ABORTED' + `glob.h' (POSIX.2): *Note Calling Glob::. + +`GLOB_ALTDIRFUNC' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_APPEND' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`GLOB_BRACE' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_DOOFFS' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`GLOB_ERR' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`void globfree (glob_t *PGLOB)' + `glob.h' (POSIX.2): *Note More Flags for Globbing::. + +`void globfree64 (glob64_t *PGLOB)' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_MAGCHAR' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_MARK' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`GLOB_NOCHECK' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`GLOB_NOESCAPE' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`GLOB_NOMAGIC' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_NOMATCH' + `glob.h' (POSIX.2): *Note Calling Glob::. + +`GLOB_NOSORT' + `glob.h' (POSIX.2): *Note Flags for Globbing::. + +`GLOB_NOSPACE' + `glob.h' (POSIX.2): *Note Calling Glob::. + +`GLOB_ONLYDIR' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_PERIOD' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`glob_t' + `glob.h' (POSIX.2): *Note Calling Glob::. + +`GLOB_TILDE' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`GLOB_TILDE_CHECK' + `glob.h' (GNU): *Note More Flags for Globbing::. + +`struct tm * gmtime (const time_t *TIME)' + `time.h' (ISO): *Note Broken-down Time::. + +`struct tm * gmtime_r (const time_t *TIME, struct tm *RESULTP)' + `time.h' (POSIX.1c): *Note Broken-down Time::. + +`_GNU_SOURCE' + (GNU): *Note Feature Test Macros::. + +`int grantpt (int FILEDES)' + `stdlib.h' (SVID, XPG4.2): *Note Allocation::. + +`int gsignal (int SIGNUM)' + `signal.h' (SVID): *Note Signaling Yourself::. + +`int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)' + `sgtty.h' (BSD): *Note BSD Terminal Modes::. + +`char * hasmntopt (const struct mntent *MNT, const char *OPT)' + `mntent.h' (BSD): *Note mtab::. + +`int hcreate (size_t NEL)' + `search.h' (SVID): *Note Hash Search Function::. + +`int hcreate_r (size_t NEL, struct hsearch_data *HTAB)' + `search.h' (GNU): *Note Hash Search Function::. + +`void hdestroy (void)' + `search.h' (SVID): *Note Hash Search Function::. + +`void hdestroy_r (struct hsearch_data *HTAB)' + `search.h' (GNU): *Note Hash Search Function::. + +`HOST_NOT_FOUND' + `netdb.h' (BSD): *Note Host Names::. + +`ENTRY * hsearch (ENTRY ITEM, ACTION ACTION)' + `search.h' (SVID): *Note Hash Search Function::. + +`int hsearch_r (ENTRY ITEM, ACTION ACTION, ENTRY **RETVAL, struct hsearch_data *HTAB)' + `search.h' (GNU): *Note Hash Search Function::. + +`uint32_t htonl (uint32_t HOSTLONG)' + `netinet/in.h' (BSD): *Note Byte Order::. + +`uint16_t htons (uint16_t HOSTSHORT)' + `netinet/in.h' (BSD): *Note Byte Order::. + +`double HUGE_VAL' + `math.h' (ISO): *Note Math Error Reporting::. + +`float HUGE_VALF' + `math.h' (ISO): *Note Math Error Reporting::. + +`long double HUGE_VALL' + `math.h' (ISO): *Note Math Error Reporting::. + +`tcflag_t HUPCL' + `termios.h' (POSIX.1): *Note Control Modes::. + +`double hypot (double X, double Y)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float hypotf (float X, float Y)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double hypotl (long double X, long double Y)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`tcflag_t ICANON' + `termios.h' (POSIX.1): *Note Local Modes::. + +`size_t iconv (iconv_t CD, char **INBUF, size_t *INBYTESLEFT, char **OUTBUF, size_t *OUTBYTESLEFT)' + `iconv.h' (XPG2): *Note Generic Conversion Interface::. + +`int iconv_close (iconv_t CD)' + `iconv.h' (XPG2): *Note Generic Conversion Interface::. + +`iconv_t iconv_open (const char *TOCODE, const char *FROMCODE)' + `iconv.h' (XPG2): *Note Generic Conversion Interface::. + +`iconv_t' + `iconv.h' (XPG2): *Note Generic Conversion Interface::. + +`tcflag_t ICRNL' + `termios.h' (POSIX.1): *Note Input Modes::. + +`tcflag_t IEXTEN' + `termios.h' (POSIX.1): *Note Local Modes::. + +`void if_freenameindex (struct if_nameindex *ptr)' + `net/if.h' (IPv6 basic API): *Note Interface Naming::. + +`char * if_indextoname (unsigned int ifindex, char *ifname)' + `net/if.h' (IPv6 basic API): *Note Interface Naming::. + +`struct if_nameindex * if_nameindex (void)' + `net/if.h' (IPv6 basic API): *Note Interface Naming::. + +`unsigned int if_nametoindex (const char *ifname)' + `net/if.h' (IPv6 basic API): *Note Interface Naming::. + +`size_t IFNAMSIZ' + `net/if.h' (net/if.h): *Note Interface Naming::. + +`int IFTODT (mode_t MODE)' + `dirent.h' (BSD): *Note Directory Entries::. + +`tcflag_t IGNBRK' + `termios.h' (POSIX.1): *Note Input Modes::. + +`tcflag_t IGNCR' + `termios.h' (POSIX.1): *Note Input Modes::. + +`tcflag_t IGNPAR' + `termios.h' (POSIX.1): *Note Input Modes::. + +`int ilogb (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`int ilogbf (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`int ilogbl (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`intmax_t imaxabs (intmax_t NUMBER)' + `inttypes.h' (ISO): *Note Absolute Value::. + +`tcflag_t IMAXBEL' + `termios.h' (BSD): *Note Input Modes::. + +`imaxdiv_t imaxdiv (intmax_t NUMERATOR, intmax_t DENOMINATOR)' + `inttypes.h' (ISO): *Note Integer Division::. + +`imaxdiv_t' + `inttypes.h' (ISO): *Note Integer Division::. + +`struct in6_addr in6addr_any' + `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::. + +`struct in6_addr in6addr_loopback' + `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::. + +`uint32_t INADDR_ANY' + `netinet/in.h' (BSD): *Note Host Address Data Type::. + +`uint32_t INADDR_BROADCAST' + `netinet/in.h' (BSD): *Note Host Address Data Type::. + +`uint32_t INADDR_LOOPBACK' + `netinet/in.h' (BSD): *Note Host Address Data Type::. + +`uint32_t INADDR_NONE' + `netinet/in.h' (BSD): *Note Host Address Data Type::. + +`char * index (const char *STRING, int C)' + `string.h' (BSD): *Note Search Functions::. + +`uint32_t inet_addr (const char *NAME)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`int inet_aton (const char *NAME, struct in_addr *ADDR)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`uint32_t inet_lnaof (struct in_addr ADDR)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`struct in_addr inet_makeaddr (uint32_t NET, uint32_t LOCAL)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`uint32_t inet_netof (struct in_addr ADDR)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`uint32_t inet_network (const char *NAME)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`char * inet_ntoa (struct in_addr ADDR)' + `arpa/inet.h' (BSD): *Note Host Address Functions::. + +`const char * inet_ntop (int AF, const void *CP, char *BUF, size_t LEN)' + `arpa/inet.h' (IPv6 basic API): *Note Host Address Functions::. + +`int inet_pton (int AF, const char *CP, void *BUF)' + `arpa/inet.h' (IPv6 basic API): *Note Host Address Functions::. + +`float INFINITY' + `math.h' (ISO): *Note Infinity and NaN::. + +`double infnan (int ERROR)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int initgroups (const char *USER, gid_t GID)' + `grp.h' (BSD): *Note Setting Groups::. + +`INIT_PROCESS' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`INIT_PROCESS' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`void * initstate (unsigned int SEED, void *STATE, size_t SIZE)' + `stdlib.h' (BSD): *Note BSD Random::. + +`int initstate_r (unsigned int SEED, char *restrict STATEBUF, size_t STATELEN, struct random_data *restrict BUF)' + `stdlib.h' (GNU): *Note BSD Random::. + +`tcflag_t INLCR' + `termios.h' (POSIX.1): *Note Input Modes::. + +`int innetgr (const char *NETGROUP, const char *HOST, const char *USER, const char *DOMAIN)' + `netdb.h' (BSD): *Note Netgroup Membership::. + +`ino64_t' + `sys/types.h' (Unix98): *Note Attribute Meanings::. + +`ino_t' + `sys/types.h' (POSIX.1): *Note Attribute Meanings::. + +`tcflag_t INPCK' + `termios.h' (POSIX.1): *Note Input Modes::. + +`INT_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`INT_MIN' + `limits.h' (ISO): *Note Range of Type::. + +`int _IOFBF' + `stdio.h' (ISO): *Note Controlling Buffering::. + +`int _IOLBF' + `stdio.h' (ISO): *Note Controlling Buffering::. + +`int _IONBF' + `stdio.h' (ISO): *Note Controlling Buffering::. + +`int IPPORT_RESERVED' + `netinet/in.h' (BSD): *Note Ports::. + +`int IPPORT_USERRESERVED' + `netinet/in.h' (BSD): *Note Ports::. + +`int isalnum (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isalpha (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isascii (int C)' + `ctype.h' (SVID, BSD): *Note Classification of Characters::. + +`int isatty (int FILEDES)' + `unistd.h' (POSIX.1): *Note Is It a Terminal::. + +`int isblank (int C)' + `ctype.h' (GNU): *Note Classification of Characters::. + +`int iscntrl (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isdigit (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isfinite (_float-type_ X)' + `math.h' (ISO): *Note Floating Point Classes::. + +`int isgraph (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isgreater (_real-floating_ X, _real-floating_ Y)' + `math.h' (ISO): *Note FP Comparison Functions::. + +`int isgreaterequal (_real-floating_ X, _real-floating_ Y)' + `math.h' (ISO): *Note FP Comparison Functions::. + +`tcflag_t ISIG' + `termios.h' (POSIX.1): *Note Local Modes::. + +`int isinf (double X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int isinff (float X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int isinfl (long double X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int isless (_real-floating_ X, _real-floating_ Y)' + `math.h' (ISO): *Note FP Comparison Functions::. + +`int islessequal (_real-floating_ X, _real-floating_ Y)' + `math.h' (ISO): *Note FP Comparison Functions::. + +`int islessgreater (_real-floating_ X, _real-floating_ Y)' + `math.h' (ISO): *Note FP Comparison Functions::. + +`int islower (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isnan (_float-type_ X)' + `math.h' (ISO): *Note Floating Point Classes::. + +`int isnan (double X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int isnanf (float X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int isnanl (long double X)' + `math.h' (BSD): *Note Floating Point Classes::. + +`int isnormal (_float-type_ X)' + `math.h' (ISO): *Note Floating Point Classes::. + +`_ISOC99_SOURCE' + (GNU): *Note Feature Test Macros::. + +`int isprint (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int ispunct (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int isspace (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`tcflag_t ISTRIP' + `termios.h' (POSIX.1): *Note Input Modes::. + +`int isunordered (_real-floating_ X, _real-floating_ Y)' + `math.h' (ISO): *Note FP Comparison Functions::. + +`int isupper (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`int iswalnum (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswalpha (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswblank (wint_t WC)' + `wctype.h' (GNU): *Note Classification of Wide Characters::. + +`int iswcntrl (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswctype (wint_t WC, wctype_t DESC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswdigit (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswgraph (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswlower (wint_t WC)' + `ctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswprint (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswpunct (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswspace (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswupper (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int iswxdigit (wint_t WC)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int isxdigit (int C)' + `ctype.h' (ISO): *Note Classification of Characters::. + +`ITIMER_PROF' + `sys/time.h' (BSD): *Note Setting an Alarm::. + +`ITIMER_REAL' + `sys/time.h' (BSD): *Note Setting an Alarm::. + +`ITIMER_VIRTUAL' + `sys/time.h' (BSD): *Note Setting an Alarm::. + +`tcflag_t IXANY' + `termios.h' (BSD): *Note Input Modes::. + +`tcflag_t IXOFF' + `termios.h' (POSIX.1): *Note Input Modes::. + +`tcflag_t IXON' + `termios.h' (POSIX.1): *Note Input Modes::. + +`double j0 (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float j0f (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double j0l (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`double j1 (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float j1f (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double j1l (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`jmp_buf' + `setjmp.h' (ISO): *Note Non-Local Details::. + +`double jn (int n, double X)' + `math.h' (SVID): *Note Special Functions::. + +`float jnf (int n, float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double jnl (int n, long double X)' + `math.h' (SVID): *Note Special Functions::. + +`long int jrand48 (unsigned short int XSUBI[3])' + `stdlib.h' (SVID): *Note SVID Random::. + +`int jrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)' + `stdlib.h' (GNU): *Note SVID Random::. + +`int kill (pid_t PID, int SIGNUM)' + `signal.h' (POSIX.1): *Note Signaling Another Process::. + +`int killpg (int PGID, int SIGNUM)' + `signal.h' (BSD): *Note Signaling Another Process::. + +`char * l64a (long int N)' + `stdlib.h' (XPG): *Note Encode Binary Data::. + +`long int labs (long int NUMBER)' + `stdlib.h' (ISO): *Note Absolute Value::. + +`LANG' + `locale.h' (ISO): *Note Locale Categories::. + +`LC_ALL' + `locale.h' (ISO): *Note Locale Categories::. + +`LC_COLLATE' + `locale.h' (ISO): *Note Locale Categories::. + +`LC_CTYPE' + `locale.h' (ISO): *Note Locale Categories::. + +`LC_MESSAGES' + `locale.h' (XOPEN): *Note Locale Categories::. + +`LC_MONETARY' + `locale.h' (ISO): *Note Locale Categories::. + +`LC_NUMERIC' + `locale.h' (ISO): *Note Locale Categories::. + +`void lcong48 (unsigned short int PARAM[7])' + `stdlib.h' (SVID): *Note SVID Random::. + +`int lcong48_r (unsigned short int PARAM[7], struct drand48_data *BUFFER)' + `stdlib.h' (GNU): *Note SVID Random::. + +`int L_ctermid' + `stdio.h' (POSIX.1): *Note Identifying the Terminal::. + +`LC_TIME' + `locale.h' (ISO): *Note Locale Categories::. + +`int L_cuserid' + `stdio.h' (POSIX.1): *Note Who Logged In::. + +`double ldexp (double VALUE, int EXPONENT)' + `math.h' (ISO): *Note Normalization Functions::. + +`float ldexpf (float VALUE, int EXPONENT)' + `math.h' (ISO): *Note Normalization Functions::. + +`long double ldexpl (long double VALUE, int EXPONENT)' + `math.h' (ISO): *Note Normalization Functions::. + +`ldiv_t ldiv (long int NUMERATOR, long int DENOMINATOR)' + `stdlib.h' (ISO): *Note Integer Division::. + +`ldiv_t' + `stdlib.h' (ISO): *Note Integer Division::. + +`void * lfind (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)' + `search.h' (SVID): *Note Array Search Function::. + +`double lgamma (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float lgammaf (float X)' + `math.h' (SVID): *Note Special Functions::. + +`float lgammaf_r (float X, int *SIGNP)' + `math.h' (XPG): *Note Special Functions::. + +`long double lgammal (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`long double lgammal_r (long double X, int *SIGNP)' + `math.h' (XPG): *Note Special Functions::. + +`double lgamma_r (double X, int *SIGNP)' + `math.h' (XPG): *Note Special Functions::. + +`L_INCR' + `sys/file.h' (BSD): *Note File Positioning::. + +`int LINE_MAX' + `limits.h' (POSIX.2): *Note Utility Limits::. + +`int link (const char *OLDNAME, const char *NEWNAME)' + `unistd.h' (POSIX.1): *Note Hard Links::. + +`int LINK_MAX' + `limits.h' (POSIX.1): *Note Limits for Files::. + +`int lio_listio (int MODE, struct aiocb *const LIST[], int NENT, struct sigevent *SIG)' + `aio.h' (POSIX.1b): *Note Asynchronous Reads/Writes::. + +`int lio_listio64 (int MODE, struct aiocb *const LIST, int NENT, struct sigevent *SIG)' + `aio.h' (Unix98): *Note Asynchronous Reads/Writes::. + +`int listen (int SOCKET, unsigned int N)' + `sys/socket.h' (BSD): *Note Listening::. + +`long long int llabs (long long int NUMBER)' + `stdlib.h' (ISO): *Note Absolute Value::. + +`lldiv_t lldiv (long long int NUMERATOR, long long int DENOMINATOR)' + `stdlib.h' (ISO): *Note Integer Division::. + +`lldiv_t' + `stdlib.h' (ISO): *Note Integer Division::. + +`long long int llrint (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long long int llrintf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long long int llrintl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long long int llround (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long long int llroundf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long long int llroundl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`struct lconv * localeconv (void)' + `locale.h' (ISO): *Note The Lame Way to Locale Data::. + +`struct tm * localtime (const time_t *TIME)' + `time.h' (ISO): *Note Broken-down Time::. + +`struct tm * localtime_r (const time_t *TIME, struct tm *RESULTP)' + `time.h' (POSIX.1c): *Note Broken-down Time::. + +`double log (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double log10 (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float log10f (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double log10l (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double log1p (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float log1pf (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double log1pl (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double log2 (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float log2f (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double log2l (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double logb (double X)' + `math.h' (BSD): *Note Normalization Functions::. + +`double logb (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float logbf (float X)' + `math.h' (BSD): *Note Normalization Functions::. + +`float logbf (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double logbl (long double X)' + `math.h' (BSD): *Note Normalization Functions::. + +`long double logbl (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float logf (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`void login (const struct utmp *ENTRY)' + `utmp.h' (BSD): *Note Logging In and Out::. + +`LOGIN_PROCESS' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`LOGIN_PROCESS' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int login_tty (int FILEDES)' + `utmp.h' (BSD): *Note Logging In and Out::. + +`long double logl (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`int logout (const char *UT_LINE)' + `utmp.h' (BSD): *Note Logging In and Out::. + +`void logwtmp (const char *UT_LINE, const char *UT_NAME, const char *UT_HOST)' + `utmp.h' (BSD): *Note Logging In and Out::. + +`void longjmp (jmp_buf STATE, int VALUE)' + `setjmp.h' (ISO): *Note Non-Local Details::. + +`LONG_LONG_MAX' + `limits.h' (GNU): *Note Range of Type::. + +`LONG_LONG_MIN' + `limits.h' (GNU): *Note Range of Type::. + +`LONG_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`LONG_MIN' + `limits.h' (ISO): *Note Range of Type::. + +`long int lrand48 (void)' + `stdlib.h' (SVID): *Note SVID Random::. + +`int lrand48_r (struct drand48_data *BUFFER, double *RESULT)' + `stdlib.h' (GNU): *Note SVID Random::. + +`long int lrint (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long int lrintf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long int lrintl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long int lround (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long int lroundf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long int lroundl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`void * lsearch (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)' + `search.h' (SVID): *Note Array Search Function::. + +`off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)' + `unistd.h' (POSIX.1): *Note File Position Primitive::. + +`off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)' + `unistd.h' (Unix98): *Note File Position Primitive::. + +`L_SET' + `sys/file.h' (BSD): *Note File Positioning::. + +`int lstat (const char *FILENAME, struct stat *BUF)' + `sys/stat.h' (BSD): *Note Reading Attributes::. + +`int lstat64 (const char *FILENAME, struct stat64 *BUF)' + `sys/stat.h' (Unix98): *Note Reading Attributes::. + +`int L_tmpnam' + `stdio.h' (ISO): *Note Temporary Files::. + +`L_XTND' + `sys/file.h' (BSD): *Note File Positioning::. + +`void makecontext (ucontext_t *UCP, void (*FUNC) (void), int ARGC, ...)' + `ucontext.h' (SVID): *Note System V contexts::. + +`struct mallinfo mallinfo (void)' + `malloc.h' (SVID): *Note Statistics of Malloc::. + +`void * malloc (size_t SIZE)' + `malloc.h', `stdlib.h' (ISO): *Note Basic Allocation::. + +`__malloc_hook' + `malloc.h' (GNU): *Note Hooks for Malloc::. + +`__malloc_initialize_hook' + `malloc.h' (GNU): *Note Hooks for Malloc::. + +`int MAX_CANON' + `limits.h' (POSIX.1): *Note Limits for Files::. + +`int MAX_INPUT' + `limits.h' (POSIX.1): *Note Limits for Files::. + +`int MAXNAMLEN' + `dirent.h' (BSD): *Note Limits for Files::. + +`int MAXSYMLINKS' + `sys/param.h' (BSD): *Note Symbolic Links::. + +`int MB_CUR_MAX' + `stdlib.h' (ISO): *Note Selecting the Conversion::. + +`int mblen (const char *STRING, size_t SIZE)' + `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::. + +`int MB_LEN_MAX' + `limits.h' (ISO): *Note Selecting the Conversion::. + +`size_t mbrlen (const char *restrict S, size_t N, mbstate_t *PS)' + `wchar.h' (ISO): *Note Converting a Character::. + +`size_t mbrtowc (wchar_t *restrict PWC, const char *restrict S, size_t N, mbstate_t *restrict PS)' + `wchar.h' (ISO): *Note Converting a Character::. + +`int mbsinit (const mbstate_t *PS)' + `wchar.h' (ISO): *Note Keeping the state::. + +`size_t mbsnrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t NMC, size_t LEN, mbstate_t *restrict PS)' + `wchar.h' (GNU): *Note Converting Strings::. + +`size_t mbsrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t LEN, mbstate_t *restrict PS)' + `wchar.h' (ISO): *Note Converting Strings::. + +`mbstate_t' + `wchar.h' (ISO): *Note Keeping the state::. + +`size_t mbstowcs (wchar_t *WSTRING, const char *STRING, size_t SIZE)' + `stdlib.h' (ISO): *Note Non-reentrant String Conversion::. + +`int mbtowc (wchar_t *restrict RESULT, const char *restrict STRING, size_t SIZE)' + `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::. + +`int mcheck (void (*ABORTFN) (enum mcheck_status STATUS))' + `mcheck.h' (GNU): *Note Heap Consistency Checking::. + +`tcflag_t MDMBUF' + `termios.h' (BSD): *Note Control Modes::. + +`void * memalign (size_t BOUNDARY, size_t SIZE)' + `malloc.h', `stdlib.h' (BSD): *Note Aligned Memory Blocks::. + +`__memalign_hook' + `malloc.h' (GNU): *Note Hooks for Malloc::. + +`void * memccpy (void *restrict TO, const void *restrict FROM, int C, size_t SIZE)' + `string.h' (SVID): *Note Copying and Concatenation::. + +`void * memchr (const void *BLOCK, int C, size_t SIZE)' + `string.h' (ISO): *Note Search Functions::. + +`int memcmp (const void *A1, const void *A2, size_t SIZE)' + `string.h' (ISO): *Note String/Array Comparison::. + +`void * memcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`void * memfrob (void *MEM, size_t LENGTH)' + `string.h' (GNU): *Note Trivial Encryption::. + +`void * memmem (const void *HAYSTACK, size_t HAYSTACK-LEN, + const void *NEEDLE, size_t NEEDLE-LEN)' + `string.h' (GNU): *Note Search Functions::. + +`void * memmove (void *TO, const void *FROM, size_t SIZE)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`void * mempcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)' + `string.h' (GNU): *Note Copying and Concatenation::. + +`void * memrchr (const void *BLOCK, int C, size_t SIZE)' + `string.h' (GNU): *Note Search Functions::. + +`void * memset (void *BLOCK, int C, size_t SIZE)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`int mkdir (const char *FILENAME, mode_t MODE)' + `sys/stat.h' (POSIX.1): *Note Creating Directories::. + +`char * mkdtemp (char *TEMPLATE)' + `stdlib.h' (BSD): *Note Temporary Files::. + +`int mkfifo (const char *FILENAME, mode_t MODE)' + `sys/stat.h' (POSIX.1): *Note FIFO Special Files::. + +`int mknod (const char *FILENAME, int MODE, int DEV)' + `sys/stat.h' (BSD): *Note Making Special Files::. + +`int mkstemp (char *TEMPLATE)' + `stdlib.h' (BSD): *Note Temporary Files::. + +`char * mktemp (char *TEMPLATE)' + `stdlib.h' (Unix): *Note Temporary Files::. + +`time_t mktime (struct tm *BROKENTIME)' + `time.h' (ISO): *Note Broken-down Time::. + +`int mlock (const void *ADDR, size_t LEN)' + `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. + +`int mlockall (int FLAGS)' + `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. + +`void * mmap (void *ADDRESS, size_t LENGTH,int PROTECT, int FLAGS, int FILEDES, off_t OFFSET)' + `sys/mman.h' (POSIX): *Note Memory-mapped I/O::. + +`void * mmap64 (void *ADDRESS, size_t LENGTH,int PROTECT, int FLAGS, int FILEDES, off64_t OFFSET)' + `sys/mman.h' (LFS): *Note Memory-mapped I/O::. + +`mode_t' + `sys/types.h' (POSIX.1): *Note Attribute Meanings::. + +`double modf (double VALUE, double *INTEGER-PART)' + `math.h' (ISO): *Note Rounding Functions::. + +`float modff (float VALUE, float *INTEGER-PART)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double modfl (long double VALUE, long double *INTEGER-PART)' + `math.h' (ISO): *Note Rounding Functions::. + +`int mount (const char *SPECIAL_FILE, const char *DIR, const char *FSTYPE, unsigned long int OPTIONS, const void *DATA)' + `sys/mount.h' (SVID, BSD): *Note Mount-Unmount-Remount::. + +`long int mrand48 (void)' + `stdlib.h' (SVID): *Note SVID Random::. + +`int mrand48_r (struct drand48_data *BUFFER, double *RESULT)' + `stdlib.h' (GNU): *Note SVID Random::. + +`void * mremap (void *ADDRESS, size_t LENGTH, size_t NEW_LENGTH, int FLAG)' + `sys/mman.h' (GNU): *Note Memory-mapped I/O::. + +`int MSG_DONTROUTE' + `sys/socket.h' (BSD): *Note Socket Data Options::. + +`int MSG_OOB' + `sys/socket.h' (BSD): *Note Socket Data Options::. + +`int MSG_PEEK' + `sys/socket.h' (BSD): *Note Socket Data Options::. + +`int msync (void *ADDRESS, size_t LENGTH, int FLAGS)' + `sys/mman.h' (POSIX): *Note Memory-mapped I/O::. + +`void mtrace (void)' + `mcheck.h' (GNU): *Note Tracing malloc::. + +`int munlock (const void *ADDR, size_t LEN)' + `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. + +`int munlockall (void)' + `sys/mman.h' (POSIX.1b): *Note Page Lock Functions::. + +`int munmap (void *ADDR, size_t LENGTH)' + `sys/mman.h' (POSIX): *Note Memory-mapped I/O::. + +`void muntrace (void)' + `mcheck.h' (GNU): *Note Tracing malloc::. + +`int NAME_MAX' + `limits.h' (POSIX.1): *Note Limits for Files::. + +`float NAN' + `math.h' (GNU): *Note Infinity and NaN::. + +`double nan (const char *TAGP)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`float nanf (const char *TAGP)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`long double nanl (const char *TAGP)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`int nanosleep (const struct timespec *REQUESTED_TIME, struct timespec *REMAINING)' + `time.h' (POSIX.1): *Note Sleeping::. + +`int NCCS' + `termios.h' (POSIX.1): *Note Mode Data Types::. + +`double nearbyint (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`float nearbyintf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double nearbyintl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`NEW_TIME' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`NEW_TIME' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`double nextafter (double X, double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`float nextafterf (float X, float Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`long double nextafterl (long double X, long double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`double nexttoward (double X, long double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`float nexttowardf (float X, long double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`long double nexttowardl (long double X, long double Y)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`int nftw (const char *FILENAME, __nftw_func_t FUNC, int DESCRIPTORS, int FLAG)' + `ftw.h' (XPG4.2): *Note Working with Directory Trees::. + +`int nftw64 (const char *FILENAME, __nftw64_func_t FUNC, int DESCRIPTORS, int FLAG)' + `ftw.h' (Unix98): *Note Working with Directory Trees::. + +`__nftw64_func_t' + `ftw.h' (GNU): *Note Working with Directory Trees::. + +`__nftw_func_t' + `ftw.h' (GNU): *Note Working with Directory Trees::. + +`char * ngettext (const char *MSGID1, const char *MSGID2, unsigned long int N)' + `libintl.h' (GNU): *Note Advanced gettext functions::. + +`int NGROUPS_MAX' + `limits.h' (POSIX.1): *Note General Limits::. + +`int nice (int INCREMENT)' + `unistd.h' (BSD): *Note Traditional Scheduling Functions::. + +`nlink_t' + `sys/types.h' (POSIX.1): *Note Attribute Meanings::. + +`char * nl_langinfo (nl_item ITEM)' + `langinfo.h' (XOPEN): *Note The Elegant and Fast Way::. + +`NO_ADDRESS' + `netdb.h' (BSD): *Note Host Names::. + +`tcflag_t NOFLSH' + `termios.h' (POSIX.1): *Note Local Modes::. + +`tcflag_t NOKERNINFO' + `termios.h' (BSD): *Note Local Modes::. + +`NO_RECOVERY' + `netdb.h' (BSD): *Note Host Names::. + +`long int nrand48 (unsigned short int XSUBI[3])' + `stdlib.h' (SVID): *Note SVID Random::. + +`int nrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)' + `stdlib.h' (GNU): *Note SVID Random::. + +`int NSIG' + `signal.h' (BSD): *Note Standard Signals::. + +`uint32_t ntohl (uint32_t NETLONG)' + `netinet/in.h' (BSD): *Note Byte Order::. + +`uint16_t ntohs (uint16_t NETSHORT)' + `netinet/in.h' (BSD): *Note Byte Order::. + +`int ntp_adjtime (struct timex *TPTR)' + `sys/timex.h' (GNU): *Note High Accuracy Clock::. + +`int ntp_gettime (struct ntptimeval *TPTR)' + `sys/timex.h' (GNU): *Note High Accuracy Clock::. + +`void * NULL' + `stddef.h' (ISO): *Note Null Pointer Constant::. + +`int O_ACCMODE' + `fcntl.h' (POSIX.1): *Note Access Modes::. + +`int O_APPEND' + `fcntl.h' (POSIX.1): *Note Operating Modes::. + +`int O_ASYNC' + `fcntl.h' (BSD): *Note Operating Modes::. + +`void obstack_1grow (struct obstack *OBSTACK-PTR, char C)' + `obstack.h' (GNU): *Note Growing Objects::. + +`void obstack_1grow_fast (struct obstack *OBSTACK-PTR, char C)' + `obstack.h' (GNU): *Note Extra Fast Growing::. + +`int obstack_alignment_mask (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Obstacks Data Alignment::. + +`void * obstack_alloc (struct obstack *OBSTACK-PTR, int SIZE)' + `obstack.h' (GNU): *Note Allocation in an Obstack::. + +`obstack_alloc_failed_handler' + `obstack.h' (GNU): *Note Preparing for Obstacks::. + +`void * obstack_base (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Status of an Obstack::. + +`void obstack_blank (struct obstack *OBSTACK-PTR, int SIZE)' + `obstack.h' (GNU): *Note Growing Objects::. + +`void obstack_blank_fast (struct obstack *OBSTACK-PTR, int SIZE)' + `obstack.h' (GNU): *Note Extra Fast Growing::. + +`int obstack_chunk_size (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Obstack Chunks::. + +`void * obstack_copy (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)' + `obstack.h' (GNU): *Note Allocation in an Obstack::. + +`void * obstack_copy0 (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)' + `obstack.h' (GNU): *Note Allocation in an Obstack::. + +`void * obstack_finish (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Growing Objects::. + +`void obstack_free (struct obstack *OBSTACK-PTR, void *OBJECT)' + `obstack.h' (GNU): *Note Freeing Obstack Objects::. + +`void obstack_grow (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)' + `obstack.h' (GNU): *Note Growing Objects::. + +`void obstack_grow0 (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)' + `obstack.h' (GNU): *Note Growing Objects::. + +`int obstack_init (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Preparing for Obstacks::. + +`void obstack_int_grow (struct obstack *OBSTACK-PTR, int DATA)' + `obstack.h' (GNU): *Note Growing Objects::. + +`void obstack_int_grow_fast (struct obstack *OBSTACK-PTR, int DATA)' + `obstack.h' (GNU): *Note Extra Fast Growing::. + +`void * obstack_next_free (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Status of an Obstack::. + +`int obstack_object_size (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Growing Objects::. + +`int obstack_object_size (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Status of an Obstack::. + +`int obstack_printf (struct obstack *OBSTACK, const char *TEMPLATE, ...)' + `stdio.h' (GNU): *Note Dynamic Output::. + +`void obstack_ptr_grow (struct obstack *OBSTACK-PTR, void *DATA)' + `obstack.h' (GNU): *Note Growing Objects::. + +`void obstack_ptr_grow_fast (struct obstack *OBSTACK-PTR, void *DATA)' + `obstack.h' (GNU): *Note Extra Fast Growing::. + +`int obstack_room (struct obstack *OBSTACK-PTR)' + `obstack.h' (GNU): *Note Extra Fast Growing::. + +`int obstack_vprintf (struct obstack *OBSTACK, const char *TEMPLATE, va_list AP)' + `stdio.h' (GNU): *Note Variable Arguments Output::. + +`int O_CREAT' + `fcntl.h' (POSIX.1): *Note Open-time Flags::. + +`int O_EXCL' + `fcntl.h' (POSIX.1): *Note Open-time Flags::. + +`int O_EXEC' + `fcntl.h' (GNU): *Note Access Modes::. + +`int O_EXLOCK' + `fcntl.h' (BSD): *Note Open-time Flags::. + +`off64_t' + `sys/types.h' (Unix98): *Note File Position Primitive::. + +`size_t offsetof (TYPE, MEMBER)' + `stddef.h' (ISO): *Note Structure Measurement::. + +`off_t' + `sys/types.h' (POSIX.1): *Note File Position Primitive::. + +`int O_FSYNC' + `fcntl.h' (BSD): *Note Operating Modes::. + +`int O_IGNORE_CTTY' + `fcntl.h' (GNU): *Note Open-time Flags::. + +`OLD_TIME' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`OLD_TIME' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int O_NDELAY' + `fcntl.h' (BSD): *Note Operating Modes::. + +`int on_exit (void (*FUNCTION)(int STATUS, void *ARG), void *ARG)' + `stdlib.h' (SunOS): *Note Cleanups on Exit::. + +`tcflag_t ONLCR' + `termios.h' (BSD): *Note Output Modes::. + +`int O_NOATIME' + `fcntl.h' (GNU): *Note Operating Modes::. + +`int O_NOCTTY' + `fcntl.h' (POSIX.1): *Note Open-time Flags::. + +`tcflag_t ONOEOT' + `termios.h' (BSD): *Note Output Modes::. + +`int O_NOLINK' + `fcntl.h' (GNU): *Note Open-time Flags::. + +`int O_NONBLOCK' + `fcntl.h' (POSIX.1): *Note Open-time Flags::. + +`int O_NONBLOCK' + `fcntl.h' (POSIX.1): *Note Operating Modes::. + +`int O_NOTRANS' + `fcntl.h' (GNU): *Note Open-time Flags::. + +`int open (const char *FILENAME, int FLAGS[, mode_t MODE])' + `fcntl.h' (POSIX.1): *Note Opening and Closing Files::. + +`int open64 (const char *FILENAME, int FLAGS[, mode_t MODE])' + `fcntl.h' (Unix98): *Note Opening and Closing Files::. + +`DIR * opendir (const char *DIRNAME)' + `dirent.h' (POSIX.1): *Note Opening a Directory::. + +`void openlog (char *IDENT, int OPTION,' + `syslog.h' (BSD): *Note openlog::. + +`int OPEN_MAX' + `limits.h' (POSIX.1): *Note General Limits::. + +`FILE * open_memstream (char **PTR, size_t *SIZELOC)' + `stdio.h' (GNU): *Note String Streams::. + +`FILE * open_obstack_stream (struct obstack *OBSTACK)' + `stdio.h' (GNU): *Note Obstack Streams::. + +`int openpty (int *AMASTER, int *ASLAVE, char *NAME, struct termios *TERMP, struct winsize *WINP)' + `pty.h' (BSD): *Note Pseudo-Terminal Pairs::. + +`tcflag_t OPOST' + `termios.h' (POSIX.1): *Note Output Modes::. + +`char * optarg' + `unistd.h' (POSIX.2): *Note Using Getopt::. + +`int opterr' + `unistd.h' (POSIX.2): *Note Using Getopt::. + +`int optind' + `unistd.h' (POSIX.2): *Note Using Getopt::. + +`OPTION_ALIAS' + `argp.h' (GNU): *Note Argp Option Flags::. + +`OPTION_ARG_OPTIONAL' + `argp.h' (GNU): *Note Argp Option Flags::. + +`OPTION_DOC' + `argp.h' (GNU): *Note Argp Option Flags::. + +`OPTION_HIDDEN' + `argp.h' (GNU): *Note Argp Option Flags::. + +`OPTION_NO_USAGE' + `argp.h' (GNU): *Note Argp Option Flags::. + +`int optopt' + `unistd.h' (POSIX.2): *Note Using Getopt::. + +`int O_RDONLY' + `fcntl.h' (POSIX.1): *Note Access Modes::. + +`int O_RDWR' + `fcntl.h' (POSIX.1): *Note Access Modes::. + +`int O_READ' + `fcntl.h' (GNU): *Note Access Modes::. + +`int O_SHLOCK' + `fcntl.h' (BSD): *Note Open-time Flags::. + +`int O_SYNC' + `fcntl.h' (BSD): *Note Operating Modes::. + +`int O_TRUNC' + `fcntl.h' (POSIX.1): *Note Open-time Flags::. + +`int O_WRITE' + `fcntl.h' (GNU): *Note Access Modes::. + +`int O_WRONLY' + `fcntl.h' (POSIX.1): *Note Access Modes::. + +`tcflag_t OXTABS' + `termios.h' (BSD): *Note Output Modes::. + +`PA_CHAR' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_DOUBLE' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_FLAG_LONG' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_FLAG_LONG_DOUBLE' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_FLAG_LONG_LONG' + `printf.h' (GNU): *Note Parsing a Template String::. + +`int PA_FLAG_MASK' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_FLAG_PTR' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_FLAG_SHORT' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_FLOAT' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_INT' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_LAST' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_POINTER' + `printf.h' (GNU): *Note Parsing a Template String::. + +`tcflag_t PARENB' + `termios.h' (POSIX.1): *Note Control Modes::. + +`tcflag_t PARMRK' + `termios.h' (POSIX.1): *Note Input Modes::. + +`tcflag_t PARODD' + `termios.h' (POSIX.1): *Note Control Modes::. + +`size_t parse_printf_format (const char *TEMPLATE, size_t N, int *ARGTYPES)' + `printf.h' (GNU): *Note Parsing a Template String::. + +`PA_STRING' + `printf.h' (GNU): *Note Parsing a Template String::. + +`long int pathconf (const char *FILENAME, int PARAMETER)' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`int PATH_MAX' + `limits.h' (POSIX.1): *Note Limits for Files::. + +`int pause ()' + `unistd.h' (POSIX.1): *Note Using Pause::. + +`_PC_ASYNC_IO' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_CHOWN_RESTRICTED' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_FILESIZEBITS' + `unistd.h' (LFS): *Note Pathconf::. + +`_PC_LINK_MAX' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`int pclose (FILE *STREAM)' + `stdio.h' (POSIX.2, SVID, BSD): *Note Pipe to a Subprocess::. + +`_PC_MAX_CANON' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_MAX_INPUT' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_NAME_MAX' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_NO_TRUNC' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_PATH_MAX' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_PIPE_BUF' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_PRIO_IO' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_REC_INCR_XFER_SIZE' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_REC_MAX_XFER_SIZE' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_REC_MIN_XFER_SIZE' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_REC_XFER_ALIGN' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_SOCK_MAXBUF' + `unistd.h' (POSIX.1g): *Note Pathconf::. + +`_PC_SYNC_IO' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`_PC_VDISABLE' + `unistd.h' (POSIX.1): *Note Pathconf::. + +`tcflag_t PENDIN' + `termios.h' (BSD): *Note Local Modes::. + +`void perror (const char *MESSAGE)' + `stdio.h' (ISO): *Note Error Messages::. + +`int PF_FILE' + `sys/socket.h' (GNU): *Note Local Namespace Details::. + +`int PF_INET' + `sys/socket.h' (BSD): *Note Internet Namespace::. + +`int PF_INET6' + `sys/socket.h' (X/Open): *Note Internet Namespace::. + +`int PF_LOCAL' + `sys/socket.h' (POSIX): *Note Local Namespace Details::. + +`int PF_UNIX' + `sys/socket.h' (BSD): *Note Local Namespace Details::. + +`pid_t' + `sys/types.h' (POSIX.1): *Note Process Identification::. + +`int pipe (int FILEDES[2])' + `unistd.h' (POSIX.1): *Note Creating a Pipe::. + +`int PIPE_BUF' + `limits.h' (POSIX.1): *Note Limits for Files::. + +`FILE * popen (const char *COMMAND, const char *MODE)' + `stdio.h' (POSIX.2, SVID, BSD): *Note Pipe to a Subprocess::. + +`_POSIX2_BC_BASE_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`_POSIX2_BC_DIM_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`_POSIX2_BC_SCALE_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`_POSIX2_BC_STRING_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`int _POSIX2_C_DEV' + `unistd.h' (POSIX.2): *Note System Options::. + +`_POSIX2_COLL_WEIGHTS_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`long int _POSIX2_C_VERSION' + `unistd.h' (POSIX.2): *Note Version Supported::. + +`_POSIX2_EQUIV_CLASS_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`_POSIX2_EXPR_NEST_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`int _POSIX2_FORT_DEV' + `unistd.h' (POSIX.2): *Note System Options::. + +`int _POSIX2_FORT_RUN' + `unistd.h' (POSIX.2): *Note System Options::. + +`_POSIX2_LINE_MAX' + `limits.h' (POSIX.2): *Note Utility Minimums::. + +`int _POSIX2_LOCALEDEF' + `unistd.h' (POSIX.2): *Note System Options::. + +`_POSIX2_RE_DUP_MAX' + `limits.h' (POSIX.2): *Note Minimums::. + +`int _POSIX2_SW_DEV' + `unistd.h' (POSIX.2): *Note System Options::. + +`_POSIX_AIO_LISTIO_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`_POSIX_AIO_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`_POSIX_ARG_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`_POSIX_CHILD_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`int _POSIX_CHOWN_RESTRICTED' + `unistd.h' (POSIX.1): *Note Options for Files::. + +`_POSIX_C_SOURCE' + (POSIX.2): *Note Feature Test Macros::. + +`int _POSIX_JOB_CONTROL' + `unistd.h' (POSIX.1): *Note System Options::. + +`_POSIX_LINK_MAX' + `limits.h' (POSIX.1): *Note File Minimums::. + +`_POSIX_MAX_CANON' + `limits.h' (POSIX.1): *Note File Minimums::. + +`_POSIX_MAX_INPUT' + `limits.h' (POSIX.1): *Note File Minimums::. + +`int posix_memalign (void **MEMPTR, size_t ALIGNMENT, size_t SIZE)' + `stdlib.h' (POSIX): *Note Aligned Memory Blocks::. + +`_POSIX_NAME_MAX' + `limits.h' (POSIX.1): *Note File Minimums::. + +`_POSIX_NGROUPS_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`int _POSIX_NO_TRUNC' + `unistd.h' (POSIX.1): *Note Options for Files::. + +`_POSIX_OPEN_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`_POSIX_PATH_MAX' + `limits.h' (POSIX.1): *Note File Minimums::. + +`_POSIX_PIPE_BUF' + `limits.h' (POSIX.1): *Note File Minimums::. + +`POSIX_REC_INCR_XFER_SIZE' + `limits.h' (POSIX.1): *Note File Minimums::. + +`POSIX_REC_MAX_XFER_SIZE' + `limits.h' (POSIX.1): *Note File Minimums::. + +`POSIX_REC_MIN_XFER_SIZE' + `limits.h' (POSIX.1): *Note File Minimums::. + +`POSIX_REC_XFER_ALIGN' + `limits.h' (POSIX.1): *Note File Minimums::. + +`int _POSIX_SAVED_IDS' + `unistd.h' (POSIX.1): *Note System Options::. + +`_POSIX_SOURCE' + (POSIX.1): *Note Feature Test Macros::. + +`_POSIX_SSIZE_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`_POSIX_STREAM_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`_POSIX_TZNAME_MAX' + `limits.h' (POSIX.1): *Note Minimums::. + +`unsigned char _POSIX_VDISABLE' + `unistd.h' (POSIX.1): *Note Options for Files::. + +`long int _POSIX_VERSION' + `unistd.h' (POSIX.1): *Note Version Supported::. + +`double pow (double BASE, double POWER)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`double pow10 (double X)' + `math.h' (GNU): *Note Exponents and Logarithms::. + +`float pow10f (float X)' + `math.h' (GNU): *Note Exponents and Logarithms::. + +`long double pow10l (long double X)' + `math.h' (GNU): *Note Exponents and Logarithms::. + +`float powf (float BASE, float POWER)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double powl (long double BASE, long double POWER)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE, off_t OFFSET)' + `unistd.h' (Unix98): *Note I/O Primitives::. + +`ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE, off64_t OFFSET)' + `unistd.h' (Unix98): *Note I/O Primitives::. + +`int printf (const char *TEMPLATE, ...)' + `stdio.h' (ISO): *Note Formatted Output Functions::. + +`printf_arginfo_function' + `printf.h' (GNU): *Note Defining the Output Handler::. + +`printf_function' + `printf.h' (GNU): *Note Defining the Output Handler::. + +`int printf_size (FILE *FP, const struct printf_info *INFO, const void *const *ARGS)' + `printf.h' (GNU): *Note Predefined Printf Handlers::. + +`int printf_size_info (const struct printf_info *INFO, size_t N, int *ARGTYPES)' + `printf.h' (GNU): *Note Predefined Printf Handlers::. + +`PRIO_MAX' + `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. + +`PRIO_MIN' + `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. + +`PRIO_PGRP' + `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. + +`PRIO_PROCESS' + `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. + +`PRIO_USER' + `sys/resource.h' (BSD): *Note Traditional Scheduling Functions::. + +`char * program_invocation_name' + `errno.h' (GNU): *Note Error Messages::. + +`char * program_invocation_short_name' + `errno.h' (GNU): *Note Error Messages::. + +`void psignal (int SIGNUM, const char *MESSAGE)' + `signal.h' (BSD): *Note Signal Messages::. + +`int pthread_atfork (void (*PREPARE)(void), void (*PARENT)(void), void (*CHILD)(void))' + `pthread.h' (POSIX): *Note Threads and Fork::. + +`int pthread_attr_destroy (pthread_attr_t *ATTR)' + `pthread.h' (POSIX): *Note Thread Attributes::. + +`int pthread_attr_getattr (const pthread_attr_t *OBJ, int *VALUE)' + `pthread.h' (POSIX): *Note Thread Attributes::. + +`int pthread_attr_init (pthread_attr_t *ATTR)' + `pthread.h' (POSIX): *Note Thread Attributes::. + +`int pthread_attr_setattr (pthread_attr_t *OBJ, int VALUE)' + `pthread.h' (POSIX): *Note Thread Attributes::. + +`int pthread_cancel (pthread_t THREAD)' + `pthread.h' (POSIX): *Note Basic Thread Operations::. + +`void pthread_cleanup_pop (int EXECUTE)' + `pthread.h' (POSIX): *Note Cleanup Handlers::. + +`void pthread_cleanup_pop_restore_np (int EXECUTE)' + `pthread.h' (GNU): *Note Cleanup Handlers::. + +`void pthread_cleanup_push (void (*ROUTINE) (void *), void *ARG)' + `pthread.h' (POSIX): *Note Cleanup Handlers::. + +`void pthread_cleanup_push_defer_np (void (*ROUTINE) (void *), void *ARG)' + `pthread.h' (GNU): *Note Cleanup Handlers::. + +`int pthread_condattr_init (pthread_condattr_t *ATTR)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_cond_broadcast (pthread_cond_t *COND)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_cond_destroy (pthread_cond_t *COND)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_cond_init (pthread_cond_t *COND, pthread_condattr_t *cond_ATTR)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_cond_signal (pthread_cond_t *COND)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_cond_timedwait (pthread_cond_t *COND, pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_cond_wait (pthread_cond_t *COND, pthread_mutex_t *MUTEX)' + `pthread.h' (POSIX): *Note Condition Variables::. + +`int pthread_create (pthread_t * THREAD, pthread_attr_t * ATTR, void * (*START_ROUTINE)(void *), void * ARG)' + `pthread.h' (POSIX): *Note Basic Thread Operations::. + +`int pthread_detach (pthread_t TH)' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`int pthread_equal (pthread_t thread1, pthread_t thread2)' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`void pthread_exit (void *RETVAL)' + `pthread.h' (POSIX): *Note Basic Thread Operations::. + +`int pthread_getconcurrency ()' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`int pthread_getschedparam (pthread_t target_THREAD, int *POLICY, struct sched_param *PARAM)' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`void * pthread_getspecific (pthread_key_t KEY)' + `pthread.h' (POSIX): *Note Thread-Specific Data::. + +`int pthread_join (pthread_t TH, void **thread_RETURN)' + `pthread.h' (POSIX): *Note Basic Thread Operations::. + +`int pthread_key_create (pthread_key_t *KEY, void (*destr_function) (void *))' + `pthread.h' (POSIX): *Note Thread-Specific Data::. + +`int pthread_key_delete (pthread_key_t KEY)' + `pthread.h' (POSIX): *Note Thread-Specific Data::. + +`int pthread_kill (pthread_t THREAD, int SIGNO)' + `pthread.h' (POSIX): *Note Threads and Signal Handling::. + +`void pthread_kill_other_threads_np (VOID)' + `pthread.h' (GNU): *Note Miscellaneous Thread Functions::. + +`int pthread_mutexattr_destroy (pthread_mutexattr_t *ATTR)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutexattr_gettype (const pthread_mutexattr_t *ATTR, int *TYPE)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutexattr_init (pthread_mutexattr_t *ATTR)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutexattr_settype (pthread_mutexattr_t *ATTR, int TYPE)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutex_destroy (pthread_mutex_t *MUTEX)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutex_init (pthread_mutex_t *MUTEX, const pthread_mutexattr_t *MUTEXATTR)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutex_lock (pthread_mutex_t *mutex))' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutex_timedlock (pthread_mutex_t *MUTEX, const struct timespec *ABSTIME)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutex_trylock (pthread_mutex_t *MUTEX)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_mutex_unlock (pthread_mutex_t *MUTEX)' + `pthread.h' (POSIX): *Note Mutexes::. + +`int pthread_once (pthread_once_t *once_CONTROL, void (*INIT_ROUTINE) (void))' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`pthread_t pthread_self (VOID)' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`int pthread_setcancelstate (int STATE, int *OLDSTATE)' + `pthread.h' (POSIX): *Note Cancellation::. + +`int pthread_setcanceltype (int TYPE, int *OLDTYPE)' + `pthread.h' (POSIX): *Note Cancellation::. + +`int pthread_setconcurrency (int LEVEL)' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`int pthread_setschedparam (pthread_t target_THREAD, int POLICY, const struct sched_param *PARAM)' + `pthread.h' (POSIX): *Note Miscellaneous Thread Functions::. + +`int pthread_setspecific (pthread_key_t KEY, const void *POINTER)' + `pthread.h' (POSIX): *Note Thread-Specific Data::. + +`int pthread_sigmask (int HOW, const sigset_t *NEWMASK, sigset_t *OLDMASK)' + `pthread.h' (POSIX): *Note Threads and Signal Handling::. + +`void pthread_testcancel (VOID)' + `pthread.h' (POSIX): *Note Cancellation::. + +`char * P_tmpdir' + `stdio.h' (SVID): *Note Temporary Files::. + +`ptrdiff_t' + `stddef.h' (ISO): *Note Important Data Types::. + +`char * ptsname (int FILEDES)' + `stdlib.h' (SVID, XPG4.2): *Note Allocation::. + +`int ptsname_r (int FILEDES, char *BUF, size_t LEN)' + `stdlib.h' (GNU): *Note Allocation::. + +`int putc (int C, FILE *STREAM)' + `stdio.h' (ISO): *Note Simple Output::. + +`int putchar (int C)' + `stdio.h' (ISO): *Note Simple Output::. + +`int putchar_unlocked (int C)' + `stdio.h' (POSIX): *Note Simple Output::. + +`int putc_unlocked (int C, FILE *STREAM)' + `stdio.h' (POSIX): *Note Simple Output::. + +`int putenv (char *STRING)' + `stdlib.h' (SVID): *Note Environment Access::. + +`int putpwent (const struct passwd *P, FILE *STREAM)' + `pwd.h' (SVID): *Note Writing a User Entry::. + +`int puts (const char *S)' + `stdio.h' (ISO): *Note Simple Output::. + +`struct utmp * pututline (const struct utmp *UTMP)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`struct utmpx * pututxline (const struct utmpx *UTMP)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int putw (int W, FILE *STREAM)' + `stdio.h' (SVID): *Note Simple Output::. + +`wint_t putwc (wchar_t WC, FILE *STREAM)' + `wchar.h' (ISO): *Note Simple Output::. + +`wint_t putwchar (wchar_t WC)' + `wchar.h' (ISO): *Note Simple Output::. + +`wint_t putwchar_unlocked (wchar_t WC)' + `wchar.h' (GNU): *Note Simple Output::. + +`wint_t putwc_unlocked (wchar_t WC, FILE *STREAM)' + `wchar.h' (GNU): *Note Simple Output::. + +`ssize_t pwrite (int FILEDES, const void *BUFFER, size_t SIZE, off_t OFFSET)' + `unistd.h' (Unix98): *Note I/O Primitives::. + +`ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t SIZE, off64_t OFFSET)' + `unistd.h' (Unix98): *Note I/O Primitives::. + +`char * qecvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)' + `stdlib.h' (GNU): *Note System V Number Conversion::. + +`char * qecvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' + `stdlib.h' (GNU): *Note System V Number Conversion::. + +`char * qfcvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)' + `stdlib.h' (GNU): *Note System V Number Conversion::. + +`char * qfcvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)' + `stdlib.h' (GNU): *Note System V Number Conversion::. + +`char * qgcvt (long double VALUE, int NDIGIT, char *BUF)' + `stdlib.h' (GNU): *Note System V Number Conversion::. + +`void qsort (void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)' + `stdlib.h' (ISO): *Note Array Sort Function::. + +`int raise (int SIGNUM)' + `signal.h' (ISO): *Note Signaling Yourself::. + +`int rand (void)' + `stdlib.h' (ISO): *Note ISO Random::. + +`int RAND_MAX' + `stdlib.h' (ISO): *Note ISO Random::. + +`long int random (void)' + `stdlib.h' (BSD): *Note BSD Random::. + +`int random_r (struct random_data *restrict BUF, int32_t *restrict RESULT)' + `stdlib.h' (GNU): *Note BSD Random::. + +`int rand_r (unsigned int *SEED)' + `stdlib.h' (POSIX.1): *Note ISO Random::. + +`void * rawmemchr (const void *BLOCK, int C)' + `string.h' (GNU): *Note Search Functions::. + +`ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)' + `unistd.h' (POSIX.1): *Note I/O Primitives::. + +`struct dirent * readdir (DIR *DIRSTREAM)' + `dirent.h' (POSIX.1): *Note Reading/Closing Directory::. + +`struct dirent64 * readdir64 (DIR *DIRSTREAM)' + `dirent.h' (LFS): *Note Reading/Closing Directory::. + +`int readdir64_r (DIR *DIRSTREAM, struct dirent64 *ENTRY, struct dirent64 **RESULT)' + `dirent.h' (LFS): *Note Reading/Closing Directory::. + +`int readdir_r (DIR *DIRSTREAM, struct dirent *ENTRY, struct dirent **RESULT)' + `dirent.h' (GNU): *Note Reading/Closing Directory::. + +`int readlink (const char *FILENAME, char *BUFFER, size_t SIZE)' + `unistd.h' (BSD): *Note Symbolic Links::. + +`ssize_t readv (int FILEDES, const struct iovec *VECTOR, int COUNT)' + `sys/uio.h' (BSD): *Note Scatter-Gather::. + +`void * realloc (void *PTR, size_t NEWSIZE)' + `malloc.h', `stdlib.h' (ISO): *Note Changing Block Size::. + +`__realloc_hook' + `malloc.h' (GNU): *Note Hooks for Malloc::. + +`char * realpath (const char *restrict NAME, char *restrict RESOLVED)' + `stdlib.h' (XPG): *Note Symbolic Links::. + +`int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)' + `sys/socket.h' (BSD): *Note Receiving Data::. + +`int recvfrom (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)' + `sys/socket.h' (BSD): *Note Receiving Datagrams::. + +`int recvmsg (int SOCKET, struct msghdr *MESSAGE, int FLAGS)' + `sys/socket.h' (BSD): *Note Receiving Datagrams::. + +`int RE_DUP_MAX' + `limits.h' (POSIX.2): *Note General Limits::. + +`_REENTRANT' + (GNU): *Note Feature Test Macros::. + +`REG_BADBR' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_BADPAT' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_BADRPT' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`int regcomp (regex_t *COMPILED, const char *PATTERN, int CFLAGS)' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_EBRACE' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_EBRACK' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_ECOLLATE' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_ECTYPE' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_EESCAPE' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_EPAREN' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_ERANGE' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`size_t regerror (int ERRCODE, regex_t *COMPILED, char *BUFFER, size_t LENGTH)' + `regex.h' (POSIX.2): *Note Regexp Cleanup::. + +`REG_ESPACE' + `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. + +`REG_ESPACE' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_ESUBREG' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`int regexec (regex_t *COMPILED, char *STRING, size_t NMATCH, regmatch_t MATCHPTR [], int EFLAGS)' + `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. + +`regex_t' + `regex.h' (POSIX.2): *Note POSIX Regexp Compilation::. + +`REG_EXTENDED' + `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. + +`void regfree (regex_t *COMPILED)' + `regex.h' (POSIX.2): *Note Regexp Cleanup::. + +`REG_ICASE' + `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. + +`int register_printf_function (int SPEC, printf_function HANDLER-FUNCTION, printf_arginfo_function ARGINFO-FUNCTION)' + `printf.h' (GNU): *Note Registering New Conversions::. + +`regmatch_t' + `regex.h' (POSIX.2): *Note Regexp Subexpressions::. + +`REG_NEWLINE' + `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. + +`REG_NOMATCH' + `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. + +`REG_NOSUB' + `regex.h' (POSIX.2): *Note Flags for POSIX Regexps::. + +`REG_NOTBOL' + `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. + +`REG_NOTEOL' + `regex.h' (POSIX.2): *Note Matching POSIX Regexps::. + +`regoff_t' + `regex.h' (POSIX.2): *Note Regexp Subexpressions::. + +`double remainder (double NUMERATOR, double DENOMINATOR)' + `math.h' (BSD): *Note Remainder Functions::. + +`float remainderf (float NUMERATOR, float DENOMINATOR)' + `math.h' (BSD): *Note Remainder Functions::. + +`long double remainderl (long double NUMERATOR, long double DENOMINATOR)' + `math.h' (BSD): *Note Remainder Functions::. + +`int remove (const char *FILENAME)' + `stdio.h' (ISO): *Note Deleting Files::. + +`int rename (const char *OLDNAME, const char *NEWNAME)' + `stdio.h' (ISO): *Note Renaming Files::. + +`void rewind (FILE *STREAM)' + `stdio.h' (ISO): *Note File Positioning::. + +`void rewinddir (DIR *DIRSTREAM)' + `dirent.h' (POSIX.1): *Note Random Access Directory::. + +`char * rindex (const char *STRING, int C)' + `string.h' (BSD): *Note Search Functions::. + +`double rint (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`float rintf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double rintl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`int RLIM_INFINITY' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_AS' + `sys/resource.h' (Unix98): *Note Limits on Resources::. + +`RLIMIT_CORE' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_CPU' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_DATA' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_FSIZE' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_MEMLOCK' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_NOFILE' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_NPROC' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_RSS' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIMIT_STACK' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`RLIM_NLIMITS' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`int rmdir (const char *FILENAME)' + `unistd.h' (POSIX.1): *Note Deleting Files::. + +`int R_OK' + `unistd.h' (POSIX.1): *Note Testing File Access::. + +`double round (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`float roundf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double roundl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`RUN_LVL' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`RUN_LVL' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`RUSAGE_CHILDREN' + `sys/resource.h' (BSD): *Note Resource Usage::. + +`RUSAGE_SELF' + `sys/resource.h' (BSD): *Note Resource Usage::. + +`int SA_NOCLDSTOP' + `signal.h' (POSIX.1): *Note Flags for Sigaction::. + +`int SA_ONSTACK' + `signal.h' (BSD): *Note Flags for Sigaction::. + +`int SA_RESTART' + `signal.h' (BSD): *Note Flags for Sigaction::. + +`int sbrk (ptrdiff_t DELTA)' + `unistd.h' (BSD): *Note Resizing the Data Segment::. + +`_SC_2_C_DEV' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_2_FORT_DEV' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_2_FORT_RUN' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_2_LOCALEDEF' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_2_SW_DEV' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_2_VERSION' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_AIO_LISTIO_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_AIO_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_AIO_PRIO_DELTA_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`double scalb (double VALUE, int EXPONENT)' + `math.h' (BSD): *Note Normalization Functions::. + +`float scalbf (float VALUE, int EXPONENT)' + `math.h' (BSD): *Note Normalization Functions::. + +`long double scalbl (long double VALUE, int EXPONENT)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int scalbln (double X, long int n)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int scalblnf (float X, long int n)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int scalblnl (long double X, long int n)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int scalbn (double X, int n)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int scalbnf (float X, int n)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int scalbnl (long double X, int n)' + `math.h' (BSD): *Note Normalization Functions::. + +`int scandir (const char *DIR, struct dirent ***NAMELIST, int (*SELECTOR) (const struct dirent *), int (*CMP) (const void *, const void *))' + `dirent.h' (BSD/SVID): *Note Scanning Directory Content::. + +`int scandir64 (const char *DIR, struct dirent64 ***NAMELIST, int (*SELECTOR) (const struct dirent64 *), int (*CMP) (const void *, const void *))' + `dirent.h' (GNU): *Note Scanning Directory Content::. + +`int scanf (const char *TEMPLATE, ...)' + `stdio.h' (ISO): *Note Formatted Input Functions::. + +`_SC_ARG_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_ASYNCHRONOUS_IO' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_ATEXIT_MAX' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_AVPHYS_PAGES' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_BC_BASE_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_BC_DIM_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_BC_SCALE_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_BC_STRING_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_CHAR_BIT' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_CHARCLASS_NAME_MAX' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_CHAR_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_CHAR_MIN' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_CHILD_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_CLK_TCK' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_COLL_WEIGHTS_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_DELAYTIMER_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_EQUIV_CLASS_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_EXPR_NEST_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_FSYNC' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_GETGR_R_SIZE_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_GETPW_R_SIZE_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`SCHAR_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`SCHAR_MIN' + `limits.h' (ISO): *Note Range of Type::. + +`int sched_getparam (pid_t PID, const struct sched_param *PARAM)' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_get_priority_max (int *POLICY);' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_get_priority_min (int *POLICY);' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_getscheduler (pid_t PID)' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_rr_get_interval (pid_t PID, struct timespec *INTERVAL)' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_setparam (pid_t PID, const struct sched_param *PARAM)' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_setscheduler (pid_t PID, int POLICY, const struct sched_param *PARAM)' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`int sched_yield (void)' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`_SC_INT_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_INT_MIN' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_JOB_CONTROL' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_LINE_MAX' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_LOGIN_NAME_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_LONG_BIT' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_MAPPED_FILES' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_MB_LEN_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_MEMLOCK' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_MEMLOCK_RANGE' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_MEMORY_PROTECTION' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_MESSAGE_PASSING' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_MQ_OPEN_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_MQ_PRIO_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_NGROUPS_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_NL_ARGMAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_NL_LANGMAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_NL_MSGMAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_NL_NMAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_NL_SETMAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_NL_TEXTMAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_NPROCESSORS_CONF' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_NPROCESSORS_ONLN' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_NZERO' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_OPEN_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_PAGESIZE' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_PHYS_PAGES' + `unistd.h' (GNU): *Note Constants for Sysconf::. + +`_SC_PII' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_INTERNET' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_INTERNET_DGRAM' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_INTERNET_STREAM' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_OSI' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_OSI_CLTS' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_OSI_COTS' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_OSI_M' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_SOCKET' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PII_XTI' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_PRIORITIZED_IO' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_PRIORITY_SCHEDULING' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_REALTIME_SIGNALS' + `unistdh.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_RTSIG_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SAVED_IDS' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SCHAR_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_SCHAR_MIN' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_SELECT' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_SEMAPHORES' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SEM_NSEMS_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SEM_VALUE_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SHARED_MEMORY_OBJECTS' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SHRT_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_SHRT_MIN' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_SIGQUEUE_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`SC_SSIZE_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_STREAM_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_SYNCHRONIZED_IO' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_ATTR_STACKADDR' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_ATTR_STACKSIZE' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_DESTRUCTOR_ITERATIONS' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_KEYS_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_PRIO_INHERIT' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_PRIO_PROTECT' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_PRIORITY_SCHEDULING' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_PROCESS_SHARED' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREADS' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_SAFE_FUNCTIONS' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_STACK_MIN' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_THREAD_THREADS_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_TIMER_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_TIMERS' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_T_IOV_MAX' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_TTY_NAME_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_TZNAME_MAX' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_UCHAR_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_UINT_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_UIO_MAXIOV' + `unistd.h' (POSIX.1g): *Note Constants for Sysconf::. + +`_SC_ULONG_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_USHRT_MAX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_VERSION' + `unistd.h' (POSIX.1): *Note Constants for Sysconf::. + +`_SC_VERSION' + `unistd.h' (POSIX.2): *Note Constants for Sysconf::. + +`_SC_WORD_BIT' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_CRYPT' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_ENH_I18N' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_LEGACY' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_REALTIME' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_REALTIME_THREADS' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_SHM' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_UNIX' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_VERSION' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_XCU_VERSION' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_XPG2' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_XPG3' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`_SC_XOPEN_XPG4' + `unistd.h' (X/Open): *Note Constants for Sysconf::. + +`unsigned short int * seed48 (unsigned short int SEED16V[3])' + `stdlib.h' (SVID): *Note SVID Random::. + +`int seed48_r (unsigned short int SEED16V[3], struct drand48_data *BUFFER)' + `stdlib.h' (GNU): *Note SVID Random::. + +`int SEEK_CUR' + `stdio.h' (ISO): *Note File Positioning::. + +`void seekdir (DIR *DIRSTREAM, off_t POS)' + `dirent.h' (BSD): *Note Random Access Directory::. + +`int SEEK_END' + `stdio.h' (ISO): *Note File Positioning::. + +`int SEEK_SET' + `stdio.h' (ISO): *Note File Positioning::. + +`int select (int NFDS, fd_set *READ-FDS, fd_set *WRITE-FDS, fd_set *EXCEPT-FDS, struct timeval *TIMEOUT)' + `sys/types.h' (BSD): *Note Waiting for I/O::. + +`int sem_destroy (sem_t * SEM)' + `semaphore.h' (POSIX): *Note POSIX Semaphores::. + +`int sem_getvalue (sem_t * SEM, int * SVAL)' + `semaphore.h' (POSIX): *Note POSIX Semaphores::. + +`int sem_init (sem_t *SEM, int PSHARED, unsigned int VALUE)' + `semaphore.h' (POSIX): *Note POSIX Semaphores::. + +`int sem_post (sem_t * SEM)' + `semaphore.h' (POSIX): *Note POSIX Semaphores::. + +`int sem_trywait (sem_t * SEM)' + `semaphore.h' (POSIX): *Note POSIX Semaphores::. + +`int sem_wait (sem_t * SEM)' + `semaphore.h' (POSIX): *Note POSIX Semaphores::. + +`int send (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)' + `sys/socket.h' (BSD): *Note Sending Data::. + +`int sendmsg (int SOCKET, const struct msghdr *MESSAGE, int FLAGS)' + `sys/socket.h' (BSD): *Note Receiving Datagrams::. + +`int sendto (int SOCKET, void *BUFFER. size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)' + `sys/socket.h' (BSD): *Note Sending Datagrams::. + +`void setbuf (FILE *STREAM, char *BUF)' + `stdio.h' (ISO): *Note Controlling Buffering::. + +`void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)' + `stdio.h' (BSD): *Note Controlling Buffering::. + +`int setcontext (const ucontext_t *UCP)' + `ucontext.h' (SVID): *Note System V contexts::. + +`int setdomainname (const char *NAME, size_t LENGTH)' + `unistd.h' (???): *Note Host Identification::. + +`int setegid (gid_t NEWGID)' + `unistd.h' (POSIX.1): *Note Setting Groups::. + +`int setenv (const char *NAME, const char *VALUE, int REPLACE)' + `stdlib.h' (BSD): *Note Environment Access::. + +`int seteuid (uid_t NEWEUID)' + `unistd.h' (POSIX.1): *Note Setting User ID::. + +`int setfsent (void)' + `fstab.h' (BSD): *Note fstab::. + +`int setgid (gid_t NEWGID)' + `unistd.h' (POSIX.1): *Note Setting Groups::. + +`void setgrent (void)' + `grp.h' (SVID, BSD): *Note Scanning All Groups::. + +`int setgroups (size_t COUNT, gid_t *GROUPS)' + `grp.h' (BSD): *Note Setting Groups::. + +`void sethostent (int STAYOPEN)' + `netdb.h' (BSD): *Note Host Names::. + +`int sethostid (long int ID)' + `unistd.h' (BSD): *Note Host Identification::. + +`int sethostname (const char *NAME, size_t LENGTH)' + `unistd.h' (BSD): *Note Host Identification::. + +`int setitimer (int WHICH, struct itimerval *NEW, struct itimerval *OLD)' + `sys/time.h' (BSD): *Note Setting an Alarm::. + +`int setjmp (jmp_buf STATE)' + `setjmp.h' (ISO): *Note Non-Local Details::. + +`void setkey (const char *KEY)' + `crypt.h' (BSD, SVID): *Note DES Encryption::. + +`void setkey_r (const char *KEY, struct crypt_data * DATA)' + `crypt.h' (GNU): *Note DES Encryption::. + +`void setlinebuf (FILE *STREAM)' + `stdio.h' (BSD): *Note Controlling Buffering::. + +`char * setlocale (int CATEGORY, const char *LOCALE)' + `locale.h' (ISO): *Note Setting the Locale::. + +`int setlogmask (int MASK)' + `syslog.h' (BSD): *Note setlogmask::. + +`FILE * setmntent (const char *FILE, const char *MODE)' + `mntent.h' (BSD): *Note mtab::. + +`void setnetent (int STAYOPEN)' + `netdb.h' (BSD): *Note Networks Database::. + +`int setnetgrent (const char *NETGROUP)' + `netdb.h' (BSD): *Note Lookup Netgroup::. + +`int setpgid (pid_t PID, pid_t PGID)' + `unistd.h' (POSIX.1): *Note Process Group Functions::. + +`int setpgrp (pid_t PID, pid_t PGID)' + `unistd.h' (BSD): *Note Process Group Functions::. + +`int setpriority (int CLASS, int ID, int NICEVAL)' + `sys/resource.h' (BSD,POSIX): *Note Traditional Scheduling + Functions::. + +`void setprotoent (int STAYOPEN)' + `netdb.h' (BSD): *Note Protocols Database::. + +`void setpwent (void)' + `pwd.h' (SVID, BSD): *Note Scanning All Users::. + +`int setregid (gid_t RGID, gid_t EGID)' + `unistd.h' (BSD): *Note Setting Groups::. + +`int setreuid (uid_t RUID, uid_t EUID)' + `unistd.h' (BSD): *Note Setting User ID::. + +`int setrlimit (int RESOURCE, const struct rlimit *RLP)' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`int setrlimit64 (int RESOURCE, const struct rlimit64 *RLP)' + `sys/resource.h' (Unix98): *Note Limits on Resources::. + +`void setservent (int STAYOPEN)' + `netdb.h' (BSD): *Note Services Database::. + +`pid_t setsid (void)' + `unistd.h' (POSIX.1): *Note Process Group Functions::. + +`int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t OPTLEN)' + `sys/socket.h' (BSD): *Note Socket Option Functions::. + +`void * setstate (void *STATE)' + `stdlib.h' (BSD): *Note BSD Random::. + +`int setstate_r (char *restrict STATEBUF, struct random_data *restrict BUF)' + `stdlib.h' (GNU): *Note BSD Random::. + +`int settimeofday (const struct timeval *TP, const struct timezone *TZP)' + `sys/time.h' (BSD): *Note High-Resolution Calendar::. + +`int setuid (uid_t NEWUID)' + `unistd.h' (POSIX.1): *Note Setting User ID::. + +`void setutent (void)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`void setutxent (void)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t SIZE)' + `stdio.h' (ISO): *Note Controlling Buffering::. + +`SHRT_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`SHRT_MIN' + `limits.h' (ISO): *Note Range of Type::. + +`int shutdown (int SOCKET, int HOW)' + `sys/socket.h' (BSD): *Note Closing a Socket::. + +`S_IEXEC' + `sys/stat.h' (BSD): *Note Permission Bits::. + +`S_IFBLK' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`S_IFCHR' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`S_IFDIR' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`S_IFIFO' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`S_IFLNK' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`int S_IFMT' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`S_IFREG' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`S_IFSOCK' + `sys/stat.h' (BSD): *Note Testing File Type::. + +`int SIGABRT' + `signal.h' (ISO): *Note Program Error Signals::. + +`int sigaction (int SIGNUM, const struct sigaction *restrict ACTION, struct sigaction *restrict OLD-ACTION)' + `signal.h' (POSIX.1): *Note Advanced Signal Handling::. + +`int sigaddset (sigset_t *SET, int SIGNUM)' + `signal.h' (POSIX.1): *Note Signal Sets::. + +`int SIGALRM' + `signal.h' (POSIX.1): *Note Alarm Signals::. + +`int sigaltstack (const stack_t *restrict STACK, stack_t *restrict OLDSTACK)' + `signal.h' (XPG): *Note Signal Stack::. + +`sig_atomic_t' + `signal.h' (ISO): *Note Atomic Types::. + +`SIG_BLOCK' + `signal.h' (POSIX.1): *Note Process Signal Mask::. + +`int sigblock (int MASK)' + `signal.h' (BSD): *Note Blocking in BSD::. + +`int SIGBUS' + `signal.h' (BSD): *Note Program Error Signals::. + +`int SIGCHLD' + `signal.h' (POSIX.1): *Note Job Control Signals::. + +`int SIGCLD' + `signal.h' (SVID): *Note Job Control Signals::. + +`int SIGCONT' + `signal.h' (POSIX.1): *Note Job Control Signals::. + +`int sigdelset (sigset_t *SET, int SIGNUM)' + `signal.h' (POSIX.1): *Note Signal Sets::. + +`int sigemptyset (sigset_t *SET)' + `signal.h' (POSIX.1): *Note Signal Sets::. + +`int SIGEMT' + `signal.h' (BSD): *Note Program Error Signals::. + +`sighandler_t SIG_ERR' + `signal.h' (ISO): *Note Basic Signal Handling::. + +`int sigfillset (sigset_t *SET)' + `signal.h' (POSIX.1): *Note Signal Sets::. + +`int SIGFPE' + `signal.h' (ISO): *Note Program Error Signals::. + +`sighandler_t' + `signal.h' (GNU): *Note Basic Signal Handling::. + +`int SIGHUP' + `signal.h' (POSIX.1): *Note Termination Signals::. + +`int SIGILL' + `signal.h' (ISO): *Note Program Error Signals::. + +`int SIGINFO' + `signal.h' (BSD): *Note Miscellaneous Signals::. + +`int SIGINT' + `signal.h' (ISO): *Note Termination Signals::. + +`int siginterrupt (int SIGNUM, int FAILFLAG)' + `signal.h' (BSD): *Note BSD Handler::. + +`int SIGIO' + `signal.h' (BSD): *Note Asynchronous I/O Signals::. + +`int SIGIOT' + `signal.h' (Unix): *Note Program Error Signals::. + +`int sigismember (const sigset_t *SET, int SIGNUM)' + `signal.h' (POSIX.1): *Note Signal Sets::. + +`sigjmp_buf' + `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::. + +`int SIGKILL' + `signal.h' (POSIX.1): *Note Termination Signals::. + +`void siglongjmp (sigjmp_buf STATE, int VALUE)' + `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::. + +`int SIGLOST' + `signal.h' (GNU): *Note Operation Error Signals::. + +`int sigmask (int SIGNUM)' + `signal.h' (BSD): *Note Blocking in BSD::. + +`sighandler_t signal (int SIGNUM, sighandler_t ACTION)' + `signal.h' (ISO): *Note Basic Signal Handling::. + +`int signbit (_float-type_ X)' + `math.h' (ISO): *Note FP Bit Twiddling::. + +`long long int significand (double X)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int significandf (float X)' + `math.h' (BSD): *Note Normalization Functions::. + +`long long int significandl (long double X)' + `math.h' (BSD): *Note Normalization Functions::. + +`int sigpause (int MASK)' + `signal.h' (BSD): *Note Blocking in BSD::. + +`int sigpending (sigset_t *SET)' + `signal.h' (POSIX.1): *Note Checking for Pending Signals::. + +`int SIGPIPE' + `signal.h' (POSIX.1): *Note Operation Error Signals::. + +`int SIGPOLL' + `signal.h' (SVID): *Note Asynchronous I/O Signals::. + +`int sigprocmask (int HOW, const sigset_t *restrict SET, sigset_t *restrict OLDSET)' + `signal.h' (POSIX.1): *Note Process Signal Mask::. + +`int SIGPROF' + `signal.h' (BSD): *Note Alarm Signals::. + +`int SIGQUIT' + `signal.h' (POSIX.1): *Note Termination Signals::. + +`int SIGSEGV' + `signal.h' (ISO): *Note Program Error Signals::. + +`int sigsetjmp (sigjmp_buf STATE, int SAVESIGS)' + `setjmp.h' (POSIX.1): *Note Non-Local Exits and Signals::. + +`SIG_SETMASK' + `signal.h' (POSIX.1): *Note Process Signal Mask::. + +`int sigsetmask (int MASK)' + `signal.h' (BSD): *Note Blocking in BSD::. + +`sigset_t' + `signal.h' (POSIX.1): *Note Signal Sets::. + +`int sigstack (const struct sigstack *STACK, struct sigstack *OLDSTACK)' + `signal.h' (BSD): *Note Signal Stack::. + +`int SIGSTOP' + `signal.h' (POSIX.1): *Note Job Control Signals::. + +`int sigsuspend (const sigset_t *SET)' + `signal.h' (POSIX.1): *Note Sigsuspend::. + +`int SIGSYS' + `signal.h' (Unix): *Note Program Error Signals::. + +`int SIGTERM' + `signal.h' (ISO): *Note Termination Signals::. + +`int SIGTRAP' + `signal.h' (BSD): *Note Program Error Signals::. + +`int SIGTSTP' + `signal.h' (POSIX.1): *Note Job Control Signals::. + +`int SIGTTIN' + `signal.h' (POSIX.1): *Note Job Control Signals::. + +`int SIGTTOU' + `signal.h' (POSIX.1): *Note Job Control Signals::. + +`SIG_UNBLOCK' + `signal.h' (POSIX.1): *Note Process Signal Mask::. + +`int SIGURG' + `signal.h' (BSD): *Note Asynchronous I/O Signals::. + +`int SIGUSR1' + `signal.h' (POSIX.1): *Note Miscellaneous Signals::. + +`int SIGUSR2' + `signal.h' (POSIX.1): *Note Miscellaneous Signals::. + +`int sigvec (int SIGNUM, const struct sigvec *ACTION,struct sigvec *OLD-ACTION)' + `signal.h' (BSD): *Note BSD Handler::. + +`int SIGVTALRM' + `signal.h' (BSD): *Note Alarm Signals::. + +`int sigwait (const sigset_t *SET, int *SIG)' + `pthread.h' (POSIX): *Note Threads and Signal Handling::. + +`int SIGWINCH' + `signal.h' (BSD): *Note Miscellaneous Signals::. + +`int SIGXCPU' + `signal.h' (BSD): *Note Operation Error Signals::. + +`int SIGXFSZ' + `signal.h' (BSD): *Note Operation Error Signals::. + +`double sin (double X)' + `math.h' (ISO): *Note Trig Functions::. + +`void sincos (double X, double *SINX, double *COSX)' + `math.h' (GNU): *Note Trig Functions::. + +`void sincosf (float X, float *SINX, float *COSX)' + `math.h' (GNU): *Note Trig Functions::. + +`void sincosl (long double X, long double *SINX, long double *COSX)' + `math.h' (GNU): *Note Trig Functions::. + +`float sinf (float X)' + `math.h' (ISO): *Note Trig Functions::. + +`double sinh (double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`float sinhf (float X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`long double sinhl (long double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`long double sinl (long double X)' + `math.h' (ISO): *Note Trig Functions::. + +`S_IREAD' + `sys/stat.h' (BSD): *Note Permission Bits::. + +`S_IRGRP' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IROTH' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IRUSR' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IRWXG' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IRWXO' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IRWXU' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`int S_ISBLK (mode_t M)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int S_ISCHR (mode_t M)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int S_ISDIR (mode_t M)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int S_ISFIFO (mode_t M)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`S_ISGID' + `sys/stat.h' (POSIX): *Note Permission Bits::. + +`int S_ISLNK (mode_t M)' + `sys/stat.h' (GNU): *Note Testing File Type::. + +`int S_ISREG (mode_t M)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int S_ISSOCK (mode_t M)' + `sys/stat.h' (GNU): *Note Testing File Type::. + +`S_ISUID' + `sys/stat.h' (POSIX): *Note Permission Bits::. + +`S_ISVTX' + `sys/stat.h' (BSD): *Note Permission Bits::. + +`S_IWGRP' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IWOTH' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IWRITE' + `sys/stat.h' (BSD): *Note Permission Bits::. + +`S_IWUSR' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IXGRP' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IXOTH' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`S_IXUSR' + `sys/stat.h' (POSIX.1): *Note Permission Bits::. + +`size_t' + `stddef.h' (ISO): *Note Important Data Types::. + +`unsigned int sleep (unsigned int SECONDS)' + `unistd.h' (POSIX.1): *Note Sleeping::. + +`int snprintf (char *S, size_t SIZE, const char *TEMPLATE, ...)' + `stdio.h' (GNU): *Note Formatted Output Functions::. + +`SO_BROADCAST' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`int SOCK_DGRAM' + `sys/socket.h' (BSD): *Note Communication Styles::. + +`int socket (int NAMESPACE, int STYLE, int PROTOCOL)' + `sys/socket.h' (BSD): *Note Creating a Socket::. + +`int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, int FILEDES[2])' + `sys/socket.h' (BSD): *Note Socket Pairs::. + +`int SOCK_RAW' + `sys/socket.h' (BSD): *Note Communication Styles::. + +`int SOCK_RDM' + `sys/socket.h' (BSD): *Note Communication Styles::. + +`int SOCK_SEQPACKET' + `sys/socket.h' (BSD): *Note Communication Styles::. + +`int SOCK_STREAM' + `sys/socket.h' (BSD): *Note Communication Styles::. + +`SO_DEBUG' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_DONTROUTE' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_ERROR' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_KEEPALIVE' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_LINGER' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`int SOL_SOCKET' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_OOBINLINE' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_RCVBUF' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_REUSEADDR' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_SNDBUF' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`SO_STYLE' + `sys/socket.h' (GNU): *Note Socket-Level Options::. + +`SO_TYPE' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`speed_t' + `termios.h' (POSIX.1): *Note Line Speed::. + +`int sprintf (char *S, const char *TEMPLATE, ...)' + `stdio.h' (ISO): *Note Formatted Output Functions::. + +`double sqrt (double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`float sqrtf (float X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`long double sqrtl (long double X)' + `math.h' (ISO): *Note Exponents and Logarithms::. + +`void srand (unsigned int SEED)' + `stdlib.h' (ISO): *Note ISO Random::. + +`void srand48 (long int SEEDVAL)' + `stdlib.h' (SVID): *Note SVID Random::. + +`int srand48_r (long int SEEDVAL, struct drand48_data *BUFFER)' + `stdlib.h' (GNU): *Note SVID Random::. + +`void srandom (unsigned int SEED)' + `stdlib.h' (BSD): *Note BSD Random::. + +`int srandom_r (unsigned int SEED, struct random_data *BUF)' + `stdlib.h' (GNU): *Note BSD Random::. + +`int sscanf (const char *S, const char *TEMPLATE, ...)' + `stdio.h' (ISO): *Note Formatted Input Functions::. + +`sighandler_t ssignal (int SIGNUM, sighandler_t ACTION)' + `signal.h' (SVID): *Note Basic Signal Handling::. + +`int SSIZE_MAX' + `limits.h' (POSIX.1): *Note General Limits::. + +`ssize_t' + `unistd.h' (POSIX.1): *Note I/O Primitives::. + +`stack_t' + `signal.h' (XPG): *Note Signal Stack::. + +`int stat (const char *FILENAME, struct stat *BUF)' + `sys/stat.h' (POSIX.1): *Note Reading Attributes::. + +`int stat64 (const char *FILENAME, struct stat64 *BUF)' + `sys/stat.h' (Unix98): *Note Reading Attributes::. + +`FILE * stderr' + `stdio.h' (ISO): *Note Standard Streams::. + +`STDERR_FILENO' + `unistd.h' (POSIX.1): *Note Descriptors and Streams::. + +`FILE * stdin' + `stdio.h' (ISO): *Note Standard Streams::. + +`STDIN_FILENO' + `unistd.h' (POSIX.1): *Note Descriptors and Streams::. + +`FILE * stdout' + `stdio.h' (ISO): *Note Standard Streams::. + +`STDOUT_FILENO' + `unistd.h' (POSIX.1): *Note Descriptors and Streams::. + +`int stime (time_t *NEWTIME)' + `time.h' (SVID, XPG): *Note Simple Calendar Time::. + +`char * stpcpy (char *restrict TO, const char *restrict FROM)' + `string.h' (Unknown origin): *Note Copying and Concatenation::. + +`char * stpncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)' + `string.h' (GNU): *Note Copying and Concatenation::. + +`int strcasecmp (const char *S1, const char *S2)' + `string.h' (BSD): *Note String/Array Comparison::. + +`char * strcasestr (const char *HAYSTACK, const char *NEEDLE)' + `string.h' (GNU): *Note Search Functions::. + +`char * strcat (char *restrict TO, const char *restrict FROM)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`char * strchr (const char *STRING, int C)' + `string.h' (ISO): *Note Search Functions::. + +`char * strchrnul (const char *STRING, int C)' + `string.h' (GNU): *Note Search Functions::. + +`int strcmp (const char *S1, const char *S2)' + `string.h' (ISO): *Note String/Array Comparison::. + +`int strcoll (const char *S1, const char *S2)' + `string.h' (ISO): *Note Collation Functions::. + +`char * strcpy (char *restrict TO, const char *restrict FROM)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`size_t strcspn (const char *STRING, const char *STOPSET)' + `string.h' (ISO): *Note Search Functions::. + +`char * strdup (const char *S)' + `string.h' (SVID): *Note Copying and Concatenation::. + +`char * strdupa (const char *S)' + `string.h' (GNU): *Note Copying and Concatenation::. + +`int STREAM_MAX' + `limits.h' (POSIX.1): *Note General Limits::. + +`char * strerror (int ERRNUM)' + `string.h' (ISO): *Note Error Messages::. + +`char * strerror_r (int ERRNUM, char *BUF, size_t N)' + `string.h' (GNU): *Note Error Messages::. + +`char * strfry (char *STRING)' + `string.h' (GNU): *Note strfry::. + +`size_t strftime (char *S, size_t SIZE, const char *TEMPLATE, const struct tm *BROKENTIME)' + `time.h' (ISO): *Note Formatting Calendar Time::. + +`size_t strlen (const char *S)' + `string.h' (ISO): *Note String Length::. + +`int strncasecmp (const char *S1, const char *S2, size_t N)' + `string.h' (BSD): *Note String/Array Comparison::. + +`char * strncat (char *restrict TO, const char *restrict FROM, size_t SIZE)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`int strncmp (const char *S1, const char *S2, size_t SIZE)' + `string.h' (ISO): *Note String/Array Comparison::. + +`char * strncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)' + `string.h' (ISO): *Note Copying and Concatenation::. + +`char * strndup (const char *S, size_t SIZE)' + `string.h' (GNU): *Note Copying and Concatenation::. + +`char * strndupa (const char *S, size_t SIZE)' + `string.h' (GNU): *Note Copying and Concatenation::. + +`size_t strnlen (const char *S, size_t MAXLEN)' + `string.h' (GNU): *Note String Length::. + +`char * strpbrk (const char *STRING, const char *STOPSET)' + `string.h' (ISO): *Note Search Functions::. + +`char * strptime (const char *S, const char *FMT, struct tm *TP)' + `time.h' (XPG4): *Note Low-Level Time String Parsing::. + +`char * strrchr (const char *STRING, int C)' + `string.h' (ISO): *Note Search Functions::. + +`char * strsep (char **STRING_PTR, const char *DELIMITER)' + `string.h' (BSD): *Note Finding Tokens in a String::. + +`char * strsignal (int SIGNUM)' + `string.h' (GNU): *Note Signal Messages::. + +`size_t strspn (const char *STRING, const char *SKIPSET)' + `string.h' (ISO): *Note Search Functions::. + +`char * strstr (const char *HAYSTACK, const char *NEEDLE)' + `string.h' (ISO): *Note Search Functions::. + +`double strtod (const char *restrict STRING, char **restrict TAILPTR)' + `stdlib.h' (ISO): *Note Parsing of Floats::. + +`float strtof (const char *STRING, char **TAILPTR)' + `stdlib.h' (ISO): *Note Parsing of Floats::. + +`intmax_t strtoimax (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `inttypes.h' (ISO): *Note Parsing of Integers::. + +`char * strtok (char *restrict NEWSTRING, const char *restrict DELIMITERS)' + `string.h' (ISO): *Note Finding Tokens in a String::. + +`char * strtok_r (char *NEWSTRING, const char *DELIMITERS, char **SAVE_PTR)' + `string.h' (POSIX): *Note Finding Tokens in a String::. + +`long int strtol (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `stdlib.h' (ISO): *Note Parsing of Integers::. + +`long double strtold (const char *STRING, char **TAILPTR)' + `stdlib.h' (ISO): *Note Parsing of Floats::. + +`long long int strtoll (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `stdlib.h' (ISO): *Note Parsing of Integers::. + +`long long int strtoq (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `stdlib.h' (BSD): *Note Parsing of Integers::. + +`unsigned long int strtoul (const char *retrict STRING, char **restrict TAILPTR, int BASE)' + `stdlib.h' (ISO): *Note Parsing of Integers::. + +`unsigned long long int strtoull (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `stdlib.h' (ISO): *Note Parsing of Integers::. + +`uintmax_t strtoumax (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `inttypes.h' (ISO): *Note Parsing of Integers::. + +`unsigned long long int strtouq (const char *restrict STRING, char **restrict TAILPTR, int BASE)' + `stdlib.h' (BSD): *Note Parsing of Integers::. + +`struct aiocb' + `aio.h' (POSIX.1b): *Note Asynchronous I/O::. + +`struct aiocb64' + `aio.h' (POSIX.1b): *Note Asynchronous I/O::. + +`struct aioinit' + `aio.h' (GNU): *Note Configuration of AIO::. + +`struct argp' + `argp.h' (GNU): *Note Argp Parsers::. + +`struct argp_child' + `argp.h' (GNU): *Note Argp Children::. + +`struct argp_option' + `argp.h' (GNU): *Note Argp Option Vectors::. + +`struct argp_state' + `argp.h' (GNU): *Note Argp Parsing State::. + +`struct dirent' + `dirent.h' (POSIX.1): *Note Directory Entries::. + +`struct exit_status' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`struct flock' + `fcntl.h' (POSIX.1): *Note File Locks::. + +`struct fstab' + `fstab.h' (BSD): *Note fstab::. + +`struct FTW' + `ftw.h' (XPG4.2): *Note Working with Directory Trees::. + +`struct __gconv_step' + `gconv.h' (GNU): *Note glibc iconv Implementation::. + +`struct __gconv_step_data' + `gconv.h' (GNU): *Note glibc iconv Implementation::. + +`struct group' + `grp.h' (POSIX.1): *Note Group Data Structure::. + +`struct hostent' + `netdb.h' (BSD): *Note Host Names::. + +`struct if_nameindex' + `net/if.h' (IPv6 basic API): *Note Interface Naming::. + +`struct in6_addr' + `netinet/in.h' (IPv6 basic API): *Note Host Address Data Type::. + +`struct in_addr' + `netinet/in.h' (BSD): *Note Host Address Data Type::. + +`struct iovec' + `sys/uio.h' (BSD): *Note Scatter-Gather::. + +`struct itimerval' + `sys/time.h' (BSD): *Note Setting an Alarm::. + +`struct lconv' + `locale.h' (ISO): *Note The Lame Way to Locale Data::. + +`struct linger' + `sys/socket.h' (BSD): *Note Socket-Level Options::. + +`struct mallinfo' + `malloc.h' (GNU): *Note Statistics of Malloc::. + +`struct mntent' + `mntent.h' (BSD): *Note mtab::. + +`struct msghdr' + `sys/socket.h' (BSD): *Note Receiving Datagrams::. + +`struct netent' + `netdb.h' (BSD): *Note Networks Database::. + +`struct obstack' + `obstack.h' (GNU): *Note Creating Obstacks::. + +`struct option' + `getopt.h' (GNU): *Note Getopt Long Options::. + +`struct passwd' + `pwd.h' (POSIX.1): *Note User Data Structure::. + +`struct printf_info' + `printf.h' (GNU): *Note Conversion Specifier Options::. + +`struct protoent' + `netdb.h' (BSD): *Note Protocols Database::. + +`struct random_data' + `stdlib.h' (GNU): *Note BSD Random::. + +`struct rlimit' + `sys/resource.h' (BSD): *Note Limits on Resources::. + +`struct rlimit64' + `sys/resource.h' (Unix98): *Note Limits on Resources::. + +`struct rusage' + `sys/resource.h' (BSD): *Note Resource Usage::. + +`struct sched_param' + `sched.h' (POSIX): *Note Basic Scheduling Functions::. + +`struct servent' + `netdb.h' (BSD): *Note Services Database::. + +`struct sgttyb' + `termios.h' (BSD): *Note BSD Terminal Modes::. + +`struct sigaction' + `signal.h' (POSIX.1): *Note Advanced Signal Handling::. + +`struct sigstack' + `signal.h' (BSD): *Note Signal Stack::. + +`struct sigvec' + `signal.h' (BSD): *Note BSD Handler::. + +`struct sockaddr' + `sys/socket.h' (BSD): *Note Address Formats::. + +`struct sockaddr_in' + `netinet/in.h' (BSD): *Note Internet Address Formats::. + +`struct sockaddr_un' + `sys/un.h' (BSD): *Note Local Namespace Details::. + +`struct stat' + `sys/stat.h' (POSIX.1): *Note Attribute Meanings::. + +`struct stat64' + `sys/stat.h' (LFS): *Note Attribute Meanings::. + +`struct termios' + `termios.h' (POSIX.1): *Note Mode Data Types::. + +`struct timespec' + `sys/time.h' (POSIX.1): *Note Elapsed Time::. + +`struct timeval' + `sys/time.h' (BSD): *Note Elapsed Time::. + +`struct timezone' + `sys/time.h' (BSD): *Note High-Resolution Calendar::. + +`struct tm' + `time.h' (ISO): *Note Broken-down Time::. + +`struct tms' + `sys/times.h' (POSIX.1): *Note Processor Time::. + +`struct utimbuf' + `time.h' (POSIX.1): *Note File Times::. + +`struct utsname' + `sys/utsname.h' (POSIX.1): *Note Platform Type::. + +`int strverscmp (const char *S1, const char *S2)' + `string.h' (GNU): *Note String/Array Comparison::. + +`size_t strxfrm (char *restrict TO, const char *restrict FROM, size_t SIZE)' + `string.h' (ISO): *Note Collation Functions::. + +`int stty (int FILEDES, struct sgttyb * attributes)' + `sgtty.h' (BSD): *Note BSD Terminal Modes::. + +`int S_TYPEISMQ (struct stat *S)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int S_TYPEISSEM (struct stat *S)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int S_TYPEISSHM (struct stat *S)' + `sys/stat.h' (POSIX): *Note Testing File Type::. + +`int SUN_LEN (_struct sockaddr_un *_ PTR)' + `sys/un.h' (BSD): *Note Local Namespace Details::. + +`_SVID_SOURCE' + (GNU): *Note Feature Test Macros::. + +`int SV_INTERRUPT' + `signal.h' (BSD): *Note BSD Handler::. + +`int SV_ONSTACK' + `signal.h' (BSD): *Note BSD Handler::. + +`int SV_RESETHAND' + `signal.h' (Sun): *Note BSD Handler::. + +`int swapcontext (ucontext_t *restrict OUCP, const ucontext_t *restrict UCP)' + `ucontext.h' (SVID): *Note System V contexts::. + +`int swprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, ...)' + `wchar.h' (GNU): *Note Formatted Output Functions::. + +`int swscanf (const wchar_t *WS, const char *TEMPLATE, ...)' + `wchar.h' (ISO): *Note Formatted Input Functions::. + +`int symlink (const char *OLDNAME, const char *NEWNAME)' + `unistd.h' (BSD): *Note Symbolic Links::. + +`SYMLINK_MAX' + `limits.h' (POSIX.1): *Note File Minimums::. + +`int sync (void)' + `unistd.h' (X/Open): *Note Synchronizing I/O::. + +`long int syscall (long int SYSNO, ...)' + `unistd.h' (???): *Note System Calls::. + +`long int sysconf (int PARAMETER)' + `unistd.h' (POSIX.1): *Note Sysconf Definition::. + +`int sysctl (int *NAMES, int NLEN, void *OLDVAL,' + `sysctl.h' (BSD): *Note System Parameters::. + +`void syslog (int FACILITY_PRIORITY, char *FORMAT, ...)' + `syslog.h' (BSD): *Note syslog; vsyslog::. + +`int system (const char *COMMAND)' + `stdlib.h' (ISO): *Note Running a Command::. + +`sighandler_t sysv_signal (int SIGNUM, sighandler_t ACTION)' + `signal.h' (GNU): *Note Basic Signal Handling::. + +`double tan (double X)' + `math.h' (ISO): *Note Trig Functions::. + +`float tanf (float X)' + `math.h' (ISO): *Note Trig Functions::. + +`double tanh (double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`float tanhf (float X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`long double tanhl (long double X)' + `math.h' (ISO): *Note Hyperbolic Functions::. + +`long double tanl (long double X)' + `math.h' (ISO): *Note Trig Functions::. + +`int tcdrain (int FILEDES)' + `termios.h' (POSIX.1): *Note Line Control::. + +`tcflag_t' + `termios.h' (POSIX.1): *Note Mode Data Types::. + +`int tcflow (int FILEDES, int ACTION)' + `termios.h' (POSIX.1): *Note Line Control::. + +`int tcflush (int FILEDES, int QUEUE)' + `termios.h' (POSIX.1): *Note Line Control::. + +`int tcgetattr (int FILEDES, struct termios *TERMIOS-P)' + `termios.h' (POSIX.1): *Note Mode Functions::. + +`pid_t tcgetpgrp (int FILEDES)' + `unistd.h' (POSIX.1): *Note Terminal Access Functions::. + +`pid_t tcgetsid (int FILDES)' + `termios.h' (Unix98): *Note Terminal Access Functions::. + +`TCSADRAIN' + `termios.h' (POSIX.1): *Note Mode Functions::. + +`TCSAFLUSH' + `termios.h' (POSIX.1): *Note Mode Functions::. + +`TCSANOW' + `termios.h' (POSIX.1): *Note Mode Functions::. + +`TCSASOFT' + `termios.h' (BSD): *Note Mode Functions::. + +`int tcsendbreak (int FILEDES, int DURATION)' + `termios.h' (POSIX.1): *Note Line Control::. + +`int tcsetattr (int FILEDES, int WHEN, const struct termios *TERMIOS-P)' + `termios.h' (POSIX.1): *Note Mode Functions::. + +`int tcsetpgrp (int FILEDES, pid_t PGID)' + `unistd.h' (POSIX.1): *Note Terminal Access Functions::. + +`void * tdelete (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)' + `search.h' (SVID): *Note Tree Search Function::. + +`void tdestroy (void *VROOT, __free_fn_t FREEFCT)' + `search.h' (GNU): *Note Tree Search Function::. + +`off_t telldir (DIR *DIRSTREAM)' + `dirent.h' (BSD): *Note Random Access Directory::. + +`TEMP_FAILURE_RETRY (EXPRESSION)' + `unistd.h' (GNU): *Note Interrupted Primitives::. + +`char * tempnam (const char *DIR, const char *PREFIX)' + `stdio.h' (SVID): *Note Temporary Files::. + +`char * textdomain (const char *DOMAINNAME)' + `libintl.h' (GNU): *Note Locating gettext catalog::. + +`void * tfind (const void *KEY, void *const *ROOTP, comparison_fn_t COMPAR)' + `search.h' (SVID): *Note Tree Search Function::. + +`double tgamma (double X)' + `math.h' (XPG, ISO): *Note Special Functions::. + +`float tgammaf (float X)' + `math.h' (XPG, ISO): *Note Special Functions::. + +`long double tgammal (long double X)' + `math.h' (XPG, ISO): *Note Special Functions::. + +`time_t time (time_t *RESULT)' + `time.h' (ISO): *Note Simple Calendar Time::. + +`time_t timegm (struct tm *BROKENTIME)' + `time.h' (???): *Note Broken-down Time::. + +`time_t timelocal (struct tm *BROKENTIME)' + `time.h' (???): *Note Broken-down Time::. + +`clock_t times (struct tms *BUFFER)' + `sys/times.h' (POSIX.1): *Note Processor Time::. + +`time_t' + `time.h' (ISO): *Note Simple Calendar Time::. + +`long int timezone' + `time.h' (SVID): *Note Time Zone Functions::. + +`FILE * tmpfile (void)' + `stdio.h' (ISO): *Note Temporary Files::. + +`FILE * tmpfile64 (void)' + `stdio.h' (Unix98): *Note Temporary Files::. + +`int TMP_MAX' + `stdio.h' (ISO): *Note Temporary Files::. + +`char * tmpnam (char *RESULT)' + `stdio.h' (ISO): *Note Temporary Files::. + +`char * tmpnam_r (char *RESULT)' + `stdio.h' (GNU): *Note Temporary Files::. + +`int toascii (int C)' + `ctype.h' (SVID, BSD): *Note Case Conversion::. + +`int _tolower (int C)' + `ctype.h' (SVID): *Note Case Conversion::. + +`int tolower (int C)' + `ctype.h' (ISO): *Note Case Conversion::. + +`tcflag_t TOSTOP' + `termios.h' (POSIX.1): *Note Local Modes::. + +`int _toupper (int C)' + `ctype.h' (SVID): *Note Case Conversion::. + +`int toupper (int C)' + `ctype.h' (ISO): *Note Case Conversion::. + +`wint_t towctrans (wint_t WC, wctrans_t DESC)' + `wctype.h' (ISO): *Note Wide Character Case Conversion::. + +`wint_t towlower (wint_t WC)' + `wctype.h' (ISO): *Note Wide Character Case Conversion::. + +`wint_t towupper (wint_t WC)' + `wctype.h' (ISO): *Note Wide Character Case Conversion::. + +`double trunc (double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`int truncate (const char *FILENAME, off_t LENGTH)' + `unistd.h' (X/Open): *Note File Size::. + +`int truncate64 (const char *NAME, off64_t LENGTH)' + `unistd.h' (Unix98): *Note File Size::. + +`float truncf (float X)' + `math.h' (ISO): *Note Rounding Functions::. + +`long double truncl (long double X)' + `math.h' (ISO): *Note Rounding Functions::. + +`TRY_AGAIN' + `netdb.h' (BSD): *Note Host Names::. + +`void * tsearch (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)' + `search.h' (SVID): *Note Tree Search Function::. + +`char * ttyname (int FILEDES)' + `unistd.h' (POSIX.1): *Note Is It a Terminal::. + +`int ttyname_r (int FILEDES, char *BUF, size_t LEN)' + `unistd.h' (POSIX.1): *Note Is It a Terminal::. + +`void twalk (const void *ROOT, __action_fn_t ACTION)' + `search.h' (SVID): *Note Tree Search Function::. + +`char * tzname [2]' + `time.h' (POSIX.1): *Note Time Zone Functions::. + +`int TZNAME_MAX' + `limits.h' (POSIX.1): *Note General Limits::. + +`void tzset (void)' + `time.h' (POSIX.1): *Note Time Zone Functions::. + +`UCHAR_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`ucontext_t' + `ucontext.h' (SVID): *Note System V contexts::. + +`uid_t' + `sys/types.h' (POSIX.1): *Note Reading Persona::. + +`UINT_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`int ulimit (int CMD, ...)' + `ulimit.h' (BSD): *Note Limits on Resources::. + +`ULONG_LONG_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`ULONG_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`mode_t umask (mode_t MASK)' + `sys/stat.h' (POSIX.1): *Note Setting Permissions::. + +`int umount (const char *FILE)' + `sys/mount.h' (SVID, GNU): *Note Mount-Unmount-Remount::. + +`int umount2 (const char *FILE, int FLAGS)' + `sys/mount.h' (GNU): *Note Mount-Unmount-Remount::. + +`int uname (struct utsname *INFO)' + `sys/utsname.h' (POSIX.1): *Note Platform Type::. + +`int ungetc (int C, FILE *STREAM)' + `stdio.h' (ISO): *Note How Unread::. + +`wint_t ungetwc (wint_t WC, FILE *STREAM)' + `wchar.h' (ISO): *Note How Unread::. + +`union wait' + `sys/wait.h' (BSD): *Note BSD Wait Functions::. + +`int unlink (const char *FILENAME)' + `unistd.h' (POSIX.1): *Note Deleting Files::. + +`int unlockpt (int FILEDES)' + `stdlib.h' (SVID, XPG4.2): *Note Allocation::. + +`int unsetenv (const char *NAME)' + `stdlib.h' (BSD): *Note Environment Access::. + +`void updwtmp (const char *WTMP_FILE, const struct utmp *UTMP)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`USER_PROCESS' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`USER_PROCESS' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`USHRT_MAX' + `limits.h' (ISO): *Note Range of Type::. + +`int utime (const char *FILENAME, const struct utimbuf *TIMES)' + `time.h' (POSIX.1): *Note File Times::. + +`int utimes (const char *FILENAME, struct timeval TVP[2])' + `sys/time.h' (BSD): *Note File Times::. + +`int utmpname (const char *FILE)' + `utmp.h' (SVID): *Note Manipulating the Database::. + +`int utmpxname (const char *FILE)' + `utmpx.h' (XPG4.2): *Note XPG Functions::. + +`va_alist' + `varargs.h' (Unix): *Note Old Varargs::. + +`TYPE va_arg (va_list AP, TYPE)' + `stdarg.h' (ISO): *Note Argument Macros::. + +`void __va_copy (va_list DEST, va_list SRC)' + `stdarg.h' (GNU): *Note Argument Macros::. + +`va_dcl' + `varargs.h' (Unix): *Note Old Varargs::. + +`void va_end (va_list AP)' + `stdarg.h' (ISO): *Note Argument Macros::. + +`va_list' + `stdarg.h' (ISO): *Note Argument Macros::. + +`void * valloc (size_t SIZE)' + `malloc.h', `stdlib.h' (BSD): *Note Aligned Memory Blocks::. + +`int vasprintf (char **PTR, const char *TEMPLATE, va_list AP)' + `stdio.h' (GNU): *Note Variable Arguments Output::. + +`void va_start (va_list AP)' + `varargs.h' (Unix): *Note Old Varargs::. + +`void va_start (va_list AP, LAST-REQUIRED)' + `stdarg.h' (ISO): *Note Argument Macros::. + +`int VDISCARD' + `termios.h' (BSD): *Note Other Special::. + +`int VDSUSP' + `termios.h' (BSD): *Note Signal Characters::. + +`int VEOF' + `termios.h' (POSIX.1): *Note Editing Characters::. + +`int VEOL' + `termios.h' (POSIX.1): *Note Editing Characters::. + +`int VEOL2' + `termios.h' (BSD): *Note Editing Characters::. + +`int VERASE' + `termios.h' (POSIX.1): *Note Editing Characters::. + +`int versionsort (const void *A, const void *B)' + `dirent.h' (GNU): *Note Scanning Directory Content::. + +`int versionsort64 (const void *A, const void *B)' + `dirent.h' (GNU): *Note Scanning Directory Content::. + +`pid_t vfork (void)' + `unistd.h' (BSD): *Note Creating a Process::. + +`int vfprintf (FILE *STREAM, const char *TEMPLATE, va_list AP)' + `stdio.h' (ISO): *Note Variable Arguments Output::. + +`int vfscanf (FILE *STREAM, const char *TEMPLATE, va_list AP)' + `stdio.h' (ISO): *Note Variable Arguments Input::. + +`int vfwprintf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)' + `wchar.h' (ISO): *Note Variable Arguments Output::. + +`int vfwscanf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)' + `wchar.h' (ISO): *Note Variable Arguments Input::. + +`int VINTR' + `termios.h' (POSIX.1): *Note Signal Characters::. + +`int VKILL' + `termios.h' (POSIX.1): *Note Editing Characters::. + +`int vlimit (int RESOURCE, int LIMIT)' + `sys/vlimit.h' (BSD): *Note Limits on Resources::. + +`int VLNEXT' + `termios.h' (BSD): *Note Other Special::. + +`int VMIN' + `termios.h' (POSIX.1): *Note Noncanonical Input::. + +`int vprintf (const char *TEMPLATE, va_list AP)' + `stdio.h' (ISO): *Note Variable Arguments Output::. + +`int VQUIT' + `termios.h' (POSIX.1): *Note Signal Characters::. + +`int VREPRINT' + `termios.h' (BSD): *Note Editing Characters::. + +`int vscanf (const char *TEMPLATE, va_list AP)' + `stdio.h' (ISO): *Note Variable Arguments Input::. + +`int vsnprintf (char *S, size_t SIZE, const char *TEMPLATE, va_list AP)' + `stdio.h' (GNU): *Note Variable Arguments Output::. + +`int vsprintf (char *S, const char *TEMPLATE, va_list AP)' + `stdio.h' (ISO): *Note Variable Arguments Output::. + +`int vsscanf (const char *S, const char *TEMPLATE, va_list AP)' + `stdio.h' (ISO): *Note Variable Arguments Input::. + +`int VSTART' + `termios.h' (POSIX.1): *Note Start/Stop Characters::. + +`int VSTATUS' + `termios.h' (BSD): *Note Other Special::. + +`int VSTOP' + `termios.h' (POSIX.1): *Note Start/Stop Characters::. + +`int VSUSP' + `termios.h' (POSIX.1): *Note Signal Characters::. + +`int vswprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, va_list AP)' + `wchar.h' (GNU): *Note Variable Arguments Output::. + +`int vswscanf (const wchar_t *S, const wchar_t *TEMPLATE, va_list AP)' + `wchar.h' (ISO): *Note Variable Arguments Input::. + +`void vsyslog (int FACILITY_PRIORITY, char *FORMAT, va_list arglist)' + `syslog.h' (BSD): *Note syslog; vsyslog::. + +`int VTIME' + `termios.h' (POSIX.1): *Note Noncanonical Input::. + +`int vtimes (struct vtimes CURRENT, struct vtimes CHILD)' + `vtimes.h' (vtimes.h): *Note Resource Usage::. + +`int VWERASE' + `termios.h' (BSD): *Note Editing Characters::. + +`int vwprintf (const wchar_t *TEMPLATE, va_list AP)' + `wchar.h' (ISO): *Note Variable Arguments Output::. + +`int vwscanf (const wchar_t *TEMPLATE, va_list AP)' + `wchar.h' (ISO): *Note Variable Arguments Input::. + +`pid_t wait (int *STATUS-PTR)' + `sys/wait.h' (POSIX.1): *Note Process Completion::. + +`pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct rusage *USAGE)' + `sys/wait.h' (BSD): *Note BSD Wait Functions::. + +`pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS, struct rusage *USAGE)' + `sys/wait.h' (BSD): *Note Process Completion::. + +`pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)' + `sys/wait.h' (POSIX.1): *Note Process Completion::. + +`WCHAR_MAX' + `limits.h' (GNU): *Note Range of Type::. + +`wint_t WCHAR_MAX' + `wchar.h' (ISO): *Note Extended Char Intro::. + +`wint_t WCHAR_MIN' + `wchar.h' (ISO): *Note Extended Char Intro::. + +`wchar_t' + `stddef.h' (ISO): *Note Extended Char Intro::. + +`int WCOREDUMP (int STATUS)' + `sys/wait.h' (BSD): *Note Process Completion Status::. + +`wchar_t * wcpcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)' + `wchar.h' (GNU): *Note Copying and Concatenation::. + +`wchar_t * wcpncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' + `wchar.h' (GNU): *Note Copying and Concatenation::. + +`size_t wcrtomb (char *restrict S, wchar_t WC, mbstate_t *restrict PS)' + `wchar.h' (ISO): *Note Converting a Character::. + +`int wcscasecmp (const wchar_t *WS1, const wchar_T *WS2)' + `wchar.h' (GNU): *Note String/Array Comparison::. + +`wchar_t * wcscat (wchar_t *restrict WTO, const wchar_t *restrict WFROM)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`wchar_t * wcschr (const wchar_t *WSTRING, int WC)' + `wchar.h' (ISO): *Note Search Functions::. + +`wchar_t * wcschrnul (const wchar_t *WSTRING, wchar_t WC)' + `wchar.h' (GNU): *Note Search Functions::. + +`int wcscmp (const wchar_t *WS1, const wchar_t *WS2)' + `wchar.h' (ISO): *Note String/Array Comparison::. + +`int wcscoll (const wchar_t *WS1, const wchar_t *WS2)' + `wchar.h' (ISO): *Note Collation Functions::. + +`wchar_t * wcscpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`size_t wcscspn (const wchar_t *WSTRING, const wchar_t *STOPSET)' + `wchar.h' (ISO): *Note Search Functions::. + +`wchar_t * wcsdup (const wchar_t *WS)' + `wchar.h' (GNU): *Note Copying and Concatenation::. + +`size_t wcsftime (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, const struct tm *BROKENTIME)' + `time.h' (ISO/Amend1): *Note Formatting Calendar Time::. + +`size_t wcslen (const wchar_t *WS)' + `wchar.h' (ISO): *Note String Length::. + +`int wcsncasecmp (const wchar_t *WS1, const wchar_t *S2, size_t N)' + `wchar.h' (GNU): *Note String/Array Comparison::. + +`wchar_t * wcsncat (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`int wcsncmp (const wchar_t *WS1, const wchar_t *WS2, size_t SIZE)' + `wchar.h' (ISO): *Note String/Array Comparison::. + +`wchar_t * wcsncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`size_t wcsnlen (const wchar_t *WS, size_t MAXLEN)' + `wchar.h' (GNU): *Note String Length::. + +`size_t wcsnrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t NWC, size_t LEN, mbstate_t *restrict PS)' + `wchar.h' (GNU): *Note Converting Strings::. + +`wchar_t * wcspbrk (const wchar_t *WSTRING, const wchar_t *STOPSET)' + `wchar.h' (ISO): *Note Search Functions::. + +`wchar_t * wcsrchr (const wchar_t *WSTRING, wchar_t C)' + `wchar.h' (ISO): *Note Search Functions::. + +`size_t wcsrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t LEN, mbstate_t *restrict PS)' + `wchar.h' (ISO): *Note Converting Strings::. + +`size_t wcsspn (const wchar_t *WSTRING, const wchar_t *SKIPSET)' + `wchar.h' (ISO): *Note Search Functions::. + +`wchar_t * wcsstr (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)' + `wchar.h' (ISO): *Note Search Functions::. + +`double wcstod (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR)' + `wchar.h' (ISO): *Note Parsing of Floats::. + +`float wcstof (const wchar_t *STRING, wchar_t **TAILPTR)' + `stdlib.h' (ISO): *Note Parsing of Floats::. + +`intmax_t wcstoimax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (ISO): *Note Parsing of Integers::. + +`wchar_t * wcstok (wchar_t *NEWSTRING, const char *DELIMITERS)' + `wchar.h' (ISO): *Note Finding Tokens in a String::. + +`long int wcstol (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (ISO): *Note Parsing of Integers::. + +`long double wcstold (const wchar_t *STRING, wchar_t **TAILPTR)' + `stdlib.h' (ISO): *Note Parsing of Floats::. + +`long long int wcstoll (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (ISO): *Note Parsing of Integers::. + +`size_t wcstombs (char *STRING, const wchar_t *WSTRING, size_t SIZE)' + `stdlib.h' (ISO): *Note Non-reentrant String Conversion::. + +`long long int wcstoq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (GNU): *Note Parsing of Integers::. + +`unsigned long int wcstoul (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (ISO): *Note Parsing of Integers::. + +`unsigned long long int wcstoull (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (ISO): *Note Parsing of Integers::. + +`uintmax_t wcstoumax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (ISO): *Note Parsing of Integers::. + +`unsigned long long int wcstouq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)' + `wchar.h' (GNU): *Note Parsing of Integers::. + +`wchar_t * wcswcs (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)' + `wchar.h' (XPG): *Note Search Functions::. + +`size_t wcsxfrm (wchar_t *restrict WTO, const wchar_t *WFROM, size_t SIZE)' + `wchar.h' (ISO): *Note Collation Functions::. + +`int wctob (wint_t C)' + `wchar.h' (ISO): *Note Converting a Character::. + +`int wctomb (char *STRING, wchar_t WCHAR)' + `stdlib.h' (ISO): *Note Non-reentrant Character Conversion::. + +`wctrans_t wctrans (const char *PROPERTY)' + `wctype.h' (ISO): *Note Wide Character Case Conversion::. + +`wctrans_t' + `wctype.h' (ISO): *Note Wide Character Case Conversion::. + +`wctype_t wctype (const char *PROPERTY)' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`wctype_t' + `wctype.h' (ISO): *Note Classification of Wide Characters::. + +`int WEOF' + `wchar.h' (ISO): *Note EOF and Errors::. + +`wint_t WEOF' + `wchar.h' (ISO): *Note Extended Char Intro::. + +`int WEXITSTATUS (int STATUS)' + `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +`int WIFEXITED (int STATUS)' + `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +`int WIFSIGNALED (int STATUS)' + `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +`int WIFSTOPPED (int STATUS)' + `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +`wint_t' + `wchar.h' (ISO): *Note Extended Char Intro::. + +`wchar_t * wmemchr (const wchar_t *BLOCK, wchar_t WC, size_t SIZE)' + `wchar.h' (ISO): *Note Search Functions::. + +`int wmemcmp (const wchar_t *A1, const wchar_t *A2, size_t SIZE)' + `wcjar.h' (ISO): *Note String/Array Comparison::. + +`wchar_t * wmemcpy (wchar_t *restrict WTO, const wchar_t *restruct WFROM, size_t SIZE)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`wchar_t * wmemmove (wchar *WTO, const wchar_t *WFROM, size_t SIZE)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`wchar_t * wmempcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)' + `wchar.h' (GNU): *Note Copying and Concatenation::. + +`wchar_t * wmemset (wchar_t *BLOCK, wchar_t WC, size_t SIZE)' + `wchar.h' (ISO): *Note Copying and Concatenation::. + +`int W_OK' + `unistd.h' (POSIX.1): *Note Testing File Access::. + +`int wordexp (const char *WORDS, wordexp_t *WORD-VECTOR-PTR, int FLAGS)' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`wordexp_t' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`void wordfree (wordexp_t *WORD-VECTOR-PTR)' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`int wprintf (const wchar_t *TEMPLATE, ...)' + `wchar.h' (ISO): *Note Formatted Output Functions::. + +`WRDE_APPEND' + `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + +`WRDE_BADCHAR' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`WRDE_BADVAL' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`WRDE_CMDSUB' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`WRDE_DOOFFS' + `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + +`WRDE_NOCMD' + `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + +`WRDE_NOSPACE' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`WRDE_REUSE' + `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + +`WRDE_SHOWERR' + `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + +`WRDE_SYNTAX' + `wordexp.h' (POSIX.2): *Note Calling Wordexp::. + +`WRDE_UNDEF' + `wordexp.h' (POSIX.2): *Note Flags for Wordexp::. + +`ssize_t write (int FILEDES, const void *BUFFER, size_t SIZE)' + `unistd.h' (POSIX.1): *Note I/O Primitives::. + +`ssize_t writev (int FILEDES, const struct iovec *VECTOR, int COUNT)' + `sys/uio.h' (BSD): *Note Scatter-Gather::. + +`int wscanf (const wchar_t *TEMPLATE, ...)' + `wchar.h' (ISO): *Note Formatted Input Functions::. + +`int WSTOPSIG (int STATUS)' + `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +`int WTERMSIG (int STATUS)' + `sys/wait.h' (POSIX.1): *Note Process Completion Status::. + +`int X_OK' + `unistd.h' (POSIX.1): *Note Testing File Access::. + +`_XOPEN_SOURCE' + (X/Open): *Note Feature Test Macros::. + +`_XOPEN_SOURCE_EXTENDED' + (X/Open): *Note Feature Test Macros::. + +`double y0 (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float y0f (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double y0l (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`double y1 (double X)' + `math.h' (SVID): *Note Special Functions::. + +`float y1f (float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double y1l (long double X)' + `math.h' (SVID): *Note Special Functions::. + +`double yn (int n, double X)' + `math.h' (SVID): *Note Special Functions::. + +`float ynf (int n, float X)' + `math.h' (SVID): *Note Special Functions::. + +`long double ynl (int n, long double X)' + `math.h' (SVID): *Note Special Functions::. diff -durpNa glibc-2.2.2/manual/libc.info-52 glibc-2.2.3/manual/libc.info-52 --- glibc-2.2.2/manual/libc.info-52 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-52 Wed Apr 25 14:55:23 2001 @@ -31,884 +31,996 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Contributors, Next: Copying, Prev: Maintenance, Up: Top +File: libc.info, Node: Installation, Next: Maintenance, Prev: Library Summary, Up: Top -Contributors to the GNU C Library -********************************* +Installing the GNU C Library +**************************** - The GNU C library was written originally by Roland McGrath, and is -currently maintained by Ulrich Drepper. Some parts of the library were -contributed or worked on by other people. + Before you do anything else, you should read the file `FAQ' found at +the top level of the source tree. This file answers common questions +and describes problems you may experience with compilation and +installation. It is updated more frequently than this manual. - * The `getopt' function and related code was written by Richard - Stallman, David J. MacKenzie, and Roland McGrath. + Features can be added to GNU Libc via "add-on" bundles. These are +separate tarfiles which you unpack into the top level of the source +tree. Then you give `configure' the `--enable-add-ons' option to +activate them, and they will be compiled into the library. As of the +2.2 release, one important component of glibc is distributed as +"official" add-ons: the linuxthreads add-on. Unless you are doing an +unusual installation, you should get this. - * The merge sort function `qsort' was written by Michael J. Haertel. + Support for POSIX threads is maintained by someone else, so it's in a +separate package. It is only available for Linux systems, but this will +change in the future. Get it from the same place you got the main +bundle; the file is `glibc-linuxthreads-VERSION.tar.gz'. - * The quick sort function used as a fallback by `qsort' was written - by Douglas C. Schmidt. + You will need recent versions of several GNU tools: definitely GCC +and GNU Make, and possibly others. *Note Tools for Compilation::, +below. - * The memory allocation functions `malloc', `realloc' and `free' and - related code were written by Michael J. Haertel, Wolfram Gloger, - and Doug Lea. +* Menu: - * Fast implementations of many of the string functions (`memcpy', - `strlen', etc.) were written by Torbjo"rn Granlund. +* Configuring and compiling:: How to compile and test GNU libc. +* Running make install:: How to install it once you've got it compiled. +* Tools for Compilation:: You'll need these first. +* Supported Configurations:: What it runs on, what it doesn't. +* Linux:: Specific advice for Linux systems. +* Reporting Bugs:: So they'll get fixed. - * The `tar.h' header file was written by David J. MacKenzie. + +File: libc.info, Node: Configuring and compiling, Next: Running make install, Up: Installation - * The port to the MIPS DECStation running Ultrix 4 - (`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian - Lance Taylor. +Configuring and compiling GNU Libc +================================== - * The DES encryption function `crypt' and related functions were - contributed by Michael Glad. + GNU libc can be compiled in the source directory, but we strongly +advise to build it in a separate build directory. For example, if you +have unpacked the glibc sources in `/src/gnu/glibc-2.2.0', create a +directory `/src/gnu/glibc-build' to put the object files in. This +allows removing the whole build directory in case an error occurs, +which is the safest way to get a fresh start and should always be done. - * The `ftw' and `nftw' functions were contributed by Ulrich Drepper. + From your object directory, run the shell script `configure' found +at the top level of the source tree. In the scenario above, you'd type - * The startup code to support SunOS shared libraries was contributed - by Tom Quinn. + $ ../glibc-2.2.0/configure ARGS... - * The `mktime' function was contributed by Paul Eggert. + Please note that even if you're building in a separate build +directory, the compilation needs to modify a few files in the source +directory, especially some files in the manual subdirectory. - * The port to the Sequent Symmetry running Dynix version 3 - (`i386-sequent-bsd') was contributed by Jason Merrill. +`configure' takes many options, but you can get away with knowing only +two: `--prefix' and `--enable-add-ons'. The `--prefix' option tells +configure where you want glibc installed. This defaults to +`/usr/local'. The `--enable-add-ons' option tells configure to use all +the add-on bundles it finds in the source directory. Since important +functionality is provided in add-ons, you should always specify this +option. - * The timezone support code is derived from the public-domain - timezone package by Arthur David Olson and his many contributors. + It may also be useful to set the CC and CFLAGS variables in the +environment when running `configure'. CC selects the C compiler that +will be used, and CFLAGS sets optimization options for the compiler. - * The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was - contributed by Brendan Kehoe, using some code written by Roland - McGrath. + The following list describes all of the available options for +`configure': - * The port to SGI machines running Irix 4 (`mips-sgi-irix4') was - contributed by Tom Quinn. +`--prefix=DIRECTORY' + Install machine-independent data files in subdirectories of + `DIRECTORY'. The default is to install in `/usr/local'. - * The port of the Mach and Hurd code to the MIPS architecture - (`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima. +`--exec-prefix=DIRECTORY' + Install the library and other machine-dependent files in + subdirectories of `DIRECTORY'. The default is to the `--prefix' + directory if that option is specified, or `/usr/local' otherwise. - * The floating-point printing function used by `printf' and friends - and the floating-point reading function used by `scanf', `strtod' - and friends were written by Ulrich Drepper. The multi-precision - integer functions used in those functions are taken from GNU MP, - which was contributed by Torbjo"rn Granlund. +`--with-headers=DIRECTORY' + Look for kernel header files in DIRECTORY, not `/usr/include'. + Glibc needs information from the kernel's private header files. + It will normally look in `/usr/include' for them, but if you + specify this option, it will look in DIRECTORY instead. - * The internationalization support in the library, and the support - programs `locale' and `localedef', were written by Ulrich Drepper. - Ulrich Drepper adapted the support code for message catalogs - (`libintl.h', etc.) from the GNU `gettext' package, which he also - wrote. He also contributed the `catgets' support and the entire - suite of multi-byte and wide-character support functions - (`wctype.h', `wchar.h', etc.). + This option is primarily of use on a system where the headers in + `/usr/include' come from an older version of glibc. Conflicts can + occasionally happen in this case. Note that Linux libc5 qualifies + as an older version of glibc. You can also use this option if you + want to compile glibc with a newer set of kernel headers than the + ones found in `/usr/include'. - * The implementations of the `nsswitch.conf' mechanism and the files - and DNS backends for it were designed and written by Ulrich - Drepper and Roland McGrath, based on a backend interface defined - by Peter Eriksson. +`--enable-add-ons[=LIST]' + Enable add-on packages in your source tree. If this option is + specified with no list, it enables all the add-on packages it + finds. If you do not wish to use some add-on package that you + have present in your source tree, give this option a list of the + add-ons that you _do_ want used, like this: + `--enable-add-ons=linuxthreads' - * The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed - by Ulrich Drepper, based in large part on work done in Hongjiu - Lu's Linux version of the GNU C Library. +`--enable-kernel=VERSION' + This option is currently only useful on Linux systems. The + VERSION parameter should have the form X.Y.Z and describes the + smallest version of the Linux kernel the generated library is + expected to support. The higher the VERSION number is, the less + compatibility code is added, and the faster the code gets. - * The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by - Andreas Schwab. +`--with-binutils=DIRECTORY' + Use the binutils (assembler and linker) in `DIRECTORY', not the + ones the C compiler would default to. You could use this option if + the default binutils on your system cannot deal with all the + constructs in the GNU C library. In that case, `configure' will + detect the problem and suppress these constructs, so that the + library will still be usable, but functionality may be lost--for + example, you can't build a shared libc with old binutils. - * The ports to Linux/ARM (`arm-ANYTHING-linuxaout') and ARM - standalone (`arm-ANYTHING-none'), as well as parts of the IPv6 - support code, were contributed by Philip Blundell. +`--without-fp' + Use this option if your computer lacks hardware floating-point + support and your operating system does not emulate an FPU. - * Richard Henderson contributed the ELF dynamic linking code and - other support for the Alpha processor. +`--disable-shared' + Don't build shared libraries even if it is possible. Not all + systems support shared libraries; you need ELF support and + (currently) the GNU linker. - * David Mosberger-Tang contributed the port to Linux/Alpha - (`alpha-ANYTHING-linux'). +`--disable-profile' + Don't build libraries with profiling information. You may want to + use this option if you don't plan to do profiling. - * The port to Linux on PowerPC (`powerpc-ANYTHING-linux') was - contributed by Geoffrey Keating. +`--enable-omitfp' + Use maximum optimization for the normal (static and shared) + libraries, and compile separate static libraries with debugging + information and no optimisation. We recommend against this. The + extra optimization doesn't gain you much, it may provoke compiler + bugs, and you won't be able to trace bugs through the C library. - * Miles Bader wrote the argp argument-parsing package, and the - argz/envz interfaces. +`--disable-versioning' + Don't compile the shared libraries with symbol version information. + Doing this will make the resulting library incompatible with old + binaries, so it's not recommended. - * Stephen R. van den Berg contributed a highly-optimized `strstr' - function. +`--enable-static-nss' + Compile static versions of the NSS (Name Service Switch) libraries. + This is not recommended because it defeats the purpose of NSS; a + program linked statically with the NSS libraries cannot be + dynamically reconfigured to use a different name database. - * Ulrich Drepper contributed the `hsearch' and `drand48' families of - functions; reentrant `...`_r'' versions of the `random' family; - System V shared memory and IPC support code; and several - highly-optimized string functions for iX86 processors. +`--build=BUILD-SYSTEM' +`--host=HOST-SYSTEM' + These options are for cross-compiling. If you specify both + options and BUILD-SYSTEM is different from HOST-SYSTEM, `configure' + will prepare to cross-compile glibc from BUILD-SYSTEM to be used + on HOST-SYSTEM. You'll probably need the `--with-headers' option + too, and you may have to override CONFIGURE's selection of the + compiler and/or binutils. - * The math functions are taken from `fdlibm-5.1' by Sun - Microsystems, as modified by J.T. Conklin, Ian Lance Taylor, - Ulrich Drepper, Andreas Schwab, and Roland McGrath. + If you only specify `--host', configure will prepare for a native + compile but use what you specify instead of guessing what your + system is. This is most useful to change the CPU submodel. For + example, if configure guesses your machine as `i586-pc-linux-gnu' + but you want to compile a library for 386es, give + `--host=i386-pc-linux-gnu' or just `--host=i386-linux' and add the + appropriate compiler flags (`-mcpu=i386' will do the trick) to + CFLAGS. - * The `libio' library used to implement `stdio' functions on some - platforms was written by Per Bothner and modified by Ulrich - Drepper. + If you specify just `--build', configure will get confused. - * Eric Youngdale and Ulrich Drepper implemented versioning of - objects on symbol level. + To build the library and related programs, type `make'. This will +produce a lot of output, some of which may look like errors from `make' +but isn't. Look for error messages from `make' containing `***'. +Those indicate that something is really wrong. - * Thorsten Kukuk provided an implementation for NIS (YP) and NIS+, - securelevel 0, 1 and 2. + The compilation process takes several hours even on fast hardware. +Expect at least two hours for the default configuration on i586 for +Linux. For Hurd times are much longer. Except for EGCS 1.1 and GCC +2.95 (and later versions of GCC), all supported versions of GCC have a +problem which causes them to take several minutes to compile certain +files in the iconvdata directory. Do not panic if the compiler appears +to hang. - * Andreas Jaeger provided a test suite for the math library. + If you want to run a parallel make, you can't just give `make' the +`-j' option, because it won't be passed down to the sub-makes. +Instead, edit the generated `Makefile' and uncomment the line - * Mark Kettenis implemented the utmpx interface and an utmp daemon. + # PARALLELMFLAGS = -j 4 - * Ulrich Drepper added character conversion functions (`iconv'). +You can change the `4' to some other number as appropriate for your +system. Instead of changing the `Makefile', you could give this option +directly to `make' and call it as, for example, `make +PARALLELMFLAGS=-j4'. If you're building in the source directory, you +must use the latter approach since in this case no new `Makefile' is +generated for you to change. - * Thorsten Kukuk provided an implementation for a caching daemon for - NSS (nscd). + To build and run test programs which exercise some of the library +facilities, type `make check'. If it does not complete successfully, +do not use the built library, and report a bug after verifying that the +problem is not already known. *Note Reporting Bugs::, for instructions +on reporting bugs. Note that some of the tests assume they are not +being run by `root'. We recommend you compile and test glibc as an +unprivileged user. - * Tim Waugh provided an implementation of the POSIX.2 wordexp - function family. + To format the `GNU C Library Reference Manual' for printing, type +`make dvi'. You need a working TeX installation to do this. The +distribution already includes the on-line formatted version of the +manual, as Info files. You can regenerate those with `make info', but +it shouldn't be necessary. - * Mark Kettenis provided a Hesiod NSS module. + The library has a number of special-purpose configuration parameters +which you can find in `Makeconfig'. These can be overwritten with the +file `configparms'. To change them, create a `configparms' in your +build directory and add values as appropriate for your system. The +file is included and parsed by `make' and has to follow the conventions +for makefiles. - * The Internet-related code (most of the `inet' subdirectory) and - several other miscellaneous functions and header files have been - included from 4.4 BSD with little or no modification. + It is easy to configure the GNU C library for cross-compilation by +setting a few variables in `configparms'. Set `CC' to the +cross-compiler for the target you configured the library for; it is +important to use this same `CC' value when running `configure', like +this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler +to use for for programs run on the build system as part of compiling +the library. You may need to set `AR' and `RANLIB' to cross-compiling +versions of `ar' and `ranlib' if the native tools are not configured to +work with object files for the target you configured for. - All code incorporated from 4.4 BSD is under the following - copyright: + +File: libc.info, Node: Running make install, Next: Tools for Compilation, Prev: Configuring and compiling, Up: Installation - Copyright (C) 1991 Regents of the University of California. - All rights reserved. +Installing the C Library +======================== - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: + To install the library and its header files, and the Info files of +the manual, type `env LANGUAGE=C LC_ALL=C make install'. This will +build things if necessary, before installing them. However, you should +still compile everything first. If you are installing glibc as your +primary C library, we recommend that you shut the system down to +single-user mode first, and reboot afterward. This minimizes the risk +of breaking things when the library changes out from underneath. - 1. Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. + If you're upgrading from Linux libc5 or some other C library, you +need to replace the `/usr/include' with a fresh directory before +installing it. The new `/usr/include' should contain the Linux +headers, but nothing else. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. + You must first build the library (`make'), optionally check it +(`make check'), switch the include directories and then install (`make +install'). The steps must be done in this order. Not moving the +directory before install will result in an unusable mixture of header +files from both libraries, but configuring, building, and checking the +library requires the ability to compile and run programs against the old +library. - 3. [This condition was removed.] + If you are upgrading from a previous installation of glibc 2.0 or +2.1, `make install' will do the entire job. You do not need to remove +the old includes - if you want to do so anyway you must then follow the +order given above. - 4. Neither the name of the University nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. + You may also need to reconfigure GCC to work with the new library. +The easiest way to do that is to figure out the compiler switches to +make it work again (`-Wl,--dynamic-linker=/lib/ld-linux.so.2' should +work on Linux systems) and use them to recompile gcc. You can also +edit the specs file (`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that +is a bit of a black art. - THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. + You can install glibc somewhere other than where you configured it +to go by setting the `install_root' variable on the command line for +`make install'. The value of this variable is prepended to all the +paths for installation. This is useful when setting up a chroot +environment or preparing a binary distribution. The directory should be +specified with an absolute file name. - * The random number generation functions `random', `srandom', - `setstate' and `initstate', which are also the basis for the - `rand' and `srand' functions, were written by Earl T. Cohen for - the University of California at Berkeley and are copyrighted by the - Regents of the University of California. They have undergone minor - changes to fit into the GNU C library and to fit the ISO C - standard, but the functional code is Berkeley's. + Glibc 2.2 includes a daemon called `nscd', which you may or may not +want to run. `nscd' caches name service lookups; it can dramatically +improve performance with NIS+, and may help with DNS as well. - * The DNS resolver code is taken directly from BIND 4.9.5, which is - under both the Berkeley copyright above and also: + One auxiliary program, `/usr/libexec/pt_chown', is installed setuid +`root'. This program is invoked by the `grantpt' function; it sets the +permissions on a pseudoterminal so it can be used by the calling +process. This means programs like `xterm' and `screen' do not have to +be setuid to get a pty. (There may be other reasons why they need +privileges.) If you are using a 2.1 or newer Linux kernel with the +`devptsfs' or `devfs' filesystems providing pty slaves, you don't need +this program; otherwise you do. The source for `pt_chown' is in +`login/programs/pt_chown.c'. - Portions Copyright (C) 1993 by Digital Equipment Corporation. + After installation you might want to configure the timezone and +locale installation of your system. The GNU C library comes with a +locale database which gets configured with `localedef'. For example, to +set up a German locale with name `de_DE', simply issue the command +`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales +that are supported by glibc, you can issue from your build directory the +command `make localedata/install-locales'. - Permission to use, copy, modify, and distribute this software - for any purpose with or without fee is hereby granted, - provided that the above copyright notice and this permission - notice appear in all copies, and that the name of Digital - Equipment Corporation not be used in advertising or publicity - pertaining to distribution of the document or software - without specific, written prior permission. + To configure the locally used timezone, you can either set the `TZ' +environment variable. The script `tzselect' helps you to select the +right value. As an example for Germany, tzselect would tell you to use +`TZ='Europe/Berlin''. For a system wide installation (the given paths +are for an installation with `--prefix=/usr'), link the timezone file +which is in `/usr/share/zoneinfo' to the file `/etc/localtime'. For +Germany, you might execute `ln -s /usr/share/zoneinfo/Europe/Berlin +/etc/localtime'. - THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT CORPORATION BE - LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +File: libc.info, Node: Tools for Compilation, Next: Supported Configurations, Prev: Running make install, Up: Installation - * The code to support Sun RPC is taken verbatim from Sun's - RPCSRC-4.0 distribution, and is covered by this copyright: +Recommended Tools for Compilation +================================= - Copyright (C) 1984, Sun Microsystems, Inc. + We recommend installing the following GNU tools before attempting to +build the GNU C library: - Sun RPC is a product of Sun Microsystems, Inc. and is - provided for unrestricted use provided that this legend is - included on all tape media and as a part of the software - program in whole or part. Users may copy or modify Sun RPC - without charge, but are not authorized to license or - distribute it to anyone else except as part of a product or - program developed by the user. + * GNU `make' 3.79 or newer - SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND - INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND - FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF - DEALING, USAGE OR TRADE PRACTICE. + You need the latest version of GNU `make'. Modifying the GNU C + Library to work with other `make' programs would be so difficult + that we recommend you port GNU `make' instead. *Really.* We + recommend version GNU `make' version 3.79. All earlier versions + have severe bugs or lack features. - Sun RPC is provided with no support and without any - obligation on the part of Sun Microsystems, Inc. to assist in - its use, correction, modification or enhancement. + * GCC 2.95 or newer - SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT - TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY - PATENTS BY SUN RPC OR ANY PART THEREOF. + The GNU C library can only be compiled with the GNU C compiler + family. As of the 2.2 release, GCC 2.95.2 or higher is required. + As of this writing, GCC 2.95.3 is the compiler we advise to use. - In no event will Sun Microsystems, Inc. be liable for any - lost revenue or profits or other special, indirect and - consequential damages, even if Sun has been advised of the - possibility of such damages. + You can use whatever compiler you like to compile programs that + use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in + their floating-point support that may be triggered by the math + library. - Sun Microsystems, Inc. - 2550 Garcia Avenue - Mountain View, California 94043 + For PPC you might need some patches even on top of the last GCC + version. See the FAQ. - * Some of the support code for Mach is taken from Mach 3.0 by CMU, - and is under the following copyright terms: + * GNU `binutils' 2.10.1 or later - Mach Operating System - Copyright (C) 1991,1990,1989 Carnegie Mellon University - All Rights Reserved. + You must use GNU binutils (as and ld) if you want to build a shared + library. Even if you don't, we recommend you use them anyway. No + one has tested compilation with non-GNU binutils in a long time. - Permission to use, copy, modify and distribute this software - and its documentation is hereby granted, provided that both - the copyright notice and this permission notice appear in all - copies of the software, derivative works or modified - versions, and any portions thereof, and that both notices - appear in supporting documentation. + The quality of binutils releases has varied a bit recently. The + bugs are in obscure features, but glibc uses quite a few of those. + 2.10.1 and later releases are known to work. Versions after + 2.8.1.0.23 may or may not work. Older versions definitely don't. - CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS - IS" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF - ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF - THIS SOFTWARE. + For PPC you might need some patches even on top of the last + binutils version. See the FAQ. - Carnegie Mellon requests users of this software to return to + * GNU `texinfo' 3.12f - Software Distribution Coordinator - School of Computer Science - Carnegie Mellon University - Pittsburgh PA 15213-3890 + To correctly translate and install the Texinfo documentation you + need this version of the `texinfo' package. Earlier versions do + not understand all the tags used in the document, and the + installation mechanism for the info files is not present or works + differently. - or any improvements or - extensions that they make and grant Carnegie Mellon the - rights to redistribute these changes. + * GNU `awk' 3.0, or some other POSIX awk - * The code for the database library `libdb' comes from the 2.3 - release of Berkeley DB. That code is under the same copyright as - 4.4 BSD and also: + Awk is used in several places to generate files. The scripts + should work with any POSIX-compliant awk implementation; `gawk' + 3.0 and `mawk' 1.3 are known to work. - Copyright (C) 1990, 1993, 1994, 1995, 1996, 1997 - Sleepycat Software. All rights reserved. + * Perl 5 - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: + Perl is not required, but it is used if present to test the + installation. We may decide to use it elsewhere in the future. - 1. Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. + * GNU `sed' 3.02 or newer - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. + Sed is used in several places to generate files. Most scripts + work with any version of `sed'. The known exception is the script + `po2test.sed' in the `intl' subdirectory which is used to generate + `msgs.h' for the testsuite. This script works correctly only with + GNU `sed' 3.02. If you like to run the testsuite, you should + definitely upgrade `sed'. - 3. Redistributions in any form must be accompanied by - information on how to obtain complete source code for - the DB software and any accompanying software that uses - the DB software. The source code must either be - included in the distribution or be available for no more - than the cost of distribution plus a nominal fee, and - must be freely redistributable under reasonable - conditions. For an executable file, complete source - code means the source code for all modules it contains. - It does not mean source code for modules or files that - typically accompany the operating system on which the - executable file runs, e.g., standard library modules or - system header files. - THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - SLEEPYCAT SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - DAMAGE. +If you change any of the `configure.in' files you will also need - Portions copyright (C) 1995, 1996 - The President and Fellows of Harvard University. - All rights reserved. + * GNU `autoconf' 2.12 or higher - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: - 1. Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. +and if you change any of the message translation files you will need - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. + * GNU `gettext' 0.10.36 or later - 3. All advertising materials mentioning features or use of - this software must display the following acknowledgement: - This product includes software developed by - Harvard University and its contributors. +You may also need these packages if you upgrade your source tree using +patches, although we try to avoid this. - 4. Neither the name of the University nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. + +File: libc.info, Node: Supported Configurations, Next: Linux, Prev: Tools for Compilation, Up: Installation - THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. +Supported Configurations +======================== - For a license to use, redistribute or sell DB software under - conditions other than those described above, or to purchase - support for this software, please contact Sleepycat Software - at + The GNU C Library currently supports configurations that match the +following patterns: - Sleepycat Software - 394 E. Riding Dr. - Carlisle, MA 01741 - USA - +1-508-287-4781 + alpha*-*-linux + arm-*-linux + cris-*-linux + hppa-*-linux + iX86-*-gnu + iX86-*-linux + ia64-*-linux + m68k-*-linux + mips*-*-linux + powerpc-*-linux + s390-*-linux + s390x-*-linux + sparc-*-linux + sparc64-*-linux - or . + Former releases of this library (version 2.1 and/or 2.0) used to run +on the following configurations: + + arm-*-linuxaout + arm-*-none + + Very early releases (version 1.09.1 and perhaps earlier versions) +used to run on the following configurations: + + alpha-dec-osf1 + alpha-*-linuxecoff + iX86-*-bsd4.3 + iX86-*-isc2.2 + iX86-*-isc3.N + iX86-*-sco3.2 + iX86-*-sco3.2v4 + iX86-*-sysv + iX86-*-sysv4 + iX86-force_cpu386-none + iX86-sequent-bsd + i960-nindy960-none + m68k-hp-bsd4.3 + m68k-mvme135-none + m68k-mvme136-none + m68k-sony-newsos3 + m68k-sony-newsos4 + m68k-sun-sunos4.N + mips-dec-ultrix4.N + mips-sgi-irix4.N + sparc-sun-solaris2.N + sparc-sun-sunos4.N + Since no one has volunteered to test and fix these configurations, +they are not supported at the moment. They probably don't compile; +they definitely don't work anymore. Porting the library is not hard. +If you are interested in doing a port, please contact the glibc +maintainers by sending electronic mail to . + Valid cases of `iX86' include `i386', `i486', `i586', and `i686'. +All of those configurations produce a library that can run on this +processor and newer processors. The GCC compiler by default generates +code that's optimized for the machine it's configured for and will use +the instructions available on that machine. For example if your GCC is +configured for `i686', gcc will optimize for `i686' and might issue +some `i686' specific instructions. To generate code for other models, +you have to configure for that model and give GCC the appropriate +`-march=' and `-mcpu=' compiler switches via CFLAGS.  -File: libc.info, Node: Copying, Next: Concept Index, Prev: Contributors, Up: Top +File: libc.info, Node: Linux, Next: Reporting Bugs, Prev: Supported Configurations, Up: Installation -GNU LIBRARY GENERAL PUBLIC LICENSE -********************************** +Specific advice for Linux systems +================================= - Version 2, June 1991 + If you are installing GNU libc on a Linux system, you need to have +the header files from a 2.2 kernel around for reference. You do not +need to use the 2.2 kernel, just have its headers where glibc can access +at them. The easiest way to do this is to unpack it in a directory +such as `/usr/src/linux-2.2.1'. In that directory, run `make config' +and accept all the defaults. Then run `make include/linux/version.h'. +Finally, configure glibc with the option +`--with-headers=/usr/src/linux-2.2.1/include'. Use the most recent +kernel you can get your hands on. - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - [This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] + An alternate tactic is to unpack the 2.2 kernel and run `make +config' as above. Then rename or delete `/usr/include', create a new +`/usr/include', and make the usual symbolic links of +`/usr/include/linux' and `/usr/include/asm' into the 2.2 kernel +sources. You can then configure glibc with no special options. This +tactic is recommended if you are upgrading from libc5, since you need +to get rid of the old header files anyway. -Preamble -======== + Note that `/usr/include/net' and `/usr/include/scsi' should *not* be +symlinks into the kernel sources. GNU libc provides its own versions +of these files. - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. + Linux expects some components of the libc installation to be in +`/lib' and some in `/usr/lib'. This is handled automatically if you +configure glibc with `--prefix=/usr'. If you set some other prefix or +allow it to default to `/usr/local', then all the components are +installed there. - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. + If you are upgrading from libc5, you need to recompile every shared +library on your system against the new library for the sake of new code, +but keep the old libraries around for old binaries to use. This is +complicated and difficult. Consult the Glibc2 HOWTO at + for details. - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it in -new free programs; and that you know you can do these things. + You cannot use `nscd' with 2.0 kernels, due to bugs in the +kernel-side thread support. `nscd' happens to hit these bugs +particularly hard, but you might have problems with any threaded +program. - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the library, or if you modify it. + +File: libc.info, Node: Reporting Bugs, Prev: Linux, Up: Installation - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. +Reporting Bugs +============== - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. + There are probably bugs in the GNU C library. There are certainly +errors and omissions in this manual. If you report them, they will get +fixed. If you don't, no one will ever know about them and they will +remain unfixed for all eternity, if not longer. - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. + It is a good idea to verify that the problem has not already been +reported. Bugs are documented in two places: The file `BUGS' describes +a number of well known bugs and the bug tracking system has a WWW +interface at . The +WWW interface gives you access to open and closed reports. The closed +reports normally include a patch or a hint on solving the problem. - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. + To report a bug, first you must find it. Hopefully, this will be the +hard part. Once you've found a bug, make sure it's really a bug. A +good way to do this is to see if the GNU C library behaves the same way +some other C library does. If so, probably you are wrong and the +libraries are right (but not necessarily). If not, one of the libraries +is probably wrong. It might not be the GNU library. Many historical +Unix C libraries permit things that we don't, such as closing a file +twice. - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License, which was designed for utility -programs. This license, the GNU Library General Public License, -applies to certain designated libraries. This license is quite -different from the ordinary one; be sure to read it in full, and don't -assume that anything in it is the same as in the ordinary license. + If you think you have found some way in which the GNU C library does +not conform to the ISO and POSIX standards (*note Standards and +Portability::), that is definitely a bug. Report it! - The reason we have a separate public license for some libraries is -that they blur the distinction we usually make between modifying or -adding to a program and simply using it. Linking a program with a -library, without changing the library, is in some sense simply using -the library, and is analogous to running a utility program or -application program. However, in a textual and legal sense, the linked -executable is a combined work, a derivative of the original library, -and the ordinary General Public License treats it as such. + Once you're sure you've found a bug, try to narrow it down to the +smallest test case that reproduces the problem. In the case of a C +library, you really only need to narrow it down to one library function +call, if possible. This should not be too difficult. - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. + The final step when you have a simple test case is to report the bug. +Do this using the `glibcbug' script. It is installed with libc, or if +you haven't installed it, will be in your build directory. Send your +test case, the results you got, the results you expected, and what you +think the problem might be (if you've thought of anything). `glibcbug' +will insert the configuration information we need to see, and ship the +report off to . Don't send a message there directly; it +is fed to a program that expects mail to be formatted in a particular +way. Use the script. - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended -to permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to -achieve this as regards changes in header files, but we have achieved -it as regards changes in the actual functions of the Library.) The -hope is that this will lead to faster development of free libraries. + If you are not sure how a function should behave, and this manual +doesn't tell you, that's a bug in the manual. Report that too! If the +function's behavior disagrees with the manual, then either the library +or the manual has a bug, so report the disagreement. If you find any +errors or omissions in this manual, please report them to the Internet +address . If you refer to specific sections +of the manual, please include the section names for easier +identification. - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. + +File: libc.info, Node: Maintenance, Next: Contributors, Prev: Installation, Up: Top - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. +Library Maintenance +******************* - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +* Menu: - 0. This License Agreement applies to any software library which - contains a notice placed by the copyright holder or other - authorized party saying it may be distributed under the terms of - this Library General Public License (also called "this License"). - Each licensee is addressed as "you". +* Source Layout:: How to add new functions or header files + to the GNU C library. +* Porting:: How to port the GNU C library to + a new machine or operating system. - A "library" means a collection of software functions and/or data - prepared so as to be conveniently linked with application programs - (which use some of those functions and data) to form executables. + +File: libc.info, Node: Source Layout, Next: Porting, Up: Maintenance - The "Library", below, refers to any such software library or work - which has been distributed under these terms. A "work based on the - Library" means either the Library or any derivative work under - copyright law: that is to say, a work containing the Library or a - portion of it, either verbatim or with modifications and/or - translated straightforwardly into another language. (Hereinafter, - translation is included without limitation in the term - "modification".) +Adding New Functions +==================== - "Source code" for a work means the preferred form of the work for - making modifications to it. For a library, complete source code - means all the source code for all modules it contains, plus any - associated interface definition files, plus the scripts used to - control compilation and installation of the library. + The process of building the library is driven by the makefiles, which +make heavy use of special features of GNU `make'. The makefiles are +very complex, and you probably don't want to try to understand them. +But what they do is fairly straightforward, and only requires that you +define a few variables in the right places. - Activities other than copying, distribution and modification are - not covered by this License; they are outside its scope. The act - of running a program using the Library is not restricted, and - output from such a program is covered only if its contents - constitute a work based on the Library (independent of the use of - the Library in a tool for writing it). Whether that is true - depends on what the Library does and what the program that uses - the Library does. + The library sources are divided into subdirectories, grouped by +topic. - 1. You may copy and distribute verbatim copies of the Library's - complete source code as you receive it, in any medium, provided - that you conspicuously and appropriately publish on each copy an - appropriate copyright notice and disclaimer of warranty; keep - intact all the notices that refer to this License and to the - absence of any warranty; and distribute a copy of this License - along with the Library. + The `string' subdirectory has all the string-manipulation functions, +`math' has all the mathematical functions, etc. - You may charge a fee for the physical act of transferring a copy, - and you may at your option offer warranty protection in exchange - for a fee. + Each subdirectory contains a simple makefile, called `Makefile', +which defines a few `make' variables and then includes the global +makefile `Rules' with a line like: - 2. You may modify your copy or copies of the Library or any portion - of it, thus forming a work based on the Library, and copy and - distribute such modifications or work under the terms of Section 1 - above, provided that you also meet all of these conditions: + include ../Rules - a. The modified work must itself be a software library. +The basic variables that a subdirectory makefile defines are: - b. You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. +`subdir' + The name of the subdirectory, for example `stdio'. This variable + *must* be defined. - c. You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. +`headers' + The names of the header files in this section of the library, such + as `stdio.h'. - d. If a facility in the modified Library refers to a function or - a table of data to be supplied by an application program that - uses the facility, other than as an argument passed when the - facility is invoked, then you must make a good faith effort - to ensure that, in the event an application does not supply - such function or table, the facility still operates, and - performs whatever part of its purpose remains meaningful. +`routines' +`aux' + The names of the modules (source files) in this section of the + library. These should be simple names, such as `strlen' (rather + than complete file names, such as `strlen.c'). Use `routines' for + modules that define functions in the library, and `aux' for + auxiliary modules containing things like data definitions. But the + values of `routines' and `aux' are just concatenated, so there + really is no practical difference. - (For example, a function in a library to compute square roots - has a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function - must be optional: if the application does not supply it, the - square root function must still compute square roots.) +`tests' + The names of test programs for this section of the library. These + should be simple names, such as `tester' (rather than complete file + names, such as `tester.c'). `make tests' will build and run all + the test programs. If a test program needs input, put the test + data in a file called `TEST-PROGRAM.input'; it will be given to + the test program on its standard input. If a test program wants + to be run with arguments, put the arguments (all on a single line) + in a file called `TEST-PROGRAM.args'. Test programs should exit + with zero status when the test passes, and nonzero status when the + test indicates a bug in the library or error in building. - These requirements apply to the modified work as a whole. If - identifiable sections of that work are not derived from the - Library, and can be reasonably considered independent and separate - works in themselves, then this License, and its terms, do not - apply to those sections when you distribute them as separate - works. But when you distribute the same sections as part of a - whole which is a work based on the Library, the distribution of - the whole must be on the terms of this License, whose permissions - for other licensees extend to the entire whole, and thus to each - and every part regardless of who wrote it. +`others' + The names of "other" programs associated with this section of the + library. These are programs which are not tests per se, but are + other small programs included with the library. They are built by + `make others'. - Thus, it is not the intent of this section to claim rights or - contest your rights to work written entirely by you; rather, the - intent is to exercise the right to control the distribution of - derivative or collective works based on the Library. +`install-lib' +`install-data' +`install' + Files to be installed by `make install'. Files listed in + `install-lib' are installed in the directory specified by `libdir' + in `configparms' or `Makeconfig' (*note Installation::). Files + listed in `install-data' are installed in the directory specified + by `datadir' in `configparms' or `Makeconfig'. Files listed in + `install' are installed in the directory specified by `bindir' in + `configparms' or `Makeconfig'. - In addition, mere aggregation of another work not based on the - Library with the Library (or with a work based on the Library) on - a volume of a storage or distribution medium does not bring the - other work under the scope of this License. +`distribute' + Other files from this subdirectory which should be put into a + distribution tar file. You need not list here the makefile itself + or the source and header files listed in the other standard + variables. Only define `distribute' if there are files used in an + unusual way that should go into the distribution. - 3. You may opt to apply the terms of the ordinary GNU General Public - License instead of this License to a given copy of the Library. - To do this, you must alter all the notices that refer to this - License, so that they refer to the ordinary GNU General Public - License, version 2, instead of to this License. (If a newer - version than version 2 of the ordinary GNU General Public License - has appeared, then you can specify that version instead if you - wish.) Do not make any other change in these notices. +`generated' + Files which are generated by `Makefile' in this subdirectory. + These files will be removed by `make clean', and they will never + go into a distribution. - Once this change is made in a given copy, it is irreversible for - that copy, so the ordinary GNU General Public License applies to - all subsequent copies and derivative works made from that copy. +`extra-objs' + Extra object files which are built by `Makefile' in this + subdirectory. This should be a list of file names like `foo.o'; + the files will actually be found in whatever directory object + files are being built in. These files will be removed by + `make clean'. This variable is used for secondary object files + needed to build `others' or `tests'. - This option is useful when you wish to copy part of the code of - the Library into a program that is not a library. + +File: libc.info, Node: Porting, Prev: Source Layout, Up: Maintenance - 4. You may copy and distribute the Library (or a portion or - derivative of it, under Section 2) in object code or executable - form under the terms of Sections 1 and 2 above provided that you - accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software - interchange. +Porting the GNU C Library +========================= - If distribution of object code is made by offering access to copy - from a designated place, then offering equivalent access to copy - the source code from the same place satisfies the requirement to - distribute the source code, even though third parties are not - compelled to copy the source along with the object code. + The GNU C library is written to be easily portable to a variety of +machines and operating systems. Machine- and operating system-dependent +functions are well separated to make it easy to add implementations for +new machines or operating systems. This section describes the layout of +the library source tree and explains the mechanisms used to select +machine-dependent code to use. - 5. A program that contains no derivative of any portion of the - Library, but is designed to work with the Library by being - compiled or linked with it, is called a "work that uses the - Library". Such a work, in isolation, is not a derivative work of - the Library, and therefore falls outside the scope of this License. + All the machine-dependent and operating system-dependent files in the +library are in the subdirectory `sysdeps' under the top-level library +source directory. This directory contains a hierarchy of +subdirectories (*note Hierarchy Conventions::). - However, linking a "work that uses the Library" with the Library - creates an executable that is a derivative of the Library (because - it contains portions of the Library), rather than a "work that - uses the library". The executable is therefore covered by this - License. Section 6 states terms for distribution of such - executables. + Each subdirectory of `sysdeps' contains source files for a +particular machine or operating system, or for a class of machine or +operating system (for example, systems by a particular vendor, or all +machines that use IEEE 754 floating-point format). A configuration +specifies an ordered list of these subdirectories. Each subdirectory +implicitly appends its parent directory to the list. For example, +specifying the list `unix/bsd/vax' is equivalent to specifying the list +`unix/bsd/vax unix/bsd unix'. A subdirectory can also specify that it +implies other subdirectories which are not directly above it in the +directory hierarchy. If the file `Implies' exists in a subdirectory, +it lists other subdirectories of `sysdeps' which are appended to the +list, appearing after the subdirectory containing the `Implies' file. +Lines in an `Implies' file that begin with a `#' character are ignored +as comments. For example, `unix/bsd/Implies' contains: + # BSD has Internet-related things. + unix/inet - When a "work that uses the Library" uses material from a header - file that is part of the Library, the object code for the work may - be a derivative work of the Library even though the source code is - not. Whether this is true is especially significant if the work - can be linked without the Library, or if the work is itself a - library. The threshold for this to be true is not precisely - defined by law. +and `unix/Implies' contains: + posix - If such an object file uses only numerical parameters, data - structure layouts and accessors, and small macros and small inline - functions (ten lines or less in length), then the use of the object - file is unrestricted, regardless of whether it is legally a - derivative work. (Executables containing this object code plus - portions of the Library will still fall under Section 6.) +So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'. - Otherwise, if the work is a derivative of the Library, you may - distribute the object code for the work under the terms of Section - 6. Any executables containing that work also fall under Section 6, - whether or not they are linked directly with the Library itself. + `sysdeps' has a "special" subdirectory called `generic'. It is +always implicitly appended to the list of subdirectories, so you +needn't put it in an `Implies' file, and you should not create any +subdirectories under it intended to be new specific categories. +`generic' serves two purposes. First, the makefiles do not bother to +look for a system-dependent version of a file that's not in `generic'. +This means that any system-dependent source file must have an analogue +in `generic', even if the routines defined by that file are not +implemented on other platforms. Second. the `generic' version of a +system-dependent file is used if the makefiles do not find a version +specific to the system you're compiling for. - 6. As an exception to the Sections above, you may also compile or - link a "work that uses the Library" with the Library to produce a - work containing portions of the Library, and distribute that work - under terms of your choice, provided that the terms permit - modification of the work for the customer's own use and reverse - engineering for debugging such modifications. + If it is possible to implement the routines in a `generic' file in +machine-independent C, using only other machine-independent functions in +the C library, then you should do so. Otherwise, make them stubs. A +"stub" function is a function which cannot be implemented on a +particular machine or operating system. Stub functions always return an +error, and set `errno' to `ENOSYS' (Function not implemented). *Note +Error Reporting::. If you define a stub function, you must place the +statement `stub_warning(FUNCTION)', where FUNCTION is the name of your +function, after its definition; also, you must include the file +`' into your file. This causes the function to be listed +in the installed `', and makes GNU ld warn when the +function is used. - You must give prominent notice with each copy of the work that the - Library is used in it and that the Library and its use are covered - by this License. You must supply a copy of this License. If the - work during execution displays copyright notices, you must include - the copyright notice for the Library among them, as well as a - reference directing the user to the copy of this License. Also, - you must do one of these things: + Some rare functions are only useful on specific systems and aren't +defined at all on others; these do not appear anywhere in the +system-independent source code or makefiles (including the `generic' +directory), only in the system-dependent `Makefile' in the specific +system's subdirectory. - a. Accompany the work with the complete corresponding - machine-readable source code for the Library including - whatever changes were used in the work (which must be - distributed under Sections 1 and 2 above); and, if the work - is an executable linked with the Library, with the complete - machine-readable "work that uses the Library", as object code - and/or source code, so that the user can modify the Library - and then relink to produce a modified executable containing - the modified Library. (It is understood that the user who - changes the contents of definitions files in the Library will - not necessarily be able to recompile the application to use - the modified definitions.) + If you come across a file that is in one of the main source +directories (`string', `stdio', etc.), and you want to write a machine- +or operating system-dependent version of it, move the file into +`sysdeps/generic' and write your new implementation in the appropriate +system-specific subdirectory. Note that if a file is to be +system-dependent, it *must not* appear in one of the main source +directories. - b. Accompany the work with a written offer, valid for at least - three years, to give the same user the materials specified in - Subsection 6a, above, for a charge no more than the cost of - performing this distribution. + There are a few special files that may exist in each subdirectory of +`sysdeps': - c. If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the - above specified materials from the same place. +`Makefile' + A makefile for this machine or operating system, or class of + machine or operating system. This file is included by the library + makefile `Makerules', which is used by the top-level makefile and + the subdirectory makefiles. It can change the variables set in the + including makefile or add new rules. It can use GNU `make' + conditional directives based on the variable `subdir' (see above) + to select different sets of variables and rules for different + sections of the library. It can also set the `make' variable + `sysdep-routines', to specify extra modules to be included in the + library. You should use `sysdep-routines' rather than adding + modules to `routines' because the latter is used in determining + what to distribute for each subdirectory of the main source tree. - d. Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. + Each makefile in a subdirectory in the ordered list of + subdirectories to be searched is included in order. Since several + system-dependent makefiles may be included, each should append to + `sysdep-routines' rather than simply setting it: - For an executable, the required form of the "work that uses the - Library" must include any data and utility programs needed for - reproducing the executable from it. However, as a special - exception, the source code distributed need not include anything - that is normally distributed (in either source or binary form) - with the major components (compiler, kernel, and so on) of the - operating system on which the executable runs, unless that - component itself accompanies the executable. + sysdep-routines := $(sysdep-routines) foo bar - It may happen that this requirement contradicts the license - restrictions of other proprietary libraries that do not normally - accompany the operating system. Such a contradiction means you - cannot use both them and the Library together in an executable - that you distribute. +`Subdirs' + This file contains the names of new whole subdirectories under the + top-level library source tree that should be included for this + system. These subdirectories are treated just like the + system-independent subdirectories in the library source tree, such + as `stdio' and `math'. - 7. You may place library facilities that are a work based on the - Library side-by-side in a single library together with other - library facilities not covered by this License, and distribute - such a combined library, provided that the separate distribution - of the work based on the Library and of the other library - facilities is otherwise permitted, and provided that you do these - two things: + Use this when there are completely new sets of functions and header + files that should go into the library for the system this + subdirectory of `sysdeps' implements. For example, + `sysdeps/unix/inet/Subdirs' contains `inet'; the `inet' directory + contains various network-oriented operations which only make sense + to put in the library on systems that support the Internet. - a. Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. +`Dist' + This file contains the names of files (relative to the + subdirectory of `sysdeps' in which it appears) which should be + included in the distribution. List any new files used by rules in + the `Makefile' in the same directory, or header files used by the + source files in that directory. You don't need to list files that + are implementations (either C or assembly source) of routines + whose names are given in the machine-independent makefiles in the + main source tree. - b. Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same - work. +`configure' + This file is a shell script fragment to be run at configuration + time. The top-level `configure' script uses the shell `.' command + to read the `configure' file in each system-dependent directory + chosen, in order. The `configure' files are often generated from + `configure.in' files using Autoconf. - 8. You may not copy, modify, sublicense, link with, or distribute the - Library except as expressly provided under this License. Any - attempt otherwise to copy, modify, sublicense, link with, or - distribute the Library is void, and will automatically terminate - your rights under this License. However, parties who have - received copies, or rights, from you under this License will not - have their licenses terminated so long as such parties remain in - full compliance. + A system-dependent `configure' script will usually add things to + the shell variables `DEFS' and `config_vars'; see the top-level + `configure' script for details. The script can check for + `--with-PACKAGE' options that were passed to the top-level + `configure'. For an option `--with-PACKAGE=VALUE' `configure' + sets the shell variable `with_PACKAGE' (with any dashes in PACKAGE + converted to underscores) to VALUE; if the option is just + `--with-PACKAGE' (no argument), then it sets `with_PACKAGE' to + `yes'. - 9. You are not required to accept this License, since you have not - signed it. However, nothing else grants you permission to modify - or distribute the Library or its derivative works. These actions - are prohibited by law if you do not accept this License. - Therefore, by modifying or distributing the Library (or any work - based on the Library), you indicate your acceptance of this - License to do so, and all its terms and conditions for copying, - distributing or modifying the Library or works based on it. +`configure.in' + This file is an Autoconf input fragment to be processed into the + file `configure' in this subdirectory. *Note Introduction: + (autoconf.info)Introduction, for a description of Autoconf. You + should write either `configure' or `configure.in', but not both. + The first line of `configure.in' should invoke the `m4' macro + `GLIBC_PROVIDES'. This macro does several `AC_PROVIDE' calls for + Autoconf macros which are used by the top-level `configure' + script; without this, those macros might be invoked again + unnecessarily by Autoconf. - 10. Each time you redistribute the Library (or any work based on the - Library), the recipient automatically receives a license from the - original licensor to copy, distribute, link with or modify the - Library subject to these terms and conditions. You may not impose - any further restrictions on the recipients' exercise of the rights - granted herein. You are not responsible for enforcing compliance - by third parties to this License. + That is the general system for how system-dependencies are isolated. - 11. If, as a consequence of a court judgment or allegation of patent - infringement or for any other reason (not limited to patent - issues), conditions are imposed on you (whether by court order, - agreement or otherwise) that contradict the conditions of this - License, they do not excuse you from the conditions of this - License. If you cannot distribute so as to satisfy simultaneously - your obligations under this License and any other pertinent - obligations, then as a consequence you may not distribute the - Library at all. For example, if a patent license would not permit - royalty-free redistribution of the Library by all those who - receive copies directly or indirectly through you, then the only - way you could satisfy both it and this License would be to refrain - entirely from distribution of the Library. +* Menu: - If any portion of this section is held invalid or unenforceable - under any particular circumstance, the balance of the section is - intended to apply, and the section as a whole is intended to apply - in other circumstances. +* Hierarchy Conventions:: The layout of the `sysdeps' hierarchy. +* Porting to Unix:: Porting the library to an average + Unix-like system. - It is not the purpose of this section to induce you to infringe any - patents or other property right claims or to contest validity of - any such claims; this section has the sole purpose of protecting - the integrity of the free software distribution system which is - implemented by public license practices. Many people have made - generous contributions to the wide range of software distributed - through that system in reliance on consistent application of that - system; it is up to the author/donor to decide if he or she is - willing to distribute software through any other system and a - licensee cannot impose that choice. + +File: libc.info, Node: Hierarchy Conventions, Next: Porting to Unix, Up: Porting - This section is intended to make thoroughly clear what is believed - to be a consequence of the rest of this License. +Layout of the `sysdeps' Directory Hierarchy +------------------------------------------- - 12. If the distribution and/or use of the Library is restricted in - certain countries either by patents or by copyrighted interfaces, - the original copyright holder who places the Library under this - License may add an explicit geographical distribution limitation - excluding those countries, so that distribution is permitted only - in or among countries not thus excluded. In such case, this - License incorporates the limitation as if written in the body of - this License. + A GNU configuration name has three parts: the CPU type, the +manufacturer's name, and the operating system. `configure' uses these +to pick the list of system-dependent directories to look for. If the +`--nfp' option is _not_ passed to `configure', the directory +`MACHINE/fpu' is also used. The operating system often has a "base +operating system"; for example, if the operating system is `Linux', the +base operating system is `unix/sysv'. The algorithm used to pick the +list of directories is simple: `configure' makes a list of the base +operating system, manufacturer, CPU type, and operating system, in that +order. It then concatenates all these together with slashes in +between, to produce a directory name; for example, the configuration +`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'. `configure' +then tries removing each element of the list in turn, so +`unix/sysv/linux' and `unix/sysv' are also tried, among others. Since +the precise version number of the operating system is often not +important, and it would be very inconvenient, for example, to have +identical `irix6.2' and `irix6.3' directories, `configure' tries +successively less specific operating system names by removing trailing +suffixes starting with a period. - 13. The Free Software Foundation may publish revised and/or new - versions of the Library General Public License from time to time. - Such new versions will be similar in spirit to the present version, - but may differ in detail to address new problems or concerns. + As an example, here is the complete list of directories that would be +tried for the configuration `i686-linux-gnu' (with the `crypt' and +`linuxthreads' add-on): - Each version is given a distinguishing version number. If the - Library specifies a version number of this License which applies - to it and "any later version", you have the option of following - the terms and conditions either of that version or of any later - version published by the Free Software Foundation. If the Library - does not specify a license version number, you may choose any - version ever published by the Free Software Foundation. + sysdeps/i386/elf + crypt/sysdeps/unix + linuxthreads/sysdeps/unix/sysv/linux + linuxthreads/sysdeps/pthread + linuxthreads/sysdeps/unix/sysv + linuxthreads/sysdeps/unix + linuxthreads/sysdeps/i386/i686 + linuxthreads/sysdeps/i386 + linuxthreads/sysdeps/pthread/no-cmpxchg + sysdeps/unix/sysv/linux/i386 + sysdeps/unix/sysv/linux + sysdeps/gnu + sysdeps/unix/common + sysdeps/unix/mman + sysdeps/unix/inet + sysdeps/unix/sysv/i386/i686 + sysdeps/unix/sysv/i386 + sysdeps/unix/sysv + sysdeps/unix/i386 + sysdeps/unix + sysdeps/posix + sysdeps/i386/i686 + sysdeps/i386/i486 + sysdeps/libm-i387/i686 + sysdeps/i386/fpu + sysdeps/libm-i387 + sysdeps/i386 + sysdeps/wordsize-32 + sysdeps/ieee754 + sysdeps/libm-ieee754 + sysdeps/generic - 14. If you wish to incorporate parts of the Library into other free - programs whose distribution conditions are incompatible with these, - write to the author to ask for permission. For software which is - copyrighted by the Free Software Foundation, write to the Free - Software Foundation; we sometimes make exceptions for this. Our - decision will be guided by the two goals of preserving the free - status of all derivatives of our free software and of promoting - the sharing and reuse of software generally. + Different machine architectures are conventionally subdirectories at +the top level of the `sysdeps' directory tree. For example, +`sysdeps/sparc' and `sysdeps/m68k'. These contain files specific to +those machine architectures, but not specific to any particular +operating system. There might be subdirectories for specializations of +those architectures, such as `sysdeps/m68k/68020'. Code which is +specific to the floating-point coprocessor used with a particular +machine should go in `sysdeps/MACHINE/fpu'. - NO WARRANTY + There are a few directories at the top level of the `sysdeps' +hierarchy that are not for particular machine architectures. - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO - WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE - LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT - HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT - NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE - QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE - LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY - SERVICING, REPAIR OR CORRECTION. +`generic' + As described above (*note Porting::), this is the subdirectory + that every configuration implicitly uses after all others. - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY - MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE - LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, - INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR - INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU - OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY - OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +`ieee754' + This directory is for code using the IEEE 754 floating-point + format, where the C type `float' is IEEE 754 single-precision + format, and `double' is IEEE 754 double-precision format. Usually + this directory is referred to in the `Implies' file in a machine + architecture-specific directory, such as `m68k/Implies'. - END OF TERMS AND CONDITIONS +`libm-ieee754' + This directory contains an implementation of a mathematical library + usable on platforms which use IEEE 754 conformant floating-point + arithmetic. -How to Apply These Terms to Your New Libraries -============================================== +`libm-i387' + This is a special case. Ideally the code should be in + `sysdeps/i386/fpu' but for various reasons it is kept aside. - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of -the ordinary General Public License). +`posix' + This directory contains implementations of things in the library in + terms of POSIX.1 functions. This includes some of the POSIX.1 + functions themselves. Of course, POSIX.1 cannot be completely + implemented in terms of itself, so a configuration using just + `posix' cannot be complete. - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should have -at least the "copyright" line and a pointer to where the full notice is -found. +`unix' + This is the directory for Unix-like things. *Note Porting to + Unix::. `unix' implies `posix'. There are some special-purpose + subdirectories of `unix': - ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES. - Copyright (C) YEAR NAME OF AUTHOR - - This 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. - - This 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 General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + `unix/common' + This directory is for things common to both BSD and System V + release 4. Both `unix/bsd' and `unix/sysv/sysv4' imply + `unix/common'. - Also add information on how to contact you by electronic and paper -mail. + `unix/inet' + This directory is for `socket' and related functions on Unix + systems. `unix/inet/Subdirs' enables the `inet' top-level + subdirectory. `unix/common' implies `unix/inet'. - You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the library, -if necessary. Here is a sample; alter the names: +`mach' + This is the directory for things based on the Mach microkernel + from CMU (including the GNU operating system). Other basic + operating systems (VMS, for example) would have their own + directories at the top level of the `sysdeps' hierarchy, parallel + to `unix' and `mach'. - Yoyodyne, Inc., hereby disclaims all copyright interest in the library - `Frob' (a library for tweaking knobs) written by James Random Hacker. - - SIGNATURE OF TY COON, 1 April 1990 - Ty Coon, President of Vice + +File: libc.info, Node: Porting to Unix, Prev: Hierarchy Conventions, Up: Porting - That's all there is to it! +Porting the GNU C Library to Unix Systems +----------------------------------------- + + Most Unix systems are fundamentally very similar. There are +variations between different machines, and variations in what +facilities are provided by the kernel. But the interface to the +operating system facilities is, for the most part, pretty uniform and +simple. + + The code for Unix systems is in the directory `unix', at the top +level of the `sysdeps' hierarchy. This directory contains +subdirectories (and subdirectory trees) for various Unix variants. + + The functions which are system calls in most Unix systems are +implemented in assembly code, which is generated automatically from +specifications in files named `syscalls.list'. There are several such +files, one in `sysdeps/unix' and others in its subdirectories. Some +special system calls are implemented in files that are named with a +suffix of `.S'; for example, `_exit.S'. Files ending in `.S' are run +through the C preprocessor before being fed to the assembler. + + These files all use a set of macros that should be defined in +`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines +them; a `sysdep.h' file in another directory must finish defining them +for the particular machine and operating system variant. See +`sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h' +implementations to see what these macros are and what they should do. + + The system-specific makefile for the `unix' directory +(`sysdeps/unix/Makefile') gives rules to generate several files from +the Unix system you are building the library on (which is assumed to be +the target system you are building the library _for_). All the +generated files are put in the directory where the object files are +kept; they should not affect the source tree itself. The files +generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c' +(for the `stdio' section of the library). diff -durpNa glibc-2.2.2/manual/libc.info-53 glibc-2.2.3/manual/libc.info-53 --- glibc-2.2.2/manual/libc.info-53 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-53 Wed Apr 25 14:55:23 2001 @@ -31,1050 +31,884 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Concept Index, Next: Type Index, Prev: Copying, Up: Top +File: libc.info, Node: Contributors, Next: Copying, Prev: Maintenance, Up: Top -Concept Index -************* +Contributors to the GNU C Library +********************************* -* Menu: + The GNU C library was written originally by Roland McGrath, and is +currently maintained by Ulrich Drepper. Some parts of the library were +contributed or worked on by other people. -* /etc/hostname: Host Identification. -* /etc/nsswitch.conf: NSS Configuration File. -* 4.N BSD Unix: Berkeley Unix. -* __va_copy: Copying and Concatenation. -* _POSIX_OPTION_ORDER environment variable.: Standard Environment. -* _POSIX_SAVED_IDS: How Change Persona. -* abort signal: Program Error Signals. -* aborting a program: Aborting a Program. -* absolute file name: File Name Resolution. -* absolute priority: Absolute Priority. -* absolute value functions: Absolute Value. -* accepting connections: Accepting Connections. -* access permission for a file: Access Permission. -* access, testing for: Testing File Access. -* accessing directories: Accessing Directories. -* address of socket: Socket Addresses. -* address space <1>: Program Basics. -* address space: Memory Subsystem. -* alarm signal: Alarm Signals. -* alarms, setting: Setting an Alarm. -* alignment (in obstacks): Obstacks Data Alignment. -* alignment (with malloc): Aligned Memory Blocks. -* alloca disadvantages: Disadvantages of Alloca. -* alloca function: Variable Size Automatic. -* allocating pseudo-terminals: Allocation. -* allocation (obstacks): Allocation in an Obstack. -* allocation debugging: Allocation Debugging. -* allocation hooks, for malloc: Hooks for Malloc. -* allocation of memory with malloc: Basic Allocation. -* allocation size of string: Representation of Strings. -* allocation statistics: Statistics of Malloc. -* alphabetic character <1>: Classification of Wide Characters. -* alphabetic character: Classification of Characters. -* alphanumeric character <1>: Classification of Wide Characters. -* alphanumeric character: Classification of Characters. -* append-access files: File Position. -* argc (program argument count): Program Arguments. -* argp (program argument parser): Argp. -* argp parser functions: Argp Parser Functions. -* ARGP_HELP_FMT environment variable: Argp User Customization. -* argument parsing with argp: Argp. -* argument promotion: Calling Variadics. -* argument vectors, null-character separated: Argz and Envz Vectors. -* arguments (variadic functions): Receiving Arguments. -* arguments, how many: How Many Arguments. -* arguments, to program: Program Arguments. -* argv (program argument vector): Program Arguments. -* argz vectors (string vectors): Argz and Envz Vectors. -* arithmetic expansion: Expansion Stages. -* array comparison functions: String/Array Comparison. -* array copy functions: Copying and Concatenation. -* array search function: Array Search Function. -* array sort function: Array Sort Function. -* ASCII character: Classification of Characters. -* assertions: Consistency Checking. -* attributes of a file: Attribute Meanings. -* automatic freeing: Variable Size Automatic. -* automatic memory allocation: Memory Allocation and C. -* automatic storage class: Memory Allocation and C. -* automatic storage with variable size: Variable Size Automatic. -* background job: Concepts of Job Control. -* background job, launching: Foreground and Background. -* backtrace: Backtraces. -* backtrace_fd: Backtraces. -* backtrace_symbols: Backtraces. -* base (of floating point number): Floating Point Concepts. -* baud rate: Line Speed. -* Berkeley Unix: Berkeley Unix. -* Bessel functions: Special Functions. -* bias (of floating point number exponent): Floating Point Concepts. -* big-endian: Byte Order. -* binary I/O to a stream: Block Input/Output. -* binary search function (for arrays): Array Search Function. -* binary stream: Binary Streams. -* binding a socket address: Socket Addresses. -* blank character <1>: Classification of Wide Characters. -* blank character: Classification of Characters. -* block I/O to a stream: Block Input/Output. -* blocked signals: Delivery of Signal. -* blocked signals, checking for: Checking for Pending Signals. -* blocking signals: Blocking Signals. -* blocking signals, in a handler: Blocking for Handler. -* bootstrapping, and services: Actions in the NSS configuration. -* break condition, detecting: Input Modes. -* break condition, generating: Line Control. -* breaking a string into tokens: Finding Tokens in a String. -* broken pipe signal: Operation Error Signals. -* broken-down time <1>: Broken-down Time. -* broken-down time: Calendar Time. -* BSD compatibility library: Process Group Functions. -* BSD compatibility library.: Feature Test Macros. -* BSD Unix: Berkeley Unix. -* buffering of streams: Stream Buffering. -* buffering, controlling: Controlling Buffering. -* bugs, reporting: Reporting Bugs. -* bus error: Program Error Signals. -* butterfly: Misc FP Arithmetic. -* byte order conversion, for socket: Byte Order. -* byte stream: Socket Concepts. -* C++ streams: Streams and I18N. -* calendar time: Time Basics. -* calendar time and broken-down time: Broken-down Time. -* calendar, Gregorian: Calendar Time. -* calling variadic functions: Calling Variadics. -* canonical input processing: Canonical or Not. -* capacity limits, POSIX: General Limits. -* carrier detect: Control Modes. -* case conversion of characters: Case Conversion. -* catching signals: Delivery of Signal. -* categories for locales: Locale Categories. -* change working directory: Working Directory. -* changing the locale: Setting the Locale. -* changing the size of a block (malloc): Changing Block Size. -* changing the size of a block (obstacks): Growing Objects. -* channels: Stream/Descriptor Precautions. -* character case conversion: Case Conversion. -* character predicates: Classification of Characters. -* character testing: Classification of Characters. -* checking for pending signals: Checking for Pending Signals. -* child process <1>: Process Creation Concepts. -* child process <2>: Processes. -* child process: Processor Time. -* child process signal: Job Control Signals. -* chunks: Obstack Chunks. -* classes, floating-point: Floating Point Classes. -* classification of characters: Classification of Characters. -* cleaning up a stream: Linked Channels. -* clearing terminal input queue: Line Control. -* client: Connections. -* clock ticks: Processor And CPU Time. -* clock, high accuracy: High Accuracy Clock. -* close-on-exec (file descriptor flag): Descriptor Flags. -* closing a file descriptor: Opening and Closing Files. -* closing a socket: Closing a Socket. -* closing a stream: Closing Streams. -* collating strings: Collation Functions. -* combining locales: Choosing Locale. -* command argument syntax: Argument Syntax. -* command arguments, parsing: Parsing Program Arguments. -* command line arguments: Program Arguments. -* command substitution: Expansion Stages. -* communication style (of a socket): Socket Concepts. -* comparing strings and arrays: String/Array Comparison. -* Comparison Function: Comparison Functions. -* compiling: Configuring and compiling. -* complex exponentiation functions: Exponents and Logarithms. -* complex logarithm functions: Exponents and Logarithms. -* complex numbers: Complex Numbers. -* complex trigonometric functions: Trig Functions. -* concatenating strings: Copying and Concatenation. -* configurations, all supported: Supported Configurations. -* configuring: Configuring and compiling. -* conjugate complex numbers: Operations on Complex. -* connecting a socket: Connecting. -* connection: Connections. -* consistency checking: Consistency Checking. -* consistency checking, of heap: Heap Consistency Checking. -* constants <1>: Mathematical Constants. -* constants: Memory Concepts. -* continue signal: Job Control Signals. -* control character <1>: Classification of Wide Characters. -* control character: Classification of Characters. -* control operations on files: Control Operations. -* controlling process: Controlling Terminal. -* controlling terminal: Concepts of Job Control. -* controlling terminal, access to: Access to the Terminal. -* controlling terminal, determining: Identifying the Terminal. -* controlling terminal, setting: Open-time Flags. -* conversion specifications (printf): Formatted Output Basics. -* conversion specifications (scanf): Formatted Input Basics. -* converting byte order: Byte Order. -* converting case of characters: Case Conversion. -* converting file descriptor to stream: Descriptors and Streams. -* converting floats to integers: Rounding Functions. -* converting group ID to group name: Lookup Group. -* converting group name to group ID: Lookup Group. -* converting host address to name: Host Names. -* converting host name to address: Host Names. -* converting network name to network number: Networks Database. -* converting network number to network name: Networks Database. -* converting port number to service name: Services Database. -* converting service name to port number: Services Database. -* converting string to collation order: Collation Functions. -* converting strings to numbers: Parsing of Numbers. -* converting user ID to user name: Lookup User. -* converting user name to user ID: Lookup User. -* cookie, for custom stream: Streams and Cookies. -* copy-on-write page fault: Locked Memory Details. -* copying strings and arrays: Copying and Concatenation. -* cpu priority: Priority. -* CPU time <1>: Processor Time. -* CPU time <2>: Processor And CPU Time. -* CPU time: Time Basics. -* create on open (file status flag): Open-time Flags. -* creating a directory: Creating Directories. -* creating a FIFO special file: FIFO Special Files. -* creating a pipe: Creating a Pipe. -* creating a pipe to a subprocess: Pipe to a Subprocess. -* creating a process: Process Creation Concepts. -* creating a socket: Creating a Socket. -* creating a socket pair: Socket Pairs. -* creating special files: Making Special Files. -* cube root function: Exponents and Logarithms. -* currency symbols: Currency Symbol. -* current limit: Limits on Resources. -* current working directory: Working Directory. -* custom streams: Custom Streams. -* customizing printf: Customizing Printf. -* data loss on sockets: Socket Concepts. -* databases: Name Service Switch. -* datagram socket: Datagrams. -* datagrams, transmitting: Sending Datagrams. -* date: Time Basics. -* Daylight Saving Time: Broken-down Time. -* decimal digit character: Classification of Characters. -* decimal-point separator: General Numeric. -* declaration (compared to definition): Header Files. -* declaring variadic functions: Calling Variadics. -* decompose complex numbers: Operations on Complex. -* default action (for a signal): Delivery of Signal. -* default action for a signal: Basic Signal Handling. -* default argument promotions: Calling Variadics. -* default value, and NSS: Notes on NSS Configuration File. -* defining new printf conversions: Customizing Printf. -* definition (compared to declaration): Header Files. -* delayed suspend character: Signal Characters. -* deleting a directory: Deleting Files. -* deleting a file: Deleting Files. -* delivery of signals: Delivery of Signal. -* descriptors and streams: Stream/Descriptor Precautions. -* digit character <1>: Classification of Wide Characters. -* digit character: Classification of Characters. -* directories, accessing: Accessing Directories. -* directories, creating: Creating Directories. -* directories, deleting: Deleting Files. -* directory: Directories. -* directory entry: Directories. -* directory hierarchy: Working with Directory Trees. -* directory stream: Accessing Directories. -* disadvantages of alloca: Disadvantages of Alloca. -* DISCARD character: Other Special. -* division by zero: FP Exceptions. -* DNS: Host Identification. -* DNS server unavailable: Actions in the NSS configuration. -* domain (of socket): Socket Concepts. -* domain error: Math Error Reporting. -* domain name: Host Identification. -* Domain Name System: Host Identification. -* dot notation, for Internet addresses: Abstract Host Addresses. -* DSUSP character: Signal Characters. -* duplicating file descriptors: Duplicating Descriptors. -* dynamic memory allocation: Memory Allocation and C. -* EBCDIC: Extended Char Intro. -* echo of terminal input: Local Modes. -* effective group ID: Process Persona. -* effective user ID: Process Persona. -* efficiency and malloc: Efficiency and Malloc. -* efficiency and obstacks: Extra Fast Growing. -* efficiency of chunks: Obstack Chunks. -* EINTR, and restarting interrupted primitives: Interrupted Primitives. -* elapsed time <1>: Elapsed Time. -* elapsed time: Time Basics. -* encryption: Trivial Encryption. -* end of file, on a stream: EOF and Errors. -* end-of-file, on a file descriptor: I/O Primitives. -* environment: Environment Variables. -* environment access: Environment Access. -* environment representation: Environment Access. -* environment variable: Environment Variables. -* environment vectors, null-character separated: Argz and Envz Vectors. -* envz vectors (environment vectors): Argz and Envz Vectors. -* EOF character: Editing Characters. -* EOL character: Editing Characters. -* EOL2 character: Editing Characters. -* epoch: Simple Calendar Time. -* ERASE character: Editing Characters. -* errno: System Calls. -* error codes: Error Reporting. -* error messages, in argp: Argp Helper Functions. -* error reporting: Error Reporting. -* errors, mathematical: Math Error Reporting. -* establishing a handler: Signal Actions. -* ethers: NSS Basics. -* EUC: Extended Char Intro. -* EUC-JP: glibc iconv Implementation. -* exception <1>: Program Error Signals. -* exception: FP Exceptions. -* exclusive lock: File Locks. -* exec functions: Executing a File. -* execing a program: Memory Concepts. -* executable: Memory Concepts. -* executing a file: Executing a File. -* exit status: Exit Status. -* exit status value: Program Termination. -* exiting a program: Memory Concepts. -* expansion of shell words: Word Expansion. -* exponent (of floating point number): Floating Point Concepts. -* exponentiation functions: Exponents and Logarithms. -* extending printf: Customizing Printf. -* extracting file descriptor from stream: Descriptors and Streams. -* fcntl function: Control Operations. -* feature test macros: Feature Test Macros. -* field splitting: Expansion Stages. -* FIFO special file: Pipes and FIFOs. -* file access permission: Access Permission. -* file access time: File Times. -* file attribute modification time: File Times. -* file attributes: Attribute Meanings. -* file creation mask: Setting Permissions. -* file descriptor flags: Descriptor Flags. -* file descriptor sets, for select: Waiting for I/O. -* file descriptors, standard: Descriptors and Streams. -* file locks: File Locks. -* file modification time: File Times. -* file name: File Names. -* file name component: Directories. -* file name errors: File Name Errors. -* file name resolution: File Name Resolution. -* file name translation flags: Open-time Flags. -* file names, multiple: Hard Links. -* file owner: File Owner. -* file permission bits: Permission Bits. -* file pointer: Streams. -* file position: File Position. -* file positioning on a file descriptor: File Position Primitive. -* file positioning on a stream: File Positioning. -* file status flags: File Status Flags. -* files, accessing: Memory Concepts. -* filtering i/o through subprocess: Pipe to a Subprocess. -* flag character (printf): Output Conversion Syntax. -* flag character (scanf): Input Conversion Syntax. -* flags for sigaction: Flags for Sigaction. -* flags, file name translation: Open-time Flags. -* flags, open-time action: Open-time Flags. -* floating point: Floating Point Numbers. -* floating point, IEEE: IEEE Floating Point. -* floating type measurements: Floating Type Macros. -* floating-point classes: Floating Point Classes. -* floating-point exception: Program Error Signals. -* flow control, terminal: Line Control. -* flushing a stream: Flushing Buffers. -* flushing terminal output queue: Line Control. -* foreground job: Concepts of Job Control. -* foreground job, launching: Foreground and Background. -* forking a process: Process Creation Concepts. -* format string, for printf: Formatted Output. -* format string, for scanf: Formatted Input. -* formatted input from a stream: Formatted Input. -* formatted messages: Formatted Messages. -* formatted output to a stream: Formatted Output. -* FP arithmetic: FP Bit Twiddling. -* FQDN: Host Identification. -* frame, real memory: Memory Concepts. -* freeing (obstacks): Freeing Obstack Objects. -* freeing memory: Memory Concepts. -* freeing memory allocated with malloc: Freeing after Malloc. -* fully buffered stream: Buffering Concepts. -* function prototypes (variadic): Variadic Prototypes. -* gamma function: Special Functions. -* gcvt_r: System V Number Conversion. -* gencat: The gencat program. -* generation of signals: Signal Generation. -* generic i/o control operations: IOCTLs. -* globbing: Globbing. -* graphic character <1>: Classification of Wide Characters. -* graphic character: Classification of Characters. -* Gregorian calendar: Calendar Time. -* group: NSS Basics. -* group database: Group Database. -* group ID: User and Group IDs. -* group name: User and Group IDs. -* group owner of a file: File Owner. -* grouping of digits: General Numeric. -* growing objects (in obstacks): Growing Objects. -* handling multiple signals: Merged Signals. -* hangup signal: Termination Signals. -* hard limit: Limits on Resources. -* hard link: Hard Links. -* header files: Header Files. -* heap consistency checking: Heap Consistency Checking. -* heap, dynamic allocation from: Unconstrained Allocation. -* heap, freeing memory from: Freeing after Malloc. -* hexadecimal digit character <1>: Classification of Wide Characters. -* hexadecimal digit character: Classification of Characters. -* hidden bit (of floating point number mantissa): Floating Point Concepts. -* hierarchy, directory: Working with Directory Trees. -* high-priority data: Out-of-Band Data. -* high-resolution time: Calendar Time. -* holes in files: File Position Primitive. -* home directory: Standard Environment. -* HOME environment variable: Standard Environment. -* hook functions (of custom streams): Hook Functions. -* host address, Internet: Abstract Host Addresses. -* host name: Host Identification. -* hostname: Host Identification. -* hosts: NSS Basics. -* hosts database: Host Names. -* how many arguments: How Many Arguments. -* hyperbolic functions: Hyperbolic Functions. -* identifying terminals: Is It a Terminal. -* IEEE 754: Floating Point Numbers. -* IEEE floating point: Floating Point Numbers. -* IEEE floating point representation: IEEE Floating Point. -* IEEE Std 1003.1: POSIX. -* IEEE Std 1003.2: POSIX. -* ignore action for a signal: Basic Signal Handling. -* illegal instruction: Program Error Signals. -* impossible events: Consistency Checking. -* independent channels: Independent Channels. -* inexact exception: FP Exceptions. -* infinity: Infinity and NaN. -* initial signal actions: Initial Signal Actions. -* inode number: Attribute Meanings. -* input available signal: Asynchronous I/O Signals. -* input conversions, for scanf: Table of Input Conversions. -* input from multiple files: Waiting for I/O. -* installation tools: Tools for Compilation. -* installing: Running make install. -* integer: Integers. -* integer division functions: Integer Division. -* integer type range: Range of Type. -* integer type width: Width of Type. -* interactive signals, from terminal: Local Modes. -* interactive stop signal: Job Control Signals. -* internal representation: Extended Char Intro. -* internationalization: Locales. -* Internet host address: Abstract Host Addresses. -* Internet namespace, for sockets: Internet Namespace. -* interprocess communication, with FIFO: FIFO Special Files. -* interprocess communication, with pipes: Creating a Pipe. -* interprocess communication, with signals: Kill Example. -* interprocess communication, with sockets: Sockets. -* interrupt character: Signal Characters. -* interrupt signal: Termination Signals. -* interrupt-driven input: Interrupt Input. -* interrupting primitives: Interrupted Primitives. -* interval: Time Basics. -* interval timer, setting: Setting an Alarm. -* INTR character: Signal Characters. -* invalid exception: FP Exceptions. -* inverse complex hyperbolic functions: Hyperbolic Functions. -* inverse complex trigonometric functions: Inverse Trig Functions. -* inverse hyperbolic functions: Hyperbolic Functions. -* inverse trigonometric functions: Inverse Trig Functions. -* invocation of program: Program Arguments. -* IOCTLs: IOCTLs. -* ISO 10646: Extended Char Intro. -* ISO 2022: Extended Char Intro. -* ISO 6937: Extended Char Intro. -* ISO C: ISO C. -* ISO-2022-JP: glibc iconv Implementation. -* ISO/IEC 9945-1: POSIX. -* ISO/IEC 9945-2: POSIX. -* job: Job Control. -* job control: Job Control. -* job control functions: Functions for Job Control. -* job control is optional: Job Control is Optional. -* job control signals: Job Control Signals. -* job control, enabling: Initializing the Shell. -* Kermit the frog: Search/Sort Example. -* kernel call: System Calls. -* kernel header files: Linux. -* KILL character: Editing Characters. -* kill signal: Termination Signals. -* killing a process: Signaling Another Process. -* LANG environment variable <1>: Standard Environment. -* LANG environment variable: The catgets Functions. -* launching jobs: Launching Jobs. -* LC_ALL environment variable <1>: Standard Environment. -* LC_ALL environment variable: The catgets Functions. -* LC_COLLATE environment variable: Standard Environment. -* LC_CTYPE environment variable: Standard Environment. -* LC_MESSAGES environment variable <1>: Standard Environment. -* LC_MESSAGES environment variable: The catgets Functions. -* LC_MONETARY environment variable: Standard Environment. -* LC_NUMERIC environment variable: Standard Environment. -* LC_TIME environment variable: Standard Environment. -* leap second: Broken-down Time. -* length of string: Representation of Strings. -* level, for socket options: Socket Options. -* library: Introduction. -* limit: Limits on Resources. -* limits on resource usage: Limits on Resources. -* limits, file name length: Limits for Files. -* limits, floating types: Floating Type Macros. -* limits, integer types: Range of Type. -* limits, link count of files: Limits for Files. -* limits, number of open files: General Limits. -* limits, number of processes: General Limits. -* limits, number of supplementary group IDs: General Limits. -* limits, pipe buffer size: Limits for Files. -* limits, POSIX: General Limits. -* limits, program argument size: General Limits. -* limits, terminal input queue: Limits for Files. -* limits, time zone name length: General Limits. -* line buffered stream: Buffering Concepts. -* line speed: Line Speed. -* lines (in a text file): Binary Streams. -* link: Directories. -* link, hard: Hard Links. -* link, soft: Symbolic Links. -* link, symbolic: Symbolic Links. -* linked channels: Linked Channels. -* listening (sockets): Listening. -* literals: Memory Concepts. -* little-endian: Byte Order. -* LNEXT character: Other Special. -* load average: Processor Resources. -* local namespace, for sockets: Local Namespace. -* local network address number: Abstract Host Addresses. -* local time: Calendar Time. -* locale categories: Locale Categories. -* locale, changing: Setting the Locale. -* locales: Locales. -* locking pages: Locking Pages. -* logarithm functions: Exponents and Logarithms. -* login name: User and Group IDs. -* login name, determining: Who Logged In. -* LOGNAME environment variable: Standard Environment. -* long jumps: Non-Local Exits. -* long-named options: Argument Syntax. -* longjmp: Advantages of Alloca. -* loss of data on sockets: Socket Concepts. -* lost resource signal: Operation Error Signals. -* lower-case character <1>: Classification of Wide Characters. -* lower-case character: Classification of Characters. -* macros: Obstack Functions. -* main function: Program Arguments. -* malloc debugger: Allocation Debugging. -* malloc function: Unconstrained Allocation. -* mantissa (of floating point number): Floating Point Concepts. -* matching failure, in scanf: Formatted Input Basics. -* math errors: Errors in Math Functions. -* mathematical constants: Mathematical Constants. -* maximum: Misc FP Arithmetic. -* maximum field width (scanf): Input Conversion Syntax. -* maximum limit: Limits on Resources. -* maximum possible integer: Integers. -* measurements of floating types: Floating Type Macros. -* memory allocation: Memory. -* memory lock: Locking Pages. -* memory mapped file: Memory Concepts. -* memory mapped I/O: Memory Concepts. -* memory page: Memory Subsystem. -* merging of signals: Merged Signals. -* MIN termios slot: Noncanonical Input. -* minimum: Misc FP Arithmetic. -* minimum field width (printf): Output Conversion Syntax. -* mininum possible integer: Integers. -* mixing descriptors and streams: Stream/Descriptor Precautions. -* modem disconnect: Control Modes. -* modem status lines: Control Modes. -* monetary value formatting: The Lame Way to Locale Data. -* multi-threaded application: Streams and Threads. -* multibyte character: Extended Char Intro. -* multibyte character string: Representation of Strings. -* multibyte string: Representation of Strings. -* multiple names for one file: Hard Links. -* multiplexing input: Waiting for I/O. -* multiply-add: Misc FP Arithmetic. -* name of running program: Error Messages. -* name of socket: Socket Addresses. -* Name Service Switch: Name Service Switch. -* name space: Reserved Names. -* names of signals: Standard Signals. -* namespace (of socket): Socket Concepts. -* NaN <1>: FP Bit Twiddling. -* NaN: Infinity and NaN. -* Netgroup: Netgroup Data. -* netgroup: NSS Basics. -* network byte order: Byte Order. -* network number: Abstract Host Addresses. -* network protocol: Socket Concepts. -* networks: NSS Basics. -* networks database: Networks Database. -* NIS: Host Identification. -* NIS domain name: Host Identification. -* nisplus, and booting: Actions in the NSS configuration. -* nisplus, and completeness: Actions in the NSS configuration. -* NLSPATH environment variable <1>: Standard Environment. -* NLSPATH environment variable: The catgets Functions. -* non-blocking open: Open-time Flags. -* non-local exit, from signal handler: Longjmp in Handler. -* non-local exits: Non-Local Exits. -* noncanonical input processing: Canonical or Not. -* normalization functions (floating-point): Normalization Functions. -* normalized floating point number: Floating Point Concepts. -* not a number: Infinity and NaN. -* NSS: Name Service Switch. -* nsswitch.conf: NSS Configuration File. -* null character: Representation of Strings. -* null pointer constant: Null Pointer Constant. -* null wide character: Representation of Strings. -* number of arguments passed: How Many Arguments. -* number syntax, parsing: Parsing of Numbers. -* numeric value formatting: The Lame Way to Locale Data. -* obstack status: Status of an Obstack. -* obstacks: Obstacks. -* open-time action flags: Open-time Flags. -* opening a file: I/O Concepts. -* opening a file descriptor: Opening and Closing Files. -* opening a pipe: Creating a Pipe. -* opening a pseudo-terminal pair: Pseudo-Terminal Pairs. -* opening a socket: Creating a Socket. -* opening a socket pair: Socket Pairs. -* opening a stream: Opening Streams. -* Optimization: FP Function Optimizations. -* optimizing NSS: Notes on NSS Configuration File. -* option parsing with argp: Argp. -* optional arguments: Variadic Functions. -* optional POSIX features: System Options. -* orientation, stream <1>: Streams and I18N. -* orientation, stream: Opening Streams. -* orphaned process group: Orphaned Process Groups. -* out-of-band data: Out-of-Band Data. -* output conversions, for printf: Table of Output Conversions. -* output possible signal: Asynchronous I/O Signals. -* overflow exception: FP Exceptions. -* owner of a file: File Owner. -* packet: Socket Concepts. -* page boundary: Aligned Memory Blocks. -* page fault: Memory Concepts. -* page fault, copy-on-write: Locked Memory Details. -* page frame: Memory Concepts. -* page, memory: Memory Subsystem. -* page, virtual memory: Memory Concepts. -* paging <1>: Locking Pages. -* paging: Memory Concepts. -* parameter promotion: String/Array Conventions. -* parent directory: File Name Resolution. -* parent process <1>: Process Creation Concepts. -* parent process: Processes. -* parity checking: Input Modes. -* parsing a template string: Parsing a Template String. -* parsing numbers (in formatted input): Parsing of Numbers. -* parsing program arguments: Parsing Program Arguments. -* parsing tokens from a string: Finding Tokens in a String. -* passwd: NSS Basics. -* password database: User Database. -* PATH environment variable: Standard Environment. -* pause function: Waiting for a Signal. -* peeking at input: Unreading. -* pending signals: Delivery of Signal. -* pending signals, checking for: Checking for Pending Signals. -* period of time: Time Basics. -* permission to access a file: Access Permission. -* persona: Process Persona. -* physical address: Memory Subsystem. -* physical memory: Memory Subsystem. -* pi (trigonometric constant): Trig Functions. -* pipe: Pipes and FIFOs. -* pipe signal: Operation Error Signals. -* pipe to a subprocess: Pipe to a Subprocess. -* port number: Ports. -* positioning a file descriptor: File Position Primitive. -* positioning a stream: File Positioning. -* positive difference: Misc FP Arithmetic. -* POSIX: POSIX. -* POSIX capacity limits: General Limits. -* POSIX optional features: System Options. -* POSIX.1: POSIX. -* POSIX.2: POSIX. -* power functions: Exponents and Logarithms. -* precision (of floating point number): Floating Point Concepts. -* precision (printf): Output Conversion Syntax. -* predicates on arrays: String/Array Comparison. -* predicates on characters: Classification of Characters. -* predicates on strings: String/Array Comparison. -* preemptive scheduling: Absolute Priority. -* primitives, interrupting: Interrupted Primitives. -* printing character <1>: Classification of Wide Characters. -* printing character: Classification of Characters. -* priority of a process: Priority. -* priority, absolute: Absolute Priority. -* process <1>: Processes. -* process: Program Basics. -* process completion: Process Completion. -* process group functions: Functions for Job Control. -* process group ID: Launching Jobs. -* process group leader: Launching Jobs. -* process groups: Job Control. -* process ID: Process Creation Concepts. -* process image: Process Creation Concepts. -* process lifetime: Process Creation Concepts. -* process priority: Priority. -* process signal mask: Process Signal Mask. -* process termination: Program Termination. -* processor time <1>: Processor Time. -* processor time: Time Basics. -* profiling alarm signal: Alarm Signals. -* profiling timer: Setting an Alarm. -* program: Program Basics. -* program argument syntax: Argument Syntax. -* program arguments: Program Arguments. -* program arguments, parsing: Parsing Program Arguments. -* program error signals: Program Error Signals. -* program name: Error Messages. -* program startup: Program Arguments. -* program termination: Program Termination. -* program termination signals: Termination Signals. -* programming your own streams: Custom Streams. -* project complex numbers: Operations on Complex. -* protocol (of socket): Socket Concepts. -* protocol family: Socket Concepts. -* protocols: NSS Basics. -* protocols database: Protocols Database. -* prototypes for variadic functions: Variadic Prototypes. -* pseudo-random numbers: Pseudo-Random Numbers. -* pseudo-terminals: Pseudo-Terminals. -* punctuation character <1>: Classification of Wide Characters. -* punctuation character: Classification of Characters. -* pushing input back: Unreading. -* quick sort function (for arrays): Array Sort Function. -* QUIT character: Signal Characters. -* quit signal: Termination Signals. -* quote removal: Expansion Stages. -* race conditions, relating to job control: Launching Jobs. -* race conditions, relating to signals: Signals in Handler. -* radix (of floating point number): Floating Point Concepts. -* raising signals: Generating Signals. -* random numbers: Pseudo-Random Numbers. -* random-access files: File Position. -* range error: Math Error Reporting. -* range of integer type: Range of Type. -* read lock: File Locks. -* reading from a directory: Accessing Directories. -* reading from a file descriptor: I/O Primitives. -* reading from a socket: Transferring Data. -* reading from a stream, by blocks: Block Input/Output. -* reading from a stream, by characters: Character Input. -* reading from a stream, formatted: Formatted Input. -* ready to run: Absolute Priority. -* real group ID: Process Persona. -* real user ID: Process Persona. -* real-time timer: Setting an Alarm. -* realtime CPU scheduling: Absolute Priority. -* realtime processing: Why Lock Pages. -* realtime scheduling: Realtime Scheduling. -* receiving datagrams: Receiving Datagrams. -* record locking: File Locks. -* redirecting input and output: Duplicating Descriptors. -* reentrant functions: Nonreentrancy. -* reentrant NSS functions: NSS Module Names. -* relative file name: File Name Resolution. -* removal of quotes: Expansion Stages. -* removing a file: Deleting Files. -* removing macros that shadow functions: Macro Definitions. -* renaming a file: Renaming Files. -* reporting bugs: Reporting Bugs. -* reporting errors: Error Reporting. -* REPRINT character: Editing Characters. -* reserved names: Reserved Names. -* resource limits: Limits on Resources. -* restarting interrupted primitives: Interrupted Primitives. -* restrictions on signal handler functions: Nonreentrancy. -* root directory: File Name Resolution. -* Rot13: Trivial Encryption. -* rpc: NSS Basics. -* runnable process: Absolute Priority. -* running a command: Running a Command. -* saved set-group-ID: How Change Persona. -* saved set-user-ID: How Change Persona. -* scanning the group list: Scanning All Groups. -* scanning the user list: Scanning All Users. -* scatter-gather: Scatter-Gather. -* scheduling, traditional: Traditional Scheduling. -* search function (for arrays): Array Search Function. -* search functions (for strings): Search Functions. -* seed (for random numbers): Pseudo-Random Numbers. -* seeking on a file descriptor: File Position Primitive. -* seeking on a stream: File Positioning. -* segmentation violation: Program Error Signals. -* sending a datagram: Sending Datagrams. -* sending signals: Generating Signals. -* sequential-access files: File Position. -* server: Connections. -* services: NSS Basics. -* services database: Services Database. -* session <1>: Concepts of Job Control. -* session: Job Control. -* session leader: Concepts of Job Control. -* setting an alarm: Setting an Alarm. -* setuid programs: How Change Persona. -* setuid programs and file access: Testing File Access. -* severity class <1>: Adding Severity Classes. -* severity class: Printing Formatted Messages. -* sgettext: GUI program problems. -* shadow: NSS Basics. -* shadowing functions with macros: Macro Definitions. -* shared lock: File Locks. -* shared memory: Memory Subsystem. -* shell: Concepts of Job Control. -* shift state: Keeping the state. -* shrinking objects: Growing Objects. -* shutting down a socket: Closing a Socket. -* sigaction flags: Flags for Sigaction. -* sigaction function: Advanced Signal Handling. -* SIGCHLD, handling of: Stopped and Terminated Jobs. -* sign (of floating point number): Floating Point Concepts. -* signal <1>: Signal Handling. -* signal: FP Exceptions. -* signal action: Delivery of Signal. -* signal actions: Signal Actions. -* signal flags: Flags for Sigaction. -* signal function: Basic Signal Handling. -* signal handler function: Defining Handlers. -* signal mask: Process Signal Mask. -* signal messages: Signal Messages. -* signal names: Standard Signals. -* signal number: Standard Signals. -* signal set: Signal Sets. -* signals, generating: Generating Signals. -* signedness: Integers. -* significand (of floating point number): Floating Point Concepts. -* SIGTTIN, from background job: Access to the Terminal. -* SIGTTOU, from background job: Access to the Terminal. -* simple time: Calendar Time. -* single-byte string: Representation of Strings. -* size of string: Representation of Strings. -* SJIS: Extended Char Intro. -* socket: Sockets. -* socket address (name) binding: Socket Addresses. -* socket domain: Socket Concepts. -* socket namespace: Socket Concepts. -* socket option level: Socket Options. -* socket options: Socket Options. -* socket pair: Socket Pairs. -* socket protocol: Socket Concepts. -* socket shutdown: Closing a Socket. -* socket, client actions: Connecting. -* socket, closing: Closing a Socket. -* socket, connecting: Connecting. -* socket, creating: Creating a Socket. -* socket, initiating a connection: Connecting. -* sockets, accepting connections: Accepting Connections. -* sockets, listening: Listening. -* sockets, server actions: Listening. -* soft limit: Limits on Resources. -* soft link: Symbolic Links. -* sort function (for arrays): Array Sort Function. -* sparse files: File Position Primitive. -* special files: Making Special Files. -* special functions: Special Functions. -* specified action (for a signal): Delivery of Signal. -* speed of execution: Why Lock Pages. -* square root function: Exponents and Logarithms. -* stable sorting: Array Sort Function. -* standard dot notation, for Internet addresses: Abstract Host Addresses. -* standard environment variables: Standard Environment. -* standard error file descriptor: Descriptors and Streams. -* standard error stream: Standard Streams. -* standard file descriptors: Descriptors and Streams. -* standard input file descriptor: Descriptors and Streams. -* standard input stream: Standard Streams. -* standard output file descriptor: Descriptors and Streams. -* standard output stream: Standard Streams. -* standard streams: Standard Streams. -* standards: Standards and Portability. -* START character: Start/Stop Characters. -* startup of program: Program Arguments. -* stateful <1>: glibc iconv Implementation. -* stateful <2>: iconv Examples. -* stateful <3>: Generic Conversion Interface. -* stateful <4>: Converting Strings. -* stateful <5>: Converting a Character. -* stateful: Keeping the state. -* static memory allocation: Memory Allocation and C. -* static storage class: Memory Allocation and C. -* STATUS character: Other Special. -* status codes: Error Reporting. -* status of a file: Attribute Meanings. -* status of obstack: Status of an Obstack. -* sticky bit: Permission Bits. -* STOP character: Start/Stop Characters. -* stop signal: Job Control Signals. -* stopped job: Concepts of Job Control. -* stopped jobs, continuing: Continuing Stopped Jobs. -* stopped jobs, detecting: Stopped and Terminated Jobs. -* storage allocation: Memory. -* stream (sockets): Socket Concepts. -* stream orientation <1>: Streams and I18N. -* stream orientation: Opening Streams. -* stream, for I/O to a string: String Streams. -* streams and descriptors: Stream/Descriptor Precautions. -* streams, and file descriptors: Descriptors and Streams. -* streams, C++: Streams and I18N. -* streams, standard: Standard Streams. -* string: Representation of Strings. -* string allocation: Representation of Strings. -* string collation functions: Collation Functions. -* string comparison functions: String/Array Comparison. -* string concatenation functions: Copying and Concatenation. -* string copy functions: Copying and Concatenation. -* string length: Representation of Strings. -* string literal: Representation of Strings. -* string search functions: Search Functions. -* string stream: String Streams. -* string vectors, null-character separated: Argz and Envz Vectors. -* string, representation of: Representation of Strings. -* style of communication (of a socket): Socket Concepts. -* subshell: Initializing the Shell. -* substitution of variables and commands: Expansion Stages. -* successive signals: Merged Signals. -* summer time: Broken-down Time. -* SunOS: Berkeley Unix. -* supplementary group IDs: Process Persona. -* SUSP character: Signal Characters. -* suspend character: Signal Characters. -* SVID: SVID. -* swap space: Memory Concepts. -* symbolic link: Symbolic Links. -* symbolic link, opening: Open-time Flags. -* synchronizing <1>: Synchronizing AIO Operations. -* synchronizing: Synchronizing I/O. -* syntax error messages, in argp: Argp Helper Functions. -* syntax, for program arguments: Argument Syntax. -* syntax, for reading numbers: Parsing of Numbers. -* sysconf <1>: Processor Resources. -* sysconf: Query Memory Parameters. -* system call: System Calls. -* system call number: System Calls. -* System V Unix: SVID. -* TCP (Internet protocol): Protocols Database. -* template, for printf: Formatted Output. -* template, for scanf: Formatted Input. -* TERM environment variable: Standard Environment. -* terminal flow control: Line Control. -* terminal identification: Is It a Terminal. -* terminal input queue: I/O Queues. -* terminal input queue, clearing: Line Control. -* terminal input signal: Job Control Signals. -* terminal line control functions: Line Control. -* terminal line speed: Line Speed. -* terminal mode data types: Mode Data Types. -* terminal mode functions: Mode Functions. -* terminal modes, BSD: BSD Terminal Modes. -* terminal output queue: I/O Queues. -* terminal output queue, flushing: Line Control. -* terminal output signal: Job Control Signals. -* terminated jobs, detecting: Stopped and Terminated Jobs. -* termination signal: Termination Signals. -* testing access permission: Testing File Access. -* testing exit status of child process: Process Completion. -* text stream: Binary Streams. -* thrashing: Memory Subsystem. -* thread of control: Program Basics. -* threads: Streams and Threads. -* ticks, clock: Processor And CPU Time. -* tilde expansion: Expansion Stages. -* time: Time Basics. -* TIME termios slot: Noncanonical Input. -* time zone: TZ Variable. -* time zone database: TZ Variable. -* time, elapsed: Time Basics. -* time, high precision: High Accuracy Clock. -* timer, profiling: Setting an Alarm. -* timer, real-time: Setting an Alarm. -* timer, virtual: Setting an Alarm. -* timers, setting: Setting an Alarm. -* timespec: Elapsed Time. -* timeval: Elapsed Time. -* timing error in signal handling: Remembering a Signal. -* TMPDIR environment variable: Temporary Files. -* tokenizing strings: Finding Tokens in a String. -* tools, for installing library: Tools for Compilation. -* transmitting datagrams: Sending Datagrams. -* tree, directory: Working with Directory Trees. -* triangulation: glibc iconv Implementation. -* trigonometric functions: Trig Functions. -* type measurements, floating: Floating Type Macros. -* type measurements, integer: Width of Type. -* type modifier character (printf): Output Conversion Syntax. -* type modifier character (scanf): Input Conversion Syntax. -* typeahead buffer: I/O Queues. -* TZ environment variable: Standard Environment. -* UCS-2: Extended Char Intro. -* UCS-4: Extended Char Intro. -* ulps: Errors in Math Functions. -* umask: Setting Permissions. -* unbuffered stream: Buffering Concepts. -* unconstrained memory allocation: Unconstrained Allocation. -* undefining macros that shadow functions: Macro Definitions. -* underflow exception: FP Exceptions. -* Unicode: Extended Char Intro. -* Unix, Berkeley: Berkeley Unix. -* Unix, System V: SVID. -* unlinking a file: Deleting Files. -* unordered comparison: FP Comparison Functions. -* unreading characters: Unreading. -* upgrading from libc5: Linux. -* upper-case character <1>: Classification of Wide Characters. -* upper-case character: Classification of Characters. -* urgent data signal: Asynchronous I/O Signals. -* urgent socket condition: Out-of-Band Data. -* usage limits: Limits on Resources. -* usage messages, in argp: Argp Helper Functions. -* user accounting database: User Accounting Database. -* user database: User Database. -* user ID: User and Group IDs. -* user ID, determining: Who Logged In. -* user name: User and Group IDs. -* user signals: Miscellaneous Signals. -* usual file name errors: File Name Errors. -* UTF-16: Extended Char Intro. -* UTF-7: Extended Char Intro. -* UTF-8: Extended Char Intro. -* va_copy: Copying and Concatenation. -* variable number of arguments: Variadic Functions. -* variable substitution: Expansion Stages. -* variable-sized arrays: GNU C Variable-Size Arrays. -* variadic function argument access: Receiving Arguments. -* variadic function prototypes: Variadic Prototypes. -* variadic functions: Variadic Functions. -* variadic functions, calling: Calling Variadics. -* virtual time alarm signal: Alarm Signals. -* virtual timer: Setting an Alarm. -* volatile declarations: Nonreentrancy. -* waiting for a signal: Waiting for a Signal. -* waiting for completion of child process: Process Completion. -* waiting for input or output: Waiting for I/O. -* WERASE character: Editing Characters. -* whitespace character <1>: Classification of Wide Characters. -* whitespace character: Classification of Characters. -* wide character: Extended Char Intro. -* wide character string: Representation of Strings. -* width of integer type: Width of Type. -* wildcard expansion: Expansion Stages. -* wint_t: String/Array Conventions. -* word expansion: Word Expansion. -* working directory: Working Directory. -* write lock: File Locks. -* writing to a file descriptor: I/O Primitives. -* writing to a socket: Transferring Data. -* writing to a stream, by blocks: Block Input/Output. -* writing to a stream, by characters: Simple Output. -* writing to a stream, formatted: Formatted Output. -* YP: Host Identification. -* YP domain name: Host Identification. -* zero divide: FP Exceptions. + * The `getopt' function and related code was written by Richard + Stallman, David J. MacKenzie, and Roland McGrath. + + * The merge sort function `qsort' was written by Michael J. Haertel. + + * The quick sort function used as a fallback by `qsort' was written + by Douglas C. Schmidt. + + * The memory allocation functions `malloc', `realloc' and `free' and + related code were written by Michael J. Haertel, Wolfram Gloger, + and Doug Lea. + + * Fast implementations of many of the string functions (`memcpy', + `strlen', etc.) were written by Torbjo"rn Granlund. + + * The `tar.h' header file was written by David J. MacKenzie. + + * The port to the MIPS DECStation running Ultrix 4 + (`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian + Lance Taylor. + + * The DES encryption function `crypt' and related functions were + contributed by Michael Glad. + + * The `ftw' and `nftw' functions were contributed by Ulrich Drepper. + + * The startup code to support SunOS shared libraries was contributed + by Tom Quinn. + + * The `mktime' function was contributed by Paul Eggert. + + * The port to the Sequent Symmetry running Dynix version 3 + (`i386-sequent-bsd') was contributed by Jason Merrill. + + * The timezone support code is derived from the public-domain + timezone package by Arthur David Olson and his many contributors. + + * The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was + contributed by Brendan Kehoe, using some code written by Roland + McGrath. + + * The port to SGI machines running Irix 4 (`mips-sgi-irix4') was + contributed by Tom Quinn. + + * The port of the Mach and Hurd code to the MIPS architecture + (`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima. + + * The floating-point printing function used by `printf' and friends + and the floating-point reading function used by `scanf', `strtod' + and friends were written by Ulrich Drepper. The multi-precision + integer functions used in those functions are taken from GNU MP, + which was contributed by Torbjo"rn Granlund. + + * The internationalization support in the library, and the support + programs `locale' and `localedef', were written by Ulrich Drepper. + Ulrich Drepper adapted the support code for message catalogs + (`libintl.h', etc.) from the GNU `gettext' package, which he also + wrote. He also contributed the `catgets' support and the entire + suite of multi-byte and wide-character support functions + (`wctype.h', `wchar.h', etc.). + + * The implementations of the `nsswitch.conf' mechanism and the files + and DNS backends for it were designed and written by Ulrich + Drepper and Roland McGrath, based on a backend interface defined + by Peter Eriksson. + + * The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed + by Ulrich Drepper, based in large part on work done in Hongjiu + Lu's Linux version of the GNU C Library. + + * The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by + Andreas Schwab. + + * The ports to Linux/ARM (`arm-ANYTHING-linuxaout') and ARM + standalone (`arm-ANYTHING-none'), as well as parts of the IPv6 + support code, were contributed by Philip Blundell. + + * Richard Henderson contributed the ELF dynamic linking code and + other support for the Alpha processor. + + * David Mosberger-Tang contributed the port to Linux/Alpha + (`alpha-ANYTHING-linux'). + + * The port to Linux on PowerPC (`powerpc-ANYTHING-linux') was + contributed by Geoffrey Keating. + + * Miles Bader wrote the argp argument-parsing package, and the + argz/envz interfaces. + + * Stephen R. van den Berg contributed a highly-optimized `strstr' + function. + + * Ulrich Drepper contributed the `hsearch' and `drand48' families of + functions; reentrant `...`_r'' versions of the `random' family; + System V shared memory and IPC support code; and several + highly-optimized string functions for iX86 processors. + + * The math functions are taken from `fdlibm-5.1' by Sun + Microsystems, as modified by J.T. Conklin, Ian Lance Taylor, + Ulrich Drepper, Andreas Schwab, and Roland McGrath. + + * The `libio' library used to implement `stdio' functions on some + platforms was written by Per Bothner and modified by Ulrich + Drepper. + + * Eric Youngdale and Ulrich Drepper implemented versioning of + objects on symbol level. + + * Thorsten Kukuk provided an implementation for NIS (YP) and NIS+, + securelevel 0, 1 and 2. + + * Andreas Jaeger provided a test suite for the math library. + + * Mark Kettenis implemented the utmpx interface and an utmp daemon. + + * Ulrich Drepper added character conversion functions (`iconv'). + + * Thorsten Kukuk provided an implementation for a caching daemon for + NSS (nscd). + + * Tim Waugh provided an implementation of the POSIX.2 wordexp + function family. + + * Mark Kettenis provided a Hesiod NSS module. + + * The Internet-related code (most of the `inet' subdirectory) and + several other miscellaneous functions and header files have been + included from 4.4 BSD with little or no modification. + + All code incorporated from 4.4 BSD is under the following + copyright: + + Copyright (C) 1991 Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, are permitted provided that the + following conditions are met: + + 1. Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + 3. [This condition was removed.] + + 4. Neither the name of the University nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + + * The random number generation functions `random', `srandom', + `setstate' and `initstate', which are also the basis for the + `rand' and `srand' functions, were written by Earl T. Cohen for + the University of California at Berkeley and are copyrighted by the + Regents of the University of California. They have undergone minor + changes to fit into the GNU C library and to fit the ISO C + standard, but the functional code is Berkeley's. + + * The DNS resolver code is taken directly from BIND 4.9.5, which is + under both the Berkeley copyright above and also: + + Portions Copyright (C) 1993 by Digital Equipment Corporation. + + Permission to use, copy, modify, and distribute this software + for any purpose with or without fee is hereby granted, + provided that the above copyright notice and this permission + notice appear in all copies, and that the name of Digital + Equipment Corporation not be used in advertising or publicity + pertaining to distribution of the document or software + without specific, written prior permission. + + THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. + DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT CORPORATION BE + LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + * The code to support Sun RPC is taken verbatim from Sun's + RPCSRC-4.0 distribution, and is covered by this copyright: + + Copyright (C) 1984, Sun Microsystems, Inc. + + Sun RPC is a product of Sun Microsystems, Inc. and is + provided for unrestricted use provided that this legend is + included on all tape media and as a part of the software + program in whole or part. Users may copy or modify Sun RPC + without charge, but are not authorized to license or + distribute it to anyone else except as part of a product or + program developed by the user. + + SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND + INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND + FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF + DEALING, USAGE OR TRADE PRACTICE. + + Sun RPC is provided with no support and without any + obligation on the part of Sun Microsystems, Inc. to assist in + its use, correction, modification or enhancement. + + SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT + TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY + PATENTS BY SUN RPC OR ANY PART THEREOF. + + In no event will Sun Microsystems, Inc. be liable for any + lost revenue or profits or other special, indirect and + consequential damages, even if Sun has been advised of the + possibility of such damages. + + Sun Microsystems, Inc. + 2550 Garcia Avenue + Mountain View, California 94043 + + * Some of the support code for Mach is taken from Mach 3.0 by CMU, + and is under the following copyright terms: + + Mach Operating System + Copyright (C) 1991,1990,1989 Carnegie Mellon University + All Rights Reserved. + + Permission to use, copy, modify and distribute this software + and its documentation is hereby granted, provided that both + the copyright notice and this permission notice appear in all + copies of the software, derivative works or modified + versions, and any portions thereof, and that both notices + appear in supporting documentation. + + CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS + IS" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF + ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF + THIS SOFTWARE. + + Carnegie Mellon requests users of this software to return to + + Software Distribution Coordinator + School of Computer Science + Carnegie Mellon University + Pittsburgh PA 15213-3890 + + or any improvements or + extensions that they make and grant Carnegie Mellon the + rights to redistribute these changes. + + * The code for the database library `libdb' comes from the 2.3 + release of Berkeley DB. That code is under the same copyright as + 4.4 BSD and also: + + Copyright (C) 1990, 1993, 1994, 1995, 1996, 1997 + Sleepycat Software. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, are permitted provided that the + following conditions are met: + + 1. Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + 3. Redistributions in any form must be accompanied by + information on how to obtain complete source code for + the DB software and any accompanying software that uses + the DB software. The source code must either be + included in the distribution or be available for no more + than the cost of distribution plus a nominal fee, and + must be freely redistributable under reasonable + conditions. For an executable file, complete source + code means the source code for all modules it contains. + It does not mean source code for modules or files that + typically accompany the operating system on which the + executable file runs, e.g., standard library modules or + system header files. + + THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + SLEEPYCAT SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + + Portions copyright (C) 1995, 1996 + The President and Fellows of Harvard University. + All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, are permitted provided that the + following conditions are met: + 1. Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + 3. All advertising materials mentioning features or use of + this software must display the following acknowledgement: + This product includes software developed by + Harvard University and its contributors. + + 4. Neither the name of the University nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + + For a license to use, redistribute or sell DB software under + conditions other than those described above, or to purchase + support for this software, please contact Sleepycat Software + at + + Sleepycat Software + 394 E. Riding Dr. + Carlisle, MA 01741 + USA + +1-508-287-4781 + + or . + + + + +File: libc.info, Node: Copying, Next: Concept Index, Prev: Contributors, Up: Top + +GNU LIBRARY GENERAL PUBLIC LICENSE +********************************** + + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + +Preamble +======== + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it in +new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License, which was designed for utility +programs. This license, the GNU Library General Public License, +applies to certain designated libraries. This license is quite +different from the ordinary one; be sure to read it in full, and don't +assume that anything in it is the same as in the ordinary license. + + The reason we have a separate public license for some libraries is +that they blur the distinction we usually make between modifying or +adding to a program and simply using it. Linking a program with a +library, without changing the library, is in some sense simply using +the library, and is analogous to running a utility program or +application program. However, in a textual and legal sense, the linked +executable is a combined work, a derivative of the original library, +and the ordinary General Public License treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended +to permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to +achieve this as regards changes in header files, but we have achieved +it as regards changes in the actual functions of the Library.) The +hope is that this will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which + contains a notice placed by the copyright holder or other + authorized party saying it may be distributed under the terms of + this Library General Public License (also called "this License"). + Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data + prepared so as to be conveniently linked with application programs + (which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work + which has been distributed under these terms. A "work based on the + Library" means either the Library or any derivative work under + copyright law: that is to say, a work containing the Library or a + portion of it, either verbatim or with modifications and/or + translated straightforwardly into another language. (Hereinafter, + translation is included without limitation in the term + "modification".) + + "Source code" for a work means the preferred form of the work for + making modifications to it. For a library, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to + control compilation and installation of the library. + + Activities other than copying, distribution and modification are + not covered by this License; they are outside its scope. The act + of running a program using the Library is not restricted, and + output from such a program is covered only if its contents + constitute a work based on the Library (independent of the use of + the Library in a tool for writing it). Whether that is true + depends on what the Library does and what the program that uses + the Library does. + + 1. You may copy and distribute verbatim copies of the Library's + complete source code as you receive it, in any medium, provided + that you conspicuously and appropriately publish on each copy an + appropriate copyright notice and disclaimer of warranty; keep + intact all the notices that refer to this License and to the + absence of any warranty; and distribute a copy of this License + along with the Library. + + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange + for a fee. + + 2. You may modify your copy or copies of the Library or any portion + of it, thus forming a work based on the Library, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + + a. The modified work must itself be a software library. + + b. You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c. You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d. If a facility in the modified Library refers to a function or + a table of data to be supplied by an application program that + uses the facility, other than as an argument passed when the + facility is invoked, then you must make a good faith effort + to ensure that, in the event an application does not supply + such function or table, the facility still operates, and + performs whatever part of its purpose remains meaningful. + + (For example, a function in a library to compute square roots + has a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function + must be optional: if the application does not supply it, the + square root function must still compute square roots.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Library, and can be reasonably considered independent and separate + works in themselves, then this License, and its terms, do not + apply to those sections when you distribute them as separate + works. But when you distribute the same sections as part of a + whole which is a work based on the Library, the distribution of + the whole must be on the terms of this License, whose permissions + for other licensees extend to the entire whole, and thus to each + and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, the + intent is to exercise the right to control the distribution of + derivative or collective works based on the Library. + + In addition, mere aggregation of another work not based on the + Library with the Library (or with a work based on the Library) on + a volume of a storage or distribution medium does not bring the + other work under the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public + License instead of this License to a given copy of the Library. + To do this, you must alter all the notices that refer to this + License, so that they refer to the ordinary GNU General Public + License, version 2, instead of to this License. (If a newer + version than version 2 of the ordinary GNU General Public License + has appeared, then you can specify that version instead if you + wish.) Do not make any other change in these notices. + + Once this change is made in a given copy, it is irreversible for + that copy, so the ordinary GNU General Public License applies to + all subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of + the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or + derivative of it, under Section 2) in object code or executable + form under the terms of Sections 1 and 2 above provided that you + accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software + interchange. + + If distribution of object code is made by offering access to copy + from a designated place, then offering equivalent access to copy + the source code from the same place satisfies the requirement to + distribute the source code, even though third parties are not + compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the + Library, but is designed to work with the Library by being + compiled or linked with it, is called a "work that uses the + Library". Such a work, in isolation, is not a derivative work of + the Library, and therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library + creates an executable that is a derivative of the Library (because + it contains portions of the Library), rather than a "work that + uses the library". The executable is therefore covered by this + License. Section 6 states terms for distribution of such + executables. + + When a "work that uses the Library" uses material from a header + file that is part of the Library, the object code for the work may + be a derivative work of the Library even though the source code is + not. Whether this is true is especially significant if the work + can be linked without the Library, or if the work is itself a + library. The threshold for this to be true is not precisely + defined by law. + + If such an object file uses only numerical parameters, data + structure layouts and accessors, and small macros and small inline + functions (ten lines or less in length), then the use of the object + file is unrestricted, regardless of whether it is legally a + derivative work. (Executables containing this object code plus + portions of the Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may + distribute the object code for the work under the terms of Section + 6. Any executables containing that work also fall under Section 6, + whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or + link a "work that uses the Library" with the Library to produce a + work containing portions of the Library, and distribute that work + under terms of your choice, provided that the terms permit + modification of the work for the customer's own use and reverse + engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the + Library is used in it and that the Library and its use are covered + by this License. You must supply a copy of this License. If the + work during execution displays copyright notices, you must include + the copyright notice for the Library among them, as well as a + reference directing the user to the copy of this License. Also, + you must do one of these things: + + a. Accompany the work with the complete corresponding + machine-readable source code for the Library including + whatever changes were used in the work (which must be + distributed under Sections 1 and 2 above); and, if the work + is an executable linked with the Library, with the complete + machine-readable "work that uses the Library", as object code + and/or source code, so that the user can modify the Library + and then relink to produce a modified executable containing + the modified Library. (It is understood that the user who + changes the contents of definitions files in the Library will + not necessarily be able to recompile the application to use + the modified definitions.) + + b. Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + c. If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the + above specified materials from the same place. + + d. Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the + Library" must include any data and utility programs needed for + reproducing the executable from it. However, as a special + exception, the source code distributed need not include anything + that is normally distributed (in either source or binary form) + with the major components (compiler, kernel, and so on) of the + operating system on which the executable runs, unless that + component itself accompanies the executable. + + It may happen that this requirement contradicts the license + restrictions of other proprietary libraries that do not normally + accompany the operating system. Such a contradiction means you + cannot use both them and the Library together in an executable + that you distribute. + + 7. You may place library facilities that are a work based on the + Library side-by-side in a single library together with other + library facilities not covered by this License, and distribute + such a combined library, provided that the separate distribution + of the work based on the Library and of the other library + facilities is otherwise permitted, and provided that you do these + two things: + + a. Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b. Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same + work. + + 8. You may not copy, modify, sublicense, link with, or distribute the + Library except as expressly provided under this License. Any + attempt otherwise to copy, modify, sublicense, link with, or + distribute the Library is void, and will automatically terminate + your rights under this License. However, parties who have + received copies, or rights, from you under this License will not + have their licenses terminated so long as such parties remain in + full compliance. + + 9. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify + or distribute the Library or its derivative works. These actions + are prohibited by law if you do not accept this License. + Therefore, by modifying or distributing the Library (or any work + based on the Library), you indicate your acceptance of this + License to do so, and all its terms and conditions for copying, + distributing or modifying the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the + Library), the recipient automatically receives a license from the + original licensor to copy, distribute, link with or modify the + Library subject to these terms and conditions. You may not impose + any further restrictions on the recipients' exercise of the rights + granted herein. You are not responsible for enforcing compliance + by third parties to this License. + + 11. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent + issues), conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot distribute so as to satisfy simultaneously + your obligations under this License and any other pertinent + obligations, then as a consequence you may not distribute the + Library at all. For example, if a patent license would not permit + royalty-free redistribution of the Library by all those who + receive copies directly or indirectly through you, then the only + way you could satisfy both it and this License would be to refrain + entirely from distribution of the Library. + + If any portion of this section is held invalid or unenforceable + under any particular circumstance, the balance of the section is + intended to apply, and the section as a whole is intended to apply + in other circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of + any such claims; this section has the sole purpose of protecting + the integrity of the free software distribution system which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is + willing to distribute software through any other system and a + licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed + to be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in + certain countries either by patents or by copyrighted interfaces, + the original copyright holder who places the Library under this + License may add an explicit geographical distribution limitation + excluding those countries, so that distribution is permitted only + in or among countries not thus excluded. In such case, this + License incorporates the limitation as if written in the body of + this License. + + 13. The Free Software Foundation may publish revised and/or new + versions of the Library General Public License from time to time. + Such new versions will be similar in spirit to the present version, + but may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Library specifies a version number of this License which applies + to it and "any later version", you have the option of following + the terms and conditions either of that version or of any later + version published by the Free Software Foundation. If the Library + does not specify a license version number, you may choose any + version ever published by the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free + programs whose distribution conditions are incompatible with these, + write to the author to ask for permission. For software which is + copyrighted by the Free Software Foundation, write to the Free + Software Foundation; we sometimes make exceptions for this. Our + decision will be guided by the two goals of preserving the free + status of all derivatives of our free software and of promoting + the sharing and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE + QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE + LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU + OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY + OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries +============================================== + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of +the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should have +at least the "copyright" line and a pointer to where the full notice is +found. + + ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + This 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. + + This 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 General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + + Also add information on how to contact you by electronic and paper +mail. + + You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the library + `Frob' (a library for tweaking knobs) written by James Random Hacker. + + SIGNATURE OF TY COON, 1 April 1990 + Ty Coon, President of Vice + + That's all there is to it! diff -durpNa glibc-2.2.2/manual/libc.info-54 glibc-2.2.3/manual/libc.info-54 --- glibc-2.2.2/manual/libc.info-54 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-54 Wed Apr 25 14:55:23 2001 @@ -31,134 +31,1051 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Type Index, Next: Function Index, Prev: Concept Index, Up: Top +File: libc.info, Node: Concept Index, Next: Type Index, Prev: Copying, Up: Top -Type Index -********** +Concept Index +************* * Menu: -* __ftw64_func_t: Working with Directory Trees. -* __ftw_func_t: Working with Directory Trees. -* __nftw64_func_t: Working with Directory Trees. -* __nftw_func_t: Working with Directory Trees. -* blkcnt64_t: Attribute Meanings. -* blkcnt_t: Attribute Meanings. -* cc_t: Mode Data Types. -* clock_t: CPU Time. -* comparison_fn_t: Comparison Functions. -* cookie_close_function: Hook Functions. -* cookie_io_functions_t: Streams and Cookies. -* cookie_read_function: Hook Functions. -* cookie_seek_function: Hook Functions. -* cookie_write_function: Hook Functions. -* dev_t: Attribute Meanings. -* DIR: Opening a Directory. -* div_t: Integer Division. -* enum mcheck_status: Heap Consistency Checking. -* fd_set: Waiting for I/O. -* FILE: Streams. -* fpos64_t: Portable Positioning. -* fpos_t: Portable Positioning. -* gid_t: Reading Persona. -* glob64_t: Calling Glob. -* glob_t: Calling Glob. -* iconv_t: Generic Conversion Interface. -* imaxdiv_t: Integer Division. -* ino64_t: Attribute Meanings. -* ino_t: Attribute Meanings. -* jmp_buf: Non-Local Details. -* ldiv_t: Integer Division. -* lldiv_t: Integer Division. -* mbstate_t: Keeping the state. -* mode_t: Attribute Meanings. -* nlink_t: Attribute Meanings. -* off64_t: File Position Primitive. -* off_t: File Position Primitive. -* pid_t: Process Identification. -* printf_arginfo_function: Defining the Output Handler. -* printf_function: Defining the Output Handler. -* ptrdiff_t: Important Data Types. -* regex_t: POSIX Regexp Compilation. -* regmatch_t: Regexp Subexpressions. -* regoff_t: Regexp Subexpressions. -* sig_atomic_t: Atomic Types. -* sighandler_t: Basic Signal Handling. -* sigjmp_buf: Non-Local Exits and Signals. -* sigset_t: Signal Sets. -* size_t: Important Data Types. -* speed_t: Line Speed. -* ssize_t: I/O Primitives. -* struct __gconv_step: glibc iconv Implementation. -* struct __gconv_step_data: glibc iconv Implementation. -* struct aiocb: Asynchronous I/O. -* struct aiocb64: Asynchronous I/O. -* struct aioinit: Configuration of AIO. -* struct argp: Argp Parsers. -* struct argp_child: Argp Children. -* struct argp_option: Argp Option Vectors. -* struct argp_state: Argp Parsing State. -* struct dirent: Directory Entries. -* struct ENTRY: Hash Search Function. -* struct exit_status: Manipulating the Database. -* struct flock: File Locks. -* struct fstab: fstab. -* struct FTW: Working with Directory Trees. -* struct group: Group Data Structure. -* struct hostent: Host Names. -* struct if_nameindex: Interface Naming. -* struct in6_addr: Host Address Data Type. -* struct in_addr: Host Address Data Type. -* struct iovec: Scatter-Gather. -* struct itimerval: Setting an Alarm. -* struct lconv: The Lame Way to Locale Data. -* struct linger: Socket-Level Options. -* struct mallinfo: Statistics of Malloc. -* struct mntent: mtab. -* struct netent: Networks Database. -* struct ntptimeval: High Accuracy Clock. -* struct obstack: Creating Obstacks. -* struct option: Getopt Long Options. -* struct passwd: User Data Structure. -* struct printf_info: Conversion Specifier Options. -* struct protoent: Protocols Database. -* struct rlimit: Limits on Resources. -* struct rlimit64: Limits on Resources. -* struct rusage: Resource Usage. -* struct sched_param: Basic Scheduling Functions. -* struct servent: Services Database. -* struct sgttyb: BSD Terminal Modes. -* struct sigaction: Advanced Signal Handling. -* struct sigaltstack: Signal Stack. -* struct sigstack: Signal Stack. -* struct sigvec: BSD Handler. -* struct sockaddr: Address Formats. -* struct sockaddr_in: Internet Address Formats. -* struct sockaddr_in6: Internet Address Formats. -* struct sockaddr_un: Local Namespace Details. -* struct stat: Attribute Meanings. -* struct stat64: Attribute Meanings. -* struct termios: Mode Data Types. -* struct timespec: Elapsed Time. -* struct timeval: Elapsed Time. -* struct timex: High Accuracy Clock. -* struct timezone: High-Resolution Calendar. -* struct tm: Broken-down Time. -* struct tms: Processor Time. -* struct utimbuf: File Times. -* struct utmp: Manipulating the Database. -* struct utmpx: XPG Functions. -* struct utsname: Platform Type. -* struct vtimes: Resource Usage. -* tcflag_t: Mode Data Types. -* time_t: Simple Calendar Time. -* uid_t: Reading Persona. -* union wait: BSD Wait Functions. -* va_list: Argument Macros. -* VISIT: Tree Search Function. -* wchar_t: Extended Char Intro. -* wctrans_t: Wide Character Case Conversion. -* wctype_t: Classification of Wide Characters. -* wint_t: Extended Char Intro. -* wordexp_t: Calling Wordexp. +* /etc/hostname: Host Identification. +* /etc/nsswitch.conf: NSS Configuration File. +* 4.N BSD Unix: Berkeley Unix. +* __va_copy: Copying and Concatenation. +* _POSIX_OPTION_ORDER environment variable.: Standard Environment. +* _POSIX_SAVED_IDS: How Change Persona. +* abort signal: Program Error Signals. +* aborting a program: Aborting a Program. +* absolute file name: File Name Resolution. +* absolute priority: Absolute Priority. +* absolute value functions: Absolute Value. +* accepting connections: Accepting Connections. +* access permission for a file: Access Permission. +* access, testing for: Testing File Access. +* accessing directories: Accessing Directories. +* address of socket: Socket Addresses. +* address space <1>: Program Basics. +* address space: Memory Subsystem. +* alarm signal: Alarm Signals. +* alarms, setting: Setting an Alarm. +* alignment (in obstacks): Obstacks Data Alignment. +* alignment (with malloc): Aligned Memory Blocks. +* alloca disadvantages: Disadvantages of Alloca. +* alloca function: Variable Size Automatic. +* allocating pseudo-terminals: Allocation. +* allocation (obstacks): Allocation in an Obstack. +* allocation debugging: Allocation Debugging. +* allocation hooks, for malloc: Hooks for Malloc. +* allocation of memory with malloc: Basic Allocation. +* allocation size of string: Representation of Strings. +* allocation statistics: Statistics of Malloc. +* alphabetic character <1>: Classification of Wide Characters. +* alphabetic character: Classification of Characters. +* alphanumeric character <1>: Classification of Wide Characters. +* alphanumeric character: Classification of Characters. +* append-access files: File Position. +* argc (program argument count): Program Arguments. +* argp (program argument parser): Argp. +* argp parser functions: Argp Parser Functions. +* ARGP_HELP_FMT environment variable: Argp User Customization. +* argument parsing with argp: Argp. +* argument promotion: Calling Variadics. +* argument vectors, null-character separated: Argz and Envz Vectors. +* arguments (variadic functions): Receiving Arguments. +* arguments, how many: How Many Arguments. +* arguments, to program: Program Arguments. +* argv (program argument vector): Program Arguments. +* argz vectors (string vectors): Argz and Envz Vectors. +* arithmetic expansion: Expansion Stages. +* array comparison functions: String/Array Comparison. +* array copy functions: Copying and Concatenation. +* array search function: Array Search Function. +* array sort function: Array Sort Function. +* ASCII character: Classification of Characters. +* assertions: Consistency Checking. +* attributes of a file: Attribute Meanings. +* automatic freeing: Variable Size Automatic. +* automatic memory allocation: Memory Allocation and C. +* automatic storage class: Memory Allocation and C. +* automatic storage with variable size: Variable Size Automatic. +* background job: Concepts of Job Control. +* background job, launching: Foreground and Background. +* backtrace: Backtraces. +* backtrace_fd: Backtraces. +* backtrace_symbols: Backtraces. +* base (of floating point number): Floating Point Concepts. +* baud rate: Line Speed. +* Berkeley Unix: Berkeley Unix. +* Bessel functions: Special Functions. +* bias (of floating point number exponent): Floating Point Concepts. +* big-endian: Byte Order. +* binary I/O to a stream: Block Input/Output. +* binary search function (for arrays): Array Search Function. +* binary stream: Binary Streams. +* binding a socket address: Socket Addresses. +* blank character <1>: Classification of Wide Characters. +* blank character: Classification of Characters. +* block I/O to a stream: Block Input/Output. +* blocked signals: Delivery of Signal. +* blocked signals, checking for: Checking for Pending Signals. +* blocking signals: Blocking Signals. +* blocking signals, in a handler: Blocking for Handler. +* bootstrapping, and services: Actions in the NSS configuration. +* break condition, detecting: Input Modes. +* break condition, generating: Line Control. +* breaking a string into tokens: Finding Tokens in a String. +* broken pipe signal: Operation Error Signals. +* broken-down time <1>: Broken-down Time. +* broken-down time: Calendar Time. +* BSD compatibility library: Process Group Functions. +* BSD compatibility library.: Feature Test Macros. +* BSD Unix: Berkeley Unix. +* buffering of streams: Stream Buffering. +* buffering, controlling: Controlling Buffering. +* bugs, reporting: Reporting Bugs. +* bus error: Program Error Signals. +* butterfly: Misc FP Arithmetic. +* byte order conversion, for socket: Byte Order. +* byte stream: Socket Concepts. +* C++ streams: Streams and I18N. +* calendar time: Time Basics. +* calendar time and broken-down time: Broken-down Time. +* calendar, Gregorian: Calendar Time. +* calling variadic functions: Calling Variadics. +* canonical input processing: Canonical or Not. +* capacity limits, POSIX: General Limits. +* carrier detect: Control Modes. +* case conversion of characters: Case Conversion. +* catching signals: Delivery of Signal. +* categories for locales: Locale Categories. +* change working directory: Working Directory. +* changing the locale: Setting the Locale. +* changing the size of a block (malloc): Changing Block Size. +* changing the size of a block (obstacks): Growing Objects. +* channels: Stream/Descriptor Precautions. +* character case conversion: Case Conversion. +* character predicates: Classification of Characters. +* character testing: Classification of Characters. +* checking for pending signals: Checking for Pending Signals. +* child process <1>: Process Creation Concepts. +* child process <2>: Processes. +* child process: Processor Time. +* child process signal: Job Control Signals. +* chunks: Obstack Chunks. +* classes, floating-point: Floating Point Classes. +* classification of characters: Classification of Characters. +* cleaning up a stream: Linked Channels. +* clearing terminal input queue: Line Control. +* client: Connections. +* clock ticks: Processor And CPU Time. +* clock, high accuracy: High Accuracy Clock. +* close-on-exec (file descriptor flag): Descriptor Flags. +* closing a file descriptor: Opening and Closing Files. +* closing a socket: Closing a Socket. +* closing a stream: Closing Streams. +* collating strings: Collation Functions. +* combining locales: Choosing Locale. +* command argument syntax: Argument Syntax. +* command arguments, parsing: Parsing Program Arguments. +* command line arguments: Program Arguments. +* command substitution: Expansion Stages. +* communication style (of a socket): Socket Concepts. +* comparing strings and arrays: String/Array Comparison. +* Comparison Function: Comparison Functions. +* compiling: Configuring and compiling. +* complex exponentiation functions: Exponents and Logarithms. +* complex logarithm functions: Exponents and Logarithms. +* complex numbers: Complex Numbers. +* complex trigonometric functions: Trig Functions. +* concatenating strings: Copying and Concatenation. +* configurations, all supported: Supported Configurations. +* configuring: Configuring and compiling. +* conjugate complex numbers: Operations on Complex. +* connecting a socket: Connecting. +* connection: Connections. +* consistency checking: Consistency Checking. +* consistency checking, of heap: Heap Consistency Checking. +* constants <1>: Mathematical Constants. +* constants: Memory Concepts. +* continue signal: Job Control Signals. +* control character <1>: Classification of Wide Characters. +* control character: Classification of Characters. +* control operations on files: Control Operations. +* controlling process: Controlling Terminal. +* controlling terminal: Concepts of Job Control. +* controlling terminal, access to: Access to the Terminal. +* controlling terminal, determining: Identifying the Terminal. +* controlling terminal, setting: Open-time Flags. +* conversion specifications (printf): Formatted Output Basics. +* conversion specifications (scanf): Formatted Input Basics. +* converting byte order: Byte Order. +* converting case of characters: Case Conversion. +* converting file descriptor to stream: Descriptors and Streams. +* converting floats to integers: Rounding Functions. +* converting group ID to group name: Lookup Group. +* converting group name to group ID: Lookup Group. +* converting host address to name: Host Names. +* converting host name to address: Host Names. +* converting network name to network number: Networks Database. +* converting network number to network name: Networks Database. +* converting port number to service name: Services Database. +* converting service name to port number: Services Database. +* converting string to collation order: Collation Functions. +* converting strings to numbers: Parsing of Numbers. +* converting user ID to user name: Lookup User. +* converting user name to user ID: Lookup User. +* cookie, for custom stream: Streams and Cookies. +* copy-on-write page fault: Locked Memory Details. +* copying strings and arrays: Copying and Concatenation. +* cpu priority: Priority. +* CPU time <1>: Processor Time. +* CPU time <2>: Processor And CPU Time. +* CPU time: Time Basics. +* create on open (file status flag): Open-time Flags. +* creating a directory: Creating Directories. +* creating a FIFO special file: FIFO Special Files. +* creating a pipe: Creating a Pipe. +* creating a pipe to a subprocess: Pipe to a Subprocess. +* creating a process: Process Creation Concepts. +* creating a socket: Creating a Socket. +* creating a socket pair: Socket Pairs. +* creating special files: Making Special Files. +* cube root function: Exponents and Logarithms. +* currency symbols: Currency Symbol. +* current limit: Limits on Resources. +* current working directory: Working Directory. +* custom streams: Custom Streams. +* customizing printf: Customizing Printf. +* data loss on sockets: Socket Concepts. +* databases: Name Service Switch. +* datagram socket: Datagrams. +* datagrams, transmitting: Sending Datagrams. +* date: Time Basics. +* Daylight Saving Time: Broken-down Time. +* decimal digit character: Classification of Characters. +* decimal-point separator: General Numeric. +* declaration (compared to definition): Header Files. +* declaring variadic functions: Calling Variadics. +* decompose complex numbers: Operations on Complex. +* default action (for a signal): Delivery of Signal. +* default action for a signal: Basic Signal Handling. +* default argument promotions: Calling Variadics. +* default value, and NSS: Notes on NSS Configuration File. +* defining new printf conversions: Customizing Printf. +* definition (compared to declaration): Header Files. +* delayed suspend character: Signal Characters. +* deleting a directory: Deleting Files. +* deleting a file: Deleting Files. +* delivery of signals: Delivery of Signal. +* descriptors and streams: Stream/Descriptor Precautions. +* digit character <1>: Classification of Wide Characters. +* digit character: Classification of Characters. +* directories, accessing: Accessing Directories. +* directories, creating: Creating Directories. +* directories, deleting: Deleting Files. +* directory: Directories. +* directory entry: Directories. +* directory hierarchy: Working with Directory Trees. +* directory stream: Accessing Directories. +* disadvantages of alloca: Disadvantages of Alloca. +* DISCARD character: Other Special. +* division by zero: FP Exceptions. +* DNS: Host Identification. +* DNS server unavailable: Actions in the NSS configuration. +* domain (of socket): Socket Concepts. +* domain error: Math Error Reporting. +* domain name: Host Identification. +* Domain Name System: Host Identification. +* dot notation, for Internet addresses: Abstract Host Addresses. +* DSUSP character: Signal Characters. +* duplicating file descriptors: Duplicating Descriptors. +* dynamic memory allocation: Memory Allocation and C. +* EBCDIC: Extended Char Intro. +* echo of terminal input: Local Modes. +* effective group ID: Process Persona. +* effective user ID: Process Persona. +* efficiency and malloc: Efficiency and Malloc. +* efficiency and obstacks: Extra Fast Growing. +* efficiency of chunks: Obstack Chunks. +* EINTR, and restarting interrupted primitives: Interrupted Primitives. +* elapsed time <1>: Elapsed Time. +* elapsed time: Time Basics. +* encryption: Trivial Encryption. +* end of file, on a stream: EOF and Errors. +* end-of-file, on a file descriptor: I/O Primitives. +* environment: Environment Variables. +* environment access: Environment Access. +* environment representation: Environment Access. +* environment variable: Environment Variables. +* environment vectors, null-character separated: Argz and Envz Vectors. +* envz vectors (environment vectors): Argz and Envz Vectors. +* EOF character: Editing Characters. +* EOL character: Editing Characters. +* EOL2 character: Editing Characters. +* epoch: Simple Calendar Time. +* ERASE character: Editing Characters. +* errno: System Calls. +* error codes: Error Reporting. +* error messages, in argp: Argp Helper Functions. +* error reporting: Error Reporting. +* errors, mathematical: Math Error Reporting. +* establishing a handler: Signal Actions. +* ethers: NSS Basics. +* EUC: Extended Char Intro. +* EUC-JP: glibc iconv Implementation. +* exception <1>: Program Error Signals. +* exception: FP Exceptions. +* exclusive lock: File Locks. +* exec functions: Executing a File. +* execing a program: Memory Concepts. +* executable: Memory Concepts. +* executing a file: Executing a File. +* exit status: Exit Status. +* exit status value: Program Termination. +* exiting a program: Memory Concepts. +* expansion of shell words: Word Expansion. +* exponent (of floating point number): Floating Point Concepts. +* exponentiation functions: Exponents and Logarithms. +* extending printf: Customizing Printf. +* extracting file descriptor from stream: Descriptors and Streams. +* fcntl function: Control Operations. +* feature test macros: Feature Test Macros. +* field splitting: Expansion Stages. +* FIFO special file: Pipes and FIFOs. +* file access permission: Access Permission. +* file access time: File Times. +* file attribute modification time: File Times. +* file attributes: Attribute Meanings. +* file creation mask: Setting Permissions. +* file descriptor flags: Descriptor Flags. +* file descriptor sets, for select: Waiting for I/O. +* file descriptors, standard: Descriptors and Streams. +* file locks: File Locks. +* file modification time: File Times. +* file name: File Names. +* file name component: Directories. +* file name errors: File Name Errors. +* file name resolution: File Name Resolution. +* file name translation flags: Open-time Flags. +* file names, multiple: Hard Links. +* file owner: File Owner. +* file permission bits: Permission Bits. +* file pointer: Streams. +* file position: File Position. +* file positioning on a file descriptor: File Position Primitive. +* file positioning on a stream: File Positioning. +* file status flags: File Status Flags. +* files, accessing: Memory Concepts. +* filtering i/o through subprocess: Pipe to a Subprocess. +* flag character (printf): Output Conversion Syntax. +* flag character (scanf): Input Conversion Syntax. +* flags for sigaction: Flags for Sigaction. +* flags, file name translation: Open-time Flags. +* flags, open-time action: Open-time Flags. +* floating point: Floating Point Numbers. +* floating point, IEEE: IEEE Floating Point. +* floating type measurements: Floating Type Macros. +* floating-point classes: Floating Point Classes. +* floating-point exception: Program Error Signals. +* flow control, terminal: Line Control. +* flushing a stream: Flushing Buffers. +* flushing terminal output queue: Line Control. +* foreground job: Concepts of Job Control. +* foreground job, launching: Foreground and Background. +* forking a process: Process Creation Concepts. +* format string, for printf: Formatted Output. +* format string, for scanf: Formatted Input. +* formatted input from a stream: Formatted Input. +* formatted messages: Formatted Messages. +* formatted output to a stream: Formatted Output. +* FP arithmetic: FP Bit Twiddling. +* FQDN: Host Identification. +* frame, real memory: Memory Concepts. +* freeing (obstacks): Freeing Obstack Objects. +* freeing memory: Memory Concepts. +* freeing memory allocated with malloc: Freeing after Malloc. +* fully buffered stream: Buffering Concepts. +* function prototypes (variadic): Variadic Prototypes. +* gamma function: Special Functions. +* gcvt_r: System V Number Conversion. +* gencat: The gencat program. +* generation of signals: Signal Generation. +* generic i/o control operations: IOCTLs. +* globbing: Globbing. +* graphic character <1>: Classification of Wide Characters. +* graphic character: Classification of Characters. +* Gregorian calendar: Calendar Time. +* group: NSS Basics. +* group database: Group Database. +* group ID: User and Group IDs. +* group name: User and Group IDs. +* group owner of a file: File Owner. +* grouping of digits: General Numeric. +* growing objects (in obstacks): Growing Objects. +* handling multiple signals: Merged Signals. +* hangup signal: Termination Signals. +* hard limit: Limits on Resources. +* hard link: Hard Links. +* header files: Header Files. +* heap consistency checking: Heap Consistency Checking. +* heap, dynamic allocation from: Unconstrained Allocation. +* heap, freeing memory from: Freeing after Malloc. +* hexadecimal digit character <1>: Classification of Wide Characters. +* hexadecimal digit character: Classification of Characters. +* hidden bit (of floating point number mantissa): Floating Point Concepts. +* hierarchy, directory: Working with Directory Trees. +* high-priority data: Out-of-Band Data. +* high-resolution time: Calendar Time. +* holes in files: File Position Primitive. +* home directory: Standard Environment. +* HOME environment variable: Standard Environment. +* hook functions (of custom streams): Hook Functions. +* host address, Internet: Abstract Host Addresses. +* host name: Host Identification. +* hostname: Host Identification. +* hosts: NSS Basics. +* hosts database: Host Names. +* how many arguments: How Many Arguments. +* hyperbolic functions: Hyperbolic Functions. +* identifying terminals: Is It a Terminal. +* IEEE 754: Floating Point Numbers. +* IEEE floating point: Floating Point Numbers. +* IEEE floating point representation: IEEE Floating Point. +* IEEE Std 1003.1: POSIX. +* IEEE Std 1003.2: POSIX. +* ignore action for a signal: Basic Signal Handling. +* illegal instruction: Program Error Signals. +* impossible events: Consistency Checking. +* independent channels: Independent Channels. +* inexact exception: FP Exceptions. +* infinity: Infinity and NaN. +* initial signal actions: Initial Signal Actions. +* inode number: Attribute Meanings. +* input available signal: Asynchronous I/O Signals. +* input conversions, for scanf: Table of Input Conversions. +* input from multiple files: Waiting for I/O. +* installation tools: Tools for Compilation. +* installing: Running make install. +* integer: Integers. +* integer division functions: Integer Division. +* integer type range: Range of Type. +* integer type width: Width of Type. +* interactive signals, from terminal: Local Modes. +* interactive stop signal: Job Control Signals. +* internal representation: Extended Char Intro. +* internationalization: Locales. +* Internet host address: Abstract Host Addresses. +* Internet namespace, for sockets: Internet Namespace. +* interprocess communication, with FIFO: FIFO Special Files. +* interprocess communication, with pipes: Creating a Pipe. +* interprocess communication, with signals: Kill Example. +* interprocess communication, with sockets: Sockets. +* interrupt character: Signal Characters. +* interrupt signal: Termination Signals. +* interrupt-driven input: Interrupt Input. +* interrupting primitives: Interrupted Primitives. +* interval: Time Basics. +* interval timer, setting: Setting an Alarm. +* INTR character: Signal Characters. +* invalid exception: FP Exceptions. +* inverse complex hyperbolic functions: Hyperbolic Functions. +* inverse complex trigonometric functions: Inverse Trig Functions. +* inverse hyperbolic functions: Hyperbolic Functions. +* inverse trigonometric functions: Inverse Trig Functions. +* invocation of program: Program Arguments. +* IOCTLs: IOCTLs. +* ISO 10646: Extended Char Intro. +* ISO 2022: Extended Char Intro. +* ISO 6937: Extended Char Intro. +* ISO C: ISO C. +* ISO-2022-JP: glibc iconv Implementation. +* ISO/IEC 9945-1: POSIX. +* ISO/IEC 9945-2: POSIX. +* job: Job Control. +* job control: Job Control. +* job control functions: Functions for Job Control. +* job control is optional: Job Control is Optional. +* job control signals: Job Control Signals. +* job control, enabling: Initializing the Shell. +* Kermit the frog: Search/Sort Example. +* kernel call: System Calls. +* kernel header files: Linux. +* KILL character: Editing Characters. +* kill signal: Termination Signals. +* killing a process: Signaling Another Process. +* Korn Shell: Wildcard Matching. +* LANG environment variable <1>: Standard Environment. +* LANG environment variable: The catgets Functions. +* launching jobs: Launching Jobs. +* LC_ALL environment variable <1>: Standard Environment. +* LC_ALL environment variable: The catgets Functions. +* LC_COLLATE environment variable: Standard Environment. +* LC_CTYPE environment variable: Standard Environment. +* LC_MESSAGES environment variable <1>: Standard Environment. +* LC_MESSAGES environment variable: The catgets Functions. +* LC_MONETARY environment variable: Standard Environment. +* LC_NUMERIC environment variable: Standard Environment. +* LC_TIME environment variable: Standard Environment. +* leap second: Broken-down Time. +* length of string: Representation of Strings. +* level, for socket options: Socket Options. +* library: Introduction. +* limit: Limits on Resources. +* limits on resource usage: Limits on Resources. +* limits, file name length: Limits for Files. +* limits, floating types: Floating Type Macros. +* limits, integer types: Range of Type. +* limits, link count of files: Limits for Files. +* limits, number of open files: General Limits. +* limits, number of processes: General Limits. +* limits, number of supplementary group IDs: General Limits. +* limits, pipe buffer size: Limits for Files. +* limits, POSIX: General Limits. +* limits, program argument size: General Limits. +* limits, terminal input queue: Limits for Files. +* limits, time zone name length: General Limits. +* line buffered stream: Buffering Concepts. +* line speed: Line Speed. +* lines (in a text file): Binary Streams. +* link: Directories. +* link, hard: Hard Links. +* link, soft: Symbolic Links. +* link, symbolic: Symbolic Links. +* linked channels: Linked Channels. +* listening (sockets): Listening. +* literals: Memory Concepts. +* little-endian: Byte Order. +* LNEXT character: Other Special. +* load average: Processor Resources. +* local namespace, for sockets: Local Namespace. +* local network address number: Abstract Host Addresses. +* local time: Calendar Time. +* locale categories: Locale Categories. +* locale, changing: Setting the Locale. +* locales: Locales. +* locking pages: Locking Pages. +* logarithm functions: Exponents and Logarithms. +* login name: User and Group IDs. +* login name, determining: Who Logged In. +* LOGNAME environment variable: Standard Environment. +* long jumps: Non-Local Exits. +* long-named options: Argument Syntax. +* longjmp: Advantages of Alloca. +* loss of data on sockets: Socket Concepts. +* lost resource signal: Operation Error Signals. +* lower-case character <1>: Classification of Wide Characters. +* lower-case character: Classification of Characters. +* macros: Obstack Functions. +* main function: Program Arguments. +* malloc debugger: Allocation Debugging. +* malloc function: Unconstrained Allocation. +* mantissa (of floating point number): Floating Point Concepts. +* matching failure, in scanf: Formatted Input Basics. +* math errors: Errors in Math Functions. +* mathematical constants: Mathematical Constants. +* maximum: Misc FP Arithmetic. +* maximum field width (scanf): Input Conversion Syntax. +* maximum limit: Limits on Resources. +* maximum possible integer: Integers. +* measurements of floating types: Floating Type Macros. +* memory allocation: Memory. +* memory lock: Locking Pages. +* memory mapped file: Memory Concepts. +* memory mapped I/O: Memory Concepts. +* memory page: Memory Subsystem. +* merging of signals: Merged Signals. +* MIN termios slot: Noncanonical Input. +* minimum: Misc FP Arithmetic. +* minimum field width (printf): Output Conversion Syntax. +* mininum possible integer: Integers. +* mixing descriptors and streams: Stream/Descriptor Precautions. +* modem disconnect: Control Modes. +* modem status lines: Control Modes. +* monetary value formatting: The Lame Way to Locale Data. +* multi-threaded application: Streams and Threads. +* multibyte character: Extended Char Intro. +* multibyte character string: Representation of Strings. +* multibyte string: Representation of Strings. +* multiple names for one file: Hard Links. +* multiplexing input: Waiting for I/O. +* multiply-add: Misc FP Arithmetic. +* name of running program: Error Messages. +* name of socket: Socket Addresses. +* Name Service Switch: Name Service Switch. +* name space: Reserved Names. +* names of signals: Standard Signals. +* namespace (of socket): Socket Concepts. +* NaN <1>: FP Bit Twiddling. +* NaN: Infinity and NaN. +* Netgroup: Netgroup Data. +* netgroup: NSS Basics. +* network byte order: Byte Order. +* network number: Abstract Host Addresses. +* network protocol: Socket Concepts. +* networks: NSS Basics. +* networks database: Networks Database. +* NIS: Host Identification. +* NIS domain name: Host Identification. +* nisplus, and booting: Actions in the NSS configuration. +* nisplus, and completeness: Actions in the NSS configuration. +* NLSPATH environment variable <1>: Standard Environment. +* NLSPATH environment variable: The catgets Functions. +* non-blocking open: Open-time Flags. +* non-local exit, from signal handler: Longjmp in Handler. +* non-local exits: Non-Local Exits. +* noncanonical input processing: Canonical or Not. +* normalization functions (floating-point): Normalization Functions. +* normalized floating point number: Floating Point Concepts. +* not a number: Infinity and NaN. +* NSS: Name Service Switch. +* nsswitch.conf: NSS Configuration File. +* null character: Representation of Strings. +* null pointer constant: Null Pointer Constant. +* null wide character: Representation of Strings. +* number of arguments passed: How Many Arguments. +* number syntax, parsing: Parsing of Numbers. +* numeric value formatting: The Lame Way to Locale Data. +* obstack status: Status of an Obstack. +* obstacks: Obstacks. +* open-time action flags: Open-time Flags. +* opening a file: I/O Concepts. +* opening a file descriptor: Opening and Closing Files. +* opening a pipe: Creating a Pipe. +* opening a pseudo-terminal pair: Pseudo-Terminal Pairs. +* opening a socket: Creating a Socket. +* opening a socket pair: Socket Pairs. +* opening a stream: Opening Streams. +* Optimization: FP Function Optimizations. +* optimizing NSS: Notes on NSS Configuration File. +* option parsing with argp: Argp. +* optional arguments: Variadic Functions. +* optional POSIX features: System Options. +* orientation, stream <1>: Streams and I18N. +* orientation, stream: Opening Streams. +* orphaned process group: Orphaned Process Groups. +* out-of-band data: Out-of-Band Data. +* output conversions, for printf: Table of Output Conversions. +* output possible signal: Asynchronous I/O Signals. +* overflow exception: FP Exceptions. +* owner of a file: File Owner. +* packet: Socket Concepts. +* page boundary: Aligned Memory Blocks. +* page fault: Memory Concepts. +* page fault, copy-on-write: Locked Memory Details. +* page frame: Memory Concepts. +* page, memory: Memory Subsystem. +* page, virtual memory: Memory Concepts. +* paging <1>: Locking Pages. +* paging: Memory Concepts. +* parameter promotion: String/Array Conventions. +* parent directory: File Name Resolution. +* parent process <1>: Process Creation Concepts. +* parent process: Processes. +* parity checking: Input Modes. +* parsing a template string: Parsing a Template String. +* parsing numbers (in formatted input): Parsing of Numbers. +* parsing program arguments: Parsing Program Arguments. +* parsing tokens from a string: Finding Tokens in a String. +* passwd: NSS Basics. +* password database: User Database. +* PATH environment variable: Standard Environment. +* pause function: Waiting for a Signal. +* peeking at input: Unreading. +* pending signals: Delivery of Signal. +* pending signals, checking for: Checking for Pending Signals. +* period of time: Time Basics. +* permission to access a file: Access Permission. +* persona: Process Persona. +* physical address: Memory Subsystem. +* physical memory: Memory Subsystem. +* pi (trigonometric constant): Trig Functions. +* pipe: Pipes and FIFOs. +* pipe signal: Operation Error Signals. +* pipe to a subprocess: Pipe to a Subprocess. +* port number: Ports. +* positioning a file descriptor: File Position Primitive. +* positioning a stream: File Positioning. +* positive difference: Misc FP Arithmetic. +* POSIX: POSIX. +* POSIX capacity limits: General Limits. +* POSIX optional features: System Options. +* POSIX.1: POSIX. +* POSIX.2: POSIX. +* power functions: Exponents and Logarithms. +* precision (of floating point number): Floating Point Concepts. +* precision (printf): Output Conversion Syntax. +* predicates on arrays: String/Array Comparison. +* predicates on characters: Classification of Characters. +* predicates on strings: String/Array Comparison. +* preemptive scheduling: Absolute Priority. +* primitives, interrupting: Interrupted Primitives. +* printing character <1>: Classification of Wide Characters. +* printing character: Classification of Characters. +* priority of a process: Priority. +* priority, absolute: Absolute Priority. +* process <1>: Processes. +* process: Program Basics. +* process completion: Process Completion. +* process group functions: Functions for Job Control. +* process group ID: Launching Jobs. +* process group leader: Launching Jobs. +* process groups: Job Control. +* process ID: Process Creation Concepts. +* process image: Process Creation Concepts. +* process lifetime: Process Creation Concepts. +* process priority: Priority. +* process signal mask: Process Signal Mask. +* process termination: Program Termination. +* processor time <1>: Processor Time. +* processor time: Time Basics. +* profiling alarm signal: Alarm Signals. +* profiling timer: Setting an Alarm. +* program: Program Basics. +* program argument syntax: Argument Syntax. +* program arguments: Program Arguments. +* program arguments, parsing: Parsing Program Arguments. +* program error signals: Program Error Signals. +* program name: Error Messages. +* program startup: Program Arguments. +* program termination: Program Termination. +* program termination signals: Termination Signals. +* programming your own streams: Custom Streams. +* project complex numbers: Operations on Complex. +* protocol (of socket): Socket Concepts. +* protocol family: Socket Concepts. +* protocols: NSS Basics. +* protocols database: Protocols Database. +* prototypes for variadic functions: Variadic Prototypes. +* pseudo-random numbers: Pseudo-Random Numbers. +* pseudo-terminals: Pseudo-Terminals. +* punctuation character <1>: Classification of Wide Characters. +* punctuation character: Classification of Characters. +* pushing input back: Unreading. +* quick sort function (for arrays): Array Sort Function. +* QUIT character: Signal Characters. +* quit signal: Termination Signals. +* quote removal: Expansion Stages. +* race conditions, relating to job control: Launching Jobs. +* race conditions, relating to signals: Signals in Handler. +* radix (of floating point number): Floating Point Concepts. +* raising signals: Generating Signals. +* random numbers: Pseudo-Random Numbers. +* random-access files: File Position. +* range error: Math Error Reporting. +* range of integer type: Range of Type. +* read lock: File Locks. +* reading from a directory: Accessing Directories. +* reading from a file descriptor: I/O Primitives. +* reading from a socket: Transferring Data. +* reading from a stream, by blocks: Block Input/Output. +* reading from a stream, by characters: Character Input. +* reading from a stream, formatted: Formatted Input. +* ready to run: Absolute Priority. +* real group ID: Process Persona. +* real user ID: Process Persona. +* real-time timer: Setting an Alarm. +* realtime CPU scheduling: Absolute Priority. +* realtime processing: Why Lock Pages. +* realtime scheduling: Realtime Scheduling. +* receiving datagrams: Receiving Datagrams. +* record locking: File Locks. +* redirecting input and output: Duplicating Descriptors. +* reentrant functions: Nonreentrancy. +* reentrant NSS functions: NSS Module Names. +* relative file name: File Name Resolution. +* removal of quotes: Expansion Stages. +* removing a file: Deleting Files. +* removing macros that shadow functions: Macro Definitions. +* renaming a file: Renaming Files. +* reporting bugs: Reporting Bugs. +* reporting errors: Error Reporting. +* REPRINT character: Editing Characters. +* reserved names: Reserved Names. +* resource limits: Limits on Resources. +* restarting interrupted primitives: Interrupted Primitives. +* restrictions on signal handler functions: Nonreentrancy. +* root directory: File Name Resolution. +* Rot13: Trivial Encryption. +* rpc: NSS Basics. +* runnable process: Absolute Priority. +* running a command: Running a Command. +* saved set-group-ID: How Change Persona. +* saved set-user-ID: How Change Persona. +* scanning the group list: Scanning All Groups. +* scanning the user list: Scanning All Users. +* scatter-gather: Scatter-Gather. +* scheduling, traditional: Traditional Scheduling. +* search function (for arrays): Array Search Function. +* search functions (for strings): Search Functions. +* seed (for random numbers): Pseudo-Random Numbers. +* seeking on a file descriptor: File Position Primitive. +* seeking on a stream: File Positioning. +* segmentation violation: Program Error Signals. +* sending a datagram: Sending Datagrams. +* sending signals: Generating Signals. +* sequential-access files: File Position. +* server: Connections. +* services: NSS Basics. +* services database: Services Database. +* session <1>: Concepts of Job Control. +* session: Job Control. +* session leader: Concepts of Job Control. +* setting an alarm: Setting an Alarm. +* setuid programs: How Change Persona. +* setuid programs and file access: Testing File Access. +* severity class <1>: Adding Severity Classes. +* severity class: Printing Formatted Messages. +* sgettext: GUI program problems. +* shadow: NSS Basics. +* shadowing functions with macros: Macro Definitions. +* shared lock: File Locks. +* shared memory: Memory Subsystem. +* shell: Concepts of Job Control. +* shift state: Keeping the state. +* shrinking objects: Growing Objects. +* shutting down a socket: Closing a Socket. +* sigaction flags: Flags for Sigaction. +* sigaction function: Advanced Signal Handling. +* SIGCHLD, handling of: Stopped and Terminated Jobs. +* sign (of floating point number): Floating Point Concepts. +* signal <1>: Signal Handling. +* signal: FP Exceptions. +* signal action: Delivery of Signal. +* signal actions: Signal Actions. +* signal flags: Flags for Sigaction. +* signal function: Basic Signal Handling. +* signal handler function: Defining Handlers. +* signal mask: Process Signal Mask. +* signal messages: Signal Messages. +* signal names: Standard Signals. +* signal number: Standard Signals. +* signal set: Signal Sets. +* signals, generating: Generating Signals. +* signedness: Integers. +* significand (of floating point number): Floating Point Concepts. +* SIGTTIN, from background job: Access to the Terminal. +* SIGTTOU, from background job: Access to the Terminal. +* simple time: Calendar Time. +* single-byte string: Representation of Strings. +* size of string: Representation of Strings. +* SJIS: Extended Char Intro. +* socket: Sockets. +* socket address (name) binding: Socket Addresses. +* socket domain: Socket Concepts. +* socket namespace: Socket Concepts. +* socket option level: Socket Options. +* socket options: Socket Options. +* socket pair: Socket Pairs. +* socket protocol: Socket Concepts. +* socket shutdown: Closing a Socket. +* socket, client actions: Connecting. +* socket, closing: Closing a Socket. +* socket, connecting: Connecting. +* socket, creating: Creating a Socket. +* socket, initiating a connection: Connecting. +* sockets, accepting connections: Accepting Connections. +* sockets, listening: Listening. +* sockets, server actions: Listening. +* soft limit: Limits on Resources. +* soft link: Symbolic Links. +* sort function (for arrays): Array Sort Function. +* sparse files: File Position Primitive. +* special files: Making Special Files. +* special functions: Special Functions. +* specified action (for a signal): Delivery of Signal. +* speed of execution: Why Lock Pages. +* square root function: Exponents and Logarithms. +* stable sorting: Array Sort Function. +* standard dot notation, for Internet addresses: Abstract Host Addresses. +* standard environment variables: Standard Environment. +* standard error file descriptor: Descriptors and Streams. +* standard error stream: Standard Streams. +* standard file descriptors: Descriptors and Streams. +* standard input file descriptor: Descriptors and Streams. +* standard input stream: Standard Streams. +* standard output file descriptor: Descriptors and Streams. +* standard output stream: Standard Streams. +* standard streams: Standard Streams. +* standards: Standards and Portability. +* START character: Start/Stop Characters. +* startup of program: Program Arguments. +* stateful <1>: glibc iconv Implementation. +* stateful <2>: iconv Examples. +* stateful <3>: Generic Conversion Interface. +* stateful <4>: Converting Strings. +* stateful <5>: Converting a Character. +* stateful: Keeping the state. +* static memory allocation: Memory Allocation and C. +* static storage class: Memory Allocation and C. +* STATUS character: Other Special. +* status codes: Error Reporting. +* status of a file: Attribute Meanings. +* status of obstack: Status of an Obstack. +* sticky bit: Permission Bits. +* STOP character: Start/Stop Characters. +* stop signal: Job Control Signals. +* stopped job: Concepts of Job Control. +* stopped jobs, continuing: Continuing Stopped Jobs. +* stopped jobs, detecting: Stopped and Terminated Jobs. +* storage allocation: Memory. +* stream (sockets): Socket Concepts. +* stream orientation <1>: Streams and I18N. +* stream orientation: Opening Streams. +* stream, for I/O to a string: String Streams. +* streams and descriptors: Stream/Descriptor Precautions. +* streams, and file descriptors: Descriptors and Streams. +* streams, C++: Streams and I18N. +* streams, standard: Standard Streams. +* string: Representation of Strings. +* string allocation: Representation of Strings. +* string collation functions: Collation Functions. +* string comparison functions: String/Array Comparison. +* string concatenation functions: Copying and Concatenation. +* string copy functions: Copying and Concatenation. +* string length: Representation of Strings. +* string literal: Representation of Strings. +* string search functions: Search Functions. +* string stream: String Streams. +* string vectors, null-character separated: Argz and Envz Vectors. +* string, representation of: Representation of Strings. +* style of communication (of a socket): Socket Concepts. +* subshell: Initializing the Shell. +* substitution of variables and commands: Expansion Stages. +* successive signals: Merged Signals. +* summer time: Broken-down Time. +* SunOS: Berkeley Unix. +* supplementary group IDs: Process Persona. +* SUSP character: Signal Characters. +* suspend character: Signal Characters. +* SVID: SVID. +* swap space: Memory Concepts. +* symbolic link: Symbolic Links. +* symbolic link, opening: Open-time Flags. +* synchronizing <1>: Synchronizing AIO Operations. +* synchronizing: Synchronizing I/O. +* syntax error messages, in argp: Argp Helper Functions. +* syntax, for program arguments: Argument Syntax. +* syntax, for reading numbers: Parsing of Numbers. +* sysconf <1>: Processor Resources. +* sysconf: Query Memory Parameters. +* system call: System Calls. +* system call number: System Calls. +* System V Unix: SVID. +* TCP (Internet protocol): Protocols Database. +* template, for printf: Formatted Output. +* template, for scanf: Formatted Input. +* TERM environment variable: Standard Environment. +* terminal flow control: Line Control. +* terminal identification: Is It a Terminal. +* terminal input queue: I/O Queues. +* terminal input queue, clearing: Line Control. +* terminal input signal: Job Control Signals. +* terminal line control functions: Line Control. +* terminal line speed: Line Speed. +* terminal mode data types: Mode Data Types. +* terminal mode functions: Mode Functions. +* terminal modes, BSD: BSD Terminal Modes. +* terminal output queue: I/O Queues. +* terminal output queue, flushing: Line Control. +* terminal output signal: Job Control Signals. +* terminated jobs, detecting: Stopped and Terminated Jobs. +* termination signal: Termination Signals. +* testing access permission: Testing File Access. +* testing exit status of child process: Process Completion. +* text stream: Binary Streams. +* thrashing: Memory Subsystem. +* thread of control: Program Basics. +* threads: Streams and Threads. +* ticks, clock: Processor And CPU Time. +* tilde expansion: Expansion Stages. +* time: Time Basics. +* TIME termios slot: Noncanonical Input. +* time zone: TZ Variable. +* time zone database: TZ Variable. +* time, elapsed: Time Basics. +* time, high precision: High Accuracy Clock. +* timer, profiling: Setting an Alarm. +* timer, real-time: Setting an Alarm. +* timer, virtual: Setting an Alarm. +* timers, setting: Setting an Alarm. +* timespec: Elapsed Time. +* timeval: Elapsed Time. +* timing error in signal handling: Remembering a Signal. +* TMPDIR environment variable: Temporary Files. +* tokenizing strings: Finding Tokens in a String. +* tools, for installing library: Tools for Compilation. +* transmitting datagrams: Sending Datagrams. +* tree, directory: Working with Directory Trees. +* triangulation: glibc iconv Implementation. +* trigonometric functions: Trig Functions. +* type measurements, floating: Floating Type Macros. +* type measurements, integer: Width of Type. +* type modifier character (printf): Output Conversion Syntax. +* type modifier character (scanf): Input Conversion Syntax. +* typeahead buffer: I/O Queues. +* TZ environment variable: Standard Environment. +* UCS-2: Extended Char Intro. +* UCS-4: Extended Char Intro. +* ulps: Errors in Math Functions. +* umask: Setting Permissions. +* unbuffered stream: Buffering Concepts. +* unconstrained memory allocation: Unconstrained Allocation. +* undefining macros that shadow functions: Macro Definitions. +* underflow exception: FP Exceptions. +* Unicode: Extended Char Intro. +* Unix, Berkeley: Berkeley Unix. +* Unix, System V: SVID. +* unlinking a file: Deleting Files. +* unordered comparison: FP Comparison Functions. +* unreading characters: Unreading. +* upgrading from libc5: Linux. +* upper-case character <1>: Classification of Wide Characters. +* upper-case character: Classification of Characters. +* urgent data signal: Asynchronous I/O Signals. +* urgent socket condition: Out-of-Band Data. +* usage limits: Limits on Resources. +* usage messages, in argp: Argp Helper Functions. +* user accounting database: User Accounting Database. +* user database: User Database. +* user ID: User and Group IDs. +* user ID, determining: Who Logged In. +* user name: User and Group IDs. +* user signals: Miscellaneous Signals. +* usual file name errors: File Name Errors. +* UTF-16: Extended Char Intro. +* UTF-7: Extended Char Intro. +* UTF-8: Extended Char Intro. +* va_copy: Copying and Concatenation. +* variable number of arguments: Variadic Functions. +* variable substitution: Expansion Stages. +* variable-sized arrays: GNU C Variable-Size Arrays. +* variadic function argument access: Receiving Arguments. +* variadic function prototypes: Variadic Prototypes. +* variadic functions: Variadic Functions. +* variadic functions, calling: Calling Variadics. +* virtual time alarm signal: Alarm Signals. +* virtual timer: Setting an Alarm. +* volatile declarations: Nonreentrancy. +* waiting for a signal: Waiting for a Signal. +* waiting for completion of child process: Process Completion. +* waiting for input or output: Waiting for I/O. +* WERASE character: Editing Characters. +* whitespace character <1>: Classification of Wide Characters. +* whitespace character: Classification of Characters. +* wide character: Extended Char Intro. +* wide character string: Representation of Strings. +* width of integer type: Width of Type. +* wildcard expansion: Expansion Stages. +* wint_t: String/Array Conventions. +* word expansion: Word Expansion. +* working directory: Working Directory. +* write lock: File Locks. +* writing to a file descriptor: I/O Primitives. +* writing to a socket: Transferring Data. +* writing to a stream, by blocks: Block Input/Output. +* writing to a stream, by characters: Simple Output. +* writing to a stream, formatted: Formatted Output. +* YP: Host Identification. +* YP domain name: Host Identification. +* zero divide: FP Exceptions. diff -durpNa glibc-2.2.2/manual/libc.info-55 glibc-2.2.3/manual/libc.info-55 --- glibc-2.2.2/manual/libc.info-55 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-55 Wed Apr 25 14:55:23 2001 @@ -31,1319 +31,136 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Function Index, Next: Variable Index, Prev: Type Index, Up: Top +File: libc.info, Node: Type Index, Next: Function Index, Prev: Concept Index, Up: Top -Function and Macro Index -************************ +Type Index +********** * Menu: -* __fbufsize: Controlling Buffering. -* __flbf: Controlling Buffering. -* __fpending: Controlling Buffering. -* __fpurge: Flushing Buffers. -* __freadable: Opening Streams. -* __freading: Opening Streams. -* __fsetlocking: Streams and Threads. -* __fwritable: Opening Streams. -* __fwriting: Opening Streams. -* __va_copy: Argument Macros. -* _Exit: Termination Internals. -* _exit: Termination Internals. -* _flushlbf: Flushing Buffers. -* _tolower: Case Conversion. -* _toupper: Case Conversion. -* a64l: Encode Binary Data. -* abort: Aborting a Program. -* abs: Absolute Value. -* accept: Accepting Connections. -* access: Testing File Access. -* acos: Inverse Trig Functions. -* acosf: Inverse Trig Functions. -* acosh: Hyperbolic Functions. -* acoshf: Hyperbolic Functions. -* acoshl: Hyperbolic Functions. -* acosl: Inverse Trig Functions. -* addmntent: mtab. -* addseverity: Adding Severity Classes. -* adjtime: High-Resolution Calendar. -* adjtimex: High-Resolution Calendar. -* aio_cancel: Cancel AIO Operations. -* aio_cancel64: Cancel AIO Operations. -* aio_error: Status of AIO Operations. -* aio_error64: Status of AIO Operations. -* aio_fsync: Synchronizing AIO Operations. -* aio_fsync64: Synchronizing AIO Operations. -* aio_init: Configuration of AIO. -* aio_read: Asynchronous Reads/Writes. -* aio_read64: Asynchronous Reads/Writes. -* aio_return: Status of AIO Operations. -* aio_return64: Status of AIO Operations. -* aio_suspend: Synchronizing AIO Operations. -* aio_suspend64: Synchronizing AIO Operations. -* aio_write: Asynchronous Reads/Writes. -* aio_write64: Asynchronous Reads/Writes. -* alarm: Setting an Alarm. -* alloca: Variable Size Automatic. -* alphasort: Scanning Directory Content. -* alphasort64: Scanning Directory Content. -* argp_error: Argp Helper Functions. -* argp_failure: Argp Helper Functions. -* argp_help: Argp Help. -* argp_parse: Argp. -* argp_state_help: Argp Helper Functions. -* argp_usage: Argp Helper Functions. -* argz_add: Argz Functions. -* argz_add_sep: Argz Functions. -* argz_append: Argz Functions. -* argz_count: Argz Functions. -* argz_create: Argz Functions. -* argz_create_sep: Argz Functions. -* argz_delete: Argz Functions. -* argz_extract: Argz Functions. -* argz_insert: Argz Functions. -* argz_next: Argz Functions. -* argz_replace: Argz Functions. -* argz_stringify: Argz Functions. -* asctime: Formatting Calendar Time. -* asctime_r: Formatting Calendar Time. -* asin: Inverse Trig Functions. -* asinf: Inverse Trig Functions. -* asinh: Hyperbolic Functions. -* asinhf: Hyperbolic Functions. -* asinhl: Hyperbolic Functions. -* asinl: Inverse Trig Functions. -* asprintf: Dynamic Output. -* assert: Consistency Checking. -* assert_perror: Consistency Checking. -* atan: Inverse Trig Functions. -* atan2: Inverse Trig Functions. -* atan2f: Inverse Trig Functions. -* atan2l: Inverse Trig Functions. -* atanf: Inverse Trig Functions. -* atanh: Hyperbolic Functions. -* atanhf: Hyperbolic Functions. -* atanhl: Hyperbolic Functions. -* atanl: Inverse Trig Functions. -* atexit: Cleanups on Exit. -* atof: Parsing of Floats. -* atoi: Parsing of Integers. -* atol: Parsing of Integers. -* atoll: Parsing of Integers. -* backtrace: Backtraces. -* backtrace_symbols: Backtraces. -* backtrace_symbols_fd: Backtraces. -* basename: Finding Tokens in a String. -* bcmp: String/Array Comparison. -* bcopy: Copying and Concatenation. -* bind: Setting Address. -* bind_textdomain_codeset: Charset conversion in gettext. -* bindtextdomain: Locating gettext catalog. -* brk: Resizing the Data Segment. -* bsearch: Array Search Function. -* btowc: Converting a Character. -* bzero: Copying and Concatenation. -* cabs: Absolute Value. -* cabsf: Absolute Value. -* cabsl: Absolute Value. -* cacos: Inverse Trig Functions. -* cacosf: Inverse Trig Functions. -* cacosh: Hyperbolic Functions. -* cacoshf: Hyperbolic Functions. -* cacoshl: Hyperbolic Functions. -* cacosl: Inverse Trig Functions. -* calloc: Allocating Cleared Space. -* carg: Operations on Complex. -* cargf: Operations on Complex. -* cargl: Operations on Complex. -* casin: Inverse Trig Functions. -* casinf: Inverse Trig Functions. -* casinh: Hyperbolic Functions. -* casinhf: Hyperbolic Functions. -* casinhl: Hyperbolic Functions. -* casinl: Inverse Trig Functions. -* catan: Inverse Trig Functions. -* catanf: Inverse Trig Functions. -* catanh: Hyperbolic Functions. -* catanhf: Hyperbolic Functions. -* catanhl: Hyperbolic Functions. -* catanl: Inverse Trig Functions. -* catclose: The catgets Functions. -* catgets: The catgets Functions. -* catopen: The catgets Functions. -* cbc_crypt: DES Encryption. -* cbrt: Exponents and Logarithms. -* cbrtf: Exponents and Logarithms. -* cbrtl: Exponents and Logarithms. -* ccos: Trig Functions. -* ccosf: Trig Functions. -* ccosh: Hyperbolic Functions. -* ccoshf: Hyperbolic Functions. -* ccoshl: Hyperbolic Functions. -* ccosl: Trig Functions. -* ceil: Rounding Functions. -* ceilf: Rounding Functions. -* ceill: Rounding Functions. -* cexp: Exponents and Logarithms. -* cexpf: Exponents and Logarithms. -* cexpl: Exponents and Logarithms. -* cfgetispeed: Line Speed. -* cfgetospeed: Line Speed. -* cfmakeraw: Noncanonical Input. -* cfree: Freeing after Malloc. -* cfsetispeed: Line Speed. -* cfsetospeed: Line Speed. -* cfsetspeed: Line Speed. -* chdir: Working Directory. -* chmod: Setting Permissions. -* chown: File Owner. -* cimag: Operations on Complex. -* cimagf: Operations on Complex. -* cimagl: Operations on Complex. -* clearenv: Environment Access. -* clearerr: Error Recovery. -* clearerr_unlocked: Error Recovery. -* clock: CPU Time. -* clog: Exponents and Logarithms. -* clog10: Exponents and Logarithms. -* clog10f: Exponents and Logarithms. -* clog10l: Exponents and Logarithms. -* clogf: Exponents and Logarithms. -* clogl: Exponents and Logarithms. -* close: Opening and Closing Files. -* closedir: Reading/Closing Directory. -* closelog: closelog. -* confstr: String Parameters. -* conj: Operations on Complex. -* conjf: Operations on Complex. -* conjl: Operations on Complex. -* connect: Connecting. -* copysign: FP Bit Twiddling. -* copysignf: FP Bit Twiddling. -* copysignl: FP Bit Twiddling. -* cos: Trig Functions. -* cosf: Trig Functions. -* cosh: Hyperbolic Functions. -* coshf: Hyperbolic Functions. -* coshl: Hyperbolic Functions. -* cosl: Trig Functions. -* cpow: Exponents and Logarithms. -* cpowf: Exponents and Logarithms. -* cpowl: Exponents and Logarithms. -* cproj: Operations on Complex. -* cprojf: Operations on Complex. -* cprojl: Operations on Complex. -* creal: Operations on Complex. -* crealf: Operations on Complex. -* creall: Operations on Complex. -* creat: Opening and Closing Files. -* creat64: Opening and Closing Files. -* crypt: crypt. -* crypt_r: crypt. -* csin: Trig Functions. -* csinf: Trig Functions. -* csinh: Hyperbolic Functions. -* csinhf: Hyperbolic Functions. -* csinhl: Hyperbolic Functions. -* csinl: Trig Functions. -* csqrt: Exponents and Logarithms. -* csqrtf: Exponents and Logarithms. -* csqrtl: Exponents and Logarithms. -* ctan: Trig Functions. -* ctanf: Trig Functions. -* ctanh: Hyperbolic Functions. -* ctanhf: Hyperbolic Functions. -* ctanhl: Hyperbolic Functions. -* ctanl: Trig Functions. -* ctermid: Identifying the Terminal. -* ctime: Formatting Calendar Time. -* ctime_r: Formatting Calendar Time. -* cuserid: Who Logged In. -* dcgettext: Translation with gettext. -* dcngettext: Advanced gettext functions. -* DES_FAILED: DES Encryption. -* des_setparity: DES Encryption. -* dgettext: Translation with gettext. -* difftime: Elapsed Time. -* dirfd: Opening a Directory. -* dirname: Finding Tokens in a String. -* div: Integer Division. -* dngettext: Advanced gettext functions. -* drand48: SVID Random. -* drand48_r: SVID Random. -* drem: Remainder Functions. -* dremf: Remainder Functions. -* dreml: Remainder Functions. -* DTTOIF: Directory Entries. -* dup: Duplicating Descriptors. -* dup2: Duplicating Descriptors. -* ecb_crypt: DES Encryption. -* ecvt: System V Number Conversion. -* ecvt_r: System V Number Conversion. -* encrypt: DES Encryption. -* encrypt_r: DES Encryption. -* endfsent: fstab. -* endgrent: Scanning All Groups. -* endhostent: Host Names. -* endmntent: mtab. -* endnetent: Networks Database. -* endnetgrent: Lookup Netgroup. -* endprotoent: Protocols Database. -* endpwent: Scanning All Users. -* endservent: Services Database. -* endutent: Manipulating the Database. -* endutxent: XPG Functions. -* envz_add: Envz Functions. -* envz_entry: Envz Functions. -* envz_get: Envz Functions. -* envz_merge: Envz Functions. -* envz_strip: Envz Functions. -* erand48: SVID Random. -* erand48_r: SVID Random. -* erf: Special Functions. -* erfc: Special Functions. -* erfcf: Special Functions. -* erfcl: Special Functions. -* erff: Special Functions. -* erfl: Special Functions. -* execl: Executing a File. -* execle: Executing a File. -* execlp: Executing a File. -* execv: Executing a File. -* execve: Executing a File. -* execvp: Executing a File. -* exit: Normal Termination. -* exp: Exponents and Logarithms. -* exp10: Exponents and Logarithms. -* exp10f: Exponents and Logarithms. -* exp10l: Exponents and Logarithms. -* exp2: Exponents and Logarithms. -* exp2f: Exponents and Logarithms. -* exp2l: Exponents and Logarithms. -* expf: Exponents and Logarithms. -* expl: Exponents and Logarithms. -* expm1: Exponents and Logarithms. -* expm1f: Exponents and Logarithms. -* expm1l: Exponents and Logarithms. -* fabs: Absolute Value. -* fabsf: Absolute Value. -* fabsl: Absolute Value. -* fchdir: Working Directory. -* fchmod: Setting Permissions. -* fchown: File Owner. -* fclean: Cleaning Streams. -* fclose: Closing Streams. -* fcloseall: Closing Streams. -* fcntl: Control Operations. -* fcvt: System V Number Conversion. -* fcvt_r: System V Number Conversion. -* FD_CLR: Waiting for I/O. -* FD_ISSET: Waiting for I/O. -* FD_SET: Waiting for I/O. -* FD_ZERO: Waiting for I/O. -* fdatasync: Synchronizing I/O. -* fdim: Misc FP Arithmetic. -* fdimf: Misc FP Arithmetic. -* fdiml: Misc FP Arithmetic. -* fdopen: Descriptors and Streams. -* feclearexcept: Status bit operations. -* fedisableexcept: Control Functions. -* feenableexcept: Control Functions. -* fegetenv: Control Functions. -* fegetexcept: Control Functions. -* fegetexceptflag: Status bit operations. -* fegetround: Rounding. -* feholdexcept: Control Functions. -* feof: EOF and Errors. -* feof_unlocked: EOF and Errors. -* feraiseexcept: Status bit operations. -* ferror: EOF and Errors. -* ferror_unlocked: EOF and Errors. -* fesetenv: Control Functions. -* fesetexceptflag: Status bit operations. -* fesetround: Rounding. -* fetestexcept: Status bit operations. -* feupdateenv: Control Functions. -* fflush: Flushing Buffers. -* fflush_unlocked: Flushing Buffers. -* fgetc: Character Input. -* fgetc_unlocked: Character Input. -* fgetgrent: Scanning All Groups. -* fgetgrent_r: Scanning All Groups. -* fgetpos: Portable Positioning. -* fgetpos64: Portable Positioning. -* fgetpwent: Scanning All Users. -* fgetpwent_r: Scanning All Users. -* fgets: Line Input. -* fgets_unlocked: Line Input. -* fgetwc: Character Input. -* fgetwc_unlocked: Character Input. -* fgetws: Line Input. -* fgetws_unlocked: Line Input. -* fileno: Descriptors and Streams. -* fileno_unlocked: Descriptors and Streams. -* finite: Floating Point Classes. -* finitef: Floating Point Classes. -* finitel: Floating Point Classes. -* flockfile: Streams and Threads. -* floor: Rounding Functions. -* floorf: Rounding Functions. -* floorl: Rounding Functions. -* fma: Misc FP Arithmetic. -* fmaf: Misc FP Arithmetic. -* fmal: Misc FP Arithmetic. -* fmax: Misc FP Arithmetic. -* fmaxf: Misc FP Arithmetic. -* fmaxl: Misc FP Arithmetic. -* fmemopen: String Streams. -* fmin: Misc FP Arithmetic. -* fminf: Misc FP Arithmetic. -* fminl: Misc FP Arithmetic. -* fmod: Remainder Functions. -* fmodf: Remainder Functions. -* fmodl: Remainder Functions. -* fmtmsg: Printing Formatted Messages. -* fnmatch: Wildcard Matching. -* fopen: Opening Streams. -* fopen64: Opening Streams. -* fopencookie: Streams and Cookies. -* fork: Creating a Process. -* forkpty: Pseudo-Terminal Pairs. -* fpathconf: Pathconf. -* fpclassify: Floating Point Classes. -* fprintf: Formatted Output Functions. -* fputc: Simple Output. -* fputc_unlocked: Simple Output. -* fputs: Simple Output. -* fputs_unlocked: Simple Output. -* fputwc: Simple Output. -* fputwc_unlocked: Simple Output. -* fputws: Simple Output. -* fputws_unlocked: Simple Output. -* fread: Block Input/Output. -* fread_unlocked: Block Input/Output. -* free: Freeing after Malloc. -* freopen: Opening Streams. -* freopen64: Opening Streams. -* frexp: Normalization Functions. -* frexpf: Normalization Functions. -* frexpl: Normalization Functions. -* fscanf: Formatted Input Functions. -* fseek: File Positioning. -* fseeko: File Positioning. -* fseeko64: File Positioning. -* fsetpos: Portable Positioning. -* fsetpos64: Portable Positioning. -* fstat: Reading Attributes. -* fstat64: Reading Attributes. -* fsync: Synchronizing I/O. -* ftell: File Positioning. -* ftello: File Positioning. -* ftello64: File Positioning. -* ftruncate: File Size. -* ftruncate64: File Size. -* ftrylockfile: Streams and Threads. -* ftw: Working with Directory Trees. -* ftw64: Working with Directory Trees. -* funlockfile: Streams and Threads. -* fwide: Streams and I18N. -* fwprintf: Formatted Output Functions. -* fwrite: Block Input/Output. -* fwrite_unlocked: Block Input/Output. -* fwscanf: Formatted Input Functions. -* gamma: Special Functions. -* gammaf: Special Functions. -* gammal: Special Functions. -* gcvt: System V Number Conversion. -* get_current_dir_name: Working Directory. -* get_nprocs: Processor Resources. -* get_nprocs_conf: Processor Resources. -* getc: Character Input. -* getc_unlocked: Character Input. -* getchar: Character Input. -* getchar_unlocked: Character Input. -* getcwd: Working Directory. -* getdate: General Time String Parsing. -* getdate_r: General Time String Parsing. -* getdelim: Line Input. -* getdomainnname: Host Identification. -* getegid: Reading Persona. -* getenv: Environment Access. -* geteuid: Reading Persona. -* getfsent: fstab. -* getfsfile: fstab. -* getfsspec: fstab. -* getgid: Reading Persona. -* getgrent: Scanning All Groups. -* getgrent_r: Scanning All Groups. -* getgrgid: Lookup Group. -* getgrgid_r: Lookup Group. -* getgrnam: Lookup Group. -* getgrnam_r: Lookup Group. -* getgroups: Reading Persona. -* gethostbyaddr: Host Names. -* gethostbyaddr_r: Host Names. -* gethostbyname: Host Names. -* gethostbyname2: Host Names. -* gethostbyname2_r: Host Names. -* gethostbyname_r: Host Names. -* gethostent: Host Names. -* gethostid: Host Identification. -* gethostname: Host Identification. -* getitimer: Setting an Alarm. -* getline: Line Input. -* getloadavg: Processor Resources. -* getlogin: Who Logged In. -* getmntent: mtab. -* getmntent_r: mtab. -* getnetbyaddr: Networks Database. -* getnetbyname: Networks Database. -* getnetent: Networks Database. -* getnetgrent: Lookup Netgroup. -* getnetgrent_r: Lookup Netgroup. -* getopt: Using Getopt. -* getopt_long: Getopt Long Options. -* getopt_long_only: Getopt Long Options. -* getpagesize: Query Memory Parameters. -* getpass: getpass. -* getpeername: Who is Connected. -* getpgid: Process Group Functions. -* getpgrp: Process Group Functions. -* getpid: Process Identification. -* getppid: Process Identification. -* getpriority: Traditional Scheduling Functions. -* getprotobyname: Protocols Database. -* getprotobynumber: Protocols Database. -* getprotoent: Protocols Database. -* getpt: Allocation. -* getpwent: Scanning All Users. -* getpwent_r: Scanning All Users. -* getpwnam: Lookup User. -* getpwnam_r: Lookup User. -* getpwuid: Lookup User. -* getpwuid_r: Lookup User. -* getrlimit: Limits on Resources. -* getrlimit64: Limits on Resources. -* getrusage: Resource Usage. -* gets: Line Input. -* getservbyname: Services Database. -* getservbyport: Services Database. -* getservent: Services Database. -* getsid: Process Group Functions. -* getsockname: Reading Address. -* getsockopt: Socket Option Functions. -* getsubopt: Suboptions. -* gettext: Translation with gettext. -* gettimeofday: High-Resolution Calendar. -* getuid: Reading Persona. -* getumask: Setting Permissions. -* getutent: Manipulating the Database. -* getutent_r: Manipulating the Database. -* getutid: Manipulating the Database. -* getutid_r: Manipulating the Database. -* getutline: Manipulating the Database. -* getutline_r: Manipulating the Database. -* getutmp: XPG Functions. -* getutmpx: XPG Functions. -* getutxent: XPG Functions. -* getutxid: XPG Functions. -* getutxline: XPG Functions. -* getw: Character Input. -* getwc: Character Input. -* getwc_unlocked: Character Input. -* getwchar: Character Input. -* getwchar_unlocked: Character Input. -* getwd: Working Directory. -* glob: Calling Glob. -* glob64: Calling Glob. -* globfree: More Flags for Globbing. -* globfree64: More Flags for Globbing. -* gmtime: Broken-down Time. -* gmtime_r: Broken-down Time. -* grantpt: Allocation. -* gsignal: Signaling Yourself. -* gtty: BSD Terminal Modes. -* hasmntopt: mtab. -* hcreate: Hash Search Function. -* hcreate_r: Hash Search Function. -* hdestroy: Hash Search Function. -* hdestroy_r: Hash Search Function. -* hsearch: Hash Search Function. -* hsearch_r: Hash Search Function. -* htonl: Byte Order. -* htons: Byte Order. -* hypot: Exponents and Logarithms. -* hypotf: Exponents and Logarithms. -* hypotl: Exponents and Logarithms. -* iconv: Generic Conversion Interface. -* iconv_close: Generic Conversion Interface. -* iconv_open: Generic Conversion Interface. -* if_freenameindex: Interface Naming. -* if_indextoname: Interface Naming. -* if_nameindex: Interface Naming. -* if_nametoindex: Interface Naming. -* IFTODT: Directory Entries. -* ilogb: Exponents and Logarithms. -* ilogbf: Exponents and Logarithms. -* ilogbl: Exponents and Logarithms. -* imaxabs: Absolute Value. -* imaxdiv: Integer Division. -* index: Search Functions. -* inet_addr: Host Address Functions. -* inet_aton: Host Address Functions. -* inet_lnaof: Host Address Functions. -* inet_makeaddr: Host Address Functions. -* inet_netof: Host Address Functions. -* inet_network: Host Address Functions. -* inet_ntoa: Host Address Functions. -* inet_ntop: Host Address Functions. -* inet_pton: Host Address Functions. -* infnan: Floating Point Classes. -* initgroups: Setting Groups. -* initstate: BSD Random. -* innetgr: Netgroup Membership. -* int <1>: System Calls. -* int: Query Memory Parameters. -* ioctl: IOCTLs. -* isalnum: Classification of Characters. -* isalpha: Classification of Characters. -* isascii: Classification of Characters. -* isatty: Is It a Terminal. -* isblank: Classification of Characters. -* iscntrl: Classification of Characters. -* isdigit: Classification of Characters. -* isfinite: Floating Point Classes. -* isgraph: Classification of Characters. -* isgreater: FP Comparison Functions. -* isgreaterequal: FP Comparison Functions. -* isinf: Floating Point Classes. -* isinff: Floating Point Classes. -* isinfl: Floating Point Classes. -* isless: FP Comparison Functions. -* islessequal: FP Comparison Functions. -* islessgreater: FP Comparison Functions. -* islower: Classification of Characters. -* isnan: Floating Point Classes. -* isnanf: Floating Point Classes. -* isnanl: Floating Point Classes. -* isnormal: Floating Point Classes. -* isprint: Classification of Characters. -* ispunct: Classification of Characters. -* isspace: Classification of Characters. -* isunordered: FP Comparison Functions. -* isupper: Classification of Characters. -* iswalnum: Classification of Wide Characters. -* iswalpha: Classification of Wide Characters. -* iswblank: Classification of Wide Characters. -* iswcntrl: Classification of Wide Characters. -* iswctype: Classification of Wide Characters. -* iswdigit: Classification of Wide Characters. -* iswgraph: Classification of Wide Characters. -* iswlower: Classification of Wide Characters. -* iswprint: Classification of Wide Characters. -* iswpunct: Classification of Wide Characters. -* iswspace: Classification of Wide Characters. -* iswupper: Classification of Wide Characters. -* iswxdigit: Classification of Wide Characters. -* isxdigit: Classification of Characters. -* j0: Special Functions. -* j0f: Special Functions. -* j0l: Special Functions. -* j1: Special Functions. -* j1f: Special Functions. -* j1l: Special Functions. -* jn: Special Functions. -* jnf: Special Functions. -* jnl: Special Functions. -* jrand48: SVID Random. -* jrand48_r: SVID Random. -* kill: Signaling Another Process. -* killpg: Signaling Another Process. -* l64a: Encode Binary Data. -* labs: Absolute Value. -* lcong48: SVID Random. -* lcong48_r: SVID Random. -* ldexp: Normalization Functions. -* ldexpf: Normalization Functions. -* ldexpl: Normalization Functions. -* ldiv: Integer Division. -* lfind: Array Search Function. -* lgamma: Special Functions. -* lgamma_r: Special Functions. -* lgammaf: Special Functions. -* lgammaf_r: Special Functions. -* lgammal: Special Functions. -* lgammal_r: Special Functions. -* link: Hard Links. -* lio_listio: Asynchronous Reads/Writes. -* lio_listio64: Asynchronous Reads/Writes. -* listen: Listening. -* llabs: Absolute Value. -* lldiv: Integer Division. -* llrint: Rounding Functions. -* llrintf: Rounding Functions. -* llrintl: Rounding Functions. -* llround: Rounding Functions. -* llroundf: Rounding Functions. -* llroundl: Rounding Functions. -* localeconv: The Lame Way to Locale Data. -* localtime: Broken-down Time. -* localtime_r: Broken-down Time. -* log: Exponents and Logarithms. -* log10: Exponents and Logarithms. -* log10f: Exponents and Logarithms. -* log10l: Exponents and Logarithms. -* log1p: Exponents and Logarithms. -* log1pf: Exponents and Logarithms. -* log1pl: Exponents and Logarithms. -* log2: Exponents and Logarithms. -* log2f: Exponents and Logarithms. -* log2l: Exponents and Logarithms. -* logb <1>: Normalization Functions. -* logb: Exponents and Logarithms. -* logbf <1>: Normalization Functions. -* logbf: Exponents and Logarithms. -* logbl <1>: Normalization Functions. -* logbl: Exponents and Logarithms. -* logf: Exponents and Logarithms. -* login: Logging In and Out. -* login_tty: Logging In and Out. -* logl: Exponents and Logarithms. -* logout: Logging In and Out. -* logwtmp: Logging In and Out. -* longjmp: Non-Local Details. -* lrand48: SVID Random. -* lrand48_r: SVID Random. -* lrint: Rounding Functions. -* lrintf: Rounding Functions. -* lrintl: Rounding Functions. -* lround: Rounding Functions. -* lroundf: Rounding Functions. -* lroundl: Rounding Functions. -* lsearch: Array Search Function. -* lseek: File Position Primitive. -* lseek64: File Position Primitive. -* lstat: Reading Attributes. -* lstat64: Reading Attributes. -* main: Program Arguments. -* mallinfo: Statistics of Malloc. -* malloc: Basic Allocation. -* mallopt: Malloc Tunable Parameters. -* matherr: FP Exceptions. -* mblen: Non-reentrant Character Conversion. -* mbrlen: Converting a Character. -* mbrtowc: Converting a Character. -* mbsinit: Keeping the state. -* mbsnrtowcs: Converting Strings. -* mbsrtowcs: Converting Strings. -* mbstowcs: Non-reentrant String Conversion. -* mbtowc: Non-reentrant Character Conversion. -* mcheck: Heap Consistency Checking. -* memalign: Aligned Memory Blocks. -* memccpy: Copying and Concatenation. -* memchr: Search Functions. -* memcmp: String/Array Comparison. -* memcpy: Copying and Concatenation. -* memfrob: Trivial Encryption. -* memmem: Search Functions. -* memmove: Copying and Concatenation. -* mempcpy: Copying and Concatenation. -* memrchr: Search Functions. -* memset: Copying and Concatenation. -* mkdir: Creating Directories. -* mkdtemp: Temporary Files. -* mkfifo: FIFO Special Files. -* mknod: Making Special Files. -* mkstemp: Temporary Files. -* mktemp: Temporary Files. -* mktime: Broken-down Time. -* mlock: Page Lock Functions. -* mlockall: Page Lock Functions. -* mmap: Memory-mapped I/O. -* mmap64: Memory-mapped I/O. -* modf: Rounding Functions. -* modff: Rounding Functions. -* modfl: Rounding Functions. -* mount: Mount-Unmount-Remount. -* mprobe: Heap Consistency Checking. -* mrand48: SVID Random. -* mrand48_r: SVID Random. -* mremap: Memory-mapped I/O. -* msync: Memory-mapped I/O. -* mtrace: Tracing malloc. -* munlock: Page Lock Functions. -* munlockall: Page Lock Functions. -* munmap: Memory-mapped I/O. -* muntrace: Tracing malloc. -* nan: FP Bit Twiddling. -* nanf: FP Bit Twiddling. -* nanl: FP Bit Twiddling. -* nanosleep: Sleeping. -* nearbyint: Rounding Functions. -* nearbyintf: Rounding Functions. -* nearbyintl: Rounding Functions. -* nextafter: FP Bit Twiddling. -* nextafterf: FP Bit Twiddling. -* nextafterl: FP Bit Twiddling. -* nexttoward: FP Bit Twiddling. -* nexttowardf: FP Bit Twiddling. -* nexttowardl: FP Bit Twiddling. -* nftw: Working with Directory Trees. -* nftw64: Working with Directory Trees. -* ngettext: Advanced gettext functions. -* nice: Traditional Scheduling Functions. -* nl_langinfo: The Elegant and Fast Way. -* notfound: Actions in the NSS configuration. -* nrand48: SVID Random. -* nrand48_r: SVID Random. -* ntohl: Byte Order. -* ntohs: Byte Order. -* ntp_adjtime: High Accuracy Clock. -* ntp_gettime: High Accuracy Clock. -* obstack_1grow: Growing Objects. -* obstack_1grow_fast: Extra Fast Growing. -* obstack_alignment_mask: Obstacks Data Alignment. -* obstack_alloc: Allocation in an Obstack. -* obstack_base: Status of an Obstack. -* obstack_blank: Growing Objects. -* obstack_blank_fast: Extra Fast Growing. -* obstack_chunk_alloc: Preparing for Obstacks. -* obstack_chunk_free: Preparing for Obstacks. -* obstack_chunk_size: Obstack Chunks. -* obstack_copy: Allocation in an Obstack. -* obstack_copy0: Allocation in an Obstack. -* obstack_finish: Growing Objects. -* obstack_free: Freeing Obstack Objects. -* obstack_grow: Growing Objects. -* obstack_grow0: Growing Objects. -* obstack_init: Preparing for Obstacks. -* obstack_int_grow: Growing Objects. -* obstack_int_grow_fast: Extra Fast Growing. -* obstack_next_free: Status of an Obstack. -* obstack_object_size <1>: Status of an Obstack. -* obstack_object_size: Growing Objects. -* obstack_printf: Dynamic Output. -* obstack_ptr_grow: Growing Objects. -* obstack_ptr_grow_fast: Extra Fast Growing. -* obstack_room: Extra Fast Growing. -* obstack_vprintf: Variable Arguments Output. -* offsetof: Structure Measurement. -* on_exit: Cleanups on Exit. -* open: Opening and Closing Files. -* open64: Opening and Closing Files. -* open_memstream: String Streams. -* open_obstack_stream: Obstack Streams. -* opendir: Opening a Directory. -* openlog: openlog. -* openpty: Pseudo-Terminal Pairs. -* parse_printf_format: Parsing a Template String. -* pathconf: Pathconf. -* pause: Using Pause. -* pclose: Pipe to a Subprocess. -* perror: Error Messages. -* pipe: Creating a Pipe. -* popen: Pipe to a Subprocess. -* posix_memalign: Aligned Memory Blocks. -* pow: Exponents and Logarithms. -* pow10: Exponents and Logarithms. -* pow10f: Exponents and Logarithms. -* pow10l: Exponents and Logarithms. -* powf: Exponents and Logarithms. -* powl: Exponents and Logarithms. -* pread: I/O Primitives. -* pread64: I/O Primitives. -* printf: Formatted Output Functions. -* printf_size: Predefined Printf Handlers. -* printf_size_info: Predefined Printf Handlers. -* psignal: Signal Messages. -* pthread_atfork: Threads and Fork. -* pthread_attr_destroy: Thread Attributes. -* pthread_attr_getattr: Thread Attributes. -* pthread_attr_getdetachstate: Thread Attributes. -* pthread_attr_getguardsize: Thread Attributes. -* pthread_attr_getinheritsched: Thread Attributes. -* pthread_attr_getschedparam: Thread Attributes. -* pthread_attr_getschedpolicy: Thread Attributes. -* pthread_attr_getscope: Thread Attributes. -* pthread_attr_getstack: Thread Attributes. -* pthread_attr_getstackaddr: Thread Attributes. -* pthread_attr_getstacksize: Thread Attributes. -* pthread_attr_init: Thread Attributes. -* pthread_attr_setattr: Thread Attributes. -* pthread_attr_setdetachstate: Thread Attributes. -* pthread_attr_setguardsize: Thread Attributes. -* pthread_attr_setinheritsched: Thread Attributes. -* pthread_attr_setschedparam: Thread Attributes. -* pthread_attr_setschedpolicy: Thread Attributes. -* pthread_attr_setscope: Thread Attributes. -* pthread_attr_setstack: Thread Attributes. -* pthread_attr_setstackaddr: Thread Attributes. -* pthread_attr_setstacksize: Thread Attributes. -* pthread_cancel: Basic Thread Operations. -* pthread_cleanup_pop: Cleanup Handlers. -* pthread_cleanup_pop_restore_np: Cleanup Handlers. -* pthread_cleanup_push: Cleanup Handlers. -* pthread_cleanup_push_defer_np: Cleanup Handlers. -* pthread_cond_broadcast: Condition Variables. -* pthread_cond_destroy: Condition Variables. -* pthread_cond_init: Condition Variables. -* pthread_cond_signal: Condition Variables. -* pthread_cond_timedwait: Condition Variables. -* pthread_cond_wait: Condition Variables. -* pthread_condattr_destroy: Condition Variables. -* pthread_condattr_init: Condition Variables. -* pthread_create: Basic Thread Operations. -* pthread_detach: Miscellaneous Thread Functions. -* pthread_equal: Miscellaneous Thread Functions. -* pthread_exit: Basic Thread Operations. -* pthread_getconcurrency: Miscellaneous Thread Functions. -* pthread_getschedparam: Miscellaneous Thread Functions. -* pthread_getspecific: Thread-Specific Data. -* pthread_join: Basic Thread Operations. -* pthread_key_create: Thread-Specific Data. -* pthread_key_delete: Thread-Specific Data. -* pthread_kill: Threads and Signal Handling. -* pthread_kill_other_threads_np: Miscellaneous Thread Functions. -* pthread_mutex_destroy: Mutexes. -* pthread_mutex_init: Mutexes. -* pthread_mutex_lock: Mutexes. -* pthread_mutex_timedlock: Mutexes. -* pthread_mutex_trylock: Mutexes. -* pthread_mutex_unlock: Mutexes. -* pthread_mutexattr_destroy: Mutexes. -* pthread_mutexattr_gettype: Mutexes. -* pthread_mutexattr_init: Mutexes. -* pthread_mutexattr_settype: Mutexes. -* pthread_once: Miscellaneous Thread Functions. -* pthread_self: Miscellaneous Thread Functions. -* pthread_setcancelstate: Cancellation. -* pthread_setcanceltype: Cancellation. -* pthread_setconcurrency: Miscellaneous Thread Functions. -* pthread_setschedparam: Miscellaneous Thread Functions. -* pthread_setspecific: Thread-Specific Data. -* pthread_sigmask: Threads and Signal Handling. -* pthread_testcancel: Cancellation. -* ptsname: Allocation. -* ptsname_r: Allocation. -* putc: Simple Output. -* putc_unlocked: Simple Output. -* putchar: Simple Output. -* putchar_unlocked: Simple Output. -* putenv: Environment Access. -* putpwent: Writing a User Entry. -* puts: Simple Output. -* pututline: Manipulating the Database. -* pututxline: XPG Functions. -* putw: Simple Output. -* putwc: Simple Output. -* putwc_unlocked: Simple Output. -* putwchar_unlocked: Simple Output. -* pwrite: I/O Primitives. -* pwrite64: I/O Primitives. -* qecvt: System V Number Conversion. -* qecvt_r: System V Number Conversion. -* qfcvt: System V Number Conversion. -* qfcvt_r: System V Number Conversion. -* qgcvt: System V Number Conversion. -* qsort: Array Sort Function. -* raise: Signaling Yourself. -* rand: ISO Random. -* rand_r: ISO Random. -* random: BSD Random. -* rawmemchr: Search Functions. -* read: I/O Primitives. -* readdir: Reading/Closing Directory. -* readdir64: Reading/Closing Directory. -* readdir64_r: Reading/Closing Directory. -* readdir_r: Reading/Closing Directory. -* readlink: Symbolic Links. -* readv: Scatter-Gather. -* realloc: Changing Block Size. -* recv: Receiving Data. -* recvfrom: Receiving Datagrams. -* regcomp: POSIX Regexp Compilation. -* regerror: Regexp Cleanup. -* regexec: Matching POSIX Regexps. -* regfree: Regexp Cleanup. -* register_printf_function: Registering New Conversions. -* remainder: Remainder Functions. -* remainderf: Remainder Functions. -* remainderl: Remainder Functions. -* remove: Deleting Files. -* rename: Renaming Files. -* rewind: File Positioning. -* rewinddir: Random Access Directory. -* rindex: Search Functions. -* rint: Rounding Functions. -* rintf: Rounding Functions. -* rintl: Rounding Functions. -* rmdir: Deleting Files. -* round: Rounding Functions. -* roundf: Rounding Functions. -* roundl: Rounding Functions. -* S_ISBLK: Testing File Type. -* S_ISCHR: Testing File Type. -* S_ISDIR: Testing File Type. -* S_ISFIFO: Testing File Type. -* S_ISLNK: Testing File Type. -* S_ISREG: Testing File Type. -* S_ISSOCK: Testing File Type. -* S_TYPEISMQ: Testing File Type. -* S_TYPEISSEM: Testing File Type. -* S_TYPEISSHM: Testing File Type. -* sbrk: Resizing the Data Segment. -* scalb: Normalization Functions. -* scalbf: Normalization Functions. -* scalbl: Normalization Functions. -* scalbln: Normalization Functions. -* scalblnf: Normalization Functions. -* scalblnl: Normalization Functions. -* scalbn: Normalization Functions. -* scalbnf: Normalization Functions. -* scalbnl: Normalization Functions. -* scandir: Scanning Directory Content. -* scandir64: Scanning Directory Content. -* scanf: Formatted Input Functions. -* sched_get_priority_max: Basic Scheduling Functions. -* sched_get_priority_min: Basic Scheduling Functions. -* sched_getparam: Basic Scheduling Functions. -* sched_getscheduler: Basic Scheduling Functions. -* sched_rr_get_interval: Basic Scheduling Functions. -* sched_setparam: Basic Scheduling Functions. -* sched_setscheduler: Basic Scheduling Functions. -* sched_yield: Basic Scheduling Functions. -* seed48: SVID Random. -* seed48_r: SVID Random. -* seekdir: Random Access Directory. -* select: Waiting for I/O. -* sem_destroy: POSIX Semaphores. -* sem_getvalue: POSIX Semaphores. -* sem_init: POSIX Semaphores. -* sem_post: POSIX Semaphores. -* sem_trywait: POSIX Semaphores. -* sem_wait: POSIX Semaphores. -* send: Sending Data. -* sendto: Sending Datagrams. -* setbuf: Controlling Buffering. -* setbuffer: Controlling Buffering. -* setdomainname: Host Identification. -* setegid: Setting Groups. -* setenv: Environment Access. -* seteuid: Setting User ID. -* setfsent: fstab. -* setgid: Setting Groups. -* setgrent: Scanning All Groups. -* setgroups: Setting Groups. -* sethostent: Host Names. -* sethostid: Host Identification. -* sethostname: Host Identification. -* setitimer: Setting an Alarm. -* setjmp: Non-Local Details. -* setkey: DES Encryption. -* setkey_r: DES Encryption. -* setlinebuf: Controlling Buffering. -* setlocale: Setting the Locale. -* setlogmask: setlogmask. -* setmntent: mtab. -* setnetent: Networks Database. -* setnetgrent: Lookup Netgroup. -* setpgid: Process Group Functions. -* setpgrp: Process Group Functions. -* setpriority: Traditional Scheduling Functions. -* setprotoent: Protocols Database. -* setpwent: Scanning All Users. -* setregid: Setting Groups. -* setreuid: Setting User ID. -* setrlimit: Limits on Resources. -* setrlimit64: Limits on Resources. -* setservent: Services Database. -* setsid: Process Group Functions. -* setsockopt: Socket Option Functions. -* setstate: BSD Random. -* settimeofday: High-Resolution Calendar. -* setuid: Setting User ID. -* setutent: Manipulating the Database. -* setutxent: XPG Functions. -* setvbuf: Controlling Buffering. -* shutdown: Closing a Socket. -* sigaction: Advanced Signal Handling. -* sigaddset: Signal Sets. -* sigaltstack: Signal Stack. -* sigblock: Blocking in BSD. -* sigdelset: Signal Sets. -* sigemptyset: Signal Sets. -* sigfillset: Signal Sets. -* siginterrupt: BSD Handler. -* sigismember: Signal Sets. -* siglongjmp: Non-Local Exits and Signals. -* sigmask: Blocking in BSD. -* signal: Basic Signal Handling. -* signbit: FP Bit Twiddling. -* significand: Normalization Functions. -* significandf: Normalization Functions. -* significandl: Normalization Functions. -* sigpause: Blocking in BSD. -* sigpending: Checking for Pending Signals. -* sigprocmask: Process Signal Mask. -* sigsetjmp: Non-Local Exits and Signals. -* sigsetmask: Blocking in BSD. -* sigstack: Signal Stack. -* sigsuspend: Sigsuspend. -* sigvec: BSD Handler. -* sigwait: Threads and Signal Handling. -* sin: Trig Functions. -* sincos: Trig Functions. -* sincosf: Trig Functions. -* sincosl: Trig Functions. -* sinf: Trig Functions. -* sinh: Hyperbolic Functions. -* sinhf: Hyperbolic Functions. -* sinhl: Hyperbolic Functions. -* sinl: Trig Functions. -* sleep: Sleeping. -* snprintf: Formatted Output Functions. -* socket: Creating a Socket. -* socketpair: Socket Pairs. -* sprintf: Formatted Output Functions. -* sqrt: Exponents and Logarithms. -* sqrtf: Exponents and Logarithms. -* sqrtl: Exponents and Logarithms. -* srand: ISO Random. -* srand48: SVID Random. -* srand48_r: SVID Random. -* srandom: BSD Random. -* sscanf: Formatted Input Functions. -* ssignal: Basic Signal Handling. -* stat: Reading Attributes. -* stat64: Reading Attributes. -* stime: Simple Calendar Time. -* stpcpy: Copying and Concatenation. -* stpncpy: Copying and Concatenation. -* strcasecmp: String/Array Comparison. -* strcasestr: Search Functions. -* strcat: Copying and Concatenation. -* strchr: Search Functions. -* strchrnul: Search Functions. -* strcmp: String/Array Comparison. -* strcoll: Collation Functions. -* strcpy: Copying and Concatenation. -* strcspn: Search Functions. -* strdup: Copying and Concatenation. -* strdupa: Copying and Concatenation. -* strerror: Error Messages. -* strerror_r: Error Messages. -* strfmon: Formatting Numbers. -* strfry: strfry. -* strftime: Formatting Calendar Time. -* strlen: String Length. -* strncasecmp: String/Array Comparison. -* strncat: Copying and Concatenation. -* strncmp: String/Array Comparison. -* strncpy: Copying and Concatenation. -* strndup: Copying and Concatenation. -* strndupa: Copying and Concatenation. -* strnlen: String Length. -* strpbrk: Search Functions. -* strptime: Low-Level Time String Parsing. -* strrchr: Search Functions. -* strsep: Finding Tokens in a String. -* strsignal: Signal Messages. -* strspn: Search Functions. -* strstr: Search Functions. -* strtod: Parsing of Floats. -* strtof: Parsing of Floats. -* strtoimax: Parsing of Integers. -* strtok: Finding Tokens in a String. -* strtok_r: Finding Tokens in a String. -* strtol: Parsing of Integers. -* strtold: Parsing of Floats. -* strtoll: Parsing of Integers. -* strtoq: Parsing of Integers. -* strtoul: Parsing of Integers. -* strtoull: Parsing of Integers. -* strtoumax: Parsing of Integers. -* strtouq: Parsing of Integers. -* strverscmp: String/Array Comparison. -* strxfrm: Collation Functions. -* stty: BSD Terminal Modes. -* success: Actions in the NSS configuration. -* SUN_LEN: Local Namespace Details. -* swprintf: Formatted Output Functions. -* swscanf: Formatted Input Functions. -* symlink: Symbolic Links. -* sync: Synchronizing I/O. -* sysconf: Sysconf Definition. -* sysctl: System Parameters. -* syslog: syslog; vsyslog. -* system: Running a Command. -* sysv_signal: Basic Signal Handling. -* tan: Trig Functions. -* tanf: Trig Functions. -* tanh: Hyperbolic Functions. -* tanhf: Hyperbolic Functions. -* tanhl: Hyperbolic Functions. -* tanl: Trig Functions. -* tcdrain: Line Control. -* tcflow: Line Control. -* tcflush: Line Control. -* tcgetattr: Mode Functions. -* tcgetpgrp: Terminal Access Functions. -* tcgetsid: Terminal Access Functions. -* tcsendbreak: Line Control. -* tcsetattr: Mode Functions. -* tcsetpgrp: Terminal Access Functions. -* tdelete: Tree Search Function. -* tdestroy: Tree Search Function. -* telldir: Random Access Directory. -* TEMP_FAILURE_RETRY: Interrupted Primitives. -* tempnam: Temporary Files. -* textdomain: Locating gettext catalog. -* tfind: Tree Search Function. -* tgamma: Special Functions. -* tgammaf: Special Functions. -* tgammal: Special Functions. -* time: Simple Calendar Time. -* timegm: Broken-down Time. -* timelocal: Broken-down Time. -* times: Processor Time. -* tmpfile: Temporary Files. -* tmpfile64: Temporary Files. -* tmpnam: Temporary Files. -* tmpnam_r: Temporary Files. -* toascii: Case Conversion. -* tolower: Case Conversion. -* toupper: Case Conversion. -* towctrans: Wide Character Case Conversion. -* towlower: Wide Character Case Conversion. -* towupper: Wide Character Case Conversion. -* trunc: Rounding Functions. -* truncate: File Size. -* truncate64: File Size. -* truncf: Rounding Functions. -* truncl: Rounding Functions. -* tryagain: Actions in the NSS configuration. -* tsearch: Tree Search Function. -* ttyname: Is It a Terminal. -* ttyname_r: Is It a Terminal. -* twalk: Tree Search Function. -* tzset: Time Zone Functions. -* ulimit: Limits on Resources. -* umask: Setting Permissions. -* umount: Mount-Unmount-Remount. -* umount2: Mount-Unmount-Remount. -* uname: Platform Type. -* unavail: Actions in the NSS configuration. -* ungetc: How Unread. -* ungetwc: How Unread. -* unlink: Deleting Files. -* unlockpt: Allocation. -* unsetenv: Environment Access. -* updwtmp: Manipulating the Database. -* utime: File Times. -* utimes: File Times. -* utmpname: Manipulating the Database. -* utmpxname: XPG Functions. -* va_alist: Old Varargs. -* va_arg: Argument Macros. -* va_dcl: Old Varargs. -* va_end: Argument Macros. -* va_start <1>: Old Varargs. -* va_start: Argument Macros. -* valloc: Aligned Memory Blocks. -* vasprintf: Variable Arguments Output. -* versionsort: Scanning Directory Content. -* versionsort64: Scanning Directory Content. -* vfork: Creating a Process. -* vfprintf: Variable Arguments Output. -* vfscanf: Variable Arguments Input. -* vfwprintf: Variable Arguments Output. -* vfwscanf: Variable Arguments Input. -* vlimit: Limits on Resources. -* vprintf: Variable Arguments Output. -* vscanf: Variable Arguments Input. -* vsnprintf: Variable Arguments Output. -* vsprintf: Variable Arguments Output. -* vsscanf: Variable Arguments Input. -* vswprintf: Variable Arguments Output. -* vswscanf: Variable Arguments Input. -* vsyslog: syslog; vsyslog. -* vtimes: Resource Usage. -* vwprintf: Variable Arguments Output. -* vwscanf: Variable Arguments Input. -* wait: Process Completion. -* wait3: BSD Wait Functions. -* wait4: Process Completion. -* waitpid: Process Completion. -* WCOREDUMP: Process Completion Status. -* wcpcpy: Copying and Concatenation. -* wcpncpy: Copying and Concatenation. -* wcrtomb: Converting a Character. -* wcscasecmp: String/Array Comparison. -* wcscat: Copying and Concatenation. -* wcschr: Search Functions. -* wcschrnul: Search Functions. -* wcscmp: String/Array Comparison. -* wcscoll: Collation Functions. -* wcscpy: Copying and Concatenation. -* wcscspn: Search Functions. -* wcsdup: Copying and Concatenation. -* wcsftime: Formatting Calendar Time. -* wcslen: String Length. -* wcsncasecmp: String/Array Comparison. -* wcsncat: Copying and Concatenation. -* wcsncmp: String/Array Comparison. -* wcsncpy: Copying and Concatenation. -* wcsnlen: String Length. -* wcsnrtombs: Converting Strings. -* wcspbrk: Search Functions. -* wcsrchr: Search Functions. -* wcsrtombs: Converting Strings. -* wcsspn: Search Functions. -* wcsstr: Search Functions. -* wcstod: Parsing of Floats. -* wcstof: Parsing of Floats. -* wcstoimax: Parsing of Integers. -* wcstok: Finding Tokens in a String. -* wcstol: Parsing of Integers. -* wcstold: Parsing of Floats. -* wcstoll: Parsing of Integers. -* wcstombs: Non-reentrant String Conversion. -* wcstoq: Parsing of Integers. -* wcstoul: Parsing of Integers. -* wcstoull: Parsing of Integers. -* wcstoumax: Parsing of Integers. -* wcstouq: Parsing of Integers. -* wcswcs: Search Functions. -* wcsxfrm: Collation Functions. -* wctob: Converting a Character. -* wctomb: Non-reentrant Character Conversion. -* wctrans: Wide Character Case Conversion. -* wctype: Classification of Wide Characters. -* WEXITSTATUS: Process Completion Status. -* WIFEXITED: Process Completion Status. -* WIFSIGNALED: Process Completion Status. -* WIFSTOPPED: Process Completion Status. -* wmemchr: Search Functions. -* wmemcmp: String/Array Comparison. -* wmemcpy: Copying and Concatenation. -* wmemmove: Copying and Concatenation. -* wmempcpy: Copying and Concatenation. -* wmemset: Copying and Concatenation. -* wordexp: Calling Wordexp. -* wordfree: Calling Wordexp. -* wprintf: Formatted Output Functions. -* write: I/O Primitives. -* writev: Scatter-Gather. -* wscanf: Formatted Input Functions. -* WSTOPSIG: Process Completion Status. -* WTERMSIG: Process Completion Status. -* y0: Special Functions. -* y0f: Special Functions. -* y0l: Special Functions. -* y1: Special Functions. -* y1f: Special Functions. -* y1l: Special Functions. -* yn: Special Functions. -* ynf: Special Functions. -* ynl: Special Functions. +* __ftw64_func_t: Working with Directory Trees. +* __ftw_func_t: Working with Directory Trees. +* __nftw64_func_t: Working with Directory Trees. +* __nftw_func_t: Working with Directory Trees. +* blkcnt64_t: Attribute Meanings. +* blkcnt_t: Attribute Meanings. +* cc_t: Mode Data Types. +* clock_t: CPU Time. +* comparison_fn_t: Comparison Functions. +* cookie_close_function: Hook Functions. +* cookie_io_functions_t: Streams and Cookies. +* cookie_read_function: Hook Functions. +* cookie_seek_function: Hook Functions. +* cookie_write_function: Hook Functions. +* dev_t: Attribute Meanings. +* DIR: Opening a Directory. +* div_t: Integer Division. +* enum mcheck_status: Heap Consistency Checking. +* fd_set: Waiting for I/O. +* FILE: Streams. +* fpos64_t: Portable Positioning. +* fpos_t: Portable Positioning. +* gid_t: Reading Persona. +* glob64_t: Calling Glob. +* glob_t: Calling Glob. +* iconv_t: Generic Conversion Interface. +* imaxdiv_t: Integer Division. +* ino64_t: Attribute Meanings. +* ino_t: Attribute Meanings. +* jmp_buf: Non-Local Details. +* ldiv_t: Integer Division. +* lldiv_t: Integer Division. +* mbstate_t: Keeping the state. +* mode_t: Attribute Meanings. +* nlink_t: Attribute Meanings. +* off64_t: File Position Primitive. +* off_t: File Position Primitive. +* pid_t: Process Identification. +* printf_arginfo_function: Defining the Output Handler. +* printf_function: Defining the Output Handler. +* ptrdiff_t: Important Data Types. +* regex_t: POSIX Regexp Compilation. +* regmatch_t: Regexp Subexpressions. +* regoff_t: Regexp Subexpressions. +* sig_atomic_t: Atomic Types. +* sighandler_t: Basic Signal Handling. +* sigjmp_buf: Non-Local Exits and Signals. +* sigset_t: Signal Sets. +* size_t: Important Data Types. +* speed_t: Line Speed. +* ssize_t: I/O Primitives. +* stack_t: Signal Stack. +* struct __gconv_step: glibc iconv Implementation. +* struct __gconv_step_data: glibc iconv Implementation. +* struct aiocb: Asynchronous I/O. +* struct aiocb64: Asynchronous I/O. +* struct aioinit: Configuration of AIO. +* struct argp: Argp Parsers. +* struct argp_child: Argp Children. +* struct argp_option: Argp Option Vectors. +* struct argp_state: Argp Parsing State. +* struct dirent: Directory Entries. +* struct ENTRY: Hash Search Function. +* struct exit_status: Manipulating the Database. +* struct flock: File Locks. +* struct fstab: fstab. +* struct FTW: Working with Directory Trees. +* struct group: Group Data Structure. +* struct hostent: Host Names. +* struct if_nameindex: Interface Naming. +* struct in6_addr: Host Address Data Type. +* struct in_addr: Host Address Data Type. +* struct iovec: Scatter-Gather. +* struct itimerval: Setting an Alarm. +* struct lconv: The Lame Way to Locale Data. +* struct linger: Socket-Level Options. +* struct mallinfo: Statistics of Malloc. +* struct mntent: mtab. +* struct netent: Networks Database. +* struct ntptimeval: High Accuracy Clock. +* struct obstack: Creating Obstacks. +* struct option: Getopt Long Options. +* struct passwd: User Data Structure. +* struct printf_info: Conversion Specifier Options. +* struct protoent: Protocols Database. +* struct random_data: BSD Random. +* struct rlimit: Limits on Resources. +* struct rlimit64: Limits on Resources. +* struct rusage: Resource Usage. +* struct sched_param: Basic Scheduling Functions. +* struct servent: Services Database. +* struct sgttyb: BSD Terminal Modes. +* struct sigaction: Advanced Signal Handling. +* struct sigstack: Signal Stack. +* struct sigvec: BSD Handler. +* struct sockaddr: Address Formats. +* struct sockaddr_in: Internet Address Formats. +* struct sockaddr_in6: Internet Address Formats. +* struct sockaddr_un: Local Namespace Details. +* struct stat: Attribute Meanings. +* struct stat64: Attribute Meanings. +* struct termios: Mode Data Types. +* struct timespec: Elapsed Time. +* struct timeval: Elapsed Time. +* struct timex: High Accuracy Clock. +* struct timezone: High-Resolution Calendar. +* struct tm: Broken-down Time. +* struct tms: Processor Time. +* struct utimbuf: File Times. +* struct utmp: Manipulating the Database. +* struct utmpx: XPG Functions. +* struct utsname: Platform Type. +* struct vtimes: Resource Usage. +* tcflag_t: Mode Data Types. +* time_t: Simple Calendar Time. +* ucontext_t: System V contexts. +* uid_t: Reading Persona. +* union wait: BSD Wait Functions. +* va_list: Argument Macros. +* VISIT: Tree Search Function. +* wchar_t: Extended Char Intro. +* wctrans_t: Wide Character Case Conversion. +* wctype_t: Classification of Wide Characters. +* wint_t: Extended Char Intro. +* wordexp_t: Calling Wordexp. diff -durpNa glibc-2.2.2/manual/libc.info-56 glibc-2.2.3/manual/libc.info-56 --- glibc-2.2.2/manual/libc.info-56 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-56 Wed Apr 25 14:55:23 2001 @@ -31,1074 +31,1331 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: Variable Index, Next: File Index, Prev: Function Index, Up: Top +File: libc.info, Node: Function Index, Next: Variable Index, Prev: Type Index, Up: Top -Variable and Constant Macro Index -********************************* +Function and Macro Index +************************ * Menu: -* (: glibc iconv Implementation. -* __free_hook: Hooks for Malloc. -* __malloc_hook: Hooks for Malloc. -* __malloc_initialize_hook: Hooks for Malloc. -* __memalign_hook: Hooks for Malloc. -* __realloc_hook: Hooks for Malloc. -* _BSD_SOURCE: Feature Test Macros. -* _Complex_I: Complex Numbers. -* _FILE_OFFSET_BITS: Feature Test Macros. -* _GNU_SOURCE: Feature Test Macros. -* _IOFBF: Controlling Buffering. -* _IOLBF: Controlling Buffering. -* _IONBF: Controlling Buffering. -* _ISOC99_SOURCE: Feature Test Macros. -* _LARGEFILE64_SOURCE: Feature Test Macros. -* _LARGEFILE_SOURCE: Feature Test Macros. -* _PATH_FSTAB: Mount Information. -* _PATH_MNTTAB: Mount Information. -* _PATH_MOUNTED: Mount Information. -* _PATH_UTMP: Manipulating the Database. -* _PATH_WTMP: Manipulating the Database. -* _POSIX2_C_DEV: System Options. -* _POSIX2_C_VERSION: Version Supported. -* _POSIX2_FORT_DEV: System Options. -* _POSIX2_FORT_RUN: System Options. -* _POSIX2_LOCALEDEF: System Options. -* _POSIX2_SW_DEV: System Options. -* _POSIX_C_SOURCE: Feature Test Macros. -* _POSIX_CHOWN_RESTRICTED: Options for Files. -* _POSIX_JOB_CONTROL: System Options. -* _POSIX_NO_TRUNC: Options for Files. -* _POSIX_SAVED_IDS: System Options. -* _POSIX_SOURCE: Feature Test Macros. -* _POSIX_VDISABLE <1>: Options for Files. -* _POSIX_VDISABLE: Special Characters. -* _POSIX_VERSION: Version Supported. -* _REENTRANT: Feature Test Macros. -* _SC_2_C_DEV: Constants for Sysconf. -* _SC_2_FORT_DEV: Constants for Sysconf. -* _SC_2_FORT_RUN: Constants for Sysconf. -* _SC_2_LOCALEDEF: Constants for Sysconf. -* _SC_2_SW_DEV: Constants for Sysconf. -* _SC_2_VERSION: Constants for Sysconf. -* _SC_AIO_LISTIO_MAX: Constants for Sysconf. -* _SC_AIO_MAX: Constants for Sysconf. -* _SC_AIO_PRIO_DELTA_MAX: Constants for Sysconf. -* _SC_ARG_MAX: Constants for Sysconf. -* _SC_ASYNCHRONOUS_IO: Constants for Sysconf. -* _SC_ATEXIT_MAX: Constants for Sysconf. -* _SC_AVPHYS_PAGES <1>: Constants for Sysconf. -* _SC_AVPHYS_PAGES: Query Memory Parameters. -* _SC_BC_BASE_MAX: Constants for Sysconf. -* _SC_BC_DIM_MAX: Constants for Sysconf. -* _SC_BC_SCALE_MAX: Constants for Sysconf. -* _SC_BC_STRING_MAX: Constants for Sysconf. -* _SC_CHAR_BIT: Constants for Sysconf. -* _SC_CHAR_MAX: Constants for Sysconf. -* _SC_CHAR_MIN: Constants for Sysconf. -* _SC_CHARCLASS_NAME_MAX: Constants for Sysconf. -* _SC_CHILD_MAX: Constants for Sysconf. -* _SC_CLK_TCK: Constants for Sysconf. -* _SC_COLL_WEIGHTS_MAX: Constants for Sysconf. -* _SC_DELAYTIMER_MAX: Constants for Sysconf. -* _SC_EQUIV_CLASS_MAX: Constants for Sysconf. -* _SC_EXPR_NEST_MAX: Constants for Sysconf. -* _SC_FSYNC: Constants for Sysconf. -* _SC_GETGR_R_SIZE_MAX: Constants for Sysconf. -* _SC_GETPW_R_SIZE_MAX: Constants for Sysconf. -* _SC_INT_MAX: Constants for Sysconf. -* _SC_INT_MIN: Constants for Sysconf. -* _SC_JOB_CONTROL: Constants for Sysconf. -* _SC_LINE_MAX: Constants for Sysconf. -* _SC_LOGIN_NAME_MAX: Constants for Sysconf. -* _SC_LONG_BIT: Constants for Sysconf. -* _SC_MAPPED_FILES: Constants for Sysconf. -* _SC_MB_LEN_MAX: Constants for Sysconf. -* _SC_MEMLOCK: Constants for Sysconf. -* _SC_MEMLOCK_RANGE: Constants for Sysconf. -* _SC_MEMORY_PROTECTION: Constants for Sysconf. -* _SC_MESSAGE_PASSING: Constants for Sysconf. -* _SC_MQ_OPEN_MAX: Constants for Sysconf. -* _SC_MQ_PRIO_MAX: Constants for Sysconf. -* _SC_NGROUPS_MAX: Constants for Sysconf. -* _SC_NL_ARGMAX: Constants for Sysconf. -* _SC_NL_LANGMAX: Constants for Sysconf. -* _SC_NL_MSGMAX: Constants for Sysconf. -* _SC_NL_NMAX: Constants for Sysconf. -* _SC_NL_SETMAX: Constants for Sysconf. -* _SC_NL_TEXTMAX: Constants for Sysconf. -* _SC_NPROCESSORS_CONF <1>: Constants for Sysconf. -* _SC_NPROCESSORS_CONF: Processor Resources. -* _SC_NPROCESSORS_ONLN <1>: Constants for Sysconf. -* _SC_NPROCESSORS_ONLN: Processor Resources. -* _SC_NZERO: Constants for Sysconf. -* _SC_OPEN_MAX: Constants for Sysconf. -* _SC_PAGESIZE <1>: Constants for Sysconf. -* _SC_PAGESIZE <2>: Query Memory Parameters. -* _SC_PAGESIZE: Memory-mapped I/O. -* _SC_PHYS_PAGES <1>: Constants for Sysconf. -* _SC_PHYS_PAGES: Query Memory Parameters. -* _SC_PII: Constants for Sysconf. -* _SC_PII_INTERNET: Constants for Sysconf. -* _SC_PII_INTERNET_DGRAM: Constants for Sysconf. -* _SC_PII_INTERNET_STREAM: Constants for Sysconf. -* _SC_PII_OSI: Constants for Sysconf. -* _SC_PII_OSI_CLTS: Constants for Sysconf. -* _SC_PII_OSI_COTS: Constants for Sysconf. -* _SC_PII_OSI_M: Constants for Sysconf. -* _SC_PII_SOCKET: Constants for Sysconf. -* _SC_PII_XTI: Constants for Sysconf. -* _SC_PRIORITIZED_IO: Constants for Sysconf. -* _SC_PRIORITY_SCHEDULING: Constants for Sysconf. -* _SC_REALTIME_SIGNALS: Constants for Sysconf. -* _SC_RTSIG_MAX: Constants for Sysconf. -* _SC_SAVED_IDS: Constants for Sysconf. -* _SC_SCHAR_MAX: Constants for Sysconf. -* _SC_SCHAR_MIN: Constants for Sysconf. -* _SC_SELECT: Constants for Sysconf. -* _SC_SEM_NSEMS_MAX: Constants for Sysconf. -* _SC_SEM_VALUE_MAX: Constants for Sysconf. -* _SC_SEMAPHORES: Constants for Sysconf. -* _SC_SHARED_MEMORY_OBJECTS: Constants for Sysconf. -* _SC_SHRT_MAX: Constants for Sysconf. -* _SC_SHRT_MIN: Constants for Sysconf. -* _SC_SIGQUEUE_MAX: Constants for Sysconf. -* _SC_STREAM_MAX: Constants for Sysconf. -* _SC_SYNCHRONIZED_IO: Constants for Sysconf. -* _SC_T_IOV_MAX: Constants for Sysconf. -* _SC_THREAD_ATTR_STACKADDR: Constants for Sysconf. -* _SC_THREAD_ATTR_STACKSIZE: Constants for Sysconf. -* _SC_THREAD_DESTRUCTOR_ITERATIONS: Constants for Sysconf. -* _SC_THREAD_KEYS_MAX: Constants for Sysconf. -* _SC_THREAD_PRIO_INHERIT: Constants for Sysconf. -* _SC_THREAD_PRIO_PROTECT: Constants for Sysconf. -* _SC_THREAD_PRIORITY_SCHEDULING: Constants for Sysconf. -* _SC_THREAD_PROCESS_SHARED: Constants for Sysconf. -* _SC_THREAD_SAFE_FUNCTIONS: Constants for Sysconf. -* _SC_THREAD_STACK_MIN: Constants for Sysconf. -* _SC_THREAD_THREADS_MAX: Constants for Sysconf. -* _SC_THREADS: Constants for Sysconf. -* _SC_TIMER_MAX: Constants for Sysconf. -* _SC_TIMERS: Constants for Sysconf. -* _SC_TTY_NAME_MAX: Constants for Sysconf. -* _SC_TZNAME_MAX: Constants for Sysconf. -* _SC_UCHAR_MAX: Constants for Sysconf. -* _SC_UINT_MAX: Constants for Sysconf. -* _SC_UIO_MAXIOV: Constants for Sysconf. -* _SC_ULONG_MAX: Constants for Sysconf. -* _SC_USHRT_MAX: Constants for Sysconf. -* _SC_VERSION: Constants for Sysconf. -* _SC_WORD_BIT: Constants for Sysconf. -* _SC_XOPEN_CRYPT: Constants for Sysconf. -* _SC_XOPEN_ENH_I18N: Constants for Sysconf. -* _SC_XOPEN_LEGACY: Constants for Sysconf. -* _SC_XOPEN_REALTIME: Constants for Sysconf. -* _SC_XOPEN_REALTIME_THREADS: Constants for Sysconf. -* _SC_XOPEN_SHM: Constants for Sysconf. -* _SC_XOPEN_UNIX: Constants for Sysconf. -* _SC_XOPEN_VERSION: Constants for Sysconf. -* _SC_XOPEN_XCU_VERSION: Constants for Sysconf. -* _SC_XOPEN_XPG2: Constants for Sysconf. -* _SC_XOPEN_XPG3: Constants for Sysconf. -* _SC_XOPEN_XPG4: Constants for Sysconf. -* _SVID_SOURCE: Feature Test Macros. -* _THREAD_SAFE: Feature Test Macros. -* _XOPEN_SOURCE: Feature Test Macros. -* _XOPEN_SOURCE_EXTENDED: Feature Test Macros. -* ABDAY_1: The Elegant and Fast Way. -* ABDAY_2: The Elegant and Fast Way. -* ABDAY_3: The Elegant and Fast Way. -* ABDAY_4: The Elegant and Fast Way. -* ABDAY_5: The Elegant and Fast Way. -* ABDAY_6: The Elegant and Fast Way. -* ABDAY_7: The Elegant and Fast Way. -* ABMON_1: The Elegant and Fast Way. -* ABMON_10: The Elegant and Fast Way. -* ABMON_11: The Elegant and Fast Way. -* ABMON_12: The Elegant and Fast Way. -* ABMON_2: The Elegant and Fast Way. -* ABMON_3: The Elegant and Fast Way. -* ABMON_4: The Elegant and Fast Way. -* ABMON_5: The Elegant and Fast Way. -* ABMON_6: The Elegant and Fast Way. -* ABMON_7: The Elegant and Fast Way. -* ABMON_8: The Elegant and Fast Way. -* ABMON_9: The Elegant and Fast Way. -* ACCOUNTING: Manipulating the Database. -* AF_FILE: Address Formats. -* AF_INET: Address Formats. -* AF_LOCAL: Address Formats. -* AF_UNIX: Address Formats. -* AF_UNSPEC: Address Formats. -* aliases: NSS Basics. -* ALT_DIGITS: The Elegant and Fast Way. -* ALTWERASE: Local Modes. -* AM_STR: The Elegant and Fast Way. -* ARG_MAX: General Limits. -* argp_err_exit_status: Argp Global Variables. -* ARGP_ERR_UNKNOWN: Argp Parser Functions. -* ARGP_HELP_BUG_ADDR: Argp Help Flags. -* ARGP_HELP_DOC: Argp Help Flags. -* ARGP_HELP_EXIT_ERR: Argp Help Flags. -* ARGP_HELP_EXIT_OK: Argp Help Flags. -* ARGP_HELP_LONG: Argp Help Flags. -* ARGP_HELP_LONG_ONLY: Argp Help Flags. -* ARGP_HELP_POST_DOC: Argp Help Flags. -* ARGP_HELP_PRE_DOC: Argp Help Flags. -* ARGP_HELP_SEE: Argp Help Flags. -* ARGP_HELP_SHORT_USAGE: Argp Help Flags. -* ARGP_HELP_STD_ERR: Argp Help Flags. -* ARGP_HELP_STD_HELP: Argp Help Flags. -* ARGP_HELP_STD_USAGE: Argp Help Flags. -* ARGP_HELP_USAGE: Argp Help Flags. -* ARGP_IN_ORDER: Argp Flags. -* ARGP_KEY_ARG: Argp Special Keys. -* ARGP_KEY_ARGS: Argp Special Keys. -* ARGP_KEY_END: Argp Special Keys. -* ARGP_KEY_ERROR: Argp Special Keys. -* ARGP_KEY_FINI: Argp Special Keys. -* ARGP_KEY_HELP_ARGS_DOC: Argp Help Filter Keys. -* ARGP_KEY_HELP_DUP_ARGS_NOTE: Argp Help Filter Keys. -* ARGP_KEY_HELP_EXTRA: Argp Help Filter Keys. -* ARGP_KEY_HELP_HEADER: Argp Help Filter Keys. -* ARGP_KEY_HELP_POST_DOC: Argp Help Filter Keys. -* ARGP_KEY_HELP_PRE_DOC: Argp Help Filter Keys. -* ARGP_KEY_INIT: Argp Special Keys. -* ARGP_KEY_NO_ARGS: Argp Special Keys. -* ARGP_KEY_SUCCESS: Argp Special Keys. -* ARGP_LONG_ONLY: Argp Flags. -* ARGP_NO_ARGS: Argp Flags. -* ARGP_NO_ERRS: Argp Flags. -* ARGP_NO_EXIT: Argp Flags. -* ARGP_NO_HELP: Argp Flags. -* ARGP_PARSE_ARGV0: Argp Flags. -* argp_program_bug_address: Argp Global Variables. -* argp_program_version: Argp Global Variables. -* argp_program_version_hook: Argp Global Variables. -* ARGP_SILENT: Argp Flags. -* B0: Line Speed. -* B110: Line Speed. -* B115200: Line Speed. -* B1200: Line Speed. -* B134: Line Speed. -* B150: Line Speed. -* B1800: Line Speed. -* B19200: Line Speed. -* B200: Line Speed. -* B230400: Line Speed. -* B2400: Line Speed. -* B300: Line Speed. -* B38400: Line Speed. -* B460800: Line Speed. -* B4800: Line Speed. -* B50: Line Speed. -* B57600: Line Speed. -* B600: Line Speed. -* B75: Line Speed. -* B9600: Line Speed. -* BC_BASE_MAX: Utility Limits. -* BC_DIM_MAX: Utility Limits. -* BC_SCALE_MAX: Utility Limits. -* BC_STRING_MAX: Utility Limits. -* BOOT_TIME <1>: XPG Functions. -* BOOT_TIME: Manipulating the Database. -* BRKINT: Input Modes. -* BUFSIZ: Controlling Buffering. -* CCTS_OFLOW: Control Modes. -* CHAR_MAX: Range of Type. -* CHAR_MIN: Range of Type. -* CHILD_MAX: General Limits. -* CIGNORE: Control Modes. -* CLK_TCK: CPU Time. -* CLOCAL: Control Modes. -* CLOCKS_PER_SEC: CPU Time. -* CODESET: The Elegant and Fast Way. -* COLL_WEIGHTS_MAX: Utility Limits. -* COREFILE: Program Error Signals. -* CREAD: Control Modes. -* CRNCYSTR: The Elegant and Fast Way. -* CRTS_IFLOW: Control Modes. -* CS5: Control Modes. -* CS6: Control Modes. -* CS7: Control Modes. -* CS8: Control Modes. -* CSIZE: Control Modes. -* CSTOPB: Control Modes. -* CURRENCY_SYMBOL: The Elegant and Fast Way. -* D_FMT: The Elegant and Fast Way. -* D_T_FMT: The Elegant and Fast Way. -* DAY_1: The Elegant and Fast Way. -* DAY_2: The Elegant and Fast Way. -* DAY_3: The Elegant and Fast Way. -* DAY_4: The Elegant and Fast Way. -* DAY_5: The Elegant and Fast Way. -* DAY_6: The Elegant and Fast Way. -* DAY_7: The Elegant and Fast Way. -* daylight: Time Zone Functions. -* DBL_DIG: Floating Point Parameters. -* DBL_EPSILON: Floating Point Parameters. -* DBL_MANT_DIG: Floating Point Parameters. -* DBL_MAX: Floating Point Parameters. -* DBL_MAX_10_EXP: Floating Point Parameters. -* DBL_MAX_EXP: Floating Point Parameters. -* DBL_MIN: Floating Point Parameters. -* DBL_MIN_10_EXP: Floating Point Parameters. -* DBL_MIN_EXP: Floating Point Parameters. -* DEAD_PROCESS <1>: XPG Functions. -* DEAD_PROCESS: Manipulating the Database. -* DECIMAL_POINT: The Elegant and Fast Way. -* DES_DECRYPT: DES Encryption. -* DES_ENCRYPT: DES Encryption. -* DES_HW: DES Encryption. -* DES_SW: DES Encryption. -* DESERR_BADPARAM: DES Encryption. -* DESERR_HWERROR: DES Encryption. -* DESERR_NOHWDEVICE: DES Encryption. -* DESERR_NONE: DES Encryption. -* DT_BLK: Directory Entries. -* DT_CHR: Directory Entries. -* DT_DIR: Directory Entries. -* DT_FIFO: Directory Entries. -* DT_REG: Directory Entries. -* DT_SOCK: Directory Entries. -* DT_UNKNOWN: Directory Entries. -* E2BIG: Error Codes. -* EACCES: Error Codes. -* EADDRINUSE: Error Codes. -* EADDRNOTAVAIL: Error Codes. -* EADV: Error Codes. -* EAFNOSUPPORT: Error Codes. -* EAGAIN: Error Codes. -* EALREADY: Error Codes. -* EAUTH: Error Codes. -* EBACKGROUND: Error Codes. -* EBADE: Error Codes. -* EBADF <1>: Line Control. -* EBADF: Error Codes. -* EBADFD: Error Codes. -* EBADMSG: Error Codes. -* EBADR: Error Codes. -* EBADRPC: Error Codes. -* EBADRQC: Error Codes. -* EBADSLT: Error Codes. -* EBFONT: Error Codes. -* EBUSY: Error Codes. -* ECHILD: Error Codes. -* ECHO: Local Modes. -* ECHOCTL: Local Modes. -* ECHOE: Local Modes. -* ECHOK: Local Modes. -* ECHOKE: Local Modes. -* ECHONL: Local Modes. -* ECHOPRT: Local Modes. -* ECHRNG: Error Codes. -* ECOMM: Error Codes. -* ECONNABORTED: Error Codes. -* ECONNREFUSED: Error Codes. -* ECONNRESET: Error Codes. -* ED: Error Codes. -* EDEADLK: Error Codes. -* EDEADLOCK: Error Codes. -* EDESTADDRREQ: Error Codes. -* EDIED: Error Codes. -* EDOM: Error Codes. -* EDOTDOT: Error Codes. -* EDQUOT: Error Codes. -* EEXIST: Error Codes. -* EFAULT: Error Codes. -* EFBIG: Error Codes. -* EFTYPE: Error Codes. -* EGRATUITOUS: Error Codes. -* EGREGIOUS: Error Codes. -* EHOSTDOWN: Error Codes. -* EHOSTUNREACH: Error Codes. -* EIDRM: Error Codes. -* EIEIO: Error Codes. -* EILSEQ: Error Codes. -* EINPROGRESS: Error Codes. -* EINTR: Error Codes. -* EINVAL <1>: Line Control. -* EINVAL: Error Codes. -* EIO: Error Codes. -* EISCONN: Error Codes. -* EISDIR: Error Codes. -* EISNAM: Error Codes. -* EL2HLT: Error Codes. -* EL2NSYNC: Error Codes. -* EL3HLT: Error Codes. -* EL3RST: Error Codes. -* ELIBACC: Error Codes. -* ELIBBAD: Error Codes. -* ELIBEXEC: Error Codes. -* ELIBMAX: Error Codes. -* ELIBSCN: Error Codes. -* ELNRNG: Error Codes. -* ELOOP: Error Codes. -* EMEDIUMTYPE: Error Codes. -* EMFILE: Error Codes. -* EMLINK: Error Codes. -* EMPTY <1>: XPG Functions. -* EMPTY: Manipulating the Database. -* EMSGSIZE: Error Codes. -* EMULTIHOP: Error Codes. -* ENAMETOOLONG: Error Codes. -* ENAVAIL: Error Codes. -* ENEEDAUTH: Error Codes. -* ENETDOWN: Error Codes. -* ENETRESET: Error Codes. -* ENETUNREACH: Error Codes. -* ENFILE: Error Codes. -* ENOANO: Error Codes. -* ENOBUFS: Error Codes. -* ENOCSI: Error Codes. -* ENODATA: Error Codes. -* ENODEV: Error Codes. -* ENOENT: Error Codes. -* ENOEXEC: Error Codes. -* ENOLCK: Error Codes. -* ENOLINK: Error Codes. -* ENOMEDIUM: Error Codes. -* ENOMEM: Error Codes. -* ENOMSG: Error Codes. -* ENONET: Error Codes. -* ENOPKG: Error Codes. -* ENOPROTOOPT: Error Codes. -* ENOSPC: Error Codes. -* ENOSR: Error Codes. -* ENOSTR: Error Codes. -* ENOSYS: Error Codes. -* ENOTBLK: Error Codes. -* ENOTCONN: Error Codes. -* ENOTDIR: Error Codes. -* ENOTEMPTY: Error Codes. -* ENOTNAM: Error Codes. -* ENOTSOCK: Error Codes. -* ENOTSUP: Error Codes. -* ENOTTY <1>: Line Control. -* ENOTTY: Error Codes. -* ENOTUNIQ: Error Codes. -* environ: Environment Access. -* ENXIO: Error Codes. -* EOF: EOF and Errors. -* EOPNOTSUPP: Error Codes. -* EOVERFLOW: Error Codes. -* EPERM: Error Codes. -* EPFNOSUPPORT: Error Codes. -* EPIPE: Error Codes. -* EPROCLIM: Error Codes. -* EPROCUNAVAIL: Error Codes. -* EPROGMISMATCH: Error Codes. -* EPROGUNAVAIL: Error Codes. -* EPROTO: Error Codes. -* EPROTONOSUPPORT: Error Codes. -* EPROTOTYPE: Error Codes. -* EQUIV_CLASS_MAX: Utility Limits. -* ERA: The Elegant and Fast Way. -* ERA_D_FMT: The Elegant and Fast Way. -* ERA_D_T_FMT: The Elegant and Fast Way. -* ERA_T_FMT: The Elegant and Fast Way. -* ERA_YEAR: The Elegant and Fast Way. -* ERANGE: Error Codes. -* EREMCHG: Error Codes. -* EREMOTE: Error Codes. -* EREMOTEIO: Error Codes. -* ERESTART: Error Codes. -* EROFS: Error Codes. -* ERPCMISMATCH: Error Codes. -* errno: Checking for Errors. -* ESHUTDOWN: Error Codes. -* ESOCKTNOSUPPORT: Error Codes. -* ESPIPE: Error Codes. -* ESRCH: Error Codes. -* ESRMNT: Error Codes. -* ESTALE: Error Codes. -* ESTRPIPE: Error Codes. -* ethers: NSS Basics. -* ETIME: Error Codes. -* ETIMEDOUT: Error Codes. -* ETOOMANYREFS: Error Codes. -* ETXTBSY: Error Codes. -* EUCLEAN: Error Codes. -* EUNATCH: Error Codes. -* EUSERS: Error Codes. -* EWOULDBLOCK: Error Codes. -* EXDEV: Error Codes. -* EXFULL: Error Codes. -* EXIT_FAILURE: Exit Status. -* EXIT_SUCCESS: Exit Status. -* EXPR_NEST_MAX: Utility Limits. -* EXTA: Line Speed. -* EXTB: Line Speed. -* F_DUPFD: Duplicating Descriptors. -* F_GETFD: Descriptor Flags. -* F_GETFL: Getting File Status Flags. -* F_GETLK: File Locks. -* F_GETOWN: Interrupt Input. -* F_OK: Testing File Access. -* F_RDLCK: File Locks. -* F_SETFD: Descriptor Flags. -* F_SETFL: Getting File Status Flags. -* F_SETLK: File Locks. -* F_SETLKW: File Locks. -* F_SETOWN: Interrupt Input. -* F_UNLCK: File Locks. -* F_WRLCK: File Locks. -* FD_CLOEXEC: Descriptor Flags. -* FD_SETSIZE: Waiting for I/O. -* FE_DFL_ENV: Control Functions. -* FE_DIVBYZERO: Status bit operations. -* FE_DOWNWARD: Rounding. -* FE_INEXACT: Status bit operations. -* FE_INVALID: Status bit operations. -* FE_NOMASK_ENV: Control Functions. -* FE_OVERFLOW: Status bit operations. -* FE_TONEAREST: Rounding. -* FE_TOWARDZERO: Rounding. -* FE_UNDERFLOW: Status bit operations. -* FE_UPWARD: Rounding. -* FILENAME_MAX: Limits for Files. -* FLT_DIG: Floating Point Parameters. -* FLT_EPSILON: Floating Point Parameters. -* FLT_MANT_DIG: Floating Point Parameters. -* FLT_MAX: Floating Point Parameters. -* FLT_MAX_10_EXP: Floating Point Parameters. -* FLT_MAX_EXP: Floating Point Parameters. -* FLT_MIN: Floating Point Parameters. -* FLT_MIN_10_EXP: Floating Point Parameters. -* FLT_MIN_EXP: Floating Point Parameters. -* FLT_RADIX: Floating Point Parameters. -* FLT_ROUNDS: Floating Point Parameters. -* FLUSHO: Local Modes. -* FOPEN_MAX: Opening Streams. -* FP_FAST_FMA: Misc FP Arithmetic. -* FP_ILOGB0: Exponents and Logarithms. -* FP_ILOGBNAN: Exponents and Logarithms. -* FP_INFINITE: Floating Point Classes. -* FP_NAN: Floating Point Classes. -* FP_NORMAL: Floating Point Classes. -* FP_SUBNORMAL: Floating Point Classes. -* FP_ZERO: Floating Point Classes. -* FPE_DECOVF_TRAP: Program Error Signals. -* FPE_FLTDIV_TRAP: Program Error Signals. -* FPE_FLTOVF_TRAP: Program Error Signals. -* FPE_FLTUND_TRAP: Program Error Signals. -* FPE_INTDIV_TRAP: Program Error Signals. -* FPE_INTOVF_TRAP: Program Error Signals. -* FPE_SUBRNG_TRAP: Program Error Signals. -* FRAC_DIGITS: The Elegant and Fast Way. -* FSETLOCKING_BYCALLER: Streams and Threads. -* FSETLOCKING_INTERNAL: Streams and Threads. -* FSETLOCKING_QUERY: Streams and Threads. -* FSTAB: Mount Information. -* FSTAB_RO: fstab. -* FSTAB_RQ: fstab. -* FSTAB_RW: fstab. -* FSTAB_SW: fstab. -* FSTAB_XX: fstab. -* FTW_CHDIR: Working with Directory Trees. -* FTW_D: Working with Directory Trees. -* FTW_DEPTH: Working with Directory Trees. -* FTW_DNR: Working with Directory Trees. -* FTW_DP: Working with Directory Trees. -* FTW_F: Working with Directory Trees. -* FTW_MOUNT: Working with Directory Trees. -* FTW_NS: Working with Directory Trees. -* FTW_PHYS: Working with Directory Trees. -* FTW_SL: Working with Directory Trees. -* FTW_SLN: Working with Directory Trees. -* getdate_err: General Time String Parsing. -* GLOB_ABORTED: Calling Glob. -* GLOB_ALTDIRFUNC: More Flags for Globbing. -* GLOB_APPEND: Flags for Globbing. -* GLOB_BRACE: More Flags for Globbing. -* GLOB_DOOFFS: Flags for Globbing. -* GLOB_ERR: Flags for Globbing. -* GLOB_MAGCHAR: More Flags for Globbing. -* GLOB_MARK: Flags for Globbing. -* GLOB_NOCHECK: Flags for Globbing. -* GLOB_NOESCAPE: Flags for Globbing. -* GLOB_NOMAGIC: More Flags for Globbing. -* GLOB_NOMATCH: Calling Glob. -* GLOB_NOSORT: Flags for Globbing. -* GLOB_NOSPACE: Calling Glob. -* GLOB_ONLYDIR: More Flags for Globbing. -* GLOB_PERIOD: More Flags for Globbing. -* GLOB_TILDE: More Flags for Globbing. -* GLOB_TILDE_CHECK: More Flags for Globbing. -* group: NSS Basics. -* GROUPING: The Elegant and Fast Way. -* h_errno: Host Names. -* HOST_NOT_FOUND: Host Names. -* hosts: NSS Basics. -* HUGE_VAL: Math Error Reporting. -* HUGE_VALF: Math Error Reporting. -* HUGE_VALL: Math Error Reporting. -* HUPCL: Control Modes. -* I: Complex Numbers. -* ICANON: Local Modes. -* ICRNL: Input Modes. -* IEXTEN: Local Modes. -* IFNAMSIZ: Interface Naming. -* IGNBRK: Input Modes. -* IGNCR: Input Modes. -* IGNPAR: Input Modes. -* IMAXBEL: Input Modes. -* in6addr_any: Host Address Data Type. -* in6addr_loopback: Host Address Data Type. -* INADDR_ANY: Host Address Data Type. -* INADDR_BROADCAST: Host Address Data Type. -* INADDR_LOOPBACK: Host Address Data Type. -* INADDR_NONE: Host Address Data Type. -* INFINITY: Infinity and NaN. -* INIT_PROCESS <1>: XPG Functions. -* INIT_PROCESS: Manipulating the Database. -* INLCR: Input Modes. -* INPCK: Input Modes. -* INT_CURR_SYMBOL: The Elegant and Fast Way. -* INT_FRAC_DIGITS: The Elegant and Fast Way. -* INT_MAX: Range of Type. -* INT_MIN: Range of Type. -* INT_N_CS_PRECEDES: The Elegant and Fast Way. -* INT_N_SEP_BY_SPACE: The Elegant and Fast Way. -* INT_N_SIGN_POSN: The Elegant and Fast Way. -* INT_P_CS_PRECEDES: The Elegant and Fast Way. -* INT_P_SEP_BY_SPACE: The Elegant and Fast Way. -* INT_P_SIGN_POSN: The Elegant and Fast Way. -* IPPORT_RESERVED: Ports. -* IPPORT_USERRESERVED: Ports. -* ISIG: Local Modes. -* ISTRIP: Input Modes. -* ITIMER_PROF: Setting an Alarm. -* ITIMER_REAL: Setting an Alarm. -* ITIMER_VIRTUAL: Setting an Alarm. -* IXANY: Input Modes. -* IXOFF: Input Modes. -* IXON: Input Modes. -* L_ctermid: Identifying the Terminal. -* L_cuserid: Who Logged In. -* L_INCR: File Positioning. -* L_SET: File Positioning. -* L_tmpnam: Temporary Files. -* L_XTND: File Positioning. -* LANG: Locale Categories. -* LANGUAGE: Locale Categories. -* LC_ALL: Locale Categories. -* LC_COLLATE: Locale Categories. -* LC_CTYPE: Locale Categories. -* LC_MESSAGES: Locale Categories. -* LC_MONETARY: Locale Categories. -* LC_NUMERIC: Locale Categories. -* LC_TIME: Locale Categories. -* LDBL_DIG: Floating Point Parameters. -* LDBL_EPSILON: Floating Point Parameters. -* LDBL_MANT_DIG: Floating Point Parameters. -* LDBL_MAX: Floating Point Parameters. -* LDBL_MAX_10_EXP: Floating Point Parameters. -* LDBL_MAX_EXP: Floating Point Parameters. -* LDBL_MIN: Floating Point Parameters. -* LDBL_MIN_10_EXP: Floating Point Parameters. -* LDBL_MIN_EXP: Floating Point Parameters. -* LINE_MAX: Utility Limits. -* LINK_MAX: Limits for Files. -* LIO_NOP: Asynchronous I/O. -* LIO_READ: Asynchronous I/O. -* LIO_WRITE: Asynchronous I/O. -* LOG_ALERT: syslog; vsyslog. -* LOG_AUTH: syslog; vsyslog. -* LOG_AUTHPRIV: syslog; vsyslog. -* LOG_CRIT: syslog; vsyslog. -* LOG_CRON: syslog; vsyslog. -* LOG_DAEMON: syslog; vsyslog. -* LOG_DEBUG: syslog; vsyslog. -* LOG_EMERG: syslog; vsyslog. -* LOG_ERR: syslog; vsyslog. -* LOG_FTP: syslog; vsyslog. -* LOG_INFO: syslog; vsyslog. -* LOG_LOCAL0: syslog; vsyslog. -* LOG_LOCAL1: syslog; vsyslog. -* LOG_LOCAL2: syslog; vsyslog. -* LOG_LOCAL3: syslog; vsyslog. -* LOG_LOCAL4: syslog; vsyslog. -* LOG_LOCAL5: syslog; vsyslog. -* LOG_LOCAL6: syslog; vsyslog. -* LOG_LOCAL7: syslog; vsyslog. -* LOG_LPR: syslog; vsyslog. -* LOG_MAIL: syslog; vsyslog. -* LOG_NEWS: syslog; vsyslog. -* LOG_NOTICE: syslog; vsyslog. -* LOG_SYSLOG: syslog; vsyslog. -* LOG_USER: syslog; vsyslog. -* LOG_UUCP: syslog; vsyslog. -* LOG_WARNING: syslog; vsyslog. -* LOGIN_PROCESS <1>: XPG Functions. -* LOGIN_PROCESS: Manipulating the Database. -* LONG_LONG_MAX: Range of Type. -* LONG_LONG_MIN: Range of Type. -* LONG_MAX: Range of Type. -* LONG_MIN: Range of Type. -* M_1_PI: Mathematical Constants. -* M_2_PI: Mathematical Constants. -* M_2_SQRTPI: Mathematical Constants. -* M_E: Mathematical Constants. -* M_LN10: Mathematical Constants. -* M_LN2: Mathematical Constants. -* M_LOG10E: Mathematical Constants. -* M_LOG2E: Mathematical Constants. -* M_PI: Mathematical Constants. -* M_PI_2: Mathematical Constants. -* M_PI_4: Mathematical Constants. -* M_SQRT1_2: Mathematical Constants. -* M_SQRT2: Mathematical Constants. -* MAP_ANON: Memory-mapped I/O. -* MAP_ANONYMOUS: Memory-mapped I/O. -* MAP_FIXED: Memory-mapped I/O. -* MAP_PRIVATE: Memory-mapped I/O. -* MAP_SHARED: Memory-mapped I/O. -* MAX_CANON: Limits for Files. -* MAX_INPUT: Limits for Files. -* MAXNAMLEN: Limits for Files. -* MB_CUR_MAX: Selecting the Conversion. -* MB_LEN_MAX: Selecting the Conversion. -* MDMBUF: Control Modes. -* MINSIGSTKSZ: Signal Stack. -* MM_APPL: Printing Formatted Messages. -* MM_CONSOLE: Printing Formatted Messages. -* MM_ERROR: Printing Formatted Messages. -* MM_FIRM: Printing Formatted Messages. -* MM_HALT: Printing Formatted Messages. -* MM_HARD: Printing Formatted Messages. -* MM_INFO: Printing Formatted Messages. -* MM_NOSEV: Printing Formatted Messages. -* MM_NRECOV: Printing Formatted Messages. -* MM_NULLACT: Printing Formatted Messages. -* MM_NULLLBL: Printing Formatted Messages. -* MM_NULLMC: Printing Formatted Messages. -* MM_NULLSEV: Printing Formatted Messages. -* MM_NULLTAG: Printing Formatted Messages. -* MM_NULLTXT: Printing Formatted Messages. -* MM_OPSYS: Printing Formatted Messages. -* MM_PRINT: Printing Formatted Messages. -* MM_RECOVER: Printing Formatted Messages. -* MM_SOFT: Printing Formatted Messages. -* MM_UTIL: Printing Formatted Messages. -* MM_WARNING: Printing Formatted Messages. -* MNTOPT_DEFAULTS: mtab. -* MNTOPT_NOAUTO: mtab. -* MNTOPT_NOSUID: mtab. -* MNTOPT_RO: mtab. -* MNTOPT_RW: mtab. -* MNTOPT_SUID: mtab. -* MNTTYPE_IGNORE: mtab. -* MNTTYPE_NFS: mtab. -* MNTTYPE_SWAP: mtab. -* MON_1: The Elegant and Fast Way. -* MON_10: The Elegant and Fast Way. -* MON_11: The Elegant and Fast Way. -* MON_12: The Elegant and Fast Way. -* MON_2: The Elegant and Fast Way. -* MON_3: The Elegant and Fast Way. -* MON_4: The Elegant and Fast Way. -* MON_5: The Elegant and Fast Way. -* MON_6: The Elegant and Fast Way. -* MON_7: The Elegant and Fast Way. -* MON_8: The Elegant and Fast Way. -* MON_9: The Elegant and Fast Way. -* MON_DECIMAL_POINT: The Elegant and Fast Way. -* MON_GROUPING: The Elegant and Fast Way. -* MON_THOUSANDS_SEP: The Elegant and Fast Way. -* MS_ASYNC: Memory-mapped I/O. -* MS_SYNC: Memory-mapped I/O. -* MSG_DONTROUTE: Socket Data Options. -* MSG_OOB: Socket Data Options. -* MSG_PEEK: Socket Data Options. -* N_CS_PRECEDES: The Elegant and Fast Way. -* N_SEP_BY_SPACE: The Elegant and Fast Way. -* N_SIGN_POSN: The Elegant and Fast Way. -* NAME_MAX: Limits for Files. -* NAN: Infinity and NaN. -* NCCS: Mode Data Types. -* NDEBUG: Consistency Checking. -* NEGATIVE_SIGN: The Elegant and Fast Way. -* netgroup: NSS Basics. -* networks: NSS Basics. -* NEW_TIME <1>: XPG Functions. -* NEW_TIME: Manipulating the Database. -* NGROUPS_MAX: General Limits. -* NL_ARGMAX: Output Conversion Syntax. -* NO_ADDRESS: Host Names. -* NO_RECOVERY: Host Names. -* NOEXPR: The Elegant and Fast Way. -* NOFLSH: Local Modes. -* NOKERNINFO: Local Modes. -* NOSTR: The Elegant and Fast Way. -* NSIG: Standard Signals. -* NSS_STATUS_NOTFOUND: NSS Modules Interface. -* NSS_STATUS_SUCCESS: NSS Modules Interface. -* NSS_STATUS_TRYAGAIN: NSS Modules Interface. -* NSS_STATUS_UNAVAIL: NSS Modules Interface. -* NULL: Null Pointer Constant. -* O_ACCMODE: Access Modes. -* O_APPEND: Operating Modes. -* O_ASYNC: Operating Modes. -* O_CREAT: Open-time Flags. -* O_EXCL: Open-time Flags. -* O_EXEC: Access Modes. -* O_EXLOCK: Open-time Flags. -* O_FSYNC: Operating Modes. -* O_IGNORE_CTTY: Open-time Flags. -* O_NDELAY: Operating Modes. -* O_NOATIME: Operating Modes. -* O_NOCTTY: Open-time Flags. -* O_NOLINK: Open-time Flags. -* O_NONBLOCK <1>: Operating Modes. -* O_NONBLOCK: Open-time Flags. -* O_NOTRANS: Open-time Flags. -* O_RDONLY: Access Modes. -* O_RDWR: Access Modes. -* O_READ: Access Modes. -* O_SHLOCK: Open-time Flags. -* O_SYNC: Operating Modes. -* O_TRUNC: Open-time Flags. -* O_WRITE: Access Modes. -* O_WRONLY: Access Modes. -* obstack_alloc_failed_handler: Preparing for Obstacks. -* OLD_TIME <1>: XPG Functions. -* OLD_TIME: Manipulating the Database. -* ONLCR: Output Modes. -* ONOEOT: Output Modes. -* OPEN_MAX: General Limits. -* OPOST: Output Modes. -* optarg: Using Getopt. -* opterr: Using Getopt. -* optind: Using Getopt. -* OPTION_ALIAS: Argp Option Flags. -* OPTION_ARG_OPTIONAL: Argp Option Flags. -* OPTION_DOC: Argp Option Flags. -* OPTION_HIDDEN: Argp Option Flags. -* OPTION_NO_USAGE: Argp Option Flags. -* optopt: Using Getopt. -* OXTABS: Output Modes. -* P_CS_PRECEDES: The Elegant and Fast Way. -* P_SEP_BY_SPACE: The Elegant and Fast Way. -* P_SIGN_POSN: The Elegant and Fast Way. -* P_tmpdir: Temporary Files. -* PA_CHAR: Parsing a Template String. -* PA_DOUBLE: Parsing a Template String. -* PA_FLAG_LONG: Parsing a Template String. -* PA_FLAG_LONG_DOUBLE: Parsing a Template String. -* PA_FLAG_LONG_LONG: Parsing a Template String. -* PA_FLAG_MASK: Parsing a Template String. -* PA_FLAG_PTR: Parsing a Template String. -* PA_FLAG_SHORT: Parsing a Template String. -* PA_FLOAT: Parsing a Template String. -* PA_INT: Parsing a Template String. -* PA_LAST: Parsing a Template String. -* PA_POINTER: Parsing a Template String. -* PA_STRING: Parsing a Template String. -* PARENB: Control Modes. -* PARMRK: Input Modes. -* PARODD: Control Modes. -* passwd: NSS Basics. -* PATH_MAX: Limits for Files. -* PENDIN: Local Modes. -* PF_CCITT: Misc Namespaces. -* PF_FILE: Local Namespace Details. -* PF_IMPLINK: Misc Namespaces. -* PF_INET: Internet Namespace. -* PF_INET6: Internet Namespace. -* PF_ISO: Misc Namespaces. -* PF_LOCAL: Local Namespace Details. -* PF_NS: Misc Namespaces. -* PF_ROUTE: Misc Namespaces. -* PF_UNIX: Local Namespace Details. -* PI: Mathematical Constants. -* PIPE_BUF: Limits for Files. -* PM_STR: The Elegant and Fast Way. -* POSITIVE_SIGN: The Elegant and Fast Way. -* PRIO_MAX: Traditional Scheduling Functions. -* PRIO_MIN: Traditional Scheduling Functions. -* PRIO_PGRP: Traditional Scheduling Functions. -* PRIO_PROCESS: Traditional Scheduling Functions. -* PRIO_USER: Traditional Scheduling Functions. -* program_invocation_name: Error Messages. -* program_invocation_short_name: Error Messages. -* PROT_EXEC: Memory-mapped I/O. -* PROT_READ: Memory-mapped I/O. -* PROT_WRITE: Memory-mapped I/O. -* protocols: NSS Basics. -* PWD: Working Directory. -* R_OK: Testing File Access. -* RADIXCHAR: The Elegant and Fast Way. -* RAND_MAX: ISO Random. -* RE_DUP_MAX: General Limits. -* RLIM_INFINITY: Limits on Resources. -* RLIM_NLIMITS: Limits on Resources. -* RLIMIT_AS: Limits on Resources. -* RLIMIT_CORE: Limits on Resources. -* RLIMIT_CPU: Limits on Resources. -* RLIMIT_DATA: Limits on Resources. -* RLIMIT_FSIZE: Limits on Resources. -* RLIMIT_NOFILE: Limits on Resources. -* RLIMIT_OFILE: Limits on Resources. -* RLIMIT_RSS: Limits on Resources. -* RLIMIT_STACK: Limits on Resources. -* rpc: NSS Basics. -* RUN_LVL <1>: XPG Functions. -* RUN_LVL: Manipulating the Database. -* S_IEXEC: Permission Bits. -* S_IFBLK: Testing File Type. -* S_IFCHR: Testing File Type. -* S_IFDIR: Testing File Type. -* S_IFIFO: Testing File Type. -* S_IFLNK: Testing File Type. -* S_IFMT: Testing File Type. -* S_IFREG: Testing File Type. -* S_IFSOCK: Testing File Type. -* S_IREAD: Permission Bits. -* S_IRGRP: Permission Bits. -* S_IROTH: Permission Bits. -* S_IRUSR: Permission Bits. -* S_IRWXG: Permission Bits. -* S_IRWXO: Permission Bits. -* S_IRWXU: Permission Bits. -* S_ISGID: Permission Bits. -* S_ISUID: Permission Bits. -* S_ISVTX: Permission Bits. -* S_IWGRP: Permission Bits. -* S_IWOTH: Permission Bits. -* S_IWRITE: Permission Bits. -* S_IWUSR: Permission Bits. -* S_IXGRP: Permission Bits. -* S_IXOTH: Permission Bits. -* S_IXUSR: Permission Bits. -* SA_NOCLDSTOP: Flags for Sigaction. -* SA_ONSTACK: Flags for Sigaction. -* SA_RESTART: Flags for Sigaction. -* SC_SSIZE_MAX: Constants for Sysconf. -* SCHAR_MAX: Range of Type. -* SCHAR_MIN: Range of Type. -* SEEK_CUR: File Positioning. -* SEEK_END: File Positioning. -* SEEK_SET: File Positioning. -* SEM_VALUE_MAX: POSIX Semaphores. -* services: NSS Basics. -* shadow: NSS Basics. -* SHRT_MAX: Range of Type. -* SHRT_MIN: Range of Type. -* SIG_BLOCK: Process Signal Mask. -* SIG_DFL: Basic Signal Handling. -* SIG_ERR: Basic Signal Handling. -* SIG_IGN: Basic Signal Handling. -* SIG_SETMASK: Process Signal Mask. -* SIG_UNBLOCK: Process Signal Mask. -* SIGABRT: Program Error Signals. -* SIGALRM: Alarm Signals. -* SIGBUS: Program Error Signals. -* SIGCHLD: Job Control Signals. -* SIGCLD: Job Control Signals. -* SIGCONT: Job Control Signals. -* SIGEMT: Program Error Signals. -* SIGFPE: Program Error Signals. -* SIGHUP: Termination Signals. -* SIGILL: Program Error Signals. -* SIGINFO: Miscellaneous Signals. -* SIGINT: Termination Signals. -* SIGIO: Asynchronous I/O Signals. -* SIGIOT: Program Error Signals. -* SIGKILL: Termination Signals. -* SIGLOST: Operation Error Signals. -* signgam: Special Functions. -* SIGPIPE: Operation Error Signals. -* SIGPOLL: Asynchronous I/O Signals. -* SIGPROF: Alarm Signals. -* SIGQUIT: Termination Signals. -* SIGSEGV: Program Error Signals. -* SIGSTKSZ: Signal Stack. -* SIGSTOP: Job Control Signals. -* SIGSYS: Program Error Signals. -* SIGTERM: Termination Signals. -* SIGTRAP: Program Error Signals. -* SIGTSTP: Job Control Signals. -* SIGTTIN: Job Control Signals. -* SIGTTOU: Job Control Signals. -* SIGURG: Asynchronous I/O Signals. -* SIGUSR1: Miscellaneous Signals. -* SIGUSR2: Miscellaneous Signals. -* SIGVTALRM: Alarm Signals. -* SIGWINCH: Miscellaneous Signals. -* SIGXCPU: Operation Error Signals. -* SIGXFSZ: Operation Error Signals. -* SOCK_DGRAM: Communication Styles. -* SOCK_RAW: Communication Styles. -* SOCK_STREAM: Communication Styles. -* SOL_SOCKET: Socket-Level Options. -* SS_DISABLE: Signal Stack. -* SS_ONSTACK: Signal Stack. -* SSIZE_MAX: General Limits. -* stderr: Standard Streams. -* STDERR_FILENO: Descriptors and Streams. -* stdin: Standard Streams. -* STDIN_FILENO: Descriptors and Streams. -* stdout: Standard Streams. -* STDOUT_FILENO: Descriptors and Streams. -* STREAM_MAX: General Limits. -* SV_INTERRUPT: BSD Handler. -* SV_ONSTACK: BSD Handler. -* SV_RESETHAND: BSD Handler. -* sys_siglist: Signal Messages. -* T_FMT: The Elegant and Fast Way. -* T_FMT_AMPM: The Elegant and Fast Way. -* TCIFLUSH: Line Control. -* TCIOFF: Line Control. -* TCIOFLUSH: Line Control. -* TCION: Line Control. -* TCOFLUSH: Line Control. -* TCOOFF: Line Control. -* TCOON: Line Control. -* TCSADRAIN: Mode Functions. -* TCSAFLUSH: Mode Functions. -* TCSANOW: Mode Functions. -* TCSASOFT: Mode Functions. -* THOUSANDS_SEP: The Elegant and Fast Way. -* THOUSEP: The Elegant and Fast Way. -* timezone: Time Zone Functions. -* TMP_MAX: Temporary Files. -* TOSTOP: Local Modes. -* TRY_AGAIN: Host Names. -* tzname: Time Zone Functions. -* TZNAME_MAX: General Limits. -* UCHAR_MAX: Range of Type. -* UINT_MAX: Range of Type. -* ULONG_LONG_MAX: Range of Type. -* ULONG_MAX: Range of Type. -* USER_PROCESS <1>: XPG Functions. -* USER_PROCESS: Manipulating the Database. -* USHRT_MAX: Range of Type. -* VDISCARD: Other Special. -* VDSUSP: Signal Characters. -* VEOF: Editing Characters. -* VEOL: Editing Characters. -* VEOL2: Editing Characters. -* VERASE: Editing Characters. -* VINTR: Signal Characters. -* VKILL: Editing Characters. -* VLNEXT: Other Special. -* VMIN: Noncanonical Input. -* VQUIT: Signal Characters. -* VREPRINT: Editing Characters. -* VSTART: Start/Stop Characters. -* VSTATUS: Other Special. -* VSTOP: Start/Stop Characters. -* VSUSP: Signal Characters. -* VTIME: Noncanonical Input. -* VWERASE: Editing Characters. -* W_OK: Testing File Access. -* WCHAR_MAX <1>: Range of Type. -* WCHAR_MAX: Extended Char Intro. -* WCHAR_MIN: Extended Char Intro. -* WEOF <1>: EOF and Errors. -* WEOF: Extended Char Intro. -* X_OK: Testing File Access. -* YESEXPR: The Elegant and Fast Way. -* YESSTR: The Elegant and Fast Way. +* __fbufsize: Controlling Buffering. +* __flbf: Controlling Buffering. +* __fpending: Controlling Buffering. +* __fpurge: Flushing Buffers. +* __freadable: Opening Streams. +* __freading: Opening Streams. +* __fsetlocking: Streams and Threads. +* __fwritable: Opening Streams. +* __fwriting: Opening Streams. +* __va_copy: Argument Macros. +* _Exit: Termination Internals. +* _exit: Termination Internals. +* _flushlbf: Flushing Buffers. +* _tolower: Case Conversion. +* _toupper: Case Conversion. +* a64l: Encode Binary Data. +* abort: Aborting a Program. +* abs: Absolute Value. +* accept: Accepting Connections. +* access: Testing File Access. +* acos: Inverse Trig Functions. +* acosf: Inverse Trig Functions. +* acosh: Hyperbolic Functions. +* acoshf: Hyperbolic Functions. +* acoshl: Hyperbolic Functions. +* acosl: Inverse Trig Functions. +* addmntent: mtab. +* addseverity: Adding Severity Classes. +* adjtime: High-Resolution Calendar. +* adjtimex: High-Resolution Calendar. +* aio_cancel: Cancel AIO Operations. +* aio_cancel64: Cancel AIO Operations. +* aio_error: Status of AIO Operations. +* aio_error64: Status of AIO Operations. +* aio_fsync: Synchronizing AIO Operations. +* aio_fsync64: Synchronizing AIO Operations. +* aio_init: Configuration of AIO. +* aio_read: Asynchronous Reads/Writes. +* aio_read64: Asynchronous Reads/Writes. +* aio_return: Status of AIO Operations. +* aio_return64: Status of AIO Operations. +* aio_suspend: Synchronizing AIO Operations. +* aio_suspend64: Synchronizing AIO Operations. +* aio_write: Asynchronous Reads/Writes. +* aio_write64: Asynchronous Reads/Writes. +* alarm: Setting an Alarm. +* alloca: Variable Size Automatic. +* alphasort: Scanning Directory Content. +* alphasort64: Scanning Directory Content. +* argp_error: Argp Helper Functions. +* argp_failure: Argp Helper Functions. +* argp_help: Argp Help. +* argp_parse: Argp. +* argp_state_help: Argp Helper Functions. +* argp_usage: Argp Helper Functions. +* argz_add: Argz Functions. +* argz_add_sep: Argz Functions. +* argz_append: Argz Functions. +* argz_count: Argz Functions. +* argz_create: Argz Functions. +* argz_create_sep: Argz Functions. +* argz_delete: Argz Functions. +* argz_extract: Argz Functions. +* argz_insert: Argz Functions. +* argz_next: Argz Functions. +* argz_replace: Argz Functions. +* argz_stringify: Argz Functions. +* asctime: Formatting Calendar Time. +* asctime_r: Formatting Calendar Time. +* asin: Inverse Trig Functions. +* asinf: Inverse Trig Functions. +* asinh: Hyperbolic Functions. +* asinhf: Hyperbolic Functions. +* asinhl: Hyperbolic Functions. +* asinl: Inverse Trig Functions. +* asprintf: Dynamic Output. +* assert: Consistency Checking. +* assert_perror: Consistency Checking. +* atan: Inverse Trig Functions. +* atan2: Inverse Trig Functions. +* atan2f: Inverse Trig Functions. +* atan2l: Inverse Trig Functions. +* atanf: Inverse Trig Functions. +* atanh: Hyperbolic Functions. +* atanhf: Hyperbolic Functions. +* atanhl: Hyperbolic Functions. +* atanl: Inverse Trig Functions. +* atexit: Cleanups on Exit. +* atof: Parsing of Floats. +* atoi: Parsing of Integers. +* atol: Parsing of Integers. +* atoll: Parsing of Integers. +* backtrace: Backtraces. +* backtrace_symbols: Backtraces. +* backtrace_symbols_fd: Backtraces. +* basename: Finding Tokens in a String. +* bcmp: String/Array Comparison. +* bcopy: Copying and Concatenation. +* bind: Setting Address. +* bind_textdomain_codeset: Charset conversion in gettext. +* bindtextdomain: Locating gettext catalog. +* brk: Resizing the Data Segment. +* bsearch: Array Search Function. +* btowc: Converting a Character. +* bzero: Copying and Concatenation. +* cabs: Absolute Value. +* cabsf: Absolute Value. +* cabsl: Absolute Value. +* cacos: Inverse Trig Functions. +* cacosf: Inverse Trig Functions. +* cacosh: Hyperbolic Functions. +* cacoshf: Hyperbolic Functions. +* cacoshl: Hyperbolic Functions. +* cacosl: Inverse Trig Functions. +* calloc: Allocating Cleared Space. +* canonicalize_file_name: Symbolic Links. +* carg: Operations on Complex. +* cargf: Operations on Complex. +* cargl: Operations on Complex. +* casin: Inverse Trig Functions. +* casinf: Inverse Trig Functions. +* casinh: Hyperbolic Functions. +* casinhf: Hyperbolic Functions. +* casinhl: Hyperbolic Functions. +* casinl: Inverse Trig Functions. +* catan: Inverse Trig Functions. +* catanf: Inverse Trig Functions. +* catanh: Hyperbolic Functions. +* catanhf: Hyperbolic Functions. +* catanhl: Hyperbolic Functions. +* catanl: Inverse Trig Functions. +* catclose: The catgets Functions. +* catgets: The catgets Functions. +* catopen: The catgets Functions. +* cbc_crypt: DES Encryption. +* cbrt: Exponents and Logarithms. +* cbrtf: Exponents and Logarithms. +* cbrtl: Exponents and Logarithms. +* ccos: Trig Functions. +* ccosf: Trig Functions. +* ccosh: Hyperbolic Functions. +* ccoshf: Hyperbolic Functions. +* ccoshl: Hyperbolic Functions. +* ccosl: Trig Functions. +* ceil: Rounding Functions. +* ceilf: Rounding Functions. +* ceill: Rounding Functions. +* cexp: Exponents and Logarithms. +* cexpf: Exponents and Logarithms. +* cexpl: Exponents and Logarithms. +* cfgetispeed: Line Speed. +* cfgetospeed: Line Speed. +* cfmakeraw: Noncanonical Input. +* cfree: Freeing after Malloc. +* cfsetispeed: Line Speed. +* cfsetospeed: Line Speed. +* cfsetspeed: Line Speed. +* chdir: Working Directory. +* chmod: Setting Permissions. +* chown: File Owner. +* cimag: Operations on Complex. +* cimagf: Operations on Complex. +* cimagl: Operations on Complex. +* clearenv: Environment Access. +* clearerr: Error Recovery. +* clearerr_unlocked: Error Recovery. +* clock: CPU Time. +* clog: Exponents and Logarithms. +* clog10: Exponents and Logarithms. +* clog10f: Exponents and Logarithms. +* clog10l: Exponents and Logarithms. +* clogf: Exponents and Logarithms. +* clogl: Exponents and Logarithms. +* close: Opening and Closing Files. +* closedir: Reading/Closing Directory. +* closelog: closelog. +* confstr: String Parameters. +* conj: Operations on Complex. +* conjf: Operations on Complex. +* conjl: Operations on Complex. +* connect: Connecting. +* copysign: FP Bit Twiddling. +* copysignf: FP Bit Twiddling. +* copysignl: FP Bit Twiddling. +* cos: Trig Functions. +* cosf: Trig Functions. +* cosh: Hyperbolic Functions. +* coshf: Hyperbolic Functions. +* coshl: Hyperbolic Functions. +* cosl: Trig Functions. +* cpow: Exponents and Logarithms. +* cpowf: Exponents and Logarithms. +* cpowl: Exponents and Logarithms. +* cproj: Operations on Complex. +* cprojf: Operations on Complex. +* cprojl: Operations on Complex. +* creal: Operations on Complex. +* crealf: Operations on Complex. +* creall: Operations on Complex. +* creat: Opening and Closing Files. +* creat64: Opening and Closing Files. +* crypt: crypt. +* crypt_r: crypt. +* csin: Trig Functions. +* csinf: Trig Functions. +* csinh: Hyperbolic Functions. +* csinhf: Hyperbolic Functions. +* csinhl: Hyperbolic Functions. +* csinl: Trig Functions. +* csqrt: Exponents and Logarithms. +* csqrtf: Exponents and Logarithms. +* csqrtl: Exponents and Logarithms. +* ctan: Trig Functions. +* ctanf: Trig Functions. +* ctanh: Hyperbolic Functions. +* ctanhf: Hyperbolic Functions. +* ctanhl: Hyperbolic Functions. +* ctanl: Trig Functions. +* ctermid: Identifying the Terminal. +* ctime: Formatting Calendar Time. +* ctime_r: Formatting Calendar Time. +* cuserid: Who Logged In. +* dcgettext: Translation with gettext. +* dcngettext: Advanced gettext functions. +* DES_FAILED: DES Encryption. +* des_setparity: DES Encryption. +* dgettext: Translation with gettext. +* difftime: Elapsed Time. +* dirfd: Opening a Directory. +* dirname: Finding Tokens in a String. +* div: Integer Division. +* dngettext: Advanced gettext functions. +* drand48: SVID Random. +* drand48_r: SVID Random. +* drem: Remainder Functions. +* dremf: Remainder Functions. +* dreml: Remainder Functions. +* DTTOIF: Directory Entries. +* dup: Duplicating Descriptors. +* dup2: Duplicating Descriptors. +* ecb_crypt: DES Encryption. +* ecvt: System V Number Conversion. +* ecvt_r: System V Number Conversion. +* encrypt: DES Encryption. +* encrypt_r: DES Encryption. +* endfsent: fstab. +* endgrent: Scanning All Groups. +* endhostent: Host Names. +* endmntent: mtab. +* endnetent: Networks Database. +* endnetgrent: Lookup Netgroup. +* endprotoent: Protocols Database. +* endpwent: Scanning All Users. +* endservent: Services Database. +* endutent: Manipulating the Database. +* endutxent: XPG Functions. +* envz_add: Envz Functions. +* envz_entry: Envz Functions. +* envz_get: Envz Functions. +* envz_merge: Envz Functions. +* envz_strip: Envz Functions. +* erand48: SVID Random. +* erand48_r: SVID Random. +* erf: Special Functions. +* erfc: Special Functions. +* erfcf: Special Functions. +* erfcl: Special Functions. +* erff: Special Functions. +* erfl: Special Functions. +* execl: Executing a File. +* execle: Executing a File. +* execlp: Executing a File. +* execv: Executing a File. +* execve: Executing a File. +* execvp: Executing a File. +* exit: Normal Termination. +* exp: Exponents and Logarithms. +* exp10: Exponents and Logarithms. +* exp10f: Exponents and Logarithms. +* exp10l: Exponents and Logarithms. +* exp2: Exponents and Logarithms. +* exp2f: Exponents and Logarithms. +* exp2l: Exponents and Logarithms. +* expf: Exponents and Logarithms. +* expl: Exponents and Logarithms. +* expm1: Exponents and Logarithms. +* expm1f: Exponents and Logarithms. +* expm1l: Exponents and Logarithms. +* fabs: Absolute Value. +* fabsf: Absolute Value. +* fabsl: Absolute Value. +* fchdir: Working Directory. +* fchmod: Setting Permissions. +* fchown: File Owner. +* fclean: Cleaning Streams. +* fclose: Closing Streams. +* fcloseall: Closing Streams. +* fcntl: Control Operations. +* fcvt: System V Number Conversion. +* fcvt_r: System V Number Conversion. +* FD_CLR: Waiting for I/O. +* FD_ISSET: Waiting for I/O. +* FD_SET: Waiting for I/O. +* FD_ZERO: Waiting for I/O. +* fdatasync: Synchronizing I/O. +* fdim: Misc FP Arithmetic. +* fdimf: Misc FP Arithmetic. +* fdiml: Misc FP Arithmetic. +* fdopen: Descriptors and Streams. +* feclearexcept: Status bit operations. +* fedisableexcept: Control Functions. +* feenableexcept: Control Functions. +* fegetenv: Control Functions. +* fegetexcept: Control Functions. +* fegetexceptflag: Status bit operations. +* fegetround: Rounding. +* feholdexcept: Control Functions. +* feof: EOF and Errors. +* feof_unlocked: EOF and Errors. +* feraiseexcept: Status bit operations. +* ferror: EOF and Errors. +* ferror_unlocked: EOF and Errors. +* fesetenv: Control Functions. +* fesetexceptflag: Status bit operations. +* fesetround: Rounding. +* fetestexcept: Status bit operations. +* feupdateenv: Control Functions. +* fflush: Flushing Buffers. +* fflush_unlocked: Flushing Buffers. +* fgetc: Character Input. +* fgetc_unlocked: Character Input. +* fgetgrent: Scanning All Groups. +* fgetgrent_r: Scanning All Groups. +* fgetpos: Portable Positioning. +* fgetpos64: Portable Positioning. +* fgetpwent: Scanning All Users. +* fgetpwent_r: Scanning All Users. +* fgets: Line Input. +* fgets_unlocked: Line Input. +* fgetwc: Character Input. +* fgetwc_unlocked: Character Input. +* fgetws: Line Input. +* fgetws_unlocked: Line Input. +* fileno: Descriptors and Streams. +* fileno_unlocked: Descriptors and Streams. +* finite: Floating Point Classes. +* finitef: Floating Point Classes. +* finitel: Floating Point Classes. +* flockfile: Streams and Threads. +* floor: Rounding Functions. +* floorf: Rounding Functions. +* floorl: Rounding Functions. +* fma: Misc FP Arithmetic. +* fmaf: Misc FP Arithmetic. +* fmal: Misc FP Arithmetic. +* fmax: Misc FP Arithmetic. +* fmaxf: Misc FP Arithmetic. +* fmaxl: Misc FP Arithmetic. +* fmemopen: String Streams. +* fmin: Misc FP Arithmetic. +* fminf: Misc FP Arithmetic. +* fminl: Misc FP Arithmetic. +* fmod: Remainder Functions. +* fmodf: Remainder Functions. +* fmodl: Remainder Functions. +* fmtmsg: Printing Formatted Messages. +* fnmatch: Wildcard Matching. +* fopen: Opening Streams. +* fopen64: Opening Streams. +* fopencookie: Streams and Cookies. +* fork: Creating a Process. +* forkpty: Pseudo-Terminal Pairs. +* fpathconf: Pathconf. +* fpclassify: Floating Point Classes. +* fprintf: Formatted Output Functions. +* fputc: Simple Output. +* fputc_unlocked: Simple Output. +* fputs: Simple Output. +* fputs_unlocked: Simple Output. +* fputwc: Simple Output. +* fputwc_unlocked: Simple Output. +* fputws: Simple Output. +* fputws_unlocked: Simple Output. +* fread: Block Input/Output. +* fread_unlocked: Block Input/Output. +* free: Freeing after Malloc. +* freopen: Opening Streams. +* freopen64: Opening Streams. +* frexp: Normalization Functions. +* frexpf: Normalization Functions. +* frexpl: Normalization Functions. +* fscanf: Formatted Input Functions. +* fseek: File Positioning. +* fseeko: File Positioning. +* fseeko64: File Positioning. +* fsetpos: Portable Positioning. +* fsetpos64: Portable Positioning. +* fstat: Reading Attributes. +* fstat64: Reading Attributes. +* fsync: Synchronizing I/O. +* ftell: File Positioning. +* ftello: File Positioning. +* ftello64: File Positioning. +* ftruncate: File Size. +* ftruncate64: File Size. +* ftrylockfile: Streams and Threads. +* ftw: Working with Directory Trees. +* ftw64: Working with Directory Trees. +* funlockfile: Streams and Threads. +* fwide: Streams and I18N. +* fwprintf: Formatted Output Functions. +* fwrite: Block Input/Output. +* fwrite_unlocked: Block Input/Output. +* fwscanf: Formatted Input Functions. +* gamma: Special Functions. +* gammaf: Special Functions. +* gammal: Special Functions. +* gcvt: System V Number Conversion. +* get_avphys_pages: Query Memory Parameters. +* get_current_dir_name: Working Directory. +* get_nprocs: Processor Resources. +* get_nprocs_conf: Processor Resources. +* get_phys_pages: Query Memory Parameters. +* getc: Character Input. +* getc_unlocked: Character Input. +* getchar: Character Input. +* getchar_unlocked: Character Input. +* getcontext: System V contexts. +* getcwd: Working Directory. +* getdate: General Time String Parsing. +* getdate_r: General Time String Parsing. +* getdelim: Line Input. +* getdomainnname: Host Identification. +* getegid: Reading Persona. +* getenv: Environment Access. +* geteuid: Reading Persona. +* getfsent: fstab. +* getfsfile: fstab. +* getfsspec: fstab. +* getgid: Reading Persona. +* getgrent: Scanning All Groups. +* getgrent_r: Scanning All Groups. +* getgrgid: Lookup Group. +* getgrgid_r: Lookup Group. +* getgrnam: Lookup Group. +* getgrnam_r: Lookup Group. +* getgroups: Reading Persona. +* gethostbyaddr: Host Names. +* gethostbyaddr_r: Host Names. +* gethostbyname: Host Names. +* gethostbyname2: Host Names. +* gethostbyname2_r: Host Names. +* gethostbyname_r: Host Names. +* gethostent: Host Names. +* gethostid: Host Identification. +* gethostname: Host Identification. +* getitimer: Setting an Alarm. +* getline: Line Input. +* getloadavg: Processor Resources. +* getlogin: Who Logged In. +* getmntent: mtab. +* getmntent_r: mtab. +* getnetbyaddr: Networks Database. +* getnetbyname: Networks Database. +* getnetent: Networks Database. +* getnetgrent: Lookup Netgroup. +* getnetgrent_r: Lookup Netgroup. +* getopt: Using Getopt. +* getopt_long: Getopt Long Options. +* getopt_long_only: Getopt Long Options. +* getpagesize: Query Memory Parameters. +* getpass: getpass. +* getpeername: Who is Connected. +* getpgid: Process Group Functions. +* getpgrp: Process Group Functions. +* getpid: Process Identification. +* getppid: Process Identification. +* getpriority: Traditional Scheduling Functions. +* getprotobyname: Protocols Database. +* getprotobynumber: Protocols Database. +* getprotoent: Protocols Database. +* getpt: Allocation. +* getpwent: Scanning All Users. +* getpwent_r: Scanning All Users. +* getpwnam: Lookup User. +* getpwnam_r: Lookup User. +* getpwuid: Lookup User. +* getpwuid_r: Lookup User. +* getrlimit: Limits on Resources. +* getrlimit64: Limits on Resources. +* getrusage: Resource Usage. +* gets: Line Input. +* getservbyname: Services Database. +* getservbyport: Services Database. +* getservent: Services Database. +* getsid: Process Group Functions. +* getsockname: Reading Address. +* getsockopt: Socket Option Functions. +* getsubopt: Suboptions. +* gettext: Translation with gettext. +* gettimeofday: High-Resolution Calendar. +* getuid: Reading Persona. +* getumask: Setting Permissions. +* getutent: Manipulating the Database. +* getutent_r: Manipulating the Database. +* getutid: Manipulating the Database. +* getutid_r: Manipulating the Database. +* getutline: Manipulating the Database. +* getutline_r: Manipulating the Database. +* getutmp: XPG Functions. +* getutmpx: XPG Functions. +* getutxent: XPG Functions. +* getutxid: XPG Functions. +* getutxline: XPG Functions. +* getw: Character Input. +* getwc: Character Input. +* getwc_unlocked: Character Input. +* getwchar: Character Input. +* getwchar_unlocked: Character Input. +* getwd: Working Directory. +* glob: Calling Glob. +* glob64: Calling Glob. +* globfree: More Flags for Globbing. +* globfree64: More Flags for Globbing. +* gmtime: Broken-down Time. +* gmtime_r: Broken-down Time. +* grantpt: Allocation. +* gsignal: Signaling Yourself. +* gtty: BSD Terminal Modes. +* hasmntopt: mtab. +* hcreate: Hash Search Function. +* hcreate_r: Hash Search Function. +* hdestroy: Hash Search Function. +* hdestroy_r: Hash Search Function. +* hsearch: Hash Search Function. +* hsearch_r: Hash Search Function. +* htonl: Byte Order. +* htons: Byte Order. +* hypot: Exponents and Logarithms. +* hypotf: Exponents and Logarithms. +* hypotl: Exponents and Logarithms. +* iconv: Generic Conversion Interface. +* iconv_close: Generic Conversion Interface. +* iconv_open: Generic Conversion Interface. +* if_freenameindex: Interface Naming. +* if_indextoname: Interface Naming. +* if_nameindex: Interface Naming. +* if_nametoindex: Interface Naming. +* IFTODT: Directory Entries. +* ilogb: Exponents and Logarithms. +* ilogbf: Exponents and Logarithms. +* ilogbl: Exponents and Logarithms. +* imaxabs: Absolute Value. +* imaxdiv: Integer Division. +* index: Search Functions. +* inet_addr: Host Address Functions. +* inet_aton: Host Address Functions. +* inet_lnaof: Host Address Functions. +* inet_makeaddr: Host Address Functions. +* inet_netof: Host Address Functions. +* inet_network: Host Address Functions. +* inet_ntoa: Host Address Functions. +* inet_ntop: Host Address Functions. +* inet_pton: Host Address Functions. +* infnan: Floating Point Classes. +* initgroups: Setting Groups. +* initstate: BSD Random. +* initstate_r: BSD Random. +* innetgr: Netgroup Membership. +* ioctl: IOCTLs. +* isalnum: Classification of Characters. +* isalpha: Classification of Characters. +* isascii: Classification of Characters. +* isatty: Is It a Terminal. +* isblank: Classification of Characters. +* iscntrl: Classification of Characters. +* isdigit: Classification of Characters. +* isfinite: Floating Point Classes. +* isgraph: Classification of Characters. +* isgreater: FP Comparison Functions. +* isgreaterequal: FP Comparison Functions. +* isinf: Floating Point Classes. +* isinff: Floating Point Classes. +* isinfl: Floating Point Classes. +* isless: FP Comparison Functions. +* islessequal: FP Comparison Functions. +* islessgreater: FP Comparison Functions. +* islower: Classification of Characters. +* isnan: Floating Point Classes. +* isnanf: Floating Point Classes. +* isnanl: Floating Point Classes. +* isnormal: Floating Point Classes. +* isprint: Classification of Characters. +* ispunct: Classification of Characters. +* isspace: Classification of Characters. +* isunordered: FP Comparison Functions. +* isupper: Classification of Characters. +* iswalnum: Classification of Wide Characters. +* iswalpha: Classification of Wide Characters. +* iswblank: Classification of Wide Characters. +* iswcntrl: Classification of Wide Characters. +* iswctype: Classification of Wide Characters. +* iswdigit: Classification of Wide Characters. +* iswgraph: Classification of Wide Characters. +* iswlower: Classification of Wide Characters. +* iswprint: Classification of Wide Characters. +* iswpunct: Classification of Wide Characters. +* iswspace: Classification of Wide Characters. +* iswupper: Classification of Wide Characters. +* iswxdigit: Classification of Wide Characters. +* isxdigit: Classification of Characters. +* j0: Special Functions. +* j0f: Special Functions. +* j0l: Special Functions. +* j1: Special Functions. +* j1f: Special Functions. +* j1l: Special Functions. +* jn: Special Functions. +* jnf: Special Functions. +* jnl: Special Functions. +* jrand48: SVID Random. +* jrand48_r: SVID Random. +* kill: Signaling Another Process. +* killpg: Signaling Another Process. +* l64a: Encode Binary Data. +* labs: Absolute Value. +* lcong48: SVID Random. +* lcong48_r: SVID Random. +* ldexp: Normalization Functions. +* ldexpf: Normalization Functions. +* ldexpl: Normalization Functions. +* ldiv: Integer Division. +* lfind: Array Search Function. +* lgamma: Special Functions. +* lgamma_r: Special Functions. +* lgammaf: Special Functions. +* lgammaf_r: Special Functions. +* lgammal: Special Functions. +* lgammal_r: Special Functions. +* link: Hard Links. +* lio_listio: Asynchronous Reads/Writes. +* lio_listio64: Asynchronous Reads/Writes. +* listen: Listening. +* llabs: Absolute Value. +* lldiv: Integer Division. +* llrint: Rounding Functions. +* llrintf: Rounding Functions. +* llrintl: Rounding Functions. +* llround: Rounding Functions. +* llroundf: Rounding Functions. +* llroundl: Rounding Functions. +* localeconv: The Lame Way to Locale Data. +* localtime: Broken-down Time. +* localtime_r: Broken-down Time. +* log: Exponents and Logarithms. +* log10: Exponents and Logarithms. +* log10f: Exponents and Logarithms. +* log10l: Exponents and Logarithms. +* log1p: Exponents and Logarithms. +* log1pf: Exponents and Logarithms. +* log1pl: Exponents and Logarithms. +* log2: Exponents and Logarithms. +* log2f: Exponents and Logarithms. +* log2l: Exponents and Logarithms. +* logb <1>: Normalization Functions. +* logb: Exponents and Logarithms. +* logbf <1>: Normalization Functions. +* logbf: Exponents and Logarithms. +* logbl <1>: Normalization Functions. +* logbl: Exponents and Logarithms. +* logf: Exponents and Logarithms. +* login: Logging In and Out. +* login_tty: Logging In and Out. +* logl: Exponents and Logarithms. +* logout: Logging In and Out. +* logwtmp: Logging In and Out. +* longjmp: Non-Local Details. +* lrand48: SVID Random. +* lrand48_r: SVID Random. +* lrint: Rounding Functions. +* lrintf: Rounding Functions. +* lrintl: Rounding Functions. +* lround: Rounding Functions. +* lroundf: Rounding Functions. +* lroundl: Rounding Functions. +* lsearch: Array Search Function. +* lseek: File Position Primitive. +* lseek64: File Position Primitive. +* lstat: Reading Attributes. +* lstat64: Reading Attributes. +* main: Program Arguments. +* makecontext: System V contexts. +* mallinfo: Statistics of Malloc. +* malloc: Basic Allocation. +* mallopt: Malloc Tunable Parameters. +* matherr: FP Exceptions. +* mblen: Non-reentrant Character Conversion. +* mbrlen: Converting a Character. +* mbrtowc: Converting a Character. +* mbsinit: Keeping the state. +* mbsnrtowcs: Converting Strings. +* mbsrtowcs: Converting Strings. +* mbstowcs: Non-reentrant String Conversion. +* mbtowc: Non-reentrant Character Conversion. +* mcheck: Heap Consistency Checking. +* memalign: Aligned Memory Blocks. +* memccpy: Copying and Concatenation. +* memchr: Search Functions. +* memcmp: String/Array Comparison. +* memcpy: Copying and Concatenation. +* memfrob: Trivial Encryption. +* memmem: Search Functions. +* memmove: Copying and Concatenation. +* mempcpy: Copying and Concatenation. +* memrchr: Search Functions. +* memset: Copying and Concatenation. +* mkdir: Creating Directories. +* mkdtemp: Temporary Files. +* mkfifo: FIFO Special Files. +* mknod: Making Special Files. +* mkstemp: Temporary Files. +* mktemp: Temporary Files. +* mktime: Broken-down Time. +* mlock: Page Lock Functions. +* mlockall: Page Lock Functions. +* mmap: Memory-mapped I/O. +* mmap64: Memory-mapped I/O. +* modf: Rounding Functions. +* modff: Rounding Functions. +* modfl: Rounding Functions. +* mount: Mount-Unmount-Remount. +* mprobe: Heap Consistency Checking. +* mrand48: SVID Random. +* mrand48_r: SVID Random. +* mremap: Memory-mapped I/O. +* msync: Memory-mapped I/O. +* mtrace: Tracing malloc. +* munlock: Page Lock Functions. +* munlockall: Page Lock Functions. +* munmap: Memory-mapped I/O. +* muntrace: Tracing malloc. +* nan: FP Bit Twiddling. +* nanf: FP Bit Twiddling. +* nanl: FP Bit Twiddling. +* nanosleep: Sleeping. +* nearbyint: Rounding Functions. +* nearbyintf: Rounding Functions. +* nearbyintl: Rounding Functions. +* nextafter: FP Bit Twiddling. +* nextafterf: FP Bit Twiddling. +* nextafterl: FP Bit Twiddling. +* nexttoward: FP Bit Twiddling. +* nexttowardf: FP Bit Twiddling. +* nexttowardl: FP Bit Twiddling. +* nftw: Working with Directory Trees. +* nftw64: Working with Directory Trees. +* ngettext: Advanced gettext functions. +* nice: Traditional Scheduling Functions. +* nl_langinfo: The Elegant and Fast Way. +* notfound: Actions in the NSS configuration. +* nrand48: SVID Random. +* nrand48_r: SVID Random. +* ntohl: Byte Order. +* ntohs: Byte Order. +* ntp_adjtime: High Accuracy Clock. +* ntp_gettime: High Accuracy Clock. +* obstack_1grow: Growing Objects. +* obstack_1grow_fast: Extra Fast Growing. +* obstack_alignment_mask: Obstacks Data Alignment. +* obstack_alloc: Allocation in an Obstack. +* obstack_base: Status of an Obstack. +* obstack_blank: Growing Objects. +* obstack_blank_fast: Extra Fast Growing. +* obstack_chunk_alloc: Preparing for Obstacks. +* obstack_chunk_free: Preparing for Obstacks. +* obstack_chunk_size: Obstack Chunks. +* obstack_copy: Allocation in an Obstack. +* obstack_copy0: Allocation in an Obstack. +* obstack_finish: Growing Objects. +* obstack_free: Freeing Obstack Objects. +* obstack_grow: Growing Objects. +* obstack_grow0: Growing Objects. +* obstack_init: Preparing for Obstacks. +* obstack_int_grow: Growing Objects. +* obstack_int_grow_fast: Extra Fast Growing. +* obstack_next_free: Status of an Obstack. +* obstack_object_size <1>: Status of an Obstack. +* obstack_object_size: Growing Objects. +* obstack_printf: Dynamic Output. +* obstack_ptr_grow: Growing Objects. +* obstack_ptr_grow_fast: Extra Fast Growing. +* obstack_room: Extra Fast Growing. +* obstack_vprintf: Variable Arguments Output. +* offsetof: Structure Measurement. +* on_exit: Cleanups on Exit. +* open: Opening and Closing Files. +* open64: Opening and Closing Files. +* open_memstream: String Streams. +* open_obstack_stream: Obstack Streams. +* opendir: Opening a Directory. +* openlog: openlog. +* openpty: Pseudo-Terminal Pairs. +* parse_printf_format: Parsing a Template String. +* pathconf: Pathconf. +* pause: Using Pause. +* pclose: Pipe to a Subprocess. +* perror: Error Messages. +* pipe: Creating a Pipe. +* popen: Pipe to a Subprocess. +* posix_memalign: Aligned Memory Blocks. +* pow: Exponents and Logarithms. +* pow10: Exponents and Logarithms. +* pow10f: Exponents and Logarithms. +* pow10l: Exponents and Logarithms. +* powf: Exponents and Logarithms. +* powl: Exponents and Logarithms. +* pread: I/O Primitives. +* pread64: I/O Primitives. +* printf: Formatted Output Functions. +* printf_size: Predefined Printf Handlers. +* printf_size_info: Predefined Printf Handlers. +* psignal: Signal Messages. +* pthread_atfork: Threads and Fork. +* pthread_attr_destroy: Thread Attributes. +* pthread_attr_getattr: Thread Attributes. +* pthread_attr_getdetachstate: Thread Attributes. +* pthread_attr_getguardsize: Thread Attributes. +* pthread_attr_getinheritsched: Thread Attributes. +* pthread_attr_getschedparam: Thread Attributes. +* pthread_attr_getschedpolicy: Thread Attributes. +* pthread_attr_getscope: Thread Attributes. +* pthread_attr_getstack: Thread Attributes. +* pthread_attr_getstackaddr: Thread Attributes. +* pthread_attr_getstacksize: Thread Attributes. +* pthread_attr_init: Thread Attributes. +* pthread_attr_setattr: Thread Attributes. +* pthread_attr_setdetachstate: Thread Attributes. +* pthread_attr_setguardsize: Thread Attributes. +* pthread_attr_setinheritsched: Thread Attributes. +* pthread_attr_setschedparam: Thread Attributes. +* pthread_attr_setschedpolicy: Thread Attributes. +* pthread_attr_setscope: Thread Attributes. +* pthread_attr_setstack: Thread Attributes. +* pthread_attr_setstackaddr: Thread Attributes. +* pthread_attr_setstacksize: Thread Attributes. +* pthread_cancel: Basic Thread Operations. +* pthread_cleanup_pop: Cleanup Handlers. +* pthread_cleanup_pop_restore_np: Cleanup Handlers. +* pthread_cleanup_push: Cleanup Handlers. +* pthread_cleanup_push_defer_np: Cleanup Handlers. +* pthread_cond_broadcast: Condition Variables. +* pthread_cond_destroy: Condition Variables. +* pthread_cond_init: Condition Variables. +* pthread_cond_signal: Condition Variables. +* pthread_cond_timedwait: Condition Variables. +* pthread_cond_wait: Condition Variables. +* pthread_condattr_destroy: Condition Variables. +* pthread_condattr_init: Condition Variables. +* pthread_create: Basic Thread Operations. +* pthread_detach: Miscellaneous Thread Functions. +* pthread_equal: Miscellaneous Thread Functions. +* pthread_exit: Basic Thread Operations. +* pthread_getconcurrency: Miscellaneous Thread Functions. +* pthread_getschedparam: Miscellaneous Thread Functions. +* pthread_getspecific: Thread-Specific Data. +* pthread_join: Basic Thread Operations. +* pthread_key_create: Thread-Specific Data. +* pthread_key_delete: Thread-Specific Data. +* pthread_kill: Threads and Signal Handling. +* pthread_kill_other_threads_np: Miscellaneous Thread Functions. +* pthread_mutex_destroy: Mutexes. +* pthread_mutex_init: Mutexes. +* pthread_mutex_lock: Mutexes. +* pthread_mutex_timedlock: Mutexes. +* pthread_mutex_trylock: Mutexes. +* pthread_mutex_unlock: Mutexes. +* pthread_mutexattr_destroy: Mutexes. +* pthread_mutexattr_gettype: Mutexes. +* pthread_mutexattr_init: Mutexes. +* pthread_mutexattr_settype: Mutexes. +* pthread_once: Miscellaneous Thread Functions. +* pthread_self: Miscellaneous Thread Functions. +* pthread_setcancelstate: Cancellation. +* pthread_setcanceltype: Cancellation. +* pthread_setconcurrency: Miscellaneous Thread Functions. +* pthread_setschedparam: Miscellaneous Thread Functions. +* pthread_setspecific: Thread-Specific Data. +* pthread_sigmask: Threads and Signal Handling. +* pthread_testcancel: Cancellation. +* ptsname: Allocation. +* ptsname_r: Allocation. +* putc: Simple Output. +* putc_unlocked: Simple Output. +* putchar: Simple Output. +* putchar_unlocked: Simple Output. +* putenv: Environment Access. +* putpwent: Writing a User Entry. +* puts: Simple Output. +* pututline: Manipulating the Database. +* pututxline: XPG Functions. +* putw: Simple Output. +* putwc: Simple Output. +* putwc_unlocked: Simple Output. +* putwchar: Simple Output. +* putwchar_unlocked: Simple Output. +* pwrite: I/O Primitives. +* pwrite64: I/O Primitives. +* qecvt: System V Number Conversion. +* qecvt_r: System V Number Conversion. +* qfcvt: System V Number Conversion. +* qfcvt_r: System V Number Conversion. +* qgcvt: System V Number Conversion. +* qsort: Array Sort Function. +* raise: Signaling Yourself. +* rand: ISO Random. +* rand_r: ISO Random. +* random: BSD Random. +* random_r: BSD Random. +* rawmemchr: Search Functions. +* read: I/O Primitives. +* readdir: Reading/Closing Directory. +* readdir64: Reading/Closing Directory. +* readdir64_r: Reading/Closing Directory. +* readdir_r: Reading/Closing Directory. +* readlink: Symbolic Links. +* readv: Scatter-Gather. +* realloc: Changing Block Size. +* realpath: Symbolic Links. +* recv: Receiving Data. +* recvfrom: Receiving Datagrams. +* regcomp: POSIX Regexp Compilation. +* regerror: Regexp Cleanup. +* regexec: Matching POSIX Regexps. +* regfree: Regexp Cleanup. +* register_printf_function: Registering New Conversions. +* remainder: Remainder Functions. +* remainderf: Remainder Functions. +* remainderl: Remainder Functions. +* remove: Deleting Files. +* rename: Renaming Files. +* rewind: File Positioning. +* rewinddir: Random Access Directory. +* rindex: Search Functions. +* rint: Rounding Functions. +* rintf: Rounding Functions. +* rintl: Rounding Functions. +* rmdir: Deleting Files. +* round: Rounding Functions. +* roundf: Rounding Functions. +* roundl: Rounding Functions. +* S_ISBLK: Testing File Type. +* S_ISCHR: Testing File Type. +* S_ISDIR: Testing File Type. +* S_ISFIFO: Testing File Type. +* S_ISLNK: Testing File Type. +* S_ISREG: Testing File Type. +* S_ISSOCK: Testing File Type. +* S_TYPEISMQ: Testing File Type. +* S_TYPEISSEM: Testing File Type. +* S_TYPEISSHM: Testing File Type. +* sbrk: Resizing the Data Segment. +* scalb: Normalization Functions. +* scalbf: Normalization Functions. +* scalbl: Normalization Functions. +* scalbln: Normalization Functions. +* scalblnf: Normalization Functions. +* scalblnl: Normalization Functions. +* scalbn: Normalization Functions. +* scalbnf: Normalization Functions. +* scalbnl: Normalization Functions. +* scandir: Scanning Directory Content. +* scandir64: Scanning Directory Content. +* scanf: Formatted Input Functions. +* sched_get_priority_max: Basic Scheduling Functions. +* sched_get_priority_min: Basic Scheduling Functions. +* sched_getparam: Basic Scheduling Functions. +* sched_getscheduler: Basic Scheduling Functions. +* sched_rr_get_interval: Basic Scheduling Functions. +* sched_setparam: Basic Scheduling Functions. +* sched_setscheduler: Basic Scheduling Functions. +* sched_yield: Basic Scheduling Functions. +* seed48: SVID Random. +* seed48_r: SVID Random. +* seekdir: Random Access Directory. +* select: Waiting for I/O. +* sem_destroy: POSIX Semaphores. +* sem_getvalue: POSIX Semaphores. +* sem_init: POSIX Semaphores. +* sem_post: POSIX Semaphores. +* sem_trywait: POSIX Semaphores. +* sem_wait: POSIX Semaphores. +* send: Sending Data. +* sendto: Sending Datagrams. +* setbuf: Controlling Buffering. +* setbuffer: Controlling Buffering. +* setcontext: System V contexts. +* setdomainname: Host Identification. +* setegid: Setting Groups. +* setenv: Environment Access. +* seteuid: Setting User ID. +* setfsent: fstab. +* setgid: Setting Groups. +* setgrent: Scanning All Groups. +* setgroups: Setting Groups. +* sethostent: Host Names. +* sethostid: Host Identification. +* sethostname: Host Identification. +* setitimer: Setting an Alarm. +* setjmp: Non-Local Details. +* setkey: DES Encryption. +* setkey_r: DES Encryption. +* setlinebuf: Controlling Buffering. +* setlocale: Setting the Locale. +* setlogmask: setlogmask. +* setmntent: mtab. +* setnetent: Networks Database. +* setnetgrent: Lookup Netgroup. +* setpgid: Process Group Functions. +* setpgrp: Process Group Functions. +* setpriority: Traditional Scheduling Functions. +* setprotoent: Protocols Database. +* setpwent: Scanning All Users. +* setregid: Setting Groups. +* setreuid: Setting User ID. +* setrlimit: Limits on Resources. +* setrlimit64: Limits on Resources. +* setservent: Services Database. +* setsid: Process Group Functions. +* setsockopt: Socket Option Functions. +* setstate: BSD Random. +* setstate_r: BSD Random. +* settimeofday: High-Resolution Calendar. +* setuid: Setting User ID. +* setutent: Manipulating the Database. +* setutxent: XPG Functions. +* setvbuf: Controlling Buffering. +* shutdown: Closing a Socket. +* sigaction: Advanced Signal Handling. +* sigaddset: Signal Sets. +* sigaltstack: Signal Stack. +* sigblock: Blocking in BSD. +* sigdelset: Signal Sets. +* sigemptyset: Signal Sets. +* sigfillset: Signal Sets. +* siginterrupt: BSD Handler. +* sigismember: Signal Sets. +* siglongjmp: Non-Local Exits and Signals. +* sigmask: Blocking in BSD. +* signal: Basic Signal Handling. +* signbit: FP Bit Twiddling. +* significand: Normalization Functions. +* significandf: Normalization Functions. +* significandl: Normalization Functions. +* sigpause: Blocking in BSD. +* sigpending: Checking for Pending Signals. +* sigprocmask: Process Signal Mask. +* sigsetjmp: Non-Local Exits and Signals. +* sigsetmask: Blocking in BSD. +* sigstack: Signal Stack. +* sigsuspend: Sigsuspend. +* sigvec: BSD Handler. +* sigwait: Threads and Signal Handling. +* sin: Trig Functions. +* sincos: Trig Functions. +* sincosf: Trig Functions. +* sincosl: Trig Functions. +* sinf: Trig Functions. +* sinh: Hyperbolic Functions. +* sinhf: Hyperbolic Functions. +* sinhl: Hyperbolic Functions. +* sinl: Trig Functions. +* sleep: Sleeping. +* snprintf: Formatted Output Functions. +* socket: Creating a Socket. +* socketpair: Socket Pairs. +* sprintf: Formatted Output Functions. +* sqrt: Exponents and Logarithms. +* sqrtf: Exponents and Logarithms. +* sqrtl: Exponents and Logarithms. +* srand: ISO Random. +* srand48: SVID Random. +* srand48_r: SVID Random. +* srandom: BSD Random. +* srandom_r: BSD Random. +* sscanf: Formatted Input Functions. +* ssignal: Basic Signal Handling. +* stat: Reading Attributes. +* stat64: Reading Attributes. +* stime: Simple Calendar Time. +* stpcpy: Copying and Concatenation. +* stpncpy: Copying and Concatenation. +* strcasecmp: String/Array Comparison. +* strcasestr: Search Functions. +* strcat: Copying and Concatenation. +* strchr: Search Functions. +* strchrnul: Search Functions. +* strcmp: String/Array Comparison. +* strcoll: Collation Functions. +* strcpy: Copying and Concatenation. +* strcspn: Search Functions. +* strdup: Copying and Concatenation. +* strdupa: Copying and Concatenation. +* strerror: Error Messages. +* strerror_r: Error Messages. +* strfmon: Formatting Numbers. +* strfry: strfry. +* strftime: Formatting Calendar Time. +* strlen: String Length. +* strncasecmp: String/Array Comparison. +* strncat: Copying and Concatenation. +* strncmp: String/Array Comparison. +* strncpy: Copying and Concatenation. +* strndup: Copying and Concatenation. +* strndupa: Copying and Concatenation. +* strnlen: String Length. +* strpbrk: Search Functions. +* strptime: Low-Level Time String Parsing. +* strrchr: Search Functions. +* strsep: Finding Tokens in a String. +* strsignal: Signal Messages. +* strspn: Search Functions. +* strstr: Search Functions. +* strtod: Parsing of Floats. +* strtof: Parsing of Floats. +* strtoimax: Parsing of Integers. +* strtok: Finding Tokens in a String. +* strtok_r: Finding Tokens in a String. +* strtol: Parsing of Integers. +* strtold: Parsing of Floats. +* strtoll: Parsing of Integers. +* strtoq: Parsing of Integers. +* strtoul: Parsing of Integers. +* strtoull: Parsing of Integers. +* strtoumax: Parsing of Integers. +* strtouq: Parsing of Integers. +* strverscmp: String/Array Comparison. +* strxfrm: Collation Functions. +* stty: BSD Terminal Modes. +* success: Actions in the NSS configuration. +* SUN_LEN: Local Namespace Details. +* swapcontext: System V contexts. +* swprintf: Formatted Output Functions. +* swscanf: Formatted Input Functions. +* symlink: Symbolic Links. +* sync: Synchronizing I/O. +* syscall: System Calls. +* sysconf: Sysconf Definition. +* sysctl: System Parameters. +* syslog: syslog; vsyslog. +* system: Running a Command. +* sysv_signal: Basic Signal Handling. +* tan: Trig Functions. +* tanf: Trig Functions. +* tanh: Hyperbolic Functions. +* tanhf: Hyperbolic Functions. +* tanhl: Hyperbolic Functions. +* tanl: Trig Functions. +* tcdrain: Line Control. +* tcflow: Line Control. +* tcflush: Line Control. +* tcgetattr: Mode Functions. +* tcgetpgrp: Terminal Access Functions. +* tcgetsid: Terminal Access Functions. +* tcsendbreak: Line Control. +* tcsetattr: Mode Functions. +* tcsetpgrp: Terminal Access Functions. +* tdelete: Tree Search Function. +* tdestroy: Tree Search Function. +* telldir: Random Access Directory. +* TEMP_FAILURE_RETRY: Interrupted Primitives. +* tempnam: Temporary Files. +* textdomain: Locating gettext catalog. +* tfind: Tree Search Function. +* tgamma: Special Functions. +* tgammaf: Special Functions. +* tgammal: Special Functions. +* time: Simple Calendar Time. +* timegm: Broken-down Time. +* timelocal: Broken-down Time. +* times: Processor Time. +* tmpfile: Temporary Files. +* tmpfile64: Temporary Files. +* tmpnam: Temporary Files. +* tmpnam_r: Temporary Files. +* toascii: Case Conversion. +* tolower: Case Conversion. +* toupper: Case Conversion. +* towctrans: Wide Character Case Conversion. +* towlower: Wide Character Case Conversion. +* towupper: Wide Character Case Conversion. +* trunc: Rounding Functions. +* truncate: File Size. +* truncate64: File Size. +* truncf: Rounding Functions. +* truncl: Rounding Functions. +* tryagain: Actions in the NSS configuration. +* tsearch: Tree Search Function. +* ttyname: Is It a Terminal. +* ttyname_r: Is It a Terminal. +* twalk: Tree Search Function. +* tzset: Time Zone Functions. +* ulimit: Limits on Resources. +* umask: Setting Permissions. +* umount: Mount-Unmount-Remount. +* umount2: Mount-Unmount-Remount. +* uname: Platform Type. +* unavail: Actions in the NSS configuration. +* ungetc: How Unread. +* ungetwc: How Unread. +* unlink: Deleting Files. +* unlockpt: Allocation. +* unsetenv: Environment Access. +* updwtmp: Manipulating the Database. +* utime: File Times. +* utimes: File Times. +* utmpname: Manipulating the Database. +* utmpxname: XPG Functions. +* va_alist: Old Varargs. +* va_arg: Argument Macros. +* va_dcl: Old Varargs. +* va_end: Argument Macros. +* va_start <1>: Old Varargs. +* va_start: Argument Macros. +* valloc: Aligned Memory Blocks. +* vasprintf: Variable Arguments Output. +* versionsort: Scanning Directory Content. +* versionsort64: Scanning Directory Content. +* vfork: Creating a Process. +* vfprintf: Variable Arguments Output. +* vfscanf: Variable Arguments Input. +* vfwprintf: Variable Arguments Output. +* vfwscanf: Variable Arguments Input. +* vlimit: Limits on Resources. +* vprintf: Variable Arguments Output. +* vscanf: Variable Arguments Input. +* vsnprintf: Variable Arguments Output. +* vsprintf: Variable Arguments Output. +* vsscanf: Variable Arguments Input. +* vswprintf: Variable Arguments Output. +* vswscanf: Variable Arguments Input. +* vsyslog: syslog; vsyslog. +* vtimes: Resource Usage. +* vwprintf: Variable Arguments Output. +* vwscanf: Variable Arguments Input. +* wait: Process Completion. +* wait3: BSD Wait Functions. +* wait4: Process Completion. +* waitpid: Process Completion. +* WCOREDUMP: Process Completion Status. +* wcpcpy: Copying and Concatenation. +* wcpncpy: Copying and Concatenation. +* wcrtomb: Converting a Character. +* wcscasecmp: String/Array Comparison. +* wcscat: Copying and Concatenation. +* wcschr: Search Functions. +* wcschrnul: Search Functions. +* wcscmp: String/Array Comparison. +* wcscoll: Collation Functions. +* wcscpy: Copying and Concatenation. +* wcscspn: Search Functions. +* wcsdup: Copying and Concatenation. +* wcsftime: Formatting Calendar Time. +* wcslen: String Length. +* wcsncasecmp: String/Array Comparison. +* wcsncat: Copying and Concatenation. +* wcsncmp: String/Array Comparison. +* wcsncpy: Copying and Concatenation. +* wcsnlen: String Length. +* wcsnrtombs: Converting Strings. +* wcspbrk: Search Functions. +* wcsrchr: Search Functions. +* wcsrtombs: Converting Strings. +* wcsspn: Search Functions. +* wcsstr: Search Functions. +* wcstod: Parsing of Floats. +* wcstof: Parsing of Floats. +* wcstoimax: Parsing of Integers. +* wcstok: Finding Tokens in a String. +* wcstol: Parsing of Integers. +* wcstold: Parsing of Floats. +* wcstoll: Parsing of Integers. +* wcstombs: Non-reentrant String Conversion. +* wcstoq: Parsing of Integers. +* wcstoul: Parsing of Integers. +* wcstoull: Parsing of Integers. +* wcstoumax: Parsing of Integers. +* wcstouq: Parsing of Integers. +* wcswcs: Search Functions. +* wcsxfrm: Collation Functions. +* wctob: Converting a Character. +* wctomb: Non-reentrant Character Conversion. +* wctrans: Wide Character Case Conversion. +* wctype: Classification of Wide Characters. +* WEXITSTATUS: Process Completion Status. +* WIFEXITED: Process Completion Status. +* WIFSIGNALED: Process Completion Status. +* WIFSTOPPED: Process Completion Status. +* wmemchr: Search Functions. +* wmemcmp: String/Array Comparison. +* wmemcpy: Copying and Concatenation. +* wmemmove: Copying and Concatenation. +* wmempcpy: Copying and Concatenation. +* wmemset: Copying and Concatenation. +* wordexp: Calling Wordexp. +* wordfree: Calling Wordexp. +* wprintf: Formatted Output Functions. +* write: I/O Primitives. +* writev: Scatter-Gather. +* wscanf: Formatted Input Functions. +* WSTOPSIG: Process Completion Status. +* WTERMSIG: Process Completion Status. +* y0: Special Functions. +* y0f: Special Functions. +* y0l: Special Functions. +* y1: Special Functions. +* y1f: Special Functions. +* y1l: Special Functions. +* yn: Special Functions. +* ynf: Special Functions. +* ynl: Special Functions. diff -durpNa glibc-2.2.2/manual/libc.info-57 glibc-2.2.3/manual/libc.info-57 --- glibc-2.2.2/manual/libc.info-57 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-57 Wed Apr 25 14:55:23 2001 @@ -31,268 +31,1075 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  -File: libc.info, Node: File Index, Prev: Variable Index, Up: Top +File: libc.info, Node: Variable Index, Next: File Index, Prev: Function Index, Up: Top -Program and File Index -********************** +Variable and Constant Macro Index +********************************* * Menu: -* -lbsd-compat <1>: Process Group Functions. -* -lbsd-compat: Feature Test Macros. -* /etc/group: Group Database. -* /etc/hosts: Host Names. -* /etc/localtime: TZ Variable. -* /etc/networks: Networks Database. -* /etc/passwd: User Database. -* /etc/protocols: Protocols Database. -* /etc/services: Services Database. -* /share/lib/zoneinfo: TZ Variable. -* argp.h: Argp. -* argz.h: Argz Functions. -* arpa/inet.h: Host Address Functions. -* assert.h: Consistency Checking. -* bsd-compat <1>: Process Group Functions. -* bsd-compat: Feature Test Macros. -* cd: Working Directory. -* chgrp: File Owner. -* chown: File Owner. -* complex.h <1>: Operations on Complex. -* complex.h <2>: Complex Numbers. -* complex.h: Mathematics. -* ctype.h <1>: Case Conversion. -* ctype.h <2>: Classification of Characters. -* ctype.h: Character Handling. -* dirent.h <1>: Random Access Directory. -* dirent.h <2>: Reading/Closing Directory. -* dirent.h <3>: Opening a Directory. -* dirent.h <4>: Directory Entries. -* dirent.h: Reserved Names. -* envz.h: Envz Functions. -* errno.h <1>: Error Codes. -* errno.h <2>: Checking for Errors. -* errno.h: Error Reporting. -* execinfo.h: Backtraces. -* fcntl.h <1>: Interrupt Input. -* fcntl.h <2>: File Locks. -* fcntl.h <3>: File Status Flags. -* fcntl.h <4>: Descriptor Flags. -* fcntl.h <5>: Duplicating Descriptors. -* fcntl.h <6>: Control Operations. -* fcntl.h <7>: Opening and Closing Files. -* fcntl.h: Reserved Names. -* float.h: Floating Point Parameters. -* fnmatch.h: Wildcard Matching. -* gcc: ISO C. -* gconv.h: glibc iconv Implementation. -* grp.h <1>: Group Data Structure. -* grp.h <2>: Setting Groups. -* grp.h: Reserved Names. -* hostid: Host Identification. -* hostname: Host Identification. -* iconv.h: Generic Conversion Interface. -* kill: Termination Signals. -* langinfo.h: The Elegant and Fast Way. -* limits.h <1>: Width of Type. -* limits.h <2>: Limits for Files. -* limits.h <3>: General Limits. -* limits.h <4>: Selecting the Conversion. -* limits.h: Reserved Names. -* locale: Setting the Locale. -* locale.h <1>: The Lame Way to Locale Data. -* locale.h: Setting the Locale. -* localtime: TZ Variable. -* ls: File Attributes. -* malloc.h <1>: Statistics of Malloc. -* malloc.h <2>: Hooks for Malloc. -* malloc.h: Malloc Tunable Parameters. -* math.h <1>: Rounding Functions. -* math.h <2>: Normalization Functions. -* math.h <3>: Absolute Value. -* math.h <4>: Floating Point Classes. -* math.h: Mathematics. -* mcheck.h: Heap Consistency Checking. -* mkdir: Creating Directories. -* netdb.h <1>: Networks Database. -* netdb.h <2>: Protocols Database. -* netdb.h <3>: Services Database. -* netdb.h: Host Names. -* netinet/in.h <1>: Byte Order. -* netinet/in.h <2>: Ports. -* netinet/in.h <3>: Host Address Data Type. -* netinet/in.h: Internet Address Formats. -* obstack.h: Creating Obstacks. -* printf.h <1>: Conversion Specifier Options. -* printf.h: Registering New Conversions. -* pwd.h <1>: User Data Structure. -* pwd.h: Reserved Names. -* setjmp.h <1>: Non-Local Exits and Signals. -* setjmp.h: Non-Local Details. -* sh: Running a Command. -* signal.h <1>: BSD Signal Handling. -* signal.h <2>: Checking for Pending Signals. -* signal.h <3>: Process Signal Mask. -* signal.h <4>: Signal Sets. -* signal.h <5>: Signaling Another Process. -* signal.h <6>: Signaling Yourself. -* signal.h <7>: Flags for Sigaction. -* signal.h <8>: Advanced Signal Handling. -* signal.h <9>: Basic Signal Handling. -* signal.h <10>: Standard Signals. -* signal.h: Reserved Names. -* stdarg.h <1>: Argument Macros. -* stdarg.h: Receiving Arguments. -* stddef.h: Important Data Types. -* stdint.h: Integers. -* stdio.h <1>: Who Logged In. -* stdio.h <2>: Identifying the Terminal. -* stdio.h <3>: Signal Messages. -* stdio.h <4>: Temporary Files. -* stdio.h <5>: Deleting Files. -* stdio.h <6>: Descriptors and Streams. -* stdio.h <7>: Streams and Cookies. -* stdio.h <8>: String Streams. -* stdio.h <9>: Controlling Buffering. -* stdio.h <10>: Flushing Buffers. -* stdio.h <11>: Portable Positioning. -* stdio.h <12>: File Positioning. -* stdio.h <13>: Formatted Input Functions. -* stdio.h <14>: Variable Arguments Output. -* stdio.h <15>: Formatted Output Functions. -* stdio.h <16>: Block Input/Output. -* stdio.h <17>: Character Input. -* stdio.h <18>: Simple Output. -* stdio.h <19>: Opening Streams. -* stdio.h <20>: Standard Streams. -* stdio.h: Streams. -* stdlib.h <1>: Running a Command. -* stdlib.h <2>: Aborting a Program. -* stdlib.h <3>: Exit Status. -* stdlib.h <4>: Environment Access. -* stdlib.h <5>: Parsing of Floats. -* stdlib.h <6>: Parsing of Integers. -* stdlib.h <7>: Absolute Value. -* stdlib.h <8>: Integer Division. -* stdlib.h <9>: BSD Random. -* stdlib.h <10>: ISO Random. -* stdlib.h <11>: Allocation. -* stdlib.h <12>: Array Sort Function. -* stdlib.h <13>: Array Search Function. -* stdlib.h <14>: Non-reentrant Character Conversion. -* stdlib.h <15>: Selecting the Conversion. -* stdlib.h <16>: Variable Size Automatic. -* stdlib.h <17>: Aligned Memory Blocks. -* stdlib.h <18>: Allocating Cleared Space. -* stdlib.h <19>: Changing Block Size. -* stdlib.h <20>: Freeing after Malloc. -* stdlib.h: Basic Allocation. -* string.h <1>: Signal Messages. -* string.h <2>: Trivial Encryption. -* string.h <3>: Finding Tokens in a String. -* string.h <4>: Search Functions. -* string.h <5>: Collation Functions. -* string.h <6>: String/Array Comparison. -* string.h <7>: Copying and Concatenation. -* string.h: String Length. -* sys/param.h: Host Identification. -* sys/resource.h <1>: Traditional Scheduling Functions. -* sys/resource.h <2>: Limits on Resources. -* sys/resource.h: Resource Usage. -* sys/socket.h <1>: Socket-Level Options. -* sys/socket.h <2>: Socket Option Functions. -* sys/socket.h <3>: Sending Datagrams. -* sys/socket.h <4>: Socket Data Options. -* sys/socket.h <5>: Receiving Data. -* sys/socket.h <6>: Sending Data. -* sys/socket.h <7>: Socket Pairs. -* sys/socket.h <8>: Closing a Socket. -* sys/socket.h <9>: Creating a Socket. -* sys/socket.h <10>: Internet Namespace. -* sys/socket.h <11>: Local Namespace Details. -* sys/socket.h <12>: Reading Address. -* sys/socket.h <13>: Setting Address. -* sys/socket.h <14>: Address Formats. -* sys/socket.h: Communication Styles. -* sys/stat.h <1>: FIFO Special Files. -* sys/stat.h <2>: Making Special Files. -* sys/stat.h <3>: Setting Permissions. -* sys/stat.h <4>: Permission Bits. -* sys/stat.h <5>: Testing File Type. -* sys/stat.h <6>: Attribute Meanings. -* sys/stat.h <7>: Creating Directories. -* sys/stat.h: Reserved Names. -* sys/time.h <1>: Setting an Alarm. -* sys/time.h <2>: High-Resolution Calendar. -* sys/time.h: File Times. -* sys/times.h <1>: Processor Time. -* sys/times.h: Reserved Names. -* sys/timex.h: High Accuracy Clock. -* sys/types.h <1>: Setting Groups. -* sys/types.h <2>: Setting User ID. -* sys/types.h <3>: Reading Persona. -* sys/types.h <4>: Terminal Access Functions. -* sys/types.h <5>: Process Group Functions. -* sys/types.h <6>: Process Identification. -* sys/types.h: Waiting for I/O. -* sys/un.h: Local Namespace Details. -* sys/utsname.h: Platform Type. -* sys/vlimit.h: Limits on Resources. -* sys/vtimes.h: Resource Usage. -* sys/wait.h <1>: BSD Wait Functions. -* sys/wait.h <2>: Process Completion Status. -* sys/wait.h: Process Completion. -* termios.h <1>: Terminal Modes. -* termios.h: Reserved Names. -* time.h <1>: TZ Variable. -* time.h <2>: Formatting Calendar Time. -* time.h <3>: Simple Calendar Time. -* time.h <4>: CPU Time. -* time.h: File Times. -* ulimit.h: Limits on Resources. -* umask: Setting Permissions. -* unistd.h <1>: Options for Files. -* unistd.h <2>: System Options. -* unistd.h <3>: Host Identification. -* unistd.h <4>: Who Logged In. -* unistd.h <5>: Setting Groups. -* unistd.h <6>: Setting User ID. -* unistd.h <7>: Reading Persona. -* unistd.h <8>: Terminal Access Functions. -* unistd.h <9>: Process Group Functions. -* unistd.h <10>: Executing a File. -* unistd.h <11>: Creating a Process. -* unistd.h <12>: Process Identification. -* unistd.h <13>: Termination Internals. -* unistd.h <14>: Using Getopt. -* unistd.h <15>: Setting an Alarm. -* unistd.h <16>: Is It a Terminal. -* unistd.h <17>: Creating a Pipe. -* unistd.h <18>: Testing File Access. -* unistd.h <19>: File Owner. -* unistd.h <20>: Deleting Files. -* unistd.h <21>: Symbolic Links. -* unistd.h <22>: Hard Links. -* unistd.h <23>: Working Directory. -* unistd.h <24>: Duplicating Descriptors. -* unistd.h <25>: Descriptors and Streams. -* unistd.h <26>: I/O Primitives. -* unistd.h: Opening and Closing Files. -* utime.h: File Times. -* utmp.h <1>: Logging In and Out. -* utmp.h: Manipulating the Database. -* utmpx.h: XPG Functions. -* varargs.h: Old Varargs. -* wchar.h <1>: Parsing of Integers. -* wchar.h <2>: Character Input. -* wchar.h <3>: Simple Output. -* wchar.h <4>: Converting Strings. -* wchar.h <5>: Converting a Character. -* wchar.h <6>: Keeping the state. -* wchar.h <7>: Extended Char Intro. -* wchar.h <8>: Collation Functions. -* wchar.h: Copying and Concatenation. -* wctype.h <1>: Wide Character Case Conversion. -* wctype.h: Classification of Wide Characters. -* zoneinfo: TZ Variable. - +* (: glibc iconv Implementation. +* __free_hook: Hooks for Malloc. +* __malloc_hook: Hooks for Malloc. +* __malloc_initialize_hook: Hooks for Malloc. +* __memalign_hook: Hooks for Malloc. +* __realloc_hook: Hooks for Malloc. +* _BSD_SOURCE: Feature Test Macros. +* _Complex_I: Complex Numbers. +* _FILE_OFFSET_BITS: Feature Test Macros. +* _GNU_SOURCE: Feature Test Macros. +* _IOFBF: Controlling Buffering. +* _IOLBF: Controlling Buffering. +* _IONBF: Controlling Buffering. +* _ISOC99_SOURCE: Feature Test Macros. +* _LARGEFILE64_SOURCE: Feature Test Macros. +* _LARGEFILE_SOURCE: Feature Test Macros. +* _PATH_FSTAB: Mount Information. +* _PATH_MNTTAB: Mount Information. +* _PATH_MOUNTED: Mount Information. +* _PATH_UTMP: Manipulating the Database. +* _PATH_WTMP: Manipulating the Database. +* _POSIX2_C_DEV: System Options. +* _POSIX2_C_VERSION: Version Supported. +* _POSIX2_FORT_DEV: System Options. +* _POSIX2_FORT_RUN: System Options. +* _POSIX2_LOCALEDEF: System Options. +* _POSIX2_SW_DEV: System Options. +* _POSIX_C_SOURCE: Feature Test Macros. +* _POSIX_CHOWN_RESTRICTED: Options for Files. +* _POSIX_JOB_CONTROL: System Options. +* _POSIX_NO_TRUNC: Options for Files. +* _POSIX_SAVED_IDS: System Options. +* _POSIX_SOURCE: Feature Test Macros. +* _POSIX_VDISABLE <1>: Options for Files. +* _POSIX_VDISABLE: Special Characters. +* _POSIX_VERSION: Version Supported. +* _REENTRANT: Feature Test Macros. +* _SC_2_C_DEV: Constants for Sysconf. +* _SC_2_FORT_DEV: Constants for Sysconf. +* _SC_2_FORT_RUN: Constants for Sysconf. +* _SC_2_LOCALEDEF: Constants for Sysconf. +* _SC_2_SW_DEV: Constants for Sysconf. +* _SC_2_VERSION: Constants for Sysconf. +* _SC_AIO_LISTIO_MAX: Constants for Sysconf. +* _SC_AIO_MAX: Constants for Sysconf. +* _SC_AIO_PRIO_DELTA_MAX: Constants for Sysconf. +* _SC_ARG_MAX: Constants for Sysconf. +* _SC_ASYNCHRONOUS_IO: Constants for Sysconf. +* _SC_ATEXIT_MAX: Constants for Sysconf. +* _SC_AVPHYS_PAGES <1>: Constants for Sysconf. +* _SC_AVPHYS_PAGES: Query Memory Parameters. +* _SC_BC_BASE_MAX: Constants for Sysconf. +* _SC_BC_DIM_MAX: Constants for Sysconf. +* _SC_BC_SCALE_MAX: Constants for Sysconf. +* _SC_BC_STRING_MAX: Constants for Sysconf. +* _SC_CHAR_BIT: Constants for Sysconf. +* _SC_CHAR_MAX: Constants for Sysconf. +* _SC_CHAR_MIN: Constants for Sysconf. +* _SC_CHARCLASS_NAME_MAX: Constants for Sysconf. +* _SC_CHILD_MAX: Constants for Sysconf. +* _SC_CLK_TCK: Constants for Sysconf. +* _SC_COLL_WEIGHTS_MAX: Constants for Sysconf. +* _SC_DELAYTIMER_MAX: Constants for Sysconf. +* _SC_EQUIV_CLASS_MAX: Constants for Sysconf. +* _SC_EXPR_NEST_MAX: Constants for Sysconf. +* _SC_FSYNC: Constants for Sysconf. +* _SC_GETGR_R_SIZE_MAX: Constants for Sysconf. +* _SC_GETPW_R_SIZE_MAX: Constants for Sysconf. +* _SC_INT_MAX: Constants for Sysconf. +* _SC_INT_MIN: Constants for Sysconf. +* _SC_JOB_CONTROL: Constants for Sysconf. +* _SC_LINE_MAX: Constants for Sysconf. +* _SC_LOGIN_NAME_MAX: Constants for Sysconf. +* _SC_LONG_BIT: Constants for Sysconf. +* _SC_MAPPED_FILES: Constants for Sysconf. +* _SC_MB_LEN_MAX: Constants for Sysconf. +* _SC_MEMLOCK: Constants for Sysconf. +* _SC_MEMLOCK_RANGE: Constants for Sysconf. +* _SC_MEMORY_PROTECTION: Constants for Sysconf. +* _SC_MESSAGE_PASSING: Constants for Sysconf. +* _SC_MQ_OPEN_MAX: Constants for Sysconf. +* _SC_MQ_PRIO_MAX: Constants for Sysconf. +* _SC_NGROUPS_MAX: Constants for Sysconf. +* _SC_NL_ARGMAX: Constants for Sysconf. +* _SC_NL_LANGMAX: Constants for Sysconf. +* _SC_NL_MSGMAX: Constants for Sysconf. +* _SC_NL_NMAX: Constants for Sysconf. +* _SC_NL_SETMAX: Constants for Sysconf. +* _SC_NL_TEXTMAX: Constants for Sysconf. +* _SC_NPROCESSORS_CONF <1>: Constants for Sysconf. +* _SC_NPROCESSORS_CONF: Processor Resources. +* _SC_NPROCESSORS_ONLN <1>: Constants for Sysconf. +* _SC_NPROCESSORS_ONLN: Processor Resources. +* _SC_NZERO: Constants for Sysconf. +* _SC_OPEN_MAX: Constants for Sysconf. +* _SC_PAGESIZE <1>: Constants for Sysconf. +* _SC_PAGESIZE <2>: Query Memory Parameters. +* _SC_PAGESIZE: Memory-mapped I/O. +* _SC_PHYS_PAGES <1>: Constants for Sysconf. +* _SC_PHYS_PAGES: Query Memory Parameters. +* _SC_PII: Constants for Sysconf. +* _SC_PII_INTERNET: Constants for Sysconf. +* _SC_PII_INTERNET_DGRAM: Constants for Sysconf. +* _SC_PII_INTERNET_STREAM: Constants for Sysconf. +* _SC_PII_OSI: Constants for Sysconf. +* _SC_PII_OSI_CLTS: Constants for Sysconf. +* _SC_PII_OSI_COTS: Constants for Sysconf. +* _SC_PII_OSI_M: Constants for Sysconf. +* _SC_PII_SOCKET: Constants for Sysconf. +* _SC_PII_XTI: Constants for Sysconf. +* _SC_PRIORITIZED_IO: Constants for Sysconf. +* _SC_PRIORITY_SCHEDULING: Constants for Sysconf. +* _SC_REALTIME_SIGNALS: Constants for Sysconf. +* _SC_RTSIG_MAX: Constants for Sysconf. +* _SC_SAVED_IDS: Constants for Sysconf. +* _SC_SCHAR_MAX: Constants for Sysconf. +* _SC_SCHAR_MIN: Constants for Sysconf. +* _SC_SELECT: Constants for Sysconf. +* _SC_SEM_NSEMS_MAX: Constants for Sysconf. +* _SC_SEM_VALUE_MAX: Constants for Sysconf. +* _SC_SEMAPHORES: Constants for Sysconf. +* _SC_SHARED_MEMORY_OBJECTS: Constants for Sysconf. +* _SC_SHRT_MAX: Constants for Sysconf. +* _SC_SHRT_MIN: Constants for Sysconf. +* _SC_SIGQUEUE_MAX: Constants for Sysconf. +* _SC_STREAM_MAX: Constants for Sysconf. +* _SC_SYNCHRONIZED_IO: Constants for Sysconf. +* _SC_T_IOV_MAX: Constants for Sysconf. +* _SC_THREAD_ATTR_STACKADDR: Constants for Sysconf. +* _SC_THREAD_ATTR_STACKSIZE: Constants for Sysconf. +* _SC_THREAD_DESTRUCTOR_ITERATIONS: Constants for Sysconf. +* _SC_THREAD_KEYS_MAX: Constants for Sysconf. +* _SC_THREAD_PRIO_INHERIT: Constants for Sysconf. +* _SC_THREAD_PRIO_PROTECT: Constants for Sysconf. +* _SC_THREAD_PRIORITY_SCHEDULING: Constants for Sysconf. +* _SC_THREAD_PROCESS_SHARED: Constants for Sysconf. +* _SC_THREAD_SAFE_FUNCTIONS: Constants for Sysconf. +* _SC_THREAD_STACK_MIN: Constants for Sysconf. +* _SC_THREAD_THREADS_MAX: Constants for Sysconf. +* _SC_THREADS: Constants for Sysconf. +* _SC_TIMER_MAX: Constants for Sysconf. +* _SC_TIMERS: Constants for Sysconf. +* _SC_TTY_NAME_MAX: Constants for Sysconf. +* _SC_TZNAME_MAX: Constants for Sysconf. +* _SC_UCHAR_MAX: Constants for Sysconf. +* _SC_UINT_MAX: Constants for Sysconf. +* _SC_UIO_MAXIOV: Constants for Sysconf. +* _SC_ULONG_MAX: Constants for Sysconf. +* _SC_USHRT_MAX: Constants for Sysconf. +* _SC_VERSION: Constants for Sysconf. +* _SC_WORD_BIT: Constants for Sysconf. +* _SC_XOPEN_CRYPT: Constants for Sysconf. +* _SC_XOPEN_ENH_I18N: Constants for Sysconf. +* _SC_XOPEN_LEGACY: Constants for Sysconf. +* _SC_XOPEN_REALTIME: Constants for Sysconf. +* _SC_XOPEN_REALTIME_THREADS: Constants for Sysconf. +* _SC_XOPEN_SHM: Constants for Sysconf. +* _SC_XOPEN_UNIX: Constants for Sysconf. +* _SC_XOPEN_VERSION: Constants for Sysconf. +* _SC_XOPEN_XCU_VERSION: Constants for Sysconf. +* _SC_XOPEN_XPG2: Constants for Sysconf. +* _SC_XOPEN_XPG3: Constants for Sysconf. +* _SC_XOPEN_XPG4: Constants for Sysconf. +* _SVID_SOURCE: Feature Test Macros. +* _THREAD_SAFE: Feature Test Macros. +* _XOPEN_SOURCE: Feature Test Macros. +* _XOPEN_SOURCE_EXTENDED: Feature Test Macros. +* ABDAY_1: The Elegant and Fast Way. +* ABDAY_2: The Elegant and Fast Way. +* ABDAY_3: The Elegant and Fast Way. +* ABDAY_4: The Elegant and Fast Way. +* ABDAY_5: The Elegant and Fast Way. +* ABDAY_6: The Elegant and Fast Way. +* ABDAY_7: The Elegant and Fast Way. +* ABMON_1: The Elegant and Fast Way. +* ABMON_10: The Elegant and Fast Way. +* ABMON_11: The Elegant and Fast Way. +* ABMON_12: The Elegant and Fast Way. +* ABMON_2: The Elegant and Fast Way. +* ABMON_3: The Elegant and Fast Way. +* ABMON_4: The Elegant and Fast Way. +* ABMON_5: The Elegant and Fast Way. +* ABMON_6: The Elegant and Fast Way. +* ABMON_7: The Elegant and Fast Way. +* ABMON_8: The Elegant and Fast Way. +* ABMON_9: The Elegant and Fast Way. +* ACCOUNTING: Manipulating the Database. +* AF_FILE: Address Formats. +* AF_INET: Address Formats. +* AF_LOCAL: Address Formats. +* AF_UNIX: Address Formats. +* AF_UNSPEC: Address Formats. +* aliases: NSS Basics. +* ALT_DIGITS: The Elegant and Fast Way. +* ALTWERASE: Local Modes. +* AM_STR: The Elegant and Fast Way. +* ARG_MAX: General Limits. +* argp_err_exit_status: Argp Global Variables. +* ARGP_ERR_UNKNOWN: Argp Parser Functions. +* ARGP_HELP_BUG_ADDR: Argp Help Flags. +* ARGP_HELP_DOC: Argp Help Flags. +* ARGP_HELP_EXIT_ERR: Argp Help Flags. +* ARGP_HELP_EXIT_OK: Argp Help Flags. +* ARGP_HELP_LONG: Argp Help Flags. +* ARGP_HELP_LONG_ONLY: Argp Help Flags. +* ARGP_HELP_POST_DOC: Argp Help Flags. +* ARGP_HELP_PRE_DOC: Argp Help Flags. +* ARGP_HELP_SEE: Argp Help Flags. +* ARGP_HELP_SHORT_USAGE: Argp Help Flags. +* ARGP_HELP_STD_ERR: Argp Help Flags. +* ARGP_HELP_STD_HELP: Argp Help Flags. +* ARGP_HELP_STD_USAGE: Argp Help Flags. +* ARGP_HELP_USAGE: Argp Help Flags. +* ARGP_IN_ORDER: Argp Flags. +* ARGP_KEY_ARG: Argp Special Keys. +* ARGP_KEY_ARGS: Argp Special Keys. +* ARGP_KEY_END: Argp Special Keys. +* ARGP_KEY_ERROR: Argp Special Keys. +* ARGP_KEY_FINI: Argp Special Keys. +* ARGP_KEY_HELP_ARGS_DOC: Argp Help Filter Keys. +* ARGP_KEY_HELP_DUP_ARGS_NOTE: Argp Help Filter Keys. +* ARGP_KEY_HELP_EXTRA: Argp Help Filter Keys. +* ARGP_KEY_HELP_HEADER: Argp Help Filter Keys. +* ARGP_KEY_HELP_POST_DOC: Argp Help Filter Keys. +* ARGP_KEY_HELP_PRE_DOC: Argp Help Filter Keys. +* ARGP_KEY_INIT: Argp Special Keys. +* ARGP_KEY_NO_ARGS: Argp Special Keys. +* ARGP_KEY_SUCCESS: Argp Special Keys. +* ARGP_LONG_ONLY: Argp Flags. +* ARGP_NO_ARGS: Argp Flags. +* ARGP_NO_ERRS: Argp Flags. +* ARGP_NO_EXIT: Argp Flags. +* ARGP_NO_HELP: Argp Flags. +* ARGP_PARSE_ARGV0: Argp Flags. +* argp_program_bug_address: Argp Global Variables. +* argp_program_version: Argp Global Variables. +* argp_program_version_hook: Argp Global Variables. +* ARGP_SILENT: Argp Flags. +* B0: Line Speed. +* B110: Line Speed. +* B115200: Line Speed. +* B1200: Line Speed. +* B134: Line Speed. +* B150: Line Speed. +* B1800: Line Speed. +* B19200: Line Speed. +* B200: Line Speed. +* B230400: Line Speed. +* B2400: Line Speed. +* B300: Line Speed. +* B38400: Line Speed. +* B460800: Line Speed. +* B4800: Line Speed. +* B50: Line Speed. +* B57600: Line Speed. +* B600: Line Speed. +* B75: Line Speed. +* B9600: Line Speed. +* BC_BASE_MAX: Utility Limits. +* BC_DIM_MAX: Utility Limits. +* BC_SCALE_MAX: Utility Limits. +* BC_STRING_MAX: Utility Limits. +* BOOT_TIME <1>: XPG Functions. +* BOOT_TIME: Manipulating the Database. +* BRKINT: Input Modes. +* BUFSIZ: Controlling Buffering. +* CCTS_OFLOW: Control Modes. +* CHAR_MAX: Range of Type. +* CHAR_MIN: Range of Type. +* CHILD_MAX: General Limits. +* CIGNORE: Control Modes. +* CLK_TCK: CPU Time. +* CLOCAL: Control Modes. +* CLOCKS_PER_SEC: CPU Time. +* CODESET: The Elegant and Fast Way. +* COLL_WEIGHTS_MAX: Utility Limits. +* COREFILE: Program Error Signals. +* CREAD: Control Modes. +* CRNCYSTR: The Elegant and Fast Way. +* CRTS_IFLOW: Control Modes. +* CS5: Control Modes. +* CS6: Control Modes. +* CS7: Control Modes. +* CS8: Control Modes. +* CSIZE: Control Modes. +* CSTOPB: Control Modes. +* CURRENCY_SYMBOL: The Elegant and Fast Way. +* D_FMT: The Elegant and Fast Way. +* D_T_FMT: The Elegant and Fast Way. +* DAY_1: The Elegant and Fast Way. +* DAY_2: The Elegant and Fast Way. +* DAY_3: The Elegant and Fast Way. +* DAY_4: The Elegant and Fast Way. +* DAY_5: The Elegant and Fast Way. +* DAY_6: The Elegant and Fast Way. +* DAY_7: The Elegant and Fast Way. +* daylight: Time Zone Functions. +* DBL_DIG: Floating Point Parameters. +* DBL_EPSILON: Floating Point Parameters. +* DBL_MANT_DIG: Floating Point Parameters. +* DBL_MAX: Floating Point Parameters. +* DBL_MAX_10_EXP: Floating Point Parameters. +* DBL_MAX_EXP: Floating Point Parameters. +* DBL_MIN: Floating Point Parameters. +* DBL_MIN_10_EXP: Floating Point Parameters. +* DBL_MIN_EXP: Floating Point Parameters. +* DEAD_PROCESS <1>: XPG Functions. +* DEAD_PROCESS: Manipulating the Database. +* DECIMAL_POINT: The Elegant and Fast Way. +* DES_DECRYPT: DES Encryption. +* DES_ENCRYPT: DES Encryption. +* DES_HW: DES Encryption. +* DES_SW: DES Encryption. +* DESERR_BADPARAM: DES Encryption. +* DESERR_HWERROR: DES Encryption. +* DESERR_NOHWDEVICE: DES Encryption. +* DESERR_NONE: DES Encryption. +* DT_BLK: Directory Entries. +* DT_CHR: Directory Entries. +* DT_DIR: Directory Entries. +* DT_FIFO: Directory Entries. +* DT_REG: Directory Entries. +* DT_SOCK: Directory Entries. +* DT_UNKNOWN: Directory Entries. +* E2BIG: Error Codes. +* EACCES: Error Codes. +* EADDRINUSE: Error Codes. +* EADDRNOTAVAIL: Error Codes. +* EADV: Error Codes. +* EAFNOSUPPORT: Error Codes. +* EAGAIN: Error Codes. +* EALREADY: Error Codes. +* EAUTH: Error Codes. +* EBACKGROUND: Error Codes. +* EBADE: Error Codes. +* EBADF <1>: Line Control. +* EBADF: Error Codes. +* EBADFD: Error Codes. +* EBADMSG: Error Codes. +* EBADR: Error Codes. +* EBADRPC: Error Codes. +* EBADRQC: Error Codes. +* EBADSLT: Error Codes. +* EBFONT: Error Codes. +* EBUSY: Error Codes. +* ECHILD: Error Codes. +* ECHO: Local Modes. +* ECHOCTL: Local Modes. +* ECHOE: Local Modes. +* ECHOK: Local Modes. +* ECHOKE: Local Modes. +* ECHONL: Local Modes. +* ECHOPRT: Local Modes. +* ECHRNG: Error Codes. +* ECOMM: Error Codes. +* ECONNABORTED: Error Codes. +* ECONNREFUSED: Error Codes. +* ECONNRESET: Error Codes. +* ED: Error Codes. +* EDEADLK: Error Codes. +* EDEADLOCK: Error Codes. +* EDESTADDRREQ: Error Codes. +* EDIED: Error Codes. +* EDOM: Error Codes. +* EDOTDOT: Error Codes. +* EDQUOT: Error Codes. +* EEXIST: Error Codes. +* EFAULT: Error Codes. +* EFBIG: Error Codes. +* EFTYPE: Error Codes. +* EGRATUITOUS: Error Codes. +* EGREGIOUS: Error Codes. +* EHOSTDOWN: Error Codes. +* EHOSTUNREACH: Error Codes. +* EIDRM: Error Codes. +* EIEIO: Error Codes. +* EILSEQ: Error Codes. +* EINPROGRESS: Error Codes. +* EINTR: Error Codes. +* EINVAL <1>: Line Control. +* EINVAL: Error Codes. +* EIO: Error Codes. +* EISCONN: Error Codes. +* EISDIR: Error Codes. +* EISNAM: Error Codes. +* EL2HLT: Error Codes. +* EL2NSYNC: Error Codes. +* EL3HLT: Error Codes. +* EL3RST: Error Codes. +* ELIBACC: Error Codes. +* ELIBBAD: Error Codes. +* ELIBEXEC: Error Codes. +* ELIBMAX: Error Codes. +* ELIBSCN: Error Codes. +* ELNRNG: Error Codes. +* ELOOP: Error Codes. +* EMEDIUMTYPE: Error Codes. +* EMFILE: Error Codes. +* EMLINK: Error Codes. +* EMPTY <1>: XPG Functions. +* EMPTY: Manipulating the Database. +* EMSGSIZE: Error Codes. +* EMULTIHOP: Error Codes. +* ENAMETOOLONG: Error Codes. +* ENAVAIL: Error Codes. +* ENEEDAUTH: Error Codes. +* ENETDOWN: Error Codes. +* ENETRESET: Error Codes. +* ENETUNREACH: Error Codes. +* ENFILE: Error Codes. +* ENOANO: Error Codes. +* ENOBUFS: Error Codes. +* ENOCSI: Error Codes. +* ENODATA: Error Codes. +* ENODEV: Error Codes. +* ENOENT: Error Codes. +* ENOEXEC: Error Codes. +* ENOLCK: Error Codes. +* ENOLINK: Error Codes. +* ENOMEDIUM: Error Codes. +* ENOMEM: Error Codes. +* ENOMSG: Error Codes. +* ENONET: Error Codes. +* ENOPKG: Error Codes. +* ENOPROTOOPT: Error Codes. +* ENOSPC: Error Codes. +* ENOSR: Error Codes. +* ENOSTR: Error Codes. +* ENOSYS: Error Codes. +* ENOTBLK: Error Codes. +* ENOTCONN: Error Codes. +* ENOTDIR: Error Codes. +* ENOTEMPTY: Error Codes. +* ENOTNAM: Error Codes. +* ENOTSOCK: Error Codes. +* ENOTSUP: Error Codes. +* ENOTTY <1>: Line Control. +* ENOTTY: Error Codes. +* ENOTUNIQ: Error Codes. +* environ: Environment Access. +* ENXIO: Error Codes. +* EOF: EOF and Errors. +* EOPNOTSUPP: Error Codes. +* EOVERFLOW: Error Codes. +* EPERM: Error Codes. +* EPFNOSUPPORT: Error Codes. +* EPIPE: Error Codes. +* EPROCLIM: Error Codes. +* EPROCUNAVAIL: Error Codes. +* EPROGMISMATCH: Error Codes. +* EPROGUNAVAIL: Error Codes. +* EPROTO: Error Codes. +* EPROTONOSUPPORT: Error Codes. +* EPROTOTYPE: Error Codes. +* EQUIV_CLASS_MAX: Utility Limits. +* ERA: The Elegant and Fast Way. +* ERA_D_FMT: The Elegant and Fast Way. +* ERA_D_T_FMT: The Elegant and Fast Way. +* ERA_T_FMT: The Elegant and Fast Way. +* ERA_YEAR: The Elegant and Fast Way. +* ERANGE: Error Codes. +* EREMCHG: Error Codes. +* EREMOTE: Error Codes. +* EREMOTEIO: Error Codes. +* ERESTART: Error Codes. +* EROFS: Error Codes. +* ERPCMISMATCH: Error Codes. +* errno: Checking for Errors. +* ESHUTDOWN: Error Codes. +* ESOCKTNOSUPPORT: Error Codes. +* ESPIPE: Error Codes. +* ESRCH: Error Codes. +* ESRMNT: Error Codes. +* ESTALE: Error Codes. +* ESTRPIPE: Error Codes. +* ethers: NSS Basics. +* ETIME: Error Codes. +* ETIMEDOUT: Error Codes. +* ETOOMANYREFS: Error Codes. +* ETXTBSY: Error Codes. +* EUCLEAN: Error Codes. +* EUNATCH: Error Codes. +* EUSERS: Error Codes. +* EWOULDBLOCK: Error Codes. +* EXDEV: Error Codes. +* EXFULL: Error Codes. +* EXIT_FAILURE: Exit Status. +* EXIT_SUCCESS: Exit Status. +* EXPR_NEST_MAX: Utility Limits. +* EXTA: Line Speed. +* EXTB: Line Speed. +* F_DUPFD: Duplicating Descriptors. +* F_GETFD: Descriptor Flags. +* F_GETFL: Getting File Status Flags. +* F_GETLK: File Locks. +* F_GETOWN: Interrupt Input. +* F_OK: Testing File Access. +* F_RDLCK: File Locks. +* F_SETFD: Descriptor Flags. +* F_SETFL: Getting File Status Flags. +* F_SETLK: File Locks. +* F_SETLKW: File Locks. +* F_SETOWN: Interrupt Input. +* F_UNLCK: File Locks. +* F_WRLCK: File Locks. +* FD_CLOEXEC: Descriptor Flags. +* FD_SETSIZE: Waiting for I/O. +* FE_DFL_ENV: Control Functions. +* FE_DIVBYZERO: Status bit operations. +* FE_DOWNWARD: Rounding. +* FE_INEXACT: Status bit operations. +* FE_INVALID: Status bit operations. +* FE_NOMASK_ENV: Control Functions. +* FE_OVERFLOW: Status bit operations. +* FE_TONEAREST: Rounding. +* FE_TOWARDZERO: Rounding. +* FE_UNDERFLOW: Status bit operations. +* FE_UPWARD: Rounding. +* FILENAME_MAX: Limits for Files. +* FLT_DIG: Floating Point Parameters. +* FLT_EPSILON: Floating Point Parameters. +* FLT_MANT_DIG: Floating Point Parameters. +* FLT_MAX: Floating Point Parameters. +* FLT_MAX_10_EXP: Floating Point Parameters. +* FLT_MAX_EXP: Floating Point Parameters. +* FLT_MIN: Floating Point Parameters. +* FLT_MIN_10_EXP: Floating Point Parameters. +* FLT_MIN_EXP: Floating Point Parameters. +* FLT_RADIX: Floating Point Parameters. +* FLT_ROUNDS: Floating Point Parameters. +* FLUSHO: Local Modes. +* FOPEN_MAX: Opening Streams. +* FP_FAST_FMA: Misc FP Arithmetic. +* FP_ILOGB0: Exponents and Logarithms. +* FP_ILOGBNAN: Exponents and Logarithms. +* FP_INFINITE: Floating Point Classes. +* FP_NAN: Floating Point Classes. +* FP_NORMAL: Floating Point Classes. +* FP_SUBNORMAL: Floating Point Classes. +* FP_ZERO: Floating Point Classes. +* FPE_DECOVF_TRAP: Program Error Signals. +* FPE_FLTDIV_TRAP: Program Error Signals. +* FPE_FLTOVF_TRAP: Program Error Signals. +* FPE_FLTUND_TRAP: Program Error Signals. +* FPE_INTDIV_TRAP: Program Error Signals. +* FPE_INTOVF_TRAP: Program Error Signals. +* FPE_SUBRNG_TRAP: Program Error Signals. +* FRAC_DIGITS: The Elegant and Fast Way. +* FSETLOCKING_BYCALLER: Streams and Threads. +* FSETLOCKING_INTERNAL: Streams and Threads. +* FSETLOCKING_QUERY: Streams and Threads. +* FSTAB: Mount Information. +* FSTAB_RO: fstab. +* FSTAB_RQ: fstab. +* FSTAB_RW: fstab. +* FSTAB_SW: fstab. +* FSTAB_XX: fstab. +* FTW_CHDIR: Working with Directory Trees. +* FTW_D: Working with Directory Trees. +* FTW_DEPTH: Working with Directory Trees. +* FTW_DNR: Working with Directory Trees. +* FTW_DP: Working with Directory Trees. +* FTW_F: Working with Directory Trees. +* FTW_MOUNT: Working with Directory Trees. +* FTW_NS: Working with Directory Trees. +* FTW_PHYS: Working with Directory Trees. +* FTW_SL: Working with Directory Trees. +* FTW_SLN: Working with Directory Trees. +* getdate_err: General Time String Parsing. +* GLOB_ABORTED: Calling Glob. +* GLOB_ALTDIRFUNC: More Flags for Globbing. +* GLOB_APPEND: Flags for Globbing. +* GLOB_BRACE: More Flags for Globbing. +* GLOB_DOOFFS: Flags for Globbing. +* GLOB_ERR: Flags for Globbing. +* GLOB_MAGCHAR: More Flags for Globbing. +* GLOB_MARK: Flags for Globbing. +* GLOB_NOCHECK: Flags for Globbing. +* GLOB_NOESCAPE: Flags for Globbing. +* GLOB_NOMAGIC: More Flags for Globbing. +* GLOB_NOMATCH: Calling Glob. +* GLOB_NOSORT: Flags for Globbing. +* GLOB_NOSPACE: Calling Glob. +* GLOB_ONLYDIR: More Flags for Globbing. +* GLOB_PERIOD: More Flags for Globbing. +* GLOB_TILDE: More Flags for Globbing. +* GLOB_TILDE_CHECK: More Flags for Globbing. +* group: NSS Basics. +* GROUPING: The Elegant and Fast Way. +* h_errno: Host Names. +* HOST_NOT_FOUND: Host Names. +* hosts: NSS Basics. +* HUGE_VAL: Math Error Reporting. +* HUGE_VALF: Math Error Reporting. +* HUGE_VALL: Math Error Reporting. +* HUPCL: Control Modes. +* I: Complex Numbers. +* ICANON: Local Modes. +* ICRNL: Input Modes. +* IEXTEN: Local Modes. +* IFNAMSIZ: Interface Naming. +* IGNBRK: Input Modes. +* IGNCR: Input Modes. +* IGNPAR: Input Modes. +* IMAXBEL: Input Modes. +* in6addr_any: Host Address Data Type. +* in6addr_loopback: Host Address Data Type. +* INADDR_ANY: Host Address Data Type. +* INADDR_BROADCAST: Host Address Data Type. +* INADDR_LOOPBACK: Host Address Data Type. +* INADDR_NONE: Host Address Data Type. +* INFINITY: Infinity and NaN. +* INIT_PROCESS <1>: XPG Functions. +* INIT_PROCESS: Manipulating the Database. +* INLCR: Input Modes. +* INPCK: Input Modes. +* INT_CURR_SYMBOL: The Elegant and Fast Way. +* INT_FRAC_DIGITS: The Elegant and Fast Way. +* INT_MAX: Range of Type. +* INT_MIN: Range of Type. +* INT_N_CS_PRECEDES: The Elegant and Fast Way. +* INT_N_SEP_BY_SPACE: The Elegant and Fast Way. +* INT_N_SIGN_POSN: The Elegant and Fast Way. +* INT_P_CS_PRECEDES: The Elegant and Fast Way. +* INT_P_SEP_BY_SPACE: The Elegant and Fast Way. +* INT_P_SIGN_POSN: The Elegant and Fast Way. +* IPPORT_RESERVED: Ports. +* IPPORT_USERRESERVED: Ports. +* ISIG: Local Modes. +* ISTRIP: Input Modes. +* ITIMER_PROF: Setting an Alarm. +* ITIMER_REAL: Setting an Alarm. +* ITIMER_VIRTUAL: Setting an Alarm. +* IXANY: Input Modes. +* IXOFF: Input Modes. +* IXON: Input Modes. +* L_ctermid: Identifying the Terminal. +* L_cuserid: Who Logged In. +* L_INCR: File Positioning. +* L_SET: File Positioning. +* L_tmpnam: Temporary Files. +* L_XTND: File Positioning. +* LANG: Locale Categories. +* LANGUAGE: Locale Categories. +* LC_ALL: Locale Categories. +* LC_COLLATE: Locale Categories. +* LC_CTYPE: Locale Categories. +* LC_MESSAGES: Locale Categories. +* LC_MONETARY: Locale Categories. +* LC_NUMERIC: Locale Categories. +* LC_TIME: Locale Categories. +* LDBL_DIG: Floating Point Parameters. +* LDBL_EPSILON: Floating Point Parameters. +* LDBL_MANT_DIG: Floating Point Parameters. +* LDBL_MAX: Floating Point Parameters. +* LDBL_MAX_10_EXP: Floating Point Parameters. +* LDBL_MAX_EXP: Floating Point Parameters. +* LDBL_MIN: Floating Point Parameters. +* LDBL_MIN_10_EXP: Floating Point Parameters. +* LDBL_MIN_EXP: Floating Point Parameters. +* LINE_MAX: Utility Limits. +* LINK_MAX: Limits for Files. +* LIO_NOP: Asynchronous I/O. +* LIO_READ: Asynchronous I/O. +* LIO_WRITE: Asynchronous I/O. +* LOG_ALERT: syslog; vsyslog. +* LOG_AUTH: syslog; vsyslog. +* LOG_AUTHPRIV: syslog; vsyslog. +* LOG_CRIT: syslog; vsyslog. +* LOG_CRON: syslog; vsyslog. +* LOG_DAEMON: syslog; vsyslog. +* LOG_DEBUG: syslog; vsyslog. +* LOG_EMERG: syslog; vsyslog. +* LOG_ERR: syslog; vsyslog. +* LOG_FTP: syslog; vsyslog. +* LOG_INFO: syslog; vsyslog. +* LOG_LOCAL0: syslog; vsyslog. +* LOG_LOCAL1: syslog; vsyslog. +* LOG_LOCAL2: syslog; vsyslog. +* LOG_LOCAL3: syslog; vsyslog. +* LOG_LOCAL4: syslog; vsyslog. +* LOG_LOCAL5: syslog; vsyslog. +* LOG_LOCAL6: syslog; vsyslog. +* LOG_LOCAL7: syslog; vsyslog. +* LOG_LPR: syslog; vsyslog. +* LOG_MAIL: syslog; vsyslog. +* LOG_NEWS: syslog; vsyslog. +* LOG_NOTICE: syslog; vsyslog. +* LOG_SYSLOG: syslog; vsyslog. +* LOG_USER: syslog; vsyslog. +* LOG_UUCP: syslog; vsyslog. +* LOG_WARNING: syslog; vsyslog. +* LOGIN_PROCESS <1>: XPG Functions. +* LOGIN_PROCESS: Manipulating the Database. +* LONG_LONG_MAX: Range of Type. +* LONG_LONG_MIN: Range of Type. +* LONG_MAX: Range of Type. +* LONG_MIN: Range of Type. +* M_1_PI: Mathematical Constants. +* M_2_PI: Mathematical Constants. +* M_2_SQRTPI: Mathematical Constants. +* M_E: Mathematical Constants. +* M_LN10: Mathematical Constants. +* M_LN2: Mathematical Constants. +* M_LOG10E: Mathematical Constants. +* M_LOG2E: Mathematical Constants. +* M_PI: Mathematical Constants. +* M_PI_2: Mathematical Constants. +* M_PI_4: Mathematical Constants. +* M_SQRT1_2: Mathematical Constants. +* M_SQRT2: Mathematical Constants. +* MAP_ANON: Memory-mapped I/O. +* MAP_ANONYMOUS: Memory-mapped I/O. +* MAP_FIXED: Memory-mapped I/O. +* MAP_PRIVATE: Memory-mapped I/O. +* MAP_SHARED: Memory-mapped I/O. +* MAX_CANON: Limits for Files. +* MAX_INPUT: Limits for Files. +* MAXNAMLEN: Limits for Files. +* MAXSYMLINKS: Symbolic Links. +* MB_CUR_MAX: Selecting the Conversion. +* MB_LEN_MAX: Selecting the Conversion. +* MDMBUF: Control Modes. +* MINSIGSTKSZ: Signal Stack. +* MM_APPL: Printing Formatted Messages. +* MM_CONSOLE: Printing Formatted Messages. +* MM_ERROR: Printing Formatted Messages. +* MM_FIRM: Printing Formatted Messages. +* MM_HALT: Printing Formatted Messages. +* MM_HARD: Printing Formatted Messages. +* MM_INFO: Printing Formatted Messages. +* MM_NOSEV: Printing Formatted Messages. +* MM_NRECOV: Printing Formatted Messages. +* MM_NULLACT: Printing Formatted Messages. +* MM_NULLLBL: Printing Formatted Messages. +* MM_NULLMC: Printing Formatted Messages. +* MM_NULLSEV: Printing Formatted Messages. +* MM_NULLTAG: Printing Formatted Messages. +* MM_NULLTXT: Printing Formatted Messages. +* MM_OPSYS: Printing Formatted Messages. +* MM_PRINT: Printing Formatted Messages. +* MM_RECOVER: Printing Formatted Messages. +* MM_SOFT: Printing Formatted Messages. +* MM_UTIL: Printing Formatted Messages. +* MM_WARNING: Printing Formatted Messages. +* MNTOPT_DEFAULTS: mtab. +* MNTOPT_NOAUTO: mtab. +* MNTOPT_NOSUID: mtab. +* MNTOPT_RO: mtab. +* MNTOPT_RW: mtab. +* MNTOPT_SUID: mtab. +* MNTTYPE_IGNORE: mtab. +* MNTTYPE_NFS: mtab. +* MNTTYPE_SWAP: mtab. +* MON_1: The Elegant and Fast Way. +* MON_10: The Elegant and Fast Way. +* MON_11: The Elegant and Fast Way. +* MON_12: The Elegant and Fast Way. +* MON_2: The Elegant and Fast Way. +* MON_3: The Elegant and Fast Way. +* MON_4: The Elegant and Fast Way. +* MON_5: The Elegant and Fast Way. +* MON_6: The Elegant and Fast Way. +* MON_7: The Elegant and Fast Way. +* MON_8: The Elegant and Fast Way. +* MON_9: The Elegant and Fast Way. +* MON_DECIMAL_POINT: The Elegant and Fast Way. +* MON_GROUPING: The Elegant and Fast Way. +* MON_THOUSANDS_SEP: The Elegant and Fast Way. +* MS_ASYNC: Memory-mapped I/O. +* MS_SYNC: Memory-mapped I/O. +* MSG_DONTROUTE: Socket Data Options. +* MSG_OOB: Socket Data Options. +* MSG_PEEK: Socket Data Options. +* N_CS_PRECEDES: The Elegant and Fast Way. +* N_SEP_BY_SPACE: The Elegant and Fast Way. +* N_SIGN_POSN: The Elegant and Fast Way. +* NAME_MAX: Limits for Files. +* NAN: Infinity and NaN. +* NCCS: Mode Data Types. +* NDEBUG: Consistency Checking. +* NEGATIVE_SIGN: The Elegant and Fast Way. +* netgroup: NSS Basics. +* networks: NSS Basics. +* NEW_TIME <1>: XPG Functions. +* NEW_TIME: Manipulating the Database. +* NGROUPS_MAX: General Limits. +* NL_ARGMAX: Output Conversion Syntax. +* NO_ADDRESS: Host Names. +* NO_RECOVERY: Host Names. +* NOEXPR: The Elegant and Fast Way. +* NOFLSH: Local Modes. +* NOKERNINFO: Local Modes. +* NOSTR: The Elegant and Fast Way. +* NSIG: Standard Signals. +* NSS_STATUS_NOTFOUND: NSS Modules Interface. +* NSS_STATUS_SUCCESS: NSS Modules Interface. +* NSS_STATUS_TRYAGAIN: NSS Modules Interface. +* NSS_STATUS_UNAVAIL: NSS Modules Interface. +* NULL: Null Pointer Constant. +* O_ACCMODE: Access Modes. +* O_APPEND: Operating Modes. +* O_ASYNC: Operating Modes. +* O_CREAT: Open-time Flags. +* O_EXCL: Open-time Flags. +* O_EXEC: Access Modes. +* O_EXLOCK: Open-time Flags. +* O_FSYNC: Operating Modes. +* O_IGNORE_CTTY: Open-time Flags. +* O_NDELAY: Operating Modes. +* O_NOATIME: Operating Modes. +* O_NOCTTY: Open-time Flags. +* O_NOLINK: Open-time Flags. +* O_NONBLOCK <1>: Operating Modes. +* O_NONBLOCK: Open-time Flags. +* O_NOTRANS: Open-time Flags. +* O_RDONLY: Access Modes. +* O_RDWR: Access Modes. +* O_READ: Access Modes. +* O_SHLOCK: Open-time Flags. +* O_SYNC: Operating Modes. +* O_TRUNC: Open-time Flags. +* O_WRITE: Access Modes. +* O_WRONLY: Access Modes. +* obstack_alloc_failed_handler: Preparing for Obstacks. +* OLD_TIME <1>: XPG Functions. +* OLD_TIME: Manipulating the Database. +* ONLCR: Output Modes. +* ONOEOT: Output Modes. +* OPEN_MAX: General Limits. +* OPOST: Output Modes. +* optarg: Using Getopt. +* opterr: Using Getopt. +* optind: Using Getopt. +* OPTION_ALIAS: Argp Option Flags. +* OPTION_ARG_OPTIONAL: Argp Option Flags. +* OPTION_DOC: Argp Option Flags. +* OPTION_HIDDEN: Argp Option Flags. +* OPTION_NO_USAGE: Argp Option Flags. +* optopt: Using Getopt. +* OXTABS: Output Modes. +* P_CS_PRECEDES: The Elegant and Fast Way. +* P_SEP_BY_SPACE: The Elegant and Fast Way. +* P_SIGN_POSN: The Elegant and Fast Way. +* P_tmpdir: Temporary Files. +* PA_CHAR: Parsing a Template String. +* PA_DOUBLE: Parsing a Template String. +* PA_FLAG_LONG: Parsing a Template String. +* PA_FLAG_LONG_DOUBLE: Parsing a Template String. +* PA_FLAG_LONG_LONG: Parsing a Template String. +* PA_FLAG_MASK: Parsing a Template String. +* PA_FLAG_PTR: Parsing a Template String. +* PA_FLAG_SHORT: Parsing a Template String. +* PA_FLOAT: Parsing a Template String. +* PA_INT: Parsing a Template String. +* PA_LAST: Parsing a Template String. +* PA_POINTER: Parsing a Template String. +* PA_STRING: Parsing a Template String. +* PARENB: Control Modes. +* PARMRK: Input Modes. +* PARODD: Control Modes. +* passwd: NSS Basics. +* PATH_MAX: Limits for Files. +* PENDIN: Local Modes. +* PF_CCITT: Misc Namespaces. +* PF_FILE: Local Namespace Details. +* PF_IMPLINK: Misc Namespaces. +* PF_INET: Internet Namespace. +* PF_INET6: Internet Namespace. +* PF_ISO: Misc Namespaces. +* PF_LOCAL: Local Namespace Details. +* PF_NS: Misc Namespaces. +* PF_ROUTE: Misc Namespaces. +* PF_UNIX: Local Namespace Details. +* PI: Mathematical Constants. +* PIPE_BUF: Limits for Files. +* PM_STR: The Elegant and Fast Way. +* POSITIVE_SIGN: The Elegant and Fast Way. +* PRIO_MAX: Traditional Scheduling Functions. +* PRIO_MIN: Traditional Scheduling Functions. +* PRIO_PGRP: Traditional Scheduling Functions. +* PRIO_PROCESS: Traditional Scheduling Functions. +* PRIO_USER: Traditional Scheduling Functions. +* program_invocation_name: Error Messages. +* program_invocation_short_name: Error Messages. +* PROT_EXEC: Memory-mapped I/O. +* PROT_READ: Memory-mapped I/O. +* PROT_WRITE: Memory-mapped I/O. +* protocols: NSS Basics. +* PWD: Working Directory. +* R_OK: Testing File Access. +* RADIXCHAR: The Elegant and Fast Way. +* RAND_MAX: ISO Random. +* RE_DUP_MAX: General Limits. +* RLIM_INFINITY: Limits on Resources. +* RLIM_NLIMITS: Limits on Resources. +* RLIMIT_AS: Limits on Resources. +* RLIMIT_CORE: Limits on Resources. +* RLIMIT_CPU: Limits on Resources. +* RLIMIT_DATA: Limits on Resources. +* RLIMIT_FSIZE: Limits on Resources. +* RLIMIT_NOFILE: Limits on Resources. +* RLIMIT_OFILE: Limits on Resources. +* RLIMIT_RSS: Limits on Resources. +* RLIMIT_STACK: Limits on Resources. +* rpc: NSS Basics. +* RUN_LVL <1>: XPG Functions. +* RUN_LVL: Manipulating the Database. +* S_IEXEC: Permission Bits. +* S_IFBLK: Testing File Type. +* S_IFCHR: Testing File Type. +* S_IFDIR: Testing File Type. +* S_IFIFO: Testing File Type. +* S_IFLNK: Testing File Type. +* S_IFMT: Testing File Type. +* S_IFREG: Testing File Type. +* S_IFSOCK: Testing File Type. +* S_IREAD: Permission Bits. +* S_IRGRP: Permission Bits. +* S_IROTH: Permission Bits. +* S_IRUSR: Permission Bits. +* S_IRWXG: Permission Bits. +* S_IRWXO: Permission Bits. +* S_IRWXU: Permission Bits. +* S_ISGID: Permission Bits. +* S_ISUID: Permission Bits. +* S_ISVTX: Permission Bits. +* S_IWGRP: Permission Bits. +* S_IWOTH: Permission Bits. +* S_IWRITE: Permission Bits. +* S_IWUSR: Permission Bits. +* S_IXGRP: Permission Bits. +* S_IXOTH: Permission Bits. +* S_IXUSR: Permission Bits. +* SA_NOCLDSTOP: Flags for Sigaction. +* SA_ONSTACK: Flags for Sigaction. +* SA_RESTART: Flags for Sigaction. +* SC_SSIZE_MAX: Constants for Sysconf. +* SCHAR_MAX: Range of Type. +* SCHAR_MIN: Range of Type. +* SEEK_CUR: File Positioning. +* SEEK_END: File Positioning. +* SEEK_SET: File Positioning. +* SEM_VALUE_MAX: POSIX Semaphores. +* services: NSS Basics. +* shadow: NSS Basics. +* SHRT_MAX: Range of Type. +* SHRT_MIN: Range of Type. +* SIG_BLOCK: Process Signal Mask. +* SIG_DFL: Basic Signal Handling. +* SIG_ERR: Basic Signal Handling. +* SIG_IGN: Basic Signal Handling. +* SIG_SETMASK: Process Signal Mask. +* SIG_UNBLOCK: Process Signal Mask. +* SIGABRT: Program Error Signals. +* SIGALRM: Alarm Signals. +* SIGBUS: Program Error Signals. +* SIGCHLD: Job Control Signals. +* SIGCLD: Job Control Signals. +* SIGCONT: Job Control Signals. +* SIGEMT: Program Error Signals. +* SIGFPE: Program Error Signals. +* SIGHUP: Termination Signals. +* SIGILL: Program Error Signals. +* SIGINFO: Miscellaneous Signals. +* SIGINT: Termination Signals. +* SIGIO: Asynchronous I/O Signals. +* SIGIOT: Program Error Signals. +* SIGKILL: Termination Signals. +* SIGLOST: Operation Error Signals. +* signgam: Special Functions. +* SIGPIPE: Operation Error Signals. +* SIGPOLL: Asynchronous I/O Signals. +* SIGPROF: Alarm Signals. +* SIGQUIT: Termination Signals. +* SIGSEGV: Program Error Signals. +* SIGSTKSZ: Signal Stack. +* SIGSTOP: Job Control Signals. +* SIGSYS: Program Error Signals. +* SIGTERM: Termination Signals. +* SIGTRAP: Program Error Signals. +* SIGTSTP: Job Control Signals. +* SIGTTIN: Job Control Signals. +* SIGTTOU: Job Control Signals. +* SIGURG: Asynchronous I/O Signals. +* SIGUSR1: Miscellaneous Signals. +* SIGUSR2: Miscellaneous Signals. +* SIGVTALRM: Alarm Signals. +* SIGWINCH: Miscellaneous Signals. +* SIGXCPU: Operation Error Signals. +* SIGXFSZ: Operation Error Signals. +* SOCK_DGRAM: Communication Styles. +* SOCK_RAW: Communication Styles. +* SOCK_STREAM: Communication Styles. +* SOL_SOCKET: Socket-Level Options. +* SS_DISABLE: Signal Stack. +* SS_ONSTACK: Signal Stack. +* SSIZE_MAX: General Limits. +* stderr: Standard Streams. +* STDERR_FILENO: Descriptors and Streams. +* stdin: Standard Streams. +* STDIN_FILENO: Descriptors and Streams. +* stdout: Standard Streams. +* STDOUT_FILENO: Descriptors and Streams. +* STREAM_MAX: General Limits. +* SV_INTERRUPT: BSD Handler. +* SV_ONSTACK: BSD Handler. +* SV_RESETHAND: BSD Handler. +* sys_siglist: Signal Messages. +* T_FMT: The Elegant and Fast Way. +* T_FMT_AMPM: The Elegant and Fast Way. +* TCIFLUSH: Line Control. +* TCIOFF: Line Control. +* TCIOFLUSH: Line Control. +* TCION: Line Control. +* TCOFLUSH: Line Control. +* TCOOFF: Line Control. +* TCOON: Line Control. +* TCSADRAIN: Mode Functions. +* TCSAFLUSH: Mode Functions. +* TCSANOW: Mode Functions. +* TCSASOFT: Mode Functions. +* THOUSANDS_SEP: The Elegant and Fast Way. +* THOUSEP: The Elegant and Fast Way. +* timezone: Time Zone Functions. +* TMP_MAX: Temporary Files. +* TOSTOP: Local Modes. +* TRY_AGAIN: Host Names. +* tzname: Time Zone Functions. +* TZNAME_MAX: General Limits. +* UCHAR_MAX: Range of Type. +* UINT_MAX: Range of Type. +* ULONG_LONG_MAX: Range of Type. +* ULONG_MAX: Range of Type. +* USER_PROCESS <1>: XPG Functions. +* USER_PROCESS: Manipulating the Database. +* USHRT_MAX: Range of Type. +* VDISCARD: Other Special. +* VDSUSP: Signal Characters. +* VEOF: Editing Characters. +* VEOL: Editing Characters. +* VEOL2: Editing Characters. +* VERASE: Editing Characters. +* VINTR: Signal Characters. +* VKILL: Editing Characters. +* VLNEXT: Other Special. +* VMIN: Noncanonical Input. +* VQUIT: Signal Characters. +* VREPRINT: Editing Characters. +* VSTART: Start/Stop Characters. +* VSTATUS: Other Special. +* VSTOP: Start/Stop Characters. +* VSUSP: Signal Characters. +* VTIME: Noncanonical Input. +* VWERASE: Editing Characters. +* W_OK: Testing File Access. +* WCHAR_MAX <1>: Range of Type. +* WCHAR_MAX: Extended Char Intro. +* WCHAR_MIN: Extended Char Intro. +* WEOF <1>: EOF and Errors. +* WEOF: Extended Char Intro. +* X_OK: Testing File Access. +* YESEXPR: The Elegant and Fast Way. +* YESSTR: The Elegant and Fast Way. diff -durpNa glibc-2.2.2/manual/libc.info-58 glibc-2.2.3/manual/libc.info-58 --- glibc-2.2.2/manual/libc.info-58 Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/manual/libc.info-58 Wed Apr 25 14:55:23 2001 @@ -0,0 +1,300 @@ +This is libc.info, produced by makeinfo version 4.0 from libc.texinfo. + +INFO-DIR-SECTION GNU libraries +START-INFO-DIR-ENTRY +* Libc: (libc). C library. +END-INFO-DIR-ENTRY + + This file documents the GNU C library. + + This is Edition 0.09 DRAFT, last updated 28 Aug 1999, of `The GNU C +Library Reference Manual', for Version 2.2 Beta. + + Copyright (C) 1993, '94, '95, '96, '97, '98, '99 Free Software +Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided also +that the section entitled "GNU Library General Public License" is +included exactly as in the original, and provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that the text of the translation of the section +entitled "GNU Library General Public License" must be approved for +accuracy by the Foundation. + + +File: libc.info, Node: File Index, Prev: Variable Index, Up: Top + +Program and File Index +********************** + +* Menu: + +* -lbsd-compat <1>: Process Group Functions. +* -lbsd-compat: Feature Test Macros. +* /etc/group: Group Database. +* /etc/hosts: Host Names. +* /etc/localtime: TZ Variable. +* /etc/networks: Networks Database. +* /etc/passwd: User Database. +* /etc/protocols: Protocols Database. +* /etc/services: Services Database. +* /share/lib/zoneinfo: TZ Variable. +* argp.h: Argp. +* argz.h: Argz Functions. +* arpa/inet.h: Host Address Functions. +* assert.h: Consistency Checking. +* bsd-compat <1>: Process Group Functions. +* bsd-compat: Feature Test Macros. +* cd: Working Directory. +* chgrp: File Owner. +* chown: File Owner. +* complex.h <1>: Operations on Complex. +* complex.h <2>: Complex Numbers. +* complex.h: Mathematics. +* ctype.h <1>: Case Conversion. +* ctype.h <2>: Classification of Characters. +* ctype.h: Character Handling. +* dirent.h <1>: Random Access Directory. +* dirent.h <2>: Reading/Closing Directory. +* dirent.h <3>: Opening a Directory. +* dirent.h <4>: Directory Entries. +* dirent.h: Reserved Names. +* envz.h: Envz Functions. +* errno.h <1>: Error Codes. +* errno.h <2>: Checking for Errors. +* errno.h: Error Reporting. +* execinfo.h: Backtraces. +* fcntl.h <1>: Interrupt Input. +* fcntl.h <2>: File Locks. +* fcntl.h <3>: File Status Flags. +* fcntl.h <4>: Descriptor Flags. +* fcntl.h <5>: Duplicating Descriptors. +* fcntl.h <6>: Control Operations. +* fcntl.h <7>: Opening and Closing Files. +* fcntl.h: Reserved Names. +* float.h: Floating Point Parameters. +* fnmatch.h: Wildcard Matching. +* gcc: ISO C. +* gconv.h: glibc iconv Implementation. +* grp.h <1>: Group Data Structure. +* grp.h <2>: Setting Groups. +* grp.h: Reserved Names. +* hostid: Host Identification. +* hostname: Host Identification. +* iconv.h: Generic Conversion Interface. +* kill: Termination Signals. +* ksh: Wildcard Matching. +* langinfo.h: The Elegant and Fast Way. +* limits.h <1>: Width of Type. +* limits.h <2>: Limits for Files. +* limits.h <3>: General Limits. +* limits.h <4>: Selecting the Conversion. +* limits.h: Reserved Names. +* locale: Setting the Locale. +* locale.h <1>: The Lame Way to Locale Data. +* locale.h: Setting the Locale. +* localtime: TZ Variable. +* ls: File Attributes. +* malloc.h <1>: Statistics of Malloc. +* malloc.h <2>: Hooks for Malloc. +* malloc.h: Malloc Tunable Parameters. +* math.h <1>: Rounding Functions. +* math.h <2>: Normalization Functions. +* math.h <3>: Absolute Value. +* math.h <4>: Floating Point Classes. +* math.h: Mathematics. +* mcheck.h: Heap Consistency Checking. +* mkdir: Creating Directories. +* netdb.h <1>: Networks Database. +* netdb.h <2>: Protocols Database. +* netdb.h <3>: Services Database. +* netdb.h: Host Names. +* netinet/in.h <1>: Byte Order. +* netinet/in.h <2>: Ports. +* netinet/in.h <3>: Host Address Data Type. +* netinet/in.h: Internet Address Formats. +* obstack.h: Creating Obstacks. +* printf.h <1>: Conversion Specifier Options. +* printf.h: Registering New Conversions. +* pwd.h <1>: User Data Structure. +* pwd.h: Reserved Names. +* setjmp.h <1>: Non-Local Exits and Signals. +* setjmp.h: Non-Local Details. +* sh: Running a Command. +* signal.h <1>: BSD Signal Handling. +* signal.h <2>: Checking for Pending Signals. +* signal.h <3>: Process Signal Mask. +* signal.h <4>: Signal Sets. +* signal.h <5>: Signaling Another Process. +* signal.h <6>: Signaling Yourself. +* signal.h <7>: Flags for Sigaction. +* signal.h <8>: Advanced Signal Handling. +* signal.h <9>: Basic Signal Handling. +* signal.h <10>: Standard Signals. +* signal.h: Reserved Names. +* stdarg.h <1>: Argument Macros. +* stdarg.h: Receiving Arguments. +* stddef.h: Important Data Types. +* stdint.h: Integers. +* stdio.h <1>: Who Logged In. +* stdio.h <2>: Identifying the Terminal. +* stdio.h <3>: Signal Messages. +* stdio.h <4>: Temporary Files. +* stdio.h <5>: Deleting Files. +* stdio.h <6>: Descriptors and Streams. +* stdio.h <7>: Streams and Cookies. +* stdio.h <8>: String Streams. +* stdio.h <9>: Controlling Buffering. +* stdio.h <10>: Flushing Buffers. +* stdio.h <11>: Portable Positioning. +* stdio.h <12>: File Positioning. +* stdio.h <13>: Formatted Input Functions. +* stdio.h <14>: Variable Arguments Output. +* stdio.h <15>: Formatted Output Functions. +* stdio.h <16>: Block Input/Output. +* stdio.h <17>: Character Input. +* stdio.h <18>: Simple Output. +* stdio.h <19>: Opening Streams. +* stdio.h <20>: Standard Streams. +* stdio.h: Streams. +* stdlib.h <1>: Running a Command. +* stdlib.h <2>: Aborting a Program. +* stdlib.h <3>: Exit Status. +* stdlib.h <4>: Environment Access. +* stdlib.h <5>: Parsing of Floats. +* stdlib.h <6>: Parsing of Integers. +* stdlib.h <7>: Absolute Value. +* stdlib.h <8>: Integer Division. +* stdlib.h <9>: SVID Random. +* stdlib.h <10>: BSD Random. +* stdlib.h <11>: ISO Random. +* stdlib.h <12>: Allocation. +* stdlib.h <13>: Array Sort Function. +* stdlib.h <14>: Array Search Function. +* stdlib.h <15>: Non-reentrant Character Conversion. +* stdlib.h <16>: Selecting the Conversion. +* stdlib.h <17>: Variable Size Automatic. +* stdlib.h <18>: Aligned Memory Blocks. +* stdlib.h <19>: Allocating Cleared Space. +* stdlib.h <20>: Changing Block Size. +* stdlib.h <21>: Freeing after Malloc. +* stdlib.h: Basic Allocation. +* string.h <1>: Signal Messages. +* string.h <2>: Trivial Encryption. +* string.h <3>: Finding Tokens in a String. +* string.h <4>: Search Functions. +* string.h <5>: Collation Functions. +* string.h <6>: String/Array Comparison. +* string.h <7>: Copying and Concatenation. +* string.h: String Length. +* sys/param.h: Host Identification. +* sys/resource.h <1>: Traditional Scheduling Functions. +* sys/resource.h <2>: Limits on Resources. +* sys/resource.h: Resource Usage. +* sys/socket.h <1>: Socket-Level Options. +* sys/socket.h <2>: Socket Option Functions. +* sys/socket.h <3>: Sending Datagrams. +* sys/socket.h <4>: Socket Data Options. +* sys/socket.h <5>: Receiving Data. +* sys/socket.h <6>: Sending Data. +* sys/socket.h <7>: Socket Pairs. +* sys/socket.h <8>: Closing a Socket. +* sys/socket.h <9>: Creating a Socket. +* sys/socket.h <10>: Internet Namespace. +* sys/socket.h <11>: Local Namespace Details. +* sys/socket.h <12>: Reading Address. +* sys/socket.h <13>: Setting Address. +* sys/socket.h <14>: Address Formats. +* sys/socket.h: Communication Styles. +* sys/stat.h <1>: FIFO Special Files. +* sys/stat.h <2>: Making Special Files. +* sys/stat.h <3>: Setting Permissions. +* sys/stat.h <4>: Permission Bits. +* sys/stat.h <5>: Testing File Type. +* sys/stat.h <6>: Attribute Meanings. +* sys/stat.h <7>: Creating Directories. +* sys/stat.h: Reserved Names. +* sys/time.h <1>: Setting an Alarm. +* sys/time.h <2>: High-Resolution Calendar. +* sys/time.h: File Times. +* sys/times.h <1>: Processor Time. +* sys/times.h: Reserved Names. +* sys/timex.h: High Accuracy Clock. +* sys/types.h <1>: Setting Groups. +* sys/types.h <2>: Setting User ID. +* sys/types.h <3>: Reading Persona. +* sys/types.h <4>: Terminal Access Functions. +* sys/types.h <5>: Process Group Functions. +* sys/types.h <6>: Process Identification. +* sys/types.h: Waiting for I/O. +* sys/un.h: Local Namespace Details. +* sys/utsname.h: Platform Type. +* sys/vlimit.h: Limits on Resources. +* sys/vtimes.h: Resource Usage. +* sys/wait.h <1>: BSD Wait Functions. +* sys/wait.h <2>: Process Completion Status. +* sys/wait.h: Process Completion. +* termios.h <1>: Terminal Modes. +* termios.h: Reserved Names. +* time.h <1>: TZ Variable. +* time.h <2>: Formatting Calendar Time. +* time.h <3>: Simple Calendar Time. +* time.h <4>: CPU Time. +* time.h: File Times. +* ulimit.h: Limits on Resources. +* umask: Setting Permissions. +* unistd.h <1>: Options for Files. +* unistd.h <2>: System Options. +* unistd.h <3>: Host Identification. +* unistd.h <4>: Who Logged In. +* unistd.h <5>: Setting Groups. +* unistd.h <6>: Setting User ID. +* unistd.h <7>: Reading Persona. +* unistd.h <8>: Terminal Access Functions. +* unistd.h <9>: Process Group Functions. +* unistd.h <10>: Executing a File. +* unistd.h <11>: Creating a Process. +* unistd.h <12>: Process Identification. +* unistd.h <13>: Termination Internals. +* unistd.h <14>: Using Getopt. +* unistd.h <15>: Setting an Alarm. +* unistd.h <16>: Is It a Terminal. +* unistd.h <17>: Creating a Pipe. +* unistd.h <18>: Testing File Access. +* unistd.h <19>: File Owner. +* unistd.h <20>: Deleting Files. +* unistd.h <21>: Symbolic Links. +* unistd.h <22>: Hard Links. +* unistd.h <23>: Working Directory. +* unistd.h <24>: Duplicating Descriptors. +* unistd.h <25>: Descriptors and Streams. +* unistd.h <26>: I/O Primitives. +* unistd.h: Opening and Closing Files. +* utime.h: File Times. +* utmp.h <1>: Logging In and Out. +* utmp.h: Manipulating the Database. +* utmpx.h: XPG Functions. +* varargs.h: Old Varargs. +* wchar.h <1>: Parsing of Integers. +* wchar.h <2>: Character Input. +* wchar.h <3>: Simple Output. +* wchar.h <4>: Converting Strings. +* wchar.h <5>: Converting a Character. +* wchar.h <6>: Keeping the state. +* wchar.h <7>: Extended Char Intro. +* wchar.h <8>: Collation Functions. +* wchar.h: Copying and Concatenation. +* wctype.h <1>: Wide Character Case Conversion. +* wctype.h: Classification of Wide Characters. +* zoneinfo: TZ Variable. + + diff -durpNa glibc-2.2.2/manual/libc.info-9 glibc-2.2.3/manual/libc.info-9 --- glibc-2.2.2/manual/libc.info-9 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-9 Wed Apr 25 14:55:22 2001 @@ -872,12 +872,12 @@ then we run into the problems discussed int result = 0; iconv_t cd; - cd = iconv_open ("UCS-4", charset); + cd = iconv_open ("WCHAR_T", charset); if (cd == (iconv_t) -1) { /* Something went wrong. */ if (errno == EINVAL) - error (0, 0, "conversion from '%s' to 'UCS-4' not available", + error (0, 0, "conversion from '%s' to wchar_t not available", charset); else perror ("iconv_open"); diff -durpNa glibc-2.2.2/manual/libc.pg glibc-2.2.3/manual/libc.pg --- glibc-2.2.2/manual/libc.pg Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.pg Wed Apr 25 16:06:31 2001 @@ -83,6 +83,7 @@ \entry{stdlib.h}{204}{\code {stdlib.h}} \entry{stdlib.h}{204}{\code {stdlib.h}} \entry{fnmatch.h}{213}{\code {fnmatch.h}} +\entry{ksh}{214}{\code {ksh}} \entry{stdio.h}{239}{\code {stdio.h}} \entry{stdio.h}{239}{\code {stdio.h}} \entry{stdio.h}{240}{\code {stdio.h}} @@ -123,27 +124,27 @@ \entry{dirent.h}{367}{\code {dirent.h}} \entry{unistd.h}{374}{\code {unistd.h}} \entry{unistd.h}{375}{\code {unistd.h}} -\entry{unistd.h}{376}{\code {unistd.h}} \entry{unistd.h}{377}{\code {unistd.h}} -\entry{stdio.h}{377}{\code {stdio.h}} -\entry{mkdir}{379}{\code {mkdir}} -\entry{sys/stat.h}{379}{\code {sys/stat.h}} -\entry{ls}{379}{\code {ls}} -\entry{sys/stat.h}{379}{\code {sys/stat.h}} -\entry{sys/stat.h}{385}{\code {sys/stat.h}} -\entry{chown}{387}{\code {chown}} -\entry{chgrp}{387}{\code {chgrp}} -\entry{unistd.h}{387}{\code {unistd.h}} -\entry{sys/stat.h}{388}{\code {sys/stat.h}} -\entry{umask}{390}{\code {umask}} -\entry{sys/stat.h}{390}{\code {sys/stat.h}} -\entry{unistd.h}{392}{\code {unistd.h}} +\entry{unistd.h}{378}{\code {unistd.h}} +\entry{stdio.h}{378}{\code {stdio.h}} +\entry{mkdir}{380}{\code {mkdir}} +\entry{sys/stat.h}{380}{\code {sys/stat.h}} +\entry{ls}{380}{\code {ls}} +\entry{sys/stat.h}{380}{\code {sys/stat.h}} +\entry{sys/stat.h}{386}{\code {sys/stat.h}} +\entry{chown}{388}{\code {chown}} +\entry{chgrp}{388}{\code {chgrp}} +\entry{unistd.h}{388}{\code {unistd.h}} +\entry{sys/stat.h}{389}{\code {sys/stat.h}} +\entry{umask}{391}{\code {umask}} +\entry{sys/stat.h}{391}{\code {sys/stat.h}} \entry{unistd.h}{393}{\code {unistd.h}} -\entry{time.h}{393}{\code {time.h}} -\entry{utime.h}{393}{\code {utime.h}} -\entry{sys/time.h}{394}{\code {sys/time.h}} -\entry{sys/stat.h}{397}{\code {sys/stat.h}} -\entry{stdio.h}{398}{\code {stdio.h}} +\entry{unistd.h}{394}{\code {unistd.h}} +\entry{time.h}{394}{\code {time.h}} +\entry{utime.h}{394}{\code {utime.h}} +\entry{sys/time.h}{395}{\code {sys/time.h}} +\entry{sys/stat.h}{398}{\code {sys/stat.h}} +\entry{stdio.h}{399}{\code {stdio.h}} \entry{unistd.h}{403}{\code {unistd.h}} \entry{sys/stat.h}{407}{\code {sys/stat.h}} \entry{sys/socket.h}{410}{\code {sys/socket.h}} @@ -182,105 +183,106 @@ \entry{complex.h}{493}{\code {complex.h}} \entry{stdlib.h}{512}{\code {stdlib.h}} \entry{stdlib.h}{512}{\code {stdlib.h}} -\entry{stdint.h}{519}{\code {stdint.h}} -\entry{stdlib.h}{520}{\code {stdlib.h}} -\entry{math.h}{522}{\code {math.h}} -\entry{math.h}{533}{\code {math.h}} -\entry{stdlib.h}{533}{\code {stdlib.h}} -\entry{math.h}{534}{\code {math.h}} +\entry{stdlib.h}{514}{\code {stdlib.h}} +\entry{stdint.h}{521}{\code {stdint.h}} +\entry{stdlib.h}{522}{\code {stdlib.h}} +\entry{math.h}{524}{\code {math.h}} \entry{math.h}{535}{\code {math.h}} -\entry{complex.h}{541}{\code {complex.h}} -\entry{complex.h}{541}{\code {complex.h}} -\entry{stdlib.h}{542}{\code {stdlib.h}} -\entry{wchar.h}{542}{\code {wchar.h}} -\entry{stdlib.h}{547}{\code {stdlib.h}} -\entry{time.h}{553}{\code {time.h}} -\entry{sys/times.h}{554}{\code {sys/times.h}} -\entry{time.h}{556}{\code {time.h}} -\entry{sys/time.h}{556}{\code {sys/time.h}} -\entry{sys/timex.h}{561}{\code {sys/timex.h}} -\entry{time.h}{564}{\code {time.h}} -\entry{time.h}{577}{\code {time.h}} -\entry{/etc/localtime}{578}{\code {/etc/localtime}} -\entry{localtime}{578}{\code {localtime}} -\entry{/share/lib/zoneinfo}{578}{\code {/share/lib/zoneinfo}} -\entry{zoneinfo}{578}{\code {zoneinfo}} -\entry{unistd.h}{581}{\code {unistd.h}} -\entry{sys/time.h}{581}{\code {sys/time.h}} -\entry{sys/resource.h}{585}{\code {sys/resource.h}} -\entry{sys/vtimes.h}{586}{\code {sys/vtimes.h}} -\entry{sys/resource.h}{588}{\code {sys/resource.h}} -\entry{ulimit.h}{590}{\code {ulimit.h}} -\entry{sys/vlimit.h}{591}{\code {sys/vlimit.h}} -\entry{sys/resource.h}{598}{\code {sys/resource.h}} -\entry{setjmp.h}{606}{\code {setjmp.h}} -\entry{setjmp.h}{607}{\code {setjmp.h}} -\entry{signal.h}{611}{\code {signal.h}} -\entry{kill}{614}{\code {kill}} -\entry{string.h}{620}{\code {string.h}} -\entry{stdio.h}{620}{\code {stdio.h}} -\entry{signal.h}{620}{\code {signal.h}} -\entry{signal.h}{622}{\code {signal.h}} -\entry{signal.h}{625}{\code {signal.h}} -\entry{signal.h}{638}{\code {signal.h}} -\entry{signal.h}{639}{\code {signal.h}} -\entry{signal.h}{643}{\code {signal.h}} -\entry{signal.h}{644}{\code {signal.h}} +\entry{stdlib.h}{535}{\code {stdlib.h}} +\entry{math.h}{536}{\code {math.h}} +\entry{math.h}{537}{\code {math.h}} +\entry{complex.h}{543}{\code {complex.h}} +\entry{complex.h}{543}{\code {complex.h}} +\entry{stdlib.h}{544}{\code {stdlib.h}} +\entry{wchar.h}{544}{\code {wchar.h}} +\entry{stdlib.h}{549}{\code {stdlib.h}} +\entry{time.h}{555}{\code {time.h}} +\entry{sys/times.h}{556}{\code {sys/times.h}} +\entry{time.h}{558}{\code {time.h}} +\entry{sys/time.h}{558}{\code {sys/time.h}} +\entry{sys/timex.h}{563}{\code {sys/timex.h}} +\entry{time.h}{566}{\code {time.h}} +\entry{time.h}{579}{\code {time.h}} +\entry{/etc/localtime}{580}{\code {/etc/localtime}} +\entry{localtime}{580}{\code {localtime}} +\entry{/share/lib/zoneinfo}{580}{\code {/share/lib/zoneinfo}} +\entry{zoneinfo}{580}{\code {zoneinfo}} +\entry{unistd.h}{583}{\code {unistd.h}} +\entry{sys/time.h}{583}{\code {sys/time.h}} +\entry{sys/resource.h}{587}{\code {sys/resource.h}} +\entry{sys/vtimes.h}{588}{\code {sys/vtimes.h}} +\entry{sys/resource.h}{590}{\code {sys/resource.h}} +\entry{ulimit.h}{592}{\code {ulimit.h}} +\entry{sys/vlimit.h}{593}{\code {sys/vlimit.h}} +\entry{sys/resource.h}{600}{\code {sys/resource.h}} +\entry{setjmp.h}{608}{\code {setjmp.h}} +\entry{setjmp.h}{609}{\code {setjmp.h}} +\entry{signal.h}{619}{\code {signal.h}} +\entry{kill}{622}{\code {kill}} +\entry{string.h}{628}{\code {string.h}} +\entry{stdio.h}{628}{\code {stdio.h}} +\entry{signal.h}{628}{\code {signal.h}} +\entry{signal.h}{630}{\code {signal.h}} +\entry{signal.h}{633}{\code {signal.h}} +\entry{signal.h}{646}{\code {signal.h}} \entry{signal.h}{647}{\code {signal.h}} -\entry{signal.h}{654}{\code {signal.h}} -\entry{unistd.h}{659}{\code {unistd.h}} -\entry{argp.h}{666}{\code {argp.h}} -\entry{stdlib.h}{693}{\code {stdlib.h}} -\entry{stdlib.h}{699}{\code {stdlib.h}} +\entry{signal.h}{651}{\code {signal.h}} +\entry{signal.h}{652}{\code {signal.h}} +\entry{signal.h}{655}{\code {signal.h}} +\entry{signal.h}{662}{\code {signal.h}} +\entry{unistd.h}{667}{\code {unistd.h}} +\entry{argp.h}{674}{\code {argp.h}} \entry{stdlib.h}{701}{\code {stdlib.h}} -\entry{unistd.h}{701}{\code {unistd.h}} -\entry{sh}{703}{\code {sh}} -\entry{stdlib.h}{703}{\code {stdlib.h}} -\entry{sys/types.h}{704}{\code {sys/types.h}} -\entry{unistd.h}{704}{\code {unistd.h}} -\entry{unistd.h}{705}{\code {unistd.h}} -\entry{unistd.h}{706}{\code {unistd.h}} -\entry{sys/wait.h}{708}{\code {sys/wait.h}} -\entry{sys/wait.h}{711}{\code {sys/wait.h}} -\entry{sys/wait.h}{712}{\code {sys/wait.h}} -\entry{stdio.h}{730}{\code {stdio.h}} -\entry{unistd.h}{730}{\code {unistd.h}} -\entry{sys/types.h}{730}{\code {sys/types.h}} -\entry{-lbsd-compat}{731}{\code {-lbsd-compat}} -\entry{bsd-compat}{731}{\code {bsd-compat}} -\entry{unistd.h}{732}{\code {unistd.h}} -\entry{sys/types.h}{732}{\code {sys/types.h}} -\entry{unistd.h}{747}{\code {unistd.h}} -\entry{sys/types.h}{747}{\code {sys/types.h}} -\entry{unistd.h}{748}{\code {unistd.h}} -\entry{sys/types.h}{748}{\code {sys/types.h}} -\entry{unistd.h}{749}{\code {unistd.h}} -\entry{sys/types.h}{749}{\code {sys/types.h}} -\entry{grp.h}{750}{\code {grp.h}} -\entry{stdio.h}{754}{\code {stdio.h}} -\entry{unistd.h}{754}{\code {unistd.h}} -\entry{utmp.h}{755}{\code {utmp.h}} -\entry{utmpx.h}{760}{\code {utmpx.h}} -\entry{utmp.h}{762}{\code {utmp.h}} -\entry{/etc/passwd}{763}{\code {/etc/passwd}} -\entry{pwd.h}{763}{\code {pwd.h}} -\entry{/etc/group}{766}{\code {/etc/group}} -\entry{grp.h}{766}{\code {grp.h}} -\entry{hostname}{773}{\code {hostname}} -\entry{hostid}{773}{\code {hostid}} -\entry{unistd.h}{773}{\code {unistd.h}} -\entry{sys/param.h}{774}{\code {sys/param.h}} -\entry{sys/utsname.h}{775}{\code {sys/utsname.h}} -\entry{limits.h}{789}{\code {limits.h}} -\entry{unistd.h}{790}{\code {unistd.h}} -\entry{limits.h}{802}{\code {limits.h}} -\entry{unistd.h}{803}{\code {unistd.h}} -\entry{unistd.h}{804}{\code {unistd.h}} -\entry{execinfo.h}{819}{\code {execinfo.h}} -\entry{assert.h}{845}{\code {assert.h}} -\entry{stdarg.h}{848}{\code {stdarg.h}} -\entry{stdarg.h}{850}{\code {stdarg.h}} -\entry{varargs.h}{852}{\code {varargs.h}} -\entry{stddef.h}{853}{\code {stddef.h}} -\entry{limits.h}{854}{\code {limits.h}} -\entry{float.h}{857}{\code {float.h}} +\entry{stdlib.h}{707}{\code {stdlib.h}} +\entry{stdlib.h}{709}{\code {stdlib.h}} +\entry{unistd.h}{709}{\code {unistd.h}} +\entry{sh}{711}{\code {sh}} +\entry{stdlib.h}{711}{\code {stdlib.h}} +\entry{sys/types.h}{712}{\code {sys/types.h}} +\entry{unistd.h}{712}{\code {unistd.h}} +\entry{unistd.h}{713}{\code {unistd.h}} +\entry{unistd.h}{714}{\code {unistd.h}} +\entry{sys/wait.h}{716}{\code {sys/wait.h}} +\entry{sys/wait.h}{719}{\code {sys/wait.h}} +\entry{sys/wait.h}{720}{\code {sys/wait.h}} +\entry{stdio.h}{738}{\code {stdio.h}} +\entry{unistd.h}{738}{\code {unistd.h}} +\entry{sys/types.h}{738}{\code {sys/types.h}} +\entry{-lbsd-compat}{739}{\code {-lbsd-compat}} +\entry{bsd-compat}{739}{\code {bsd-compat}} +\entry{unistd.h}{740}{\code {unistd.h}} +\entry{sys/types.h}{740}{\code {sys/types.h}} +\entry{unistd.h}{755}{\code {unistd.h}} +\entry{sys/types.h}{755}{\code {sys/types.h}} +\entry{unistd.h}{756}{\code {unistd.h}} +\entry{sys/types.h}{756}{\code {sys/types.h}} +\entry{unistd.h}{757}{\code {unistd.h}} +\entry{sys/types.h}{757}{\code {sys/types.h}} +\entry{grp.h}{758}{\code {grp.h}} +\entry{stdio.h}{762}{\code {stdio.h}} +\entry{unistd.h}{762}{\code {unistd.h}} +\entry{utmp.h}{763}{\code {utmp.h}} +\entry{utmpx.h}{768}{\code {utmpx.h}} +\entry{utmp.h}{770}{\code {utmp.h}} +\entry{/etc/passwd}{771}{\code {/etc/passwd}} +\entry{pwd.h}{771}{\code {pwd.h}} +\entry{/etc/group}{774}{\code {/etc/group}} +\entry{grp.h}{774}{\code {grp.h}} +\entry{hostname}{781}{\code {hostname}} +\entry{hostid}{781}{\code {hostid}} +\entry{unistd.h}{781}{\code {unistd.h}} +\entry{sys/param.h}{782}{\code {sys/param.h}} +\entry{sys/utsname.h}{783}{\code {sys/utsname.h}} +\entry{limits.h}{797}{\code {limits.h}} +\entry{unistd.h}{798}{\code {unistd.h}} +\entry{limits.h}{810}{\code {limits.h}} +\entry{unistd.h}{811}{\code {unistd.h}} +\entry{unistd.h}{812}{\code {unistd.h}} +\entry{execinfo.h}{827}{\code {execinfo.h}} +\entry{assert.h}{853}{\code {assert.h}} +\entry{stdarg.h}{856}{\code {stdarg.h}} +\entry{stdarg.h}{858}{\code {stdarg.h}} +\entry{varargs.h}{860}{\code {varargs.h}} +\entry{stddef.h}{861}{\code {stddef.h}} +\entry{limits.h}{862}{\code {limits.h}} +\entry{float.h}{865}{\code {float.h}} diff -durpNa glibc-2.2.2/manual/libc.pgs glibc-2.2.3/manual/libc.pgs --- glibc-2.2.2/manual/libc.pgs Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.pgs Wed Apr 25 16:05:56 2001 @@ -1,60 +1,61 @@ \initial {-} -\entry {\code {-lbsd-compat}}{8, 731} +\entry {\code {-lbsd-compat}}{8, 739} \initial {/} -\entry {\code {/etc/group}}{766} +\entry {\code {/etc/group}}{774} \entry {\code {/etc/hosts}}{423} -\entry {\code {/etc/localtime}}{578} +\entry {\code {/etc/localtime}}{580} \entry {\code {/etc/networks}}{454} -\entry {\code {/etc/passwd}}{763} +\entry {\code {/etc/passwd}}{771} \entry {\code {/etc/protocols}}{429} \entry {\code {/etc/services}}{427} -\entry {\code {/share/lib/zoneinfo}}{578} +\entry {\code {/share/lib/zoneinfo}}{580} \initial {A} -\entry {\code {argp.h}}{666} +\entry {\code {argp.h}}{674} \entry {\code {argz.h}}{112} \entry {\code {arpa/inet.h}}{421} -\entry {\code {assert.h}}{845} +\entry {\code {assert.h}}{853} \initial {B} -\entry {\code {bsd-compat}}{8, 731} +\entry {\code {bsd-compat}}{8, 739} \initial {C} \entry {\code {cd}}{361} -\entry {\code {chgrp}}{387} -\entry {\code {chown}}{387} -\entry {\code {complex.h}}{493, 541} +\entry {\code {chgrp}}{388} +\entry {\code {chown}}{388} +\entry {\code {complex.h}}{493, 543} \entry {\code {ctype.h}}{67, 69} \initial {D} \entry {\code {dirent.h}}{7, 363, 364, 365, 367} \initial {E} \entry {\code {envz.h}}{114} \entry {\code {errno.h}}{15, 16} -\entry {\code {execinfo.h}}{819} +\entry {\code {execinfo.h}}{827} \initial {F} \entry {\code {fcntl.h}}{7, 313, 345, 346, 348, 349, 355, 358} -\entry {\code {float.h}}{857} +\entry {\code {float.h}}{865} \entry {\code {fnmatch.h}}{213} \initial {G} \entry {\code {gcc}}{2} \entry {\code {gconv.h}}{149} -\entry {\code {grp.h}}{7, 750, 766} +\entry {\code {grp.h}}{7, 758, 774} \initial {H} -\entry {\code {hostid}}{773} -\entry {\code {hostname}}{773} +\entry {\code {hostid}}{781} +\entry {\code {hostname}}{781} \initial {I} \entry {\code {iconv.h}}{140, 141, 142} \initial {K} -\entry {\code {kill}}{614} +\entry {\code {kill}}{622} +\entry {\code {ksh}}{214} \initial {L} \entry {\code {langinfo.h}}{170} -\entry {\code {limits.h}}{7, 122, 789, 802, 854} +\entry {\code {limits.h}}{7, 122, 797, 810, 862} \entry {\code {locale}}{163} \entry {\code {locale.h}}{163, 166} -\entry {\code {localtime}}{578} -\entry {\code {ls}}{379} +\entry {\code {localtime}}{580} +\entry {\code {ls}}{380} \initial {M} \entry {\code {malloc.h}}{39, 41, 44} -\entry {\code {math.h}}{493, 522, 533, 534, 535} +\entry {\code {math.h}}{493, 524, 535, 536, 537} \entry {\code {mcheck.h}}{39} -\entry {\code {mkdir}}{379} +\entry {\code {mkdir}}{380} \initial {N} \entry {\code {netdb.h}}{423, 427, 429, 454} \entry {\code {netinet/in.h}}{418, 420, 427, 429} @@ -62,44 +63,44 @@ \entry {\code {obstack.h}}{50} \initial {P} \entry {\code {printf.h}}{276} -\entry {\code {pwd.h}}{7, 763} +\entry {\code {pwd.h}}{7, 771} \initial {S} -\entry {\code {setjmp.h}}{606, 607} -\entry {\code {sh}}{703} -\entry {\code {signal.h}}{7, 611, 620, 622, 625, 638, 639, 643, 644, 647, 654} -\entry {\code {stdarg.h}}{848, 850} -\entry {\code {stddef.h}}{853} -\entry {\code {stdint.h}}{519} -\entry {\code {stdio.h}}{239, 240, 249, 251, 258, 267, 271, 289, 293, 296, 298, 299, 302, 305, 323, 377, 398, 620, 730, 754} -\entry {\code {stdlib.h}}{34, 35, 36, 37, 38, 60, 122, 136, 204, 481, 512, 520, 533, 542, 547, 693, 699, 701, 703} -\entry {\code {string.h}}{79, 81, 92, 95, 99, 104, 109, 620} -\entry {\code {sys/param.h}}{774} -\entry {\code {sys/resource.h}}{585, 588, 598} +\entry {\code {setjmp.h}}{608, 609} +\entry {\code {sh}}{711} +\entry {\code {signal.h}}{7, 619, 628, 630, 633, 646, 647, 651, 652, 655, 662} +\entry {\code {stdarg.h}}{856, 858} +\entry {\code {stddef.h}}{861} +\entry {\code {stdint.h}}{521} +\entry {\code {stdio.h}}{239, 240, 249, 251, 258, 267, 271, 289, 293, 296, 298, 299, 302, 305, 323, 378, 399, 628, 738, 762} +\entry {\code {stdlib.h}}{34, 35, 36, 37, 38, 60, 122, 136, 204, 481, 512, 514, 522, 535, 544, 549, 701, 707, 709, 711} +\entry {\code {string.h}}{79, 81, 92, 95, 99, 104, 109, 628} +\entry {\code {sys/param.h}}{782} +\entry {\code {sys/resource.h}}{587, 590, 600} \entry {\code {sys/socket.h}}{410, 412, 413, 415, 417, 432, 433, 438, 439, 440, 447, 452, 453} -\entry {\code {sys/stat.h}}{7, 379, 385, 388, 390, 397, 407} -\entry {\code {sys/time.h}}{394, 556, 581} -\entry {\code {sys/times.h}}{7, 554} -\entry {\code {sys/timex.h}}{561} -\entry {\code {sys/types.h}}{330, 704, 730, 732, 747, 748, 749} +\entry {\code {sys/stat.h}}{7, 380, 386, 389, 391, 398, 407} +\entry {\code {sys/time.h}}{395, 558, 583} +\entry {\code {sys/times.h}}{7, 556} +\entry {\code {sys/timex.h}}{563} +\entry {\code {sys/types.h}}{330, 712, 738, 740, 755, 756, 757} \entry {\code {sys/un.h}}{415} -\entry {\code {sys/utsname.h}}{775} -\entry {\code {sys/vlimit.h}}{591} -\entry {\code {sys/vtimes.h}}{586} -\entry {\code {sys/wait.h}}{708, 711, 712} +\entry {\code {sys/utsname.h}}{783} +\entry {\code {sys/vlimit.h}}{593} +\entry {\code {sys/vtimes.h}}{588} +\entry {\code {sys/wait.h}}{716, 719, 720} \initial {T} \entry {\code {termios.h}}{7, 459} -\entry {\code {time.h}}{393, 553, 556, 564, 577} +\entry {\code {time.h}}{394, 555, 558, 566, 579} \initial {U} -\entry {\code {ulimit.h}}{590} -\entry {\code {umask}}{390} -\entry {\code {unistd.h}}{313, 316, 323, 346, 361, 374, 375, 376, 377, 387, 392, 393, 403, 457, 581, 659, 701, 704, 705, 706, 730, 732, 747, 748, 749, 754, 773, 790, 803, 804} -\entry {\code {utime.h}}{393} -\entry {\code {utmp.h}}{755, 762} -\entry {\code {utmpx.h}}{760} +\entry {\code {ulimit.h}}{592} +\entry {\code {umask}}{391} +\entry {\code {unistd.h}}{313, 316, 323, 346, 361, 374, 375, 377, 378, 388, 393, 394, 403, 457, 583, 667, 709, 712, 713, 714, 738, 740, 755, 756, 757, 762, 781, 798, 811, 812} +\entry {\code {utime.h}}{394} +\entry {\code {utmp.h}}{763, 770} +\entry {\code {utmpx.h}}{768} \initial {V} -\entry {\code {varargs.h}}{852} +\entry {\code {varargs.h}}{860} \initial {W} -\entry {\code {wchar.h}}{81, 95, 118, 119, 123, 124, 125, 127, 128, 130, 131, 249, 251, 542} +\entry {\code {wchar.h}}{81, 95, 118, 119, 123, 124, 125, 127, 128, 130, 131, 249, 251, 544} \entry {\code {wctype.h}}{70, 71, 72, 73, 74, 75} \initial {Z} -\entry {\code {zoneinfo}}{578} +\entry {\code {zoneinfo}}{580} diff -durpNa glibc-2.2.2/manual/libc.tp glibc-2.2.3/manual/libc.tp --- glibc-2.2.2/manual/libc.tp Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.tp Wed Apr 25 16:06:31 2001 @@ -13,12 +13,12 @@ \entry{comparison{\_}fn{\_}t}{203}{\code {comparison_fn_t}} \entry{struct ENTRY}{209}{\code {struct ENTRY}} \entry{VISIT}{212}{\code {VISIT}} -\entry{glob{\_}t}{214}{\code {glob_t}} -\entry{glob64{\_}t}{215}{\code {glob64_t}} -\entry{regex{\_}t}{221}{\code {regex_t}} -\entry{regmatch{\_}t}{224}{\code {regmatch_t}} -\entry{regoff{\_}t}{224}{\code {regoff_t}} -\entry{wordexp{\_}t}{227}{\code {wordexp_t}} +\entry{glob{\_}t}{215}{\code {glob_t}} +\entry{glob64{\_}t}{216}{\code {glob64_t}} +\entry{regex{\_}t}{222}{\code {regex_t}} +\entry{regmatch{\_}t}{225}{\code {regmatch_t}} +\entry{regoff{\_}t}{225}{\code {regoff_t}} +\entry{wordexp{\_}t}{228}{\code {wordexp_t}} \entry{FILE}{239}{\code {FILE}} \entry{struct printf{\_}info}{276}{\code {struct printf_info}} \entry{printf{\_}function}{278}{\code {printf_function}} @@ -46,16 +46,16 @@ \entry{{\_}{\_}nftw{\_}func{\_}t}{371}{\code {__nftw_func_t}} \entry{{\_}{\_}nftw64{\_}func{\_}t}{372}{\code {__nftw64_func_t}} \entry{struct FTW}{372}{\code {struct FTW}} -\entry{struct stat}{380}{\code {struct stat}} -\entry{struct stat64}{381}{\code {struct stat64}} -\entry{mode{\_}t}{382}{\code {mode_t}} -\entry{ino{\_}t}{383}{\code {ino_t}} -\entry{ino64{\_}t}{383}{\code {ino64_t}} -\entry{dev{\_}t}{383}{\code {dev_t}} -\entry{nlink{\_}t}{383}{\code {nlink_t}} -\entry{blkcnt{\_}t}{383}{\code {blkcnt_t}} -\entry{blkcnt64{\_}t}{383}{\code {blkcnt64_t}} -\entry{struct utimbuf}{394}{\code {struct utimbuf}} +\entry{struct stat}{381}{\code {struct stat}} +\entry{struct stat64}{382}{\code {struct stat64}} +\entry{mode{\_}t}{383}{\code {mode_t}} +\entry{ino{\_}t}{384}{\code {ino_t}} +\entry{ino64{\_}t}{384}{\code {ino64_t}} +\entry{dev{\_}t}{384}{\code {dev_t}} +\entry{nlink{\_}t}{384}{\code {nlink_t}} +\entry{blkcnt{\_}t}{384}{\code {blkcnt_t}} +\entry{blkcnt64{\_}t}{384}{\code {blkcnt64_t}} +\entry{struct utimbuf}{395}{\code {struct utimbuf}} \entry{struct sockaddr}{412}{\code {struct sockaddr}} \entry{struct if{\_}nameindex}{414}{\code {struct if_nameindex}} \entry{struct sockaddr{\_}un}{416}{\code {struct sockaddr_un}} @@ -73,53 +73,55 @@ \entry{cc{\_}t}{460}{\code {cc_t}} \entry{speed{\_}t}{470}{\code {speed_t}} \entry{struct sgttyb}{477}{\code {struct sgttyb}} -\entry{div{\_}t}{520}{\code {div_t}} -\entry{ldiv{\_}t}{521}{\code {ldiv_t}} -\entry{lldiv{\_}t}{521}{\code {lldiv_t}} -\entry{imaxdiv{\_}t}{521}{\code {imaxdiv_t}} -\entry{struct timeval}{552}{\code {struct timeval}} -\entry{struct timespec}{552}{\code {struct timespec}} -\entry{clock{\_}t}{554}{\code {clock_t}} -\entry{struct tms}{554}{\code {struct tms}} -\entry{time{\_}t}{556}{\code {time_t}} -\entry{struct timezone}{557}{\code {struct timezone}} -\entry{struct tm}{559}{\code {struct tm}} -\entry{struct ntptimeval}{561}{\code {struct ntptimeval}} -\entry{struct ntptimeval}{561}{\code {struct ntptimeval}} -\entry{struct timex}{562}{\code {struct timex}} -\entry{struct timex}{562}{\code {struct timex}} -\entry{struct itimerval}{581}{\code {struct itimerval}} -\entry{struct rusage}{585}{\code {struct rusage}} -\entry{struct vtimes}{587}{\code {struct vtimes}} -\entry{struct rlimit}{588}{\code {struct rlimit}} -\entry{struct rlimit64}{589}{\code {struct rlimit64}} -\entry{struct sched{\_}param}{595}{\code {struct sched_param}} -\entry{jmp{\_}buf}{606}{\code {jmp_buf}} -\entry{sigjmp{\_}buf}{607}{\code {sigjmp_buf}} -\entry{sighandler{\_}t}{620}{\code {sighandler_t}} -\entry{struct sigaction}{623}{\code {struct sigaction}} -\entry{sig{\_}atomic{\_}t}{636}{\code {sig_atomic_t}} -\entry{sigset{\_}t}{643}{\code {sigset_t}} -\entry{struct sigaltstack}{652}{\code {struct sigaltstack}} -\entry{struct sigstack}{653}{\code {struct sigstack}} -\entry{struct sigvec}{654}{\code {struct sigvec}} -\entry{struct option}{662}{\code {struct option}} -\entry{struct argp}{668}{\code {struct argp}} -\entry{struct argp{\_}option}{669}{\code {struct argp_option}} -\entry{struct argp{\_}state}{675}{\code {struct argp_state}} -\entry{struct argp{\_}child}{677}{\code {struct argp_child}} -\entry{pid{\_}t}{704}{\code {pid_t}} -\entry{union wait}{712}{\code {union wait}} -\entry{uid{\_}t}{747}{\code {uid_t}} -\entry{gid{\_}t}{747}{\code {gid_t}} -\entry{struct exit{\_}status}{755}{\code {struct exit_status}} -\entry{struct utmp}{755}{\code {struct utmp}} -\entry{struct utmpx}{760}{\code {struct utmpx}} -\entry{struct passwd}{763}{\code {struct passwd}} -\entry{struct group}{766}{\code {struct group}} -\entry{struct utsname}{775}{\code {struct utsname}} -\entry{struct fstab}{777}{\code {struct fstab}} -\entry{struct mntent}{779}{\code {struct mntent}} -\entry{va{\_}list}{850}{\code {va_list}} -\entry{ptrdiff{\_}t}{853}{\code {ptrdiff_t}} -\entry{size{\_}t}{853}{\code {size_t}} +\entry{struct random{\_}data}{513}{\code {struct random_data}} +\entry{div{\_}t}{522}{\code {div_t}} +\entry{ldiv{\_}t}{523}{\code {ldiv_t}} +\entry{lldiv{\_}t}{523}{\code {lldiv_t}} +\entry{imaxdiv{\_}t}{523}{\code {imaxdiv_t}} +\entry{struct timeval}{554}{\code {struct timeval}} +\entry{struct timespec}{554}{\code {struct timespec}} +\entry{clock{\_}t}{556}{\code {clock_t}} +\entry{struct tms}{556}{\code {struct tms}} +\entry{time{\_}t}{558}{\code {time_t}} +\entry{struct timezone}{559}{\code {struct timezone}} +\entry{struct tm}{561}{\code {struct tm}} +\entry{struct ntptimeval}{563}{\code {struct ntptimeval}} +\entry{struct ntptimeval}{563}{\code {struct ntptimeval}} +\entry{struct timex}{564}{\code {struct timex}} +\entry{struct timex}{564}{\code {struct timex}} +\entry{struct itimerval}{583}{\code {struct itimerval}} +\entry{struct rusage}{587}{\code {struct rusage}} +\entry{struct vtimes}{589}{\code {struct vtimes}} +\entry{struct rlimit}{590}{\code {struct rlimit}} +\entry{struct rlimit64}{591}{\code {struct rlimit64}} +\entry{struct sched{\_}param}{597}{\code {struct sched_param}} +\entry{jmp{\_}buf}{608}{\code {jmp_buf}} +\entry{sigjmp{\_}buf}{609}{\code {sigjmp_buf}} +\entry{ucontext{\_}t}{610}{\code {ucontext_t}} +\entry{sighandler{\_}t}{628}{\code {sighandler_t}} +\entry{struct sigaction}{631}{\code {struct sigaction}} +\entry{sig{\_}atomic{\_}t}{644}{\code {sig_atomic_t}} +\entry{sigset{\_}t}{651}{\code {sigset_t}} +\entry{stack{\_}t}{660}{\code {stack_t}} +\entry{struct sigstack}{661}{\code {struct sigstack}} +\entry{struct sigvec}{662}{\code {struct sigvec}} +\entry{struct option}{670}{\code {struct option}} +\entry{struct argp}{676}{\code {struct argp}} +\entry{struct argp{\_}option}{677}{\code {struct argp_option}} +\entry{struct argp{\_}state}{683}{\code {struct argp_state}} +\entry{struct argp{\_}child}{685}{\code {struct argp_child}} +\entry{pid{\_}t}{712}{\code {pid_t}} +\entry{union wait}{720}{\code {union wait}} +\entry{uid{\_}t}{755}{\code {uid_t}} +\entry{gid{\_}t}{755}{\code {gid_t}} +\entry{struct exit{\_}status}{763}{\code {struct exit_status}} +\entry{struct utmp}{763}{\code {struct utmp}} +\entry{struct utmpx}{768}{\code {struct utmpx}} +\entry{struct passwd}{771}{\code {struct passwd}} +\entry{struct group}{774}{\code {struct group}} +\entry{struct utsname}{783}{\code {struct utsname}} +\entry{struct fstab}{785}{\code {struct fstab}} +\entry{struct mntent}{787}{\code {struct mntent}} +\entry{va{\_}list}{858}{\code {va_list}} +\entry{ptrdiff{\_}t}{861}{\code {ptrdiff_t}} +\entry{size{\_}t}{861}{\code {size_t}} diff -durpNa glibc-2.2.2/manual/libc.tps glibc-2.2.3/manual/libc.tps --- glibc-2.2.2/manual/libc.tps Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.tps Wed Apr 25 16:05:56 2001 @@ -4,11 +4,11 @@ \entry {\code {__nftw_func_t}}{371} \entry {\code {__nftw64_func_t}}{372} \initial {B} -\entry {\code {blkcnt_t}}{383} -\entry {\code {blkcnt64_t}}{383} +\entry {\code {blkcnt_t}}{384} +\entry {\code {blkcnt64_t}}{384} \initial {C} \entry {\code {cc_t}}{460} -\entry {\code {clock_t}}{554} +\entry {\code {clock_t}}{556} \entry {\code {comparison_fn_t}}{203} \entry {\code {cookie_close_function}}{307} \entry {\code {cookie_io_functions_t}}{305} @@ -16,9 +16,9 @@ \entry {\code {cookie_seek_function}}{307} \entry {\code {cookie_write_function}}{307} \initial {D} -\entry {\code {dev_t}}{383} +\entry {\code {dev_t}}{384} \entry {\code {DIR}}{364} -\entry {\code {div_t}}{520} +\entry {\code {div_t}}{522} \initial {E} \entry {\code {enum mcheck_status}}{40} \initial {F} @@ -27,117 +27,119 @@ \entry {\code {fpos_t}}{296} \entry {\code {fpos64_t}}{296} \initial {G} -\entry {\code {gid_t}}{747} -\entry {\code {glob_t}}{214} -\entry {\code {glob64_t}}{215} +\entry {\code {gid_t}}{755} +\entry {\code {glob_t}}{215} +\entry {\code {glob64_t}}{216} \initial {I} \entry {\code {iconv_t}}{139} -\entry {\code {imaxdiv_t}}{521} -\entry {\code {ino_t}}{383} -\entry {\code {ino64_t}}{383} +\entry {\code {imaxdiv_t}}{523} +\entry {\code {ino_t}}{384} +\entry {\code {ino64_t}}{384} \initial {J} -\entry {\code {jmp_buf}}{606} +\entry {\code {jmp_buf}}{608} \initial {L} -\entry {\code {ldiv_t}}{521} -\entry {\code {lldiv_t}}{521} +\entry {\code {ldiv_t}}{523} +\entry {\code {lldiv_t}}{523} \initial {M} \entry {\code {mbstate_t}}{123} -\entry {\code {mode_t}}{382} +\entry {\code {mode_t}}{383} \initial {N} -\entry {\code {nlink_t}}{383} +\entry {\code {nlink_t}}{384} \initial {O} \entry {\code {off_t}}{322} \entry {\code {off64_t}}{322} \initial {P} -\entry {\code {pid_t}}{704} +\entry {\code {pid_t}}{712} \entry {\code {printf_arginfo_function}}{278} \entry {\code {printf_function}}{278} -\entry {\code {ptrdiff_t}}{853} +\entry {\code {ptrdiff_t}}{861} \initial {R} -\entry {\code {regex_t}}{221} -\entry {\code {regmatch_t}}{224} -\entry {\code {regoff_t}}{224} +\entry {\code {regex_t}}{222} +\entry {\code {regmatch_t}}{225} +\entry {\code {regoff_t}}{225} \initial {S} -\entry {\code {sig_atomic_t}}{636} -\entry {\code {sighandler_t}}{620} -\entry {\code {sigjmp_buf}}{607} -\entry {\code {sigset_t}}{643} -\entry {\code {size_t}}{853} +\entry {\code {sig_atomic_t}}{644} +\entry {\code {sighandler_t}}{628} +\entry {\code {sigjmp_buf}}{609} +\entry {\code {sigset_t}}{651} +\entry {\code {size_t}}{861} \entry {\code {speed_t}}{470} \entry {\code {ssize_t}}{316} +\entry {\code {stack_t}}{660} \entry {\code {struct __gconv_step}}{149} \entry {\code {struct __gconv_step_data}}{150} \entry {\code {struct aiocb}}{334} \entry {\code {struct aiocb64}}{335} \entry {\code {struct aioinit}}{345} -\entry {\code {struct argp}}{668} -\entry {\code {struct argp_child}}{677} -\entry {\code {struct argp_option}}{669} -\entry {\code {struct argp_state}}{675} +\entry {\code {struct argp}}{676} +\entry {\code {struct argp_child}}{685} +\entry {\code {struct argp_option}}{677} +\entry {\code {struct argp_state}}{683} \entry {\code {struct dirent}}{363} \entry {\code {struct ENTRY}}{209} -\entry {\code {struct exit_status}}{755} +\entry {\code {struct exit_status}}{763} \entry {\code {struct flock}}{355} -\entry {\code {struct fstab}}{777} +\entry {\code {struct fstab}}{785} \entry {\code {struct FTW}}{372} -\entry {\code {struct group}}{766} +\entry {\code {struct group}}{774} \entry {\code {struct hostent}}{423} \entry {\code {struct if_nameindex}}{414} \entry {\code {struct in_addr}}{421} \entry {\code {struct in6_addr}}{421} \entry {\code {struct iovec}}{326} -\entry {\code {struct itimerval}}{581} +\entry {\code {struct itimerval}}{583} \entry {\code {struct lconv}}{166} \entry {\code {struct linger}}{454} \entry {\code {struct mallinfo}}{44} -\entry {\code {struct mntent}}{779} +\entry {\code {struct mntent}}{787} \entry {\code {struct netent}}{454} -\entry {\code {struct ntptimeval}}{561} +\entry {\code {struct ntptimeval}}{563} \entry {\code {struct obstack}}{50} -\entry {\code {struct option}}{662} -\entry {\code {struct passwd}}{763} +\entry {\code {struct option}}{670} +\entry {\code {struct passwd}}{771} \entry {\code {struct printf_info}}{276} \entry {\code {struct protoent}}{430} -\entry {\code {struct rlimit}}{588} -\entry {\code {struct rlimit64}}{589} -\entry {\code {struct rusage}}{585} -\entry {\code {struct sched_param}}{595} +\entry {\code {struct random_data}}{513} +\entry {\code {struct rlimit}}{590} +\entry {\code {struct rlimit64}}{591} +\entry {\code {struct rusage}}{587} +\entry {\code {struct sched_param}}{597} \entry {\code {struct servent}}{427} \entry {\code {struct sgttyb}}{477} -\entry {\code {struct sigaction}}{623} -\entry {\code {struct sigaltstack}}{652} -\entry {\code {struct sigstack}}{653} -\entry {\code {struct sigvec}}{654} +\entry {\code {struct sigaction}}{631} +\entry {\code {struct sigstack}}{661} +\entry {\code {struct sigvec}}{662} \entry {\code {struct sockaddr}}{412} \entry {\code {struct sockaddr_in}}{418} \entry {\code {struct sockaddr_in6}}{418} \entry {\code {struct sockaddr_un}}{416} -\entry {\code {struct stat}}{380} -\entry {\code {struct stat64}}{381} +\entry {\code {struct stat}}{381} +\entry {\code {struct stat64}}{382} \entry {\code {struct termios}}{459} -\entry {\code {struct timespec}}{552} -\entry {\code {struct timeval}}{552} -\entry {\code {struct timex}}{562} -\entry {\code {struct timezone}}{557} -\entry {\code {struct tm}}{559} -\entry {\code {struct tms}}{554} -\entry {\code {struct utimbuf}}{394} -\entry {\code {struct utmp}}{755} -\entry {\code {struct utmpx}}{760} -\entry {\code {struct utsname}}{775} -\entry {\code {struct vtimes}}{587} +\entry {\code {struct timespec}}{554} +\entry {\code {struct timeval}}{554} +\entry {\code {struct timex}}{564} +\entry {\code {struct timezone}}{559} +\entry {\code {struct tm}}{561} +\entry {\code {struct tms}}{556} +\entry {\code {struct utimbuf}}{395} +\entry {\code {struct utmp}}{763} +\entry {\code {struct utmpx}}{768} +\entry {\code {struct utsname}}{783} +\entry {\code {struct vtimes}}{589} \initial {T} \entry {\code {tcflag_t}}{460} -\entry {\code {time_t}}{556} +\entry {\code {time_t}}{558} \initial {U} -\entry {\code {uid_t}}{747} -\entry {\code {union wait}}{712} +\entry {\code {ucontext_t}}{610} +\entry {\code {uid_t}}{755} +\entry {\code {union wait}}{720} \initial {V} -\entry {\code {va_list}}{850} +\entry {\code {va_list}}{858} \entry {\code {VISIT}}{212} \initial {W} \entry {\code {wchar_t}}{118} \entry {\code {wctrans_t}}{74} \entry {\code {wctype_t}}{70} \entry {\code {wint_t}}{118} -\entry {\code {wordexp_t}}{227} +\entry {\code {wordexp_t}}{228} diff -durpNa glibc-2.2.2/manual/libc.vr glibc-2.2.3/manual/libc.vr --- glibc-2.2.2/manual/libc.vr Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.vr Wed Apr 25 16:06:31 2001 @@ -262,21 +262,21 @@ \entry{GLOB{\_}ABORTED}{217}{\code {GLOB_ABORTED}} \entry{GLOB{\_}NOMATCH}{217}{\code {GLOB_NOMATCH}} \entry{GLOB{\_}NOSPACE}{217}{\code {GLOB_NOSPACE}} -\entry{GLOB{\_}APPEND}{217}{\code {GLOB_APPEND}} +\entry{GLOB{\_}APPEND}{218}{\code {GLOB_APPEND}} \entry{GLOB{\_}DOOFFS}{218}{\code {GLOB_DOOFFS}} \entry{GLOB{\_}ERR}{218}{\code {GLOB_ERR}} -\entry{GLOB{\_}MARK}{218}{\code {GLOB_MARK}} -\entry{GLOB{\_}NOCHECK}{218}{\code {GLOB_NOCHECK}} -\entry{GLOB{\_}NOSORT}{218}{\code {GLOB_NOSORT}} -\entry{GLOB{\_}NOESCAPE}{218}{\code {GLOB_NOESCAPE}} +\entry{GLOB{\_}MARK}{219}{\code {GLOB_MARK}} +\entry{GLOB{\_}NOCHECK}{219}{\code {GLOB_NOCHECK}} +\entry{GLOB{\_}NOSORT}{219}{\code {GLOB_NOSORT}} +\entry{GLOB{\_}NOESCAPE}{219}{\code {GLOB_NOESCAPE}} \entry{GLOB{\_}PERIOD}{219}{\code {GLOB_PERIOD}} \entry{GLOB{\_}MAGCHAR}{219}{\code {GLOB_MAGCHAR}} \entry{GLOB{\_}ALTDIRFUNC}{219}{\code {GLOB_ALTDIRFUNC}} \entry{GLOB{\_}BRACE}{219}{\code {GLOB_BRACE}} -\entry{GLOB{\_}NOMAGIC}{219}{\code {GLOB_NOMAGIC}} +\entry{GLOB{\_}NOMAGIC}{220}{\code {GLOB_NOMAGIC}} \entry{GLOB{\_}TILDE}{220}{\code {GLOB_TILDE}} \entry{GLOB{\_}TILDE{\_}CHECK}{220}{\code {GLOB_TILDE_CHECK}} -\entry{GLOB{\_}ONLYDIR}{220}{\code {GLOB_ONLYDIR}} +\entry{GLOB{\_}ONLYDIR}{221}{\code {GLOB_ONLYDIR}} \entry{stdin}{239}{\code {stdin}} \entry{stdout}{239}{\code {stdout}} \entry{stderr}{239}{\code {stderr}} @@ -406,39 +406,40 @@ \entry{FTW{\_}MOUNT}{373}{\code {FTW_MOUNT}} \entry{FTW{\_}CHDIR}{373}{\code {FTW_CHDIR}} \entry{FTW{\_}DEPTH}{373}{\code {FTW_DEPTH}} -\entry{S{\_}IFMT}{386}{\code {S_IFMT}} -\entry{S{\_}IFDIR}{386}{\code {S_IFDIR}} -\entry{S{\_}IFCHR}{386}{\code {S_IFCHR}} -\entry{S{\_}IFBLK}{386}{\code {S_IFBLK}} -\entry{S{\_}IFREG}{386}{\code {S_IFREG}} -\entry{S{\_}IFLNK}{386}{\code {S_IFLNK}} -\entry{S{\_}IFSOCK}{386}{\code {S_IFSOCK}} -\entry{S{\_}IFIFO}{386}{\code {S_IFIFO}} -\entry{S{\_}IRUSR}{388}{\code {S_IRUSR}} -\entry{S{\_}IREAD}{388}{\code {S_IREAD}} -\entry{S{\_}IWUSR}{388}{\code {S_IWUSR}} -\entry{S{\_}IWRITE}{388}{\code {S_IWRITE}} -\entry{S{\_}IXUSR}{388}{\code {S_IXUSR}} -\entry{S{\_}IEXEC}{388}{\code {S_IEXEC}} -\entry{S{\_}IRWXU}{388}{\code {S_IRWXU}} -\entry{S{\_}IRGRP}{388}{\code {S_IRGRP}} -\entry{S{\_}IWGRP}{388}{\code {S_IWGRP}} -\entry{S{\_}IXGRP}{388}{\code {S_IXGRP}} -\entry{S{\_}IRWXG}{388}{\code {S_IRWXG}} -\entry{S{\_}IROTH}{388}{\code {S_IROTH}} -\entry{S{\_}IWOTH}{388}{\code {S_IWOTH}} -\entry{S{\_}IXOTH}{388}{\code {S_IXOTH}} -\entry{S{\_}IRWXO}{388}{\code {S_IRWXO}} -\entry{S{\_}ISUID}{388}{\code {S_ISUID}} -\entry{S{\_}ISGID}{389}{\code {S_ISGID}} -\entry{S{\_}ISVTX}{389}{\code {S_ISVTX}} -\entry{R{\_}OK}{393}{\code {R_OK}} -\entry{W{\_}OK}{393}{\code {W_OK}} -\entry{X{\_}OK}{393}{\code {X_OK}} -\entry{F{\_}OK}{393}{\code {F_OK}} -\entry{L{\_}tmpnam}{399}{\code {L_tmpnam}} -\entry{TMP{\_}MAX}{399}{\code {TMP_MAX}} -\entry{P{\_}tmpdir}{400}{\code {P_tmpdir}} +\entry{MAXSYMLINKS}{375}{\code {MAXSYMLINKS}} +\entry{S{\_}IFMT}{387}{\code {S_IFMT}} +\entry{S{\_}IFDIR}{387}{\code {S_IFDIR}} +\entry{S{\_}IFCHR}{387}{\code {S_IFCHR}} +\entry{S{\_}IFBLK}{387}{\code {S_IFBLK}} +\entry{S{\_}IFREG}{387}{\code {S_IFREG}} +\entry{S{\_}IFLNK}{387}{\code {S_IFLNK}} +\entry{S{\_}IFSOCK}{387}{\code {S_IFSOCK}} +\entry{S{\_}IFIFO}{387}{\code {S_IFIFO}} +\entry{S{\_}IRUSR}{389}{\code {S_IRUSR}} +\entry{S{\_}IREAD}{389}{\code {S_IREAD}} +\entry{S{\_}IWUSR}{389}{\code {S_IWUSR}} +\entry{S{\_}IWRITE}{389}{\code {S_IWRITE}} +\entry{S{\_}IXUSR}{389}{\code {S_IXUSR}} +\entry{S{\_}IEXEC}{389}{\code {S_IEXEC}} +\entry{S{\_}IRWXU}{389}{\code {S_IRWXU}} +\entry{S{\_}IRGRP}{389}{\code {S_IRGRP}} +\entry{S{\_}IWGRP}{389}{\code {S_IWGRP}} +\entry{S{\_}IXGRP}{389}{\code {S_IXGRP}} +\entry{S{\_}IRWXG}{389}{\code {S_IRWXG}} +\entry{S{\_}IROTH}{389}{\code {S_IROTH}} +\entry{S{\_}IWOTH}{389}{\code {S_IWOTH}} +\entry{S{\_}IXOTH}{389}{\code {S_IXOTH}} +\entry{S{\_}IRWXO}{389}{\code {S_IRWXO}} +\entry{S{\_}ISUID}{389}{\code {S_ISUID}} +\entry{S{\_}ISGID}{390}{\code {S_ISGID}} +\entry{S{\_}ISVTX}{390}{\code {S_ISVTX}} +\entry{R{\_}OK}{394}{\code {R_OK}} +\entry{W{\_}OK}{394}{\code {W_OK}} +\entry{X{\_}OK}{394}{\code {X_OK}} +\entry{F{\_}OK}{394}{\code {F_OK}} +\entry{L{\_}tmpnam}{400}{\code {L_tmpnam}} +\entry{TMP{\_}MAX}{400}{\code {TMP_MAX}} +\entry{P{\_}tmpdir}{401}{\code {P_tmpdir}} \entry{SOCK{\_}STREAM}{410}{\code {SOCK_STREAM}} \entry{SOCK{\_}DGRAM}{410}{\code {SOCK_DGRAM}} \entry{SOCK{\_}RAW}{411}{\code {SOCK_RAW}} @@ -624,443 +625,443 @@ \entry{FP{\_}ILOGBNAN}{498}{\code {FP_ILOGBNAN}} \entry{signgam}{503}{\code {signgam}} \entry{RAND{\_}MAX}{512}{\code {RAND_MAX}} -\entry{FP{\_}NAN}{522}{\code {FP_NAN}} -\entry{FP{\_}INFINITE}{523}{\code {FP_INFINITE}} -\entry{FP{\_}ZERO}{523}{\code {FP_ZERO}} -\entry{FP{\_}SUBNORMAL}{523}{\code {FP_SUBNORMAL}} -\entry{FP{\_}NORMAL}{523}{\code {FP_NORMAL}} -\entry{INFINITY}{526}{\code {INFINITY}} -\entry{NAN}{527}{\code {NAN}} -\entry{FE{\_}INEXACT}{527}{\code {FE_INEXACT}} -\entry{FE{\_}DIVBYZERO}{527}{\code {FE_DIVBYZERO}} -\entry{FE{\_}UNDERFLOW}{527}{\code {FE_UNDERFLOW}} -\entry{FE{\_}OVERFLOW}{527}{\code {FE_OVERFLOW}} -\entry{FE{\_}INVALID}{527}{\code {FE_INVALID}} -\entry{HUGE{\_}VAL}{529}{\code {HUGE_VAL}} -\entry{HUGE{\_}VALF}{529}{\code {HUGE_VALF}} -\entry{HUGE{\_}VALL}{529}{\code {HUGE_VALL}} -\entry{FE{\_}TONEAREST}{530}{\code {FE_TONEAREST}} -\entry{FE{\_}UPWARD}{530}{\code {FE_UPWARD}} -\entry{FE{\_}DOWNWARD}{530}{\code {FE_DOWNWARD}} -\entry{FE{\_}TOWARDZERO}{530}{\code {FE_TOWARDZERO}} -\entry{FE{\_}DFL{\_}ENV}{531}{\code {FE_DFL_ENV}} -\entry{FE{\_}NOMASK{\_}ENV}{532}{\code {FE_NOMASK_ENV}} -\entry{FP{\_}FAST{\_}FMA}{541}{\code {FP_FAST_FMA}} -\entry{{\_}Complex{\_}I}{541}{\code {_Complex_I}} -\entry{I}{541}{\code {I}} -\entry{CLOCKS{\_}PER{\_}SEC}{554}{\code {CLOCKS_PER_SEC}} -\entry{CLK{\_}TCK}{554}{\code {CLK_TCK}} -\entry{getdate{\_}err}{574}{\code {getdate_err}} -\entry{tzname}{579}{\code {tzname}} -\entry{timezone}{579}{\code {timezone}} -\entry{daylight}{579}{\code {daylight}} -\entry{ITIMER{\_}REAL}{582}{\code {ITIMER_REAL}} -\entry{ITIMER{\_}VIRTUAL}{582}{\code {ITIMER_VIRTUAL}} -\entry{ITIMER{\_}PROF}{582}{\code {ITIMER_PROF}} -\entry{RLIMIT{\_}CPU}{589}{\code {RLIMIT_CPU}} -\entry{RLIMIT{\_}FSIZE}{589}{\code {RLIMIT_FSIZE}} -\entry{RLIMIT{\_}DATA}{589}{\code {RLIMIT_DATA}} -\entry{RLIMIT{\_}STACK}{589}{\code {RLIMIT_STACK}} -\entry{RLIMIT{\_}CORE}{589}{\code {RLIMIT_CORE}} -\entry{RLIMIT{\_}RSS}{589}{\code {RLIMIT_RSS}} -\entry{RLIMIT{\_}NOFILE}{590}{\code {RLIMIT_NOFILE}} -\entry{RLIMIT{\_}OFILE}{590}{\code {RLIMIT_OFILE}} -\entry{RLIMIT{\_}AS}{590}{\code {RLIMIT_AS}} -\entry{RLIM{\_}NLIMITS}{590}{\code {RLIM_NLIMITS}} -\entry{RLIM{\_}INFINITY}{590}{\code {RLIM_INFINITY}} -\entry{PRIO{\_}MIN}{599}{\code {PRIO_MIN}} -\entry{PRIO{\_}MAX}{599}{\code {PRIO_MAX}} -\entry{PRIO{\_}PROCESS}{599}{\code {PRIO_PROCESS}} -\entry{PRIO{\_}PGRP}{599}{\code {PRIO_PGRP}} -\entry{PRIO{\_}USER}{600}{\code {PRIO_USER}} -\entry{{\_}SC{\_}PAGESIZE}{601}{\code {_SC_PAGESIZE}} -\entry{{\_}SC{\_}PHYS{\_}PAGES}{601}{\code {_SC_PHYS_PAGES}} -\entry{{\_}SC{\_}AVPHYS{\_}PAGES}{601}{\code {_SC_AVPHYS_PAGES}} -\entry{{\_}SC{\_}NPROCESSORS{\_}CONF}{602}{\code {_SC_NPROCESSORS_CONF}} -\entry{{\_}SC{\_}NPROCESSORS{\_}ONLN}{602}{\code {_SC_NPROCESSORS_ONLN}} -\entry{NSIG}{611}{\code {NSIG}} -\entry{COREFILE}{612}{\code {COREFILE}} -\entry{SIGFPE}{612}{\code {SIGFPE}} -\entry{FPE{\_}INTOVF{\_}TRAP}{612}{\code {FPE_INTOVF_TRAP}} -\entry{FPE{\_}INTDIV{\_}TRAP}{612}{\code {FPE_INTDIV_TRAP}} -\entry{FPE{\_}SUBRNG{\_}TRAP}{612}{\code {FPE_SUBRNG_TRAP}} -\entry{FPE{\_}FLTOVF{\_}TRAP}{613}{\code {FPE_FLTOVF_TRAP}} -\entry{FPE{\_}FLTDIV{\_}TRAP}{613}{\code {FPE_FLTDIV_TRAP}} -\entry{FPE{\_}FLTUND{\_}TRAP}{613}{\code {FPE_FLTUND_TRAP}} -\entry{FPE{\_}DECOVF{\_}TRAP}{613}{\code {FPE_DECOVF_TRAP}} -\entry{SIGILL}{613}{\code {SIGILL}} -\entry{SIGSEGV}{613}{\code {SIGSEGV}} -\entry{SIGBUS}{613}{\code {SIGBUS}} -\entry{SIGABRT}{614}{\code {SIGABRT}} -\entry{SIGIOT}{614}{\code {SIGIOT}} -\entry{SIGTRAP}{614}{\code {SIGTRAP}} -\entry{SIGEMT}{614}{\code {SIGEMT}} -\entry{SIGSYS}{614}{\code {SIGSYS}} -\entry{SIGTERM}{614}{\code {SIGTERM}} -\entry{SIGINT}{614}{\code {SIGINT}} -\entry{SIGQUIT}{615}{\code {SIGQUIT}} -\entry{SIGKILL}{615}{\code {SIGKILL}} -\entry{SIGHUP}{615}{\code {SIGHUP}} -\entry{SIGALRM}{615}{\code {SIGALRM}} -\entry{SIGVTALRM}{616}{\code {SIGVTALRM}} -\entry{SIGPROF}{616}{\code {SIGPROF}} -\entry{SIGIO}{616}{\code {SIGIO}} -\entry{SIGURG}{616}{\code {SIGURG}} -\entry{SIGPOLL}{616}{\code {SIGPOLL}} -\entry{SIGCHLD}{616}{\code {SIGCHLD}} -\entry{SIGCLD}{617}{\code {SIGCLD}} -\entry{SIGCONT}{617}{\code {SIGCONT}} -\entry{SIGSTOP}{617}{\code {SIGSTOP}} -\entry{SIGTSTP}{617}{\code {SIGTSTP}} -\entry{SIGTTIN}{617}{\code {SIGTTIN}} -\entry{SIGTTOU}{617}{\code {SIGTTOU}} -\entry{SIGPIPE}{618}{\code {SIGPIPE}} -\entry{SIGLOST}{618}{\code {SIGLOST}} -\entry{SIGXCPU}{618}{\code {SIGXCPU}} -\entry{SIGXFSZ}{619}{\code {SIGXFSZ}} -\entry{SIGUSR1}{619}{\code {SIGUSR1}} -\entry{SIGUSR2}{619}{\code {SIGUSR2}} -\entry{SIGWINCH}{619}{\code {SIGWINCH}} -\entry{SIGINFO}{619}{\code {SIGINFO}} -\entry{sys{\_}siglist}{620}{\code {sys_siglist}} -\entry{SIG{\_}DFL}{621}{\code {SIG_DFL}} -\entry{SIG{\_}IGN}{621}{\code {SIG_IGN}} -\entry{SIG{\_}ERR}{622}{\code {SIG_ERR}} -\entry{SA{\_}NOCLDSTOP}{625}{\code {SA_NOCLDSTOP}} -\entry{SA{\_}ONSTACK}{625}{\code {SA_ONSTACK}} -\entry{SA{\_}RESTART}{626}{\code {SA_RESTART}} -\entry{SIG{\_}BLOCK}{644}{\code {SIG_BLOCK}} -\entry{SIG{\_}UNBLOCK}{644}{\code {SIG_UNBLOCK}} -\entry{SIG{\_}SETMASK}{644}{\code {SIG_SETMASK}} -\entry{SIGSTKSZ}{652}{\code {SIGSTKSZ}} -\entry{MINSIGSTKSZ}{652}{\code {MINSIGSTKSZ}} -\entry{SS{\_}DISABLE}{652}{\code {SS_DISABLE}} -\entry{SS{\_}ONSTACK}{652}{\code {SS_ONSTACK}} -\entry{SV{\_}ONSTACK}{654}{\code {SV_ONSTACK}} -\entry{SV{\_}INTERRUPT}{654}{\code {SV_INTERRUPT}} -\entry{SV{\_}RESETHAND}{654}{\code {SV_RESETHAND}} -\entry{opterr}{659}{\code {opterr}} -\entry{optopt}{659}{\code {optopt}} -\entry{optind}{659}{\code {optind}} -\entry{optarg}{659}{\code {optarg}} -\entry{argp{\_}program{\_}version}{667}{\code {argp_program_version}} -\entry{argp{\_}program{\_}bug{\_}address}{667}{\code {argp_program_bug_address}} -\entry{argp{\_}program{\_}version{\_}hook}{667}{\code {argp_program_version_hook}} -\entry{argp{\_}err{\_}exit{\_}status}{667}{\code {argp_err_exit_status}} -\entry{OPTION{\_}ARG{\_}OPTIONAL}{670}{\code {OPTION_ARG_OPTIONAL}} -\entry{OPTION{\_}HIDDEN}{670}{\code {OPTION_HIDDEN}} -\entry{OPTION{\_}ALIAS}{670}{\code {OPTION_ALIAS}} -\entry{OPTION{\_}DOC}{670}{\code {OPTION_DOC}} -\entry{OPTION{\_}NO{\_}USAGE}{670}{\code {OPTION_NO_USAGE}} -\entry{ARGP{\_}ERR{\_}UNKNOWN}{671}{\code {ARGP_ERR_UNKNOWN}} -\entry{ARGP{\_}KEY{\_}ARG}{672}{\code {ARGP_KEY_ARG}} -\entry{ARGP{\_}KEY{\_}ARGS}{672}{\code {ARGP_KEY_ARGS}} -\entry{ARGP{\_}KEY{\_}END}{673}{\code {ARGP_KEY_END}} -\entry{ARGP{\_}KEY{\_}NO{\_}ARGS}{673}{\code {ARGP_KEY_NO_ARGS}} -\entry{ARGP{\_}KEY{\_}INIT}{673}{\code {ARGP_KEY_INIT}} -\entry{ARGP{\_}KEY{\_}SUCCESS}{673}{\code {ARGP_KEY_SUCCESS}} -\entry{ARGP{\_}KEY{\_}ERROR}{673}{\code {ARGP_KEY_ERROR}} -\entry{ARGP{\_}KEY{\_}FINI}{673}{\code {ARGP_KEY_FINI}} -\entry{ARGP{\_}PARSE{\_}ARGV0}{677}{\code {ARGP_PARSE_ARGV0}} -\entry{ARGP{\_}NO{\_}ERRS}{677}{\code {ARGP_NO_ERRS}} -\entry{ARGP{\_}NO{\_}ARGS}{677}{\code {ARGP_NO_ARGS}} -\entry{ARGP{\_}IN{\_}ORDER}{678}{\code {ARGP_IN_ORDER}} -\entry{ARGP{\_}NO{\_}HELP}{678}{\code {ARGP_NO_HELP}} -\entry{ARGP{\_}NO{\_}EXIT}{678}{\code {ARGP_NO_EXIT}} -\entry{ARGP{\_}LONG{\_}ONLY}{678}{\code {ARGP_LONG_ONLY}} -\entry{ARGP{\_}SILENT}{678}{\code {ARGP_SILENT}} -\entry{ARGP{\_}KEY{\_}HELP{\_}PRE{\_}DOC}{678}{\code {ARGP_KEY_HELP_PRE_DOC}} -\entry{ARGP{\_}KEY{\_}HELP{\_}POST{\_}DOC}{679}{\code {ARGP_KEY_HELP_POST_DOC}} -\entry{ARGP{\_}KEY{\_}HELP{\_}HEADER}{679}{\code {ARGP_KEY_HELP_HEADER}} -\entry{ARGP{\_}KEY{\_}HELP{\_}EXTRA}{679}{\code {ARGP_KEY_HELP_EXTRA}} -\entry{ARGP{\_}KEY{\_}HELP{\_}DUP{\_}ARGS{\_}NOTE}{679}{\code {ARGP_KEY_HELP_DUP_ARGS_NOTE}} -\entry{ARGP{\_}KEY{\_}HELP{\_}ARGS{\_}DOC}{679}{\code {ARGP_KEY_HELP_ARGS_DOC}} -\entry{ARGP{\_}HELP{\_}USAGE}{679}{\code {ARGP_HELP_USAGE}} -\entry{ARGP{\_}HELP{\_}SHORT{\_}USAGE}{679}{\code {ARGP_HELP_SHORT_USAGE}} -\entry{ARGP{\_}HELP{\_}SEE}{680}{\code {ARGP_HELP_SEE}} -\entry{ARGP{\_}HELP{\_}LONG}{680}{\code {ARGP_HELP_LONG}} -\entry{ARGP{\_}HELP{\_}PRE{\_}DOC}{680}{\code {ARGP_HELP_PRE_DOC}} -\entry{ARGP{\_}HELP{\_}POST{\_}DOC}{680}{\code {ARGP_HELP_POST_DOC}} -\entry{ARGP{\_}HELP{\_}DOC}{680}{\code {ARGP_HELP_DOC}} -\entry{ARGP{\_}HELP{\_}BUG{\_}ADDR}{680}{\code {ARGP_HELP_BUG_ADDR}} -\entry{ARGP{\_}HELP{\_}LONG{\_}ONLY}{680}{\code {ARGP_HELP_LONG_ONLY}} -\entry{ARGP{\_}HELP{\_}EXIT{\_}ERR}{680}{\code {ARGP_HELP_EXIT_ERR}} -\entry{ARGP{\_}HELP{\_}EXIT{\_}OK}{680}{\code {ARGP_HELP_EXIT_OK}} -\entry{ARGP{\_}HELP{\_}STD{\_}ERR}{680}{\code {ARGP_HELP_STD_ERR}} -\entry{ARGP{\_}HELP{\_}STD{\_}USAGE}{680}{\code {ARGP_HELP_STD_USAGE}} -\entry{ARGP{\_}HELP{\_}STD{\_}HELP}{680}{\code {ARGP_HELP_STD_HELP}} -\entry{environ}{694}{\code {environ}} -\entry{EXIT{\_}SUCCESS}{699}{\code {EXIT_SUCCESS}} -\entry{EXIT{\_}FAILURE}{699}{\code {EXIT_FAILURE}} -\entry{L{\_}ctermid}{730}{\code {L_ctermid}} -\entry{aliases}{735}{\code {aliases}} -\entry{ethers}{735}{\code {ethers}} -\entry{group}{735}{\code {group}} -\entry{hosts}{735}{\code {hosts}} -\entry{netgroup}{735}{\code {netgroup}} -\entry{networks}{735}{\code {networks}} -\entry{protocols}{735}{\code {protocols}} -\entry{passwd}{735}{\code {passwd}} -\entry{rpc}{735}{\code {rpc}} -\entry{services}{735}{\code {services}} -\entry{shadow}{736}{\code {shadow}} -\entry{NSS{\_}STATUS{\_}TRYAGAIN}{740}{\code {NSS_STATUS_TRYAGAIN}} -\entry{NSS{\_}STATUS{\_}UNAVAIL}{740}{\code {NSS_STATUS_UNAVAIL}} -\entry{NSS{\_}STATUS{\_}NOTFOUND}{740}{\code {NSS_STATUS_NOTFOUND}} -\entry{NSS{\_}STATUS{\_}SUCCESS}{740}{\code {NSS_STATUS_SUCCESS}} -\entry{L{\_}cuserid}{755}{\code {L_cuserid}} -\entry{EMPTY}{756}{\code {EMPTY}} -\entry{RUN{\_}LVL}{756}{\code {RUN_LVL}} -\entry{BOOT{\_}TIME}{756}{\code {BOOT_TIME}} -\entry{OLD{\_}TIME}{756}{\code {OLD_TIME}} -\entry{NEW{\_}TIME}{756}{\code {NEW_TIME}} -\entry{INIT{\_}PROCESS}{756}{\code {INIT_PROCESS}} -\entry{LOGIN{\_}PROCESS}{756}{\code {LOGIN_PROCESS}} -\entry{USER{\_}PROCESS}{756}{\code {USER_PROCESS}} -\entry{DEAD{\_}PROCESS}{757}{\code {DEAD_PROCESS}} -\entry{ACCOUNTING}{757}{\code {ACCOUNTING}} -\entry{{\_}PATH{\_}UTMP}{759}{\code {_PATH_UTMP}} -\entry{{\_}PATH{\_}WTMP}{759}{\code {_PATH_WTMP}} -\entry{EMPTY}{760}{\code {EMPTY}} -\entry{RUN{\_}LVL}{760}{\code {RUN_LVL}} -\entry{BOOT{\_}TIME}{760}{\code {BOOT_TIME}} -\entry{OLD{\_}TIME}{761}{\code {OLD_TIME}} -\entry{NEW{\_}TIME}{761}{\code {NEW_TIME}} -\entry{INIT{\_}PROCESS}{761}{\code {INIT_PROCESS}} -\entry{LOGIN{\_}PROCESS}{761}{\code {LOGIN_PROCESS}} -\entry{USER{\_}PROCESS}{761}{\code {USER_PROCESS}} -\entry{DEAD{\_}PROCESS}{761}{\code {DEAD_PROCESS}} -\entry{{\_}PATH{\_}FSTAB}{777}{\code {_PATH_FSTAB}} -\entry{{\_}PATH{\_}MNTTAB}{777}{\code {_PATH_MNTTAB}} -\entry{FSTAB}{777}{\code {FSTAB}} -\entry{{\_}PATH{\_}MOUNTED}{777}{\code {_PATH_MOUNTED}} -\entry{FSTAB{\_}RW}{778}{\code {FSTAB_RW}} -\entry{FSTAB{\_}RQ}{778}{\code {FSTAB_RQ}} -\entry{FSTAB{\_}RO}{778}{\code {FSTAB_RO}} -\entry{FSTAB{\_}SW}{778}{\code {FSTAB_SW}} -\entry{FSTAB{\_}XX}{778}{\code {FSTAB_XX}} -\entry{MNTTYPE{\_}IGNORE}{780}{\code {MNTTYPE_IGNORE}} -\entry{MNTTYPE{\_}NFS}{780}{\code {MNTTYPE_NFS}} -\entry{MNTTYPE{\_}SWAP}{780}{\code {MNTTYPE_SWAP}} -\entry{MNTOPT{\_}DEFAULTS}{780}{\code {MNTOPT_DEFAULTS}} -\entry{MNTOPT{\_}RO}{780}{\code {MNTOPT_RO}} -\entry{MNTOPT{\_}RW}{780}{\code {MNTOPT_RW}} -\entry{MNTOPT{\_}SUID}{780}{\code {MNTOPT_SUID}} -\entry{MNTOPT{\_}NOSUID}{781}{\code {MNTOPT_NOSUID}} -\entry{MNTOPT{\_}NOAUTO}{781}{\code {MNTOPT_NOAUTO}} -\entry{ARG{\_}MAX}{789}{\code {ARG_MAX}} -\entry{CHILD{\_}MAX}{789}{\code {CHILD_MAX}} -\entry{OPEN{\_}MAX}{789}{\code {OPEN_MAX}} -\entry{STREAM{\_}MAX}{789}{\code {STREAM_MAX}} -\entry{TZNAME{\_}MAX}{789}{\code {TZNAME_MAX}} -\entry{NGROUPS{\_}MAX}{790}{\code {NGROUPS_MAX}} -\entry{SSIZE{\_}MAX}{790}{\code {SSIZE_MAX}} -\entry{RE{\_}DUP{\_}MAX}{790}{\code {RE_DUP_MAX}} -\entry{{\_}POSIX{\_}JOB{\_}CONTROL}{790}{\code {_POSIX_JOB_CONTROL}} -\entry{{\_}POSIX{\_}SAVED{\_}IDS}{790}{\code {_POSIX_SAVED_IDS}} -\entry{{\_}POSIX2{\_}C{\_}DEV}{791}{\code {_POSIX2_C_DEV}} -\entry{{\_}POSIX2{\_}FORT{\_}DEV}{791}{\code {_POSIX2_FORT_DEV}} -\entry{{\_}POSIX2{\_}FORT{\_}RUN}{791}{\code {_POSIX2_FORT_RUN}} -\entry{{\_}POSIX2{\_}LOCALEDEF}{791}{\code {_POSIX2_LOCALEDEF}} -\entry{{\_}POSIX2{\_}SW{\_}DEV}{791}{\code {_POSIX2_SW_DEV}} -\entry{{\_}POSIX{\_}VERSION}{791}{\code {_POSIX_VERSION}} -\entry{{\_}POSIX2{\_}C{\_}VERSION}{792}{\code {_POSIX2_C_VERSION}} -\entry{{\_}SC{\_}ARG{\_}MAX}{792}{\code {_SC_ARG_MAX}} -\entry{{\_}SC{\_}CHILD{\_}MAX}{792}{\code {_SC_CHILD_MAX}} -\entry{{\_}SC{\_}OPEN{\_}MAX}{792}{\code {_SC_OPEN_MAX}} -\entry{{\_}SC{\_}STREAM{\_}MAX}{793}{\code {_SC_STREAM_MAX}} -\entry{{\_}SC{\_}TZNAME{\_}MAX}{793}{\code {_SC_TZNAME_MAX}} -\entry{{\_}SC{\_}NGROUPS{\_}MAX}{793}{\code {_SC_NGROUPS_MAX}} -\entry{{\_}SC{\_}JOB{\_}CONTROL}{793}{\code {_SC_JOB_CONTROL}} -\entry{{\_}SC{\_}SAVED{\_}IDS}{793}{\code {_SC_SAVED_IDS}} -\entry{{\_}SC{\_}VERSION}{793}{\code {_SC_VERSION}} -\entry{{\_}SC{\_}CLK{\_}TCK}{793}{\code {_SC_CLK_TCK}} -\entry{{\_}SC{\_}CHARCLASS{\_}NAME{\_}MAX}{793}{\code {_SC_CHARCLASS_NAME_MAX}} -\entry{{\_}SC{\_}REALTIME{\_}SIGNALS}{793}{\code {_SC_REALTIME_SIGNALS}} -\entry{{\_}SC{\_}PRIORITY{\_}SCHEDULING}{793}{\code {_SC_PRIORITY_SCHEDULING}} -\entry{{\_}SC{\_}TIMERS}{793}{\code {_SC_TIMERS}} -\entry{{\_}SC{\_}ASYNCHRONOUS{\_}IO}{793}{\code {_SC_ASYNCHRONOUS_IO}} -\entry{{\_}SC{\_}PRIORITIZED{\_}IO}{793}{\code {_SC_PRIORITIZED_IO}} -\entry{{\_}SC{\_}SYNCHRONIZED{\_}IO}{793}{\code {_SC_SYNCHRONIZED_IO}} -\entry{{\_}SC{\_}FSYNC}{793}{\code {_SC_FSYNC}} -\entry{{\_}SC{\_}MAPPED{\_}FILES}{793}{\code {_SC_MAPPED_FILES}} -\entry{{\_}SC{\_}MEMLOCK}{793}{\code {_SC_MEMLOCK}} -\entry{{\_}SC{\_}MEMLOCK{\_}RANGE}{794}{\code {_SC_MEMLOCK_RANGE}} -\entry{{\_}SC{\_}MEMORY{\_}PROTECTION}{794}{\code {_SC_MEMORY_PROTECTION}} -\entry{{\_}SC{\_}MESSAGE{\_}PASSING}{794}{\code {_SC_MESSAGE_PASSING}} -\entry{{\_}SC{\_}SEMAPHORES}{794}{\code {_SC_SEMAPHORES}} -\entry{{\_}SC{\_}SHARED{\_}MEMORY{\_}OBJECTS}{794}{\code {_SC_SHARED_MEMORY_OBJECTS}} -\entry{{\_}SC{\_}AIO{\_}LISTIO{\_}MAX}{794}{\code {_SC_AIO_LISTIO_MAX}} -\entry{{\_}SC{\_}AIO{\_}MAX}{794}{\code {_SC_AIO_MAX}} -\entry{{\_}SC{\_}AIO{\_}PRIO{\_}DELTA{\_}MAX}{794}{\code {_SC_AIO_PRIO_DELTA_MAX}} -\entry{{\_}SC{\_}DELAYTIMER{\_}MAX}{794}{\code {_SC_DELAYTIMER_MAX}} -\entry{{\_}SC{\_}MQ{\_}OPEN{\_}MAX}{794}{\code {_SC_MQ_OPEN_MAX}} -\entry{{\_}SC{\_}MQ{\_}PRIO{\_}MAX}{794}{\code {_SC_MQ_PRIO_MAX}} -\entry{{\_}SC{\_}RTSIG{\_}MAX}{794}{\code {_SC_RTSIG_MAX}} -\entry{{\_}SC{\_}SEM{\_}NSEMS{\_}MAX}{794}{\code {_SC_SEM_NSEMS_MAX}} -\entry{{\_}SC{\_}SEM{\_}VALUE{\_}MAX}{794}{\code {_SC_SEM_VALUE_MAX}} -\entry{{\_}SC{\_}SIGQUEUE{\_}MAX}{794}{\code {_SC_SIGQUEUE_MAX}} -\entry{{\_}SC{\_}TIMER{\_}MAX}{794}{\code {_SC_TIMER_MAX}} -\entry{{\_}SC{\_}PII}{794}{\code {_SC_PII}} -\entry{{\_}SC{\_}PII{\_}XTI}{795}{\code {_SC_PII_XTI}} -\entry{{\_}SC{\_}PII{\_}SOCKET}{795}{\code {_SC_PII_SOCKET}} -\entry{{\_}SC{\_}PII{\_}INTERNET}{795}{\code {_SC_PII_INTERNET}} -\entry{{\_}SC{\_}PII{\_}OSI}{795}{\code {_SC_PII_OSI}} -\entry{{\_}SC{\_}SELECT}{795}{\code {_SC_SELECT}} -\entry{{\_}SC{\_}UIO{\_}MAXIOV}{795}{\code {_SC_UIO_MAXIOV}} -\entry{{\_}SC{\_}PII{\_}INTERNET{\_}STREAM}{795}{\code {_SC_PII_INTERNET_STREAM}} -\entry{{\_}SC{\_}PII{\_}INTERNET{\_}DGRAM}{795}{\code {_SC_PII_INTERNET_DGRAM}} -\entry{{\_}SC{\_}PII{\_}OSI{\_}COTS}{795}{\code {_SC_PII_OSI_COTS}} -\entry{{\_}SC{\_}PII{\_}OSI{\_}CLTS}{795}{\code {_SC_PII_OSI_CLTS}} -\entry{{\_}SC{\_}PII{\_}OSI{\_}M}{795}{\code {_SC_PII_OSI_M}} -\entry{{\_}SC{\_}T{\_}IOV{\_}MAX}{795}{\code {_SC_T_IOV_MAX}} -\entry{{\_}SC{\_}THREADS}{795}{\code {_SC_THREADS}} -\entry{{\_}SC{\_}THREAD{\_}SAFE{\_}FUNCTIONS}{795}{\code {_SC_THREAD_SAFE_FUNCTIONS}} -\entry{{\_}SC{\_}GETGR{\_}R{\_}SIZE{\_}MAX}{795}{\code {_SC_GETGR_R_SIZE_MAX}} -\entry{{\_}SC{\_}GETPW{\_}R{\_}SIZE{\_}MAX}{795}{\code {_SC_GETPW_R_SIZE_MAX}} -\entry{{\_}SC{\_}LOGIN{\_}NAME{\_}MAX}{795}{\code {_SC_LOGIN_NAME_MAX}} -\entry{{\_}SC{\_}TTY{\_}NAME{\_}MAX}{796}{\code {_SC_TTY_NAME_MAX}} -\entry{{\_}SC{\_}THREAD{\_}DESTRUCTOR{\_}ITERATIONS}{796}{\code {_SC_THREAD_DESTRUCTOR_ITERATIONS}} -\entry{{\_}SC{\_}THREAD{\_}KEYS{\_}MAX}{796}{\code {_SC_THREAD_KEYS_MAX}} -\entry{{\_}SC{\_}THREAD{\_}STACK{\_}MIN}{796}{\code {_SC_THREAD_STACK_MIN}} -\entry{{\_}SC{\_}THREAD{\_}THREADS{\_}MAX}{796}{\code {_SC_THREAD_THREADS_MAX}} -\entry{{\_}SC{\_}THREAD{\_}ATTR{\_}STACKADDR}{796}{\code {_SC_THREAD_ATTR_STACKADDR}} -\entry{{\_}SC{\_}THREAD{\_}ATTR{\_}STACKSIZE}{796}{\code {_SC_THREAD_ATTR_STACKSIZE}} -\entry{{\_}SC{\_}THREAD{\_}PRIORITY{\_}SCHEDULING}{796}{\code {_SC_THREAD_PRIORITY_SCHEDULING}} -\entry{{\_}SC{\_}THREAD{\_}PRIO{\_}INHERIT}{796}{\code {_SC_THREAD_PRIO_INHERIT}} -\entry{{\_}SC{\_}THREAD{\_}PRIO{\_}PROTECT}{796}{\code {_SC_THREAD_PRIO_PROTECT}} -\entry{{\_}SC{\_}THREAD{\_}PROCESS{\_}SHARED}{796}{\code {_SC_THREAD_PROCESS_SHARED}} -\entry{{\_}SC{\_}2{\_}C{\_}DEV}{796}{\code {_SC_2_C_DEV}} -\entry{{\_}SC{\_}2{\_}FORT{\_}DEV}{796}{\code {_SC_2_FORT_DEV}} -\entry{{\_}SC{\_}2{\_}FORT{\_}RUN}{796}{\code {_SC_2_FORT_RUN}} -\entry{{\_}SC{\_}2{\_}LOCALEDEF}{796}{\code {_SC_2_LOCALEDEF}} -\entry{{\_}SC{\_}2{\_}SW{\_}DEV}{797}{\code {_SC_2_SW_DEV}} -\entry{{\_}SC{\_}BC{\_}BASE{\_}MAX}{797}{\code {_SC_BC_BASE_MAX}} -\entry{{\_}SC{\_}BC{\_}DIM{\_}MAX}{797}{\code {_SC_BC_DIM_MAX}} -\entry{{\_}SC{\_}BC{\_}SCALE{\_}MAX}{797}{\code {_SC_BC_SCALE_MAX}} -\entry{{\_}SC{\_}BC{\_}STRING{\_}MAX}{797}{\code {_SC_BC_STRING_MAX}} -\entry{{\_}SC{\_}COLL{\_}WEIGHTS{\_}MAX}{797}{\code {_SC_COLL_WEIGHTS_MAX}} -\entry{{\_}SC{\_}EXPR{\_}NEST{\_}MAX}{797}{\code {_SC_EXPR_NEST_MAX}} -\entry{{\_}SC{\_}LINE{\_}MAX}{797}{\code {_SC_LINE_MAX}} -\entry{{\_}SC{\_}EQUIV{\_}CLASS{\_}MAX}{797}{\code {_SC_EQUIV_CLASS_MAX}} -\entry{{\_}SC{\_}VERSION}{797}{\code {_SC_VERSION}} -\entry{{\_}SC{\_}2{\_}VERSION}{797}{\code {_SC_2_VERSION}} -\entry{{\_}SC{\_}PAGESIZE}{797}{\code {_SC_PAGESIZE}} -\entry{{\_}SC{\_}NPROCESSORS{\_}CONF}{797}{\code {_SC_NPROCESSORS_CONF}} -\entry{{\_}SC{\_}NPROCESSORS{\_}ONLN}{797}{\code {_SC_NPROCESSORS_ONLN}} -\entry{{\_}SC{\_}PHYS{\_}PAGES}{798}{\code {_SC_PHYS_PAGES}} -\entry{{\_}SC{\_}AVPHYS{\_}PAGES}{798}{\code {_SC_AVPHYS_PAGES}} -\entry{{\_}SC{\_}ATEXIT{\_}MAX}{798}{\code {_SC_ATEXIT_MAX}} -\entry{{\_}SC{\_}XOPEN{\_}VERSION}{798}{\code {_SC_XOPEN_VERSION}} -\entry{{\_}SC{\_}XOPEN{\_}XCU{\_}VERSION}{798}{\code {_SC_XOPEN_XCU_VERSION}} -\entry{{\_}SC{\_}XOPEN{\_}UNIX}{798}{\code {_SC_XOPEN_UNIX}} -\entry{{\_}SC{\_}XOPEN{\_}REALTIME}{798}{\code {_SC_XOPEN_REALTIME}} -\entry{{\_}SC{\_}XOPEN{\_}REALTIME{\_}THREADS}{798}{\code {_SC_XOPEN_REALTIME_THREADS}} -\entry{{\_}SC{\_}XOPEN{\_}LEGACY}{798}{\code {_SC_XOPEN_LEGACY}} -\entry{{\_}SC{\_}XOPEN{\_}CRYPT}{798}{\code {_SC_XOPEN_CRYPT}} -\entry{{\_}SC{\_}XOPEN{\_}ENH{\_}I18N}{798}{\code {_SC_XOPEN_ENH_I18N}} -\entry{{\_}SC{\_}XOPEN{\_}SHM}{798}{\code {_SC_XOPEN_SHM}} -\entry{{\_}SC{\_}XOPEN{\_}XPG2}{798}{\code {_SC_XOPEN_XPG2}} -\entry{{\_}SC{\_}XOPEN{\_}XPG3}{798}{\code {_SC_XOPEN_XPG3}} -\entry{{\_}SC{\_}XOPEN{\_}XPG4}{798}{\code {_SC_XOPEN_XPG4}} -\entry{{\_}SC{\_}CHAR{\_}BIT}{798}{\code {_SC_CHAR_BIT}} -\entry{{\_}SC{\_}CHAR{\_}MAX}{798}{\code {_SC_CHAR_MAX}} -\entry{{\_}SC{\_}CHAR{\_}MIN}{799}{\code {_SC_CHAR_MIN}} -\entry{{\_}SC{\_}INT{\_}MAX}{799}{\code {_SC_INT_MAX}} -\entry{{\_}SC{\_}INT{\_}MIN}{799}{\code {_SC_INT_MIN}} -\entry{{\_}SC{\_}LONG{\_}BIT}{799}{\code {_SC_LONG_BIT}} -\entry{{\_}SC{\_}WORD{\_}BIT}{799}{\code {_SC_WORD_BIT}} -\entry{{\_}SC{\_}MB{\_}LEN{\_}MAX}{799}{\code {_SC_MB_LEN_MAX}} -\entry{{\_}SC{\_}NZERO}{799}{\code {_SC_NZERO}} -\entry{SC{\_}SSIZE{\_}MAX}{799}{\code {SC_SSIZE_MAX}} -\entry{{\_}SC{\_}SCHAR{\_}MAX}{799}{\code {_SC_SCHAR_MAX}} -\entry{{\_}SC{\_}SCHAR{\_}MIN}{799}{\code {_SC_SCHAR_MIN}} -\entry{{\_}SC{\_}SHRT{\_}MAX}{799}{\code {_SC_SHRT_MAX}} -\entry{{\_}SC{\_}SHRT{\_}MIN}{799}{\code {_SC_SHRT_MIN}} -\entry{{\_}SC{\_}UCHAR{\_}MAX}{799}{\code {_SC_UCHAR_MAX}} -\entry{{\_}SC{\_}UINT{\_}MAX}{799}{\code {_SC_UINT_MAX}} -\entry{{\_}SC{\_}ULONG{\_}MAX}{800}{\code {_SC_ULONG_MAX}} -\entry{{\_}SC{\_}USHRT{\_}MAX}{800}{\code {_SC_USHRT_MAX}} -\entry{{\_}SC{\_}NL{\_}ARGMAX}{800}{\code {_SC_NL_ARGMAX}} -\entry{{\_}SC{\_}NL{\_}LANGMAX}{800}{\code {_SC_NL_LANGMAX}} -\entry{{\_}SC{\_}NL{\_}MSGMAX}{800}{\code {_SC_NL_MSGMAX}} -\entry{{\_}SC{\_}NL{\_}NMAX}{800}{\code {_SC_NL_NMAX}} -\entry{{\_}SC{\_}NL{\_}SETMAX}{800}{\code {_SC_NL_SETMAX}} -\entry{{\_}SC{\_}NL{\_}TEXTMAX}{800}{\code {_SC_NL_TEXTMAX}} -\entry{LINK{\_}MAX}{802}{\code {LINK_MAX}} -\entry{MAX{\_}CANON}{802}{\code {MAX_CANON}} -\entry{MAX{\_}INPUT}{802}{\code {MAX_INPUT}} -\entry{NAME{\_}MAX}{802}{\code {NAME_MAX}} -\entry{PATH{\_}MAX}{803}{\code {PATH_MAX}} -\entry{PIPE{\_}BUF}{803}{\code {PIPE_BUF}} -\entry{MAXNAMLEN}{803}{\code {MAXNAMLEN}} -\entry{FILENAME{\_}MAX}{803}{\code {FILENAME_MAX}} -\entry{{\_}POSIX{\_}CHOWN{\_}RESTRICTED}{803}{\code {_POSIX_CHOWN_RESTRICTED}} -\entry{{\_}POSIX{\_}NO{\_}TRUNC}{804}{\code {_POSIX_NO_TRUNC}} -\entry{{\_}POSIX{\_}VDISABLE}{804}{\code {_POSIX_VDISABLE}} -\entry{BC{\_}BASE{\_}MAX}{807}{\code {BC_BASE_MAX}} -\entry{BC{\_}DIM{\_}MAX}{807}{\code {BC_DIM_MAX}} -\entry{BC{\_}SCALE{\_}MAX}{807}{\code {BC_SCALE_MAX}} -\entry{BC{\_}STRING{\_}MAX}{807}{\code {BC_STRING_MAX}} -\entry{COLL{\_}WEIGHTS{\_}MAX}{807}{\code {COLL_WEIGHTS_MAX}} -\entry{EXPR{\_}NEST{\_}MAX}{807}{\code {EXPR_NEST_MAX}} -\entry{LINE{\_}MAX}{807}{\code {LINE_MAX}} -\entry{EQUIV{\_}CLASS{\_}MAX}{807}{\code {EQUIV_CLASS_MAX}} -\entry{DES{\_}ENCRYPT}{816}{\code {DES_ENCRYPT}} -\entry{DES{\_}DECRYPT}{816}{\code {DES_DECRYPT}} -\entry{DES{\_}HW}{816}{\code {DES_HW}} -\entry{DES{\_}SW}{816}{\code {DES_SW}} -\entry{DESERR{\_}NONE}{816}{\code {DESERR_NONE}} -\entry{DESERR{\_}NOHWDEVICE}{816}{\code {DESERR_NOHWDEVICE}} -\entry{DESERR{\_}HWERROR}{816}{\code {DESERR_HWERROR}} -\entry{DESERR{\_}BADPARAM}{816}{\code {DESERR_BADPARAM}} -\entry{SEM{\_}VALUE{\_}MAX}{836}{\code {SEM_VALUE_MAX}} -\entry{NDEBUG}{845}{\code {NDEBUG}} -\entry{NULL}{852}{\code {NULL}} -\entry{SCHAR{\_}MIN}{854}{\code {SCHAR_MIN}} -\entry{SCHAR{\_}MAX}{854}{\code {SCHAR_MAX}} -\entry{UCHAR{\_}MAX}{854}{\code {UCHAR_MAX}} -\entry{CHAR{\_}MIN}{854}{\code {CHAR_MIN}} -\entry{CHAR{\_}MAX}{855}{\code {CHAR_MAX}} -\entry{SHRT{\_}MIN}{855}{\code {SHRT_MIN}} -\entry{SHRT{\_}MAX}{855}{\code {SHRT_MAX}} -\entry{USHRT{\_}MAX}{855}{\code {USHRT_MAX}} -\entry{INT{\_}MIN}{855}{\code {INT_MIN}} -\entry{INT{\_}MAX}{855}{\code {INT_MAX}} -\entry{UINT{\_}MAX}{855}{\code {UINT_MAX}} -\entry{LONG{\_}MIN}{855}{\code {LONG_MIN}} -\entry{LONG{\_}MAX}{855}{\code {LONG_MAX}} -\entry{ULONG{\_}MAX}{855}{\code {ULONG_MAX}} -\entry{LONG{\_}LONG{\_}MIN}{855}{\code {LONG_LONG_MIN}} -\entry{LONG{\_}LONG{\_}MAX}{855}{\code {LONG_LONG_MAX}} -\entry{ULONG{\_}LONG{\_}MAX}{855}{\code {ULONG_LONG_MAX}} -\entry{WCHAR{\_}MAX}{855}{\code {WCHAR_MAX}} -\entry{FLT{\_}ROUNDS}{857}{\code {FLT_ROUNDS}} -\entry{FLT{\_}RADIX}{858}{\code {FLT_RADIX}} -\entry{FLT{\_}MANT{\_}DIG}{858}{\code {FLT_MANT_DIG}} -\entry{DBL{\_}MANT{\_}DIG}{858}{\code {DBL_MANT_DIG}} -\entry{LDBL{\_}MANT{\_}DIG}{858}{\code {LDBL_MANT_DIG}} -\entry{FLT{\_}DIG}{858}{\code {FLT_DIG}} -\entry{DBL{\_}DIG}{858}{\code {DBL_DIG}} -\entry{LDBL{\_}DIG}{858}{\code {LDBL_DIG}} -\entry{FLT{\_}MIN{\_}EXP}{858}{\code {FLT_MIN_EXP}} -\entry{DBL{\_}MIN{\_}EXP}{859}{\code {DBL_MIN_EXP}} -\entry{LDBL{\_}MIN{\_}EXP}{859}{\code {LDBL_MIN_EXP}} -\entry{FLT{\_}MIN{\_}10{\_}EXP}{859}{\code {FLT_MIN_10_EXP}} -\entry{DBL{\_}MIN{\_}10{\_}EXP}{859}{\code {DBL_MIN_10_EXP}} -\entry{LDBL{\_}MIN{\_}10{\_}EXP}{859}{\code {LDBL_MIN_10_EXP}} -\entry{FLT{\_}MAX{\_}EXP}{859}{\code {FLT_MAX_EXP}} -\entry{DBL{\_}MAX{\_}EXP}{859}{\code {DBL_MAX_EXP}} -\entry{LDBL{\_}MAX{\_}EXP}{859}{\code {LDBL_MAX_EXP}} -\entry{FLT{\_}MAX{\_}10{\_}EXP}{859}{\code {FLT_MAX_10_EXP}} -\entry{DBL{\_}MAX{\_}10{\_}EXP}{859}{\code {DBL_MAX_10_EXP}} -\entry{LDBL{\_}MAX{\_}10{\_}EXP}{859}{\code {LDBL_MAX_10_EXP}} -\entry{FLT{\_}MAX}{859}{\code {FLT_MAX}} -\entry{DBL{\_}MAX}{859}{\code {DBL_MAX}} -\entry{LDBL{\_}MAX}{859}{\code {LDBL_MAX}} -\entry{FLT{\_}MIN}{859}{\code {FLT_MIN}} -\entry{DBL{\_}MIN}{860}{\code {DBL_MIN}} -\entry{LDBL{\_}MIN}{860}{\code {LDBL_MIN}} -\entry{FLT{\_}EPSILON}{860}{\code {FLT_EPSILON}} -\entry{DBL{\_}EPSILON}{860}{\code {DBL_EPSILON}} -\entry{LDBL{\_}EPSILON}{860}{\code {LDBL_EPSILON}} +\entry{FP{\_}NAN}{524}{\code {FP_NAN}} +\entry{FP{\_}INFINITE}{525}{\code {FP_INFINITE}} +\entry{FP{\_}ZERO}{525}{\code {FP_ZERO}} +\entry{FP{\_}SUBNORMAL}{525}{\code {FP_SUBNORMAL}} +\entry{FP{\_}NORMAL}{525}{\code {FP_NORMAL}} +\entry{INFINITY}{528}{\code {INFINITY}} +\entry{NAN}{529}{\code {NAN}} +\entry{FE{\_}INEXACT}{529}{\code {FE_INEXACT}} +\entry{FE{\_}DIVBYZERO}{529}{\code {FE_DIVBYZERO}} +\entry{FE{\_}UNDERFLOW}{529}{\code {FE_UNDERFLOW}} +\entry{FE{\_}OVERFLOW}{529}{\code {FE_OVERFLOW}} +\entry{FE{\_}INVALID}{529}{\code {FE_INVALID}} +\entry{HUGE{\_}VAL}{531}{\code {HUGE_VAL}} +\entry{HUGE{\_}VALF}{531}{\code {HUGE_VALF}} +\entry{HUGE{\_}VALL}{531}{\code {HUGE_VALL}} +\entry{FE{\_}TONEAREST}{532}{\code {FE_TONEAREST}} +\entry{FE{\_}UPWARD}{532}{\code {FE_UPWARD}} +\entry{FE{\_}DOWNWARD}{532}{\code {FE_DOWNWARD}} +\entry{FE{\_}TOWARDZERO}{532}{\code {FE_TOWARDZERO}} +\entry{FE{\_}DFL{\_}ENV}{533}{\code {FE_DFL_ENV}} +\entry{FE{\_}NOMASK{\_}ENV}{534}{\code {FE_NOMASK_ENV}} +\entry{FP{\_}FAST{\_}FMA}{543}{\code {FP_FAST_FMA}} +\entry{{\_}Complex{\_}I}{543}{\code {_Complex_I}} +\entry{I}{543}{\code {I}} +\entry{CLOCKS{\_}PER{\_}SEC}{556}{\code {CLOCKS_PER_SEC}} +\entry{CLK{\_}TCK}{556}{\code {CLK_TCK}} +\entry{getdate{\_}err}{576}{\code {getdate_err}} +\entry{tzname}{581}{\code {tzname}} +\entry{timezone}{581}{\code {timezone}} +\entry{daylight}{581}{\code {daylight}} +\entry{ITIMER{\_}REAL}{584}{\code {ITIMER_REAL}} +\entry{ITIMER{\_}VIRTUAL}{584}{\code {ITIMER_VIRTUAL}} +\entry{ITIMER{\_}PROF}{584}{\code {ITIMER_PROF}} +\entry{RLIMIT{\_}CPU}{591}{\code {RLIMIT_CPU}} +\entry{RLIMIT{\_}FSIZE}{591}{\code {RLIMIT_FSIZE}} +\entry{RLIMIT{\_}DATA}{591}{\code {RLIMIT_DATA}} +\entry{RLIMIT{\_}STACK}{591}{\code {RLIMIT_STACK}} +\entry{RLIMIT{\_}CORE}{591}{\code {RLIMIT_CORE}} +\entry{RLIMIT{\_}RSS}{591}{\code {RLIMIT_RSS}} +\entry{RLIMIT{\_}NOFILE}{592}{\code {RLIMIT_NOFILE}} +\entry{RLIMIT{\_}OFILE}{592}{\code {RLIMIT_OFILE}} +\entry{RLIMIT{\_}AS}{592}{\code {RLIMIT_AS}} +\entry{RLIM{\_}NLIMITS}{592}{\code {RLIM_NLIMITS}} +\entry{RLIM{\_}INFINITY}{592}{\code {RLIM_INFINITY}} +\entry{PRIO{\_}MIN}{601}{\code {PRIO_MIN}} +\entry{PRIO{\_}MAX}{601}{\code {PRIO_MAX}} +\entry{PRIO{\_}PROCESS}{601}{\code {PRIO_PROCESS}} +\entry{PRIO{\_}PGRP}{601}{\code {PRIO_PGRP}} +\entry{PRIO{\_}USER}{602}{\code {PRIO_USER}} +\entry{{\_}SC{\_}PAGESIZE}{603}{\code {_SC_PAGESIZE}} +\entry{{\_}SC{\_}PHYS{\_}PAGES}{603}{\code {_SC_PHYS_PAGES}} +\entry{{\_}SC{\_}AVPHYS{\_}PAGES}{603}{\code {_SC_AVPHYS_PAGES}} +\entry{{\_}SC{\_}NPROCESSORS{\_}CONF}{604}{\code {_SC_NPROCESSORS_CONF}} +\entry{{\_}SC{\_}NPROCESSORS{\_}ONLN}{604}{\code {_SC_NPROCESSORS_ONLN}} +\entry{NSIG}{619}{\code {NSIG}} +\entry{COREFILE}{620}{\code {COREFILE}} +\entry{SIGFPE}{620}{\code {SIGFPE}} +\entry{FPE{\_}INTOVF{\_}TRAP}{620}{\code {FPE_INTOVF_TRAP}} +\entry{FPE{\_}INTDIV{\_}TRAP}{620}{\code {FPE_INTDIV_TRAP}} +\entry{FPE{\_}SUBRNG{\_}TRAP}{620}{\code {FPE_SUBRNG_TRAP}} +\entry{FPE{\_}FLTOVF{\_}TRAP}{621}{\code {FPE_FLTOVF_TRAP}} +\entry{FPE{\_}FLTDIV{\_}TRAP}{621}{\code {FPE_FLTDIV_TRAP}} +\entry{FPE{\_}FLTUND{\_}TRAP}{621}{\code {FPE_FLTUND_TRAP}} +\entry{FPE{\_}DECOVF{\_}TRAP}{621}{\code {FPE_DECOVF_TRAP}} +\entry{SIGILL}{621}{\code {SIGILL}} +\entry{SIGSEGV}{621}{\code {SIGSEGV}} +\entry{SIGBUS}{621}{\code {SIGBUS}} +\entry{SIGABRT}{622}{\code {SIGABRT}} +\entry{SIGIOT}{622}{\code {SIGIOT}} +\entry{SIGTRAP}{622}{\code {SIGTRAP}} +\entry{SIGEMT}{622}{\code {SIGEMT}} +\entry{SIGSYS}{622}{\code {SIGSYS}} +\entry{SIGTERM}{622}{\code {SIGTERM}} +\entry{SIGINT}{622}{\code {SIGINT}} +\entry{SIGQUIT}{623}{\code {SIGQUIT}} +\entry{SIGKILL}{623}{\code {SIGKILL}} +\entry{SIGHUP}{623}{\code {SIGHUP}} +\entry{SIGALRM}{623}{\code {SIGALRM}} +\entry{SIGVTALRM}{624}{\code {SIGVTALRM}} +\entry{SIGPROF}{624}{\code {SIGPROF}} +\entry{SIGIO}{624}{\code {SIGIO}} +\entry{SIGURG}{624}{\code {SIGURG}} +\entry{SIGPOLL}{624}{\code {SIGPOLL}} +\entry{SIGCHLD}{624}{\code {SIGCHLD}} +\entry{SIGCLD}{625}{\code {SIGCLD}} +\entry{SIGCONT}{625}{\code {SIGCONT}} +\entry{SIGSTOP}{625}{\code {SIGSTOP}} +\entry{SIGTSTP}{625}{\code {SIGTSTP}} +\entry{SIGTTIN}{625}{\code {SIGTTIN}} +\entry{SIGTTOU}{625}{\code {SIGTTOU}} +\entry{SIGPIPE}{626}{\code {SIGPIPE}} +\entry{SIGLOST}{626}{\code {SIGLOST}} +\entry{SIGXCPU}{626}{\code {SIGXCPU}} +\entry{SIGXFSZ}{627}{\code {SIGXFSZ}} +\entry{SIGUSR1}{627}{\code {SIGUSR1}} +\entry{SIGUSR2}{627}{\code {SIGUSR2}} +\entry{SIGWINCH}{627}{\code {SIGWINCH}} +\entry{SIGINFO}{627}{\code {SIGINFO}} +\entry{sys{\_}siglist}{628}{\code {sys_siglist}} +\entry{SIG{\_}DFL}{629}{\code {SIG_DFL}} +\entry{SIG{\_}IGN}{629}{\code {SIG_IGN}} +\entry{SIG{\_}ERR}{630}{\code {SIG_ERR}} +\entry{SA{\_}NOCLDSTOP}{633}{\code {SA_NOCLDSTOP}} +\entry{SA{\_}ONSTACK}{633}{\code {SA_ONSTACK}} +\entry{SA{\_}RESTART}{634}{\code {SA_RESTART}} +\entry{SIG{\_}BLOCK}{652}{\code {SIG_BLOCK}} +\entry{SIG{\_}UNBLOCK}{652}{\code {SIG_UNBLOCK}} +\entry{SIG{\_}SETMASK}{653}{\code {SIG_SETMASK}} +\entry{SIGSTKSZ}{660}{\code {SIGSTKSZ}} +\entry{MINSIGSTKSZ}{660}{\code {MINSIGSTKSZ}} +\entry{SS{\_}DISABLE}{660}{\code {SS_DISABLE}} +\entry{SS{\_}ONSTACK}{661}{\code {SS_ONSTACK}} +\entry{SV{\_}ONSTACK}{662}{\code {SV_ONSTACK}} +\entry{SV{\_}INTERRUPT}{662}{\code {SV_INTERRUPT}} +\entry{SV{\_}RESETHAND}{663}{\code {SV_RESETHAND}} +\entry{opterr}{667}{\code {opterr}} +\entry{optopt}{667}{\code {optopt}} +\entry{optind}{667}{\code {optind}} +\entry{optarg}{667}{\code {optarg}} +\entry{argp{\_}program{\_}version}{675}{\code {argp_program_version}} +\entry{argp{\_}program{\_}bug{\_}address}{675}{\code {argp_program_bug_address}} +\entry{argp{\_}program{\_}version{\_}hook}{675}{\code {argp_program_version_hook}} +\entry{argp{\_}err{\_}exit{\_}status}{675}{\code {argp_err_exit_status}} +\entry{OPTION{\_}ARG{\_}OPTIONAL}{678}{\code {OPTION_ARG_OPTIONAL}} +\entry{OPTION{\_}HIDDEN}{678}{\code {OPTION_HIDDEN}} +\entry{OPTION{\_}ALIAS}{678}{\code {OPTION_ALIAS}} +\entry{OPTION{\_}DOC}{678}{\code {OPTION_DOC}} +\entry{OPTION{\_}NO{\_}USAGE}{678}{\code {OPTION_NO_USAGE}} +\entry{ARGP{\_}ERR{\_}UNKNOWN}{679}{\code {ARGP_ERR_UNKNOWN}} +\entry{ARGP{\_}KEY{\_}ARG}{680}{\code {ARGP_KEY_ARG}} +\entry{ARGP{\_}KEY{\_}ARGS}{680}{\code {ARGP_KEY_ARGS}} +\entry{ARGP{\_}KEY{\_}END}{681}{\code {ARGP_KEY_END}} +\entry{ARGP{\_}KEY{\_}NO{\_}ARGS}{681}{\code {ARGP_KEY_NO_ARGS}} +\entry{ARGP{\_}KEY{\_}INIT}{681}{\code {ARGP_KEY_INIT}} +\entry{ARGP{\_}KEY{\_}SUCCESS}{681}{\code {ARGP_KEY_SUCCESS}} +\entry{ARGP{\_}KEY{\_}ERROR}{681}{\code {ARGP_KEY_ERROR}} +\entry{ARGP{\_}KEY{\_}FINI}{681}{\code {ARGP_KEY_FINI}} +\entry{ARGP{\_}PARSE{\_}ARGV0}{685}{\code {ARGP_PARSE_ARGV0}} +\entry{ARGP{\_}NO{\_}ERRS}{685}{\code {ARGP_NO_ERRS}} +\entry{ARGP{\_}NO{\_}ARGS}{685}{\code {ARGP_NO_ARGS}} +\entry{ARGP{\_}IN{\_}ORDER}{686}{\code {ARGP_IN_ORDER}} +\entry{ARGP{\_}NO{\_}HELP}{686}{\code {ARGP_NO_HELP}} +\entry{ARGP{\_}NO{\_}EXIT}{686}{\code {ARGP_NO_EXIT}} +\entry{ARGP{\_}LONG{\_}ONLY}{686}{\code {ARGP_LONG_ONLY}} +\entry{ARGP{\_}SILENT}{686}{\code {ARGP_SILENT}} +\entry{ARGP{\_}KEY{\_}HELP{\_}PRE{\_}DOC}{686}{\code {ARGP_KEY_HELP_PRE_DOC}} +\entry{ARGP{\_}KEY{\_}HELP{\_}POST{\_}DOC}{687}{\code {ARGP_KEY_HELP_POST_DOC}} +\entry{ARGP{\_}KEY{\_}HELP{\_}HEADER}{687}{\code {ARGP_KEY_HELP_HEADER}} +\entry{ARGP{\_}KEY{\_}HELP{\_}EXTRA}{687}{\code {ARGP_KEY_HELP_EXTRA}} +\entry{ARGP{\_}KEY{\_}HELP{\_}DUP{\_}ARGS{\_}NOTE}{687}{\code {ARGP_KEY_HELP_DUP_ARGS_NOTE}} +\entry{ARGP{\_}KEY{\_}HELP{\_}ARGS{\_}DOC}{687}{\code {ARGP_KEY_HELP_ARGS_DOC}} +\entry{ARGP{\_}HELP{\_}USAGE}{687}{\code {ARGP_HELP_USAGE}} +\entry{ARGP{\_}HELP{\_}SHORT{\_}USAGE}{687}{\code {ARGP_HELP_SHORT_USAGE}} +\entry{ARGP{\_}HELP{\_}SEE}{688}{\code {ARGP_HELP_SEE}} +\entry{ARGP{\_}HELP{\_}LONG}{688}{\code {ARGP_HELP_LONG}} +\entry{ARGP{\_}HELP{\_}PRE{\_}DOC}{688}{\code {ARGP_HELP_PRE_DOC}} +\entry{ARGP{\_}HELP{\_}POST{\_}DOC}{688}{\code {ARGP_HELP_POST_DOC}} +\entry{ARGP{\_}HELP{\_}DOC}{688}{\code {ARGP_HELP_DOC}} +\entry{ARGP{\_}HELP{\_}BUG{\_}ADDR}{688}{\code {ARGP_HELP_BUG_ADDR}} +\entry{ARGP{\_}HELP{\_}LONG{\_}ONLY}{688}{\code {ARGP_HELP_LONG_ONLY}} +\entry{ARGP{\_}HELP{\_}EXIT{\_}ERR}{688}{\code {ARGP_HELP_EXIT_ERR}} +\entry{ARGP{\_}HELP{\_}EXIT{\_}OK}{688}{\code {ARGP_HELP_EXIT_OK}} +\entry{ARGP{\_}HELP{\_}STD{\_}ERR}{688}{\code {ARGP_HELP_STD_ERR}} +\entry{ARGP{\_}HELP{\_}STD{\_}USAGE}{688}{\code {ARGP_HELP_STD_USAGE}} +\entry{ARGP{\_}HELP{\_}STD{\_}HELP}{688}{\code {ARGP_HELP_STD_HELP}} +\entry{environ}{702}{\code {environ}} +\entry{EXIT{\_}SUCCESS}{707}{\code {EXIT_SUCCESS}} +\entry{EXIT{\_}FAILURE}{707}{\code {EXIT_FAILURE}} +\entry{L{\_}ctermid}{738}{\code {L_ctermid}} +\entry{aliases}{743}{\code {aliases}} +\entry{ethers}{743}{\code {ethers}} +\entry{group}{743}{\code {group}} +\entry{hosts}{743}{\code {hosts}} +\entry{netgroup}{743}{\code {netgroup}} +\entry{networks}{743}{\code {networks}} +\entry{protocols}{743}{\code {protocols}} +\entry{passwd}{743}{\code {passwd}} +\entry{rpc}{743}{\code {rpc}} +\entry{services}{743}{\code {services}} +\entry{shadow}{744}{\code {shadow}} +\entry{NSS{\_}STATUS{\_}TRYAGAIN}{748}{\code {NSS_STATUS_TRYAGAIN}} +\entry{NSS{\_}STATUS{\_}UNAVAIL}{748}{\code {NSS_STATUS_UNAVAIL}} +\entry{NSS{\_}STATUS{\_}NOTFOUND}{748}{\code {NSS_STATUS_NOTFOUND}} +\entry{NSS{\_}STATUS{\_}SUCCESS}{748}{\code {NSS_STATUS_SUCCESS}} +\entry{L{\_}cuserid}{763}{\code {L_cuserid}} +\entry{EMPTY}{764}{\code {EMPTY}} +\entry{RUN{\_}LVL}{764}{\code {RUN_LVL}} +\entry{BOOT{\_}TIME}{764}{\code {BOOT_TIME}} +\entry{OLD{\_}TIME}{764}{\code {OLD_TIME}} +\entry{NEW{\_}TIME}{764}{\code {NEW_TIME}} +\entry{INIT{\_}PROCESS}{764}{\code {INIT_PROCESS}} +\entry{LOGIN{\_}PROCESS}{764}{\code {LOGIN_PROCESS}} +\entry{USER{\_}PROCESS}{764}{\code {USER_PROCESS}} +\entry{DEAD{\_}PROCESS}{765}{\code {DEAD_PROCESS}} +\entry{ACCOUNTING}{765}{\code {ACCOUNTING}} +\entry{{\_}PATH{\_}UTMP}{767}{\code {_PATH_UTMP}} +\entry{{\_}PATH{\_}WTMP}{767}{\code {_PATH_WTMP}} +\entry{EMPTY}{768}{\code {EMPTY}} +\entry{RUN{\_}LVL}{768}{\code {RUN_LVL}} +\entry{BOOT{\_}TIME}{768}{\code {BOOT_TIME}} +\entry{OLD{\_}TIME}{769}{\code {OLD_TIME}} +\entry{NEW{\_}TIME}{769}{\code {NEW_TIME}} +\entry{INIT{\_}PROCESS}{769}{\code {INIT_PROCESS}} +\entry{LOGIN{\_}PROCESS}{769}{\code {LOGIN_PROCESS}} +\entry{USER{\_}PROCESS}{769}{\code {USER_PROCESS}} +\entry{DEAD{\_}PROCESS}{769}{\code {DEAD_PROCESS}} +\entry{{\_}PATH{\_}FSTAB}{785}{\code {_PATH_FSTAB}} +\entry{{\_}PATH{\_}MNTTAB}{785}{\code {_PATH_MNTTAB}} +\entry{FSTAB}{785}{\code {FSTAB}} +\entry{{\_}PATH{\_}MOUNTED}{785}{\code {_PATH_MOUNTED}} +\entry{FSTAB{\_}RW}{786}{\code {FSTAB_RW}} +\entry{FSTAB{\_}RQ}{786}{\code {FSTAB_RQ}} +\entry{FSTAB{\_}RO}{786}{\code {FSTAB_RO}} +\entry{FSTAB{\_}SW}{786}{\code {FSTAB_SW}} +\entry{FSTAB{\_}XX}{786}{\code {FSTAB_XX}} +\entry{MNTTYPE{\_}IGNORE}{788}{\code {MNTTYPE_IGNORE}} +\entry{MNTTYPE{\_}NFS}{788}{\code {MNTTYPE_NFS}} +\entry{MNTTYPE{\_}SWAP}{788}{\code {MNTTYPE_SWAP}} +\entry{MNTOPT{\_}DEFAULTS}{788}{\code {MNTOPT_DEFAULTS}} +\entry{MNTOPT{\_}RO}{788}{\code {MNTOPT_RO}} +\entry{MNTOPT{\_}RW}{788}{\code {MNTOPT_RW}} +\entry{MNTOPT{\_}SUID}{788}{\code {MNTOPT_SUID}} +\entry{MNTOPT{\_}NOSUID}{789}{\code {MNTOPT_NOSUID}} +\entry{MNTOPT{\_}NOAUTO}{789}{\code {MNTOPT_NOAUTO}} +\entry{ARG{\_}MAX}{797}{\code {ARG_MAX}} +\entry{CHILD{\_}MAX}{797}{\code {CHILD_MAX}} +\entry{OPEN{\_}MAX}{797}{\code {OPEN_MAX}} +\entry{STREAM{\_}MAX}{797}{\code {STREAM_MAX}} +\entry{TZNAME{\_}MAX}{797}{\code {TZNAME_MAX}} +\entry{NGROUPS{\_}MAX}{798}{\code {NGROUPS_MAX}} +\entry{SSIZE{\_}MAX}{798}{\code {SSIZE_MAX}} +\entry{RE{\_}DUP{\_}MAX}{798}{\code {RE_DUP_MAX}} +\entry{{\_}POSIX{\_}JOB{\_}CONTROL}{798}{\code {_POSIX_JOB_CONTROL}} +\entry{{\_}POSIX{\_}SAVED{\_}IDS}{798}{\code {_POSIX_SAVED_IDS}} +\entry{{\_}POSIX2{\_}C{\_}DEV}{799}{\code {_POSIX2_C_DEV}} +\entry{{\_}POSIX2{\_}FORT{\_}DEV}{799}{\code {_POSIX2_FORT_DEV}} +\entry{{\_}POSIX2{\_}FORT{\_}RUN}{799}{\code {_POSIX2_FORT_RUN}} +\entry{{\_}POSIX2{\_}LOCALEDEF}{799}{\code {_POSIX2_LOCALEDEF}} +\entry{{\_}POSIX2{\_}SW{\_}DEV}{799}{\code {_POSIX2_SW_DEV}} +\entry{{\_}POSIX{\_}VERSION}{799}{\code {_POSIX_VERSION}} +\entry{{\_}POSIX2{\_}C{\_}VERSION}{800}{\code {_POSIX2_C_VERSION}} +\entry{{\_}SC{\_}ARG{\_}MAX}{800}{\code {_SC_ARG_MAX}} +\entry{{\_}SC{\_}CHILD{\_}MAX}{800}{\code {_SC_CHILD_MAX}} +\entry{{\_}SC{\_}OPEN{\_}MAX}{800}{\code {_SC_OPEN_MAX}} +\entry{{\_}SC{\_}STREAM{\_}MAX}{801}{\code {_SC_STREAM_MAX}} +\entry{{\_}SC{\_}TZNAME{\_}MAX}{801}{\code {_SC_TZNAME_MAX}} +\entry{{\_}SC{\_}NGROUPS{\_}MAX}{801}{\code {_SC_NGROUPS_MAX}} +\entry{{\_}SC{\_}JOB{\_}CONTROL}{801}{\code {_SC_JOB_CONTROL}} +\entry{{\_}SC{\_}SAVED{\_}IDS}{801}{\code {_SC_SAVED_IDS}} +\entry{{\_}SC{\_}VERSION}{801}{\code {_SC_VERSION}} +\entry{{\_}SC{\_}CLK{\_}TCK}{801}{\code {_SC_CLK_TCK}} +\entry{{\_}SC{\_}CHARCLASS{\_}NAME{\_}MAX}{801}{\code {_SC_CHARCLASS_NAME_MAX}} +\entry{{\_}SC{\_}REALTIME{\_}SIGNALS}{801}{\code {_SC_REALTIME_SIGNALS}} +\entry{{\_}SC{\_}PRIORITY{\_}SCHEDULING}{801}{\code {_SC_PRIORITY_SCHEDULING}} +\entry{{\_}SC{\_}TIMERS}{801}{\code {_SC_TIMERS}} +\entry{{\_}SC{\_}ASYNCHRONOUS{\_}IO}{801}{\code {_SC_ASYNCHRONOUS_IO}} +\entry{{\_}SC{\_}PRIORITIZED{\_}IO}{801}{\code {_SC_PRIORITIZED_IO}} +\entry{{\_}SC{\_}SYNCHRONIZED{\_}IO}{801}{\code {_SC_SYNCHRONIZED_IO}} +\entry{{\_}SC{\_}FSYNC}{801}{\code {_SC_FSYNC}} +\entry{{\_}SC{\_}MAPPED{\_}FILES}{801}{\code {_SC_MAPPED_FILES}} +\entry{{\_}SC{\_}MEMLOCK}{801}{\code {_SC_MEMLOCK}} +\entry{{\_}SC{\_}MEMLOCK{\_}RANGE}{802}{\code {_SC_MEMLOCK_RANGE}} +\entry{{\_}SC{\_}MEMORY{\_}PROTECTION}{802}{\code {_SC_MEMORY_PROTECTION}} +\entry{{\_}SC{\_}MESSAGE{\_}PASSING}{802}{\code {_SC_MESSAGE_PASSING}} +\entry{{\_}SC{\_}SEMAPHORES}{802}{\code {_SC_SEMAPHORES}} +\entry{{\_}SC{\_}SHARED{\_}MEMORY{\_}OBJECTS}{802}{\code {_SC_SHARED_MEMORY_OBJECTS}} +\entry{{\_}SC{\_}AIO{\_}LISTIO{\_}MAX}{802}{\code {_SC_AIO_LISTIO_MAX}} +\entry{{\_}SC{\_}AIO{\_}MAX}{802}{\code {_SC_AIO_MAX}} +\entry{{\_}SC{\_}AIO{\_}PRIO{\_}DELTA{\_}MAX}{802}{\code {_SC_AIO_PRIO_DELTA_MAX}} +\entry{{\_}SC{\_}DELAYTIMER{\_}MAX}{802}{\code {_SC_DELAYTIMER_MAX}} +\entry{{\_}SC{\_}MQ{\_}OPEN{\_}MAX}{802}{\code {_SC_MQ_OPEN_MAX}} +\entry{{\_}SC{\_}MQ{\_}PRIO{\_}MAX}{802}{\code {_SC_MQ_PRIO_MAX}} +\entry{{\_}SC{\_}RTSIG{\_}MAX}{802}{\code {_SC_RTSIG_MAX}} +\entry{{\_}SC{\_}SEM{\_}NSEMS{\_}MAX}{802}{\code {_SC_SEM_NSEMS_MAX}} +\entry{{\_}SC{\_}SEM{\_}VALUE{\_}MAX}{802}{\code {_SC_SEM_VALUE_MAX}} +\entry{{\_}SC{\_}SIGQUEUE{\_}MAX}{802}{\code {_SC_SIGQUEUE_MAX}} +\entry{{\_}SC{\_}TIMER{\_}MAX}{802}{\code {_SC_TIMER_MAX}} +\entry{{\_}SC{\_}PII}{802}{\code {_SC_PII}} +\entry{{\_}SC{\_}PII{\_}XTI}{803}{\code {_SC_PII_XTI}} +\entry{{\_}SC{\_}PII{\_}SOCKET}{803}{\code {_SC_PII_SOCKET}} +\entry{{\_}SC{\_}PII{\_}INTERNET}{803}{\code {_SC_PII_INTERNET}} +\entry{{\_}SC{\_}PII{\_}OSI}{803}{\code {_SC_PII_OSI}} +\entry{{\_}SC{\_}SELECT}{803}{\code {_SC_SELECT}} +\entry{{\_}SC{\_}UIO{\_}MAXIOV}{803}{\code {_SC_UIO_MAXIOV}} +\entry{{\_}SC{\_}PII{\_}INTERNET{\_}STREAM}{803}{\code {_SC_PII_INTERNET_STREAM}} +\entry{{\_}SC{\_}PII{\_}INTERNET{\_}DGRAM}{803}{\code {_SC_PII_INTERNET_DGRAM}} +\entry{{\_}SC{\_}PII{\_}OSI{\_}COTS}{803}{\code {_SC_PII_OSI_COTS}} +\entry{{\_}SC{\_}PII{\_}OSI{\_}CLTS}{803}{\code {_SC_PII_OSI_CLTS}} +\entry{{\_}SC{\_}PII{\_}OSI{\_}M}{803}{\code {_SC_PII_OSI_M}} +\entry{{\_}SC{\_}T{\_}IOV{\_}MAX}{803}{\code {_SC_T_IOV_MAX}} +\entry{{\_}SC{\_}THREADS}{803}{\code {_SC_THREADS}} +\entry{{\_}SC{\_}THREAD{\_}SAFE{\_}FUNCTIONS}{803}{\code {_SC_THREAD_SAFE_FUNCTIONS}} +\entry{{\_}SC{\_}GETGR{\_}R{\_}SIZE{\_}MAX}{803}{\code {_SC_GETGR_R_SIZE_MAX}} +\entry{{\_}SC{\_}GETPW{\_}R{\_}SIZE{\_}MAX}{803}{\code {_SC_GETPW_R_SIZE_MAX}} +\entry{{\_}SC{\_}LOGIN{\_}NAME{\_}MAX}{803}{\code {_SC_LOGIN_NAME_MAX}} +\entry{{\_}SC{\_}TTY{\_}NAME{\_}MAX}{804}{\code {_SC_TTY_NAME_MAX}} +\entry{{\_}SC{\_}THREAD{\_}DESTRUCTOR{\_}ITERATIONS}{804}{\code {_SC_THREAD_DESTRUCTOR_ITERATIONS}} +\entry{{\_}SC{\_}THREAD{\_}KEYS{\_}MAX}{804}{\code {_SC_THREAD_KEYS_MAX}} +\entry{{\_}SC{\_}THREAD{\_}STACK{\_}MIN}{804}{\code {_SC_THREAD_STACK_MIN}} +\entry{{\_}SC{\_}THREAD{\_}THREADS{\_}MAX}{804}{\code {_SC_THREAD_THREADS_MAX}} +\entry{{\_}SC{\_}THREAD{\_}ATTR{\_}STACKADDR}{804}{\code {_SC_THREAD_ATTR_STACKADDR}} +\entry{{\_}SC{\_}THREAD{\_}ATTR{\_}STACKSIZE}{804}{\code {_SC_THREAD_ATTR_STACKSIZE}} +\entry{{\_}SC{\_}THREAD{\_}PRIORITY{\_}SCHEDULING}{804}{\code {_SC_THREAD_PRIORITY_SCHEDULING}} +\entry{{\_}SC{\_}THREAD{\_}PRIO{\_}INHERIT}{804}{\code {_SC_THREAD_PRIO_INHERIT}} +\entry{{\_}SC{\_}THREAD{\_}PRIO{\_}PROTECT}{804}{\code {_SC_THREAD_PRIO_PROTECT}} +\entry{{\_}SC{\_}THREAD{\_}PROCESS{\_}SHARED}{804}{\code {_SC_THREAD_PROCESS_SHARED}} +\entry{{\_}SC{\_}2{\_}C{\_}DEV}{804}{\code {_SC_2_C_DEV}} +\entry{{\_}SC{\_}2{\_}FORT{\_}DEV}{804}{\code {_SC_2_FORT_DEV}} +\entry{{\_}SC{\_}2{\_}FORT{\_}RUN}{804}{\code {_SC_2_FORT_RUN}} +\entry{{\_}SC{\_}2{\_}LOCALEDEF}{804}{\code {_SC_2_LOCALEDEF}} +\entry{{\_}SC{\_}2{\_}SW{\_}DEV}{805}{\code {_SC_2_SW_DEV}} +\entry{{\_}SC{\_}BC{\_}BASE{\_}MAX}{805}{\code {_SC_BC_BASE_MAX}} +\entry{{\_}SC{\_}BC{\_}DIM{\_}MAX}{805}{\code {_SC_BC_DIM_MAX}} +\entry{{\_}SC{\_}BC{\_}SCALE{\_}MAX}{805}{\code {_SC_BC_SCALE_MAX}} +\entry{{\_}SC{\_}BC{\_}STRING{\_}MAX}{805}{\code {_SC_BC_STRING_MAX}} +\entry{{\_}SC{\_}COLL{\_}WEIGHTS{\_}MAX}{805}{\code {_SC_COLL_WEIGHTS_MAX}} +\entry{{\_}SC{\_}EXPR{\_}NEST{\_}MAX}{805}{\code {_SC_EXPR_NEST_MAX}} +\entry{{\_}SC{\_}LINE{\_}MAX}{805}{\code {_SC_LINE_MAX}} +\entry{{\_}SC{\_}EQUIV{\_}CLASS{\_}MAX}{805}{\code {_SC_EQUIV_CLASS_MAX}} +\entry{{\_}SC{\_}VERSION}{805}{\code {_SC_VERSION}} +\entry{{\_}SC{\_}2{\_}VERSION}{805}{\code {_SC_2_VERSION}} +\entry{{\_}SC{\_}PAGESIZE}{805}{\code {_SC_PAGESIZE}} +\entry{{\_}SC{\_}NPROCESSORS{\_}CONF}{805}{\code {_SC_NPROCESSORS_CONF}} +\entry{{\_}SC{\_}NPROCESSORS{\_}ONLN}{805}{\code {_SC_NPROCESSORS_ONLN}} +\entry{{\_}SC{\_}PHYS{\_}PAGES}{806}{\code {_SC_PHYS_PAGES}} +\entry{{\_}SC{\_}AVPHYS{\_}PAGES}{806}{\code {_SC_AVPHYS_PAGES}} +\entry{{\_}SC{\_}ATEXIT{\_}MAX}{806}{\code {_SC_ATEXIT_MAX}} +\entry{{\_}SC{\_}XOPEN{\_}VERSION}{806}{\code {_SC_XOPEN_VERSION}} +\entry{{\_}SC{\_}XOPEN{\_}XCU{\_}VERSION}{806}{\code {_SC_XOPEN_XCU_VERSION}} +\entry{{\_}SC{\_}XOPEN{\_}UNIX}{806}{\code {_SC_XOPEN_UNIX}} +\entry{{\_}SC{\_}XOPEN{\_}REALTIME}{806}{\code {_SC_XOPEN_REALTIME}} +\entry{{\_}SC{\_}XOPEN{\_}REALTIME{\_}THREADS}{806}{\code {_SC_XOPEN_REALTIME_THREADS}} +\entry{{\_}SC{\_}XOPEN{\_}LEGACY}{806}{\code {_SC_XOPEN_LEGACY}} +\entry{{\_}SC{\_}XOPEN{\_}CRYPT}{806}{\code {_SC_XOPEN_CRYPT}} +\entry{{\_}SC{\_}XOPEN{\_}ENH{\_}I18N}{806}{\code {_SC_XOPEN_ENH_I18N}} +\entry{{\_}SC{\_}XOPEN{\_}SHM}{806}{\code {_SC_XOPEN_SHM}} +\entry{{\_}SC{\_}XOPEN{\_}XPG2}{806}{\code {_SC_XOPEN_XPG2}} +\entry{{\_}SC{\_}XOPEN{\_}XPG3}{806}{\code {_SC_XOPEN_XPG3}} +\entry{{\_}SC{\_}XOPEN{\_}XPG4}{806}{\code {_SC_XOPEN_XPG4}} +\entry{{\_}SC{\_}CHAR{\_}BIT}{806}{\code {_SC_CHAR_BIT}} +\entry{{\_}SC{\_}CHAR{\_}MAX}{806}{\code {_SC_CHAR_MAX}} +\entry{{\_}SC{\_}CHAR{\_}MIN}{807}{\code {_SC_CHAR_MIN}} +\entry{{\_}SC{\_}INT{\_}MAX}{807}{\code {_SC_INT_MAX}} +\entry{{\_}SC{\_}INT{\_}MIN}{807}{\code {_SC_INT_MIN}} +\entry{{\_}SC{\_}LONG{\_}BIT}{807}{\code {_SC_LONG_BIT}} +\entry{{\_}SC{\_}WORD{\_}BIT}{807}{\code {_SC_WORD_BIT}} +\entry{{\_}SC{\_}MB{\_}LEN{\_}MAX}{807}{\code {_SC_MB_LEN_MAX}} +\entry{{\_}SC{\_}NZERO}{807}{\code {_SC_NZERO}} +\entry{SC{\_}SSIZE{\_}MAX}{807}{\code {SC_SSIZE_MAX}} +\entry{{\_}SC{\_}SCHAR{\_}MAX}{807}{\code {_SC_SCHAR_MAX}} +\entry{{\_}SC{\_}SCHAR{\_}MIN}{807}{\code {_SC_SCHAR_MIN}} +\entry{{\_}SC{\_}SHRT{\_}MAX}{807}{\code {_SC_SHRT_MAX}} +\entry{{\_}SC{\_}SHRT{\_}MIN}{807}{\code {_SC_SHRT_MIN}} +\entry{{\_}SC{\_}UCHAR{\_}MAX}{807}{\code {_SC_UCHAR_MAX}} +\entry{{\_}SC{\_}UINT{\_}MAX}{807}{\code {_SC_UINT_MAX}} +\entry{{\_}SC{\_}ULONG{\_}MAX}{808}{\code {_SC_ULONG_MAX}} +\entry{{\_}SC{\_}USHRT{\_}MAX}{808}{\code {_SC_USHRT_MAX}} +\entry{{\_}SC{\_}NL{\_}ARGMAX}{808}{\code {_SC_NL_ARGMAX}} +\entry{{\_}SC{\_}NL{\_}LANGMAX}{808}{\code {_SC_NL_LANGMAX}} +\entry{{\_}SC{\_}NL{\_}MSGMAX}{808}{\code {_SC_NL_MSGMAX}} +\entry{{\_}SC{\_}NL{\_}NMAX}{808}{\code {_SC_NL_NMAX}} +\entry{{\_}SC{\_}NL{\_}SETMAX}{808}{\code {_SC_NL_SETMAX}} +\entry{{\_}SC{\_}NL{\_}TEXTMAX}{808}{\code {_SC_NL_TEXTMAX}} +\entry{LINK{\_}MAX}{810}{\code {LINK_MAX}} +\entry{MAX{\_}CANON}{810}{\code {MAX_CANON}} +\entry{MAX{\_}INPUT}{810}{\code {MAX_INPUT}} +\entry{NAME{\_}MAX}{810}{\code {NAME_MAX}} +\entry{PATH{\_}MAX}{811}{\code {PATH_MAX}} +\entry{PIPE{\_}BUF}{811}{\code {PIPE_BUF}} +\entry{MAXNAMLEN}{811}{\code {MAXNAMLEN}} +\entry{FILENAME{\_}MAX}{811}{\code {FILENAME_MAX}} +\entry{{\_}POSIX{\_}CHOWN{\_}RESTRICTED}{811}{\code {_POSIX_CHOWN_RESTRICTED}} +\entry{{\_}POSIX{\_}NO{\_}TRUNC}{812}{\code {_POSIX_NO_TRUNC}} +\entry{{\_}POSIX{\_}VDISABLE}{812}{\code {_POSIX_VDISABLE}} +\entry{BC{\_}BASE{\_}MAX}{815}{\code {BC_BASE_MAX}} +\entry{BC{\_}DIM{\_}MAX}{815}{\code {BC_DIM_MAX}} +\entry{BC{\_}SCALE{\_}MAX}{815}{\code {BC_SCALE_MAX}} +\entry{BC{\_}STRING{\_}MAX}{815}{\code {BC_STRING_MAX}} +\entry{COLL{\_}WEIGHTS{\_}MAX}{815}{\code {COLL_WEIGHTS_MAX}} +\entry{EXPR{\_}NEST{\_}MAX}{815}{\code {EXPR_NEST_MAX}} +\entry{LINE{\_}MAX}{815}{\code {LINE_MAX}} +\entry{EQUIV{\_}CLASS{\_}MAX}{815}{\code {EQUIV_CLASS_MAX}} +\entry{DES{\_}ENCRYPT}{824}{\code {DES_ENCRYPT}} +\entry{DES{\_}DECRYPT}{824}{\code {DES_DECRYPT}} +\entry{DES{\_}HW}{824}{\code {DES_HW}} +\entry{DES{\_}SW}{824}{\code {DES_SW}} +\entry{DESERR{\_}NONE}{824}{\code {DESERR_NONE}} +\entry{DESERR{\_}NOHWDEVICE}{824}{\code {DESERR_NOHWDEVICE}} +\entry{DESERR{\_}HWERROR}{824}{\code {DESERR_HWERROR}} +\entry{DESERR{\_}BADPARAM}{824}{\code {DESERR_BADPARAM}} +\entry{SEM{\_}VALUE{\_}MAX}{844}{\code {SEM_VALUE_MAX}} +\entry{NDEBUG}{853}{\code {NDEBUG}} +\entry{NULL}{860}{\code {NULL}} +\entry{SCHAR{\_}MIN}{862}{\code {SCHAR_MIN}} +\entry{SCHAR{\_}MAX}{862}{\code {SCHAR_MAX}} +\entry{UCHAR{\_}MAX}{862}{\code {UCHAR_MAX}} +\entry{CHAR{\_}MIN}{862}{\code {CHAR_MIN}} +\entry{CHAR{\_}MAX}{863}{\code {CHAR_MAX}} +\entry{SHRT{\_}MIN}{863}{\code {SHRT_MIN}} +\entry{SHRT{\_}MAX}{863}{\code {SHRT_MAX}} +\entry{USHRT{\_}MAX}{863}{\code {USHRT_MAX}} +\entry{INT{\_}MIN}{863}{\code {INT_MIN}} +\entry{INT{\_}MAX}{863}{\code {INT_MAX}} +\entry{UINT{\_}MAX}{863}{\code {UINT_MAX}} +\entry{LONG{\_}MIN}{863}{\code {LONG_MIN}} +\entry{LONG{\_}MAX}{863}{\code {LONG_MAX}} +\entry{ULONG{\_}MAX}{863}{\code {ULONG_MAX}} +\entry{LONG{\_}LONG{\_}MIN}{863}{\code {LONG_LONG_MIN}} +\entry{LONG{\_}LONG{\_}MAX}{863}{\code {LONG_LONG_MAX}} +\entry{ULONG{\_}LONG{\_}MAX}{863}{\code {ULONG_LONG_MAX}} +\entry{WCHAR{\_}MAX}{863}{\code {WCHAR_MAX}} +\entry{FLT{\_}ROUNDS}{865}{\code {FLT_ROUNDS}} +\entry{FLT{\_}RADIX}{866}{\code {FLT_RADIX}} +\entry{FLT{\_}MANT{\_}DIG}{866}{\code {FLT_MANT_DIG}} +\entry{DBL{\_}MANT{\_}DIG}{866}{\code {DBL_MANT_DIG}} +\entry{LDBL{\_}MANT{\_}DIG}{866}{\code {LDBL_MANT_DIG}} +\entry{FLT{\_}DIG}{866}{\code {FLT_DIG}} +\entry{DBL{\_}DIG}{866}{\code {DBL_DIG}} +\entry{LDBL{\_}DIG}{866}{\code {LDBL_DIG}} +\entry{FLT{\_}MIN{\_}EXP}{866}{\code {FLT_MIN_EXP}} +\entry{DBL{\_}MIN{\_}EXP}{867}{\code {DBL_MIN_EXP}} +\entry{LDBL{\_}MIN{\_}EXP}{867}{\code {LDBL_MIN_EXP}} +\entry{FLT{\_}MIN{\_}10{\_}EXP}{867}{\code {FLT_MIN_10_EXP}} +\entry{DBL{\_}MIN{\_}10{\_}EXP}{867}{\code {DBL_MIN_10_EXP}} +\entry{LDBL{\_}MIN{\_}10{\_}EXP}{867}{\code {LDBL_MIN_10_EXP}} +\entry{FLT{\_}MAX{\_}EXP}{867}{\code {FLT_MAX_EXP}} +\entry{DBL{\_}MAX{\_}EXP}{867}{\code {DBL_MAX_EXP}} +\entry{LDBL{\_}MAX{\_}EXP}{867}{\code {LDBL_MAX_EXP}} +\entry{FLT{\_}MAX{\_}10{\_}EXP}{867}{\code {FLT_MAX_10_EXP}} +\entry{DBL{\_}MAX{\_}10{\_}EXP}{867}{\code {DBL_MAX_10_EXP}} +\entry{LDBL{\_}MAX{\_}10{\_}EXP}{867}{\code {LDBL_MAX_10_EXP}} +\entry{FLT{\_}MAX}{867}{\code {FLT_MAX}} +\entry{DBL{\_}MAX}{867}{\code {DBL_MAX}} +\entry{LDBL{\_}MAX}{867}{\code {LDBL_MAX}} +\entry{FLT{\_}MIN}{867}{\code {FLT_MIN}} +\entry{DBL{\_}MIN}{868}{\code {DBL_MIN}} +\entry{LDBL{\_}MIN}{868}{\code {LDBL_MIN}} +\entry{FLT{\_}EPSILON}{868}{\code {FLT_EPSILON}} +\entry{DBL{\_}EPSILON}{868}{\code {DBL_EPSILON}} +\entry{LDBL{\_}EPSILON}{868}{\code {LDBL_EPSILON}} diff -durpNa glibc-2.2.2/manual/libc.vrs glibc-2.2.3/manual/libc.vrs --- glibc-2.2.2/manual/libc.vrs Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.vrs Wed Apr 25 16:05:56 2001 @@ -9,7 +9,7 @@ \entry {\code {__memalign_hook}}{42} \entry {\code {__realloc_hook}}{41} \entry {\code {_BSD_SOURCE}}{8} -\entry {\code {_Complex_I}}{541} +\entry {\code {_Complex_I}}{543} \entry {\code {_FILE_OFFSET_BITS}}{9} \entry {\code {_GNU_SOURCE}}{10} \entry {\code {_IOFBF}}{300} @@ -18,146 +18,146 @@ \entry {\code {_ISOC99_SOURCE}}{9} \entry {\code {_LARGEFILE_SOURCE}}{9} \entry {\code {_LARGEFILE64_SOURCE}}{9} -\entry {\code {_PATH_FSTAB}}{777} -\entry {\code {_PATH_MNTTAB}}{777} -\entry {\code {_PATH_MOUNTED}}{777} -\entry {\code {_PATH_UTMP}}{759} -\entry {\code {_PATH_WTMP}}{759} +\entry {\code {_PATH_FSTAB}}{785} +\entry {\code {_PATH_MNTTAB}}{785} +\entry {\code {_PATH_MOUNTED}}{785} +\entry {\code {_PATH_UTMP}}{767} +\entry {\code {_PATH_WTMP}}{767} \entry {\code {_POSIX_C_SOURCE}}{8} -\entry {\code {_POSIX_CHOWN_RESTRICTED}}{803} -\entry {\code {_POSIX_JOB_CONTROL}}{790} -\entry {\code {_POSIX_NO_TRUNC}}{804} -\entry {\code {_POSIX_SAVED_IDS}}{790} +\entry {\code {_POSIX_CHOWN_RESTRICTED}}{811} +\entry {\code {_POSIX_JOB_CONTROL}}{798} +\entry {\code {_POSIX_NO_TRUNC}}{812} +\entry {\code {_POSIX_SAVED_IDS}}{798} \entry {\code {_POSIX_SOURCE}}{7} -\entry {\code {_POSIX_VDISABLE}}{471, 804} -\entry {\code {_POSIX_VERSION}}{791} -\entry {\code {_POSIX2_C_DEV}}{791} -\entry {\code {_POSIX2_C_VERSION}}{792} -\entry {\code {_POSIX2_FORT_DEV}}{791} -\entry {\code {_POSIX2_FORT_RUN}}{791} -\entry {\code {_POSIX2_LOCALEDEF}}{791} -\entry {\code {_POSIX2_SW_DEV}}{791} +\entry {\code {_POSIX_VDISABLE}}{471, 812} +\entry {\code {_POSIX_VERSION}}{799} +\entry {\code {_POSIX2_C_DEV}}{799} +\entry {\code {_POSIX2_C_VERSION}}{800} +\entry {\code {_POSIX2_FORT_DEV}}{799} +\entry {\code {_POSIX2_FORT_RUN}}{799} +\entry {\code {_POSIX2_LOCALEDEF}}{799} +\entry {\code {_POSIX2_SW_DEV}}{799} \entry {\code {_REENTRANT}}{10} -\entry {\code {_SC_2_C_DEV}}{796} -\entry {\code {_SC_2_FORT_DEV}}{796} -\entry {\code {_SC_2_FORT_RUN}}{796} -\entry {\code {_SC_2_LOCALEDEF}}{796} -\entry {\code {_SC_2_SW_DEV}}{797} -\entry {\code {_SC_2_VERSION}}{797} -\entry {\code {_SC_AIO_LISTIO_MAX}}{794} -\entry {\code {_SC_AIO_MAX}}{794} -\entry {\code {_SC_AIO_PRIO_DELTA_MAX}}{794} -\entry {\code {_SC_ARG_MAX}}{792} -\entry {\code {_SC_ASYNCHRONOUS_IO}}{793} -\entry {\code {_SC_ATEXIT_MAX}}{798} -\entry {\code {_SC_AVPHYS_PAGES}}{601, 798} -\entry {\code {_SC_BC_BASE_MAX}}{797} -\entry {\code {_SC_BC_DIM_MAX}}{797} -\entry {\code {_SC_BC_SCALE_MAX}}{797} -\entry {\code {_SC_BC_STRING_MAX}}{797} -\entry {\code {_SC_CHAR_BIT}}{798} -\entry {\code {_SC_CHAR_MAX}}{798} -\entry {\code {_SC_CHAR_MIN}}{799} -\entry {\code {_SC_CHARCLASS_NAME_MAX}}{793} -\entry {\code {_SC_CHILD_MAX}}{792} -\entry {\code {_SC_CLK_TCK}}{793} -\entry {\code {_SC_COLL_WEIGHTS_MAX}}{797} -\entry {\code {_SC_DELAYTIMER_MAX}}{794} -\entry {\code {_SC_EQUIV_CLASS_MAX}}{797} -\entry {\code {_SC_EXPR_NEST_MAX}}{797} -\entry {\code {_SC_FSYNC}}{793} -\entry {\code {_SC_GETGR_R_SIZE_MAX}}{795} -\entry {\code {_SC_GETPW_R_SIZE_MAX}}{795} -\entry {\code {_SC_INT_MAX}}{799} -\entry {\code {_SC_INT_MIN}}{799} -\entry {\code {_SC_JOB_CONTROL}}{793} -\entry {\code {_SC_LINE_MAX}}{797} -\entry {\code {_SC_LOGIN_NAME_MAX}}{795} -\entry {\code {_SC_LONG_BIT}}{799} -\entry {\code {_SC_MAPPED_FILES}}{793} -\entry {\code {_SC_MB_LEN_MAX}}{799} -\entry {\code {_SC_MEMLOCK}}{793} -\entry {\code {_SC_MEMLOCK_RANGE}}{794} -\entry {\code {_SC_MEMORY_PROTECTION}}{794} -\entry {\code {_SC_MESSAGE_PASSING}}{794} -\entry {\code {_SC_MQ_OPEN_MAX}}{794} -\entry {\code {_SC_MQ_PRIO_MAX}}{794} -\entry {\code {_SC_NGROUPS_MAX}}{793} -\entry {\code {_SC_NL_ARGMAX}}{800} -\entry {\code {_SC_NL_LANGMAX}}{800} -\entry {\code {_SC_NL_MSGMAX}}{800} -\entry {\code {_SC_NL_NMAX}}{800} -\entry {\code {_SC_NL_SETMAX}}{800} -\entry {\code {_SC_NL_TEXTMAX}}{800} -\entry {\code {_SC_NPROCESSORS_CONF}}{602, 797} -\entry {\code {_SC_NPROCESSORS_ONLN}}{602, 797} -\entry {\code {_SC_NZERO}}{799} -\entry {\code {_SC_OPEN_MAX}}{792} -\entry {\code {_SC_PAGESIZE}}{327, 601, 797} -\entry {\code {_SC_PHYS_PAGES}}{601, 798} -\entry {\code {_SC_PII}}{794} -\entry {\code {_SC_PII_INTERNET}}{795} -\entry {\code {_SC_PII_INTERNET_DGRAM}}{795} -\entry {\code {_SC_PII_INTERNET_STREAM}}{795} -\entry {\code {_SC_PII_OSI}}{795} -\entry {\code {_SC_PII_OSI_CLTS}}{795} -\entry {\code {_SC_PII_OSI_COTS}}{795} -\entry {\code {_SC_PII_OSI_M}}{795} -\entry {\code {_SC_PII_SOCKET}}{795} -\entry {\code {_SC_PII_XTI}}{795} -\entry {\code {_SC_PRIORITIZED_IO}}{793} -\entry {\code {_SC_PRIORITY_SCHEDULING}}{793} -\entry {\code {_SC_REALTIME_SIGNALS}}{793} -\entry {\code {_SC_RTSIG_MAX}}{794} -\entry {\code {_SC_SAVED_IDS}}{793} -\entry {\code {_SC_SCHAR_MAX}}{799} -\entry {\code {_SC_SCHAR_MIN}}{799} -\entry {\code {_SC_SELECT}}{795} -\entry {\code {_SC_SEM_NSEMS_MAX}}{794} -\entry {\code {_SC_SEM_VALUE_MAX}}{794} -\entry {\code {_SC_SEMAPHORES}}{794} -\entry {\code {_SC_SHARED_MEMORY_OBJECTS}}{794} -\entry {\code {_SC_SHRT_MAX}}{799} -\entry {\code {_SC_SHRT_MIN}}{799} -\entry {\code {_SC_SIGQUEUE_MAX}}{794} -\entry {\code {_SC_STREAM_MAX}}{793} -\entry {\code {_SC_SYNCHRONIZED_IO}}{793} -\entry {\code {_SC_T_IOV_MAX}}{795} -\entry {\code {_SC_THREAD_ATTR_STACKADDR}}{796} -\entry {\code {_SC_THREAD_ATTR_STACKSIZE}}{796} -\entry {\code {_SC_THREAD_DESTRUCTOR_ITERATIONS}}{796} -\entry {\code {_SC_THREAD_KEYS_MAX}}{796} -\entry {\code {_SC_THREAD_PRIO_INHERIT}}{796} -\entry {\code {_SC_THREAD_PRIO_PROTECT}}{796} -\entry {\code {_SC_THREAD_PRIORITY_SCHEDULING}}{796} -\entry {\code {_SC_THREAD_PROCESS_SHARED}}{796} -\entry {\code {_SC_THREAD_SAFE_FUNCTIONS}}{795} -\entry {\code {_SC_THREAD_STACK_MIN}}{796} -\entry {\code {_SC_THREAD_THREADS_MAX}}{796} -\entry {\code {_SC_THREADS}}{795} -\entry {\code {_SC_TIMER_MAX}}{794} -\entry {\code {_SC_TIMERS}}{793} -\entry {\code {_SC_TTY_NAME_MAX}}{796} -\entry {\code {_SC_TZNAME_MAX}}{793} -\entry {\code {_SC_UCHAR_MAX}}{799} -\entry {\code {_SC_UINT_MAX}}{799} -\entry {\code {_SC_UIO_MAXIOV}}{795} -\entry {\code {_SC_ULONG_MAX}}{800} -\entry {\code {_SC_USHRT_MAX}}{800} -\entry {\code {_SC_VERSION}}{793, 797} -\entry {\code {_SC_WORD_BIT}}{799} -\entry {\code {_SC_XOPEN_CRYPT}}{798} -\entry {\code {_SC_XOPEN_ENH_I18N}}{798} -\entry {\code {_SC_XOPEN_LEGACY}}{798} -\entry {\code {_SC_XOPEN_REALTIME}}{798} -\entry {\code {_SC_XOPEN_REALTIME_THREADS}}{798} -\entry {\code {_SC_XOPEN_SHM}}{798} -\entry {\code {_SC_XOPEN_UNIX}}{798} -\entry {\code {_SC_XOPEN_VERSION}}{798} -\entry {\code {_SC_XOPEN_XCU_VERSION}}{798} -\entry {\code {_SC_XOPEN_XPG2}}{798} -\entry {\code {_SC_XOPEN_XPG3}}{798} -\entry {\code {_SC_XOPEN_XPG4}}{798} +\entry {\code {_SC_2_C_DEV}}{804} +\entry {\code {_SC_2_FORT_DEV}}{804} +\entry {\code {_SC_2_FORT_RUN}}{804} +\entry {\code {_SC_2_LOCALEDEF}}{804} +\entry {\code {_SC_2_SW_DEV}}{805} +\entry {\code {_SC_2_VERSION}}{805} +\entry {\code {_SC_AIO_LISTIO_MAX}}{802} +\entry {\code {_SC_AIO_MAX}}{802} +\entry {\code {_SC_AIO_PRIO_DELTA_MAX}}{802} +\entry {\code {_SC_ARG_MAX}}{800} +\entry {\code {_SC_ASYNCHRONOUS_IO}}{801} +\entry {\code {_SC_ATEXIT_MAX}}{806} +\entry {\code {_SC_AVPHYS_PAGES}}{603, 806} +\entry {\code {_SC_BC_BASE_MAX}}{805} +\entry {\code {_SC_BC_DIM_MAX}}{805} +\entry {\code {_SC_BC_SCALE_MAX}}{805} +\entry {\code {_SC_BC_STRING_MAX}}{805} +\entry {\code {_SC_CHAR_BIT}}{806} +\entry {\code {_SC_CHAR_MAX}}{806} +\entry {\code {_SC_CHAR_MIN}}{807} +\entry {\code {_SC_CHARCLASS_NAME_MAX}}{801} +\entry {\code {_SC_CHILD_MAX}}{800} +\entry {\code {_SC_CLK_TCK}}{801} +\entry {\code {_SC_COLL_WEIGHTS_MAX}}{805} +\entry {\code {_SC_DELAYTIMER_MAX}}{802} +\entry {\code {_SC_EQUIV_CLASS_MAX}}{805} +\entry {\code {_SC_EXPR_NEST_MAX}}{805} +\entry {\code {_SC_FSYNC}}{801} +\entry {\code {_SC_GETGR_R_SIZE_MAX}}{803} +\entry {\code {_SC_GETPW_R_SIZE_MAX}}{803} +\entry {\code {_SC_INT_MAX}}{807} +\entry {\code {_SC_INT_MIN}}{807} +\entry {\code {_SC_JOB_CONTROL}}{801} +\entry {\code {_SC_LINE_MAX}}{805} +\entry {\code {_SC_LOGIN_NAME_MAX}}{803} +\entry {\code {_SC_LONG_BIT}}{807} +\entry {\code {_SC_MAPPED_FILES}}{801} +\entry {\code {_SC_MB_LEN_MAX}}{807} +\entry {\code {_SC_MEMLOCK}}{801} +\entry {\code {_SC_MEMLOCK_RANGE}}{802} +\entry {\code {_SC_MEMORY_PROTECTION}}{802} +\entry {\code {_SC_MESSAGE_PASSING}}{802} +\entry {\code {_SC_MQ_OPEN_MAX}}{802} +\entry {\code {_SC_MQ_PRIO_MAX}}{802} +\entry {\code {_SC_NGROUPS_MAX}}{801} +\entry {\code {_SC_NL_ARGMAX}}{808} +\entry {\code {_SC_NL_LANGMAX}}{808} +\entry {\code {_SC_NL_MSGMAX}}{808} +\entry {\code {_SC_NL_NMAX}}{808} +\entry {\code {_SC_NL_SETMAX}}{808} +\entry {\code {_SC_NL_TEXTMAX}}{808} +\entry {\code {_SC_NPROCESSORS_CONF}}{604, 805} +\entry {\code {_SC_NPROCESSORS_ONLN}}{604, 805} +\entry {\code {_SC_NZERO}}{807} +\entry {\code {_SC_OPEN_MAX}}{800} +\entry {\code {_SC_PAGESIZE}}{327, 603, 805} +\entry {\code {_SC_PHYS_PAGES}}{603, 806} +\entry {\code {_SC_PII}}{802} +\entry {\code {_SC_PII_INTERNET}}{803} +\entry {\code {_SC_PII_INTERNET_DGRAM}}{803} +\entry {\code {_SC_PII_INTERNET_STREAM}}{803} +\entry {\code {_SC_PII_OSI}}{803} +\entry {\code {_SC_PII_OSI_CLTS}}{803} +\entry {\code {_SC_PII_OSI_COTS}}{803} +\entry {\code {_SC_PII_OSI_M}}{803} +\entry {\code {_SC_PII_SOCKET}}{803} +\entry {\code {_SC_PII_XTI}}{803} +\entry {\code {_SC_PRIORITIZED_IO}}{801} +\entry {\code {_SC_PRIORITY_SCHEDULING}}{801} +\entry {\code {_SC_REALTIME_SIGNALS}}{801} +\entry {\code {_SC_RTSIG_MAX}}{802} +\entry {\code {_SC_SAVED_IDS}}{801} +\entry {\code {_SC_SCHAR_MAX}}{807} +\entry {\code {_SC_SCHAR_MIN}}{807} +\entry {\code {_SC_SELECT}}{803} +\entry {\code {_SC_SEM_NSEMS_MAX}}{802} +\entry {\code {_SC_SEM_VALUE_MAX}}{802} +\entry {\code {_SC_SEMAPHORES}}{802} +\entry {\code {_SC_SHARED_MEMORY_OBJECTS}}{802} +\entry {\code {_SC_SHRT_MAX}}{807} +\entry {\code {_SC_SHRT_MIN}}{807} +\entry {\code {_SC_SIGQUEUE_MAX}}{802} +\entry {\code {_SC_STREAM_MAX}}{801} +\entry {\code {_SC_SYNCHRONIZED_IO}}{801} +\entry {\code {_SC_T_IOV_MAX}}{803} +\entry {\code {_SC_THREAD_ATTR_STACKADDR}}{804} +\entry {\code {_SC_THREAD_ATTR_STACKSIZE}}{804} +\entry {\code {_SC_THREAD_DESTRUCTOR_ITERATIONS}}{804} +\entry {\code {_SC_THREAD_KEYS_MAX}}{804} +\entry {\code {_SC_THREAD_PRIO_INHERIT}}{804} +\entry {\code {_SC_THREAD_PRIO_PROTECT}}{804} +\entry {\code {_SC_THREAD_PRIORITY_SCHEDULING}}{804} +\entry {\code {_SC_THREAD_PROCESS_SHARED}}{804} +\entry {\code {_SC_THREAD_SAFE_FUNCTIONS}}{803} +\entry {\code {_SC_THREAD_STACK_MIN}}{804} +\entry {\code {_SC_THREAD_THREADS_MAX}}{804} +\entry {\code {_SC_THREADS}}{803} +\entry {\code {_SC_TIMER_MAX}}{802} +\entry {\code {_SC_TIMERS}}{801} +\entry {\code {_SC_TTY_NAME_MAX}}{804} +\entry {\code {_SC_TZNAME_MAX}}{801} +\entry {\code {_SC_UCHAR_MAX}}{807} +\entry {\code {_SC_UINT_MAX}}{807} +\entry {\code {_SC_UIO_MAXIOV}}{803} +\entry {\code {_SC_ULONG_MAX}}{808} +\entry {\code {_SC_USHRT_MAX}}{808} +\entry {\code {_SC_VERSION}}{801, 805} +\entry {\code {_SC_WORD_BIT}}{807} +\entry {\code {_SC_XOPEN_CRYPT}}{806} +\entry {\code {_SC_XOPEN_ENH_I18N}}{806} +\entry {\code {_SC_XOPEN_LEGACY}}{806} +\entry {\code {_SC_XOPEN_REALTIME}}{806} +\entry {\code {_SC_XOPEN_REALTIME_THREADS}}{806} +\entry {\code {_SC_XOPEN_SHM}}{806} +\entry {\code {_SC_XOPEN_UNIX}}{806} +\entry {\code {_SC_XOPEN_VERSION}}{806} +\entry {\code {_SC_XOPEN_XCU_VERSION}}{806} +\entry {\code {_SC_XOPEN_XPG2}}{806} +\entry {\code {_SC_XOPEN_XPG3}}{806} +\entry {\code {_SC_XOPEN_XPG4}}{806} \entry {\code {_SVID_SOURCE}}{8} \entry {\code {_THREAD_SAFE}}{10} \entry {\code {_XOPEN_SOURCE}}{8} @@ -182,58 +182,58 @@ \entry {\code {ABMON_7}}{170} \entry {\code {ABMON_8}}{170} \entry {\code {ABMON_9}}{170} -\entry {\code {ACCOUNTING}}{757} +\entry {\code {ACCOUNTING}}{765} \entry {\code {AF_FILE}}{412} \entry {\code {AF_INET}}{412} \entry {\code {AF_LOCAL}}{412} \entry {\code {AF_UNIX}}{412} \entry {\code {AF_UNSPEC}}{412} -\entry {\code {aliases}}{735} +\entry {\code {aliases}}{743} \entry {\code {ALT_DIGITS}}{172} \entry {\code {ALTWERASE}}{469} \entry {\code {AM_STR}}{171} -\entry {\code {ARG_MAX}}{789} -\entry {\code {argp_err_exit_status}}{667} -\entry {\code {ARGP_ERR_UNKNOWN}}{671} -\entry {\code {ARGP_HELP_BUG_ADDR}}{680} -\entry {\code {ARGP_HELP_DOC}}{680} -\entry {\code {ARGP_HELP_EXIT_ERR}}{680} -\entry {\code {ARGP_HELP_EXIT_OK}}{680} -\entry {\code {ARGP_HELP_LONG}}{680} -\entry {\code {ARGP_HELP_LONG_ONLY}}{680} -\entry {\code {ARGP_HELP_POST_DOC}}{680} -\entry {\code {ARGP_HELP_PRE_DOC}}{680} -\entry {\code {ARGP_HELP_SEE}}{680} -\entry {\code {ARGP_HELP_SHORT_USAGE}}{679} -\entry {\code {ARGP_HELP_STD_ERR}}{680} -\entry {\code {ARGP_HELP_STD_HELP}}{680} -\entry {\code {ARGP_HELP_STD_USAGE}}{680} -\entry {\code {ARGP_HELP_USAGE}}{679} -\entry {\code {ARGP_IN_ORDER}}{678} -\entry {\code {ARGP_KEY_ARG}}{672} -\entry {\code {ARGP_KEY_ARGS}}{672} -\entry {\code {ARGP_KEY_END}}{673} -\entry {\code {ARGP_KEY_ERROR}}{673} -\entry {\code {ARGP_KEY_FINI}}{673} -\entry {\code {ARGP_KEY_HELP_ARGS_DOC}}{679} -\entry {\code {ARGP_KEY_HELP_DUP_ARGS_NOTE}}{679} -\entry {\code {ARGP_KEY_HELP_EXTRA}}{679} -\entry {\code {ARGP_KEY_HELP_HEADER}}{679} -\entry {\code {ARGP_KEY_HELP_POST_DOC}}{679} -\entry {\code {ARGP_KEY_HELP_PRE_DOC}}{678} -\entry {\code {ARGP_KEY_INIT}}{673} -\entry {\code {ARGP_KEY_NO_ARGS}}{673} -\entry {\code {ARGP_KEY_SUCCESS}}{673} -\entry {\code {ARGP_LONG_ONLY}}{678} -\entry {\code {ARGP_NO_ARGS}}{677} -\entry {\code {ARGP_NO_ERRS}}{677} -\entry {\code {ARGP_NO_EXIT}}{678} -\entry {\code {ARGP_NO_HELP}}{678} -\entry {\code {ARGP_PARSE_ARGV0}}{677} -\entry {\code {argp_program_bug_address}}{667} -\entry {\code {argp_program_version}}{667} -\entry {\code {argp_program_version_hook}}{667} -\entry {\code {ARGP_SILENT}}{678} +\entry {\code {ARG_MAX}}{797} +\entry {\code {argp_err_exit_status}}{675} +\entry {\code {ARGP_ERR_UNKNOWN}}{679} +\entry {\code {ARGP_HELP_BUG_ADDR}}{688} +\entry {\code {ARGP_HELP_DOC}}{688} +\entry {\code {ARGP_HELP_EXIT_ERR}}{688} +\entry {\code {ARGP_HELP_EXIT_OK}}{688} +\entry {\code {ARGP_HELP_LONG}}{688} +\entry {\code {ARGP_HELP_LONG_ONLY}}{688} +\entry {\code {ARGP_HELP_POST_DOC}}{688} +\entry {\code {ARGP_HELP_PRE_DOC}}{688} +\entry {\code {ARGP_HELP_SEE}}{688} +\entry {\code {ARGP_HELP_SHORT_USAGE}}{687} +\entry {\code {ARGP_HELP_STD_ERR}}{688} +\entry {\code {ARGP_HELP_STD_HELP}}{688} +\entry {\code {ARGP_HELP_STD_USAGE}}{688} +\entry {\code {ARGP_HELP_USAGE}}{687} +\entry {\code {ARGP_IN_ORDER}}{686} +\entry {\code {ARGP_KEY_ARG}}{680} +\entry {\code {ARGP_KEY_ARGS}}{680} +\entry {\code {ARGP_KEY_END}}{681} +\entry {\code {ARGP_KEY_ERROR}}{681} +\entry {\code {ARGP_KEY_FINI}}{681} +\entry {\code {ARGP_KEY_HELP_ARGS_DOC}}{687} +\entry {\code {ARGP_KEY_HELP_DUP_ARGS_NOTE}}{687} +\entry {\code {ARGP_KEY_HELP_EXTRA}}{687} +\entry {\code {ARGP_KEY_HELP_HEADER}}{687} +\entry {\code {ARGP_KEY_HELP_POST_DOC}}{687} +\entry {\code {ARGP_KEY_HELP_PRE_DOC}}{686} +\entry {\code {ARGP_KEY_INIT}}{681} +\entry {\code {ARGP_KEY_NO_ARGS}}{681} +\entry {\code {ARGP_KEY_SUCCESS}}{681} +\entry {\code {ARGP_LONG_ONLY}}{686} +\entry {\code {ARGP_NO_ARGS}}{685} +\entry {\code {ARGP_NO_ERRS}}{685} +\entry {\code {ARGP_NO_EXIT}}{686} +\entry {\code {ARGP_NO_HELP}}{686} +\entry {\code {ARGP_PARSE_ARGV0}}{685} +\entry {\code {argp_program_bug_address}}{675} +\entry {\code {argp_program_version}}{675} +\entry {\code {argp_program_version_hook}}{675} +\entry {\code {ARGP_SILENT}}{686} \initial {B} \entry {\code {B0}}{470} \entry {\code {B110}}{470} @@ -255,25 +255,25 @@ \entry {\code {B600}}{470} \entry {\code {B75}}{470} \entry {\code {B9600}}{470} -\entry {\code {BC_BASE_MAX}}{807} -\entry {\code {BC_DIM_MAX}}{807} -\entry {\code {BC_SCALE_MAX}}{807} -\entry {\code {BC_STRING_MAX}}{807} -\entry {\code {BOOT_TIME}}{756, 760} +\entry {\code {BC_BASE_MAX}}{815} +\entry {\code {BC_DIM_MAX}}{815} +\entry {\code {BC_SCALE_MAX}}{815} +\entry {\code {BC_STRING_MAX}}{815} +\entry {\code {BOOT_TIME}}{764, 768} \entry {\code {BRKINT}}{463} \entry {\code {BUFSIZ}}{300} \initial {C} \entry {\code {CCTS_OFLOW}}{466} -\entry {\code {CHAR_MAX}}{855} -\entry {\code {CHAR_MIN}}{854} -\entry {\code {CHILD_MAX}}{789} +\entry {\code {CHAR_MAX}}{863} +\entry {\code {CHAR_MIN}}{862} +\entry {\code {CHILD_MAX}}{797} \entry {\code {CIGNORE}}{466} -\entry {\code {CLK_TCK}}{554} +\entry {\code {CLK_TCK}}{556} \entry {\code {CLOCAL}}{465} -\entry {\code {CLOCKS_PER_SEC}}{554} +\entry {\code {CLOCKS_PER_SEC}}{556} \entry {\code {CODESET}}{170} -\entry {\code {COLL_WEIGHTS_MAX}}{807} -\entry {\code {COREFILE}}{612} +\entry {\code {COLL_WEIGHTS_MAX}}{815} +\entry {\code {COREFILE}}{620} \entry {\code {CREAD}}{465} \entry {\code {CRNCYSTR}}{172} \entry {\code {CRTS_IFLOW}}{466} @@ -294,26 +294,26 @@ \entry {\code {DAY_5}}{170} \entry {\code {DAY_6}}{170} \entry {\code {DAY_7}}{170} -\entry {\code {daylight}}{579} -\entry {\code {DBL_DIG}}{858} -\entry {\code {DBL_EPSILON}}{860} -\entry {\code {DBL_MANT_DIG}}{858} -\entry {\code {DBL_MAX}}{859} -\entry {\code {DBL_MAX_10_EXP}}{859} -\entry {\code {DBL_MAX_EXP}}{859} -\entry {\code {DBL_MIN}}{860} -\entry {\code {DBL_MIN_10_EXP}}{859} -\entry {\code {DBL_MIN_EXP}}{859} -\entry {\code {DEAD_PROCESS}}{757, 761} +\entry {\code {daylight}}{581} +\entry {\code {DBL_DIG}}{866} +\entry {\code {DBL_EPSILON}}{868} +\entry {\code {DBL_MANT_DIG}}{866} +\entry {\code {DBL_MAX}}{867} +\entry {\code {DBL_MAX_10_EXP}}{867} +\entry {\code {DBL_MAX_EXP}}{867} +\entry {\code {DBL_MIN}}{868} +\entry {\code {DBL_MIN_10_EXP}}{867} +\entry {\code {DBL_MIN_EXP}}{867} +\entry {\code {DEAD_PROCESS}}{765, 769} \entry {\code {DECIMAL_POINT}}{174} -\entry {\code {DES_DECRYPT}}{816} -\entry {\code {DES_ENCRYPT}}{816} -\entry {\code {DES_HW}}{816} -\entry {\code {DES_SW}}{816} -\entry {\code {DESERR_BADPARAM}}{816} -\entry {\code {DESERR_HWERROR}}{816} -\entry {\code {DESERR_NOHWDEVICE}}{816} -\entry {\code {DESERR_NONE}}{816} +\entry {\code {DES_DECRYPT}}{824} +\entry {\code {DES_ENCRYPT}}{824} +\entry {\code {DES_HW}}{824} +\entry {\code {DES_SW}}{824} +\entry {\code {DESERR_BADPARAM}}{824} +\entry {\code {DESERR_HWERROR}}{824} +\entry {\code {DESERR_NOHWDEVICE}}{824} +\entry {\code {DESERR_NONE}}{824} \entry {\code {DT_BLK}}{364} \entry {\code {DT_CHR}}{364} \entry {\code {DT_DIR}}{364} @@ -395,7 +395,7 @@ \entry {\code {EMEDIUMTYPE}}{26} \entry {\code {EMFILE}}{18} \entry {\code {EMLINK}}{19} -\entry {\code {EMPTY}}{756, 760} +\entry {\code {EMPTY}}{764, 768} \entry {\code {EMSGSIZE}}{20} \entry {\code {EMULTIHOP}}{25} \entry {\code {ENAMETOOLONG}}{22} @@ -433,7 +433,7 @@ \entry {\code {ENOTSUP}}{24} \entry {\code {ENOTTY}}{18, 479} \entry {\code {ENOTUNIQ}}{26} -\entry {\code {environ}}{694} +\entry {\code {environ}}{702} \entry {\code {ENXIO}}{17} \entry {\code {EOF}}{291} \entry {\code {EOPNOTSUPP}}{21} @@ -448,7 +448,7 @@ \entry {\code {EPROTO}}{25} \entry {\code {EPROTONOSUPPORT}}{20} \entry {\code {EPROTOTYPE}}{20} -\entry {\code {EQUIV_CLASS_MAX}}{807} +\entry {\code {EQUIV_CLASS_MAX}}{815} \entry {\code {ERA}}{171} \entry {\code {ERA_D_FMT}}{172} \entry {\code {ERA_D_T_FMT}}{172} @@ -469,7 +469,7 @@ \entry {\code {ESRMNT}}{26} \entry {\code {ESTALE}}{23} \entry {\code {ESTRPIPE}}{26} -\entry {\code {ethers}}{735} +\entry {\code {ethers}}{743} \entry {\code {ETIME}}{25} \entry {\code {ETIMEDOUT}}{22} \entry {\code {ETOOMANYREFS}}{22} @@ -480,9 +480,9 @@ \entry {\code {EWOULDBLOCK}}{20} \entry {\code {EXDEV}}{18} \entry {\code {EXFULL}}{26} -\entry {\code {EXIT_FAILURE}}{699} -\entry {\code {EXIT_SUCCESS}}{699} -\entry {\code {EXPR_NEST_MAX}}{807} +\entry {\code {EXIT_FAILURE}}{707} +\entry {\code {EXIT_SUCCESS}}{707} +\entry {\code {EXPR_NEST_MAX}}{815} \entry {\code {EXTA}}{470} \entry {\code {EXTB}}{470} \initial {F} @@ -491,7 +491,7 @@ \entry {\code {F_GETFL}}{354} \entry {\code {F_GETLK}}{356} \entry {\code {F_GETOWN}}{358} -\entry {\code {F_OK}}{393} +\entry {\code {F_OK}}{394} \entry {\code {F_RDLCK}}{357} \entry {\code {F_SETFD}}{348} \entry {\code {F_SETFL}}{354} @@ -502,56 +502,56 @@ \entry {\code {F_WRLCK}}{357} \entry {\code {FD_CLOEXEC}}{349} \entry {\code {FD_SETSIZE}}{330} -\entry {\code {FE_DFL_ENV}}{531} -\entry {\code {FE_DIVBYZERO}}{527} -\entry {\code {FE_DOWNWARD}}{530} -\entry {\code {FE_INEXACT}}{527} -\entry {\code {FE_INVALID}}{527} -\entry {\code {FE_NOMASK_ENV}}{532} -\entry {\code {FE_OVERFLOW}}{527} -\entry {\code {FE_TONEAREST}}{530} -\entry {\code {FE_TOWARDZERO}}{530} -\entry {\code {FE_UNDERFLOW}}{527} -\entry {\code {FE_UPWARD}}{530} -\entry {\code {FILENAME_MAX}}{803} -\entry {\code {FLT_DIG}}{858} -\entry {\code {FLT_EPSILON}}{860} -\entry {\code {FLT_MANT_DIG}}{858} -\entry {\code {FLT_MAX}}{859} -\entry {\code {FLT_MAX_10_EXP}}{859} -\entry {\code {FLT_MAX_EXP}}{859} -\entry {\code {FLT_MIN}}{859} -\entry {\code {FLT_MIN_10_EXP}}{859} -\entry {\code {FLT_MIN_EXP}}{858} -\entry {\code {FLT_RADIX}}{858} -\entry {\code {FLT_ROUNDS}}{857} +\entry {\code {FE_DFL_ENV}}{533} +\entry {\code {FE_DIVBYZERO}}{529} +\entry {\code {FE_DOWNWARD}}{532} +\entry {\code {FE_INEXACT}}{529} +\entry {\code {FE_INVALID}}{529} +\entry {\code {FE_NOMASK_ENV}}{534} +\entry {\code {FE_OVERFLOW}}{529} +\entry {\code {FE_TONEAREST}}{532} +\entry {\code {FE_TOWARDZERO}}{532} +\entry {\code {FE_UNDERFLOW}}{529} +\entry {\code {FE_UPWARD}}{532} +\entry {\code {FILENAME_MAX}}{811} +\entry {\code {FLT_DIG}}{866} +\entry {\code {FLT_EPSILON}}{868} +\entry {\code {FLT_MANT_DIG}}{866} +\entry {\code {FLT_MAX}}{867} +\entry {\code {FLT_MAX_10_EXP}}{867} +\entry {\code {FLT_MAX_EXP}}{867} +\entry {\code {FLT_MIN}}{867} +\entry {\code {FLT_MIN_10_EXP}}{867} +\entry {\code {FLT_MIN_EXP}}{866} +\entry {\code {FLT_RADIX}}{866} +\entry {\code {FLT_ROUNDS}}{865} \entry {\code {FLUSHO}}{469} \entry {\code {FOPEN_MAX}}{242} -\entry {\code {FP_FAST_FMA}}{541} +\entry {\code {FP_FAST_FMA}}{543} \entry {\code {FP_ILOGB0}}{498} \entry {\code {FP_ILOGBNAN}}{498} -\entry {\code {FP_INFINITE}}{523} -\entry {\code {FP_NAN}}{522} -\entry {\code {FP_NORMAL}}{523} -\entry {\code {FP_SUBNORMAL}}{523} -\entry {\code {FP_ZERO}}{523} -\entry {\code {FPE_DECOVF_TRAP}}{613} -\entry {\code {FPE_FLTDIV_TRAP}}{613} -\entry {\code {FPE_FLTOVF_TRAP}}{613} -\entry {\code {FPE_FLTUND_TRAP}}{613} -\entry {\code {FPE_INTDIV_TRAP}}{612} -\entry {\code {FPE_INTOVF_TRAP}}{612} -\entry {\code {FPE_SUBRNG_TRAP}}{612} +\entry {\code {FP_INFINITE}}{525} +\entry {\code {FP_NAN}}{524} +\entry {\code {FP_NORMAL}}{525} +\entry {\code {FP_SUBNORMAL}}{525} +\entry {\code {FP_ZERO}}{525} +\entry {\code {FPE_DECOVF_TRAP}}{621} +\entry {\code {FPE_FLTDIV_TRAP}}{621} +\entry {\code {FPE_FLTOVF_TRAP}}{621} +\entry {\code {FPE_FLTUND_TRAP}}{621} +\entry {\code {FPE_INTDIV_TRAP}}{620} +\entry {\code {FPE_INTOVF_TRAP}}{620} +\entry {\code {FPE_SUBRNG_TRAP}}{620} \entry {\code {FRAC_DIGITS}}{173} \entry {\code {FSETLOCKING_BYCALLER}}{247} \entry {\code {FSETLOCKING_INTERNAL}}{247} \entry {\code {FSETLOCKING_QUERY}}{247} -\entry {\code {FSTAB}}{777} -\entry {\code {FSTAB_RO}}{778} -\entry {\code {FSTAB_RQ}}{778} -\entry {\code {FSTAB_RW}}{778} -\entry {\code {FSTAB_SW}}{778} -\entry {\code {FSTAB_XX}}{778} +\entry {\code {FSTAB}}{785} +\entry {\code {FSTAB_RO}}{786} +\entry {\code {FSTAB_RQ}}{786} +\entry {\code {FSTAB_RW}}{786} +\entry {\code {FSTAB_SW}}{786} +\entry {\code {FSTAB_XX}}{786} \entry {\code {FTW_CHDIR}}{373} \entry {\code {FTW_D}}{371} \entry {\code {FTW_DEPTH}}{373} @@ -564,37 +564,37 @@ \entry {\code {FTW_SL}}{371} \entry {\code {FTW_SLN}}{371} \initial {G} -\entry {\code {getdate_err}}{574} +\entry {\code {getdate_err}}{576} \entry {\code {GLOB_ABORTED}}{217} \entry {\code {GLOB_ALTDIRFUNC}}{219} -\entry {\code {GLOB_APPEND}}{217} +\entry {\code {GLOB_APPEND}}{218} \entry {\code {GLOB_BRACE}}{219} \entry {\code {GLOB_DOOFFS}}{218} \entry {\code {GLOB_ERR}}{218} \entry {\code {GLOB_MAGCHAR}}{219} -\entry {\code {GLOB_MARK}}{218} -\entry {\code {GLOB_NOCHECK}}{218} -\entry {\code {GLOB_NOESCAPE}}{218} -\entry {\code {GLOB_NOMAGIC}}{219} +\entry {\code {GLOB_MARK}}{219} +\entry {\code {GLOB_NOCHECK}}{219} +\entry {\code {GLOB_NOESCAPE}}{219} +\entry {\code {GLOB_NOMAGIC}}{220} \entry {\code {GLOB_NOMATCH}}{217} -\entry {\code {GLOB_NOSORT}}{218} +\entry {\code {GLOB_NOSORT}}{219} \entry {\code {GLOB_NOSPACE}}{217} -\entry {\code {GLOB_ONLYDIR}}{220} +\entry {\code {GLOB_ONLYDIR}}{221} \entry {\code {GLOB_PERIOD}}{219} \entry {\code {GLOB_TILDE}}{220} \entry {\code {GLOB_TILDE_CHECK}}{220} -\entry {\code {group}}{735} +\entry {\code {group}}{743} \entry {\code {GROUPING}}{174} \initial {H} \entry {\code {h_errno}}{424} \entry {\code {HOST_NOT_FOUND}}{424} -\entry {\code {hosts}}{735} -\entry {\code {HUGE_VAL}}{529} -\entry {\code {HUGE_VALF}}{529} -\entry {\code {HUGE_VALL}}{529} +\entry {\code {hosts}}{743} +\entry {\code {HUGE_VAL}}{531} +\entry {\code {HUGE_VALF}}{531} +\entry {\code {HUGE_VALL}}{531} \entry {\code {HUPCL}}{465} \initial {I} -\entry {\code {I}}{541} +\entry {\code {I}}{543} \entry {\code {ICANON}}{467} \entry {\code {ICRNL}}{463} \entry {\code {IEXTEN}}{468} @@ -609,14 +609,14 @@ \entry {\code {INADDR_BROADCAST}}{421} \entry {\code {INADDR_LOOPBACK}}{421} \entry {\code {INADDR_NONE}}{421} -\entry {\code {INFINITY}}{526} -\entry {\code {INIT_PROCESS}}{756, 761} +\entry {\code {INFINITY}}{528} +\entry {\code {INIT_PROCESS}}{764, 769} \entry {\code {INLCR}}{463} \entry {\code {INPCK}}{462} \entry {\code {INT_CURR_SYMBOL}}{172} \entry {\code {INT_FRAC_DIGITS}}{172} -\entry {\code {INT_MAX}}{855} -\entry {\code {INT_MIN}}{855} +\entry {\code {INT_MAX}}{863} +\entry {\code {INT_MIN}}{863} \entry {\code {INT_N_CS_PRECEDES}}{173} \entry {\code {INT_N_SEP_BY_SPACE}}{173} \entry {\code {INT_N_SIGN_POSN}}{173} @@ -627,18 +627,18 @@ \entry {\code {IPPORT_USERRESERVED}}{427} \entry {\code {ISIG}}{468} \entry {\code {ISTRIP}}{463} -\entry {\code {ITIMER_PROF}}{582} -\entry {\code {ITIMER_REAL}}{582} -\entry {\code {ITIMER_VIRTUAL}}{582} +\entry {\code {ITIMER_PROF}}{584} +\entry {\code {ITIMER_REAL}}{584} +\entry {\code {ITIMER_VIRTUAL}}{584} \entry {\code {IXANY}}{464} \entry {\code {IXOFF}}{464} \entry {\code {IXON}}{464} \initial {L} -\entry {\code {L_ctermid}}{730} -\entry {\code {L_cuserid}}{755} +\entry {\code {L_ctermid}}{738} +\entry {\code {L_cuserid}}{763} \entry {\code {L_INCR}}{295} \entry {\code {L_SET}}{295} -\entry {\code {L_tmpnam}}{399} +\entry {\code {L_tmpnam}}{400} \entry {\code {L_XTND}}{295} \entry {\code {LANG}}{163} \entry {\code {LANGUAGE}}{163} @@ -649,17 +649,17 @@ \entry {\code {LC_MONETARY}}{162} \entry {\code {LC_NUMERIC}}{162} \entry {\code {LC_TIME}}{162} -\entry {\code {LDBL_DIG}}{858} -\entry {\code {LDBL_EPSILON}}{860} -\entry {\code {LDBL_MANT_DIG}}{858} -\entry {\code {LDBL_MAX}}{859} -\entry {\code {LDBL_MAX_10_EXP}}{859} -\entry {\code {LDBL_MAX_EXP}}{859} -\entry {\code {LDBL_MIN}}{860} -\entry {\code {LDBL_MIN_10_EXP}}{859} -\entry {\code {LDBL_MIN_EXP}}{859} -\entry {\code {LINE_MAX}}{807} -\entry {\code {LINK_MAX}}{802} +\entry {\code {LDBL_DIG}}{866} +\entry {\code {LDBL_EPSILON}}{868} +\entry {\code {LDBL_MANT_DIG}}{866} +\entry {\code {LDBL_MAX}}{867} +\entry {\code {LDBL_MAX_10_EXP}}{867} +\entry {\code {LDBL_MAX_EXP}}{867} +\entry {\code {LDBL_MIN}}{868} +\entry {\code {LDBL_MIN_10_EXP}}{867} +\entry {\code {LDBL_MIN_EXP}}{867} +\entry {\code {LINE_MAX}}{815} +\entry {\code {LINK_MAX}}{810} \entry {\code {LIO_NOP}}{335} \entry {\code {LIO_READ}}{335} \entry {\code {LIO_WRITE}}{335} @@ -690,11 +690,11 @@ \entry {\code {LOG_USER}}{488} \entry {\code {LOG_UUCP}}{488} \entry {\code {LOG_WARNING}}{489} -\entry {\code {LOGIN_PROCESS}}{756, 761} -\entry {\code {LONG_LONG_MAX}}{855} -\entry {\code {LONG_LONG_MIN}}{855} -\entry {\code {LONG_MAX}}{855} -\entry {\code {LONG_MIN}}{855} +\entry {\code {LOGIN_PROCESS}}{764, 769} +\entry {\code {LONG_LONG_MAX}}{863} +\entry {\code {LONG_LONG_MIN}}{863} +\entry {\code {LONG_MAX}}{863} +\entry {\code {LONG_MIN}}{863} \initial {M} \entry {\code {M_1_PI}}{493} \entry {\code {M_2_PI}}{493} @@ -714,13 +714,14 @@ \entry {\code {MAP_FIXED}}{328} \entry {\code {MAP_PRIVATE}}{327} \entry {\code {MAP_SHARED}}{327} -\entry {\code {MAX_CANON}}{802} -\entry {\code {MAX_INPUT}}{802} -\entry {\code {MAXNAMLEN}}{803} +\entry {\code {MAX_CANON}}{810} +\entry {\code {MAX_INPUT}}{810} +\entry {\code {MAXNAMLEN}}{811} +\entry {\code {MAXSYMLINKS}}{375} \entry {\code {MB_CUR_MAX}}{122} \entry {\code {MB_LEN_MAX}}{122} \entry {\code {MDMBUF}}{466} -\entry {\code {MINSIGSTKSZ}}{652} +\entry {\code {MINSIGSTKSZ}}{660} \entry {\code {MM_APPL}}{307} \entry {\code {MM_CONSOLE}}{307} \entry {\code {MM_ERROR}}{308} @@ -742,15 +743,15 @@ \entry {\code {MM_SOFT}}{307} \entry {\code {MM_UTIL}}{307} \entry {\code {MM_WARNING}}{308} -\entry {\code {MNTOPT_DEFAULTS}}{780} -\entry {\code {MNTOPT_NOAUTO}}{781} -\entry {\code {MNTOPT_NOSUID}}{781} -\entry {\code {MNTOPT_RO}}{780} -\entry {\code {MNTOPT_RW}}{780} -\entry {\code {MNTOPT_SUID}}{780} -\entry {\code {MNTTYPE_IGNORE}}{780} -\entry {\code {MNTTYPE_NFS}}{780} -\entry {\code {MNTTYPE_SWAP}}{780} +\entry {\code {MNTOPT_DEFAULTS}}{788} +\entry {\code {MNTOPT_NOAUTO}}{789} +\entry {\code {MNTOPT_NOSUID}}{789} +\entry {\code {MNTOPT_RO}}{788} +\entry {\code {MNTOPT_RW}}{788} +\entry {\code {MNTOPT_SUID}}{788} +\entry {\code {MNTTYPE_IGNORE}}{788} +\entry {\code {MNTTYPE_NFS}}{788} +\entry {\code {MNTTYPE_SWAP}}{788} \entry {\code {MON_1}}{170} \entry {\code {MON_10}}{171} \entry {\code {MON_11}}{171} @@ -775,15 +776,15 @@ \entry {\code {N_CS_PRECEDES}}{173} \entry {\code {N_SEP_BY_SPACE}}{173} \entry {\code {N_SIGN_POSN}}{173} -\entry {\code {NAME_MAX}}{802} -\entry {\code {NAN}}{527} +\entry {\code {NAME_MAX}}{810} +\entry {\code {NAN}}{529} \entry {\code {NCCS}}{460} -\entry {\code {NDEBUG}}{845} +\entry {\code {NDEBUG}}{853} \entry {\code {NEGATIVE_SIGN}}{172} -\entry {\code {netgroup}}{735} -\entry {\code {networks}}{735} -\entry {\code {NEW_TIME}}{756, 761} -\entry {\code {NGROUPS_MAX}}{790} +\entry {\code {netgroup}}{743} +\entry {\code {networks}}{743} +\entry {\code {NEW_TIME}}{764, 769} +\entry {\code {NGROUPS_MAX}}{798} \entry {\code {NL_ARGMAX}}{260} \entry {\code {NO_ADDRESS}}{425} \entry {\code {NO_RECOVERY}}{425} @@ -791,12 +792,12 @@ \entry {\code {NOFLSH}}{468} \entry {\code {NOKERNINFO}}{469} \entry {\code {NOSTR}}{174} -\entry {\code {NSIG}}{611} -\entry {\code {NSS_STATUS_NOTFOUND}}{740} -\entry {\code {NSS_STATUS_SUCCESS}}{740} -\entry {\code {NSS_STATUS_TRYAGAIN}}{740} -\entry {\code {NSS_STATUS_UNAVAIL}}{740} -\entry {\code {NULL}}{852} +\entry {\code {NSIG}}{619} +\entry {\code {NSS_STATUS_NOTFOUND}}{748} +\entry {\code {NSS_STATUS_SUCCESS}}{748} +\entry {\code {NSS_STATUS_TRYAGAIN}}{748} +\entry {\code {NSS_STATUS_UNAVAIL}}{748} +\entry {\code {NULL}}{860} \initial {O} \entry {\code {O_ACCMODE}}{350} \entry {\code {O_APPEND}}{352} @@ -822,26 +823,26 @@ \entry {\code {O_WRITE}}{350} \entry {\code {O_WRONLY}}{350} \entry {\code {obstack_alloc_failed_handler}}{51} -\entry {\code {OLD_TIME}}{756, 761} +\entry {\code {OLD_TIME}}{764, 769} \entry {\code {ONLCR}}{465} \entry {\code {ONOEOT}}{465} -\entry {\code {OPEN_MAX}}{789} +\entry {\code {OPEN_MAX}}{797} \entry {\code {OPOST}}{464} -\entry {\code {optarg}}{659} -\entry {\code {opterr}}{659} -\entry {\code {optind}}{659} -\entry {\code {OPTION_ALIAS}}{670} -\entry {\code {OPTION_ARG_OPTIONAL}}{670} -\entry {\code {OPTION_DOC}}{670} -\entry {\code {OPTION_HIDDEN}}{670} -\entry {\code {OPTION_NO_USAGE}}{670} -\entry {\code {optopt}}{659} +\entry {\code {optarg}}{667} +\entry {\code {opterr}}{667} +\entry {\code {optind}}{667} +\entry {\code {OPTION_ALIAS}}{678} +\entry {\code {OPTION_ARG_OPTIONAL}}{678} +\entry {\code {OPTION_DOC}}{678} +\entry {\code {OPTION_HIDDEN}}{678} +\entry {\code {OPTION_NO_USAGE}}{678} +\entry {\code {optopt}}{667} \entry {\code {OXTABS}}{465} \initial {P} \entry {\code {P_CS_PRECEDES}}{173} \entry {\code {P_SEP_BY_SPACE}}{173} \entry {\code {P_SIGN_POSN}}{173} -\entry {\code {P_tmpdir}}{400} +\entry {\code {P_tmpdir}}{401} \entry {\code {PA_CHAR}}{273} \entry {\code {PA_DOUBLE}}{273} \entry {\code {PA_FLAG_LONG}}{274} @@ -858,8 +859,8 @@ \entry {\code {PARENB}}{466} \entry {\code {PARMRK}}{463} \entry {\code {PARODD}}{466} -\entry {\code {passwd}}{735} -\entry {\code {PATH_MAX}}{803} +\entry {\code {passwd}}{743} +\entry {\code {PATH_MAX}}{811} \entry {\code {PENDIN}}{469} \entry {\code {PF_CCITT}}{432} \entry {\code {PF_FILE}}{415} @@ -872,141 +873,141 @@ \entry {\code {PF_ROUTE}}{432} \entry {\code {PF_UNIX}}{415} \entry {\code {PI}}{494} -\entry {\code {PIPE_BUF}}{803} +\entry {\code {PIPE_BUF}}{811} \entry {\code {PM_STR}}{171} \entry {\code {POSITIVE_SIGN}}{172} -\entry {\code {PRIO_MAX}}{599} -\entry {\code {PRIO_MIN}}{599} -\entry {\code {PRIO_PGRP}}{599} -\entry {\code {PRIO_PROCESS}}{599} -\entry {\code {PRIO_USER}}{600} +\entry {\code {PRIO_MAX}}{601} +\entry {\code {PRIO_MIN}}{601} +\entry {\code {PRIO_PGRP}}{601} +\entry {\code {PRIO_PROCESS}}{601} +\entry {\code {PRIO_USER}}{602} \entry {\code {program_invocation_name}}{28} \entry {\code {program_invocation_short_name}}{28} \entry {\code {PROT_EXEC}}{327} \entry {\code {PROT_READ}}{327} \entry {\code {PROT_WRITE}}{327} -\entry {\code {protocols}}{735} +\entry {\code {protocols}}{743} \entry {\code {PWD}}{362} \initial {R} -\entry {\code {R_OK}}{393} +\entry {\code {R_OK}}{394} \entry {\code {RADIXCHAR}}{174} \entry {\code {RAND_MAX}}{512} -\entry {\code {RE_DUP_MAX}}{790} -\entry {\code {RLIM_INFINITY}}{590} -\entry {\code {RLIM_NLIMITS}}{590} -\entry {\code {RLIMIT_AS}}{590} -\entry {\code {RLIMIT_CORE}}{589} -\entry {\code {RLIMIT_CPU}}{589} -\entry {\code {RLIMIT_DATA}}{589} -\entry {\code {RLIMIT_FSIZE}}{589} -\entry {\code {RLIMIT_NOFILE}}{590} -\entry {\code {RLIMIT_OFILE}}{590} -\entry {\code {RLIMIT_RSS}}{589} -\entry {\code {RLIMIT_STACK}}{589} -\entry {\code {rpc}}{735} -\entry {\code {RUN_LVL}}{756, 760} +\entry {\code {RE_DUP_MAX}}{798} +\entry {\code {RLIM_INFINITY}}{592} +\entry {\code {RLIM_NLIMITS}}{592} +\entry {\code {RLIMIT_AS}}{592} +\entry {\code {RLIMIT_CORE}}{591} +\entry {\code {RLIMIT_CPU}}{591} +\entry {\code {RLIMIT_DATA}}{591} +\entry {\code {RLIMIT_FSIZE}}{591} +\entry {\code {RLIMIT_NOFILE}}{592} +\entry {\code {RLIMIT_OFILE}}{592} +\entry {\code {RLIMIT_RSS}}{591} +\entry {\code {RLIMIT_STACK}}{591} +\entry {\code {rpc}}{743} +\entry {\code {RUN_LVL}}{764, 768} \initial {S} -\entry {\code {S_IEXEC}}{388} -\entry {\code {S_IFBLK}}{386} -\entry {\code {S_IFCHR}}{386} -\entry {\code {S_IFDIR}}{386} -\entry {\code {S_IFIFO}}{386} -\entry {\code {S_IFLNK}}{386} -\entry {\code {S_IFMT}}{386} -\entry {\code {S_IFREG}}{386} -\entry {\code {S_IFSOCK}}{386} -\entry {\code {S_IREAD}}{388} -\entry {\code {S_IRGRP}}{388} -\entry {\code {S_IROTH}}{388} -\entry {\code {S_IRUSR}}{388} -\entry {\code {S_IRWXG}}{388} -\entry {\code {S_IRWXO}}{388} -\entry {\code {S_IRWXU}}{388} -\entry {\code {S_ISGID}}{389} -\entry {\code {S_ISUID}}{388} -\entry {\code {S_ISVTX}}{389} -\entry {\code {S_IWGRP}}{388} -\entry {\code {S_IWOTH}}{388} -\entry {\code {S_IWRITE}}{388} -\entry {\code {S_IWUSR}}{388} -\entry {\code {S_IXGRP}}{388} -\entry {\code {S_IXOTH}}{388} -\entry {\code {S_IXUSR}}{388} -\entry {\code {SA_NOCLDSTOP}}{625} -\entry {\code {SA_ONSTACK}}{625} -\entry {\code {SA_RESTART}}{626} -\entry {\code {SC_SSIZE_MAX}}{799} -\entry {\code {SCHAR_MAX}}{854} -\entry {\code {SCHAR_MIN}}{854} +\entry {\code {S_IEXEC}}{389} +\entry {\code {S_IFBLK}}{387} +\entry {\code {S_IFCHR}}{387} +\entry {\code {S_IFDIR}}{387} +\entry {\code {S_IFIFO}}{387} +\entry {\code {S_IFLNK}}{387} +\entry {\code {S_IFMT}}{387} +\entry {\code {S_IFREG}}{387} +\entry {\code {S_IFSOCK}}{387} +\entry {\code {S_IREAD}}{389} +\entry {\code {S_IRGRP}}{389} +\entry {\code {S_IROTH}}{389} +\entry {\code {S_IRUSR}}{389} +\entry {\code {S_IRWXG}}{389} +\entry {\code {S_IRWXO}}{389} +\entry {\code {S_IRWXU}}{389} +\entry {\code {S_ISGID}}{390} +\entry {\code {S_ISUID}}{389} +\entry {\code {S_ISVTX}}{390} +\entry {\code {S_IWGRP}}{389} +\entry {\code {S_IWOTH}}{389} +\entry {\code {S_IWRITE}}{389} +\entry {\code {S_IWUSR}}{389} +\entry {\code {S_IXGRP}}{389} +\entry {\code {S_IXOTH}}{389} +\entry {\code {S_IXUSR}}{389} +\entry {\code {SA_NOCLDSTOP}}{633} +\entry {\code {SA_ONSTACK}}{633} +\entry {\code {SA_RESTART}}{634} +\entry {\code {SC_SSIZE_MAX}}{807} +\entry {\code {SCHAR_MAX}}{862} +\entry {\code {SCHAR_MIN}}{862} \entry {\code {SEEK_CUR}}{295} \entry {\code {SEEK_END}}{295} \entry {\code {SEEK_SET}}{295} -\entry {\code {SEM_VALUE_MAX}}{836} -\entry {\code {services}}{735} -\entry {\code {shadow}}{736} -\entry {\code {SHRT_MAX}}{855} -\entry {\code {SHRT_MIN}}{855} -\entry {\code {SIG_BLOCK}}{644} -\entry {\code {SIG_DFL}}{621} -\entry {\code {SIG_ERR}}{622} -\entry {\code {SIG_IGN}}{621} -\entry {\code {SIG_SETMASK}}{644} -\entry {\code {SIG_UNBLOCK}}{644} -\entry {\code {SIGABRT}}{614} -\entry {\code {SIGALRM}}{615} -\entry {\code {SIGBUS}}{613} -\entry {\code {SIGCHLD}}{616} -\entry {\code {SIGCLD}}{617} -\entry {\code {SIGCONT}}{617} -\entry {\code {SIGEMT}}{614} -\entry {\code {SIGFPE}}{612} -\entry {\code {SIGHUP}}{615} -\entry {\code {SIGILL}}{613} -\entry {\code {SIGINFO}}{619} -\entry {\code {SIGINT}}{614} -\entry {\code {SIGIO}}{616} -\entry {\code {SIGIOT}}{614} -\entry {\code {SIGKILL}}{615} -\entry {\code {SIGLOST}}{618} +\entry {\code {SEM_VALUE_MAX}}{844} +\entry {\code {services}}{743} +\entry {\code {shadow}}{744} +\entry {\code {SHRT_MAX}}{863} +\entry {\code {SHRT_MIN}}{863} +\entry {\code {SIG_BLOCK}}{652} +\entry {\code {SIG_DFL}}{629} +\entry {\code {SIG_ERR}}{630} +\entry {\code {SIG_IGN}}{629} +\entry {\code {SIG_SETMASK}}{653} +\entry {\code {SIG_UNBLOCK}}{652} +\entry {\code {SIGABRT}}{622} +\entry {\code {SIGALRM}}{623} +\entry {\code {SIGBUS}}{621} +\entry {\code {SIGCHLD}}{624} +\entry {\code {SIGCLD}}{625} +\entry {\code {SIGCONT}}{625} +\entry {\code {SIGEMT}}{622} +\entry {\code {SIGFPE}}{620} +\entry {\code {SIGHUP}}{623} +\entry {\code {SIGILL}}{621} +\entry {\code {SIGINFO}}{627} +\entry {\code {SIGINT}}{622} +\entry {\code {SIGIO}}{624} +\entry {\code {SIGIOT}}{622} +\entry {\code {SIGKILL}}{623} +\entry {\code {SIGLOST}}{626} \entry {\code {signgam}}{503} -\entry {\code {SIGPIPE}}{618} -\entry {\code {SIGPOLL}}{616} -\entry {\code {SIGPROF}}{616} -\entry {\code {SIGQUIT}}{615} -\entry {\code {SIGSEGV}}{613} -\entry {\code {SIGSTKSZ}}{652} -\entry {\code {SIGSTOP}}{617} -\entry {\code {SIGSYS}}{614} -\entry {\code {SIGTERM}}{614} -\entry {\code {SIGTRAP}}{614} -\entry {\code {SIGTSTP}}{617} -\entry {\code {SIGTTIN}}{617} -\entry {\code {SIGTTOU}}{617} -\entry {\code {SIGURG}}{616} -\entry {\code {SIGUSR1}}{619} -\entry {\code {SIGUSR2}}{619} -\entry {\code {SIGVTALRM}}{616} -\entry {\code {SIGWINCH}}{619} -\entry {\code {SIGXCPU}}{618} -\entry {\code {SIGXFSZ}}{619} +\entry {\code {SIGPIPE}}{626} +\entry {\code {SIGPOLL}}{624} +\entry {\code {SIGPROF}}{624} +\entry {\code {SIGQUIT}}{623} +\entry {\code {SIGSEGV}}{621} +\entry {\code {SIGSTKSZ}}{660} +\entry {\code {SIGSTOP}}{625} +\entry {\code {SIGSYS}}{622} +\entry {\code {SIGTERM}}{622} +\entry {\code {SIGTRAP}}{622} +\entry {\code {SIGTSTP}}{625} +\entry {\code {SIGTTIN}}{625} +\entry {\code {SIGTTOU}}{625} +\entry {\code {SIGURG}}{624} +\entry {\code {SIGUSR1}}{627} +\entry {\code {SIGUSR2}}{627} +\entry {\code {SIGVTALRM}}{624} +\entry {\code {SIGWINCH}}{627} +\entry {\code {SIGXCPU}}{626} +\entry {\code {SIGXFSZ}}{627} \entry {\code {SOCK_DGRAM}}{410} \entry {\code {SOCK_RAW}}{411} \entry {\code {SOCK_STREAM}}{410} \entry {\code {SOL_SOCKET}}{453} -\entry {\code {SS_DISABLE}}{652} -\entry {\code {SS_ONSTACK}}{652} -\entry {\code {SSIZE_MAX}}{790} +\entry {\code {SS_DISABLE}}{660} +\entry {\code {SS_ONSTACK}}{661} +\entry {\code {SSIZE_MAX}}{798} \entry {\code {stderr}}{239} \entry {\code {STDERR_FILENO}}{323} \entry {\code {stdin}}{239} \entry {\code {STDIN_FILENO}}{323} \entry {\code {stdout}}{239} \entry {\code {STDOUT_FILENO}}{323} -\entry {\code {STREAM_MAX}}{789} -\entry {\code {SV_INTERRUPT}}{654} -\entry {\code {SV_ONSTACK}}{654} -\entry {\code {SV_RESETHAND}}{654} -\entry {\code {sys_siglist}}{620} +\entry {\code {STREAM_MAX}}{797} +\entry {\code {SV_INTERRUPT}}{662} +\entry {\code {SV_ONSTACK}}{662} +\entry {\code {SV_RESETHAND}}{663} +\entry {\code {sys_siglist}}{628} \initial {T} \entry {\code {T_FMT}}{171} \entry {\code {T_FMT_AMPM}}{171} @@ -1023,19 +1024,19 @@ \entry {\code {TCSASOFT}}{460} \entry {\code {THOUSANDS_SEP}}{174} \entry {\code {THOUSEP}}{174} -\entry {\code {timezone}}{579} -\entry {\code {TMP_MAX}}{399} +\entry {\code {timezone}}{581} +\entry {\code {TMP_MAX}}{400} \entry {\code {TOSTOP}}{468} \entry {\code {TRY_AGAIN}}{424} -\entry {\code {tzname}}{579} -\entry {\code {TZNAME_MAX}}{789} +\entry {\code {tzname}}{581} +\entry {\code {TZNAME_MAX}}{797} \initial {U} -\entry {\code {UCHAR_MAX}}{854} -\entry {\code {UINT_MAX}}{855} -\entry {\code {ULONG_LONG_MAX}}{855} -\entry {\code {ULONG_MAX}}{855} -\entry {\code {USER_PROCESS}}{756, 761} -\entry {\code {USHRT_MAX}}{855} +\entry {\code {UCHAR_MAX}}{862} +\entry {\code {UINT_MAX}}{863} +\entry {\code {ULONG_LONG_MAX}}{863} +\entry {\code {ULONG_MAX}}{863} +\entry {\code {USER_PROCESS}}{764, 769} +\entry {\code {USHRT_MAX}}{863} \initial {V} \entry {\code {VDISCARD}}{474} \entry {\code {VDSUSP}}{473} @@ -1056,12 +1057,12 @@ \entry {\code {VTIME}}{475} \entry {\code {VWERASE}}{472} \initial {W} -\entry {\code {W_OK}}{393} -\entry {\code {WCHAR_MAX}}{118, 855} +\entry {\code {W_OK}}{394} +\entry {\code {WCHAR_MAX}}{118, 863} \entry {\code {WCHAR_MIN}}{118} \entry {\code {WEOF}}{119, 291} \initial {X} -\entry {\code {X_OK}}{393} +\entry {\code {X_OK}}{394} \initial {Y} \entry {\code {YESEXPR}}{174} \entry {\code {YESSTR}}{174} diff -durpNa glibc-2.2.2/manual/llio.texi glibc-2.2.3/manual/llio.texi --- glibc-2.2.2/manual/llio.texi Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/manual/llio.texi Sun Apr 8 22:19:11 2001 @@ -1052,6 +1052,8 @@ primitives, so they are not a portabilit These functions are controlled with arrays of @code{iovec} structures, which describe the location and size of each buffer. +@comment sys/uio.h +@comment BSD @deftp {Data Type} {struct iovec} The @code{iovec} structure describes a buffer. It contains two fields: @@ -1067,6 +1069,8 @@ Contains the length of the buffer. @end table @end deftp +@comment sys/uio.h +@comment BSD @deftypefun ssize_t readv (int @var{filedes}, const struct iovec *@var{vector}, int @var{count}) The @code{readv} function reads data from @var{filedes} and scatters it @@ -1083,6 +1087,8 @@ errors are the same as in @code{read}. @end deftypefun +@comment sys/uio.h +@comment BSD @deftypefun ssize_t writev (int @var{filedes}, const struct iovec *@var{vector}, int @var{count}) The @code{writev} function gathers data from the buffers described in @@ -1141,6 +1147,8 @@ size_t page_size = (size_t) sysconf (_SC @noindent These functions are declared in @file{sys/mman.h}. +@comment sys/mman.h +@comment POSIX @deftypefun {void *} mmap (void *@var{address}, size_t @var{length},int @var{protect}, int @var{flags}, int @var{filedes}, off_t @var{offset}) The @code{mmap} function creates a new mapping, connected to bytes @@ -1257,6 +1265,8 @@ The file is on a filesystem that doesn't @end deftypefun +@comment sys/mman.h +@comment LFS @deftypefun {void *} mmap64 (void *@var{address}, size_t @var{length},int @var{protect}, int @var{flags}, int @var{filedes}, off64_t @var{offset}) The @code{mmap64} function is equivalent to the @code{mmap} function but the @var{offset} parameter is of type @code{off64_t}. On 32-bit systems @@ -1271,6 +1281,8 @@ new, extended API using 64 bit file size replaces the old API. @end deftypefun +@comment sys/mman.h +@comment POSIX @deftypefun int munmap (void *@var{addr}, size_t @var{length}) @code{munmap} removes any memory maps from (@var{addr}) to (@var{addr} + @@ -1295,6 +1307,8 @@ aligned. @end deftypefun +@comment sys/mman.h +@comment POSIX @deftypefun int msync (void *@var{address}, size_t @var{length}, int @var{flags}) When using shared mappings, the kernel can write the file at any time @@ -1340,6 +1354,8 @@ There is no existing mapping in at least @end deftypefun +@comment sys/mman.h +@comment GNU @deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}) This function can be used to change the size of an existing memory diff -durpNa glibc-2.2.2/manual/math.texi glibc-2.2.3/manual/math.texi --- glibc-2.2.2/manual/math.texi Fri Feb 9 10:04:14 2001 +++ glibc-2.2.3/manual/math.texi Mon Apr 9 20:03:29 2001 @@ -236,9 +236,9 @@ the implementation.) These functions return the complex sine of @var{z}. The mathematical definition of the complex sine is -@ifinfo +@ifnottex @math{sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i))}. -@end ifinfo +@end ifnottex @tex $$\sin(z) = {1\over 2i} (e^{zi} - e^{-zi})$$ @end tex @@ -256,9 +256,9 @@ $$\sin(z) = {1\over 2i} (e^{zi} - e^{-zi These functions return the complex cosine of @var{z}. The mathematical definition of the complex cosine is -@ifinfo +@ifnottex @math{cos (z) = 1/2 * (exp (z*i) + exp (-z*i))} -@end ifinfo +@end ifnottex @tex $$\cos(z) = {1\over 2} (e^{zi} + e^{-zi})$$ @end tex @@ -276,9 +276,9 @@ $$\cos(z) = {1\over 2} (e^{zi} + e^{-zi} These functions return the complex tangent of @var{z}. The mathematical definition of the complex tangent is -@ifinfo +@ifnottex @math{tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))} -@end ifinfo +@end ifnottex @tex $$\tan(z) = -i \cdot {e^{zi} - e^{-zi}\over e^{zi} + e^{-zi}}$$ @end tex @@ -723,9 +723,9 @@ These functions return @code{e} (the bas logarithms) raised to the power of @var{z}. Mathematically, this corresponds to the value -@ifinfo +@ifnottex @math{exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))} -@end ifinfo +@end ifnottex @tex $$\exp(z) = e^z = e^{{\rm Re}\,z} (\cos ({\rm Im}\,z) + i \sin ({\rm Im}\,z))$$ @end tex @@ -743,9 +743,9 @@ $$\exp(z) = e^z = e^{{\rm Re}\,z} (\cos These functions return the natural logarithm of @var{z}. Mathematically, this corresponds to the value -@ifinfo +@ifnottex @math{log (z) = log (cabs (z)) + I * carg (z)} -@end ifinfo +@end ifnottex @tex $$\log(z) = \log |z| + i \arg z$$ @end tex @@ -769,9 +769,9 @@ or is very close to 0. It is well-defin These functions return the base 10 logarithm of the complex value @var{z}. Mathematically, this corresponds to the value -@ifinfo +@ifnottex @math{log (z) = log10 (cabs (z)) + I * carg (z)} -@end ifinfo +@end ifnottex @tex $$\log_{10}(z) = \log_{10}|z| + i \arg z$$ @end tex @@ -1411,6 +1411,64 @@ restore that state. If the function fails the return value is @code{NULL}. @end deftypefun +The four functions described so far in this section all work on a state +which is shared by all threads. The state is not directly accessible to +the user and can only be modified by these functions. This makes it +hard to deal with situations where each thread should have its own +pseudo-random number generator. + +The GNU C library contains four additional functions which contain the +state as an explicit parameter and therefore make it possible to handle +thread-local PRNGs. Beside this there are no difference. In fact, the +four functions already discussed are implemented internally using the +following interfaces. + +The @file{stdlib.h} header contains a definition of the following type: + +@comment stdlib.h +@comment GNU +@deftp {Data Type} {struct random_data} + +Objects of type @code{struct random_data} contain the information +necessary to represent the state of the PRNG. Although a complete +definition of the type is present the type should be treated as opaque. +@end deftp + +The functions modifying the state follow exactly the already described +functions. + +@comment stdlib.h +@comment GNU +@deftypefun int random_r (struct random_data *restrict @var{buf}, int32_t *restrict @var{result}) +The @code{random_r} function behaves exactly like the @code{random} +function except that it uses and modifies the state in the object +pointed to by the first parameter instead of the global state. +@end deftypefun + +@comment stdlib.h +@comment GNU +@deftypefun int srandom_r (unsigned int @var{seed}, struct random_data *@var{buf}) +The @code{srandom_r} function behaves exactly like the @code{srandom} +function except that it uses and modifies the state in the object +pointed to by the second parameter instead of the global state. +@end deftypefun + +@comment stdlib.h +@comment GNU +@deftypefun int initstate_r (unsigned int @var{seed}, char *restrict @var{statebuf}, size_t @var{statelen}, struct random_data *restrict @var{buf}) +The @code{initstate_r} function behaves exactly like the @code{initstate} +function except that it uses and modifies the state in the object +pointed to by the fourth parameter instead of the global state. +@end deftypefun + +@comment stdlib.h +@comment GNU +@deftypefun int setstate_r (char *restrict @var{statebuf}, struct random_data *restrict @var{buf}) +The @code{setstate_r} function behaves exactly like the @code{setstate} +function except that it uses and modifies the state in the object +pointed to by the first parameter instead of the global state. +@end deftypefun + @node SVID Random @subsection SVID Random Number Function @@ -1444,6 +1502,9 @@ c = 0xb = 11 @noindent but they can also be changed by the user. @code{m} is of course 2^48 since the state consists of a 48-bit array. + +The prototypes for these functions are in @file{stdlib.h}. +@pindex stdlib.h @comment stdlib.h diff -durpNa glibc-2.2.2/manual/message.texi glibc-2.2.3/manual/message.texi --- glibc-2.2.2/manual/message.texi Sat Jan 6 20:35:23 2001 +++ glibc-2.2.3/manual/message.texi Sat Apr 7 14:02:35 2001 @@ -1075,7 +1075,7 @@ code similar to the following: @end smallexample @noindent -After the first complains from people internationalizing the code people +After the first complaints from people internationalizing the code people either completely avoided formulations like this or used strings like @code{"file(s)"}. Both look unnatural and should be avoided. First tries to solve the problem correctly looked like this: @@ -1193,11 +1193,11 @@ details are explained in the GNU @code{g bit of information is provided. The information about the plural form selection has to be stored in the -header entry (the one with the empty (@code{msgid} string). There should -be something like: +header entry (the one with the empty (@code{msgid} string). It looks +like this: @smallexample - nplurals=2; plural=n == 1 ? 0 : 1 +Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1; @end smallexample The @code{nplurals} value must be a decimal number which specifies how @@ -1222,11 +1222,11 @@ below).@footnote{Additions are welcome. @table @asis @item Only one form: Some languages only require one single form. There is no distinction -between the singular and plural form. And appropriate header entry +between the singular and plural form. An appropriate header entry would look like this: @smallexample -nplurals=1; plural=0 +Plural-Forms: nplurals=1; plural=0; @end smallexample @noindent @@ -1246,7 +1246,7 @@ This is the form used in most existing p is using. A header entry would look like this: @smallexample -nplurals=2; plural=n != 1 +Plural-Forms: nplurals=2; plural=n != 1; @end smallexample (Note: this uses the feature of C expressions that boolean expressions @@ -1274,7 +1274,7 @@ Esperanto Exceptional case in the language family. The header entry would be: @smallexample -nplurals=2; plural=n>1 +Plural-Forms: nplurals=2; plural=n>1; @end smallexample @noindent @@ -1289,7 +1289,7 @@ French The header entry would be: @smallexample -nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2 +Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2; @end smallexample @noindent @@ -1304,7 +1304,8 @@ Gaeilge The header entry would look like this: @smallexample -nplurals=3; plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1 +Plural-Forms: nplurals=3; \ + plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1; @end smallexample @noindent @@ -1319,8 +1320,9 @@ Czech, Russian, Slovak The header entry would look like this: @smallexample -nplurals=3; plural=n==1 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2 +Plural-Forms: nplurals=3; \ + plural=n==1 ? 0 : \ + n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; @end smallexample (Continuation in the next line is possible.) @@ -1337,7 +1339,8 @@ Polish The header entry would look like this: @smallexample -nplurals=4; plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3 +Plural-Forms: nplurals=4; \ + plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3; @end smallexample @noindent diff -durpNa glibc-2.2.2/manual/pattern.texi glibc-2.2.3/manual/pattern.texi --- glibc-2.2.2/manual/pattern.texi Thu Feb 15 14:08:39 2001 +++ glibc-2.2.3/manual/pattern.texi Mon Mar 26 20:53:02 2001 @@ -99,6 +99,38 @@ would match the string @samp{foobar/frob @comment GNU @item FNM_CASEFOLD Ignore case in comparing @var{string} to @var{pattern}. + +@comment fnmatch.h +@comment GNU +@item FNM_EXTMATCH +@cindex Korn Shell +@pindex ksh +Recognize beside the normal patterns also the extended patterns +introduced in @file{ksh}. The patterns are written in the form +explained in the following table where @var{pattern-list} is a @code{|} +separated list of patterns. + +@table @code +@item ?(@var{pattern-list}) +The pattern matches if zero or one occurences of any of the patterns +in the @var{pattern-list} allow matching the input string. + +@item *(@var{pattern-list}) +The pattern matches if zero or more occurences of any of the patterns +in the @var{pattern-list} allow matching the input string. + +@item +(@var{pattern-list}) +The pattern matches if one or more occurences of any of the patterns +in the @var{pattern-list} allow matching the input string. + +@item @@(@var{pattern-list}) +The pattern matches if exactly one occurence of any of the patterns in +the @var{pattern-list} allows matching the input string. + +@item !(@var{pattern-list}) +The pattern matches if the input string cannot be matched with any of +the patterns in the @var{pattern-list}. +@end table @end table @node Globbing diff -durpNa glibc-2.2.2/manual/resource.texi glibc-2.2.3/manual/resource.texi --- glibc-2.2.2/manual/resource.texi Thu Feb 15 14:08:39 2001 +++ glibc-2.2.3/manual/resource.texi Mon Apr 9 20:03:29 2001 @@ -1379,7 +1379,7 @@ get this information two functions. The @comment sys/sysinfo.h @comment GNU -@deftypefun long int get_phys_pages (void) +@deftypefun {long int} get_phys_pages (void) The @code{get_phys_pages} function returns the total number of pages of physical the system has. To get the amount of memory this number has to be multiplied by the page size. @@ -1389,7 +1389,7 @@ This function is a GNU extension. @comment sys/sysinfo.h @comment GNU -@deftypefun long int get_avphys_pages (void) +@deftypefun {long int} get_avphys_pages (void) The @code{get_phys_pages} function returns the number of available pages of physical the system has. To get the amount of memory this number has to be multiplied by the page size. diff -durpNa glibc-2.2.2/manual/setjmp.texi glibc-2.2.3/manual/setjmp.texi --- glibc-2.2.2/manual/setjmp.texi Tue Apr 18 08:42:35 2000 +++ glibc-2.2.3/manual/setjmp.texi Sun Apr 8 22:19:11 2001 @@ -12,8 +12,9 @@ functions. @menu * Intro: Non-Local Intro. When and how to use these facilities. -* Details: Non-Local Details. Functions for non-local exits. +* Details: Non-Local Details. Functions for non-local exits. * Non-Local Exits and Signals:: Portability issues. +* System V contexts:: Complete context control a la System V. @end menu @node Non-Local Intro, Non-Local Details, , Non-Local Exits @@ -169,7 +170,7 @@ function containing the @code{setjmp} ca the call to @code{setjmp} are indeterminate, unless you have declared them @code{volatile}. -@node Non-Local Exits and Signals,, Non-Local Details, Non-Local Exits +@node Non-Local Exits and Signals, System V contexts, Non-Local Details, Non-Local Exits @section Non-Local Exits and Signals In BSD Unix systems, @code{setjmp} and @code{longjmp} also save and @@ -211,3 +212,237 @@ argument. If the @code{sigsetjmp} call nonzero @var{savesigs} flag, @code{siglongjmp} also restores the set of blocked signals. @end deftypefun + +@node System V contexts,, Non-Local Exits and Signals, Non-Local Exits +@section Complete Context Control + +The Unix standard one more set of function to control the execution path +and these functions are more powerful than those discussed in this +chapter so far. These function were part of the original @w{System V} +API and by this route were added to the Unix API. Beside on branded +Unix implementations these interfaces are not widely available. Not all +platforms and/or architectures the GNU C Library is available on provide +this interface. Use @file{configure} to detect the availability. + +Similar to the @code{jmp_buf} and @code{sigjmp_buf} types used for the +variables to contain the state of the @code{longjmp} functions the +interfaces of interest here have an appropriate type as well. Objects +of this type are normally much larger since more information is +contained. The type is also used in a few more places as we will see. +The types and functions described in this section are all defined and +declared respectively in the @file{ucontext.h} header file. + +@comment ucontext.h +@comment SVID +@deftp {Data Type} ucontext_t + +The @code{ucontext_t} type is defined as a structure with as least the +following elements: + +@table @code +@item ucontext_t *uc_link +This is a pointer to the next context structure which is used if the +context described in the current structure returns. + +@item sigset_t uc_sigmask +Set of signals which are blocked when this context is used. + +@item stack_t uc_stack +Stack used for this context. The value need not be (and normally is +not) the stack pointer. @xref{Signal Stack}. + +@item mcontext_t uc_mcontext +This element contains the actual state of the process. The +@code{mcontext_t} type is also defined in this header but the definition +should be treated as opaque. Any use of knowledge of the type makes +applications less portable. + +@end table +@end deftp + +Objects of this type have to be created by the user. The initialization +and modification happens through one of the following functions: + +@comment ucontext.h +@comment SVID +@deftypefun int getcontext (ucontext_t *@var{ucp}) +The @code{getcontext} function initializes the variable pointed to by +@var{ucp} with the context of the calling thread. The context contains +the content of the registers, the signal mask, and the current stack. +Executing the contents would start at the point where the +@code{getcontext} call just returned. + +The function returns @code{0} if succesful. Otherwise it returns +@code{-1} and sets @var{errno} accordingly. +@end deftypefun + +The @code{getcontext} function is similar to @code{setjmp} but it does +not provide an indication of whether the function returns for the first +time or whether the initialized context was used and the execution is +resumed at just that point. If this is necessary the user has to take +determine this herself. This must be done carefully since the context +contains registers which might contain register variables. This is a +good situation to define variables with @code{volatile}. + +Once the context variable is initialized it can be used as is or it can +be modified. The latter is normally done to implement co-routines or +similar constructs. The @code{makecontext} function is what has to be +used to do that. + +@comment ucontext.h +@comment SVID +@deftypefun void makecontext (ucontext_t *@var{ucp}, void (*@var{func}) (void), int @var{argc}, @dots{}) + +The @var{ucp} parameter passed to the @code{makecontext} shall be +initialized by a call to @code{getcontext}. The context will be +modified to in a way so that if the context is resumed it will start by +calling the function @code{func} which gets @var{argc} integer arguments +passed. The integer arguments which are to be passed should follow the +@var{argc} parameter in the call to @code{makecontext}. + +Before the call to this function the @code{uc_stack} and @code{uc_link} +element of the @var{ucp} structure should be initialized. The +@code{uc_stack} element describes the stack which is used for this +context. No two contexts which are used at the same time should use the +same memory region for a stack. + +The @code{uc_link} element of the object pointed to by @var{ucp} should +be a pointer to the context to be executed when the function @var{func} +returns or it should be a null pointer. See @code{setcontext} for more +information about the exact use. +@end deftypefun + +While allocating the memory for the stack one has to be careful. Most +modern processors keep track of whether a certain memory region is +allowed to contain code which is executed or not. Data segments and +heap memory is normally not tagged to allow this. The result is that +programs would fail. Examples for such code include the calling +sequences the GNU C compiler generates for calls to nested functions. +Safe ways to allocate stacks correctly include using memory on the +original threads stack or explicitly allocate memory tagged for +execution using (@pxref{Memory-mapped I/O}). + +@strong{Compatibility note}: The current Unix standard is very imprecise +about the way the stack is allocated. All implementations seem to agree +that the @code{uc_stack} element must be used but the values stored in +the elements of the @code{stack_t} value are unclear. The GNU C library +and most other Unix implementations require the @code{ss_sp} value of +the @code{uc_stack} element to point to the base of the memory region +allocated for the stack and the size of the memory region is stored in +@code{ss_size}. There are implements out there which require +@code{ss_sp} to be set to the value the stack pointer will have (which +can depending on the direction the stack grows be different). This +difference makes the @code{makecontext} function hard to use and it +requires detection of the platform at compile time. + +@comment ucontext.h +@comment SVID +@deftypefun int setcontext (const ucontext_t *@var{ucp}) + +The @code{setcontext} function restores the context described by +@var{ucp}. The context is not modified and can be reused as often as +wanted. + +If the context was created by @code{getcontext} execution resumes with +the registers filled with the same values and the same stack as if the +@code{getcontext} call just returned. + +If the context was modified with a call to @code{makecontext} execution +continues with the function passed to @code{makecontext} which gets the +specified parameters passed. If this function returns execution is +resumed in the context which was referenced by the @code{uc_link} +element of the context structure passed to @code{makecontext} at the +time of the call. If @code{uc_link} was a null pointer the application +terminates in this case. + +Since the context contains information about the stack no two threads +should use the same context at the same time. The result in most cases +would be disastrous. + +The @code{setcontext} function does not return unless an error occurred +in which case it returns @code{-1}. +@end deftypefun + +The @code{setcontext} function simply replaces the current context with +the one described by the @var{ucp} parameter. This is often useful but +there are situations where the current context has to be preserved. + +@comment ucontext.h +@comment SVID +@deftypefun int swapcontext (ucontext_t *restrict @var{oucp}, const ucontext_t *restrict @var{ucp}) + +The @code{swapcontext} function is similar to @code{setcontext} but +instead of just replacing the current context the latter is first saved +in the object pointed to by @var{oucp} as if this was a call to +@code{getcontext}. The saved context would resume after the call to +@code{swapcontext}. + +Once the current context is saved the context described in @var{ucp} is +installed and execution continues as described in this context. + +If @code{swapcontext} succeeds the function does not return unless the +context @var{oucp} is used without prior modification by +@code{makecontext}. The return value in this case is @code{0}. If the +function fails it returns @code{-1} and set @var{errno} accordingly. +@end deftypefun + +@heading Example for SVID Context Handling + +The easiest way to use the context handling functions is as a +replacement for @code{setjmp} and @code{longjmp}. The context contains +on most platforms more information which might lead to less surprises +but this also means using these functions is more expensive (beside +being less portable). + +@smallexample +int +random_search (int n, int (*fp) (int, ucontext_t *)) +@{ + volatile int cnt = 0; + ucontext_t uc; + + /* @r{Safe current context.} */ + if (getcontext (&uc) < 0) + return -1; + + /* @r{If we have not tried @var{n} times try again.} */ + if (cnt++ < n) + /* @r{Call the function with a new random number} + @r{and the context}. */ + if (fp (rand (), &uc) != 0) + /* @r{We found what we were looking for.} */ + return 1; + + /* @r{Not found.} */ + return 0; +@} +@end smallexample + +Using contexts in such a way enables emulating exception handling. The +search functions passed in the @var{fp} parameter could be very large, +nested, and complex which would make it complicated (or at least would +require a lot of code) to leave the function with an error value which +has to be passed down to the caller. By using the context it is +possible to leave the search function in one step and allow restarting +the search which also has the nice side effect that it can be +significantly faster. + +Something which is harder to implement with @code{setjmp} and +@code{longjmp} is to switch temporarily to a different execution path +and then resume where execution was stopped. + +@smallexample +@include swapcontext.c.texi +@end smallexample + +This an example how the context functions can be used to implement +co-routines or cooperative multi-threading. All that has to be done is +to call every once in a while @code{swapcontext} to continue running a +different context. It is not allowed to do the context switching from +the signal handler directly since neither @code{setcontext} nor +@code{swapcontext} are functions which can be called from a signal +handler. But setting a variable in the signal handler and checking it +in the body of the functions which are executed. Since +@code{swapcontext} is saving the current context it is possible to have +multiple different scheduling points in the code. Execution will always +resume where it was left. diff -durpNa glibc-2.2.2/manual/signal.texi glibc-2.2.3/manual/signal.texi --- glibc-2.2.2/manual/signal.texi Fri Dec 1 11:55:07 2000 +++ glibc-2.2.3/manual/signal.texi Sun Apr 8 22:19:11 2001 @@ -1171,7 +1171,7 @@ the signal. These are described in more @comment signal.h @comment POSIX.1 -@deftypefun int sigaction (int @var{signum}, const struct sigaction *@var{action}, struct sigaction *@var{old-action}) +@deftypefun int sigaction (int @var{signum}, const struct sigaction *restrict @var{action}, struct sigaction *restrict @var{old-action}) The @var{action} argument is used to set up a new action for the signal @var{signum}, while the @var{old-action} argument is used to return information about the action previously associated with this symbol. @@ -2563,7 +2563,7 @@ The prototype for the @code{sigprocmask} @comment signal.h @comment POSIX.1 -@deftypefun int sigprocmask (int @var{how}, const sigset_t *@var{set}, sigset_t *@var{oldset}) +@deftypefun int sigprocmask (int @var{how}, const sigset_t *restrict @var{set}, sigset_t *restrict @var{oldset}) The @code{sigprocmask} function is used to examine or change the calling process's signal mask. The @var{how} argument determines how the signal mask is changed, and must be one of the following values: @@ -3088,8 +3088,8 @@ not require your program to know which d depends on the specific machine and operating system. @comment signal.h -@comment BSD -@deftp {Data Type} {struct sigaltstack} +@comment XPG +@deftp {Data Type} stack_t This structure describes a signal stack. It contains the following members: @table @code @@ -3136,8 +3136,8 @@ delivered on the normal user stack. @end deftp @comment signal.h -@comment BSD -@deftypefun int sigaltstack (const struct sigaltstack *@var{stack}, struct sigaltstack *@var{oldstack}) +@comment XPG +@deftypefun int sigaltstack (const stack_t *restrict @var{stack}, stack_t *restrict @var{oldstack}) The @code{sigaltstack} function specifies an alternate stack for use during signal handling. When a signal is received by the process and its action indicates that the signal stack is used, the system arranges diff -durpNa glibc-2.2.2/manual/startup.texi glibc-2.2.3/manual/startup.texi --- glibc-2.2.2/manual/startup.texi Fri Feb 9 10:04:14 2001 +++ glibc-2.2.3/manual/startup.texi Mon Apr 9 20:03:29 2001 @@ -625,7 +625,7 @@ anyway. @comment unistd.h @comment ??? -@deftypefun long int syscall (long int @var{sysno}, ...) +@deftypefun {long int} syscall (long int @var{sysno}, ...) @code{syscall} performs a generic system call. diff -durpNa glibc-2.2.2/manual/stdio.texi glibc-2.2.3/manual/stdio.texi --- glibc-2.2.2/manual/stdio.texi Thu Feb 15 14:08:39 2001 +++ glibc-2.2.3/manual/stdio.texi Wed Apr 25 14:51:01 2001 @@ -812,16 +812,14 @@ otherwise the character @var{wc} is retu @comment POSIX @deftypefun int fputc_unlocked (int @var{c}, FILE *@var{stream}) The @code{fputc_unlocked} function is equivalent to the @code{fputc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun @comment wchar.h @comment POSIX @deftypefun wint_t fputwc_unlocked (wint_t @var{wc}, FILE *@var{stream}) The @code{fputwc_unlocked} function is equivalent to the @code{fputwc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -850,16 +848,14 @@ use for writing a single wide character. @comment POSIX @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream}) The @code{putc_unlocked} function is equivalent to the @code{putc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun @comment wchar.h @comment GNU @deftypefun wint_t putwc_unlocked (wchar_t @var{wc}, FILE *@var{stream}) The @code{putwc_unlocked} function is equivalent to the @code{putwc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -873,7 +869,7 @@ The @code{putchar} function is equivalen @comment wchar.h @comment ISO -@deftypefun wint_t putchar (wchar_t @var{wc}) +@deftypefun wint_t putwchar (wchar_t @var{wc}) The @code{putwchar} function is equivalent to @code{putwc} with @code{stdout} as the value of the @var{stream} argument. @end deftypefun @@ -882,16 +878,14 @@ The @code{putwchar} function is equivale @comment POSIX @deftypefun int putchar_unlocked (int @var{c}) The @code{putchar_unlocked} function is equivalent to the @code{putchar} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun @comment wchar.h @comment GNU @deftypefun wint_t putwchar_unlocked (wchar_t @var{wc}) The @code{putwchar_unlocked} function is equivalent to the @code{putwchar} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -935,8 +929,7 @@ a non-negative value. @comment GNU @deftypefun int fputs_unlocked (const char *@var{s}, FILE *@var{stream}) The @code{fputs_unlocked} function is equivalent to the @code{fputs} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -945,8 +938,7 @@ This function is a GNU extension. @comment GNU @deftypefun int fputws_unlocked (const wchar_t *@var{ws}, FILE *@var{stream}) The @code{fputws_unlocked} function is equivalent to the @code{fputws} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1023,16 +1015,14 @@ occurs, @code{WEOF} is returned instead. @comment POSIX @deftypefun int fgetc_unlocked (FILE *@var{stream}) The @code{fgetc_unlocked} function is equivalent to the @code{fgetc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun @comment wchar.h @comment GNU @deftypefun wint_t fgetwc_unlocked (FILE *@var{stream}) The @code{fgetwc_unlocked} function is equivalent to the @code{fgetwc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1060,16 +1050,14 @@ best function to use to read a single wi @comment POSIX @deftypefun int getc_unlocked (FILE *@var{stream}) The @code{getc_unlocked} function is equivalent to the @code{getc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun @comment wchar.h @comment GNU @deftypefun wint_t getwc_unlocked (FILE *@var{stream}) The @code{getwc_unlocked} function is equivalent to the @code{getwc} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1092,16 +1080,14 @@ as the value of the @var{stream} argumen @comment POSIX @deftypefun int getchar_unlocked (void) The @code{getchar_unlocked} function is equivalent to the @code{getchar} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun @comment wchar.h @comment GNU @deftypefun wint_t getwchar_unlocked (void) The @code{getwchar_unlocked} function is equivalent to the @code{getwchar} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1278,8 +1264,7 @@ message. @comment GNU @deftypefun {char *} fgets_unlocked (char *@var{s}, int @var{count}, FILE *@var{stream}) The @code{fgets_unlocked} function is equivalent to the @code{fgets} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1288,8 +1273,7 @@ This function is a GNU extension. @comment GNU @deftypefun {wchar_t *} fgetws_unlocked (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream}) The @code{fgetws_unlocked} function is equivalent to the @code{fgetws} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1497,8 +1481,7 @@ object. Therefore, the stream remains a @comment GNU @deftypefun size_t fread_unlocked (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) The @code{fread_unlocked} function is equivalent to the @code{fread} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -1516,8 +1499,7 @@ some sort of error, such as running out @comment GNU @deftypefun size_t fwrite_unlocked (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) The @code{fwrite_unlocked} function is equivalent to the @code{fwrite} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -2381,11 +2363,11 @@ make_message (char *name, char *value) In practice, it is often easier just to use @code{asprintf}, below. -@strong{Attention:} In the GNU C library version 2.0 the return value -is the number of characters stored, not including the terminating null. -If this value equals @code{@var{size} - 1}, then there was not enough -space in @var{s} for all the output. This change was necessary with -the adoption of snprintf by ISO C99. +@strong{Attention:} In versions of the GNU C library prior to 2.1 the +return value is the number of characters stored, not including the +terminating null; unless there was not enough space in @var{s} to +store the result in which case @code{-1} is returned. This was +changed in order to comply with the @w{ISO C99} standard. @end deftypefun @node Dynamic Output @@ -3966,8 +3948,7 @@ This symbol is declared in @file{stdio.h @comment GNU @deftypefun int feof_unlocked (FILE *@var{stream}) The @code{feof_unlocked} function is equivalent to the @code{feof} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -3988,8 +3969,7 @@ This symbol is declared in @file{stdio.h @comment GNU @deftypefun int ferror_unlocked (FILE *@var{stream}) The @code{ferror_unlocked} function is equivalent to the @code{ferror} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -4026,8 +4006,7 @@ end-of-file indicator for the stream. @comment GNU @deftypefun void clearerr_unlocked (FILE *@var{stream}) The @code{clearerr_unlocked} function is equivalent to the @code{clearerr} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. This function is a GNU extension. @end deftypefun @@ -4564,8 +4543,7 @@ otherwise. @comment POSIX @deftypefun int fflush_unlocked (FILE *@var{stream}) The @code{fflush_unlocked} function is equivalent to the @code{fflush} -function except that it does not implicitly lock the stream if the state -is @code{FSETLOCKING_INTERNAL}. +function except that it does not implicitly lock the stream. @end deftypefun The @code{fflush} function can be used to flush all streams currently @@ -4577,7 +4555,7 @@ flushed. Solaris introduced a function always available in the GNU C library in some form but never officially exported. -@comment stdio.h +@comment stdio_ext.h @comment GNU @deftypefun void _flushlbf (void) The @code{_flushlbf} function flushes all line buffered streams diff -durpNa glibc-2.2.2/manual/swapcontext.c.texi glibc-2.2.3/manual/swapcontext.c.texi --- glibc-2.2.2/manual/swapcontext.c.texi Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/manual/swapcontext.c.texi Sun Apr 8 22:46:07 2001 @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include + +/* @r{Set by the signal handler.} */ +static volatile int expired; + +/* @r{The contexts.} */ +static ucontext_t uc[3]; + +/* @r{We do only a certain number of switches.} */ +static int switches; + + +/* @r{This is the function doing the work. It is just a + skeleton, real code has to be filled in.} */ +static void +f (int n) +@{ + int m = 0; + while (1) + @{ + /* @r{This is where the work would be done.} */ + if (++m % 100 == 0) + @{ + putchar ('.'); + fflush (stdout); + @} + + /* @r{Regularly the @var{expire} variable must be checked.} */ + if (expired) + @{ + /* @r{We do not want the program to run forever.} */ + if (++switches == 20) + return; + + printf ("\nswitching from %d to %d\n", n, 3 - n); + expired = 0; + /* @r{Switch to the other context, saving the current one.} */ + swapcontext (&uc[n], &uc[3 - n]); + @} + @} +@} + +/* @r{This is the signal handler which simply set the variable.} */ +void +handler (int signal) +@{ + expired = 1; +@} + + +int +main (void) +@{ + struct sigaction sa; + struct itimerval it; + char st1[8192]; + char st2[8192]; + + /* @r{Initialize the data structures for the interval timer.} */ + sa.sa_flags = SA_RESTART; + sigfillset (&sa.sa_mask); + sa.sa_handler = handler; + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 1; + it.it_value = it.it_interval; + + /* @r{Install the timer and get the context we can manipulate.} */ + if (sigaction (SIGPROF, &sa, NULL) < 0 + || setitimer (ITIMER_PROF, &it, NULL) < 0 + || getcontext (&uc[1]) == -1 + || getcontext (&uc[2]) == -1) + abort (); + + /* @r{Create a context with a separate stack which causes the + function @code{f} to be call with the parameter @code{1}. + Note that the @code{uc_link} points to the main context + which will cause the program to terminate once the function + return.} */ + uc[1].uc_link = &uc[0]; + uc[1].uc_stack.ss_sp = st1; + uc[1].uc_stack.ss_size = sizeof st1; + makecontext (&uc[1], (void (*) (void)) f, 1, 1); + + /* @r{Similarly, but @code{2} is passed as the parameter to @code{f}.} */ + uc[2].uc_link = &uc[0]; + uc[2].uc_stack.ss_sp = st2; + uc[2].uc_stack.ss_size = sizeof st2; + makecontext (&uc[2], (void (*) (void)) f, 1, 2); + + /* @r{Start running.} */ + swapcontext (&uc[0], &uc[1]); + putchar ('\n'); + + return 0; +@} diff -durpNa glibc-2.2.2/math/Makefile glibc-2.2.3/math/Makefile --- glibc-2.2.2/math/Makefile Fri Feb 9 10:04:15 2001 +++ glibc-2.2.3/math/Makefile Mon Mar 26 20:53:02 2001 @@ -46,21 +46,25 @@ libm-calls = e_acos e_acosh e_asin e_ata e_rem_pio2 e_remainder e_scalb e_sinh e_sqrt e_gamma_r \ k_cos k_rem_pio2 k_sin k_tan s_asinh s_atan s_cbrt \ s_ceil s_copysign s_cos s_erf s_expm1 s_fabs s_finite \ - s_floor s_frexp s_ilogb s_ldexp s_log1p s_logb \ + s_floor s_frexp s_ilogb s_ldexp s_log1p s_logb \ s_modf s_nextafter s_nexttoward s_rint s_scalbn s_scalbln \ s_significand s_sin s_tan s_tanh w_acos w_acosh w_asin \ w_atan2 w_atanh w_cosh w_drem w_exp w_exp2 w_exp10 w_fmod \ w_tgamma w_hypot w_j0 w_j1 w_jn w_lgamma w_lgamma_r \ w_log w_log10 w_pow w_remainder w_scalb w_sinh w_sqrt \ s_signbit s_fpclassify s_fmax s_fmin s_fdim s_nan s_trunc \ - s_remquo s_log2 s_exp2 s_round s_nearbyint s_sincos \ + s_remquo s_log2 e_exp2 s_round s_nearbyint s_sincos \ conj cimag creal cabs carg s_cexp s_csinh s_ccosh s_clog \ s_catan s_casin s_ccos s_csin s_ctan s_ctanh s_cacos \ s_casinh s_cacosh s_catanh s_csqrt s_cpow s_cproj s_clog10 \ s_fma s_lrint s_llrint s_lround s_llround e_exp10 +dbl-only-routines := branred doasin dosincos halfulp mpa mpatan2 \ + mpatan mpexp mplog mpsqrt mptan sincos32 slowexp \ + slowpow libm-routines = $(strip $(libm-support) $(libm-calls) \ $(patsubst %_rf,%f_r,$(libm-calls:=f)) \ - $(long-m-$(long-double-fcts))) + $(long-m-$(long-double-fcts))) \ + $(dbl-only-routines) long-m-routines = $(patsubst %_rl,%l_r,$(libm-calls:=l)) long-m-support = t_sincosl k_sincosl long-m-yes = $(long-m-routines) $(long-m-support) @@ -143,8 +147,6 @@ CPPFLAGS-s_lib_version.c := -D_POSIX_MOD # only the fdlibm code. CPPFLAGS += -D__NO_MATH_INLINES -D__LIBC_INTERNAL_MATH_INLINES -# Using omit-long-double-fcts is only a temporary hack. -ifneq ($(omit-long-double-fcts),yes) ifneq ($(long-double-fcts),yes) # The `double' and `long double' types are the same on this machine. # We won't compile the `long double' code at all. Tell the `double' code @@ -153,7 +155,6 @@ ifneq ($(long-double-fcts),yes) # `double' instead of `long double'. CPPFLAGS += -DNO_LONG_DOUBLE -D_Mlong_double_=double endif -endif # The fdlibm code generates a lot of these warnings but is otherwise clean. override CFLAGS += -Wno-uninitialized @@ -190,4 +191,4 @@ $(objpfx)atest-exp2: $(gmp-objs) # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libm.so: $(common-objpfx)libc.so +$(objpfx)libm.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/math/bits/mathcalls.h glibc-2.2.3/math/bits/mathcalls.h --- glibc-2.2.2/math/bits/mathcalls.h Mon Feb 28 12:34:07 2000 +++ glibc-2.2.3/math/bits/mathcalls.h Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* Prototype declarations for math functions; helper file for . - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -185,14 +185,6 @@ __MATHDECL_1 (int,isinf,, (_Mdouble_ __v /* Return nonzero if VALUE is finite and not NaN. */ __MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); - -/* Deal with an infinite or NaN result. - If ERROR is ERANGE, result is +Inf; - if ERROR is - ERANGE, result is -Inf; - otherwise result is NaN. - This will set `errno' to either ERANGE or EDOM, - and may return an infinity or NaN, or may do something else. */ -__MATHCALLX (infnan,, (int __error), (__const__)); /* Return the remainder of X/Y. */ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y)); diff -durpNa glibc-2.2.2/math/libm-test.inc glibc-2.2.3/math/libm-test.inc --- glibc-2.2.2/math/libm-test.inc Thu Feb 15 14:08:40 2001 +++ glibc-2.2.3/math/libm-test.inc Tue Apr 17 14:57:11 2001 @@ -739,7 +739,7 @@ acosh_test (void) TEST_f_f (acosh, -1.1L, nan_value, INVALID_EXCEPTION); TEST_f_f (acosh, 1, 0); - TEST_f_f (acosh, 7, 2.6339157938496334172L); + TEST_f_f (acosh, 7, 2.633915793849633417250092694615937L); END (acosh); } @@ -818,7 +818,7 @@ atan_test (void) TEST_f_f (atan, 1, M_PI_4l); TEST_f_f (atan, -1, -M_PI_4l); - TEST_f_f (atan, 0.7L, 0.6107259643892086165L); + TEST_f_f (atan, 0.7L, 0.61072596438920861654375887649023613L); END (atan); } @@ -918,8 +918,12 @@ atan2_test (void) TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l); TEST_ff_f (atan2, nan_value, nan_value, nan_value); - TEST_ff_f (atan2, 0.7L, 1, 0.6107259643892086165L); - TEST_ff_f (atan2, 0.4L, 0.0003L, 1.5700463269355215718L); + TEST_ff_f (atan2, 0.7L, 1, 0.61072596438920861654375887649023613L); + TEST_ff_f (atan2, -0.7L, 1.0L, -0.61072596438920861654375887649023613L); + TEST_ff_f (atan2, 0.7L, -1.0L, 2.530866689200584621918884506789267L); + TEST_ff_f (atan2, -0.7L, -1.0L, -2.530866689200584621918884506789267L); + TEST_ff_f (atan2, 0.4L, 0.0003L, 1.5700463269355215717704032607580829L); + TEST_ff_f (atan2, 1.4L, -0.93L, 2.1571487668237843754887415992772736L); END (atan2); } @@ -1028,8 +1032,8 @@ cacos_test (void) TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (cacos, 0.7L, 1.2L, 1.1351827477151551089L, -1.0927647857577371459L); - TEST_c_c (cacos, -2, -3, 2.1414491111159960199L, 1.9833870299165354323L); + TEST_c_c (cacos, 0.7L, 1.2L, 1.1351827477151551088992008271819053L, -1.0927647857577371459105272080819308L); + TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L); END (cacos, complex); } @@ -1091,8 +1095,8 @@ cacosh_test (void) TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (cacosh, 0.7L, 1.2L, 1.0927647857577371459L, 1.1351827477151551089L); - TEST_c_c (cacosh, -2, -3, -1.9833870299165354323L, 2.1414491111159960199L); + TEST_c_c (cacosh, 0.7L, 1.2L, 1.0927647857577371459105272080819308L, 1.1351827477151551088992008271819053L); + TEST_c_c (cacosh, -2, -3, -1.9833870299165354323470769028940395L, 2.1414491111159960199416055713254211L); END (cacosh, complex); } @@ -1221,8 +1225,8 @@ casin_test (void) TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (casin, 0.7L, 1.2L, 0.4356135790797415103L, 1.0927647857577371459L); - TEST_c_c (casin, -2, -3, -0.5706527843210994007L, -1.9833870299165354323L); + TEST_c_c (casin, 0.7L, 1.2L, 0.4356135790797415103321208644578462L, 1.0927647857577371459105272080819308L); + TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L); END (casin, complex); } @@ -1285,8 +1289,8 @@ casinh_test (void) TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (casinh, 0.7L, 1.2L, 0.9786545955936738768L, 0.9113541895315601156L); - TEST_c_c (casinh, -2, -3, -1.9686379257930962917L, -0.9646585044076027920L); + TEST_c_c (casinh, 0.7L, 1.2L, 0.97865459559367387689317593222160964L, 0.91135418953156011567903546856170941L); + TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L); END (casinh, complex); } @@ -1353,9 +1357,9 @@ catan_test (void) TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (catan, 0.7L, 1.2L, 1.0785743834118921877L, 0.5770573776534306764L); + TEST_c_c (catan, 0.7L, 1.2L, 1.0785743834118921877443707996386368L, 0.57705737765343067644394541889341712L); - TEST_c_c (catan, -2, -3, -1.4099210495965755225L, -0.2290726829685387662L); + TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L); END (catan, complex); } @@ -1420,8 +1424,8 @@ catanh_test (void) TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (catanh, 0.7L, 1.2L, 0.2600749516525135959L, 0.9702403077950989849L); - TEST_c_c (catanh, -2, -3, -0.1469466662255297520L, -1.3389725222944935611L); + TEST_c_c (catanh, 0.7L, 1.2L, 0.2600749516525135959200648705635915L, 0.97024030779509898497385130162655963L); + TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L); END (catanh, complex); } @@ -1746,7 +1750,7 @@ clog_test (void) TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK); TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value); - TEST_c_c (clog, -2, -3, 1.2824746787307683680L, -2.1587989303424641704L); + TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L); END (clog, complex); } @@ -2087,8 +2091,8 @@ csinh_test (void) TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN); TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN); - TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION); - TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION); + TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK); + TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK); TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0); TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero); @@ -2875,15 +2879,15 @@ j1_test (void) TEST_f_f (j1, nan_value, nan_value); TEST_f_f (j1, plus_infty, 0); - TEST_f_f (j1, -1.0, -0.44005058574493351596); + TEST_f_f (j1, -1.0, -0.44005058574493351596L); TEST_f_f (j1, 0.0, 0.0); - TEST_f_f (j1, 0.1L, 0.049937526036241997556); - TEST_f_f (j1, 0.7L, 0.32899574154005894785); - TEST_f_f (j1, 1.0, 0.44005058574493351596); - TEST_f_f (j1, 1.5, 0.55793650791009964199); - TEST_f_f (j1, 2.0, 0.57672480775687338720); - TEST_f_f (j1, 8.0, 0.23463634685391462438); - TEST_f_f (j1, 10.0, 0.043472746168861436670); + TEST_f_f (j1, 0.1L, 0.049937526036241997556L); + TEST_f_f (j1, 0.7L, 0.32899574154005894785L); + TEST_f_f (j1, 1.0, 0.44005058574493351596L); + TEST_f_f (j1, 1.5, 0.55793650791009964199L); + TEST_f_f (j1, 2.0, 0.57672480775687338720L); + TEST_f_f (j1, 8.0, 0.23463634685391462438L); + TEST_f_f (j1, 10.0, 0.043472746168861436670L); END (j1); } @@ -2908,53 +2912,53 @@ jn_test (void) /* jn (0, x) == j0 (x) */ TEST_ff_f (jn, 0, nan_value, nan_value); TEST_ff_f (jn, 0, plus_infty, 0); - TEST_ff_f (jn, 0, -1.0, 0.76519768655796655145); + TEST_ff_f (jn, 0, -1.0, 0.76519768655796655145L); TEST_ff_f (jn, 0, 0.0, 1.0); - TEST_ff_f (jn, 0, 0.1L, 0.99750156206604003228); - TEST_ff_f (jn, 0, 0.7L, 0.88120088860740528084); - TEST_ff_f (jn, 0, 1.0, 0.76519768655796655145); - TEST_ff_f (jn, 0, 1.5, 0.51182767173591812875); - TEST_ff_f (jn, 0, 2.0, 0.22389077914123566805); - TEST_ff_f (jn, 0, 8.0, 0.17165080713755390609); - TEST_ff_f (jn, 0, 10.0, -0.24593576445134833520); + TEST_ff_f (jn, 0, 0.1L, 0.99750156206604003228L); + TEST_ff_f (jn, 0, 0.7L, 0.88120088860740528084L); + TEST_ff_f (jn, 0, 1.0, 0.76519768655796655145L); + TEST_ff_f (jn, 0, 1.5, 0.51182767173591812875L); + TEST_ff_f (jn, 0, 2.0, 0.22389077914123566805L); + TEST_ff_f (jn, 0, 8.0, 0.17165080713755390609L); + TEST_ff_f (jn, 0, 10.0, -0.24593576445134833520L); /* jn (1, x) == j1 (x) */ TEST_ff_f (jn, 1, nan_value, nan_value); TEST_ff_f (jn, 1, plus_infty, 0); - TEST_ff_f (jn, 1, -1.0, -0.44005058574493351596); + TEST_ff_f (jn, 1, -1.0, -0.44005058574493351596L); TEST_ff_f (jn, 1, 0.0, 0.0); - TEST_ff_f (jn, 1, 0.1L, 0.049937526036241997556); - TEST_ff_f (jn, 1, 0.7L, 0.32899574154005894785); - TEST_ff_f (jn, 1, 1.0, 0.44005058574493351596); - TEST_ff_f (jn, 1, 1.5, 0.55793650791009964199); - TEST_ff_f (jn, 1, 2.0, 0.57672480775687338720); - TEST_ff_f (jn, 1, 8.0, 0.23463634685391462438); - TEST_ff_f (jn, 1, 10.0, 0.043472746168861436670); + TEST_ff_f (jn, 1, 0.1L, 0.049937526036241997556L); + TEST_ff_f (jn, 1, 0.7L, 0.32899574154005894785L); + TEST_ff_f (jn, 1, 1.0, 0.44005058574493351596L); + TEST_ff_f (jn, 1, 1.5, 0.55793650791009964199L); + TEST_ff_f (jn, 1, 2.0, 0.57672480775687338720L); + TEST_ff_f (jn, 1, 8.0, 0.23463634685391462438L); + TEST_ff_f (jn, 1, 10.0, 0.043472746168861436670L); /* jn (3, x) */ TEST_ff_f (jn, 3, nan_value, nan_value); TEST_ff_f (jn, 3, plus_infty, 0); - TEST_ff_f (jn, 3, -1.0, -0.019563353982668405919); + TEST_ff_f (jn, 3, -1.0, -0.019563353982668405919L); TEST_ff_f (jn, 3, 0.0, 0.0); - TEST_ff_f (jn, 3, 0.1L, 0.000020820315754756261429); - TEST_ff_f (jn, 3, 0.7L, 0.0069296548267508408077); - TEST_ff_f (jn, 3, 1.0, 0.019563353982668405919); - TEST_ff_f (jn, 3, 2.0, 0.12894324947440205110); - TEST_ff_f (jn, 3, 10.0, 0.058379379305186812343); + TEST_ff_f (jn, 3, 0.1L, 0.000020820315754756261429L); + TEST_ff_f (jn, 3, 0.7L, 0.0069296548267508408077L); + TEST_ff_f (jn, 3, 1.0, 0.019563353982668405919L); + TEST_ff_f (jn, 3, 2.0, 0.12894324947440205110L); + TEST_ff_f (jn, 3, 10.0, 0.058379379305186812343L); /* jn (10, x) */ TEST_ff_f (jn, 10, nan_value, nan_value); TEST_ff_f (jn, 10, plus_infty, 0); - TEST_ff_f (jn, 10, -1.0, 0.26306151236874532070e-9); + TEST_ff_f (jn, 10, -1.0, 0.26306151236874532070e-9L); TEST_ff_f (jn, 10, 0.0, 0.0); - TEST_ff_f (jn, 10, 0.1L, 0.26905328954342155795e-19); - TEST_ff_f (jn, 10, 0.7L, 0.75175911502153953928e-11); - TEST_ff_f (jn, 10, 1.0, 0.26306151236874532070e-9); - TEST_ff_f (jn, 10, 2.0, 0.25153862827167367096e-6); - TEST_ff_f (jn, 10, 10.0, 0.20748610663335885770); + TEST_ff_f (jn, 10, 0.1L, 0.26905328954342155795e-19L); + TEST_ff_f (jn, 10, 0.7L, 0.75175911502153953928e-11L); + TEST_ff_f (jn, 10, 1.0, 0.26306151236874532070e-9L); + TEST_ff_f (jn, 10, 2.0, 0.25153862827167367096e-6L); + TEST_ff_f (jn, 10, 10.0, 0.20748610663335885770L); END (jn); } @@ -3099,7 +3103,7 @@ log_test (void) TEST_f_f (log, 1.0 / M_El, -1); TEST_f_f (log, 2, M_LN2l); TEST_f_f (log, 10, M_LN10l); - TEST_f_f (log, 0.7L, -0.35667494393873237891L); + TEST_f_f (log, 0.7L, -0.35667494393873237891263871124118447L); END (log); } @@ -3160,7 +3164,7 @@ log1p_test (void) TEST_f_f (log1p, M_El - 1.0, 1); - TEST_f_f (log1p, -0.3L, -0.35667494393873237891L); + TEST_f_f (log1p, -0.3L, -0.35667494393873237891263871124118447L); END (log1p); } @@ -3468,7 +3472,7 @@ pow_test (void) TEST_ff_f (pow, nan_value, nan_value, nan_value); TEST_ff_f (pow, 0, nan_value, nan_value); - TEST_ff_f (pow, 1, nan_value, nan_value); + TEST_ff_f (pow, 1, nan_value, 1); TEST_ff_f (pow, -1, nan_value, nan_value); TEST_ff_f (pow, nan_value, 1, nan_value); TEST_ff_f (pow, nan_value, -1, nan_value); @@ -3476,10 +3480,10 @@ pow_test (void) /* pow (x, NaN) == NaN. */ TEST_ff_f (pow, 3.0, nan_value, nan_value); - TEST_ff_f (pow, 1, plus_infty, nan_value, INVALID_EXCEPTION); - TEST_ff_f (pow, -1, plus_infty, nan_value, INVALID_EXCEPTION); - TEST_ff_f (pow, 1, minus_infty, nan_value, INVALID_EXCEPTION); - TEST_ff_f (pow, -1, minus_infty, nan_value, INVALID_EXCEPTION); + TEST_ff_f (pow, 1, plus_infty, 1); + TEST_ff_f (pow, -1, plus_infty, 1); + TEST_ff_f (pow, 1, minus_infty, 1); + TEST_ff_f (pow, -1, minus_infty, 1); TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION); TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION); @@ -3674,8 +3678,8 @@ scalb_test (void) START (scalb); - TEST_ff_f (scalb, 2.0, 0.5, nan_value); - TEST_ff_f (scalb, 3.0, -2.5, nan_value); + TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION); + TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION); TEST_ff_f (scalb, 0, nan_value, nan_value); TEST_ff_f (scalb, 1, nan_value, nan_value); @@ -3710,8 +3714,8 @@ scalb_test (void) TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty); TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty); - TEST_ff_f (scalb, plus_infty, minus_infty, nan_value); - TEST_ff_f (scalb, minus_infty, minus_infty, nan_value); + TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION); + TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION); TEST_ff_f (scalb, nan_value, 1, nan_value); TEST_ff_f (scalb, 1, nan_value, nan_value); @@ -3920,7 +3924,7 @@ tan_test (void) TEST_f_f (tan, nan_value, nan_value); TEST_f_f (tan, M_PI_4l, 1); - TEST_f_f (tan, 0.7L, 0.84228838046307944813L); + TEST_f_f (tan, 0.7L, 0.84228838046307944812813500221293775L); END (tan); } @@ -4069,13 +4073,13 @@ y1_test (void) TEST_f_f (y1, plus_infty, 0); TEST_f_f (y1, nan_value, nan_value); - TEST_f_f (y1, 0.1L, -6.4589510947020269877); - TEST_f_f (y1, 0.7L, -1.1032498719076333697); - TEST_f_f (y1, 1.0, -0.78121282130028871655); - TEST_f_f (y1, 1.5, -0.41230862697391129595); - TEST_f_f (y1, 2.0, -0.10703243154093754689); - TEST_f_f (y1, 8.0, -0.15806046173124749426); - TEST_f_f (y1, 10.0, 0.24901542420695388392); + TEST_f_f (y1, 0.1L, -6.4589510947020269877L); + TEST_f_f (y1, 0.7L, -1.1032498719076333697L); + TEST_f_f (y1, 1.0, -0.78121282130028871655L); + TEST_f_f (y1, 1.5, -0.41230862697391129595L); + TEST_f_f (y1, 2.0, -0.10703243154093754689L); + TEST_f_f (y1, 8.0, -0.15806046173124749426L); + TEST_f_f (y1, 10.0, 0.24901542420695388392L); END (y1); } @@ -4103,13 +4107,13 @@ yn_test (void) TEST_ff_f (yn, 0, nan_value, nan_value); TEST_ff_f (yn, 0, plus_infty, 0); - TEST_ff_f (yn, 0, 0.1L, -1.5342386513503668441); - TEST_ff_f (yn, 0, 0.7L, -0.19066492933739506743); - TEST_ff_f (yn, 0, 1.0, 0.088256964215676957983); - TEST_ff_f (yn, 0, 1.5, 0.38244892379775884396); - TEST_ff_f (yn, 0, 2.0, 0.51037567264974511960); - TEST_ff_f (yn, 0, 8.0, 0.22352148938756622053); - TEST_ff_f (yn, 0, 10.0, 0.055671167283599391424); + TEST_ff_f (yn, 0, 0.1L, -1.5342386513503668441L); + TEST_ff_f (yn, 0, 0.7L, -0.19066492933739506743L); + TEST_ff_f (yn, 0, 1.0, 0.088256964215676957983L); + TEST_ff_f (yn, 0, 1.5, 0.38244892379775884396L); + TEST_ff_f (yn, 0, 2.0, 0.51037567264974511960L); + TEST_ff_f (yn, 0, 8.0, 0.22352148938756622053L); + TEST_ff_f (yn, 0, 10.0, 0.055671167283599391424L); /* yn (1, x) == y1 (x) */ TEST_ff_f (yn, 1, -1.0, minus_infty); @@ -4117,33 +4121,33 @@ yn_test (void) TEST_ff_f (yn, 1, plus_infty, 0); TEST_ff_f (yn, 1, nan_value, nan_value); - TEST_ff_f (yn, 1, 0.1L, -6.4589510947020269877); - TEST_ff_f (yn, 1, 0.7L, -1.1032498719076333697); - TEST_ff_f (yn, 1, 1.0, -0.78121282130028871655); - TEST_ff_f (yn, 1, 1.5, -0.41230862697391129595); - TEST_ff_f (yn, 1, 2.0, -0.10703243154093754689); - TEST_ff_f (yn, 1, 8.0, -0.15806046173124749426); - TEST_ff_f (yn, 1, 10.0, 0.24901542420695388392); + TEST_ff_f (yn, 1, 0.1L, -6.4589510947020269877L); + TEST_ff_f (yn, 1, 0.7L, -1.1032498719076333697L); + TEST_ff_f (yn, 1, 1.0, -0.78121282130028871655L); + TEST_ff_f (yn, 1, 1.5, -0.41230862697391129595L); + TEST_ff_f (yn, 1, 2.0, -0.10703243154093754689L); + TEST_ff_f (yn, 1, 8.0, -0.15806046173124749426L); + TEST_ff_f (yn, 1, 10.0, 0.24901542420695388392L); /* yn (3, x) */ TEST_ff_f (yn, 3, plus_infty, 0); TEST_ff_f (yn, 3, nan_value, nan_value); - TEST_ff_f (yn, 3, 0.1L, -5099.3323786129048894); - TEST_ff_f (yn, 3, 0.7L, -15.819479052819633505); - TEST_ff_f (yn, 3, 1.0, -5.8215176059647288478); - TEST_ff_f (yn, 3, 2.0, -1.1277837768404277861); - TEST_ff_f (yn, 3, 10.0, -0.25136265718383732978); + TEST_ff_f (yn, 3, 0.1L, -5099.3323786129048894L); + TEST_ff_f (yn, 3, 0.7L, -15.819479052819633505L); + TEST_ff_f (yn, 3, 1.0, -5.8215176059647288478L); + TEST_ff_f (yn, 3, 2.0, -1.1277837768404277861L); + TEST_ff_f (yn, 3, 10.0, -0.25136265718383732978L); /* yn (10, x) */ TEST_ff_f (yn, 10, plus_infty, 0); TEST_ff_f (yn, 10, nan_value, nan_value); - TEST_ff_f (yn, 10, 0.1L, -0.11831335132045197885e19); - TEST_ff_f (yn, 10, 0.7L, -0.42447194260703866924e10); - TEST_ff_f (yn, 10, 1.0, -0.12161801427868918929e9); - TEST_ff_f (yn, 10, 2.0, -129184.54220803928264); - TEST_ff_f (yn, 10, 10.0, -0.35981415218340272205); + TEST_ff_f (yn, 10, 0.1L, -0.11831335132045197885e19L); + TEST_ff_f (yn, 10, 0.7L, -0.42447194260703866924e10L); + TEST_ff_f (yn, 10, 1.0, -0.12161801427868918929e9L); + TEST_ff_f (yn, 10, 2.0, -129184.54220803928264L); + TEST_ff_f (yn, 10, 10.0, -0.35981415218340272205L); END (yn); diff -durpNa glibc-2.2.2/math/test-fenv.c glibc-2.2.3/math/test-fenv.c --- glibc-2.2.2/math/test-fenv.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/math/test-fenv.c Thu Apr 12 14:02:04 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger and Ulrich Drepper , 1997. @@ -640,8 +640,10 @@ initial_tests (void) { test_exceptions ("Initially all exceptions should be cleared", NO_EXC, 0); +#ifdef FE_TONEAREST test_rounding ("Rounding direction should be initalized to nearest", FE_TONEAREST); +#endif } int diff -durpNa glibc-2.2.2/math/w_acos.c glibc-2.2.3/math/w_acos.c --- glibc-2.2.2/math/w_acos.c Tue Jul 13 15:59:32 1999 +++ glibc-2.2.3/math/w_acos.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* @(#)w_acos.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_acos.c,v 1.6 1995/05/10 20:48:26 jtc Exp $"; -#endif - -/* - * wrap_acos(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __acos(double x) /* wrapper acos */ -#else - double __acos(x) /* wrapper acos */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_acos(x); -#else - double z; - z = __ieee754_acos(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - if(fabs(x)>1.0) { - return __kernel_standard(x,x,1); /* acos(|x|>1) */ - } else - return z; -#endif -} -weak_alias (__acos, acos) -#ifdef NO_LONG_DOUBLE -strong_alias (__acos, __acosl) -weak_alias (__acos, acosl) -#endif diff -durpNa glibc-2.2.2/math/w_acosf.c glibc-2.2.3/math/w_acosf.c --- glibc-2.2.2/math/w_acosf.c Tue Jul 13 16:01:48 1999 +++ glibc-2.2.3/math/w_acosf.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_acosf.c -- float version of w_acos.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_acosf.c,v 1.3 1995/05/10 20:48:29 jtc Exp $"; -#endif - -/* - * wrap_acosf(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __acosf(float x) /* wrapper acosf */ -#else - float __acosf(x) /* wrapper acosf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_acosf(x); -#else - float z; - z = __ieee754_acosf(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - if(fabsf(x)>(float)1.0) { - /* acosf(|x|>1) */ - return (float)__kernel_standard((double)x,(double)x,101); - } else - return z; -#endif -} -weak_alias (__acosf, acosf) diff -durpNa glibc-2.2.2/math/w_acosh.c glibc-2.2.3/math/w_acosh.c --- glibc-2.2.2/math/w_acosh.c Tue Jul 13 16:01:53 1999 +++ glibc-2.2.3/math/w_acosh.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* @(#)w_acosh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_acosh.c,v 1.6 1995/05/10 20:48:31 jtc Exp $"; -#endif - -/* - * wrapper acosh(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double __acosh(double x) /* wrapper acosh */ -#else - double __acosh(x) /* wrapper acosh */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_acosh(x); -#else - double z; - z = __ieee754_acosh(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - if(x<1.0) { - return __kernel_standard(x,x,29); /* acosh(x<1) */ - } else - return z; -#endif -} -weak_alias (__acosh, acosh) -#ifdef NO_LONG_DOUBLE -strong_alias (__acosh, __acoshl) -weak_alias (__acosh, acoshl) -#endif diff -durpNa glibc-2.2.2/math/w_acoshf.c glibc-2.2.3/math/w_acoshf.c --- glibc-2.2.2/math/w_acoshf.c Tue Jul 13 16:01:57 1999 +++ glibc-2.2.3/math/w_acoshf.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_acoshf.c -- float version of w_acosh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - * - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_acoshf.c,v 1.3 1995/05/10 20:48:33 jtc Exp $"; -#endif - -/* - * wrapper acoshf(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float __acoshf(float x) /* wrapper acoshf */ -#else - float __acoshf(x) /* wrapper acoshf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_acoshf(x); -#else - float z; - z = __ieee754_acoshf(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - if(x<(float)1.0) { - /* acosh(x<1) */ - return (float)__kernel_standard((double)x,(double)x,129); - } else - return z; -#endif -} -weak_alias (__acoshf, acoshf) diff -durpNa glibc-2.2.2/math/w_acoshl.c glibc-2.2.3/math/w_acoshl.c --- glibc-2.2.2/math/w_acoshl.c Tue Jul 13 16:02:01 1999 +++ glibc-2.2.3/math/w_acoshl.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_acoshl.c -- long double version of w_acosh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper acoshl(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __acoshl(long double x) /* wrapper acosh */ -#else - long double __acoshl(x) /* wrapper acosh */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_acoshl(x); -#else - long double z; - z = __ieee754_acoshl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(x<1.0) { - return __kernel_standard(x,x,229); /* acoshl(x<1) */ - } else - return z; -#endif -} -weak_alias (__acoshl, acoshl) diff -durpNa glibc-2.2.2/math/w_acosl.c glibc-2.2.3/math/w_acosl.c --- glibc-2.2.2/math/w_acosl.c Tue Jul 13 16:02:06 1999 +++ glibc-2.2.3/math/w_acosl.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_acosl.c -- long double version of w_acos.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrap_acosl(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __acosl(long double x) /* wrapper acos */ -#else - long double __acosl(x) /* wrapper acos */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_acosl(x); -#else - long double z; - z = __ieee754_acosl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(fabsl(x)>1.0) { - return __kernel_standard(x,x,201); /* acosl(|x|>1) */ - } else - return z; -#endif -} -weak_alias (__acosl, acosl) diff -durpNa glibc-2.2.2/math/w_asin.c glibc-2.2.3/math/w_asin.c --- glibc-2.2.2/math/w_asin.c Tue Jul 13 16:02:11 1999 +++ glibc-2.2.3/math/w_asin.c Wed Dec 31 16:00:00 1969 @@ -1,49 +0,0 @@ -/* @(#)w_asin.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_asin.c,v 1.6 1995/05/10 20:48:35 jtc Exp $"; -#endif - -/* - * wrapper asin(x) - */ - - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __asin(double x) /* wrapper asin */ -#else - double __asin(x) /* wrapper asin */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_asin(x); -#else - double z; - z = __ieee754_asin(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - if(fabs(x)>1.0) { - return __kernel_standard(x,x,2); /* asin(|x|>1) */ - } else - return z; -#endif -} -weak_alias (__asin, asin) -#ifdef NO_LONG_DOUBLE -strong_alias (__asin, __asinl) -weak_alias (__asin, asinl) -#endif diff -durpNa glibc-2.2.2/math/w_asinf.c glibc-2.2.3/math/w_asinf.c --- glibc-2.2.2/math/w_asinf.c Tue Jul 13 16:02:15 1999 +++ glibc-2.2.3/math/w_asinf.c Wed Dec 31 16:00:00 1969 @@ -1,49 +0,0 @@ -/* w_asinf.c -- float version of w_asin.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_asinf.c,v 1.3 1995/05/10 20:48:37 jtc Exp $"; -#endif - -/* - * wrapper asinf(x) - */ - - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __asinf(float x) /* wrapper asinf */ -#else - float __asinf(x) /* wrapper asinf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_asinf(x); -#else - float z; - z = __ieee754_asinf(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - if(fabsf(x)>(float)1.0) { - /* asinf(|x|>1) */ - return (float)__kernel_standard((double)x,(double)x,102); - } else - return z; -#endif -} -weak_alias (__asinf, asinf) diff -durpNa glibc-2.2.2/math/w_asinl.c glibc-2.2.3/math/w_asinl.c --- glibc-2.2.2/math/w_asinl.c Tue Jul 13 16:02:20 1999 +++ glibc-2.2.3/math/w_asinl.c Wed Dec 31 16:00:00 1969 @@ -1,49 +0,0 @@ -/* w_asinl.c -- long double version of w_asin.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper asinl(x) - */ - - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __asinl(long double x) /* wrapper asinl */ -#else - long double __asinl(x) /* wrapper asinl */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_asinl(x); -#else - long double z; - z = __ieee754_asinl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(fabsl(x)>1.0) { - return __kernel_standard(x,x,202); /* asinl(|x|>1) */ - } else - return z; -#endif -} -weak_alias (__asinl, asinl) diff -durpNa glibc-2.2.2/math/w_atan2.c glibc-2.2.3/math/w_atan2.c --- glibc-2.2.2/math/w_atan2.c Tue Jul 13 16:02:25 1999 +++ glibc-2.2.3/math/w_atan2.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* @(#)w_atan2.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_atan2.c,v 1.6 1995/05/10 20:48:39 jtc Exp $"; -#endif - -/* - * wrapper atan2(y,x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __atan2(double y, double x) /* wrapper atan2 */ -#else - double __atan2(y,x) /* wrapper atan2 */ - double y,x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_atan2(y,x); -#else - double z; - z = __ieee754_atan2(y,x); - if(_LIB_VERSION != _SVID_||__isnan(x)||__isnan(y)) return z; - if(x==0.0&&y==0.0) - return __kernel_standard(y,x,3); /* atan2(+-0,+-0) */ - return z; -#endif -} -weak_alias (__atan2, atan2) -#ifdef NO_LONG_DOUBLE -strong_alias (__atan2, __atan2l) -weak_alias (__atan2, atan2l) -#endif diff -durpNa glibc-2.2.2/math/w_atan2f.c glibc-2.2.3/math/w_atan2f.c --- glibc-2.2.2/math/w_atan2f.c Tue Jul 13 16:02:30 1999 +++ glibc-2.2.3/math/w_atan2f.c Wed Dec 31 16:00:00 1969 @@ -1,46 +0,0 @@ -/* w_atan2f.c -- float version of w_atan2.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_atan2f.c,v 1.3 1995/05/10 20:48:42 jtc Exp $"; -#endif - -/* - * wrapper atan2f(y,x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __atan2f(float y, float x) /* wrapper atan2f */ -#else - float __atan2f(y,x) /* wrapper atan2 */ - float y,x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_atan2f(y,x); -#else - float z; - z = __ieee754_atan2f(y,x); - if(_LIB_VERSION != _SVID_||__isnanf(x)||__isnanf(y)) return z; - if(x==0.0&&y==0.0) - return __kernel_standard(y,x,103); /* atan2(+-0,+-0) */ - return z; -#endif -} -weak_alias (__atan2f, atan2f) diff -durpNa glibc-2.2.2/math/w_atan2l.c glibc-2.2.3/math/w_atan2l.c --- glibc-2.2.2/math/w_atan2l.c Tue Jul 13 16:02:34 1999 +++ glibc-2.2.3/math/w_atan2l.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_atan2l.c -- long double version of w_atan2.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper atan2l(y,x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __atan2l(long double y, long double x) /* wrapper atan2l */ -#else - long double __atan2l(y,x) /* wrapper atan2l */ - long double y,x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_atan2l(y,x); -#else - long double z; - z = __ieee754_atan2l(y,x); - if(_LIB_VERSION != _SVID_||__isnanl(x)||__isnanl(y)) return z; - if(x==0.0&&y==0.0) - return __kernel_standard(y,x,203); /* atan2(+-0,+-0) */ - return z; -#endif -} -weak_alias (__atan2l, atan2l) diff -durpNa glibc-2.2.2/math/w_atanh.c glibc-2.2.3/math/w_atanh.c --- glibc-2.2.2/math/w_atanh.c Tue Jul 13 16:02:38 1999 +++ glibc-2.2.3/math/w_atanh.c Wed Dec 31 16:00:00 1969 @@ -1,52 +0,0 @@ -/* @(#)w_atanh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_atanh.c,v 1.6 1995/05/10 20:48:43 jtc Exp $"; -#endif - -/* - * wrapper atanh(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __atanh(double x) /* wrapper atanh */ -#else - double __atanh(x) /* wrapper atanh */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_atanh(x); -#else - double z,y; - z = __ieee754_atanh(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - y = fabs(x); - if(y>=1.0) { - if(y>1.0) - return __kernel_standard(x,x,30); /* atanh(|x|>1) */ - else - return __kernel_standard(x,x,31); /* atanh(|x|==1) */ - } else - return z; -#endif -} -weak_alias (__atanh, atanh) -#ifdef NO_LONG_DOUBLE -strong_alias (__atanh, __atanhl) -weak_alias (__atanh, atanhl) -#endif diff -durpNa glibc-2.2.2/math/w_atanhf.c glibc-2.2.3/math/w_atanhf.c --- glibc-2.2.2/math/w_atanhf.c Tue Jul 13 16:02:42 1999 +++ glibc-2.2.3/math/w_atanhf.c Wed Dec 31 16:00:00 1969 @@ -1,53 +0,0 @@ -/* w_atanhf.c -- float version of w_atanh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_atanhf.c,v 1.3 1995/05/10 20:48:45 jtc Exp $"; -#endif - -/* - * wrapper atanhf(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __atanhf(float x) /* wrapper atanhf */ -#else - float __atanhf(x) /* wrapper atanhf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_atanhf(x); -#else - float z,y; - z = __ieee754_atanhf(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - y = fabsf(x); - if(y>=(float)1.0) { - if(y>(float)1.0) - /* atanhf(|x|>1) */ - return (float)__kernel_standard((double)x,(double)x,130); - else - /* atanhf(|x|==1) */ - return (float)__kernel_standard((double)x,(double)x,131); - } else - return z; -#endif -} -weak_alias (__atanhf, atanhf) diff -durpNa glibc-2.2.2/math/w_atanhl.c glibc-2.2.3/math/w_atanhl.c --- glibc-2.2.2/math/w_atanhl.c Tue Jul 13 16:02:46 1999 +++ glibc-2.2.3/math/w_atanhl.c Wed Dec 31 16:00:00 1969 @@ -1,52 +0,0 @@ -/* w_atanhl.c -- long double version of w_atanh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper atanhl(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __atanhl(long double x) /* wrapper atanhl */ -#else - long double __atanhl(x) /* wrapper atanhl */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_atanhl(x); -#else - long double z,y; - z = __ieee754_atanhl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - y = fabsl(x); - if(y>=1.0) { - if(y>1.0) - return __kernel_standard(x,x,230); /* atanhl(|x|>1) */ - else - return __kernel_standard(x,x,231); /* atanhl(|x|==1) */ - } else - return z; -#endif -} -weak_alias (__atanhl, atanhl) diff -durpNa glibc-2.2.2/math/w_cosh.c glibc-2.2.3/math/w_cosh.c --- glibc-2.2.2/math/w_cosh.c Tue Jul 13 16:02:51 1999 +++ glibc-2.2.3/math/w_cosh.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* @(#)w_cosh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_cosh.c,v 1.6 1995/05/10 20:48:47 jtc Exp $"; -#endif - -/* - * wrapper cosh(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double __cosh(double x) /* wrapper cosh */ -#else - double __cosh(x) /* wrapper cosh */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_cosh(x); -#else - double z; - z = __ieee754_cosh(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - if(fabs(x)>7.10475860073943863426e+02) { - return __kernel_standard(x,x,5); /* cosh overflow */ - } else - return z; -#endif -} -weak_alias (__cosh, cosh) -#ifdef NO_LONG_DOUBLE -strong_alias (__cosh, __coshl) -weak_alias (__cosh, coshl) -#endif diff -durpNa glibc-2.2.2/math/w_coshf.c glibc-2.2.3/math/w_coshf.c --- glibc-2.2.2/math/w_coshf.c Tue Jul 13 16:02:55 1999 +++ glibc-2.2.3/math/w_coshf.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_coshf.c -- float version of w_cosh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_coshf.c,v 1.3 1995/05/10 20:48:49 jtc Exp $"; -#endif - -/* - * wrapper coshf(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float __coshf(float x) /* wrapper coshf */ -#else - float __coshf(x) /* wrapper coshf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_coshf(x); -#else - float z; - z = __ieee754_coshf(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - if(fabsf(x)>(float)8.9415985107e+01) { - /* cosh overflow */ - return (float)__kernel_standard((double)x,(double)x,105); - } else - return z; -#endif -} -weak_alias (__coshf, coshf) diff -durpNa glibc-2.2.2/math/w_coshl.c glibc-2.2.3/math/w_coshl.c --- glibc-2.2.2/math/w_coshl.c Tue Jul 13 16:02:59 1999 +++ glibc-2.2.3/math/w_coshl.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_acoshl.c -- long double version of w_acosh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper coshl(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __coshl(long double x) /* wrapper coshl */ -#else - long double __coshl(x) /* wrapper coshl */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_coshl(x); -#else - long double z; - z = __ieee754_coshl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(fabsl(x)>7.10475860073943863426e+02) { - return __kernel_standard(x,x,205); /* cosh overflow */ - } else - return z; -#endif -} -weak_alias (__coshl, coshl) diff -durpNa glibc-2.2.2/math/w_drem.c glibc-2.2.3/math/w_drem.c --- glibc-2.2.2/math/w_drem.c Tue Jul 13 16:03:02 1999 +++ glibc-2.2.3/math/w_drem.c Wed Dec 31 16:00:00 1969 @@ -1,20 +0,0 @@ -/* - * drem() wrapper for remainder(). - * - * Written by J.T. Conklin, - * Placed into the Public Domain, 1994. - */ - -#include - -double -__drem(x, y) - double x, y; -{ - return __remainder(x, y); -} -weak_alias (__drem, drem) -#ifdef NO_LONG_DOUBLE -strong_alias (__drem, __dreml) -weak_alias (__drem, dreml) -#endif diff -durpNa glibc-2.2.2/math/w_dremf.c glibc-2.2.3/math/w_dremf.c --- glibc-2.2.2/math/w_dremf.c Tue Jul 13 16:03:06 1999 +++ glibc-2.2.3/math/w_dremf.c Wed Dec 31 16:00:00 1969 @@ -1,17 +0,0 @@ -/* - * dremf() wrapper for remainderf(). - * - * Written by J.T. Conklin, - * Placed into the Public Domain, 1994. - */ - -#include "math.h" -#include "math_private.h" - -float -__dremf(x, y) - float x, y; -{ - return __remainderf(x, y); -} -weak_alias (__dremf, dremf) diff -durpNa glibc-2.2.2/math/w_dreml.c glibc-2.2.3/math/w_dreml.c --- glibc-2.2.2/math/w_dreml.c Tue Jul 13 16:03:10 1999 +++ glibc-2.2.3/math/w_dreml.c Wed Dec 31 16:00:00 1969 @@ -1,18 +0,0 @@ -/* - * dreml() wrapper for remainderl(). - * - * Written by J.T. Conklin, - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - * Placed into the Public Domain, 1994. - */ - -#include - -long double -__dreml(x, y) - long double x, y; -{ - return __remainderl(x, y); -} -weak_alias (__dreml, dreml) diff -durpNa glibc-2.2.2/math/w_exp10.c glibc-2.2.3/math/w_exp10.c --- glibc-2.2.2/math/w_exp10.c Tue Jul 13 16:03:15 1999 +++ glibc-2.2.3/math/w_exp10.c Wed Dec 31 16:00:00 1969 @@ -1,61 +0,0 @@ -/* @(#)w_exp10.c - * Conversion to exp10 by Ulrich Drepper . - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * wrapper exp10(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ -static const double -#else -static double -#endif -o_threshold= 3.0825471555991674389672e+02, -u_threshold= -3.2360724533877978485251e+02; - -#ifdef __STDC__ - double __exp10(double x) /* wrapper exp10 */ -#else - double __exp10(x) /* wrapper exp10 */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_exp10(x); -#else - double z; - z = __ieee754_exp10(x); - if(_LIB_VERSION == _IEEE_) return z; - if(__finite(x)) { - if(x>o_threshold) - return __kernel_standard(x,x,46); /* exp10 overflow */ - else if(x. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * wrapper expf10(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ -static const float -#else -static float -#endif -o_threshold= 3.853183944498959298709e+01, -u_threshold= -4.515449934959717928174e+01; - -#ifdef __STDC__ - float __exp10f(float x) /* wrapper exp10f */ -#else - float __exp10f(x) /* wrapper exp10f */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_exp10f(x); -#else - float z; - z = __ieee754_exp10f(x); - if(_LIB_VERSION == _IEEE_) return z; - if(__finitef(x)) { - if(x>o_threshold) - /* exp overflow */ - return (float)__kernel_standard((double)x,(double)x,146); - else if(xo_threshold) - return __kernel_standard(x,x,246); /* exp10 overflow */ - else if(x -#include "math.h" -#include "math_private.h" - -static const double o_threshold= (double) DBL_MAX_EXP; -static const double u_threshold= (double) DBL_MIN_EXP; - -double -__exp2 (double x) /* wrapper exp2 */ -{ -#ifdef _IEEE_LIBM - return __ieee754_exp2 (x); -#else - double z; - z = __ieee754_exp2 (x); - if (_LIB_VERSION != _IEEE_ && __finite (x)) - { - if (x > o_threshold) - /* exp2 overflow */ - return __kernel_standard (x, x, 44); - else if (x < u_threshold) - /* exp2 underflow */ - return __kernel_standard (x, x, 45); - } - return z; -#endif -} -weak_alias (__exp2, exp2) -#ifdef NO_LONG_DOUBLE -strong_alias (__exp2, __expl2) -weak_alias (__exp2, expl2) -#endif diff -durpNa glibc-2.2.2/math/w_exp2f.c glibc-2.2.3/math/w_exp2f.c --- glibc-2.2.2/math/w_exp2f.c Tue Jul 13 16:03:32 1999 +++ glibc-2.2.3/math/w_exp2f.c Wed Dec 31 16:00:00 1969 @@ -1,32 +0,0 @@ -/* - * wrapper exp2f(x) - */ - -#include -#include "math.h" -#include "math_private.h" - -static const float o_threshold= (float) FLT_MAX_EXP; -static const float u_threshold= (float) FLT_MIN_EXP; - -float -__exp2f (float x) /* wrapper exp2f */ -{ -#ifdef _IEEE_LIBM - return __ieee754_exp2f (x); -#else - float z; - z = __ieee754_exp2f (x); - if (_LIB_VERSION != _IEEE_ && __finitef (x)) - { - if (x > o_threshold) - /* exp2 overflow */ - return (float) __kernel_standard ((double) x, (double) x, 144); - else if (x < u_threshold) - /* exp2 underflow */ - return (float) __kernel_standard ((double) x, (double) x, 145); - } - return z; -#endif -} -weak_alias (__exp2f, exp2f) diff -durpNa glibc-2.2.2/math/w_exp2l.c glibc-2.2.3/math/w_exp2l.c --- glibc-2.2.2/math/w_exp2l.c Tue Jul 13 16:03:37 1999 +++ glibc-2.2.3/math/w_exp2l.c Wed Dec 31 16:00:00 1969 @@ -1,30 +0,0 @@ -/* - * wrapper exp2l(x) - */ - -#include -#include "math.h" -#include "math_private.h" - -static const long double o_threshold = (long double) LDBL_MAX_EXP; -static const long double u_threshold = (long double) LDBL_MIN_EXP; - -long double -__exp2l (long double x) /* wrapper exp2l */ -{ -#ifdef _IEEE_LIBM - return __ieee754_exp2l (x); -#else - long double z; - z = __ieee754_exp2l (x); - if (_LIB_VERSION != _IEEE_ && __finitel (x)) - { - if (x > o_threshold) - return __kernel_standard (x, x, 244); /* exp2l overflow */ - else if (x < u_threshold) - return __kernel_standard (x, x, 245); /* exp2l underflow */ - } - return z; -#endif -} -weak_alias (__exp2l, exp2l) diff -durpNa glibc-2.2.2/math/w_fmod.c glibc-2.2.3/math/w_fmod.c --- glibc-2.2.2/math/w_fmod.c Tue Jul 13 16:03:41 1999 +++ glibc-2.2.3/math/w_fmod.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* @(#)w_fmod.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_fmod.c,v 1.6 1995/05/10 20:48:55 jtc Exp $"; -#endif - -/* - * wrapper fmod(x,y) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __fmod(double x, double y) /* wrapper fmod */ -#else - double __fmod(x,y) /* wrapper fmod */ - double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_fmod(x,y); -#else - double z; - z = __ieee754_fmod(x,y); - if(_LIB_VERSION == _IEEE_ ||__isnan(y)||__isnan(x)) return z; - if(y==0.0) { - return __kernel_standard(x,y,27); /* fmod(x,0) */ - } else - return z; -#endif -} -weak_alias (__fmod, fmod) -#ifdef NO_LONG_DOUBLE -strong_alias (__fmod, __fmodl) -weak_alias (__fmod, fmodl) -#endif diff -durpNa glibc-2.2.2/math/w_fmodf.c glibc-2.2.3/math/w_fmodf.c --- glibc-2.2.2/math/w_fmodf.c Tue Jul 13 16:03:45 1999 +++ glibc-2.2.3/math/w_fmodf.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_fmodf.c -- float version of w_fmod.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_fmodf.c,v 1.3 1995/05/10 20:48:57 jtc Exp $"; -#endif - -/* - * wrapper fmodf(x,y) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __fmodf(float x, float y) /* wrapper fmodf */ -#else - float __fmodf(x,y) /* wrapper fmodf */ - float x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_fmodf(x,y); -#else - float z; - z = __ieee754_fmodf(x,y); - if(_LIB_VERSION == _IEEE_ ||__isnanf(y)||__isnanf(x)) return z; - if(y==(float)0.0) { - /* fmodf(x,0) */ - return (float)__kernel_standard((double)x,(double)y,127); - } else - return z; -#endif -} -weak_alias (__fmodf, fmodf) diff -durpNa glibc-2.2.2/math/w_fmodl.c glibc-2.2.3/math/w_fmodl.c --- glibc-2.2.2/math/w_fmodl.c Tue Jul 13 16:03:49 1999 +++ glibc-2.2.3/math/w_fmodl.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_fmodl.c -- long double version of w_fmod.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper fmodl(x,y) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __fmodl(long double x, long double y)/* wrapper fmodl */ -#else - long double __fmodl(x,y) /* wrapper fmodl */ - long double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_fmodl(x,y); -#else - long double z; - z = __ieee754_fmodl(x,y); - if(_LIB_VERSION == _IEEE_ ||__isnanl(y)||__isnanl(x)) return z; - if(y==0.0) { - return __kernel_standard(x,y,227); /* fmod(x,0) */ - } else - return z; -#endif -} -weak_alias (__fmodl, fmodl) diff -durpNa glibc-2.2.2/math/w_hypot.c glibc-2.2.3/math/w_hypot.c --- glibc-2.2.2/math/w_hypot.c Tue Jul 13 16:03:52 1999 +++ glibc-2.2.3/math/w_hypot.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* @(#)w_hypot.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_hypot.c,v 1.6 1995/05/10 20:49:07 jtc Exp $"; -#endif - -/* - * wrapper hypot(x,y) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __hypot(double x, double y)/* wrapper hypot */ -#else - double __hypot(x,y) /* wrapper hypot */ - double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_hypot(x,y); -#else - double z; - z = __ieee754_hypot(x,y); - if(_LIB_VERSION == _IEEE_) return z; - if((!__finite(z))&&__finite(x)&&__finite(y)) - return __kernel_standard(x,y,4); /* hypot overflow */ - else - return z; -#endif -} -weak_alias (__hypot, hypot) -#ifdef NO_LONG_DOUBLE -strong_alias (__hypot, __hypotl) -weak_alias (__hypot, hypotl) -#endif diff -durpNa glibc-2.2.2/math/w_hypotf.c glibc-2.2.3/math/w_hypotf.c --- glibc-2.2.2/math/w_hypotf.c Tue Jul 13 16:03:56 1999 +++ glibc-2.2.3/math/w_hypotf.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_hypotf.c -- float version of w_hypot.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_hypotf.c,v 1.3 1995/05/10 20:49:09 jtc Exp $"; -#endif - -/* - * wrapper hypotf(x,y) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __hypotf(float x, float y) /* wrapper hypotf */ -#else - float __hypotf(x,y) /* wrapper hypotf */ - float x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_hypotf(x,y); -#else - float z; - z = __ieee754_hypotf(x,y); - if(_LIB_VERSION == _IEEE_) return z; - if((!__finitef(z))&&__finitef(x)&&__finitef(y)) - /* hypot overflow */ - return (float)__kernel_standard((double)x,(double)y,104); - else - return z; -#endif -} -weak_alias (__hypotf, hypotf) diff -durpNa glibc-2.2.2/math/w_hypotl.c glibc-2.2.3/math/w_hypotl.c --- glibc-2.2.2/math/w_hypotl.c Tue Jul 13 16:04:01 1999 +++ glibc-2.2.3/math/w_hypotl.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_hypotl.c -- long double version of w_hypot.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper hypotl(x,y) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __hypotl(long double x, long double y)/* wrapper hypotl */ -#else - long double __hypotl(x,y) /* wrapper hypotl */ - long double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_hypotl(x,y); -#else - long double z; - z = __ieee754_hypotl(x,y); - if(_LIB_VERSION == _IEEE_) return z; - if((!__finitel(z))&&__finitel(x)&&__finitel(y)) - return __kernel_standard(x,y,204); /* hypot overflow */ - else - return z; -#endif -} -weak_alias (__hypotl, hypotl) diff -durpNa glibc-2.2.2/math/w_j0.c glibc-2.2.3/math/w_j0.c --- glibc-2.2.2/math/w_j0.c Tue Jul 13 16:04:05 1999 +++ glibc-2.2.3/math/w_j0.c Wed Dec 31 16:00:00 1969 @@ -1,76 +0,0 @@ -/* @(#)w_j0.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_j0.c,v 1.6 1995/05/10 20:49:11 jtc Exp $"; -#endif - -/* - * wrapper j0(double x), y0(double x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double j0(double x) /* wrapper j0 */ -#else - double j0(x) /* wrapper j0 */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_j0(x); -#else - double z = __ieee754_j0(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - if(fabs(x)>X_TLOSS) { - return __kernel_standard(x,x,34); /* j0(|x|>X_TLOSS) */ - } else - return z; -#endif -} -#ifdef NO_LONG_DOUBLE -strong_alias (j0, j0l) -#endif - - -#ifdef __STDC__ - double y0(double x) /* wrapper y0 */ -#else - double y0(x) /* wrapper y0 */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_y0(x); -#else - double z; - z = __ieee754_y0(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; - if(x <= 0.0){ - if(x==0.0) - /* d= -one/(x-x); */ - return __kernel_standard(x,x,8); - else - /* d = zero/(x-x); */ - return __kernel_standard(x,x,9); - } - if(x>X_TLOSS) { - return __kernel_standard(x,x,35); /* y0(x>X_TLOSS) */ - } else - return z; -#endif -} -#ifdef NO_LONG_DOUBLE -strong_alias (y0, y0l) -#endif diff -durpNa glibc-2.2.2/math/w_j0f.c glibc-2.2.3/math/w_j0f.c --- glibc-2.2.2/math/w_j0f.c Tue Jul 13 16:04:08 1999 +++ glibc-2.2.3/math/w_j0f.c Wed Dec 31 16:00:00 1969 @@ -1,74 +0,0 @@ -/* w_j0f.c -- float version of w_j0.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_j0f.c,v 1.3 1995/05/10 20:49:13 jtc Exp $"; -#endif - -/* - * wrapper j0f(float x), y0f(float x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float j0f(float x) /* wrapper j0f */ -#else - float j0f(x) /* wrapper j0f */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_j0f(x); -#else - float z = __ieee754_j0f(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - if(fabsf(x)>(float)X_TLOSS) { - /* j0f(|x|>X_TLOSS) */ - return (float)__kernel_standard((double)x,(double)x,134); - } else - return z; -#endif -} - -#ifdef __STDC__ - float y0f(float x) /* wrapper y0f */ -#else - float y0f(x) /* wrapper y0f */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_y0f(x); -#else - float z; - z = __ieee754_y0f(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; - if(x <= (float)0.0){ - if(x==(float)0.0) - /* d= -one/(x-x); */ - return (float)__kernel_standard((double)x,(double)x,108); - else - /* d = zero/(x-x); */ - return (float)__kernel_standard((double)x,(double)x,109); - } - if(x>(float)X_TLOSS) { - /* y0(x>X_TLOSS) */ - return (float)__kernel_standard((double)x,(double)x,135); - } else - return z; -#endif -} diff -durpNa glibc-2.2.2/math/w_j0l.c glibc-2.2.3/math/w_j0l.c --- glibc-2.2.2/math/w_j0l.c Tue Jul 13 16:04:12 1999 +++ glibc-2.2.3/math/w_j0l.c Wed Dec 31 16:00:00 1969 @@ -1,73 +0,0 @@ -/* w_j0l.c -- long double version of w_j0.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper j0l(long double x), y0l(long double x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double j0l(long double x) /* wrapper j0l */ -#else - long double j0l(x) /* wrapper j0 */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_j0l(x); -#else - long double z = __ieee754_j0l(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(fabsl(x)>X_TLOSS) { - return __kernel_standard(x,x,234); /* j0(|x|>X_TLOSS) */ - } else - return z; -#endif -} - -#ifdef __STDC__ - long double y0l(long double x) /* wrapper y0l */ -#else - long double y0l(x) /* wrapper y0 */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_y0l(x); -#else - long double z; - z = __ieee754_y0l(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; - if(x <= 0.0){ - if(x==0.0) - /* d= -one/(x-x); */ - return __kernel_standard(x,x,208); - else - /* d = zero/(x-x); */ - return __kernel_standard(x,x,209); - } - if(x>X_TLOSS) { - return __kernel_standard(x,x,235); /* y0(x>X_TLOSS) */ - } else - return z; -#endif -} diff -durpNa glibc-2.2.2/math/w_j1.c glibc-2.2.3/math/w_j1.c --- glibc-2.2.2/math/w_j1.c Tue Jul 13 16:04:16 1999 +++ glibc-2.2.3/math/w_j1.c Wed Dec 31 16:00:00 1969 @@ -1,77 +0,0 @@ -/* @(#)w_j1.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_j1.c,v 1.6 1995/05/10 20:49:15 jtc Exp $"; -#endif - -/* - * wrapper of j1,y1 - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double j1(double x) /* wrapper j1 */ -#else - double j1(x) /* wrapper j1 */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_j1(x); -#else - double z; - z = __ieee754_j1(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; - if(fabs(x)>X_TLOSS) { - return __kernel_standard(x,x,36); /* j1(|x|>X_TLOSS) */ - } else - return z; -#endif -} -#ifdef NO_LONG_DOUBLE -strong_alias (j1, j1l) -#endif - - -#ifdef __STDC__ - double y1(double x) /* wrapper y1 */ -#else - double y1(x) /* wrapper y1 */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_y1(x); -#else - double z; - z = __ieee754_y1(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; - if(x <= 0.0){ - if(x==0.0) - /* d= -one/(x-x); */ - return __kernel_standard(x,x,10); - else - /* d = zero/(x-x); */ - return __kernel_standard(x,x,11); - } - if(x>X_TLOSS) { - return __kernel_standard(x,x,37); /* y1(x>X_TLOSS) */ - } else - return z; -#endif -} -#ifdef NO_LONG_DOUBLE -strong_alias (y1, y1l) -#endif diff -durpNa glibc-2.2.2/math/w_j1f.c glibc-2.2.3/math/w_j1f.c --- glibc-2.2.2/math/w_j1f.c Tue Jul 13 16:04:20 1999 +++ glibc-2.2.3/math/w_j1f.c Wed Dec 31 16:00:00 1969 @@ -1,75 +0,0 @@ -/* w_j1f.c -- float version of w_j1.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_j1f.c,v 1.3 1995/05/10 20:49:17 jtc Exp $"; -#endif - -/* - * wrapper of j1f,y1f - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float j1f(float x) /* wrapper j1f */ -#else - float j1f(x) /* wrapper j1f */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_j1f(x); -#else - float z; - z = __ieee754_j1f(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; - if(fabsf(x)>(float)X_TLOSS) { - /* j1(|x|>X_TLOSS) */ - return (float)__kernel_standard((double)x,(double)x,136); - } else - return z; -#endif -} - -#ifdef __STDC__ - float y1f(float x) /* wrapper y1f */ -#else - float y1f(x) /* wrapper y1f */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_y1f(x); -#else - float z; - z = __ieee754_y1f(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; - if(x <= (float)0.0){ - if(x==(float)0.0) - /* d= -one/(x-x); */ - return (float)__kernel_standard((double)x,(double)x,110); - else - /* d = zero/(x-x); */ - return (float)__kernel_standard((double)x,(double)x,111); - } - if(x>(float)X_TLOSS) { - /* y1(x>X_TLOSS) */ - return (float)__kernel_standard((double)x,(double)x,137); - } else - return z; -#endif -} diff -durpNa glibc-2.2.2/math/w_j1l.c glibc-2.2.3/math/w_j1l.c --- glibc-2.2.2/math/w_j1l.c Tue Jul 13 16:04:24 1999 +++ glibc-2.2.3/math/w_j1l.c Wed Dec 31 16:00:00 1969 @@ -1,74 +0,0 @@ -/* w_j1l.c -- long double version of w_j1.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper of j1l,y1l - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double j1l(long double x) /* wrapper j1l */ -#else - long double j1l(x) /* wrapper j1l */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_j1l(x); -#else - long double z; - z = __ieee754_j1l(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; - if(fabsl(x)>X_TLOSS) { - return __kernel_standard(x,x,236); /* j1(|x|>X_TLOSS) */ - } else - return z; -#endif -} - -#ifdef __STDC__ - long double y1l(long double x) /* wrapper y1l */ -#else - long double y1l(x) /* wrapper y1l */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_y1l(x); -#else - long double z; - z = __ieee754_y1l(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; - if(x <= 0.0){ - if(x==0.0) - /* d= -one/(x-x); */ - return __kernel_standard(x,x,210); - else - /* d = zero/(x-x); */ - return __kernel_standard(x,x,211); - } - if(x>X_TLOSS) { - return __kernel_standard(x,x,237); /* y1(x>X_TLOSS) */ - } else - return z; -#endif -} diff -durpNa glibc-2.2.2/math/w_jn.c glibc-2.2.3/math/w_jn.c --- glibc-2.2.2/math/w_jn.c Tue Jul 13 16:04:29 1999 +++ glibc-2.2.3/math/w_jn.c Wed Dec 31 16:00:00 1969 @@ -1,99 +0,0 @@ -/* @(#)w_jn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_jn.c,v 1.6 1995/05/10 20:49:19 jtc Exp $"; -#endif - -/* - * wrapper jn(int n, double x), yn(int n, double x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double jn(int n, double x) /* wrapper jn */ -#else - double jn(n,x) /* wrapper jn */ - double x; int n; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_jn(n,x); -#else - double z; - z = __ieee754_jn(n,x); - if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; - if(fabs(x)>X_TLOSS) { - return __kernel_standard((double)n,x,38); /* jn(|x|>X_TLOSS,n) */ - } else - return z; -#endif -} -#ifdef NO_LONG_DOUBLE -strong_alias (jn, jnl) -#endif - - -#ifdef __STDC__ - double yn(int n, double x) /* wrapper yn */ -#else - double yn(n,x) /* wrapper yn */ - double x; int n; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_yn(n,x); -#else - double z; - z = __ieee754_yn(n,x); - if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; - if(x <= 0.0){ - if(x==0.0) - /* d= -one/(x-x); */ - return __kernel_standard((double)n,x,12); - else - /* d = zero/(x-x); */ - return __kernel_standard((double)n,x,13); - } - if(x>X_TLOSS) { - return __kernel_standard((double)n,x,39); /* yn(x>X_TLOSS,n) */ - } else - return z; -#endif -} -#ifdef NO_LONG_DOUBLE -strong_alias (yn, ynl) -#endif diff -durpNa glibc-2.2.2/math/w_jnf.c glibc-2.2.3/math/w_jnf.c --- glibc-2.2.2/math/w_jnf.c Tue Jul 13 16:04:34 1999 +++ glibc-2.2.3/math/w_jnf.c Wed Dec 31 16:00:00 1969 @@ -1,71 +0,0 @@ -/* w_jnf.c -- float version of w_jn.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_jnf.c,v 1.3 1995/05/10 20:49:21 jtc Exp $"; -#endif - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float jnf(int n, float x) /* wrapper jnf */ -#else - float jnf(n,x) /* wrapper jnf */ - float x; int n; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_jnf(n,x); -#else - float z; - z = __ieee754_jnf(n,x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; - if(fabsf(x)>(float)X_TLOSS) { - /* jn(|x|>X_TLOSS,n) */ - return (float)__kernel_standard((double)n,(double)x,138); - } else - return z; -#endif -} - -#ifdef __STDC__ - float ynf(int n, float x) /* wrapper ynf */ -#else - float ynf(n,x) /* wrapper ynf */ - float x; int n; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_ynf(n,x); -#else - float z; - z = __ieee754_ynf(n,x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; - if(x <= (float)0.0){ - if(x==(float)0.0) - /* d= -one/(x-x); */ - return (float)__kernel_standard((double)n,(double)x,112); - else - /* d = zero/(x-x); */ - return (float)__kernel_standard((double)n,(double)x,113); - } - if(x>(float)X_TLOSS) { - /* yn(x>X_TLOSS,n) */ - return (float)__kernel_standard((double)n,(double)x,139); - } else - return z; -#endif -} diff -durpNa glibc-2.2.2/math/w_jnl.c glibc-2.2.3/math/w_jnl.c --- glibc-2.2.2/math/w_jnl.c Tue Jul 13 16:04:38 1999 +++ glibc-2.2.3/math/w_jnl.c Wed Dec 31 16:00:00 1969 @@ -1,96 +0,0 @@ -/* w_jnl.c -- long double version of w_jn.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper jn(int n, double x), yn(int n, double x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double jnl(int n, long double x) /* wrapper jnl */ -#else - long double jnl(n,x) /* wrapper jnl */ - long double x; int n; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_jnl(n,x); -#else - long double z; - z = __ieee754_jnl(n,x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; - if(fabsl(x)>X_TLOSS) { - return __kernel_standard((double)n,x,238); /* jn(|x|>X_TLOSS,n) */ - } else - return z; -#endif -} - -#ifdef __STDC__ - long double ynl(int n, long double x) /* wrapper ynl */ -#else - long double ynl(n,x) /* wrapper ynl */ - long double x; int n; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_ynl(n,x); -#else - long double z; - z = __ieee754_ynl(n,x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; - if(x <= 0.0){ - if(x==0.0) - /* d= -one/(x-x); */ - return __kernel_standard((double)n,x,212); - else - /* d = zero/(x-x); */ - return __kernel_standard((double)n,x,213); - } - if(x>X_TLOSS) { - return __kernel_standard((double)n,x,239); /* yn(x>X_TLOSS,n) */ - } else - return z; -#endif -} diff -durpNa glibc-2.2.2/math/w_lgamma.c glibc-2.2.3/math/w_lgamma.c --- glibc-2.2.2/math/w_lgamma.c Tue Nov 2 16:06:12 1999 +++ glibc-2.2.3/math/w_lgamma.c Wed Dec 31 16:00:00 1969 @@ -1,60 +0,0 @@ -/* @(#)w_lgamma.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_lgamma.c,v 1.6 1995/05/10 20:49:24 jtc Exp $"; -#endif - -/* double lgamma(double x) - * Return the logarithm of the Gamma function of x. - * - * Method: call __ieee754_lgamma_r - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double __lgamma(double x) -#else - double __lgamma(x) - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_lgamma_r(x,&signgam); -#else - double y; - int local_signgam; - y = __ieee754_lgamma_r(x,&local_signgam); - if (_LIB_VERSION != _ISOC_) - /* ISO C99 does not define the global variable. */ - signgam = local_signgam; - if(_LIB_VERSION == _IEEE_) return y; - if(!__finite(y)&&__finite(x)) { - if(__floor(x)==x&&x<=0.0) - return __kernel_standard(x,x,15); /* lgamma pole */ - else - return __kernel_standard(x,x,14); /* lgamma overflow */ - } else - return y; -#endif -} -weak_alias (__lgamma, lgamma) -strong_alias (__lgamma, __gamma) -weak_alias (__gamma, gamma) -#ifdef NO_LONG_DOUBLE -strong_alias (__lgamma, __lgammal) -weak_alias (__lgamma, lgammal) -strong_alias (__gamma, __gammal) -weak_alias (__gamma, gammal) -#endif diff -durpNa glibc-2.2.2/math/w_lgamma_r.c glibc-2.2.3/math/w_lgamma_r.c --- glibc-2.2.2/math/w_lgamma_r.c Tue Jul 13 16:04:45 1999 +++ glibc-2.2.3/math/w_lgamma_r.c Wed Dec 31 16:00:00 1969 @@ -1,51 +0,0 @@ -/* @(#)wr_lgamma.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_lgamma_r.c,v 1.6 1995/05/10 20:49:27 jtc Exp $"; -#endif - -/* - * wrapper double lgamma_r(double x, int *signgamp) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __lgamma_r(double x, int *signgamp) /* wrapper lgamma_r */ -#else - double __lgamma_r(x,signgamp) /* wrapper lgamma_r */ - double x; int *signgamp; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_lgamma_r(x,signgamp); -#else - double y; - y = __ieee754_lgamma_r(x,signgamp); - if(_LIB_VERSION == _IEEE_) return y; - if(!__finite(y)&&__finite(x)) { - if(__floor(x)==x&&x<=0.0) - return __kernel_standard(x,x,15); /* lgamma pole */ - else - return __kernel_standard(x,x,14); /* lgamma overflow */ - } else - return y; -#endif -} -weak_alias (__lgamma_r, lgamma_r) -#ifdef NO_LONG_DOUBLE -strong_alias (__lgamma_r, __lgammal_r) -weak_alias (__lgamma_r, lgammal_r) -#endif diff -durpNa glibc-2.2.2/math/w_lgammaf.c glibc-2.2.3/math/w_lgammaf.c --- glibc-2.2.2/math/w_lgammaf.c Tue Nov 2 16:06:12 1999 +++ glibc-2.2.3/math/w_lgammaf.c Wed Dec 31 16:00:00 1969 @@ -1,53 +0,0 @@ -/* w_lgammaf.c -- float version of w_lgamma.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_lgammaf.c,v 1.3 1995/05/10 20:49:30 jtc Exp $"; -#endif - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float __lgammaf(float x) -#else - float __lgammaf(x) - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_lgammaf_r(x,&signgam); -#else - float y; - int local_signgam; - y = __ieee754_lgammaf_r(x,&local_signgam); - if (_LIB_VERSION != _ISOC_) - /* ISO C99 does not define the global variable. */ - signgam = local_signgam; - if(_LIB_VERSION == _IEEE_) return y; - if(!__finitef(y)&&__finitef(x)) { - if(__floorf(x)==x&&x<=(float)0.0) - /* lgamma pole */ - return (float)__kernel_standard((double)x,(double)x,115); - else - /* lgamma overflow */ - return (float)__kernel_standard((double)x,(double)x,114); - } else - return y; -#endif -} -weak_alias (__lgammaf, lgammaf) -strong_alias (__lgammaf, __gammaf) -weak_alias (__gammaf, gammaf) diff -durpNa glibc-2.2.2/math/w_lgammaf_r.c glibc-2.2.3/math/w_lgammaf_r.c --- glibc-2.2.2/math/w_lgammaf_r.c Tue Jul 13 16:04:54 1999 +++ glibc-2.2.3/math/w_lgammaf_r.c Wed Dec 31 16:00:00 1969 @@ -1,52 +0,0 @@ -/* w_lgammaf_r.c -- float version of w_lgamma_r.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_lgammaf_r.c,v 1.3 1995/05/10 20:49:32 jtc Exp $"; -#endif - -/* - * wrapper float lgammaf_r(float x, int *signgamp) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __lgammaf_r(float x, int *signgamp) /* wrapper lgammaf_r */ -#else - float __lgammaf_r(x,signgamp) /* wrapper lgammaf_r */ - float x; int *signgamp; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_lgammaf_r(x,signgamp); -#else - float y; - y = __ieee754_lgammaf_r(x,signgamp); - if(_LIB_VERSION == _IEEE_) return y; - if(!__finitef(y)&&__finitef(x)) { - if(__floorf(x)==x&&x<=(float)0.0) - /* lgamma pole */ - return (float)__kernel_standard((double)x,(double)x,115); - else - /* lgamma overflow */ - return (float)__kernel_standard((double)x,(double)x,114); - } else - return y; -#endif -} -weak_alias (__lgammaf_r, lgammaf_r) diff -durpNa glibc-2.2.2/math/w_lgammal.c glibc-2.2.3/math/w_lgammal.c --- glibc-2.2.2/math/w_lgammal.c Tue Nov 2 16:06:12 1999 +++ glibc-2.2.3/math/w_lgammal.c Wed Dec 31 16:00:00 1969 @@ -1,58 +0,0 @@ -/* w_lgammal.c -- long double version of w_lgamma.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* long double lgammal(long double x) - * Return the logarithm of the Gamma function of x. - * - * Method: call __ieee754_lgammal_r - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __lgammal(long double x) -#else - long double __lgammal(x) - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_lgammal_r(x,&signgam); -#else - long double y; - int local_signgam; - y = __ieee754_lgammal_r(x,&local_signgam); - if (_LIB_VERSION != _ISOC_) - /* ISO C99 does not define the global variable. */ - signgam = local_signgam; - if(_LIB_VERSION == _IEEE_) return y; - if(!__finitel(y)&&__finitel(x)) { - if(__floorl(x)==x&&x<=0.0) - return __kernel_standard(x,x,215); /* lgamma pole */ - else - return __kernel_standard(x,x,214); /* lgamma overflow */ - } else - return y; -#endif -} -weak_alias (__lgammal, lgammal) -strong_alias (__lgammal, __gammal) -weak_alias (__gammal, gammal) diff -durpNa glibc-2.2.2/math/w_lgammal_r.c glibc-2.2.3/math/w_lgammal_r.c --- glibc-2.2.2/math/w_lgammal_r.c Tue Jul 13 16:05:03 1999 +++ glibc-2.2.3/math/w_lgammal_r.c Wed Dec 31 16:00:00 1969 @@ -1,52 +0,0 @@ -/* w_lgammal_r.c -- long double version of w_lgamma_r.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper long double lgammal_r(long double x, int *signgamp) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __lgammal_r(long double x, int *signgamp) - /* wrapper lgamma_r */ -#else - long double __lgammal_r(x,signgamp) /* wrapper lgamma_r */ - long double x; int *signgamp; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_lgammal_r(x,signgamp); -#else - long double y; - y = __ieee754_lgammal_r(x,signgamp); - if(_LIB_VERSION == _IEEE_) return y; - if(!__finitel(y)&&__finitel(x)) { - if(__floorl(x)==x&&x<=0.0) - return __kernel_standard(x,x,215); /* lgamma pole */ - else - return __kernel_standard(x,x,214); /* lgamma overflow */ - } else - return y; -#endif -} -weak_alias (__lgammal_r, lgammal_r) diff -durpNa glibc-2.2.2/math/w_log.c glibc-2.2.3/math/w_log.c --- glibc-2.2.2/math/w_log.c Tue Jul 13 16:05:06 1999 +++ glibc-2.2.3/math/w_log.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* @(#)w_log.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_log.c,v 1.6 1995/05/10 20:49:33 jtc Exp $"; -#endif - -/* - * wrapper log(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __log(double x) /* wrapper log */ -#else - double __log(x) /* wrapper log */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_log(x); -#else - double z; - z = __ieee754_log(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x) || x > 0.0) return z; - if(x==0.0) - return __kernel_standard(x,x,16); /* log(0) */ - else - return __kernel_standard(x,x,17); /* log(x<0) */ -#endif -} -weak_alias (__log, log) -#ifdef NO_LONG_DOUBLE -strong_alias (__log, __logl) -weak_alias (__log, logl) -#endif diff -durpNa glibc-2.2.2/math/w_log10.c glibc-2.2.3/math/w_log10.c --- glibc-2.2.2/math/w_log10.c Tue Jul 13 16:05:10 1999 +++ glibc-2.2.3/math/w_log10.c Wed Dec 31 16:00:00 1969 @@ -1,51 +0,0 @@ -/* @(#)w_log10.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_log10.c,v 1.6 1995/05/10 20:49:35 jtc Exp $"; -#endif - -/* - * wrapper log10(X) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __log10(double x) /* wrapper log10 */ -#else - double __log10(x) /* wrapper log10 */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_log10(x); -#else - double z; - z = __ieee754_log10(x); - if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; - if(x<=0.0) { - if(x==0.0) - return __kernel_standard(x,x,18); /* log10(0) */ - else - return __kernel_standard(x,x,19); /* log10(x<0) */ - } else - return z; -#endif -} -weak_alias (__log10, log10) -#ifdef NO_LONG_DOUBLE -strong_alias (__log10, __log10l) -weak_alias (__log10, log10l) -#endif diff -durpNa glibc-2.2.2/math/w_log10f.c glibc-2.2.3/math/w_log10f.c --- glibc-2.2.2/math/w_log10f.c Tue Jul 13 16:05:15 1999 +++ glibc-2.2.3/math/w_log10f.c Wed Dec 31 16:00:00 1969 @@ -1,52 +0,0 @@ -/* w_log10f.c -- float version of w_log10.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_log10f.c,v 1.3 1995/05/10 20:49:37 jtc Exp $"; -#endif - -/* - * wrapper log10f(X) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __log10f(float x) /* wrapper log10f */ -#else - float __log10f(x) /* wrapper log10f */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_log10f(x); -#else - float z; - z = __ieee754_log10f(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; - if(x<=(float)0.0) { - if(x==(float)0.0) - /* log10(0) */ - return (float)__kernel_standard((double)x,(double)x,118); - else - /* log10(x<0) */ - return (float)__kernel_standard((double)x,(double)x,119); - } else - return z; -#endif -} -weak_alias (__log10f, log10f) diff -durpNa glibc-2.2.2/math/w_log10l.c glibc-2.2.3/math/w_log10l.c --- glibc-2.2.2/math/w_log10l.c Tue Jul 13 16:05:20 1999 +++ glibc-2.2.3/math/w_log10l.c Wed Dec 31 16:00:00 1969 @@ -1,51 +0,0 @@ -/* w_log10l.c -- long double version of w_log10.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper log10l(X) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __log10l(long double x) /* wrapper log10l */ -#else - long double __log10l(x) /* wrapper log10l */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_log10l(x); -#else - long double z; - z = __ieee754_log10l(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(x<=0.0) { - if(x==0.0) - return __kernel_standard(x,x,218); /* log10(0) */ - else - return __kernel_standard(x,x,219); /* log10(x<0) */ - } else - return z; -#endif -} -weak_alias (__log10l, log10l) diff -durpNa glibc-2.2.2/math/w_logf.c glibc-2.2.3/math/w_logf.c --- glibc-2.2.2/math/w_logf.c Tue Jul 13 16:05:28 1999 +++ glibc-2.2.3/math/w_logf.c Wed Dec 31 16:00:00 1969 @@ -1,49 +0,0 @@ -/* w_logf.c -- float version of w_log.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_logf.c,v 1.3 1995/05/10 20:49:40 jtc Exp $"; -#endif - -/* - * wrapper logf(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __logf(float x) /* wrapper logf */ -#else - float __logf(x) /* wrapper logf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_logf(x); -#else - float z; - z = __ieee754_logf(x); - if(_LIB_VERSION == _IEEE_ || __isnanf(x) || x > (float)0.0) return z; - if(x==(float)0.0) - /* logf(0) */ - return (float)__kernel_standard((double)x,(double)x,116); - else - /* logf(x<0) */ - return (float)__kernel_standard((double)x,(double)x,117); -#endif -} -weak_alias (__logf, logf) diff -durpNa glibc-2.2.2/math/w_logl.c glibc-2.2.3/math/w_logl.c --- glibc-2.2.2/math/w_logl.c Tue Jul 13 16:05:33 1999 +++ glibc-2.2.3/math/w_logl.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_logl.c -- long double version of w_log.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper logl(x) - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __logl(long double x) /* wrapper logl */ -#else - long double __logl(x) /* wrapper logl */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_logl(x); -#else - long double z; - z = __ieee754_logl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x) || x > 0.0) return z; - if(x==0.0) - return __kernel_standard(x,x,216); /* log(0) */ - else - return __kernel_standard(x,x,217); /* log(x<0) */ -#endif -} -weak_alias (__logl, logl) diff -durpNa glibc-2.2.2/math/w_pow.c glibc-2.2.3/math/w_pow.c --- glibc-2.2.2/math/w_pow.c Tue Jul 13 16:05:37 1999 +++ glibc-2.2.3/math/w_pow.c Wed Dec 31 16:00:00 1969 @@ -1,70 +0,0 @@ - - -/* @(#)w_pow.c 5.2 93/10/01 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * wrapper pow(x,y) return x**y - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - double __pow(double x, double y) /* wrapper pow */ -#else - double __pow(x,y) /* wrapper pow */ - double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_pow(x,y); -#else - double z; - z=__ieee754_pow(x,y); - if(_LIB_VERSION == _IEEE_|| __isnan(y)) return z; - if(__isnan(x)) { - if(y==0.0) - return __kernel_standard(x,y,42); /* pow(NaN,0.0) */ - else - return z; - } - if(x==0.0) { - if(y==0.0) - return __kernel_standard(x,y,20); /* pow(0.0,0.0) */ - if(__finite(y)&&y<0.0) { - if (signbit (x) && signbit (z)) - return __kernel_standard(x,y,23); /* pow(-0.0,negative) */ - else - return __kernel_standard(x,y,43); /* pow(+0.0,negative) */ - } - return z; - } - if(!__finite(z)) { - if(__finite(x)&&__finite(y)) { - if(__isnan(z)) - return __kernel_standard(x,y,24); /* pow neg**non-int */ - else - return __kernel_standard(x,y,21); /* pow overflow */ - } - } - if(z==0.0&&__finite(x)&&__finite(y)) - return __kernel_standard(x,y,22); /* pow underflow */ - return z; -#endif -} -weak_alias (__pow, pow) -#ifdef NO_LONG_DOUBLE -strong_alias (__pow, __powl) -weak_alias (__pow, powl) -#endif diff -durpNa glibc-2.2.2/math/w_powf.c glibc-2.2.3/math/w_powf.c --- glibc-2.2.2/math/w_powf.c Tue Jul 13 16:05:42 1999 +++ glibc-2.2.3/math/w_powf.c Wed Dec 31 16:00:00 1969 @@ -1,77 +0,0 @@ -/* w_powf.c -- float version of w_pow.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $"; -#endif - -/* - * wrapper powf(x,y) return x**y - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - float __powf(float x, float y) /* wrapper powf */ -#else - float __powf(x,y) /* wrapper powf */ - float x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_powf(x,y); -#else - float z; - z=__ieee754_powf(x,y); - if(_LIB_VERSION == _IEEE_|| __isnanf(y)) return z; - if(__isnanf(x)) { - if(y==(float)0.0) - /* powf(NaN,0.0) */ - return (float)__kernel_standard((double)x,(double)y,142); - else - return z; - } - if(x==(float)0.0) { - if(y==(float)0.0) - /* powf(0.0,0.0) */ - return (float)__kernel_standard((double)x,(double)y,120); - if(__finitef(y)&&y<(float)0.0) { - if (signbit (x) && signbit (z)) - /* powf(0.0,negative) */ - return (float)__kernel_standard((double)x,(double)y,123); - else - return (float)__kernel_standard((double)x,(double)y,143); - } - return z; - } - if(!__finitef(z)) { - if(__finitef(x)&&__finitef(y)) { - if(__isnanf(z)) - /* powf neg**non-int */ - return (float)__kernel_standard((double)x,(double)y,124); - else - /* powf overflow */ - return (float)__kernel_standard((double)x,(double)y,121); - } - } - if(z==(float)0.0&&__finitef(x)&&__finitef(y)) - /* powf underflow */ - return (float)__kernel_standard((double)x,(double)y,122); - return z; -#endif -} -weak_alias (__powf, powf) diff -durpNa glibc-2.2.2/math/w_powl.c glibc-2.2.3/math/w_powl.c --- glibc-2.2.2/math/w_powl.c Tue Jul 13 16:05:46 1999 +++ glibc-2.2.3/math/w_powl.c Wed Dec 31 16:00:00 1969 @@ -1,68 +0,0 @@ -/* w_powl.c -- long double version of w_pow.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * wrapper powl(x,y) return x**y - */ - -#include "math.h" -#include "math_private.h" - - -#ifdef __STDC__ - long double __powl(long double x, long double y)/* wrapper powl */ -#else - long double __powl(x,y) /* wrapper powl */ - long double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_powl(x,y); -#else - long double z; - z=__ieee754_powl(x,y); - if(_LIB_VERSION == _IEEE_|| __isnanl(y)) return z; - if(__isnanl(x)) { - if(y==0.0) - return __kernel_standard(x,y,242); /* pow(NaN,0.0) */ - else - return z; - } - if(x==0.0) { - if(y==0.0) - return __kernel_standard(x,y,220); /* pow(0.0,0.0) */ - if(__finitel(y)&&y<0.0) { - if (signbit (x) && signbit (z)) - return __kernel_standard(x,y,223); /* pow(-0.0,negative) */ - else - return __kernel_standard(x,y,243); /* pow(+0.0,negative) */ - } - return z; - } - if(!__finitel(z)) { - if(__finitel(x)&&__finitel(y)) { - if(__isnanl(z)) - return __kernel_standard(x,y,224); /* pow neg**non-int */ - else - return __kernel_standard(x,y,221); /* pow overflow */ - } - } - if(z==0.0&&__finitel(x)&&__finitel(y)) - return __kernel_standard(x,y,222); /* pow underflow */ - return z; -#endif -} -weak_alias (__powl, powl) diff -durpNa glibc-2.2.2/math/w_remainder.c glibc-2.2.3/math/w_remainder.c --- glibc-2.2.2/math/w_remainder.c Tue Jul 13 16:05:50 1999 +++ glibc-2.2.3/math/w_remainder.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* @(#)w_remainder.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_remainder.c,v 1.6 1995/05/10 20:49:44 jtc Exp $"; -#endif - -/* - * wrapper remainder(x,p) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double __remainder(double x, double y) /* wrapper remainder */ -#else - double __remainder(x,y) /* wrapper remainder */ - double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_remainder(x,y); -#else - double z; - z = __ieee754_remainder(x,y); - if(_LIB_VERSION == _IEEE_ || __isnan(y)) return z; - if(y==0.0) - return __kernel_standard(x,y,28); /* remainder(x,0) */ - else - return z; -#endif -} -weak_alias (__remainder, remainder) -#ifdef NO_LONG_DOUBLE -strong_alias (__remainder, __remainderl) -weak_alias (__remainder, remainderl) -#endif diff -durpNa glibc-2.2.2/math/w_remainderf.c glibc-2.2.3/math/w_remainderf.c --- glibc-2.2.2/math/w_remainderf.c Tue Jul 13 16:05:54 1999 +++ glibc-2.2.3/math/w_remainderf.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_remainderf.c -- float version of w_remainder.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_remainderf.c,v 1.3 1995/05/10 20:49:46 jtc Exp $"; -#endif - -/* - * wrapper remainderf(x,p) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float __remainderf(float x, float y) /* wrapper remainder */ -#else - float __remainderf(x,y) /* wrapper remainder */ - float x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_remainderf(x,y); -#else - float z; - z = __ieee754_remainderf(x,y); - if(_LIB_VERSION == _IEEE_ || __isnanf(y)) return z; - if(y==(float)0.0) - /* remainder(x,0) */ - return (float)__kernel_standard((double)x,(double)y,128); - else - return z; -#endif -} -weak_alias (__remainderf, remainderf) diff -durpNa glibc-2.2.2/math/w_remainderl.c glibc-2.2.3/math/w_remainderl.c --- glibc-2.2.2/math/w_remainderl.c Tue Jul 13 16:06:00 1999 +++ glibc-2.2.3/math/w_remainderl.c Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* w_remainderl.c -- long double version of w_remainder.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper remainderl(x,p) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __remainderl(long double x, long double y) - /* wrapper remainderl */ -#else - long double __remainderl(x,y) /* wrapper remainder */ - long double x,y; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_remainderl(x,y); -#else - long double z; - z = __ieee754_remainderl(x,y); - if(_LIB_VERSION == _IEEE_ || __isnanl(y)) return z; - if(y==0.0) - return __kernel_standard(x,y,228); /* remainder(x,0) */ - else - return z; -#endif -} -weak_alias (__remainderl, remainderl) diff -durpNa glibc-2.2.2/math/w_scalb.c glibc-2.2.3/math/w_scalb.c --- glibc-2.2.2/math/w_scalb.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/math/w_scalb.c Wed Dec 31 16:00:00 1969 @@ -1,65 +0,0 @@ -/* @(#)w_scalb.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_scalb.c,v 1.6 1995/05/10 20:49:48 jtc Exp $"; -#endif - -/* - * wrapper scalb(double x, double fn) is provide for - * passing various standard test suite. One - * should use scalbn() instead. - */ - -#include "math.h" -#include "math_private.h" - -#include - -#ifdef __STDC__ -#ifdef _SCALB_INT - double __scalb(double x, int fn) /* wrapper scalb */ -#else - double __scalb(double x, double fn) /* wrapper scalb */ -#endif -#else - double __scalb(x,fn) /* wrapper scalb */ -#ifdef _SCALB_INT - double x; int fn; -#else - double x,fn; -#endif -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_scalb(x,fn); -#else - double z; - z = __ieee754_scalb(x,fn); - if(_LIB_VERSION != _SVID_) return z; - if(!(__finite(z)||__isnan(z))&&__finite(x)) { - return __kernel_standard(x,(double)fn,32); /* scalb overflow */ - } - if(z==0.0&&z!=x) { - return __kernel_standard(x,(double)fn,33); /* scalb underflow */ - } -#ifndef _SCALB_INT - if(!__finite(fn)) __set_errno (ERANGE); -#endif - return z; -#endif -} -weak_alias (__scalb, scalb) -#ifdef NO_LONG_DOUBLE -strong_alias (__scalb, __scalbl) -weak_alias (__scalb, scalbl) -#endif diff -durpNa glibc-2.2.2/math/w_scalbf.c glibc-2.2.3/math/w_scalbf.c --- glibc-2.2.2/math/w_scalbf.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/math/w_scalbf.c Wed Dec 31 16:00:00 1969 @@ -1,66 +0,0 @@ -/* w_scalbf.c -- float version of w_scalb.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_scalbf.c,v 1.3 1995/05/10 20:49:50 jtc Exp $"; -#endif - -/* - * wrapper scalbf(float x, float fn) is provide for - * passing various standard test suite. One - * should use scalbn() instead. - */ - -#include "math.h" -#include "math_private.h" - -#include - -#ifdef __STDC__ -#ifdef _SCALB_INT - float __scalbf(float x, int fn) /* wrapper scalbf */ -#else - float __scalbf(float x, float fn) /* wrapper scalbf */ -#endif -#else - float __scalbf(x,fn) /* wrapper scalbf */ -#ifdef _SCALB_INT - float x; int fn; -#else - float x,fn; -#endif -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_scalbf(x,fn); -#else - float z; - z = __ieee754_scalbf(x,fn); - if(_LIB_VERSION != _SVID_) return z; - if(!(__finitef(z)||__isnanf(z))&&__finitef(x)) { - /* scalbf overflow */ - return (float)__kernel_standard((double)x,(double)fn,132); - } - if(z==(float)0.0&&z!=x) { - /* scalbf underflow */ - return (float)__kernel_standard((double)x,(double)fn,133); - } -#ifndef _SCALB_INT - if(!__finitef(fn)) __set_errno (ERANGE); -#endif - return z; -#endif -} -weak_alias (__scalbf, scalbf) diff -durpNa glibc-2.2.2/math/w_scalbl.c glibc-2.2.3/math/w_scalbl.c --- glibc-2.2.2/math/w_scalbl.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/math/w_scalbl.c Wed Dec 31 16:00:00 1969 @@ -1,65 +0,0 @@ -/* w_scalbl.c -- long double version of w_scalb.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper scalbl(long double x, long double fn) is provide for - * passing various standard test suite. One - * should use scalbnl() instead. - */ - -#include "math.h" -#include "math_private.h" - -#include - -#ifdef __STDC__ -#ifdef _SCALB_INT - long double __scalbl(long double x, int fn) /* wrapper scalbl */ -#else - long double __scalbl(long double x, long double fn)/* wrapper scalbl */ -#endif -#else - long double __scalbl(x,fn) /* wrapper scalbl */ -#ifdef _SCALB_INT - long double x; int fn; -#else - long double x,fn; -#endif -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_scalbl(x,fn); -#else - long double z; - z = __ieee754_scalbl(x,fn); - if(_LIB_VERSION != _SVID_) return z; - if(!(__finitel(z)||__isnanl(z))&&__finitel(x)) { - return __kernel_standard(x,(double)fn,232); /* scalb overflow */ - } - if(z==0.0&&z!=x) { - return __kernel_standard(x,(double)fn,233); /* scalb underflow */ - } -#ifndef _SCALB_INT - if(!__finitel(fn)) __set_errno (ERANGE); -#endif - return z; -#endif -} -weak_alias (__scalbl, scalbl) diff -durpNa glibc-2.2.2/math/w_sinh.c glibc-2.2.3/math/w_sinh.c --- glibc-2.2.2/math/w_sinh.c Tue Jul 13 16:06:22 1999 +++ glibc-2.2.3/math/w_sinh.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* @(#)w_sinh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_sinh.c,v 1.6 1995/05/10 20:49:51 jtc Exp $"; -#endif - -/* - * wrapper sinh(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double __sinh(double x) /* wrapper sinh */ -#else - double __sinh(x) /* wrapper sinh */ - double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_sinh(x); -#else - double z; - z = __ieee754_sinh(x); - if(_LIB_VERSION == _IEEE_) return z; - if(!__finite(z)&&__finite(x)) { - return __kernel_standard(x,x,25); /* sinh overflow */ - } else - return z; -#endif -} -weak_alias (__sinh, sinh) -#ifdef NO_LONG_DOUBLE -strong_alias (__sinh, __sinhl) -weak_alias (__sinh, sinhl) -#endif diff -durpNa glibc-2.2.2/math/w_sinhf.c glibc-2.2.3/math/w_sinhf.c --- glibc-2.2.2/math/w_sinhf.c Tue Jul 13 16:06:29 1999 +++ glibc-2.2.3/math/w_sinhf.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_sinhf.c -- float version of w_sinh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_sinhf.c,v 1.3 1995/05/10 20:49:54 jtc Exp $"; -#endif - -/* - * wrapper sinhf(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float __sinhf(float x) /* wrapper sinhf */ -#else - float __sinhf(x) /* wrapper sinhf */ - float x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_sinhf(x); -#else - float z; - z = __ieee754_sinhf(x); - if(_LIB_VERSION == _IEEE_) return z; - if(!__finitef(z)&&__finitef(x)) { - /* sinhf overflow */ - return (float)__kernel_standard((double)x,(double)x,125); - } else - return z; -#endif -} -weak_alias (__sinhf, sinhf) diff -durpNa glibc-2.2.2/math/w_sinhl.c glibc-2.2.3/math/w_sinhl.c --- glibc-2.2.2/math/w_sinhl.c Tue Jul 13 16:06:35 1999 +++ glibc-2.2.3/math/w_sinhl.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_sinhl.c -- long double version of w_sinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper sinhl(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __sinhl(long double x) /* wrapper sinhl */ -#else - long double __sinhl(x) /* wrapper sinhl */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_sinhl(x); -#else - long double z; - z = __ieee754_sinhl(x); - if(_LIB_VERSION == _IEEE_) return z; - if(!__finitel(z)&&__finitel(x)) { - return __kernel_standard(x,x,225); /* sinh overflow */ - } else - return z; -#endif -} -weak_alias (__sinhl, sinhl) diff -durpNa glibc-2.2.2/math/w_sqrtl.c glibc-2.2.3/math/w_sqrtl.c --- glibc-2.2.2/math/w_sqrtl.c Tue Jul 13 16:06:49 1999 +++ glibc-2.2.3/math/w_sqrtl.c Wed Dec 31 16:00:00 1969 @@ -1,47 +0,0 @@ -/* w_sqrtl.c -- long double version of w_sqrt.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper sqrtl(x) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __sqrtl(long double x) /* wrapper sqrtl */ -#else - long double __sqrtl(x) /* wrapper sqrtl */ - long double x; -#endif -{ -#ifdef _IEEE_LIBM - return __ieee754_sqrtl(x); -#else - long double z; - z = __ieee754_sqrtl(x); - if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; - if(x<0.0) { - return __kernel_standard(x,x,226); /* sqrt(negative) */ - } else - return z; -#endif -} -weak_alias (__sqrtl, sqrtl) diff -durpNa glibc-2.2.2/math/w_tgamma.c glibc-2.2.3/math/w_tgamma.c --- glibc-2.2.2/math/w_tgamma.c Tue Jul 13 16:06:53 1999 +++ glibc-2.2.3/math/w_tgamma.c Wed Dec 31 16:00:00 1969 @@ -1,54 +0,0 @@ -/* @(#)w_gamma.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $"; -#endif - -/* double gamma(double x) - * Return the logarithm of the Gamma function of x or the Gamma function of x, - * depending on the library mode. - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - double __tgamma(double x) -#else - double __tgamma(x) - double x; -#endif -{ - double y; - int local_signgam; - y = __ieee754_gamma_r(x,&local_signgam); - if (local_signgam < 0) y = -y; -#ifdef _IEEE_LIBM - return y; -#else - if(_LIB_VERSION == _IEEE_) return y; - - if(!__finite(y)&&__finite(x)) { - if(__floor(x)==x&&x<=0.0) - return __kernel_standard(x,x,41); /* tgamma pole */ - else - return __kernel_standard(x,x,40); /* tgamma overflow */ - } - return y; -#endif -} -weak_alias (__tgamma, tgamma) -#ifdef NO_LONG_DOUBLE -strong_alias (__tgamma, __tgammal) -weak_alias (__tgamma, tgammal) -#endif diff -durpNa glibc-2.2.2/math/w_tgammaf.c glibc-2.2.3/math/w_tgammaf.c --- glibc-2.2.2/math/w_tgammaf.c Tue Jul 13 16:06:57 1999 +++ glibc-2.2.3/math/w_tgammaf.c Wed Dec 31 16:00:00 1969 @@ -1,50 +0,0 @@ -/* w_gammaf.c -- float version of w_gamma.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: w_gammaf.c,v 1.4 1995/11/20 22:06:48 jtc Exp $"; -#endif - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - float __tgammaf(float x) -#else - float __tgammaf(x) - float x; -#endif -{ - float y; - int local_signgam; - y = __ieee754_gammaf_r(x,&local_signgam); - if (local_signgam < 0) y = -y; -#ifdef _IEEE_LIBM - return y; -#else - if(_LIB_VERSION == _IEEE_) return y; - - if(!__finitef(y)&&__finitef(x)) { - if(__floorf(x)==x&&x<=(float)0.0) - /* tgammaf pole */ - return (float)__kernel_standard((double)x,(double)x,141); - else - /* tgammaf overflow */ - return (float)__kernel_standard((double)x,(double)x,140); - } - return y; -#endif -} -weak_alias (__tgammaf, tgammaf) diff -durpNa glibc-2.2.2/math/w_tgammal.c glibc-2.2.3/math/w_tgammal.c --- glibc-2.2.2/math/w_tgammal.c Tue Jul 13 16:07:01 1999 +++ glibc-2.2.3/math/w_tgammal.c Wed Dec 31 16:00:00 1969 @@ -1,53 +0,0 @@ -/* w_gammal.c -- long double version of w_gamma.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* long double gammal(double x) - * Return the Gamma function of x. - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ - long double __tgammal(long double x) -#else - long double __tgammal(x) - long double x; -#endif -{ - long double y; - int local_signgam; - y = __ieee754_gammal_r(x,&local_signgam); - if (local_signgam < 0) y = -y; -#ifdef _IEEE_LIBM - return y; -#else - if(_LIB_VERSION == _IEEE_) return y; - - if(!__finitel(y)&&__finitel(x)) { - if(__floorl(x)==x&&x<=0.0) - return __kernel_standard(x,x,241); /* tgamma pole */ - else - return __kernel_standard(x,x,240); /* tgamma overflow */ - } - return y; -#endif -} -weak_alias (__tgammal, tgammal) diff -durpNa glibc-2.2.2/misc/Makefile glibc-2.2.3/misc/Makefile --- glibc-2.2.2/misc/Makefile Thu Nov 2 16:50:12 2000 +++ glibc-2.2.3/misc/Makefile Wed Apr 25 14:51:01 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1991-1999,2000,01 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 @@ -52,7 +52,8 @@ routines := brk sbrk sstk ioctl \ chflags fchflags \ insremque getttyent getusershell getpass ttyslot \ syslog syscall daemon \ - mmap munmap mprotect msync madvise mmap64 mincore \ + mmap mmap64 munmap mprotect msync madvise mincore \ + mlock munlock mlockall munlockall \ efgcvt efgcvt_r qefgcvt qefgcvt_r \ hsearch hsearch_r tsearch lsearch \ err error ustat \ diff -durpNa glibc-2.2.2/misc/dirname.c glibc-2.2.3/misc/dirname.c --- glibc-2.2.2/misc/dirname.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/misc/dirname.c Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* dirname - return directory part of PATH. - Copyright (C) 1996, 2000 Free Software Foundation, Inc. + Copyright (C) 1996, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -32,16 +32,40 @@ dirname (char *path) last_slash = path != NULL ? strrchr (path, '/') : NULL; if (last_slash != NULL && last_slash != path && last_slash[1] == '\0') - /* The '/' is the last character, we have to look further. */ - last_slash = __memrchr (path, '/', last_slash - path); + { + /* Determine whether all remaining characters are slashes. */ + char *runp; + + for (runp = last_slash; runp != path; --runp) + if (runp[-1] != '/') + break; + + /* The '/' is the last character, we have to look further. */ + if (runp != path) + last_slash = __memrchr (path, '/', runp - path); + } if (last_slash != NULL) { + /* Determine whether all remaining characters are slashes. */ + char *runp; + + for (runp = last_slash; runp != path; --runp) + if (runp[-1] != '/') + break; + /* Terminate the path. */ - if (last_slash == path) - /* The last slash is the first character in the string. We have to - return "/". */ - ++last_slash; + if (runp == path) + { + /* The last slash is the first character in the string. We have to + return "/". As a special case we have to return "//" if there + are exactly two slashes at the beginning of the string. See + XBD 4.10 Path Name Resolution for more information. */ + if (last_slash == path + 1) + ++last_slash; + else + last_slash = path + 1; + } last_slash[0] = '\0'; } diff -durpNa glibc-2.2.2/misc/error.c glibc-2.2.3/misc/error.c --- glibc-2.2.2/misc/error.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/misc/error.c Mon Apr 9 20:03:29 2001 @@ -1,5 +1,5 @@ /* Error handler for noninteractive utilities - Copyright (C) 1990-1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1990-1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. @@ -139,13 +139,11 @@ error (status, errnum, message, va_alist va_list args; #endif + fflush (stdout); if (error_print_progname) (*error_print_progname) (); else - { - fflush (stdout); - fprintf (stderr, "%s: ", program_name); - } + fprintf (stderr, "%s: ", program_name); #ifdef VA_START VA_START (args, message); @@ -211,13 +209,11 @@ error_at_line (status, errnum, file_name old_line_number = line_number; } + fflush (stdout); if (error_print_progname) (*error_print_progname) (); else - { - fflush (stdout); - fprintf (stderr, "%s:", program_name); - } + fprintf (stderr, "%s:", program_name); if (file_name != NULL) fprintf (stderr, "%s:%d: ", file_name, line_number); diff -durpNa glibc-2.2.2/misc/mkstemp.c glibc-2.2.3/misc/mkstemp.c --- glibc-2.2.2/misc/mkstemp.c Tue Jul 6 15:21:15 1999 +++ glibc-2.2.3/misc/mkstemp.c Mon Mar 26 20:53:05 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2001 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 @@ -18,6 +18,10 @@ #include #include + +#ifndef __GT_FILE +# define __GT_FILE 0 +#endif /* Generate a unique temporary file name from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; diff -durpNa glibc-2.2.2/misc/tst-dirname.c glibc-2.2.3/misc/tst-dirname.c --- glibc-2.2.2/misc/tst-dirname.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/misc/tst-dirname.c Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* Test program for dirname function a la XPG. - Copyright (C) 1996, 2000 Free Software Foundation, Inc. + Copyright (C) 1996, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -54,6 +54,13 @@ main (void) /* Some more tests. */ result |= test ("/usr/lib/", "/usr"); result |= test ("/usr", "/"); + result |= test ("a//", "."); + result |= test ("a////", "."); + result |= test ("////usr", "/"); + result |= test ("////usr//", "/"); + result |= test ("//usr", "//"); + result |= test ("//usr//", "//"); + result |= test ("//", "//"); return result != 0; } diff -durpNa glibc-2.2.2/nis/Makefile glibc-2.2.3/nis/Makefile --- glibc-2.2.2/nis/Makefile Tue Jul 28 09:39:36 1998 +++ glibc-2.2.3/nis/Makefile Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 2001 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 @@ -55,13 +55,15 @@ libnsl-routines = yp_xdr ypclnt ypupdate nis_clone_res libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups) \ - nisplus-parser + nisplus-parser nss-nis libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes)) -libnss_nis-routines := $(addprefix nis-,$(databases)) nis-initgroups +libnss_nis-routines := $(addprefix nis-,$(databases)) nis-initgroups \ + nss-nis libnss_nis-inhibit-o = $(filter-out .os,$(object-suffixes)) -libnss_nisplus-routines := $(addprefix nisplus-,$(databases)) nisplus-parser +libnss_nisplus-routines := $(addprefix nisplus-,$(databases)) nisplus-parser \ + nss-nisplus libnss_nisplus-inhibit-o = $(filter-out .os,$(object-suffixes)) include ../Rules @@ -75,7 +77,8 @@ $(objpfx)libnss_nisplus.so: $(objpfx)lib # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(services:%=$(objpfx)libnss_%.so) $(objpfx)libnsl.so: $(common-objpfx)libc.so +$(services:%=$(objpfx)libnss_%.so) $(objpfx)libnsl.so: $(common-objpfx)libc.so\ + $(common-objpfx)libc_nonshared.a ifeq ($(build-shared),yes) diff -durpNa glibc-2.2.2/nis/nss-nis.c glibc-2.2.3/nis/nss-nis.c --- glibc-2.2.2/nis/nss-nis.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/nis/nss-nis.c Thu Apr 26 06:42:58 2001 @@ -0,0 +1,47 @@ +/* Copyright (C) 1996, 2001 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. */ + +#include + +#include "nss-nis.h" +#include "nsswitch.h" + + +/* Convert YP error number to NSS error number. */ +const enum nss_status __yperr2nss_tab[] = +{ + [YPERR_SUCCESS] = NSS_STATUS_SUCCESS, + [YPERR_BADARGS] = NSS_STATUS_UNAVAIL, + [YPERR_RPC] = NSS_STATUS_UNAVAIL, + [YPERR_DOMAIN] = NSS_STATUS_UNAVAIL, + [YPERR_MAP] = NSS_STATUS_UNAVAIL, + [YPERR_KEY] = NSS_STATUS_NOTFOUND, + [YPERR_YPERR] = NSS_STATUS_UNAVAIL, + [YPERR_RESRC] = NSS_STATUS_TRYAGAIN, + [YPERR_NOMORE] = NSS_STATUS_NOTFOUND, + [YPERR_PMAP] = NSS_STATUS_UNAVAIL, + [YPERR_YPBIND] = NSS_STATUS_UNAVAIL, + [YPERR_YPSERV] = NSS_STATUS_UNAVAIL, + [YPERR_NODOM] = NSS_STATUS_UNAVAIL, + [YPERR_BADDB] = NSS_STATUS_UNAVAIL, + [YPERR_VERS] = NSS_STATUS_UNAVAIL, + [YPERR_ACCESS] = NSS_STATUS_UNAVAIL, + [YPERR_BUSY] = NSS_STATUS_TRYAGAIN +}; +const unsigned int __yperr2nss_count = (sizeof (__yperr2nss_tab) + / sizeof (__yperr2nss_tab[0])); diff -durpNa glibc-2.2.2/nis/nss-nis.h glibc-2.2.3/nis/nss-nis.h --- glibc-2.2.2/nis/nss-nis.h Tue Dec 10 17:39:55 1996 +++ glibc-2.2.3/nis/nss-nis.h Thu Apr 26 20:07:07 2001 @@ -25,34 +25,15 @@ /* Convert YP error number to NSS error number. */ -static enum nss_status yperr2nss_tab[] = -{ - [YPERR_SUCCESS] = NSS_STATUS_SUCCESS, - [YPERR_BADARGS] = NSS_STATUS_UNAVAIL, - [YPERR_RPC] = NSS_STATUS_UNAVAIL, - [YPERR_DOMAIN] = NSS_STATUS_UNAVAIL, - [YPERR_MAP] = NSS_STATUS_UNAVAIL, - [YPERR_KEY] = NSS_STATUS_NOTFOUND, - [YPERR_YPERR] = NSS_STATUS_UNAVAIL, - [YPERR_RESRC] = NSS_STATUS_TRYAGAIN, - [YPERR_NOMORE] = NSS_STATUS_NOTFOUND, - [YPERR_PMAP] = NSS_STATUS_UNAVAIL, - [YPERR_YPBIND] = NSS_STATUS_UNAVAIL, - [YPERR_YPSERV] = NSS_STATUS_UNAVAIL, - [YPERR_NODOM] = NSS_STATUS_UNAVAIL, - [YPERR_BADDB] = NSS_STATUS_UNAVAIL, - [YPERR_VERS] = NSS_STATUS_UNAVAIL, - [YPERR_ACCESS] = NSS_STATUS_UNAVAIL, - [YPERR_BUSY] = NSS_STATUS_TRYAGAIN -}; -#define YPERR_COUNT (sizeof (yperr2nss_tab) / sizeof (yperr2nss_tab[0])) +extern const enum nss_status __yperr2nss_tab[]; +extern const unsigned int __yperr2nss_count; static inline enum nss_status yperr2nss (int errval) { - if ((unsigned int) errval > YPERR_COUNT) + if ((unsigned int) errval > __yperr2nss_count) return NSS_STATUS_UNAVAIL; - return yperr2nss_tab[errval]; + return __yperr2nss_tab[errval]; } #endif /* nis/nss-nis.h */ diff -durpNa glibc-2.2.2/nis/nss-nisplus.c glibc-2.2.3/nis/nss-nisplus.c --- glibc-2.2.2/nis/nss-nisplus.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/nis/nss-nisplus.c Thu Apr 26 06:52:02 2001 @@ -0,0 +1,79 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk , 1997. + + 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 + +#include "nss-nisplus.h" +#include "nsswitch.h" + + +/* Convert NIS+ error number to NSS error number. */ +const enum nss_status __niserr2nss_tab[] = +{ + [NIS_SUCCESS] = NSS_STATUS_SUCCESS, + [NIS_S_SUCCESS] = NSS_STATUS_SUCCESS, + [NIS_NOTFOUND] = NSS_STATUS_NOTFOUND, + [NIS_S_NOTFOUND] = NSS_STATUS_NOTFOUND, + [NIS_CACHEEXPIRED] = NSS_STATUS_UNAVAIL, + [NIS_NAMEUNREACHABLE] = NSS_STATUS_UNAVAIL, + [NIS_UNKNOWNOBJ] = NSS_STATUS_NOTFOUND, + [NIS_TRYAGAIN] = NSS_STATUS_TRYAGAIN, + [NIS_SYSTEMERROR] = NSS_STATUS_UNAVAIL, + [NIS_CHAINBROKEN] = NSS_STATUS_UNAVAIL, + [NIS_PERMISSION] = NSS_STATUS_UNAVAIL, + [NIS_NOTOWNER] = NSS_STATUS_UNAVAIL, + [NIS_NOT_ME] = NSS_STATUS_UNAVAIL, + [NIS_NOMEMORY] = NSS_STATUS_TRYAGAIN, + [NIS_NAMEEXISTS] = NSS_STATUS_UNAVAIL, + [NIS_NOTMASTER] = NSS_STATUS_UNAVAIL, + [NIS_INVALIDOBJ] = NSS_STATUS_UNAVAIL, + [NIS_BADNAME] = NSS_STATUS_UNAVAIL, + [NIS_NOCALLBACK] = NSS_STATUS_UNAVAIL, + [NIS_CBRESULTS] = NSS_STATUS_UNAVAIL, + [NIS_NOSUCHNAME] = NSS_STATUS_NOTFOUND, + [NIS_NOTUNIQUE] = NSS_STATUS_UNAVAIL, + [NIS_IBMODERROR] = NSS_STATUS_UNAVAIL, + [NIS_NOSUCHTABLE] = NSS_STATUS_UNAVAIL, + [NIS_TYPEMISMATCH] = NSS_STATUS_UNAVAIL, + [NIS_LINKNAMEERROR] = NSS_STATUS_UNAVAIL, + [NIS_PARTIAL] = NSS_STATUS_NOTFOUND, + [NIS_TOOMANYATTRS] = NSS_STATUS_UNAVAIL, + [NIS_RPCERROR] = NSS_STATUS_UNAVAIL, + [NIS_BADATTRIBUTE] = NSS_STATUS_UNAVAIL, + [NIS_NOTSEARCHABLE] = NSS_STATUS_UNAVAIL, + [NIS_CBERROR] = NSS_STATUS_UNAVAIL, + [NIS_FOREIGNNS] = NSS_STATUS_UNAVAIL, + [NIS_BADOBJECT] = NSS_STATUS_UNAVAIL, + [NIS_NOTSAMEOBJ] = NSS_STATUS_UNAVAIL, + [NIS_MODFAIL] = NSS_STATUS_UNAVAIL, + [NIS_BADREQUEST] = NSS_STATUS_UNAVAIL, + [NIS_NOTEMPTY] = NSS_STATUS_UNAVAIL, + [NIS_COLDSTART_ERR] = NSS_STATUS_UNAVAIL, + [NIS_RESYNC] = NSS_STATUS_UNAVAIL, + [NIS_FAIL] = NSS_STATUS_UNAVAIL, + [NIS_UNAVAIL] = NSS_STATUS_UNAVAIL, + [NIS_RES2BIG] = NSS_STATUS_UNAVAIL, + [NIS_SRVAUTH] = NSS_STATUS_UNAVAIL, + [NIS_CLNTAUTH] = NSS_STATUS_UNAVAIL, + [NIS_NOFILESPACE] = NSS_STATUS_UNAVAIL, + [NIS_NOPROC] = NSS_STATUS_UNAVAIL, + [NIS_DUMPLATER] = NSS_STATUS_UNAVAIL +}; +const unsigned int __niserr2nss_count = (sizeof (__niserr2nss_tab) + / sizeof (__niserr2nss_tab[0])); diff -durpNa glibc-2.2.2/nis/nss-nisplus.h glibc-2.2.3/nis/nss-nisplus.h --- glibc-2.2.2/nis/nss-nisplus.h Sun Dec 13 12:08:59 1998 +++ glibc-2.2.3/nis/nss-nisplus.h Thu Apr 26 20:07:07 2001 @@ -26,65 +26,15 @@ /* Convert NIS+ error number to NSS error number. */ -static enum nss_status niserr2nss_tab[] = -{ - [NIS_SUCCESS] = NSS_STATUS_SUCCESS, - [NIS_S_SUCCESS] = NSS_STATUS_SUCCESS, - [NIS_NOTFOUND] = NSS_STATUS_NOTFOUND, - [NIS_S_NOTFOUND] = NSS_STATUS_NOTFOUND, - [NIS_CACHEEXPIRED] = NSS_STATUS_UNAVAIL, - [NIS_NAMEUNREACHABLE] = NSS_STATUS_UNAVAIL, - [NIS_UNKNOWNOBJ] = NSS_STATUS_NOTFOUND, - [NIS_TRYAGAIN] = NSS_STATUS_TRYAGAIN, - [NIS_SYSTEMERROR] = NSS_STATUS_UNAVAIL, - [NIS_CHAINBROKEN] = NSS_STATUS_UNAVAIL, - [NIS_PERMISSION] = NSS_STATUS_UNAVAIL, - [NIS_NOTOWNER] = NSS_STATUS_UNAVAIL, - [NIS_NOT_ME] = NSS_STATUS_UNAVAIL, - [NIS_NOMEMORY] = NSS_STATUS_TRYAGAIN, - [NIS_NAMEEXISTS] = NSS_STATUS_UNAVAIL, - [NIS_NOTMASTER] = NSS_STATUS_UNAVAIL, - [NIS_INVALIDOBJ] = NSS_STATUS_UNAVAIL, - [NIS_BADNAME] = NSS_STATUS_UNAVAIL, - [NIS_NOCALLBACK] = NSS_STATUS_UNAVAIL, - [NIS_CBRESULTS] = NSS_STATUS_UNAVAIL, - [NIS_NOSUCHNAME] = NSS_STATUS_NOTFOUND, - [NIS_NOTUNIQUE] = NSS_STATUS_UNAVAIL, - [NIS_IBMODERROR] = NSS_STATUS_UNAVAIL, - [NIS_NOSUCHTABLE] = NSS_STATUS_UNAVAIL, - [NIS_TYPEMISMATCH] = NSS_STATUS_UNAVAIL, - [NIS_LINKNAMEERROR] = NSS_STATUS_UNAVAIL, - [NIS_PARTIAL] = NSS_STATUS_NOTFOUND, - [NIS_TOOMANYATTRS] = NSS_STATUS_UNAVAIL, - [NIS_RPCERROR] = NSS_STATUS_UNAVAIL, - [NIS_BADATTRIBUTE] = NSS_STATUS_UNAVAIL, - [NIS_NOTSEARCHABLE] = NSS_STATUS_UNAVAIL, - [NIS_CBERROR] = NSS_STATUS_UNAVAIL, - [NIS_FOREIGNNS] = NSS_STATUS_UNAVAIL, - [NIS_BADOBJECT] = NSS_STATUS_UNAVAIL, - [NIS_NOTSAMEOBJ] = NSS_STATUS_UNAVAIL, - [NIS_MODFAIL] = NSS_STATUS_UNAVAIL, - [NIS_BADREQUEST] = NSS_STATUS_UNAVAIL, - [NIS_NOTEMPTY] = NSS_STATUS_UNAVAIL, - [NIS_COLDSTART_ERR] = NSS_STATUS_UNAVAIL, - [NIS_RESYNC] = NSS_STATUS_UNAVAIL, - [NIS_FAIL] = NSS_STATUS_UNAVAIL, - [NIS_UNAVAIL] = NSS_STATUS_UNAVAIL, - [NIS_RES2BIG] = NSS_STATUS_UNAVAIL, - [NIS_SRVAUTH] = NSS_STATUS_UNAVAIL, - [NIS_CLNTAUTH] = NSS_STATUS_UNAVAIL, - [NIS_NOFILESPACE] = NSS_STATUS_UNAVAIL, - [NIS_NOPROC] = NSS_STATUS_UNAVAIL, - [NIS_DUMPLATER] = NSS_STATUS_UNAVAIL -}; -#define NISERR_COUNT (sizeof (niserr2nss_tab) / sizeof (niserr2nss_tab[0])) +extern const enum nss_status __niserr2nss_tab[]; +extern const unsigned int __niserr2nss_count; static inline enum nss_status niserr2nss (int errval) { - if ((unsigned int) errval > NISERR_COUNT) + if ((unsigned int) errval > __niserr2nss_count) return NSS_STATUS_UNAVAIL; - return niserr2nss_tab[errval]; + return __niserr2nss_tab[errval]; } #endif /* nis/nss-nisplus.h */ diff -durpNa glibc-2.2.2/nis/nss_compat/compat-grp.c glibc-2.2.3/nis/nss_compat/compat-grp.c --- glibc-2.2.2/nis/nss_compat/compat-grp.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_compat/compat-grp.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -32,10 +32,10 @@ #include "nss-nisplus.h" #include "nisplus-parser.h" -static service_user *ni = NULL; -static bool_t use_nisplus = FALSE; /* default: group_compat: nis */ -static nis_name grptable = NULL; /* Name of the group table */ -static size_t grptablelen = 0; +static service_user *ni; +static bool_t use_nisplus; /* default: group_compat: nis */ +static nis_name grptable; /* Name of the group table */ +static size_t grptablelen; /* Get the declaration of the parser function. */ #define ENTNAME grent diff -durpNa glibc-2.2.2/nis/nss_compat/compat-initgroups.c glibc-2.2.3/nis/nss_compat/compat-initgroups.c --- glibc-2.2.2/nis/nss_compat/compat-initgroups.c Wed Aug 2 14:52:28 2000 +++ glibc-2.2.3/nis/nss_compat/compat-initgroups.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1998. @@ -34,10 +34,10 @@ #include "nss-nisplus.h" #include "nisplus-parser.h" -static service_user *ni = NULL; -static bool_t use_nisplus = FALSE; /* default: group_compat: nis */ -static nis_name grptable = NULL; /* Name of the group table */ -static size_t grptablelen = 0; +static service_user *ni; +static bool_t use_nisplus; /* default: group_compat: nis */ +static nis_name grptable; /* Name of the group table */ +static size_t grptablelen; /* Get the declaration of the parser function. */ #define ENTNAME grent diff -durpNa glibc-2.2.2/nis/nss_compat/compat-pwd.c glibc-2.2.3/nis/nss_compat/compat-pwd.c --- glibc-2.2.2/nis/nss_compat/compat-pwd.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_compat/compat-pwd.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -34,10 +34,10 @@ #include "nss-nisplus.h" #include "nisplus-parser.h" -static service_user *ni = NULL; -static bool_t use_nisplus = FALSE; /* default: passwd_compat: nis */ -static nis_name pwdtable = NULL; /* Name of the pwd table */ -static size_t pwdtablelen = 0; +static service_user *ni; +static bool_t use_nisplus; /* default: passwd_compat: nis */ +static nis_name pwdtable; /* Name of the pwd table */ +static size_t pwdtablelen; /* Get the declaration of the parser function. */ #define ENTNAME pwent diff -durpNa glibc-2.2.2/nis/nss_compat/compat-spwd.c glibc-2.2.3/nis/nss_compat/compat-spwd.c --- glibc-2.2.2/nis/nss_compat/compat-spwd.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_compat/compat-spwd.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -34,10 +34,10 @@ #include "nss-nisplus.h" #include "nisplus-parser.h" -static service_user *ni = NULL; -static bool_t use_nisplus = FALSE; /* default: passwd_compat: nis */ -static nis_name pwdtable = NULL; /* Name of the password table */ -static size_t pwdtablelen = 0; +static service_user *ni; +static bool_t use_nisplus; /* default: passwd_compat: nis */ +static nis_name pwdtable; /* Name of the password table */ +static size_t pwdtablelen; /* Get the declaration of the parser function. */ #define ENTNAME spent diff -durpNa glibc-2.2.2/nis/nss_nis/nis-alias.c glibc-2.2.3/nis/nss_nis/nis-alias.c --- glibc-2.2.2/nis/nss_nis/nis-alias.c Tue Dec 21 10:58:59 1999 +++ glibc-2.2.3/nis/nss_nis/nis-alias.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999i, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -31,8 +31,8 @@ __libc_lock_define_initialized (static, lock) static bool_t new_start = 1; -static char *oldkey = NULL; -static int oldkeylen = 0; +static char *oldkey; +static int oldkeylen; static int _nss_nis_parse_aliasent (const char *key, char *alias, struct aliasent *result, diff -durpNa glibc-2.2.2/nis/nss_nis/nis-ethers.c glibc-2.2.3/nis/nss_nis/nis-ethers.c --- glibc-2.2.2/nis/nss_nis/nis-ethers.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_nis/nis-ethers.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996-2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -44,8 +44,8 @@ struct response struct response *next; }; -static struct response *start = NULL; -static struct response *next = NULL; +static struct response *start; +static struct response *next; static int saveit (int instatus, char *inkey, int inkeylen, char *inval, diff -durpNa glibc-2.2.2/nis/nss_nis/nis-grp.c glibc-2.2.3/nis/nss_nis/nis-grp.c --- glibc-2.2.2/nis/nss_nis/nis-grp.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_nis/nis-grp.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -38,8 +38,8 @@ __libc_lock_define_initialized (static, lock) static bool_t new_start = 1; -static char *oldkey = NULL; -static int oldkeylen = 0; +static char *oldkey; +static int oldkeylen; enum nss_status _nss_nis_setgrent (int stayopen) diff -durpNa glibc-2.2.2/nis/nss_nis/nis-network.c glibc-2.2.3/nis/nss_nis/nis-network.c --- glibc-2.2.2/nis/nss_nis/nis-network.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_nis/nis-network.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996-2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -39,8 +39,8 @@ __libc_lock_define_initialized (static, lock) static bool_t new_start = 1; -static char *oldkey = NULL; -static int oldkeylen = 0; +static char *oldkey; +static int oldkeylen; enum nss_status _nss_nis_setnetent (int stayopen) diff -durpNa glibc-2.2.2/nis/nss_nis/nis-proto.c glibc-2.2.3/nis/nss_nis/nis-proto.c --- glibc-2.2.2/nis/nss_nis/nis-proto.c Sat Jan 6 20:35:26 2001 +++ glibc-2.2.3/nis/nss_nis/nis-proto.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -41,8 +41,8 @@ struct response struct response *next; }; -static struct response *start = NULL; -static struct response *next = NULL; +static struct response *start; +static struct response *next; static int saveit (int instatus, char *inkey, int inkeylen, char *inval, diff -durpNa glibc-2.2.2/nis/nss_nis/nis-pwd.c glibc-2.2.3/nis/nss_nis/nis-pwd.c --- glibc-2.2.2/nis/nss_nis/nis-pwd.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nis/nis-pwd.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -38,8 +38,8 @@ __libc_lock_define_initialized (static, lock) static bool_t new_start = 1; -static char *oldkey = NULL; -static int oldkeylen = 0; +static char *oldkey; +static int oldkeylen; enum nss_status _nss_nis_setpwent (int stayopen) diff -durpNa glibc-2.2.2/nis/nss_nis/nis-service.c glibc-2.2.3/nis/nss_nis/nis-service.c --- glibc-2.2.2/nis/nss_nis/nis-service.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nis/nis-service.c Sat Apr 7 14:02:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -228,6 +228,7 @@ _nss_nis_getservbyname_r (const char *na char key[strlen (name) + strlen (protocol) + 2]; char *cp, *domain, *result; size_t keylen, len; + int int_len; /* If this fails, the other solution will also fail. */ if (yp_get_default_domain (&domain)) @@ -239,7 +240,8 @@ _nss_nis_getservbyname_r (const char *na stpcpy (cp, protocol); keylen = strlen (key); status = yperr2nss (yp_match (domain, "services.byservicename", key, - keylen, &result, &len)); + keylen, &result, &int_len)); + len = int_len; /* If we found the key, it's ok and parse the result. If not, fall through and parse the complete table. */ diff -durpNa glibc-2.2.2/nis/nss_nis/nis-spwd.c glibc-2.2.3/nis/nss_nis/nis-spwd.c --- glibc-2.2.2/nis/nss_nis/nis-spwd.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nis/nis-spwd.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -38,8 +38,8 @@ __libc_lock_define_initialized (static, lock) static bool_t new_start = 1; -static char *oldkey = NULL; -static int oldkeylen = 0; +static char *oldkey; +static int oldkeylen; enum nss_status _nss_nis_setspent (int stayopen) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-alias.c glibc-2.2.3/nis/nss_nisplus/nisplus-alias.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-alias.c Mon Feb 16 09:40:09 1998 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-alias.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -29,10 +29,10 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static u_long next_entry = 0; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static u_long next_entry; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-ethers.c glibc-2.2.3/nis/nss_nisplus/nisplus-ethers.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-ethers.c Fri Feb 9 10:04:15 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-ethers.c Thu Apr 26 20:07:07 2001 @@ -31,9 +31,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-grp.c glibc-2.2.3/nis/nss_nisplus/nisplus-grp.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-grp.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-grp.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -30,10 +30,10 @@ __libc_lock_define_initialized (static, lock); -static nis_result *result = NULL; -static unsigned long next_entry = 0; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static unsigned long next_entry; +static nis_name tablename_val; +static u_long tablename_len; static enum nss_status _nss_create_tablename (int *errnop) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-hosts.c glibc-2.2.3/nis/nss_nisplus/nisplus-hosts.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-hosts.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-hosts.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -31,9 +31,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-network.c glibc-2.2.3/nis/nss_nisplus/nisplus-network.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-network.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-network.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -31,9 +31,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-proto.c glibc-2.2.3/nis/nss_nisplus/nisplus-proto.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-proto.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-proto.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -29,9 +29,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-pwd.c glibc-2.2.3/nis/nss_nisplus/nisplus-pwd.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-pwd.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-pwd.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -29,9 +29,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; static enum nss_status _nss_create_tablename (int *errnop) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-rpc.c glibc-2.2.3/nis/nss_nisplus/nisplus-rpc.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-rpc.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-rpc.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -29,9 +29,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-service.c glibc-2.2.3/nis/nss_nisplus/nisplus-service.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-service.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-service.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -29,9 +29,9 @@ __libc_lock_define_initialized (static, lock); -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) diff -durpNa glibc-2.2.2/nis/nss_nisplus/nisplus-spwd.c glibc-2.2.3/nis/nss_nisplus/nisplus-spwd.c --- glibc-2.2.2/nis/nss_nisplus/nisplus-spwd.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/nis/nss_nisplus/nisplus-spwd.c Thu Apr 26 20:07:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -29,9 +29,9 @@ __libc_lock_define_initialized (static, lock) -static nis_result *result = NULL; -static nis_name tablename_val = NULL; -static u_long tablename_len = 0; +static nis_result *result; +static nis_name tablename_val; +static u_long tablename_len; static enum nss_status _nss_create_tablename (int *errnop) diff -durpNa glibc-2.2.2/nis/ypclnt.c glibc-2.2.3/nis/ypclnt.c --- glibc-2.2.2/nis/ypclnt.c Mon May 1 14:56:49 2000 +++ glibc-2.2.3/nis/ypclnt.c Sat Apr 7 14:02:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1996. @@ -729,7 +729,9 @@ yp_all (const char *indomain, const char if (result != RPC_SUCCESS) { - clnt_perror (clnt, "yp_all: clnt_call"); + /* Print the error message only on the last try */ + if (try == MAXTRIES - 1) + clnt_perror (clnt, "yp_all: clnt_call"); res = YPERR_RPC; } else @@ -738,7 +740,7 @@ yp_all (const char *indomain, const char __yp_unbind (ydb); clnt_destroy (clnt); - if (status != YP_NOMORE) + if (res == YPERR_SUCCESS && status != YP_NOMORE) { __set_errno (saved_errno); return ypprot_err (status); diff -durpNa glibc-2.2.2/nscd/nscd.h glibc-2.2.3/nscd/nscd.h --- glibc-2.2.2/nscd/nscd.h Wed Nov 22 10:59:51 2000 +++ glibc-2.2.3/nscd/nscd.h Wed Apr 25 14:51:01 2001 @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (c) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1998. @@ -108,7 +108,7 @@ extern int nscd_open_socket (void); /* connections.c */ extern void nscd_init (const char *conffile); extern void close_sockets (void); -extern void start_threads (void); +extern void start_threads (void) __attribute__ ((__noreturn__)); /* nscd_conf.c */ extern int nscd_parse_file (const char *fname, struct database dbs[lastdb]); diff -durpNa glibc-2.2.2/nss/Makefile glibc-2.2.3/nss/Makefile --- glibc-2.2.2/nss/Makefile Tue Jan 23 14:07:18 2001 +++ glibc-2.2.3/nss/Makefile Mon Mar 26 20:53:06 2001 @@ -80,4 +80,5 @@ endif # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(services:%=$(objpfx)libnss_%.so): $(common-objpfx)libc.so +$(services:%=$(objpfx)libnss_%.so): $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/po/Makefile glibc-2.2.3/po/Makefile --- glibc-2.2.2/po/Makefile Fri Sep 17 10:00:37 1999 +++ glibc-2.2.3/po/Makefile Wed Apr 25 14:51:01 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2001 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 @@ -20,8 +20,12 @@ subdir := po +# List of languages that are currently broken (just run msgfmt from +# GNU gettext 0.10.36 on them to see why) +BROKEN_LINGUAS = el + # List of languages for which we have message catalogs of translations. -ALL_LINGUAS := $(basename $(wildcard *.po)) +ALL_LINGUAS := $(filter-out $(BROKEN_LINGUAS),$(basename $(wildcard *.po))) # You can override this in configparms or the make command line to limit # the languages which get installed. @@ -45,7 +49,8 @@ mo-installed = $(inst_msgcatdir)/%/LC_ME install-others = $(LINGUAS:%=$(mo-installed)) # Files to distribute: all the source and compiled binary translation files. -distribute = $(ALL_LINGUAS:=.po) $(ALL_LINGUAS:=.mo) libc.pot header.pot +distribute = $(ALL_LINGUAS:=.po) $(BROKEN_LINGUAS:=.po) $(ALL_LINGUAS:=.mo) \ + libc.pot header.pot include ../Rules diff -durpNa glibc-2.2.2/po/el.mo glibc-2.2.3/po/el.mo --- glibc-2.2.2/po/el.mo Mon Sep 18 16:04:50 2000 +++ glibc-2.2.3/po/el.mo Wed Dec 31 16:00:00 1969 @@ -1,472 +0,0 @@ -Þ•Úì'¼=XRYRlRM‰RE×R&S(DSmS~S–S¨S·SËSæSTnTƒU•U"§U"ÊUíU: VDVMVVVlVƒVV´VÎVçVWW8WRWoW‡W¥W¬W ÇWÔWÛW3íW3!X4UX.ŠX%¹XßX&óX%Y@Y%WY3}Y,±Y)ÞYZ"!Z!DZfZ}Z–Z°ZÊZàZóZ* [4[&N[&u[&œ[&Ã[&ê[\ )\$J\o\Š\¤\,¾\ë\% ],/]-\] Š]&«]Ò]ñ]^*^E^e^‰…^2_B_"b_4…_º_#Ì_ ð_=ú_8`<I`†`'¦`Î`)×`(a *aKaMaUa$fa‹a)¢a(Ìa/õa%b 5bAbVbhbb#–b=ºb/øb(c:c Oc ]cicc•c¥c ºcÆc×cîcþcd /dÓsttt2tHt!\t ~t!‹t­t.Ìtût u u")uLu_uru ˆu’u+ªuÖuçuþuv5vMvivv›v¬v1Év$ûv w2wMwbw}w •w¢wÁwÐwßw -ôwÿwx2 x?xNxgx vx„xšx³xÏxåxõx!y1yOysoyãy*ôyz9zJz^zozŽz¡zµzÍzãzöz ûz{9 {F{^{t{,{ -º{Å{ Ì{Ù{ô{|.|H|`||+’|#¾|â|ò| }$}#B}f}†}}©}¼}Î}æ}ù}~~-~M~l~†~¦~·~Ï~Þ~ø~%DT*sž¥ÁÔäô €€ '€1€!I€ k€ u€ƒ€€Sµ€ * HUiz‹¨(Æï ‚ ‚9‚Q‚-i‚—‚±‚ ǂ肃ƒ)ƒ;ƒOƒXƒnƒ~ƒ.Žƒ½ƒ σ#݃0„%2„X„l„‚„“„¦„¾„Û„ê„……6…U…s…x…‹…©…Æ…à…ú… ††8†R†k†‡†!§†Ɇâ†ý†‡2‡P‡"i‡ Œ‡™‡¨‡¿‡Ó‡å‡û‡- -ˆ-8ˆ!fˆˆˆžˆ²ˆ͈Þˆ2õˆ#(‰ L‰Y‰;m‰©‰¿‰׉ó‰ Š %Š 3ŠTŠeŠƒŠ”ŠšŠ´ŠÇŠÞŠóŠ‹&'‹N‹c‹x‹‹ ‹ º‹Û‹$ô‹ Œ 'Œ3ŒIŒ^ŒvŒ~ŒŒ£Œ¸ŒËŒäŒ*ìŒ( @M"aƒ„ŽŽ ŽŽ$9Ž -^ŽiŽ«xŽ$ 4B!Vx‡›¹"Ìïþ‘'‘'7‘#_‘6ƒ‘ º‘ -È‘Ó‘"Û‘"þ‘!’";’^’~’˜’¯’ Å’Ó’ â’ï’þ’“.“C“U“j““‘“£“ µ““Ý“ò“#ù“:” X”y””%¥”Ë”"ᔕ!• 5•"V• y•š•´•Ä•Ö•Û•à•÷•–F3– z–4„–.¹–-è–6—8M—;†—I— ˜$˜>˜+N˜+z˜'¦˜Θ î˜ û˜™#™?™&R™.y™&¨™Ï™,ß™ š+šCGš#‹š¯šΚ!êš" ›./› ^›%›;¥›&ᛜ1(œZœ uœœ"’œµœ'Ñœùœ..]"t(—-Àîž!#žEžbž‚žžž!ºžÜžôžŸ9'Ÿ2aŸ6”Ÿ+ËŸ?÷ŸC7 8{ $´ "Ù !ü .¡M¡l¡‹¡<«¡;è¡$$¢I¢a¢*¢7¬¢ä¢"£&£)9£Nc£U²£¤&&¤)M¤ w¤…¤+ž¤ʤ褥¥"4¥%W¥*}¥*¨¥Ó¥ç¥0¦2¦O¦n¦+Ž¦7º¦#ò¦§!4§$V§!{§§&¸§%ߧ,¨2¨%A¨0g¨2˜¨ ˨.ب©K ©Ll©L¹©ª+ª2Fª2yª/¬ª$ܪ«%«-=«$k««¬«Æ«Ù«(ð«&¬!@¬b¬Fy¬À¬BÓ¬B­?Y­<™­7Ö­®)®#D®.h®0—®0È®ù®¯*¯F¯[¯o¯„¯ž¯±¯įÚ¯î¯#°5'°G]° ¥°#³°5×° ±±-1±!_±(±-ª±ر'é±?²=Q² ².² ̲9í²;'³,c³*³#»³ß³%ù³A´a´~´I›´7å´3µ+Qµ}µ'”µ!¼µÞµ.ﵶC1¶*u¶  ¶¬¶(Ŷî¶1·3·N·:j·¥·)÷*í·#¸<¸$\¸¸¸"¹¸ܸú¸¹1¹>Q¹¹!¯¹ ѹ(ò¹$º@º*Vº=ºH¿º»»E'»&m»(”»'½»Eå»+¼(D¼'m¼$•¼,º¼)ç¼%½7½"U½x½&–½½½PܽU-¾Oƒ¾VÓ¾!*¿'L¿*t¿/Ÿ¿*Ï¿$ú¿/À1OÀ/À)±À*ÛÀ)Á#0ÁTÁ-oÁ&Á4ÄÁ(ùÁ"Â? PÂ#^Â$‚Â"§ÂÊÂàÂúÂÃ."ÃQÃqÃ3ŽÃÂÃ#ÔÃøà ÄÄ02ÄcÄ$ĤĽÄ#ÎÄ òÄþÄÅ'ÅDÅ_Å4xÅ­Å¿ÅÜÅ'üÅB$ÆDgÆj¬ÆKÇ?cÇ £Ç­ÇÌÇ!éÇ È%ÈDÈ[È"rȕȱÈÂÈàÈ#úÈ#É#BÉ0fÉ#—É»ÉÙÉ*÷É%"Ê3HÊ|Ë%ËaµËSÌ;kÌ<§ÌäÌ!þÌ Í=ÍVÍsÍͧ͹Í×ÏèÏ9ùÏ93ÐmÐNŒÐ ÛÐåÐîÐÑÑ+Ñ@ÑXÑiуџѾÑÛÑûÑ$Ò6Ò<Ò [ÒiÒqÒ<…Ò<ÂÒBÿÒ-BÓ&pÓ—Ó)­Ó*×ÓÔ&Ô=>Ô4|Ô+±Ô-ÝÔ9 Õ5EÕ,{Õ-¨Õ%ÖÕ'üÕ$$ÖIÖ#^ÖF‚ÖÉÖ2æÖ2×2L×2×2²×å×&þ×.%Ø#TØxØ—Ø-´Ø%âØ)Ù-2Ù.`Ù(Ù*¸Ù!ãÙ"Ú(Ú"AÚ#dÚ#ˆÚ¬Ú>JÛ"‰Û1¬Û@ÞÛÜ"6Ü YÜKcܯÜHÂÜ+ Ý)7Ý -aÝ3lÝ5 Ý+ÖÝÞ ÞÞ:'Þ'bÞ4ŠÞ;¿ÞIûÞEß Wßaß)zß,¤ß Ñß$òß[à>sà²àÆàÚàîà!á$áCá+^áŠá›á¶áÕáðá â)â;âTârâ†âžâ"¢â,ÅâHòâ=;ãLyã/Æã+öã+"ä#Nä4rä6§ä=ÞäHå/eå+•å9ÁåHûå,Dæ<qæF®æJõæD@ç<…ç,Âçïç" è8/èhè%è-¥èÓèRòèYEéŸé±é Ðé ÞéJêé5êáPê,2ë<_ë8œë0Õëìì<8ì -uì€ì†ì*Šì#µì+Ùì$í*íJígí€í#ŸíÃíÝíñí$ î!2î;TîBîEÓîï -.ï 9ïEï)_ï‰ï ‘ï ›ï ¥ï ¯ï ¹ï Ãï Íï ×ï áï ëï õï ÿï ð ð ð 'ð 1ð ;ð Eð Oð Yð cðmðvððˆð‘ðšð£ð¬ðµðVÏð%&ñ/Lñ5|ñ²ñ%Ãñ5éñòE&ò lò'òµòÇò0åòó$0óUópóƒó¢ó2Àó óóôô«;ôçô#õ$õCõbõvõŠõ)›õ0Åõöõ0ÿõ10ö0bö4“ö1Èöúö'÷;÷Q÷Ni÷ -¸÷Ã÷Ç÷à÷ú÷/ ø<ø&Oøvø/“øÃø Öøâø!òøù*ù?ùWù_ù7{ù³ùÈù%áù(ú00úaúú$ úÅú$Ùú5þú(4û]ûtûûªû+Éû õû=üAüQüiü -‰ü ”ü -žüH©üòüý"ý6ýMý)`ý$Šý"¯ýÒý'çý þ 0þ)Qþƒ{þÿþSÿjÿ„ÿ"˜ÿ»ÿ#Ôÿøÿ -! B]q w…N‰+Ø,;K‡› £7±5é&&F#m,‘¾.Ö.4 L)m'—3¿)ó (*Sm,!ºÜíþ=([*„-¯ Ý$þ#&>%e#‹4¯ä2!T&]„Ÿ³Ìã÷ -3<p…—°]Ê'( /P € ’ « "À $ã  -C% -i -… -!œ -¾ -Û -Eú -'@ 'h 0  Á !â   $  7 A ] u G… Í Þ #ó C ,[ ˆ ¨ Æ Ö %é *:*M!xš.º+é!7"Y$|-¡Ï ê! -8F6%¶!Üþ&;b(~&§AÎ /C[y CžCâ(&OoŠ#§ ËLì>9x‡O£ó" -,-(Z!ƒ¥%´Ú2ú->D&]2„#·%Û!0#T'rš!¡&Ã'ê!%4Zi$x´ ÌÖçÿ,H4Q4†»Í#å’ œ¤ ­¹,Ó  ã& -.-Jx”+´à2ý0Jb~&“&ºCá% -8C)K.u*¤0Ï  : Y u „ ” ­ Á "Û þ !(!B!X!j!|! Ž!œ!"»!Þ!-å!R"3f""š""½"7à"#-8#f#5y#1¯#+á#0 $>$^$q$‡$Œ$‘$ ¨$"É$kì$ X%5d%,š%>Ç%M&MT&B¢&Yå&?' ^' ';';É'%(%+( Q(](n(Ž( ¬(8Í(-)*4)_)-v)%¤)Ê)mé)8W*7*%È**î*++9E+$++¤+QÐ+,",,O,6|,"³,Ö,ê,5-(=-/f-"–-'¹-=á- .-@.6n.8¥.!Þ.(/()/&R/*y/(¤/-Í/)û/#%0!I0k0Kˆ0AÔ0E14\1P‘1Tâ1E72$}2%¢2+È28ô2$-3$R3%w3W3Võ3)L4v4"‘4-´4>â4$!5'F5n5:Š5fÅ5i,6–6"±6'Ô6 ü6 7- 7N7m7†7)™78Ã72ü7</87l8¤8"»8GÞ83&9(Z9*ƒ94®9=ã9)!:$K:(p:+™:3Å:$ù:;;0Z;:‹;Æ;.Õ;5<C:<~<=<Í<kí<dY=h¾='>&A>0h>2™>*Ì>D÷>[P[+a[2[#À[(ä[$ \2\Q\9g\*¡\,Ì\:ù\4],J]!w]™]¡]6º]ñ]& ^2^L^(]^ †^’^ª^&É^ ð^_:/_j_"„_)§_2Ñ_S`MX`s¦`QaQla¾aÎa<ìa,)b2Vb(‰b²b"Ïb7òb)*cTc<fc£c$¼c$ác$d.+d$Zd#d#£dDÇd0 eë:cŽ -ý}ùŒH8 ¯¨1ÉÔ†˜ûC¡Úô ¨VÃRVzØï­Ða©m+í -ü  k¯ÜˆOFœÕ•–8MDNf4Ar¼ÊXǤš©qŽv5ÀQV\FBÛ©³£Ú|øÂ4ä¥ÏÅ>–¹$]$«çIJChÑq×\u±"Mïõƒ™ö†hÐM]èòÓpsGß“Nãe@­¦ýwò <_þB™ý‡³vÓ=G±´G„)) 1&‰@õ¬P6¶3L·W<àŠ!7Ö¸¾ÐŒ™Uç.Ôr›SÔ:<gžsø" Æð0A4#ÚEuØê÷aŸQͦ9~`XÀ5¬`c‹2‡4þ«&Ç€Ì(9Î>ÍÈK¦{ü‘/[´º”Ã+„hÄ!‘îl<AgŸ ìšN•ÙB’Xª¤6º*oëÅžþôR¥-Ißa‚ª9:ˆâŠ»…Ò8ñ«Çe Ÿ°¡Zió(Î6‚…°(Þ¢SÊ>,i²‹»wÑfÑ@F̤y0J¬nÎåœ|×Úm;Xpx-5³%wH:»Í¿œ1#7‰ÙW¸¿Ÿ?ËÕ­/a[TáFDŠ3·Ïk'Er}~ ,Ä*nÖWçú9'ª.CØÏ0˜O\ 2f^Âb·3÷«%-#\j›v Ä”2e²u;y¡Ð¶’=·kn•÷ø»Oœ®]tL“Dš¶dz‘úÆP…itˆ)P" ð=ÔRáfÞÁ[Zæ?ŒZD½éTÀñòèÿéÁãÉ{ùkÿ žÀûËÇŠóôTö_®§ c±¿H¯ZKÝsÕ™ìpÝäɇ]±ª+ÈÖgz`0o½›³B|L%^ƒp*{"§xϦ£Y´>¹È!£y;U”@Ñ7§Yx“.Lö‡½lÆ,Q[hêvbúÁ ÆÓY˨µI‰/®5/²ÍƒiK—%;¢_Ê›Êr#1º½s§åU8eõÂm} à=€2?˜Ö*˜šu®ÿz„•¥¬$ÁJ^¼¤ c¶$JùIÅt’ È¾&mGØÒÉS¹ -¢ ñ×do¼'€°VEt_¸Ä¯Ü€ -UÅ©M¢x~²†—µdA. ×yŒÛÜÝÞßàáâTä­þ!ÕÙ—7gµ+ÌjÓ,—(Kb)°qS3‘”Ëåæ‰èéêëìíîWŽN´ºÎEOüµˆàwã`ïob{|‹6¨q&†Hl‚ó}Ž„j£Ò¹Ìâû¸¿ ’CÛ¡d‹¥jl-‚P…“nRÒæ~¾–ð¼^Y í–Q?Ù' Attributes : Kerberos. -Access Rights : %s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile - %s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile] - %s [-n netid]* [-o outfile] [infile] - %s [-s nettype]* [-o outfile] [infile] - Access rights: Entry data of type %s - Name : %s - Public Key : Type : %s - Universal addresses (%u) - [%d] Name : %s - [%u] - [%u bytes] -%s cache: - -%15s cache is enabled -%15Zd suggested size -%15ld seconds time to live for positive entries -%15ld seconds time to live for negative entries -%15ld cache hits on positive entries -%15ld cache hits on negative entries -%15ld cache misses on positive entries -%15ld cache misses on negative entries -%15ld%% cache hit rate -%15s check /etc/%s for changes - -Group Members : - -Time to Live : rpcinfo -b prognum versnum - rpcinfo -d prognum versnum - rpcinfo -p [ host ] - rpcinfo [ -n portnum ] -t host prognum [ versnum ] - no yes Data Length = %u - Explicit members: - Explicit nonmembers: - Implicit members: - Implicit nonmembers: - No explicit members - No explicit nonmembers - No implicit members - No implicit nonmembers - No recursive members - No recursive nonmembers - Recursive members: - program vers proto port - or: (rule from "%s", line %d) [OPTION...] done -"%s", line %d: %s"Zone %s" line and -l option are mutually exclusive"Zone %s" line and -p option are mutually exclusive"infile" is required for template generation flags. -%.*s: ARGP_HELP_FMT parameter requires a value%.*s: Unknown ARGP_HELP_FMT parameter%s in ruleless zone%s%s%s:%u: %s%sAssertion `%s' failed. -%s%s%s:%u: %s%sUnexpected error: %s. -%s%sUnknown signal %d -%s: %d did not sign extend correctly -%s: must be greater than -%s: C preprocessor failed with exit code %d -%s: C preprocessor failed with signal %d -%s: Can't create %s: %s -%s: Can't create directory %s: %s -%s: Can't link from %s to %s: %s -%s: Can't open %s: %s -%s: Can't remove %s: %s -%s: Can't unlink %s: %s -%s: Error closing %s: %s -%s: Error reading %s -%s: Error writing %s: Error writing %s -%s: Leap line in non leap seconds file %s -%s: Memory exhausted: %s -%s: More than one -L option specified -%s: More than one -d option specified -%s: More than one -l option specified -%s: More than one -p option specified -%s: More than one -y option specified -%s: Too many arguments -%s: cannot get modification time%s: command was '%s', result was %d -%s: error in state machine%s: illegal option -- %c -%s: invalid option -- %c -%s: option `%c%s' doesn't allow an argument -%s: option `%s' is ambiguous -%s: option `%s' requires an argument -%s: option `--%s' doesn't allow an argument -%s: option `-W %s' doesn't allow an argument -%s: option `-W %s' is ambiguous -%s: option requires an argument -- %c -%s: output would overwrite %s -%s: panic: Invalid l_value %d -%s: premature end of file%s: unable to open %s: %m -%s: unrecognized option `%c%s' -%s: unrecognized option `--%s' -%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ] - [ -L leapseconds ] [ -y yearistype ] [ filename ... ] -%s: usage is %s [ -v ] [ -c cutoff ] zonename ... -%s: while writing output %s: %m(PROGRAM ERROR) No version known!?(PROGRAM ERROR) Option should have been recognized!?(Unknown object) -(unknown authentication error - %d)(unknown)*** The file `%s' is stripped: no detailed analysis possible -*standard input*-o OUTPUT-FILE [INPUT-FILE]... -[OUTPUT-FILE [INPUT-FILE]...].lib section in a.out corrupted; low version = %lu, high version = %lu; why = <%s> and <%s> are illegal names for range character must not be in class `%s' character not in class `%s'?AbortedAccess Rights : Accessing a corrupted shared libraryAddress already in useAddress family for hostname not supportedAddress family not supported by protocolAddress family not supported by protocol familyAdvertise errorAlarm clockAnode table overflowArg list too longArgument list too longArgument out of domainAttempt to remove a non-empty tableAttempting to link in more shared libraries than system limitAttempting to link in too many shared librariesAuthentication OKAuthentication errorBOGUS OBJECT -Bad addressBad exchange descriptorBad file descriptorBad file numberBad font file formatBad messageBad request codeBad request descriptorBad system callBad value for ai_flagsBe strictly POSIX conformBinary data -Block device requiredBroadcast poll problemBroken pipeBus errorCDSCPU time limit exceededCache expiredCan not access a needed shared libraryCan not exec a shared library directlyCan't bind to server which serves this domainCan't communicate with portmapperCan't communicate with ypbindCan't communicate with ypservCannot allocate memoryCannot assign requested addressCannot create socket for broadcast rpcCannot exec a shared library directlyCannot have more than one file generation flag! -Cannot receive reply to broadcastCannot register serviceCannot send after socket shutdownCannot send after transport endpoint shutdownCannot send broadcast packetCannot set socket option SO_BROADCASTCannot specify more than one input file! -Cannot use netid flag with inetd flag! -Cannot use netid flag without TIRPC! -Cannot use table flags with newstyle! -Channel number out of rangeCharacter Separator : %c -Child exitedClient credential too weakColumns : -Communication error on sendCompile locale specificationComputer bought the farmComputing table size for character classes might take a while...Computing table size for collation information might take a while...Connection refusedConnection reset by peerConnection timed outContinuedConvert encoding of given files from one encoding to another.Convert key to lower caseCopyright (C) %s Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -Could not create log file "%s"Create C header file NAME containing symbol definitionsCreate output even if warning messages were issuedCreate simple DB database from textual input.Creation Time : %sCross-device linkDES entry for netname %s not unique -DIRECTORY -DNANSDNSDatabase for table does not existDatabase is busyDeadlock situation detected/avoidedDefault Access rights : -Destination address requiredDevice busyDevice not a streamDevice not configuredDevice or resource busyDiffie-Hellmann (%d bits) -Directory : %s -Directory not emptyDisc quota exceededDisk quota exceededDo not fork and display messages on the current ttyDo not print messages while building databaseDo not use existing catalog, force new output fileDomain not boundEMT trapENTRY -Encrypted data -Entry/table type mismatchError 0Error 100Error 101Error 102Error 103Error 104Error 105Error 106Error 107Error 108Error 109Error 110Error 111Error 112Error 113Error 114Error 115Error 116Error 117Error 118Error 119Error 136Error 142Error 58Error 59Error 72Error 73Error 75Error 76Error 91Error 92Error in RPC subsystemError in accessing NIS+ cold start file. Is NIS+ installed?Error in unknown error system: Error while talking to callback procError: .netrc file is readable by others.Exchange fullExec format errorFATAL: system does not define `_POSIX2_LOCALEDEF'FILEFILE contains mapping from symbolic names to UCS4 valuesFailed (unspecified error)File descriptor in bad stateFile existsFile locking deadlockFile locking deadlock errorFile name too longFile size limit exceededFile table overflowFile too largeFirst/next chain brokenFloating point exceptionFull resync required for directoryFunction not implementedGROUP -Garbage in ARGP_HELP_FMT: %sGenerate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE -is -, output is written to standard output. -Generic system errorGet locale-specific information.Give a short usage messageGive this help listGratuitous errorGroup : %s -Group Flags :Group entry for "%s.%s" group: -Hang for SECS seconds (default 3600)HangupHaven't found "%d" in group cache!Haven't found "%d" in password cache!Haven't found "%s" in group cache!Haven't found "%s" in hosts cache!Haven't found "%s" in password cache!Host is downHost name lookup failureI/O errorI/O possibleINPUT-FILE OUTPUT-FILE --o OUTPUT-FILE INPUT-FILE --u INPUT-FILEIOT trapIVYIdentifier removedIllegal byte sequenceIllegal instructionIllegal object type for operationIllegal seekInappropriate file type or formatInappropriate ioctl for deviceInappropriate operation for background processInformation requestInformation:Input Files:Input/Output format specification:Input/output errorInternal NIS errorInternal ypbind errorInterruptInterrupted system callInterrupted system call should be restartedInvalid argumentInvalid back referenceInvalid character class nameInvalid client credentialInvalid client verifierInvalid collation characterInvalid content of \{\}Invalid cross-device linkInvalid exchangeInvalid object for operationInvalid or incomplete multibyte or wide characterInvalid preceding regular expressionInvalid range endInvalid regular expressionInvalid request codeInvalid request descriptorInvalid server verifierInvalid slotInvalidate the specified cacheIs a directoryIs a name fileIs a named type fileKerberos. -KilledLINK -LOCAL entry for UID %d in directory %s not unique -Level 2 haltedLevel 2 not synchronizedLevel 3 haltedLevel 3 resetLink has been severedLink number out of rangeLink points to illegal nameLinked Object Type : Linked to : %s -Local domain name not setLocal resource allocation failureMachine is not on the networkMalformed name, or illegal nameMandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.Master Server : -Master server busy, full dump rescheduled.Memory allocation failureMemory exhaustedMessage tables fullMessage too longMissing or malformed attributeMod. Time : %sModification failedModify operation failedModify output format:Multihop attemptedNAMENAME -[-a|-m]NISNIS client/server version mismatch - can't supply serviceNIS map database is badNIS+ operation failedNIS+ servers unreachableNIS+ service is unavailable or not installedNO OBJECT -NUMBERName : `%s' -Name Service Cache Daemon.Name not served by this serverName not unique on networkName or service not knownName/entry isn't uniqueNamed object is not searchableNeed authenticatorNetwork dropped connection because of resetNetwork dropped connection on resetNetwork is downNetwork is unreachableNo CSI structure availableNo XENIX semaphores availableNo address associated with hostnameNo address associated with nameNo anodeNo buffer space availableNo child processesNo data availableNo file space on serverNo locks availableNo matchNo medium foundNo message of desired typeNo more records in map databaseNo previous regular expressionNo record locks availableNo remote programs registered. -No route to hostNo space left on deviceNo such deviceNo such device or addressNo such file or directoryNo such key in mapNo such map in server's domainNo such processNon NIS+ namespace encounteredNon-recoverable failure in name resolutionNone. -Not a XENIX named type fileNot a data messageNot a directoryNot a name fileNot a stream deviceNot availableNot enough spaceNot foundNot found, no such nameNot master server for this domainNot ownerNot supportedNumber of Columns : %d -Number of objects : %u -Number of symbolic links encountered during path name traversal exceeds MAXSYMLINKSNumerical argument out of domainNumerical result out of rangeObject #%d: -Object Name : %s -Object Type : Object is remoteObject with same name existsOdd number of quotation marksOnly root is allowed to use this option!Operation already in progressOperation canceledOperation not applicableOperation not permittedOperation not supportedOperation not supported on transport endpointOperation now in progressOperation would blockOption not supported by protocolOut of stream resourcesOut of streams resourcesOutput control:Output selection:Owner : %s -PRIVATE -Package not installedParse error: %sPartial successPassed object is not the same object on serverPermission deniedPower failurePremature end of regular expressionPrint content of database file, one entry a linePrint current configuration statisticPrint more messagesPrint program versionProbable successProbably not foundProfiling timer expiredProtocol driver not attachedProtocol errorProtocol family not supportedProtocol not availableProtocol not supportedProtocol wrong type for socketQuery illegal for named tableQuitRFS specific errorRPC bad procedure for programRPC failure on NIS operationRPC program not availableRPC program version wrongRPC struct is badRPC version wrongRPC: (unknown error code)RPC: Authentication errorRPC: Can't decode resultRPC: Can't encode argumentsRPC: Failed (unspecified error)RPC: Incompatible versions of RPCRPC: Port mapper failureRPC: Procedure unavailableRPC: Program not registeredRPC: Program unavailableRPC: Program/version mismatchRPC: Remote system errorRPC: Server can't decode argumentsRPC: SuccessRPC: Timed outRPC: Unable to receiveRPC: Unable to sendRPC: Unknown hostRPC: Unknown protocolRSA (%d bits) -RTLD_NEXT used in code not dynamically loadedRead and display shared object profiling dataRead configuration data from NAMERead-only file systemReal-time signal %dRegular expression too bigRemote I/O errorRemote address changedRemove password or make file unreadable by others.Reopening shared object `%s' failedReplicate : -Report bugs to %s. -Report bugs using the `glibcbug' script to . -Request arguments badReserved for future useResolver Error 0 (no error)Resolver internal errorResource deadlock avoidedResource lostResource temporarily unavailableResult too largeResults sent to callback procSHOBJ [PROFDATA]SUNYPSearch Path : %s -Segmentation faultServer busy, try againServer out of memoryServer rejected credentialServer rejected verifierServname not supported for ai_socktypeSet the program nameShut the server downSignal 0Socket operation on non-socketSocket type not supportedSoftware caused connection abortSorry. You are not root -Source definitions are found in FILESrmount errorStack faultStale NFS file handleStart NUMBER threadsStatus : %s -StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Streams pipe errorStructure needs cleaningSuccessSuppress warnings and information messagesSymbolic character names defined in FILESystem errorSystem information:System resource allocation failureSystem's directory for character maps : %s - repertoire maps: %s - locale path : %s -%sTABLETABLE -TABLE,yesTable Type : %s -Temporary failure in name resolutionTerminatedText file busyThe following list contain all the coded character sets known. This does -not necessarily mean that all combinations of these names can be used for -the FROM and TO command line parameters. One coded character set can be -listed with several different names (aliases). - Some of the names are no plain strings but instead regular expressions and -they match a variety of names which can be given as parameters to the -program. - - Time to live : Timer expiredToo many attributesToo many levels of symbolic linksToo many linksToo many open filesToo many open files in systemToo many processesToo many references: cannot spliceToo many usersTrace/breakpoint trapTrailing backslashTranslator diedTransport endpoint is already connectedTransport endpoint is not connectedTry `%s --help' or `%s --usage' for more information. -Trying %s... -Type : %s -UNKNOWNUnable to authenticate NIS+ clientUnable to authenticate NIS+ serverUnable to create callbackUnable to create process on serverUnknown (type = %d, bits = %d) -Unknown .netrc keyword %sUnknown NIS error codeUnknown database: %s -Unknown errorUnknown error Unknown hostUnknown objectUnknown option: %s %s %sUnknown resolver errorUnknown server errorUnknown signal %dUnknown system errorUnknown ypbind errorUnmatched ( or \(Unmatched ) or \)Unmatched [ or [^Unmatched \{Unrecognized variable `%s'Urgent I/O conditionUsage:Usage: %s variable_name [pathname] -Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ] -Use separate cache for each userUser defined signal 1User defined signal 2Value too large for defined data typeVirtual timer expiredWild result from command executionWindow changedWrite names of available charmapsWrite names of available localesWrite names of selected categoriesWrite names of selected keywordsWrite output to file NAMEWritten by %s. -Wrong medium typeX500XCHSYPBINDPROC_DOMAIN: %s -Yes, 42 is the meaning of lifeYou really blew it this timeZone continuation line end time is not after end time of previous line[FILE...]__get_myaddress: ioctl (get interface configuration)`%1$s' definition does not end with `END %1$s'`%s' is no correct profile data file for `%s'`-1' must be last entry in `%s' field in `%s' category`...' must only be used in `...' and `UNDEFINED' entries`from' expected after first argument to `collating-element'`from' string in collation element declaration contains unknown characterai_family not supportedai_socktype not supportedalready runningargument to <%s> must be a single characterargument to `%s' must be a single characterauth_none.c - Fatal marshalling problemauthunix_create: out of memory -bad argumentbad ownerblank FROM field on Link lineblank TO field on Link lineblock freed twice -bogus mcheck_status, library is buggy -broadcast: ioctl (get interface configuration)broadcast: ioctl (get interface flags)buffer overflowcache_set: could not allocate new rpc_buffercache_set: victim alloc failedcache_set: victim not foundcan't determine time zone abbreviation to use just after until timecan't reassign procedure number %d -cannot `stat' locale file `%s'cannot allocate symbol datacannot create internal descriptorcannot create internal descriptorscannot enable socket to accept connections: %scannot find C preprocessor: %s -cannot find any C preprocessor (cpp) -cannot handle old request version %d; current version is %dcannot insert collation element `%.*s'cannot insert into result tablecannot insert new collating symbol definition: %scannot load profiling datacannot opencannot open `%s'cannot open database file `%s': %scannot open input file `%s'cannot open locale definition file `%s'cannot open output filecannot open output file `%s'cannot open output file `%s' for category `%s'cannot open socket: %scannot process order specificationcannot read character map directory `%s'cannot read configuration file; this is fatalcannot read from clientcannot read header from `%s'cannot read locale directory `%s'cannot read locale file `%s'cannot read repertoire map `%s'cannot read statistics datacannot stat() file `%s': %scannot write output files to `%s'cannot write result: %scannot write statistics: %scannot write to clientcategory data requested more than once: should not happencharacter '%s' in class `%s' must be in class `%s'character '%s' in class `%s' must not be in class `%s'character not defined in character mapcharacter L'%s' (index %Zd) in class `%s' must be in class `%s'character L'%s' (index %Zd) in class `%s' must not be in class `%s'character `%s' not defined while needed as default valuecharacter class `%s' already definedcharacter map `%s' already definedcharacter map file `%s' not foundclnt_raw.c - Fatal header serialization error.clnttcp_create: out of memory -clntudp_create: out of memory -clntunix_create: out of memory -collation element `%.*s' appears more than once: ignore linecollation symbol `%.*s' appears more than once: ignore linecollation symbol expected after `%s'connect to address %s: constant or identifier expectedconversion from `%s' to `%s' not supportedconversion stopped due to problem in writing the outputcouldn't create an rpc server -couldn't register prog %d vers %d -database [key ...]default character map file `%s' not founddirection flag in string %d in `era' field in category `%s' is not '+' nor '-'direction flag in string %d in `era' field in category `%s' is not a single characterduplicate character name `%s'duplicate collating element definitionduplicate definition for character `%.*s'duplicate keyduplicate set definitionduplicate zone name %s (file "%s", line %d)duplicated message identifierduplicated message numberempty char stringempty weight name: line ignoredenablecache: cache already enabledenablecache: could not allocate cacheenablecache: could not allocate cache dataenablecache: could not allocate cache fifoencoding for outputencoding of original textend point of ellipsis range is bigger then starterror getting callers id: %serror while closing input `%s'error while closing output fileerror while closing the profiling data fileerror while inserting collation element into hash tableerror while inserting to hash tableerror while reading the inputexpect string argument for `copy'expected continuation line not foundfailed to load shared object `%s'failed to load symbol datafailed to mmap the profiling data filefailed to start conversion processingfailure while writing data for category `%s'fcntl: F_SETFDfield `%s' in category `%s' undefinedfile `%s' already exists and may be overwritten -from-value of `collating-element' must be a stringfstat failedgarbage at end of character code specificationgarbage at end of numbergarbage at end of offset value in string %d in `era' field in category `%s'garbage at end of starting date in string %d in `era' field in category `%s'garbage at end of stopping date in string %d in `era' field in category `%s'generate call graphgenerate flat profile with counts and ticksget_myaddress: ioctl (get interface configuration)getent - get entries from administrative database.handle_request: request received (Version = %d)hard link failed, symbolic link usedhard linked somewhereillegal CORRECTION field on Leap lineillegal Rolling/Stationary field on Leap lineillegal character constant in stringillegal character in file: illegal collation elementillegal definitionillegal encoding givenillegal escape sequence at end of stringillegal input sequence at position %ldillegal names for character rangeillegal nettype :`%s' -illegal number for offset in string %d in `era' field in category `%s'illegal set numberillegal starting date in string %d in `era' field in category `%s'illegal stopping date in string %d in `era' field in category `%s'implementation limit: no more than %d character classes allowedimplementation limit: no more than %d character maps allowedincomplete character or shift sequence at end of bufferincorrectly formatted fileinput line of unknown typeinternal error (illegal descriptor)internal error - addtype called with bad isdstinternal error - addtype called with bad ttisgmtinternal error - addtype called with bad ttisstdinternal error in %s, line %uinvalid UTC offsetinvalid abbreviation formatinvalid day of monthinvalid ending yearinvalid leaping yearinvalid mode for dlopen()invalid month nameinvalid saved timeinvalid starting yearinvalid time of dayinvalid weekday namekey length in request too long: %Zdline after ellipsis must contain character definitionline before ellipsis does not contain definition for character constantline too longlist all known coded character setslocale file `%s', used in `copy' statement, not foundlstat failedmalformed line ignoredmapping of section header string table failedmapping of section headers failedmemory clobbered before allocated block -memory clobbered past end of allocated block -memory exhaustedmemory is consistent, library is buggy -missing era format in string %d in `era' field in category `%s'missing era name in string %d in `era' field in category `%s'nameless ruleneither original nor target encoding specifiednetname2user: (nis+ lookup): %s -netname2user: DES entry for %s in directory %s not uniquenetname2user: LOCAL entry for %s in directory %s not uniquenetname2user: missing group id list in `%s'.netname2user: principal name `%s' too longnetname2user: should not have uid 0never registered prog %d -no or value givenno correct regular expression for field `%s' in category `%s': %sno day in month matches ruleno definition of `UNDEFINED'no filename for profiling data given and shared object `%s' has no sonameno other keyword shall be specified when `copy' is usedno output file produced because warning were issuedno repertoire map specified: cannot proceedno symbolic name givenno symbolic name given for end of rangeno weight defined for symbol `%s'not regular filenscd configuration: - -%15d server debug level -nscd not running! -only WIDTH definitions are allowed to follow the CHARMAP definitionoriginal encoding not specified using `-f'output filepmap_getmaps rpc problempoll: protocol failure in circuit setup -preprocessor errorprint list of count paths and their number of useprint progress informationproblems while reading `%s'profiling data file `%s' does not match shared object `%s'program %lu is not available -program %lu version %lu is not available -program %lu version %lu ready and waiting -rcmd: poll (setting up stderr): %m -rcmd: socket: All ports in use -rcmd: write (setting up stderr): %m -registerrpc: out of memory -repeated leap second momentrepertoire map file `%s' not foundrpcgen: arglist coding error -rpcgen: too many defines -rpcinfo: %s is unknown host -rpcinfo: %s is unknown service -rpcinfo: Could not delete registration for prog %s version %s -rpcinfo: broadcast failed: %s -rpcinfo: can't contact portmappersame rule name in multiple filesshort read while reading request key: %sshort read while reading request: %sshort write in %s: %ssocket: protocol failure in circuit setup -sorting order `forward' and `backward' are mutually exclusivespecification of sorting weight for collation symbol does not make sensestandard inputstandard outputstarting date is illegal in string %d in `era' field in category `%s'starting year greater than ending yearstarting year too high to be representedstarting year too low to be representedstopping date is illegal in string %d in `era' field in category `%s'svc_run: - select failedsvc_tcp.c - cannot getsockname or listensvc_tcp.c - tcp socket creation problemsvc_tcp: makefd_xprt: out of memory -svc_unix.c - AF_UNIX socket creation problemsvc_unix.c - cannot getsockname or listensvc_unix: makefd_xprt: out of memory -svctcp_create: out of memory -svcudp_create - cannot getsocknamesvcudp_create: out of memory -svcudp_create: socket creation problemsvcunix_create: out of memory -symbol for multicharacter collating element `%.*s' duplicates element definitionsymbol for multicharacter collating element `%.*s' duplicates other symbol definitionsymbol for multicharacter collating element `%.*s' duplicates symbol definitionsymbol for multicharacter collating element `%.*s' duplicates symbolic name in charsetsyntax error in %s definition: %ssyntax error in `order_start' directivesyntax error in character class definitionsyntax error in character conversion definitionsyntax error in collating order definitionsyntax error in collation definitionsyntax error in definition of LC_CTYPE categorysyntax error in definition of new character classsyntax error in definition of new character mapsyntax error in message locale definitionsyntax error in monetary locale definitionsyntax error in numeric locale definitionsyntax error in order specificationsyntax error in prolog: %ssyntax error in repertoire map definition: %ssyntax error in time locale definitionsyntax error: not inside a locale definition sectiontarget encoding not specified using `-t'this is the first definitiontime before zerotime overflowtoo few bytes in character encodingtoo many bytes in character encodingtoo many character classes definedtoo many leap secondstoo many local time typestoo many transitions?!too many weightstoo many, or too long, time zone abbreviationstrailing garbage at end of linetrouble replying to prog %d -two lines in a row containing `...' are not allowedtyped single yearunable to allocate buffer for inputunable to free argumentsundefinedunknown character `%s'unknown character in field `%s' of category `%s'unknown collation directiveunknown directive `%s': line ignoredunknown iconv() error %dunknown set `%s'unknown symbol `%.*s': line ignoredunruly zoneunterminated messageunterminated stringunterminated string constantunterminated symbolic nameunterminated weight nameupper limit in range is not smaller then lower limitusage: %s infile -use of 2/29 in non leap-yearvalue for %s must be an integervalue for <%s> must lie between 1 and 4value for field `%s' in category `%s' must not be the empty stringvalue of must be greater than the value of value of field `int_curr_symbol' in category `LC_MONETARY' does not correspond to a valid name in ISO 4217value of field `int_curr_symbol' in category `LC_MONETARY' has wrong lengthvalues for field `%s' in category `%s' must be smaller than 127warning: while accepting connection: %swhile allocating cache entrywhile allocating hash table entrywhile allocating key copywhile opening old catalog filewhile preparing outputwhile reading databasewhile stat'ing profiling data filewhile writing database filewrite incompletewriteable by other than ownerwrong number of argumentswrong number of fields on Leap linewrong number of fields on Link linewrong number of fields on Rule linewrong number of fields on Zone continuation linewrong number of fields on Zone linexdr_reference: out of memory -xdrrec_create: out of memory -yp_update: cannot convert host to netname -yp_update: cannot get server address -Project-Id-Version: libc 2.1.3 -POT-Creation-Date: 2000-02-16 10:39-0800 -PO-Revision-Date: 2000-09-01 18:20:31+0000 -Last-Translator: Mavroyanopoulos Nikos -Language-Team: Greek -MIME-Version: 1.0 -Content-Type: text/plain; charset=iso-8859-7 -Content-Transfer-Encoding: 8bit - Éäéüôçôåò : ÊÝñâåñïò. -Äéêáéþìáôá ÐñïóðÝëáóçò : %s [-abkCLNTM][-Düíïìá[=ôéìÞ]] [-i ìÝãåèïò] [-I [-K äåõôåñüëåðôá]] [-Y ìïíïðÜôé] áñ÷åßï_åéóüäïõ - %s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o áñ÷åßï_åîüäïõ] [áñ÷åßï_åéóüäïõ] - %s [-n ôáõô.äéêôýïõ]* [-o áñ÷åßï_åîüäïõ] [áñ÷åßï_åéóüäïõ] - %s [-s åßäïò_äéêôýïõ]* [-o áñ÷åßï_åîüäïõ] [áñ÷åßï_åéóüäïõ] - Äéêáéþìáôá ðñïóðÝëáóçò: ÄåäïìÝíá åéóáãùãÞò ôïõ ôýðïõ %s - ¼íïìá : %s - Äçìüóéï Êëåéäß : Ôýðïò : %s - ÊáèïëéêÞ äéåýèõíóç (%u) - [%d] ¼íïìá : %s - [%u] - [%u byte] -%s ëáíèÜíïõóá ìíÞìç: - -%15s ç ëáíèÜíïõóá ìíÞìç åßíáé åíåñãïðïéçìÝíç -%15Zd óõíéóôþìåíï ìÝãåèïò -%15ld äåõôåñüëåðôá ÷ñüíïò æùÞò ãéá èåôéêÝò êáôá÷ùñÞóåéò -%15ld äåõôåñüëåðôá ÷ñüíïò æùÞò ãéá áñíçôéêÝò êáôá÷ùñÞóåéò -%15ld åðéôõ÷ßåò ëáíèÜíïõóáò ìíÞìçò óå èåôéêÝò êáôá÷ùñÞóåéò -%15ld åðéôõ÷ßåò ëáíèÜíïõóáò ìíÞìçò óå áñíçôéêÝò êáôá÷ùñÞóåéò -%15ld áðïôõ÷ßåò ëáíèÜíïõóáò ìíÞìçò óå èåôéêÝò êáôá÷ùñÞóåéò -%15ld áðïôõ÷ßåò ëáíèÜíïõóáò ìíÞìçò óå áñíçôéêÝò êáôá÷ùñÞóåéò -%15ld%% ðïóïóôü åðéôõ÷éþí ëáíèÜíïõóáò ìíÞìçò -%15s Ýëåã÷ïò ôïõ /etc/%s ôñïðïðïéÞóåéò - -ÌÝëç ÏìÜäáò : - -×ñüíïò ÆùÞò : rpcinfo -b 'áñéèì. ðñïãñÜììáôïò' 'áñéèì. Ýêäïóçò' - rpcinfo -d 'áñéèì. ðñïãñÜììáôïò' 'áñéèì. Ýêäïóçò' - rpcinfo -p [ óýóôçìá ] - rpcinfo [-n èýñá ] -t óýóôçìá 'áñéèì. ðñïãñÜììáôïò' ['áñéèì. Ýêäïóçò'] - ü÷é íáé ÌÞêïò ÄåäïìÝíùí = %u - ÑçôÜ ìÝëç: - ÑçôÜ ìç-ìÝëç: - Áõôïíüçôá ìÝëç: - Áõôïíüçôá ìç-ìÝëç: - ¶ññçôá ìÝëç - ÊáíÝíá ñçôü ìç-ìÝëïò - ÊáíÝíá áõôïíüçôï ìÝëïò - ÊáíÝíá áõôïíüçôï ìç-ìÝëïò - ÊáíÝíá áíáäñïìéêü ìÝëïò - ÊáíÝíá áíáäñïìéêü ìç-ìÝëïò - ÁíáäñïìéêÜ ìÝëç: - ðñüãñáììá åêä. ðñùôüêïëëï èýñá - Þ: (êáíüíáò áðü "%s", ãñáììÞ %d) [ÅÐÉËÏÃÇ...] Ýãéíå -"%s", ãñáììÞ %d: %s"Æþíç %s" ãñáììÞ êáé åðéëïãÞ -l åßíáé áìïéâáßùò áðïêëåéüìåíá"Æþíç %s" ãñáììÞ êáé åðéëïãÞ -p åßíáé áìïéâáßùò áðïêëåéüìåíááðáéôåßôáé "áñ÷åßï_åéóüäïõ" ãéá óçìáßåò äçìéïõñãçìÝíåò áðü ïäçãü. -%.*s: ç ðáñÜìåôñïò ARGP_HELP_FMT áðáéôåß ôéìÞ%.*s: ¶ãíùóôç ðáñÜìåôñïò ARGP_HELP_FMT%s óå áêáíüíéóôç æþíç%s%s%s:%u: %s%sÏ éó÷õñéóìüò %s' áðÝôõ÷å. -%s%s%s:%u: %s%sÌç áíáìåíüìåíï óöÜëìá: %s. -%s%s¶ãíùóôï óÞìá %d -%s: %d äåí ðñïóÞìáíå åêôåôáìÝíá óùóôÜ -%s: ðñÝðåé íá åßíáé ìåãáëýôåñï ôïõ -%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå êùäéêü åîüäïõ %d -%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d -%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß %s: %s -%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß ï êáôÜëïãïò %s: %s -%s: Äåí åßíáé äõíáôüí íá óõíäåèåß ôï %s ìå ôï %s: %s -%s: Äåí åßíáé äõíáôüí íá áíïé÷ôåß ôï %s: %s -%s: Äåí åßíáé äõíáôüí íá áöáéñåèåß ôï %s: %s -%s: Äå ìðïñåß íá äéáãñáöåß ôï %s: %s -%s: ÓöÜëìá êáôÜ ôï êëåßóéìï ôïõ %s: %s -%s: ÓöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ %s -%s: ÓöÜëìá åããñáöÞò %s: ÓöÜëìá êáôÜ ôçí åããñáöÞ ôïõ %s -%s: ÃñáììÞ áíáðÞäçóçò(leap) óôï áñ÷åßï ìç áíáðÞäçóçò äåõôåñïëÝðôùí %s -%s: Ç ìíÞìç åîáíôëÞèçêå: %s -%s: Ðåñéóóüôåñåò áðü ìßá -L åðéëïãÝò êáèïñßóôçêáí -%s: Ðåñéóóüôåñåò áðü ìßá -d åðéëïãÝò êáèïñßóôçêáí -%s: Ðåñéóóüôåñåò áðü ìßá -l åðéëïãÝò êáèïñßóôçêáí -%s: Ðåñéóóüôåñåò áðü ìßá -p åðéëïãÝò êáèïñßóôçêáí -%s: Ðåñéóóüôåñåò áðü ìßá -y åðéëïãÝò êáèïñßóôçêáí -%s: ÐÜñá ðïëëÜ ïñßóìáôá -%s: áäõíáìßá ëÞøçò ÷ñüíïõ ôñïðïðïßçóçò%s: ç åíôïëÞ Þôáí '%s', ôï áðïôÝëåóìá Þôáí %d -%s: ÓöÜëìá óôï ìç÷áíéóìü êáôÜóôáóçò%s: ìç áðïäåêôÞ åðéëïãÞ -- %c -%s: ìç Ýãêõñç åðéëïãÞ -- %c -%s: ç åðéëïãÞ `%c%s' äåí åðéôñÝðåé ðáñÜìåôñï -%s: ç åðéëïãÞ `%s' åßíáé äéöïñïýìåíç -%s: ç åðéëïãÞ `%s' áðáéôåß ìéá ðáñÜìåôñï -%s: ç åðéëïãÞ `--%s' äåí åðéôñÝðåé ðáñÜìåôñï -%s: ç åðéëïãÞ `-W %s' äåí åðéôñÝðåé ðáñÜìåôñï -%s: ç åðéëïãÞ `-W %s' åßíáé äéöïñïýìåíç -%s: ç åðéëïãÞ áðáéôåß ìéá ðáñÜìåôñï -- %c -%s: ç Ýîïäïò èá åðéêáëýøåé ôï %s -%s: ðáíéêüò: Ìç Ýãêõñç l_value %d -%s: ðñüùñï ôÝëïò áñ÷åßïõ%s: áäýíáôï ôï Üíïéãìá ôïõ %s: %m -%s: ìç áíáãíùñßóéìç åðéëïãÞ `%c%s' -%s: ìç áíáãíùñßóéìç åðéëïãÞ `--%s' -%s: ç ÷ñÞóç åßíáé %s [ -s ] [ -v ] [ -l ôïðéêÞ þñá ] [ -p posix êáíüíåò ] - [ -d êáôÜëïãïò ] [ -L äåõôåñüëåðôá áíáðÞäçóçò ] [ -y ôýðïò Ýôïõò ] [ áñ÷åßï ... ] -%s: ç ÷ñÞóç åßíáé %s [ -v ] [ -c äéáêïðÞ ] ïíïìáóßá æþíçò ... -%s: êáôÜ ôçí åããñáöÞ åîüäïõ %s: %m(ÓÖÁËÌÁ ÐÑÏÃÑÁÌÌÁÔÏÓ) Äåí åßíáé ãíùóôÞ ç Ýêäïóç!;(ÓÖÁËÌÁ ÐÑÏÃÑÁÌÌÁÔÏÓ) Ç åðéëïãÞ èá Ýðñåðå íá åß÷å áíáãíùñéóôåß!;(¶ãíùóôï áíôéêåßìåíï) -(Üãíùóôï óöÜëìá ðéóôïðïßçóçò - %d)(Üãíùóôï)*** Ôï áñ÷åßï `%s' åßíáé áðïãõìíùìÝíï: äåí åßíáé äõíáôÞ ëåðôïìåñÞò áíÜëõóç -*êáíïíéêÞ åßóïäïò*-o ÁÑ×ÅÉÏ-ÅÎÏÄÏÕ [ÁÑ×ÅÉÏ-ÅÉÓÏÄÏÕ]... -[ÁÑ×ÅÉÏ-ÅÎÏÄÏÕ [ÁÑ×ÅÉÏ-ÅÉÓÏÄÏÕ]...]Ôï ôìÞìá .lib óôï a.out åßíáé êáôåóôñáììÝíï; ìéêñÞ Ýêäïóç = %lu, ìåãÜëç Ýêäïóç = %lu; ãéáôß = Ôá <%s> êáé <%s> åßíáé ìç áðïäåêôÜ ïíüìáôá ãéá üñéïÏ ÷áñáêôÞñáò äåí ðñÝðåé íá åßíáé óôçí êëÜóç `%s'Ï ÷áñáêôÞñáò äåí åßíáé óôçí êëÜóç `%s'?ÁêõñþèçêåÄéêáéþìáôá ÐñïóðÝëáóçò :Ðñïóðåëáýíåôáé ìéá êáôåóôñáììÝíç äéáìïéñáæüìåíç âéâëéïèÞêçÇ äéåýèõíóç õðïäï÷Þò åßíáé Þäç óå ÷ñÞóçÄåí õðïóôçñßæåôáé ïéêïãÝíåéá äéåõèýíóåùí ãéá óýóôçìáÄåí õðïóôçñßæåôå áðü ôï ðñùôüêïëëï ç ïéêïãÝíåéá äéåõèýíóåùíÇ ïéêïãÝíåéá äéåõèýíóåùí äåí õðïóôçñßæåôáé áðü ôçí ïéêïãÝíåéá ðñùôïêüëëïõÓöÜëìá äéáöÞìéóçòÎõðíçôÞñéYðåñ÷åßëéóç ðßíáêá AnodeÇ ëßóôá ïñéóìÜôùí åßíáé õðåñâïëéêÜ ìåãÜëçÏ êáôÜëïãïò ôùí ðáñáìÝôñùí åßíáé ðïëý ìáêñýòÔï üñéìá åßíáé Ýîù áðü ôïí ôïìÝáÐñïóðÜèåéá äéáãñáöÞò ìç-êåíïý ðßíáêáÐñïóðÜèåéá äéáóýíäåóçò ðåñéóóüôåñùí äéáìïéñáæïìÝíùí âéâëéïèçêþí áðü ôï üñéï ôïõ óõóôÞìáôïò.ÐñïóðÜèåéá óýíäåóçò óå ðÜñá ðïëëÝò äéáìïéñáæüìåíåò âéâëéïèÞêåòÐéóôïðïßçóç åíôÜîåéÓöÜëìá ðéóôïðïßçóçòÐËÁÓÔÏ ÁÍÔÉÊÅÉÌÅÍÏ -ÅóöáëìÝíç äéåýèõíóçÅóöáëìÝíïò ðåñéãñáöÝáò áíôáëëáãÞòÅóöáëìÝíïò ðåñéãñáöÝáò áñ÷åßïõÅóöáëìÝíïò áñéèìüò áñ÷åßïõÅóöáëìÝíç äéáìüñöùóç áñ÷åßïõ ãñáììáôïóåéñÜòÅóöáëìÝíï ìÞíõìáÅóöáëìÝíïò êþäéêáò áßôçóçòÅóöáëìÝíïò ðåñéãñáöÝáò áßôçóçòÅóöáëìÝíç êëÞóç óõóôÞìáôïòÁêáôÜëëçëç ôéìÞ óôï ai_flagsÁõóôçñÞ óõììüñöùóç ìå POSIXÄõáäéêÜ äåäïìÝíá -Áðáéôåßôáé óõóêåõÞ ìðëïêÐñüâëçìá óôçí åêëïãÞ åêðïìðÞòÄéáêïðåßóá óùëÞíùóçÓöÜëìá óôïí äßáõëï(bus)CDSÎåðåñÜóôçêå ôï üñéï ÷ñüíïõ ôçò CPUÔá ðåñéå÷üìåíá ôçò ëáíèÜíïõóáò ìíÞìçò ÝëçîáíÄåí åßíáé äõíáôÞ ç ðñïóðÝëáóç ìéáò áíáãêáßáò äéáìïéñáæüìåíçò âéâëéïèÞêçòÄåí åßíáé äõíáôÞ ç Üìåóç åêôÝëåóç äéáìïéñáæüìåíçò âéâëéïèÞêçòÄåí åßíáé äõíáôÞ ç äÝóìåõóç ìå ôïí äéáêïìéóôÞ ðïõ åîõðçñåôåß áõôüí ôïí ôïìÝáÄåí åßíáé äõíáôÞ ç åðéêïéíùíßá ìå ôï portmapperÄåí åßíáé äõíáôÞ ç åðéêïéíùíßá ìå ôï ypbindÄåí åßíáé äõíáôÞ ç åðéêïéíùíßá ìå ôï ypservÄåí åßíáé äõíáôü íá äåóìåõôåß ìíÞìçÄåí åßíáé äõíáôÞ ç åê÷þñçóç ôçò æçôçèÞóáò äéåýèõíóçòÄåí åßíáé äõíáôÞ ç äçìéïõñãßá õðïäï÷Þò ãéá åêðïìðÞ rpcÄåí åßíáé äõíáôÞ ç Üìåóç åêôÝëåóç äéáìïéñáæüìåíçò âéâëéïèÞêçòÄå ìðïñåß íá õðÜñ÷ïõí ðåñéóóüôåñåò áðü ìéá óçìáßåò äçìéïõñãßáò áñ÷åßïõ! -Äåí åßíáé äõíáôÞ ç ëÞøç áðáíôÞóåùí óôçí åêðïìðÞÄåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáòÄåí åßíáé äõíáôÞ ç áðïóôïëÞ ìåôÜ ôï êëåßóéìï ôçò õðïäï÷ÞòÄåí åßíáé äõíáôÞ ç áðïóôïëÞ ìåôÜ ôï êëåßóéìï ôçò ìéáò Üêñçò åðéêïéíùíßáòÄåí åßíáé äõíáôÞ ç áðïóôïëÞ ðáêÝôïõ åêðïìðÞòÄåí åßíáé äõíáôÞ ç èÝôçóç ôçò åðéëïãÞò õðïäï÷Þò SO_BROADCASTÄåí åßíáé äõíáôüò ï êáèïñéóìüò ðåñéóóïôÝñùí ôïõ åíüò áñ÷åßùí åéóüäïõ! -Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèåß óçìáßá ôáõô.äéêôýïõ ìå óçìáßá äéêôýïõ! -Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèåß óçìáßá ôáõô.äéêôýïõ ÷ùñßò TIRPC! -Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèïýí óçìáßåò ìå ôï íÝï óôõë! -Ï áñéèìüò ôùí êáíáëéþí åßíáé Ýîù áðü ôá üñéáÄéá÷ùñéóôÞò ×áñáêôÞñùí : %c -Ç èõãáôñéêÞ äéåñãáóßá ôåñìáôßóôçêåÔá äéáðéóôåõôÞñéá ôïõ åîõðçñåôïýìåíïõ åßíáé ðïëý áäýíáìáÓôÞëåò : -ÓöÜëìá åðéêïéíùíßáò êáôÜ ôçí áðïóôïëÞÌåôáãëùôôéóìüò ðñïäéáãñáöþí ôïðéêþí ñõèìßóåùíÏ õðïëïãéóôÞò ðÞãå ãéá âñïýâåòÕðïëïãéóìüò ìåãÝèïõò ðßíáêá ãéá êëÜóåéò ÷áñáêôÞñùí, ìðïñåß íá -êáèõóôåñÞóåé ëßãï...Õðïëïãéóìüò ìåãÝèïõò ðßíáêá ãéá ôéò ðëçñïöïñßåò ðáñáâïëÞò, ìðïñåß íá -êáèõóôåñÞóåé ëßãï...Áðüññéøç óýíäåóçòÇ óýíäåóç Ýêëåéóå áðü ôï ôáßñéËÞîç óýíäåóçòÓõíå÷ßæåôáéÌåôáôñïðÞ ôçò êùäéêïðïßçóçò äïèÝíôùí áñ÷åßùí áðü ìéá êùäéêïðïßçóç óå Üëëç.ÌåôáôñïðÞ êëåéäéïý óå ðåæÜCopyright (C) %s Free Software Foundation, Inc. -Áõôü åßíáé åëåýèåñï ëïãéóìéêüÒ äåßôå ôïí ðçãáßï êþäéêá ãéá üñïõò áíôéãñáöÞò. -ÄÅÍ õðÜñ÷åé åããýçóçÒ ïýôå áêüìç ãéá ËÅÉÔÏÕÑÃIÊÏÔÇÔÁÓ Þ ÊÁÔÁËËÇËÏÔÇÔÁ ÃÉÁ -ÊÁÐÏÉÏ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ. -Áäýíáôç ç äçìéïõñãßá áñ÷åßïõ êáôáãñáöþí "%s"Äçìéïõñãßá ÏÍÏÌÁÔÏÓ áñ÷åßïõ êåöáëßäáò C ìå ïñéóìïýò óõìâüëùíÄçìéïõñãßá åîüäïõ áêüìá êáé áí åêäüèçêáí ðñïåéäïðïéÞóåéòÄçìéïõñãßá áðëÞò âÜóçò ÂÄ áðü åéóáãùãÞ êåéìÝíïõ.×ñüíïò Äçìéïõñãßáò : %sÓýíäåóìïò ìåôáîý óõóêåõþíÇ êáôá÷þñçóç DES ãéá ôï üíïìá äéêôýïõ %s äåí åßíáé ìïíáäéêÞ -ÊÁÔÁËÏÃÏÓ -DNANSDNSÇ âÜóç äåäïìÝíùí ãéá ôï ðßíáêá äåí õðÜñ÷åéÇ âÜóç äåäïìÝíùí åßíáé áðáó÷ïëçìÝíçÁíé÷íåýôçêå/áðïöåý÷èçêå êáôÜóôáóç áäéåîüäïõÅî ïñéóìïý äéêáéþìáôá ÐñïóðÝëáóçò : -Áðáéôåßôáé äéåýèõíóç ðñïïñéóìïýÇ óõóêåõÞ åßíáé áðáó÷ïëçìÝíçÇ óõóêåõÞ äåí åßíáé ñïÞòÇ óõóêåõÞ äåí Ý÷åé äéáìïñöùèåßÓõóêåõÞ Þ ðüñïé åßíáé áðáó÷ïëçìÝíïéDiffie-Hellmann (%d bit) -ÊáôÜëïãïò : %s -Ï êáôÜëïãïò äåí åßíáé êåíüòÎåðåñÜóôçêå ôï üñéï ÷ñÞóçò óôï äßóêïÎåðåñÜóôçêå ôï üñéï ÷ñÞóçò äßóêïõÍá ìç ãßíåé äéêñÜíùóç êáé åìöÜíéóç ìçíõìÜôùí óôï ôñÝ÷ïí ttyÍá ìç åìöáíßæïíôáé ìçíýìáôá êáôÜ ôçí êáôáóêåõÞ ôçò âÜóçò äåäïìÝíùíÍá ìç ÷ñçóéìïðïéçèåß ï õðÜñ÷ïí êáôÜëïãïò, ðñïêÜëåóå íÝï áñ÷åßï åîüäïõÏ ôïìÝáò äåí âñÝèçêåEMT ðáãßäáÊÁÔÁ×ÙÑÇÓÇ -ÊñõðôïãñáöçìÝíá äåäïìÝíá -Êáêïóõíôáßñéáóìá ôýðùí êáôá÷þñçóçò/ðßíáêáËÜèïò 0ËÜèïò 100ËÜèïò 101ËÜèïò 102ËÜèïò 103ËÜèïò 104ËÜèïò 105ËÜèïò 106ËÜèïò 107ËÜèïò 108ËÜèïò 109ËÜèïò 110ËÜèïò 111ËÜèïò 112ËÜèïò 113ËÜèïò 114ËÜèïò 115ËÜèïò 116ËÜèïò 117ËÜèïò 118ËÜèïò 119ËÜèïò 136ËÜèïò 142ËÜèïò 58ËÜèïò 59ËÜèïò 72ËÜèïò 73ËÜèïò 75ËÜèïò 76ËÜèïò 91ËÜèïò 92ÓöÜëìá óôï õðïóýóôçìá RPCÓöÜëìá óôçí ðñïóðÝëáóç áñ÷åßïõ øõ÷ñÞò åêêßíçóçò ôïõ NIS+. Åßíáé ôï NIS+ åãêáôåóôçìÝíï;ÓöÜëìá óå Üãíùóôï óýóôçìá óöáëìÜôùí: ÓöÜëìá óôçí åðéêïéíùíßá ìå äéáäéêáóßá áíÜäñáóçòÓöÜëìá: Ôï .netrc áñ÷åßï åßíáé áíáãíþóéìï áðü Üëëïõò.ÁíôáëëáãÞ ðëÞñçòÓöÜëìá óôç äéáìüñöùóç ôïõ åêôåëÝóéìïõÌÏÉÑÁÉÏ: ôï óýóôçìá äåí ïñßæåé ôï `_POSIX2_LOCALEDEF'ÁÑ×ÅÉÏÔï ÁÑ×ÅÉÏ ðåñéÝ÷åé áíôéóôïé÷ßóåéò áðü óõìâïëéêÜ ïíüìáôá óå ôéìÝò UCS4Áðïôõ÷ßá (ìç êáèïñéóìÝíï óöÜëìá)Ï ðåñéãñáöÝáò áñ÷åßïõ óå êáêÞ êáôÜóôáóçÔï áñ÷åßï õðÜñ÷åéÁäéÝîïäï óôï êëåßäùìá áñ÷åßïõÔï êëåßäùìá áñ÷åßïõ êáôÝëçîå óå óöÜëìá áäéåîüäïõÐïëý ìåãÜëï üíïìá áñ÷åßïõÎåðåñÜóôçêå ôï üñéï ìåãÝèïõò áñ÷åßïõÕðåñ÷åßëéóç ðßíáêá áñ÷åßïõÐïëý ìåãÜëï áñ÷åßïÇ ðñþôç/åðüìåíç áëõóßäá ÝóðáóåÅîáßñåóç êéíçôÞò õðïäéáóôïëÞòÁðáéôÞôáé ðëÞñçò åðáíáóõí÷ñïíéóìüò ãéá ôï êáôÜëïãïÇ ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåßÏÌÁÄÁ -Óêïõðßäéá óôï ARGP_HELP_FMT: %sÄçìéïõñãßá êáôáëüãïõ ìçíõìÜôùí.\vÁí ôï ÁÑ×ÅÉÏ-ÅÉÓÏÄÏÕ åßíáé -, áíÜãíùóç áðü ôçí êáíïíéêÞ åßóïäï. Áí -ôï ÁÑ×ÅÉÏ-ÅÎÏÄÏÕ åßíáé -, ôüôå ç Ýîïäïò óôÝëíåôáé óôçí êáíïíéêÞ Ýîïäï. -Ãåíéêü óöÜëìá óõóôÞìáôïòËÞøç ðëçñïöïñéþí ôïðéêþí ñõèìßóåùí.Íá äùèåß óýíôïìï ìÞíõìá ÷ñÞóçòÍá äïèåß áõôÞ ç ëßóôá âïÞèåéáòÁäéêáéïëüãçôï ëÜèïòÏìÜäá : %s -Óçìáßåò ÏìÜäáò :Êáôá÷þñçóç ïìÜäáò ãéá ôçí ïìÜäá "%s.%s": -ÁíáìïíÞ ãéá ÄÅÕÔ. äåõôåñüëåðôá (åî ïñéóìïý 3600)ÊëåßóéìïÄå âñÝèçêå ôï "%d" óôçí ëáíèÜíïõóá ìíÞìç ïìÜäáò!Äå âñÝèçêå ôï "%d" óôçí ëáíèÜíïõóá ìíÞìç êùäéêþí!Äå âñÝèçêå ôï "%s" óôçí ëáíèÜíïõóá ìíÞìç ïìÜäáò!Äå âñÝèçêå ôï "%s" óôçí ëáíèÜíïõóá ìíÞìç óõóôçìÜôùí!Äå âñÝèçêå ôï "%s" óôçí ëáíèÜíïõóá ìíÞìç êùäéêþí!Ôï óýóôçìá äå ëåéôïõñãåßÁðïôõ÷ßá áíáæÞôçóçò ïíüìáôïò óõóôÞìáôïòÓöÜëìá åéóüäïõ/åîüäïõÄõíáôÞ ç åßóïäïò/ÝîïäïòÁÑ×ÅÉÏ-ÅÉÓÏÄÏÕ ÁÑ×ÅÉÏ-ÅÎÏÄÏÕ --o ÁÑ×ÅÉÏ-ÅÎÏÄÏÕ ÁÑ×ÅÉÏ-ÅÉÓÏÄÏÕ --u ÁÑ×ÅÉÏ-ÅÉÓÏÄÏÕIOT ðáãßäáIVYÐñïóäéïñéóôÞò áöáéñÝèçêåÁêáôÜëëçëç áêïëïõèßá byteÁêáôÜëëçëç åíôïëÞÁêáôÜëëçëï åßäïò áíôéêåéìÝíïõ ãéá ôç ëåéôïõñãßáÐáñÜíïìç áíáæÞôçóçÁêáôÜëëçëï åßäïò áñ÷åßïõ Þ äéáìüñöùóçòÁêáôÜëëçëï ioctl ãéá óõóêåõÞÁêáôÜëëçëç ëåéôïõñãßá ãéá äéåñãáóßá ðáñáóêçíßïõÁßôçóç ðëçñïöïñßáòÐëçñïöïñßá:Áñ÷åßá Åéóüäïõ:Êáèïñéóìüò ìïñöÞò Åéóüäïõ/Åîüäïõ:ÓöÜëìá åéóüäïõ/åîüäïõÅóùôåñéêü óöÜëìá NISÅóùôåñéêü óöÜëìá ypbindÄéáêïðÞÄéáêïðåßóá êëÞóç óõóôÞìáôïòÇ äéáêïðåßóá êëÞóç óõóôÞìáôïò èá ðñÝðåé íá åðáíáêéíçèåßÌç Ýãêõñç ðáñÜìåôñïòÌç Ýãêõñç ðéóù-ðáñáðïìðÞÌç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçòÌç Ýãêõñï äéáðéóôåõôÞñéï åîõðçñåôïýìåíïõÌç Ýãêõñïò åîáêñéâùôÞò(verifier) åîõðçñåôïýìåíïõÌç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞòÌç Ýãêõñï ðåñéå÷üìåíï ôùí \{\}Ìç Ýãêõñïò óýíäåóìïò ìåôáîý óõóêåõþíÌç Ýãêõñç áíôáëëáãÞÌç Ýãêõñï áíôéêåßìåíï ãéá ëåéôïõñãßáÌç Ýãêõñï Þ áóõìðëÞñùôï multibyte Þ ðëáôýò ÷áñáêôÞñáòÌç Ýãêõñç ðñïðïñåõüìåíç êáíïíéêÞ ÝêöñáóçÌç Ýãêõñï ôÝëïò ðåäßïõÌç Ýãêõñç êáíïíéêÞ ÝêöñáóçÌç Ýãêõñïò êþäéêáò áßôçóçòÌç Ýãêõñïò ðåñéãñáöÝáò áßôçóçòÌç Ýãêõñïò åîáêñéâùôÞò(verifier) äéáêïìéóôÞÌç Ýãêõñç ïðÞÁêýñùóç ôùí ðåñéå÷ïìÝíùí ôçò óõãêåêñéìÝíçò ëáíèÜíïõóáò ìíÞìçòÅßíáé êáôÜëïãïòÅßíáé Ýíá üíïìá áñ÷åßïõÅßíáé Ýíá åðþíõìï åßäïò áñ÷åßïõÊÝñâåñïò. -ÓêïôþèçêåÓÕÍÄÅÓÌÏÓ -Ç ÔÏÐÉÊÇ êáôá÷þñçóç ãéá ôçí ÔÁÕÔ. %d óôï êáôÜëïãï %s äåí åßíáé ìïíáäéêÞ -Åðßðåäï 2 óôáìÜôçóåÅðßðåäï 2 äåí óõã÷ñïíßóôçêåÅðßðåäï 3 óôáìÜôçóåÅðßðåäï 3 åðáíáöÝñèçêåÏ óýíäåóìïò ÝóðáóåÏ áñéèìüò óýíäåóìïõ åßíáé Ýîù áðü ôï üñéïÓýíäåóç óçìåßùí óå ìç áðïäåêôü üíïìáÔýðïò ÓõíäåäåìÝíïõ ÁíôéêåéìÝíïõ : ÓõíäåäåìÝíï ìå : %s -Äåí Ý÷åé ïñéóôåß ôï üíïìá ôïðéêïý ôïìÝáÁðïôõ÷ßá äÝóìåõóçò ôïðéêþí ðüñùíÔï ìç÷Üíçìá äåí åßíáé óôï äßêôõïÊáêïäéáìïñöùìÝíï üíïìá Þ áêáôÜëëçëï üíïìáÕðï÷ñåùôéêÜ Þ ðñïáéñåôéêÜ ïñßóìáôá óå ìáêñÝò åðéëïãÝò åßíáé åðßóçò õðï÷ñåùôéêÜ Þ ðñïáéñåôéêÜ óå êÜèå áíôßóôïé÷åò óýíôïìåò åðéëïãÝò.Êýñéïò ÅîõðçñåôçôÞò : -Ï êýñéïò åîõðçñåôçôÞò åßíáé áðáó÷ïëçìÝíïò, ç ðëÞñçò áðïôýðùóç èá åðáíáäñïìïëïãçèåß.Áðïôõ÷ßá äÝóìåõóçò ìíÞìçòÇ ìíÞìç åîáíôëÞèçêåÏé ðßíáêåò ìçíõìÜôùí åßíáé ðëÞñåéòÕðåñâïëéêÜ ìåãÜëï ìÞíõìáÅëëéðÞò Þ êáêïó÷çìáôéóìÝíç éäéüôçôá×ñüíïò Ôñïð. : %sÇ ôñïðïðïßçóç áðÝôõ÷åÇ ëåéôïõñãßá ôñïðïðïßçóçò áðÝôõ÷åÌïñöÞ åîüäïõ ôñïðïðïßçóçò:ÐñïóðÜèåéá multihopÏÍÏÌÁÏÍÏÌÁ -[-a|-m]NISÁíáíôéóôïé÷ßá Ýêäïóçò åîõðçñÝôç/åîõðçñåôïýìåíïõ NIS - äåí ðáñÝ÷åôáé -ç õðçñåóßáÇ âÜóç äåäïìÝíùí ÷Üñôç NIS åßíáé áêáôÜëëçëçÇ ëåéôïõñãßá NIS+ áðÝôõ÷åÏé åîõðçñåôçôÝò NIS+ äåí åßíáé ðñïóðåëÜóéìïéÇ õðçñåóßá NIS+ äåí åßíáé äéáèÝóéìç Þ äåí Ý÷åé åãêáôáóôáèåßÊÁÍÅÍÁ ÁÍÔÉÊÅÉÌÅÍÏ -ÁÑÉÈÌÏÓ¼íïìá : `%s' -ËáíèÜíïõóá Õðçñåóßá ÅîõðçñÝôçóçò Áíôéóôïé÷éþí ÏíïìÜôùí.Ôï üíïìá áõôü äå ðñïóöÝñåôáé áðü áõôüí ôï åîõðçñåôçôÞÔï üíïìá äåí åßíáé ìïíáäéêü óôï äßêôõïÔï üíïìá Þ ç õðçñåóßá äåí åßíáé ãíùóôܼíïìá/êáôá÷þñçóç äåí åßíáé ìïíáäéêÞÔï åðþíõìï áíôéêåßìåíï äåí åßíáé áíáæçôÞóéìï×ñåéÜæåôáé ðéóôïðïéçôÞòÔï äßêôõï Ýñéîå ôçí óýíäåóç ëüãù áñ÷éêïðïßçóçòÔï äßêôõï Ýñéîå ôçí óýíäåóç êáôÜ ôçí åðáíáöïñÜÔï äßêôõï äå ëåéôïõñãåßÔï äßêôõï äåí åßíáé ðñïóðåëÜóéìïÄåí åßíáé äéáèÝóéìç ç CSI äïìÞ(structure)Äåí åßíáé äéáèÝóéìïé ïé XENIX óçìáöüñïéÊáìéÜ äéåýèõíóç äå óõíäÝåôáé ìå ôï üíïìá óõóôÞìáôïòÊáìéÜ äéåýèõíóç äåí óõíäÝåôáé ìå ôï üíïìáÊáíÝíá anodeÄåí õðÜñ÷åé äéáèÝóéìïò ÷þñïò åíôáìßåõóçòÊáìéÜ èõãáôñéêÞ äéåñãáóßáÄåí õðÜñ÷ïõí äéáèÝóéìá äåäïìÝíáÄåí õðÜñ÷åé åëåýèåñïò ÷þñïò óôïí åîõðçñåôçôÞÄåí õðÜñ÷ïõí äéáèÝóéìá êëåéäþìáôáÊáíÝíá ôáßñéáóìáÄåí âñÝèçêå ìÝóïÊáíÝíá ìÞíõìá åðéèõìçôïý ôýðïõÄåí õðÜñ÷ïõí Üëëåò êáôá÷ùñßóåéò óôï ÷Üñôç ôçò âÜóçò äåäïìÝíùíÄåí õðÜñ÷åé ðñïçãïýìåíç êáíïíéêÞ ÝêöñáóçÄåí õðÜñ÷ïõí äéáèÝóéìá êëåéäþìáôá åããñáöþíÊáíÝíá áðïìáêñõóìÝíï ðñüãñáììá äåí äçëþèçêå. -Äåí õðÜñ÷åé äéáäñïìÞ óôï óýóôçìáÄåí Ýìåéíå êáèüëïõ ÷þñïò óôç óõóêåõÞÄåí õðÜñ÷åé ôÝôïéá óõóêåõÞÄåí õðÜñ÷åé ôÝôïéá óõóêåõÞ Þ äéåýèõíóçÄåí õðÜñ÷åé ôÝôïéï áñ÷åßï Þ êáôÜëïãïòÄåí õðÜñ÷åé ôÝôïéï êëåéäß óôï ÷ÜñôçÄåí õðÜñ÷åé ôÝôïéïò ÷Üñôçò óôïí ôïìÝá ôïõ äéáêïìéóôÞÄåí õðÜñ÷åé ôÝôïéá äéåñãáóßáÄå âñÝèçêáí ÷þñïé ïíïìÜôùí NIS+Ìç-áðïêáôáóôÞóéìï óöÜëìá êáôÜ ôçí áíÜëõóç ïíüìáôïòÊáíÝíá. -Äåí åßíáé XENIX ôýðïò åðþíõìïõ áñ÷åßïõÄåí åßíáé ìÞíõìá äåäïìÝíùíÄåí åßíáé êáôÜëïãïòÄåí åßíáé åðþíõìï áñ÷åßïÄåí åßíáé óõóêåõÞ ñïÞòÄåí åßíáé äéáèÝóéìïÄåí õðÜñ÷åé áñêåôüò ÷þñïòÄå âñÝèçêåÄå âñÝèçêå, êáíÝíá ôÝôïéï üíïìáÄåí õðÜñ÷åé êýñéïò åîõðçñåôçôÞò ãéá áõôüí ôïí ôïìÝáÄåí åßíáé éäéïêôÞôçòÄåí õðïóôçñßæåôáéÁñéèìüò Óôçëþí :%d -Áñéèìüò áíôéêåéìÝíùí: %u -Ï áñéèìüò óõìâïëéêþí óõíäÝóìùí ðïõ âñÝèçêáí óôç äéÜó÷éóç ìïíïðáôéïý õðåñâáßíåé ôï MAXSYMLINKSÁñéèìçôéêÞ ðáñÜìåôñïò Ýîù áðü ôïí ôïìÝáÔï áñéèìçôéêü áðïôÝëåóìá åßíáé Ýîù áðü ôï ðåäßïÁíôéêåßìåíï #%d: -¼íïìá ÁíôéêåéìÝíïõ : %s -Ôýðïò ÁíôéêåéìÝíïõ :Ôï áíôéêåßìåíï åßíáé áðïìáêñõóìÝíïÕðÜñ÷åé áíôéêåßìåíï ìå ôï ßäéï üíïìáÐåñéôôüò áñéèìüò åéóáãùãéêþíÌüíï ï äéá÷åéñéóôÞò åðéôñÝðåôå íá ÷ñçóéìïðïéÞóåé áõôÞí ôçí åðéëïãÞ!Ç ëåéôïõñãßá åêôåëåßôáé ÞäçÇ ëåéôïõñãßá áêõñþèçêåÇ ëåéôïõñãßá äåí åßíáé åöáñìüóéìçÇ ëåéôïõñãßá äåí åðéôñÝðåôáéÇ ëåéôïõñãßá äåí õðïóôçñßæåôáéÇ ëåéôïõñãßá äåí õðïóôçñßæåôáé óôçí Üëëç Üêñç ôçò ìåôáöïñÜò äåäïìÝíùíÇ ëåéôïõñãßá âñßóêåôáé ôþñá óå åêôÝëåóçÇ ëåéôïõñãßá èá Ýðñåðå íá öñÜîåé(block)Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé áðü ôï ðñùôüêïëëïÄåí áðïìåßíáí ðüñïé ñïÞò(stream)Äåí áðïìåßíáí ðüñïé ñïÞò(streams)¸ëåã÷ïò åîüäïõ:ÅðéëïãÞ åîüäïõ:ÉäéïêôÞôçò : %s -ÉÄÉÙÔÉÊÏ -Ôï ðáêÝôï äåí åãêáôáóôÜèçêåÓöÜëìá åðåîåñãáóßáò: %sÌåñéêÞ åðéôõ÷ßáÔï ðåñáóìÝíï áíôéêåßìåíï äåí åßíáé ôï ßäéï áíôéêåßìåíï óôïí åîõðçñåôçôÞ¶ñíçóç ðñüóâáóçòÁðïôõ÷ßá ôñïöïäïóßáòÐñüùñï ôÝëïò ôçò êáíïíéêÞò ÝêöñáóçòÅìöÜíéóç ôïõ ðåñéå÷ïìÝíïõ ôïõ áñ÷åßïõ âÜóçò, ìéá êáôá÷þñçóç ôç öïñÜÅìöÜíéóç óôáôéóôéêþí ôùí ôñå÷ïõóþí ñõèìßóåùíÅìöÜíéóç ðåñéóóüôåñùí ìçíõìÜôùíÅìöÜíéóç Ýêäïóçò ðñïãñÜììáôïòÐéèáíÞ åðéôõ÷ßáÐéèáíüí äå âñÝèçêåÏ ÷ñïíïìåôñçôÞò âåëôéóôïðïßçóçò ÝëçîåÏ ïäçãüò ðñùôïêüëëïõ äåí Ý÷åé ðñïóêïëëçèåßÓöÜëìá ðñùôïêüëëïõÇ ïéêïãÝíåéá ðñùôïêüëëïõ äåí õðïóôçñßæåôáéÄåí åßíáé äéáèÝóéìï ôï ðñùôüêïëëïÔï ðñùôüêïëëï äåí õðïóôçñßæåôáéËÜèïò ôýðïò ðñùôïêüëïõ ãéá ôçí õðïäï÷Þ(socket)Ìç áðïäåêôÞ áíáæÞôçóç ãéá ôï äïèÝíôá ðßíáêá¸îïäïòÓõãêåêñéìÝíï ìå RFS óöÜëìáRPC êáêÞ äéáäéêáóßá ãéá ðñüãñáììáÁðïôõ÷ßá RPC óå ëåéôïõñãßá ôïõ NISÔï ðñüãñáììá RPC äåí åßíáé äéáèÝóéìïÇ Ýêäïóç ôïõ RPC ðñïãñÜììáôïò äåí åßíáé óùóôÞÇ RPC äïìÞ äåí åßíáé óùóôÞÇ Ýêäïóç ôïõ RPC äåí åßíáé óùóôÞRPC: (Üãíùóôïò êùäéêüò óöÜëìáôïò)RPC: ÓöÜëìá ðéóôïðïßçóçòRPC: Äåí åßíáé äõíáôüí íá áðïêùäéêïðïéçèåß ôï áðïôÝëåóìáRPC: Äåí åßíáé äõíáôüí íá êùäéêïðïéçèïýí ïé ðáñÜìåôñïéRPC: Áðïôõ÷ßá (ìç êáèïñéóìÝíï óöÜëìá)RPC: Ìç óõìâáôÝò åêäüóåéò ôïõ RPCRPC: Áðïôõ÷ßá áíôéóôïé÷Ýá èõñþíRPC: Ìç äéáèÝóéìç äéáäéêáóßáRPC: Ôï ðñüãñáììá äåí Ý÷åé êáôá÷ùñçèåßRPC: Ìç äéáèÝóéìï ðñüãñáììáRPC: Áíáíôéóôïé÷åßá ðñüãñáììáôïò/ÝêäïóçòRPC: ÓöÜëìá áðïìáêñõíóìÝíïõ óõóôÞìáôïòRPC: Ï äéáêïìéóôÞò äåí ìðïñåß íá áðïêùäéêïðïéÞóåé ôéò ðáñáìÝôñïõòRPC: Åðéôõ÷ßáRPC: ËÞîç ÷ñüíïõRPC: Áäõíáìßá ëÞøçòRPC: Áäõíáìßá áðïóôïëÞòRPC: ¶ãíùóôï üíïìá óõóôÞìáôïòRPC: ¶ãíùóôï ðñùôüêïëïRSA (%d bit) -Ôï RTLD_NEXT ðïõ ÷ñçóéìïðïéåßôáé óôïí êþäéêá äåí öïñôþèçêå äõíáìéêÜÁíÜãíùóç êáé åìöÜíéóç äåäïìÝíùí ðñïößë äéáìïéñáæüìåíïõ áíôéêåéìÝíïõÁíÜãíùóç äåäïìÝíùí ñýèìéóçò áðü ôï ÏÍÏÌÁÁíáãíþóéìï-ìüíï óýóôçìá áñ÷åßùíÓÞìá ðñáãìáôéêïý-÷ñüíïõ %dÐïëý ìåãÜëç êáíïíéêÞ ÝêöñáóçÁðïìáêñõóìÝíï óöÜëìá åéóüäïõ/åîüäïõÇ áðïìáêñõóìÝíç äéåýèõíóç ÜëëáîåÁðïìáêñýíåôå ôï óõíèçìáôéêü Þ êÜíôå ôï áñ÷åßï ìç-áíáãíþóéìï áðü ôïõò Üëëïõò.Áðïôõ÷ßá áíïßãìáôïò îáíÜ ôïõ äéáìïéñáæïìÝíïõ áíôéêåéìÝíïõ `%s'ÁíáðáñáãùãÞ : -ÁíáöÝñáôå óöÜëìáôá óôï %s. -ÁíáöÝñáôå óöÜëìáôá ÷ñçóéìïðïéþíôáò ôï `glibcbug' ðñüãñáììá óôï . -ÊáêÞ áßôçóç ðáñáìÝôñùíÐáñáêñáôçìÝíï ãéá ìåëëïíôéêÞ ÷ñÞóçÓöÜëìá áíáëõôÞ äéåõèýíóåùí 0 (êáíÝíá óöÜëìá)Åóùôåñéêü óöÜëìá ôïõ áíáëõôÞ äéåõèýíóåùíÁðïöåý÷èçêå áäéÝîïäï óöÜëìá ðüñùíÏ ðüñïò ÷ÜèçêåÏ ðüñïò åßíáé ðñïóùñéíÜ ìç äéáèÝóéìïòÔï áðïôÝëåóìá åßíáé ðïëý ìåãÜëïÔá áðïôåëÝóìáôá óôÜëèçêáí óôç äéáäéêáóßá áíÜäñáóçòSHOBJ [PROFDATA]SUNYPÌïíïðÜôé ÁíáæÞôçóçò: %s -ÓöÜëìá êáôÜôìçóçò (segmentation fault)Ï åîõðçñåôçôÞò åßíáé áðáó÷ïëçìÝíïò, äïêéìÜóôå îáíÜÇ ìíÞìç ôïõ åîõðçñåôçôÞ åîáíôëÞèçêåÏ äéáêïìéóôÞò áðÝññéøå äéáðéóôåõôÞñéïÏ äéáêïìéóôÞò áðÝññéøå åîáêñéâùôÞÔï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktypeÏñéóìüò ïíüìáôïò ðñïãñÜììáôïòÄéáêïðÞ ôçò ëåéôïõñãßáò ôïõ åîõðçñåôçôÞÓÞìá 0Ëåéôïõñãßá õðïäï÷Þò óå ìç-õðïäï÷ÞÏ ôýðïò ôçò õðïäï÷Þò äåí õðïóôçñßæåôáéÔï ëïãéóìéêü ðñïêÜëåóå áêýñùóç óýíäåóçòÓõããíþìç. Äåí åßóôå äéá÷åéñéóôÞò -Ïé ïñéóìïß ðçãÞ âñßóêïíôáé óôï ÁÑ×ÅÉÏÓöÜëìá srmountÓöÜëìá óôïßâáòÌç Ýãêõñïò ðéá NFS ÷åéñéóôÞò áñ÷åßïõ¸íáñîç ÁÑÉÈÌÏÓ íçìÜôùíÊáôÜóôáóç : %s -ÓôáìÜôçóåÓôáìÜôçóå (óÞìá)ÓôáìÜôçóå (åßóïäïò tty)ÓôáìÜôçóå (Ýîïäïò tty)ÓöÜëìá óùëÞíùóçò ñïÞòÇ äïìÞ ÷ñåéÜæåôáé êáèÜñéóìáÅðéôõ÷ßáÁðïóéþðçóç ðñïçäïðïéÞóåùí êáé ìçíõìÜôùí ðëçñïöüñçóçòÔá óõìâïëéêÜ ïíüìáôá ÷áñáêôÞñùí äçëþèçêáí óôï ÁÑ×ÅÉÏÓöÜëìá óõóôÞìáôïòÐëçñïöïñßåò óõóôÞìáôïò:Áðïôõ÷ßá äÝóìåõóçò ðüñùí óõóôÞìáôïòÊáôÜëïãïò óõóôÞìáôïò ãéá ðßíáêåò ÷áñáêôÞñùí: %s - ñåðåñôüñéá ðéíÜêùí: %s - ìïíïðÜôé ôïðéêþí ñõèìßóåùí: %s -%sÐÉÍÁÊÁÓÐÉÍÁÊÁÓ -ÐÉÍÁÊÁÓ,íáéÔýðïò Ðßíáêá : %s -ÐñïóùñéíÞ áðïôõ÷ßá êáôÜ ôçí áíÜëõóç ïíüìáôïòÔåñìáôßóôçêåÁñ÷åßï êåéìÝíïõ óå ÷ñÞóçÇ åðüìåíç ëßóôá ðåñéÝ÷åé üëá ôá ãíùóôÜ êùäéêïðïéçìÝíá óýíïëá ÷áñáêôÞôùí. -Áõôü äå óçìáßíåé áíáãêáóôéêÜ üôé üëïé ïé óõíäéáóìïß áõôþí ôùí ïíïìÜôùí ìðïñïýí -íá ÷ñçóéìïðïéçèïýí óôéò ðáñáìÝôñïõò ãñáììÞò åíôïëþí ÁÐÏ êáé ÓÅ. ¸íá -êùäéêïðïéçìÝíï óýíïëï ÷áñáêôÞôùí ìðïñåß íá åìöáíßæåôå ìå ðïëëÜ äéáöïñåôéêÜ -ïíüìáôá (øåõäþíõìá). ÌåñéêÜ áðü ôá ïíüìáôá äåí åßíáé áðëÜ áëöáñéèìçôéêÜ áëëÜ -êáíïíéêÝò åêöñÜóåéò êáé ôáéñéÜæïõí ìå ðïéêéëßá ïíïìÜôùí ðïõ ìðïñïýí íá äïèïýí -ùò ðáñÜìåôñïé óôï ðñüãñáììá. - - ×ñüíïò æùÞò :Ï ÷ñïíïìåôñçôÞò ÝëçîåÕðåñâïëéêÜ ðïëëÝò éäéüôçôåòÕðåñâïëéêÜ ðïëëÜ åðßðåäá óõìâïëéêþí óõíäÝóìùíÕðåñâïëéêÜ ðïëëïß óýíäåóìïéÕðåñâïëéêÜ ðïëëÜ áíïéêôÜ áñ÷åßáÕðåñâïëéêá ðïëëÜ áíïéêôÜ áñ÷åßá óôï óýóôçìáÕðåñâïëéêÜ ðïëëÝò äéåñãáóßåòÕðåñâïëéêÜ ðïëëïß ðáñáðïìðåßòÒ áäõíáìßá ìáôßóìáôïòÕðåñâïëéêÜ ðïëëïß ÷ñÞóôåòÐáãßäá Trace/breakpointÁêïëïõèåß áíÜóôñïöç êÜèåôïòÏ ìåôáöñáóôÞò ðÝèáíåÇ Üêñç ìåôáöïñÜò åßíáé Þäç óõíäåäåìÝíçÇ Üêñç ìåôáöïñÜò äåí åßíáé óõíäåäåìÝíçÄïêéìÜóôå `%s --help' Þ `%s --usage' ãéá ðåñéóóüôåñåò ðëçñïöïñßåò. -ÄïêéìÜæåôáé %s... -Ôýðïò: %s -ÁÃÍÙÓÔÏÁäýíáôç ç áõèåíôéêïðïßçóç ôïõ ðåëÜôç NIS+Áäýíáôç ç áõèåíôéêïðïßçóç ôïõ åîõðçñåôçôÞ NIS+Áäýíáôç ç äçìéïõñãßá äéáäéêáóßáò áíÜäñáóçòÁäýíáôç ç äçìéïõñãßá äéåñãáóßáò óôïí åîõðçñåôçôÞ¶ãíùóôï (åßäïò = %d, bit = %d) -Áãíùóôï .netrc ëåêôéêü %s¶ãíùóôïò êþäéêáò óöÜëìáôïò NIS¶ãíùóôç âÜóç äåäïìÝíùí: %s -¶ãíùóôï óöÜëìá¶ãíùóôï óöÜëìá ¶ãíùóôï üíïìá óõóôÞìáôïò¶ãíùóôï áíôéêåßìåíï¶ãíùóôç åðéëïãÞ: %s %s %s¶ãíùóôï óöÜëìá áíáëýôç äéåõèýíóåùí¶ãíùóôï óöÜëìá äéáêïìéóôÞ¶ãíùóôï óÞìá %d¶ãíùóôï óöÜëìá óõóôÞìáôïò¶ãíùóôï óöÜëìá ypbindÁôáßñéáóôï ( Þ \(Áôáßñéáóôï ) Þ \)Áôáßñéáóôï [ Þ [^Áôáßñéáóôï \{Ìç áíáãíùñßóéìç ìåôáâëçôÞ `%s'Åðåßãïõóá êáôÜóôáóç åéóüäïõ/åîüäïõ×ñÞóç:×ñÞóç: %s üíïìá_ìåôáâëçôÞò [üíïìá_äéáäñïìÞò] -×ñÞóç: rpcinfo [ -n áñéèì. èýñáò ] -u óýóôçìá áñéèì. ðñïãñáì. [ áñéèì. Ýêäïóçò ] -×ñÞóç îå÷ùñéóôÞò ëáíèÜíïõóáò ìíÞìçò ãéá êÜèå ÷ñÞóôçÊáèïñéæüìåíï áðü ôïí ÷ñÞóôç óÞìá 1Êáèïñéæüìåíï áðü ôïí ÷ñÞóôç óÞìá 2Ç ôéìÞ åßíáé ðïëý ìåãÜëç ãéá êáèïñéóìÝíï ôýðï äåäïìÝíùíÏ åéêïíéêüò ÷ñïíïìåôñçôÞò ÝëçîåÁãñéï áðïôÝëåóìá áðü ôçí åêôÝëåóç ôçò åíôïëÞòÔï ðáñÜèõñï ÜëëáîåÅããñáöÞ ïíïìÜôùí óôïõò äéáèÝóéìïõò ðßíáêåò ÷áñáêôÞñùíÅããñáöÞ ïíïìÜôùí ôùí äéáèÝóéìùí ôïðéêþí ñõèìßóåùíÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí êáôçãïñéþíÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí ëÝîåùí-êëåéäéþíÅããñáöÞ åîüäïõ óôï áñ÷åßï ÏÍÏÌÁÅããñÜöçêå áðü %s. -ÅóöáëìÝíï åßäïò ìÝóïõX500XCHSYPBINDPROC_DOMAIN: %s -Íáé, ï óêïðüò ôçò æùÞò åßíáé 42.ÐñáãìáôéêÜ ôçí Ýêáíåò áõôÞ ôç öïñÜÏ ÷ñüíïò ôÝëïõò ôçò ãñáììÞò óõíÝ÷éóçò ôçò æþíçò äåí åßíáé ìåôÜ áðü ôï ÷ñüíï ôÝëïõò ôçò ðñïçãïýìåíçò ãñáììÞò[ÁÑ×ÅÉÏ...]__get_myaddress: ioctl (ëÞøç äéáìüñöùóçò äéáóýíäåóçò)Ï ïñéóìüò `%1$s' äåí ôåëåéþíåé ìå `END %1$s'Ôï `%s' äåí åßíáé ôï óùóôü áñ÷åßï äåäïìÝíùí ðñïößë ãéá ôï `%s'`-1' ðñÝðåé íá åßíáé ç ôåëåõôáßá êáôá÷þñéóç óôï `%s' ðåäßï óôç `%s' êáôçãïñßáÔï `...' ðñÝðåé íá ÷ñçóéìïðïéåßôáé ìüíï óå `...' êáé `UNDEFINED' êáôá÷ùñßóåéòÁíáìåíüôáí `from' ìåôÜ ôçí ðñþôç ðáñÜìåôñï óôï `collating-element'Ç áëõóßäá ÷áñáêôÞñùí `from' óôç äÞëùóç ôïõ óôïé÷åßïõ ðáñáâïëÞò ðåñéÝ÷åé -Üãíùóôï ÷áñáêôÞñáÔï ai_family äåí õðïóôçñßæåôáéÔï ai_socktype äåí õðïóôçñßæåôáéåêôåëåßôå ÞäçÇ ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáòÇ ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáòauth_none.c - Ìïéñáßï ëÜèïò ðáñÜôáîçòauthunix_create: ç ìíÞìç åîáíôëÞèçêå -êáêü üñéóìáêáêüò éäéïêôÞôçòËåõêü ðåäßï FROM óå ãñáììÞ Linkëåõêü ðåäßï TO óå ãñáììÞ Linkôï ìðëüê åëåõèåñþèçêå äýï öïñÝò -Ðåñßåñãï mcheck_status, ç âéâëéïèÞêç åßíáé ðñïâëçìáôéêÞ -broadcast: ioctl (ëÞøç ñõèìßóåéò äéáóýíäåóçò)broadcast: ioctl (ëÞøç åíäåßîåéò õðïäï÷Þò)õðåñ÷åßëéóç åíôáìéåõôÞcache_set: áäõíáìßá äÝóìåõóçò íÝïõ rpc_buffercache_set: ç åê÷þñçóç èýìáôïò áðÝôõ÷åcache_set: ôï èýìá äåí âñÝèçêåäåí åßíáé äõíáôüí íá êáèïñéóôåß ç óõíôüìåõóç ôçò æþíçò þñáò ãéá -íá ÷ñçóéìïðïéçèåß áìÝóùò ìåôÜ ôï 'until time'äåí åßíáé äõíáôüí íá îáíáôåèåß ï áñéèìüò äéáäéêáóßáò %d -äåí åßíáé äõíáôüí íá ãßíåé `stat' ôï locale áñ÷åßï `%s'áäõíáìßá äÝóìåõóçò äåäïìÝíùí óõìâüëùíáäõíáìßá äçìéïõñãßáò åóùôåñéêïý ðåñéãñáöÝááäõíáìßá äçìéïõñãßáò åóùôåñéêþí ðåñéãñáöÝùíáäýíáôç ç åíåñãïðïßçóç õðïäï÷Þò ãéá áðïäï÷Þ óõíäÝóåùí: %säå âñÝèçêå ï ðñïåðåîåñãáóôÞò C: %s -äå âñÝèçêå êáíÝíáò ðñïåðåîåñãáóôÞò C (cpp) -äå ìðïñåß íá åîõðçñåôçèåß ç áßôçóç ðáëáéÜò Ýêäïóçò %d· ç ôñÝ÷ïõóá Ýêäïóç åßíáé %dáäõíáìßá åéóáãùãÞò óôïé÷åßï ðáñáâïëÞò `%.*s'áäõíáìßá åéóáãùãÞò óôïí ðßíáêá áðïôåëåóìÜôùíáäõíáìßá åéóáãùãÞò íÝïõ ïñéóìïý óõìâüëïõ ðáñáâïëÞò: %sáäýíáôç ç öüñôùóç äåäïìÝíùí ðñïößëáäõíáìßá áíïßãìáôïòáäõíáìßá áíïßãìáôïò ôïõ `%s'áäõíáìßá áíïßãìáôïò áñ÷åßïõ âÜóåùò äåäïìÝíùí `%s': %sáäõíáìßá áíïßãìáôïò áñ÷åßïõ åéóüäïõ `%s'áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõáäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäï `%s' ãéá ôçí êáôçãïñßá `%s'áäõíáìßá áíïßãìáôïò õðïäï÷Þò: %sáäõíáìßá åðåîåñãáóßáò ôùí ðñïäéáãñáöþí óåéñÜòáäõíáìßá áíÜãíùóçò êáôáëüãïõ ôïõ ÷Üñôç ÷áñáêôÞñùí `%s'áäõíáìßá áíÜãíùóçò áñ÷åßïõ ñõèìßóåùí· áõôü åßíáé ìïéñáßïáäõíáìßá áíÜãíùóçò áðü ôïí ðåëÜôçáäõíáìßá áíÜãíùóçò êåöáëßäáò áðü ôï `%s'áäõíáìßá áíÜãíùóçò êáôáëüãïõ locale `%s'áäõíáìßá áíÜãíùóçò áñ÷åßïõ locale `%s'áäõíáìßá áíÜãíùóçò ðßíáêá ñåðåñôïñßïõ `%s'áäýíáôç ç áíÜãíùóç äåäïìÝíùí óôáôéóôéêþíáäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %sáäõíáìßá åããñáöÞò áñ÷åßùí åîüäïõ óôï `%s'áäõíáìßá åããñáöÞò áðïôåëÝóìáôïò: %sáäõíáìßá åããñáöÞò óôáôéóôéêþí: %sáäõíáìßá åããñáöÞò óôï ðåëÜôçôá äåäïìÝíá êáôçãïñßáò æçôÞèçêáí ðÜíù áðü ìßá öïñÜ: äåí èá Ýðñåðå íá óõìâåßï ÷áñáêôÞñáò '%s' óôçí êëÜóç `%s' ðñÝðåé íá åßíáé óôçí êëÜóç `%s'ï ÷áñáêôÞñáò '%s' óôçí êëÜóç `%s' äåí ðñÝðåé íá åßíáé óôçí êëÜóç `%s'ï ÷áñáêôÞñáò äåí ïñßóôçêå óôïí ÷Üñôç ÷áñáêôÞñùíï ÷áñáêôÞñáò L'%s' (äåßêôçò %Zd) óôçí êëÜóç `%s' ðñÝðåé íá åßíáé óôçí êëÜóç `%s'ï ÷áñáêôÞñáò L'%s' (äåßêôçò %Zd) óôçí êëÜóç `%s' äåí ðñÝðåé íá åßíáé óôçí êëÜóç `%s'ï ÷áñáêôÞñáò `%s' äåí ïñßóôçêå åíþ ÷ñåéÜæåôáé óáí ðñïêáèïñéóìÝíç ôéìÞç êëÜóç ÷áñáêôÞñùí `%s' ïñßóôçêå Þäçï ÷Üñôçò ÷áñáêôÞñùí `%s' ïñßóôçêå Þäçôï áñ÷åßï ÷Üñôç ÷áñáêôÞñùí `%s' äåí âñÝèçêåclnt_raw.c - Ìïéñáßï óöÜëìá óåéñéáêïðïßçóçò åðéêåöáëßäáòclnttcp_create: ç ìíÞìç åîáíôëÞèçêå -clntudp_create: ç ìíÞìç åîáíôëÞèçêå -clntunix_create: ç ìíÞìç åîáíôëÞèçêå -Ôï óôïé÷åßï ðáñáâïëÞò `%.*s' åìöáíßæåôáé ðåñéóóüôåñåò áðü ìßá öïñÝò: -áãíïåßôáé ç ãñáììÞÔï óýìâïëï ðáñáâïëÞò `%.*s' åìöáíßæåôáé ðåñéóóüôåñåò áðü ìßá öïñÝò: -áãíïåßôáé ç ãñáììÞáíáìåíüôáí óýìâïëï ðáñáâïëÞò ìåôÜ ôï `%s'óýíäåóç óôç äéåýèõíóç %s: áíáìåíüôáí óôáèåñÜ Þ ðñïóäéïñéóôÞòç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôåç ìåôáôñïðÞ äéáêüðçêå ëüãù ðñïâëÞìáôïò óôçí åããñáöÞ ôçò åîüäïõáäõíáìßá äçìéïõñãßáò rpc äéáêïìéóôÞ -áäõíáìßá êáôá÷þñçóçò ðñïãñ. %d åêä. %d -âÜóç_äåäïìÝíùí [êëåéäß ...]Ôï ðñïêáèïñéóìÝíï áñ÷åßï ÷Üñôç ÷áñáêôÞñùí `%s' äåí âñÝèçêåç êáôåõèõíôÞñéá óçìáßá óôï áëöáñéèìéôéêü %d óôï ðåäßï `era' óôçí -êáôçãïñßá `%s' äåí åßíáé '+' ïýôå '-'Ç êáôåõèõíôÞñéá óçìáßá óôï áëöáñéèìéôéêü %d óôï ðåäßï `era' óôçí -êáôçãïñßá `%s' äåí åßíáé Ýíáò ÷áñáêôÞñáòäéðëü üíïìá ÷áñáêôÞñá `%s'äéðëüò ïñéóìüò óôïé÷åßïõ ðáñáâïëÞòäéðëüò ïñéóìüò ãéá ôïí ÷áñáêôÞñá `%.*s'äéðëü êëåéäßäéðëüò ïñéóìüò óõíüëïõäéðëü üíïìá æþíçò %s (áñ÷åßï "%s", ãñáììÞ %d)äéðëüò ðñïóäéïñéóôÞò ìçíýìáôïòäéðëüò áñéèìüò ìçíýìáôïòêåíü áëöáñéèìçôéêüÜäåéá âáñýôçôá ïíüìáôïò: ãñáììÞ áãíïÞèçêåenablecache: ç ëáíèÜíïõóá ìíÞìç åßíáé Þäç åíåñãïðïéçìÝíçenablecache: áäõíáìßá äÝóìåõóçò ëáíèÜíïõóáò ìíÞìçòenablecache: áäõíáìßá äÝóìåõóçò äåäïìÝíùí ëáíèÜíïõóáò ìíÞìçòenablecache: áäõíáìßá äÝóìåõóçò fifo ëáíèÜíïõóáò ìíÞìçòêùäéêïðïßçóç ãéá Ýîïäïêùäéêïðïßçóç ãéá ôï áñ÷éêü êåßìåíïôï ôåëéêü óçìåßï ôïõ ðåäßïõ ôçò Ýëëåéøçò åßíáé ìåãáëýôåñï áðü ôï áñ÷éêüóöÜëìá óôç ëÞøç ôçò ôáõôüôçôáò áõôïý ðïõ êÜëåóå: %sóöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'óöÜëìá êáôÜ ôï êëåßóéìï ôïõ áñ÷åßïõ åîüäïõóöÜëìá êáôÜ ôï êëåßóéìï ôïõ áñ÷åßïõ äåäïìÝíùí ðñïößëóöÜëìá êáôÜ ôçí åéóáãùãÞ óôïé÷åßïõ ðáñáâïëÞò óôïí hash ðßíáêáóöÜëìá êáôÜ ôçí åéóáãùãÞ óôïí hash ðßíáêáóöÜëìá êáôÜ ôçí áíÜãíùóç ôçò åéóüäïõáíáìåíüôáí áëõóßäá ÷áñáêôÞñùí ãéá `copy'áíáìåíüôáí ãñáììÞ ðáñÜôáóçò êáé äåí âñÝèçêåáðïôõ÷ßá öüñôùóçò äéáìïéñáæïìÝíïõ áíôéêåéìÝíïõ `%s'áðïôõ÷ßá öüñôùóçò äåäïìÝíùí óõìâüëùíáðïôõ÷ßá óôç ëåéôïõñãßá mmap ãéá ôï áñ÷åßï äåäïìÝíùí ðñïößëáðïôõ÷ßá óôçí Ýíáñîç ôçò åðåîåñãáóßáò ìåôáôñïðÞòáðïôõ÷ßá êáôÜ ôçí åããñáöÞ äåäïìÝíùí ãéá ôçí êáôçãïñßá `%s'fcntl: F_SETFDôï ðåäßï `%s' óôçí êáôçãïñßá `%s' äåí ïñßóôçêåôï áñ÷åßï `%s' õðÜñ÷åé Þäç êáé ìðïñåß íá åðéêáëõöèåß -ç ôéìÞ from ôïõ `óôïé÷åßïõ ðáñáâïëÞò' ðñÝðåé íá åßíáé áëöáñéèìéôéêüôï fstat áðÝôõ÷åóêïõðßäéá óôï ôÝëïò ôùí ÷áñáêôçñéóôéêþí ôïõ êþäéêá ÷áñáêôÞñùíóêïõðßäéá óôï ôÝëïò ôïõ áñéèìïýóêïõðßäéá óôï ôÝëïò áíôéóôáèìéóôéêÞò(offset) ôéìÞò óôï áëöáñéèìéôéêü %d -óôï ðåäßï `era' óôçí êáôçãïñßá `%s'óêïõðßäéá óôï ôÝëïò ôçò çìåñïìçíßáò Ýíáñîçò óôï áëöáñéèìéôéêü %d -óôï ðåäßï `era' óôçí êáôçãïñßá `%s'óêïõðßäéá óôï ôÝëïò ôçò çìåñïìçíßáò ôåñìáôéóìïý óôï áëöáñéèìéôéêü %d -óôï ðåäßï `era' óôçí êáôçãïñßá `%s'äçìéïõñãßá ãñÜöïõ êëÞóåùíäçìéïõñãßá ãåíéêïý ðñïößë ìå ìåôñÞóåéòget_myaddress: ioctl (ëÞøç äéáìüñöùóçò õðïäï÷Þò)getent - ëÞøç êáôá÷ùñÞóåùí áðü äéá÷åéñçóôéêÞ âÜóç.handle_request: ëÞøç áßôçóçò (¸êäïóç = %d)ï óèåíáñüò óýíäåóìïò áðÝôõ÷å, èá ÷ñçóéìïðïéçèåß óõìâïëéêüò óýíäåóìïòóèåíáñÜ óõíäåäåìÝíï êÜðïõìç Ýãêõñï CORRECTION ðåäßï óôç ãñáììÞ áíáðÞäçóçò (Leap)ìç Ýãêõñï Rolling/Stationary ðåäßï óôç ãñáììÞ áíáðÞäçóçò (Leap)ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêüìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: ìç Ýãêõñï óôïé÷åßï ðáñáâïëÞòìç Ýãêõñïò ïñéóìüòäþèçêå ìç Ýãêõñç êùäéêïðïßçóçìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïýìç Ýãêõñç áêïëïõèßá åéóüäïõ óôç èÝóç %ldìç Ýãêõñá ïíüìáôá ãéá ôï ðåäßï ÷áñáêôÞñùíáêáôÜëëçëïò ôýðïò äéêôýïõ :`%s' -ìç Ýãêõñïò áñéèìüò ãéá áíôéóôÜèìéóç óôo áëöáñéèìéôéêü %d óôï ðåäßï `era' óôçí êáôçãïñßá `%s'ìç Ýãêõñïò áñéèìüò óåôìç Ýãêõñç çìåñïìçíßá Ýíáñîçò óôï áëöáñéèìéôéêü %d óôï ðåäßï `era'óôçí êáôçãïñßá `%s'ìç Ýãêõñç çìåñïìçíßá ôåñìáôéóìïý óôï áëöáñéèìéôéêü %d óôï ðåäßï `era'óôçí êáôçãïñßá `%s'üñéï õëïðïßçóçò: äåí åðéôñÝðïíôáé ðÜíù áðü %d êëÜóåéò ÷áñáêôÞñùíüñéï õëïðïßçóçò: äåí åðéôñÝðïíôáé ðÜíù áðü %d ÷Üñôåò ÷áñáêôÞñùíìç ðëÞñçò ÷áñáêôÞñáò Þ ìåôáôüðéóç áêïëïõèßáò óôï ôÝëïò ôïõ åíôáìéåõôÞáñ÷åßï êáêþò äéáìïñöùìÝíïãñáììÞ åéóáãùãÞò áãíþóôïõ ôýðïõåóùôåñéêü óöÜëìá (áêáôÜëëçëïò ðåñéãñáöÝáò)åóùôåñéêü óöÜëìá - êëÞèçêå ç addtype ìå êáêü isdståóùôåñéêü óöÜëìá - êëÞèçêå ç addtype ìå êáêü ttisgmtåóùôåñéêü óöÜëìá - êëÞèçêå ç addtype ìå êáêü ttisstdåóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %uìç Ýãêõñç ìåôáôüðéóç UTCìç Ýãêõñç äéáìüñöùóç óõíôüìåõóçòìç Ýãêõñç ìÝñá ôïõ ìÞíáìç Ýãêõñïò ÷ñüíïò ëÞîçòìç Ýãêõñïò ÷ñüíïò áíáðÞäçòìç Ýãêõñç êáôÜóôáóç ãéá ôçí dlopen()ìç Ýãêõñï üíïìá ìÞíáìç Ýãêõñç óùóìÝíç þñáìç Ýãêõñïò ÷ñüíïò Ýíáñîçòìç Ýãêõñç þñá ôçò ìÝñáòìç Ýãêõñï üíïìá åâäïìÜäáòôï ìÞêïò êëåéäéïý óôçí áßôçóç åßíáé ðïëý ìåãÜëï: %Zdç ãñáììÞ ìåôÜ ôçí Ýëëåéøç ðñÝðåé íá ðåñéÝ÷åé ïñéóìü ÷áñáêôÞñáç ãñáììÞ ìåôÜ ôçí Ýëëåéøç äåí ðåñéÝ÷åé ïñéóìü ãéá óôáèåñü ÷áñáêôÞñáðïëý ìåãÜëç ãñáììÞëßóôá ìå üëá ôá ãíùóôÜ óýíïëá ÷áñáêôÞñùíôï locale áñ÷åßï `%s', ðïõ ÷ñçóéìïðïéåßôáé óôçí `copy' äÞëùóç äåí âñÝèçêåôï lstat áðÝôõ÷åêáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêåáðïôõ÷ßá áíôéóôïß÷éóçò ðßíáêá áëöáñéèìçôéêþí êåöáëßäùí ôìçìÜôùíáðïôõ÷ßá áíôéóôïß÷éóçò êåöáëßäùí ôìçìÜôùíç ìíÞìç ðåéñÜ÷ôçêå ðñéí áðü ôï äåóìåõìÝíï ìðëïê -ç ìíÞìç ðåéñÜ÷ôçêå ìåôÜ ôï ôÝëïò ôïõ äåóìåõìÝíïõ ìðëïê -ç ìíÞìç åîáíôëÞèçêåç ìíÞìç åßíáé óõíåðÞò, ç âéâëéïèÞêç Ý÷åé ðñüâëçìá -ëåßðåé ç äéáìüñöùóç åðï÷Þò óôï áëöáñéèìéôéêü %d óôï `era' ðåäßïóôçí êáôçãïñßá `%s'ëåßðåé ôï üíïìá ôçò åðï÷Þò óôï áëöáñéèìéôéêü %d óôï `era' ðåäßïóôçí êáôçãïñßá `%s'êáíüíáò ÷ùñßò üíïìáäåí Ý÷åé ïñéóôåß ïýôå áñ÷éêÞ ïýôå ôåëéêÞ êùäéêïðïßçóçnetname2user: (áíáôñÝîéìï nis+): %s -netname2user: ç êáôá÷þñçóç DES ãéá ôï %s óôï êáôÜëïãï %s äåí åßíáé ìïíáäéêÞnetname2user: ç ÔÏÐÉÊÇ êáôá÷þñçóç ãéá ôï %s óôï êáôÜëïãï %s äåí åßíáé ìïíáäéêÞnetname2user: äåí õðÜñ÷åé ëßóôá ôáõôïôÞôùí ïìÜäùí óôï `%s'.netname2user: ôï êýñéï üíïìá `%s' åßíáé ðïëý ìåãÜëïnetname2user: äå èá Ýðñåðå íá Ý÷åé ôáõôüôçôá ÷ñÞóôç 0ðïôÝ äåí äçëþèçêå ôï ðñüãñáììá %d -äå äüèçêå ôéìÞ Þ ìç óùóôÞ êáíïíéêÞ Ýêöñáóç ãéá ôï ðåäßï `%s' óôçí êáôçãïñßá `%s': %sêáìéÜ ìÝñá óôï ìÞíá äåí óõìöùíåß ìå ôïí êáíüíáêáíÝíáò ïñéóìüò ôïõ `UNDEFINED'äå äüèçêå üíïìá áñ÷åßïõ ãéá ôá äåäïìÝíá ðñïößë êáé ôï äéáìïéñáæüìåíï áíôéêåßìåíï `%s' äåí Ý÷åé åóùôåñéêü üíïìáêáìéÜ Üëëç ëÝîç êëåéäß äåí èá ðñÝðåé íá êáèïñßæåôáé üôáí ÷ñçóéìïðïéåßôáé ôï `copy'äåí ðáñÜ÷èçêå áñ÷åßï åîüäïõ åðåéäÞ åêäüèçêáí ðñïåéäïðïéÞóåéòäåí ïñßóôçêå ðßíáêáò ñåðåñôïñßïõ: ç óõíÝ÷éóç åßíáé áäýíáôçäåí äþèçêå óõìâïëéêü üíïìáäåí äþèçêå óõìâïëéêü üíïìá ãéá ôï ôÝëïò ðåäßïõäåí ïñßóôçêå âáñýôçôá ãéá ôï óýìâïëï `%s'äåí åßíáé êáíïíéêü áñ÷åßïñýèìéóç nscd: - -%15d åðßðåäï åêóöáëìÜôùóçò åîõðçñåôçôÞ -ôï nscd äåí åêôåëåßôå! -ìüíï ïñéóìïß WIDTH åðéôñÝðïíôáé íá áêïëïõèïýí ôïí CHARMAP ïñéóìüç áñ÷éêÞ êùäéêïðïßçóç äåí Ý÷åé ïñéóôåß ìå `-f'áñ÷åßï åîüäïõðñüâëçìá rpc pmap_getmapspoll: áðïôõ÷ßá ðñùôïêüëïõ óôï óôÞóéìï êõêëþìáôïò -óöÜëìá ðñïåðåîåñãáóôÞåìöÜíéóç ëßóôá ìå ìåôñçôÝò ìïíïðáôéþí êáé ôïí áñéèìü ÷ñÞóçò ôïõòåìöÜíéóç ðëçñïöïñéþí ðñïüäïõðñïâëÞìáôá êáôÜ ôçí áíÜãíùóç ôïõ `%s'ôï áñ÷åßï äåäïìÝíùí ðñïößë `%s' äåí ôáéñéÜæåé ìå ôï äéáìïéñáæüìåíï áíôéêåßìåíï `%s'ôï ðñüãñáììá %lu äåí åßíáé äéáèÝóéìï -ôï ðñüãñáììá %lu Ýêäïóçò %lu äåí åßíáé äéáèÝóéìï -ôï ðñüãñáììá %lu Ýêäïóçò %lu Ýôïéìï êáé áíáìÝíåé -rcmd: poll (óôÞóéìï ôïõ stderr): %m -rcmd: socket: ¼ëåò ïé èýñåò óå ÷ñÞóç -rcmd: write (óôÞóéìï ôïõ stderr): %m -registerrpc: ç ìíÞìç åîáíôëÞèçêå -repeated leap second momentôï áñ÷åßï ðßíáêá ñåðïñôïñßïõ `%s' äå âñÝèçêårpcgen: óöÜëìá óôç ãñáììÞ åíôïëþí -rpcgen: ðÜñá ðïëëïß ïñéóìïß -rpcinfo: %s åßíáé Üãíùóôï óýóôçìá -rpcinfo: %s åßíáé Üãíùóôç õðçñåóßá -rpcinfo: Áäõíáìßá äéáãñáöÞò äÞëùóçò ãéá ôï ðñüãñáììá %s Ýêäïóçò %s -rpcinfo: åêðïìðÞ áðÝôõ÷å: %s -rpcinfo: áäõíáìßá åðéêïéíùíßáò ìå äéá÷åéñéóôÞ èõñþíï ßäéïò êáíüíáò óå ðïëëáðëÜ áñ÷åßáóýíôïìç áíÜãíùóç êáôÜ ôçí áíÜãíùóç ôïõ êëåéäéïý áßôçóçò: %sóýíôïìç áíÜãíùóç êáôÜ ôçí áßôçóç áíÜãíùóçò: %sóýíôïìç áíÜãíùóç óôï %s: %ssocket: áðïôõ÷ßá ðñùôïêüëïõ óôï óôÞóéìï êõêëþìáôïò -Ïé êáôåõèýíóåéò ôáîéíüìçóçò `forward' êáé `backward' åßíáé áìïéâáßá áðïêëåéþìåíåòÔá ÷áñáêôçñéóôéêÜ ôçò âáñýôçôáò ôáîéíüìéóçò ãéá óýìâïëï ðáñáâïëÞò äåí âãÜæåé íüçìáêáíïíéêÞ åßóïäïòêáíïíéêÞ Ýîïäïòç çìåñïìçíßá Ýíáñîçò äåí åßíáé Ýãêõñç óôï áëöáñéèìéôéêü %d óôï ðåäßï `era' óôçí êáôçãïñßá `%s'ôï Ýôïò Ýíáñîçò åßíáé ìåãáëýôåñïò ôï Ýôïò ôåñìáôéóìïýï ÷ñüíïò Ýíáñîçò åßíáé ðïëý ìåãÜëïò ãéá íá áíáðáñáóôáèåßï ÷ñüíïò Ýíáñîçò åßíáé ðïëý ìéêñüò ãéá íá áíáðáñáóôáèåßç çìåñïìçíßá ôåñìáôéóìïý äåí åßíáé Ýãêõñç óôçí áëõóßäá %d óôï ðåäßï `era' óôçí êáôçãïñßá `%s'svc_run: - áðïôõ÷ßá ôïõ selectsvc_tcp.c - áäõíáìßá getsockname Þ listensvc_tcp.c - ðñüâëçìá äçìéïõñãßáò õðïäï÷Þò tcpsvc_tcp: makefd_xprt: ç ìíÞìç åîáíôëÞèçêå -svc_unix.c - ðñüâëçìá äçìéïõñãßáò õðïäï÷Þò AF_UNIXsvc_unix.c - áäõíáìßá getsockname Þ listensvc_unix: makefd_xprt: ç ìíÞìç åîáíôëÞèçêå -svctcp_create: ç ìíÞìç åîáíôëÞèçêå -svcudp_create - áäõíáìßá getsocknamesvcudp_create: ç ìíÞìç åîáíôëÞèçêå -svcudp_create - ðñüâëçìá äçìéïõñãßáò õðïäï÷Þòsvcunix_create: ç ìíÞìç åîáíôëÞèçêå -óýìâïëï ãéá ðïëõ÷áñáêôÞñá óôïé÷åßïõ ðáñáâïëÞò `%.*s' äéðëáóéÜæåé ôïí ïñéóìüôïõ óôïé÷åßïõóýìâïëï ãéá ðïëõ÷áñáêôÞñá óôïé÷åßïõ ðáñáâïëÞò `%.*s' äéðëáóéÜæåé Üëëï ïñéóìüóõìâüëïõóýìâïëï ãéá ðïëõ÷áñáêôÞñá óôïé÷åßïõ ðáñáâïëÞò `%.*s' äéðëáóéÜæåé ôïí ïñéóìüôïõ óõìâüëïõóýìâïëï ãéá ðïëõ÷áñáêôÞñá óôïé÷åßïõ ðáñáâïëÞò `%.*s' äéðëáóéÜæåé ôï óõìâïëéêüüíïìá óôï charsetóõíôáêôéêü óöÜëìá óôï ïñéóìü ôïõ %s: %sóõíôáêôéêü óöÜëìá óôçí `order_start' êáôåõèõíôÞñéá ãñáììÞóõíôáêôéêü óöÜëìá óôïí ïñéóìü êëÜóçò ÷áñáêôÞñùíóõíôáêôéêü óöÜëìá óôïí ïñéóìü ìåôáôñïðÞò ÷áñáêôÞñùíóõíôáêôéêü óöÜëìá óôçí ðáñáâïëÞ Üëëïõ ïñéóìïýóõíôáêôéêü óöÜëìá óôçí ðáñáâïëÞ ïñéóìïýóõíôáêôéêü óöÜëìá óôïí ïñéóìü ôçò LC_TYPE êáôçãïñßáòóõíôáêôéêü óöÜëìá óôïí ïñéóìü ôçò íÝáò êëÜóçò ÷áñáêôÞñùíóõíôáêôéêü óöÜëìá óôïí ïñéóìü ôïõ íÝï ÷Üñôç ÷áñáêôÞñùíóõíôáêôéêü óöÜëìá óôïí ïñéóìïý locale ìçíýìáôïòóõíôáêôéêü óöÜëìá óôïí ïñéóìü íïìéóìáôéêïý localeóõíôáêôéêü óöÜëìá óôïí ïñéóìü áñéèìçôéêïý localeóõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜòóõíôáêôéêü óöÜëìá óôïí ðñüëïãï: %sóõíôáêôéêü óöÜëìá óôïí ïñéóìü ôïõ ðßíáêá ñåðåñôïñßïõ: %sóõíôáêôéêü óöÜëìá óôïí ïñéóìü locale þñáòóõíôáêôéêü óöÜëìá: äåí åßíáé ìÝóá óå ôìÞìá locale ïñéóìïýç ôåëéêÞ êùäéêïðïßçóç äåí Ý÷åé ïñéóôåß ìå `-t'áõôüò åßíáé ï ðñþôïò ïñéóìüòþñá ðñéí ôï ìçäÝíõðåñ÷åßëéóç þñáòðïëý ëßãá bytes óôçí êùäéêïðïßçóç ÷áñáêôÞñáõðåñâïëéêÜ ðïëëÜ bytes óôçí êùäéêïðïßçóç ÷áñáêôÞñáäçëþèçêáí ðïëëÝò êëÜóåéò ÷áñáêôÞñùíõðåñâïëéêÜ ðïëëÜ äåõôåñüëåðôá áíáðÞäçóçòõðïñâïëéêÜ ðïëëïß ôýðïé ôïðéêÞò þñáòõðåñâïëéêÜ ðïëëÝò ìåôáâÜóåéò;!õðåñâïëéêÜ ðïëëÜ âÜñçõðåñâïëéêÜ ðïëëÝò, Þ ðïëý ìáêñÝò, óõíôïìåýóåéò æþíçò þñáòáêïëïõèïýí óêïõðßäéá óôï ôÝëïò ôçò ãñáììÞòðñüâëçìá êáôÜ ôçí áðÜíôçóç óôï ðñüãñáììá %d -äåí åðéôñÝðåôáé äõï óõíå÷üìåíåò ãñáììÝò íá ðåñéÝ÷ïõí `...'ôõðþèçêå áðëüò ÷ñüíïòáäýíáôç ç åê÷þñçóç åíôáìéåõôÞ ãéá ôçí åßóïäïáäýíáôç ç áðåëåõèÝñùóç ðáñáìÝôñùíáüñéóôïÜãíùóôïò ÷áñáêôÞñáò `%s'Üãíùóôïò ÷áñáêôÞñáò óôï ðåäßï `%s' ôçò êáôçãïñßáò `%s'Üãíùóôï ëåêôéêü ðáñáâïëÞòÜãíùóôo ëåêôéêü `%s': ãñáììÞ áãíïÞèçêåÜãíùóôï óöÜëìá iconv() %dÜãíùóôï óåô `%s'Üãíùóôï óýìâïëï `%.*s': ãñáììÞ áãíïÞèçêåÜôáêôç æþíçìç ôåñìáôéæüìåíï ìÞíõìáìç ôåñìáôéæüìåío áëöáñéèìçôéêüìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜòìç ôåñìáôéæüìåíï óõìâïëéêü üíïìáìç ôåñìáôéæüìåíï üíïìá âÜñïõòôï åðÜíù üñéï óôï ðåäßï äåí åßíáé ìéêñüôåñï ôïõ êÜôù ïñßïõ÷ñÞóç: %s áñ÷åßï_åéóüäïõ -÷ñÞóç ôïõ 2/29 óå ÷ñüíï ìç äßóåêôïç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïòç ôéìÞ ãéá <%s> ðñÝðåé íá âñßóêåôáé ìåôáîý 1 êáé 4ç ôéìÞ ãéá ôï ðåäßï `%s' óôçí êáôçãïñßá `%s' äåí ðñÝðåé íá åßíáé êåíü áëöáñéèìéôéêüç ôéìÞ ôïõ ðñÝðåé íá åßíáé ìåãáëýôåñç ôçò ôéìÞò ôïõ ç ôéìÞ ôïõ ðåäßïõ `int_curr_symbol' óôçí êáôçãïñßá `LC_MONETARY' äåíóõìöùíåß ìå Ýãêõñï üíïìá óýìöùíá ìå ôï ISO 4217ç ôéìÞ ôïõ ðåäßïõ `int_curr_symbol' óôçí êáôçãïñßá `LC_MONETARY' Ý÷åé ëÜèïò ìÞêïòïé ôéìÝò ãéá ôï ðåäßï `%s' óôçí êáôçãïñßá `%s' ðñÝðåé íá åßíáé ìéêñüôåñåò ôïõ 127ðñïåéäïðïßçóç: êáôÜ ôçí áðïäï÷Þ óýíäåóçò: %sêáôÜ ôçí åê÷þñçóç ìíÞìçò ãéá êáôá÷þñçóç óôç ëáíèÜíïõóá ìíÞìçêáôÜ ôç äÝóìåõóç ôçò êáôá÷þñçóçò ðßíáêá hashêáôÜ ôçí åê÷þñçóç ìíÞìçò ãéá ôï áíôßãñáöï êëåéäéïýêáôÜ ôï Üíïéãìá ðáëéïý áñ÷åßïõ êáôáëüãïõêáôÜ ôçí ðñïåôïéìáóßá åîüäïõêáôÜ ôçí áíÜãíùóç âÜóåùò äåäïìÝíùíêáôÜ ôçí ðñïóðÝëáóç (stat) ôïõ áñ÷åßïõ äåäïìÝíùí ðñïößëêáôÜ ôçí åããñáöÞ áñ÷åßïõ âÜóåùò äåäïìÝíùíìç ðëÞñçò åããñáöÞôï áñ÷åßï åßíáé åããñÜøéìï êáé áðü Üëëïõò åêôüò ôïõ éäéïêôÞôçëÜèïò áñéèìüò ðáñáìÝôñùíëÜèïò áñéèìüò ðåäßùí óôç ãñáììÞ LeapëÜèïò áñéèìüò ðåäßùí óôç ãñáììÞ LinkëÜèïò áñéèìüò ðåäßùí óôç ãñáììÞ RuleëÜèïò áñéèìüò ðåäßùí óôç ãñáììÞ ðáñÜôáóçò ZoneëÜèïò áñéèìüò ðåäßùí óôç ãñáììÞ Zonexdr_reference: ç ìíÞìç åîáíôëÞèçêå -xdrrec_create: ç ìíÞìç åîáíôëÞèçêå -yp_update: áäõíáìßá ìåôáôñïðÞò ïíüìáôïò óõóôÞìáôïò óå üíïìá äéêôýïõ -yp_update: áäõíáìßá ëÞøçò äéåýèõíóçò äéáêïìéóôÞ - \ No newline at end of file diff -durpNa glibc-2.2.2/po/el.po glibc-2.2.3/po/el.po --- glibc-2.2.2/po/el.po Thu Sep 7 11:56:35 2000 +++ glibc-2.2.3/po/el.po Wed Apr 25 14:51:01 2001 @@ -3,6 +3,12 @@ # Mavroyanopoulos Nikos , 1999, 2000. # Simos Xenitellis , 1999, 2000. # +# This file is currently not installed since it contains illegal +# multibyte characters. Just run either of these: +# $ iconv -f iso-8859-7 -t utf-8 < el.po > /dev/null +# $ msgfmt el.po -o el.gmo +# to see the errors. +# msgid "" msgstr "" "Project-Id-Version: libc 2.1.3\n" diff -durpNa glibc-2.2.2/po/zh_TW.po glibc-2.2.3/po/zh_TW.po --- glibc-2.2.2/po/zh_TW.po Mon Aug 28 00:56:32 2000 +++ glibc-2.2.3/po/zh_TW.po Thu Apr 26 20:07:08 2001 @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) 2000 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001 Free Software Foundation, Inc. # Tung-Han Hsieh , 2000 # Yuan-Chung Cheng , 2000 # msgid "" msgstr "" "Project-Id-Version: libc 2.1.90\n" -"POT-Creation-Date: 2000-08-01 00:45-0400\n" +"POT-Creation-Date: 2001-01-21 08:03-0800\n" "PO-Revision-Date: 2000-08-DA HO:MI+DIST\n" "Last-Translator: Tung-Han Hsieh \n" " Yuan-Chung Cheng \n" @@ -23,24 +23,27 @@ msgstr "\t\t¦s¨úÅv­­ : " msgid "\t\tAttributes : " msgstr "\t\tÄÝ©Ê : " -#: sunrpc/rpc_main.c:1430 +#: sunrpc/rpc_main.c:1425 #, c-format msgid "" "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] " "infile\n" -msgstr "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" +msgstr "" +"\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] " +"infile\n" -#: sunrpc/rpc_main.c:1432 +#: sunrpc/rpc_main.c:1427 #, c-format msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" -msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" +msgstr "" +"\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" -#: sunrpc/rpc_main.c:1435 +#: sunrpc/rpc_main.c:1430 #, c-format msgid "\t%s [-n netid]* [-o outfile] [infile]\n" msgstr "\t%s [-n netid]* [-o outfile] [infile]\n" -#: sunrpc/rpc_main.c:1434 +#: sunrpc/rpc_main.c:1429 #, c-format msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" msgstr "\t%s [-s nettype]* [-o outfile] [infile]\n" @@ -206,102 +209,103 @@ msgstr " »¼°jªº¦¨­û:\n" msgid " program vers proto port\n" msgstr " µ{¦¡±Ä¥Îªº¨ó©w³s±µªú\n" -#: argp/argp-help.c:1568 +#: argp/argp-help.c:1572 msgid " or: " msgstr " ©ÎªÌ: " -#: elf/ldconfig.c:389 +#: elf/ldconfig.c:448 msgid " (SKIPPED)\n" msgstr " (©¿²¤)\n" -#: elf/ldconfig.c:387 +#: elf/ldconfig.c:446 msgid " (changed)\n" msgstr " (¤w§ïÅÜ)\n" -#: timezone/zic.c:423 +#: timezone/zic.c:421 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (³W«h¨Ó¦Û \"%s\", ²Ä %d ¦æ)" -#: argp/argp-help.c:1580 +#: argp/argp-help.c:1584 msgid " [OPTION...]" msgstr " [°Ñ¼Æ...]" -#: locale/programs/ld-collate.c:1712 locale/programs/ld-ctype.c:4039 -msgid " done\n" -msgstr " §¹¦¨\n" - -#: timezone/zic.c:420 +#: timezone/zic.c:418 #, c-format msgid "\"%s\", line %d: %s" msgstr "\"%s\", ²Ä %d ¦æ: %s" -#: timezone/zic.c:984 +#: timezone/zic.c:983 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "\"°Ï¬q %s\" ¦æ©M -l ¿ï¶µ¬O¤¬¥¸ªº" -#: timezone/zic.c:992 +#: timezone/zic.c:991 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "\"°Ï¬q %s\" ¦æ©M -p ¿ï¶µ¬O¤¬¥¸ªº" -#: sunrpc/rpc_main.c:1415 +#: sunrpc/rpc_main.c:1410 msgid "\"infile\" is required for template generation flags.\n" msgstr "\"infile\" ¬O¼Ëª©²£¥ÍºX¼Ð©Ò»Ýªº\n" -#: argp/argp-help.c:205 +#: argp/argp-help.c:209 #, c-format msgid "%.*s: ARGP_HELP_FMT parameter requires a value" msgstr "%.*s: ARGP_HELP_FMT °Ñ¼Æ»Ý­n¤@­Ó­È" -#: argp/argp-help.c:214 +#: argp/argp-help.c:218 #, c-format msgid "%.*s: Unknown ARGP_HELP_FMT parameter" msgstr "%.*s: ¥¼ª¾ªº ARGP_HELP_FMT °Ñ¼Æ" -#: locale/programs/ld-address.c:576 locale/programs/ld-collate.c:2727 -#: locale/programs/ld-collate.c:3820 locale/programs/ld-ctype.c:2736 -#: locale/programs/ld-identification.c:440 +#: locale/programs/ld-address.c:576 locale/programs/ld-collate.c:2593 +#: locale/programs/ld-collate.c:3719 locale/programs/ld-ctype.c:2110 +#: locale/programs/ld-ctype.c:2847 locale/programs/ld-identification.c:440 #: locale/programs/ld-measurement.c:232 locale/programs/ld-messages.c:326 #: locale/programs/ld-monetary.c:934 locale/programs/ld-name.c:300 #: locale/programs/ld-numeric.c:370 locale/programs/ld-paper.c:233 -#: locale/programs/ld-telephone.c:308 locale/programs/ld-time.c:1151 +#: locale/programs/ld-telephone.c:308 locale/programs/ld-time.c:1172 #, c-format msgid "%1$s: definition does not end with `END %1$s'" msgstr "%1$s: ©w¸q¨Ã¨S¦³¥H `END %1$s' °µ¬°µ²§ô" -#: elf/cache.c:160 elf/cache.c:170 +#: elf/cache.c:165 elf/cache.c:175 #, c-format msgid "%d libs found in cache `%s'\n" msgstr "%d ¨ç¦¡®w¦b§Ö¨ú `%s' ¤¤§ä¨ì\n" -#: timezone/zic.c:794 +#: timezone/zic.c:793 #, c-format msgid "%s in ruleless zone" msgstr "%s ¦b¨S¦³³W«hªº°Ï¬q" -#: elf/../sysdeps/generic/readelflib.c:64 +#: elf/../sysdeps/generic/readelflib.c:65 #, c-format msgid "%s is a 32 bit ELF file.\n" msgstr "%s ¬O¤@­Ó 32 ¦ì¤¸ªº ELF ÀɮסC\n" -#: elf/../sysdeps/generic/readelflib.c:66 +#: elf/../sysdeps/generic/readelflib.c:67 #, c-format msgid "%s is a 64 bit ELF file.\n" msgstr "%s ¬O¤@­Ó 64 ¦ì¤¸ªº ELF ÀɮסC\n" -#: elf/ldconfig.c:287 +#: elf/../sysdeps/unix/sysv/linux/i386/readelflib.c:48 +#, c-format +msgid "%s is for unknown machine %d.\n" +msgstr "%s ¬Oµ¹¥¼ª¾ªº¾÷¾¹ %d¡C\n" + +#: elf/ldconfig.c:329 #, c-format msgid "%s is not a known library type" msgstr "%s ¤£¬O¤@­Ó¤wª¾ªº¨ç¦¡®w«¬ºA" -#: elf/../sysdeps/generic/readelflib.c:75 +#: elf/../sysdeps/generic/readelflib.c:76 #, c-format msgid "%s is not a shared object file (Type: %d).\n" msgstr "%s ¤£¬O¤@­Ó¦@¥Î¥ØªºÀÉ («¬ºA: %d)¡C\n" -#: elf/ldconfig.c:356 +#: elf/ldconfig.c:415 #, c-format msgid "%s is not a symbolic link\n" msgstr "%s ¤£¬O¤@­Ó²Å¸¹³s±µÀÉ\n" @@ -326,125 +330,125 @@ msgstr "%s%s%s:%u: %s%sµLªk¹w®Æªº¿ù»~: % msgid "%s%sUnknown signal %d\n" msgstr "%s%s¥¼ª¾ªº°T¸¹ %d\n" -#: timezone/zic.c:2229 +#: timezone/zic.c:2228 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: %d µLªk¥¿½T¦a©µ®i°T¸¹\n" -#: locale/programs/charmap.c:289 +#: locale/programs/charmap.c:326 #, c-format msgid "%s: must be greater than \n" msgstr "%s: ¥²¶·¤j©ó \n" -#: sunrpc/rpc_main.c:422 +#: sunrpc/rpc_main.c:423 #, c-format msgid "%s: C preprocessor failed with exit code %d\n" msgstr "%s: C «e¸m³B²z¾¹¥¢®Ä¡A¨äµ²§ô½X¬° %d\n" -#: sunrpc/rpc_main.c:419 +#: sunrpc/rpc_main.c:420 #, c-format msgid "%s: C preprocessor failed with signal %d\n" msgstr "%s: C «e¸m³B²z¾¹¥¢®Ä¡A¨ä°T¸¹­È¬° %d\n" -#: timezone/zic.c:1495 +#: timezone/zic.c:1494 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: µLªk²£¥Í %s: %s\n" -#: timezone/zic.c:2207 +#: timezone/zic.c:2206 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: µLªk«Ø¥ß¥Ø¿ý %s: %s\n" -#: timezone/zic.c:646 +#: timezone/zic.c:645 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: µLªk±q %s ³sµ²¨ì %s: %s\n" -#: timezone/zic.c:820 +#: timezone/zic.c:819 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: µLªk¶}±Ò %s: %s\n" -#: timezone/zic.c:1485 +#: timezone/zic.c:1484 #, c-format msgid "%s: Can't remove %s: %s\n" msgstr "%s: µLªk²¾°£ %s: %s\n" -#: timezone/zic.c:631 +#: timezone/zic.c:630 #, c-format msgid "%s: Can't unlink %s: %s\n" msgstr "%s: µLªk¨ú®ø³sµ² %s: %s\n" -#: timezone/zic.c:889 +#: timezone/zic.c:888 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: Ãö³¬¿ù»~ %s: %s\n" -#: timezone/zic.c:882 +#: timezone/zic.c:881 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: Ū¨ú¿ù»~ %s\n" -#: timezone/zdump.c:266 +#: timezone/zdump.c:267 #, c-format msgid "%s: Error writing " msgstr "%s: ¼g¤J¿ù»~ " -#: timezone/zic.c:1561 +#: timezone/zic.c:1560 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: ¼g¤J¿ù»~ %s\n" -#: timezone/zic.c:867 +#: timezone/zic.c:866 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "%s: ¶|®É³]©w¦æ (leap line) ¥X²{¦b¤£§t¶|¬íªº³]©wÀÉ %s ¤¤\n" -#: timezone/zic.c:361 +#: timezone/zic.c:359 #, c-format msgid "%s: Memory exhausted: %s\n" msgstr "%s: °O¾ÐÅé¤w¥Î§¹: %s\n" -#: timezone/zic.c:526 +#: timezone/zic.c:525 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: ±z¨Ï¥Î¤F¶W¹L¤@­Ó -L ¿ï¶µ\n" -#: timezone/zic.c:486 +#: timezone/zic.c:485 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: ±z¨Ï¥Î¤F¶W¹L¤@­Ó -d ¿ï¶µ\n" -#: timezone/zic.c:496 +#: timezone/zic.c:495 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: ±z¨Ï¥Î¤F¶W¹L¤@­Ó -l ¿ï¶µ\n" -#: timezone/zic.c:506 +#: timezone/zic.c:505 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: ±z¨Ï¥Î¤F¶W¹L¤@­Ó -p ¿ï¶µ\n" -#: timezone/zic.c:516 +#: timezone/zic.c:515 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: ±z¨Ï¥Î¤F¶W¹L¤@­Ó -y ¿ï¶µ\n" -#: argp/argp-parse.c:640 +#: argp/argp-parse.c:646 #, c-format msgid "%s: Too many arguments\n" msgstr "%s: ¤Ó¦hªº¤Þ¼Æ\n" -#: locale/programs/ld-collate.c:423 locale/programs/ld-collate.c:449 -#: locale/programs/ld-collate.c:465 +#: locale/programs/ld-collate.c:457 locale/programs/ld-collate.c:483 +#: locale/programs/ld-collate.c:499 #, c-format msgid "%s: `%s' mentioned more than once in definition of weight %d" msgstr "%s: `%s' ¤£¥u¤@¦¸¦a¦bÅv­« %d ¤¤³Q´£¨ì" -#: locale/programs/ld-collate.c:1282 +#: locale/programs/ld-collate.c:1323 #, c-format -msgid "%s: `%s' must be a charater" +msgid "%s: `%s' must be a character" msgstr "%s: `%s' ¥²¶·¬O¤@­Ó¦r¤¸" #: locale/programs/ld-address.c:248 locale/programs/ld-address.c:276 @@ -458,86 +462,91 @@ msgstr "%s: `%s' ­È»P `%s' ­È¤£²Å¦X" msgid "%s: `-1' must be last entry in `%s' field" msgstr "%s: `-1' ¦b `%s' Äæ¦ì¤¤¥²¶·¬O³Ì«á¤@­Ó¶µ¥Ø" -#: locale/programs/ld-collate.c:413 locale/programs/ld-collate.c:439 +#: locale/programs/ld-collate.c:447 locale/programs/ld-collate.c:473 #, c-format msgid "%s: `forward' and `backward' are mutually excluding each other" msgstr "%s: `forward' ¥H¤Î `backward' ©¼¦¹¤¬¬Û±Æ¥¸" -#: locale/programs/ld-collate.c:1475 +#: locale/programs/ld-collate.c:1515 #, c-format msgid "" "%s: `position' must be used for a specific level in all sections or none" msgstr "%s: `position' ¥²¶·¦b©Ò¦³°Ï¶ô¸Ì¯S©wªºµ¥¯Å¤¤¨Ï¥Î¡A§_«h¤£¯à¨Ï¥Î" -#: locale/programs/ld-collate.c:1082 +#: locale/programs/ld-ctype.c:2635 locale/programs/ld-ctype.c:2775 +#, c-format +msgid "%s: `translit_start' section does not end with `translit_end'" +msgstr "%s: `translit_start' ¤p¸`¨Ã¨S¦³¥H `translit_end' °µ¬°µ²§ô" + +#: locale/programs/ld-collate.c:1123 #, c-format msgid "" "%s: byte sequence of first character of sequence is not lower than that of " "the last character" msgstr "%s: ²Ä¤@­Ó¦r¤¸§Ç¦Cªº¦ì¤¸²Õ§Ç¦C¨Ã¨S¦³§C©ó³Ì«á¤@­Ó¦r¤¸ªº¦ì¤¸²Õ§Ç¦C" -#: locale/programs/ld-collate.c:1040 +#: locale/programs/ld-collate.c:1081 #, c-format msgid "" "%s: byte sequences of first and last character must have the same length" msgstr "%s: ²Ä¤@­Ó»P³Ì«á¤@­Ó¦r¤¸ªº¦ì¤¸²Õ§Ç¦C¥²¶·¦³¬Û¦Pªºªø«×" -#: locale/programs/ld-collate.c:3742 +#: locale/programs/ld-collate.c:3642 #, c-format msgid "%s: cannot have `%s' as end of ellipsis range" msgstr "%s: µLªk¥Î `%s' °µ¬°¬Ù²¤°Ï¬qªºµ²§À" -#: locale/programs/ld-collate.c:3421 +#: locale/programs/ld-collate.c:3308 #, c-format msgid "%s: cannot reorder after %.*s: symbol not known" msgstr "%s: µLªk­«·s±Æ¦C¦b %.*s ¤§«á: ¥¼ª¾ªº²Å¸¹" -#: locale/programs/ld-ctype.c:2797 locale/programs/ld-ctype.c:2881 -#: locale/programs/ld-ctype.c:2901 locale/programs/ld-ctype.c:2922 -#: locale/programs/ld-ctype.c:2943 locale/programs/ld-ctype.c:2964 -#: locale/programs/ld-ctype.c:2985 locale/programs/ld-ctype.c:3025 -#: locale/programs/ld-ctype.c:3046 locale/programs/ld-ctype.c:3113 +#: locale/programs/ld-ctype.c:2910 locale/programs/ld-ctype.c:2994 +#: locale/programs/ld-ctype.c:3014 locale/programs/ld-ctype.c:3035 +#: locale/programs/ld-ctype.c:3056 locale/programs/ld-ctype.c:3077 +#: locale/programs/ld-ctype.c:3098 locale/programs/ld-ctype.c:3138 +#: locale/programs/ld-ctype.c:3159 locale/programs/ld-ctype.c:3226 #, c-format msgid "%s: character `%s' in charmap not representable with one byte" msgstr "%s: ¦r¶°¹ï·Óªí¤¤ªº¦r¤¸ `%s' µLªkªí¥Ü¬°³æ¤@¦ì¤¸²Õ" -#: locale/programs/ld-ctype.c:3157 locale/programs/ld-ctype.c:3182 +#: locale/programs/ld-ctype.c:3270 locale/programs/ld-ctype.c:3295 #, c-format msgid "" "%s: character `%s' needed as default value not representable with one byte" msgstr "%s: °µ¬°¹w³]­È©Ò»Ýªº¦r¤¸ `%s' µLªkªí¥Ü¬°³æ¤@¦ì¤¸²Õ" -#: locale/programs/ld-ctype.c:2792 +#: locale/programs/ld-ctype.c:2905 #, c-format msgid "%s: character `%s' not defined in charmap while needed as default value" msgstr "%s: ¦r¤¸ `%s' ¦b¦r¶°¹ï·Óªí¤¤¨S¦³©w¸q¡A¦ý¥¦¬O¥²»Ýªº¹w³]­È" -#: locale/programs/ld-ctype.c:2876 locale/programs/ld-ctype.c:2896 -#: locale/programs/ld-ctype.c:2938 locale/programs/ld-ctype.c:2959 -#: locale/programs/ld-ctype.c:2980 locale/programs/ld-ctype.c:3020 -#: locale/programs/ld-ctype.c:3041 locale/programs/ld-ctype.c:3108 -#: locale/programs/ld-ctype.c:3150 locale/programs/ld-ctype.c:3175 +#: locale/programs/ld-ctype.c:2989 locale/programs/ld-ctype.c:3009 +#: locale/programs/ld-ctype.c:3051 locale/programs/ld-ctype.c:3072 +#: locale/programs/ld-ctype.c:3093 locale/programs/ld-ctype.c:3133 +#: locale/programs/ld-ctype.c:3154 locale/programs/ld-ctype.c:3221 +#: locale/programs/ld-ctype.c:3263 locale/programs/ld-ctype.c:3288 #, c-format msgid "%s: character `%s' not defined while needed as default value" msgstr "%s: ¦r¤¸ `%s' ¨S¦³©w¸q¡A¦ý¥¦¬O¥²»Ýªº¹w³]­È" -#: timezone/zic.c:1928 +#: timezone/zic.c:1927 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: ¿é¤J©R¥O¬° '%s', µ²ªG¬° %d\n" -#: locale/programs/ld-time.c:223 +#: locale/programs/ld-time.c:225 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" msgstr "%s: ¦b `era' Äæ¦ìªº¦r¦ê %Zd ¤¤¡A¤è¦VºX¼Ð¬J¤£¬O '+' ¤]¤£¬O '-'" -#: locale/programs/ld-time.c:235 +#: locale/programs/ld-time.c:237 #, c-format msgid "" "%s: direction flag in string %Zd in `era' field is not a single character" msgstr "%s: ¦b `era' Äæ¦ìªº¦r¦ê %Zd ¤¤¡A¤è¦VºX¼Ð¤£¬O¤@­Ó³æ¤@¦r¤¸" -#: locale/programs/ld-ctype.c:2643 +#: locale/programs/ld-ctype.c:2727 #, c-format msgid "%s: duplicate `default_missing' definition" msgstr "%s: ­«½Æªº `default_missing' ©w¸q" @@ -547,39 +556,39 @@ msgstr "%s: ­«½Æªº `default_missing' ©w¸ msgid "%s: duplicate category version definition" msgstr "%s: ­«½ÆªºÃþ§Oª©¥»©w¸q" -#: locale/programs/ld-collate.c:2845 +#: locale/programs/ld-collate.c:2711 #, c-format msgid "%s: duplicate declaration of section `%s'" msgstr "%s: ­«½Æªº `%s' °Ï¶ô«Å§i" -#: locale/programs/ld-collate.c:2809 +#: locale/programs/ld-collate.c:2675 #, c-format msgid "%s: duplicate definition of `%s'" msgstr "%s: ­«½Æªº©w¸q `%s'" -#: locale/programs/ld-collate.c:3792 +#: locale/programs/ld-collate.c:3691 #, c-format msgid "%s: empty category description not allowed" -msgstr "%s: ªÅ¥ÕªºÃþ§O´y­z¬O¤£¤¹³\\ªº" +msgstr "%s: ªÅ¥ÕªºÃþ§O´y­z¬O¤£¤¹³\ªº" -#: locale/programs/ld-collate.c:717 +#: locale/programs/ld-collate.c:755 #, c-format msgid "%s: empty weight string not allowed" -msgstr "%s: ªÅ¥ÕªºÅv­«¦r¦ê¬O¤£¤¹³\\ªº" +msgstr "%s: ªÅ¥ÕªºÅv­«¦r¦ê¬O¤£¤¹³\ªº" -#: locale/programs/charmap.c:794 +#: locale/programs/charmap.c:831 #, c-format msgid "%s: error in state machine" msgstr "%s: ª¬ºA¾÷¿ù»~" -#: locale/programs/ld-ctype.c:2411 +#: locale/programs/ld-ctype.c:2483 #, c-format msgid "%s: field `%s' declared more than once" msgstr "%s: `%s' Äæ¦ì¤£¥u¤@¦¸¦a«Å§i" -#: locale/programs/ld-ctype.c:1493 locale/programs/ld-ctype.c:1618 -#: locale/programs/ld-ctype.c:1724 locale/programs/ld-ctype.c:2274 -#: locale/programs/ld-ctype.c:3216 +#: locale/programs/ld-ctype.c:1525 locale/programs/ld-ctype.c:1650 +#: locale/programs/ld-ctype.c:1756 locale/programs/ld-ctype.c:2346 +#: locale/programs/ld-ctype.c:3329 #, c-format msgid "%s: field `%s' does not contain exactly ten entries" msgstr "%s: `%s' Äæ¦ì¨S¦³ºë½T¥]§t¤Q­Ó¶µ¥Ø" @@ -608,32 +617,32 @@ msgstr "%s: Äæ¦ì `%s' ¨S¦³©w¸q" msgid "%s: field `%s' undefined" msgstr "%s: Äæ¦ì `%s' ¨S¦³©w¸q" -#: locale/programs/ld-time.c:256 +#: locale/programs/ld-time.c:258 #, c-format msgid "%s: garbage at end of offset value in string %Zd in `era' field" msgstr "%s: µL¥Îªº¸ê®Æ¡A¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤¥½§Àªº¦ì²¾­È" -#: locale/programs/ld-time.c:316 +#: locale/programs/ld-time.c:318 #, c-format msgid "%s: garbage at end of starting date in string %Zd in `era' field " msgstr "%s: µL¥Îªº¸ê®Æ¡A¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤¥½§Àªº°_©l¤é´Á" -#: locale/programs/ld-time.c:393 +#: locale/programs/ld-time.c:395 #, c-format msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "%s: µL¥Îªº¸ê®Æ¡A¦b `era' °Ï°ì¡B¦r¦ê %Zd ¤¤¥½§Àªºµ²§ô¤é´Á" -#: posix/getopt.c:791 +#: posix/getopt.c:795 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: ¤£¦Xªkªº¿ï¶µ -- %c\n" -#: locale/programs/ld-address.c:573 locale/programs/ld-collate.c:3818 -#: locale/programs/ld-ctype.c:2733 locale/programs/ld-identification.c:437 +#: locale/programs/ld-address.c:573 locale/programs/ld-collate.c:3717 +#: locale/programs/ld-ctype.c:2844 locale/programs/ld-identification.c:437 #: locale/programs/ld-measurement.c:229 locale/programs/ld-messages.c:324 #: locale/programs/ld-monetary.c:932 locale/programs/ld-name.c:298 #: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:231 -#: locale/programs/ld-telephone.c:306 locale/programs/ld-time.c:1149 +#: locale/programs/ld-telephone.c:306 locale/programs/ld-time.c:1170 #, c-format msgid "%s: incomplete `END' line" msgstr "%s: ¤£§¹¾ãªº `END' ¦æ" @@ -648,27 +657,27 @@ msgstr "%s: ¤£¾A¥Îªº¸õ²æ§Ç¦C `%%%c', ¦bÄ msgid "%s: invalid escape sequence in field `%s'" msgstr "%s: ¦bÄæ¦ì `%s' ¤¤ªº¸õ²æ§Ç¦C¤£¾A¥Î" -#: locale/programs/ld-time.c:248 +#: locale/programs/ld-time.c:250 #, c-format msgid "%s: invalid number for offset in string %Zd in `era' field" msgstr "%s: ¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤ªº¦ì²¾¼Æ¦r¤£¾A¥Î" -#: locale/programs/ld-collate.c:3269 +#: locale/programs/ld-collate.c:3143 #, c-format msgid "%s: invalid number of sorting rules" msgstr "%s: ¤£¾A¥Îªº±Æ§Ç³W«h¼Æ¥Ø" -#: posix/getopt.c:794 +#: posix/getopt.c:798 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ¤£¾A¥Îªº¿ï¶µ -- %c\n" -#: locale/programs/ld-time.c:307 +#: locale/programs/ld-time.c:309 #, c-format msgid "%s: invalid starting date in string %Zd in `era' field" msgstr "%s: ¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤ªº°_©l¤é´Á¤£¾A¥Î" -#: locale/programs/ld-time.c:384 +#: locale/programs/ld-time.c:386 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "%s: ¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤ªºµ²§ô¤é´Á¤£¾A¥Î" @@ -683,38 +692,38 @@ msgstr "%s: ¦bÄæ¦ì `%s' ¤¤ªº­È¤£¾A¥Î" msgid "%s: language abbreviation `%s' not defined" msgstr "%s: »y¨¥ÁY¼g `%s' ¨S¦³©w¸q" -#: locale/programs/ld-collate.c:3347 locale/programs/ld-collate.c:3460 -#: locale/programs/ld-collate.c:3796 +#: locale/programs/ld-collate.c:3223 locale/programs/ld-collate.c:3346 +#: locale/programs/ld-collate.c:3695 #, c-format msgid "%s: missing `order_end' keyword" msgstr "%s: ¯Ê¤Ö `order_end' ÃöÁä¦r" -#: locale/programs/ld-collate.c:3474 locale/programs/ld-collate.c:3808 +#: locale/programs/ld-collate.c:3360 locale/programs/ld-collate.c:3707 #, c-format msgid "%s: missing `reorder-end' keyword" msgstr "%s: ¯Ê¤Ö `reorder-end' ÃöÁä¦r" -#: locale/programs/ld-collate.c:3811 +#: locale/programs/ld-collate.c:3710 #, c-format msgid "%s: missing `reorder-sections-end' keyword" msgstr "%s: ¯Ê¤Ö `reorder-sections-end' ÃöÁä¦r" -#: locale/programs/ld-time.c:433 +#: locale/programs/ld-time.c:435 #, c-format msgid "%s: missing era format in string %Zd in `era' field" msgstr "%s: ¯Ê¤Ö era ®æ¦¡¡A¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤" -#: locale/programs/ld-time.c:421 +#: locale/programs/ld-time.c:423 #, c-format msgid "%s: missing era name in string %Zd in `era' field" msgstr "%s: ¯Ê¤Ö era ¦WºÙ¡A¦b `era' Äæ¦ì¡B¦r¦ê %Zd ¤¤" -#: locale/programs/ld-collate.c:3247 +#: locale/programs/ld-collate.c:3119 #, c-format msgid "%s: multiple order definitions for section `%s'" msgstr "%s: `%s' °Ï¶ô¤¤¦³¦h­Ó¶¶§Ç©w¸q" -#: locale/programs/ld-collate.c:3295 +#: locale/programs/ld-collate.c:3169 #, c-format msgid "%s: multiple order definitions for unnamed section" msgstr "%s: ¥¼©R¦Wªº°Ï¶ô¤¤¦³¦h­Ó¶¶§Ç©w¸q" @@ -729,7 +738,12 @@ msgstr "%s: ¨S¦³µ¹Äæ¦ì `%s' ¥¿½Tªº±`³Wªí msgid "%s: no identification for category `%s'" msgstr "%s: Ãþ§O `%s' ¨S¦³»{ÃÒ" -#: locale/programs/ld-collate.c:557 +#: locale/programs/ld-ctype.c:2753 +#, c-format +msgid "%s: no representable `default_missing' definition found" +msgstr "%s: §ä¤£¨ì¥iªí¥Ü¬° `default_missing' ªº©w¸q" + +#: locale/programs/ld-collate.c:591 #, c-format msgid "%s: not enough sorting rules" msgstr "%s: ±Æ§Ç³W«h¤£¨¬" @@ -739,143 +753,139 @@ msgstr "%s: ±Æ§Ç³W«h¤£¨¬" msgid "%s: numeric country code `%d' not valid" msgstr "%s: °ê®a¼Æ¦r¥N½X `%d' ¿ù»~" -#: locale/programs/ld-ctype.c:2613 -#, c-format -msgid "%s: only one `include' instruction allowed" -msgstr "%s: ¥u¤¹³\\¤@­Ó `include' «ü¥O" - -#: posix/getopt.c:714 +#: posix/getopt.c:718 #, c-format msgid "%s: option `%c%s' doesn't allow an argument\n" -msgstr "%s: ¿ï¶µ `%c%s' ¤£¤¹³\\ªþ¥[¤Þ¼Æ\n" +msgstr "%s: ¿ï¶µ `%c%s' ¤£¤¹³\ªþ¥[¤Þ¼Æ\n" -#: posix/getopt.c:684 +#: posix/getopt.c:688 #, c-format msgid "%s: option `%s' is ambiguous\n" msgstr "%s: ¿ï¶µ `%s' §t¸q¤£²M\n" -#: posix/getopt.c:732 posix/getopt.c:905 +#: posix/getopt.c:736 posix/getopt.c:909 #, c-format msgid "%s: option `%s' requires an argument\n" msgstr "%s: ¿ï¶µ `%s' »Ý­n¤@­Ó¤Þ¼Æ\n" -#: posix/getopt.c:709 +#: posix/getopt.c:713 #, c-format msgid "%s: option `--%s' doesn't allow an argument\n" -msgstr "%s: ¿ï¶µ `--%s' ¤£¤¹³\\ªþ¥[¤Þ¼Æ\n" +msgstr "%s: ¿ï¶µ `--%s' ¤£¤¹³\ªþ¥[¤Þ¼Æ\n" -#: posix/getopt.c:889 +#: posix/getopt.c:893 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" -msgstr "%s: ¿ï¶µ `-W %s' ¤£¤¹³\\ªþ¥[¤Þ¼Æ\n" +msgstr "%s: ¿ï¶µ `-W %s' ¤£¤¹³\ªþ¥[¤Þ¼Æ\n" -#: posix/getopt.c:871 +#: posix/getopt.c:875 #, c-format msgid "%s: option `-W %s' is ambiguous\n" msgstr "%s: ¿ï¶µ `-W %s' §t¸q¤£²M\n" -#: posix/getopt.c:824 posix/getopt.c:954 +#: posix/getopt.c:828 posix/getopt.c:958 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: ¿ï¶µ»Ý­n¤@­Ó¤Þ¼Æ -- %c\n" -#: locale/programs/ld-collate.c:1273 locale/programs/ld-collate.c:3755 +#: locale/programs/ld-collate.c:1314 locale/programs/ld-collate.c:3654 #, c-format msgid "%s: order for `%.*s' already defined at %s:%Zu" msgstr "%s: `%.*s' ªº¶¶§Ç¤w¦b %s:%Zu ¤¤©w¸q" -#: locale/programs/ld-collate.c:3409 +#: locale/programs/ld-collate.c:3297 #, c-format msgid "%s: order for collating element %.*s not yet defined" msgstr "%s: ¹ï·Ó¤¸¯À %.*s ªº¶¶§Ç©|¥¼©w¸q" -#: locale/programs/ld-collate.c:3390 +#: locale/programs/ld-collate.c:3281 #, c-format msgid "%s: order for collating symbol %.*s not yet defined" msgstr "%s: ¹ï·Ó²Å¸¹ %.*s ªº¶¶§Ç©|¥¼©w¸q" -#: sunrpc/rpc_main.c:288 +#: sunrpc/rpc_main.c:289 #, c-format msgid "%s: output would overwrite %s\n" -msgstr "%s: ¿é¥X±N·|Âл\\ %s\n" +msgstr "%s: ¿é¥X±N·|Âл\ %s\n" -#: timezone/zic.c:874 timezone/zic.c:1288 timezone/zic.c:1313 +#: timezone/zic.c:873 timezone/zic.c:1287 timezone/zic.c:1312 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: ÄY­«¿ù»~: ¿ù»~ªº¥ª­È (l_value) %d\n" -#: locale/programs/charmap.c:801 locale/programs/ld-address.c:592 -#: locale/programs/ld-collate.c:2724 locale/programs/ld-collate.c:3836 -#: locale/programs/ld-ctype.c:2753 locale/programs/ld-identification.c:456 +#: locale/programs/charmap.c:838 locale/programs/ld-address.c:592 +#: locale/programs/ld-collate.c:2590 locale/programs/ld-collate.c:3735 +#: locale/programs/ld-ctype.c:2107 locale/programs/ld-ctype.c:2864 +#: locale/programs/ld-identification.c:456 #: locale/programs/ld-measurement.c:248 locale/programs/ld-messages.c:342 #: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:316 #: locale/programs/ld-numeric.c:386 locale/programs/ld-paper.c:249 -#: locale/programs/ld-telephone.c:324 locale/programs/ld-time.c:1167 +#: locale/programs/ld-telephone.c:324 locale/programs/ld-time.c:1188 #: locale/programs/locfile.h:103 locale/programs/repertoire.c:325 #, c-format msgid "%s: premature end of file" msgstr "%s: ¥¼§¹¦¨¤w¹FÀɮתº¥½§À" -#: locale/programs/ld-collate.c:3508 locale/programs/ld-collate.c:3680 +#: locale/programs/ld-collate.c:3394 locale/programs/ld-collate.c:3580 #, c-format msgid "%s: section `%.*s' not known" msgstr "%s: ¥¼ª¾ªº°Ï¶ô `%.*s'" -#: locale/programs/ld-time.c:335 +#: locale/programs/ld-time.c:337 #, c-format msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "%s: ¦b `era' °Ï°ìªº¦r¦ê %Zd ¤¤ªº±Ò©l¤é´Á¬O¤£¾A¥Îªº" -#: locale/programs/ld-time.c:412 +#: locale/programs/ld-time.c:414 #, c-format msgid "%s: stopping date is invalid in string %Zd in `era' field" msgstr "%s: ¦b `era' °Ï°ìªº¦r¦ê %Zd ¤¤ªºµ²§ô¤é´Á¬O¤£¾A¥Îªº" -#: locale/programs/ld-collate.c:1207 +#: locale/programs/ld-collate.c:1248 #, c-format msgid "%s: symbolic range ellipsis must not be direct followed by `order_end'" msgstr "%s: ²Å¸¹½d³òªº¬Ù²¤¤£¥i¥Hª½±µ¦b `order_end' ¤§«e" -#: locale/programs/ld-collate.c:1203 +#: locale/programs/ld-collate.c:1244 #, c-format msgid "%s: symbolic range ellipsis must not directly follow `order_start'" msgstr "%s: ²Å¸¹½d³òªº¬Ù²¤¤£¥i¥Hª½±µ¦b `order_start' ¤§«á" -#: locale/programs/ld-address.c:583 locale/programs/ld-collate.c:484 -#: locale/programs/ld-collate.c:536 locale/programs/ld-collate.c:827 -#: locale/programs/ld-collate.c:840 locale/programs/ld-collate.c:2715 -#: locale/programs/ld-collate.c:3827 locale/programs/ld-ctype.c:1808 -#: locale/programs/ld-ctype.c:2592 locale/programs/ld-ctype.c:2744 -#: locale/programs/ld-identification.c:447 +#: locale/programs/ld-address.c:583 locale/programs/ld-collate.c:518 +#: locale/programs/ld-collate.c:570 locale/programs/ld-collate.c:865 +#: locale/programs/ld-collate.c:878 locale/programs/ld-collate.c:2581 +#: locale/programs/ld-collate.c:3726 locale/programs/ld-ctype.c:1840 +#: locale/programs/ld-ctype.c:2098 locale/programs/ld-ctype.c:2673 +#: locale/programs/ld-ctype.c:2855 locale/programs/ld-identification.c:447 #: locale/programs/ld-measurement.c:239 locale/programs/ld-messages.c:333 #: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:307 #: locale/programs/ld-numeric.c:377 locale/programs/ld-paper.c:240 -#: locale/programs/ld-telephone.c:315 locale/programs/ld-time.c:1158 +#: locale/programs/ld-telephone.c:315 locale/programs/ld-time.c:1179 #, c-format msgid "%s: syntax error" msgstr "%s: »yªk¿ù»~" -#: locale/programs/ld-ctype.c:2106 +#: locale/programs/ld-ctype.c:2178 #, c-format msgid "%s: syntax error in definition of new character class" msgstr "%s: ¦b©w¸q·s¦r¤¸Ãþ§O®É»yªk¿ù»~" -#: locale/programs/ld-ctype.c:2121 +#: locale/programs/ld-ctype.c:2193 #, c-format msgid "%s: syntax error in definition of new character map" msgstr "%s: ¦b©w¸q·s¦r¤¸¹ïÀ³®É»yªk¿ù»~" -#: locale/programs/ld-ctype.c:4131 +#: locale/programs/ld-ctype.c:3735 #, c-format msgid "%s: table for class \"%s\": %lu bytes\n" msgstr "%s: Ãþ§O \"%s\" ªí®æ: %lu ¦ì¤¸²Õ\n" -#: locale/programs/ld-ctype.c:4221 +#: locale/programs/ld-ctype.c:3803 #, c-format msgid "%s: table for map \"%s\": %lu bytes\n" msgstr "%s: ¹ï¬Mªí \"%s\" ªí®æ: %lu ¦ì¤¸²Õ\n" -#: locale/programs/ld-ctype.c:4453 +#: locale/programs/ld-ctype.c:3935 #, c-format msgid "%s: table for width: %lu bytes\n" msgstr "%s: ¼e«×ªí®æ: %lu ¦ì¤¸²Õ\n" @@ -885,88 +895,86 @@ msgstr "%s: ¼e«×ªí®æ: %lu ¦ì¤¸²Õ\n" msgid "%s: terminology language code `%s' not defined" msgstr "%s: ³N»y»y¨¥½s½X `%s' ¥¼©w¸q" -#: locale/programs/ld-collate.c:1014 +#: locale/programs/ld-collate.c:1054 #, c-format -msgid "%s: the start end the end symbol of a range must stand for characters" +msgid "%s: the start and the end symbol of a range must stand for characters" msgstr "%s: ±Ò©l»Pµ²§ô²Å¸¹½d³ò¥²¶·¥Nªí¦r¤¸" -#: locale/programs/ld-time.c:462 +#: locale/programs/ld-time.c:464 #, c-format msgid "%s: third operand for value of field `%s' must not be larger than %d" msgstr "%s: Äæ¦ì `%s' ­Èªº²Ä¤T­Ó¹Bºâ¤¸¤£¥i¥H¤ñ %d ¤j" -#: locale/programs/ld-collate.c:521 +#: locale/programs/ld-collate.c:555 #, c-format msgid "%s: too many rules; first entry only had %d" msgstr "%s: ¤Ó¦h³W«h¡F²Ä¤@­Ó¶µ¥Ø¥u¥]§t %d" -#: locale/programs/ld-collate.c:868 +#: locale/programs/ld-collate.c:906 #, c-format msgid "%s: too many values" msgstr "%s: ¤Ó¦hÅܼƭÈ" -#: locale/programs/ld-ctype.c:4483 +#: locale/programs/ld-ctype.c:3639 #, c-format msgid "%s: transliteration data from locale `%s' not available" -msgstr "%s: locale `%s' ªº­µÄ¶¸ê®Æ¤£¦s¦b" +msgstr "%s: °Ï°ì¤Æ¸ê®Æ®w (locale) `%s' ªº­µÄ¶¸ê®Æ¤£¦s¦b" -#: sunrpc/rpc_main.c:295 +#: sunrpc/rpc_main.c:296 #, c-format msgid "%s: unable to open %s: %m\n" msgstr "%s: µLªk¶}±Ò %s: %m\n" -#: locale/programs/ld-collate.c:2982 +#: locale/programs/ld-collate.c:2849 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "%s: ¥¼ª¾ªº¦r¤¸¦b¹ï·Ó²Å¸¹¦WºÙ¤¤" -#: locale/programs/ld-collate.c:3111 +#: locale/programs/ld-collate.c:2981 #, c-format msgid "%s: unknown character in equivalent definition name" msgstr "%s: ¥¼ª¾ªº¦r¤¸¦b¦P¸q©w¸q¦WºÙ¤¤" -#: locale/programs/ld-collate.c:3124 +#: locale/programs/ld-collate.c:2994 #, c-format msgid "%s: unknown character in equivalent definition value" msgstr "%s: ¥¼ª¾ªº¦r¤¸¦b¦P¸q©w¸q­È¤¤" -#: locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1040 #, c-format msgid "%s: unknown character in field `%s'" msgstr "%s: ¥¼ª¾ªº¦r¤¸¦bÄæ¦ì `%s' ¤¤" -#: locale/programs/ld-collate.c:3221 +#: locale/programs/ld-collate.c:3091 #, c-format msgid "%s: unknown section name `%s'" msgstr "%s: ¥¼ª¾ªº°Ï¶ô¦WºÙ `%s'" -#: locale/programs/ld-collate.c:3134 +#: locale/programs/ld-collate.c:3004 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" msgstr "%s: ¥¼ª¾ªº²Å¸¹ `%s' ¦b¦P¸q©w¸q¤¤" -#: posix/getopt.c:765 +#: posix/getopt.c:769 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n" -#: posix/getopt.c:761 +#: posix/getopt.c:765 #, c-format msgid "%s: unrecognized option `--%s'\n" msgstr "%s: ¥¼ª¾ªº¿ï¶µ `--%s'\n" -#: timezone/zic.c:445 +#: timezone/zic.c:443 #, c-format msgid "" -"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d " -"directory ]\n" -"\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" msgstr "" -"%s: ¨Ï¥Î¤è¦¡: %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d " -"directory ]\n" -"\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +"%s: ¨Ï¥Î¤è¦¡: %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" -#: timezone/zdump.c:174 +#: timezone/zdump.c:175 #, c-format msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n" msgstr "%s: ¨Ï¥Î¤è¦¡: %s [ -v ] [ -c cutoff ] zonename ...\n" @@ -998,31 +1006,31 @@ msgstr "%s: Äæ¦ì `int_curr_symbol' ­Èªºª msgid "%s: values for field `%s' must be smaller than 127" msgstr "%s: Äæ¦ì `%s' ªº­È¥²¶·¤p©ó 127" -#: locale/programs/ld-time.c:486 +#: locale/programs/ld-time.c:488 #, c-format msgid "%s: values for field `%s' must not be larger than %d" msgstr "%s: Äæ¦ì `%s' ªº­È¤£¥i¥H¤j©ó %d" -#: locale/programs/ld-time.c:470 locale/programs/ld-time.c:478 +#: locale/programs/ld-time.c:472 locale/programs/ld-time.c:480 #, c-format msgid "%s: values of field `%s' must not be larger than %d" msgstr "%s: Äæ¦ì `%s' ªº­È¤£¥i¥H¤j©ó %d" -#: locale/programs/ld-collate.c:812 +#: locale/programs/ld-collate.c:850 #, c-format msgid "%s: weights must use the same ellipsis symbol as the name" msgstr "%s: Åv­«¥²¶·¨Ï¥Î»P¦WºÙ¬Û¦Pªº¬Ù²¤²Å¸¹" -#: sunrpc/rpc_main.c:307 +#: sunrpc/rpc_main.c:308 #, c-format msgid "%s: while writing output %s: %m" msgstr "%s: ·í¦b¼g¥X¿é¥X %s ®É: %m" -#: argp/argp-parse.c:164 +#: argp/argp-parse.c:170 msgid "(PROGRAM ERROR) No version known!?" msgstr "(µ{¦¡¿ù»~) ¨S¦³»{±oªºª©¥»!?" -#: argp/argp-parse.c:781 +#: argp/argp-parse.c:787 msgid "(PROGRAM ERROR) Option should have been recognized!?" msgstr "(µ{¦¡¿ù»~) ¿ï¶µÀ³¸Ó¤w¸g¥iÅGÃÑ!?" @@ -1044,11 +1052,11 @@ msgstr "(¥¼ª¾)" msgid "*** The file `%s' is stripped: no detailed analysis possible\n" msgstr "*** ÀÉ®× `%s' ³Qµô°Å¤F: µLªk°µ¸Ô²Óªº¤ÀªR\n" -#: catgets/gencat.c:267 +#: catgets/gencat.c:282 msgid "*standard input*" msgstr "*¼Ð·Ç¿é¤J*" -#: catgets/gencat.c:121 +#: catgets/gencat.c:125 msgid "" "-o OUTPUT-FILE [INPUT-FILE]...\n" "[OUTPUT-FILE [INPUT-FILE]...]" @@ -1070,7 +1078,7 @@ msgstr "; §Cª©¥» = %lu, °ªª©¥» = %lu" msgid "; why = " msgstr "; ­ì¦] = " -#: locale/programs/charmap.c:962 +#: locale/programs/charmap.c:999 #, c-format msgid "<%s> and <%s> are illegal names for range" msgstr "<%s> ¥H¤Î <%s> ¬O¤£¦Xªkªº½d³ò¦WºÙ" @@ -1080,12 +1088,12 @@ msgstr "<%s> ¥H¤Î <%s> ¬O¤£¦Xªkªº½d³ò¦Wº msgid "<%s> and <%s> are invalid names for range" msgstr "<%s> ¥H¤Î <%s> ¬O¤£¾A¥Îªº½d³ò¦WºÙ" -#: locale/programs/ld-ctype.c:542 locale/programs/ld-ctype.c:577 +#: locale/programs/ld-ctype.c:565 locale/programs/ld-ctype.c:600 #, c-format msgid " character must not be in class `%s'" msgstr " ¦r¤¸¤£¥i¥H¦bÃþ§O `%s' ¤¤" -#: locale/programs/ld-ctype.c:530 locale/programs/ld-ctype.c:566 +#: locale/programs/ld-ctype.c:553 locale/programs/ld-ctype.c:589 #, c-format msgid " character not in class `%s'" msgstr " ¦r¤¸¤£¦bÃþ§O `%s' ¤¤" @@ -1147,6 +1155,10 @@ msgstr "¦P®É¹ïÁ`°O¾ÐÅé®É¥Î¶q§@¹Ï" msgid "Anode table overflow" msgstr "Anode ªí®æ·¸¥X" +#: intl/tst-gettext2.c:37 +msgid "Another string for testing." +msgstr "¥t¤@­Ó¨ü´ú¸Õªº¦r¦ê¡C" + #: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:37 msgid "Arg list too long" msgstr "Arg ¦ê¦C¤Óªø" @@ -1235,7 +1247,7 @@ msgstr "¿ù»~ªº¨t²Î©I¥s" msgid "Bad value for ai_flags" msgstr "¿ù»~ªº ai_flags ­È" -#: locale/programs/localedef.c:99 +#: locale/programs/localedef.c:104 msgid "Be strictly POSIX conform" msgstr "ÄY®æ¿í±q POSIX" @@ -1296,15 +1308,10 @@ msgstr "µLªkª½±µ°õ¦æ¤À¨É¨ç¦¡®w" msgid "Can't bind to server which serves this domain" msgstr "µLªk»PªA°È©ó¦¹ºô°ìªº¦øªA¾¹Ápô" -#: elf/ldconfig.c:778 +#: elf/ldconfig.c:934 msgid "Can't chdir to /" msgstr "µLªkÅܧó¥Ø¿ý¨ì /" -#: elf/ldconfig.c:775 -#, c-format -msgid "Can't chroot to %s" -msgstr "µLªkÅܧó®Ú¸ô®|¨ì %s" - #: nis/ypclnt.c:804 msgid "Can't communicate with portmapper" msgstr "µLªk»P portmapper ³q°T" @@ -1317,47 +1324,57 @@ msgstr "µLªk»P ypbind ³q°T" msgid "Can't communicate with ypserv" msgstr "µLªk»P ypserv ³q°T" -#: elf/cache.c:353 +#: elf/cache.c:359 #, c-format msgid "Can't create temporary cache file %s" msgstr "µLªk²£¥Í¼È®Éªº§Ö¨úÀÉ %s" -#: elf/ldconfig.c:381 +#: elf/ldconfig.c:502 +#, c-format +msgid "Can't find %s" +msgstr "§ä¤£¨ì %s" + +#: elf/ldconfig.c:440 #, c-format msgid "Can't link %s to %s" msgstr "µLªk±q %s ³sµ²¨ì %s" -#: elf/ldconfig.c:439 elf/ldconfig.c:563 +#: elf/ldconfig.c:518 elf/ldconfig.c:672 #, c-format msgid "Can't lstat %s" msgstr "µLªk lstat %s" -#: elf/cache.c:103 +#: elf/cache.c:108 elf/ldconfig.c:955 #, c-format msgid "Can't open cache file %s\n" msgstr "µLªk¶}±Ò§Ö¨úÀÉ %s\n" -#: elf/ldconfig.c:716 +#: elf/ldconfig.c:976 +#, c-format +msgid "Can't open cache file directory %s\n" +msgstr "µLªk¶}±Ò§Ö¨úÀɮץؿý %s\n" + +#: elf/ldconfig.c:865 #, c-format msgid "Can't open configuration file %s" msgstr "µLªk¶}±Ò³]©wÀÉ %s" -#: elf/ldconfig.c:528 +#: elf/ldconfig.c:621 #, c-format msgid "Can't open directory %s" msgstr "µLªk¶}±Ò¥Ø¿ý %s" -#: elf/cache.c:347 +#: elf/cache.c:353 #, c-format msgid "Can't remove old temporary cache file %s" msgstr "µLªk§R°£Âªº¼È®É§Ö¨úÀÉ %s" -#: elf/ldconfig.c:346 +#: elf/ldconfig.c:405 #, c-format msgid "Can't stat %s\n" msgstr "µLªk stat %s\n" -#: elf/ldconfig.c:375 +#: elf/ldconfig.c:434 #, c-format msgid "Can't unlink %s" msgstr "µLªk¨ú®ø³sµ² %s" @@ -1389,7 +1406,7 @@ msgstr "¤£¯àª½±µ°õ¦æ¤@­Ó¤À¨É¨ç¦¡®w" msgid "Cannot fstat file %s.\n" msgstr "µLªk fstat ÀÉ®× %s¡C\n" -#: sunrpc/rpc_main.c:1420 +#: sunrpc/rpc_main.c:1415 msgid "Cannot have more than one file generation flag!\n" msgstr "µLªk¨Ï¥Î¶W¹L¤@­ÓªºÀɮײ£¥ÍºX¼Ð!\n" @@ -1402,7 +1419,7 @@ msgstr "µLªk mmap ÀÉ®× %s¡C\n" msgid "Cannot receive reply to broadcast" msgstr "µLªk±µ¨ü¼s¼½«áªº¦^À³" -#: sunrpc/pmap_clnt.c:134 +#: sunrpc/pmap_clnt.c:136 msgid "Cannot register service" msgstr "µLªkµù¥UªA°È" @@ -1423,27 +1440,27 @@ msgstr "µLªk¶Ç°e¼s¼½«Ê¥]" msgid "Cannot set socket option SO_BROADCAST" msgstr "µLªk³]©w socket ¿ï¶µ SO_BROADCAST" -#: sunrpc/rpc_main.c:1198 +#: sunrpc/rpc_main.c:1195 msgid "Cannot specify more than one input file!\n" msgstr "µLªk«ü©w¶W¹L¤@­Ó¿é¤JÀÉ!\n" -#: sunrpc/rpc_main.c:1377 +#: sunrpc/rpc_main.c:1372 msgid "Cannot use netid flag with inetd flag!\n" msgstr "µLªk±N netid ºX¼Ð»P inetd ºX¼Ð¤@°_¨Ï¥Î!\n" -#: sunrpc/rpc_main.c:1389 +#: sunrpc/rpc_main.c:1384 msgid "Cannot use netid flag without TIRPC!\n" msgstr "µLªk¦b¨S¦³ TIRPC ®É¨Ï¥Î netid ºX¼Ð!\n" -#: sunrpc/rpc_main.c:1396 +#: sunrpc/rpc_main.c:1391 msgid "Cannot use table flags with newstyle!\n" msgstr "µLªk±Nªí®æºX¼Ð»P newstyle ¤@°_¨Ï¥Î!\n" -#: elf/ldconfig.c:129 +#: elf/ldconfig.c:131 msgid "Change to and use ROOT as root directory" msgstr "ÅÜ´«¨ì ROOT ¥Ø¿ý¨Ã¥H¥¦°µ¬°®Ú¥Ø¿ý" -#: elf/cache.c:384 +#: elf/cache.c:390 #, c-format msgid "Changing access rights of %s to 0644 failed" msgstr "§ó§ï %s ªº¦s¨úÅv­­¬° 0644 ¥¢±Ñ" @@ -1475,9 +1492,9 @@ msgstr "¦æ :\n" msgid "Communication error on send" msgstr "¦b¶Ç°e®É³q°T¿ù»~" -#: locale/programs/localedef.c:107 +#: locale/programs/localedef.c:112 msgid "Compile locale specification" -msgstr "½sĶ locale ³]©w" +msgstr "½sĶ°Ï°ì¤Æ¸ê®Æ®w (locale) ³]©w" # This is error EIEIO, errno 104 # @@ -1516,15 +1533,7 @@ msgstr "½sĶ locale ³]©w" msgid "Computer bought the farm" msgstr "³o¥x¹q¸£¶R¤F¤@¶ô¦aÅo" -#: locale/programs/ld-ctype.c:3995 -msgid "Computing table size for character classes might take a while..." -msgstr "¥¿¦b­pºâ¦r¤¸Ãþ§Oªºªí®æ¤j¤p¡A¥i¯à­nªáÂI®É¶¡ ..." - -#: locale/programs/ld-collate.c:1648 -msgid "Computing table size for collation table might take a while..." -msgstr "¥¿¦b­pºâ¹ï·Óªí®æ¤j¤p¡A¥i¯à­nªáÂI®É¶¡ ..." - -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "Configure Dynamic Linker Run Time Bindings." msgstr "³]©w°õ¦æ®É´Á°ÊºA³s±µ" @@ -1558,20 +1567,17 @@ msgstr "Ä~Äò" msgid "Convert encoding of given files from one encoding to another." msgstr "±qµ¹©wªºÀɮתº¦r¤¸½s½XÂà´«¨ì¥t¤@­Ó" -#: nss/makedb.c:60 -msgid "Convert key to lower case" -msgstr "±N key Âà´«¦¨¤p¼g" - -#: catgets/gencat.c:237 elf/ldconfig.c:252 elf/sprof.c:355 -#: iconv/iconv_prog.c:351 locale/programs/locale.c:267 -#: locale/programs/localedef.c:303 nscd/nscd.c:287 nscd/nscd_nischeck.c:90 -#: nss/getent.c:66 nss/makedb.c:244 posix/getconf.c:751 +#: catgets/gencat.c:246 elf/ldconfig.c:264 elf/sprof.c:355 +#: iconv/iconv_prog.c:351 locale/programs/locale.c:269 +#: locale/programs/localedef.c:311 nscd/nscd.c:287 nscd/nscd_nischeck.c:90 +#: nss/getent.c:63 posix/getconf.c:751 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" -msgstr "ª©Åv (C) %s ¦Û¥Ñ³nÅé°òª÷·|\n" +msgstr "" +"ª©Åv (C) %s ¦Û¥Ñ³nÅé°òª÷·|\n" "³o¬O¤@­Ó¦Û¥Ñ³nÅé¡F½Ð¨£·½©l½Xªº±ÂÅv±ø´Ú¡C³oùبS¦³¾á«O¡F¬Æ¦Ü¤]¨S¦³±M¬°¾P\n" "°â©ÎªÌ¾A¦X¬Y¨Ç¯S®í¥Øªº¡C\n" @@ -1580,22 +1586,18 @@ msgstr "ª©Åv (C) %s ¦Û¥Ñ³nÅé°òª÷·|\n" msgid "Could not create log file \"%s\"" msgstr "µLªk²£¥Í°T®§ÀÉ \"%s\"" -#: catgets/gencat.c:108 +#: catgets/gencat.c:112 msgid "Create C header file NAME containing symbol definitions" msgstr "²£¥Íªº C ¼ÐÀYÀɦW¤º§t²Å¸¹©w¸q" -#: locale/programs/localedef.c:98 +#: locale/programs/localedef.c:102 msgid "Create old-style tables" msgstr "²£¥Í®榡ªºªí®æ" -#: locale/programs/localedef.c:97 +#: locale/programs/localedef.c:101 msgid "Create output even if warning messages were issued" msgstr "²£¥Í¿é¥X§Y¨Ï¬O¦³Äµ§i°T®§" -#: nss/makedb.c:70 -msgid "Create simple DB database from textual input." -msgstr "¥Ñ¥»¤åªº¿é¤J²£¥Í²³æªº DB ¸ê®Æ®w" - #: nis/nis_print.c:326 #, c-format msgid "Creation Time : %s" @@ -1627,9 +1629,9 @@ msgstr "DNANS" msgid "DNS" msgstr "DNS" -#: elf/dl-open.c:106 +#: elf/dl-open.c:189 msgid "DST not allowed in SUID/SGID programs" -msgstr "DST ¤£¤¹³\\¦b SUID/SGID ªºµ{¦¡¤¤" +msgstr "DST ¤£¤¹³\¦b SUID/SGID ªºµ{¦¡¤¤" #: elf/dl-error.c:71 msgid "DYNAMIC LINKER BUG!!!" @@ -1667,15 +1669,6 @@ msgstr "¸Ë¸m¦£¸L¤¤" msgid "Device not a stream" msgstr "¸Ë¸m¤£¬O¸ê®Æ¬y" -#. TRANS No such device or address. The system tried to use the device -#. TRANS represented by a file you specified, and it couldn't find the device. -#. TRANS This can mean that the device file was installed incorrectly, or that -#. TRANS the physical device is missing or not correctly attached to the -#. TRANS computer. -#: stdio-common/../sysdeps/gnu/errlist.c:62 -msgid "Device not configured" -msgstr "¸Ë¸m©|¥¼³]©w´Nºü" - #. TRANS Resource busy; a system resource that can't be shared is already in use. #. TRANS For example, if you try to delete a file that is the root of a currently #. TRANS mounted filesystem, you get this error. @@ -1713,11 +1706,7 @@ msgstr "µwºÐ quota º¡¤F" msgid "Do not fork and display messages on the current tty" msgstr "¤£¦b¥Ø«eªº tty ²£¥Í¤l¦æµ{ (fork) ¥H¤ÎÅã¥Ü°T®§" -#: nss/makedb.c:63 -msgid "Do not print messages while building database" -msgstr "¤£¦b«Ø¥ß¸ê®Æ®w®É¦L¥X°T®§" - -#: catgets/gencat.c:110 +#: catgets/gencat.c:114 msgid "Do not use existing catalog, force new output file" msgstr "¤£¨Ï¥Î²{¦sªº catalog, ±j¨î¨Ï¥Î·sªº¿é¥XÀÉ" @@ -1725,11 +1714,11 @@ msgstr "¤£¨Ï¥Î²{¦sªº catalog, ±j¨î¨Ï¥Î·s msgid "Domain not bound" msgstr "ºô°ì§ä¤£¨ì" -#: elf/ldconfig.c:127 +#: elf/ldconfig.c:129 msgid "Don't build cache" msgstr "¤£«Ø¥ß§Ö¨ú" -#: elf/ldconfig.c:128 +#: elf/ldconfig.c:130 msgid "Don't generate links" msgstr "¤£²£¥Í³sµ²" @@ -1737,43 +1726,31 @@ msgstr "¤£²£¥Í³sµ²" msgid "Dump information generated by PC profiling." msgstr "±N²£¥Í©ó PC ´ú³tµû¦ôªº¸ê®Æ¶É¨ø¥X¨Ó" -#: elf/dl-load.c:811 -msgid "ELF file ABI version invalid." +#: elf/dl-load.c:1290 +msgid "ELF file ABI version invalid" msgstr "ELF ÀÉ ABI ª©¥»¤£¾A¥Î" -#: elf/dl-load.c:809 -msgid "ELF file OS ABI invalid." +#: elf/dl-load.c:1287 +msgid "ELF file OS ABI invalid" msgstr "ELF ÀÉ OS ABI ª©¥»¤£¾A¥Î" -#: elf/dl-load.c:793 -msgid "ELF file class not 32-bit" -msgstr "ELF ÀÉÃþ§O¤£¬O 32 ¦ì¤¸" - -#: elf/dl-load.c:795 -msgid "ELF file class not 64-bit" -msgstr "ELF ÀÉÃþ§O¤£¬O 64 ¦ì¤¸" - -#: elf/dl-load.c:818 -msgid "ELF file machine architecture does not match" -msgstr "ELF ÀɪºµwÅéµ²ºc¸ê®Æ¤£²Å¦X" - -#: elf/dl-load.c:816 -msgid "ELF file version does not not match current one" +#: elf/dl-load.c:1296 +msgid "ELF file version does not match current one" msgstr "ELF Àɪ©¥»¤£²Å¦X¥Ø«eªºª©¥»" -#: elf/dl-load.c:805 +#: elf/dl-load.c:1283 msgid "ELF file version ident does not match current one" msgstr "ELF Àɪ©¥» ident ¤£²Å¦X¥Ø«e©Ò¨Ï¥Îªº" -#: elf/dl-load.c:821 +#: elf/dl-load.c:1307 msgid "ELF file's phentsize not the expected size" msgstr "ELF Àɪº phentsize ¨Ã¤£¬O¹w´Á¤¤ªº¤j¤p" -#: elf/dl-load.c:894 +#: elf/dl-load.c:876 msgid "ELF load command address/offset not properly aligned" msgstr "ELF ¸ü¤J©R¥O¦ì§}/¦ì²¾¨Ã¨S¦³¾A·í¦a¹ï»ô" -#: elf/dl-load.c:891 +#: elf/dl-load.c:873 msgid "ELF load command alignment not page-aligned" msgstr "ELF ¸ü¤J©R¥O¹ï»ô¨Ã¨S¦³«ö·Ó°O¾ÐÅé¤À­¶ (page) ¹ï»ô" @@ -1793,6 +1770,11 @@ msgstr "½s½X¸ê®Æ\n" msgid "Entry/table type mismatch" msgstr "¶µ¥Ø/ªí®æ§ÎºA¤£²Å" +#: nss/getent.c:127 nss/getent.c:292 +#, c-format +msgid "Enumeration not supported on %s\n" +msgstr "¦¹¶µ¥Ø¦b %s ¤¤¤£³Q¤ä´©\n" + #: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:30 msgid "Error 0" msgstr "²Ä 0 ¸¹¿ù»~" @@ -1925,7 +1907,7 @@ msgstr "RPC ¤l¨t²Î¿ù»~" msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" msgstr "¦s¨ú NIS+ ­ì©l±Ò°ÊÀÉ¿ù»~¡C¦³¦w¸Ë NIS+ ¶Ü¡H" -#: string/../sysdeps/mach/_strerror.c:57 +#: string/../sysdeps/mach/_strerror.c:58 #: sysdeps/mach/hurd/mips/dl-machine.c:68 msgid "Error in unknown error system: " msgstr "¥¼ª¾°ÝÃD¨t²Î¿ù»~: " @@ -1949,11 +1931,11 @@ msgstr "¥æ´«¤w¥R¨¬" msgid "Exec format error" msgstr "¥i°õ¦æÀɮ榡¿ù»~" -#: locale/programs/localedef.c:185 +#: locale/programs/localedef.c:190 msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" msgstr "ÄY­«¿ù»~: ¨t²Î¨S¦³©w¸q `_POSIX2_LOCALEDEF'" -#: locale/programs/localedef.c:93 +#: locale/programs/localedef.c:97 msgid "FILE contains mapping from symbolic names to UCS4 values" msgstr "ÀÉ®× FILE ¤º§t²Å¸¹¦W»P UCS4 ½s½X¤§¶¡ªº¹ï¬M" @@ -1983,7 +1965,7 @@ msgstr "ÀÉ®×±Ô­z¶µ³B©ó¿ù»~ª¬ºA" msgid "File exists" msgstr "Àɮפw¦s¦b" -#: elf/cache.c:119 elf/cache.c:129 +#: elf/cache.c:124 elf/cache.c:134 msgid "File is not a cache file.\n" msgstr "ÀɮרëD§Ö¨úÀÉ¡C\n" @@ -2017,6 +1999,10 @@ msgstr "Àɮתí¤wº¡" msgid "File too large" msgstr "ÀɮפӤj" +#: intl/tst-gettext2.c:36 +msgid "First string for testing." +msgstr "²Ä¤@­Ó¦r¦ê±µ¨ü´ú¸Õ¡C" + #: nis/nis_error.c:38 msgid "First/next chain broken" msgstr "²Ä¤@­Ó/¤U¤@­Ó§Ç¦CÃa±¼¤F" @@ -2025,7 +2011,7 @@ msgstr "²Ä¤@­Ó/¤U¤@­Ó§Ç¦CÃa±¼¤F" msgid "Floating point exception" msgstr "¯BÂI¼Æ¥X¿ù" -#: elf/ldconfig.c:134 +#: elf/ldconfig.c:136 msgid "Format to use: new, old or compat (default)" msgstr "±N¨Ï¥Î®æ¦¡: ·s¡B©άۮe (¹w³])" @@ -2040,13 +2026,13 @@ msgstr "¥Ø¿ýªº resync ½Ð¨D¤wº¡" #. TRANS install a new version of the C library or the operating system. #: stdio-common/../sysdeps/gnu/errlist.c:576 msgid "Function not implemented" -msgstr "¥\\¯à¨S¦³¹ê§@" +msgstr "¥\¯à¨S¦³¹ê§@" #: nis/nis_print.c:115 msgid "GROUP\n" msgstr "¸s²Õ\n" -#: argp/argp-help.c:226 +#: argp/argp-help.c:230 #, c-format msgid "Garbage in ARGP_HELP_FMT: %s" msgstr "ARGP_HELP_FMT ¤¤µL¥Îªº¸ê°T: %s" @@ -2055,7 +2041,7 @@ msgstr "ARGP_HELP_FMT ¤¤µL¥Îªº¸ê°T: %s" msgid "Generate graphic from memory profiling data" msgstr "±q°O¾ÐÅé©Ê¯à´ú¸Õ¸ê®Æ²£¥Í¹Ï¹³" -#: catgets/gencat.c:116 +#: catgets/gencat.c:120 msgid "" "Generate message catalog.\\vIf INPUT-FILE is -, input is read from standard " "input. If OUTPUT-FILE\n" @@ -2068,10 +2054,9 @@ msgstr "" msgid "" "Generate output linear to time (default is linear to number of function " "calls)" -msgstr "" -"²£¥Í¿é¥X»P®É¶¡§e½u©ÊÃö«Y (¹w³]¬O»P¨ç¦¡©I¥s¼Æ¥Ø§e½u©ÊÃö«Y)" +msgstr "²£¥Í¿é¥X»P®É¶¡§e½u©ÊÃö«Y (¹w³]¬O»P¨ç¦¡©I¥s¼Æ¥Ø§e½u©ÊÃö«Y)" -#: elf/ldconfig.c:126 +#: elf/ldconfig.c:128 msgid "Generate verbose messages" msgstr "²£¥Í§ó¦hªº°T®§" @@ -2079,15 +2064,15 @@ msgstr "²£¥Í§ó¦hªº°T®§" msgid "Generic system error" msgstr "¤@¯ë¨t²Î¿ù»~" -#: locale/programs/locale.c:75 +#: locale/programs/locale.c:77 msgid "Get locale-specific information." -msgstr "¨ú±o locale ¯S©wªº¸ê°T" +msgstr "¨ú±o°Ï°ì¤Æ¸ê®Æ®w (locale) ¯S©wªº¸ê°T" -#: argp/argp-parse.c:88 +#: argp/argp-parse.c:94 msgid "Give a short usage message" msgstr "µ¹¥X²µuªº¨Ï¥Î°T®§" -#: argp/argp-parse.c:87 +#: argp/argp-parse.c:93 msgid "Give this help list" msgstr "µ¹¥X³o­Ó¨Ï¥Î¤è¦¡¦Cªí" @@ -2110,7 +2095,7 @@ msgstr "¸s²ÕºX¼Ð :" msgid "Group entry for \"%s.%s\" group:\n" msgstr "¸s²Õ \"%s.%s\" ¸s²Õ¶µ¥Ø:\n" -#: argp/argp-parse.c:91 +#: argp/argp-parse.c:97 msgid "Hang for SECS seconds (default 3600)" msgstr "SECS ¬í«á±¾Â_ (¹w³]¬O 3600)" @@ -2118,7 +2103,7 @@ msgstr "SECS ¬í«á±¾Â_ (¹w³]¬O 3600)" msgid "Hangup" msgstr "±¾Â_" -#: nscd/grpcache.c:252 +#: nscd/grpcache.c:253 #, c-format msgid "Haven't found \"%d\" in group cache!" msgstr "©|¥¼¦b¸s²Õ§Ö¨ú¤¤§ä¨ì \"%d\"!" @@ -2128,7 +2113,7 @@ msgstr "©|¥¼¦b¸s²Õ§Ö¨ú¤¤§ä¨ì \"%d\"!" msgid "Haven't found \"%d\" in password cache!" msgstr "©|¥¼¦b±K½X§Ö¨ú¤¤§ä¨ì \"%d\"!" -#: nscd/grpcache.c:213 +#: nscd/grpcache.c:214 #, c-format msgid "Haven't found \"%s\" in group cache!" msgstr "©|¥¼¦b¸s²Õ§Ö¨ú¤¤§ä¨ì \"%s\"!" @@ -2162,16 +2147,6 @@ msgstr "I/O ¿ù»~" msgid "I/O possible" msgstr "I/O ¥i¦æ" -#: nss/makedb.c:73 -msgid "" -"INPUT-FILE OUTPUT-FILE\n" -"-o OUTPUT-FILE INPUT-FILE\n" -"-u INPUT-FILE" -msgstr "" -"¿é¤JÀɮצWºÙ ¿é¥XÀɮצWºÙ\n" -"-o ¿é¥XÀɮצWºÙ ¿é¤JÀɮצWºÙ\n" -"-u ¿é¥XÀɮצWºÙ" - #: stdio-common/../sysdeps/unix/siglist.c:32 msgid "IOT trap" msgstr "IOT ³´¨À" @@ -2185,7 +2160,7 @@ msgstr "IVY" msgid "Identifier removed" msgstr "ÃѧO²Å¸¹²¾°£" -#: elf/ldconfig.c:446 +#: elf/ldconfig.c:525 #, c-format msgid "Ignored file %s since it is not a regular file." msgstr "©¿²¤ÀÉ®× %s ¦]¬°¥¦¤£¬O¤@­Ó¥¿±`ªºÀɮסC" @@ -2242,11 +2217,11 @@ msgstr "»Ý­n¸ê®Æ" msgid "Information:" msgstr "¸ê®Æ:" -#: locale/programs/localedef.c:88 +#: locale/programs/localedef.c:92 msgid "Input Files:" msgstr "¿é¤JÀÉ:" -#: elf/readlib.c:92 +#: elf/ldconfig.c:698 elf/readlib.c:92 #, c-format msgid "Input file %s not found.\n" msgstr "¿é¤JÀÉ %s §ä¤£¨ì¡C\n" @@ -2295,11 +2270,11 @@ msgstr "¤¤Â_ªº¨t²Î©I¥s¥²¶·­«·s±Ò°Ê" msgid "Invalid argument" msgstr "¤£¾A¥Îªº¤Þ¼Æ" -#: posix/regex.c:1098 +#: posix/regex.c:1102 msgid "Invalid back reference" msgstr "¤£¾A¥Îªº«á³¡¯Á¤Þ" -#: posix/regex.c:1092 +#: posix/regex.c:1096 msgid "Invalid character class name" msgstr "¤£¾A¥Îªº¦r¤¸Ãþ§O¦W" @@ -2311,11 +2286,11 @@ msgstr "¤£¾A¥Îªº½Ð¨DºÝ¨­¥÷»{ÃÒ" msgid "Invalid client verifier" msgstr "¤£¾A¥Îªº½Ð¨DºÝ»{ÃÒ" -#: posix/regex.c:1089 +#: posix/regex.c:1093 msgid "Invalid collation character" msgstr "¤£¾A¥Îªº¹ï·Ó¦r¤¸" -#: posix/regex.c:1110 +#: posix/regex.c:1114 msgid "Invalid content of \\{\\}" msgstr "¤£¾A¥Îªº \\{\\} ¤º®e" @@ -2340,15 +2315,15 @@ msgstr "¤£¾A¥Îªº¹B§@ª«¥ó" msgid "Invalid or incomplete multibyte or wide character" msgstr "¤£¾A¥Î©Î¤£§¹¾ãªº¦h¦ì¤¸²Õ¦r¤¸©Î¼e¦r¤¸" -#: posix/regex.c:1119 +#: posix/regex.c:1123 msgid "Invalid preceding regular expression" msgstr "¤£¾A¥Îªº«e¸m±`³Wªí¥Ü¦¡" -#: posix/regex.c:1113 +#: posix/regex.c:1117 msgid "Invalid range end" msgstr "¤£¾A¥Îªº½d³òµ²§ô" -#: posix/regex.c:1086 +#: posix/regex.c:1090 msgid "Invalid regular expression" msgstr "¤£¾A¥Îªº±`³Wªí¥Ü¦¡" @@ -2465,14 +2440,13 @@ msgstr "¾÷¾¹¤£¦bºô¸ô¤¤" msgid "Malformed name, or illegal name" msgstr "©_©Çªº¦W¦r¡A©Î¤£¦Xªkªº¦W¦r" -#: argp/argp-help.c:1181 +#: argp/argp-help.c:1185 msgid "" "Mandatory or optional arguments to long options are also mandatory or " "optional for any corresponding short options." -msgstr "" -"ªø¿ï¶µªº¥²¶·©Î¥i¿ï¥Îªº¤Þ¼Æ¤]¬O¬Û¹ïÀ³µu¿ï¶µªº¥²¶·©Î¥i¿ï¥Îªº¤Þ¼Æ¡C" +msgstr "ªø¿ï¶µªº¥²¶·©Î¥i¿ï¥Îªº¤Þ¼Æ¤]¬O¬Û¹ïÀ³µu¿ï¶µªº¥²¶·©Î¥i¿ï¥Îªº¤Þ¼Æ¡C" -#: elf/ldconfig.c:133 +#: elf/ldconfig.c:135 msgid "Manually link individual libraries." msgstr "¤â°Ê­Ó§O³sµ²¨ç¦¡®w" @@ -2488,7 +2462,7 @@ msgstr "¥D­n¦øªA¾¹¦£¸L¤¤¡A­«·s¶i¦æ§¹¾ã¸ê msgid "Memory allocation failure" msgstr "°O¾ÐÅé°t¸m¥¢±Ñ" -#: posix/regex.c:1116 +#: posix/regex.c:1120 msgid "Memory exhausted" msgstr "°O¾ÐÅé¥Î§¹¤F" @@ -2520,7 +2494,7 @@ msgstr "­×§ï¥¢±Ñ" msgid "Modify operation failed" msgstr "­×§ï¹B§@¤è¦¡¥¢±Ñ" -#: locale/programs/locale.c:68 +#: locale/programs/locale.c:70 msgid "Modify output format:" msgstr "­×§ï¿é¥X®æ¦¡:" @@ -2533,12 +2507,12 @@ msgstr "¹Á¸Õ Multihop" msgid "Must specify user name for server-user option" msgstr "¥²¶·¬°¦øªA¾¹¨Ï¥ÎªÌ¿ï¶µ«ü©w¨Ï¥ÎªÌ¦WºÙ" -#: catgets/gencat.c:107 catgets/gencat.c:111 locale/programs/localedef.c:110 -#: nscd/nscd.c:83 nss/makedb.c:61 +#: catgets/gencat.c:111 catgets/gencat.c:115 locale/programs/localedef.c:115 +#: nscd/nscd.c:83 msgid "NAME" msgstr "¦WºÙ" -#: locale/programs/locale.c:78 +#: locale/programs/locale.c:80 msgid "" "NAME\n" "[-a|-m]" @@ -2630,7 +2604,7 @@ msgstr "¦b­«³]®Éºô¸ô³s½uº|¥¢" #: stdio-common/../sysdeps/gnu/errlist.c:379 #: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:157 msgid "Network is down" -msgstr "ºô¸ô°±Â\\" +msgstr "ºô¸ô°±Â\" #. TRANS A socket operation failed because the subnet containing the remote host #. TRANS was unreachable. @@ -2668,6 +2642,10 @@ msgstr "¨S¦³¶§·¥" msgid "No buffer space available" msgstr "¨S¦³¥i¥Îªº½w½ÄªÅ¶¡¤F" +#: locale/programs/ld-ctype.c:425 +msgid "No character set name specified in charmap" +msgstr "¦b¦r¤¸¹ïÀ³ (charmap) ¤¤¨S¦³³]©w¦r¶°¦WºÙ" + #. TRANS There are no child processes. This error happens on operations that are #. TRANS supposed to manipulate child processes, when there aren't any processes #. TRANS to manipulate. @@ -2681,12 +2659,12 @@ msgstr "¨S¦³¤lµ{§Ç¦s¦b" msgid "No data available" msgstr "¨S¦³¥i¥Îªº¸ê®Æ" -#: locale/programs/ld-address.c:131 locale/programs/ld-collate.c:1460 -#: locale/programs/ld-ctype.c:384 locale/programs/ld-identification.c:132 +#: locale/programs/ld-address.c:131 locale/programs/ld-collate.c:1500 +#: locale/programs/ld-ctype.c:407 locale/programs/ld-identification.c:132 #: locale/programs/ld-measurement.c:93 locale/programs/ld-messages.c:98 #: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 #: locale/programs/ld-numeric.c:99 locale/programs/ld-paper.c:91 -#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:158 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:160 #, c-format msgid "No definition for %s category found" msgstr "§ä¤£¨ì %s Ãþ§Oªº©w¸q" @@ -2695,7 +2673,7 @@ msgstr "§ä¤£¨ì %s Ãþ§Oªº©w¸q" msgid "No file space on server" msgstr "¦øªA¾¹¤W¨S¦³ÀɮתŶ¡" -#: elf/ldconfig.c:454 +#: elf/ldconfig.c:532 #, c-format msgid "No link created since soname could not be found for %s" msgstr "¥Ñ©ó§ä¤£¨ì %s ªº¦@¥Îª«¥ó¦WºÙ¡A³sµ²¨Ã¥¼³Q«Ø¥ß" @@ -2708,7 +2686,7 @@ msgstr "¥Ñ©ó§ä¤£¨ì %s ªº¦@¥Îª«¥ó¦WºÙ¡A³s msgid "No locks available" msgstr "µLªkÂê©w¸ê®Æ" -#: posix/regex.c:1083 +#: posix/regex.c:1087 msgid "No match" msgstr "¨S¦³²Å¦Xªº¶µ¥Ø" @@ -2725,7 +2703,7 @@ msgstr "¨S¦³²Å¦X»Ý¨D®æ¦¡ªº°T®§" msgid "No more records in map database" msgstr "¦b¹ï¬Mªí¸ê®Æ®w¤¤¨S¦³¨ä¥L¬ö¿ý¤F" -#: posix/regex.c:5936 +#: posix/regex.c:5955 msgid "No previous regular expression" msgstr "¥ý«e¨Ã¥¼¨Ï¥Î¹L±`³Wªí¥Ü¦¡" @@ -2757,6 +2735,12 @@ msgstr "¸Ë¸m¤W¤wµL¦h¾lªÅ¶¡" msgid "No such device" msgstr "¨S¦³¦¹¤@¸Ë¸m" +#. TRANS No such device or address. The system tried to use the device +#. TRANS represented by a file you specified, and it couldn't find the device. +#. TRANS This can mean that the device file was installed incorrectly, or that +#. TRANS the physical device is missing or not correctly attached to the +#. TRANS computer. +#: stdio-common/../sysdeps/gnu/errlist.c:62 #: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:36 msgid "No such device or address" msgstr "¨S¦³¦¹¤@¸Ë¸m©Î¦ì§}" @@ -2783,10 +2767,6 @@ msgstr "¦b¦øªA¾¹ªº»â°ì¸ê®Æ¤¤§ä¤£¨ì¦¹¤@¹ï msgid "No such process" msgstr "¨S¦³¦¹¤@µ{§Ç" -#: nss/makedb.c:142 -msgid "No usable database library found." -msgstr "§ä¤£¨ì¥i¥Îªº¸ê®Æ®w¬ÛÃö¨ç¦¡®w" - #: nis/nis_error.c:61 msgid "Non NIS+ namespace encountered" msgstr "¾D¹J¹H¤Ï NIS+ ©R¦W³W«hªº¦WºÙ" @@ -2917,11 +2897,11 @@ msgstr "¥Ø¼ÐÀɮצì©ó»·ºÝ" msgid "Object with same name exists" msgstr "¦P¦Wªº¥Ø¼Ð¤w¸g¦s¦b" -#: timezone/zic.c:2023 +#: timezone/zic.c:2022 msgid "Odd number of quotation marks" msgstr "¤Þ¸¹¼Æ¥Ø¬°©_¼Æ" -#: elf/ldconfig.c:132 +#: elf/ldconfig.c:134 msgid "" "Only process directories specified on the command line. Don't build cache." msgstr "¥u³B²z¦b©R¥O¦C¤Þ¼Æ¤¤¦³«ü©wªº¥Ø¿ý¡A¤£«Ø¥ß§Ö¨úÀɮסC" @@ -2949,7 +2929,7 @@ msgstr "¦¹¶µ¾Þ§@¨Ã¤£¾A·í" #. TRANS or processes with special privileges can perform the operation. #: stdio-common/../sysdeps/gnu/errlist.c:25 msgid "Operation not permitted" -msgstr "¦¹¶µ¾Þ§@¨Ã¤£³Q¤¹³\\" +msgstr "¦¹¶µ¾Þ§@¨Ã¤£³Q¤¹³\" #. TRANS The operation you requested is not supported. Some socket functions #. TRANS don't make sense for all types of sockets, and others may not be @@ -2992,6 +2972,10 @@ msgstr "¾Þ§@±N·|¼È°±" msgid "Option not supported by protocol" msgstr "³q°T¨ó©w¨Ã¤£¤ä´©¦¹°Ñ¼Æ" +#: locale/programs/localedef.c:103 +msgid "Optional output file prefix" +msgstr "¥i¦³¥iµLªº¿é¥XÀɸô®|" + #: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:93 msgid "Out of stream resources" msgstr "¸ê®Æ¬y¸ê·½¥ÎºÉ" @@ -3000,7 +2984,7 @@ msgstr "¸ê®Æ¬y¸ê·½¥ÎºÉ" msgid "Out of streams resources" msgstr "©Ò¦³¸ê®Æ¬yªº¸ê·½³£¤w¥ÎºÉ" -#: iconv/iconv_prog.c:60 locale/programs/localedef.c:95 +#: iconv/iconv_prog.c:60 locale/programs/localedef.c:99 msgid "Output control:" msgstr "¿é¥X±±¨î:" @@ -3029,13 +3013,13 @@ msgstr "¸ÑªR¿ù»~: %s" #: nis/nis_error.c:55 msgid "Partial success" -msgstr "³¡¥÷¦¨¥\\" +msgstr "³¡¥÷¦¨¥\" #: nis/nis_error.c:63 msgid "Passed object is not the same object on server" msgstr "¸g¹Lªºª«¥ó»P¦øªA¾¹¤Wªº¨Ã¤£¬Û¦P" -#: elf/ldconfig.c:310 +#: elf/ldconfig.c:287 #, c-format msgid "Path `%s' given more than once" msgstr "¸ô®| `%s' ¨Ï¥Î¶W¹L¤@¦¸" @@ -3051,33 +3035,29 @@ msgstr "©Úµ´¤£²ÅÅv­­ªº¾Þ§@" msgid "Power failure" msgstr "¹q·½ÄY­«¿ù»~" -#: posix/regex.c:1122 +#: posix/regex.c:1126 msgid "Premature end of regular expression" msgstr "±`³Wªí¥Ü¦¡¤Ó¦­µ²§ô¤F" -#: elf/ldconfig.c:125 +#: elf/ldconfig.c:127 msgid "Print cache" msgstr "¦C¦L§Ö¨ú" -#: nss/makedb.c:65 -msgid "Print content of database file, one entry a line" -msgstr "¦L¥X¸ê®Æ®wÀɮתº¤º®e¡A¨C­Ó¶µ¥Ø¤@¦æ" - #: nscd/nscd.c:89 msgid "Print current configuration statistic" msgstr "¦L¥X¥Ø«eªº²ÕºA²Î­p" -#: locale/programs/localedef.c:102 +#: locale/programs/localedef.c:107 msgid "Print more messages" msgstr "¦L¥X§ó¦hªº°T®§" -#: argp/argp-parse.c:148 +#: argp/argp-parse.c:154 msgid "Print program version" msgstr "¦L¥Xµ{¦¡ª©¥»" #: nis/nis_error.c:30 msgid "Probable success" -msgstr "¥i¯à¦¨¥\\" +msgstr "¥i¯à¦¨¥\" #: nis/nis_error.c:32 msgid "Probably not found" @@ -3218,7 +3198,7 @@ msgstr "RPC: ¦øªA¾¹µLªk±N¤Þ¼Æ¸Ñ½X" #: sunrpc/clnt_perr.c:163 msgid "RPC: Success" -msgstr "RPC: ¦¨¥\\" +msgstr "RPC: ¦¨¥\" #: sunrpc/clnt_perr.c:182 msgid "RPC: Timed out" @@ -3245,7 +3225,7 @@ msgstr "RPC: ¥¼ª¾ªº¨ó©w" msgid "RSA (%d bits)\n" msgstr "RSA (%d ¦ì¤¸)\n" -#: elf/dl-sym.c:66 elf/dl-sym.c:116 +#: elf/dl-sym.c:68 elf/dl-sym.c:125 msgid "RTLD_NEXT used in code not dynamically loaded" msgstr "µ{¦¡½X©Ò¨Ï¥Îªº RTLD_NEXT ¨S¦³°ÊºA¸ü¤J" @@ -3268,7 +3248,7 @@ msgstr "°ßŪªºÀɮרt²Î" msgid "Real-time signal %d" msgstr "§Y®Éªº°T¸¹ %d" -#: posix/regex.c:1125 +#: posix/regex.c:1129 msgid "Regular expression too big" msgstr "¥¿³Wªí¥Ü¦¡¤Óªø¤F" @@ -3286,7 +3266,7 @@ msgstr "»·ºÝ¦ì§}§ïÅܤF" msgid "Remove password or make file unreadable by others." msgstr "²¾°£±K½X©ÎÅý¥L¤HµLªkŪ¨úÀÉ®×" -#: elf/cache.c:388 +#: elf/cache.c:394 #, c-format msgid "Renaming of %s to %s failed" msgstr "±N %s §ï¦W¬° %s ¥¢±Ñ" @@ -3300,14 +3280,14 @@ msgstr "­«·s¶}±Ò¦@¥Î¥ØªºÀÉ %s ¥¢±Ñ" msgid "Replicate :\n" msgstr "½Æ»s :\n" -#: argp/argp-help.c:1635 +#: argp/argp-help.c:1639 #, c-format msgid "Report bugs to %s.\n" msgstr "½Ð±Nµ{¦¡°ÝÃD¦^³ø¦Ü %s¡C\n" -#: catgets/gencat.c:224 debug/pcprofiledump.c:181 iconv/iconv_prog.c:337 -#: locale/programs/locale.c:254 locale/programs/localedef.c:289 -#: malloc/memusagestat.c:602 nss/makedb.c:231 +#: catgets/gencat.c:233 debug/pcprofiledump.c:181 iconv/iconv_prog.c:337 +#: locale/programs/locale.c:256 locale/programs/localedef.c:297 +#: malloc/memusagestat.c:602 msgid "Report bugs using the `glibcbug' script to .\n" msgstr "½Ð¨Ï¥Î `glibcbug' §å¦¸µ{¦¡±N°ÝÃD¦^³ø¦Ü ¡C\n" @@ -3418,7 +3398,7 @@ msgstr "¦øªA¾¹©Úµ´»{ÃÒ" msgid "Servname not supported for ai_socktype" msgstr "¤£¤ä´© ai_socktype ªº¦øªA¦WºÙ" -#: argp/argp-parse.c:89 +#: argp/argp-parse.c:95 msgid "Set the program name" msgstr "³]©wµ{¦¡¦WºÙ" @@ -3452,7 +3432,7 @@ msgstr "³nÅé³y¦¨³s½u¤¤Â_" msgid "Sorry. You are not root\n" msgstr "¤£¦n·N«ä¡A§A¨Ã¤£¬O root ¨Ï¥ÎªÌ\n" -#: locale/programs/localedef.c:91 +#: locale/programs/localedef.c:95 msgid "Source definitions are found in FILE" msgstr "­ì©l¸ê®Æ©w¸q¦bÀÉ®× FILE ¤¤" @@ -3508,16 +3488,20 @@ msgstr "¸ê®Æ¬yºÞ½u¿ù»~" msgid "Structure needs cleaning" msgstr "µ²ºc»Ý­n²M²z" -#: nis/nis_error.c:29 nis/ypclnt.c:786 nis/ypclnt.c:860 posix/regex.c:1080 +#: nis/nis_error.c:29 nis/ypclnt.c:786 nis/ypclnt.c:860 posix/regex.c:1084 #: stdio-common/../sysdeps/gnu/errlist.c:20 msgid "Success" -msgstr "¦¨¥\\" +msgstr "¦¨¥\" -#: locale/programs/localedef.c:101 +#: nss/getent.c:703 +msgid "Supported databases:" +msgstr "¤ä´©ªº¸ê®Æ®w:" + +#: locale/programs/localedef.c:106 msgid "Suppress warnings and information messages" msgstr "©¿²¤Äµ§i»P´£¥Ü°T®§" -#: locale/programs/localedef.c:90 +#: locale/programs/localedef.c:94 msgid "Symbolic character names defined in FILE" msgstr "²Å¸¹¦r¤¸ªº¦WºÙ©w¸q¦bÀÉ®× FILE ¤¤" @@ -3525,7 +3509,7 @@ msgstr "²Å¸¹¦r¤¸ªº¦WºÙ©w¸q¦bÀÉ®× FILE ¤¤ msgid "System error" msgstr "¨t²Î¿ù»~" -#: locale/programs/locale.c:63 +#: locale/programs/locale.c:65 msgid "System information:" msgstr "¨t²Î¬ÛÃö¸ê°T:" @@ -3533,7 +3517,7 @@ msgstr "¨t²Î¬ÛÃö¸ê°T:" msgid "System resource allocation failure" msgstr "¨t²Î¸ê·½°t¸m¥¢±Ñ" -#: locale/programs/localedef.c:284 +#: locale/programs/localedef.c:292 #, c-format msgid "" "System's directory for character maps : %s\n" @@ -3588,12 +3572,15 @@ msgid "" "the FROM and TO command line parameters. One coded character set can be\n" "listed with several different names (aliases).\n" "\n" +" " msgstr "" "¥H¤Uªº¦Cªí¥]§t©Ò¦³¤wª¾ªº½s½X¦r¶°¡A¦ý³o¤£¥Nªí©Ò¦³ªº¦r¶°¦WºÙ²Õ¦X¬Ò¥i¥Î©ó\n" "©R¥O¦Cªº \"¨Ó·½\" ¥H¤Î \"¥Øªº\" ¤Þ¼Æ¡C¤@­Ó½s½X¦r¶°¥i¥H¥Î´X­Ó¤£¦Pªº¦WºÙ\n" "¨Óªí¥Ü (§Y \"°Î¦W\")¡C\n" +"\n" +" " -#: sunrpc/rpc_main.c:1369 +#: sunrpc/rpc_main.c:1364 msgid "This implementation doesn't support newstyle or MT-safe code!\n" msgstr "¦¹¹ê§@¤è¦¡¤£¤ä´©·sªº§Î¦¡©Î¦h¦w¥þ°õ¦æ§Çªºµ{¦¡!\n" @@ -3671,7 +3658,7 @@ msgstr "¤Ó¦h¨Ï¥ÎªÌ" msgid "Trace/breakpoint trap" msgstr "°lÂÜ»P¤¤Â_ÂI³´¨À" -#: posix/regex.c:1095 +#: posix/regex.c:1099 msgid "Trailing backslash" msgstr "§ÀºÝªº¤Ï±×½u" @@ -3698,7 +3685,7 @@ msgstr "¶Ç¿éªº¨âºÝ¤w¸g§¹¦¨³s½u¤F" msgid "Transport endpoint is not connected" msgstr "¶Ç¿éªº¨âºÝ©|¥¼³s½u" -#: argp/argp-help.c:1607 +#: argp/argp-help.c:1611 #, c-format msgid "Try `%s --help' or `%s --usage' for more information.\n" msgstr "½Ð¸ÕµÛ¥Î `%s --help' ©Î `%s --usage' ¨ÓÀò±o§ó¦h¬ÛÃö°T®§¡C\n" @@ -3738,7 +3725,7 @@ msgstr "¥¼ª¾ªº (§ÎºA = %d¡A¦ì¤¸ = %d)\n" msgid "Unknown .netrc keyword %s" msgstr "¥¼ª¾ªº .netrc ÃöÁä¦r %s" -#: elf/../sysdeps/generic/readelflib.c:68 +#: elf/../sysdeps/generic/readelflib.c:69 #, c-format msgid "Unknown ELFCLASS in file %s.\n" msgstr "ÀÉ®× %s ¤¤¥¼ª¾ªº ELFCLASS¡C\n" @@ -3747,7 +3734,7 @@ msgstr "ÀÉ®× %s ¤¤¥¼ª¾ªº ELFCLASS¡C\n" msgid "Unknown NIS error code" msgstr "¥¼ª¾ªº NIS ¿ù»~½X" -#: nss/getent.c:513 +#: nss/getent.c:771 #, c-format msgid "Unknown database: %s\n" msgstr "¥¼ª¾ªº¸ê®Æ®w: %s\n" @@ -3757,7 +3744,7 @@ msgid "Unknown error" msgstr "¥¼ª¾ªº¿ù»~" #: string/../sysdeps/generic/_strerror.c:48 -#: string/../sysdeps/mach/_strerror.c:87 +#: string/../sysdeps/mach/_strerror.c:88 #: sysdeps/mach/hurd/mips/dl-machine.c:83 msgid "Unknown error " msgstr "¥¼ª¾ªº¿ù»~ " @@ -3788,7 +3775,7 @@ msgstr "¥¼ª¾ªº¦øªA¾¹¿ù»~" msgid "Unknown signal %d" msgstr "¥¼ª¾ªº°T¸¹ %d" -#: misc/error.c:108 timezone/zic.c:386 +#: misc/error.c:114 timezone/zic.c:384 msgid "Unknown system error" msgstr "¥¼ª¾ªº¨t²Î¿ù»~" @@ -3796,19 +3783,19 @@ msgstr "¥¼ª¾ªº¨t²Î¿ù»~" msgid "Unknown ypbind error" msgstr "¥¼ª¾ªº ypbind ¿ù»~" -#: posix/regex.c:1104 +#: posix/regex.c:1108 msgid "Unmatched ( or \\(" msgstr "( ©Î \\( ¤£¯à¤Ç°t" -#: posix/regex.c:1128 +#: posix/regex.c:1132 msgid "Unmatched ) or \\)" msgstr ") ©Î \\) ¤£¯à¤Ç°t" -#: posix/regex.c:1101 +#: posix/regex.c:1105 msgid "Unmatched [ or [^" msgstr "[ ©Î [^ ¤£¯à¤Ç°t" -#: posix/regex.c:1107 +#: posix/regex.c:1111 msgid "Unmatched \\{" msgstr "\\{ ¤£¯à¤Ç°t" @@ -3821,7 +3808,7 @@ msgstr "µLªkÃѧOªºÅÜ¼Æ `%s'" msgid "Urgent I/O condition" msgstr "ºò«æªº¿é¥X¤Jª¬ºA" -#: argp/argp-help.c:1564 +#: argp/argp-help.c:1568 msgid "Usage:" msgstr "¨Ï¥Î¤è¦¡:" @@ -3834,11 +3821,11 @@ msgstr "¨Ï¥Î¤è¦¡: %s variable_name [path msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" msgstr "¨Ï¥Î¤è¦¡: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" -#: elf/ldconfig.c:130 +#: elf/ldconfig.c:132 msgid "Use CACHE as cache file" msgstr "¨Ï¥Î CACHE ·í§@§Ö¨úÀÉ®×" -#: elf/ldconfig.c:131 +#: elf/ldconfig.c:133 msgid "Use CONF as configuration file" msgstr "¨Ï¥Î CONF ·í§@³]©wÀÉ" @@ -3863,7 +3850,7 @@ msgstr "¦³©w¸qªº¸ê®Æ«¬§O­È¤Ó¤j" msgid "Virtual timer expired" msgstr "µêÀÀ­p®É¾¹¤w¹L®É¨ú®ø¤F" -#: timezone/zic.c:1927 +#: timezone/zic.c:1926 msgid "Wild result from command execution" msgstr "©R¥O°õ¦æ¾É¦Ü©_©Çªºµ²ªG" @@ -3871,38 +3858,38 @@ msgstr "©R¥O°õ¦æ¾É¦Ü©_©Çªºµ²ªG" msgid "Window changed" msgstr "½d³ò§ïÅܤF" -#: locale/programs/locale.c:67 +#: locale/programs/locale.c:69 msgid "Write names of available charmaps" msgstr "¼g¥X¦s¦bªº¦r¶°¹ï·Óªí¦WºÙ" -#: locale/programs/locale.c:65 +#: locale/programs/locale.c:67 msgid "Write names of available locales" -msgstr "¼g¥X¦s¦bªº°Ï°ì¤Æ¸ê®Æ®w¦WºÙ" +msgstr "¼g¥X¦s¦bªº°Ï°ì¤Æ¸ê®Æ®w (locale) ¦WºÙ" -#: locale/programs/locale.c:69 +#: locale/programs/locale.c:71 msgid "Write names of selected categories" msgstr "¼g¥X¿ï¨úªºÃþ§O¦WºÙ" -#: locale/programs/locale.c:70 +#: locale/programs/locale.c:72 msgid "Write names of selected keywords" msgstr "¼g¥X¿ï¨úªºÃöÁä¦r¦WºÙ" -#: catgets/gencat.c:111 nss/makedb.c:61 +#: catgets/gencat.c:115 msgid "Write output to file NAME" msgstr "±N¿é¥X¼g¨ìÀÉ®× NAME ¤¤" -#: elf/cache.c:360 elf/cache.c:369 elf/cache.c:373 +#: elf/cache.c:366 elf/cache.c:375 elf/cache.c:379 msgid "Writing of cache data failed" msgstr "¼g¤J§Ö¨ú¸ê®Æ®Éµo¥Í¿ù»~" -#: elf/cache.c:377 +#: elf/cache.c:383 msgid "Writing of cache data failed." msgstr "¼g¤J§Ö¨ú¸ê®Æ®Éµo¥Í¿ù»~" -#: catgets/gencat.c:242 elf/ldconfig.c:257 elf/sprof.c:361 -#: iconv/iconv_prog.c:356 locale/programs/locale.c:272 -#: locale/programs/localedef.c:308 nscd/nscd.c:292 nscd/nscd_nischeck.c:95 -#: nss/getent.c:71 nss/makedb.c:249 posix/getconf.c:756 +#: catgets/gencat.c:251 elf/ldconfig.c:269 elf/sprof.c:361 +#: iconv/iconv_prog.c:356 locale/programs/locale.c:274 +#: locale/programs/localedef.c:316 nscd/nscd.c:292 nscd/nscd_nischeck.c:95 +#: nss/getent.c:68 posix/getconf.c:756 #, c-format msgid "Written by %s.\n" msgstr "¥Ñ %s ¨Ó¼g¥X¡C\n" @@ -3933,7 +3920,7 @@ msgstr "¬Oªº¡A42 ´N¬O¦s¦bªº·N¸q" msgid "You really blew it this time" msgstr "³o¦¸¯uªº³Q±z¥´±Ñ¤F" -#: timezone/zic.c:1089 +#: timezone/zic.c:1088 msgid "Zone continuation line end time is not after end time of previous line" msgstr "®É°Ï±µÄò¦æªºµ²§ô®É¶¡¤£¦b¤W¤@¦æªºµ²§ô®É¶¡¤§«á" @@ -3949,33 +3936,33 @@ msgstr "[FILE]" msgid "__get_myaddress: ioctl (get interface configuration)" msgstr "__get_myaddress: ioctl (¨ú±o¤¶­±²ÕºA)" -#: locale/programs/ld-collate.c:383 +#: locale/programs/ld-collate.c:417 #, c-format msgid "`%.*s' already defined as collating element" msgstr "`%.*s' ¤w³Q©w¸q¬°¹ï·Ó¤¸¯À" -#: locale/programs/ld-collate.c:376 +#: locale/programs/ld-collate.c:410 #, c-format msgid "`%.*s' already defined as collating symbol" msgstr "`%.*s' ¤w³Q©w¸q¬°¹ï·Ó²Å¸¹" -#: locale/programs/ld-collate.c:360 +#: locale/programs/ld-collate.c:394 #, c-format msgid "`%.*s' already defined in charmap" msgstr "`%.*s' ¦b¦r¶°¹ï·Óªí¤¤¤w¸g©w¸q¹L¤F" -#: locale/programs/ld-collate.c:369 +#: locale/programs/ld-collate.c:403 #, c-format msgid "`%.*s' already defined in repertoire" msgstr "`%.*s' ¦b½s½X¹ï¬MÀɤ¤¤w¸g³Q©w¸q¹L¤F" -#: locale/programs/charmap.c:562 locale/programs/locfile.h:96 +#: locale/programs/charmap.c:599 locale/programs/locfile.h:96 #: locale/programs/repertoire.c:314 #, c-format msgid "`%1$s' definition does not end with `END %1$s'" msgstr "`%1$s' ©w¸q¨S¦³¥H `END %1$s' µ²§ô" -#: locale/programs/ld-collate.c:1227 locale/programs/ld-ctype.c:1424 +#: locale/programs/ld-collate.c:1268 locale/programs/ld-ctype.c:1454 #, c-format msgid "`%s' and `%.*s' are no valid names for symbolic range" msgstr "`%s' ©M `%.*s' ¬Ò«D²Å¸¹½d³ò¤¤¾A¥Îªº¦WºÙ" @@ -3985,7 +3972,7 @@ msgstr "`%s' ©M `%.*s' ¬Ò«D²Å¸¹½d³ò¤¤¾A¥ msgid "`%s' is no correct profile data file for `%s'" msgstr "`%s' ¤£¬O `%s' ¤¤¥¿½Tªº´ú³tµû¦ô¸ê®ÆÀÉ" -#: locale/programs/ld-ctype.c:668 +#: locale/programs/ld-ctype.c:691 msgid "`digit' category has not entries in groups of ten" msgstr "`digit' Ãþ§O¦b¸s²Õ \"¤Q\" ¤¤¨S¦³¶µ¥Ø" @@ -4001,7 +3988,7 @@ msgstr "ai_socktype ¨S¦³¤ä´©" msgid "already running" msgstr "¤w¦b°õ¦æ" -#: locale/programs/charmap.c:397 locale/programs/repertoire.c:184 +#: locale/programs/charmap.c:434 locale/programs/repertoire.c:184 #, c-format msgid "argument to <%s> must be a single character" msgstr "µ¹ <%s> ªº¤Þ¼Æ¥²¶·¬O¤@­Ó³æ¦r¤¸" @@ -4019,7 +4006,7 @@ msgstr "auth_none.c - ÄY­«ªº±Æ§Ç°ÝÃD" msgid "authunix_create: out of memory\n" msgstr "authunix_create: °O¾ÐÅ餣¨¬\n" -#: locale/programs/charmap.c:327 locale/programs/locfile.c:118 +#: locale/programs/charmap.c:364 locale/programs/locfile.c:118 #: locale/programs/locfile.c:145 locale/programs/repertoire.c:176 msgid "bad argument" msgstr "¿ù»~ªº¤Þ¼Æ" @@ -4028,11 +4015,11 @@ msgstr "¿ù»~ªº¤Þ¼Æ" msgid "bad owner" msgstr "¿ù»~ªº¾Ö¦³ªÌ" -#: timezone/zic.c:1211 +#: timezone/zic.c:1210 msgid "blank FROM field on Link line" msgstr "Link ¦æ¤¤ªÅ¥Õªº FROM Äæ¦ì" -#: timezone/zic.c:1215 +#: timezone/zic.c:1214 msgid "blank TO field on Link line" msgstr "Link ¦æ¤¤ªÅ¥Õªº TO Äæ¦ì" @@ -4052,24 +4039,19 @@ msgstr "broadcast: ioctl (¨ú±o¤¶­±³]©w­È msgid "broadcast: ioctl (get interface flags)" msgstr "broadcast: ioctl (¨ú±o¤¶­±ºX¼Ð)" -#: elf/ldconfig.c:557 -#, c-format -msgid "buffer for snprintf too small for %s/%s--file is ignored\n" -msgstr "µ¹ snprintf ªº½w½ÄªÅ¶¡¤Ó¤p¡AµLªk %s/%s--©¿²¤¦¹¤@ÀÉ®×\n" - -#: sunrpc/svc_udp.c:528 sunrpc/svc_udp6.c:447 +#: sunrpc/svc_udp.c:528 msgid "cache_set: could not allocate new rpc_buffer" msgstr "cache_set: µLªk°t¸m·sªº»·ºÝµ{§Ç©I¥s½w½Ä°Ï (rpc_buffer)" -#: sunrpc/svc_udp.c:522 sunrpc/svc_udp6.c:441 +#: sunrpc/svc_udp.c:522 msgid "cache_set: victim alloc failed" msgstr "cache_set: victim °t¸m¥¢±Ñ" -#: sunrpc/svc_udp.c:511 sunrpc/svc_udp6.c:430 +#: sunrpc/svc_udp.c:511 msgid "cache_set: victim not found" msgstr "cache_set: §ä¤£¨ì victim" -#: timezone/zic.c:1752 +#: timezone/zic.c:1751 msgid "can't determine time zone abbreviation to use just after until time" msgstr "µLªk¨M©w¦bµ²§ô®É¶¡ (untiltime) ¥H«á¸Ó¨Ï¥Îªº®É°Ï²¼g" @@ -4078,24 +4060,24 @@ msgstr "µLªk¨M©w¦bµ²§ô®É¶¡ (untiltime) ¥ msgid "can't reassign procedure number %ld\n" msgstr "¤£¯à­«½Æ«ü©wµ{§Ç¸¹½X %ld\n" -#: elf/dl-reloc.c:150 +#: elf/dl-reloc.c:152 msgid "can't restore segment prot after reloc" msgstr "¦b reloc ¤§«áµLªk´_­ì segment port" -#: locale/programs/localedef.c:477 +#: locale/programs/localedef.c:487 #, c-format msgid "cannot add already read locale `%s' a second time" -msgstr " `%s' °Ï°ì¸ê®Æ¤w¸g¥Î¹L¡A¤£¯à­«½Æ¥[¤J" +msgstr " `%s' °Ï°ì¸ê®Æ (locale) ¤w¸g¥Î¹L¡A¤£¯à­«½Æ¥[¤J" -#: elf/dl-deps.c:458 +#: elf/dl-deps.c:470 msgid "cannot allocate dependency list" msgstr "µLªk°t¸m¬ÛÃö©Ê¦Cªí" -#: elf/dl-load.c:1042 +#: elf/dl-load.c:1031 msgid "cannot allocate memory for program header" msgstr "µLªk°t¸m°O¾ÐÅéµ¹µ{¦¡¼ÐÀY°Ï¨Ï¥Î" -#: elf/dl-load.c:317 +#: elf/dl-load.c:339 msgid "cannot allocate name record" msgstr "µLªk°t¸m¦WºÙ¬ö¿ý" @@ -4103,7 +4085,7 @@ msgstr "µLªk°t¸m¦WºÙ¬ö¿ý" msgid "cannot allocate symbol data" msgstr "µLªk°t¸m¨ç¦¡²Å¸¹¸ê®Æ" -#: elf/dl-deps.c:476 +#: elf/dl-deps.c:501 msgid "cannot allocate symbol search list" msgstr "µLªk°t¸m²Å¸¹·j´M¦Cªí" @@ -4111,20 +4093,20 @@ msgstr "µLªk°t¸m²Å¸¹·j´M¦Cªí" msgid "cannot allocate version reference table" msgstr "µLªk°t¸mª©¥»°Ñ·Óªí" -#: elf/dl-load.c:1011 +#: elf/dl-load.c:1000 msgid "cannot change memory protections" msgstr "µLªk§ïÅÜ°O¾ÐÅé«OÅ@ª¬ºA" -#: elf/dl-load.c:489 +#: elf/dl-load.c:533 msgid "cannot create RUNPATH/RPATH copy" msgstr "µLªk«Ø¥ß RUNPATH/RPATH ªº°Æ¥»" -#: elf/dl-load.c:416 elf/dl-load.c:477 elf/dl-load.c:502 elf/dl-load.c:542 -#: elf/dl-load.c:634 +#: elf/dl-load.c:418 elf/dl-load.c:518 elf/dl-load.c:546 elf/dl-load.c:593 +#: elf/dl-load.c:685 msgid "cannot create cache for search path" msgstr "µLªk¬°·j´M¸ô®|«Ø¥ß§Ö¨ú" -#: elf/dl-support.c:139 +#: elf/dl-support.c:191 msgid "cannot create capability list" msgstr "µLªk«Ø¥ß capability ¦Cªí" @@ -4136,37 +4118,45 @@ msgstr "µLªk«Ø¥ß¤º³¡±Ô­z¶µ" msgid "cannot create internal descriptors" msgstr "µLªk«Ø¥ß¤º³¡±Ô­z¶µ" -#: elf/dl-load.c:532 +#: elf/dl-load.c:583 msgid "cannot create search path array" msgstr "µLªk«Ø¥ß·j´M¸ô®|°}¦C" -#: elf/dl-load.c:1146 +#: elf/dl-load.c:1137 msgid "cannot create searchlist" msgstr "µLªk«Ø¥ß·j´M¦Cªí" -#: elf/dl-load.c:839 elf/dl-load.c:1559 +#: elf/dl-load.c:822 elf/dl-load.c:1682 msgid "cannot create shared object descriptor" msgstr "µLªk«Ø¥ß¦@¥Î¥ØªºÀɱԭz¶µ" +#: catgets/gencat.c:1316 +msgid "cannot determine escape character" +msgstr "µLªk¨M©w¸õ²æ (escape) ¦r¤¸" + +#: elf/dl-load.c:950 +msgid "cannot dynamically load executable" +msgstr "µLªk°ÊºA¸ü¤J°õ¦æÀÉ" + #: nscd/connections.c:183 #, c-format msgid "cannot enable socket to accept connections: %s" msgstr "µLªk¶}±Ò socket ¨Ó±µ¨ü³s½u: %s" -#: elf/dl-open.c:251 +#: elf/dl-open.c:121 msgid "cannot extend global scope" msgstr "µLªk©µ®i¥þ°ìÅܼƪº§@¥Î°ì" -#: sunrpc/rpc_main.c:342 +#: sunrpc/rpc_main.c:343 #, c-format msgid "cannot find C preprocessor: %s \n" msgstr "§ä¤£¨ì C «e¸m³B²z¾¹: %s \n" -#: sunrpc/rpc_main.c:350 +#: sunrpc/rpc_main.c:351 msgid "cannot find any C preprocessor (cpp)\n" msgstr "§ä¤£¨ì¥ô¦ó C «e¸m³B²z¾¹ (cpp)\n" -#: nscd/connections.c:224 +#: nscd/connections.c:225 #, c-format msgid "cannot handle old request version %d; current version is %d" msgstr "¤£¯à³B²z %d ª©ªº½Ð¨D¡F¥Ø«e¨Ï¥Îªºª©¥»¬O %d" @@ -4175,11 +4165,15 @@ msgstr "¤£¯à³B²z %d ª©ªº½Ð¨D¡F¥Ø«e¨Ï¥Î msgid "cannot load profiling data" msgstr "µLªk¸ü¤J´ú¸Õ¸ê®Æ" -#: elf/dl-reloc.c:62 +#: elf/dl-deps.c:586 +msgid "cannot load shared object file" +msgstr "µLªk¸ü¤J¦@¥Î¥ØªºÀÉ" + +#: elf/dl-reloc.c:63 msgid "cannot make segment writable for relocation" msgstr "¦b­«·s©w§}¥H«áµLªk±N°Ï¬q³]¬°¥i¼g¤Jª¬ºA" -#: elf/dl-load.c:1027 +#: elf/dl-load.c:1016 msgid "cannot map zero-fill pages" msgstr "µLªk¹ïÀ³¥H¹s¶ñº¡ªº¤À­¶°Ï" @@ -4192,31 +4186,26 @@ msgstr "µLªk¶}±Ò" msgid "cannot open `%s'" msgstr "µLªk¶}±Ò `%s'" -#: nss/makedb.c:149 -#, c-format -msgid "cannot open database file `%s': %s" -msgstr "µLªk¶}±Ò¸ê®Æ®wÀÉ®× `%s': %s" - #: debug/pcprofiledump.c:96 msgid "cannot open input file" msgstr "µLªk¶}±Ò¿é¤JÀÉ" -#: catgets/gencat.c:273 iconv/iconv_prog.c:225 nss/makedb.c:170 +#: catgets/gencat.c:288 iconv/iconv_prog.c:225 #, c-format msgid "cannot open input file `%s'" msgstr "µLªk¶}±Ò¿é¤JÀÉ `%s'" -#: locale/programs/localedef.c:198 locale/programs/localedef.c:213 -#: locale/programs/localedef.c:503 locale/programs/localedef.c:523 +#: locale/programs/localedef.c:203 locale/programs/localedef.c:218 +#: locale/programs/localedef.c:513 locale/programs/localedef.c:533 #, c-format msgid "cannot open locale definition file `%s'" -msgstr "µLªk¶}±Ò°Ï°ì¸ê®Æ©w¸qÀÉ `%s'" +msgstr "µLªk¶}±Ò°Ï°ì¤Æ¸ê®Æ®w (locale) ©w¸qÀÉ `%s'" #: iconv/iconv_prog.c:194 msgid "cannot open output file" msgstr "µLªk¶}±Ò¿é¥XÀÉ" -#: catgets/gencat.c:780 catgets/gencat.c:821 nss/makedb.c:183 +#: catgets/gencat.c:944 catgets/gencat.c:985 #, c-format msgid "cannot open output file `%s'" msgstr "µLªk¶}±Ò¿é¥XÀÉ `%s'" @@ -4226,7 +4215,7 @@ msgstr "µLªk¶}±Ò¿é¥XÀÉ `%s'" msgid "cannot open output file `%s' for category `%s'" msgstr "µLªk¶}±Ò¿é¥XÀÉ `%s' ¨ÑÃþ§O `%s' ¨Ï¥Î" -#: elf/dl-load.c:1572 +#: elf/dl-load.c:1695 msgid "cannot open shared object file" msgstr "µLªk¶}±Ò¦@¥Î¥ØªºÀÉ" @@ -4235,11 +4224,11 @@ msgstr "µLªk¶}±Ò¦@¥Î¥ØªºÀÉ" msgid "cannot open socket: %s" msgstr "µLªk¶}±Ò socket: %s" -#: elf/dl-load.c:831 +#: elf/dl-load.c:814 msgid "cannot open zero fill device" msgstr "µLªk¶}±Ò¥H¹s¶ñº¡ªº¸Ë¸m" -#: locale/programs/locale.c:462 +#: locale/programs/charmap-dir.c:61 #, c-format msgid "cannot read character map directory `%s'" msgstr "µLªkŪ¨ú¦r¶°¹ï·ÓÀɥؿý `%s'" @@ -4248,7 +4237,7 @@ msgstr "µLªkŪ¨ú¦r¶°¹ï·ÓÀɥؿý `%s'" msgid "cannot read configuration file; this is fatal" msgstr "µLªkŪ¨ú³]©wÀÉ¡A³o¬O¤@­ÓÄY­«¿ù»~" -#: elf/dl-load.c:768 elf/dl-load.c:856 +#: elf/dl-load.c:838 elf/dl-load.c:1244 msgid "cannot read file data" msgstr "µLªkŪ¨úÀɮ׸ê®Æ" @@ -4261,10 +4250,10 @@ msgstr "µLªkŪ¨ú¼ÐÀY¸ê®Æ" msgid "cannot read header from `%s'" msgstr "µLªk±q `%s' Ū¨ú¼ÐÀY¸ê®Æ" -#: locale/programs/locale.c:306 +#: locale/programs/locale.c:308 #, c-format msgid "cannot read locale directory `%s'" -msgstr "µLªkŪ¨ú°Ï°ì¸ê®Æ¥Ø¿ý `%s'" +msgstr "µLªkŪ¨ú°Ï°ì¸ê®Æ (locale) ¥Ø¿ý `%s'" #: nscd/nscd_stat.c:128 msgid "cannot read statistics data" @@ -4274,7 +4263,7 @@ msgstr "µLªkŪ¨ú²Î­p¸ê®Æ" msgid "cannot safe new repertoire map" msgstr "µLªkÀx¦s·sªº½s½X¹ï¬MÀÉ" -#: elf/dl-load.c:737 +#: elf/dl-load.c:776 msgid "cannot stat shared object" msgstr "µLªk stat ¦@¥Î¥ØªºÀÉ" @@ -4283,12 +4272,12 @@ msgstr "µLªk stat ¦@¥Î¥ØªºÀÉ" msgid "cannot stat() file `%s': %s" msgstr "µLªk stat() ÀÉ®× `%s': %s" -#: locale/programs/localedef.c:225 +#: locale/programs/localedef.c:230 #, c-format msgid "cannot write output files to `%s'" msgstr "µLªk±N¿é¥XÀÉ®×¼g¤J `%s'" -#: nscd/connections.c:260 nscd/connections.c:281 +#: nscd/connections.c:261 nscd/connections.c:282 #, c-format msgid "cannot write result: %s" msgstr "µLªk¼g¤Jµ²ªG: %s" @@ -4298,62 +4287,63 @@ msgstr "µLªk¼g¤Jµ²ªG: %s" msgid "cannot write statistics: %s" msgstr "µLªk¼g¤J²Î­p¸ê®Æ: %s" -#: locale/programs/ld-ctype.c:486 +#: locale/programs/ld-ctype.c:509 #, c-format msgid "character '%s' in class `%s' must be in class `%s'" msgstr "¦r¤¸ '%s' (©ñ¦bÃþ§O `%s' ¤§¤¤) ¥²¶·¦bÃþ§O `%s' ¸Ì­±" -#: locale/programs/ld-ctype.c:501 +#: locale/programs/ld-ctype.c:524 #, c-format msgid "character '%s' in class `%s' must not be in class `%s'" msgstr "¦r¤¸ '%s' (©ñ¦bÃþ§O `%s' ¤§¤¤) ¤£¯à¦bÃþ§O `%s' ¸Ì­±" -#: locale/programs/ld-ctype.c:556 +#: locale/programs/ld-ctype.c:579 msgid "character not defined in character map" msgstr "¦r¤¸ ¦b¦r¶°¹ï·ÓÀɤ¤¨S¦³©w¸q" -#: locale/programs/linereader.c:710 -#, c-format -msgid "character not in repertoire map" -msgstr "¦r¤¸ ¨Ã¤£¦b½s½X¹ï¬MÀɸ̭±" - -#: locale/programs/ld-ctype.c:430 +#: locale/programs/ld-ctype.c:453 #, c-format msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" msgstr "character L'\\u%0*x' (©ñ¦bÃþ§O `%s' ¤§¤¤) ¥²¶·¦bÃþ§O `%s' ¸Ì­±" -#: locale/programs/ld-ctype.c:444 +#: locale/programs/ld-ctype.c:467 #, c-format msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" msgstr "character L'\\u%0*x' (©ñ¦bÃþ§O `%s' ¤§¤¤) ¤£¯à¦bÃþ§O `%s' ¸Ì­±" -#: locale/programs/ld-ctype.c:2917 +#: locale/programs/ld-ctype.c:3030 #, c-format msgid "character `%s' not defined while needed as default value" msgstr "¥²¶·¥Î¨Ó§@¬°¹w³]­Èªº¦r¤¸ `%s' ¨S¦³³Q©w¸q¨ì" -#: locale/programs/ld-ctype.c:1205 +#: locale/programs/ld-ctype.c:1215 #, c-format msgid "character class `%s' already defined" msgstr "¦r¤¸Ãþ§O `%s' ¤w¸g©w¸q¹L¤F" -#: locale/programs/ld-ctype.c:1237 +#: locale/programs/ld-ctype.c:1247 #, c-format msgid "character map `%s' already defined" msgstr "¦r¶°¹ï·ÓÀÉ `%s' ¤w¸g©w¸q¹L¤F" -#: locale/programs/charmap.c:119 +#: locale/programs/charmap.c:249 +#, c-format +msgid "" +"character map `%s' is not ASCII compatible, locale not ISO C compliant\n" +msgstr "¦r¤¸¹ïÀ³ `%s' ¤£¬O ASCII ¬Û®e½X¡A°Ï°ì¤Æ¸ê®Æ®w¤£²Å¦X ISO C\n" + +#: locale/programs/charmap.c:135 #, c-format msgid "character map file `%s' not found" msgstr "§ä¤£¨ì¦r¶°¹ï·ÓÀÉ `%s'" -#: locale/programs/charmap.c:423 +#: locale/programs/charmap.c:460 msgid "character sets with locking states are not supported" msgstr "¤£¤ä´©¨Ï¥Î locking ª¬ºAªº¦r¤¸¶°" -#: locale/programs/localedef.c:472 +#: locale/programs/localedef.c:482 msgid "circular dependencies between locale definitions" -msgstr "¦³°Ï°ì¸ê®Æ¦b©w¸q®Éµo¥Í´`Àô¬ÛÃöªº±¡ªp" +msgstr "¦³°Ï°ì¸ê®Æ (locale) ¦b©w¸q®Éµo¥Í´`Àô¬ÛÃöªº±¡ªp" #: sunrpc/clnt_raw.c:111 msgid "clnt_raw.c - Fatal header serialization error." @@ -4363,7 +4353,7 @@ msgstr "clnt_raw.c - ÄY­«ªº¼ÐÀY§Ç¦C¤Æ¿ù» msgid "clnttcp_create: out of memory\n" msgstr "clnttcp_create: °O¾ÐÅ餣¨¬\n" -#: sunrpc/clnt_udp.c:126 sunrpc/clnt_udp.c:136 +#: sunrpc/clnt_udp.c:131 sunrpc/clnt_udp.c:141 msgid "clntudp_create: out of memory\n" msgstr "clntudp_create: °O¾ÐÅ餣¨¬\n" @@ -4380,8 +4370,12 @@ msgstr "À³¸Ó­n¦³±`¼Æ©ÎÃѧO²Å¸¹¤~¹ï" msgid "conversion from `%s' to `%s' not supported" msgstr "¤£¤ä´©±q `%s' ¨ì `%s' ªºÂà´«" +#: catgets/gencat.c:1290 +msgid "conversion modules not available" +msgstr "Âà´«¼Ò²Õ¤£¦s¦b" + #: locale/programs/ld-monetary.c:900 -msgid "conversion rate valze cannot be zero" +msgid "conversion rate value cannot be zero" msgstr "Âà´«²vªº­È¤£¥i¥H¬O¹s" #: iconv/iconv_prog.c:385 iconv/iconv_prog.c:410 @@ -4397,52 +4391,48 @@ msgstr "¤£¯à²£¥Í»·ºÝµ{§Ç©I¥s¦øªAµ{¦¡\n" msgid "couldn't register prog %ld vers %ld\n" msgstr "¤£¯à±Nµ{¦¡ %ld µù¥U¨ì %ld\n" -#: nss/getent.c:50 +#: nss/getent.c:51 msgid "database [key ...]" msgstr "¸ê®Æ®w [Áä­È...]" -#: locale/programs/charmap.c:213 +#: locale/programs/charmap.c:192 #, c-format msgid "default character map file `%s' not found" msgstr "§ä¤£¨ì¹w³]ªº¦r¶°¹ï·ÓÀÉ `%s'" -#: locale/programs/charmap.c:355 +#: locale/programs/charmap.c:392 #, c-format msgid "duplicate definition of <%s>" msgstr "<%s> ªº©w¸q­«½Æ¤F" -#: locale/programs/ld-collate.c:3173 +#: locale/programs/ld-collate.c:3043 #, c-format msgid "duplicate definition of script `%s'" msgstr "±Ô­z `%s' ªº©w¸q­«½Æ¤F" -#: nss/makedb.c:330 -msgid "duplicate key" -msgstr "½Æ»sÁä­È" - -#: catgets/gencat.c:389 +#: catgets/gencat.c:430 msgid "duplicate set definition" msgstr "½Æ»s¶°¦X©w¸q" -#: timezone/zic.c:1004 +#: timezone/zic.c:1003 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "½Æ»s®É°Ï¦WºÙ %s (ÀÉ®× \"%s\", ²Ä %d ¦æ)" -#: locale/programs/ld-ctype.c:2485 +#: locale/programs/ld-ctype.c:2557 #, c-format msgid "duplicated definition for mapping `%s'" msgstr "¹ï¬M `%s' ªº©w¸q­«½Æ¤F" -#: catgets/gencat.c:556 +#: catgets/gencat.c:631 msgid "duplicated message identifier" msgstr "­«½Æªº°T®§ÃѧO²Å¸¹" -#: catgets/gencat.c:528 +#: catgets/gencat.c:603 msgid "duplicated message number" msgstr "­«½Æªº°T®§½s¸¹" -#: locale/programs/ld-ctype.c:2296 +#: locale/programs/ld-ctype.c:2368 msgid "ellipsis range must be marked by two operands of same type" msgstr "¬Ù²¤°Ï°ì¥²¶·¥Î¨â­Ó«¬§O¬Û¦Pªº¹Bºâ¤¸¼Ð¥Ü¥X¨Ó" @@ -4450,23 +4440,23 @@ msgstr "¬Ù²¤°Ï°ì¥²¶·¥Î¨â­Ó«¬§O¬Û¦Pªº¹Bºâ msgid "empty char string" msgstr "ªÅªº¦r¤¸¦r¦ê" -#: elf/dl-open.c:140 +#: elf/dl-open.c:223 msgid "empty dynamic string token substitution" msgstr "ªÅªº°ÊºA¦r¦ê°O¸¹´À´«" -#: sunrpc/svc_udp.c:454 sunrpc/svc_udp6.c:373 +#: sunrpc/svc_udp.c:454 msgid "enablecache: cache already enabled" msgstr "enablecache: §Ö¨ú¤w¸g¶}±Ò" -#: sunrpc/svc_udp.c:460 sunrpc/svc_udp6.c:379 +#: sunrpc/svc_udp.c:460 msgid "enablecache: could not allocate cache" msgstr "enablecache: µLªk°t¸m§Ö¨ú" -#: sunrpc/svc_udp.c:468 sunrpc/svc_udp6.c:387 +#: sunrpc/svc_udp.c:468 msgid "enablecache: could not allocate cache data" msgstr "enablecache: µLªk°t¸m§Ö¨ú¸ê®Æ" -#: sunrpc/svc_udp.c:475 sunrpc/svc_udp6.c:394 +#: sunrpc/svc_udp.c:475 msgid "enablecache: could not allocate cache fifo" msgstr "enablecache: µLªk°t¸m§Ö¨ú fifo ºÞ½u" @@ -4478,12 +4468,12 @@ msgstr "¥Î¨Ó¿é¥Xªº½s½X" msgid "encoding of original text" msgstr "­ì©l¤å¦rªº½s½X" -#: nscd/connections.c:360 nscd/connections.c:452 +#: nscd/connections.c:361 nscd/connections.c:453 #, c-format msgid "error getting callers id: %s" msgstr "¨ú±o©I¥sµ{¦¡ÃѧO½X®Éµo¥Í¿ù»~: %s" -#: locale/programs/ld-collate.c:3143 +#: locale/programs/ld-collate.c:3013 msgid "error while adding equivalent collating symbol" msgstr "¥¿¦b¥[¤J¦P¸q¹ï·Ó²Å¸¹®Éµo¥Í¿ù»~" @@ -4508,7 +4498,7 @@ msgstr "¥¿¦bŪ¤J¸ê®Æªº®É­Ôµo¥Í¿ù»~" msgid "expect string argument for `copy'" msgstr "`copy' ªº°Ñ¼ÆÀ³¸Ó¬O¦r¦ê¤~¹ï" -#: timezone/zic.c:894 +#: timezone/zic.c:893 msgid "expected continuation line not found" msgstr "§ä¤£¨ì¹w´Áªº±µÄò¦æ" @@ -4521,7 +4511,7 @@ msgstr "¶}±Ò¦@¥Î¥ØªºÀÉ `%s' ¥¢±Ñ" msgid "failed to load symbol data" msgstr "¸ü¤J¨ç¦¡²Å¸¹¸ê®Æ¥¢±Ñ" -#: elf/dl-load.c:722 +#: elf/dl-load.c:763 msgid "failed to map segment from shared object" msgstr "±q¦@¥Î¥ØªºÀɤ¤¹ï¬M°Ï¬q¥¢±Ñ" @@ -4544,20 +4534,24 @@ msgstr "fcntl: F_SETFD" #. TRANS: the file will not be removed; this is an #. TRANS: informative message. -#: sunrpc/rpc_main.c:1153 +#: sunrpc/rpc_main.c:1150 #, c-format msgid "file `%s' already exists and may be overwritten\n" -msgstr "ÀÉ®× `%s' ¤w¸g¦s¦b¨Ã¦³¥i¯à·|³QÂл\\±¼\n" +msgstr "ÀÉ®× `%s' ¤w¸g¦s¦b¨Ã¦³¥i¯à·|³QÂл\±¼\n" + +#: elf/dl-load.c:1244 +msgid "file too short" +msgstr "ÀɮפӤp" #: inet/rcmd.c:422 msgid "fstat failed" msgstr "fstat ¥¢±Ñ" -#: locale/programs/linereader.c:376 +#: locale/programs/linereader.c:383 msgid "garbage at end of character code specification" msgstr "¦r¤¸½s½X³]©wµ²§ô¦ì¸mªºµL¥Î¸ê®Æ" -#: locale/programs/linereader.c:265 +#: locale/programs/linereader.c:271 msgid "garbage at end of number" msgstr "¸¹½Xµ²§ô¦ì¸mªºµL¥Î¸ê®Æ" @@ -4573,16 +4567,16 @@ msgstr "±q°õ¦æ¦¸¼Æ»P¸g¾ú®É¶¡ªº¸ê®Æ¤¤²£¥Í msgid "get_myaddress: ioctl (get interface configuration)" msgstr "get_myaddress: ioctl (¨ú±o¤¶­±³]©w¸ê®Æ)" -#: nss/getent.c:54 +#: nss/getent.c:702 msgid "getent - get entries from administrative database." msgstr "getent - ±qºÞ²z¸ê®Æ®w¤¤¨ú±o¶µ¥Ø¤º®e¡C" -#: nscd/connections.c:219 +#: nscd/connections.c:220 #, c-format msgid "handle_request: request received (Version = %d)" msgstr "handle_request: ½Ð¨D¤w³Q±µ¨ü (ª©¥»¬° %d)" -#: timezone/zic.c:638 +#: timezone/zic.c:637 msgid "hard link failed, symbolic link used" msgstr "¹êÅé³sµ²¥¢±Ñ¡A¨Ï¥Î²Å¸¹³sµ²¥N´À" @@ -4590,15 +4584,15 @@ msgstr "¹êÅé³sµ²¥¢±Ñ¡A¨Ï¥Î²Å¸¹³sµ²¥N´À" msgid "hard linked somewhere" msgstr "³Q¹êÅé³sµ²¨ì¬Y³B" -#: locale/programs/charmap.c:944 locale/programs/repertoire.c:430 +#: locale/programs/charmap.c:981 locale/programs/repertoire.c:430 msgid "hexadecimal range format should use only capital characters" msgstr "¦bªí¥Ü¤Q¤»¶i¦ìªº½d³ò®É¥u¯à¥Î¤j¼gªº­^¤å¦r¥Àªí¥Ü" -#: timezone/zic.c:1188 +#: timezone/zic.c:1187 msgid "illegal CORRECTION field on Leap line" msgstr "¦b¶|®É³]©w¦æ¤¤¦³¤£¦Xªkªº CORRECTION Äæ¦ì" -#: timezone/zic.c:1192 +#: timezone/zic.c:1191 msgid "illegal Rolling/Stationary field on Leap line" msgstr "¦b¶|®É³]©w¦æ¤¤¦³¤£¦Xªkªº Rolling/Stationary Äæ¦ì" @@ -4606,7 +4600,7 @@ msgstr "¦b¶|®É³]©w¦æ¤¤¦³¤£¦Xªkªº Rolling msgid "illegal character in file: " msgstr "Àɮפ¤¦³¤£¦Xªkªº¦r¤¸: " -#: locale/programs/linereader.c:588 +#: locale/programs/linereader.c:595 msgid "illegal escape sequence at end of string" msgstr "¦r¦êµ²§À¦³¤£¦Xªkªº¸õ²æ§Ç¦C" @@ -4615,21 +4609,21 @@ msgstr "¦r¦êµ²§À¦³¤£¦Xªkªº¸õ²æ§Ç¦C" msgid "illegal input sequence at position %ld" msgstr "¦ì¸m %ld ¦³¤£¦Xªkªº¿é¤J§Ç¦C" -#: sunrpc/rpc_main.c:466 +#: sunrpc/rpc_main.c:463 #, c-format msgid "illegal nettype :`%s'\n" msgstr "¤£¦Xªkªº nettype :`%s'\n" -#: catgets/gencat.c:362 catgets/gencat.c:439 +#: catgets/gencat.c:403 catgets/gencat.c:480 msgid "illegal set number" msgstr "¤£¦Xªkªº¶°¦X½s¸¹" -#: locale/programs/ld-ctype.c:1211 +#: locale/programs/ld-ctype.c:1221 #, c-format msgid "implementation limit: no more than %Zd character classes allowed" msgstr "µ{¦¡¹ê§@ªº­­¨î: ¤£¯à¨Ï¥Î¶W¹L %Zd ­Ó¦r¶°Ãþ§O" -#: locale/programs/ld-ctype.c:1243 +#: locale/programs/ld-ctype.c:1253 #, c-format msgid "implementation limit: no more than %d character maps allowed" msgstr "µ{¦¡¹ê§@ªº­­¨î: ¤£¯à¨Ï¥Î¶W¹L %d ­Ó¦r¶°¹ï·ÓÀÉ" @@ -4638,15 +4632,11 @@ msgstr "µ{¦¡¹ê§@ªº­­¨î: ¤£¯à¨Ï¥Î¶W¹L %d msgid "incomplete character or shift sequence at end of buffer" msgstr "½w½Ä°Ïµ²§À¦³¤£§¹¥þªº¦r¤¸©Î shift sequence" -#: nss/makedb.c:151 -msgid "incorrectly formatted file" -msgstr "¨S¦³¥¿½T®æ¦¡¤ÆªºÀÉ®×" - -#: timezone/zic.c:851 +#: timezone/zic.c:850 msgid "input line of unknown type" msgstr "¤£©ú«¬§Oªº¿é¤J¦æ" -#: elf/dl-load.c:812 +#: elf/dl-load.c:1291 msgid "internal error" msgstr "¤º³¡¿ù»~" @@ -4654,68 +4644,76 @@ msgstr "¤º³¡¿ù»~" msgid "internal error (illegal descriptor)" msgstr "¤º³¡¿ù»~ (¤£¦Xªkªº±Ô­z¶µ)" -#: timezone/zic.c:1814 +#: timezone/zic.c:1813 msgid "internal error - addtype called with bad isdst" msgstr "¤º³¡¿ù»~ - ¥Î¿ù»~ªº isdst ©I¥s addtype ¨ç¦¡" -#: timezone/zic.c:1822 +#: timezone/zic.c:1821 msgid "internal error - addtype called with bad ttisgmt" msgstr "¤º³¡¿ù»~ - ¥Î¿ù»~ªº ttisgmt ©I¥s addtype ¨ç¦¡" -#: timezone/zic.c:1818 +#: timezone/zic.c:1817 msgid "internal error - addtype called with bad ttisstd" msgstr "¤º³¡¿ù»~ - ¥Î¿ù»~ªº ttisstd ©I¥s addtype ¨ç¦¡" -#: locale/programs/ld-ctype.c:457 locale/programs/ld-ctype.c:513 +#: locale/programs/ld-ctype.c:480 locale/programs/ld-ctype.c:536 #, c-format msgid "internal error in %s, line %u" msgstr "%s ªº²Ä %u ¦æµo¥Í¤º³¡¿ù»~" -#: elf/dl-load.c:789 +#: elf/dl-load.c:1264 msgid "invalid ELF header" msgstr "µL®Äªº ELF ¼ÐÀY" -#: timezone/zic.c:1060 +#: timezone/zic.c:1059 msgid "invalid UTC offset" msgstr "µL®Äªº UTC ¦ì²¾­È" -#: timezone/zic.c:1063 +#: timezone/zic.c:1062 msgid "invalid abbreviation format" msgstr "µL®ÄªºÁY¼g®æ¦¡" -#: timezone/zic.c:1153 timezone/zic.c:1365 timezone/zic.c:1379 +#: catgets/gencat.c:687 +msgid "invalid character: message ignored" +msgstr "¤£¾A¥Îªº¦r¤¸: ©¿²¤¦¹°T®§" + +#: timezone/zic.c:1152 timezone/zic.c:1364 timezone/zic.c:1378 msgid "invalid day of month" msgstr "µL®Äªº¤é´Á¼Æ¦r" -#: locale/programs/charmap.c:310 +#: locale/programs/charmap.c:347 msgid "invalid definition" msgstr "µL®Äªº©w¸q" -#: locale/programs/charmap.c:505 +#: locale/programs/charmap.c:542 msgid "invalid encoding given" msgstr "µ¹¤©ªº½s½X¬OµL®Äªº" -#: timezone/zic.c:1317 +#: timezone/zic.c:1316 msgid "invalid ending year" msgstr "µL®Äªºµ²§ô¦~¥÷" -#: locale/programs/linereader.c:526 +#: catgets/gencat.c:1147 locale/programs/linereader.c:533 msgid "invalid escape sequence" msgstr "µL®Äªº¸õ²æ§Ç¦C" -#: timezone/zic.c:1125 +#: timezone/zic.c:1124 msgid "invalid leaping year" msgstr "µL®Äªº¶|¦~" -#: elf/dl-open.c:315 +#: catgets/gencat.c:726 +msgid "invalid line" +msgstr "µL®Äªº¿é¤J¦C" + +#: elf/dl-open.c:371 msgid "invalid mode for dlopen()" msgstr "µL®Äªº dlopen() ¼Ò¦¡" -#: timezone/zic.c:1140 timezone/zic.c:1243 +#: timezone/zic.c:1139 timezone/zic.c:1242 msgid "invalid month name" msgstr "µL®Äªº¤ë¥÷¦WºÙ" -#: locale/programs/charmap.c:932 locale/programs/ld-collate.c:3001 +#: locale/programs/charmap.c:969 locale/programs/ld-collate.c:2869 #: locale/programs/repertoire.c:418 msgid "invalid names for character range" msgstr "µL®Äªº¦r¤¸½d³ò¦WºÙ" @@ -4724,48 +4722,54 @@ msgstr "µL®Äªº¦r¤¸½d³ò¦WºÙ" msgid "invalid pointer size" msgstr "µL®Äªº«ü¼Ð¤j¤p" -#: timezone/zic.c:959 +#: catgets/gencat.c:549 +msgid "invalid quote character" +msgstr "¤£¾A¥Îªº¤Þ¥Î¦r¤¸" + +#: timezone/zic.c:958 msgid "invalid saved time" msgstr "µL®Äªº¸`¬ù®É¶¡" -#: timezone/zic.c:1292 +#: timezone/zic.c:1291 msgid "invalid starting year" msgstr "µL®Äªº°_©l¦~¥÷" -#: timezone/zic.c:1169 timezone/zic.c:1272 +#: timezone/zic.c:1168 timezone/zic.c:1271 msgid "invalid time of day" msgstr "µL®Äªº®É¶¡¼Æ¦r" -#: timezone/zic.c:1370 +#: timezone/zic.c:1369 msgid "invalid weekday name" msgstr "µL®Äªº¤u§@¤é (weekday) ¦WºÙ" -#: nscd/connections.c:469 -msgid "key length in request too long: %zd" -msgstr "¦b¦¹½Ð¨D°T¸¹¤¤¨Ï¥ÎªºÁä­È¤Óªø¤F: %zd" +#: nscd/connections.c:470 +#, c-format +msgid "key length in request too long: %d" +msgstr "¦b¦¹½Ð¨D¤¤¨Ï¥ÎªºÁä­È¤Óªø¤F: %d" -#: elf/ldconfig.c:606 +#: elf/ldconfig.c:738 #, c-format msgid "libc4 library %s in wrong directory" -msgstr "libc4 ¨ç¦¡®w %s Â\\¿ù¥Ø¿ý¤F" +msgstr "libc4 ¨ç¦¡®w %s Â\¿ù¥Ø¿ý¤F" -#: elf/ldconfig.c:600 +#: elf/ldconfig.c:732 #, c-format msgid "libc5 library %s in wrong directory" -msgstr "libc5 ¨ç¦¡®w %s Â\\¿ù¥Ø¿ý¤F" +msgstr "libc5 ¨ç¦¡®w %s Â\¿ù¥Ø¿ý¤F" -#: elf/ldconfig.c:603 +#: elf/ldconfig.c:735 #, c-format msgid "libc6 library %s in wrong directory" -msgstr "libc6 ¨ç¦¡®w %s Â\\¿ù¥Ø¿ý¤F" +msgstr "libc6 ¨ç¦¡®w %s Â\¿ù¥Ø¿ý¤F" -#: elf/ldconfig.c:633 +#: elf/ldconfig.c:765 #, c-format msgid "" "libraries %s and %s in directory %s have same soname but different type." -msgstr "¨ç¦¡®w %s ¸ò %s (¦b¥Ø¿ý %s ©³¤U) ¦³¦@¦Pªº¦@¥Î¨ç¦¡®w¦WºÙ¡A¤£¹L¨ä®æ¦¡«o¤£¦P" +msgstr "" +"¨ç¦¡®w %s ¸ò %s (¦b¥Ø¿ý %s ©³¤U) ¦³¦@¦Pªº¦@¥Î¨ç¦¡®w¦WºÙ¡A¤£¹L¨ä®æ¦¡«o¤£¦P" -#: timezone/zic.c:831 +#: timezone/zic.c:830 msgid "line too long" msgstr "¦æªºªø«×¹Lªø" @@ -4775,7 +4779,7 @@ msgstr "¦C¥X©Ò¦³¤wª¾ªº½s½X¦r¤¸¶°" #: locale/programs/locfile.h:63 msgid "locale name should consist only of portable characters" -msgstr "locale ªº¦WºÙÀ³¸Ó¥Îªx¥Î¦r¤¸ (portable characters) ²Õ¦¨" +msgstr "°Ï°ì¤Æ¸ê®Æ®w (locale) ªº¦WºÙÀ³¸Ó¥Îªx¥Î¦r¤¸ (portable characters) ²Õ¦¨" #: inet/rcmd.c:413 msgid "lstat failed" @@ -4789,7 +4793,7 @@ msgstr "³]©w¿é¥Xªº¹Ï§Î°ª«×¬° VALUE ­Ó¹³¯ msgid "make output graphic VALUE pixel wide" msgstr "³]©w¿é¥Xªº¹Ï§Î¼e«×¬° VALUE ­Ó¹³¯À" -#: catgets/gencat.c:625 +#: catgets/gencat.c:780 msgid "malformed line ignored" msgstr "©¿²¤©_©Çªº¦æ" @@ -4810,7 +4814,7 @@ msgid "memory clobbered past end of allo msgstr "°O¾ÐÅé¦b¸g¹L°t¸mªº°Ï¶ô§À³¡®É clobbered ¤F\n" #: locale/programs/locfile.c:334 locale/programs/xmalloc.c:70 -#: malloc/obstack.c:471 posix/getconf.c:809 +#: malloc/obstack.c:477 posix/getconf.c:809 msgid "memory exhausted" msgstr "°O¾ÐÅé¯ÓºÉ" @@ -4818,15 +4822,15 @@ msgstr "°O¾ÐÅé¯ÓºÉ" msgid "memory is consistent, library is buggy\n" msgstr "°O¾ÐÅ餺®e¤@­P¡A¨ç¦¡®w¦³°ÝÃD\n" -#: elf/cache.c:115 +#: elf/cache.c:120 msgid "mmap of cache file failed.\n" msgstr "§Ö¨úÀÉ®× mmap ¥¢±Ñ¡C\n" -#: elf/../sysdeps/generic/readelflib.c:107 +#: elf/../sysdeps/generic/readelflib.c:108 msgid "more than one dynamic segment\n" msgstr "¶W¹L¤@­Óªº°ÊºA°Ï¬q\n" -#: timezone/zic.c:954 +#: timezone/zic.c:953 msgid "nameless rule" msgstr "³W«h¨S¦³¦WºÙ" @@ -4875,11 +4879,11 @@ msgstr "¤d¸U¤£­nµù¥Uµ{¦¡ %d\n" msgid "no or value given" msgstr "¨S¦³µ¹©w ©Î ªº­È" -#: timezone/zic.c:2143 +#: timezone/zic.c:2142 msgid "no day in month matches rule" msgstr "¦b¤ë¥÷¸ê®Æ¤¤§ä¤£¨ì²Å¦X³W«hªº¤é¼Æ" -#: locale/programs/ld-collate.c:1814 +#: locale/programs/ld-collate.c:1757 msgid "no definition of `UNDEFINED'" msgstr "¨S¦³§ä¨ì `UNDEFINED' ªº©w¸q" @@ -4889,7 +4893,7 @@ msgid "" "no filename for profiling data given and shared object `%s' has no soname" msgstr "¨S¦³µ¹¤©´ú¸Õ¸ê®ÆªºÀɦW¡A¦Ó¥B¦@¥Î¥ØªºÀÉ `%s' ¤]¨S¦³¦@¥Î¨ç¦¡®w¦WºÙ" -#: locale/programs/ld-ctype.c:716 +#: locale/programs/ld-ctype.c:739 msgid "no input digits defined and none of the standard names in the charmap" msgstr "¨S¦³©w¸q¿é¤J¼Æ¦r¡A¦b¦r¶°¹ï·ÓÀɤ¤¤]§ä¤£¨ì¬Û²Åªº¼Ð·Ç¦WºÙ" @@ -4897,33 +4901,33 @@ msgstr "¨S¦³©w¸q¿é¤J¼Æ¦r¡A¦b¦r¶°¹ï·ÓÀɤ¤ msgid "no other keyword shall be specified when `copy' is used" msgstr "¨Ï¥Î `copy' ªº®É­Ô¤£À³¸Ó¦A¥Î¨ì¥ô¦ó¨ä¥LªºÃöÁä¦r¤F" -#: locale/programs/ld-ctype.c:3236 +#: locale/programs/ld-ctype.c:3349 msgid "no output digits defined and none of the standard names in the charmap" msgstr "¨S¦³©w¸q¿é¥X¼Æ¦r¡A¦b¦r¶°¹ï·ÓÀɤ¤¤]§ä¤£¨ì¬Û²Åªº¼Ð·Ç¦WºÙ" -#: locale/programs/localedef.c:231 +#: locale/programs/localedef.c:236 msgid "no output file produced because warning were issued" msgstr "¦]¬°µo¥X¹Lĵ§i°T®§¡A©Ò¥H¨S¦³»s³y¥ô¦ó¿é¥XÀÉ" -#: locale/programs/charmap.c:451 locale/programs/charmap.c:631 -#: locale/programs/charmap.c:727 locale/programs/repertoire.c:231 +#: locale/programs/charmap.c:488 locale/programs/charmap.c:668 +#: locale/programs/charmap.c:764 locale/programs/repertoire.c:231 msgid "no symbolic name given" msgstr "¨S¦³µ¹¤©²Å¸¹¦WºÙ" -#: locale/programs/charmap.c:538 locale/programs/charmap.c:686 -#: locale/programs/charmap.c:769 locale/programs/repertoire.c:297 +#: locale/programs/charmap.c:575 locale/programs/charmap.c:723 +#: locale/programs/charmap.c:806 locale/programs/repertoire.c:297 msgid "no symbolic name given for end of range" msgstr "¨S¦³µ¹¦¹°Ïªº³Ì«á¤@­Ó¦r¤¸²Å¸¹¦WºÙ" -#: locale/programs/linereader.c:634 +#: locale/programs/linereader.c:641 msgid "non-symbolic character value should not be used" msgstr "«D²Å¸¹©Êªº¦r¤¸­È¤£À³¸Ó³Q¨Ï¥Î¤~¹ï" -#: locale/programs/ld-ctype.c:781 +#: locale/programs/ld-ctype.c:804 msgid "not all characters used in `outdigit' are available in the charmap" msgstr "¦b¦r¶°¹ï·Óªí¤¤µLªk§ä¨ì¬Y¨Ç¦b `outdigit' ¤¤¥Î¨ìªº¦r¤¸" -#: locale/programs/ld-ctype.c:798 +#: locale/programs/ld-ctype.c:821 msgid "not all characters used in `outdigit' are available in the repertoire" msgstr "¦b½s½X¹ï¬MÀɤ¤µLªk§ä¨ì¬Y¨Ç¦b `outdigit' ¤¤¥Î¨ìªº¦r¤¸" @@ -4946,7 +4950,7 @@ msgstr "" msgid "nscd not running!\n" msgstr "nscd ¨Ã¨S¦³¦b°õ¦æ!\n" -#: elf/dl-load.c:1062 +#: elf/dl-load.c:1051 msgid "object file has no dynamic section" msgstr "¦@¥Î¥ØªºÀɤ¤¨S¦³°ÊºA¸`°Ï" @@ -4954,11 +4958,15 @@ msgstr "¦@¥Î¥ØªºÀɤ¤¨S¦³°ÊºA¸`°Ï" msgid "omit invalid characters from output" msgstr "¬Ù²¤µL®Ä¦r¤¸ªº¿é¥X" -#: locale/programs/charmap.c:595 +#: elf/dl-load.c:1311 +msgid "only ET_DYN and ET_EXEC can be loaded" +msgstr "¥u¦³ ET_DYN ¥H¤Î ET_EXEC ¥i¥H¸ü¤J" + +#: locale/programs/charmap.c:632 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" msgstr "¥u¦³ WIDTH ©w¸q¤~¯àª½±µ¼g¦b CHARMAP ©w¸q¤§«á" -#: locale/programs/ld-collate.c:968 locale/programs/ld-collate.c:1134 +#: locale/programs/ld-collate.c:1005 locale/programs/ld-collate.c:1175 #, c-format msgid "order for `%.*s' already defined at %s:%Zu" msgstr "`%.*s' ªº¶¶§Ç¤w¸g¦b %s:%Zu ¸Ì­±©w¸q¤F" @@ -4983,7 +4991,7 @@ msgstr "pmap_getmaps »·ºÝµ{§Ç©I¥s°ÝÃD" msgid "poll: protocol failure in circuit setup\n" msgstr "poll: ³q°T¨ó©w¦b³]©w½u¸ô®É¥¢®Ä\n" -#: locale/programs/ld-ctype.c:1917 locale/programs/ld-ctype.c:1968 +#: locale/programs/ld-ctype.c:1949 locale/programs/ld-ctype.c:2000 msgid "premature end of `translit_ignore' definition" msgstr "`translit_ignore' ©w¸q¨S¦³«ö®Éµ²§ô" @@ -4991,7 +4999,7 @@ msgstr "`translit_ignore' ©w¸q¨S¦³«ö®Éµ² msgid "preprocessor error" msgstr "«e¸m³B²z¾¹¿ù»~" -#: locale/programs/ld-ctype.c:2647 +#: locale/programs/ld-ctype.c:2731 msgid "previous definition was here" msgstr "¥ý«eªº³]©w¦b¦¹" @@ -5003,11 +5011,6 @@ msgstr "¦C¥X­p¼Æªº¸ô®|¥H¤Î¥¦­Ì¨Ï¥Îªº¦¸¼Æ msgid "print progress information" msgstr "¦L¥Xµ{§Ç¬ÛÃö¸ê°T" -#: nss/makedb.c:347 -#, c-format -msgid "problems while reading `%s'" -msgstr "¥¿¦bŪ¨ú `%s' ®Éµo¥Í°ÝÃD" - #: elf/sprof.c:687 #, c-format msgid "profiling data file `%s' does not match shared object `%s'" @@ -5053,7 +5056,7 @@ msgstr "rcmd: write (¥¿¦b³]©w¼Ð·Ç¿ù»~¿é¥ msgid "registerrpc: out of memory\n" msgstr "registerrpc: °O¾ÐÅ餣¨¬\n" -#: timezone/zic.c:1875 +#: timezone/zic.c:1874 msgid "repeated leap second moment" msgstr "­«½Æªº¶|¬í³]©w" @@ -5062,15 +5065,15 @@ msgstr "­«½Æªº¶|¬í³]©w" msgid "repertoire map file `%s' not found" msgstr "§ä¤£¨ì½s½X¹ï¬MÀÉ `%s'" -#: locale/programs/charmap.c:1026 +#: locale/programs/charmap.c:1063 msgid "resulting bytes for range not representable." msgstr "¥Î¨Ó©w¸q½d³òªº¦ì¤¸²ÕµLªk³Qªí­z¥X¨Ó" -#: sunrpc/rpc_main.c:1120 +#: sunrpc/rpc_main.c:1117 msgid "rpcgen: arglist coding error\n" msgstr "rpcgen: arglist ½s½X¿ù»~\n" -#: sunrpc/rpc_main.c:1108 +#: sunrpc/rpc_main.c:1105 msgid "rpcgen: too many defines\n" msgstr "rpcgen: ¤Ó¦h define ¤F\n" @@ -5098,29 +5101,29 @@ msgstr "rpcinfo: ¼s¼½¥¢±Ñ: %s\n" msgid "rpcinfo: can't contact portmapper" msgstr "rpcinfo: µLªk«Ø¥ß¸ò portmapper ¤§¶¡ªº³s½u" -#: timezone/zic.c:744 timezone/zic.c:746 +#: timezone/zic.c:743 timezone/zic.c:745 msgid "same rule name in multiple files" msgstr "¦b¦h­ÓÀɮ׸̭±¦³¬Û¦Pªº³W«h¦WºÙ" -#: elf/dl-load.c:1126 +#: elf/dl-load.c:1116 msgid "shared object cannot be dlopen()ed" msgstr "¦@¥Î¥ØªºÀɵLªk³Q dlopen()" -#: elf/dl-close.c:57 +#: elf/dl-close.c:63 msgid "shared object not open" msgstr "¦@¥Î¥ØªºÀɮרS¦³¶}±Ò" -#: nscd/connections.c:481 +#: nscd/connections.c:482 #, c-format msgid "short read while reading request key: %s" msgstr "Ū¨ú½Ð¨DªºÁä­È®Éµo²{¿é¤J­È¹Lµu: %s" -#: nscd/connections.c:435 +#: nscd/connections.c:436 #, c-format msgid "short read while reading request: %s" msgstr "Ū¨ú½Ð¨D®Éµo²{¿é¤J­È¹Lµu: %s" -#: nscd/grpcache.c:192 nscd/hstcache.c:278 nscd/pwdcache.c:189 +#: nscd/grpcache.c:193 nscd/hstcache.c:278 nscd/pwdcache.c:189 #, c-format msgid "short write in %s: %s" msgstr "¼g¤J %s ªº¸ê®Æ¹Lµu: %s" @@ -5129,78 +5132,75 @@ msgstr "¼g¤J %s ªº¸ê®Æ¹Lµu: %s" msgid "socket: protocol failure in circuit setup\n" msgstr "socket: ³q°T¨ó©w¦b³]©w½u¸ô®É¥¢®Ä\n" -#: timezone/zic.c:815 +#: timezone/zic.c:814 msgid "standard input" msgstr "¼Ð·Ç¿é¤J" -#: timezone/zdump.c:268 +#: timezone/zdump.c:269 msgid "standard output" msgstr "¼Ð·Ç¿é¥X" -#: locale/programs/ld-ctype.c:1648 +#: locale/programs/ld-ctype.c:1680 msgid "start and end character sequence of range must have the same length" msgstr "±q°_©l¨ìµ²§ô¤§¶¡ªº¦r¤¸§Ç¦Cªø«×¸ò½s½X½d³ò¥²¶·¬Û¦P" -#: timezone/zic.c:1326 +#: timezone/zic.c:1325 msgid "starting year greater than ending year" msgstr "°_©l¦~¥÷¤ñµ²§ô¦~¥÷ÁÙ­n¤j" -#: timezone/zic.c:1298 timezone/zic.c:1323 +#: timezone/zic.c:1297 timezone/zic.c:1322 msgid "starting year too high to be represented" msgstr "°_©l¦~¥÷¤Ó°ª¡AµLªkªí¥Ü" -#: timezone/zic.c:1296 timezone/zic.c:1321 +#: timezone/zic.c:1295 timezone/zic.c:1320 msgid "starting year too low to be represented" msgstr "°_©l¦~¥÷¤Ó§C¡AµLªkªí¥Ü" #: iconv/iconv_prog.c:63 -msgid "supress warnings" -msgstr "©¿²¤Äµ§i°T®§" +msgid "suppress warnings" +msgstr "°±¤î¿é¥Xĵ§i°T®§" #: sunrpc/svc_run.c:76 msgid "svc_run: - poll failed" msgstr "svc_run: - poll ¥¢±Ñ" -#: sunrpc/svc_tcp.c:161 sunrpc/svc_tcp6.c:161 +#: sunrpc/svc_tcp.c:161 msgid "svc_tcp.c - cannot getsockname or listen" msgstr "svc_tcp.c - µLªk getsockname ©Î listen" -#: sunrpc/svc_tcp.c:146 sunrpc/svc_tcp6.c:146 +#: sunrpc/svc_tcp.c:146 msgid "svc_tcp.c - tcp socket creation problem" msgstr "svc_tcp.c - tcp socket «Ø¥ßµo¥Í°ÝÃD" -#: sunrpc/svc_tcp.c:210 sunrpc/svc_tcp.c:216 sunrpc/svc_tcp6.c:210 -#: sunrpc/svc_tcp6.c:216 +#: sunrpc/svc_tcp.c:210 sunrpc/svc_tcp.c:216 msgid "svc_tcp: makefd_xprt: out of memory\n" msgstr "svc_tcp: makefd_xprt: °O¾ÐÅ餣¨¬\n" -#: sunrpc/svc_unix.c:136 +#: sunrpc/svc_unix.c:137 msgid "svc_unix.c - AF_UNIX socket creation problem" msgstr "svc_unix.c - AF_UNIX socket «Ø¥ß¦³°ÝÃD" -#: sunrpc/svc_unix.c:152 +#: sunrpc/svc_unix.c:153 msgid "svc_unix.c - cannot getsockname or listen" msgstr "svc_unix.c - µLªk getsockname ©Î listen" -#: sunrpc/svc_unix.c:202 sunrpc/svc_unix.c:208 +#: sunrpc/svc_unix.c:203 sunrpc/svc_unix.c:209 msgid "svc_unix: makefd_xprt: out of memory\n" msgstr "svc_unix: makefd_xprt: °O¾ÐÅ餣¨¬\n" -#: sunrpc/svc_tcp.c:169 sunrpc/svc_tcp.c:177 sunrpc/svc_tcp6.c:169 -#: sunrpc/svc_tcp6.c:177 +#: sunrpc/svc_tcp.c:169 sunrpc/svc_tcp.c:177 msgid "svctcp_create: out of memory\n" msgstr "svctcp_create: °O¾ÐÅ餣¨¬\n" -#: sunrpc/svc_udp.c:141 sunrpc/svc_udp6.c:136 +#: sunrpc/svc_udp.c:141 msgid "svcudp_create - cannot getsockname" msgstr "svcudp_create - µLªk getsockname" #: sunrpc/svc_udp.c:149 sunrpc/svc_udp.c:155 sunrpc/svc_udp.c:161 -#: sunrpc/svc_udp6.c:144 sunrpc/svc_udp6.c:150 sunrpc/svc_udp6.c:156 msgid "svcudp_create: out of memory\n" msgstr "svcudp_create: °O¾ÐÅ餣¨¬\n" -#: sunrpc/svc_udp.c:127 sunrpc/svc_udp6.c:122 +#: sunrpc/svc_udp.c:127 msgid "svcudp_create: socket creation problem" msgstr "svcudp_create: socket «Ø¥ß¦³°ÝÃD" @@ -5208,54 +5208,49 @@ msgstr "svcudp_create: socket «Ø¥ß¦³°ÝÃD msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" msgstr "svcudp_create: xp_pad ¤Ó¤p¥H­P©óµLªk IP_PKTINFO\n" -#: sunrpc/svc_unix.c:161 sunrpc/svc_unix.c:169 +#: sunrpc/svc_unix.c:162 sunrpc/svc_unix.c:170 msgid "svcunix_create: out of memory\n" msgstr "svcunix_create: °O¾ÐÅ餣¨¬\n" -#: locale/programs/linereader.c:749 +#: locale/programs/linereader.c:745 #, c-format msgid "symbol `%.*s' not in charmap" msgstr "²Å¸¹ `%.*s' ¨Ã¤£¦b¦r¶°¹ï·Óªí¤¤" -#: locale/programs/linereader.c:770 +#: locale/programs/linereader.c:766 #, c-format msgid "symbol `%.*s' not in repertoire map" msgstr "²Å¸¹ `%.*s' ¨Ã¤£¦b½s½X¹ï¬MÀɤ¤" -#: locale/programs/ld-collate.c:1577 locale/programs/ld-collate.c:1778 +#: locale/programs/ld-collate.c:1617 locale/programs/ld-collate.c:1716 #, c-format msgid "symbol `%s'" msgstr "²Å¸¹ `%s'" -#: locale/programs/ld-collate.c:1574 locale/programs/ld-collate.c:1775 +#: locale/programs/ld-collate.c:1614 locale/programs/ld-collate.c:1713 #, c-format msgid "symbol `%s' has the same encoding as" msgstr "¸ò²Å¸¹ `%s' ¦³¬Û¦Pªº½s½X: " -#: locale/programs/ld-collate.c:1499 +#: locale/programs/ld-collate.c:1539 #, c-format msgid "symbol `%s' not defined" msgstr "¨Ã¥¼©w¸q `%s' ²Å¸¹" -#: locale/programs/linereader.c:725 -#, c-format -msgid "symbol `%s' not in charmap" -msgstr "²Å¸¹`%s' ¨Ã¤£¦b¦r¶°¹ï·Óªí¤¤" - -#: locale/programs/ld-ctype.c:1923 locale/programs/ld-ctype.c:1974 -#: locale/programs/ld-ctype.c:2016 +#: locale/programs/ld-ctype.c:1955 locale/programs/ld-ctype.c:2006 +#: locale/programs/ld-ctype.c:2048 msgid "syntax error" msgstr "»yªk¿ù»~" -#: locale/programs/charmap.c:450 locale/programs/charmap.c:504 -#: locale/programs/charmap.c:536 locale/programs/charmap.c:630 -#: locale/programs/charmap.c:685 locale/programs/charmap.c:726 -#: locale/programs/charmap.c:767 +#: locale/programs/charmap.c:487 locale/programs/charmap.c:541 +#: locale/programs/charmap.c:573 locale/programs/charmap.c:667 +#: locale/programs/charmap.c:722 locale/programs/charmap.c:763 +#: locale/programs/charmap.c:804 #, c-format msgid "syntax error in %s definition: %s" msgstr "©w¸q %s ªº»yªk¿ù»~: %s" -#: locale/programs/charmap.c:309 locale/programs/charmap.c:326 +#: locale/programs/charmap.c:346 locale/programs/charmap.c:363 #: locale/programs/repertoire.c:175 #, c-format msgid "syntax error in prolog: %s" @@ -5269,58 +5264,58 @@ msgstr "½s½X¹ï¬MÀɤ¤ªº©w¸q¦³»yªk¿ù»~: %s #: locale/programs/locfile.c:243 msgid "syntax error: not inside a locale definition section" -msgstr "»yªk¿ù»~: ¤£¯à¦b locale ©w¸q°Ï¶ô¸Ì­±¨Ï¥Î" +msgstr "»yªk¿ù»~: ¤£¯à¦b°Ï°ì¤Æ¸ê®Æ®w (locale) ©w¸q°Ï¶ô¸Ì­±¨Ï¥Î" #: iconv/iconv_prog.c:143 msgid "target encoding not specified using `-t'" msgstr "¨S¦³¥Î `-t' «ü©w¥Ø¼Ð½s½X" -#: catgets/gencat.c:391 catgets/gencat.c:530 catgets/gencat.c:559 +#: catgets/gencat.c:432 catgets/gencat.c:605 catgets/gencat.c:634 msgid "this is the first definition" msgstr "¦¹¬°²Ä¤@­Ó©w¸q" -#: timezone/zic.c:1158 +#: timezone/zic.c:1157 msgid "time before zero" msgstr "¦b¹s¤§«eªº®É¶¡" -#: timezone/zic.c:1166 timezone/zic.c:2043 timezone/zic.c:2062 +#: timezone/zic.c:1165 timezone/zic.c:2042 timezone/zic.c:2061 msgid "time overflow" msgstr "®É¶¡·¸¦ì" -#: locale/programs/ld-ctype.c:1521 locale/programs/ld-ctype.c:1997 +#: locale/programs/ld-ctype.c:1553 locale/programs/ld-ctype.c:2029 #, c-format msgid "to-value of range is smaller than from-value " msgstr "°Ï°ì©w¸qªºµ²§À­È ¤ñ°_©l­È ÁÙ­n¤p" -#: locale/programs/ld-ctype.c:1655 +#: locale/programs/ld-ctype.c:1687 msgid "to-value character sequence is smaller than from-value sequence" msgstr "¦r¤¸§Ç¦C©w¸qªºµ²§À­È¤ñ°_©l­ÈÁÙ­n¤p" -#: locale/programs/charmap.c:514 +#: locale/programs/charmap.c:551 msgid "too few bytes in character encoding" msgstr "¦r¤¸©w¸q¤¤ªº¦ì¤¸²Õ¤Ó¤Ö¤F" -#: locale/programs/charmap.c:516 +#: locale/programs/charmap.c:553 msgid "too many bytes in character encoding" msgstr "¦r¤¸©w¸q¤¤ªº¦ì¤¸²Õ¤Ó¦h¤F" -#: timezone/zic.c:1869 +#: timezone/zic.c:1868 msgid "too many leap seconds" msgstr "¤Ó¦h¶|¬í¤F" -#: timezone/zic.c:1841 +#: timezone/zic.c:1840 msgid "too many local time types" msgstr "¤Ó¦h¥»¦a®É¶¡®æ¦¡¤F" -#: timezone/zic.c:1795 +#: timezone/zic.c:1794 msgid "too many transitions?!" msgstr "¤Ó¦h®É¶¡Âà´«¤F?!" -#: timezone/zic.c:2166 +#: timezone/zic.c:2165 msgid "too many, or too long, time zone abbreviations" msgstr "®É°ÏÁY¼g¤Ó¦h©ÎªÌ¤Óªø¤F" -#: locale/programs/linereader.h:156 +#: locale/programs/linereader.h:157 msgid "trailing garbage at end of line" msgstr "¦æµ²§ÀªºµL¥Î¦r¤¸" @@ -5329,7 +5324,7 @@ msgstr "¦æµ²§ÀªºµL¥Î¦r¤¸" msgid "trouble replying to prog %d\n" msgstr "¦^À³µ{¦¡ %d ®Éµo¥Í§xÃø\n" -#: timezone/zic.c:1333 +#: timezone/zic.c:1332 msgid "typed single year" msgstr "¿é¤Jªº¦~¥÷¬O¦P¤@¦~" @@ -5345,12 +5340,12 @@ msgstr "µLªkÄÀ©ñ°Ñ¼Æ" msgid "undefined" msgstr "¥¼©w¸q" -#: locale/programs/charmap.c:819 locale/programs/charmap.c:830 +#: locale/programs/charmap.c:856 locale/programs/charmap.c:867 #, c-format msgid "unknown character `%s'" msgstr "¤£©úªº¦r¤¸ `%s'" -#: catgets/gencat.c:488 +#: catgets/gencat.c:562 #, c-format msgid "unknown directive `%s': line ignored" msgstr "¤£©úªº«ü¥O `%s': ¦¹¦æ©¿²¤" @@ -5360,20 +5355,20 @@ msgstr "¤£©úªº«ü¥O `%s': ¦¹¦æ©¿²¤" msgid "unknown iconv() error %d" msgstr "¤£©úªº iconv() ¿ù»~ %d" -#: catgets/gencat.c:467 +#: catgets/gencat.c:508 #, c-format msgid "unknown set `%s'" msgstr "¤£©úªº¶°¦X `%s'" -#: timezone/zic.c:787 +#: timezone/zic.c:786 msgid "unruly zone" msgstr "¨S¦³³W«hªº®É°Ï" -#: catgets/gencat.c:977 +#: catgets/gencat.c:1169 msgid "unterminated message" msgstr "¨S¦³µ²§Àªº°T®§" -#: locale/programs/linereader.c:592 locale/programs/linereader.c:788 +#: locale/programs/linereader.c:599 locale/programs/linereader.c:784 msgid "unterminated string" msgstr "¨S¦³µ²§Àªº¦r¦ê" @@ -5381,11 +5376,11 @@ msgstr "¨S¦³µ²§Àªº¦r¦ê" msgid "unterminated string constant" msgstr "¨S¦³µ²§Àªº¦r¦ê±`¼Æ" -#: locale/programs/linereader.c:462 +#: locale/programs/linereader.c:469 msgid "unterminated symbolic name" msgstr "¨S¦³µ²§Àªº²Å¸¹¦WºÙ" -#: locale/programs/charmap.c:968 +#: locale/programs/charmap.c:1005 msgid "upper limit in range is not higher then lower limit" msgstr "°Ï°ì©w¸q¤¤ªº³Ì¤j­È¨S¦³¤ñ³Ì¤p­ÈÁÙ­n¤j" @@ -5393,40 +5388,40 @@ msgstr "°Ï°ì©w¸q¤¤ªº³Ì¤j­È¨S¦³¤ñ³Ì¤p­ÈÁÙ msgid "upper limit in range is not smaller then lower limit" msgstr "°Ï°ì©w¸q¤¤ªº³Ì¤j­È¨S¦³¤ñ³Ì¤p­ÈÁÙ­n¤p" -#: sunrpc/rpc_main.c:1429 +#: sunrpc/rpc_main.c:1424 #, c-format msgid "usage: %s infile\n" msgstr "¥Îªk: %s infile\n" -#: timezone/zic.c:2109 +#: timezone/zic.c:2108 msgid "use of 2/29 in non leap-year" msgstr "¦b«D¶|¦~®É¥Î¨ì 2/29 ¤é" -#: locale/programs/charmap.c:603 locale/programs/charmap.c:666 +#: locale/programs/charmap.c:640 locale/programs/charmap.c:703 #, c-format msgid "value for %s must be an integer" msgstr "%s ªº­È¥²¶·¬O¾ã¼Æ¤~¦æ" -#: locale/programs/charmap.c:362 +#: locale/programs/charmap.c:399 #, c-format msgid "value for <%s> must be 1 or greater" msgstr "<%s> ªº­È¥²¶·¬° 1 ©ÎªÌ§ó¤j" -#: locale/programs/charmap.c:374 +#: locale/programs/charmap.c:411 #, c-format msgid "value of <%s> must be greater or equal than the value of <%s>" msgstr "<%s> ªº­È¥²¶·µ¥©ó©Î¤j©ó <%s> ªº­È" -#: timezone/zic.c:435 +#: timezone/zic.c:433 msgid "warning: " msgstr "ĵ§i: " -#: nscd/connections.c:426 +#: nscd/connections.c:427 #, c-format msgid "while accepting connection: %s" msgstr "¦b±µ¨ü³s½u®É: %s" -#: nscd/grpcache.c:149 nscd/hstcache.c:165 nscd/pwdcache.c:143 +#: nscd/grpcache.c:150 nscd/hstcache.c:165 nscd/pwdcache.c:143 msgid "while allocating cache entry" msgstr "¦b°t¸m§Ö¨ú¶µ¥Ø®É" @@ -5434,41 +5429,33 @@ msgstr "¦b°t¸m§Ö¨ú¶µ¥Ø®É" msgid "while allocating hash table entry" msgstr "¦b°t¸m hash ªí®æ¶µ¥Ø®É" -#: nscd/grpcache.c:99 nscd/hstcache.c:108 nscd/pwdcache.c:106 +#: nscd/grpcache.c:100 nscd/hstcache.c:108 nscd/pwdcache.c:106 msgid "while allocating key copy" msgstr "¦b°t¸mÁä­È°Æ¥»®É" -#: catgets/gencat.c:1007 +#: catgets/gencat.c:1199 msgid "while opening old catalog file" msgstr "¦b¶}±ÒªºÃþ§OÀÉ®×®É" -#: locale/programs/locale.c:359 +#: locale/programs/locale.c:361 msgid "while preparing output" msgstr "¦b·Ç³Æ¿é¥X®É" -#: nss/makedb.c:367 nss/makedb.c:384 -msgid "while reading database" -msgstr "¦bŪ¨ú¸ê®Æ®w®É" - #: elf/sprof.c:679 msgid "while stat'ing profiling data file" msgstr "¦b¹ï´ú¸Õ¸ê®ÆÀɮ׶i¦æ²Î­pªº®É­Ô" -#: nss/makedb.c:336 -msgid "while writing database file" -msgstr "¦b¼g¤J¸ê®Æ®wÀÉ®×®É" - -#: locale/programs/ld-ctype.c:2320 +#: locale/programs/ld-ctype.c:2392 msgid "" "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" msgstr "¥Î¨Ó«ü©w UCS ­Èªº½d³ò®É±o¥Î¤Q¤»¶i¦ìªí¥Üªº¬Ù²¤²Å¸¹ `..'" -#: locale/programs/ld-ctype.c:2334 +#: locale/programs/ld-ctype.c:2406 msgid "" "with character code range values one must use the absolute ellipsis `...'" msgstr "¥Î¨Ó«ü©w¦r¤¸½s½X­Èªº½d³ò®É±o¥Îµ´¹ï¦ì¸mªº¬Ù²¤²Å¸¹ `...'" -#: locale/programs/ld-ctype.c:2305 +#: locale/programs/ld-ctype.c:2377 msgid "" "with symbolic name range values the absolute ellipsis `...' must not be used" msgstr "¥Î²Å¸¹¦WºÙ¨Ó«ü©w¦r¤¸½s½X½d³ò®É¤£¥i¥H¥Îµ´¹ï¦ì¸mªº¬Ù²¤²Å¸¹ `...'" @@ -5481,27 +5468,27 @@ msgstr "¼g¤J¤£§¹¥þ" msgid "writeable by other than owner" msgstr "¨Ï¥ÎªÌ¥H¥~ªº¤H¥ç¥i¼g¤J" -#: nscd/nscd.c:123 nscd/nscd_nischeck.c:64 nss/getent.c:400 nss/makedb.c:123 +#: nscd/nscd.c:123 nscd/nscd_nischeck.c:64 nss/getent.c:761 msgid "wrong number of arguments" msgstr "°Ñ¼Æ¼Æ¥Ø¤£¹ï" -#: timezone/zic.c:1116 +#: timezone/zic.c:1115 msgid "wrong number of fields on Leap line" msgstr "¶|®É³]©w¦æªºÄæ¦ì¼Æ¥Ø¿ù»~" -#: timezone/zic.c:1207 +#: timezone/zic.c:1206 msgid "wrong number of fields on Link line" msgstr "³sµ²³]©w¦æªºÄæ¦ì¼Æ¥Ø¿ù»~" -#: timezone/zic.c:950 +#: timezone/zic.c:949 msgid "wrong number of fields on Rule line" msgstr "³W«h³]©w¦æªºÄæ¦ì¼Æ¥Ø¿ù»~" -#: timezone/zic.c:1020 +#: timezone/zic.c:1019 msgid "wrong number of fields on Zone continuation line" msgstr "®É°Ï±µÄò¦æªºÄæ¦ì¼Æ¥Ø¤£¹ï" -#: timezone/zic.c:978 +#: timezone/zic.c:977 msgid "wrong number of fields on Zone line" msgstr "®É°Ï³]©w¦æªºÄæ¦ì¼Æ¥Ø¿ù»~" @@ -5521,5 +5508,3 @@ msgstr "yp_update: µLªkÂà´«¥D¾÷ªººô¸ô¦Wº msgid "yp_update: cannot get server address\n" msgstr "yp_update: µLªk¨ú±o¦øªA¾¹¦ì§}\n" -#~ msgid "%s: cannot get modification time" -#~ msgstr "" diff -durpNa glibc-2.2.2/posix/Makefile glibc-2.2.3/posix/Makefile --- glibc-2.2.2/posix/Makefile Thu Feb 15 14:08:40 2001 +++ glibc-2.2.3/posix/Makefile Wed Apr 25 14:51:01 2001 @@ -23,7 +23,7 @@ subdir := posix headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \ glob.h regex.h wordexp.h fnmatch.h bits/types.h getopt.h \ - bits/posix1_lim.h bits/posix2_lim.h bits/posix_opt.h \ + bits/posix1_lim.h bits/posix2_lim.h bits/posix_opt.h \ bits/local_lim.h tar.h bits/utsname.h bits/confname.h \ bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h \ bits/sched.h re_comp.h wait.h bits/environments.h cpio.h \ @@ -32,7 +32,7 @@ headers := sys/utsname.h sys/times.h sys distribute := confstr.h TESTS TESTS2C.sed testcases.h \ PTESTS PTESTS2C.sed ptestcases.h \ globtest.c globtest.sh wordexp-tst.sh annexc.c fnmatch_loop.c \ - spawn_int.h + spawn_int.h tst-getconf.sh routines := \ uname \ @@ -82,7 +82,8 @@ before-compile := testcases.h ptestcases # So they get cleaned up. generated := $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \ - annexc annexc.out wordexp-tst.out + annexc annexc.out wordexp-tst.out bug-regex2-mem \ + bug-regex2.mtrace tst-getconf.out include ../Rules @@ -139,7 +140,7 @@ endif # XXX Please note that for now we ignore the result of this test. tests: $(objpfx)annexc.out ifeq (no,$(cross-compiling)) -tests:$(objpfx)bug-regex2-mem +tests:$(objpfx)bug-regex2-mem $(objpfx)tst-getconf.out endif $(objpfx)annexc.out: $(objpfx)annexc @@ -153,3 +154,6 @@ bug-regex2-ENV = MALLOC_TRACE=$(objpfx)b $(objpfx)bug-regex2-mem: $(objpfx)bug-regex2.out $(common-objpfx)malloc/mtrace $(objpfx)bug-regex2.mtrace > $@ + +$(objpfx)tst-getconf.out: tst-getconf.sh $(objpfx)getconf + $(SHELL) -e $< $(common-objpfx) $(elf-objpfx) $(rtld-installed-name) diff -durpNa glibc-2.2.2/posix/PTESTS2C.sed glibc-2.2.3/posix/PTESTS2C.sed --- glibc-2.2.2/posix/PTESTS2C.sed Sat May 16 21:35:54 1998 +++ glibc-2.2.3/posix/PTESTS2C.sed Mon Mar 26 20:53:06 2001 @@ -2,3 +2,4 @@ s/# \(.*\)/ { 0, 0, "\1", NULL, },/ s/\([^¦]*\)¦\([^¦]*\)¦\([^¦]*\)¦\([^¦]*\)¦\(.*\)/ { \1, \2, "\3", "\4", \5 },/ s/\\/\\\\/g +s/ /\\r/g diff -durpNa glibc-2.2.2/posix/Versions glibc-2.2.3/posix/Versions --- glibc-2.2.2/posix/Versions Wed Nov 8 14:10:20 2000 +++ glibc-2.2.3/posix/Versions Mon Mar 26 20:53:06 2001 @@ -109,4 +109,8 @@ libc { # Used in macros. __sysconf; } + GLIBC_2.2.3 { + # Extended Interface. + fnmatch; + } } diff -durpNa glibc-2.2.2/posix/annexc.c glibc-2.2.3/posix/annexc.c --- glibc-2.2.2/posix/annexc.c Thu Aug 31 14:45:14 2000 +++ glibc-2.2.3/posix/annexc.c Sat Apr 7 14:02:36 2001 @@ -25,9 +25,10 @@ #include #include -#define TMPFILE "/tmp/macros" #define HEADER_MAX 256 +static const char *macrofile; + /* . */ static const char *const aio_syms[] = { @@ -712,8 +713,10 @@ get_null_defines (void) FILE *input; int first = 1; + macrofile = tmpnam (NULL); + command = malloc (sizeof fmt + sizeof "/dev/null" + 2 * strlen (CC) - + strlen (INC) + strlen (TMPFILE)); + + strlen (INC) + strlen (macrofile)); if (command == NULL) { @@ -721,7 +724,7 @@ get_null_defines (void) exit (1); } - sprintf (command, fmt, "/dev/null", CC, INC, CC, TMPFILE); + sprintf (command, fmt, "/dev/null", CC, INC, CC, macrofile); if (xsystem (command)) { @@ -729,11 +732,11 @@ get_null_defines (void) return NULL; } free (command); - input = fopen (TMPFILE, "r"); + input = fopen (macrofile, "r"); if (input == NULL) { - printf ("Could not read %s: ", TMPFILE); + printf ("Could not read %s: ", macrofile); perror (NULL); return NULL; } @@ -782,7 +785,7 @@ get_null_defines (void) } result[result_len] = NULL; fclose (input); - remove (TMPFILE); + remove (macrofile); return (const char **) result; } @@ -799,7 +802,7 @@ check_header (const struct header *heade memset (found, '\0', header->nsyms * sizeof (int)); command = alloca (sizeof fmt + strlen (header->name) + 2 * strlen (CC) - + strlen (INC) + strlen (TMPFILE)); + + strlen (INC) + strlen (macrofile)); if (command == NULL) @@ -809,13 +812,13 @@ check_header (const struct header *heade } printf ("=== %s ===\n", header->name); - sprintf (command, fmt, header->name, CC, INC, CC, TMPFILE); + sprintf (command, fmt, header->name, CC, INC, CC, macrofile); /* First see whether this subset is supported at all. */ if (header->subset != NULL) { sprintf (line, testfmt, header->subset, header->subset, CC, INC, CC, - TMPFILE); + macrofile); if (xsystem (line)) { printf ("!! not available\n"); @@ -828,11 +831,11 @@ check_header (const struct header *heade puts ("system() returned nonzero"); result = 1; } - input = fopen (TMPFILE, "r"); + input = fopen (macrofile, "r"); if (input == NULL) { - printf ("Could not read %s: ", TMPFILE); + printf ("Could not read %s: ", macrofile); perror (NULL); return 1; } @@ -884,7 +887,7 @@ check_header (const struct header *heade result |= 1; } fclose (input); - remove (TMPFILE); + remove (macrofile); for (i = 0; i < header->nsyms; ++i) if (found[i] == 0) diff -durpNa glibc-2.2.2/posix/confstr.c glibc-2.2.3/posix/confstr.c --- glibc-2.2.2/posix/confstr.c Thu Aug 31 14:45:14 2000 +++ glibc-2.2.3/posix/confstr.c Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1997, 2000, 2001 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 @@ -45,8 +45,9 @@ confstr (name, buf, len) break; case _CS_XBS5_ILP32_OFFBIG_CFLAGS: + case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS: case _CS_LFS_CFLAGS: -#if defined _XBS5_ILP32_OFF32 && !defined _XBS5_ILP32_OFFBIG +#if _XBS5_LP64_OFF64 == -1 && _XBS5_LPBIG_OFFBIG == -1 && _XBS5_ILP32_OFFBIG == 1 /* Signal that we want the new ABI. */ { static const char file_offset[] = "-D_FILE_OFFSET_BITS=64"; @@ -56,6 +57,44 @@ confstr (name, buf, len) break; #endif + case _CS_V6_WIDTH_RESTRICTED_ENVS: + /* We have to return a newline-separated list of named of + programming environements in which the widths of blksize_t, + cc_t, mode_t, nfds_t, pid_t, ptrdiff_t, size_t, speed_t, + ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t, and + wint_t types are no greater than the width of type long. + + Currently this means all environment which the system allows. */ + { + static const char restenvs[] = +#if _POSIX_V6_ILP32_OFF32 > 0 + "_POSIX_V6_ILP32_OFF32" +#endif +#if _POSIX_V6_ILP32_OFFBIG > 0 +# if _POSIX_V6_ILP32_OFF32 > 0 + "\n" +# endif + "_POSIX_V6_ILP32_OFFBIG" +#endif +#if _POSIX_V6_LP64_OFF64 > 0 +# if _POSIX_V6_ILP32_OFF32 > 0 || _POSIX_V6_ILP32_OFFBIG > 0 + "\n" +# endif + "_POSIX_V6_LP64_OFF64" +#endif +#if _POSIX_V6_LPBIG_OFFBIG > 0 +# if _POSIX_V6_ILP32_OFF32 > 0 || _POSIX_V6_ILP32_OFFBIG > 0 \ + || _POSIX_V6_LP64_OFF64 > 0 + "\n" +# endif + "_POSIX_V6_LPBIG_OFFBIG" +#endif + ; + string = restenvs; + string_len = sizeof (restenvs); + } + break; + case _CS_LFS_LINTFLAGS: case _CS_LFS_LDFLAGS: case _CS_LFS_LIBS: @@ -79,6 +118,22 @@ confstr (name, buf, len) case _CS_XBS5_LPBIG_OFFBIG_LDFLAGS: case _CS_XBS5_LPBIG_OFFBIG_LIBS: case _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS: + + case _CS_POSIX_V6_ILP32_OFF32_CFLAGS: + case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: + case _CS_POSIX_V6_ILP32_OFF32_LIBS: + case _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS: + case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: + case _CS_POSIX_V6_ILP32_OFFBIG_LIBS: + case _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS: + case _CS_POSIX_V6_LP64_OFF64_CFLAGS: + case _CS_POSIX_V6_LP64_OFF64_LDFLAGS: + case _CS_POSIX_V6_LP64_OFF64_LIBS: + case _CS_POSIX_V6_LP64_OFF64_LINTFLAGS: + case _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS: + case _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS: + case _CS_POSIX_V6_LPBIG_OFFBIG_LIBS: + case _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS: /* GNU libc does not require special actions to use LFS functions. */ string = ""; string_len = 1; diff -durpNa glibc-2.2.2/posix/fnmatch.c glibc-2.2.3/posix/fnmatch.c --- glibc-2.2.2/posix/fnmatch.c Thu Sep 7 11:56:36 2000 +++ glibc-2.2.3/posix/fnmatch.c Mon Mar 26 20:53:06 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1993, 1996-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991-1993,1996-1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. This library is free software; you can redistribute it and/or @@ -55,12 +55,19 @@ # include "../locale/localeinfo.h" # include "../locale/elem-hash.h" # include "../locale/coll-lookup.h" +# include # define CONCAT(a,b) __CONCAT(a,b) # define mbsinit __mbsinit # define mbsrtowcs __mbsrtowcs +# define fnmatch __fnmatch +extern int fnmatch (const char *pattern, const char *string, int flags); #endif +/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ +#define NO_LEADING_PERIOD(flags) \ + ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) + /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling @@ -153,6 +160,9 @@ extern char *getenv (); extern int errno; # endif +/* Global variable. */ +static int posixly_correct; + /* This function doesn't exist on most systems. */ # if !defined HAVE___STRCHRNUL && !defined _LIBC @@ -195,15 +205,20 @@ __wcschrnul (s, c) # endif # define CHAR char # define UCHAR unsigned char +# define INT int # define FCT internal_fnmatch +# define EXT ext_match +# define END end_pattern # define L(CS) CS # ifdef _LIBC # define BTOWC(C) __btowc (C) # else # define BTOWC(C) btowc (C) # endif -# define STRCHR(S, C) strchr (S, C) -# define STRCHRNUL(S, C) __strchrnul (S, C) +# define STRLEN(S) strlen (S) +# define STRCAT(D, S) strcat (D, S) +# define MEMPCPY(D, S, N) __mempcpy (D, S, N) +# define MEMCHR(S, C, N) memchr (S, C, N) # define STRCOLL(S1, S2) strcoll (S1, S2) # include "fnmatch_loop.c" @@ -217,11 +232,16 @@ __wcschrnul (s, c) # endif # define CHAR wchar_t # define UCHAR wint_t +# define INT wint_t # define FCT internal_fnwmatch +# define EXT ext_wmatch +# define END end_wpattern # define L(CS) L##CS # define BTOWC(C) (C) -# define STRCHR(S, C) wcschr (S, C) -# define STRCHRNUL(S, C) __wcschrnul (S, C) +# define STRLEN(S) __wcslen (S) +# define STRCAT(D, S) __wcscat (D, S) +# define MEMPCPY(D, S, N) __wmempcpy (D, S, N) +# define MEMCHR(S, C, N) wmemchr (S, C, N) # define STRCOLL(S1, S2) wcscoll (S1, S2) # define WIDE_CHAR_VERSION 1 @@ -303,42 +323,52 @@ fnmatch (pattern, string, flags) int flags; { # if HANDLE_MULTIBYTE - mbstate_t ps; - size_t n; - wchar_t *wpattern; - wchar_t *wstring; - - if (MB_CUR_MAX == 1) - /* This is an optimization for 8-bit character set. */ - return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); + if (__builtin_expect (MB_CUR_MAX, 1) != 1) + { + mbstate_t ps; + size_t n; + wchar_t *wpattern; + wchar_t *wstring; - /* Convert the strings into wide characters. */ - memset (&ps, '\0', sizeof (ps)); - n = mbsrtowcs (NULL, &pattern, 0, &ps); - if (n == (size_t) -1) - /* Something wrong. - XXX Do we have to set `errno' to something which mbsrtows hasn't - already done? */ - return -1; - wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); - assert (mbsinit (&ps)); - (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); + /* Convert the strings into wide characters. */ + memset (&ps, '\0', sizeof (ps)); + n = mbsrtowcs (NULL, &pattern, 0, &ps); + if (__builtin_expect (n, 0) == (size_t) -1) + /* Something wrong. + XXX Do we have to set `errno' to something which mbsrtows hasn't + already done? */ + return -1; + wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); + assert (mbsinit (&ps)); + (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); - assert (mbsinit (&ps)); - n = mbsrtowcs (NULL, &string, 0, &ps); - if (n == (size_t) -1) - /* Something wrong. - XXX Do we have to set `errno' to something which mbsrtows hasn't - already done? */ - return -1; - wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); - assert (mbsinit (&ps)); - (void) mbsrtowcs (wstring, &string, n + 1, &ps); + assert (mbsinit (&ps)); + n = mbsrtowcs (NULL, &string, 0, &ps); + if (__builtin_expect (n, 0) == (size_t) -1) + /* Something wrong. + XXX Do we have to set `errno' to something which mbsrtows hasn't + already done? */ + return -1; + wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); + assert (mbsinit (&ps)); + (void) mbsrtowcs (wstring, &string, n + 1, &ps); - return internal_fnwmatch (wpattern, wstring, flags & FNM_PERIOD, flags); -# else - return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); + return internal_fnwmatch (wpattern, wstring, wstring + n, + flags & FNM_PERIOD, flags); + } # endif /* mbstate_t and mbsrtowcs or _LIBC. */ + + return internal_fnmatch (pattern, string, string + strlen (string), + flags & FNM_PERIOD, flags); } + +# ifdef _LIBC +# undef fnmatch +versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); +# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) +strong_alias (__fnmatch, __fnmatch_old) +compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); +# endif +# endif #endif /* _LIBC or not __GNU_LIBRARY__. */ diff -durpNa glibc-2.2.2/posix/fnmatch.h glibc-2.2.3/posix/fnmatch.h --- glibc-2.2.2/posix/fnmatch.h Thu Jul 15 11:41:59 1999 +++ glibc-2.2.3/posix/fnmatch.h Mon Mar 26 20:53:06 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,96,97,98,99,2001 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 @@ -59,6 +59,7 @@ extern "C" { # define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ # define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ # define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ +# define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */ #endif /* Value returned by `fnmatch' if STRING does not match PATTERN. */ diff -durpNa glibc-2.2.2/posix/fnmatch_loop.c glibc-2.2.3/posix/fnmatch_loop.c --- glibc-2.2.2/posix/fnmatch_loop.c Fri Feb 9 10:04:17 2001 +++ glibc-2.2.3/posix/fnmatch_loop.c Sat Apr 7 14:02:36 2001 @@ -19,13 +19,19 @@ /* Match STRING against the filename pattern PATTERN, returning zero if it matches, nonzero if not. */ static int FCT (const CHAR *pattern, const CHAR *string, - int no_leading_period, int flags) internal_function; + const CHAR *string_end, int no_leading_period, int flags) + internal_function; +static int EXT (INT opt, const CHAR *pattern, const CHAR *string, + const CHAR *string_end, int no_leading_period, int flags) + internal_function; +static const CHAR *END (const CHAR *patternp) internal_function; static int internal_function -FCT (pattern, string, no_leading_period, flags) +FCT (pattern, string, string_end, no_leading_period, flags) const CHAR *pattern; const CHAR *string; + const CHAR *string_end; int no_leading_period; int flags; { @@ -43,18 +49,27 @@ FCT (pattern, string, no_leading_period, while ((c = *p++) != L('\0')) { + int new_no_leading_period = 0; c = FOLD (c); switch (c) { case L('?'): - if (*n == L('\0')) + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, + flags); + if (res != -1) + return res; + } + + if (n == string_end) return FNM_NOMATCH; else if (*n == L('/') && (flags & FNM_FILE_NAME)) return FNM_NOMATCH; - else if (*n == L('.') && no_leading_period - && (n == string - || (n[-1] == L('/') && (flags & FNM_FILE_NAME)))) + else if (*n == L('.') && no_leading_period) return FNM_NOMATCH; break; @@ -67,27 +82,48 @@ FCT (pattern, string, no_leading_period, return FNM_NOMATCH; c = FOLD (c); } - if (FOLD ((UCHAR) *n) != c) + if (n == string_end || FOLD ((UCHAR) *n) != c) return FNM_NOMATCH; break; case L('*'): - if (*n == L('.') && no_leading_period - && (n == string - || (n[-1] == L('/') && (flags & FNM_FILE_NAME)))) + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, + flags); + if (res != -1) + return res; + } + + if (n != string_end && *n == L('.') && no_leading_period) return FNM_NOMATCH; for (c = *p++; c == L('?') || c == L('*'); c = *p++) { - if (*n == L('/') && (flags & FNM_FILE_NAME)) - /* A slash does not match a wildcard under FNM_FILE_NAME. */ - return FNM_NOMATCH; - else if (c == L('?')) + if (*p == L('(') && (flags & FNM_EXTMATCH) != 0) + { + const CHAR *endp = END (p); + if (endp != p) + { + /* This is a pattern. Skip over it. */ + p = endp; + continue; + } + } + + if (c == L('?')) { /* A ? needs to match one character. */ - if (*n == L('\0')) + if (n == string_end) /* There isn't another character; no match. */ return FNM_NOMATCH; + else if (*n == L('/') + && __builtin_expect (flags & FNM_FILE_NAME, 0)) + /* A slash does not match a wildcard under + FNM_FILE_NAME. */ + return FNM_NOMATCH; else /* One character of the string is consumed in matching this ? wildcard, so *??? won't match if there are @@ -110,7 +146,7 @@ FCT (pattern, string, no_leading_period, result = 0; else { - if (STRCHR (n, L('/')) == NULL) + if (MEMCHR (n, L('/'), string_end - n) == NULL) result = 0; } } @@ -121,44 +157,47 @@ FCT (pattern, string, no_leading_period, { const CHAR *endp; - endp = STRCHRNUL (n, (flags & FNM_FILE_NAME) ? L('/') : L('\0')); + endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L('/') : L('\0'), + string_end - n); + if (endp == NULL) + endp = string_end; - if (c == L('[')) + if (c == L('[') + || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0 + && (c == L('@') || c == L('+') || c == L('!')) + && *p == L('('))) { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); + int no_leading_period2 = no_leading_period; - for (--p; n < endp; ++n) - if (FCT (p, n, (no_leading_period - && (n == string - || (n[-1] == L('/') - && (flags & FNM_FILE_NAME)))), - flags2) == 0) + for (--p; n < endp; ++n, no_leading_period2 = 0) + if (FCT (p, n, string_end, no_leading_period2, flags2) + == 0) return 0; } else if (c == L('/') && (flags & FNM_FILE_NAME)) { - while (*n != L('\0') && *n != L('/')) + while (n < string_end && *n != L('/')) ++n; - if (*n == L('/') - && (FCT (p, n + 1, flags & FNM_PERIOD, flags) == 0)) + if (n < string_end && *n == L('/') + && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags) + == 0)) return 0; } else { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); + int no_leading_period2 = no_leading_period; if (c == L('\\') && !(flags & FNM_NOESCAPE)) c = *p; c = FOLD (c); - for (--p; n < endp; ++n) + for (--p; n < endp; ++n, no_leading_period2 = 0) if (FOLD ((UCHAR) *n) == c - && (FCT (p, n, (no_leading_period - && (n == string - || (n[-1] == L('/') - && (flags & FNM_FILE_NAME)))), - flags2) == 0)) + && (FCT (p, n, string_end, no_leading_period2, flags2) + == 0)) return 0; } } @@ -168,20 +207,18 @@ FCT (pattern, string, no_leading_period, case L('['): { - static int posixly_correct; /* Nonzero if the sense of the character class is inverted. */ register int not; CHAR cold; + UCHAR fn; if (posixly_correct == 0) posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; - if (*n == L('\0')) + if (n == string_end) return FNM_NOMATCH; - if (*n == L('.') && no_leading_period - && (n == string - || (n[-1] == L('/') && (flags & FNM_FILE_NAME)))) + if (*n == L('.') && no_leading_period) return FNM_NOMATCH; if (*n == L('/') && (flags & FNM_FILE_NAME)) @@ -192,11 +229,11 @@ FCT (pattern, string, no_leading_period, if (not) ++p; + fn = FOLD ((UCHAR) *n); + c = *p++; for (;;) { - UCHAR fn = FOLD ((UCHAR) *n); - if (!(flags & FNM_NOESCAPE) && c == L('\\')) { if (*p == L('\0')) @@ -788,7 +825,7 @@ FCT (pattern, string, no_leading_period, return FNM_NOMATCH; /* It is a range. */ - if (cold <= fn && fn <= c) + if (cold <= fn && fn <= cend) goto matched; #endif @@ -878,30 +915,275 @@ FCT (pattern, string, no_leading_period, } break; + case L('+'): + case L('@'): + case L('!'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, flags); + if (res != -1) + return res; + } + goto normal_match; + + case L('/'): + if (NO_LEADING_PERIOD (flags)) + { + if (n == string_end || c != *n) + return FNM_NOMATCH; + + new_no_leading_period = 1; + break; + } + /* FALLTHROUGH */ default: - if (c != FOLD ((UCHAR) *n)) + normal_match: + if (n == string_end || c != FOLD ((UCHAR) *n)) return FNM_NOMATCH; } + no_leading_period = new_no_leading_period; ++n; } - if (*n == '\0') + if (n == string_end) return 0; - if ((flags & FNM_LEADING_DIR) && *n == L('/')) + if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L('/')) /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ return 0; return FNM_NOMATCH; } + +static const CHAR * +internal_function +END (const CHAR *pattern) +{ + const CHAR *p = pattern; + + while (1) + if (*++p == L('\0')) + /* This is an invalid pattern. */ + return pattern; + else if (*p == L('[')) + { + /* Handle brackets special. */ + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + /* Skip the not sign. We have to recognize it because of a possibly + following ']'. */ + if (*++p == L('!') || (posixly_correct < 0 && *p == L('^'))) + ++p; + /* A leading ']' is recognized as such. */ + if (*p == L(']')) + ++p; + /* Skip over all characters of the list. */ + while (*p != L(']')) + if (*p++ == L('\0')) + /* This is no valid pattern. */ + return pattern; + } + else if ((*p == L('?') || *p == L('*') || *p == L('+') || *p == L('@') + || *p == L('!')) && p[1] == L('(')) + p = END (p + 1); + else if (*p == L(')')) + break; + + return p + 1; +} + + +static int +internal_function +EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, + int no_leading_period, int flags) +{ + const CHAR *startp; + int level; + struct patternlist + { + struct patternlist *next; + CHAR str[0]; + } *list = NULL; + struct patternlist **lastp = &list; + size_t pattern_len = STRLEN (pattern); + const CHAR *p; + const CHAR *rs; + + /* Parse the pattern. Store the individual parts in the list. */ + level = 0; + for (startp = p = pattern + 1; level >= 0; ++p) + if (*p == L('\0')) + /* This is an invalid pattern. */ + return -1; + else if (*p == L('[')) + { + /* Handle brackets special. */ + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + /* Skip the not sign. We have to recognize it because of a possibly + following ']'. */ + if (*++p == L('!') || (posixly_correct < 0 && *p == L('^'))) + ++p; + /* A leading ']' is recognized as such. */ + if (*p == L(']')) + ++p; + /* Skip over all characters of the list. */ + while (*p != L(']')) + if (*p++ == L('\0')) + /* This is no valid pattern. */ + return -1; + } + else if ((*p == L('?') || *p == L('*') || *p == L('+') || *p == L('@') + || *p == L('!')) && p[1] == L('(')) + /* Remember the nesting level. */ + ++level; + else if (*p == L(')')) + { + if (level-- == 0) + { + /* This means we found the end of the pattern. */ +#define NEW_PATTERN \ + struct patternlist *newp; \ + \ + if (opt == L('?') || opt == L('@')) \ + newp = alloca (sizeof (struct patternlist) \ + + (pattern_len * sizeof (CHAR))); \ + else \ + newp = alloca (sizeof (struct patternlist) \ + + ((p - startp + 1) * sizeof (CHAR))); \ + *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L('\0'); \ + newp->next = NULL; \ + *lastp = newp; \ + lastp = &newp->next + NEW_PATTERN; + } + } + else if (*p == L('|')) + { + if (level == 0) + { + NEW_PATTERN; + startp = p + 1; + } + } + assert (list != NULL); + assert (p[-1] == L(')')); +#undef NEW_PATTERN + + switch (opt) + { + case L('*'): + if (FCT (p, string, string_end, no_leading_period, flags) == 0) + return 0; + /* FALLTHROUGH */ + + case L('+'): + do + { + for (rs = string; rs <= string_end; ++rs) + /* First match the prefix with the current pattern with the + current pattern. */ + if (FCT (list->str, string, rs, no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0 + /* This was successful. Now match the rest with the rest + of the pattern. */ + && (FCT (p, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0, + flags & FNM_FILE_NAME + ? flags : flags & ~FNM_PERIOD) == 0 + /* This didn't work. Try the whole pattern. */ + || (rs != string + && FCT (pattern - 1, rs, string_end, + rs == string + ? no_leading_period + : (rs[-1] == '/' && NO_LEADING_PERIOD (flags) + ? 1 : 0), + flags & FNM_FILE_NAME + ? flags : flags & ~FNM_PERIOD) == 0))) + /* It worked. Signal success. */ + return 0; + } + while ((list = list->next) != NULL); + + /* None of the patterns lead to a match. */ + return FNM_NOMATCH; + + case L('?'): + if (FCT (p, string, string_end, no_leading_period, flags) == 0) + return 0; + /* FALLTHROUGH */ + + case L('@'): + do + /* I cannot believe it but `strcat' is actually acceptable + here. Match the entire string with the prefix from the + pattern list and the rest of the pattern following the + pattern list. */ + if (FCT (STRCAT (list->str, p), string, string_end, + no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + /* It worked. Signal success. */ + return 0; + while ((list = list->next) != NULL); + + /* None of the patterns lead to a match. */ + return FNM_NOMATCH; + + case L('!'): + for (rs = string; rs <= string_end; ++rs) + { + struct patternlist *runp; + + for (runp = list; runp != NULL; runp = runp->next) + if (FCT (runp->str, string, rs, no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + break; + + /* If none of the patterns matched see whether the rest does. */ + if (runp == NULL + && (FCT (p, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) + == 0)) + /* This is successful. */ + return 0; + } + + /* None of the patterns together with the rest of the pattern + lead to a match. */ + return FNM_NOMATCH; + + default: + assert (! "Invalid extended matching operator"); + break; + } + + return -1; +} + + #undef FOLD #undef CHAR #undef UCHAR +#undef INT #undef FCT -#undef STRCHR -#undef STRCHRNUL +#undef EXT +#undef END +#undef MEMPCPY +#undef MEMCHR #undef STRCOLL +#undef STRLEN +#undef STRCAT #undef L #undef BTOWC diff -durpNa glibc-2.2.2/posix/getconf.c glibc-2.2.3/posix/getconf.c --- glibc-2.2.2/posix/getconf.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/posix/getconf.c Wed Apr 25 14:51:02 2001 @@ -365,6 +365,9 @@ static const struct conf vars[] = #ifdef _SC_TIMERS { "_POSIX_TIMERS", _SC_TIMERS, SYSCONF }, #endif +#ifdef _SC_TIMER_MAX + { "TIMER_MAX", _SC_TIMER_MAX, SYSCONF }, +#endif #ifdef _SC_TZNAME_MAX { "_POSIX_TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF }, #endif @@ -473,7 +476,7 @@ static const struct conf vars[] = { "POSIX2_FORT_RUN", _SC_2_FORT_RUN, SYSCONF }, #endif #ifdef _SC_LINE_MAX - { "POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF }, + { "_POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF }, #endif #ifdef _SC_2_LOCALEDEF { "POSIX2_LOCALEDEF", _SC_2_LOCALEDEF, SYSCONF }, @@ -496,8 +499,6 @@ static const struct conf vars[] = #ifdef _CS_PATH { "PATH", _CS_PATH, CONFSTR }, -#endif -#ifdef _CS_PATH { "CS_PATH", _CS_PATH, CONFSTR }, #endif @@ -529,7 +530,7 @@ static const struct conf vars[] = /* Programming environments. */ #ifdef _SC_XBS5_ILP32_OFF32 - { "XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32, SYSCONF }, + { "_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32, SYSCONF }, #endif #ifdef _CS_XBS5_ILP32_OFF32_CFLAGS { "XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS, CONFSTR }, @@ -545,7 +546,7 @@ static const struct conf vars[] = #endif #ifdef _SC_XBS5_ILP32_OFFBIG - { "XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG, SYSCONF }, + { "_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG, SYSCONF }, #endif #ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS { "XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS, CONFSTR }, @@ -561,7 +562,7 @@ static const struct conf vars[] = #endif #ifdef _SC_XBS5_LP64_OFF64 - { "XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64, SYSCONF }, + { "_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64, SYSCONF }, #endif #ifdef _CS_XBS5_LP64_OFF64_CFLAGS { "XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS, CONFSTR }, @@ -577,7 +578,7 @@ static const struct conf vars[] = #endif #ifdef _SC_XBS5_LPBIG_OFFBIG - { "XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG, SYSCONF }, + { "_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG, SYSCONF }, #endif #ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS { "XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS, CONFSTR }, @@ -592,143 +593,295 @@ static const struct conf vars[] = { "XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, CONFSTR }, #endif +#ifdef _SC_V6_ILP32_OFF32 + { "_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32, SYSCONF }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS + { "POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS + { "POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS + { "POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS + { "POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, CONFSTR }, +#endif + +#ifdef _CS_V6_WIDTH_RESTRICTED_ENVS + { "_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR }, +#endif + +#ifdef _SC_V6_ILP32_OFFBIG + { "_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG, SYSCONF }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS + { "POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS + { "POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFFBIG_LIBS + { "POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS + { "POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, CONFSTR }, +#endif + +#ifdef _SC_V6_LP64_OFF64 + { "_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64, SYSCONF }, +#endif +#ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS + { "POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS + { "POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_LP64_OFF64_LIBS + { "POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS + { "POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, CONFSTR }, +#endif + +#ifdef _SC_V6_LPBIG_OFFBIG + { "_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG, SYSCONF }, +#endif +#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS + { "POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS + { "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS + { "POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, CONFSTR }, +#endif +#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS + { "POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, CONFSTR }, +#endif + #ifdef _SC_ADVISORY_INFO - { "ADVISORY_INFO", _SC_ADVISORY_INFO, SYSCONF }, + { "_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO, SYSCONF }, #endif #ifdef _SC_BARRIERS - { "BARRIERS", _SC_BARRIERS, SYSCONF }, + { "_POSIX_BARRIERS", _SC_BARRIERS, SYSCONF }, #endif #ifdef _SC_BASE - { "BASE", _SC_BASE, SYSCONF }, + { "_POSIX_BASE", _SC_BASE, SYSCONF }, #endif #ifdef _SC_C_LANG_SUPPORT - { "C_LANG_SUPPORT", _SC_C_LANG_SUPPORT, SYSCONF }, + { "_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT, SYSCONF }, #endif #ifdef _SC_C_LANG_SUPPORT_R - { "C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF }, + { "_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF }, #endif #ifdef _SC_CLOCK_SELECTION - { "CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF }, + { "_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF }, #endif #ifdef _SC_CPUTIME - { "CPUTIME", _SC_CPUTIME, SYSCONF }, + { "_POSIX_CPUTIME", _SC_CPUTIME, SYSCONF }, #endif #ifdef _SC_THREAD_CPUTIME - { "THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF }, + { "_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF }, #endif #ifdef _SC_DEVICE_SPECIFIC - { "DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF }, + { "_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF }, #endif #ifdef _SC_DEVICE_SPECIFIC_R - { "DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R, SYSCONF }, + { "_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R, SYSCONF }, #endif #ifdef _SC_FD_MGMT - { "FD_MGMT", _SC_FD_MGMT, SYSCONF }, + { "_POSIX_FD_MGMT", _SC_FD_MGMT, SYSCONF }, #endif #ifdef _SC_FIFO - { "FIFO", _SC_FIFO, SYSCONF }, + { "_POSIX_FIFO", _SC_FIFO, SYSCONF }, #endif #ifdef _SC_PIPE - { "PIPE", _SC_PIPE, SYSCONF }, + { "_POSIX_PIPE", _SC_PIPE, SYSCONF }, #endif #ifdef _SC_FILE_ATTRIBUTES - { "FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES, SYSCONF }, + { "_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES, SYSCONF }, #endif #ifdef _SC_FILE_LOCKING - { "FILE_LOCKING", _SC_FILE_LOCKING, SYSCONF }, + { "_POSIX_FILE_LOCKING", _SC_FILE_LOCKING, SYSCONF }, #endif #ifdef _SC_FILE_SYSTEM - { "FILE_SYSTEM", _SC_FILE_SYSTEM, SYSCONF }, + { "_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM, SYSCONF }, #endif #ifdef _SC_MONOTONIC_CLOCK - { "MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK, SYSCONF }, + { "_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK, SYSCONF }, #endif -#ifdef _SC_MULTIPLE_PROCESS - { "MULTIPLE_PROCESS", _SC_MULTIPLE_PROCESS, SYSCONF }, +#ifdef _SC_MULTI_PROCESS + { "_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS, SYSCONF }, #endif #ifdef _SC_SINGLE_PROCESS - { "SINGLE_PROCESS", _SC_SINGLE_PROCESS, SYSCONF }, + { "_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS, SYSCONF }, #endif #ifdef _SC_NETWORKING - { "NETWORKING", _SC_NETWORKING, SYSCONF }, + { "_POSIX_NETWORKING", _SC_NETWORKING, SYSCONF }, #endif #ifdef _SC_READER_WRITER_LOCKS - { "READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS, SYSCONF }, + { "_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS, SYSCONF }, #endif #ifdef _SC_SPIN_LOCKS - { "SPIN_LOCKS", _SC_SPIN_LOCKS, SYSCONF }, -#endif -#ifdef _SC_REXEXP - { "REGEXP", _SC_REXEXP, SYSCONF }, + { "_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS, SYSCONF }, #endif -#ifdef _SC_REXEXP - { "REGEXP", _SC_REXEXP, SYSCONF }, +#ifdef _SC_REGEXP + { "_POSIX_REGEXP", _SC_REGEXP, SYSCONF }, #endif -#ifdef _SC_REXEX_VERSION - { "REGEX_VERSION", _SC_REXEX_VERSION, SYSCONF }, +#ifdef _SC_REGEX_VERSION + { "_REGEX_VERSION", _SC_REGEX_VERSION, SYSCONF }, #endif #ifdef _SC_SHELL - { "SHELL", _SC_SHELL, SYSCONF }, + { "_POSIX_SHELL", _SC_SHELL, SYSCONF }, #endif #ifdef _SC_SIGNALS - { "SIGNALS", _SC_SIGNALS, SYSCONF }, + { "_POSIX_SIGNALS", _SC_SIGNALS, SYSCONF }, #endif #ifdef _SC_SPAWN - { "SPAWN", _SC_SPAWN, SYSCONF }, + { "_POSIX_SPAWN", _SC_SPAWN, SYSCONF }, #endif #ifdef _SC_SPORADIC_SERVER - { "SPORADIC_SERVER", _SC_SPORADIC_SERVER, SYSCONF }, + { "_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER, SYSCONF }, #endif #ifdef _SC_THREAD_SPORADIC_SERVER - { "THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER, SYSCONF }, + { "_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER, SYSCONF }, #endif #ifdef _SC_SYSTEM_DATABASE - { "SYSTEM_DATABASE", _SC_SYSTEM_DATABASE, SYSCONF }, + { "_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE, SYSCONF }, #endif #ifdef _SC_SYSTEM_DATABASE_R - { "SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R, SYSCONF }, + { "_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R, SYSCONF }, #endif #ifdef _SC_TIMEOUTS - { "TIMEOUTS", _SC_TIMEOUTS, SYSCONF }, + { "_POSIX_TIMEOUTS", _SC_TIMEOUTS, SYSCONF }, #endif #ifdef _SC_TYPED_MEMORY_OBJECTS - { "TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS, SYSCONF }, + { "_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS, SYSCONF }, #endif #ifdef _SC_USER_GROUPS - { "USER_GROUPS", _SC_USER_GROUPS, SYSCONF }, + { "_POSIX_USER_GROUPS", _SC_USER_GROUPS, SYSCONF }, #endif #ifdef _SC_USER_GROUPS_R - { "USER_GROUPS_R", _SC_USER_GROUPS_R, SYSCONF }, + { "_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R, SYSCONF }, #endif -#ifdef _SC_PBS - { "PBS", _SC_PBS, SYSCONF }, +#ifdef _SC_2_PBS + { "POSIX2_PBS", _SC_2_PBS, SYSCONF }, #endif -#ifdef _SC_PBS_ACCOUNTING - { "PBS_ACCOUNT", _SC_PBS_ACCOUNTING, SYSCONF }, +#ifdef _SC_2_PBS_ACCOUNTING + { "POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING, SYSCONF }, #endif -#ifdef _SC_PBS_LOCATE - { "PBS_LOCATE", _SC_PBS_LOCATE, SYSCONF }, +#ifdef _SC_2_PBS_LOCATE + { "POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE, SYSCONF }, #endif -#ifdef _SC_PBS_TRACK - { "PBS_TRACK", _SC_PBS_TRACK, SYSCONF }, +#ifdef _SC_2_PBS_TRACK + { "POSIX2_PBS_TRACK", _SC_2_PBS_TRACK, SYSCONF }, #endif -#ifdef _SC_PBS_MESSAGE - { "PBS_MESSAGE", _SC_PBS_MESSAGE, SYSCONF }, +#ifdef _SC_2_PBS_MESSAGE + { "POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE, SYSCONF }, #endif -#ifdef _SC_SYMLOOP - { "SYMLOOP", _SC_SYMLOOP, SYSCONF }, +#ifdef _SC_SYMLOOP_MAX + { "SYMLOOP_MAX", _SC_SYMLOOP_MAX, SYSCONF }, +#endif +#ifdef _SC_STREAM_MAX + { "STREAM_MAX", _SC_STREAM_MAX, SYSCONF }, +#endif +#ifdef _SC_AIO_LISTIO_MAX + { "AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX, SYSCONF }, +#endif +#ifdef _SC_AIO_MAX + { "AIO_MAX", _SC_AIO_MAX, SYSCONF }, +#endif +#ifdef _SC_AIO_PRIO_DELTA_MAX + { "AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX, SYSCONF }, +#endif +#ifdef _SC_DELAYTIMER_MAX + { "DELAYTIMER_MAX", _SC_DELAYTIMER_MAX, SYSCONF }, +#endif +#ifdef _SC_HOST_NAME_MAX + { "HOST_NAME_MAX", _SC_HOST_NAME_MAX, SYSCONF }, +#endif +#ifdef _SC_LOGIN_NAME_MAX + { "LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF }, +#endif +#ifdef _SC_MQ_OPEN_MAX + { "MQ_OPEN_MAX", _SC_MQ_OPEN_MAX, SYSCONF }, +#endif +#ifdef _SC_MQ_PRIO_MAX + { "MQ_PRIO_MAX", _SC_MQ_PRIO_MAX, SYSCONF }, +#endif +#ifdef _SC_DEVICE_IO + { "_POSIX_DEVICE_IO", _SC_DEVICE_IO, SYSCONF }, +#endif +#ifdef _SC_TRACE + { "_POSIX_TRACE", _SC_TRACE, SYSCONF }, +#endif +#ifdef _SC_TRACE_EVENT_FILTER + { "_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER, SYSCONF }, +#endif +#ifdef _SC_TRACE_INHERIT + { "_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT, SYSCONF }, +#endif +#ifdef _SC_TRACE_LOG + { "_POSIX_TRACE_LOG", _SC_TRACE_LOG, SYSCONF }, +#endif +#ifdef _SC_RTSIG_MAX + { "RTSIG_MAX", _SC_RTSIG_MAX, SYSCONF }, +#endif +#ifdef _SC_SEM_NSEMS_MAX + { "SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX, SYSCONF }, +#endif +#ifdef _SC_SEM_VALUE_MAX + { "SEM_VALUE_MAX", _SC_SEM_VALUE_MAX, SYSCONF }, +#endif +#ifdef _SC_SIGQUEUE_MAX + { "SIGQUEUE_MAX", _SC_SIGQUEUE_MAX, SYSCONF }, +#endif +#ifdef _PC_FILESIZEBITS + { "FILESIZEBITS", _PC_FILESIZEBITS, PATHCONF }, +#endif +#ifdef _PC_ALLOC_SIZE_MIN + { "POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN, PATHCONF }, +#endif +#ifdef _PC_REC_INCR_XFER_SIZE + { "POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE, PATHCONF }, +#endif +#ifdef _PC_REC_MAX_XFER_SIZE + { "POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE, PATHCONF }, +#endif +#ifdef _PC_REC_MIN_XFER_SIZE + { "POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE, PATHCONF }, +#endif +#ifdef _PC_REC_XFER_ALIGN + { "POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN, PATHCONF }, +#endif +#ifdef _PC_SYMLINK_MAX + { "SYMLINK_MAX", _PC_SYMLINK_MAX, PATHCONF }, #endif { NULL, 0, SYSCONF } }; + +static const char *specs[] = + { + "POSIX_V6_ILP32_OFF32", + "POSIX_V6_ILP32_OFFBIG", + "POSIX_V6_LP64_OFF64", + "POSIX_V6_LPBIG_OFFBIG" + }; +static const int nspecs = sizeof (specs) / sizeof (specs[0]); + extern const char *__progname; static void usage (void) { - fprintf (stderr, _("Usage: %s variable_name [pathname]\n"), __progname); + fprintf (stderr, + _("Usage: %s [-v specification] variable_name [pathname]\n"), + __progname); exit (2); } @@ -755,6 +908,40 @@ warranty; not even for MERCHANTABILITY o "), "2001"); fprintf (stderr, gettext ("Written by %s.\n"), "Roland McGrath"); return 0; + } + + if (argc > 1 && strncmp (argv[1], "-v", 2) == 0) + { + const char *spec; + int i; + + if (argv[1][2] == '\0') + { + if (argc < 3) + usage (); + + spec = argv[2]; + argv += 2; + argc -= 2; + } + else + { + spec = &argv[1][2]; + argv += 1; + argc += 1; + } + + /* Check for the specifications we know. This is simple in the + moment. */ + for (i = 0; i < nspecs; ++i) + if (strcmp (spec, specs[i]) == 0) + break; + + if (i == nspecs) + error (2, 0, _("unknown specification \"%s\""), spec); + + /* And now we forget the specification. We don't do anything different + with or without it. */ } if (argc < 2 || argc > 3) diff -durpNa glibc-2.2.2/posix/getopt.h glibc-2.2.3/posix/getopt.h --- glibc-2.2.2/posix/getopt.h Mon Jul 26 08:32:47 1999 +++ glibc-2.2.3/posix/getopt.h Wed Apr 25 14:51:02 2001 @@ -1,5 +1,5 @@ /* Declarations for getopt. - Copyright (C) 1989,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc. + Copyright (C) 1989-1994, 1996-1999, 2001 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 @@ -93,7 +93,7 @@ extern int optopt; struct option { -# if defined __STDC__ && __STDC__ +# if (defined __STDC__ && __STDC__) || defined __cplusplus const char *name; # else char *name; @@ -137,7 +137,7 @@ struct option arguments to the option '\0'. This behavior is specific to the GNU `getopt'. */ -#if defined __STDC__ && __STDC__ +#if (defined __STDC__ && __STDC__) || defined __cplusplus # ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation diff -durpNa glibc-2.2.2/posix/ptestcases.h glibc-2.2.3/posix/ptestcases.h --- glibc-2.2.2/posix/ptestcases.h Mon Jan 3 13:04:42 2000 +++ glibc-2.2.3/posix/ptestcases.h Mon Mar 26 20:53:06 2001 @@ -122,7 +122,7 @@ { 2, 5, "[^[:alnum:]]*", "2 ,a", }, { 2, 5, "[[:alpha:]]*", " aBgH2", }, { 1, 6, "[^[:alpha:]]*", "2 8,a", }, - { 1, 2, "[[:blank:]]*", " ", }, + { 1, 2, "[[:blank:]]*", " \r", }, { 1, 8, "[^[:blank:]]*", "aB28gH, ", }, { 1, 2, "[[:cntrl:]]*", "  ", }, { 1, 8, "[^[:cntrl:]]*", "aB2 8gh,", }, @@ -136,7 +136,7 @@ { 1, 2, "[^[:print:]]*", "  ", }, { 2, 2, "[[:punct:]]*", "a,2", }, { 1, 9, "[^[:punct:]]*", "aB2 8gH", }, - { 1, 3, "[[:space:]]*", " ", }, + { 1, 3, "[[:space:]]*", " \r", }, { 2, 9, "[^[:space:]]*", " aB28gH, ", }, { 2, 3, "[[:upper:]]*", "aBH2", }, { 1, 8, "[^[:upper:]]*", "a2 8g,B", }, diff -durpNa glibc-2.2.2/posix/regex.c glibc-2.2.3/posix/regex.c --- glibc-2.2.2/posix/regex.c Thu Feb 15 14:08:41 2001 +++ glibc-2.2.3/posix/regex.c Sat Apr 7 14:02:36 2001 @@ -65,7 +65,7 @@ # define CHAR_CLASS_SIZE ((__alignof__(wctype_t)+sizeof(wctype_t))/sizeof(CHAR_TYPE)+1) # define PUT_CHAR(c) \ do { \ - if (MC_CUR_MAX == 1) \ + if (MB_CUR_MAX == 1) \ putchar (c); \ else \ printf ("%C", (wint_t) c); /* Should we use wide stream?? */ \ @@ -2138,21 +2138,21 @@ typedef struct /* Get the next unsigned number in the uncompiled pattern. */ -#define GET_UNSIGNED_NUMBER(num) \ - { if (p != pend) \ - { \ - PATFETCH (c); \ - while ('0' <= c && c <= '9') \ - { \ - if (num < 0) \ - num = 0; \ - num = num * 10 + c - '0'; \ - if (p == pend) \ - break; \ - PATFETCH (c); \ - } \ - } \ - } +#define GET_UNSIGNED_NUMBER(num) \ + { \ + while (p != pend) \ + { \ + PATFETCH (c); \ + if (c < '0' || c > '9') \ + break; \ + if (num <= RE_DUP_MAX) \ + { \ + if (num < 0) \ + num = 0; \ + num = num * 10 + c - '0'; \ + } \ + } \ + } #if defined _LIBC || WIDE_CHAR_SUPPORT /* The GNU C library provides support for user-defined character classes @@ -2326,14 +2326,6 @@ regex_compile (pattern, size, syntax, bu /* Address of beginning of regexp, or inside of last group. */ US_CHAR_TYPE *begalt; - /* Place in the uncompiled pattern (i.e., the {) to - which to go back if the interval is invalid. */ -#ifdef MBS_SUPPORT - const US_CHAR_TYPE *beg_interval; -#else - const char *beg_interval; -#endif /* MBS_SUPPORT */ - /* Address of the place where a forward jump should go to the end of the containing expression. Each alternative of an `or' -- except the last -- ends with a forward jump of this sort. */ @@ -2346,23 +2338,24 @@ regex_compile (pattern, size, syntax, bu #ifdef MBS_SUPPORT /* Initialize the wchar_t PATTERN and offset_buffer. */ - p = pend = pattern = TALLOC(csize, CHAR_TYPE); + p = pend = pattern = TALLOC(csize + 1, CHAR_TYPE); mbs_offset = TALLOC(csize + 1, int); is_binary = TALLOC(csize + 1, char); if (pattern == NULL || mbs_offset == NULL || is_binary == NULL) { - if (pattern) free(pattern); - if (mbs_offset) free(mbs_offset); - if (is_binary) free(is_binary); + free(pattern); + free(mbs_offset); + free(is_binary); return REG_ESPACE; } + pattern[csize] = L'\0'; /* sentinel */ size = convert_mbs_to_wcs(pattern, cpattern, csize, mbs_offset, is_binary); pend = p + size; if (size < 0) { - if (pattern) free(pattern); - if (mbs_offset) free(mbs_offset); - if (is_binary) free(is_binary); + free(pattern); + free(mbs_offset); + free(is_binary); return REG_BADPAT; } #endif @@ -2384,9 +2377,9 @@ regex_compile (pattern, size, syntax, bu if (compile_stack.stack == NULL) { #ifdef MBS_SUPPORT - if (pattern) free(pattern); - if (mbs_offset) free(mbs_offset); - if (is_binary) free(is_binary); + free(pattern); + free(mbs_offset); + free(is_binary); #endif return REG_ESPACE; } @@ -3827,25 +3820,19 @@ regex_compile (pattern, size, syntax, bu /* At least (most) this many matches must be made. */ int lower_bound = -1, upper_bound = -1; - beg_interval = p - 1; + + /* Place in the uncompiled pattern (i.e., just after + the '{') to go back to if the interval is invalid. */ + const CHAR_TYPE *beg_interval = p; if (p == pend) - { - if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) - goto unfetch_interval; - else - FREE_STACK_RETURN (REG_EBRACE); - } + goto invalid_interval; GET_UNSIGNED_NUMBER (lower_bound); if (c == ',') { GET_UNSIGNED_NUMBER (upper_bound); - if ((!(syntax & RE_NO_BK_BRACES) && c != '\\') - || ((syntax & RE_NO_BK_BRACES) && c != '}')) - FREE_STACK_RETURN (REG_BADBR); - if (upper_bound < 0) upper_bound = RE_DUP_MAX; } @@ -3853,36 +3840,24 @@ regex_compile (pattern, size, syntax, bu /* Interval such as `{1}' => match exactly once. */ upper_bound = lower_bound; - if (lower_bound < 0 || upper_bound > RE_DUP_MAX - || lower_bound > upper_bound) - { - if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) - goto unfetch_interval; - else - FREE_STACK_RETURN (REG_BADBR); - } + if (! (0 <= lower_bound && lower_bound <= upper_bound)) + goto invalid_interval; if (!(syntax & RE_NO_BK_BRACES)) { - if (c != '\\') FREE_STACK_RETURN (REG_EBRACE); - + if (c != '\\' || p == pend) + goto invalid_interval; PATFETCH (c); } if (c != '}') - { - if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) - goto unfetch_interval; - else - FREE_STACK_RETURN (REG_BADBR); - } - - /* We just parsed a valid interval. */ + goto invalid_interval; /* If it's invalid to have no preceding re. */ if (!laststart) { - if (syntax & RE_CONTEXT_INVALID_OPS) + if (syntax & RE_CONTEXT_INVALID_OPS + && !(syntax & RE_INVALID_INTERVAL_ORD)) FREE_STACK_RETURN (REG_BADRPT); else if (syntax & RE_CONTEXT_INDEP_OPS) laststart = b; @@ -3890,6 +3865,11 @@ regex_compile (pattern, size, syntax, bu goto unfetch_interval; } + /* We just parsed a valid interval. */ + + if (RE_DUP_MAX < upper_bound) + FREE_STACK_RETURN (REG_BADBR); + /* If the upper bound is zero, don't want to succeed at all; jump from `laststart' to `b + 3', which will be the end of the buffer after we insert the jump. */ @@ -3975,25 +3955,20 @@ regex_compile (pattern, size, syntax, bu } } pending_exact = 0; - beg_interval = NULL; - } - break; - - unfetch_interval: - /* If an invalid interval, match the characters as literals. */ - assert (beg_interval); - p = beg_interval; - beg_interval = NULL; - - /* normal_char and normal_backslash need `c'. */ - PATFETCH (c); + break; - if (!(syntax & RE_NO_BK_BRACES)) - { - if (p > pattern && p[-1] == '\\') - goto normal_backslash; - } - goto normal_char; + invalid_interval: + if (!(syntax & RE_INVALID_INTERVAL_ORD)) + FREE_STACK_RETURN (p == pend ? REG_EBRACE : REG_BADBR); + unfetch_interval: + /* Match the characters as literals. */ + p = beg_interval; + c = '{'; + if (syntax & RE_NO_BK_BRACES) + goto normal_char; + else + goto normal_backslash; + } #ifdef emacs /* There is no way to specify the before_dot and after_dot diff -durpNa glibc-2.2.2/posix/regex.h glibc-2.2.3/posix/regex.h --- glibc-2.2.2/posix/regex.h Tue Oct 31 11:10:06 2000 +++ glibc-2.2.3/posix/regex.h Mon Mar 26 20:53:07 2001 @@ -160,6 +160,11 @@ typedef unsigned long int reg_syntax_t; this bit set, and it won't affect anything in the normal case. */ #define RE_DEBUG (RE_NO_GNU_OPS << 1) +/* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ +#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect @@ -199,7 +204,8 @@ extern reg_syntax_t re_syntax_options; | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ - (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ + | RE_INVALID_INTERVAL_ORD) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC diff -durpNa glibc-2.2.2/posix/testfnm.c glibc-2.2.3/posix/testfnm.c --- glibc-2.2.2/posix/testfnm.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/posix/testfnm.c Mon Mar 26 20:53:07 2001 @@ -54,6 +54,9 @@ struct { { "a/b", "*a*", FNM_PATHNAME|FNM_LEADING_DIR, 0 }, { "ab/c", "*a?", FNM_PATHNAME|FNM_LEADING_DIR, 0 }, { "ab/c", "a?", FNM_PATHNAME|FNM_LEADING_DIR, 0 }, + { "a/b", "?*/?", FNM_PATHNAME, 0 }, + { "/b", "*/?", FNM_PATHNAME, 0 }, + { "/b", "**/?", FNM_PATHNAME, 0 }, }; int diff -durpNa glibc-2.2.2/posix/tst-fnmatch.c glibc-2.2.3/posix/tst-fnmatch.c --- glibc-2.2.2/posix/tst-fnmatch.c Tue Jul 4 13:56:12 2000 +++ glibc-2.2.3/posix/tst-fnmatch.c Mon Mar 26 20:53:07 2001 @@ -1,5 +1,5 @@ /* Tests for fnmatch function. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 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 @@ -263,6 +263,12 @@ convert_flags (const char *str) result |= FNM_CASEFOLD; len = 8; } + else if (strncasecmp (str, "EXTMATCH", 8) == 0 + && (str[8] == '|' || str[8] == '\0')) + { + result |= FNM_EXTMATCH; + len = 8; + } else return -1; @@ -313,6 +319,13 @@ flag_output (int flags) if (! first) *cp++ = '|'; cp = stpcpy (cp, "FNM_CASEFOLD"); + first = 0; + } + if (flags & FNM_EXTMATCH) + { + if (! first) + *cp++ = '|'; + cp = stpcpy (cp, "FNM_EXTMATCH"); first = 0; } if (cp == buf) diff -durpNa glibc-2.2.2/posix/tst-fnmatch.input glibc-2.2.3/posix/tst-fnmatch.input --- glibc-2.2.2/posix/tst-fnmatch.input Fri Feb 9 10:04:18 2001 +++ glibc-2.2.3/posix/tst-fnmatch.input Tue Mar 27 22:27:38 2001 @@ -348,7 +348,7 @@ C "\\/\\$" "\\/\\$" 0 NO # B.6 033(C) C ".asd" ".*" 0 PERIOD -C "/.asd" "*" 0 PERIOD +C "/.asd" "*" 0 PERIOD C "/as/.df" "*/?*f" 0 PERIOD C "..asd" ".[!a-z]*" 0 PERIOD @@ -370,6 +370,17 @@ C "/." "/[!a-z]" NOMATCH PATH C "/a./.b." "/*/*" NOMATCH PATHNAME|PERIOD C "/a./.b." "/??/???" NOMATCH PATHNAME|PERIOD +# Some home-grown tests. +C "foobar" "foo*[abc]z" NOMATCH +C "foobaz" "foo*[abc][xyz]" 0 +C "foobaz" "foo?*[abc][xyz]" 0 +C "foobaz" "foo?*[abc][x/yz]" 0 +C "foobaz" "foo?*[abc]/[xyz]" NOMATCH PATHNAME +C "a" "a/" NOMATCH PATHNAME +C "a/" "a" NOMATCH PATHNAME +C "//a" "/a" NOMATCH PATHNAME +C "/a" "//a" NOMATCH PATHNAME + # Following are tests outside the scope of IEEE 2003.2 since they are using # locales other than the C locale. The main focus of the tests is on the # handling of ranges and the recognition of character (vs bytes). @@ -578,3 +589,133 @@ C "x/y/z" "x/y" 0 PATHN C "x" "x?y" NOMATCH PATHNAME|LEADING_DIR C "x/y" "x?y" NOMATCH PATHNAME|LEADING_DIR C "x/y/z" "x?y" NOMATCH PATHNAME|LEADING_DIR + +# ksh style matching. +C "abcd" "?@(a|b)*@(c)d" 0 EXTMATCH +C "/dev/udp/129.22.8.102/45" "/dev/@(tcp|udp)/*/*" 0 PATHNAME|EXTMATCH +C "12" "[1-9]*([0-9])" 0 EXTMATCH +C "12abc" "[1-9]*([0-9])" NOMATCH EXTMATCH +C "1" "[1-9]*([0-9])" 0 EXTMATCH +C "07" "+([0-7])" 0 EXTMATCH +C "0377" "+([0-7])" 0 EXTMATCH +C "09" "+([0-7])" NOMATCH EXTMATCH +C "paragraph" "para@(chute|graph)" 0 EXTMATCH +C "paramour" "para@(chute|graph)" NOMATCH EXTMATCH +C "para991" "para?([345]|99)1" 0 EXTMATCH +C "para381" "para?([345]|99)1" NOMATCH EXTMATCH +C "paragraph" "para*([0-9])" NOMATCH EXTMATCH +C "para" "para*([0-9])" 0 EXTMATCH +C "para13829383746592" "para*([0-9])" 0 EXTMATCH +C "paragraph" "para+([0-9])" NOMATCH EXTMATCH +C "para" "para+([0-9])" NOMATCH EXTMATCH +C "para987346523" "para+([0-9])" 0 EXTMATCH +C "paragraph" "para!(*.[0-9])" 0 EXTMATCH +C "para.38" "para!(*.[0-9])" 0 EXTMATCH +C "para.graph" "para!(*.[0-9])" 0 EXTMATCH +C "para39" "para!(*.[0-9])" 0 EXTMATCH +C "" "*(0|1|3|5|7|9)" 0 EXTMATCH +C "137577991" "*(0|1|3|5|7|9)" 0 EXTMATCH +C "2468" "*(0|1|3|5|7|9)" NOMATCH EXTMATCH +C "1358" "*(0|1|3|5|7|9)" NOMATCH EXTMATCH +C "file.c" "*.c?(c)" 0 EXTMATCH +C "file.C" "*.c?(c)" NOMATCH EXTMATCH +C "file.cc" "*.c?(c)" 0 EXTMATCH +C "file.ccc" "*.c?(c)" NOMATCH EXTMATCH +C "parse.y" "!(*.c|*.h|Makefile.in|config*|README)" 0 EXTMATCH +C "shell.c" "!(*.c|*.h|Makefile.in|config*|README)" NOMATCH EXTMATCH +C "Makefile" "!(*.c|*.h|Makefile.in|config*|README)" 0 EXTMATCH +C "VMS.FILE;1" "*\;[1-9]*([0-9])" 0 EXTMATCH +C "VMS.FILE;0" "*\;[1-9]*([0-9])" NOMATCH EXTMATCH +C "VMS.FILE;" "*\;[1-9]*([0-9])" NOMATCH EXTMATCH +C "VMS.FILE;139" "*\;[1-9]*([0-9])" 0 EXTMATCH +C "VMS.FILE;1N" "*\;[1-9]*([0-9])" NOMATCH EXTMATCH +C "abcfefg" "ab**(e|f)" 0 EXTMATCH +C "abcfefg" "ab**(e|f)g" 0 EXTMATCH +C "ab" "ab*+(e|f)" NOMATCH EXTMATCH +C "abef" "ab***ef" 0 EXTMATCH +C "abef" "ab**" 0 EXTMATCH +C "fofo" "*(f*(o))" 0 EXTMATCH +C "ffo" "*(f*(o))" 0 EXTMATCH +C "foooofo" "*(f*(o))" 0 EXTMATCH +C "foooofof" "*(f*(o))" 0 EXTMATCH +C "fooofoofofooo" "*(f*(o))" 0 EXTMATCH +C "foooofof" "*(f+(o))" NOMATCH EXTMATCH +C "xfoooofof" "*(f*(o))" NOMATCH EXTMATCH +C "foooofofx" "*(f*(o))" NOMATCH EXTMATCH +C "ofxoofxo" "*(*(of*(o)x)o)" 0 EXTMATCH +C "ofooofoofofooo" "*(f*(o))" NOMATCH EXTMATCH +C "foooxfooxfoxfooox" "*(f*(o)x)" 0 EXTMATCH +C "foooxfooxofoxfooox" "*(f*(o)x)" NOMATCH EXTMATCH +C "foooxfooxfxfooox" "*(f*(o)x)" 0 EXTMATCH +C "ofxoofxo" "*(*(of*(o)x)o)" 0 EXTMATCH +C "ofoooxoofxo" "*(*(of*(o)x)o)" 0 EXTMATCH +C "ofoooxoofxoofoooxoofxo" "*(*(of*(o)x)o)" 0 EXTMATCH +C "ofoooxoofxoofoooxoofxoo" "*(*(of*(o)x)o)" 0 EXTMATCH +C "ofoooxoofxoofoooxoofxofo" "*(*(of*(o)x)o)" NOMATCH EXTMATCH +C "ofoooxoofxoofoooxoofxooofxofxo" "*(*(of*(o)x)o)" 0 EXTMATCH +C "aac" "*(@(a))a@(c)" 0 EXTMATCH +C "ac" "*(@(a))a@(c)" 0 EXTMATCH +C "c" "*(@(a))a@(c)" NOMATCH EXTMATCH +C "aaac" "*(@(a))a@(c)" 0 EXTMATCH +C "baaac" "*(@(a))a@(c)" NOMATCH EXTMATCH +C "abcd" "?@(a|b)*@(c)d" 0 EXTMATCH +C "abcd" "@(ab|a*@(b))*(c)d" 0 EXTMATCH +C "acd" "@(ab|a*(b))*(c)d" 0 EXTMATCH +C "abbcd" "@(ab|a*(b))*(c)d" 0 EXTMATCH +C "effgz" "@(b+(c)d|e*(f)g?|?(h)i@(j|k))" 0 EXTMATCH +C "efgz" "@(b+(c)d|e*(f)g?|?(h)i@(j|k))" 0 EXTMATCH +C "egz" "@(b+(c)d|e*(f)g?|?(h)i@(j|k))" 0 EXTMATCH +C "egzefffgzbcdij" "*(b+(c)d|e*(f)g?|?(h)i@(j|k))" 0 EXTMATCH +C "egz" "@(b+(c)d|e+(f)g?|?(h)i@(j|k))" NOMATCH EXTMATCH +C "ofoofo" "*(of+(o))" 0 EXTMATCH +C "oxfoxoxfox" "*(oxf+(ox))" 0 EXTMATCH +C "oxfoxfox" "*(oxf+(ox))" NOMATCH EXTMATCH +C "ofoofo" "*(of+(o)|f)" 0 EXTMATCH +C "foofoofo" "@(foo|f|fo)*(f|of+(o))" 0 EXTMATCH +C "oofooofo" "*(of|oof+(o))" 0 EXTMATCH +C "fffooofoooooffoofffooofff" "*(*(f)*(o))" 0 EXTMATCH +C "fofoofoofofoo" "*(fo|foo)" 0 EXTMATCH +C "foo" "!(x)" 0 EXTMATCH +C "foo" "!(x)*" 0 EXTMATCH +C "foo" "!(foo)" NOMATCH EXTMATCH +C "foo" "!(foo)*" 0 EXTMATCH +C "foobar" "!(foo)" 0 EXTMATCH +C "foobar" "!(foo)*" 0 EXTMATCH +C "moo.cow" "!(*.*).!(*.*)" 0 EXTMATCH +C "mad.moo.cow" "!(*.*).!(*.*)" NOMATCH EXTMATCH +C "mucca.pazza" "mu!(*(c))?.pa!(*(z))?" NOMATCH EXTMATCH +C "fff" "!(f)" 0 EXTMATCH +C "fff" "*(!(f))" 0 EXTMATCH +C "fff" "+(!(f))" 0 EXTMATCH +C "ooo" "!(f)" 0 EXTMATCH +C "ooo" "*(!(f))" 0 EXTMATCH +C "ooo" "+(!(f))" 0 EXTMATCH +C "foo" "!(f)" 0 EXTMATCH +C "foo" "*(!(f))" 0 EXTMATCH +C "foo" "+(!(f))" 0 EXTMATCH +C "f" "!(f)" NOMATCH EXTMATCH +C "f" "*(!(f))" NOMATCH EXTMATCH +C "f" "+(!(f))" NOMATCH EXTMATCH +C "foot" "@(!(z*)|*x)" 0 EXTMATCH +C "zoot" "@(!(z*)|*x)" NOMATCH EXTMATCH +C "foox" "@(!(z*)|*x)" 0 EXTMATCH +C "zoox" "@(!(z*)|*x)" 0 EXTMATCH +C "foo" "*(!(foo)) 0 EXTMATCH +C "foob" "!(foo)b*" NOMATCH EXTMATCH +C "foobb" "!(foo)b*" 0 EXTMATCH +C "[" "*([a[])" 0 EXTMATCH +C "]" "*([]a[])" 0 EXTMATCH +C "a" "*([]a[])" 0 EXTMATCH +C "b" "*([!]a[])" 0 EXTMATCH +C "[" "*([!]a[]|[[])" 0 EXTMATCH +C "]" "*([!]a[]|[]])" 0 EXTMATCH +C "[" "!([!]a[])" 0 EXTMATCH +C "]" "!([!]a[])" 0 EXTMATCH +C ")" "*([)])" 0 EXTMATCH +C "*" "*([*(])" 0 EXTMATCH +C "abcd" "*!(|a)cd" 0 EXTMATCH +C "ab/.a" "+([abc])/*" NOMATCH EXTMATCH|PATHNAME|PERIOD +C "" "" 0 +C "" "" 0 EXTMATCH +C "" "*([abc])" 0 EXTMATCH +C "" "?([abc])" 0 EXTMATCH diff -durpNa glibc-2.2.2/posix/tst-getconf.sh glibc-2.2.3/posix/tst-getconf.sh --- glibc-2.2.2/posix/tst-getconf.sh Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/posix/tst-getconf.sh Tue Apr 24 18:09:22 2001 @@ -0,0 +1,234 @@ +#! /bin/sh + +common_objpfx=$1; shift +elf_objpfx=$1; shift +rtld_installed_name=$1; shift +logfile=$common_objpfx/posix/tst-getconf.out + +# Since we use `sort' we must make sure to use the same locale everywhere. +LC_ALL=C +export LC_ALL +LANG=C +export LANG + +rm -f $logfile +result=0 +while read name; do + echo -n "getconf $name: " >> $logfile + ${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \ + ${common_objpfx}posix/getconf "$name" 2>> $logfile >> $logfile + if test $? -ne 0; then + echo "*** $name FAILED" >> $logfile + result=1 + fi +done <> $logfile + ${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \ + ${common_objpfx}posix/getconf "$name" / 2>> $logfile >> $logfile + if test $? -ne 0; then + echo "*** $name FAILED" >> $logfile + result=1 + fi +done <d.d_ino = dir->idx; + +#ifdef _DIRENT_HAVE_D_TYPE dir->d.d_type = filesystem[dir->idx].type; +#endif + strcpy (dir->d.d_name, filesystem[dir->idx].name); +#ifdef _DIRENT_HAVE_D_TYPE PRINTF ("my_readdir ({ level: %d, idx: %ld }) = { d_ino: %ld, d_type: %d, d_name: \"%s\" }\n", dir->level, (long int) dir->idx, dir->d.d_ino, dir->d.d_type, dir->d.d_name); +#else + PRINTF ("my_readdir ({ level: %d, idx: %ld }) = { d_ino: %ld, d_name: \"%s\" }\n", + dir->level, (long int) dir->idx, dir->d.d_ino, + dir->d.d_name); +#endif ++dir->idx; diff -durpNa glibc-2.2.2/posix/unistd.h glibc-2.2.3/posix/unistd.h --- glibc-2.2.2/posix/unistd.h Fri Feb 9 10:04:18 2001 +++ glibc-2.2.3/posix/unistd.h Mon Mar 26 20:53:07 2001 @@ -727,13 +727,15 @@ extern int setlogin (__const char *__nam #endif -#if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98) - +#if defined __USE_BSD || defined __USE_XOPEN2K /* Put the name of the current host in no more than LEN bytes of NAME. The result is null-terminated if LEN is large enough for the full name and the terminator. */ -extern int gethostname (char *__name, socklen_t __len) __THROW; +extern int gethostname (char *__name, size_t __len) __THROW; +#endif + +#if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98) /* Set the name of the current host to NAME, which is LEN bytes long. This call is restricted to the super-user. */ extern int sethostname (__const char *__name, size_t __len) __THROW; @@ -784,7 +786,6 @@ extern void setusershell (void) __THROW; terminal. If NOCHDIR is zero, do `chdir ("/")'. If NOCLOSE is zero, redirects stdin, stdout, and stderr to /dev/null. */ extern int daemon (int __nochdir, int __noclose) __THROW; - #endif /* Use BSD || X/Open. */ diff -durpNa glibc-2.2.2/posix/wordexp-test.c glibc-2.2.3/posix/wordexp-test.c --- glibc-2.2.2/posix/wordexp-test.c Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/posix/wordexp-test.c Mon Mar 26 20:53:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000, 2001 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 @@ -34,7 +34,7 @@ struct test_case_struct const char *env; const char *words; int flags; - int wordc; + size_t wordc; const char *wordv[10]; const char *ifs; } test_case[] = @@ -399,11 +399,11 @@ testit (struct test_case_struct *tc) if (bzzzt) { printf ("FAILED\n"); - printf ("Test words: <%s>, need retval %d, wordc %d\n", + printf ("Test words: <%s>, need retval %d, wordc %Zd\n", tc->words, tc->retval, tc->wordc); if (start_offs != 0) printf ("(preceded by %d NULLs)\n", start_offs); - printf ("Got retval %d, wordc %d: ", retval, we.we_wordc); + printf ("Got retval %d, wordc %Zd: ", retval, we.we_wordc); if (retval == 0 || retval == WRDE_NOSPACE) { for (i = 0; i < we.we_wordc + start_offs; ++i) diff -durpNa glibc-2.2.2/resolv/Depend glibc-2.2.3/resolv/Depend --- glibc-2.2.2/resolv/Depend Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/Depend Tue Mar 6 23:40:21 2001 @@ -0,0 +1 @@ +linuxthreads diff -durpNa glibc-2.2.2/resolv/Makefile glibc-2.2.3/resolv/Makefile --- glibc-2.2.2/resolv/Makefile Wed Aug 2 14:52:32 2000 +++ glibc-2.2.3/resolv/Makefile Mon Mar 26 20:53:07 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1994,95,96,97,98,99,2000 Free Software Foundation, Inc. +# Copyright (C) 1994,95,96,97,98,99,2000,2001 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 @@ -26,7 +26,7 @@ headers := resolv.h \ arpa/nameser.h arpa/nameser_compat.h \ sys/bitypes.h distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h \ - Banner res_hconf.h res_debug.h README + Banner res_hconf.h res_debug.h README gai_misc.h ga_test.c routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init \ res_hconf res_libc @@ -36,6 +36,10 @@ tests = tst-aton include ../Makeconfig extra-libs := libresolv libnss_dns +ifeq ($(have-thread-library),yes) +extra-libs += libanl +routines += gai_sigqueue +endif extra-libs-others = $(extra-libs) libresolv-routines := gethnamaddr res_comp res_debug \ res_data res_mkquery res_query res_send \ @@ -43,6 +47,9 @@ libresolv-routines := gethnamaddr res_co ns_parse ns_name ns_netint ns_ttl ns_print \ ns_samedomain +libanl-routines := gai_cancel gai_error gai_misc gai_notify gai_suspend \ + getaddrinfo_a + subdir-dirs = nss_dns vpath %.c nss_dns @@ -51,6 +58,10 @@ ifneq ($(build-static-nss),yes) libnss_dns-inhibit-o = $(filter-out .os,$(object-suffixes)) endif +ifeq (yesyes,$(build-shared)$(have-thread-library)) +tests: $(objpfx)ga_test +endif + include ../Rules CPPFLAGS += -Dgethostbyname=res_gethostbyname \ @@ -65,7 +76,14 @@ CPPFLAGS += -Dgethostbyname=res_gethostb # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libresolv.so: $(common-objpfx)libc.so +$(objpfx)libresolv.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a # The DNS NSS modules needs the resolver. -$(objpfx)libnss_dns.so: $(objpfx)libresolv.so $(common-objpfx)libc.so +$(objpfx)libnss_dns.so: $(objpfx)libresolv.so $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a + +# The asynchronous name lookup code needs the thread library. +$(objpfx)libanl.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a \ + $(shared-thread-library) + +$(objpfx)ga_test: $(objpfx)libanl.so $(shared-thread-library) diff -durpNa glibc-2.2.2/resolv/Versions glibc-2.2.3/resolv/Versions --- glibc-2.2.2/resolv/Versions Sat Jan 6 20:35:27 2001 +++ glibc-2.2.3/resolv/Versions Mon Mar 26 20:53:07 2001 @@ -22,6 +22,9 @@ libc { # r* __res_state; __res_init; __res_nclose; __res_ninit; _res_hconf; } + GLIBC_2.2.3 { + __gai_sigqueue; + } } libresolv { @@ -64,5 +67,11 @@ libnss_dns { _nss_dns_gethostbyaddr_r; _nss_dns_gethostbyname2_r; _nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r; _nss_dns_getnetbyname_r; + } +} + +libanl { + GLIBC_2.2.3 { + getaddrinfo_a; gai_cancel; gai_error; gai_suspend; } } diff -durpNa glibc-2.2.2/resolv/ga_test.c glibc-2.2.3/resolv/ga_test.c --- glibc-2.2.2/resolv/ga_test.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/ga_test.c Sat Mar 3 10:09:30 2001 @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include +#include + + +int +main (void) +{ +#define N 10 + struct gaicb reqmem[N]; + struct gaicb *req[N]; + int n; + + for (n = 0; n < N; ++n) + { + asprintf (&reqmem[n].ar_name, "test%d.test.redhat.com", 140 + n); + reqmem[n].ar_service = NULL; + reqmem[n].ar_request = NULL; + reqmem[n].ar_result = NULL; + req[n] = &reqmem[n]; + } + + if (getaddrinfo_a (GAI_NOWAIT, req, N, NULL) != 0) + { + puts ("queue call failed"); + exit (1); + } + else + puts ("queue call successful"); + + while (1) + { + int any = 0; + + for (n = 0; n < N; ++n) + if (req[n] != NULL && gai_error (req[n]) != EAI_INPROGRESS) + { + if (gai_error (req[n]) == 0) + { + struct addrinfo *runp = req[n]->ar_result; + + while (runp != NULL) + { + switch (runp->ai_family) + { + case PF_INET: + { + struct sockaddr_in *sinp; + + sinp = (struct sockaddr_in *) runp->ai_addr; + printf ("%2d: %s = %s\n", n, + req[n]->ar_name, inet_ntoa (sinp->sin_addr)); + } + break; + default: + printf ("%2d: family %d\n", n, runp->ai_family); + break; + } + runp = runp->ai_next; + } + } + else + printf ("error for %d: %s\n", n, + gai_strerror (gai_error (req[n]))); + req[n] = NULL; + break; + } + else if (req[n] != NULL) + any = 1; + + if (n == N) + { + if (any) + gai_suspend (req, N, NULL); + else + break; + } + } + + __libc_write(1,"got all\n", 8); + + for (n = 0; n < N; ++n) + if (gai_error (&reqmem[n]) == 0) + { + struct addrinfo *runp = reqmem[n].ar_result; + + while (runp != NULL) + { + struct addrinfo *oldp = runp; + runp = runp->ai_next; + freeaddrinfo (oldp); + } + } + + return 0; +} diff -durpNa glibc-2.2.2/resolv/gai_cancel.c glibc-2.2.3/resolv/gai_cancel.c --- glibc-2.2.2/resolv/gai_cancel.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/gai_cancel.c Sat Mar 3 10:09:56 2001 @@ -0,0 +1,48 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 +#include + +#include "gai_misc.h" + + +int +gai_cancel (struct gaicb *gaicbp) +{ + int result = 0; + int status; + + /* Request the mutex. */ + pthread_mutex_lock (&__gai_requests_mutex); + + /* Find the request among those queued but not yet running. */ + status = __gai_remove_request (gaicbp); + if (status == 0) + result = EAI_CANCELED; + else if (status > 0) + result = EAI_NOTCANCELED; + else + result = EAI_ALLDONE; + + /* Release the mutex. */ + pthread_mutex_unlock (&__gai_requests_mutex); + + return result; +} diff -durpNa glibc-2.2.2/resolv/gai_error.c glibc-2.2.3/resolv/gai_error.c --- glibc-2.2.2/resolv/gai_error.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/gai_error.c Sat Mar 3 10:10:04 2001 @@ -0,0 +1,28 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + +#include "gai_misc.h" + +int +gai_error (struct gaicb *req) +{ + return req->__return; +} diff -durpNa glibc-2.2.2/resolv/gai_misc.c glibc-2.2.3/resolv/gai_misc.c --- glibc-2.2.2/resolv/gai_misc.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/gai_misc.c Wed Apr 25 14:51:02 2001 @@ -0,0 +1,424 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 +#include +#include +#include +#include + +#include "gai_misc.h" + + + +/* Pool of request list entries. */ +static struct requestlist **pool; + +/* Number of total and allocated pool entries. */ +static size_t pool_max_size; +static size_t pool_size; + +/* We implement a two dimensional array but allocate each row separately. + The macro below determines how many entries should be used per row. + It should better be a power of two. */ +#define ENTRIES_PER_ROW 32 + +/* How many rows we allocate at once. */ +#define ROWS_STEP 8 + +/* List of available entries. */ +static struct requestlist *freelist; + +/* Structure list of all currently processed requests. */ +static struct requestlist *requests; +static struct requestlist *requests_tail; + +/* Number of threads currently running. */ +static int nthreads; + +/* Number of threads waiting for work to arrive. */ +static int idle_thread_count; + + +/* These are the values used for optimization. We will probably + create a funcion to set these values. */ +static struct gaiinit optim = +{ + 20, /* int gai_threads; Maximal number of threads. */ + 64, /* int gai_num; Number of expected simultanious requests. */ + 0, + 0, + 0, + 0, + 1, + 0 +}; + + +/* Since the list is global we need a mutex protecting it. */ +pthread_mutex_t __gai_requests_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; + +/* When you add a request to the list and there are idle threads present, + you signal this condition variable. When a thread finishes work, it waits + on this condition variable for a time before it actually exits. */ +pthread_cond_t __gai_new_request_notification = PTHREAD_COND_INITIALIZER; + + +/* Functions to handle request list pool. */ +static struct requestlist * +get_elem (void) +{ + struct requestlist *result; + + if (freelist == NULL) + { + struct requestlist *new_row; + int cnt; + + if (pool_size + 1 >= pool_max_size) + { + size_t new_max_size = pool_max_size + ROWS_STEP; + struct requestlist **new_tab; + + new_tab = (struct requestlist **) + realloc (pool, new_max_size * sizeof (struct requestlist *)); + + if (new_tab == NULL) + return NULL; + + pool_max_size = new_max_size; + pool = new_tab; + } + + /* Allocate the new row. */ + cnt = pool_size == 0 ? optim.gai_num : ENTRIES_PER_ROW; + new_row = (struct requestlist *) calloc (cnt, + sizeof (struct requestlist)); + if (new_row == NULL) + return NULL; + + pool[pool_size++] = new_row; + + /* Put all the new entries in the freelist. */ + do + { + new_row->next = freelist; + freelist = new_row++; + } + while (--cnt > 0); + } + + result = freelist; + freelist = freelist->next; + + return result; +} + + +struct requestlist * +internal_function +__gai_find_request (const struct gaicb *gaicbp) +{ + struct requestlist *runp; + + runp = requests; + while (runp != NULL) + if (runp->gaicbp == gaicbp) + return runp; + else + runp = runp->next; + + return NULL; +} + + +int +internal_function +__gai_remove_request (struct gaicb *gaicbp) +{ + struct requestlist *runp; + struct requestlist *lastp; + + runp = requests; + lastp = NULL; + while (runp != NULL) + if (runp->gaicbp == gaicbp) + break; + else + { + lastp = runp; + runp = runp->next; + } + + if (runp == NULL) + /* Not known. */ + return -1; + if (runp->running != 0) + /* Currently handled. */ + return 1; + + /* Dequeue the request. */ + if (lastp == NULL) + requests = runp->next; + else + lastp->next = runp->next; + if (runp == requests_tail) + requests_tail = lastp; + + return 0; +} + + +/* The thread handler. */ +static void *handle_requests (void *arg); + + +/* The main function of the async I/O handling. It enqueues requests + and if necessary starts and handles threads. */ +struct requestlist * +internal_function +__gai_enqueue_request (struct gaicb *gaicbp) +{ + struct requestlist *newp; + struct requestlist *lastp; + + /* Get the mutex. */ + pthread_mutex_lock (&__gai_requests_mutex); + + /* Get a new element for the waiting list. */ + newp = get_elem (); + if (newp == NULL) + { + pthread_mutex_unlock (&__gai_requests_mutex); + __set_errno (EAGAIN); + return NULL; + } + newp->running = 0; + newp->gaicbp = gaicbp; + newp->waiting = NULL; + newp->next = NULL; + + lastp = requests_tail; + if (requests_tail == NULL) + requests = requests_tail = newp; + else + { + requests_tail->next = newp; + requests_tail = newp; + } + + gaicbp->__return = EAI_INPROGRESS; + + /* See if we need to and are able to create a thread. */ + if (nthreads < optim.gai_threads && idle_thread_count == 0) + { + pthread_t thid; + pthread_attr_t attr; + + newp->running = 1; + + /* Make sure the thread is created detached. */ + pthread_attr_init (&attr); + pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + /* Now try to start a thread. */ + if (pthread_create (&thid, &attr, handle_requests, newp) == 0) + /* We managed to enqueue the request. All errors which can + happen now can be recognized by calls to `gai_error'. */ + ++nthreads; + else + { + if (nthreads == 0) + { + /* We cannot create a thread in the moment and there is + also no thread running. This is a problem. `errno' is + set to EAGAIN if this is only a temporary problem. */ + assert (lastp->next == newp); + lastp->next = NULL; + requests_tail = lastp; + + newp->next = freelist; + freelist = newp; + + newp = NULL; + } + else + /* We are not handling the request after all. */ + newp->running = 0; + } + } + + /* Enqueue the request in the request queue. */ + if (newp != NULL) + { + /* If there is a thread waiting for work, then let it know that we + have just given it something to do. */ + if (idle_thread_count > 0) + pthread_cond_signal (&__gai_new_request_notification); + } + + /* Release the mutex. */ + pthread_mutex_unlock (&__gai_requests_mutex); + + return newp; +} + + +static void * +__attribute__ ((noreturn)) +handle_requests (void *arg) +{ + struct requestlist *runp = (struct requestlist *) arg; + + do + { + /* If runp is NULL, then we were created to service the work queue + in general, not to handle any particular request. In that case we + skip the "do work" stuff on the first pass, and go directly to the + "get work off the work queue" part of this loop, which is near the + end. */ + if (runp == NULL) + pthread_mutex_lock (&__gai_requests_mutex); + else + { + /* Make the request. */ + struct gaicb *req = runp->gaicbp; + struct requestlist *srchp; + struct requestlist *lastp; + + req->__return = getaddrinfo (req->ar_name, req->ar_service, + req->ar_request, &req->ar_result); + + /* Get the mutex. */ + pthread_mutex_lock (&__gai_requests_mutex); + + /* Send the signal to notify about finished processing of the + request. */ + __gai_notify (runp); + + /* Now dequeue the current request. */ + lastp = NULL; + srchp = requests; + while (srchp != runp) + { + lastp = srchp; + srchp = srchp->next; + } + assert (runp->running == 1); + + if (requests_tail == runp) + requests_tail = lastp; + if (lastp == NULL) + requests = requests->next; + else + lastp->next = runp->next; + + /* Free the old element. */ + runp->next = freelist; + freelist = runp; + } + + runp = requests; + while (runp != NULL && runp->running != 0) + runp = runp->next; + + /* If the runlist is empty, then we sleep for a while, waiting for + something to arrive in it. */ + if (runp == NULL && optim.gai_idle_time >= 0) + { + struct timeval now; + struct timespec wakeup_time; + + ++idle_thread_count; + gettimeofday (&now, NULL); + wakeup_time.tv_sec = now.tv_sec + optim.gai_idle_time; + wakeup_time.tv_nsec = now.tv_usec * 1000; + if (wakeup_time.tv_nsec > 1000000000) + { + wakeup_time.tv_nsec -= 1000000000; + ++wakeup_time.tv_sec; + } + pthread_cond_timedwait (&__gai_new_request_notification, + &__gai_requests_mutex, &wakeup_time); + --idle_thread_count; + runp = requests; + while (runp != NULL && runp->running != 0) + runp = runp->next; + } + + if (runp == NULL) + --nthreads; + else + { + /* Mark the request as being worked on. */ + assert (runp->running == 0); + runp->running = 1; + + /* If we have a request to process, and there's still another in + the run list, then we need to either wake up or create a new + thread to service the request that is still in the run list. */ + if (requests != NULL) + { + /* There are at least two items in the work queue to work on. + If there are other idle threads, then we should wake them + up for these other work elements; otherwise, we should try + to create a new thread. */ + if (idle_thread_count > 0) + pthread_cond_signal (&__gai_new_request_notification); + else if (nthreads < optim.gai_threads) + { + pthread_t thid; + pthread_attr_t attr; + + /* Make sure the thread is created detached. */ + pthread_attr_init (&attr); + pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + /* Now try to start a thread. If we fail, no big deal, + because we know that there is at least one thread (us) + that is working on lookup operations. */ + if (pthread_create (&thid, &attr, handle_requests, NULL) + == 0) + ++nthreads; + } + } + } + + /* Release the mutex. */ + pthread_mutex_unlock (&__gai_requests_mutex); + } + while (runp != NULL); + + pthread_exit (NULL); +} + + +/* Free allocated resources. */ +static void +__attribute__ ((unused)) +free_res (void) +{ + size_t row; + + for (row = 0; row < pool_max_size; ++row) + free (pool[row]); + + free (pool); +} +text_set_element (__libc_subfreeres, free_res); diff -durpNa glibc-2.2.2/resolv/gai_misc.h glibc-2.2.3/resolv/gai_misc.h --- glibc-2.2.2/resolv/gai_misc.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/gai_misc.h Sat Mar 3 10:11:35 2001 @@ -0,0 +1,100 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 _GAI_MISC_H +#define _GAI_MISC_H 1 + +#include +#include + + +/* Used to synchronize. */ +struct waitlist + { + struct waitlist *next; + + pthread_cond_t *cond; + volatile int *counterp; + /* The next field is used in asynchronous `lio_listio' operations. */ + struct sigevent *sigevp; + /* XXX See requestlist, it's used to work around the broken signal + handling in Linux. */ + pid_t caller_pid; + }; + + +/* Used to queue requests.. */ +struct requestlist + { + int running; + + struct requestlist *next; + + /* Pointer to the actual data. */ + struct gaicb *gaicbp; + + /* List of waiting processes. */ + struct waitlist *waiting; + }; + +/* To customize the implementation one can use the following struct. + This implementation follows the one in Irix. */ +struct gaiinit + { + int gai_threads; /* Maximal number of threads. */ + int gai_num; /* Number of expected simultanious requests. */ + int gai_locks; /* Not used. */ + int gai_usedba; /* Not used. */ + int gai_debug; /* Not used. */ + int gai_numusers; /* Not used. */ + int gai_idle_time; /* Number of seconds before idle thread + terminates. */ + int gai_reserved; + }; + + +/* Lock for global I/O list of requests. */ +extern pthread_mutex_t __gai_requests_mutex; + + +/* Enqueue request. */ +extern struct requestlist *__gai_enqueue_request (struct gaicb *gaicbp) + internal_function; + +/* Find request on wait list. */ +extern struct requestlist *__gai_find_request (const struct gaicb *gaicbp) + internal_function; + +/* Remove request from waitlist. */ +extern int __gai_remove_request (struct gaicb *gaicbp) + internal_function; + +/* Notify initiator of request and tell this everybody listening. */ +extern void __gai_notify (struct requestlist *req) + internal_function; + +/* Notify initiator of request. */ +extern int __gai_notify_only (struct sigevent *sigev, pid_t caller_pid) + internal_function; + +/* Send the signal. */ +extern int __gai_sigqueue (int sig, const union sigval val, pid_t caller_pid) + internal_function; + +#endif /* gai_misc.h */ diff -durpNa glibc-2.2.2/resolv/gai_notify.c glibc-2.2.3/resolv/gai_notify.c --- glibc-2.2.2/resolv/gai_notify.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/gai_notify.c Sat Mar 3 10:12:03 2001 @@ -0,0 +1,100 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 +#include +#include + +#include "gai_misc.h" + + +static void * +notify_func_wrapper (void *arg) +{ + struct sigevent *sigev = arg; + sigev->sigev_notify_function (sigev->sigev_value); + return NULL; +} + + +int +internal_function +__gai_notify_only (struct sigevent *sigev, pid_t caller_pid) +{ + int result = 0; + + /* Send the signal to notify about finished processing of the request. */ + if (sigev->sigev_notify == SIGEV_THREAD) + { + /* We have to start a thread. */ + pthread_t tid; + pthread_attr_t attr, *pattr; + + pattr = (pthread_attr_t *) sigev->sigev_notify_attributes; + if (pattr == NULL) + { + pthread_attr_init (&attr); + pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + pattr = &attr; + } + + if (pthread_create (&tid, pattr, notify_func_wrapper, sigev) < 0) + result = -1; + } + else if (sigev->sigev_notify == SIGEV_SIGNAL) + /* We have to send a signal. */ + if (__gai_sigqueue (sigev->sigev_signo, sigev->sigev_value, caller_pid) + < 0) + result = -1; + + return result; +} + + +void +internal_function +__gai_notify (struct requestlist *req) +{ + struct waitlist *waitlist; + + /* Now also notify possibly waiting threads. */ + waitlist = req->waiting; + while (waitlist != NULL) + { + struct waitlist *next = waitlist->next; + + /* Decrement the counter. This is used in both cases. */ + --*waitlist->counterp; + + if (waitlist->sigevp == NULL) + pthread_cond_signal (waitlist->cond); + else + /* This is part of a asynchronous `getaddrinfo_a' operation. If + this request is the last one, send the signal. */ + if (*waitlist->counterp == 0) + { + __gai_notify_only (waitlist->sigevp, waitlist->caller_pid); + /* This is tricky. See getaddrinfo_a.c for the reason why + this works. */ + free ((void *) waitlist->counterp); + } + + waitlist = next; + } +} diff -durpNa glibc-2.2.2/resolv/gai_suspend.c glibc-2.2.3/resolv/gai_suspend.c --- glibc-2.2.2/resolv/gai_suspend.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/gai_suspend.c Sat Mar 3 10:10:15 2001 @@ -0,0 +1,147 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 +#include +#include +#include +#include + +#include "gai_misc.h" + + +int +gai_suspend (const struct gaicb *const list[], int ent, + const struct timespec *timeout) +{ + struct waitlist waitlist[ent]; + struct requestlist *requestlist[ent]; + pthread_cond_t cond = PTHREAD_COND_INITIALIZER; + int cnt; + int dummy; + int none = 1; + int result; + + /* Request the mutex. */ + pthread_mutex_lock (&__gai_requests_mutex); + + /* There is not yet a finished request. Signal the request that + we are working for it. */ + for (cnt = 0; cnt < ent; ++cnt) + if (list[cnt] != NULL && list[cnt]->__return == EAI_INPROGRESS) + { + requestlist[cnt] = __gai_find_request (list[cnt]); + + if (requestlist[cnt] != NULL) + { + waitlist[cnt].cond = &cond; + waitlist[cnt].next = requestlist[cnt]->waiting; + waitlist[cnt].counterp = &dummy; + waitlist[cnt].sigevp = NULL; + waitlist[cnt].caller_pid = 0; /* Not needed. */ + requestlist[cnt]->waiting = &waitlist[cnt]; + none = 0; + } + } + + if (none) + { + if (cnt < ent) + /* There is an entry which is finished. */ + result = 0; + else + result = EAI_ALLDONE; + } + else + { + /* There is no request done but some are still being worked on. */ + int oldstate; + + /* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancelation + points we must be careful. We added entries to the waiting lists + which we must remove. So defer cancelation for now. */ + pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate); + + if (timeout == NULL) + result = pthread_cond_wait (&cond, &__gai_requests_mutex); + else + { + /* We have to convert the relative timeout value into an + absolute time value with pthread_cond_timedwait expects. */ + struct timeval now; + struct timespec abstime; + + __gettimeofday (&now, NULL); + abstime.tv_nsec = timeout->tv_nsec + now.tv_usec * 1000; + abstime.tv_sec = timeout->tv_sec + now.tv_sec; + if (abstime.tv_nsec >= 1000000000) + { + abstime.tv_nsec -= 1000000000; + abstime.tv_sec += 1; + } + + result = pthread_cond_timedwait (&cond, &__gai_requests_mutex, + &abstime); + } + + /* Now remove the entry in the waiting list for all requests + which didn't terminate. */ + for (cnt = 0; cnt < ent; ++cnt) + if (list[cnt] != NULL && list[cnt]->__return == EAI_INPROGRESS + && requestlist[cnt] != NULL) + { + struct waitlist **listp = &requestlist[cnt]->waiting; + + /* There is the chance that we cannot find our entry anymore. + This could happen if the request terminated and restarted + again. */ + while (*listp != NULL && *listp != &waitlist[cnt]) + listp = &(*listp)->next; + + if (*listp != NULL) + *listp = (*listp)->next; + } + + /* Now it's time to restore the cancelation state. */ + pthread_setcancelstate (oldstate, NULL); + + /* Release the conditional variable. */ + if (pthread_cond_destroy (&cond) != 0) + /* This must never happen. */ + abort (); + + if (result != 0) + { + /* An error occurred. Possibly it's EINTR. We have to translate + the timeout error report of `pthread_cond_timedwait' to the + form expected from `gai_suspend'. */ + if (__builtin_expect (result, ETIMEDOUT) == ETIMEDOUT) + result = EAI_AGAIN; + else if (result == EINTR) + result = EAI_INTR; + else + result = EAI_SYSTEM; + } + } + + /* Release the mutex. */ + pthread_mutex_unlock (&__gai_requests_mutex); + + return result; +} diff -durpNa glibc-2.2.2/resolv/getaddrinfo_a.c glibc-2.2.3/resolv/getaddrinfo_a.c --- glibc-2.2.2/resolv/getaddrinfo_a.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/resolv/getaddrinfo_a.c Sat Mar 3 10:10:27 2001 @@ -0,0 +1,168 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 +#include +#include +#include +#include + +#include "gai_misc.h" + + +/* We need this special structure to handle asynchronous I/O. */ +struct async_waitlist + { + int counter; + struct sigevent sigev; + struct waitlist list[0]; + }; + + +int +getaddrinfo_a (int mode, struct gaicb *list[], int ent, struct sigevent *sig) +{ + struct sigevent defsigev; + struct requestlist *requests[ent]; + int cnt; + volatile int total = 0; + int result = 0; + + /* Check arguments. */ + if (mode != GAI_WAIT && mode != GAI_NOWAIT) + { + __set_errno (EINVAL); + return EAI_SYSTEM; + } + + if (sig == NULL) + { + defsigev.sigev_notify = SIGEV_NONE; + sig = &defsigev; + } + + /* Request the mutex. */ + pthread_mutex_lock (&__gai_requests_mutex); + + /* Now we can enqueue all requests. Since we already acquired the + mutex the enqueue function need not do this. */ + for (cnt = 0; cnt < ent; ++cnt) + if (list[cnt] != NULL) + { + requests[cnt] = __gai_enqueue_request (list[cnt]); + + if (requests[cnt] != NULL) + /* Successfully enqueued. */ + ++total; + else + /* Signal that we've seen an error. `errno' and the error code + of the gaicb will tell more. */ + result = EAI_SYSTEM; + } + else + requests[cnt] = NULL; + + if (total == 0) + { + /* We don't have anything to do except signalling if we work + asynchronously. */ + + /* Release the mutex. We do this before raising a signal since the + signal handler might do a `siglongjmp' and then the mutex is + locked forever. */ + pthread_mutex_unlock (&__gai_requests_mutex); + + if (mode == GAI_NOWAIT) + __gai_notify_only (sig, + sig->sigev_notify == SIGEV_SIGNAL ? getpid () : 0); + + return result; + } + else if (mode == GAI_WAIT) + { + pthread_cond_t cond = PTHREAD_COND_INITIALIZER; + struct waitlist waitlist[ent]; + int oldstate; + + total = 0; + for (cnt = 0; cnt < ent; ++cnt) + if (requests[cnt] != NULL) + { + waitlist[cnt].cond = &cond; + waitlist[cnt].next = requests[cnt]->waiting; + waitlist[cnt].counterp = &total; + waitlist[cnt].sigevp = NULL; + waitlist[cnt].caller_pid = 0; /* Not needed. */ + requests[cnt]->waiting = &waitlist[cnt]; + ++total; + } + + /* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancelation + points we must be careful. We added entries to the waiting lists + which we must remove. So defer cancelation for now. */ + pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate); + + while (total > 0) + pthread_cond_wait (&cond, &__gai_requests_mutex); + + /* Now it's time to restore the cancelation state. */ + pthread_setcancelstate (oldstate, NULL); + + /* Release the conditional variable. */ + if (pthread_cond_destroy (&cond) != 0) + /* This must never happen. */ + abort (); + } + else + { + struct async_waitlist *waitlist; + + waitlist = (struct async_waitlist *) + malloc (sizeof (struct async_waitlist) + + (ent * sizeof (struct waitlist))); + + if (waitlist == NULL) + result = EAI_AGAIN; + else + { + pid_t caller_pid = sig->sigev_notify == SIGEV_SIGNAL ? getpid () : 0; + total = 0; + + for (cnt = 0; cnt < ent; ++cnt) + if (requests[cnt] != NULL) + { + waitlist->list[cnt].cond = NULL; + waitlist->list[cnt].next = requests[cnt]->waiting; + waitlist->list[cnt].counterp = &waitlist->counter; + waitlist->list[cnt].sigevp = &waitlist->sigev; + waitlist->list[cnt].caller_pid = caller_pid; + requests[cnt]->waiting = &waitlist->list[cnt]; + ++total; + } + + waitlist->counter = total; + waitlist->sigev = *sig; + } + } + + /* Release the mutex. */ + pthread_mutex_unlock (&__gai_requests_mutex); + + return result; +} diff -durpNa glibc-2.2.2/resolv/inet_addr.c glibc-2.2.3/resolv/inet_addr.c --- glibc-2.2.2/resolv/inet_addr.c Wed Aug 2 14:52:32 2000 +++ glibc-2.2.3/resolv/inet_addr.c Mon Mar 26 20:53:07 2001 @@ -183,7 +183,7 @@ __inet_aton(const char *cp, struct in_ad * a.b.c (with c treated as 16 bits) * a.b (with b treated as 24 bits) */ - if (pp > res.bytes + 3 || val > 0xff) + if (pp > res.bytes + 2 || val > 0xff) goto ret_0; *pp++ = val; c = *++cp; diff -durpNa glibc-2.2.2/resolv/netdb.h glibc-2.2.3/resolv/netdb.h --- glibc-2.2.2/resolv/netdb.h Fri Feb 9 10:04:18 2001 +++ glibc-2.2.3/resolv/netdb.h Sat Apr 7 14:02:36 2001 @@ -33,6 +33,13 @@ # include #endif +#ifdef __USE_GNU +# define __need_sigevent_t +# include +# define __need_timespec +# include +#endif + #include /* Absolute file name for network data base files. */ @@ -412,23 +419,48 @@ struct addrinfo struct addrinfo *ai_next; /* Pointer to next in list. */ }; +# ifdef __USE_GNU +/* Structure used as control block for asynchronous lookup. */ +struct gaicb +{ + const char *ar_name; /* Name to look up. */ + const char *ar_service; /* Service name. */ + const struct addrinfo *ar_request; /* Additional request specification. */ + struct addrinfo *ar_result; /* Pointer to result. */ + /* The following are internal elements. */ + int __return; + int __unused[5]; +}; + +/* Lookup mode. */ +# define GAI_WAIT 0 +# define GAI_NOWAIT 1 +# endif + /* Possible values for `ai_flags' field in `addrinfo' structure. */ # define AI_PASSIVE 0x0001 /* Socket address is intended for `bind'. */ # define AI_CANONNAME 0x0002 /* Request for canonical name. */ # define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */ /* Error values for `getaddrinfo' function. */ -# define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */ -# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */ -# define EAI_AGAIN -3 /* Temporary failure in name resolution. */ -# define EAI_FAIL -4 /* Non-recoverable failure in name res. */ -# define EAI_NODATA -5 /* No address associated with NAME. */ -# define EAI_FAMILY -6 /* `ai_family' not supported. */ -# define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */ -# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */ -# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */ -# define EAI_MEMORY -10 /* Memory allocation failure. */ -# define EAI_SYSTEM -11 /* System error returned in `errno'. */ +# define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */ +# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */ +# define EAI_AGAIN -3 /* Temporary failure in name resolution. */ +# define EAI_FAIL -4 /* Non-recoverable failure in name res. */ +# define EAI_NODATA -5 /* No address associated with NAME. */ +# define EAI_FAMILY -6 /* `ai_family' not supported. */ +# define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */ +# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */ +# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */ +# define EAI_MEMORY -10 /* Memory allocation failure. */ +# define EAI_SYSTEM -11 /* System error returned in `errno'. */ +# ifdef __USE_GNU +# define EAI_INPROGRESS -100 /* Processing request in progress. */ +# define EAI_CANCELED -101 /* Request canceled. */ +# define EAI_NOTCANCELED -102 /* Request not canceled. */ +# define EAI_ALLDONE -103 /* All requests done. */ +# define EAI_INTR -104 /* Interrupted by a signal. */ +# endif # define NI_MAXHOST 1025 # define NI_MAXSERV 32 @@ -450,7 +482,7 @@ extern int getaddrinfo (__const char *__ extern void freeaddrinfo (struct addrinfo *__ai) __THROW; /* Convert error return from getaddrinfo() to a string. */ -extern char *gai_strerror (int __ecode) __THROW; +extern __const char *gai_strerror (int __ecode) __THROW; /* Translate a socket address to a location and service name. */ extern int getnameinfo (__const struct sockaddr *__restrict __sa, @@ -458,6 +490,26 @@ extern int getnameinfo (__const struct s socklen_t __hostlen, char *__restrict __serv, socklen_t __servlen, unsigned int __flags) __THROW; +# ifdef __USE_GNU +/* Enqueue ENT requests from the LIST. If MODE is GAI_WAIT wait until all + requests are handled. If WAIT is GAI_NOWAIT return immediately after + queueing the requests and signal completion according to SIG. */ +extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr], + int __ent, struct sigevent *__restrict __sig) + __THROW; + +/* Suspend execution of the thread until at least one of the ENT requests + in LIST is handled. If TIMEOUT is not a null pointer it specifies the + longest time the function keeps waiting before returning with an error. */ +extern int gai_suspend (__const struct gaicb *__const __list[], int __ent, + __const struct timespec *__timeout) __THROW; + +/* Get the error status of the request REQ. */ +extern int gai_error (struct gaicb *__req) __THROW; + +/* Cancel the requests associated with GAICBP. */ +extern int gai_cancel (struct gaicb *__gaicbp) __THROW; +# endif /* GNU */ #endif /* POSIX */ __END_DECLS diff -durpNa glibc-2.2.2/resolv/res_data.c glibc-2.2.3/resolv/res_data.c --- glibc-2.2.2/resolv/res_data.c Thu Feb 15 14:08:41 2001 +++ glibc-2.2.3/resolv/res_data.c Sat Apr 7 14:02:36 2001 @@ -143,7 +143,7 @@ fp_query(const u_char *msg, FILE *file) void fp_nquery(const u_char *msg, int len, FILE *file) { - if ((_res.options & RES_INIT) == 0 && res_init() == -1) + if ((_res.options & RES_INIT) == 0 && __res_ninit(&_res) == -1) return; res_pquery(&_res, msg, len, file); @@ -205,7 +205,7 @@ res_send_setrhook(res_send_rhook hook) { int res_isourserver(const struct sockaddr_in *inp) { - return (res_ourserver_p((const struct sockaddr_in6 *) &_res, inp)); + return (res_ourserver_p(&_res, (const struct sockaddr_in6 *) inp)); } int diff -durpNa glibc-2.2.2/resolv/tst-aton.c glibc-2.2.3/resolv/tst-aton.c --- glibc-2.2.2/resolv/tst-aton.c Mon Oct 4 13:02:16 1999 +++ glibc-2.2.3/resolv/tst-aton.c Mon Mar 26 20:53:07 2001 @@ -39,6 +39,7 @@ static struct tests { "1.2.256.4", 0, 0 }, { "1.2.3.0x100", 0, 0 }, { "323543357756889", 0, 0 }, + { "10.1.2.3.4", 0, 0}, }; diff -durpNa glibc-2.2.2/rt/Makefile glibc-2.2.3/rt/Makefile --- glibc-2.2.2/rt/Makefile Fri Dec 1 11:55:08 2000 +++ glibc-2.2.3/rt/Makefile Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999, 2000, 2001 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 @@ -53,7 +53,8 @@ include ../Rules # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)librt.so: $(common-objpfx)libc.so $(shared-thread-library) +$(objpfx)librt.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a \ + $(shared-thread-library) ifeq (yes,$(build-shared)) $(addprefix $(objpfx),$(tests)): $(objpfx)librt.so $(shared-thread-library) @@ -62,4 +63,9 @@ $(addprefix $(objpfx),$(tests)): $(objpf endif ifeq (yes,$(build-bounded)) $(tests:%=$(objpfx)%-bp): $(objpfx)librt_b.a $(bounded-thread-library) +endif + +ifeq (yes,$(build-static-nss)) +otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \ + $(resolvobjdir)/libresolv.a endif diff -durpNa glibc-2.2.2/rt/aio_misc.c glibc-2.2.3/rt/aio_misc.c --- glibc-2.2.2/rt/aio_misc.c Tue Aug 15 11:16:24 2000 +++ glibc-2.2.3/rt/aio_misc.c Wed Apr 25 14:51:02 2001 @@ -1,5 +1,5 @@ /* Handle general operations. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -115,7 +115,7 @@ get_elem (void) pool = new_tab; } - /* Allocat the new row. */ + /* Allocate the new row. */ cnt = pool_size == 0 ? optim.aio_num : ENTRIES_PER_ROW; new_row = (struct requestlist *) calloc (cnt, sizeof (struct requestlist)); @@ -414,7 +414,7 @@ __aio_enqueue_request (aiocb_union *aioc ++nthreads; else { - /* Reset the running flat. The new request is not running. */ + /* Reset the running flag. The new request is not running. */ running = newp->running = yes; if (nthreads == 0) @@ -454,6 +454,7 @@ __aio_enqueue_request (aiocb_union *aioc static void * +__attribute__ ((noreturn)) handle_fildes_io (void *arg) { pthread_t self = pthread_self (); diff -durpNa glibc-2.2.2/rt/lio_listio.c glibc-2.2.3/rt/lio_listio.c --- glibc-2.2.2/rt/lio_listio.c Wed Aug 2 14:52:35 2000 +++ glibc-2.2.3/rt/lio_listio.c Mon Mar 26 20:53:07 2001 @@ -1,5 +1,5 @@ /* Enqueue and list of read or write requests. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -19,6 +19,7 @@ Boston, MA 02111-1307, USA. */ #include +#include #include #include #include @@ -70,8 +71,8 @@ lio_listio (mode, list, nent, sig) if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP) { list[cnt]->aio_sigevent.sigev_notify = SIGEV_NONE; - requests[cnt] = __aio_enqueue_request ((aiocb_union *) list[cnt], - list[cnt]->aio_lio_opcode); + requests[cnt] = __aio_enqueue_request ((aiocb_union *) list[cnt], + list[cnt]->aio_lio_opcode); if (requests[cnt] != NULL) /* Successfully enqueued. */ @@ -81,6 +82,8 @@ lio_listio (mode, list, nent, sig) of the aiocb will tell more. */ result = -1; } + else + requests[cnt] = NULL; if (total == 0) { @@ -106,17 +109,20 @@ lio_listio (mode, list, nent, sig) total = 0; for (cnt = 0; cnt < nent; ++cnt) - if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP - && requests[cnt] != NULL) - { - waitlist[cnt].cond = &cond; - waitlist[cnt].next = requests[cnt]->waiting; - waitlist[cnt].counterp = &total; - waitlist[cnt].sigevp = NULL; - waitlist[cnt].caller_pid = 0; /* Not needed. */ - requests[cnt]->waiting = &waitlist[cnt]; - ++total; - } + { + assert (requests[cnt] == NULL || list[cnt] != NULL); + + if (requests[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP) + { + waitlist[cnt].cond = &cond; + waitlist[cnt].next = requests[cnt]->waiting; + waitlist[cnt].counterp = &total; + waitlist[cnt].sigevp = NULL; + waitlist[cnt].caller_pid = 0; /* Not needed. */ + requests[cnt]->waiting = &waitlist[cnt]; + ++total; + } + } /* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancelation points we must be careful. We added entries to the waiting lists @@ -153,17 +159,21 @@ lio_listio (mode, list, nent, sig) total = 0; for (cnt = 0; cnt < nent; ++cnt) - if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP - && requests[cnt] != NULL) - { - waitlist->list[cnt].cond = NULL; - waitlist->list[cnt].next = requests[cnt]->waiting; - waitlist->list[cnt].counterp = &waitlist->counter; - waitlist->list[cnt].sigevp = &waitlist->sigev; - waitlist->list[cnt].caller_pid = caller_pid; - requests[cnt]->waiting = &waitlist->list[cnt]; - ++total; - } + { + assert (requests[cnt] == NULL || list[cnt] != NULL); + + if (requests[cnt] != NULL + && list[cnt]->aio_lio_opcode != LIO_NOP) + { + waitlist->list[cnt].cond = NULL; + waitlist->list[cnt].next = requests[cnt]->waiting; + waitlist->list[cnt].counterp = &waitlist->counter; + waitlist->list[cnt].sigevp = &waitlist->sigev; + waitlist->list[cnt].caller_pid = caller_pid; + requests[cnt]->waiting = &waitlist->list[cnt]; + ++total; + } + } waitlist->counter = total; waitlist->sigev = *sig; diff -durpNa glibc-2.2.2/scripts/config.guess glibc-2.2.3/scripts/config.guess --- glibc-2.2.2/scripts/config.guess Wed Nov 22 10:59:52 2000 +++ glibc-2.2.3/scripts/config.guess Mon Mar 26 20:53:07 2001 @@ -894,6 +894,8 @@ EOF rm -f $dummy.c $dummy elif test "${UNAME_MACHINE}" = "s390"; then echo s390-ibm-linux && exit 0 + elif test "${UNAME_MACHINE}" = "s390x"; then + echo s390x-ibm-linux && exit 0 elif test "${UNAME_MACHINE}" = "x86_64"; then echo x86_64-unknown-linux-gnu && exit 0 elif test "${UNAME_MACHINE}" = "parisc" -o "${UNAME_MACHINE}" = "hppa"; then diff -durpNa glibc-2.2.2/scripts/config.sub glibc-2.2.3/scripts/config.sub --- glibc-2.2.2/scripts/config.sub Wed Nov 22 10:59:52 2000 +++ glibc-2.2.3/scripts/config.sub Sat Apr 7 14:02:36 2001 @@ -217,7 +217,7 @@ case $basic_machine in | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr5000 | miprs64vr5000el | mcore \ - | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b | v850 | c4x \ | thumb | d10v | d30v | fr30 | avr) basic_machine=$basic_machine-unknown ;; @@ -255,11 +255,11 @@ case $basic_machine in | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ + | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ - | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ + | f301-* | armv*-* | s390-* | s390x-* | sv1-* | t3e-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ | bs2000-* | tic54x-* | c54x-* | x86_64-*) @@ -914,7 +914,7 @@ case $basic_machine in sh3 | sh4) basic_machine=sh-unknown ;; - sparc | sparcv9) + sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) diff -durpNa glibc-2.2.2/scripts/documented.sh glibc-2.2.3/scripts/documented.sh --- glibc-2.2.2/scripts/documented.sh Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/scripts/documented.sh Mon Apr 9 16:15:45 2001 @@ -0,0 +1,102 @@ +#! /bin/sh +bindir=$1 + +VERSION=1.0 + +egrep -h @deftypefu?nx? *.texi ../linuxthreads/*.texi | +sed -e 's/@deftypefunx*[[:space:]]*\({[^{]*}\|[[:alnum:]_]*\)[[:space:]]*\([[:alnum:]_]*\).*/\2/' -e 's/@deftypefn {[^}]*function}*[[:space:]]*\({[^{]*}\|[[:alnum:]_]*\)[[:space:]]*\([[:alnum:]_]*\).*/\2/' -e '/^@/d' | +sed -e '/^obstack_/d' -e '/^\([lf]\|\)stat\(\|64\)$/d' -e '/^mknod$/d' | +sed -e '/^signbit$/d' -e '/^sigsetjmp$/d' | +sed -e '/^pthread_cleanup/d' -e '/^IFTODT$/d' -e '/^DTTOIF$/d' | +sed -e '/^__fwriting$/d' -e '/^__fwritable$/d' -e '/^__fsetlocking$/d' | +sed -e '/^__freading$/d' -e '/^__freadable$/d' -e '/^__fpurge$/d' | +sed -e '/^__fpending$/d' -e '/^__flbf$/d' -e '/^__fbufsize$/d' | +sed -e '/^alloca$/d' | +sort -u > DOCUMENTED + +nm --extern --define $bindir/libc.so $bindir/math/libm.so $bindir/rt/librt.so $bindir/linuxthreads/libpthread.so $bindir/dlfcn/libdl.so $bindir/crypt/libcrypt.so $bindir/login/libutil.so | +egrep " [TW] ([[:alpha:]]|_[[:alpha:]])" | +sed 's/\(@.*\)//' | +cut -b 12- | +sed -e '/^_IO/d' -e '/^_dl/d' -e '/^_pthread/d' -e '/^_obstack/d' | +sed -e '/^_argp/d' -e '/^_authenticate$/d' -e '/^_environ$/d' | +sed -e '/^_errno$/d' -e '/^_h_errno$/d' -e '/^_longjmp$/d' | +sed -e '/^_mcleanup$/d' -e '/^_rpc_dtablesize$/d' -e '/^_seterr_reply$/d' | +sed -e '/^_nss/d' -e '/^_setjmp$/d' | +sort -u > AVAILABLE + +cat < + + + Undocumented glibc functions + + + +

Undocumented glibc functions

+ +

The following table includes names of the function in glibc + which are not yet documented in the manual. This list is + automatically created and therefore might contain errors. Please + check the latest manual (available from the CVS archive) before + starting to work. It might also be good to let me know in + advanace on which functions you intend to work to avoid + duplication.

+ +

A few comments:

+ +
    +
  • Some functions in the list are much less important than + others. Please prioritize.
  • + +
  • Similarly for the LFS functions (those ending in 64).
  • +
+ +

The function sombody already volunteered to document are marked + with a reference to the person.

+ +
+EOF + +n=0 +diff -y --width=60 --suppress-common-lines DOCUMENTED AVAILABLE | +expand | cut -b 33- | sed '/^[[:space:]]*$/d' | +while read name; do + line="$line +" + n=$(expr $n + 1) + if [ $n -eq 4 ]; then + echo " +$line +" + line="" + n=0 + fi +done +if [ $n -gt 0 ]; then + if [ $n -eq 1 ]; then + line="$line +" + fi + if [ $n -eq 2 ]; then + line="$line +" + fi + if [ $n -eq 3 ]; then + line="$line +" + fi + echo " +$line +" +fi + +cat < + +
+
Ulrich Drepper
+Generated on $(date) with documented.sh version $VERSION + + +EOF diff -durpNa glibc-2.2.2/shlib-versions glibc-2.2.3/shlib-versions --- glibc-2.2.2/shlib-versions Tue Oct 17 14:53:55 2000 +++ glibc-2.2.3/shlib-versions Mon Apr 9 20:03:22 2001 @@ -12,6 +12,17 @@ # listed, which must be in ascending version order reading left to right # and must appear in this same order in the Versions.def file. Each listed # version subsumes all prior versions back to the previous listed version. +# +# An entry with DEFAULT in the second column gives a default third column +# to apply on matching configurations when the matching entry for a particular +# library has no third column. The defaults must precede the entries they +# apply to. + +# Configuration DEFAULT Earliest symbol set +# ------------- --------------- ------------------------------ + +s390x-.*-linux.* DEFAULT GLIBC_2.2 +cris-.*-linux.* DEFAULT GLIBC_2.2 # Configuration Library=version Earliest symbol set (optional) # ------------- --------------- ------------------------------ @@ -42,11 +53,12 @@ hppa.*-.*-.* libc=6 GLIBC_2.2 # libhurduser.so.0.0 corresponds to hurd/*.defs as of 7 May 1996. .*-.*-gnu-gnu.* libhurduser=0.0 +%ifndef USE_IN_LIBIO # libc.so.0.2 is for the Hurd alpha release 0.2. -%ifdef USE_IN_LIBIO /* experimental only! */ -.*-.*-gnu-gnu.* libc=0.2.90.libio GLIBC_2.2 -%else .*-.*-gnu-gnu.* libc=0.2 +%else /* experimental only! */ +# libc.so.0.3 is +.*-.*-gnu-gnu.* libc=0.2.91.libio GLIBC_2.2.3 %endif # The dynamic loader also requires different names. @@ -59,6 +71,8 @@ sh.*-.*-linux.* ld=ld-linux.so.2 GLIBC_ ia64-.*-linux.* ld=ld-linux-ia64.so.2 GLIBC_2.2 mips.*-.*-linux.* ld=ld.so.1 GLIBC_2.0 GLIBC_2.2 hppa.*-.*-.* ld=ld.so.1 GLIBC_2.2 +s390x-.*-linux.* ld=ld64.so.1 GLIBC_2.2 +cris-.*-linux.* ld=ld.so.1 GLIBC_2.2 # We use the ELF ABI standard name for the default. .*-.*-.* ld=ld.so.1 @@ -116,3 +130,6 @@ hppa-.*-.* libBrokenLocale=1 GLIBC_2.2 # The real-time library from POSIX.1b. mips.*-.*-linux.* librt=1 GLIBC_2.0 GLIBC_2.2 .*-.*-.* librt=1 + +# The asynchronous name lookup library. +.*-.*-.* libanl=1 diff -durpNa glibc-2.2.2/socket/sys/socket.h glibc-2.2.3/socket/sys/socket.h --- glibc-2.2.2/socket/sys/socket.h Fri Feb 9 10:04:19 2001 +++ glibc-2.2.3/socket/sys/socket.h Wed Apr 25 14:51:02 2001 @@ -128,37 +128,37 @@ extern int getpeername (int __fd, __SOCK /* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ -extern int send (int __fd, __const void *__buf, size_t __n, int __flags) +extern ssize_t send (int __fd, __const void *__buf, size_t __n, int __flags) __THROW; /* Read N bytes into BUF from socket FD. Returns the number read or -1 for errors. */ -extern int recv (int __fd, void *__buf, size_t __n, int __flags) +extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags) __THROW; /* Send N bytes of BUF on socket FD to peer at address ADDR (which is ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ -extern int sendto (int __fd, __const void *__buf, size_t __n, - int __flags, __CONST_SOCKADDR_ARG __addr, - socklen_t __addr_len) __THROW; +extern ssize_t sendto (int __fd, __const void *__buf, size_t __n, + int __flags, __CONST_SOCKADDR_ARG __addr, + socklen_t __addr_len) __THROW; /* Read N bytes into BUF through socket FD. If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of the sender, and store the actual size of the address in *ADDR_LEN. Returns the number of bytes read or -1 for errors. */ -extern int recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, - __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) +extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, + __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) __THROW; /* Send a message described MESSAGE on socket FD. Returns the number of bytes sent, or -1 for errors. */ -extern int sendmsg (int __fd, __const struct msghdr *__message, int __flags) +extern ssize_t sendmsg (int __fd, __const struct msghdr *__message, int __flags) __THROW; /* Receive a message as described by MESSAGE from socket FD. Returns the number of bytes read or -1 for errors. */ -extern int recvmsg (int __fd, struct msghdr *__message, int __flags) +extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags) __THROW; diff -durpNa glibc-2.2.2/stdio-common/tst-printf.sh glibc-2.2.3/stdio-common/tst-printf.sh --- glibc-2.2.2/stdio-common/tst-printf.sh Sun Oct 8 17:05:05 2000 +++ glibc-2.2.3/stdio-common/tst-printf.sh Mon Mar 26 20:53:08 2001 @@ -138,7 +138,7 @@ printf ("%hhu", 257) = 1 printf ("%hu", 65537) = 1 --- Should be no further output. --- EOF -cmp - ${common_objpfx}stdio-common/tst-printf.out >& /dev/null || +cmp - ${common_objpfx}stdio-common/tst-printf.out > /dev/null 2>&1 || cat <<'EOF' | %.4x: `0012' %04x: `0012' @@ -249,7 +249,7 @@ printf ("%hhu", 257) = 1 printf ("%hu", 65537) = 1 --- Should be no further output. --- EOF -cmp - ${common_objpfx}stdio-common/tst-printf.out >& /dev/null || +cmp - ${common_objpfx}stdio-common/tst-printf.out > /dev/null 2>&1 || { status=1 echo "*** output comparison failed" diff -durpNa glibc-2.2.2/stdlib/Makefile glibc-2.2.3/stdlib/Makefile --- glibc-2.2.2/stdlib/Makefile Thu Feb 15 14:08:41 2001 +++ glibc-2.2.3/stdlib/Makefile Mon Mar 26 20:53:08 2001 @@ -29,7 +29,7 @@ routines := \ abort \ bsearch qsort msort \ getenv putenv setenv secure-getenv \ - exit on_exit atexit cxa_atexit cxa_finalize \ + exit on_exit atexit cxa_atexit cxa_finalize old_atexit \ abs labs llabs \ div ldiv lldiv \ mblen mbstowcs mbtowc wcstombs wctomb \ @@ -49,12 +49,17 @@ routines := \ strtoimax strtoumax wcstoimax wcstoumax \ getcontext setcontext makecontext swapcontext +# These routines will be omitted from the libc shared object. +# Instead the static object files will be included in a special archive +# linked against when the shared library will be used. +static-only-routines = atexit + distribute := exit.h grouping.h abort-instr.h isomac.c tst-fmtmsg.sh test-srcs := tst-fmtmsg tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ test-canon test-canon2 tst-strtoll tst-environ \ tst-xpg-basename tst-random tst-bsearch tst-limits \ - tst-rand48 bug-strtod + tst-rand48 bug-strtod tst-setcontext # Several mpn functions from GNU MP are used by the strtod function. @@ -81,6 +86,10 @@ CFLAGS-strfmon.c = -D_IO_MTSAFE_IO CFLAGS-strfmon_l.c = -D_IO_MTSAFE_IO endif +ifeq (yes,$(have-protected)) +CFLAGS-atexit.c = -DHAVE_DOT_HIDDEN +endif + include ../Rules @@ -141,7 +150,7 @@ test-canon-ARGS = --test-dir=${common-ob tst-strtod-ENV = LOCPATH=$(common-objpfx)localedata # Run a test on the header files we use. -tests: $(objpfx)isomac.out +tests: $(objpfx)isomac.out ifeq (no,$(cross-compiling)) tests: $(objpfx)tst-fmtmsg.out diff -durpNa glibc-2.2.2/stdlib/atexit.c glibc-2.2.3/stdlib/atexit.c --- glibc-2.2.2/stdlib/atexit.c Mon Oct 11 11:45:10 1999 +++ glibc-2.2.3/stdlib/atexit.c Mon Mar 26 20:53:08 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1999, 2001 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 @@ -16,75 +16,24 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include #include "exit.h" +/* This is defined by newer gcc version unique for each module. */ +extern void *__dso_handle __attribute__ ((__weak__)); + + /* Register FUNC to be executed by `exit'. */ int atexit (void (*func) (void)) { - struct exit_function *new = __new_exitfn (); - - if (new == NULL) - return -1; - - new->flavor = ef_at; - new->func.at = func; - return 0; + return __cxa_atexit ((void (*) (void *)) func, NULL, + &__dso_handle == NULL ? NULL : __dso_handle); } - -/* We change global data, so we need locking. */ -__libc_lock_define_initialized (static, lock) - - -static struct exit_function_list initial; -struct exit_function_list *__exit_funcs = &initial; - -struct exit_function * -__new_exitfn (void) -{ - struct exit_function_list *l; - size_t i = 0; - - __libc_lock_lock (lock); - - for (l = __exit_funcs; l != NULL; l = l->next) - { - for (i = 0; i < l->idx; ++i) - if (l->fns[i].flavor == ef_free) - break; - if (i < l->idx) - break; - - if (l->idx < sizeof (l->fns) / sizeof (l->fns[0])) - { - i = l->idx++; - break; - } - } - - if (l == NULL) - { - l = (struct exit_function_list *) - malloc (sizeof (struct exit_function_list)); - if (l != NULL) - { - l->next = __exit_funcs; - __exit_funcs = l; - - l->idx = 1; - i = 0; - } - } - - /* Mark entry as used, but we don't know the flavor now. */ - if (l != NULL) - l->fns[i].flavor = ef_us; - - __libc_lock_unlock (lock); - - return l == NULL ? NULL : &l->fns[i]; -} +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tatexit"); +#endif diff -durpNa glibc-2.2.2/stdlib/cxa_atexit.c glibc-2.2.3/stdlib/cxa_atexit.c --- glibc-2.2.2/stdlib/cxa_atexit.c Sat Jan 13 10:48:50 2001 +++ glibc-2.2.3/stdlib/cxa_atexit.c Mon Mar 26 20:53:08 2001 @@ -16,6 +16,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include "exit.h" @@ -35,4 +36,58 @@ __cxa_atexit (void (*func) (void *), voi new->func.cxa.arg = arg; new->func.cxa.dso_handle = d; return 0; +} + + +/* We change global data, so we need locking. */ +__libc_lock_define_initialized (static, lock) + + +static struct exit_function_list initial; +struct exit_function_list *__exit_funcs = &initial; + +struct exit_function * +__new_exitfn (void) +{ + struct exit_function_list *l; + size_t i = 0; + + __libc_lock_lock (lock); + + for (l = __exit_funcs; l != NULL; l = l->next) + { + for (i = 0; i < l->idx; ++i) + if (l->fns[i].flavor == ef_free) + break; + if (i < l->idx) + break; + + if (l->idx < sizeof (l->fns) / sizeof (l->fns[0])) + { + i = l->idx++; + break; + } + } + + if (l == NULL) + { + l = (struct exit_function_list *) + malloc (sizeof (struct exit_function_list)); + if (l != NULL) + { + l->next = __exit_funcs; + __exit_funcs = l; + + l->idx = 1; + i = 0; + } + } + + /* Mark entry as used, but we don't know the flavor now. */ + if (l != NULL) + l->fns[i].flavor = ef_us; + + __libc_lock_unlock (lock); + + return l == NULL ? NULL : &l->fns[i]; } diff -durpNa glibc-2.2.2/stdlib/isomac.c glibc-2.2.3/stdlib/isomac.c --- glibc-2.2.2/stdlib/isomac.c Mon Sep 20 11:01:56 1999 +++ glibc-2.2.3/stdlib/isomac.c Sat Apr 7 14:02:36 2001 @@ -1,5 +1,5 @@ /* Check system header files for ISO 9899:1990 (ISO C) compliance. - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jens Schweikhardt , 1996. @@ -52,7 +52,7 @@ preprocessor has something similar to gcc's -dM option. Tune PRINT_MACROS in this case. This program assumes headers are found under /usr/include and that there is a writable /tmp directory. - Tune SYSTEM_INCLUDE and TMPFILE if your system differs. + Tune SYSTEM_INCLUDE if your system differs. #define BROKEN_SYSTEM if system(NULL) bombs -- one more violation of ISO C, by the way. @@ -75,9 +75,10 @@ #include #include -#define TMPFILE "/tmp/macros" #define HEADER_MAX 256 +static const char *macrofile; + /* ISO C header names including Amendment 1 (without ".h" suffix). */ static char *header[] = { @@ -176,7 +177,7 @@ static char *macros[] = /* Format string to build command to invoke compiler. */ static const char fmt[] = "\ echo \"#include <%s>\" |\ -%s -E -dM -ansi -pedantic %s -D_LIBC -I. \ +%s -E -dM -ansi -pedantic %s -D_LIBC -D_ISOMAC -I. \ -isystem `%s --print-prog-name=include` - 2> /dev/null > %s"; @@ -247,8 +248,10 @@ get_null_defines (void) FILE *input; int first = 1; + macrofile = tmpnam (NULL); + command = malloc (sizeof fmt + sizeof "/dev/null" + 2 * strlen (CC) - + strlen (INC) + strlen (TMPFILE)); + + strlen (INC) + strlen (macrofile)); if (command == NULL) { @@ -256,7 +259,7 @@ get_null_defines (void) exit (1); } - sprintf (command, fmt, "/dev/null", CC, INC, CC, TMPFILE); + sprintf (command, fmt, "/dev/null", CC, INC, CC, macrofile); if (system (command)) { @@ -264,11 +267,11 @@ get_null_defines (void) return NULL; } free (command); - input = fopen (TMPFILE, "r"); + input = fopen (macrofile, "r"); if (input == NULL) { - printf ("Could not read %s: ", TMPFILE); + printf ("Could not read %s: ", macrofile); perror (NULL); return NULL; } @@ -321,7 +324,7 @@ get_null_defines (void) } result[result_len] = NULL; fclose (input); - remove (TMPFILE); + remove (macrofile); return (const char **) result; } @@ -335,7 +338,7 @@ check_header (const char *file_name, con int result = 0; command = malloc (sizeof fmt + strlen (file_name) + 2 * strlen (CC) - + strlen (INC) + strlen (TMPFILE)); + + strlen (INC) + strlen (macrofile)); if (command == NULL) { @@ -344,7 +347,7 @@ check_header (const char *file_name, con } puts (file_name); - sprintf (command, fmt, file_name, CC, INC, CC, TMPFILE); + sprintf (command, fmt, file_name, CC, INC, CC, macrofile); if (system (command)) { @@ -352,11 +355,11 @@ check_header (const char *file_name, con result = 1; } free (command); - input = fopen (TMPFILE, "r"); + input = fopen (macrofile, "r"); if (input == NULL) { - printf ("Could not read %s: ", TMPFILE); + printf ("Could not read %s: ", macrofile); perror (NULL); return 1; } @@ -430,7 +433,7 @@ check_header (const char *file_name, con } } fclose (input); - remove (TMPFILE); + remove (macrofile); return result; } diff -durpNa glibc-2.2.2/stdlib/longlong.h glibc-2.2.3/stdlib/longlong.h --- glibc-2.2.2/stdlib/longlong.h Fri Feb 11 15:48:58 2000 +++ glibc-2.2.3/stdlib/longlong.h Mon Mar 26 20:53:08 2001 @@ -1,5 +1,5 @@ /* longlong.h -- definitions for mixed size 32/64 bit arithmetic. - Copyright (C) 1991,92,94,95,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. This definition file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -108,8 +108,8 @@ #if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add %1,%4,%5 - addc %0,%2,%3" \ + __asm__ ("add %1,%4,%5\n" \ + "addc %0,%2,%3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%r" ((USItype) (ah)), \ @@ -117,8 +117,8 @@ "%r" ((USItype) (al)), \ "rI" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub %1,%4,%5 - subc %0,%2,%3" \ + __asm__ ("sub %1,%4,%5\n" \ + "subc %0,%2,%3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "r" ((USItype) (ah)), \ @@ -175,8 +175,8 @@ extern UDItype __udiv_qrnnd (UDItype *, #if defined (__arc__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add.f %1, %4, %5 - adc %0, %2, %3" \ + __asm__ ("add.f %1, %4, %5\n" \ + "adc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%r" ((USItype) (ah)), \ @@ -184,8 +184,8 @@ extern UDItype __udiv_qrnnd (UDItype *, "%r" ((USItype) (al)), \ "rIJ" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub.f %1, %4, %5 - sbc %0, %2, %3" \ + __asm__ ("sub.f %1, %4, %5\n" \ + "sbc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "r" ((USItype) (ah)), \ @@ -206,8 +206,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__arm__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("adds %1, %4, %5 - adc %0, %2, %3" \ + __asm__ ("adds %1, %4, %5\n" \ + "adc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%r" ((USItype) (ah)), \ @@ -215,8 +215,8 @@ UDItype __umulsidi3 (USItype, USItype); "%r" ((USItype) (al)), \ "rI" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subs %1, %4, %5 - sbc %0, %2, %3" \ + __asm__ ("subs %1, %4, %5\n" \ + "sbc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "r" ((USItype) (ah)), \ @@ -225,19 +225,19 @@ UDItype __umulsidi3 (USItype, USItype); "rI" ((USItype) (bl))) #define umul_ppmm(xh, xl, a, b) \ {register USItype __t0, __t1, __t2; \ - __asm__ ("%@ Inlined umul_ppmm - mov %2, %5, lsr #16 - mov %0, %6, lsr #16 - bic %3, %5, %2, lsl #16 - bic %4, %6, %0, lsl #16 - mul %1, %3, %4 - mul %4, %2, %4 - mul %3, %0, %3 - mul %0, %2, %0 - adds %3, %4, %3 - addcs %0, %0, #65536 - adds %1, %1, %3, lsl #16 - adc %0, %0, %3, lsr #16" \ + __asm__ ("%@ Inlined umul_ppmm\n" \ + "mov %2, %5, lsr #16\n" \ + "mov %0, %6, lsr #16\n" \ + "bic %3, %5, %2, lsl #16\n" \ + "bic %4, %6, %0, lsl #16\n" \ + "mul %1, %3, %4\n" \ + "mul %4, %2, %4\n" \ + "mul %3, %0, %3\n" \ + "mul %0, %2, %0\n" \ + "adds %3, %4, %3\n" \ + "addcs %0, %0, #65536\n" \ + "adds %1, %1, %3, lsl #16\n" \ + "adc %0, %0, %3, lsr #16" \ : "=&r" ((USItype) (xh)), \ "=r" ((USItype) (xl)), \ "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ @@ -277,8 +277,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__gmicro__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add.w %5,%1 - addx %3,%0" \ + __asm__ ("add.w %5,%1\n" \ + "addx %3,%0" \ : "=g" ((USItype) (sh)), \ "=&g" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -286,8 +286,8 @@ UDItype __umulsidi3 (USItype, USItype); "%1" ((USItype) (al)), \ "g" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub.w %5,%1 - subx %3,%0" \ + __asm__ ("sub.w %5,%1\n" \ + "subx %3,%0" \ : "=g" ((USItype) (sh)), \ "=&g" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ @@ -316,8 +316,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__hppa) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add %4,%5,%1 - addc %2,%3,%0" \ + __asm__ ("add %4,%5,%1\n" \ + "addc %2,%3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%rM" ((USItype) (ah)), \ @@ -325,8 +325,8 @@ UDItype __umulsidi3 (USItype, USItype); "%rM" ((USItype) (al)), \ "rM" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub %4,%5,%1 - subb %2,%3,%0" \ + __asm__ ("sub %4,%5,%1\n" \ + "subb %2,%3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "rM" ((USItype) (ah)), \ @@ -354,25 +354,25 @@ UDItype __umulsidi3 (USItype, USItype); #endif #define UDIV_TIME 40 #define count_leading_zeros(count, x) \ - do { \ - USItype __tmp; \ - __asm__ ( \ - "ldi 1,%0 - extru,= %1,15,16,%%r0 ; Bits 31..16 zero? - extru,tr %1,15,16,%1 ; No. Shift down, skip add. - ldo 16(%0),%0 ; Yes. Perform add. - extru,= %1,23,8,%%r0 ; Bits 15..8 zero? - extru,tr %1,23,8,%1 ; No. Shift down, skip add. - ldo 8(%0),%0 ; Yes. Perform add. - extru,= %1,27,4,%%r0 ; Bits 7..4 zero? - extru,tr %1,27,4,%1 ; No. Shift down, skip add. - ldo 4(%0),%0 ; Yes. Perform add. - extru,= %1,29,2,%%r0 ; Bits 3..2 zero? - extru,tr %1,29,2,%1 ; No. Shift down, skip add. - ldo 2(%0),%0 ; Yes. Perform add. - extru %1,30,1,%1 ; Extract bit 1. - sub %0,%1,%0 ; Subtract it. - " : "=r" (count), "=r" (__tmp) : "1" (x)); \ + do { \ + USItype __tmp; \ + __asm__ ( \ + "ldi 1,%0\n" \ + "extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \ + "extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n" \ + "ldo 16(%0),%0 ; Yes. Perform add.\n" \ + "extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \ + "extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n" \ + "ldo 8(%0),%0 ; Yes. Perform add.\n" \ + "extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \ + "extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n" \ + "ldo 4(%0),%0 ; Yes. Perform add.\n" \ + "extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \ + "extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n" \ + "ldo 2(%0),%0 ; Yes. Perform add.\n" \ + "extru %1,30,1,%1 ; Extract bit 1.\n" \ + "sub %0,%1,%0 ; Subtract it." \ + : "=r" (count), "=r" (__tmp) : "1" (x)); \ } while (0) #endif @@ -419,8 +419,8 @@ UDItype __umulsidi3 (USItype, USItype); #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addl %5,%1 - adcl %3,%0" \ + __asm__ ("addl %5,%1\n" \ + "adcl %3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -428,8 +428,8 @@ UDItype __umulsidi3 (USItype, USItype); "%1" ((USItype) (al)), \ "g" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subl %5,%1 - sbbl %3,%0" \ + __asm__ ("subl %5,%1\n" \ + "sbbl %3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ @@ -472,7 +472,7 @@ UDItype __umulsidi3 (USItype, USItype); { \ DItype __ll; \ struct {USItype __l, __h;} __i; \ - } __a, __b, __s; \ + } __a, __b, __s; \ __a.__i.__l = (al); \ __a.__i.__h = (ah); \ __b.__i.__l = (bl); \ @@ -489,7 +489,7 @@ UDItype __umulsidi3 (USItype, USItype); { \ DItype __ll; \ struct {USItype __l, __h;} __i; \ - } __a, __b, __s; \ + } __a, __b, __s; \ __a.__i.__l = (al); \ __a.__i.__h = (ah); \ __b.__i.__l = (bl); \ @@ -525,9 +525,9 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__M32R__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ /* The cmp clears the condition bit. */ \ - __asm__ ("cmp %0,%0 - addx %%5,%1 - addx %%3,%0" \ + __asm__ ("cmp %0,%0\n" \ + "addx %%5,%1\n" \ + "addx %%3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -537,9 +537,9 @@ UDItype __umulsidi3 (USItype, USItype); : "cbit") #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ /* The cmp clears the condition bit. */ \ - __asm__ ("cmp %0,%0 - subx %5,%1 - subx %3,%0" \ + __asm__ ("cmp %0,%0\n" \ + "subx %5,%1\n" \ + "subx %3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ @@ -551,8 +551,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__mc68000__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add%.l %5,%1 - addx%.l %3,%0" \ + __asm__ ("add%.l %5,%1\n" \ + "addx%.l %3,%0" \ : "=d" ((USItype) (sh)), \ "=&d" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -560,8 +560,8 @@ UDItype __umulsidi3 (USItype, USItype); "%1" ((USItype) (al)), \ "g" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub%.l %5,%1 - subx%.l %3,%0" \ + __asm__ ("sub%.l %5,%1\n" \ + "subx%.l %3,%0" \ : "=d" ((USItype) (sh)), \ "=&d" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ @@ -602,32 +602,32 @@ UDItype __umulsidi3 (USItype, USItype); #if !defined(__mcf5200__) /* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX. */ #define umul_ppmm(xh, xl, a, b) \ - __asm__ ("| Inlined umul_ppmm - move%.l %2,%/d0 - move%.l %3,%/d1 - move%.l %/d0,%/d2 - swap %/d0 - move%.l %/d1,%/d3 - swap %/d1 - move%.w %/d2,%/d4 - mulu %/d3,%/d4 - mulu %/d1,%/d2 - mulu %/d0,%/d3 - mulu %/d0,%/d1 - move%.l %/d4,%/d0 - eor%.w %/d0,%/d0 - swap %/d0 - add%.l %/d0,%/d2 - add%.l %/d3,%/d2 - jcc 1f - add%.l %#65536,%/d1 -1: swap %/d2 - moveq %#0,%/d0 - move%.w %/d2,%/d0 - move%.w %/d4,%/d2 - move%.l %/d2,%1 - add%.l %/d1,%/d0 - move%.l %/d0,%0" \ + __asm__ ("| Inlined umul_ppmm\n" \ +" move%.l %2,%/d0\n" \ +" move%.l %3,%/d1\n" \ +" move%.l %/d0,%/d2\n" \ +" swap %/d0\n" \ +" move%.l %/d1,%/d3\n" \ +" swap %/d1\n" \ +" move%.w %/d2,%/d4\n" \ +" mulu %/d3,%/d4\n" \ +" mulu %/d1,%/d2\n" \ +" mulu %/d0,%/d3\n" \ +" mulu %/d0,%/d1\n" \ +" move%.l %/d4,%/d0\n" \ +" eor%.w %/d0,%/d0\n" \ +" swap %/d0\n" \ +" add%.l %/d0,%/d2\n" \ +" add%.l %/d3,%/d2\n" \ +" jcc 1f\n" \ +" add%.l %#65536,%/d1\n" \ +"1: swap %/d2\n" \ +" moveq %#0,%/d0\n" \ +" move%.w %/d2,%/d0\n" \ +" move%.w %/d4,%/d2\n" \ +" move%.l %/d2,%1\n" \ +" add%.l %/d1,%/d0\n" \ +" move%.l %/d0,%0" \ : "=g" ((USItype) (xh)), \ "=g" ((USItype) (xl)) \ : "g" ((USItype) (a)), \ @@ -653,8 +653,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__m88000__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addu.co %1,%r4,%r5 - addu.ci %0,%r2,%r3" \ + __asm__ ("addu.co %1,%r4,%r5\n" \ + "addu.ci %0,%r2,%r3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%rJ" ((USItype) (ah)), \ @@ -662,8 +662,8 @@ UDItype __umulsidi3 (USItype, USItype); "%rJ" ((USItype) (al)), \ "rJ" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subu.co %1,%r4,%r5 - subu.ci %0,%r2,%r3" \ + __asm__ ("subu.co %1,%r4,%r5\n" \ + "subu.ci %0,%r2,%r3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "rJ" ((USItype) (ah)), \ @@ -751,10 +751,10 @@ UDItype __umulsidi3 (USItype, USItype); (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) #define count_trailing_zeros(count,x) \ do { - __asm__ ("ffsd %2,%0" \ - : "=r" ((USItype) (count)) \ - : "0" ((USItype) 0), \ - "r" ((USItype) (x))); \ + __asm__ ("ffsd %2,%0" \ + : "=r" ((USItype) (count)) \ + : "0" ((USItype) 0), \ + "r" ((USItype) (x))); \ } while (0) #endif /* __ns32000__ */ @@ -880,8 +880,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__pyr__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addw %5,%1 - addwc %3,%0" \ + __asm__ ("addw %5,%1\n" \ + "addwc %3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -889,8 +889,8 @@ UDItype __umulsidi3 (USItype, USItype); "%1" ((USItype) (al)), \ "g" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subw %5,%1 - subwb %3,%0" \ + __asm__ ("subw %5,%1\n" \ + "subwb %3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ @@ -902,8 +902,8 @@ UDItype __umulsidi3 (USItype, USItype); ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ - __asm__ ("movw %1,%R0 - uemul %2,%0" \ + __asm__ ("movw %1,%R0\n" \ + "uemul %2,%0" \ : "=&r" (__xx.__ll) \ : "g" ((USItype) (u)), \ "g" ((USItype) (v))); \ @@ -912,8 +912,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("a %1,%5 - ae %0,%3" \ + __asm__ ("a %1,%5\n" \ + "ae %0,%3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -921,8 +921,8 @@ UDItype __umulsidi3 (USItype, USItype); "%1" ((USItype) (al)), \ "r" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("s %1,%5 - se %0,%3" \ + __asm__ ("s %1,%5\n" \ + "se %0,%3" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ @@ -933,26 +933,26 @@ UDItype __umulsidi3 (USItype, USItype); do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ( \ - "s r2,r2 - mts r10,%2 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - m r2,%3 - cas %0,r2,r0 - mfs r10,%1" \ + "s r2,r2\n" \ + "mts r10,%2\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "m r2,%3\n" \ + "cas %0,r2,r0\n" \ + "mfs r10,%1" \ : "=r" ((USItype) (ph)), \ "=r" ((USItype) (pl)) \ : "%r" (__m0), \ @@ -982,9 +982,9 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__sh2__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ __asm__ ( \ - "dmulu.l %2,%3 - sts macl,%1 - sts mach,%0" \ + "dmulu.l %2,%3\n" \ + "sts macl,%1\n" \ + "sts mach,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ @@ -996,8 +996,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__sparc__) && !defined(__arch64__) \ && !defined(__sparcv9) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addcc %r4,%5,%1 - addx %r2,%3,%0" \ + __asm__ ("addcc %r4,%5,%1\n" \ + "addx %r2,%3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "%rJ" ((USItype) (ah)), \ @@ -1006,8 +1006,8 @@ UDItype __umulsidi3 (USItype, USItype); "rI" ((USItype) (bl)) \ __CLOBBER_CC) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subcc %r4,%5,%1 - subx %r2,%3,%0" \ + __asm__ ("subcc %r4,%5,%1\n" \ + "subx %r2,%3,%0" \ : "=r" ((USItype) (sh)), \ "=&r" ((USItype) (sl)) \ : "rJ" ((USItype) (ah)), \ @@ -1040,45 +1040,45 @@ UDItype __umulsidi3 (USItype, USItype); : "r" ((USItype) (u)), \ "r" ((USItype) (v))) #define udiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("! Inlined udiv_qrnnd - wr %%g0,%2,%%y ! Not a delayed write for sparclite - tst %%g0 - divscc %3,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%%g1 - divscc %%g1,%4,%0 - rd %%y,%1 - bl,a 1f - add %1,%4,%1 -1: ! End of inline udiv_qrnnd" \ + __asm__ ("! Inlined udiv_qrnnd\n" \ +" wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \ +" tst %%g0\n" \ +" divscc %3,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%0\n" \ +" rd %%y,%1\n" \ +" bl,a 1f\n" \ +" add %1,%4,%1\n" \ +"1: ! End of inline udiv_qrnnd" \ : "=r" ((USItype) (q)), \ "=r" ((USItype) (r)) \ : "r" ((USItype) (n1)), \ @@ -1087,10 +1087,10 @@ UDItype __umulsidi3 (USItype, USItype); : "g1" __AND_CLOBBER_CC) #define UDIV_TIME 37 #define count_leading_zeros(count, x) \ - do { \ - __asm__ ("scan %1,1,%0" \ - : "=r" ((USItype) (count)) \ - : "r" ((USItype) (x))); \ + do { \ + __asm__ ("scan %1,1,%0" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x))); \ } while (0) /* Early sparclites return 63 for an argument of 0, but they warn that future implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 @@ -1099,46 +1099,46 @@ UDItype __umulsidi3 (USItype, USItype); /* SPARC without integer multiplication and divide instructions. (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */ #define umul_ppmm(w1, w0, u, v) \ - __asm__ ("! Inlined umul_ppmm - wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr - sra %3,31,%%o5 ! Don't move this insn - and %2,%%o5,%%o5 ! Don't move this insn - andcc %%g0,0,%%g1 ! Don't move this insn - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,0,%%g1 - add %%g1,%%o5,%0 - rd %%y,%1" \ + __asm__ ("! Inlined umul_ppmm\n" \ +" wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n"\ +" sra %3,31,%%o5 ! Don't move this insn\n" \ +" and %2,%%o5,%%o5 ! Don't move this insn\n" \ +" andcc %%g0,0,%%g1 ! Don't move this insn\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,0,%%g1\n" \ +" add %%g1,%%o5,%0\n" \ +" rd %%y,%1" \ : "=r" ((USItype) (w1)), \ "=r" ((USItype) (w0)) \ : "%rI" ((USItype) (u)), \ @@ -1146,32 +1146,32 @@ UDItype __umulsidi3 (USItype, USItype); : "g1", "o5" __AND_CLOBBER_CC) #define UMUL_TIME 39 /* 39 instructions */ /* It's quite necessary to add this much assembler for the sparc. - The default udiv_qrnnd (in C) is more than 10 times slower! */ + The default udiv_qrnnd (in C) is more than 10 times slower! */ #define udiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("! Inlined udiv_qrnnd - mov 32,%%g1 - subcc %1,%2,%%g0 -1: bcs 5f - addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb - sub %1,%2,%1 ! this kills msb of n - addx %1,%1,%1 ! so this can't give carry - subcc %%g1,1,%%g1 -2: bne 1b - subcc %1,%2,%%g0 - bcs 3f - addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb - b 3f - sub %1,%2,%1 ! this kills msb of n -4: sub %1,%2,%1 -5: addxcc %1,%1,%1 - bcc 2b - subcc %%g1,1,%%g1 -! Got carry from n. Subtract next step to cancel this carry. - bne 4b - addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb - sub %1,%2,%1 -3: xnor %0,0,%0 - ! End of inline udiv_qrnnd" \ + __asm__ ("! Inlined udiv_qrnnd\n" \ +" mov 32,%%g1\n" \ +" subcc %1,%2,%%g0\n" \ +"1: bcs 5f\n" \ +" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \ +" sub %1,%2,%1 ! this kills msb of n\n" \ +" addx %1,%1,%1 ! so this can't give carry\n" \ +" subcc %%g1,1,%%g1\n" \ +"2: bne 1b\n" \ +" subcc %1,%2,%%g0\n" \ +" bcs 3f\n" \ +" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \ +" b 3f\n" \ +" sub %1,%2,%1 ! this kills msb of n\n" \ +"4: sub %1,%2,%1\n" \ +"5: addxcc %1,%1,%1\n" \ +" bcc 2b\n" \ +" subcc %%g1,1,%%g1\n" \ +"! Got carry from n. Subtract next step to cancel this carry.\n" \ +" bne 4b\n" \ +" addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n" \ +" sub %1,%2,%1\n" \ +"3: xnor %0,0,%0\n" \ +" ! End of inline udiv_qrnnd" \ : "=&r" ((USItype) (q)), \ "=&r" ((USItype) (r)) \ : "r" ((USItype) (d)), \ @@ -1185,58 +1185,58 @@ UDItype __umulsidi3 (USItype, USItype); #if ((defined (__sparc__) && defined (__arch64__)) \ || defined (__sparcv9)) && W_TYPE_SIZE == 64 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addcc %r4,%5,%1 - add %r2,%3,%0 - bcs,a,pn %%xcc, 1f - add %0, 1, %0 - 1:" \ - : "=r" ((UDItype)(sh)), \ - "=&r" ((UDItype)(sl)) \ - : "%rJ" ((UDItype)(ah)), \ - "rI" ((UDItype)(bh)), \ - "%rJ" ((UDItype)(al)), \ - "rI" ((UDItype)(bl)) \ + __asm__ ("addcc %r4,%5,%1\n" \ + "add %r2,%3,%0\n" \ + "bcs,a,pn %%xcc, 1f\n" \ + "add %0, 1, %0\n" \ + "1:" \ + : "=r" ((UDItype)(sh)), \ + "=&r" ((UDItype)(sl)) \ + : "%rJ" ((UDItype)(ah)), \ + "rI" ((UDItype)(bh)), \ + "%rJ" ((UDItype)(al)), \ + "rI" ((UDItype)(bl)) \ __CLOBBER_CC) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subcc %r4,%5,%1 - sub %r2,%3,%0 - bcs,a,pn %%xcc, 1f - sub %0, 1, %0 - 1:" \ - : "=r" ((UDItype)(sh)), \ - "=&r" ((UDItype)(sl)) \ - : "rJ" ((UDItype)(ah)), \ - "rI" ((UDItype)(bh)), \ - "rJ" ((UDItype)(al)), \ - "rI" ((UDItype)(bl)) \ +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subcc %r4,%5,%1\n" \ + "sub %r2,%3,%0\n" \ + "bcs,a,pn %%xcc, 1f\n" \ + "sub %0, 1, %0\n" \ + "1:" \ + : "=r" ((UDItype)(sh)), \ + "=&r" ((UDItype)(sl)) \ + : "rJ" ((UDItype)(ah)), \ + "rI" ((UDItype)(bh)), \ + "rJ" ((UDItype)(al)), \ + "rI" ((UDItype)(bl)) \ __CLOBBER_CC) #define umul_ppmm(wh, wl, u, v) \ do { \ UDItype tmp1, tmp2, tmp3, tmp4; \ __asm__ __volatile__ ( \ - "srl %7,0,%3 - mulx %3,%6,%1 - srlx %6,32,%2 - mulx %2,%3,%4 - sllx %4,32,%5 - srl %6,0,%3 - sub %1,%5,%5 - srlx %5,32,%5 - addcc %4,%5,%4 - srlx %7,32,%5 - mulx %3,%5,%3 - mulx %2,%5,%5 - sethi %%hi(0x80000000),%2 - addcc %4,%3,%4 - srlx %4,32,%4 - add %2,%2,%2 - movcc %%xcc,%%g0,%2 - addcc %5,%4,%5 - sllx %3,32,%3 - add %1,%3,%1 - add %5,%2,%0" \ + "srl %7,0,%3\n" \ + "mulx %3,%6,%1\n" \ + "srlx %6,32,%2\n" \ + "mulx %2,%3,%4\n" \ + "sllx %4,32,%5\n" \ + "srl %6,0,%3\n" \ + "sub %1,%5,%5\n" \ + "srlx %5,32,%5\n" \ + "addcc %4,%5,%4\n" \ + "srlx %7,32,%5\n" \ + "mulx %3,%5,%3\n" \ + "mulx %2,%5,%5\n" \ + "sethi %%hi(0x80000000),%2\n" \ + "addcc %4,%3,%4\n" \ + "srlx %4,32,%4\n" \ + "add %2,%2,%2\n" \ + "movcc %%xcc,%%g0,%2\n" \ + "addcc %5,%4,%5\n" \ + "sllx %3,32,%3\n" \ + "add %1,%3,%1\n" \ + "add %5,%2,%0" \ : "=r" ((UDItype)(wh)), \ "=&r" ((UDItype)(wl)), \ "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4) \ @@ -1250,8 +1250,8 @@ UDItype __umulsidi3 (USItype, USItype); #if defined (__vax__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addl2 %5,%1 - adwc %3,%0" \ + __asm__ ("addl2 %5,%1\n" \ + "adwc %3,%0" \ : "=g" ((USItype) (sh)), \ "=&g" ((USItype) (sl)) \ : "%0" ((USItype) (ah)), \ @@ -1259,8 +1259,8 @@ UDItype __umulsidi3 (USItype, USItype); "%1" ((USItype) (al)), \ "g" ((USItype) (bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subl2 %5,%1 - sbwc %3,%0" \ + __asm__ ("subl2 %5,%1\n" \ + "sbwc %3,%0" \ : "=g" ((USItype) (sh)), \ "=&g" ((USItype) (sl)) \ : "0" ((USItype) (ah)), \ diff -durpNa glibc-2.2.2/stdlib/msort.c glibc-2.2.3/stdlib/msort.c --- glibc-2.2.2/stdlib/msort.c Mon Feb 28 12:34:07 2000 +++ glibc-2.2.3/stdlib/msort.c Mon Mar 26 20:53:08 2001 @@ -1,6 +1,6 @@ /* An alternative to qsort, with an identical interface. This file is part of the GNU C Library. - Copyright (C) 1992, 1995-1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1992, 1995-1997, 1999, 2000, 2001 Free Software Foundation, Inc. Written by Mike Haertel, September 1988. The GNU C Library is free software; you can redistribute it and/or @@ -91,8 +91,12 @@ qsort (void *b, size_t n, size_t s, __co const size_t size = n * s; if (size < 1024) - /* The temporary array is small, so put it on the stack. */ - msort_with_tmp (b, n, s, cmp, __alloca (size)); + { + void *buf = __alloca (size); + + /* The temporary array is small, so put it on the stack. */ + msort_with_tmp (b, n, s, cmp, buf); + } else { /* We should avoid allocating too much memory since this might diff -durpNa glibc-2.2.2/stdlib/old_atexit.c glibc-2.2.3/stdlib/old_atexit.c --- glibc-2.2.2/stdlib/old_atexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/stdlib/old_atexit.c Mon Feb 26 09:46:27 2001 @@ -0,0 +1,8 @@ +#include + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2) +# define atexit __dyn_atexit +# include "atexit.c" +# undef atexit +compat_symbol (libc, __dyn_atexit, atexit, GLIBC_2_0); +#endif diff -durpNa glibc-2.2.2/stdlib/tst-setcontext.c glibc-2.2.3/stdlib/tst-setcontext.c --- glibc-2.2.2/stdlib/tst-setcontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/stdlib/tst-setcontext.c Sat Apr 7 14:02:36 2001 @@ -0,0 +1,140 @@ +/* Copyright (C) 2001 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. */ + +#include +#include +#include +#include + +static ucontext_t ctx[3]; + +static int was_in_f1; +static int was_in_f2; + +static char st2[8192]; + +static void +f1 (long a0, long a1, long a2, long a3) +{ + printf ("start f1(a0=%lx,a1=%lx,a2=%lx,a3=%lx)\n", a0, a1, a2, a3); + + if (a0 != 1 || a1 != 2 || a2 != 3 || a3 != -4) + { + puts ("arg mismatch"); + exit (-1); + } + + if (swapcontext (&ctx[1], &ctx[2]) != 0) + { + printf ("%s: swapcontext: %m\n", __FUNCTION__); + exit (1); + } + puts ("finish f1"); + was_in_f1 = 1; +} + +static void +f2 (void) +{ + char on_stack[1]; + + puts ("start f2"); + + printf ("&on_stack=%p\n", on_stack); + if (on_stack < st2 || on_stack >= st2 + sizeof (st2)) + { + printf ("%s: memory stack is not where it belongs!", __FUNCTION__); + exit (1); + } + + if (swapcontext (&ctx[2], &ctx[1]) != 0) + { + printf ("%s: swapcontext: %m\n", __FUNCTION__); + exit (1); + } + puts ("finish f2"); + was_in_f2 = 1; +} + +volatile int global; + +int +main (void) +{ + char st1[8192]; + + puts ("making contexts"); + if (getcontext (&ctx[1]) != 0) + { + if (errno == ENOSYS) + exit (0); + + printf ("%s: getcontext: %m\n", __FUNCTION__); + exit (1); + } + + /* Play some tricks with this context. */ + if (++global == 1) + if (setcontext (&ctx[1]) != 0) + { + printf ("%s: setcontext: %m\n", __FUNCTION__); + exit (1); + } + if (global != 2) + { + printf ("%s: 'global' not incremented twice\n", __FUNCTION__); + exit (1); + } + + ctx[1].uc_stack.ss_sp = st1; + ctx[1].uc_stack.ss_size = sizeof st1; + ctx[1].uc_link = &ctx[0]; + makecontext (&ctx[1], (void (*) (void)) f1, 4, 1, 2, 3, -4); + + if (getcontext (&ctx[2]) != 0) + { + printf ("%s: second getcontext: %m\n", __FUNCTION__); + exit (1); + } + ctx[2].uc_stack.ss_sp = st2; + ctx[2].uc_stack.ss_size = sizeof st2; + ctx[2].uc_link = &ctx[1]; + makecontext (&ctx[2], f2, 0); + + puts ("swapping contexts"); + if (swapcontext (&ctx[0], &ctx[2]) != 0) + { + printf ("%s: swapcontext: %m\n", __FUNCTION__); + exit (1); + } + puts ("back at main program"); + + if (was_in_f1 == 0) + { + puts ("didn't reach f1"); + exit (1); + } + if (was_in_f2 == 0) + { + puts ("didn't reach f2"); + exit (1); + } + + puts ("test succeeded"); + return 0; +} diff -durpNa glibc-2.2.2/string/Depend glibc-2.2.3/string/Depend --- glibc-2.2.2/string/Depend Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/string/Depend Mon Mar 19 13:37:37 2001 @@ -0,0 +1 @@ +localedata diff -durpNa glibc-2.2.2/string/Makefile glibc-2.2.3/string/Makefile --- glibc-2.2.2/string/Makefile Sat Jan 6 20:35:29 2001 +++ glibc-2.2.3/string/Makefile Thu Apr 26 20:07:10 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1991,92,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc. +# Copyright (C) 1991-1999, 2000, 2001 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 @@ -47,7 +47,8 @@ o-objects.ob := memcpy.o memset.o memchr tests := tester inl-tester noinl-tester testcopy test-ffs \ tst-strlen stratcliff tst-svc tst-inlcall \ - bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap + bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap \ + tst-strtok tst-strxfrm bug-strcoll1 distribute := memcopy.h pagecopy.h tst-svc.expect @@ -56,6 +57,8 @@ include ../Rules tester-ENV = LANGUAGE=C inl-tester-ENV = LANGUAGE=C noinl-tester-ENV = LANGUAGE=C +tst-strxfrm-ENV = LOCPATH=$(common-objpfx)localedata +bug-strcoll1-ENV = LOCPATH=$(common-objpfx)localedata CFLAGS-noinl-tester.c = -fno-builtin CFLAGS-tst-strlen.c = -fno-builtin CFLAGS-stratcliff.c = -fno-builtin diff -durpNa glibc-2.2.2/string/bug-strcoll1.c glibc-2.2.3/string/bug-strcoll1.c --- glibc-2.2.2/string/bug-strcoll1.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/string/bug-strcoll1.c Thu Apr 26 13:43:19 2001 @@ -0,0 +1,24 @@ +#include +#include +#include + +int +main (void) +{ + const char t1[] = "0-0-0-0-0-0-0-0-0-0.COM"; + const char t2[] = "00000-00000.COM"; + int res1; + int res2; + + setlocale (LC_ALL, "en_US.ISO-8859-1"); + + res1 = strcoll (t1, t2); + printf ("strcoll (\"%s\", \"%s\") = %d\n", t1, t2, res1); + res2 = strcoll (t2, t1); + printf ("strcoll (\"%s\", \"%s\") = %d\n", t2, t1, res2); + + return ((res1 == 0 && res2 != 0) + || (res1 != 0 && res2 == 0) + || (res1 < 0 && res2 < 0) + || (res1 > 0 && res2 > 0)); +} diff -durpNa glibc-2.2.2/string/strcoll.c glibc-2.2.3/string/strcoll.c --- glibc-2.2.2/string/strcoll.c Fri Feb 9 10:04:23 2001 +++ glibc-2.2.3/string/strcoll.c Thu Apr 26 20:07:10 2001 @@ -154,7 +154,7 @@ STRCOLL (s1, s2, l) if (s1len + s2len >= 16384) { idx1arr = (int32_t *) malloc ((s1len + s2len) * (sizeof (int32_t) + 1)); - idx2arr = &idx1arr[s2len]; + idx2arr = &idx1arr[s1len]; rule1arr = (unsigned char *) &idx2arr[s2len]; rule2arr = &rule1arr[s1len]; @@ -173,7 +173,7 @@ STRCOLL (s1, s2, l) try_stack: idx1arr = (int32_t *) alloca (s1len * sizeof (int32_t)); idx2arr = (int32_t *) alloca (s2len * sizeof (int32_t)); - rule1arr = (unsigned char *) alloca (s2len); + rule1arr = (unsigned char *) alloca (s1len); rule2arr = (unsigned char *) alloca (s2len); } @@ -422,7 +422,7 @@ STRCOLL (s1, s2, l) { /* No sequence at all or just one. */ if (idx1cnt == idx1max) - /* Note that seq2len is still zero. */ + /* Note that seq1len is still zero. */ break; backw1_stop = ~0ul; diff -durpNa glibc-2.2.2/string/string.h glibc-2.2.3/string/string.h --- glibc-2.2.2/string/string.h Fri Feb 9 10:04:23 2001 +++ glibc-2.2.3/string/string.h Tue Apr 17 08:17:28 2001 @@ -135,7 +135,7 @@ extern char *strndup (__const char *__st ({ \ __const char *__old = (s); \ size_t __len = strlen (__old) + 1; \ - char *__new = __builtin_alloca (__len); \ + char *__new = (char *) __builtin_alloca (__len); \ (char *) memcpy (__new, __old, __len); \ })) @@ -145,7 +145,7 @@ extern char *strndup (__const char *__st ({ \ __const char *__old = (s); \ size_t __len = strnlen (__old, (n)); \ - char *__new = __builtin_alloca (__len + 1); \ + char *__new = (char *) __builtin_alloca (__len + 1); \ __new[__len] = '\0'; \ (char *) memcpy (__new, __old, __len); \ })) @@ -256,15 +256,15 @@ extern char *rindex (__const char *__s, /* Return the position of the first bit set in I, or 0 if none are set. The least-significant bit is position 1, the most-significant 32. */ -extern int ffs (int __i) __THROW __attribute__ ((const)); +extern int ffs (int __i) __THROW __attribute__ ((__const__)); /* The following two functions are non-standard but necessary for non-32 bit platforms. */ # ifdef __USE_GNU -extern int ffsl (long int __l) __THROW __attribute__ ((const)); +extern int ffsl (long int __l) __THROW __attribute__ ((__const__)); # ifdef __GNUC__ __extension__ extern int ffsll (long long int __ll) - __THROW __attribute__ ((const)); + __THROW __attribute__ ((__const__)); # endif # endif diff -durpNa glibc-2.2.2/string/strxfrm.c glibc-2.2.3/string/strxfrm.c --- glibc-2.2.2/string/strxfrm.c Fri Feb 9 10:04:23 2001 +++ glibc-2.2.3/string/strxfrm.c Mon Mar 26 20:53:08 2001 @@ -162,7 +162,7 @@ STRXFRM (STRING_TYPE *dest, const STRING { if (n != 0) *dest = L('\0'); - return 1; + return 0; } /* We need the elements of the string as unsigned values since they diff -durpNa glibc-2.2.2/string/tester.c glibc-2.2.3/string/tester.c --- glibc-2.2.2/string/tester.c Fri Dec 1 11:55:08 2000 +++ glibc-2.2.3/string/tester.c Mon Mar 26 20:53:08 2001 @@ -1,5 +1,5 @@ /* Tester for string functions. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-2000, 2001 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 @@ -759,23 +759,28 @@ test_strtok_r (void) { it = "strtok_r"; (void) strcpy(one, "first, second, third"); + cp = NULL; /* Always initialize cp to make sure it doesn't point to some old data. */ equal(strtok_r(one, ", ", &cp), "first", 1); /* Basic test. */ equal(one, "first", 2); equal(strtok_r((char *)NULL, ", ", &cp), "second", 3); equal(strtok_r((char *)NULL, ", ", &cp), "third", 4); check(strtok_r((char *)NULL, ", ", &cp) == NULL, 5); (void) strcpy(one, ", first, "); + cp = NULL; equal(strtok_r(one, ", ", &cp), "first", 6); /* Extra delims, 1 tok. */ check(strtok_r((char *)NULL, ", ", &cp) == NULL, 7); (void) strcpy(one, "1a, 1b; 2a, 2b"); + cp = NULL; equal(strtok_r(one, ", ", &cp), "1a", 8); /* Changing delim lists. */ equal(strtok_r((char *)NULL, "; ", &cp), "1b", 9); equal(strtok_r((char *)NULL, ", ", &cp), "2a", 10); (void) strcpy(two, "x-y"); + cp = NULL; equal(strtok_r(two, "-", &cp), "x", 11); /* New string before done. */ equal(strtok_r((char *)NULL, "-", &cp), "y", 12); check(strtok_r((char *)NULL, "-", &cp) == NULL, 13); (void) strcpy(one, "a,b, c,, ,d"); + cp = NULL; equal(strtok_r(one, ", ", &cp), "a", 14); /* Different separators. */ equal(strtok_r((char *)NULL, ", ", &cp), "b", 15); equal(strtok_r((char *)NULL, " ,", &cp), "c", 16); /* Permute list too. */ @@ -783,25 +788,31 @@ test_strtok_r (void) check(strtok_r((char *)NULL, ", ", &cp) == NULL, 18); check(strtok_r((char *)NULL, ", ", &cp) == NULL, 19); /* Persistence. */ (void) strcpy(one, ", "); + cp = NULL; check(strtok_r(one, ", ", &cp) == NULL, 20); /* No tokens. */ (void) strcpy(one, ""); + cp = NULL; check(strtok_r(one, ", ", &cp) == NULL, 21); /* Empty string. */ + check(strtok_r((char *)NULL, ", ", &cp) == NULL, 22); /* Persistence. */ (void) strcpy(one, "abc"); - equal(strtok_r(one, ", ", &cp), "abc", 22); /* No delimiters. */ - check(strtok_r((char *)NULL, ", ", &cp) == NULL, 23); + cp = NULL; + equal(strtok_r(one, ", ", &cp), "abc", 23); /* No delimiters. */ + check(strtok_r((char *)NULL, ", ", &cp) == NULL, 24); (void) strcpy(one, "abc"); - equal(strtok_r(one, "", &cp), "abc", 24); /* Empty delimiter list. */ - check(strtok_r((char *)NULL, "", &cp) == NULL, 25); + cp = NULL; + equal(strtok_r(one, "", &cp), "abc", 25); /* Empty delimiter list. */ + check(strtok_r((char *)NULL, "", &cp) == NULL, 26); (void) strcpy(one, "abcdefgh"); (void) strcpy(one, "a,b,c"); - equal(strtok_r(one, ",", &cp), "a", 26); /* Basics again... */ - equal(strtok_r((char *)NULL, ",", &cp), "b", 27); - equal(strtok_r((char *)NULL, ",", &cp), "c", 28); - check(strtok_r((char *)NULL, ",", &cp) == NULL, 29); - equal(one+6, "gh", 30); /* Stomped past end? */ - equal(one, "a", 31); /* Stomped old tokens? */ - equal(one+2, "b", 32); - equal(one+4, "c", 33); + cp = NULL; + equal(strtok_r(one, ",", &cp), "a", 27); /* Basics again... */ + equal(strtok_r((char *)NULL, ",", &cp), "b", 28); + equal(strtok_r((char *)NULL, ",", &cp), "c", 29); + check(strtok_r((char *)NULL, ",", &cp) == NULL, 30); + equal(one+6, "gh", 31); /* Stomped past end? */ + equal(one, "a", 32); /* Stomped old tokens? */ + equal(one+2, "b", 33); + equal(one+4, "c", 34); } static void diff -durpNa glibc-2.2.2/string/tst-strtok.c glibc-2.2.3/string/tst-strtok.c --- glibc-2.2.2/string/tst-strtok.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/string/tst-strtok.c Thu Feb 22 05:46:13 2001 @@ -0,0 +1,23 @@ +/* Testcase for strtok reported by Andrew Church . */ +#include +#include + +int +main (void) +{ + char buf[1] = { 0 }; + int result = 0; + + if (strtok (buf, " ") != NULL) + { + puts ("first strtok call did not return NULL"); + result = 1; + } + else if (strtok (NULL, " ") != NULL) + { + puts ("second strtok call did not return NULL"); + result = 1; + } + + return result; +} diff -durpNa glibc-2.2.2/string/tst-strxfrm.c glibc-2.2.3/string/tst-strxfrm.c --- glibc-2.2.2/string/tst-strxfrm.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/string/tst-strxfrm.c Mon Mar 19 13:38:04 2001 @@ -0,0 +1,56 @@ +/* Based on a test case by Paul Eggert. */ +#include +#include +#include +#include + + +char const string[] = ""; + + +static int +test (const char *locale) +{ + size_t bufsize; + size_t r; + size_t l; + char *buf; + int result = 0; + + if (setlocale (LC_COLLATE, locale) == NULL) + { + printf ("cannot set locale \"%s\"\n", locale); + return 1; + } + bufsize = strxfrm (NULL, string, 0) + 1; + buf = malloc (bufsize); + if (buf == NULL) + { + printf ("cannot allocate %zd bytes\n", bufsize); + return 1; + } + r = strxfrm (buf, string, bufsize); + l = strlen (buf); + if (r != l) + { + printf ("locale \"%s\": strxfrm returned %zu, strlen returned %zu\n", + locale, r, l); + result = 1; + } + free (buf); + + return result; +} + + +int +main (void) +{ + int result = 0; + + result |= test ("C"); + result |= test ("en_US.ISO-8859-1"); + result |= test ("de_DE.UTF-8"); + + return result; +} diff -durpNa glibc-2.2.2/sunrpc/Makefile glibc-2.2.3/sunrpc/Makefile --- glibc-2.2.2/sunrpc/Makefile Wed Jan 10 19:08:22 2001 +++ glibc-2.2.3/sunrpc/Makefile Mon Mar 26 20:53:09 2001 @@ -60,7 +60,7 @@ routines := auth_none auth_unix authuxpr clnt_gen clnt_perr clnt_raw clnt_simp clnt_tcp \ clnt_udp rpc_dtable get_myaddr getrpcport \ pmap_clnt pm_getmaps pm_getport pmap_prot \ - pmap_prot2 pmap_rmt rpc_prot rpc_common rpc_cmsg \ + pmap_prot2 pmap_rmt rpc_prot rpc_common rpc_cmsg rpc_thread \ svc svc_auth svc_authux svc_raw svc_run svc_simple \ svc_tcp svc_udp xdr xdr_array xdr_float xdr_mem \ xdr_rec xdr_ref xdr_stdio publickey xdr_sizeof \ @@ -116,6 +116,7 @@ CFLAGS-xkey_prot.c = -Wno-unused ifeq (yes,$(have_doors)) CPPFLAGS-key_call.c += -DHAVE_DOORS=1 endif +CPPFLAGS += -D_RPC_THREAD_SAFE_ include ../Rules diff -durpNa glibc-2.2.2/sunrpc/Versions glibc-2.2.3/sunrpc/Versions --- glibc-2.2.2/sunrpc/Versions Thu Nov 16 11:12:04 2000 +++ glibc-2.2.3/sunrpc/Versions Mon Mar 26 20:53:09 2001 @@ -109,4 +109,8 @@ libc { GLIBC_2.2 { svc_getreq_common; svc_getreq_poll; svc_max_pollfd; svc_pollfd; } + GLIBC_2.2.3 { + __rpc_thread_destroy; __rpc_thread_svc_fdset; __rpc_thread_createerr; + __rpc_thread_svc_pollfd; __rpc_thread_svc_max_pollfd; + } } diff -durpNa glibc-2.2.2/sunrpc/auth_none.c glibc-2.2.3/sunrpc/auth_none.c --- glibc-2.2.2/sunrpc/auth_none.c Thu Apr 15 11:02:20 1999 +++ glibc-2.2.3/sunrpc/auth_none.c Mon Mar 26 20:53:09 2001 @@ -35,8 +35,7 @@ * credentials and verifiers to remote systems. */ -#include -#include +#include #define MAX_MARSHEL_SIZE 20 @@ -57,24 +56,29 @@ static struct auth_ops ops = { authnone_destroy }; -static struct authnone_private -{ +struct authnone_private_s { AUTH no_client; char marshalled_client[MAX_MARSHEL_SIZE]; u_int mcnt; -} *authnone_private; +}; +#ifdef _RPC_THREAD_SAFE_ +#define authnone_private ((struct authnone_private_ *)RPC_THREAD_VARIABLE(authnone_private_s)) +#else +static struct authnone_private_s *authnone_private; +#endif AUTH * authnone_create (void) { - struct authnone_private *ap = authnone_private; + struct authnone_private_s *ap; XDR xdr_stream; XDR *xdrs; - if (ap == 0) + ap = (struct authnone_private_s *) authnone_private; + if (ap == NULL) { - ap = (struct authnone_private *) calloc (1, sizeof (*ap)); - if (ap == 0) + ap = (struct authnone_private_s *) calloc (1, sizeof (*ap)); + if (ap == NULL) return NULL; authnone_private = ap; } @@ -97,10 +101,11 @@ authnone_create (void) static bool_t authnone_marshal (AUTH *client, XDR *xdrs) { - struct authnone_private *ap = authnone_private; + struct authnone_private_s *ap; - if (ap == 0) - return 0; + ap = (struct authnone_private_s *) authnone_private; + if (ap == NULL) + return FALSE; return (*xdrs->x_ops->x_putbytes) (xdrs, ap->marshalled_client, ap->mcnt); } diff -durpNa glibc-2.2.2/sunrpc/clnt_gen.c glibc-2.2.3/sunrpc/clnt_gen.c --- glibc-2.2.2/sunrpc/clnt_gen.c Thu Nov 2 16:50:14 2000 +++ glibc-2.2.3/sunrpc/clnt_gen.c Mon Mar 26 20:53:09 2001 @@ -87,7 +87,7 @@ clnt_create (const char *hostname, u_lon || h == NULL) if (herr != NETDB_INTERNAL || errno != ERANGE) { - rpc_createerr.cf_stat = RPC_UNKNOWNHOST; + get_rpc_createerr().cf_stat = RPC_UNKNOWNHOST; return NULL; } else @@ -102,8 +102,9 @@ clnt_create (const char *hostname, u_lon /* * Only support INET for now */ - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = EAFNOSUPPORT; + struct rpc_createerr *ce = &get_rpc_createerr (); + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = EAFNOSUPPORT; return NULL; } sin.sin_family = h->h_addrtype; @@ -117,8 +118,9 @@ clnt_create (const char *hostname, u_lon || p == NULL) if (errno != ERANGE) { - rpc_createerr.cf_stat = RPC_UNKNOWNPROTO; - rpc_createerr.cf_error.re_errno = EPFNOSUPPORT; + struct rpc_createerr *ce = &get_rpc_createerr (); + ce->cf_stat = RPC_UNKNOWNPROTO; + ce->cf_error.re_errno = EPFNOSUPPORT; return NULL; } else @@ -163,8 +165,11 @@ clnt_create (const char *hostname, u_lon #endif break; default: - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = EPFNOSUPPORT; + { + struct rpc_createerr *ce = &get_rpc_createerr (); + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = EPFNOSUPPORT; + } return (NULL); } return client; diff -durpNa glibc-2.2.2/sunrpc/clnt_perr.c glibc-2.2.3/sunrpc/clnt_perr.c --- glibc-2.2.2/sunrpc/clnt_perr.c Thu Aug 31 14:45:17 2000 +++ glibc-2.2.3/sunrpc/clnt_perr.c Mon Mar 26 20:53:09 2001 @@ -40,9 +40,7 @@ static char sccsid[] = "@(#)clnt_perror. #include #include #include -#include -#include -#include +#include #ifdef USE_IN_LIBIO # include @@ -51,7 +49,16 @@ static char sccsid[] = "@(#)clnt_perror. static char *auth_errmsg (enum auth_stat stat) internal_function; +#ifdef _RPC_THREAD_SAFE_ +/* + * Making buf a preprocessor macro requires renaming the local + * buf variable in a few functions. Overriding a global variable + * with a local variable of the same name is a bad idea, anyway. + */ +#define buf ((char *)RPC_THREAD_VARIABLE(clnt_perr_buf_s)) +#else static char *buf; +#endif static char * _buf (void) @@ -67,7 +74,7 @@ _buf (void) char * clnt_sperror (CLIENT * rpch, const char *msg) { - char buf[1024]; + char chrbuf[1024]; struct rpc_err e; char *err; char *str = _buf (); @@ -103,7 +110,7 @@ clnt_sperror (CLIENT * rpch, const char case RPC_CANTSEND: case RPC_CANTRECV: len = sprintf (str, "; errno = %s", __strerror_r (e.re_errno, - buf, sizeof buf)); + chrbuf, sizeof chrbuf)); str += len; break; @@ -281,27 +288,29 @@ clnt_perrno (enum clnt_stat num) char * clnt_spcreateerror (const char *msg) { - char buf[1024]; + char chrbuf[1024]; char *str = _buf (); char *cp; int len; + struct rpc_createerr *ce; if (str == NULL) return NULL; + ce = &get_rpc_createerr (); len = sprintf (str, "%s: ", msg); cp = str + len; - cp = stpcpy (cp, clnt_sperrno (rpc_createerr.cf_stat)); - switch (rpc_createerr.cf_stat) + cp = stpcpy (cp, clnt_sperrno (ce->cf_stat)); + switch (ce->cf_stat) { case RPC_PMAPFAILURE: cp = stpcpy (stpcpy (cp, " - "), - clnt_sperrno (rpc_createerr.cf_error.re_status)); + clnt_sperrno (ce->cf_error.re_status)); break; case RPC_SYSTEMERROR: cp = stpcpy (stpcpy (cp, " - "), - __strerror_r (rpc_createerr.cf_error.re_errno, - buf, sizeof buf)); + __strerror_r (ce->cf_error.re_errno, + chrbuf, sizeof chrbuf)); break; default: break; diff -durpNa glibc-2.2.2/sunrpc/clnt_raw.c glibc-2.2.3/sunrpc/clnt_raw.c --- glibc-2.2.2/sunrpc/clnt_raw.c Sat Jun 19 09:40:28 1999 +++ glibc-2.2.3/sunrpc/clnt_raw.c Mon Mar 26 20:53:09 2001 @@ -52,15 +52,19 @@ static char sccsid[] = "@(#)clnt_raw.c 1 /* * This is the "network" we will be moving stuff over. */ -static struct clntraw_private +struct clntraw_private_s { CLIENT client_object; XDR xdr_stream; char _raw_buf[UDPMSGSIZE]; char mashl_callmsg[MCALL_MSG_SIZE]; u_int mcnt; - } - *clntraw_private; + }; +#ifdef _RPC_THREAD_SAFE_ +#define clntraw_private ((struct clntraw_private_s *)RPC_THREAD_VARIABLE(clntraw_private_s)) +#else +static struct clntraw_private_s *clntraw_private; +#endif static enum clnt_stat clntraw_call (CLIENT *, u_long, xdrproc_t, caddr_t, xdrproc_t, caddr_t, struct timeval); @@ -86,14 +90,14 @@ static struct clnt_ops client_ops = CLIENT * clntraw_create (u_long prog, u_long vers) { - struct clntraw_private *clp = clntraw_private; + struct clntraw_private_s *clp = clntraw_private; struct rpc_msg call_msg; XDR *xdrs = &clp->xdr_stream; CLIENT *client = &clp->client_object; if (clp == 0) { - clp = (struct clntraw_private *) calloc (1, sizeof (*clp)); + clp = (struct clntraw_private_s *) calloc (1, sizeof (*clp)); if (clp == 0) return (0); clntraw_private = clp; @@ -136,7 +140,7 @@ clntraw_call (h, proc, xargs, argsp, xre caddr_t resultsp; struct timeval timeout; { - struct clntraw_private *clp = clntraw_private; + struct clntraw_private_s *clp = clntraw_private; XDR *xdrs = &clp->xdr_stream; struct rpc_msg msg; enum clnt_stat status; @@ -220,7 +224,7 @@ clntraw_freeres (cl, xdr_res, res_ptr) xdrproc_t xdr_res; caddr_t res_ptr; { - struct clntraw_private *clp = clntraw_private; + struct clntraw_private_s *clp = clntraw_private; XDR *xdrs = &clp->xdr_stream; bool_t rval; diff -durpNa glibc-2.2.2/sunrpc/clnt_simp.c glibc-2.2.3/sunrpc/clnt_simp.c --- glibc-2.2.2/sunrpc/clnt_simp.c Sun Oct 8 17:05:05 2000 +++ glibc-2.2.3/sunrpc/clnt_simp.c Mon Mar 26 20:53:09 2001 @@ -47,20 +47,24 @@ static char sccsid[] = "@(#)clnt_simple. #include #include -static struct callrpc_private +struct callrpc_private_s { CLIENT *client; int socket; u_long oldprognum, oldversnum, valid; char *oldhost; - } - *callrpc_private; + }; +#ifdef _RPC_THREAD_SAFE_ +#define callrpc_private ((struct callrpc_private_s *)RPC_THREAD_VARIABLE(callrpc_private_s)) +#else +static struct callrpc_private_s *callrpc_private; +#endif int callrpc (const char *host, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, const char *in, xdrproc_t outproc, char *out) { - struct callrpc_private *crp = callrpc_private; + struct callrpc_private_s *crp = callrpc_private; struct sockaddr_in server_addr; enum clnt_stat clnt_stat; struct hostent hostbuf, *hp; @@ -68,7 +72,7 @@ callrpc (const char *host, u_long prognu if (crp == 0) { - crp = (struct callrpc_private *) calloc (1, sizeof (*crp)); + crp = (struct callrpc_private_s *) calloc (1, sizeof (*crp)); if (crp == 0) return 0; callrpc_private = crp; @@ -123,7 +127,7 @@ callrpc (const char *host, u_long prognu server_addr.sin_port = 0; if ((crp->client = clntudp_create (&server_addr, (u_long) prognum, (u_long) versnum, timeout, &crp->socket)) == NULL) - return (int) rpc_createerr.cf_stat; + return (int) get_rpc_createerr().cf_stat; crp->valid = 1; crp->oldprognum = prognum; crp->oldversnum = versnum; @@ -141,3 +145,17 @@ callrpc (const char *host, u_long prognu crp->valid = 0; return (int) clnt_stat; } + +#ifdef _RPC_THREAD_SAFE_ +void +__rpc_thread_clnt_cleanup (void) +{ + struct callrpc_private_s *rcp = RPC_THREAD_VARIABLE(callrpc_private_s); + + if (rcp) { + if (rcp->client) + CLNT_DESTROY (rcp->client); + free (rcp); + } +} +#endif /* _RPC_THREAD_SAFE_ */ diff -durpNa glibc-2.2.2/sunrpc/clnt_tcp.c glibc-2.2.3/sunrpc/clnt_tcp.c --- glibc-2.2.2/sunrpc/clnt_tcp.c Thu Nov 2 16:50:14 2000 +++ glibc-2.2.3/sunrpc/clnt_tcp.c Mon Mar 26 20:53:09 2001 @@ -123,17 +123,19 @@ clnttcp_create (struct sockaddr_in *radd h = (CLIENT *) mem_alloc (sizeof (*h)); if (h == NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); (void) fprintf (stderr, _("clnttcp_create: out of memory\n")); - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } /* ct = (struct ct_data *) mem_alloc (sizeof (*ct)); */ if (ct == NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); (void) fprintf (stderr, _("clnttcp_create: out of memory\n")); - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } @@ -163,8 +165,9 @@ clnttcp_create (struct sockaddr_in *radd || (__connect (*sockp, (struct sockaddr *) raddr, sizeof (*raddr)) < 0)) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + struct rpc_createerr *ce = &get_rpc_createerr (); + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; if (*sockp >= 0) (void) __close (*sockp); goto fooy; diff -durpNa glibc-2.2.2/sunrpc/clnt_udp.c glibc-2.2.3/sunrpc/clnt_udp.c --- glibc-2.2.2/sunrpc/clnt_udp.c Wed Jan 10 15:54:40 2001 +++ glibc-2.2.3/sunrpc/clnt_udp.c Mon Mar 26 20:53:09 2001 @@ -128,9 +128,10 @@ clntudp_bufcreate (struct sockaddr_in *r cl = (CLIENT *) mem_alloc (sizeof (CLIENT)); if (cl == NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); (void) fprintf (stderr, _("clntudp_create: out of memory\n")); - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } sendsz = ((sendsz + 3) / 4) * 4; @@ -138,9 +139,10 @@ clntudp_bufcreate (struct sockaddr_in *r cu = (struct cu_data *) mem_alloc (sizeof (*cu) + sendsz + recvsz); if (cu == NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); (void) fprintf (stderr, _("clntudp_create: out of memory\n")); - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } cu->cu_outbuf = &cu->cu_inbuf[recvsz]; @@ -183,8 +185,9 @@ clntudp_bufcreate (struct sockaddr_in *r *sockp = __socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (*sockp < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + struct rpc_createerr *ce = &get_rpc_createerr (); + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } /* attempt to bind to prov port */ diff -durpNa glibc-2.2.2/sunrpc/clnt_unix.c glibc-2.2.3/sunrpc/clnt_unix.c --- glibc-2.2.2/sunrpc/clnt_unix.c Thu Nov 2 16:50:14 2000 +++ glibc-2.2.3/sunrpc/clnt_unix.c Mon Mar 26 20:53:09 2001 @@ -121,17 +121,19 @@ clntunix_create (struct sockaddr_un *rad h = (CLIENT *) mem_alloc (sizeof (*h)); if (h == NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); (void) fputs (_("clntunix_create: out of memory\n"), stderr); - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } /* ct = (struct ct_data *) mem_alloc (sizeof (*ct)); */ if (ct == NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); (void) fputs (_("clntunix_create: out of memory\n"), stderr); - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; goto fooy; } @@ -145,8 +147,9 @@ clntunix_create (struct sockaddr_un *rad if (*sockp < 0 || __connect (*sockp, (struct sockaddr *) raddr, len) < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; + struct rpc_createerr *ce = &get_rpc_createerr (); + ce->cf_stat = RPC_SYSTEMERROR; + ce->cf_error.re_errno = errno; if (*sockp != -1) __close (*sockp); goto fooy; diff -durpNa glibc-2.2.2/sunrpc/key_call.c glibc-2.2.3/sunrpc/key_call.c --- glibc-2.2.2/sunrpc/key_call.c Thu Aug 31 14:45:17 2000 +++ glibc-2.2.3/sunrpc/key_call.c Mon Mar 26 20:53:09 2001 @@ -359,7 +359,11 @@ struct key_call_private { pid_t pid; /* process-id at moment of creation */ uid_t uid; /* user-id at last authorization */ }; +#ifdef _RPC_THREAD_SAFE_ +#define key_call_private_main ((struct key_call_private *)RPC_THREAD_VARIABLE(key_call_private_s)) +#else static struct key_call_private *key_call_private_main; +#endif __libc_lock_define_initialized (static, keycall_lock) /* @@ -610,3 +614,17 @@ key_call (u_long proc, xdrproc_t xdr_arg return key_call_keyenvoy (proc, xdr_arg, arg, xdr_rslt, rslt); #endif } + +#ifdef _RPC_THREAD_SAFE_ +void +__rpc_thread_key_cleanup (void) +{ + struct key_call_private *kcp = RPC_THREAD_VARIABLE(key_call_private_s); + + if (kcp) { + if (kcp->client) + clnt_destroy(kcp->client); + free (kcp); + } +} +#endif /* _RPC_THREAD_SAFE_ */ diff -durpNa glibc-2.2.2/sunrpc/pm_getport.c glibc-2.2.3/sunrpc/pm_getport.c --- glibc-2.2.2/sunrpc/pm_getport.c Wed Mar 26 17:50:19 1997 +++ glibc-2.2.3/sunrpc/pm_getport.c Mon Mar 26 20:53:09 2001 @@ -70,6 +70,7 @@ pmap_getport (address, program, version, PMAPVERS, timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE); if (client != (CLIENT *) NULL) { + struct rpc_createerr *ce = &get_rpc_createerr (); parms.pm_prog = program; parms.pm_vers = version; parms.pm_prot = protocol; @@ -78,12 +79,12 @@ pmap_getport (address, program, version, (caddr_t)&parms, (xdrproc_t)xdr_u_short, (caddr_t)&port, tottimeout) != RPC_SUCCESS) { - rpc_createerr.cf_stat = RPC_PMAPFAILURE; - clnt_geterr (client, &rpc_createerr.cf_error); + ce->cf_stat = RPC_PMAPFAILURE; + clnt_geterr (client, &ce->cf_error); } else if (port == 0) { - rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED; + ce->cf_stat = RPC_PROGNOTREGISTERED; } CLNT_DESTROY (client); } diff -durpNa glibc-2.2.2/sunrpc/rpc/rpc.h glibc-2.2.3/sunrpc/rpc/rpc.h --- glibc-2.2.2/sunrpc/rpc/rpc.h Fri Jun 20 18:04:03 1997 +++ glibc-2.2.3/sunrpc/rpc/rpc.h Mon Mar 26 20:53:09 2001 @@ -67,4 +67,28 @@ /* routines for parsing /etc/rpc */ #include /* structures and routines to parse /etc/rpc */ + +/* Global variables, protected for multi-threaded applications. */ +extern fd_set *__rpc_thread_svc_fdset (void) __attribute__ ((__const__)); +#define svc_fdset (*__rpc_thread_svc_fdset ()) + +extern struct rpc_createerr *__rpc_thread_createerr (void) + __attribute__ ((__const__)); +#define get_rpc_createerr() (*__rpc_thread_createerr ()) +/* The people who "engineered" RPC should bee punished for naming the + data structure and the variable the same. We cannot always define the + macro 'rpc_createerr' because this would prevent people from defining + object of type 'struct rpc_createerr'. So we leave it up to the user + to select transparent replacement also of this variable. */ +#ifdef _RPC_MT_VARS +# define rpc_createerr (*__rpc_thread_createerr ()) +#endif + +extern struct pollfd **__rpc_thread_svc_pollfd (void) + __attribute__ ((__const__)); +#define svc_pollfd (*__rpc_thread_svc_pollfd ()) + +extern int *__rpc_thread_svc_max_pollfd (void) __attribute__ ((__const__)); +#define svc_max_pollfd (*__rpc_thread_svc_max_pollfd ()) + #endif /* rpc/rpc.h */ diff -durpNa glibc-2.2.2/sunrpc/rpc_common.c glibc-2.2.3/sunrpc/rpc_common.c --- glibc-2.2.2/sunrpc/rpc_common.c Sun Aug 1 14:44:42 1999 +++ glibc-2.2.3/sunrpc/rpc_common.c Mon Mar 26 20:53:09 2001 @@ -27,6 +27,14 @@ * Mountain View, California 94043 */ #include + +#ifdef _RPC_THREAD_SAFE_ +#undef svc_fdset +#undef rpc_createerr +#undef svc_pollfd +#undef svc_max_pollfd +#endif /* _RPC_THREAD_SAFE_ */ + /* * This file should only contain common data (global data) that is exported * by public interfaces diff -durpNa glibc-2.2.2/sunrpc/rpc_main.c glibc-2.2.3/sunrpc/rpc_main.c --- glibc-2.2.2/sunrpc/rpc_main.c Sat Jan 6 20:35:29 2001 +++ glibc-2.2.3/sunrpc/rpc_main.c Thu Apr 12 14:02:07 2001 @@ -32,7 +32,7 @@ * From @(#)rpc_main.c 1.30 89/03/30 (C) 1987 SMI; */ const char main_rcsid[] = - "$Id: rpc_main.c,v 1.20 2000/12/31 15:43:51 aj Exp $"; + "$Id: rpc_main.c,v 1.21 2001/04/11 05:42:12 drepper Exp $"; /* * rpc_main.c, Top level of the RPC protocol compiler. @@ -1357,6 +1357,7 @@ parseargs (int argc, const char *argv[], cmd->Scflag = flag['C']; cmd->makefileflag = flag['M']; +#ifndef _RPC_THREAD_SAFE_ if (mtflag || newstyle) { /* glibc doesn't support these flags. */ @@ -1364,6 +1365,7 @@ parseargs (int argc, const char *argv[], _("This implementation doesn't support newstyle or MT-safe code!\n")); return (0); } +#endif if (tirpcflag) { pmflag = inetdflag ? 0 : 1; /* pmflag or inetdflag is always TRUE */ diff -durpNa glibc-2.2.2/sunrpc/rpc_parse.c glibc-2.2.3/sunrpc/rpc_parse.c --- glibc-2.2.2/sunrpc/rpc_parse.c Mon Feb 16 09:41:53 1998 +++ glibc-2.2.3/sunrpc/rpc_parse.c Sat Apr 7 14:02:37 2001 @@ -32,7 +32,7 @@ * From: @(#)rpc_parse.c 1.8 89/02/22 (C) 1987 SMI */ const char parse_rcsid[] = - "$Id: rpc_parse.c,v 1.4 1998/02/16 17:41:53 drepper Exp $"; + "$Id: rpc_parse.c,v 1.5 2001/04/04 17:27:24 drepper Exp $"; /* * rpc_parse.c, Parser for the RPC protocol compiler @@ -621,6 +621,10 @@ get_type (const char **prefixp, const ch *typep = "long"; (void) peekscan (TOK_INT, &tok); break; + case TOK_HYPER: + *typep = "int64_t"; + (void) peekscan(TOK_INT, &tok); + break; case TOK_VOID: if (dkind != DEF_UNION && dkind != DEF_PROGRAM) { @@ -664,6 +668,11 @@ unsigned_dec (const char **typep) *typep = "u_long"; (void) peekscan (TOK_INT, &tok); break; + case TOK_HYPER: + get_token (&tok); + *typep = "uint64_t"; + (void) peekscan(TOK_INT, &tok); + break; case TOK_INT: get_token (&tok); *typep = "u_int"; diff -durpNa glibc-2.2.2/sunrpc/rpc_scan.c glibc-2.2.3/sunrpc/rpc_scan.c --- glibc-2.2.2/sunrpc/rpc_scan.c Sat Jun 19 02:47:43 1999 +++ glibc-2.2.3/sunrpc/rpc_scan.c Sat Apr 7 14:02:37 2001 @@ -32,7 +32,7 @@ * From: @(#)rpc_scan.c 1.11 89/02/22 (C) 1987 SMI */ char scan_rcsid[] = - "$Id: rpc_scan.c,v 1.7 1999/06/19 09:47:43 drepper Exp $"; + "$Id: rpc_scan.c,v 1.8 2001/04/04 17:26:50 drepper Exp $"; /* * rpc_scan.c, Scanner for the RPC protocol compiler @@ -440,6 +440,7 @@ static const token symbols[] = {TOK_UNSIGNED, "unsigned"}, {TOK_SHORT, "short"}, {TOK_LONG, "long"}, + {TOK_HYPER, "hyper"}, {TOK_FLOAT, "float"}, {TOK_DOUBLE, "double"}, {TOK_STRING, "string"}, diff -durpNa glibc-2.2.2/sunrpc/rpc_scan.h glibc-2.2.3/sunrpc/rpc_scan.h --- glibc-2.2.2/sunrpc/rpc_scan.h Sat Jan 6 20:35:29 2001 +++ glibc-2.2.3/sunrpc/rpc_scan.h Sat Apr 7 14:02:37 2001 @@ -65,6 +65,7 @@ enum tok_kind { TOK_INT, TOK_SHORT, TOK_LONG, + TOK_HYPER, TOK_UNSIGNED, TOK_FLOAT, TOK_DOUBLE, diff -durpNa glibc-2.2.2/sunrpc/rpc_thread.c glibc-2.2.3/sunrpc/rpc_thread.c --- glibc-2.2.2/sunrpc/rpc_thread.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sunrpc/rpc_thread.c Sun Mar 25 21:14:07 2001 @@ -0,0 +1,128 @@ +#include +#include +#include +#include + +#include +#include + +#ifdef _RPC_THREAD_SAFE_ + + +/* Variable used in non-threaded applications. */ +static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem; +static struct rpc_thread_variables *__libc_tsd_RPC_VARS_data = + &__libc_tsd_RPC_VARS_mem; + + +/* This is the variable used for the first thread. */ +static struct rpc_thread_variables rpc_default; + +/* + * Task-variable destructor + */ +void +__rpc_thread_destroy (void) +{ + struct rpc_thread_variables *tvp = __rpc_thread_variables(); + + if (tvp != NULL && tvp != &rpc_default) { + __rpc_thread_svc_cleanup (); + __rpc_thread_clnt_cleanup (); + __rpc_thread_key_cleanup (); + free (tvp->authnone_private_s); + free (tvp->clnt_perr_buf_s); + free (tvp->clntraw_private_s); + free (tvp->svcraw_private_s); + free (tvp->authdes_cache_s); + free (tvp->authdes_lru_s); + free (tvp); + } +} + + +/* + * Initialize RPC multi-threaded operation + */ +static void +rpc_thread_multi (void) +{ + __libc_tsd_set (RPC_VARS, &rpc_default); +} + + +struct rpc_thread_variables * +__rpc_thread_variables (void) +{ + __libc_once_define (static, once); + struct rpc_thread_variables *tvp; + + tvp = __libc_tsd_get (RPC_VARS); + if (tvp == NULL) { + __libc_once (once, rpc_thread_multi); + tvp = __libc_tsd_get (RPC_VARS); + if (tvp == NULL) { + tvp = calloc (1, sizeof *tvp); + if (tvp != NULL) + __libc_tsd_set (RPC_VARS, tvp); + else + tvp = __libc_tsd_RPC_VARS_data; + } + } + return tvp; +} + + +/* Global variables If we're single-threaded, or if this is the first + thread using the variable, use the existing global variable. This + provides backwards compatability for existing applications which + dynamically link against this code. */ +#undef svc_fdset +#undef rpc_createerr +#undef svc_pollfd +#undef svc_max_pollfd + +fd_set * +__rpc_thread_svc_fdset (void) +{ + struct rpc_thread_variables *tvp; + + tvp = __rpc_thread_variables (); + if (tvp == &rpc_default) + return &svc_fdset; + return &tvp->svc_fdset_s; +} + +struct rpc_createerr * +__rpc_thread_createerr (void) +{ + struct rpc_thread_variables *tvp; + + tvp = __rpc_thread_variables (); + if (tvp == &rpc_default) + return &rpc_createerr; + return &tvp->rpc_createerr_s; +} + +struct pollfd ** +__rpc_thread_svc_pollfd (void) +{ + struct rpc_thread_variables *tvp; + + tvp = __rpc_thread_variables (); + if (tvp == &rpc_default) + return &svc_pollfd; + return &tvp->svc_pollfd_s; +} + +int * +__rpc_thread_svc_max_pollfd (void) +{ + struct rpc_thread_variables *tvp; + + tvp = __rpc_thread_variables (); + if (tvp == &rpc_default) + return &svc_max_pollfd; + return &tvp->svc_max_pollfd_s; +} +#endif /* _RPC_THREAD_SAFE_ */ diff -durpNa glibc-2.2.2/sunrpc/svc.c glibc-2.2.3/sunrpc/svc.c --- glibc-2.2.2/sunrpc/svc.c Fri Aug 13 12:20:27 1999 +++ glibc-2.2.3/sunrpc/svc.c Mon Mar 26 20:53:09 2001 @@ -43,7 +43,11 @@ #include #include +#ifdef _RPC_THREAD_SAFE_ +#define xports ((SVCXPRT **)RPC_THREAD_VARIABLE(svc_xports_s)) +#else static SVCXPRT **xports; +#endif #define NULL_SVC ((struct svc_callout *)0) #define RQCRED_SIZE 400 /* this size is excessive */ @@ -52,12 +56,17 @@ static SVCXPRT **xports; Each entry represents a set of procedures (an rpc program). The dispatch routine takes request structs and runs the appropriate procedure. */ -static struct svc_callout { +struct svc_callout { struct svc_callout *sc_next; rpcprog_t sc_prog; rpcvers_t sc_vers; void (*sc_dispatch) (struct svc_req *, SVCXPRT *); -} *svc_head; +}; +#ifdef _RPC_THREAD_SAFE_ +#define svc_head ((struct svc_callout *)RPC_THREAD_VARIABLE(svc_head_s)) +#else +static struct svc_callout *svc_head; +#endif /* *************** SVCXPRT related stuff **************** */ @@ -464,3 +473,16 @@ svc_getreq_common (const int fd) } while (stat == XPRT_MOREREQS); } + +#ifdef _RPC_THREAD_SAFE_ + +void +__rpc_thread_svc_cleanup (void) +{ + struct svc_callout *svcp; + + while ((svcp = svc_head) != NULL) + svc_unregister (svcp->sc_prog, svcp->sc_vers); +} + +#endif /* _RPC_THREAD_SAFE_ */ diff -durpNa glibc-2.2.2/sunrpc/svc_raw.c glibc-2.2.3/sunrpc/svc_raw.c --- glibc-2.2.2/sunrpc/svc_raw.c Wed Mar 26 17:52:24 1997 +++ glibc-2.2.3/sunrpc/svc_raw.c Mon Mar 26 20:53:09 2001 @@ -46,14 +46,18 @@ static char sccsid[] = "@(#)svc_raw.c 1. /* * This is the "network" that we will be moving data over */ -static struct svcraw_private +struct svcraw_private_s { char _raw_buf[UDPMSGSIZE]; SVCXPRT server; XDR xdr_stream; char verf_body[MAX_AUTH_BYTES]; - } - *svcraw_private; + }; +#ifdef _RPC_THREAD_SAFE_ +#define svcraw_private ((struct svcraw_private_s *)RPC_THREAD_VARIABLE(svcraw_private_s)) +#else +static struct svcraw_private_s *svcraw_private; +#endif static bool_t svcraw_recv (SVCXPRT *, struct rpc_msg *); static enum xprt_stat svcraw_stat (SVCXPRT *); @@ -75,11 +79,11 @@ static struct xp_ops server_ops = SVCXPRT * svcraw_create (void) { - struct svcraw_private *srp = svcraw_private; + struct svcraw_private_s *srp = svcraw_private; if (srp == 0) { - srp = (struct svcraw_private *) calloc (1, sizeof (*srp)); + srp = (struct svcraw_private_s *) calloc (1, sizeof (*srp)); if (srp == 0) return NULL; } @@ -102,7 +106,7 @@ svcraw_recv (xprt, msg) SVCXPRT *xprt; struct rpc_msg *msg; { - struct svcraw_private *srp = svcraw_private; + struct svcraw_private_s *srp = svcraw_private; XDR *xdrs; if (srp == 0) @@ -118,7 +122,7 @@ svcraw_recv (xprt, msg) static bool_t svcraw_reply (SVCXPRT *xprt, struct rpc_msg *msg) { - struct svcraw_private *srp = svcraw_private; + struct svcraw_private_s *srp = svcraw_private; XDR *xdrs; if (srp == 0) @@ -135,7 +139,7 @@ svcraw_reply (SVCXPRT *xprt, struct rpc_ static bool_t svcraw_getargs (SVCXPRT *xprt, xdrproc_t xdr_args, caddr_t args_ptr) { - struct svcraw_private *srp = svcraw_private; + struct svcraw_private_s *srp = svcraw_private; if (srp == 0) return FALSE; @@ -145,7 +149,7 @@ svcraw_getargs (SVCXPRT *xprt, xdrproc_t static bool_t svcraw_freeargs (SVCXPRT *xprt, xdrproc_t xdr_args, caddr_t args_ptr) { - struct svcraw_private *srp = svcraw_private; + struct svcraw_private_s *srp = svcraw_private; XDR *xdrs; if (srp == 0) diff -durpNa glibc-2.2.2/sunrpc/svc_simple.c glibc-2.2.3/sunrpc/svc_simple.c --- glibc-2.2.2/sunrpc/svc_simple.c Mon Jan 3 13:04:43 2000 +++ glibc-2.2.3/sunrpc/svc_simple.c Mon Mar 26 20:53:09 2001 @@ -51,24 +51,33 @@ static char sccsid[] = "@(#)svc_simple.c # define fputs(s, f) _IO_fputs (s, f) #endif -static struct proglst +struct proglst_ { char *(*p_progname) (char *); int p_prognum; int p_procnum; xdrproc_t p_inproc, p_outproc; - struct proglst *p_nxt; - } - *proglst; + struct proglst_ *p_nxt; + }; +#ifdef _RPC_THREAD_SAFE_ +#define proglst ((struct proglst_ *)RPC_THREAD_VARIABLE(svcsimple_proglst_s)) +#else +static struct proglst_ *proglst; +#endif -static void universal (struct svc_req *rqstp, SVCXPRT *transp); + +static void universal (struct svc_req *rqstp, SVCXPRT *transp_s); +#ifdef _RPC_THREAD_SAFE_ +#define transp ((SVCXPRT *)RPC_THREAD_VARIABLE(svcsimple_transp_s)) +#else static SVCXPRT *transp; +#endif int registerrpc (u_long prognum, u_long versnum, u_long procnum, char *(*progname) (char *), xdrproc_t inproc, xdrproc_t outproc) { - struct proglst *pl; + struct proglst_ *pl; if (procnum == NULLPROC) { @@ -93,7 +102,7 @@ registerrpc (u_long prognum, u_long vers prognum, versnum); return -1; } - pl = (struct proglst *) malloc (sizeof (struct proglst)); + pl = (struct proglst_ *) malloc (sizeof (struct proglst_)); if (pl == NULL) { (void) fprintf (stderr, _("registerrpc: out of memory\n")); @@ -110,19 +119,19 @@ registerrpc (u_long prognum, u_long vers } static void -universal (struct svc_req *rqstp, SVCXPRT *transp) +universal (struct svc_req *rqstp, SVCXPRT *transp_l) { int prog, proc; char *outdata; char xdrbuf[UDPMSGSIZE]; - struct proglst *pl; + struct proglst_ *pl; /* * enforce "procnum 0 is echo" convention */ if (rqstp->rq_proc == NULLPROC) { - if (svc_sendreply (transp, (xdrproc_t)xdr_void, (char *) NULL) == FALSE) + if (svc_sendreply (transp_l, (xdrproc_t)xdr_void, (char *) NULL) == FALSE) { (void) fprintf (stderr, "xxx\n"); exit (1); @@ -136,16 +145,16 @@ universal (struct svc_req *rqstp, SVCXPR { /* decode arguments into a CLEAN buffer */ __bzero (xdrbuf, sizeof (xdrbuf)); /* required ! */ - if (!svc_getargs (transp, pl->p_inproc, xdrbuf)) + if (!svc_getargs (transp_l, pl->p_inproc, xdrbuf)) { - svcerr_decode (transp); + svcerr_decode (transp_l); return; } outdata = (*(pl->p_progname)) (xdrbuf); if (outdata == NULL && pl->p_outproc != (xdrproc_t)xdr_void) /* there was an error */ return; - if (!svc_sendreply (transp, pl->p_outproc, outdata)) + if (!svc_sendreply (transp_l, pl->p_outproc, outdata)) { (void) fprintf (stderr, _ ("trouble replying to prog %d\n"), @@ -153,7 +162,7 @@ universal (struct svc_req *rqstp, SVCXPR exit (1); } /* free the decoded arguments */ - (void) svc_freeargs (transp, pl->p_inproc, xdrbuf); + (void) svc_freeargs (transp_l, pl->p_inproc, xdrbuf); return; } (void) fprintf (stderr, _ ("never registered prog %d\n"), prog); diff -durpNa glibc-2.2.2/sunrpc/svcauth_des.c glibc-2.2.3/sunrpc/svcauth_des.c --- glibc-2.2.2/sunrpc/svcauth_des.c Thu Apr 15 11:02:20 1999 +++ glibc-2.2.3/sunrpc/svcauth_des.c Mon Mar 26 20:53:09 2001 @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include #include #include @@ -71,8 +71,13 @@ struct cache_entry struct rpc_timeval laststamp; /* detect replays of creds */ char *localcred; /* generic local credential */ }; -static struct cache_entry *authdes_cache /* [AUTHDES_CACHESZ] */ ; -static int *authdes_lru /* [AUTHDES_CACHESZ] */ ; +#ifdef _RPC_THREAD_SAFE_ +#define authdes_cache ((struct cache_entry *)RPC_THREAD_VARIABLE(authdes_cache_s)) +#define authdes_lru ((int *)RPC_THREAD_VARIABLE(authdes_lru_s)) +#else +static struct cache_entry *authdes_cache; +static int *authdes_lru; +#endif static void cache_init (void) internal_function; /* initialize the cache */ static short cache_spot (des_block *, char *, struct rpc_timeval *) diff -durpNa glibc-2.2.2/sysdeps/alpha/dl-machine.h glibc-2.2.3/sysdeps/alpha/dl-machine.h --- glibc-2.2.2/sysdeps/alpha/dl-machine.h Thu Nov 16 11:12:04 2000 +++ glibc-2.2.3/sysdeps/alpha/dl-machine.h Mon Mar 26 20:53:10 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. Alpha version. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson . @@ -500,8 +500,10 @@ elf_machine_rela (struct link_map *map, memcpy (reloc_addr_1, &reloc_addr_val, 8); } } +#ifndef RTLD_BOOTSTRAP else if (r_type == R_ALPHA_NONE) return; +#endif else { Elf64_Addr loadbase, sym_value; @@ -512,8 +514,9 @@ elf_machine_rela (struct link_map *map, if (r_type == R_ALPHA_GLOB_DAT) *reloc_addr = sym_value; - else if (r_type == R_ALPHA_JMP_SLOT) + else if (r_type == R_ALPHA_JMP_SLOT) elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value); +#ifndef RTLD_BOOTSTRAP else if (r_type == R_ALPHA_REFQUAD) { void *reloc_addr_1 = reloc_addr; @@ -522,7 +525,6 @@ elf_machine_rela (struct link_map *map, /* Load value without causing unaligned trap. */ memcpy (&reloc_addr_val, reloc_addr_1, 8); sym_value += reloc_addr_val; -#ifndef RTLD_BOOTSTRAP if (map == &_dl_rtld_map) { /* Undo the relocation done here during bootstrapping. @@ -536,10 +538,10 @@ elf_machine_rela (struct link_map *map, sym_value -= dlsymtab[ELF64_R_SYM(reloc->r_info)].st_value; sym_value -= reloc->r_addend; } -#endif /* Store value without causing unaligned trap. */ memcpy (reloc_addr_1, &sym_value, 8); } +#endif else _dl_reloc_bad_type (map, r_type, 0); } diff -durpNa glibc-2.2.2/sysdeps/alpha/fpu/libm-test-ulps glibc-2.2.3/sysdeps/alpha/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/alpha/fpu/libm-test-ulps Thu Nov 16 11:12:04 2000 +++ glibc-2.2.3/sysdeps/alpha/fpu/libm-test-ulps Wed Apr 25 14:51:02 2001 @@ -13,6 +13,17 @@ float: 2 idouble: 1 ifloat: 2 +# atan2 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4 +ifloat: 4 + # atanh Test "atanh (0.7) == 0.8673005276940531944": double: 1 @@ -39,87 +50,87 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -174,7 +185,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -521,7 +532,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -538,7 +549,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -757,6 +768,10 @@ double: 1 float: 2 idouble: 1 ifloat: 2 + +Function: "atan2": +float: 4 +ifloat: 4 Function: "atanh": double: 1 diff -durpNa glibc-2.2.2/sysdeps/alpha/ldiv.S glibc-2.2.3/sysdeps/alpha/ldiv.S --- glibc-2.2.2/sysdeps/alpha/ldiv.S Thu Mar 20 11:33:28 1997 +++ glibc-2.2.3/sysdeps/alpha/ldiv.S Sat Apr 7 14:02:37 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson . @@ -106,3 +106,4 @@ $divbyzero: .end ldiv weak_alias(ldiv, lldiv) +weak_alias(ldiv, imaxdiv) diff -durpNa glibc-2.2.2/sysdeps/alpha/stackinfo.h glibc-2.2.3/sysdeps/alpha/stackinfo.h --- glibc-2.2.2/sysdeps/alpha/stackinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/alpha/stackinfo.h Tue Apr 10 13:50:54 2001 @@ -0,0 +1,28 @@ +/* Copyright (C) 2001 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. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On Alpha the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +#endif /* stackinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/arm/dl-machine.h glibc-2.2.3/sysdeps/arm/dl-machine.h --- glibc-2.2.2/sysdeps/arm/dl-machine.h Fri Feb 9 10:04:24 2001 +++ glibc-2.2.3/sysdeps/arm/dl-machine.h Mon Mar 26 20:53:12 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. ARM version. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -436,10 +436,10 @@ elf_machine_rel (struct link_map *map, c const char *strtab; strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/arm/fpu/fedisblxcpt.c glibc-2.2.3/sysdeps/arm/fpu/fedisblxcpt.c --- glibc-2.2.2/sysdeps/arm/fpu/fedisblxcpt.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/arm/fpu/fedisblxcpt.c Sun Apr 22 07:31:25 2001 @@ -0,0 +1,40 @@ +/* Disable floating-point exceptions. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Philip Blundell , 2001. + + 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 +#include + +int +fedisableexcept (int excepts) +{ + unsigned long int new_exc, old_exc; + + _FPU_GETCW(new_exc); + + old_exc = (new_exc >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; + + excepts &= FE_ALL_EXCEPT; + + new_exc &= ~(excepts << FE_EXCEPT_SHIFT); + + _FPU_SETCW(new_exc); + + return old_exc; +} diff -durpNa glibc-2.2.2/sysdeps/arm/fpu/feenablxcpt.c glibc-2.2.3/sysdeps/arm/fpu/feenablxcpt.c --- glibc-2.2.2/sysdeps/arm/fpu/feenablxcpt.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/arm/fpu/feenablxcpt.c Sun Apr 22 07:31:51 2001 @@ -0,0 +1,40 @@ +/* Enable floating-point exceptions. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Philip Blundell , 2001. + + 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 +#include + +int +feenableexcept (int excepts) +{ + unsigned long int new_exc, old_exc; + + _FPU_GETCW(new_exc); + + old_exc = (new_exc >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; + + excepts &= FE_ALL_EXCEPT; + + new_exc |= (excepts << FE_EXCEPT_SHIFT); + + _FPU_SETCW(new_exc); + + return old_exc; +} diff -durpNa glibc-2.2.2/sysdeps/arm/fpu/fegetexcept.c glibc-2.2.3/sysdeps/arm/fpu/fegetexcept.c --- glibc-2.2.2/sysdeps/arm/fpu/fegetexcept.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/arm/fpu/fegetexcept.c Sun Apr 22 07:32:20 2001 @@ -0,0 +1,32 @@ +/* Get floating-point exceptions. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Philip Blundell , 2001 + + 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 +#include + +int +fegetexcept (void) +{ + unsigned long temp; + + _FPU_GETCW (temp); + + return (temp >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; +} diff -durpNa glibc-2.2.2/sysdeps/arm/libm-test-ulps glibc-2.2.3/sysdeps/arm/libm-test-ulps --- glibc-2.2.2/sysdeps/arm/libm-test-ulps Thu Oct 26 22:57:34 2000 +++ glibc-2.2.3/sysdeps/arm/libm-test-ulps Tue Apr 17 14:57:12 2001 @@ -39,87 +39,87 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -174,7 +174,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -521,7 +521,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -538,7 +538,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 diff -durpNa glibc-2.2.2/sysdeps/arm/stackinfo.h glibc-2.2.3/sysdeps/arm/stackinfo.h --- glibc-2.2.2/sysdeps/arm/stackinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/arm/stackinfo.h Wed Apr 11 00:34:36 2001 @@ -0,0 +1,28 @@ +/* Copyright (C) 2001 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. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On Arm the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +#endif /* stackinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/cris/Dist glibc-2.2.3/sysdeps/cris/Dist --- glibc-2.2.2/sysdeps/cris/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/Dist Mon Apr 9 17:18:50 2001 @@ -0,0 +1 @@ +_mcount.S diff -durpNa glibc-2.2.2/sysdeps/cris/Implies glibc-2.2.3/sysdeps/cris/Implies --- glibc-2.2.2/sysdeps/cris/Implies Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/Implies Mon Apr 9 17:19:20 2001 @@ -0,0 +1,3 @@ +wordsize-32 +ieee754/flt-32 +ieee754/dbl-64 diff -durpNa glibc-2.2.2/sysdeps/cris/Makefile glibc-2.2.3/sysdeps/cris/Makefile --- glibc-2.2.2/sysdeps/cris/Makefile Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/Makefile Mon Apr 9 17:19:49 2001 @@ -0,0 +1,44 @@ +# Copyright (C) 1999, 2000, 2001 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. + +# We don't support long doubles as a distinct type. We don't need to set +# this variable; it's here mostly for documentational purposes. + +long-double-fcts = no + +# FIXME: Note that this is a machine-specific stub; profiling is not +# implemented. +ifeq ($(subdir),gmon) +sysdep_routines += _mcount +endif + +# FIXME: This test seems generally bogus. Wrong types in function calls +# and assumes FE_TONEAREST is defined. Does it work somewhere? +# Presumably it does, so let's settle for filtering it out target-wise +# until it's agreed what should be done. +ifeq ($(subdir),math) +tests := $(filter-out test-fenv, $(tests)) +endif + +# PIC code must be assembled with special options, passed on by gcc when +# given the -fpic option. +ASFLAGS-.os = -fpic + +# Overflow occurs at 2**15/4 (8192) symbols. Glibc uses about 2000. +# So use -fpic: smaller-size relocs; smaller, faster code. +pic-ccflag = -fpic diff -durpNa glibc-2.2.2/sysdeps/cris/__longjmp.S glibc-2.2.3/sysdeps/cris/__longjmp.S --- glibc-2.2.2/sysdeps/cris/__longjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/__longjmp.S Mon Apr 9 17:20:03 2001 @@ -0,0 +1,38 @@ +/* longjmp for CRIS. + Copyright (C) 2001 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. */ + +#include +#define _SETJMP_H +#define _ASM +#include + + .syntax no_register_prefix + +/* Saving and restoring CCR is meaningless, so we don't do it. */ +ENTRY (__longjmp) + /* Note that r10 = jmp_buf, r11 = retval. */ + move [r10+16*4],srp + test.d r11 + beq 0f /* Already a 1 in place. */ + nop + /* Offset for r9, the return value (see setjmp). */ + move.d r11,[r10+6*4] +0: + movem [r10],pc +END (__longjmp) diff -durpNa glibc-2.2.2/sysdeps/cris/_mcount.S glibc-2.2.3/sysdeps/cris/_mcount.S --- glibc-2.2.2/sysdeps/cris/_mcount.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/_mcount.S Mon Apr 9 17:20:23 2001 @@ -0,0 +1,36 @@ +/* Machine-specific calling sequence for `mcount' profiling function for CRIS. + Copyright (C) 2001 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. */ + +/* FIXME: This isn't implemented yet. This is just a machine-specific + stub. Perhaps a real implementation can make use of it. */ + +#include + +#undef CALL_MCOUNT +#define CALL_MCOUNT + +ENTRY (_mcount) + SETUP_PIC + /* Sorry, isn't implemented yet. + Can't call abort; that will recurse. Force SEGV instead. */ + test.d [99] +1: + ba 1b + nop +END (_mcount) diff -durpNa glibc-2.2.2/sysdeps/cris/bits/endian.h glibc-2.2.3/sysdeps/cris/bits/endian.h --- glibc-2.2.2/sysdeps/cris/bits/endian.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/bits/endian.h Mon Apr 9 17:20:57 2001 @@ -0,0 +1,7 @@ +/* CRIS is little-endian. */ + +#ifndef _ENDIAN_H +# error "Never use directly; include instead." +#endif + +#define __BYTE_ORDER __LITTLE_ENDIAN diff -durpNa glibc-2.2.2/sysdeps/cris/bits/setjmp.h glibc-2.2.3/sysdeps/cris/bits/setjmp.h --- glibc-2.2.2/sysdeps/cris/bits/setjmp.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/bits/setjmp.h Mon Apr 9 17:21:13 2001 @@ -0,0 +1,54 @@ +/* Copyright (C) 1997, 1998 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. */ + +/* Define the machine-dependent type `jmp_buf', CRIS version. */ + +/* Note that saving and restoring CCR has no meaning in user mode, so we + don't actually do it; the slot is now reserved. + + jmp_buf[0] - PC + jmp_buf[1] - SP (R14) + jmp_buf[2] - R13 + jmp_buf[3] - R12 + jmp_buf[4] - R11 + jmp_buf[5] - R10 + jmp_buf[6] - R9 + jmp_buf[7] - R8 + jmp_buf[8] - R7 + jmp_buf[9] - R6 + jmp_buf[10] - R5 + jmp_buf[11] - R4 + jmp_buf[12] - R3 + jmp_buf[13] - R2 + jmp_buf[14] - R1 + jmp_buf[15] - R0 + jmp_buf[16] - SRP + jmp_buf[17] - CCR */ + +#ifndef _ASM +typedef unsigned long int __jmp_buf[18]; +#endif + +#if defined (__USE_MISC) || defined (_ASM) +#define JB_SP 1 +#endif + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address) \ + ((unsigned long int) (address) < (jmpbuf)[JB_SP]) diff -durpNa glibc-2.2.2/sysdeps/cris/bits/string.h glibc-2.2.3/sysdeps/cris/bits/string.h --- glibc-2.2.2/sysdeps/cris/bits/string.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/bits/string.h Mon Apr 9 17:21:27 2001 @@ -0,0 +1,26 @@ +/* Optimized, inlined string functions. CRIS version. + Copyright (C) 1997, 2001 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 _STRING_H +# error "Never use directly; include instead." +#endif + +/* Currently the only purpose of this file is to tell the generic inline + macros that unaligned memory access is possible. */ +#define _STRING_ARCH_unaligned 1 diff -durpNa glibc-2.2.2/sysdeps/cris/dl-machine.h glibc-2.2.3/sysdeps/cris/dl-machine.h --- glibc-2.2.2/sysdeps/cris/dl-machine.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/dl-machine.h Mon Apr 9 17:22:01 2001 @@ -0,0 +1,392 @@ +/* Machine-dependent ELF dynamic relocation inline functions. CRIS version. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 dl_machine_h +#define dl_machine_h + +#define ELF_MACHINE_NAME "CRIS" + +#include + +#ifdef __PIC__ +# define CALL_FN(x) \ + "move.d $pc,$r9\n\t" \ + "add.d " #x " - .,$r9\n\t" \ + "jsr $r9" +#else +# define CALL_FN(x) "jsr " #x +#endif + +/* Return nonzero iff ELF header is compatible with the running host. */ + +static inline int +elf_machine_matches_host (const Elf32_Ehdr *ehdr) +{ + return ehdr->e_machine == EM_CRIS; +} + +/* Return the link-time address of _DYNAMIC. Conveniently, this is the + first element of the GOT. This must be inlined in a function which + uses global data. */ + +static inline Elf32_Addr +elf_machine_dynamic (void) +{ + /* Don't just set this to an asm variable "r0" since that's not logical + (like, the variable is uninitialized and the register is fixed) and + may make GCC trip over itself doing register allocation. Yes, I'm + paranoid. Why do you ask? */ + Elf32_Addr *got; + + __asm__ ("move.d $r0,%0" : "=rm" (got)); + return *got; +} + +/* Return the run-time load address of the shared object. We do it like + m68k and i386, by taking an arbitrary local symbol, forcing a GOT entry + for it, and peeking into the GOT table, which is set to the link-time + file-relative symbol value (regardless of whether the target is REL or + RELA). We subtract this link-time file-relative value from the "local" + value we calculate from GOT position and GOT offset. FIXME: Perhaps + there's some other symbol we could use, that we don't *have* to force a + GOT entry for. */ + +static inline Elf32_Addr +elf_machine_load_address (void) +{ + Elf32_Addr gotaddr_diff; + __asm__ ("sub.d [$r0+_dl_start:GOT16],$r0,%0\n\t" + "add.d _dl_start:GOTOFF,%0" : "=r" (gotaddr_diff)); + return gotaddr_diff; +} + +/* Set up the loaded object described by L so its unrelocated PLT + entries will jump to the on-demand fixup code in dl-runtime.c. */ + +static inline int +elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +{ + Elf32_Addr *got; + extern void _dl_runtime_resolve (Elf32_Word); + extern void _dl_runtime_profile (Elf32_Word); + + if (l->l_info[DT_JMPREL] && lazy) + { + /* The GOT entries for functions in the PLT have not yet been + filled in. Their initial contents will arrange when called + to push an offset into the .rela.plt section, push + _GLOBAL_OFFSET_TABLE_[1], and then jump to + _GLOBAL_OFFSET_TABLE_[2]. */ + got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); + got[1] = (Elf32_Addr) l; /* Identify this shared object. */ + + /* The got[2] entry contains the address of a function which gets + called to get the address of a so far unresolved function and + jump to it. The profiling extension of the dynamic linker allows + to intercept the calls to collect information. In this case we + don't store the address in the GOT so that all future calls also + end in this function. */ + if (__builtin_expect (profile, 0)) + { + got[2] = (Elf32_Addr) &_dl_runtime_profile; + + if (_dl_name_match_p (_dl_profile, l)) + { + /* This is the object we are looking for. Say that we really + want profiling and the timers are started. */ + _dl_profile_map = l; + } + } + else + /* This function will get called to fix up the GOT entry indicated by + the offset on the stack, and then jump to the resolved address. */ + got[2] = (Elf32_Addr) &_dl_runtime_resolve; + } + + return lazy; +} + +/* This code is used in dl-runtime.c to call the `fixup' function + and then redirect to the address it returns. + + We get here with the offset into the relocation table pushed on stack, + and the link map in MOF. */ + +#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \ +"; Trampoline for " #fixup_name " + .globl " #tramp_name " + .type " #tramp_name ", @function +" #tramp_name ": + push $r13 + push $r12 + push $r11 + push $r10 + push $r9 + push $srp + move.d [$sp+6*4],$r11 + move $mof,$r10 + " CALL_FN (fixup_name) " + move.d $r10,[$sp+6*4] + pop $srp + pop $r9 + pop $r10 + pop $r11 + pop $r12 + pop $r13 + jump [$sp+] + .size " #tramp_name ", . - " #tramp_name "\n" +#ifndef PROF +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ +asm (TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup) \ + TRAMPOLINE_TEMPLATE (_dl_runtime_profile, profile_fixup)); +#else +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ +asm (TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup) \ + ".globl _dl_runtime_profile\n" \ + ".set _dl_runtime_profile, _dl_runtime_resolve"); +#endif + + +/* Mask identifying addresses reserved for the user program, + where the dynamic linker should not map anything. */ +#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL + +/* Initial entry point code for the dynamic linker. + The C function `_dl_start' is the real entry point; + its return value is the user program's entry point. */ + +#define RTLD_START asm ("\ + .text + .globl _start + .type _start,@function +_start: + move.d $sp,$r10 + " CALL_FN (_dl_start) " + /* FALLTHRU */ + + .globl _dl_start_user + .type _dl_start_user,@function +_dl_start_user: + ; Save the user entry point address in R1. + move.d $r10,$r1 + ; Point R0 at the GOT. + move.d $pc,$r0 + sub.d .:GOTOFF,$r0 + ; Remember the highest stack address. + move.d [$r0+__libc_stack_end:GOT16],$r13 + move.d $sp,[$r13] + ; See if we were run as a command with the executable file + ; name as an extra leading argument. + move.d [$r0+_dl_skip_args:GOT16],$r13 + move.d [$r13],$r9 + ; Get the original argument count + move.d [$sp],$r11 + ; Subtract _dl_skip_args from it. + sub.d $r9,$r11 + ; Adjust the stack pointer to skip _dl_skip_args words. + addi $r9.d,$sp + ; Put the new argc in place as expected by the user entry. + move.d $r11,[$sp] + ; Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) + ; env: skip scaled argc and skip stored argc and NULL at end of argv[]. + move.d $sp,$r13 + addi $r11.d,$r13 + addq 8,$r13 + ; argv: skip stored argc. + move.d $sp,$r12 + addq 4,$r12 + ; main_map: at _dl_loaded. + move.d [$r0+_dl_loaded:GOT16],$r9 + move.d [$r9],$r10 + move.d _dl_init:PLTG,$r9 + add.d $r0,$r9 + jsr $r9 + ; Pass our finalizer function to the user in R10. + move.d [$r0+_dl_fini:GOT16],$r10 + ; Terminate the frame-pointer. + moveq 0,$r8 + ; Cause SEGV if user entry returns. + move $r8,$srp + ; Jump to the user's entry point. + jump $r1 + .size _dl_start_user, . - _dl_start_user + .previous"); + +/* Nonzero iff TYPE describes a relocation that should + skip the executable when looking up the symbol value. */ +#define elf_machine_lookup_noexec_p(type) ((type) == R_CRIS_COPY) + +/* Nonzero iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. */ +#define elf_machine_lookup_noplt_p(type) ((type) == R_CRIS_JUMP_SLOT) + +/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ +#define ELF_MACHINE_JMP_SLOT R_CRIS_JUMP_SLOT + +/* CRIS never uses Elf32_Rel relocations. */ +#define ELF_MACHINE_NO_REL 1 + +/* We define an initialization functions. This is called very early in + _dl_sysdep_start. */ +#define DL_PLATFORM_INIT dl_platform_init () + +extern const char *_dl_platform; + +static inline void __attribute__ ((unused)) +dl_platform_init (void) +{ + if (_dl_platform != NULL && *_dl_platform == '\0') + /* Avoid an empty string which would disturb us. */ + _dl_platform = NULL; +} + +static inline Elf32_Addr +elf_machine_fixup_plt (struct link_map *map, lookup_t t, + const Elf32_Rela *reloc, + Elf32_Addr *reloc_addr, Elf32_Addr value) +{ + return *reloc_addr = value; +} + +/* Return the final value of a plt relocation. */ +static inline Elf32_Addr +elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, + Elf32_Addr value) +{ + return value + reloc->r_addend; +} + +#endif /* !dl_machine_h */ + +#ifdef RESOLVE + +/* Perform the relocation specified by RELOC and SYM (which is fully resolved). + MAP is the object containing the reloc. */ + +static inline void +elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, + const Elf32_Sym *sym, const struct r_found_version *version, + Elf32_Addr *const reloc_addr) +{ +#ifndef RTLD_BOOTSTRAP + /* This is defined in rtld.c, but nowhere in the static libc.a; make the + reference weak so static programs can still link. This declaration + cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) + because rtld.c contains the common defn for _dl_rtld_map, which is + incompatible with a weak decl in the same file. */ + weak_extern (_dl_rtld_map); +#endif + + if (ELF32_R_TYPE (reloc->r_info) == R_CRIS_RELATIVE) + { +#ifndef RTLD_BOOTSTRAP + if (map != &_dl_rtld_map) /* Already done in rtld itself. */ +#endif + *reloc_addr = map->l_addr + reloc->r_addend; + } + else + { +#ifndef RTLD_BOOTSTRAP + const Elf32_Sym *const refsym = sym; +#endif + Elf32_Addr value; + if (sym->st_shndx != SHN_UNDEF && + ELF32_ST_BIND (sym->st_info) == STB_LOCAL) + value = map->l_addr; + else + { + value = RESOLVE (&sym, version, ELF32_R_TYPE (reloc->r_info)); + if (sym) + value += sym->st_value; + } + value += reloc->r_addend; /* Assume copy relocs have zero addend. */ + + switch (ELF32_R_TYPE (reloc->r_info)) + { +#ifndef RTLD_BOOTSTRAP + case R_CRIS_COPY: + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; + if (sym->st_size > refsym->st_size + || (_dl_verbose && sym->st_size < refsym->st_size)) + { + extern char **_dl_argv; + const char *strtab; + + strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); + } + memcpy (reloc_addr, (void *) value, MIN (sym->st_size, + refsym->st_size)); + break; + + case R_CRIS_32: +#endif + case R_CRIS_GLOB_DAT: + case R_CRIS_JUMP_SLOT: + *reloc_addr = value; + break; +#ifndef RTLD_BOOTSTRAP + case R_CRIS_8: + *(char *) reloc_addr = value; + break; + case R_CRIS_16: + *(short *) reloc_addr = value; + break; + case R_CRIS_8_PCREL: + *(char *) reloc_addr + = value + reloc->r_addend - (Elf32_Addr) reloc_addr - 1; + break; + case R_CRIS_16_PCREL: + *(short *) reloc_addr + = value + reloc->r_addend - (Elf32_Addr) reloc_addr - 2; + break; + case R_CRIS_32_PCREL: + *reloc_addr = value + reloc->r_addend - (Elf32_Addr) reloc_addr - 4; + break; +#endif + case R_CRIS_NONE: + break; +#if !defined RTLD_BOOTSTRAP || defined _NDEBUG + default: + _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 0); + break; +#endif + } + } +} + +static inline void +elf_machine_lazy_rel (struct link_map *map, + Elf32_Addr l_addr, const Elf32_Rela *reloc) +{ + Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); + if (__builtin_expect (ELF32_R_TYPE (reloc->r_info), R_CRIS_JUMP_SLOT) + == R_CRIS_JUMP_SLOT) + *reloc_addr += l_addr; + else + _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); +} + +#endif /* RESOLVE */ diff -durpNa glibc-2.2.2/sysdeps/cris/elf/start.S glibc-2.2.3/sysdeps/cris/elf/start.S --- glibc-2.2.2/sysdeps/cris/elf/start.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/elf/start.S Mon Apr 9 17:22:36 2001 @@ -0,0 +1,123 @@ +/* Startup code compliant to the ELF CRIS ABI (to-be-written). + Copyright (C) 2001 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. */ + +#include + +/* This is the canonical entry point, usually the first thing in the text + segment. When the entry point runs, most registers' values are + unspecified, except for: + + R10 Contains a function pointer to be registered with `atexit'. + This is how the dynamic linker arranges to have DT_FINI + functions called for shared libraries that have been loaded + before this code runs. + + SP The stack contains the arguments and environment: + [SP] argc + [SP+4] argv[0] + ... + [SP+4*argc] NULL + [SP+4*(argc+1)] envp[0] + ... + NULL +*/ + + .syntax no_register_prefix + + .text + .globl _start +_start: + /* Clear the frame pointer, to mark the outermost frame. */ + moveq 0,r8 + + /* Move the shared library termination function to the right place + for __libc_main. */ + move.d r10,r9 + + /* Extract the arguments as encoded on the stack and set up the + arguments for `main': argc, argv. envp will be determined + later in __libc_start_main. */ + + /* Get the argument count. */ + move.d [sp],r11 + + /* Store the stack pointer as end of stack. We overwrite + the incoming argc. */ + move.d sp,[sp] + + /* The argument vector starts just after the argument count. */ + move.d sp,r12 + addq 4,r12 + + /* There are seven arguments to __libc_start_main: + r10: main - Address of it. + r11: argc + r12: argv + r13: init - Function to call. + + [sp]: fini - Function to register with atexit. + [sp+4]: rtld_fini - Another function to register with atexit. + [sp+8]: stack_end - Top of stack (actually same as argv). + + The last two are passed on stack. */ + + /* Store the fini function coming from the dynamic loader. */ + push r9 + + /* Get the addresses of our own entry points to `.fini' and + `.init'. */ + +#ifdef __PIC__ + /* If for some reason this program is compiled as PIC, set up R0. */ + move.d pc,r0 + sub.d .:GOTOFF,r0 + + move.d _init:PLTG,r13 + add.d r0,r13 + move.d _fini:PLTG,r9 + add.d r0,r9 + move.d main:PLTG,r10 + add.d r0,r10 +#else + move.d _init,r13 + move.d _fini,r9 + move.d main,r10 +#endif + push r9 + + /* Call the user's main function, and exit with its value. But + let the libc call main. */ + PLTCALL (__libc_start_main) + + /* Crash if somehow `exit' does return. We have at least 8192 + invalid addresses to choose from. */ + test.d [6502] + + /* Stop the unstoppable. */ +0: + ba 0b + nop + +/* Define a symbol for the first piece of initialized data. */ + .data + .globl __data_start +__data_start: + .long 0 + .weak data_start + data_start = __data_start diff -durpNa glibc-2.2.2/sysdeps/cris/machine-gmon.h glibc-2.2.3/sysdeps/cris/machine-gmon.h --- glibc-2.2.2/sysdeps/cris/machine-gmon.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/machine-gmon.h Mon Apr 9 17:22:52 2001 @@ -0,0 +1,28 @@ +/* PowerPC-specific implementation of profiling support. + Copyright (C) 1997, 2001 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. */ + +void __mcount_internal (unsigned long frompc, unsigned long selfpc); + +#define _MCOUNT_DECL(frompc, selfpc) \ +void __mcount_internal (unsigned long frompc, unsigned long selfpc) + + +/* Define MCOUNT as empty since we have the implementation in another + file. FIXME: Just stubs, currently. */ +#define MCOUNT diff -durpNa glibc-2.2.2/sysdeps/cris/memcopy.h glibc-2.2.3/sysdeps/cris/memcopy.h --- glibc-2.2.2/sysdeps/cris/memcopy.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/memcopy.h Mon Apr 9 17:23:12 2001 @@ -0,0 +1,57 @@ +/* Copyright (C) 2001 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. */ + +#include + +/* We override the word-copying macros, partly because misalignment in one + pointer isn't cause for a special function, partly because we want to + get rid of wordcopy.c; these macros are only used in memmove.c (and + it's sibling bcopy) since we have arch-specific mempcpy, memcpy and + memset. */ + +#undef OP_T_THRES +#define OP_T_THRES OPSIZ + +#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \ + do \ + { \ + unsigned long enddst_bp = dst_bp + nbytes - (nbytes % OPSIZ); \ + nbytes_left = (nbytes % OPSIZ); \ + while (dst_bp < (unsigned long) enddst_bp) \ + { \ + op_t x = *(op_t *) src_bp; \ + src_bp += sizeof x; \ + *(op_t *) dst_bp = x; \ + dst_bp += sizeof x; \ + } \ + } while (0) + +#define WORD_COPY_BWD(dst_bp, src_bp, nbytes_left, nbytes) \ + do \ + { \ + unsigned long enddst_bp = dst_bp - nbytes + (nbytes % OPSIZ); \ + nbytes_left = (nbytes % OPSIZ); \ + while (dst_bp > enddst_bp) \ + { \ + op_t x; \ + src_bp -= sizeof x; \ + x = *(op_t *) src_bp; \ + dst_bp -= sizeof x; \ + *(op_t *) dst_bp = x; \ + } \ + } while (0) diff -durpNa glibc-2.2.2/sysdeps/cris/memusage.h glibc-2.2.3/sysdeps/cris/memusage.h --- glibc-2.2.2/sysdeps/cris/memusage.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/memusage.h Mon Apr 9 17:23:30 2001 @@ -0,0 +1,27 @@ +/* Copyright (C) 2001 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. */ + +/* No asm variables, just for reasons of solid healthy paranoia. */ +#define GETSP() \ + ({ \ + uintptr_t stack_ptr; \ + __asm__ ("move.d $sp,%0" : "=rm" (stack_ptr)); \ + stack_ptr; \ + }) + +#include diff -durpNa glibc-2.2.2/sysdeps/cris/setjmp.S glibc-2.2.3/sysdeps/cris/setjmp.S --- glibc-2.2.2/sysdeps/cris/setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/setjmp.S Mon Apr 9 17:23:44 2001 @@ -0,0 +1,66 @@ +/* setjmp for CRIS. + Copyright (C) 2001 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. */ + +#include +#define _SETJMP_H +#define _ASM +#include + + .syntax no_register_prefix + +ENTRY (__sigsetjmp) +.Local__sigsetjmp: + moveq 1,r9 + movem sp,[r10+1*4] +#ifdef __PIC__ + move.d pc,r9 + addq 0f-.,r9 +#else + move.d 0f,r9 +#endif + move.d r9,[r10] + move srp,[r10+16*4] + move ccr,[r10+17*4] + PLTJUMP (__sigjmp_save) +0: /* This is where longjmp returns. (Don't use "ret" - it's a macro. */ + Ret + move.d r9,r10 +END (__sigsetjmp) + +/* Binary compatibility entry points. Having these in separate files + is not meaningful and just adds library overhead. */ + +ENTRY (__setjmp) + ba .Local__sigsetjmp + moveq 0,r11 +END (__setjmp) + +ENTRY (_setjmp) + ba .Local__sigsetjmp + moveq 0,r11 +END (_setjmp) + +ENTRY (setjmp) + ba .Local__sigsetjmp + moveq 1,r11 +END (setjmp) + +weak_extern (__setjmp) +weak_extern (_setjmp) +weak_extern (setjmp) diff -durpNa glibc-2.2.2/sysdeps/cris/sysdep.h glibc-2.2.3/sysdeps/cris/sysdep.h --- glibc-2.2.2/sysdeps/cris/sysdep.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/sysdep.h Mon Apr 9 17:23:59 2001 @@ -0,0 +1,114 @@ +/* Assembler macros for CRIS. + Copyright (C) 1999, 2000, 2001 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. */ + +#include + +#ifndef HAVE_ELF +# error ELF is assumed. Generalize the code and retry. +#endif + +#ifndef NO_UNDERSCORES +# error User-label prefix (underscore) assumed absent. Generalize the code and retry. +#endif + +#ifdef __ASSEMBLER__ + +/* Syntactic details of assembly-code. */ + +/* It is *not* generally true that "ELF uses byte-counts for .align, most + others use log2 of count of bytes", like some neighboring configs say. + See "align" in gas/read.c which is not overridden by + gas/config/obj-elf.c. It takes a log2 argument. *Some* targets + override it to take a byte argument. People should read source instead + of relying on hearsay. */ +# define ALIGNARG(log2) log2 + +# define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg +# define ASM_SIZE_DIRECTIVE(name) .size name,.-name + +/* The non-PIC jump is preferred, since it does not stall, and does not + invoke generation of a PLT. These macros assume that $r0 is set up as + GOT register. */ +# ifdef __PIC__ +# define PLTJUMP(_x) \ + add.d C_SYMBOL_NAME (_x):PLT,$pc + +# define PLTCALL(_x) \ + move.d C_SYMBOL_NAME (_x):PLTG,$r9 @ \ + add.d $r0,$r9 @ \ + jsr $r9 + +# define SETUP_PIC \ + push $r0 @ \ + move.d $pc,$r0 @ \ + sub.d .:GOTOFF,$r0 + +# define TEARDOWN_PIC pop $r0 +# else +# define PLTJUMP(_x) jump C_SYMBOL_NAME (_x) +# define PLTCALL(_x) jsr C_SYMBOL_NAME (_x) +# define SETUP_PIC +# define TEARDOWN_PIC +# endif + +/* Define an entry point visible from C. */ +# define ENTRY(name) \ + .text @ \ + ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (name) @ \ + ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME (name), function) @ \ + .align ALIGNARG (2) @ \ + C_LABEL(name) @ \ + CALL_MCOUNT + +# undef END +# define END(name) \ + ASM_SIZE_DIRECTIVE (C_SYMBOL_NAME (name)) + +/* If compiled for profiling, call `mcount' at the start of each function. + FIXME: Note that profiling is not actually implemented. This is just + example code which might not even compile, though it is believed to be + correct. */ +# ifdef PROF +# define CALL_MCOUNT \ + push $srp @ \ + push $r9 @ \ + push $r10 @ \ + push $r11 @ \ + push $r12 @ \ + push $r13 @ \ + SETUP_PIC @ \ + PLTCALL (mcount) @ \ + TEARDOWN_PIC @ \ + pop $r13 @ \ + pop $r12 @ \ + pop $r11 @ \ + pop $r10 @ \ + pop $r9 @ \ + pop $srp +# else +# define CALL_MCOUNT /* Do nothing. */ +# endif + +/* Since C identifiers are not normally prefixed with an underscore + on this system, the asm identifier `syscall_error' intrudes on the + C name space. Make sure we use an innocuous name. */ +# define syscall_error __syscall_error +# define mcount _mcount + +#endif /* __ASSEMBLER__ */ diff -durpNa glibc-2.2.2/sysdeps/cris/wordcopy.c glibc-2.2.3/sysdeps/cris/wordcopy.c --- glibc-2.2.2/sysdeps/cris/wordcopy.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/cris/wordcopy.c Mon Apr 9 17:24:23 2001 @@ -0,0 +1 @@ +/* Empty; not needed. */ diff -durpNa glibc-2.2.2/sysdeps/generic/atomicity.h glibc-2.2.3/sysdeps/generic/atomicity.h --- glibc-2.2.2/sysdeps/generic/atomicity.h Sun Oct 12 20:52:08 1997 +++ glibc-2.2.3/sysdeps/generic/atomicity.h Sat Apr 7 14:02:37 2001 @@ -1,5 +1,5 @@ /* Low-level functions for atomic operations. Stub version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997,2001 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 @@ -22,10 +22,11 @@ #include +#warning stub atomicity functions are not atomic static inline int __attribute__ ((unused)) -exchange_and_add (uint32_t *mem, int val) +exchange_and_add (volatile uint32_t *mem, int val) { int result = *mem; *mem += val; @@ -34,14 +35,14 @@ exchange_and_add (uint32_t *mem, int val static inline void __attribute__ ((unused)) -atomic_add (uint32_t *mem, int val) +atomic_add (volatile uint32_t *mem, int val) { *mem += val; } static inline int __attribute__ ((unused)) -compare_and_swap (long int *p, long int oldval, long int newval) +compare_and_swap (volatile long int *p, long int oldval, long int newval) { if (*p != oldval) return 0; diff -durpNa glibc-2.2.2/sysdeps/generic/bb_init_func.c glibc-2.2.3/sysdeps/generic/bb_init_func.c --- glibc-2.2.2/sysdeps/generic/bb_init_func.c Tue Jun 3 14:51:06 1997 +++ glibc-2.2.3/sysdeps/generic/bb_init_func.c Mon Mar 26 20:53:12 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Mosberger (davidm@cs.arizona.edu). @@ -47,6 +47,8 @@ __bb_init_func (struct __bb *bb) { /* we didn't register _mcleanup yet and pc profiling doesn't seem to be active, so let's register it now: */ - atexit (_mcleanup); + extern void *__dso_handle __attribute__ ((__weak__)); + __cxa_atexit ((void (*) (void *)) _mcleanup, NULL, + &__dso_handle ? __dso_handle : NULL); } } diff -durpNa glibc-2.2.2/sysdeps/generic/bits/confname.h glibc-2.2.3/sysdeps/generic/bits/confname.h --- glibc-2.2.2/sysdeps/generic/bits/confname.h Fri Feb 9 10:04:24 2001 +++ glibc-2.2.3/sysdeps/generic/bits/confname.h Wed Apr 25 14:51:02 2001 @@ -58,8 +58,12 @@ enum #define _PC_REC_MAX_XFER_SIZE _PC_REC_MAX_XFER_SIZE _PC_REC_MIN_XFER_SIZE, #define _PC_REC_MIN_XFER_SIZE _PC_REC_MIN_XFER_SIZE - _PC_REC_XFER_ALIGN + _PC_REC_XFER_ALIGN, #define _PC_REC_XFER_ALIGN _PC_REC_XFER_ALIGN + _PC_ALLOC_SIZE_MIN, +#define _PC_ALLOC_SIZE_MIN _PC_ALLOC_SIZE_MIN + _PC_SYMLINK_MAX +#define _PC_SYMLINK_MAX _PC_SYMLINK_MAX }; /* Values for the argument to `sysconf'. */ @@ -384,8 +388,8 @@ enum #define _SC_FILE_SYSTEM _SC_FILE_SYSTEM _SC_MONOTONIC_CLOCK, #define _SC_MONOTONIC_CLOCK _SC_MONOTONIC_CLOCK - _SC_MULTIPLE_PROCESS, -#define _SC_MULTIPLE_PROCESS _SC_MULTIPLE_PROCESS + _SC_MULTI_PROCESS, +#define _SC_MULTI_PROCESS _SC_MULTI_PROCESS _SC_SINGLE_PROCESS, #define _SC_SINGLE_PROCESS _SC_SINGLE_PROCESS _SC_NETWORKING, @@ -430,12 +434,32 @@ enum #define _SC_2_PBS_MESSAGE _SC_2_PBS_MESSAGE _SC_2_PBS_TRACK, #define _SC_2_PBS_TRACK _SC_2_PBS_TRACK - _SC_SYMLOOP, -#define _SC_SYMLOOP _SC_SYMLOOP + _SC_SYMLOOP_MAX, +#define _SC_SYMLOOP_MAX _SC_SYMLOOP_MAX _SC_STREAMS, #define _SC_STREAMS _SC_STREAMS - _SC_2_PBS_CHECKPOINT + _SC_2_PBS_CHECKPOINT, #define _SC_2_PBS_CHECKPOINT _SC_2_PBS_CHECKPOINT + + _SC_V6_ILP32_OFF32, +#define _SC_V6_ILP32_OFF32 _SC_V6_ILP32_OFF32 + _SC_V6_ILP32_OFFBIG, +#define _SC_V6_ILP32_OFFBIG _SC_V6_ILP32_OFFBIG + _SC_V6_LP64_OFF64, +#define _SC_V6_LP64_OFF64 _SC_V6_LP64_OFF64 + _SC_V6_LPBIG_OFFBIG, +#define _SC_V6_LPBIG_OFFBIG _SC_V6_LPBIG_OFFBIG + + _SC_HOST_NAME_MAX, +#define _SC_HOST_NAME_MAX _SC_HOST_NAME_MAX + _SC_TRACE, +#define _SC_TRACE _SC_TRACE + _SC_TRACE_EVENT_FILTER, +#define _SC_TRACE_EVENT_FILTER _SC_TRACE_EVENT_FILTER + _SC_TRACE_INHERIT, +#define _SC_TRACE_INHERIT _SC_TRACE_INHERIT + _SC_TRACE_LOG +#define _SC_TRACE_LOG _SC_TRACE_LOG }; #if (defined __USE_POSIX2 || defined __USE_UNIX98 \ @@ -444,64 +468,99 @@ enum /* Values for the NAME argument to `confstr'. */ enum { - _CS_PATH /* The default search path. */ + _CS_PATH, /* The default search path. */ #define _CS_PATH _CS_PATH -#if (defined __USE_FILE_OFFSET64 || defined __USE_LARGEFILE64 \ +# if (defined __USE_FILE_OFFSET64 || defined __USE_LARGEFILE64 \ || defined __USE_LARGEFILE) - , _CS_LFS_CFLAGS = 1000, -# define _CS_LFS_CFLAGS _CS_LFS_CFLAGS +# define _CS_LFS_CFLAGS _CS_LFS_CFLAGS _CS_LFS_LDFLAGS, -# define _CS_LFS_LDFLAGS _CS_LFS_LDFLAGS +# define _CS_LFS_LDFLAGS _CS_LFS_LDFLAGS _CS_LFS_LIBS, -# define _CS_LFS_LIBS _CS_LFS_LIBS +# define _CS_LFS_LIBS _CS_LFS_LIBS _CS_LFS_LINTFLAGS, -# define _CS_LFS_LINTFLAGS _CS_LFS_LINTFLAGS +# define _CS_LFS_LINTFLAGS _CS_LFS_LINTFLAGS _CS_LFS64_CFLAGS, -# define _CS_LFS64_CFLAGS _CS_LFS64_CFLAGS +# define _CS_LFS64_CFLAGS _CS_LFS64_CFLAGS _CS_LFS64_LDFLAGS, -# define _CS_LFS64_LDFLAGS _CS_LFS64_LDFLAGS +# define _CS_LFS64_LDFLAGS _CS_LFS64_LDFLAGS _CS_LFS64_LIBS, -# define _CS_LFS64_LIBS _CS_LFS64_LIBS - _CS_LFS64_LINTFLAGS -# define _CS_LFS64_LINTFLAGS _CS_LFS64_LINTFLAGS -#endif +# define _CS_LFS64_LIBS _CS_LFS64_LIBS + _CS_LFS64_LINTFLAGS, +# define _CS_LFS64_LINTFLAGS _CS_LFS64_LINTFLAGS +# endif -#ifdef __USE_UNIX98 - , +# ifdef __USE_UNIX98 _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, -# define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS +# define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS, -# define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS +# define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LIBS, -# define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS +# define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LINTFLAGS, -# define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS +# define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS, -# define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS +# define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS, -# define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS +# define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LIBS, -# define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS +# define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, -# define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS +# define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_LP64_OFF64_CFLAGS, -# define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS +# define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS, -# define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS +# define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LIBS, -# define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS +# define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LINTFLAGS, -# define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS +# define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS, -# define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS +# define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, -# define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS +# define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LIBS, -# define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS - _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS -# define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS -#endif +# define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS + _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, +# define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS +# endif +# ifdef __USE_XOPEN2K + _CS_POSIX_V6_ILP32_OFF32_CFLAGS, +# define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_CFLAGS + _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, +# define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS + _CS_POSIX_V6_ILP32_OFF32_LIBS, +# define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LIBS + _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, +# define _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS + _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, +# define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS + _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, +# define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS + _CS_POSIX_V6_ILP32_OFFBIG_LIBS, +# define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LIBS + _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, +# define _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS + _CS_POSIX_V6_LP64_OFF64_CFLAGS, +# define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS + _CS_POSIX_V6_LP64_OFF64_LDFLAGS, +# define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS + _CS_POSIX_V6_LP64_OFF64_LIBS, +# define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LIBS + _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, +# define _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_LINTFLAGS + _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, +# define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS + _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, +# define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS + _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, +# define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS + _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, +# define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS +# endif + + _CS_V6_WIDTH_RESTRICTED_ENVS, +# define _CS_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS }; #endif diff -durpNa glibc-2.2.2/sysdeps/generic/bits/environments.h glibc-2.2.3/sysdeps/generic/bits/environments.h --- glibc-2.2.2/sysdeps/generic/bits/environments.h Wed May 19 15:07:07 1999 +++ glibc-2.2.3/sysdeps/generic/bits/environments.h Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2001 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 @@ -27,32 +27,48 @@ `-1' means it is never supported. Undefined means it cannot be statically decided. - _XBS5_ILP32_OFF32 32bit int, long, pointers, and off_t type - _XBS5_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type + _POSIX_V6_ILP32_OFF32 32bit int, long, pointers, and off_t type + _POSIX_V6_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - _XBS5_LP64_OFF32 64bit long and pointers and 32bit off_t type - _XBS5_LPBIG_OFFBIG 64bit long and pointers and large off_t type + _POSIX_V6_LP64_OFF32 64bit long and pointers and 32bit off_t type + _POSIX_V6_LPBIG_OFFBIG 64bit long and pointers and large off_t type + + The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and + _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard + and are available only for compatibility. */ #if __WORDSIZE == 64 /* We can never provide environments with 32-bit wide pointers. */ +# define _POSIX_V6_ILP32_OFF32 -1 +# define _POSIX_V6_ILP32_OFFBIG -1 # define _XBS5_ILP32_OFF32 -1 # define _XBS5_ILP32_OFFBIG -1 +/* We also have no use (for now) for an environment with bigger pointers + and offsets. */ +# define _POSIX_V6_LPBIG_OFFBIG -1 +# define _XBS5_LPBIG_OFFBIG -1 /* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _XBS5_LP64_OFF32 1 -# define _XBS5_LPBIG_OFFBIG 1 +# define _POSIX_V6_LP64_OFF64 1 +# define _XBS5_LP64_OFF64 1 #else /* __WORDSIZE == 32 */ -/* By default we have 32-bit wide `int', `long int', pointers and `off_t'. */ +/* By default we have 32-bit wide `int', `long int', pointers and `off_t' + and all platforms support LFS. */ +# define _POSIX_V6_ILP32_OFF32 1 +# define _POSIX_V6_ILP32_OFFBIG 1 # define _XBS5_ILP32_OFF32 1 +# define _XBS5_ILP32_OFFBIG 1 /* We optionally provide an environment with the above size but an 64-bit side `off_t'. Therefore we don't define _XBS5_ILP32_OFFBIG. */ /* We can never provide environments with 64-bit wide pointers. */ +# define _POSIX_V6_LP64_OFF64 -1 +# define _POSIX_V6_LPBIG_OFFBIG -1 # define _XBS5_LP64_OFF64 -1 # define _XBS5_LPBIG_OFFBIG -1 diff -durpNa glibc-2.2.2/sysdeps/generic/bits/fenv.h glibc-2.2.3/sysdeps/generic/bits/fenv.h --- glibc-2.2.2/sysdeps/generic/bits/fenv.h Thu Sep 7 11:56:38 2000 +++ glibc-2.2.3/sysdeps/generic/bits/fenv.h Thu Apr 12 14:02:07 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2000, 2001 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 @@ -40,13 +40,8 @@ We define no macro which signals no rounding mode is selectable. */ -/* Type representing exception flags. - XXX Probably we should also include the signal handler here. */ -typedef struct - { - unsigned int __flags; - } -fexcept_t; +/* Type representing exception flags. */ +typedef unsigned int fexcept_t; /* Type representing floating-point environment. */ diff -durpNa glibc-2.2.2/sysdeps/generic/bits/libc-tsd.h glibc-2.2.3/sysdeps/generic/bits/libc-tsd.h --- glibc-2.2.2/sysdeps/generic/bits/libc-tsd.h Mon Nov 30 12:04:10 1998 +++ glibc-2.2.3/sysdeps/generic/bits/libc-tsd.h Mon Mar 26 20:53:17 2001 @@ -1,5 +1,5 @@ /* libc-internal interface for thread-specific data. Stub version. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2001 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 @@ -35,6 +35,7 @@ and contains (at least): _LIBC_TSD_KEY_MALLOC _LIBC_TSD_KEY_DL_ERROR + _LIBC_TSD_KEY_RPC_VARS All uses must be the literal _LIBC_TSD_* name in the __libc_tsd_* macros. Some implementations may not provide any enum at all and instead using string pasting in the macros. */ diff -durpNa glibc-2.2.2/sysdeps/generic/bits/mman.h glibc-2.2.3/sysdeps/generic/bits/mman.h --- glibc-2.2.2/sysdeps/generic/bits/mman.h Mon Apr 17 10:18:59 2000 +++ glibc-2.2.3/sysdeps/generic/bits/mman.h Wed Apr 25 14:51:02 2001 @@ -1,5 +1,5 @@ /* Definitions for BSD-style memory management. - Copyright (C) 1994-1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1994-1998,2000,01 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 @@ -79,3 +79,9 @@ # define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ # define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ #endif + + +/* Flags for `mlockall' (can be OR'd together). */ +#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ +#define MCL_FUTURE 2 /* Lock all additions to address + space. */ diff -durpNa glibc-2.2.2/sysdeps/generic/bits/siginfo.h glibc-2.2.3/sysdeps/generic/bits/siginfo.h --- glibc-2.2.2/sysdeps/generic/bits/siginfo.h Fri May 26 12:38:36 2000 +++ glibc-2.2.3/sysdeps/generic/bits/siginfo.h Mon Mar 26 20:53:17 2001 @@ -1,5 +1,5 @@ /* siginfo_t, sigevent and constants. Stub version. - Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2000, 2001 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 @@ -17,13 +17,15 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t +#if !defined _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t # error "Never include this file directly. Use instead" #endif -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 /* Type for data associated with a signal. */ typedef union sigval @@ -31,6 +33,11 @@ typedef union sigval int sival_int; void *sival_ptr; } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 typedef struct siginfo { @@ -173,7 +180,8 @@ enum #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ -#if defined _SIGNAL_H && !defined __have_sigevent_t +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t # define __have_sigevent_t 1 /* Structure to transport application-defined values with signals. */ diff -durpNa glibc-2.2.2/sysdeps/generic/clock_getcpuclockid.c glibc-2.2.3/sysdeps/generic/clock_getcpuclockid.c --- glibc-2.2.2/sysdeps/generic/clock_getcpuclockid.c Fri Feb 9 10:04:24 2001 +++ glibc-2.2.3/sysdeps/generic/clock_getcpuclockid.c Wed Apr 25 14:51:02 2001 @@ -18,10 +18,22 @@ #include #include +#include int clock_getcpuclockid (pid_t pid, clockid_t *clock_id) { + /* We don't allow any process ID but our own. */ + if (pid != 0 && pid != getpid ()) + return EPERM; + +#ifdef CLOCK_PROCESS_CPUTIME_ID + /* Store the number. */ + *clock_id = CLOCK_PROCESS_CPUTIME_ID; + + return 0; +#else /* We don't have a timer for that. */ return ENOENT; +#endif } diff -durpNa glibc-2.2.2/sysdeps/generic/dl-cache.c glibc-2.2.3/sysdeps/generic/dl-cache.c --- glibc-2.2.2/sysdeps/generic/dl-cache.c Sat Jan 6 20:35:37 2001 +++ glibc-2.2.3/sysdeps/generic/dl-cache.c Mon Mar 26 20:53:12 2001 @@ -1,5 +1,5 @@ /* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -154,8 +154,8 @@ _dl_load_cache_lookup (const char *name) const char *best; /* Print a message if the loading of libs is traced. */ - if (_dl_debug_libs) - _dl_debug_message (1, " search cache=", LD_SO_CACHE, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE); if (cache == NULL) { @@ -228,6 +228,8 @@ _dl_load_cache_lookup (const char *name) /* Only accept hwcap if it's for the right platform. */ #define HWCAP_CHECK \ + if (_dl_osversion && cache_new->libs[middle].osversion > _dl_osversion) \ + continue; \ if (_DL_PLATFORMS_COUNT && platform != -1 \ && (cache_new->libs[middle].hwcap & _DL_HWCAP_PLATFORM) != 0 \ && (cache_new->libs[middle].hwcap & _DL_HWCAP_PLATFORM) != platform) \ @@ -252,8 +254,8 @@ _dl_load_cache_lookup (const char *name) } /* Print our result if wanted. */ - if (_dl_debug_libs && best != NULL) - _dl_debug_message (1, " trying file=", best, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0) && best != NULL) + _dl_debug_printf (" trying file=%s\n", best); return best; } diff -durpNa glibc-2.2.2/sysdeps/generic/dl-cache.h glibc-2.2.3/sysdeps/generic/dl-cache.h --- glibc-2.2.2/sysdeps/generic/dl-cache.h Thu Oct 26 22:57:34 2000 +++ glibc-2.2.3/sysdeps/generic/dl-cache.h Mon Mar 26 20:53:12 2001 @@ -76,7 +76,7 @@ struct file_entry_new { int32_t flags; /* This is 1 for an ELF library. */ uint32_t key, value; /* String table indices. */ - uint32_t __unused; /* Align next field always on 8 byte boundary. */ + uint32_t osversion; /* Required OS version. */ uint64_t hwcap; /* Hwcap entry. */ }; diff -durpNa glibc-2.2.2/sysdeps/generic/dl-machine.h glibc-2.2.3/sysdeps/generic/dl-machine.h --- glibc-2.2.2/sysdeps/generic/dl-machine.h Thu Oct 26 22:57:35 2000 +++ glibc-2.2.3/sysdeps/generic/dl-machine.h Mon Mar 26 20:53:12 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. Stub version. - Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,1996,1997,1999,2000,2001 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 @@ -97,11 +97,6 @@ elf_machine_rela (Elf32_Addr loadaddr, E _dl_signal_error (0, "Elf32_Rela relocation requested -- unused on " ELF_MACHINE_NAME); } - - -/* Nonzero iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. */ -#define elf_machine_pltrel_p(type) ((type) == R_???_JMP_SLOT) /* Set up the loaded object described by L so its unrelocated PLT diff -durpNa glibc-2.2.2/sysdeps/generic/dl-sysdep.c glibc-2.2.3/sysdeps/generic/dl-sysdep.c --- glibc-2.2.2/sysdeps/generic/dl-sysdep.c Fri Feb 9 10:04:24 2001 +++ glibc-2.2.3/sysdeps/generic/dl-sysdep.c Wed Apr 25 14:51:02 2001 @@ -35,6 +35,7 @@ #include #include #include +#include extern int _dl_argc; extern char **_dl_argv; @@ -46,7 +47,6 @@ extern unsigned long int _dl_hwcap; extern size_t _dl_platformlen; extern fpu_control_t _dl_fpu_control; extern void _end; -extern void ENTRY_POINT (void); /* Protect SUID program against misuse of file descriptors. */ extern void __libc_check_standard_fds (void); @@ -61,7 +61,9 @@ int __libc_multiple_libcs = 0; /* Defini void *__libc_stack_end; static ElfW(auxv_t) *_dl_auxv; unsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT; - +#if HP_TIMING_AVAIL +hp_timing_t _dl_cpuclock_offset = 0; +#endif #ifndef DL_FIND_ARG_COMPONENTS # define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \ @@ -98,10 +100,14 @@ _dl_sysdep_start (void **start_argptr, # define set_seen(tag) seen |= M ((tag)->a_type) #endif +#if HP_TIMING_AVAIL + HP_TIMING_NOW (_dl_cpuclock_offset); +#endif + DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ, _dl_auxv); - user_entry = (ElfW(Addr)) &ENTRY_POINT; + user_entry = (ElfW(Addr)) ENTRY_POINT; _dl_platform = NULL; /* Default to nothing known about the platform. */ for (av = _dl_auxv; av->a_type != AT_NULL; set_seen (av++)) @@ -227,27 +233,30 @@ _dl_show_auxv (void) { static const struct { - const char label[16]; + const char label[20]; enum { dec, hex, str } form; } auxvars[] = { - [AT_EXECFD - 2] = { "AT_EXECFD: ", dec }, - [AT_PHDR - 2] = { "AT_PHDR: 0x", hex }, - [AT_PHENT - 2] = { "AT_PHENT: ", dec }, - [AT_PHNUM - 2] = { "AT_PHNUM: ", dec }, - [AT_PAGESZ - 2] = { "AT_PAGESZ: ", dec }, - [AT_BASE - 2] = { "AT_BASE: 0x", hex }, - [AT_FLAGS - 2] = { "AT_FLAGS: 0x", hex }, - [AT_ENTRY - 2] = { "AT_ENTRY: 0x", hex }, - [AT_NOTELF - 2] = { "AT_NOTELF: ", hex }, - [AT_UID - 2] = { "AT_UID: ", dec }, - [AT_EUID - 2] = { "AT_EUID: ", dec }, - [AT_GID - 2] = { "AT_GID: ", dec }, - [AT_EGID - 2] = { "AT_EGID: ", dec }, - [AT_PLATFORM - 2] = { "AT_PLATFORM: ", str }, - [AT_HWCAP - 2] = { "AT_HWCAP: ", hex }, - [AT_CLKTCK - 2] = { "AT_CLKTCK: ", dec }, - [AT_FPUCW - 2] = { "AT_FPUCW: ", hex } + [AT_EXECFD - 2] = { "AT_EXECFD: ", dec }, + [AT_PHDR - 2] = { "AT_PHDR: 0x", hex }, + [AT_PHENT - 2] = { "AT_PHENT: ", dec }, + [AT_PHNUM - 2] = { "AT_PHNUM: ", dec }, + [AT_PAGESZ - 2] = { "AT_PAGESZ: ", dec }, + [AT_BASE - 2] = { "AT_BASE: 0x", hex }, + [AT_FLAGS - 2] = { "AT_FLAGS: 0x", hex }, + [AT_ENTRY - 2] = { "AT_ENTRY: 0x", hex }, + [AT_NOTELF - 2] = { "AT_NOTELF: ", hex }, + [AT_UID - 2] = { "AT_UID: ", dec }, + [AT_EUID - 2] = { "AT_EUID: ", dec }, + [AT_GID - 2] = { "AT_GID: ", dec }, + [AT_EGID - 2] = { "AT_EGID: ", dec }, + [AT_PLATFORM - 2] = { "AT_PLATFORM: ", str }, + [AT_HWCAP - 2] = { "AT_HWCAP: ", hex }, + [AT_CLKTCK - 2] = { "AT_CLKTCK: ", dec }, + [AT_FPUCW - 2] = { "AT_FPUCW: ", hex }, + [AT_DCACHEBSIZE - 2] = { "AT_DCACHEBSIZE: 0x", hex }, + [AT_ICACHEBSIZE - 2] = { "AT_ICACHEBSIZE: 0x", hex }, + [AT_UCACHEBSIZE - 2] = { "AT_UCACHEBSIZE: 0x", hex } }; unsigned int idx = (unsigned int) (av->a_type - 2); @@ -264,7 +273,7 @@ _dl_show_auxv (void) else if (__builtin_expect (auxvars[idx].form, hex) == hex) val = _itoa_word (av->a_un.a_val, buf + sizeof buf - 1, 16, 0); - _dl_sysdep_message (auxvars[idx].label, val, "\n", NULL); + _dl_printf ("%s%s\n", auxvars[idx].label, val); } } } diff -durpNa glibc-2.2.2/sysdeps/generic/e_exp2l.c glibc-2.2.3/sysdeps/generic/e_exp2l.c --- glibc-2.2.2/sysdeps/generic/e_exp2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/e_exp2l.c Sat Feb 17 08:47:12 2001 @@ -0,0 +1,14 @@ +#include +#include +#include + +long double +__ieee754_exp2l (long double x) +{ + fputs ("__ieee754_exp2l not implemented\n", stderr); + __set_errno (ENOSYS); + return 0.0; +} + +stub_warning (exp2l) +#include diff -durpNa glibc-2.2.2/sysdeps/generic/e_scalb.c glibc-2.2.3/sysdeps/generic/e_scalb.c --- glibc-2.2.2/sysdeps/generic/e_scalb.c Tue Jul 13 16:09:07 1999 +++ glibc-2.2.3/sysdeps/generic/e_scalb.c Sat Apr 7 14:02:37 2001 @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,10 +16,11 @@ static char rcsid[] = "$NetBSD: e_scalb. /* * __ieee754_scalb(x, fn) is provide for - * passing various standard test suite. One + * passing various standard test suite. One * should use scalbn() instead. */ +#include #include "math.h" #include "math_private.h" @@ -48,10 +49,21 @@ static char rcsid[] = "$NetBSD: e_scalb. else if (x == 0) return x; else if (!__finite (x)) - return __nan (""); + { +# ifdef FE_INVALID + feraiseexcept (FE_INVALID); +# endif + return __nan (""); + } else return x/(-fn); } - if (__rint(fn)!=fn) return __nan (""); + if (__rint(fn)!=fn) + { +# ifdef FE_INVALID + feraiseexcept (FE_INVALID); +# endif + return __nan (""); + } if ( fn > 65000.0) return __scalbn(x, 65000); if (-fn > 65000.0) return __scalbn(x,-65000); return __scalbn(x,(int)fn); diff -durpNa glibc-2.2.2/sysdeps/generic/e_scalbf.c glibc-2.2.3/sysdeps/generic/e_scalbf.c --- glibc-2.2.2/sysdeps/generic/e_scalbf.c Tue Jul 13 16:09:13 1999 +++ glibc-2.2.3/sysdeps/generic/e_scalbf.c Sat Apr 7 14:02:37 2001 @@ -8,7 +8,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -17,6 +17,7 @@ static char rcsid[] = "$NetBSD: e_scalbf.c,v 1.3 1995/05/10 20:46:12 jtc Exp $"; #endif +#include #include "math.h" #include "math_private.h" @@ -45,10 +46,21 @@ static char rcsid[] = "$NetBSD: e_scalbf else if (x == 0) return x; else if (!__finitef (x)) - return __nanf (""); + { +# ifdef FE_INVALID + feraiseexcept (FE_INVALID); +# endif + return __nanf (""); + } else return x/(-fn); } - if (__rintf(fn)!=fn) return __nanf (""); + if (__rintf(fn)!=fn) + { +# ifdef FE_INVALID + feraiseexcept (FE_INVALID); +# endif + return __nanf (""); + } if ( fn > (float)65000.0) return __scalbnf(x, 65000); if (-fn > (float)65000.0) return __scalbnf(x,-65000); return __scalbnf(x,(int)fn); diff -durpNa glibc-2.2.2/sysdeps/generic/e_scalbl.c glibc-2.2.3/sysdeps/generic/e_scalbl.c --- glibc-2.2.2/sysdeps/generic/e_scalbl.c Tue Jul 13 16:09:48 1999 +++ glibc-2.2.3/sysdeps/generic/e_scalbl.c Sat Apr 7 14:02:37 2001 @@ -24,6 +24,7 @@ static char rcsid[] = "$NetBSD: $"; * should use scalbnl() instead. */ +#include #include "math.h" #include "math_private.h" @@ -52,10 +53,21 @@ static char rcsid[] = "$NetBSD: $"; else if (x == 0) return x; else if (!__finitel (x)) - return __nanl (""); + { +# ifdef FE_INVALID + feraiseexcept (FE_INVALID); +# endif + return __nanl (""); + } else return x/(-fn); } - if (__rintl(fn)!=fn) return __nanl (""); + if (__rintl(fn)!=fn) + { +# ifdef FE_INVALID + feraiseexcept (FE_INVALID); +# endif + return __nanl (""); + } if ( fn > 65000.0) return __scalbnl(x, 65000); if (-fn > 65000.0) return __scalbnl(x,-65000); return __scalbnl(x,(int)fn); diff -durpNa glibc-2.2.2/sysdeps/generic/entry.h glibc-2.2.3/sysdeps/generic/entry.h --- glibc-2.2.2/sysdeps/generic/entry.h Sat Jul 12 16:21:04 1997 +++ glibc-2.2.3/sysdeps/generic/entry.h Thu Apr 12 14:02:07 2001 @@ -1 +1,5 @@ +#ifndef __ASSEMBLY__ +extern void _start (void); +#endif + #define ENTRY_POINT _start diff -durpNa glibc-2.2.2/sysdeps/generic/fd_to_filename.h glibc-2.2.3/sysdeps/generic/fd_to_filename.h --- glibc-2.2.2/sysdeps/generic/fd_to_filename.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/fd_to_filename.h Mon Apr 9 17:04:10 2001 @@ -0,0 +1,26 @@ +/* Query filename corresponding to an open FD. Generic version. + Copyright (C) 2001 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. */ + +/* In general there is no generic way to query filename for an open + file descriptor. */ +static inline const char * +fd_to_filename (int fd) +{ + return NULL; +} diff -durpNa glibc-2.2.2/sysdeps/generic/ftime.c glibc-2.2.3/sysdeps/generic/ftime.c --- glibc-2.2.2/sysdeps/generic/ftime.c Mon Jun 23 14:51:46 1997 +++ glibc-2.2.3/sysdeps/generic/ftime.c Mon Mar 26 20:53:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1996, 1997, 2001 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 @@ -16,9 +16,9 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include #include +#include +#include int ftime (timebuf) diff -durpNa glibc-2.2.2/sysdeps/generic/gai_sigqueue.c glibc-2.2.3/sysdeps/generic/gai_sigqueue.c --- glibc-2.2.2/sysdeps/generic/gai_sigqueue.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/gai_sigqueue.c Sat Mar 3 10:12:39 2001 @@ -0,0 +1,36 @@ +/* Copyright (C) 2001 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. */ + +#include +#include +#include + +#include "gai_misc.h" + +int +__gai_sigqueue (sig, val, caller_pid) + int sig; + const union sigval val; + pid_t caller_pid; +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (__gai_sigqueue) +#include diff -durpNa glibc-2.2.2/sysdeps/generic/gai_strerror.c glibc-2.2.3/sysdeps/generic/gai_strerror.c --- glibc-2.2.2/sysdeps/generic/gai_strerror.c Sun Oct 12 20:52:17 1997 +++ glibc-2.2.3/sysdeps/generic/gai_strerror.c Sat Apr 7 14:02:37 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -19,7 +19,7 @@ #include #include -char * +const char * gai_strerror (int code) { static char buffer[128]; diff -durpNa glibc-2.2.2/sysdeps/generic/get_clockfreq.c glibc-2.2.3/sysdeps/generic/get_clockfreq.c --- glibc-2.2.2/sysdeps/generic/get_clockfreq.c Sat Jan 6 20:35:37 2001 +++ glibc-2.2.3/sysdeps/generic/get_clockfreq.c Wed Apr 25 14:51:02 2001 @@ -1,5 +1,5 @@ /* Get frequency of the system processor. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 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 @@ -19,10 +19,10 @@ #include -unsigned long long int +hp_timing_t __get_clockfreq (void) { /* There is no generic way to find this out since we have in general no counter register either. */ - return 0ull; + return 0; } diff -durpNa glibc-2.2.2/sysdeps/generic/gethostname.c glibc-2.2.3/sysdeps/generic/gethostname.c --- glibc-2.2.2/sysdeps/generic/gethostname.c Fri Apr 7 12:10:00 2000 +++ glibc-2.2.3/sysdeps/generic/gethostname.c Mon Mar 26 20:53:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,1995,1996,1997,2000,2001 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 @@ -25,7 +25,7 @@ int __gethostname (name, len) char *name; - socklen_t len; + size_t len; { __set_errno (ENOSYS); return -1; diff -durpNa glibc-2.2.2/sysdeps/generic/ldconfig.h glibc-2.2.3/sysdeps/generic/ldconfig.h --- glibc-2.2.2/sysdeps/generic/ldconfig.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/ldconfig.h Mon Mar 19 14:06:34 2001 @@ -0,0 +1,69 @@ +/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Jaeger , 1999. + + 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 _LDCONFIG_H +#define _LDCONFIG_H + +#define FLAG_ANY -1 +#define FLAG_TYPE_MASK 0x00ff +#define FLAG_LIBC4 0x0000 +#define FLAG_ELF 0x0001 +#define FLAG_ELF_LIBC5 0x0002 +#define FLAG_ELF_LIBC6 0x0003 +#define FLAG_REQUIRED_MASK 0xff00 +#define FLAG_SPARC_LIB64 0x0100 +#define FLAG_IA64_LIB64 0x0200 +#define FLAG_X8664_LIB64 0x0300 +#define FLAG_S390_LIB64 0x0400 + +/* Declared in cache.c. */ +extern void print_cache (const char *cache_name); + +extern void init_cache (void); + +extern void save_cache (const char *cache_name); + +extern void add_to_cache (const char *path, const char *lib, int flags, + unsigned int osversion, uint64_t hwcap); + +/* Declared in readlib.c. */ +extern int process_file (const char *real_file_name, const char *file_name, + const char *lib, int *flag, unsigned int *osversion, + char **soname, int is_link); + +/* Declared in readelflib.c. */ +extern int process_elf_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); + +/* Declared in chroot_canon.c. */ +extern char *chroot_canon (const char *chroot, const char *name); + +/* Declared in ldconfig.c. */ +extern int opt_verbose; + +extern int opt_format; + +/* Prototypes for a few program-wide used functions. */ +extern void *xmalloc (size_t __n); +extern void *xcalloc (size_t __n, size_t __size); +extern void *xrealloc (void *__p, size_t __n); +extern char *xstrdup (const char *__str); + +#endif /* ! _LDCONFIG_H */ diff -durpNa glibc-2.2.2/sysdeps/generic/ldsodefs.h glibc-2.2.3/sysdeps/generic/ldsodefs.h --- glibc-2.2.2/sysdeps/generic/ldsodefs.h Sat Jan 13 10:48:50 2001 +++ glibc-2.2.3/sysdeps/generic/ldsodefs.h Mon Mar 26 20:53:13 2001 @@ -173,6 +173,9 @@ extern char **_dl_argv; /* Cached value of `getpagesize ()'. */ extern size_t _dl_pagesize; +/* OS version. */ +extern unsigned int _dl_osversion; + /* File descriptor referring to the zero-fill device. */ extern int _dl_zerofd; @@ -184,13 +187,15 @@ extern struct link_map *_dl_profile_map; extern const char *_dl_profile_output; /* If nonzero the appropriate debug information is printed. */ -extern int _dl_debug_libs; -extern int _dl_debug_impcalls; -extern int _dl_debug_bindings; -extern int _dl_debug_symbols; -extern int _dl_debug_versions; -extern int _dl_debug_reloc; -extern int _dl_debug_files; +extern int _dl_debug_mask; +#define DL_DEBUG_LIBS (1 << 0) +#define DL_DEBUG_IMPCALLS (1 << 1) +#define DL_DEBUG_BINDINGS (1 << 2) +#define DL_DEBUG_SYMBOLS (1 << 3) +#define DL_DEBUG_VERSIONS (1 << 4) +#define DL_DEBUG_RELOC (1 << 5) +#define DL_DEBUG_FILES (1 << 6) +#define DL_DEBUG_STATISTICS (1 << 7) /* Expect cache ID. */ extern int _dl_correct_cache_id; @@ -223,45 +228,45 @@ extern struct r_search_path_elem *_dl_in /* OS-dependent function to open the zero-fill device. */ extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */ -/* OS-dependent function to write a message on the specified - descriptor FD. All arguments are `const char *'; args until a null - pointer are concatenated to form the message to print. */ -extern void _dl_sysdep_output (int fd, const char *string, ...); -/* OS-dependent function to write a debug message on the specified - descriptor for this. All arguments are `const char *'; args until - a null pointer are concatenated to form the message to print. If - NEW_LINE is nonzero it is assumed that the message starts on a new - line. */ -extern void _dl_debug_message (int new_line, const char *string, ...); +/* Write message on the debug file descriptor. The parameters are + interpreted as for a `printf' call. All the lines start with a + tag showing the PID. */ +extern void _dl_debug_printf (const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); -/* OS-dependent function to write a message on the standard output. - All arguments are `const char *'; args until a null pointer - are concatenated to form the message to print. */ -#define _dl_sysdep_message(string, args...) \ - _dl_sysdep_output (STDOUT_FILENO, string, ##args) +/* Write message on the debug file descriptor. The parameters are + interpreted as for a `printf' call. All the lines buf the first + start with a tag showing the PID. */ +extern void _dl_debug_printf_c (const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); -/* OS-dependent function to write a message on the standard error. - All arguments are `const char *'; args until a null pointer - are concatenated to form the message to print. */ -#define _dl_sysdep_error(string, args...) \ - _dl_sysdep_output (STDERR_FILENO, string, ##args) -/* OS-dependent function to give a fatal error message and exit - when the dynamic linker fails before the program is fully linked. - All arguments are `const char *'; args until a null pointer - are concatenated to form the message to print. */ -#define _dl_sysdep_fatal(string, args...) \ +/* Write a message on the specified descriptor FD. The parameters are + interpreted as for a `printf' call. */ +extern void _dl_dprintf (int fd, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + +/* Write a message on the specified descriptor standard output. The + parameters are interpreted as for a `printf' call. */ +#define _dl_printf(fmt, args...) \ + _dl_dprintf (STDOUT_FILENO, fmt, ##args) + +/* Write a message on the specified descriptor standard error. The + parameters are interpreted as for a `printf' call. */ +#define _dl_error_printf(fmt, args...) \ + _dl_dprintf (STDERR_FILENO, fmt, ##args) + +/* Write a message on the specified descriptor standard error and exit + the program. The parameters are interpreted as for a `printf' call. */ +#define _dl_fatal_printf(fmt, args...) \ do \ { \ - _dl_sysdep_output (STDERR_FILENO, string, ##args); \ + _dl_dprintf (STDERR_FILENO, fmt, ##args); \ _exit (127); \ } \ while (1) -/* Nonzero if the program should be "secure" (i.e. it's setuid or somesuch). - This tells the dynamic linker to ignore environment variables. */ -extern int _dl_secure; /* This function is called by all the internal dynamic linker functions when they encounter an error. ERRCODE is either an `errno' code or diff -durpNa glibc-2.2.2/sysdeps/generic/libc-start.c glibc-2.2.3/sysdeps/generic/libc-start.c --- glibc-2.2.2/sysdeps/generic/libc-start.c Sat Jan 6 20:35:38 2001 +++ glibc-2.2.3/sysdeps/generic/libc-start.c Mon Mar 26 20:53:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 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 @@ -92,7 +92,7 @@ BP_SYM (__libc_start_main) (int (*main) # ifdef HAVE_AUX_VECTOR for (auxvec = (void *__unbounded *__unbounded) ubp_ev; - *auxvec; auxvec++); + *auxvec != NULL; ++auxvec); ++auxvec; _dl_aux_init ((ElfW(auxv_t) *) auxvec); # endif @@ -100,7 +100,7 @@ BP_SYM (__libc_start_main) (int (*main) /* Register the destructor of the dynamic linker if there is any. */ if (__builtin_expect (rtld_fini != NULL, 1)) - atexit (rtld_fini); + __cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL); /* Call the initializer of the libc. This is only needed here if we are compiling for the static library in which case we haven't @@ -111,19 +111,19 @@ BP_SYM (__libc_start_main) (int (*main) /* Register the destructor of the program, if any. */ if (fini) - atexit (fini); + __cxa_atexit ((void (*) (void *)) fini, NULL, NULL); /* Call the initializer of the program, if any. */ #ifdef SHARED - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ninitialize program: ", argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ninitialize program: %s\n\n", argv[0]); #endif if (init) (*init) (); #ifdef SHARED - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ntransferring control: ", argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ntransferring control: %s\n\n", argv[0]); #endif exit ((*main) (argc, argv, __environ)); diff -durpNa glibc-2.2.2/sysdeps/generic/mknod.c glibc-2.2.3/sysdeps/generic/mknod.c --- glibc-2.2.2/sysdeps/generic/mknod.c Tue Jun 13 17:40:41 2000 +++ glibc-2.2.3/sysdeps/generic/mknod.c Mon Mar 26 20:53:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 2001 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 @@ -45,3 +45,10 @@ __mknod (const char *path, mode_t mode, } weak_alias (__mknod, mknod) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tmknod"); +asm (".hidden\t__mknod"); +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/mlock.c glibc-2.2.3/sysdeps/generic/mlock.c --- glibc-2.2.2/sysdeps/generic/mlock.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/mlock.c Thu Apr 19 16:24:46 2001 @@ -0,0 +1,35 @@ +/* mlock -- guarantee pages are resident in memory. Stub version. + Copyright (C) 2001 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. */ + +#include +#include +#include + +/* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to + be memory resident. */ + +int +mlock (const void *addr, size_t len) +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (mlock) +#include diff -durpNa glibc-2.2.2/sysdeps/generic/mlockall.c glibc-2.2.3/sysdeps/generic/mlockall.c --- glibc-2.2.2/sysdeps/generic/mlockall.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/mlockall.c Thu Apr 19 16:24:46 2001 @@ -0,0 +1,36 @@ +/* mlockall -- lock in core all the pages in this process. Stub version. + Copyright (C) 2001 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. */ + +#include +#include +#include + +/* Cause all currently mapped pages of the process to be memory resident + until unlocked by a call to the `munlockall', until the process exits, + or until the process calls `execve'. */ + +int +mlockall (int flags) +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (mlockall) +#include diff -durpNa glibc-2.2.2/sysdeps/generic/munlock.c glibc-2.2.3/sysdeps/generic/munlock.c --- glibc-2.2.2/sysdeps/generic/munlock.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/munlock.c Thu Apr 19 16:24:46 2001 @@ -0,0 +1,34 @@ +/* munlock -- undo the effects of prior mlock calls. Stub version. + Copyright (C) 2001 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. */ + +#include +#include +#include + +/* Undo the effects on these whole pages of any prior mlock calls. */ + +int +munlock (const void *addr, size_t len) +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (munlock) +#include diff -durpNa glibc-2.2.2/sysdeps/generic/munlockall.c glibc-2.2.3/sysdeps/generic/munlockall.c --- glibc-2.2.2/sysdeps/generic/munlockall.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/munlockall.c Thu Apr 19 16:24:46 2001 @@ -0,0 +1,34 @@ +/* munlockall -- undo the effects of all prior mlock calls. Stub version. + Copyright (C) 2001 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. */ + +#include +#include +#include + +/* Undo the effects of all prior mlock calls in this process. */ + +int +munlockall (void) +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (munlockall) +#include diff -durpNa glibc-2.2.2/sysdeps/generic/readelflib.c glibc-2.2.3/sysdeps/generic/readelflib.c --- glibc-2.2.2/sysdeps/generic/readelflib.c Fri Dec 1 11:55:08 2000 +++ glibc-2.2.3/sysdeps/generic/readelflib.c Mon Mar 26 20:53:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger , 1999 and Jakub Jelinek , 1999. @@ -41,7 +41,8 @@ do \ /* Returns 0 if everything is ok, != 0 in case of error. */ int process_elf_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, size_t file_length) + unsigned int *osversion, char **soname, void *file_contents, + size_t file_length) { int i; unsigned int j; @@ -56,6 +57,7 @@ process_elf_file (const char *file_name, char *dynamic_strings; elf_header = (ElfW(Ehdr) *) file_contents; + *osversion = 0; if (elf_header->e_ident [EI_CLASS] != ElfW (CLASS)) { @@ -110,6 +112,7 @@ process_elf_file (const char *file_name, dynamic_addr = segment->p_offset; dynamic_size = segment->p_filesz; break; + case PT_INTERP: program_interpreter = (char *) (file_contents + segment->p_offset); check_ptr (program_interpreter); @@ -123,6 +126,21 @@ process_elf_file (const char *file_name, break; } break; + + case PT_NOTE: + if (!*osversion && segment->p_filesz == 32 && segment->p_align >= 4) + { + ElfW(Word) *abi_note = (ElfW(Word) *) (file_contents + + segment->p_offset); + if (abi_note [0] == 4 && abi_note [1] == 16 && abi_note [2] == 1 + && memcmp (abi_note + 3, "GNU", 4) == 0) + *osversion = (abi_note [4] << 24) | + ((abi_note [5] & 0xff) << 16) | + ((abi_note [6] & 0xff) << 8) | + (abi_note [7] & 0xff); + } + break; + default: break; } diff -durpNa glibc-2.2.2/sysdeps/generic/recvfrom.c glibc-2.2.3/sysdeps/generic/recvfrom.c --- glibc-2.2.2/sysdeps/generic/recvfrom.c Sun Oct 12 20:52:29 1997 +++ glibc-2.2.3/sysdeps/generic/recvfrom.c Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 2001 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 @@ -22,7 +22,7 @@ /* Read N bytes into BUF through socket FD from peer at address ADDR (which is ADDR_LEN bytes long). Returns the number read or -1 for errors. */ -int +ssize_t recvfrom (fd, buf, n, flags, addr, addr_len) int fd; void *buf; diff -durpNa glibc-2.2.2/sysdeps/generic/recvmsg.c glibc-2.2.3/sysdeps/generic/recvmsg.c --- glibc-2.2.2/sysdeps/generic/recvmsg.c Sun Oct 12 20:52:29 1997 +++ glibc-2.2.3/sysdeps/generic/recvmsg.c Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 2001 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 @@ -21,7 +21,7 @@ /* Receive a message as described by MESSAGE from socket FD. Returns the number of bytes read or -1 for errors. */ -int +ssize_t recvmsg (fd, message, flags) int fd; struct msghdr *message; diff -durpNa glibc-2.2.2/sysdeps/generic/s_exp2l.c glibc-2.2.3/sysdeps/generic/s_exp2l.c --- glibc-2.2.2/sysdeps/generic/s_exp2l.c Mon Nov 17 18:42:03 1997 +++ glibc-2.2.3/sysdeps/generic/s_exp2l.c Wed Dec 31 16:00:00 1969 @@ -1,14 +0,0 @@ -#include -#include -#include - -long double -__ieee754_exp2l (long double x) -{ - fputs ("__ieee754_exp2l not implemented\n", stderr); - __set_errno (ENOSYS); - return 0.0; -} - -stub_warning (exp2l) -#include diff -durpNa glibc-2.2.2/sysdeps/generic/s_fma.c glibc-2.2.3/sysdeps/generic/s_fma.c --- glibc-2.2.2/sysdeps/generic/s_fma.c Tue Jul 13 16:15:27 1999 +++ glibc-2.2.3/sysdeps/generic/s_fma.c Sat Apr 7 14:02:37 2001 @@ -1,5 +1,5 @@ /* Compute x * y + z as ternary operation. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -26,3 +26,8 @@ __fma (double x, double y, double z) return (x * y) + z; } weak_alias (__fma, fma) + +#ifdef NO_LONG_DOUBLE +strong_alias (__fma, __fmal) +weak_alias (__fmal, fmal) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/s_nextafter.c glibc-2.2.3/sysdeps/generic/s_nextafter.c --- glibc-2.2.2/sysdeps/generic/s_nextafter.c Tue Aug 3 12:32:33 1999 +++ glibc-2.2.3/sysdeps/generic/s_nextafter.c Sat Apr 7 14:02:37 2001 @@ -85,6 +85,8 @@ weak_alias (__nextafter, nextafter) #ifdef NO_LONG_DOUBLE strong_alias (__nextafter, __nextafterl) weak_alias (__nextafter, nextafterl) +strong_alias (__nextafter, __nexttowardl) +weak_alias (__nexttowardl, nexttowardl) #undef __nexttoward strong_alias (__nextafter, __nexttoward) #undef nexttoward diff -durpNa glibc-2.2.2/sysdeps/generic/send.c glibc-2.2.3/sysdeps/generic/send.c --- glibc-2.2.2/sysdeps/generic/send.c Sun Oct 12 20:52:32 1997 +++ glibc-2.2.3/sysdeps/generic/send.c Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 2001 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 @@ -20,7 +20,7 @@ #include /* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ -int +ssize_t __send (fd, buf, n, flags) int fd; __const __ptr_t buf; diff -durpNa glibc-2.2.2/sysdeps/generic/sendmsg.c glibc-2.2.3/sysdeps/generic/sendmsg.c --- glibc-2.2.2/sysdeps/generic/sendmsg.c Sun Oct 12 20:52:33 1997 +++ glibc-2.2.3/sysdeps/generic/sendmsg.c Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 2001 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 @@ -21,7 +21,7 @@ /* Send a message described MESSAGE on socket FD. Returns the number of bytes sent, or -1 for errors. */ -int +ssize_t sendmsg (fd, message, flags) int fd; const struct msghdr *message; diff -durpNa glibc-2.2.2/sysdeps/generic/sendto.c glibc-2.2.3/sysdeps/generic/sendto.c --- glibc-2.2.2/sysdeps/generic/sendto.c Sun Oct 12 20:52:33 1997 +++ glibc-2.2.3/sysdeps/generic/sendto.c Wed Apr 25 14:51:02 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 2001 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 @@ -21,7 +21,7 @@ /* Send N bytes of BUF on socket FD to peer at address ADDR (which is ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ -int +ssize_t sendto (fd, buf, n, flags, addr, addr_len) int fd; __const __ptr_t buf; diff -durpNa glibc-2.2.2/sysdeps/generic/sigcontextinfo.h glibc-2.2.3/sysdeps/generic/sigcontextinfo.h --- glibc-2.2.2/sysdeps/generic/sigcontextinfo.h Mon Aug 23 10:41:06 1999 +++ glibc-2.2.3/sysdeps/generic/sigcontextinfo.h Mon Mar 26 20:53:14 2001 @@ -23,3 +23,5 @@ #define GET_PC(ctx) ((void *) 0) #define GET_FRAME(ctx) ((void *) 0) #define GET_STACK(ctx) ((void *) 0) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/generic/sprofil.c glibc-2.2.3/sysdeps/generic/sprofil.c --- glibc-2.2.2/sysdeps/generic/sprofil.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/sprofil.c Wed Mar 21 12:14:39 2001 @@ -0,0 +1,37 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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. */ + +#include + +#include +#include + +int +__sprofil (struct prof *profp, int profcnt, struct timeval *tvp, + unsigned int flags) +{ + if (profcnt == 0) + return 0; + + __set_errno (ENOSYS); + return -1; +} + +weak_alias (__sprofil, sprofil) diff -durpNa glibc-2.2.2/sysdeps/generic/strtok.c glibc-2.2.3/sysdeps/generic/strtok.c --- glibc-2.2.2/sysdeps/generic/strtok.c Tue Aug 15 11:16:25 2000 +++ glibc-2.2.3/sysdeps/generic/strtok.c Mon Mar 26 20:53:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,1996,1997,1999,2000,2001 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 @@ -45,7 +45,10 @@ strtok (s, delim) /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') - return NULL; + { + olds = s; + return NULL; + } /* Find the end of the token. */ token = s; diff -durpNa glibc-2.2.2/sysdeps/generic/strtok_r.c glibc-2.2.3/sysdeps/generic/strtok_r.c --- glibc-2.2.2/sysdeps/generic/strtok_r.c Tue May 4 09:22:10 1999 +++ glibc-2.2.3/sysdeps/generic/strtok_r.c Mon Mar 26 20:53:14 2001 @@ -1,5 +1,5 @@ /* Reentrant string tokenizer. Generic version. - Copyright (C) 1991, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1991, 1996, 1997, 1998, 1999, 2001 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 @@ -46,7 +46,10 @@ __strtok_r (s, delim, save_ptr) /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') - return NULL; + { + *save_ptr = s; + return NULL; + } /* Find the end of the token. */ token = s; diff -durpNa glibc-2.2.2/sysdeps/generic/strtoll.c glibc-2.2.3/sysdeps/generic/strtoll.c --- glibc-2.2.2/sysdeps/generic/strtoll.c Thu Feb 15 14:08:41 2001 +++ glibc-2.2.3/sysdeps/generic/strtoll.c Sat Apr 7 14:02:37 2001 @@ -25,7 +25,10 @@ # ifdef SHARED # include +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0); +# endif + # endif weak_alias (strtoll, strtoq) #endif diff -durpNa glibc-2.2.2/sysdeps/generic/strtoull.c glibc-2.2.3/sysdeps/generic/strtoull.c --- glibc-2.2.2/sysdeps/generic/strtoull.c Thu Feb 15 14:08:41 2001 +++ glibc-2.2.3/sysdeps/generic/strtoull.c Sat Apr 7 14:02:37 2001 @@ -25,7 +25,10 @@ # ifdef SHARED # include +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) compat_symbol (libc, __strtoull_internal, __strtouq_internal, GLIBC_2_0); +# endif + # endif weak_alias (strtoull, strtouq) #endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_acos.c glibc-2.2.3/sysdeps/generic/w_acos.c --- glibc-2.2.2/sysdeps/generic/w_acos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_acos.c Fri Feb 16 17:40:34 2001 @@ -0,0 +1,48 @@ +/* @(#)w_acos.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_acos.c,v 1.6 1995/05/10 20:48:26 jtc Exp $"; +#endif + +/* + * wrap_acos(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __acos(double x) /* wrapper acos */ +#else + double __acos(x) /* wrapper acos */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_acos(x); +#else + double z; + z = __ieee754_acos(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + if(fabs(x)>1.0) { + return __kernel_standard(x,x,1); /* acos(|x|>1) */ + } else + return z; +#endif +} +weak_alias (__acos, acos) +#ifdef NO_LONG_DOUBLE +strong_alias (__acos, __acosl) +weak_alias (__acos, acosl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_acosf.c glibc-2.2.3/sysdeps/generic/w_acosf.c --- glibc-2.2.2/sysdeps/generic/w_acosf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_acosf.c Fri Feb 16 17:40:38 2001 @@ -0,0 +1,48 @@ +/* w_acosf.c -- float version of w_acos.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_acosf.c,v 1.3 1995/05/10 20:48:29 jtc Exp $"; +#endif + +/* + * wrap_acosf(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __acosf(float x) /* wrapper acosf */ +#else + float __acosf(x) /* wrapper acosf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_acosf(x); +#else + float z; + z = __ieee754_acosf(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + if(fabsf(x)>(float)1.0) { + /* acosf(|x|>1) */ + return (float)__kernel_standard((double)x,(double)x,101); + } else + return z; +#endif +} +weak_alias (__acosf, acosf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_acosh.c glibc-2.2.3/sysdeps/generic/w_acosh.c --- glibc-2.2.2/sysdeps/generic/w_acosh.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_acosh.c Fri Feb 16 17:40:43 2001 @@ -0,0 +1,47 @@ +/* @(#)w_acosh.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_acosh.c,v 1.6 1995/05/10 20:48:31 jtc Exp $"; +#endif + +/* + * wrapper acosh(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double __acosh(double x) /* wrapper acosh */ +#else + double __acosh(x) /* wrapper acosh */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_acosh(x); +#else + double z; + z = __ieee754_acosh(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + if(x<1.0) { + return __kernel_standard(x,x,29); /* acosh(x<1) */ + } else + return z; +#endif +} +weak_alias (__acosh, acosh) +#ifdef NO_LONG_DOUBLE +strong_alias (__acosh, __acoshl) +weak_alias (__acosh, acoshl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_acoshf.c glibc-2.2.3/sysdeps/generic/w_acoshf.c --- glibc-2.2.2/sysdeps/generic/w_acoshf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_acoshf.c Fri Feb 16 17:40:47 2001 @@ -0,0 +1,48 @@ +/* w_acoshf.c -- float version of w_acosh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_acoshf.c,v 1.3 1995/05/10 20:48:33 jtc Exp $"; +#endif + +/* + * wrapper acoshf(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float __acoshf(float x) /* wrapper acoshf */ +#else + float __acoshf(x) /* wrapper acoshf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_acoshf(x); +#else + float z; + z = __ieee754_acoshf(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + if(x<(float)1.0) { + /* acosh(x<1) */ + return (float)__kernel_standard((double)x,(double)x,129); + } else + return z; +#endif +} +weak_alias (__acoshf, acoshf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_acoshl.c glibc-2.2.3/sysdeps/generic/w_acoshl.c --- glibc-2.2.2/sysdeps/generic/w_acoshl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_acoshl.c Fri Feb 16 17:40:51 2001 @@ -0,0 +1,47 @@ +/* w_acoshl.c -- long double version of w_acosh.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper acoshl(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __acoshl(long double x) /* wrapper acosh */ +#else + long double __acoshl(x) /* wrapper acosh */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_acoshl(x); +#else + long double z; + z = __ieee754_acoshl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(x<1.0) { + return __kernel_standard(x,x,229); /* acoshl(x<1) */ + } else + return z; +#endif +} +weak_alias (__acoshl, acoshl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_acosl.c glibc-2.2.3/sysdeps/generic/w_acosl.c --- glibc-2.2.2/sysdeps/generic/w_acosl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_acosl.c Fri Feb 16 17:40:56 2001 @@ -0,0 +1,48 @@ +/* w_acosl.c -- long double version of w_acos.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrap_acosl(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __acosl(long double x) /* wrapper acos */ +#else + long double __acosl(x) /* wrapper acos */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_acosl(x); +#else + long double z; + z = __ieee754_acosl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(fabsl(x)>1.0) { + return __kernel_standard(x,x,201); /* acosl(|x|>1) */ + } else + return z; +#endif +} +weak_alias (__acosl, acosl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_asin.c glibc-2.2.3/sysdeps/generic/w_asin.c --- glibc-2.2.2/sysdeps/generic/w_asin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_asin.c Fri Feb 16 17:41:00 2001 @@ -0,0 +1,49 @@ +/* @(#)w_asin.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_asin.c,v 1.6 1995/05/10 20:48:35 jtc Exp $"; +#endif + +/* + * wrapper asin(x) + */ + + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __asin(double x) /* wrapper asin */ +#else + double __asin(x) /* wrapper asin */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_asin(x); +#else + double z; + z = __ieee754_asin(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + if(fabs(x)>1.0) { + return __kernel_standard(x,x,2); /* asin(|x|>1) */ + } else + return z; +#endif +} +weak_alias (__asin, asin) +#ifdef NO_LONG_DOUBLE +strong_alias (__asin, __asinl) +weak_alias (__asin, asinl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_asinf.c glibc-2.2.3/sysdeps/generic/w_asinf.c --- glibc-2.2.2/sysdeps/generic/w_asinf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_asinf.c Fri Feb 16 17:41:05 2001 @@ -0,0 +1,49 @@ +/* w_asinf.c -- float version of w_asin.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_asinf.c,v 1.3 1995/05/10 20:48:37 jtc Exp $"; +#endif + +/* + * wrapper asinf(x) + */ + + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __asinf(float x) /* wrapper asinf */ +#else + float __asinf(x) /* wrapper asinf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_asinf(x); +#else + float z; + z = __ieee754_asinf(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + if(fabsf(x)>(float)1.0) { + /* asinf(|x|>1) */ + return (float)__kernel_standard((double)x,(double)x,102); + } else + return z; +#endif +} +weak_alias (__asinf, asinf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_asinl.c glibc-2.2.3/sysdeps/generic/w_asinl.c --- glibc-2.2.2/sysdeps/generic/w_asinl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_asinl.c Fri Feb 16 17:41:10 2001 @@ -0,0 +1,49 @@ +/* w_asinl.c -- long double version of w_asin.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper asinl(x) + */ + + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __asinl(long double x) /* wrapper asinl */ +#else + long double __asinl(x) /* wrapper asinl */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_asinl(x); +#else + long double z; + z = __ieee754_asinl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(fabsl(x)>1.0) { + return __kernel_standard(x,x,202); /* asinl(|x|>1) */ + } else + return z; +#endif +} +weak_alias (__asinl, asinl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_atan2.c glibc-2.2.3/sysdeps/generic/w_atan2.c --- glibc-2.2.2/sysdeps/generic/w_atan2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_atan2.c Fri Feb 16 17:41:14 2001 @@ -0,0 +1,47 @@ +/* @(#)w_atan2.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_atan2.c,v 1.6 1995/05/10 20:48:39 jtc Exp $"; +#endif + +/* + * wrapper atan2(y,x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __atan2(double y, double x) /* wrapper atan2 */ +#else + double __atan2(y,x) /* wrapper atan2 */ + double y,x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_atan2(y,x); +#else + double z; + z = __ieee754_atan2(y,x); + if(_LIB_VERSION != _SVID_||__isnan(x)||__isnan(y)) return z; + if(x==0.0&&y==0.0) + return __kernel_standard(y,x,3); /* atan2(+-0,+-0) */ + return z; +#endif +} +weak_alias (__atan2, atan2) +#ifdef NO_LONG_DOUBLE +strong_alias (__atan2, __atan2l) +weak_alias (__atan2, atan2l) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_atan2f.c glibc-2.2.3/sysdeps/generic/w_atan2f.c --- glibc-2.2.2/sysdeps/generic/w_atan2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_atan2f.c Fri Feb 16 17:41:19 2001 @@ -0,0 +1,46 @@ +/* w_atan2f.c -- float version of w_atan2.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_atan2f.c,v 1.3 1995/05/10 20:48:42 jtc Exp $"; +#endif + +/* + * wrapper atan2f(y,x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __atan2f(float y, float x) /* wrapper atan2f */ +#else + float __atan2f(y,x) /* wrapper atan2 */ + float y,x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_atan2f(y,x); +#else + float z; + z = __ieee754_atan2f(y,x); + if(_LIB_VERSION != _SVID_||__isnanf(x)||__isnanf(y)) return z; + if(x==0.0&&y==0.0) + return __kernel_standard(y,x,103); /* atan2(+-0,+-0) */ + return z; +#endif +} +weak_alias (__atan2f, atan2f) diff -durpNa glibc-2.2.2/sysdeps/generic/w_atan2l.c glibc-2.2.3/sysdeps/generic/w_atan2l.c --- glibc-2.2.2/sysdeps/generic/w_atan2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_atan2l.c Fri Feb 16 17:41:23 2001 @@ -0,0 +1,47 @@ +/* w_atan2l.c -- long double version of w_atan2.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper atan2l(y,x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __atan2l(long double y, long double x) /* wrapper atan2l */ +#else + long double __atan2l(y,x) /* wrapper atan2l */ + long double y,x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_atan2l(y,x); +#else + long double z; + z = __ieee754_atan2l(y,x); + if(_LIB_VERSION != _SVID_||__isnanl(x)||__isnanl(y)) return z; + if(x==0.0&&y==0.0) + return __kernel_standard(y,x,203); /* atan2(+-0,+-0) */ + return z; +#endif +} +weak_alias (__atan2l, atan2l) diff -durpNa glibc-2.2.2/sysdeps/generic/w_atanh.c glibc-2.2.3/sysdeps/generic/w_atanh.c --- glibc-2.2.2/sysdeps/generic/w_atanh.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_atanh.c Fri Feb 16 17:41:27 2001 @@ -0,0 +1,52 @@ +/* @(#)w_atanh.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_atanh.c,v 1.6 1995/05/10 20:48:43 jtc Exp $"; +#endif + +/* + * wrapper atanh(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __atanh(double x) /* wrapper atanh */ +#else + double __atanh(x) /* wrapper atanh */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_atanh(x); +#else + double z,y; + z = __ieee754_atanh(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + y = fabs(x); + if(y>=1.0) { + if(y>1.0) + return __kernel_standard(x,x,30); /* atanh(|x|>1) */ + else + return __kernel_standard(x,x,31); /* atanh(|x|==1) */ + } else + return z; +#endif +} +weak_alias (__atanh, atanh) +#ifdef NO_LONG_DOUBLE +strong_alias (__atanh, __atanhl) +weak_alias (__atanh, atanhl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_atanhf.c glibc-2.2.3/sysdeps/generic/w_atanhf.c --- glibc-2.2.2/sysdeps/generic/w_atanhf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_atanhf.c Fri Feb 16 17:41:32 2001 @@ -0,0 +1,53 @@ +/* w_atanhf.c -- float version of w_atanh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_atanhf.c,v 1.3 1995/05/10 20:48:45 jtc Exp $"; +#endif + +/* + * wrapper atanhf(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __atanhf(float x) /* wrapper atanhf */ +#else + float __atanhf(x) /* wrapper atanhf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_atanhf(x); +#else + float z,y; + z = __ieee754_atanhf(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + y = fabsf(x); + if(y>=(float)1.0) { + if(y>(float)1.0) + /* atanhf(|x|>1) */ + return (float)__kernel_standard((double)x,(double)x,130); + else + /* atanhf(|x|==1) */ + return (float)__kernel_standard((double)x,(double)x,131); + } else + return z; +#endif +} +weak_alias (__atanhf, atanhf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_atanhl.c glibc-2.2.3/sysdeps/generic/w_atanhl.c --- glibc-2.2.2/sysdeps/generic/w_atanhl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_atanhl.c Fri Feb 16 17:41:36 2001 @@ -0,0 +1,52 @@ +/* w_atanhl.c -- long double version of w_atanh.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper atanhl(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __atanhl(long double x) /* wrapper atanhl */ +#else + long double __atanhl(x) /* wrapper atanhl */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_atanhl(x); +#else + long double z,y; + z = __ieee754_atanhl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + y = fabsl(x); + if(y>=1.0) { + if(y>1.0) + return __kernel_standard(x,x,230); /* atanhl(|x|>1) */ + else + return __kernel_standard(x,x,231); /* atanhl(|x|==1) */ + } else + return z; +#endif +} +weak_alias (__atanhl, atanhl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_cosh.c glibc-2.2.3/sysdeps/generic/w_cosh.c --- glibc-2.2.2/sysdeps/generic/w_cosh.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_cosh.c Fri Feb 16 17:41:41 2001 @@ -0,0 +1,47 @@ +/* @(#)w_cosh.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_cosh.c,v 1.6 1995/05/10 20:48:47 jtc Exp $"; +#endif + +/* + * wrapper cosh(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double __cosh(double x) /* wrapper cosh */ +#else + double __cosh(x) /* wrapper cosh */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_cosh(x); +#else + double z; + z = __ieee754_cosh(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + if(fabs(x)>7.10475860073943863426e+02) { + return __kernel_standard(x,x,5); /* cosh overflow */ + } else + return z; +#endif +} +weak_alias (__cosh, cosh) +#ifdef NO_LONG_DOUBLE +strong_alias (__cosh, __coshl) +weak_alias (__cosh, coshl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_coshf.c glibc-2.2.3/sysdeps/generic/w_coshf.c --- glibc-2.2.2/sysdeps/generic/w_coshf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_coshf.c Fri Feb 16 17:41:46 2001 @@ -0,0 +1,47 @@ +/* w_coshf.c -- float version of w_cosh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_coshf.c,v 1.3 1995/05/10 20:48:49 jtc Exp $"; +#endif + +/* + * wrapper coshf(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float __coshf(float x) /* wrapper coshf */ +#else + float __coshf(x) /* wrapper coshf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_coshf(x); +#else + float z; + z = __ieee754_coshf(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + if(fabsf(x)>(float)8.9415985107e+01) { + /* cosh overflow */ + return (float)__kernel_standard((double)x,(double)x,105); + } else + return z; +#endif +} +weak_alias (__coshf, coshf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_coshl.c glibc-2.2.3/sysdeps/generic/w_coshl.c --- glibc-2.2.2/sysdeps/generic/w_coshl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_coshl.c Fri Feb 16 17:41:50 2001 @@ -0,0 +1,47 @@ +/* w_acoshl.c -- long double version of w_acosh.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper coshl(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __coshl(long double x) /* wrapper coshl */ +#else + long double __coshl(x) /* wrapper coshl */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_coshl(x); +#else + long double z; + z = __ieee754_coshl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(fabsl(x)>7.10475860073943863426e+02) { + return __kernel_standard(x,x,205); /* cosh overflow */ + } else + return z; +#endif +} +weak_alias (__coshl, coshl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_drem.c glibc-2.2.3/sysdeps/generic/w_drem.c --- glibc-2.2.2/sysdeps/generic/w_drem.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_drem.c Fri Feb 16 17:41:54 2001 @@ -0,0 +1,20 @@ +/* + * drem() wrapper for remainder(). + * + * Written by J.T. Conklin, + * Placed into the Public Domain, 1994. + */ + +#include + +double +__drem(x, y) + double x, y; +{ + return __remainder(x, y); +} +weak_alias (__drem, drem) +#ifdef NO_LONG_DOUBLE +strong_alias (__drem, __dreml) +weak_alias (__drem, dreml) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_dremf.c glibc-2.2.3/sysdeps/generic/w_dremf.c --- glibc-2.2.2/sysdeps/generic/w_dremf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_dremf.c Fri Feb 16 17:41:58 2001 @@ -0,0 +1,17 @@ +/* + * dremf() wrapper for remainderf(). + * + * Written by J.T. Conklin, + * Placed into the Public Domain, 1994. + */ + +#include "math.h" +#include "math_private.h" + +float +__dremf(x, y) + float x, y; +{ + return __remainderf(x, y); +} +weak_alias (__dremf, dremf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_dreml.c glibc-2.2.3/sysdeps/generic/w_dreml.c --- glibc-2.2.2/sysdeps/generic/w_dreml.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_dreml.c Fri Feb 16 17:42:02 2001 @@ -0,0 +1,18 @@ +/* + * dreml() wrapper for remainderl(). + * + * Written by J.T. Conklin, + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + * Placed into the Public Domain, 1994. + */ + +#include + +long double +__dreml(x, y) + long double x, y; +{ + return __remainderl(x, y); +} +weak_alias (__dreml, dreml) diff -durpNa glibc-2.2.2/sysdeps/generic/w_exp10.c glibc-2.2.3/sysdeps/generic/w_exp10.c --- glibc-2.2.2/sysdeps/generic/w_exp10.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_exp10.c Fri Feb 16 17:42:06 2001 @@ -0,0 +1,61 @@ +/* @(#)w_exp10.c + * Conversion to exp10 by Ulrich Drepper . + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper exp10(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static const double +#else +static double +#endif +o_threshold= 3.0825471555991674389672e+02, +u_threshold= -3.2360724533877978485251e+02; + +#ifdef __STDC__ + double __exp10(double x) /* wrapper exp10 */ +#else + double __exp10(x) /* wrapper exp10 */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_exp10(x); +#else + double z; + z = __ieee754_exp10(x); + if(_LIB_VERSION == _IEEE_) return z; + if(__finite(x)) { + if(x>o_threshold) + return __kernel_standard(x,x,46); /* exp10 overflow */ + else if(x. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper expf10(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +o_threshold= 3.853183944498959298709e+01, +u_threshold= -4.515449934959717928174e+01; + +#ifdef __STDC__ + float __exp10f(float x) /* wrapper exp10f */ +#else + float __exp10f(x) /* wrapper exp10f */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_exp10f(x); +#else + float z; + z = __ieee754_exp10f(x); + if(_LIB_VERSION == _IEEE_) return z; + if(__finitef(x)) { + if(x>o_threshold) + /* exp overflow */ + return (float)__kernel_standard((double)x,(double)x,146); + else if(xo_threshold) + return __kernel_standard(x,x,246); /* exp10 overflow */ + else if(x +#include "math.h" +#include "math_private.h" + +static const double o_threshold= (double) DBL_MAX_EXP; +static const double u_threshold= (double) DBL_MIN_EXP; + +double +__exp2 (double x) /* wrapper exp2 */ +{ +#ifdef _IEEE_LIBM + return __ieee754_exp2 (x); +#else + double z; + z = __ieee754_exp2 (x); + if (_LIB_VERSION != _IEEE_ && __finite (x)) + { + if (x > o_threshold) + /* exp2 overflow */ + return __kernel_standard (x, x, 44); + else if (x < u_threshold) + /* exp2 underflow */ + return __kernel_standard (x, x, 45); + } + return z; +#endif +} +weak_alias (__exp2, exp2) +#ifdef NO_LONG_DOUBLE +strong_alias (__exp2, __expl2) +weak_alias (__exp2, expl2) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_exp2f.c glibc-2.2.3/sysdeps/generic/w_exp2f.c --- glibc-2.2.2/sysdeps/generic/w_exp2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_exp2f.c Fri Feb 16 17:42:22 2001 @@ -0,0 +1,32 @@ +/* + * wrapper exp2f(x) + */ + +#include +#include "math.h" +#include "math_private.h" + +static const float o_threshold= (float) FLT_MAX_EXP; +static const float u_threshold= (float) FLT_MIN_EXP; + +float +__exp2f (float x) /* wrapper exp2f */ +{ +#ifdef _IEEE_LIBM + return __ieee754_exp2f (x); +#else + float z; + z = __ieee754_exp2f (x); + if (_LIB_VERSION != _IEEE_ && __finitef (x)) + { + if (x > o_threshold) + /* exp2 overflow */ + return (float) __kernel_standard ((double) x, (double) x, 144); + else if (x < u_threshold) + /* exp2 underflow */ + return (float) __kernel_standard ((double) x, (double) x, 145); + } + return z; +#endif +} +weak_alias (__exp2f, exp2f) diff -durpNa glibc-2.2.2/sysdeps/generic/w_exp2l.c glibc-2.2.3/sysdeps/generic/w_exp2l.c --- glibc-2.2.2/sysdeps/generic/w_exp2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_exp2l.c Fri Feb 16 17:42:26 2001 @@ -0,0 +1,30 @@ +/* + * wrapper exp2l(x) + */ + +#include +#include "math.h" +#include "math_private.h" + +static const long double o_threshold = (long double) LDBL_MAX_EXP; +static const long double u_threshold = (long double) LDBL_MIN_EXP; + +long double +__exp2l (long double x) /* wrapper exp2l */ +{ +#ifdef _IEEE_LIBM + return __ieee754_exp2l (x); +#else + long double z; + z = __ieee754_exp2l (x); + if (_LIB_VERSION != _IEEE_ && __finitel (x)) + { + if (x > o_threshold) + return __kernel_standard (x, x, 244); /* exp2l overflow */ + else if (x < u_threshold) + return __kernel_standard (x, x, 245); /* exp2l underflow */ + } + return z; +#endif +} +weak_alias (__exp2l, exp2l) diff -durpNa glibc-2.2.2/sysdeps/generic/w_fmod.c glibc-2.2.3/sysdeps/generic/w_fmod.c --- glibc-2.2.2/sysdeps/generic/w_fmod.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_fmod.c Fri Feb 16 17:42:30 2001 @@ -0,0 +1,48 @@ +/* @(#)w_fmod.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_fmod.c,v 1.6 1995/05/10 20:48:55 jtc Exp $"; +#endif + +/* + * wrapper fmod(x,y) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __fmod(double x, double y) /* wrapper fmod */ +#else + double __fmod(x,y) /* wrapper fmod */ + double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_fmod(x,y); +#else + double z; + z = __ieee754_fmod(x,y); + if(_LIB_VERSION == _IEEE_ ||__isnan(y)||__isnan(x)) return z; + if(y==0.0) { + return __kernel_standard(x,y,27); /* fmod(x,0) */ + } else + return z; +#endif +} +weak_alias (__fmod, fmod) +#ifdef NO_LONG_DOUBLE +strong_alias (__fmod, __fmodl) +weak_alias (__fmod, fmodl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_fmodf.c glibc-2.2.3/sysdeps/generic/w_fmodf.c --- glibc-2.2.2/sysdeps/generic/w_fmodf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_fmodf.c Fri Feb 16 17:42:35 2001 @@ -0,0 +1,48 @@ +/* w_fmodf.c -- float version of w_fmod.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_fmodf.c,v 1.3 1995/05/10 20:48:57 jtc Exp $"; +#endif + +/* + * wrapper fmodf(x,y) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __fmodf(float x, float y) /* wrapper fmodf */ +#else + float __fmodf(x,y) /* wrapper fmodf */ + float x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_fmodf(x,y); +#else + float z; + z = __ieee754_fmodf(x,y); + if(_LIB_VERSION == _IEEE_ ||__isnanf(y)||__isnanf(x)) return z; + if(y==(float)0.0) { + /* fmodf(x,0) */ + return (float)__kernel_standard((double)x,(double)y,127); + } else + return z; +#endif +} +weak_alias (__fmodf, fmodf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_fmodl.c glibc-2.2.3/sysdeps/generic/w_fmodl.c --- glibc-2.2.2/sysdeps/generic/w_fmodl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_fmodl.c Fri Feb 16 17:42:39 2001 @@ -0,0 +1,48 @@ +/* w_fmodl.c -- long double version of w_fmod.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper fmodl(x,y) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __fmodl(long double x, long double y)/* wrapper fmodl */ +#else + long double __fmodl(x,y) /* wrapper fmodl */ + long double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_fmodl(x,y); +#else + long double z; + z = __ieee754_fmodl(x,y); + if(_LIB_VERSION == _IEEE_ ||__isnanl(y)||__isnanl(x)) return z; + if(y==0.0) { + return __kernel_standard(x,y,227); /* fmod(x,0) */ + } else + return z; +#endif +} +weak_alias (__fmodl, fmodl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_hypot.c glibc-2.2.3/sysdeps/generic/w_hypot.c --- glibc-2.2.2/sysdeps/generic/w_hypot.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_hypot.c Fri Feb 16 17:42:49 2001 @@ -0,0 +1,48 @@ +/* @(#)w_hypot.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_hypot.c,v 1.6 1995/05/10 20:49:07 jtc Exp $"; +#endif + +/* + * wrapper hypot(x,y) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __hypot(double x, double y)/* wrapper hypot */ +#else + double __hypot(x,y) /* wrapper hypot */ + double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_hypot(x,y); +#else + double z; + z = __ieee754_hypot(x,y); + if(_LIB_VERSION == _IEEE_) return z; + if((!__finite(z))&&__finite(x)&&__finite(y)) + return __kernel_standard(x,y,4); /* hypot overflow */ + else + return z; +#endif +} +weak_alias (__hypot, hypot) +#ifdef NO_LONG_DOUBLE +strong_alias (__hypot, __hypotl) +weak_alias (__hypot, hypotl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_hypotf.c glibc-2.2.3/sysdeps/generic/w_hypotf.c --- glibc-2.2.2/sysdeps/generic/w_hypotf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_hypotf.c Fri Feb 16 17:42:53 2001 @@ -0,0 +1,48 @@ +/* w_hypotf.c -- float version of w_hypot.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_hypotf.c,v 1.3 1995/05/10 20:49:09 jtc Exp $"; +#endif + +/* + * wrapper hypotf(x,y) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __hypotf(float x, float y) /* wrapper hypotf */ +#else + float __hypotf(x,y) /* wrapper hypotf */ + float x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_hypotf(x,y); +#else + float z; + z = __ieee754_hypotf(x,y); + if(_LIB_VERSION == _IEEE_) return z; + if((!__finitef(z))&&__finitef(x)&&__finitef(y)) + /* hypot overflow */ + return (float)__kernel_standard((double)x,(double)y,104); + else + return z; +#endif +} +weak_alias (__hypotf, hypotf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_hypotl.c glibc-2.2.3/sysdeps/generic/w_hypotl.c --- glibc-2.2.2/sysdeps/generic/w_hypotl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_hypotl.c Fri Feb 16 17:42:58 2001 @@ -0,0 +1,48 @@ +/* w_hypotl.c -- long double version of w_hypot.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper hypotl(x,y) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __hypotl(long double x, long double y)/* wrapper hypotl */ +#else + long double __hypotl(x,y) /* wrapper hypotl */ + long double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_hypotl(x,y); +#else + long double z; + z = __ieee754_hypotl(x,y); + if(_LIB_VERSION == _IEEE_) return z; + if((!__finitel(z))&&__finitel(x)&&__finitel(y)) + return __kernel_standard(x,y,204); /* hypot overflow */ + else + return z; +#endif +} +weak_alias (__hypotl, hypotl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_j0.c glibc-2.2.3/sysdeps/generic/w_j0.c --- glibc-2.2.2/sysdeps/generic/w_j0.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_j0.c Fri Feb 16 17:43:02 2001 @@ -0,0 +1,76 @@ +/* @(#)w_j0.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_j0.c,v 1.6 1995/05/10 20:49:11 jtc Exp $"; +#endif + +/* + * wrapper j0(double x), y0(double x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double j0(double x) /* wrapper j0 */ +#else + double j0(x) /* wrapper j0 */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_j0(x); +#else + double z = __ieee754_j0(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + if(fabs(x)>X_TLOSS) { + return __kernel_standard(x,x,34); /* j0(|x|>X_TLOSS) */ + } else + return z; +#endif +} +#ifdef NO_LONG_DOUBLE +strong_alias (j0, j0l) +#endif + + +#ifdef __STDC__ + double y0(double x) /* wrapper y0 */ +#else + double y0(x) /* wrapper y0 */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_y0(x); +#else + double z; + z = __ieee754_y0(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard(x,x,8); + else + /* d = zero/(x-x); */ + return __kernel_standard(x,x,9); + } + if(x>X_TLOSS) { + return __kernel_standard(x,x,35); /* y0(x>X_TLOSS) */ + } else + return z; +#endif +} +#ifdef NO_LONG_DOUBLE +strong_alias (y0, y0l) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_j0f.c glibc-2.2.3/sysdeps/generic/w_j0f.c --- glibc-2.2.2/sysdeps/generic/w_j0f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_j0f.c Fri Feb 16 17:43:06 2001 @@ -0,0 +1,74 @@ +/* w_j0f.c -- float version of w_j0.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_j0f.c,v 1.3 1995/05/10 20:49:13 jtc Exp $"; +#endif + +/* + * wrapper j0f(float x), y0f(float x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float j0f(float x) /* wrapper j0f */ +#else + float j0f(x) /* wrapper j0f */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_j0f(x); +#else + float z = __ieee754_j0f(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + if(fabsf(x)>(float)X_TLOSS) { + /* j0f(|x|>X_TLOSS) */ + return (float)__kernel_standard((double)x,(double)x,134); + } else + return z; +#endif +} + +#ifdef __STDC__ + float y0f(float x) /* wrapper y0f */ +#else + float y0f(x) /* wrapper y0f */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_y0f(x); +#else + float z; + z = __ieee754_y0f(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; + if(x <= (float)0.0){ + if(x==(float)0.0) + /* d= -one/(x-x); */ + return (float)__kernel_standard((double)x,(double)x,108); + else + /* d = zero/(x-x); */ + return (float)__kernel_standard((double)x,(double)x,109); + } + if(x>(float)X_TLOSS) { + /* y0(x>X_TLOSS) */ + return (float)__kernel_standard((double)x,(double)x,135); + } else + return z; +#endif +} diff -durpNa glibc-2.2.2/sysdeps/generic/w_j0l.c glibc-2.2.3/sysdeps/generic/w_j0l.c --- glibc-2.2.2/sysdeps/generic/w_j0l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_j0l.c Fri Feb 16 17:43:10 2001 @@ -0,0 +1,73 @@ +/* w_j0l.c -- long double version of w_j0.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper j0l(long double x), y0l(long double x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double j0l(long double x) /* wrapper j0l */ +#else + long double j0l(x) /* wrapper j0 */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_j0l(x); +#else + long double z = __ieee754_j0l(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(fabsl(x)>X_TLOSS) { + return __kernel_standard(x,x,234); /* j0(|x|>X_TLOSS) */ + } else + return z; +#endif +} + +#ifdef __STDC__ + long double y0l(long double x) /* wrapper y0l */ +#else + long double y0l(x) /* wrapper y0 */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_y0l(x); +#else + long double z; + z = __ieee754_y0l(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard(x,x,208); + else + /* d = zero/(x-x); */ + return __kernel_standard(x,x,209); + } + if(x>X_TLOSS) { + return __kernel_standard(x,x,235); /* y0(x>X_TLOSS) */ + } else + return z; +#endif +} diff -durpNa glibc-2.2.2/sysdeps/generic/w_j1.c glibc-2.2.3/sysdeps/generic/w_j1.c --- glibc-2.2.2/sysdeps/generic/w_j1.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_j1.c Fri Feb 16 17:43:14 2001 @@ -0,0 +1,77 @@ +/* @(#)w_j1.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_j1.c,v 1.6 1995/05/10 20:49:15 jtc Exp $"; +#endif + +/* + * wrapper of j1,y1 + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double j1(double x) /* wrapper j1 */ +#else + double j1(x) /* wrapper j1 */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_j1(x); +#else + double z; + z = __ieee754_j1(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; + if(fabs(x)>X_TLOSS) { + return __kernel_standard(x,x,36); /* j1(|x|>X_TLOSS) */ + } else + return z; +#endif +} +#ifdef NO_LONG_DOUBLE +strong_alias (j1, j1l) +#endif + + +#ifdef __STDC__ + double y1(double x) /* wrapper y1 */ +#else + double y1(x) /* wrapper y1 */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_y1(x); +#else + double z; + z = __ieee754_y1(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard(x,x,10); + else + /* d = zero/(x-x); */ + return __kernel_standard(x,x,11); + } + if(x>X_TLOSS) { + return __kernel_standard(x,x,37); /* y1(x>X_TLOSS) */ + } else + return z; +#endif +} +#ifdef NO_LONG_DOUBLE +strong_alias (y1, y1l) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_j1f.c glibc-2.2.3/sysdeps/generic/w_j1f.c --- glibc-2.2.2/sysdeps/generic/w_j1f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_j1f.c Fri Feb 16 17:43:20 2001 @@ -0,0 +1,75 @@ +/* w_j1f.c -- float version of w_j1.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_j1f.c,v 1.3 1995/05/10 20:49:17 jtc Exp $"; +#endif + +/* + * wrapper of j1f,y1f + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float j1f(float x) /* wrapper j1f */ +#else + float j1f(x) /* wrapper j1f */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_j1f(x); +#else + float z; + z = __ieee754_j1f(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; + if(fabsf(x)>(float)X_TLOSS) { + /* j1(|x|>X_TLOSS) */ + return (float)__kernel_standard((double)x,(double)x,136); + } else + return z; +#endif +} + +#ifdef __STDC__ + float y1f(float x) /* wrapper y1f */ +#else + float y1f(x) /* wrapper y1f */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_y1f(x); +#else + float z; + z = __ieee754_y1f(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; + if(x <= (float)0.0){ + if(x==(float)0.0) + /* d= -one/(x-x); */ + return (float)__kernel_standard((double)x,(double)x,110); + else + /* d = zero/(x-x); */ + return (float)__kernel_standard((double)x,(double)x,111); + } + if(x>(float)X_TLOSS) { + /* y1(x>X_TLOSS) */ + return (float)__kernel_standard((double)x,(double)x,137); + } else + return z; +#endif +} diff -durpNa glibc-2.2.2/sysdeps/generic/w_j1l.c glibc-2.2.3/sysdeps/generic/w_j1l.c --- glibc-2.2.2/sysdeps/generic/w_j1l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_j1l.c Fri Feb 16 17:43:24 2001 @@ -0,0 +1,74 @@ +/* w_j1l.c -- long double version of w_j1.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper of j1l,y1l + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double j1l(long double x) /* wrapper j1l */ +#else + long double j1l(x) /* wrapper j1l */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_j1l(x); +#else + long double z; + z = __ieee754_j1l(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; + if(fabsl(x)>X_TLOSS) { + return __kernel_standard(x,x,236); /* j1(|x|>X_TLOSS) */ + } else + return z; +#endif +} + +#ifdef __STDC__ + long double y1l(long double x) /* wrapper y1l */ +#else + long double y1l(x) /* wrapper y1l */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_y1l(x); +#else + long double z; + z = __ieee754_y1l(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard(x,x,210); + else + /* d = zero/(x-x); */ + return __kernel_standard(x,x,211); + } + if(x>X_TLOSS) { + return __kernel_standard(x,x,237); /* y1(x>X_TLOSS) */ + } else + return z; +#endif +} diff -durpNa glibc-2.2.2/sysdeps/generic/w_jn.c glibc-2.2.3/sysdeps/generic/w_jn.c --- glibc-2.2.2/sysdeps/generic/w_jn.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_jn.c Fri Feb 16 17:43:29 2001 @@ -0,0 +1,99 @@ +/* @(#)w_jn.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_jn.c,v 1.6 1995/05/10 20:49:19 jtc Exp $"; +#endif + +/* + * wrapper jn(int n, double x), yn(int n, double x) + * floating point Bessel's function of the 1st and 2nd kind + * of order n + * + * Special cases: + * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; + * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. + * Note 2. About jn(n,x), yn(n,x) + * For n=0, j0(x) is called, + * for n=1, j1(x) is called, + * for nx, a continued fraction approximation to + * j(n,x)/j(n-1,x) is evaluated and then backward + * recursion is used starting from a supposed value + * for j(n,x). The resulting value of j(0,x) is + * compared with the actual value to correct the + * supposed value of j(n,x). + * + * yn(n,x) is similar in all respects, except + * that forward recursion is used for all + * values of n>1. + * + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double jn(int n, double x) /* wrapper jn */ +#else + double jn(n,x) /* wrapper jn */ + double x; int n; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_jn(n,x); +#else + double z; + z = __ieee754_jn(n,x); + if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; + if(fabs(x)>X_TLOSS) { + return __kernel_standard((double)n,x,38); /* jn(|x|>X_TLOSS,n) */ + } else + return z; +#endif +} +#ifdef NO_LONG_DOUBLE +strong_alias (jn, jnl) +#endif + + +#ifdef __STDC__ + double yn(int n, double x) /* wrapper yn */ +#else + double yn(n,x) /* wrapper yn */ + double x; int n; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_yn(n,x); +#else + double z; + z = __ieee754_yn(n,x); + if(_LIB_VERSION == _IEEE_ || __isnan(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard((double)n,x,12); + else + /* d = zero/(x-x); */ + return __kernel_standard((double)n,x,13); + } + if(x>X_TLOSS) { + return __kernel_standard((double)n,x,39); /* yn(x>X_TLOSS,n) */ + } else + return z; +#endif +} +#ifdef NO_LONG_DOUBLE +strong_alias (yn, ynl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_jnf.c glibc-2.2.3/sysdeps/generic/w_jnf.c --- glibc-2.2.2/sysdeps/generic/w_jnf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_jnf.c Fri Feb 16 17:43:34 2001 @@ -0,0 +1,71 @@ +/* w_jnf.c -- float version of w_jn.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_jnf.c,v 1.3 1995/05/10 20:49:21 jtc Exp $"; +#endif + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float jnf(int n, float x) /* wrapper jnf */ +#else + float jnf(n,x) /* wrapper jnf */ + float x; int n; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_jnf(n,x); +#else + float z; + z = __ieee754_jnf(n,x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; + if(fabsf(x)>(float)X_TLOSS) { + /* jn(|x|>X_TLOSS,n) */ + return (float)__kernel_standard((double)n,(double)x,138); + } else + return z; +#endif +} + +#ifdef __STDC__ + float ynf(int n, float x) /* wrapper ynf */ +#else + float ynf(n,x) /* wrapper ynf */ + float x; int n; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_ynf(n,x); +#else + float z; + z = __ieee754_ynf(n,x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x) ) return z; + if(x <= (float)0.0){ + if(x==(float)0.0) + /* d= -one/(x-x); */ + return (float)__kernel_standard((double)n,(double)x,112); + else + /* d = zero/(x-x); */ + return (float)__kernel_standard((double)n,(double)x,113); + } + if(x>(float)X_TLOSS) { + /* yn(x>X_TLOSS,n) */ + return (float)__kernel_standard((double)n,(double)x,139); + } else + return z; +#endif +} diff -durpNa glibc-2.2.2/sysdeps/generic/w_jnl.c glibc-2.2.3/sysdeps/generic/w_jnl.c --- glibc-2.2.2/sysdeps/generic/w_jnl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_jnl.c Fri Feb 16 17:43:38 2001 @@ -0,0 +1,96 @@ +/* w_jnl.c -- long double version of w_jn.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper jn(int n, double x), yn(int n, double x) + * floating point Bessel's function of the 1st and 2nd kind + * of order n + * + * Special cases: + * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; + * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. + * Note 2. About jn(n,x), yn(n,x) + * For n=0, j0(x) is called, + * for n=1, j1(x) is called, + * for nx, a continued fraction approximation to + * j(n,x)/j(n-1,x) is evaluated and then backward + * recursion is used starting from a supposed value + * for j(n,x). The resulting value of j(0,x) is + * compared with the actual value to correct the + * supposed value of j(n,x). + * + * yn(n,x) is similar in all respects, except + * that forward recursion is used for all + * values of n>1. + * + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double jnl(int n, long double x) /* wrapper jnl */ +#else + long double jnl(n,x) /* wrapper jnl */ + long double x; int n; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_jnl(n,x); +#else + long double z; + z = __ieee754_jnl(n,x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; + if(fabsl(x)>X_TLOSS) { + return __kernel_standard((double)n,x,238); /* jn(|x|>X_TLOSS,n) */ + } else + return z; +#endif +} + +#ifdef __STDC__ + long double ynl(int n, long double x) /* wrapper ynl */ +#else + long double ynl(n,x) /* wrapper ynl */ + long double x; int n; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_ynl(n,x); +#else + long double z; + z = __ieee754_ynl(n,x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard((double)n,x,212); + else + /* d = zero/(x-x); */ + return __kernel_standard((double)n,x,213); + } + if(x>X_TLOSS) { + return __kernel_standard((double)n,x,239); /* yn(x>X_TLOSS,n) */ + } else + return z; +#endif +} diff -durpNa glibc-2.2.2/sysdeps/generic/w_lgamma.c glibc-2.2.3/sysdeps/generic/w_lgamma.c --- glibc-2.2.2/sysdeps/generic/w_lgamma.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_lgamma.c Fri Feb 16 17:43:43 2001 @@ -0,0 +1,60 @@ +/* @(#)w_lgamma.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_lgamma.c,v 1.6 1995/05/10 20:49:24 jtc Exp $"; +#endif + +/* double lgamma(double x) + * Return the logarithm of the Gamma function of x. + * + * Method: call __ieee754_lgamma_r + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double __lgamma(double x) +#else + double __lgamma(x) + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_lgamma_r(x,&signgam); +#else + double y; + int local_signgam; + y = __ieee754_lgamma_r(x,&local_signgam); + if (_LIB_VERSION != _ISOC_) + /* ISO C99 does not define the global variable. */ + signgam = local_signgam; + if(_LIB_VERSION == _IEEE_) return y; + if(!__finite(y)&&__finite(x)) { + if(__floor(x)==x&&x<=0.0) + return __kernel_standard(x,x,15); /* lgamma pole */ + else + return __kernel_standard(x,x,14); /* lgamma overflow */ + } else + return y; +#endif +} +weak_alias (__lgamma, lgamma) +strong_alias (__lgamma, __gamma) +weak_alias (__gamma, gamma) +#ifdef NO_LONG_DOUBLE +strong_alias (__lgamma, __lgammal) +weak_alias (__lgamma, lgammal) +strong_alias (__gamma, __gammal) +weak_alias (__gamma, gammal) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_lgamma_r.c glibc-2.2.3/sysdeps/generic/w_lgamma_r.c --- glibc-2.2.2/sysdeps/generic/w_lgamma_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_lgamma_r.c Fri Feb 16 17:44:05 2001 @@ -0,0 +1,51 @@ +/* @(#)wr_lgamma.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_lgamma_r.c,v 1.6 1995/05/10 20:49:27 jtc Exp $"; +#endif + +/* + * wrapper double lgamma_r(double x, int *signgamp) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __lgamma_r(double x, int *signgamp) /* wrapper lgamma_r */ +#else + double __lgamma_r(x,signgamp) /* wrapper lgamma_r */ + double x; int *signgamp; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_lgamma_r(x,signgamp); +#else + double y; + y = __ieee754_lgamma_r(x,signgamp); + if(_LIB_VERSION == _IEEE_) return y; + if(!__finite(y)&&__finite(x)) { + if(__floor(x)==x&&x<=0.0) + return __kernel_standard(x,x,15); /* lgamma pole */ + else + return __kernel_standard(x,x,14); /* lgamma overflow */ + } else + return y; +#endif +} +weak_alias (__lgamma_r, lgamma_r) +#ifdef NO_LONG_DOUBLE +strong_alias (__lgamma_r, __lgammal_r) +weak_alias (__lgamma_r, lgammal_r) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_lgammaf.c glibc-2.2.3/sysdeps/generic/w_lgammaf.c --- glibc-2.2.2/sysdeps/generic/w_lgammaf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_lgammaf.c Fri Feb 16 17:43:48 2001 @@ -0,0 +1,53 @@ +/* w_lgammaf.c -- float version of w_lgamma.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_lgammaf.c,v 1.3 1995/05/10 20:49:30 jtc Exp $"; +#endif + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float __lgammaf(float x) +#else + float __lgammaf(x) + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_lgammaf_r(x,&signgam); +#else + float y; + int local_signgam; + y = __ieee754_lgammaf_r(x,&local_signgam); + if (_LIB_VERSION != _ISOC_) + /* ISO C99 does not define the global variable. */ + signgam = local_signgam; + if(_LIB_VERSION == _IEEE_) return y; + if(!__finitef(y)&&__finitef(x)) { + if(__floorf(x)==x&&x<=(float)0.0) + /* lgamma pole */ + return (float)__kernel_standard((double)x,(double)x,115); + else + /* lgamma overflow */ + return (float)__kernel_standard((double)x,(double)x,114); + } else + return y; +#endif +} +weak_alias (__lgammaf, lgammaf) +strong_alias (__lgammaf, __gammaf) +weak_alias (__gammaf, gammaf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_lgammaf_r.c glibc-2.2.3/sysdeps/generic/w_lgammaf_r.c --- glibc-2.2.2/sysdeps/generic/w_lgammaf_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_lgammaf_r.c Fri Feb 16 17:43:52 2001 @@ -0,0 +1,52 @@ +/* w_lgammaf_r.c -- float version of w_lgamma_r.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_lgammaf_r.c,v 1.3 1995/05/10 20:49:32 jtc Exp $"; +#endif + +/* + * wrapper float lgammaf_r(float x, int *signgamp) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __lgammaf_r(float x, int *signgamp) /* wrapper lgammaf_r */ +#else + float __lgammaf_r(x,signgamp) /* wrapper lgammaf_r */ + float x; int *signgamp; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_lgammaf_r(x,signgamp); +#else + float y; + y = __ieee754_lgammaf_r(x,signgamp); + if(_LIB_VERSION == _IEEE_) return y; + if(!__finitef(y)&&__finitef(x)) { + if(__floorf(x)==x&&x<=(float)0.0) + /* lgamma pole */ + return (float)__kernel_standard((double)x,(double)x,115); + else + /* lgamma overflow */ + return (float)__kernel_standard((double)x,(double)x,114); + } else + return y; +#endif +} +weak_alias (__lgammaf_r, lgammaf_r) diff -durpNa glibc-2.2.2/sysdeps/generic/w_lgammal.c glibc-2.2.3/sysdeps/generic/w_lgammal.c --- glibc-2.2.2/sysdeps/generic/w_lgammal.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_lgammal.c Fri Feb 16 17:43:57 2001 @@ -0,0 +1,58 @@ +/* w_lgammal.c -- long double version of w_lgamma.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* long double lgammal(long double x) + * Return the logarithm of the Gamma function of x. + * + * Method: call __ieee754_lgammal_r + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __lgammal(long double x) +#else + long double __lgammal(x) + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_lgammal_r(x,&signgam); +#else + long double y; + int local_signgam; + y = __ieee754_lgammal_r(x,&local_signgam); + if (_LIB_VERSION != _ISOC_) + /* ISO C99 does not define the global variable. */ + signgam = local_signgam; + if(_LIB_VERSION == _IEEE_) return y; + if(!__finitel(y)&&__finitel(x)) { + if(__floorl(x)==x&&x<=0.0) + return __kernel_standard(x,x,215); /* lgamma pole */ + else + return __kernel_standard(x,x,214); /* lgamma overflow */ + } else + return y; +#endif +} +weak_alias (__lgammal, lgammal) +strong_alias (__lgammal, __gammal) +weak_alias (__gammal, gammal) diff -durpNa glibc-2.2.2/sysdeps/generic/w_lgammal_r.c glibc-2.2.3/sysdeps/generic/w_lgammal_r.c --- glibc-2.2.2/sysdeps/generic/w_lgammal_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_lgammal_r.c Fri Feb 16 17:44:01 2001 @@ -0,0 +1,52 @@ +/* w_lgammal_r.c -- long double version of w_lgamma_r.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper long double lgammal_r(long double x, int *signgamp) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __lgammal_r(long double x, int *signgamp) + /* wrapper lgamma_r */ +#else + long double __lgammal_r(x,signgamp) /* wrapper lgamma_r */ + long double x; int *signgamp; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_lgammal_r(x,signgamp); +#else + long double y; + y = __ieee754_lgammal_r(x,signgamp); + if(_LIB_VERSION == _IEEE_) return y; + if(!__finitel(y)&&__finitel(x)) { + if(__floorl(x)==x&&x<=0.0) + return __kernel_standard(x,x,215); /* lgamma pole */ + else + return __kernel_standard(x,x,214); /* lgamma overflow */ + } else + return y; +#endif +} +weak_alias (__lgammal_r, lgammal_r) diff -durpNa glibc-2.2.2/sysdeps/generic/w_log.c glibc-2.2.3/sysdeps/generic/w_log.c --- glibc-2.2.2/sysdeps/generic/w_log.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_log.c Fri Feb 16 17:44:23 2001 @@ -0,0 +1,48 @@ +/* @(#)w_log.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_log.c,v 1.6 1995/05/10 20:49:33 jtc Exp $"; +#endif + +/* + * wrapper log(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __log(double x) /* wrapper log */ +#else + double __log(x) /* wrapper log */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_log(x); +#else + double z; + z = __ieee754_log(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x) || x > 0.0) return z; + if(x==0.0) + return __kernel_standard(x,x,16); /* log(0) */ + else + return __kernel_standard(x,x,17); /* log(x<0) */ +#endif +} +weak_alias (__log, log) +#ifdef NO_LONG_DOUBLE +strong_alias (__log, __logl) +weak_alias (__log, logl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_log10.c glibc-2.2.3/sysdeps/generic/w_log10.c --- glibc-2.2.2/sysdeps/generic/w_log10.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_log10.c Fri Feb 16 17:44:09 2001 @@ -0,0 +1,51 @@ +/* @(#)w_log10.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_log10.c,v 1.6 1995/05/10 20:49:35 jtc Exp $"; +#endif + +/* + * wrapper log10(X) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __log10(double x) /* wrapper log10 */ +#else + double __log10(x) /* wrapper log10 */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_log10(x); +#else + double z; + z = __ieee754_log10(x); + if(_LIB_VERSION == _IEEE_ || __isnan(x)) return z; + if(x<=0.0) { + if(x==0.0) + return __kernel_standard(x,x,18); /* log10(0) */ + else + return __kernel_standard(x,x,19); /* log10(x<0) */ + } else + return z; +#endif +} +weak_alias (__log10, log10) +#ifdef NO_LONG_DOUBLE +strong_alias (__log10, __log10l) +weak_alias (__log10, log10l) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_log10f.c glibc-2.2.3/sysdeps/generic/w_log10f.c --- glibc-2.2.2/sysdeps/generic/w_log10f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_log10f.c Fri Feb 16 17:44:13 2001 @@ -0,0 +1,52 @@ +/* w_log10f.c -- float version of w_log10.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_log10f.c,v 1.3 1995/05/10 20:49:37 jtc Exp $"; +#endif + +/* + * wrapper log10f(X) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __log10f(float x) /* wrapper log10f */ +#else + float __log10f(x) /* wrapper log10f */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_log10f(x); +#else + float z; + z = __ieee754_log10f(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x)) return z; + if(x<=(float)0.0) { + if(x==(float)0.0) + /* log10(0) */ + return (float)__kernel_standard((double)x,(double)x,118); + else + /* log10(x<0) */ + return (float)__kernel_standard((double)x,(double)x,119); + } else + return z; +#endif +} +weak_alias (__log10f, log10f) diff -durpNa glibc-2.2.2/sysdeps/generic/w_log10l.c glibc-2.2.3/sysdeps/generic/w_log10l.c --- glibc-2.2.2/sysdeps/generic/w_log10l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_log10l.c Fri Feb 16 17:44:18 2001 @@ -0,0 +1,51 @@ +/* w_log10l.c -- long double version of w_log10.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper log10l(X) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __log10l(long double x) /* wrapper log10l */ +#else + long double __log10l(x) /* wrapper log10l */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_log10l(x); +#else + long double z; + z = __ieee754_log10l(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(x<=0.0) { + if(x==0.0) + return __kernel_standard(x,x,218); /* log10(0) */ + else + return __kernel_standard(x,x,219); /* log10(x<0) */ + } else + return z; +#endif +} +weak_alias (__log10l, log10l) diff -durpNa glibc-2.2.2/sysdeps/generic/w_logf.c glibc-2.2.3/sysdeps/generic/w_logf.c --- glibc-2.2.2/sysdeps/generic/w_logf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_logf.c Fri Feb 16 17:44:28 2001 @@ -0,0 +1,49 @@ +/* w_logf.c -- float version of w_log.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_logf.c,v 1.3 1995/05/10 20:49:40 jtc Exp $"; +#endif + +/* + * wrapper logf(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __logf(float x) /* wrapper logf */ +#else + float __logf(x) /* wrapper logf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_logf(x); +#else + float z; + z = __ieee754_logf(x); + if(_LIB_VERSION == _IEEE_ || __isnanf(x) || x > (float)0.0) return z; + if(x==(float)0.0) + /* logf(0) */ + return (float)__kernel_standard((double)x,(double)x,116); + else + /* logf(x<0) */ + return (float)__kernel_standard((double)x,(double)x,117); +#endif +} +weak_alias (__logf, logf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_logl.c glibc-2.2.3/sysdeps/generic/w_logl.c --- glibc-2.2.2/sysdeps/generic/w_logl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_logl.c Fri Feb 16 17:44:33 2001 @@ -0,0 +1,48 @@ +/* w_logl.c -- long double version of w_log.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper logl(x) + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __logl(long double x) /* wrapper logl */ +#else + long double __logl(x) /* wrapper logl */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_logl(x); +#else + long double z; + z = __ieee754_logl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x) || x > 0.0) return z; + if(x==0.0) + return __kernel_standard(x,x,216); /* log(0) */ + else + return __kernel_standard(x,x,217); /* log(x<0) */ +#endif +} +weak_alias (__logl, logl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_pow.c glibc-2.2.3/sysdeps/generic/w_pow.c --- glibc-2.2.2/sysdeps/generic/w_pow.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_pow.c Fri Feb 16 17:44:37 2001 @@ -0,0 +1,70 @@ + + +/* @(#)w_pow.c 5.2 93/10/01 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper pow(x,y) return x**y + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + double __pow(double x, double y) /* wrapper pow */ +#else + double __pow(x,y) /* wrapper pow */ + double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_pow(x,y); +#else + double z; + z=__ieee754_pow(x,y); + if(_LIB_VERSION == _IEEE_|| __isnan(y)) return z; + if(__isnan(x)) { + if(y==0.0) + return __kernel_standard(x,y,42); /* pow(NaN,0.0) */ + else + return z; + } + if(x==0.0) { + if(y==0.0) + return __kernel_standard(x,y,20); /* pow(0.0,0.0) */ + if(__finite(y)&&y<0.0) { + if (signbit (x) && signbit (z)) + return __kernel_standard(x,y,23); /* pow(-0.0,negative) */ + else + return __kernel_standard(x,y,43); /* pow(+0.0,negative) */ + } + return z; + } + if(!__finite(z)) { + if(__finite(x)&&__finite(y)) { + if(__isnan(z)) + return __kernel_standard(x,y,24); /* pow neg**non-int */ + else + return __kernel_standard(x,y,21); /* pow overflow */ + } + } + if(z==0.0&&__finite(x)&&__finite(y)) + return __kernel_standard(x,y,22); /* pow underflow */ + return z; +#endif +} +weak_alias (__pow, pow) +#ifdef NO_LONG_DOUBLE +strong_alias (__pow, __powl) +weak_alias (__pow, powl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_powf.c glibc-2.2.3/sysdeps/generic/w_powf.c --- glibc-2.2.2/sysdeps/generic/w_powf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_powf.c Fri Feb 16 17:44:42 2001 @@ -0,0 +1,77 @@ +/* w_powf.c -- float version of w_pow.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $"; +#endif + +/* + * wrapper powf(x,y) return x**y + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + float __powf(float x, float y) /* wrapper powf */ +#else + float __powf(x,y) /* wrapper powf */ + float x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_powf(x,y); +#else + float z; + z=__ieee754_powf(x,y); + if(_LIB_VERSION == _IEEE_|| __isnanf(y)) return z; + if(__isnanf(x)) { + if(y==(float)0.0) + /* powf(NaN,0.0) */ + return (float)__kernel_standard((double)x,(double)y,142); + else + return z; + } + if(x==(float)0.0) { + if(y==(float)0.0) + /* powf(0.0,0.0) */ + return (float)__kernel_standard((double)x,(double)y,120); + if(__finitef(y)&&y<(float)0.0) { + if (signbit (x) && signbit (z)) + /* powf(0.0,negative) */ + return (float)__kernel_standard((double)x,(double)y,123); + else + return (float)__kernel_standard((double)x,(double)y,143); + } + return z; + } + if(!__finitef(z)) { + if(__finitef(x)&&__finitef(y)) { + if(__isnanf(z)) + /* powf neg**non-int */ + return (float)__kernel_standard((double)x,(double)y,124); + else + /* powf overflow */ + return (float)__kernel_standard((double)x,(double)y,121); + } + } + if(z==(float)0.0&&__finitef(x)&&__finitef(y)) + /* powf underflow */ + return (float)__kernel_standard((double)x,(double)y,122); + return z; +#endif +} +weak_alias (__powf, powf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_powl.c glibc-2.2.3/sysdeps/generic/w_powl.c --- glibc-2.2.2/sysdeps/generic/w_powl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_powl.c Fri Feb 16 17:44:46 2001 @@ -0,0 +1,68 @@ +/* w_powl.c -- long double version of w_pow.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper powl(x,y) return x**y + */ + +#include "math.h" +#include "math_private.h" + + +#ifdef __STDC__ + long double __powl(long double x, long double y)/* wrapper powl */ +#else + long double __powl(x,y) /* wrapper powl */ + long double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_powl(x,y); +#else + long double z; + z=__ieee754_powl(x,y); + if(_LIB_VERSION == _IEEE_|| __isnanl(y)) return z; + if(__isnanl(x)) { + if(y==0.0) + return __kernel_standard(x,y,242); /* pow(NaN,0.0) */ + else + return z; + } + if(x==0.0) { + if(y==0.0) + return __kernel_standard(x,y,220); /* pow(0.0,0.0) */ + if(__finitel(y)&&y<0.0) { + if (signbit (x) && signbit (z)) + return __kernel_standard(x,y,223); /* pow(-0.0,negative) */ + else + return __kernel_standard(x,y,243); /* pow(+0.0,negative) */ + } + return z; + } + if(!__finitel(z)) { + if(__finitel(x)&&__finitel(y)) { + if(__isnanl(z)) + return __kernel_standard(x,y,224); /* pow neg**non-int */ + else + return __kernel_standard(x,y,221); /* pow overflow */ + } + } + if(z==0.0&&__finitel(x)&&__finitel(y)) + return __kernel_standard(x,y,222); /* pow underflow */ + return z; +#endif +} +weak_alias (__powl, powl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_remainder.c glibc-2.2.3/sysdeps/generic/w_remainder.c --- glibc-2.2.2/sysdeps/generic/w_remainder.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_remainder.c Fri Feb 16 17:44:51 2001 @@ -0,0 +1,47 @@ +/* @(#)w_remainder.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_remainder.c,v 1.6 1995/05/10 20:49:44 jtc Exp $"; +#endif + +/* + * wrapper remainder(x,p) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double __remainder(double x, double y) /* wrapper remainder */ +#else + double __remainder(x,y) /* wrapper remainder */ + double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_remainder(x,y); +#else + double z; + z = __ieee754_remainder(x,y); + if(_LIB_VERSION == _IEEE_ || __isnan(y)) return z; + if(y==0.0) + return __kernel_standard(x,y,28); /* remainder(x,0) */ + else + return z; +#endif +} +weak_alias (__remainder, remainder) +#ifdef NO_LONG_DOUBLE +strong_alias (__remainder, __remainderl) +weak_alias (__remainder, remainderl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_remainderf.c glibc-2.2.3/sysdeps/generic/w_remainderf.c --- glibc-2.2.2/sysdeps/generic/w_remainderf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_remainderf.c Fri Feb 16 17:44:55 2001 @@ -0,0 +1,47 @@ +/* w_remainderf.c -- float version of w_remainder.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_remainderf.c,v 1.3 1995/05/10 20:49:46 jtc Exp $"; +#endif + +/* + * wrapper remainderf(x,p) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float __remainderf(float x, float y) /* wrapper remainder */ +#else + float __remainderf(x,y) /* wrapper remainder */ + float x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_remainderf(x,y); +#else + float z; + z = __ieee754_remainderf(x,y); + if(_LIB_VERSION == _IEEE_ || __isnanf(y)) return z; + if(y==(float)0.0) + /* remainder(x,0) */ + return (float)__kernel_standard((double)x,(double)y,128); + else + return z; +#endif +} +weak_alias (__remainderf, remainderf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_remainderl.c glibc-2.2.3/sysdeps/generic/w_remainderl.c --- glibc-2.2.2/sysdeps/generic/w_remainderl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_remainderl.c Fri Feb 16 17:45:00 2001 @@ -0,0 +1,48 @@ +/* w_remainderl.c -- long double version of w_remainder.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper remainderl(x,p) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __remainderl(long double x, long double y) + /* wrapper remainderl */ +#else + long double __remainderl(x,y) /* wrapper remainder */ + long double x,y; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_remainderl(x,y); +#else + long double z; + z = __ieee754_remainderl(x,y); + if(_LIB_VERSION == _IEEE_ || __isnanl(y)) return z; + if(y==0.0) + return __kernel_standard(x,y,228); /* remainder(x,0) */ + else + return z; +#endif +} +weak_alias (__remainderl, remainderl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_scalb.c glibc-2.2.3/sysdeps/generic/w_scalb.c --- glibc-2.2.2/sysdeps/generic/w_scalb.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_scalb.c Fri Feb 16 17:45:04 2001 @@ -0,0 +1,65 @@ +/* @(#)w_scalb.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_scalb.c,v 1.6 1995/05/10 20:49:48 jtc Exp $"; +#endif + +/* + * wrapper scalb(double x, double fn) is provide for + * passing various standard test suite. One + * should use scalbn() instead. + */ + +#include "math.h" +#include "math_private.h" + +#include + +#ifdef __STDC__ +#ifdef _SCALB_INT + double __scalb(double x, int fn) /* wrapper scalb */ +#else + double __scalb(double x, double fn) /* wrapper scalb */ +#endif +#else + double __scalb(x,fn) /* wrapper scalb */ +#ifdef _SCALB_INT + double x; int fn; +#else + double x,fn; +#endif +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_scalb(x,fn); +#else + double z; + z = __ieee754_scalb(x,fn); + if(_LIB_VERSION != _SVID_) return z; + if(!(__finite(z)||__isnan(z))&&__finite(x)) { + return __kernel_standard(x,(double)fn,32); /* scalb overflow */ + } + if(z==0.0&&z!=x) { + return __kernel_standard(x,(double)fn,33); /* scalb underflow */ + } +#ifndef _SCALB_INT + if(!__finite(fn)) __set_errno (ERANGE); +#endif + return z; +#endif +} +weak_alias (__scalb, scalb) +#ifdef NO_LONG_DOUBLE +strong_alias (__scalb, __scalbl) +weak_alias (__scalb, scalbl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_scalbf.c glibc-2.2.3/sysdeps/generic/w_scalbf.c --- glibc-2.2.2/sysdeps/generic/w_scalbf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_scalbf.c Fri Feb 16 17:45:08 2001 @@ -0,0 +1,66 @@ +/* w_scalbf.c -- float version of w_scalb.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_scalbf.c,v 1.3 1995/05/10 20:49:50 jtc Exp $"; +#endif + +/* + * wrapper scalbf(float x, float fn) is provide for + * passing various standard test suite. One + * should use scalbn() instead. + */ + +#include "math.h" +#include "math_private.h" + +#include + +#ifdef __STDC__ +#ifdef _SCALB_INT + float __scalbf(float x, int fn) /* wrapper scalbf */ +#else + float __scalbf(float x, float fn) /* wrapper scalbf */ +#endif +#else + float __scalbf(x,fn) /* wrapper scalbf */ +#ifdef _SCALB_INT + float x; int fn; +#else + float x,fn; +#endif +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_scalbf(x,fn); +#else + float z; + z = __ieee754_scalbf(x,fn); + if(_LIB_VERSION != _SVID_) return z; + if(!(__finitef(z)||__isnanf(z))&&__finitef(x)) { + /* scalbf overflow */ + return (float)__kernel_standard((double)x,(double)fn,132); + } + if(z==(float)0.0&&z!=x) { + /* scalbf underflow */ + return (float)__kernel_standard((double)x,(double)fn,133); + } +#ifndef _SCALB_INT + if(!__finitef(fn)) __set_errno (ERANGE); +#endif + return z; +#endif +} +weak_alias (__scalbf, scalbf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_scalbl.c glibc-2.2.3/sysdeps/generic/w_scalbl.c --- glibc-2.2.2/sysdeps/generic/w_scalbl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_scalbl.c Fri Feb 16 17:45:12 2001 @@ -0,0 +1,65 @@ +/* w_scalbl.c -- long double version of w_scalb.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper scalbl(long double x, long double fn) is provide for + * passing various standard test suite. One + * should use scalbnl() instead. + */ + +#include "math.h" +#include "math_private.h" + +#include + +#ifdef __STDC__ +#ifdef _SCALB_INT + long double __scalbl(long double x, int fn) /* wrapper scalbl */ +#else + long double __scalbl(long double x, long double fn)/* wrapper scalbl */ +#endif +#else + long double __scalbl(x,fn) /* wrapper scalbl */ +#ifdef _SCALB_INT + long double x; int fn; +#else + long double x,fn; +#endif +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_scalbl(x,fn); +#else + long double z; + z = __ieee754_scalbl(x,fn); + if(_LIB_VERSION != _SVID_) return z; + if(!(__finitel(z)||__isnanl(z))&&__finitel(x)) { + return __kernel_standard(x,(double)fn,232); /* scalb overflow */ + } + if(z==0.0&&z!=x) { + return __kernel_standard(x,(double)fn,233); /* scalb underflow */ + } +#ifndef _SCALB_INT + if(!__finitel(fn)) __set_errno (ERANGE); +#endif + return z; +#endif +} +weak_alias (__scalbl, scalbl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_sinh.c glibc-2.2.3/sysdeps/generic/w_sinh.c --- glibc-2.2.2/sysdeps/generic/w_sinh.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_sinh.c Fri Feb 16 17:45:17 2001 @@ -0,0 +1,47 @@ +/* @(#)w_sinh.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_sinh.c,v 1.6 1995/05/10 20:49:51 jtc Exp $"; +#endif + +/* + * wrapper sinh(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double __sinh(double x) /* wrapper sinh */ +#else + double __sinh(x) /* wrapper sinh */ + double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_sinh(x); +#else + double z; + z = __ieee754_sinh(x); + if(_LIB_VERSION == _IEEE_) return z; + if(!__finite(z)&&__finite(x)) { + return __kernel_standard(x,x,25); /* sinh overflow */ + } else + return z; +#endif +} +weak_alias (__sinh, sinh) +#ifdef NO_LONG_DOUBLE +strong_alias (__sinh, __sinhl) +weak_alias (__sinh, sinhl) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_sinhf.c glibc-2.2.3/sysdeps/generic/w_sinhf.c --- glibc-2.2.2/sysdeps/generic/w_sinhf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_sinhf.c Fri Feb 16 17:45:21 2001 @@ -0,0 +1,47 @@ +/* w_sinhf.c -- float version of w_sinh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_sinhf.c,v 1.3 1995/05/10 20:49:54 jtc Exp $"; +#endif + +/* + * wrapper sinhf(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float __sinhf(float x) /* wrapper sinhf */ +#else + float __sinhf(x) /* wrapper sinhf */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_sinhf(x); +#else + float z; + z = __ieee754_sinhf(x); + if(_LIB_VERSION == _IEEE_) return z; + if(!__finitef(z)&&__finitef(x)) { + /* sinhf overflow */ + return (float)__kernel_standard((double)x,(double)x,125); + } else + return z; +#endif +} +weak_alias (__sinhf, sinhf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_sinhl.c glibc-2.2.3/sysdeps/generic/w_sinhl.c --- glibc-2.2.2/sysdeps/generic/w_sinhl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_sinhl.c Fri Feb 16 17:45:25 2001 @@ -0,0 +1,47 @@ +/* w_sinhl.c -- long double version of w_sinh.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper sinhl(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __sinhl(long double x) /* wrapper sinhl */ +#else + long double __sinhl(x) /* wrapper sinhl */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_sinhl(x); +#else + long double z; + z = __ieee754_sinhl(x); + if(_LIB_VERSION == _IEEE_) return z; + if(!__finitel(z)&&__finitel(x)) { + return __kernel_standard(x,x,225); /* sinh overflow */ + } else + return z; +#endif +} +weak_alias (__sinhl, sinhl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_sqrtl.c glibc-2.2.3/sysdeps/generic/w_sqrtl.c --- glibc-2.2.2/sysdeps/generic/w_sqrtl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_sqrtl.c Fri Feb 16 17:45:29 2001 @@ -0,0 +1,47 @@ +/* w_sqrtl.c -- long double version of w_sqrt.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* + * wrapper sqrtl(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __sqrtl(long double x) /* wrapper sqrtl */ +#else + long double __sqrtl(x) /* wrapper sqrtl */ + long double x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_sqrtl(x); +#else + long double z; + z = __ieee754_sqrtl(x); + if(_LIB_VERSION == _IEEE_ || __isnanl(x)) return z; + if(x<0.0) { + return __kernel_standard(x,x,226); /* sqrt(negative) */ + } else + return z; +#endif +} +weak_alias (__sqrtl, sqrtl) diff -durpNa glibc-2.2.2/sysdeps/generic/w_tgamma.c glibc-2.2.3/sysdeps/generic/w_tgamma.c --- glibc-2.2.2/sysdeps/generic/w_tgamma.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_tgamma.c Fri Feb 16 17:45:34 2001 @@ -0,0 +1,54 @@ +/* @(#)w_gamma.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $"; +#endif + +/* double gamma(double x) + * Return the logarithm of the Gamma function of x or the Gamma function of x, + * depending on the library mode. + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + double __tgamma(double x) +#else + double __tgamma(x) + double x; +#endif +{ + double y; + int local_signgam; + y = __ieee754_gamma_r(x,&local_signgam); + if (local_signgam < 0) y = -y; +#ifdef _IEEE_LIBM + return y; +#else + if(_LIB_VERSION == _IEEE_) return y; + + if(!__finite(y)&&__finite(x)) { + if(__floor(x)==x&&x<=0.0) + return __kernel_standard(x,x,41); /* tgamma pole */ + else + return __kernel_standard(x,x,40); /* tgamma overflow */ + } + return y; +#endif +} +weak_alias (__tgamma, tgamma) +#ifdef NO_LONG_DOUBLE +strong_alias (__tgamma, __tgammal) +weak_alias (__tgamma, tgammal) +#endif diff -durpNa glibc-2.2.2/sysdeps/generic/w_tgammaf.c glibc-2.2.3/sysdeps/generic/w_tgammaf.c --- glibc-2.2.2/sysdeps/generic/w_tgammaf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_tgammaf.c Fri Feb 16 17:45:39 2001 @@ -0,0 +1,50 @@ +/* w_gammaf.c -- float version of w_gamma.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: w_gammaf.c,v 1.4 1995/11/20 22:06:48 jtc Exp $"; +#endif + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float __tgammaf(float x) +#else + float __tgammaf(x) + float x; +#endif +{ + float y; + int local_signgam; + y = __ieee754_gammaf_r(x,&local_signgam); + if (local_signgam < 0) y = -y; +#ifdef _IEEE_LIBM + return y; +#else + if(_LIB_VERSION == _IEEE_) return y; + + if(!__finitef(y)&&__finitef(x)) { + if(__floorf(x)==x&&x<=(float)0.0) + /* tgammaf pole */ + return (float)__kernel_standard((double)x,(double)x,141); + else + /* tgammaf overflow */ + return (float)__kernel_standard((double)x,(double)x,140); + } + return y; +#endif +} +weak_alias (__tgammaf, tgammaf) diff -durpNa glibc-2.2.2/sysdeps/generic/w_tgammal.c glibc-2.2.3/sysdeps/generic/w_tgammal.c --- glibc-2.2.2/sysdeps/generic/w_tgammal.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/generic/w_tgammal.c Fri Feb 16 17:45:44 2001 @@ -0,0 +1,53 @@ +/* w_gammal.c -- long double version of w_gamma.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* long double gammal(double x) + * Return the Gamma function of x. + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __tgammal(long double x) +#else + long double __tgammal(x) + long double x; +#endif +{ + long double y; + int local_signgam; + y = __ieee754_gammal_r(x,&local_signgam); + if (local_signgam < 0) y = -y; +#ifdef _IEEE_LIBM + return y; +#else + if(_LIB_VERSION == _IEEE_) return y; + + if(!__finitel(y)&&__finitel(x)) { + if(__floorl(x)==x&&x<=0.0) + return __kernel_standard(x,x,241); /* tgamma pole */ + else + return __kernel_standard(x,x,240); /* tgamma overflow */ + } + return y; +#endif +} +weak_alias (__tgammal, tgammal) diff -durpNa glibc-2.2.2/sysdeps/hppa/Makefile glibc-2.2.3/sysdeps/hppa/Makefile --- glibc-2.2.2/sysdeps/hppa/Makefile Sat Oct 14 20:16:57 2000 +++ glibc-2.2.3/sysdeps/hppa/Makefile Thu Apr 26 20:07:11 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 2000 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by David Huggins-Daines (dhd@debian.org) @@ -17,8 +17,14 @@ # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -# We need this for all shared objects since the build process uses ld -r -CFLAGS-.os += -ffunction-sections +# We used to need this since the build process uses ld -r. Now we use +# ld -r --unique=.text* which does more or less the same thing, but better. +# CFLAGS-.os += -ffunction-sections +LDFLAGS-c_pic.os += -Wl,--unique=.text* + +ifeq ($(subdir),malloc) +CFLAGS-malloc.c += -DMALLOC_ALIGNMENT=16 +endif ifeq ($(subdir),elf) dl-routines += dl-symaddr dl-fptr diff -durpNa glibc-2.2.2/sysdeps/hppa/Versions glibc-2.2.3/sysdeps/hppa/Versions --- glibc-2.2.2/sysdeps/hppa/Versions Sat Oct 14 20:17:19 2000 +++ glibc-2.2.3/sysdeps/hppa/Versions Wed Apr 25 14:51:02 2001 @@ -2,5 +2,6 @@ ld { GLIBC_2.2 { # hppa specific functions in the dynamic linker, but used by libc.so. _dl_symbol_address; _dl_unmap; _dl_lookup_address; + _dl_function_address; } } diff -durpNa glibc-2.2.2/sysdeps/hppa/dl-lookupcfg.h glibc-2.2.3/sysdeps/hppa/dl-lookupcfg.h --- glibc-2.2.2/sysdeps/hppa/dl-lookupcfg.h Sat Oct 14 20:19:45 2000 +++ glibc-2.2.3/sysdeps/hppa/dl-lookupcfg.h Wed Apr 25 14:51:02 2001 @@ -34,3 +34,16 @@ Elf32_Addr _dl_lookup_address (const voi void _dl_unmap (struct link_map *map); #define DL_UNMAP(map) _dl_unmap (map) + +extern Elf32_Addr _dl_function_address (const struct link_map *map, + Elf32_Addr start); + +#define DL_FUNCTION_ADDRESS(map, addr) _dl_function_address (map, addr) + +/* The test for "addr & 2" below is to accomodate old binaries which + violated the ELF ABI by pointing DT_INIT and DT_FINI at a function + pointer. */ +#define DL_DT_INIT_ADDRESS(map, addr) \ + ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr)) +#define DL_DT_FINI_ADDRESS(map, addr) \ + ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr)) diff -durpNa glibc-2.2.2/sysdeps/hppa/dl-machine.h glibc-2.2.3/sysdeps/hppa/dl-machine.h --- glibc-2.2.2/sysdeps/hppa/dl-machine.h Thu Oct 26 22:57:35 2000 +++ glibc-2.2.3/sysdeps/hppa/dl-machine.h Wed Apr 25 14:51:02 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version. - Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,1996,1997,1999,2000,2001 Free Software Foundation, Inc. Contributed by David Huggins-Daines This file is part of the GNU C Library. @@ -248,7 +248,17 @@ elf_machine_runtime_setup (struct link_m The C function `_dl_start' is the real entry point; its return value is the user program's entry point. */ -#define RTLD_START asm ("\ +#define RTLD_START \ +/* Set up dp for any non-PIC lib constructors that may be called. */ \ +static struct link_map * set_dp (struct link_map *map) \ +{ \ + register Elf32_Addr dp asm ("%r27"); \ + dp = D_PTR (map, l_info[DT_PLTGOT]); \ + asm volatile ("" : : "r" (dp)); \ + return map; \ +} \ + \ +asm ("\ .text .globl _start .type _start,@function @@ -324,7 +334,6 @@ _start: bl _dl_start,%rp ldo -4(%r24),%r26 - /* FALLTHRU */ .globl _dl_start_user .type _dl_start_user,@function _dl_start_user: @@ -352,10 +361,14 @@ _dl_start_user: stw %r24,-44(%sp) .Lnofix: - /* Call _dl_init(_dl_loaded, argc, argv, envp). */ addil LT'_dl_loaded,%r19 ldw RT'_dl_loaded(%r1),%r26 + bl set_dp, %r2 ldw 0(%r26),%r26 + + /* Call _dl_init(_dl_loaded, argc, argv, envp). */ + copy %r28,%r26 + /* envp = argv + argc + 1 */ sh2add %r25,%r24,%r23 bl _dl_init,%r2 @@ -373,11 +386,18 @@ __dl_fini_plabel: .word 0xdeadbeef .previous + /* %r3 contains a function pointer, we need to mask out the lower + * bits and load the gp and jump address. */ + depi 0,31,2,%r3 + ldw 0(%r3),%r2 addil LT'__dl_fini_plabel,%r19 ldw RT'__dl_fini_plabel(%r1),%r23 stw %r19,4(%r23) - bv %r0(%r3) - depi 2,31,2,%r23 /* delay slot */"); + ldw 4(%r3),%r19 /* load the object's gp */ + bv %r0(%r2) + depi 2,31,2,%r23 /* delay slot */ +"); + /* This code gets called via the .plt stub, and is used in dl-runtime.c to call the `fixup' function and then redirect to the @@ -448,6 +468,10 @@ __dl_fini_plabel: /* We only use RELA. */ #define ELF_MACHINE_NO_REL 1 +/* Return the address of the entry point. */ +#define ELF_MACHINE_START_ADDRESS(map, start) \ + DL_FUNCTION_ADDRESS (map, start) + #endif /* !dl_machine_h */ /* These are only actually used where RESOLVE_MAP is defined, anyway. */ @@ -575,10 +599,10 @@ elf_machine_rela (struct link_map *map, const char *strtab; strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/hppa/dl-symaddr.c glibc-2.2.3/sysdeps/hppa/dl-symaddr.c --- glibc-2.2.2/sysdeps/hppa/dl-symaddr.c Sat Oct 14 20:21:04 2000 +++ glibc-2.2.3/sysdeps/hppa/dl-symaddr.c Wed Apr 25 14:51:02 2001 @@ -33,7 +33,7 @@ _dl_symbol_address (const struct link_ma } ElfW(Addr) -_dl_start_address (const struct link_map *map, ElfW(Addr) start) +_dl_function_address (const struct link_map *map, ElfW(Addr) start) { return __hppa_make_fptr (map, start, &__fptr_root, NULL); } diff -durpNa glibc-2.2.2/sysdeps/hppa/elf/initfini.c glibc-2.2.3/sysdeps/hppa/elf/initfini.c --- glibc-2.2.2/sysdeps/hppa/elf/initfini.c Sat Oct 14 20:33:24 2000 +++ glibc-2.2.3/sysdeps/hppa/elf/initfini.c Wed Apr 25 14:51:02 2001 @@ -59,8 +59,6 @@ __asm__ (" .align 4 .globl _init .type _init,@function - .proc - .callinfo _init: stw %rp,-20(%sp) stwm %r4,64(%sp) @@ -68,25 +66,38 @@ _init: bl __gmon_start__,%rp copy %r19,%r4 /* delay slot */ copy %r4,%r19 - .align 4 - .procend /*@_init_PROLOG_ENDS*/ /*@_init_EPILOG_BEGINS*/ - .section .init - copy %r4,%r19 - ldw -84(%sp),%rp - bv %r0(%rp) - ldwm -64(%sp),%r4 .text .align 4 .weak __gmon_start__ .type __gmon_start__,@function +__gmon_start__: .proc .callinfo -__gmon_start__: + .entry bv,n %r0(%r2) + .exit .procend + +/* Here is the tail end of _init. We put __gmon_start before this so + that the assembler creates the .PARISC.unwind section for us, ie. + with the right attributes. */ + .section .init + ldw -84(%sp),%rp + copy %r4,%r19 + bv %r0(%rp) +_end_init: + ldwm -64(%sp),%r4 + +/* Our very own unwind info, because the assembler can't handle + functions split into two or more pieces. */ + .section .PARISC.unwind + .extern _init + .word _init, _end_init + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 + /*@_init_EPILOG_ENDS*/ /*@_fini_PROLOG_BEGINS*/ @@ -94,23 +105,26 @@ __gmon_start__: .align 4 .globl _fini .type _fini,@function - .proc - .callinfo _fini: stw %rp,-20(%sp) stwm %r4,64(%sp) stw %r19,-32(%sp) copy %r19,%r4 - .align 4 - .procend /*@_fini_PROLOG_ENDS*/ /*@_fini_EPILOG_BEGINS*/ .section .fini - copy %r4,%r19 ldw -84(%sp),%rp + copy %r4,%r19 bv %r0(%rp) +_end_fini: ldwm -64(%sp),%r4 + + .section .PARISC.unwind + .extern _fini + .word _fini, _end_fini + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 + /*@_fini_EPILOG_ENDS*/ /*@TRAILER_BEGINS*/ diff -durpNa glibc-2.2.2/sysdeps/hppa/fpu/fclrexcpt.c glibc-2.2.3/sysdeps/hppa/fpu/fclrexcpt.c --- glibc-2.2.2/sysdeps/hppa/fpu/fclrexcpt.c Sat Oct 14 20:33:51 2000 +++ glibc-2.2.3/sysdeps/hppa/fpu/fclrexcpt.c Wed Apr 25 14:51:03 2001 @@ -29,7 +29,7 @@ feclearexcept (int excepts) __asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw)); /* Clear all the relevant bits. */ - sw[0] &= ~(excepts & FE_ALL_EXCEPT); + sw[0] &= ~(excepts & FE_ALL_EXCEPT) << 27; __asm__ ("fldd 0(%0),%%fr0" : : "r" (sw)); /* Success. */ diff -durpNa glibc-2.2.2/sysdeps/hppa/stackinfo.h glibc-2.2.3/sysdeps/hppa/stackinfo.h --- glibc-2.2.2/sysdeps/hppa/stackinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/hppa/stackinfo.h Wed Apr 25 13:17:26 2001 @@ -0,0 +1,28 @@ +/* Copyright (C) 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. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On PA the stack grows up. */ +#define _STACK_GROWS_UP 1 + +#endif /* stackinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/i386/dl-machine.h glibc-2.2.3/sysdeps/i386/dl-machine.h --- glibc-2.2.2/sysdeps/i386/dl-machine.h Fri Feb 9 10:04:25 2001 +++ glibc-2.2.3/sysdeps/i386/dl-machine.h Sat Apr 7 14:02:37 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. i386 version. - Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -117,68 +117,68 @@ elf_machine_runtime_setup (struct link_m and then redirect to the address it returns. */ #if !defined PROF && !__BOUNDED_POINTERS__ # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - .align 16 -_dl_runtime_resolve: - pushl %eax # Preserve registers otherwise clobbered. - pushl %ecx - pushl %edx - movl 16(%esp), %edx # Copy args pushed by PLT in register. Note - movl 12(%esp), %eax # that `fixup' takes its parameters in regs. - call fixup # Call resolver. - popl %edx # Get register content back. - popl %ecx - xchgl %eax, (%esp) # Get %eax contents end store function address. - ret $8 # Jump to function address. - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function - .align 16 -_dl_runtime_profile: - pushl %eax # Preserve registers otherwise clobbered. - pushl %ecx - pushl %edx - movl 20(%esp), %ecx # Load return address - movl 16(%esp), %edx # Copy args pushed by PLT in register. Note - movl 12(%esp), %eax # that `fixup' takes its parameters in regs. - call profile_fixup # Call resolver. - popl %edx # Get register content back. - popl %ecx - xchgl %eax, (%esp) # Get %eax contents end store function address. - ret $8 # Jump to function address. - .size _dl_runtime_profile, .-_dl_runtime_profile - .previous + .text\n\ + .globl _dl_runtime_resolve\n\ + .type _dl_runtime_resolve, @function\n\ + .align 16\n\ +_dl_runtime_resolve:\n\ + pushl %eax # Preserve registers otherwise clobbered.\n\ + pushl %ecx\n\ + pushl %edx\n\ + movl 16(%esp), %edx # Copy args pushed by PLT in register. Note\n\ + movl 12(%esp), %eax # that `fixup' takes its parameters in regs.\n\ + call fixup # Call resolver.\n\ + popl %edx # Get register content back.\n\ + popl %ecx\n\ + xchgl %eax, (%esp) # Get %eax contents end store function address.\n\ + ret $8 # Jump to function address.\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ +\n\ + .globl _dl_runtime_profile\n\ + .type _dl_runtime_profile, @function\n\ + .align 16\n\ +_dl_runtime_profile:\n\ + pushl %eax # Preserve registers otherwise clobbered.\n\ + pushl %ecx\n\ + pushl %edx\n\ + movl 20(%esp), %ecx # Load return address\n\ + movl 16(%esp), %edx # Copy args pushed by PLT in register. Note\n\ + movl 12(%esp), %eax # that `fixup' takes its parameters in regs.\n\ + call profile_fixup # Call resolver.\n\ + popl %edx # Get register content back.\n\ + popl %ecx\n\ + xchgl %eax, (%esp) # Get %eax contents end store function address.\n\ + ret $8 # Jump to function address.\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ + .previous\n\ "); #else -# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .text - .globl _dl_runtime_resolve - .globl _dl_runtime_profile - .type _dl_runtime_resolve, @function - .type _dl_runtime_profile, @function - .align 16 -_dl_runtime_resolve: -_dl_runtime_profile: - pushl %eax # Preserve registers otherwise clobbered. - pushl %ecx - pushl %edx - movl 16(%esp), %edx # Push the arguments for `fixup' - movl 12(%esp), %eax - pushl %edx - pushl %eax - call fixup # Call resolver. - popl %edx # Pop the parameters - popl %ecx - popl %edx # Get register content back. - popl %ecx - xchgl %eax, (%esp) # Get %eax contents end store function address. - ret $8 # Jump to function address. - .size _dl_runtime_resolve, .-_dl_runtime_resolve - .size _dl_runtime_profile, .-_dl_runtime_profile - .previous +# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\n\ + .text\n\ + .globl _dl_runtime_resolve\n\ + .globl _dl_runtime_profile\n\ + .type _dl_runtime_resolve, @function\n\ + .type _dl_runtime_profile, @function\n\ + .align 16\n\ +_dl_runtime_resolve:\n\ +_dl_runtime_profile:\n\ + pushl %eax # Preserve registers otherwise clobbered.\n\ + pushl %ecx\n\ + pushl %edx\n\ + movl 16(%esp), %edx # Push the arguments for `fixup'\n\ + movl 12(%esp), %eax\n\ + pushl %edx\n\ + pushl %eax\n\ + call fixup # Call resolver.\n\ + popl %edx # Pop the parameters\n\ + popl %ecx\n\ + popl %edx # Get register content back.\n\ + popl %ecx\n\ + xchgl %eax, (%esp) # Get %eax contents end store function address.\n\ + ret $8 # Jump to function address.\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ + .previous\n\ "); #endif @@ -190,8 +190,8 @@ _dl_runtime_profile: The C function `_dl_start' is the real entry point; its return value is the user program's entry point. */ -#define RTLD_START asm ("\ -.text\n\ +#define RTLD_START asm ("\n\ + .text\n\ .align 16\n\ 0: movl (%esp), %ebx\n\ ret\n\ @@ -205,7 +205,7 @@ _start:\n\ _dl_start_user:\n\ # Save the user entry point address in %edi.\n\ movl %eax, %edi\n\ - # Point %ebx at the GOT. + # Point %ebx at the GOT.\n\ call 0b\n\ addl $_GLOBAL_OFFSET_TABLE_, %ebx\n\ # Store the highest stack address\n\ @@ -240,7 +240,7 @@ _dl_start_user:\n\ movl _dl_fini@GOT(%ebx), %edx\n\ # Jump to the user's entry point.\n\ jmp *%edi\n\ -.previous\n\ + .previous\n\ "); #ifndef RTLD_START_SPECIAL_INIT @@ -351,10 +351,10 @@ elf_machine_rel (struct link_map *map, c const char *strtab; strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/i386/elf/start.S glibc-2.2.3/sysdeps/i386/elf/start.S --- glibc-2.2.2/sysdeps/i386/elf/start.S Fri Feb 9 10:04:25 2001 +++ glibc-2.2.3/sysdeps/i386/elf/start.S Mon Mar 26 20:53:18 2001 @@ -85,7 +85,7 @@ _start: meaningless since we don't support machines < 80386. */ .section .rodata .globl _fp_hw - .long 3 +_fp_hw: .long 3 .size _fp_hw, 4 /* Define a symbol for the first piece of initialized data. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/bits/mathinline.h glibc-2.2.3/sysdeps/i386/fpu/bits/mathinline.h --- glibc-2.2.2/sysdeps/i386/fpu/bits/mathinline.h Thu Nov 2 16:50:16 2000 +++ glibc-2.2.3/sysdeps/i386/fpu/bits/mathinline.h Mon Mar 26 20:53:19 2001 @@ -1,5 +1,5 @@ /* Inline math functions for i387. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by John C. Bowman , 1995. @@ -412,56 +412,6 @@ __inline_mathcodeNP (tan, __x, \ __asm __volatile__ \ ("fptan" \ : "=t" (__value2), "=u" (__value) : "0" (__x)); \ - return __value) - - -__inline_mathcodeNP2 (pow, __x, __y, \ - register long double __value; \ - register long double __exponent; \ - __extension__ long long int __p = (long long int) __y; \ - if (__x == 0.0) \ - { \ - if (__y > 0.0) \ - return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0; \ - else if (__y < 0.0) \ - return (__y == (double) __p && (-__p & 1) != 0 \ - ? 1.0 / __x : 1.0 / fabs (__x)); \ - } \ - if (__y == (double) __p) \ - { \ - long double __r = 1.0; \ - if (__p == 0) \ - return 1.0; \ - if (__p < 0) \ - { \ - __p = -__p; \ - __x = 1.0 / __x; \ - } \ - while (1) \ - { \ - if (__p & 1) \ - __r *= __x; \ - __p >>= 1; \ - if (__p == 0) \ - return __r; \ - __x *= __x; \ - } \ - /* NOTREACHED */ \ - } \ - __asm __volatile__ \ - ("fyl2x" : "=t" (__value) : "0" (__x), "u" (1.0) : "st(1)"); \ - __asm __volatile__ \ - ("fmul %%st(1) # y * log2(x)\n\t" \ - "fst %%st(1)\n\t" \ - "frndint # int(y * log2(x))\n\t" \ - "fxch\n\t" \ - "fsub %%st(1) # fract(y * log2(x))\n\t" \ - "f2xm1 # 2^(fract(y * log2(x))) - 1\n\t" \ - : "=t" (__value), "=u" (__exponent) : "0" (__y), "1" (__value)); \ - __value += 1.0; \ - __asm __volatile__ \ - ("fscale" \ - : "=t" (__value) : "0" (__value), "u" (__exponent)); \ return __value) #endif /* __FAST_MATH__ */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/branred.c glibc-2.2.3/sysdeps/i386/fpu/branred.c --- glibc-2.2.2/sysdeps/i386/fpu/branred.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/branred.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/doasin.c glibc-2.2.3/sysdeps/i386/fpu/doasin.c --- glibc-2.2.2/sysdeps/i386/fpu/doasin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/doasin.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/dosincos.c glibc-2.2.3/sysdeps/i386/fpu/dosincos.c --- glibc-2.2.2/sysdeps/i386/fpu/dosincos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/dosincos.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_asinl.S glibc-2.2.3/sysdeps/i386/fpu/e_asinl.S --- glibc-2.2.2/sysdeps/i386/fpu/e_asinl.S Tue Jul 13 16:21:05 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/e_asinl.S Wed Dec 31 16:00:00 1969 @@ -1,22 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -RCSID("$NetBSD: $") - -/* asinl = atanl (x / sqrtl(1 - x^2)) */ -ENTRY(__ieee754_asinl) - fldt 4(%esp) /* x */ - fld %st - fmul %st(0) /* x^2 */ - fld1 - fsubp /* 1 - x^2 */ - fsqrt /* sqrt (1 - x^2) */ - fpatan - ret -END (__ieee754_asinl) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_exp2.S glibc-2.2.3/sysdeps/i386/fpu/e_exp2.S --- glibc-2.2.2/sysdeps/i386/fpu/e_exp2.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/e_exp2.S Sat Feb 17 08:47:25 2001 @@ -0,0 +1,37 @@ +/* + * Written by J.T. Conklin . + * Adapted for exp2 by Ulrich Drepper . + * Public domain. + */ + +#include + +ENTRY(__ieee754_exp2) + fldl 4(%esp) +/* I added the following ugly construct because exp(+-Inf) resulted + in NaN. The ugliness results from the bright minds at Intel. + For the i686 the code can be written better. + -- drepper@cygnus.com. */ + fxam /* Is NaN or +-Inf? */ + fstsw %ax + movb $0x45, %dh + andb %ah, %dh + cmpb $0x05, %dh + je 1f /* Is +-Inf, jump. */ + fld %st + frndint /* int(x) */ + fsubr %st,%st(1) /* fract(x) */ + fxch + f2xm1 /* 2^(fract(x)) - 1 */ + fld1 + faddp /* 2^(fract(x)) */ + fscale /* e^x */ + fstp %st(1) + ret + +1: testl $0x200, %eax /* Test sign. */ + jz 2f /* If positive, jump. */ + fstp %st + fldz /* Set result to 0. */ +2: ret +END (__ieee754_exp2) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_exp2f.S glibc-2.2.3/sysdeps/i386/fpu/e_exp2f.S --- glibc-2.2.2/sysdeps/i386/fpu/e_exp2f.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/e_exp2f.S Sat Feb 17 08:47:38 2001 @@ -0,0 +1,37 @@ +/* + * Written by J.T. Conklin . + * Adapted for exp2 by Ulrich Drepper . + * Public domain. + */ + +#include + +ENTRY(__ieee754_exp2f) + flds 4(%esp) +/* I added the following ugly construct because exp(+-Inf) resulted + in NaN. The ugliness results from the bright minds at Intel. + For the i686 the code can be written better. + -- drepper@cygnus.com. */ + fxam /* Is NaN or +-Inf? */ + fstsw %ax + movb $0x45, %dh + andb %ah, %dh + cmpb $0x05, %dh + je 1f /* Is +-Inf, jump. */ + fld %st + frndint /* int(x) */ + fsubr %st,%st(1) /* fract(x) */ + fxch + f2xm1 /* 2^(fract(x)) - 1 */ + fld1 + faddp /* 2^(fract(x)) */ + fscale /* e^x */ + fstp %st(1) + ret + +1: testl $0x200, %eax /* Test sign. */ + jz 2f /* If positive, jump. */ + fstp %st + fldz /* Set result to 0. */ +2: ret +END (__ieee754_exp2f) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_exp2l.S glibc-2.2.3/sysdeps/i386/fpu/e_exp2l.S --- glibc-2.2.2/sysdeps/i386/fpu/e_exp2l.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/e_exp2l.S Sat Feb 17 08:47:51 2001 @@ -0,0 +1,37 @@ +/* + * Written by J.T. Conklin . + * Adapted for exp2 by Ulrich Drepper . + * Public domain. + */ + +#include + +ENTRY(__ieee754_exp2l) + fldt 4(%esp) +/* I added the following ugly construct because exp(+-Inf) resulted + in NaN. The ugliness results from the bright minds at Intel. + For the i686 the code can be written better. + -- drepper@cygnus.com. */ + fxam /* Is NaN or +-Inf? */ + fstsw %ax + movb $0x45, %dh + andb %ah, %dh + cmpb $0x05, %dh + je 1f /* Is +-Inf, jump. */ + fld %st + frndint /* int(x) */ + fsubr %st,%st(1) /* fract(x) */ + fxch + f2xm1 /* 2^(fract(x)) - 1 */ + fld1 + faddp /* 2^(fract(x)) */ + fscale /* e^x */ + fstp %st(1) + ret + +1: testl $0x200, %eax /* Test sign. */ + jz 2f /* If positive, jump. */ + fstp %st + fldz /* Set result to 0. */ +2: ret +END (__ieee754_exp2l) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_pow.S glibc-2.2.3/sysdeps/i386/fpu/e_pow.S --- glibc-2.2.2/sysdeps/i386/fpu/e_pow.S Sun Aug 1 14:44:47 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/e_pow.S Mon Mar 26 20:53:18 2001 @@ -1,5 +1,5 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -130,7 +130,18 @@ ENTRY(__ieee754_pow) orl %edx, %ecx jnz 6b fstp %st(0) // ST*x -30: ret + ret + + /* y is ±NAN */ +30: fldl 4(%esp) // x : y + fldl MO(one) // 1.0 : x : y + fucomp %st(1) // x : y + fnstsw + sahf + je 31f + fxch // y : x +31: fstp %st(1) + ret .align ALIGNARG(4) 2: /* y is a real number. */ @@ -189,8 +200,7 @@ ENTRY(__ieee754_pow) ret .align ALIGNARG(4) -14: fldl MO(infinity) - fmull MO(zero) // raise invalid exception +14: fldl MO(one) ret .align ALIGNARG(4) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_powf.S glibc-2.2.3/sysdeps/i386/fpu/e_powf.S --- glibc-2.2.2/sysdeps/i386/fpu/e_powf.S Sun Aug 1 14:44:47 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/e_powf.S Mon Mar 26 20:53:19 2001 @@ -1,5 +1,5 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -125,7 +125,18 @@ ENTRY(__ieee754_powf) testl %edx, %edx jnz 6b fstp %st(0) // ST*x -30: ret + ret + + /* y is ±NAN */ +30: flds 4(%esp) // x : y + fldl MO(one) // 1.0 : x : y + fucomp %st(1) // x : y + fnstsw + sahf + je 31f + fxch // y : x +31: fstp %st(1) + ret .align ALIGNARG(4) 2: /* y is a real number. */ @@ -184,8 +195,7 @@ ENTRY(__ieee754_powf) ret .align ALIGNARG(4) -14: fldl MO(infinity) - fmull MO(zero) // raise invalid exception +14: fldl MO(one) ret .align ALIGNARG(4) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_powl.S glibc-2.2.3/sysdeps/i386/fpu/e_powl.S --- glibc-2.2.2/sysdeps/i386/fpu/e_powl.S Sun Aug 1 14:44:47 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/e_powl.S Mon Mar 26 20:53:19 2001 @@ -1,5 +1,5 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -130,7 +130,18 @@ ENTRY(__ieee754_powl) orl %edx, %ecx jnz 6b fstp %st(0) // ST*x -30: ret + ret + + /* y is ±NAN */ +30: fldt 4(%esp) // x : y + fldl MO(one) // 1.0 : x : y + fucomp %st(1) // x : y + fnstsw + sahf + je 31f + fxch // y : x +31: fstp %st(1) + ret .align ALIGNARG(4) 2: /* y is a real number. */ @@ -189,8 +200,7 @@ ENTRY(__ieee754_powl) ret .align ALIGNARG(4) -14: fldl MO(infinity) - fmull MO(zero) // raise invalid exception +14: fldl MO(one) ret .align ALIGNARG(4) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_scalb.S glibc-2.2.3/sysdeps/i386/fpu/e_scalb.S --- glibc-2.2.2/sysdeps/i386/fpu/e_scalb.S Sat Jan 6 20:35:39 2001 +++ glibc-2.2.3/sysdeps/i386/fpu/e_scalb.S Mon Mar 26 20:53:19 2001 @@ -56,7 +56,7 @@ ENTRY(__ieee754_scalb) fcomp %st(2) fnstsw sahf - jne 2f + jne 4f fscale fstp %st(1) ret @@ -75,6 +75,7 @@ ENTRY(__ieee754_scalb) fstp %st andl $0x80000000, %edx andl $8, %eax + jnz 4f shrl $27, %edx addl %edx, %eax fldl MOX(zero_nan, %eax, 1) @@ -94,5 +95,12 @@ ENTRY(__ieee754_scalb) /* The first parameter is a NaN. Return it. */ 3: fstp %st(1) + ret + + /* Return NaN and raise the invalid exception. */ +4: fstp %st + fstp %st + fldz + fdiv %st ret END(__ieee754_scalb) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_scalbf.S glibc-2.2.3/sysdeps/i386/fpu/e_scalbf.S --- glibc-2.2.2/sysdeps/i386/fpu/e_scalbf.S Sat Jan 6 20:35:39 2001 +++ glibc-2.2.3/sysdeps/i386/fpu/e_scalbf.S Mon Mar 26 20:53:19 2001 @@ -58,7 +58,7 @@ ENTRY(__ieee754_scalbf) fcomp %st(2) fnstsw sahf - jne 2f + jne 4f fscale fstp %st(1) ret @@ -77,6 +77,7 @@ ENTRY(__ieee754_scalbf) fstp %st andl $0x80000000, %edx andl $8, %eax + jnz 4f shrl $27, %edx addl %edx, %eax fldl MOX(zero_nan, %eax, 1) @@ -96,5 +97,12 @@ ENTRY(__ieee754_scalbf) /* The first parameter is a NaN. Return it. */ 3: fstp %st(1) + ret + + /* Return NaN and raise the invalid exception. */ +4: fstp %st + fstp %st + fldz + fdiv %st ret END(__ieee754_scalbf) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/e_scalbl.S glibc-2.2.3/sysdeps/i386/fpu/e_scalbl.S --- glibc-2.2.2/sysdeps/i386/fpu/e_scalbl.S Sat Jan 6 20:35:39 2001 +++ glibc-2.2.3/sysdeps/i386/fpu/e_scalbl.S Mon Mar 26 20:53:19 2001 @@ -58,7 +58,7 @@ ENTRY(__ieee754_scalbl) fcomp %st(2) fnstsw sahf - jne 2f + jne 4f fscale fstp %st(1) ret @@ -77,6 +77,7 @@ ENTRY(__ieee754_scalbl) fstp %st andl $0x8000, %edx andl $8, %eax + jnz 4f shrl $11, %edx addl %edx, %eax fldl MOX(zero_nan, %eax, 1) @@ -96,5 +97,12 @@ ENTRY(__ieee754_scalbl) /* The first parameter is a NaN. Return it. */ 3: fstp %st(1) + ret + + /* Return NaN and raise the invalid exception. */ +4: fstp %st + fstp %st + fldz + fdiv %st ret END(__ieee754_scalbl) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/halfulp.c glibc-2.2.3/sysdeps/i386/fpu/halfulp.c --- glibc-2.2.2/sysdeps/i386/fpu/halfulp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/halfulp.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/libm-test-ulps glibc-2.2.3/sysdeps/i386/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/i386/fpu/libm-test-ulps Thu Feb 15 14:08:41 2001 +++ glibc-2.2.3/sysdeps/i386/fpu/libm-test-ulps Tue Apr 17 14:57:12 2001 @@ -6,15 +6,27 @@ ildouble: 1150 ldouble: 1150 # acosh -Test "acosh (7) == 2.6339157938496334172": +Test "acosh (7) == 2.633915793849633417250092694615937": ldouble: 1 ildouble: 1 # asin +Test "asin (0.5) == pi/6": +ldouble: 1 +ildouble: 1 +Test "asin (-0.5) == -pi/6": +ldouble: 1 +ildouble: 1 +Test "asin (1.0) == pi/2": +ldouble: 1 +ildouble: 1 +Test "asin (-1.0) == -pi/2": +ldouble: 1 +ildouble: 1 Test "asin (0.7) == 0.77539749661075306374035335271498708": double: 1 -ildouble: 1147 -ldouble: 1147 +ldouble: 1 +ildouble: 1 # asinh Test "asinh (0.7) == 0.652666566082355786": @@ -22,15 +34,15 @@ ildouble: 656 ldouble: 656 # atan -Test "atan (0.7) == 0.6107259643892086165": +Test "atan (0.7) == 0.61072596438920861654375887649023613": ildouble: 549 ldouble: 549 # atan2 -Test "atan2 (0.4, 0.0003) == 1.5700463269355215718": +Test "atan2 (0.4, 0.0003) == 1.5700463269355215717704032607580829": ildouble: 1 ldouble: 1 -Test "atan2 (0.7, 1) == 0.6107259643892086165": +Test "atan2 (0.7, 1) == 0.61072596438920861654375887649023613": ildouble: 549 ldouble: 549 @@ -64,122 +76,122 @@ 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": +Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i": +Test "Imaginary part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i": ildouble: 1 ldouble: 1 -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 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": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 2 ifloat: 2 ildouble: 329 ldouble: 329 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 4 idouble: 1 ifloat: 4 -ildouble: 5 -ldouble: 5 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +ildouble: 6 +ldouble: 6 +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 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": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 idouble: 1 ildouble: 328 ldouble: 328 -Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 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": +Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i": +Test "Imaginary part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i": ildouble: 1 ldouble: 1 -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 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": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 2 ifloat: 2 ildouble: 329 ldouble: 329 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 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": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 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": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": ildouble: 892 ldouble: 892 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 ildouble: 12 ldouble: 12 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 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": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": ildouble: 251 ldouble: 251 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 1 ifloat: 1 ildouble: 474 ldouble: 474 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 2 float: 1 idouble: 2 ifloat: 1 ildouble: 6 ldouble: 6 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 idouble: 1 ildouble: 66 ldouble: 66 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": ildouble: 447 ldouble: 447 @@ -256,8 +268,8 @@ 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": +Test "Real part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": ildouble: 1 ldouble: 1 @@ -522,11 +534,15 @@ ldouble: 3074 Test "erfc (0.7) == 0.32219880616258152702": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "erfc (1.2) == 0.089686021770364619762": float: 1 double: 1 idouble: 1 ifloat: 1 +ldouble: 3 +ildouble: 3 Test "erfc (2.0) == 0.0046777349810472658379": double: 1 idouble: 1 @@ -535,6 +551,11 @@ double: 24 float: 12 idouble: 24 ifloat: 12 +ldouble: 4 +ildouble: 4 +Test "erfc (9) == 0.41370317465138102381e-36": +ldouble: 36 +ildouble: 36 # exp Test "exp (0.7) == 2.0137527074704765216": @@ -598,6 +619,8 @@ ldouble: 4096 Test "gamma (-0.5) == log(2*sqrt(pi))": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 # hypot Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271": @@ -659,12 +682,16 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 2 +ildouble: 2 Test "j1 (2.0) == 0.57672480775687338720": double: 1 idouble: 1 Test "j1 (8.0) == 0.23463634685391462438": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 # jn Test "jn (0, 10.0) == -0.24593576445134833520": @@ -672,6 +699,8 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 2 +ildouble: 2 Test "jn (0, 2.0) == 0.22389077914123566805": float: 1 ifloat: 1 @@ -680,46 +709,66 @@ idouble: 1 Test "jn (0, 8.0) == 0.17165080713755390609": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "jn (1, 10.0) == 0.043472746168861436670": float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 2 +ildouble: 2 Test "jn (1, 2.0) == 0.57672480775687338720": double: 1 idouble: 1 Test "jn (1, 8.0) == 0.23463634685391462438": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "jn (10, -1.0) == 0.26306151236874532070e-9": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "jn (10, 0.1) == 0.26905328954342155795e-19": double: 4 float: 2 idouble: 4 ifloat: 2 +ldouble: 1 +ildouble: 1 Test "jn (10, 0.7) == 0.75175911502153953928e-11": double: 4 float: 1 idouble: 4 ifloat: 1 +ldouble: 2 +ildouble: 2 Test "jn (10, 1.0) == 0.26306151236874532070e-9": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "jn (10, 2.0) == 0.25153862827167367096e-6": float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 1 +ildouble: 1 Test "jn (10, 10.0) == 0.20748610663335885770": float: 2 ifloat: 2 double: 4 idouble: 4 +ldouble: 2 +ildouble: 2 Test "jn (3, 0.1) == 0.000020820315754756261429": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "jn (3, 0.7) == 0.0069296548267508408077": double: 2 idouble: 2 @@ -733,11 +782,21 @@ float: 1 ifloat: 1 double: 3 idouble: 3 +ldouble: 1 +ildouble: 1 +Test "jn (3, -1.0) == -0.019563353982668405919": +ldouble: 1 +ildouble: 1 +Test "jn (3, 1.0) == 0.019563353982668405919": +ldouble: 1 +ildouble: 1 # lgamma Test "lgamma (-0.5) == log(2*sqrt(pi))": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "lgamma (0.7) == 0.26086724653166651439": double: 1 float: 1 @@ -748,12 +807,14 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 # log Test "log (1.0 / M_El) == -1": ldouble: 1 ildouble: 1 -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -779,7 +840,7 @@ ildouble: 1 ldouble: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -854,7 +915,7 @@ ildouble: 325 ldouble: 325 # tan -Test "tan (0.7) == 0.84228838046307944813": +Test "tan (0.7) == 0.84228838046307944812813500221293775": ildouble: 1401 ldouble: 1401 Test "tan (pi/4) == 1": @@ -872,6 +933,8 @@ double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 2 +ildouble: 2 Test "tgamma (0.5) == sqrt (pi)": float: 1 ifloat: 1 @@ -880,6 +943,9 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +Test "tgamma (4) == 6": +ldouble: 2 +ildouble: 2 # y0 Test "y0 (0.1) == -1.5342386513503668441": @@ -928,6 +994,8 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "y1 (0.7) == -1.1032498719076333697": double: 1 idouble: 1 @@ -947,9 +1015,13 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 Test "y1 (8.0) == -0.15806046173124749426": float: 2 ifloat: 2 +ldouble: 2 +ildouble: 2 # yn Test "yn (0, 0.1) == -1.5342386513503668441": @@ -962,6 +1034,8 @@ float: 1 ifloat: 1 double: 3 idouble: 3 +ldouble: 2 +ildouble: 2 Test "yn (0, 1.0) == 0.088256964215676957983": double: 2 float: 1 @@ -980,16 +1054,22 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 1 +ildouble: 1 Test "yn (0, 8.0) == 0.22352148938756622053": float: 1 ifloat: 1 double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "yn (1, 0.1) == -6.4589510947020269877": double: 1 float: 1 idouble: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "yn (1, 0.7) == -1.1032498719076333697": double: 1 idouble: 1 @@ -1009,19 +1089,27 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 Test "yn (1, 8.0) == -0.15806046173124749426": float: 2 ifloat: 2 +ldouble: 2 +ildouble: 2 Test "yn (10, 0.1) == -0.11831335132045197885e19": double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 2 +ildouble: 2 Test "yn (10, 0.7) == -0.42447194260703866924e10": double: 6 float: 3 idouble: 6 ifloat: 3 +ldouble: 7 +ildouble: 7 Test "yn (10, 1.0) == -0.12161801427868918929e9": double: 1 float: 1 @@ -1037,14 +1125,20 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 1 +ildouble: 1 Test "yn (3, 0.1) == -5099.3323786129048894": double: 1 float: 1 idouble: 1 ifloat: 1 +ldouble: 2 +ildouble: 2 Test "yn (3, 0.7) == -15.819479052819633505": -double: 2 -idouble: 2 +double: 3 +idouble: 3 +ldouble: 2 +ildouble: 2 Test "yn (3, 2.0) == -1.1277837768404277861": float: 1 ifloat: 1 @@ -1067,8 +1161,8 @@ ldouble: 1 Function: "asin": double: 1 -ildouble: 1147 -ldouble: 1147 +ldouble: 1 +ildouble: 1 Function: "asinh": ildouble: 656 @@ -1347,6 +1441,8 @@ double: 24 float: 12 idouble: 24 ifloat: 12 +ldouble: 36 +ildouble: 36 Function: "exp": ildouble: 412 @@ -1377,6 +1473,8 @@ ldouble: 4096 Function: "gamma": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Function: "hypot": double: 1 @@ -1395,18 +1493,24 @@ double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 2 +ildouble: 2 Function: "jn": double: 4 float: 2 idouble: 4 ifloat: 2 +ldouble: 2 +ildouble: 2 Function: "lgamma": double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 Function: "log": double: 1 @@ -1481,6 +1585,8 @@ double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 2 +ildouble: 2 Function: "y0": double: 3 @@ -1495,11 +1601,15 @@ double: 3 float: 2 idouble: 3 ifloat: 2 +ldouble: 2 +ildouble: 2 Function: "yn": double: 6 float: 3 idouble: 6 ifloat: 3 +ldouble: 7 +ildouble: 7 # end of automatic generation diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mpa.c glibc-2.2.3/sysdeps/i386/fpu/mpa.c --- glibc-2.2.2/sysdeps/i386/fpu/mpa.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mpa.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mpatan.c glibc-2.2.3/sysdeps/i386/fpu/mpatan.c --- glibc-2.2.2/sysdeps/i386/fpu/mpatan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mpatan.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mpatan2.c glibc-2.2.3/sysdeps/i386/fpu/mpatan2.c --- glibc-2.2.2/sysdeps/i386/fpu/mpatan2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mpatan2.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mpexp.c glibc-2.2.3/sysdeps/i386/fpu/mpexp.c --- glibc-2.2.2/sysdeps/i386/fpu/mpexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mpexp.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mplog.c glibc-2.2.3/sysdeps/i386/fpu/mplog.c --- glibc-2.2.2/sysdeps/i386/fpu/mplog.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mplog.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mpsqrt.c glibc-2.2.3/sysdeps/i386/fpu/mpsqrt.c --- glibc-2.2.2/sysdeps/i386/fpu/mpsqrt.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mpsqrt.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/mptan.c glibc-2.2.3/sysdeps/i386/fpu/mptan.c --- glibc-2.2.2/sysdeps/i386/fpu/mptan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/mptan.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/s_exp2.S glibc-2.2.3/sysdeps/i386/fpu/s_exp2.S --- glibc-2.2.2/sysdeps/i386/fpu/s_exp2.S Tue Jul 13 16:32:54 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/s_exp2.S Wed Dec 31 16:00:00 1969 @@ -1,37 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Public domain. - */ - -#include - -ENTRY(__ieee754_exp2) - fldl 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/s_exp2f.S glibc-2.2.3/sysdeps/i386/fpu/s_exp2f.S --- glibc-2.2.2/sysdeps/i386/fpu/s_exp2f.S Tue Jul 13 16:32:58 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/s_exp2f.S Wed Dec 31 16:00:00 1969 @@ -1,37 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Public domain. - */ - -#include - -ENTRY(__ieee754_exp2f) - flds 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2f) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/s_exp2l.S glibc-2.2.3/sysdeps/i386/fpu/s_exp2l.S --- glibc-2.2.2/sysdeps/i386/fpu/s_exp2l.S Tue Jul 13 16:33:02 1999 +++ glibc-2.2.3/sysdeps/i386/fpu/s_exp2l.S Wed Dec 31 16:00:00 1969 @@ -1,37 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Public domain. - */ - -#include - -ENTRY(__ieee754_exp2l) - fldt 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2l) diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/sincos32.c glibc-2.2.3/sysdeps/i386/fpu/sincos32.c --- glibc-2.2.2/sysdeps/i386/fpu/sincos32.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/sincos32.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/slowexp.c glibc-2.2.3/sysdeps/i386/fpu/slowexp.c --- glibc-2.2.2/sysdeps/i386/fpu/slowexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/slowexp.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu/slowpow.c glibc-2.2.3/sysdeps/i386/fpu/slowpow.c --- glibc-2.2.2/sysdeps/i386/fpu/slowpow.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/fpu/slowpow.c Sun Mar 11 15:25:53 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/i386/fpu_control.h glibc-2.2.3/sysdeps/i386/fpu_control.h --- glibc-2.2.2/sysdeps/i386/fpu_control.h Fri Jul 7 10:57:36 2000 +++ glibc-2.2.3/sysdeps/i386/fpu_control.h Wed Apr 25 14:51:03 2001 @@ -1,5 +1,5 @@ /* FPU control word bits. i387 version. - Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1993,1995,1996,1997,1998,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Olaf Flebbe. @@ -64,9 +64,9 @@ #define _FPU_MASK_PM 0x20 /* precision control */ -#define _FPU_EXTENDED 0x300 -#define _FPU_DOUBLE 0x200 /* fdlibm requires double precision */ -#define _FPU_SINGLE 0x0 /* DO NOT USE */ +#define _FPU_EXTENDED 0x300 /* libm requires double extended precision. */ +#define _FPU_DOUBLE 0x200 +#define _FPU_SINGLE 0x0 /* rounding control */ #define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ diff -durpNa glibc-2.2.2/sysdeps/i386/i486/atomicity.h glibc-2.2.3/sysdeps/i386/i486/atomicity.h --- glibc-2.2.2/sysdeps/i386/i486/atomicity.h Mon May 1 14:56:59 2000 +++ glibc-2.2.3/sysdeps/i386/i486/atomicity.h Sat Apr 7 14:02:38 2001 @@ -1,5 +1,5 @@ /* Low-level functions for atomic operations. ix86 version, x >= 4. - Copyright (C) 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 2000, 2001 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 @@ -29,7 +29,7 @@ exchange_and_add (volatile uint32_t *mem { register uint32_t result; __asm__ __volatile__ ("lock; xaddl %0,%2" - : "=r" (result) : "0" (val), "m" (*mem) : "memory"); + : "=r" (result), "=m" (*mem) : "0" (val), "1" (*mem)); return result; } @@ -37,8 +37,8 @@ static inline void __attribute__ ((unused)) atomic_add (volatile uint32_t *mem, int val) { - __asm__ __volatile__ ("lock; addl %0,%1" - : : "ir" (val), "m" (*mem) : "memory"); + __asm__ __volatile__ ("lock; addl %1,%0" + : "=m" (*mem) : "ir" (val), "0" (*mem)); } static inline char @@ -50,7 +50,7 @@ compare_and_swap (volatile long int *p, __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0" : "=q" (ret), "=m" (*p), "=a" (readval) - : "r" (newval), "m" (*p), "a" (oldval)); + : "r" (newval), "1" (*p), "a" (oldval)); return ret; } diff -durpNa glibc-2.2.2/sysdeps/i386/i686/Versions glibc-2.2.3/sysdeps/i386/i686/Versions --- glibc-2.2.2/sysdeps/i386/i686/Versions Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/i386/i686/Versions Mon Apr 23 11:52:23 2001 @@ -0,0 +1,5 @@ +ld { + GLIBC_2.2.3 { + _dl_cpuclock_offset; + } +} diff -durpNa glibc-2.2.2/sysdeps/i386/i686/strtok.S glibc-2.2.3/sysdeps/i386/i686/strtok.S --- glibc-2.2.2/sysdeps/i386/i686/strtok.S Wed Aug 2 14:52:51 2000 +++ glibc-2.2.3/sysdeps/i386/i686/strtok.S Mon Mar 26 20:53:20 2001 @@ -1,6 +1,6 @@ /* strtok (str, delim) -- Return next DELIM separated token from STR. For Intel 80686. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -123,6 +123,8 @@ ENTRY (BP_SYM (FUNCTION)) the last run. */ cmpl $0, %edx cmove %eax, %edx + testl %edx, %edx + jz L(returnNULL) #if __BOUNDED_POINTERS__ # ifdef USE_AS_STRTOK_R movl SAVE(%esp), %ecx /* borrow %ecx for a moment */ diff -durpNa glibc-2.2.2/sysdeps/i386/strtok.S glibc-2.2.3/sysdeps/i386/strtok.S --- glibc-2.2.2/sysdeps/i386/strtok.S Wed Aug 2 14:52:49 2000 +++ glibc-2.2.3/sysdeps/i386/strtok.S Mon Mar 26 20:53:18 2001 @@ -1,6 +1,6 @@ /* strtok (str, delim) -- Return next DELIM separated token from STR. For Intel 80x86, x>=3. - Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -113,6 +113,8 @@ L(0): movl SAVE_PTR, %edx we have to take care for PIC code. */ movl SAVE_PTR, %edx #endif + testl %edx, %edx + jz L(returnNULL) L(1): /* First we create a table with flags for all possible characters. diff -durpNa glibc-2.2.2/sysdeps/ia64/Dist glibc-2.2.3/sysdeps/ia64/Dist --- glibc-2.2.2/sysdeps/ia64/Dist Sun Oct 8 17:43:41 2000 +++ glibc-2.2.3/sysdeps/ia64/Dist Wed Apr 25 14:51:03 2001 @@ -1,5 +1,7 @@ _mcount.S dl-symaddr.c dl-fptr.c +elf/entry.h +hp-timing.c ieee754.h softpipe.h diff -durpNa glibc-2.2.2/sysdeps/ia64/Makefile glibc-2.2.3/sysdeps/ia64/Makefile --- glibc-2.2.2/sysdeps/ia64/Makefile Fri Dec 1 11:55:09 2000 +++ glibc-2.2.3/sysdeps/ia64/Makefile Wed Apr 25 14:51:03 2001 @@ -7,6 +7,7 @@ endif ifeq ($(subdir), csu) CPPFLAGS-start.S = -D__ASSEMBLY__ +sysdep_routines += hp-timing endif ifeq ($(subdir),elf) diff -durpNa glibc-2.2.2/sysdeps/ia64/Versions glibc-2.2.3/sysdeps/ia64/Versions --- glibc-2.2.2/sysdeps/ia64/Versions Thu Nov 16 11:12:04 2000 +++ glibc-2.2.3/sysdeps/ia64/Versions Wed Apr 25 14:51:03 2001 @@ -4,4 +4,7 @@ ld { _dl_symbol_address; _dl_unmap; _dl_lookup_address; _dl_function_address; } + GLIBC_2.2.3 { + _dl_cpuclock_offset; + } } diff -durpNa glibc-2.2.2/sysdeps/ia64/_mcount.S glibc-2.2.3/sysdeps/ia64/_mcount.S --- glibc-2.2.2/sysdeps/ia64/_mcount.S Fri Dec 1 11:55:09 2000 +++ glibc-2.2.3/sysdeps/ia64/_mcount.S Mon Mar 26 20:53:20 2001 @@ -48,13 +48,11 @@ #undef ret - .psr abi64 - .psr lsb - .lsb - LEAF(_mcount) - alloc loc0 = ar.pfs, 4, 4, 3, 0 - mov loc1 = rp + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4) + alloc loc1 = ar.pfs, 4, 4, 3, 0 + mov loc0 = rp + .body mov loc2 = r8 // gcc uses r8 to pass pointer to return structure ;; mov loc3 = r15 // gcc uses r15 to pass the static link to nested functions @@ -67,21 +65,27 @@ LEAF(_mcount) .mii mov gp = in1 mov r2 = ip - mov ar.pfs = loc0 + mov ar.pfs = loc1 } ;; - adds r2 = 1f - .here, r2 - mov b7 = loc1 + adds r2 = _mcount_ret_helper - .here, r2 + mov b7 = loc0 mov rp = in2 ;; mov r8 = loc2 mov r15 = loc3 mov b6 = r2 br.ret.sptk.few b6 +END(_mcount) -1: alloc r2 = ar.pfs, 0, 0, 9, 0 +LOCAL_LEAF(_mcount_ret_helper) + .prologue + .altrp b7 + .save ar.pfs, r40 + .body + alloc r2 = ar.pfs, 0, 0, 9, 0 mov ar.pfs = r40 br b7 -END(_mcount) +END(_mcount_ret_helper) weak_alias (_mcount, mcount) diff -durpNa glibc-2.2.2/sysdeps/ia64/abort-instr.h glibc-2.2.3/sysdeps/ia64/abort-instr.h --- glibc-2.2.2/sysdeps/ia64/abort-instr.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/abort-instr.h Fri Apr 6 20:02:52 2001 @@ -0,0 +1,3 @@ +/* An instruction which should crash any program is `break 0' which triggers + SIGILL. */ +#define ABORT_INSTRUCTION asm ("break 0") diff -durpNa glibc-2.2.2/sysdeps/ia64/atomicity.h glibc-2.2.3/sysdeps/ia64/atomicity.h --- glibc-2.2.2/sysdeps/ia64/atomicity.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/atomicity.h Fri Apr 6 18:19:42 2001 @@ -0,0 +1,48 @@ +/* Low-level functions for atomic operations. IA-64 version. + Copyright (C) 2001 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 _ATOMICITY_H +#define _ATOMICITY_H 1 + +#include +#include + + +static inline uint32_t +__attribute__ ((unused)) +exchange_and_add (volatile uint32_t *mem, uint32_t val) +{ + return __sync_fetch_and_add (mem, val); +} + +static inline void +__attribute__ ((unused)) +atomic_add (volatile uint32_t *mem, int val) +{ + __sync_fetch_and_add (mem, val); +} + +static inline int +__attribute__ ((unused)) +compare_and_swap (volatile long int *p, long int oldval, long int newval) +{ + return __sync_bool_compare_and_swap (p, oldval, newval); +} + +#endif /* atomicity.h */ diff -durpNa glibc-2.2.2/sysdeps/ia64/bits/fenv.h glibc-2.2.3/sysdeps/ia64/bits/fenv.h --- glibc-2.2.2/sysdeps/ia64/bits/fenv.h Sun Oct 8 17:05:06 2000 +++ glibc-2.2.3/sysdeps/ia64/bits/fenv.h Mon Mar 26 20:53:20 2001 @@ -79,4 +79,9 @@ typedef unsigned long int fenv_t; /* Floating-point environment where only FE_UNNORMAL is masked since this exception is not generally supported by glibc. */ # define FE_NOMASK_ENV ((__const fenv_t *) 0xc009804c02700302UL) + +/* Floating-point environment with (processor-dependent) non-IEEE + floating point. In this case, turning on flush-to-zero mode for + s0, s2, and s3. */ +# define FE_NONIEEE_ENV ((__const fenv_t *) 0xc009a04d0270037fUL) #endif diff -durpNa glibc-2.2.2/sysdeps/ia64/elf/entry.h glibc-2.2.3/sysdeps/ia64/elf/entry.h --- glibc-2.2.2/sysdeps/ia64/elf/entry.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/elf/entry.h Tue Apr 10 15:31:18 2001 @@ -0,0 +1,7 @@ +#ifndef __ASSEMBLY__ +extern void _start (void); +#endif + +/* The function's entry point is stored in the first word of the + function descriptor (plabel) of _start(). */ +#define ENTRY_POINT (((long int *) _start)[0]) diff -durpNa glibc-2.2.2/sysdeps/ia64/elf/start.S glibc-2.2.3/sysdeps/ia64/elf/start.S --- glibc-2.2.2/sysdeps/ia64/elf/start.S Sat Jan 6 20:35:39 2001 +++ glibc-2.2.3/sysdeps/ia64/elf/start.S Thu Apr 12 14:02:08 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Jes Sorensen, , April 1999. @@ -17,6 +17,8 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include + #include #include @@ -31,16 +33,12 @@ * out6: stack_end */ - .psr abi64 - .psr lsb - .lsb - - .text - - .global _start# - .proc _start# + .align 32 + .global _start + .proc _start _start: + .prologue { .mlx alloc r2 = ar.pfs,0,0,7,0 movl r3 = FPSR_DEFAULT @@ -50,38 +48,46 @@ _start: movl gp = @gprel(0f) ;; } -0: { .mii +0: { .mmi ld8 out1 = [out2], 8 /* load argc and move out2 to become argv */ + mov.m r10 = ar.bsp /* fetch rbs base address */ mov r9 = ip ;; - sub gp = r9, gp /* back-compute gp value */ - ;; } - { .mfi + { .mii mov ar.fpsr = r3 - addl out0 = @ltoff(@fptr(main#)), gp + sub gp = r9, gp /* back-compute gp value */ + adds out6 = 16, sp /* highest non-environment stack address */ + ;; } - { .mfi - addl out4 = @ltoff(@fptr(_fini#)), gp - addl out3 = @ltoff(@fptr(_init#)), gp + { + addl r11 = @ltoff(__libc_ia64_register_backing_store_base), gp + addl out0 = @ltoff(@fptr(main)), gp + addl out3 = @ltoff(@fptr(_init)), gp ;; } { .mmi + ld8 r3 = [r11] /* pointer to __libc_ia64_register_backing_store_base */ ld8 out0 = [out0] /* pointer to `main' function descriptor */ + addl out4 = @ltoff(@fptr(_fini)), gp + ;; + } + { .mmi ld8 out3 = [out3] /* pointer to `init' function descriptor */ - adds out6 = 16, sp /* highest non-environment stack address */ + ld8 out4 = [out4] /* pointer to `fini' function descriptor */ + .save rp, r4 + mov r4 = r0 /* terminate unwind chain with a NULL return-pointer */ } + .body { .mib - ld8 out4 = [out4] /* pointer to `fini' function descriptor */ + st8 [r3] = r10 mov out5 = ret0 /* dynamic linker destructor */ - br.call.sptk.few rp = __libc_start_main# + br.call.sptk.few rp = __libc_start_main } { .mib - mov rp = r0 - br.ret.sptk.few rp /* break miserably if we ever return */ - ;; + break 0 /* break miserably if we ever return */ } - .endp _start# + .endp _start /* Define a symbol for the first piece of initialized data. */ .data @@ -90,3 +96,5 @@ __data_start: .long 0 .weak data_start data_start = __data_start + + .common __libc_ia64_register_backing_store_base, 8, 8 diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/Dist glibc-2.2.3/sysdeps/ia64/fpu/Dist --- glibc-2.2.2/sysdeps/ia64/fpu/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/Dist Tue Mar 27 22:27:44 2001 @@ -0,0 +1,11 @@ +libc_libm_error.c +libm_atan2_reg.S +libm_error.c +libm_frexp4.S +libm_frexp4f.S +libm_frexp4l.S +libm_reduce.S +libm_support.h +libm_tan.S +s_matherrf.c +s_matherrl.c diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/Makefile glibc-2.2.3/sysdeps/ia64/fpu/Makefile --- glibc-2.2.2/sysdeps/ia64/fpu/Makefile Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/Makefile Wed Mar 7 10:04:19 2001 @@ -0,0 +1,9 @@ +ifeq ($(subdir),math) +libm-sysdep_routines += libm_atan2_reg s_matherrf s_matherrl libm_reduce \ + libm_tan libm_error \ + $(calls) $(calls:=f) $(long-c-$(long-double-fcts)) \ + libm_frexp4 libm_frexp4f libm_frexp4l + +sysdep_routines += libm_frexp4 libm_frexp4f libm_frexp4l libc_libm_error +sysdep-CPPFLAGS += -DSIZE_INT_32 +endif diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/Versions glibc-2.2.3/sysdeps/ia64/fpu/Versions --- glibc-2.2.2/sysdeps/ia64/fpu/Versions Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/Versions Mon Feb 19 00:40:36 2001 @@ -0,0 +1,10 @@ +libc { + GLIBC_2.2.3 { + __libm_frexp_4; __libm_frexp_4f; __libm_frexp_4l; __libm_error_support; + } +} +libm { + GLIBC_2.2.3 { + matherrf; matherrl; + } +} diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/bits/mathdef.h glibc-2.2.3/sysdeps/ia64/fpu/bits/mathdef.h --- glibc-2.2.2/sysdeps/ia64/fpu/bits/mathdef.h Sat Jan 6 20:35:39 2001 +++ glibc-2.2.3/sysdeps/ia64/fpu/bits/mathdef.h Mon Mar 26 20:53:24 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -23,19 +23,18 @@ #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'. */ +/* The IA-64 architecture computes values with the precision of the + used type. */ +typedef float float_t; /* `float' expressions are evaluated as + `float'. */ +typedef double double_t; /* `double' expressions are evaluated as + `double'. */ /* 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) +# define FP_ILOGBNAN 2147483647 #endif /* ISO C99 */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/branred.c glibc-2.2.3/sysdeps/ia64/fpu/branred.c --- glibc-2.2.2/sysdeps/ia64/fpu/branred.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/branred.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/doasin.c glibc-2.2.3/sysdeps/ia64/fpu/doasin.c --- glibc-2.2.2/sysdeps/ia64/fpu/doasin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/doasin.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/dosincos.c glibc-2.2.3/sysdeps/ia64/fpu/dosincos.c --- glibc-2.2.2/sysdeps/ia64/fpu/dosincos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/dosincos.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_acos.S glibc-2.2.3/sysdeps/ia64/fpu/e_acos.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_acos.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_acos.S Mon Feb 19 00:41:03 2001 @@ -0,0 +1,904 @@ +.file "acos.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + +// History +//============================================================== +// 2/02/00 Initial version +// 8/17/00 New and much faster algorithm. +// 8/30/00 Avoided bank conflicts on loads, shortened |x|=1 and x=0 paths, +// fixed mfb split issue stalls. + +// Description +//========================================= +// The acos function computes the principle value of the arc sine of x. +// A doman error occurs for arguments not in the range [-1,+1]. + +// The acos function returns the arc cosine in the range [0, +pi] radians. +// acos(1) returns +0, acos(-1) returns pi, acos(0) returns pi/2. +// acos(x) returns a Nan and raises the invalid exception for |x| >1 + +// The acos function is just like asin except that pi/2 is added at the end. + +// +// Assembly macros +//========================================= + +#include "libm_support.h" + +// predicate registers +//acos_pred_LEsqrt2by2 = p7 +//acos_pred_GTsqrt2by2 = p8 + +// integer registers +ASIN_Addr1 = r33 +ASIN_Addr2 = r34 +ASIN_FFFE = r35 + +GR_SAVE_B0 = r36 +GR_SAVE_PFS = r37 +GR_SAVE_GP = r38 + +GR_Parameter_X = r39 +GR_Parameter_Y = r40 +GR_Parameter_RESULT = r41 +GR_Parameter_Tag = r42 + +// floating point registers +acos_coeff_P1 = f32 +acos_coeff_P2 = f33 +acos_coeff_P3 = f34 +acos_coeff_P4 = f35 + +acos_coeff_P5 = f36 +acos_coeff_P6 = f37 +acos_coeff_P7 = f38 +acos_coeff_P8 = f39 +acos_coeff_P9 = f40 + +acos_coeff_P10 = f41 +acos_coeff_P11 = f42 +acos_coeff_P12 = f43 +acos_coeff_P13 = f44 +acos_coeff_P14 = f45 + +acos_coeff_P15 = f46 +acos_coeff_P16 = f47 +acos_coeff_P17 = f48 +acos_coeff_P18 = f49 +acos_coeff_P19 = f50 + +acos_coeff_P20 = f51 +acos_coeff_P21 = f52 +acos_const_sqrt2by2 = f53 +acos_const_piby2 = f54 +acos_abs_x = f55 + +acos_tx = f56 +acos_tx2 = f57 +acos_tx3 = f58 +acos_tx4 = f59 +acos_tx8 = f60 + +acos_tx11 = f61 +acos_1poly_p8 = f62 +acos_1poly_p19 = f63 +acos_1poly_p4 = f64 +acos_1poly_p15 = f65 + +acos_1poly_p6 = f66 +acos_1poly_p17 = f67 +acos_1poly_p0 = f68 +acos_1poly_p11 = f69 +acos_1poly_p2 = f70 + +acos_1poly_p13 = f71 +acos_series_tx = f72 +acos_t = f73 +acos_t2 = f74 +acos_t3 = f75 + +acos_t4 = f76 +acos_t8 = f77 +acos_t11 = f78 +acos_poly_p8 = f79 +acos_poly_p19 = f80 + +acos_poly_p4 = f81 +acos_poly_p15 = f82 +acos_poly_p6 = f83 +acos_poly_p17 = f84 +acos_poly_p0 = f85 + +acos_poly_p11 = f86 +acos_poly_p2 = f87 +acos_poly_p13 = f88 +acos_series_t = f89 +acos_1by2 = f90 + +acos_3by2 = f91 +acos_5by2 = f92 +acos_11by4 = f93 +acos_35by8 = f94 +acos_63by8 = f95 + +acos_231by16 = f96 +acos_y0 = f97 +acos_H0 = f98 +acos_S0 = f99 +acos_d = f100 + +acos_l1 = f101 +acos_d2 = f102 +acos_T0 = f103 +acos_d1 = f104 +acos_e0 = f105 + +acos_l2 = f106 +acos_d3 = f107 +acos_T3 = f108 +acos_S1 = f109 +acos_e1 = f110 + +acos_z = f111 +answer2 = f112 +acos_sgn_x = f113 +acos_429by16 = f114 +acos_18by4 = f115 + +acos_3by4 = f116 +acos_l3 = f117 +acos_T6 = f118 +acos_const_add = f119 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +acos_coeff_1_table: +ASM_TYPE_DIRECTIVE(acos_coeff_1_table,@object) +data8 0xE4E7E0A423A21249 , 0x00003FF8 //P7 +data8 0xC2F7EE0200FCE2A5 , 0x0000C003 //P18 +data8 0xB745D7F6C65C20E0 , 0x00003FF9 //P5 +data8 0xF75E381A323D4D94 , 0x0000C002 //P16 +data8 0x8959C2629C1024C0 , 0x0000C002 //P20 +data8 0xAFF68E7D241292C5 , 0x00003FF8 //P9 +data8 0xB6DB6DB7260AC30D , 0x00003FFA //P3 +data8 0xD0417CE2B41CB7BF , 0x0000C000 //P14 +data8 0x81D570FEA724E3E4 , 0x0000BFFD //P12 +data8 0xAAAAAAAAAAAAC277 , 0x00003FFC //P1 +data8 0xF534912FF3E7B76F , 0x00003FFF //P21 +data8 0xc90fdaa22168c235 , 0x00003fff // pi/2 +data8 0x0000000000000000 , 0x00000000 // pad to avoid bank conflicts +ASM_SIZE_DIRECTIVE(acos_coeff_1_table) + + +acos_coeff_2_table: +ASM_TYPE_DIRECTIVE(acos_coeff_2_table,@object) +data8 0x8E26AF5F29B39A2A , 0x00003FF9 //P6 +data8 0xB4F118A4B1015470 , 0x00004003 //P17 +data8 0xF8E38E10C25990E0 , 0x00003FF9 //P4 +data8 0x80F50489AEF1CAC6 , 0x00004002 //P15 +data8 0x92728015172CFE1C , 0x00004003 //P19 +data8 0xBBC3D831D4595971 , 0x00003FF8 //P8 +data8 0x999999999952A5C3 , 0x00003FFB //P2 +data8 0x855576BE6F0975EC , 0x00003FFF //P13 +data8 0xF12420E778077D89 , 0x00003FFA //P11 +data8 0xB6590FF4D23DE003 , 0x00003FF3 //P10 +data8 0xb504f333f9de6484 , 0x00003ffe // sqrt(2)/2 +ASM_SIZE_DIRECTIVE(acos_coeff_2_table) + + +.align 32 +.global acos +ASM_TYPE_DIRECTIVE(acos,@function) + +.section .text +.proc acos +.align 32 + + +acos: + +{ .mfi + alloc r32 = ar.pfs,1,6,4,0 + fma.s1 acos_tx = f8,f8,f0 + addl ASIN_Addr2 = @ltoff(acos_coeff_2_table),gp +} +{ .mfi + mov ASIN_FFFE = 0xFFFE + fnma.s1 acos_t = f8,f8,f1 + addl ASIN_Addr1 = @ltoff(acos_coeff_1_table),gp +} +;; + + +{ .mfi + setf.exp acos_1by2 = ASIN_FFFE + fmerge.s acos_abs_x = f1,f8 + nop.i 999 ;; +} + + +{ .mmf + ld8 ASIN_Addr1 = [ASIN_Addr1] + ld8 ASIN_Addr2 = [ASIN_Addr2] + fmerge.s acos_sgn_x = f8,f1 +} +;; + + +{ .mfi + nop.m 999 + fcmp.lt.s1 p11,p12 = f8, f0 + nop.i 999 ;; +} + + +{ .mfi + ldfe acos_coeff_P7 = [ASIN_Addr1],16 + fma.s1 acos_tx2 = acos_tx,acos_tx,f0 + nop.i 999 +} +{ .mfi + ldfe acos_coeff_P6 = [ASIN_Addr2],16 + fma.s1 acos_t2 = acos_t,acos_t,f0 + nop.i 999;; +} + + +{ .mmf + ldfe acos_coeff_P18 = [ASIN_Addr1],16 + ldfe acos_coeff_P17 = [ASIN_Addr2],16 + fclass.m.unc p8,p0 = f8, 0xc3 //@qnan |@snan +} +;; + + +{ .mmf + ldfe acos_coeff_P5 = [ASIN_Addr1],16 + ldfe acos_coeff_P4 = [ASIN_Addr2],16 + frsqrta.s1 acos_y0,p0 = acos_t +} +;; + + +{ .mfi + ldfe acos_coeff_P16 = [ASIN_Addr1],16 + fcmp.gt.s1 p9,p0 = acos_abs_x,f1 + nop.i 999 +} +{ .mfb + ldfe acos_coeff_P15 = [ASIN_Addr2],16 +(p8) fma.d f8 = f8,f1,f0 +(p8) br.ret.spnt b0 +} +;; + + +{ .mmf + ldfe acos_coeff_P20 = [ASIN_Addr1],16 + ldfe acos_coeff_P19 = [ASIN_Addr2],16 + fclass.m.unc p10,p0 = f8, 0x07 //@zero +} +;; + + +{ .mfi + ldfe acos_coeff_P9 = [ASIN_Addr1],16 + fma.s1 acos_t4 = acos_t2,acos_t2,f0 +(p9) mov GR_Parameter_Tag = 58 +} +{ .mfi + ldfe acos_coeff_P8 = [ASIN_Addr2],16 + fma.s1 acos_3by2 = acos_1by2,f1,f1 + nop.i 999;; +} + + +{ .mfi + ldfe acos_coeff_P2 = [ASIN_Addr2],16 + fma.s1 acos_tx4 = acos_tx2,acos_tx2,f0 + nop.i 999 +} +{ .mfb + ldfe acos_coeff_P3 = [ASIN_Addr1],16 + fma.s1 acos_t3 = acos_t,acos_t2,f0 +(p9) br.cond.spnt __libm_error_region +} +;; + + +{ .mfi + ldfe acos_coeff_P13 = [ASIN_Addr2],16 + fma.s1 acos_H0 = acos_y0,acos_1by2,f0 + nop.i 999 +} +{ .mfi + ldfe acos_coeff_P14 = [ASIN_Addr1],16 + fma.s1 acos_S0 = acos_y0,acos_t,f0 + nop.i 999;; +} + + +{ .mfi + ldfe acos_coeff_P11 = [ASIN_Addr2],16 + fcmp.eq.s1 p6,p0 = acos_abs_x, f1 + nop.i 999 +} +{ .mfi + ldfe acos_coeff_P12 = [ASIN_Addr1],16 + fma.s1 acos_tx3 = acos_tx,acos_tx2,f0 + nop.i 999 +} +;; + + +{ .mfi + ldfe acos_coeff_P10 = [ASIN_Addr2],16 + fma.s1 acos_1poly_p6 = acos_tx,acos_coeff_P7,acos_coeff_P6 + nop.i 999 +} +{ .mfi + ldfe acos_coeff_P1 = [ASIN_Addr1],16 + fma.s1 acos_poly_p6 = acos_t,acos_coeff_P7,acos_coeff_P6 + nop.i 999;; +} + + +{ .mfi + ldfe acos_const_sqrt2by2 = [ASIN_Addr2],16 + fma.s1 acos_5by2 = acos_3by2,f1,f1 + nop.i 999 +} +{ .mfi + ldfe acos_coeff_P21 = [ASIN_Addr1],16 + fma.s1 acos_11by4 = acos_3by2,acos_3by2,acos_1by2 + nop.i 999;; +} + + +{ .mfi + ldfe acos_const_piby2 = [ASIN_Addr1],16 + fma.s1 acos_poly_p17 = acos_t,acos_coeff_P18,acos_coeff_P17 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 acos_3by4 = acos_3by2,acos_1by2,f0 +(p10) br.cond.spnt L(ACOS_ZERO) // Branch to short path if x=0 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p15 = acos_t,acos_coeff_P16,acos_coeff_P15 + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 acos_d = acos_S0,acos_H0,acos_1by2 +(p6) br.cond.spnt L(ACOS_ABS_ONE) // Branch to short path if |x|=1 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p19 = acos_t,acos_coeff_P20,acos_coeff_P19 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p4 = acos_t,acos_coeff_P5,acos_coeff_P4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p17 = acos_tx,acos_coeff_P18,acos_coeff_P17 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p8 = acos_t,acos_coeff_P9,acos_coeff_P8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fms.s1 acos_35by8 = acos_5by2,acos_11by4,acos_5by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_63by8 = acos_5by2,acos_11by4,f1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p13 = acos_t,acos_coeff_P14,acos_coeff_P13 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_18by4 = acos_3by2,acos_5by2,acos_3by4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_l1 = acos_5by2,acos_d,acos_3by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_d2 = acos_d,acos_d,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p15 = acos_t2,acos_poly_p17,acos_poly_p15 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_T0 = acos_d,acos_S0,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p19 = acos_t2,acos_coeff_P21,acos_poly_p19 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p4 = acos_t2,acos_poly_p6,acos_poly_p4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_d1 = acos_35by8,acos_d,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_231by16 = acos_3by2,acos_35by8,acos_63by8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p2 = acos_t,acos_coeff_P3,acos_coeff_P2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p8 = acos_t2,acos_coeff_P10,acos_poly_p8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p11 = acos_t,acos_coeff_P12,acos_coeff_P11 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_e0 = acos_d2,acos_l1,acos_d + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p15 = acos_tx,acos_coeff_P16,acos_coeff_P15 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p0 = acos_t,acos_coeff_P1,f1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p19 = acos_tx,acos_coeff_P20,acos_coeff_P19 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p4 = acos_tx,acos_coeff_P5,acos_coeff_P4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p8 = acos_tx,acos_coeff_P9,acos_coeff_P8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_l2 = acos_231by16,acos_d,acos_63by8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_d3 = acos_d2,acos_d,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_T3 = acos_d2,acos_T0,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_429by16 = acos_18by4,acos_11by4,acos_231by16 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_S1 = acos_e0,acos_S0,acos_S0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p4 = acos_t4,acos_poly_p8,acos_poly_p4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p15 = acos_t4,acos_poly_p19,acos_poly_p15 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p0 = acos_t2,acos_poly_p2,acos_poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p11 = acos_t2,acos_poly_p13,acos_poly_p11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_t8 = acos_t4,acos_t4,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_e1 = acos_d2,acos_l2,acos_d1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p4 = acos_tx2,acos_1poly_p6,acos_1poly_p4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p15 = acos_tx2,acos_1poly_p17,acos_1poly_p15 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p8 = acos_tx2,acos_coeff_P10,acos_1poly_p8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p19 = acos_tx2,acos_coeff_P21,acos_1poly_p19 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p2 = acos_tx,acos_coeff_P3,acos_coeff_P2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p13 = acos_tx,acos_coeff_P14,acos_coeff_P13 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p0 = acos_tx,acos_coeff_P1,f1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p11 = acos_tx,acos_coeff_P12,acos_coeff_P11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_l3 = acos_429by16,acos_d,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_z = acos_e1,acos_T3,acos_S1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_poly_p11 = acos_t4,acos_poly_p15,acos_poly_p11 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_T6 = acos_T3,acos_d3,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_t11 = acos_t8,acos_t3,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_poly_p0 = acos_t4,acos_poly_p4,acos_poly_p0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p4 = acos_tx4,acos_1poly_p8,acos_1poly_p4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p15 = acos_tx4,acos_1poly_p19,acos_1poly_p15 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p0 = acos_tx2,acos_1poly_p2,acos_1poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p11 = acos_tx2,acos_1poly_p13,acos_1poly_p11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +// fcmp.le.s1 acos_pred_LEsqrt2by2,acos_pred_GTsqrt2by2 = acos_abs_x,acos_const_sqrt2by2 + fcmp.le.s1 p7,p8 = acos_abs_x,acos_const_sqrt2by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_tx8 = acos_tx4,acos_tx4,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_z = acos_l3,acos_T6,acos_z + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 acos_series_t = acos_t11,acos_poly_p11,acos_poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fma.s1 acos_const_add = acos_const_piby2, f1, acos_const_piby2 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p12) fma.s1 acos_const_add = f1,f0,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p0 = acos_tx4,acos_1poly_p4,acos_1poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acos_1poly_p11 = acos_tx4,acos_1poly_p15,acos_1poly_p11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acos_tx11 = acos_tx8,acos_tx3,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 +//(acos_pred_GTsqrt2by2) fnma.s1 answer2 = acos_z,acos_series_t,acos_const_piby2 +(p8) fnma.s1 answer2 = acos_z,acos_series_t,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 acos_series_tx = acos_tx11,acos_1poly_p11,acos_1poly_p0 + nop.i 999;; +} + +{ .mfi + nop.m 999 +//(acos_pred_GTsqrt2by2) fnma.d f8 = acos_sgn_x,answer2,acos_const_piby2 +(p8) fnma.d f8 = acos_sgn_x,answer2,acos_const_add + nop.i 999;; +} + +{ .mfb + nop.m 999 +//(acos_pred_LEsqrt2by2) fnma.d f8 = f8,acos_series_tx,acos_const_piby2 +(p7) fnma.d f8 = f8,acos_series_tx,acos_const_piby2 + br.ret.sptk b0 ;; +} + + +L(ACOS_ZERO): +// Here if x=0 +{ .mfb + nop.m 999 + fma.d f8 = acos_const_piby2,f1,f0 + br.ret.sptk b0 ;; +} + + +L(ACOS_ABS_ONE): +.pred.rel "mutex",p11,p12 +// Here if |x|=1 +{ .mfi + nop.m 999 +(p11) fma.d f8 = acos_const_piby2,f1,acos_const_piby2 // acos(-1)=pi + nop.i 999 +} +{ .mfb + nop.m 999 +(p12) fma.d f8 = f1,f0,f0 // acos(1)=0 + br.ret.sptk b0 ;; +} + + +.endp acos +ASM_SIZE_DIRECTIVE(acos) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body + frcpa.s0 f9,p0 = f0,f0 +;; + +{ .mib + stfd [GR_Parameter_X] = f8 // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfd [GR_Parameter_Y] = f9,-16 // Store Parameter 3 on stack + adds r32 = 48,sp + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + ldfd f8 = [r32] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return + +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support,@function +.global __libm_error_support diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_acosf.S glibc-2.2.3/sysdeps/ia64/fpu/e_acosf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_acosf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_acosf.S Mon Feb 19 00:41:15 2001 @@ -0,0 +1,693 @@ +.file "acosf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + +// History +//============================================================== +// 2/02/00 Initial revision +// 6/28/00 Improved speed +// 6/31/00 Changed register allocation because of some duplicate macros +// moved nan exit bundle up to gain a cycle. +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 8/17/00 Changed predicate register macro-usage to direct predicate +// names due to an assembler bug. +// 10/17/00 Improved speed of x=0 and x=1 paths, set D flag if x denormal. + + +// Description +//========================================= +// The acosf function computes the principle value of the arc sine of x. +// A doman error occurs for arguments not in the range [-1,+1]. + +// The acosf function returns the arc cosine in the range [0, +pi] radians. +// acos(1) returns +0 +// acos(x) returns a Nan and raises the invalid exception for |x| >1 + +// |x| <= sqrt(2)/2. get Ax and Bx + +// poly_p1 = x p1 +// poly_p3 = x2 p4 + p3 +// poly_p1 = x2 (poly_p1) + x = x2(x p1) + x +// poly_p2 = x2( poly_p3) + p2 = x2(x2 p4 + p3) + p2 + +// poly_Ax = x5(x2( poly_p3) + p2) + x2(x p1) + x +// = x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x + +// poly_p7 = x2 p8 + p7 +// poly_p5 = x2 p6 + p5 + +// poly_p7 = x4 p9 + (x2 p8 + p7) +// poly_Bx = x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5 + +// sinf1 = x11(x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5) + x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x +// = x19 p9 + x17 p8 + x15 p7 x13 p6 + x11 p5 + x9 p4 + x7 p3 + x5 p2 + x3 p1 + x +// answer1 = pi/2 - sinf1 + + + +// |x| > sqrt(2)/2 + +// Get z = sqrt(1-x2) + +// Get polynomial in t = 1-x2 + +// t2 = t t +// t4 = t2 t2 + +// poly_p4 = t p5 + p4 +// poly_p1 = t p1 + 1 + +// poly_p6 = t p7 + p6 +// poly_p2 = t p3 + p2 + +// poly_p8 = t p9 + p8 + +// poly_p4 = t2 poly_p6 + poly_p4 +// = t2 (t p7 + p6) + (t p5 + p4) + +// poly_p2 = t2 poly_p2 + poly_p1 +// = t2 (t p3 + p2) + (t p1 + 1) + +// poly_p4 = t4 poly_p8 + poly_p4 +// = t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4)) + +// P(t) = poly_p2 + t4 poly_p8 +// = t2 (t p3 + p2) + (t p1 + 1) + t4 (t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4))) +// = t3 p3 + t2 p2 + t p1 + 1 + t9 p9 + t8 p8 + t7 p7 + t6 p6 + t5 p5 + t4 p4 + + +// answer2 = sign(x) z P(t) if x>0 +// = sign(x) z P(t) + pi if x<0 + +#include "libm_support.h" + +// +// Assembly macros +//========================================= + +// predicate registers +//acosf_pred_LEsqrt2by2 = p7 +//acosf_pred_GTsqrt2by2 = p8 + +// integer registers +ACOSF_Addr1 = r33 +ACOSF_Addr2 = r34 +ACOSF_GR_1by2 = r35 + +ACOSF_GR_3by2 = r36 +ACOSF_GR_5by2 = r37 + +GR_SAVE_B0 = r38 +GR_SAVE_PFS = r39 +GR_SAVE_GP = r40 + +GR_Parameter_X = r41 +GR_Parameter_Y = r42 +GR_Parameter_RESULT = r43 +GR_Parameter_TAG = r44 + +// floating point registers + +acosf_y = f32 +acosf_abs_x = f33 +acosf_x2 = f34 +acosf_sgn_x = f35 + +acosf_1by2 = f36 +acosf_3by2 = f37 +acosf_5by2 = f38 +acosf_coeff_P3 = f39 +acosf_coeff_P8 = f40 + +acosf_coeff_P1 = f41 +acosf_coeff_P4 = f42 +acosf_coeff_P5 = f43 +acosf_coeff_P2 = f44 +acosf_coeff_P7 = f45 + +acosf_coeff_P6 = f46 +acosf_coeff_P9 = f47 +acosf_x2 = f48 +acosf_x3 = f49 +acosf_x4 = f50 + +acosf_x8 = f51 +acosf_x5 = f52 +acosf_const_piby2 = f53 +acosf_const_sqrt2by2 = f54 +acosf_x11 = f55 + +acosf_poly_p1 = f56 +acosf_poly_p3 = f57 +acosf_sinf1 = f58 +acosf_poly_p2 = f59 +acosf_poly_Ax = f60 + +acosf_poly_p7 = f61 +acosf_poly_p5 = f62 +acosf_sgnx_t4 = f63 +acosf_poly_Bx = f64 +acosf_t = f65 + +acosf_yby2 = f66 +acosf_B = f67 +acosf_B2 = f68 +acosf_Az = f69 +acosf_dz = f70 + +acosf_Sz = f71 +acosf_d2z = f72 +acosf_Fz = f73 +acosf_z = f74 +acosf_sgnx_z = f75 + +acosf_t2 = f76 +acosf_2poly_p4 = f77 +acosf_2poly_p6 = f78 +acosf_2poly_p1 = f79 +acosf_2poly_p2 = f80 + +acosf_2poly_p8 = f81 +acosf_t4 = f82 +acosf_Pt = f83 +acosf_sgnx_2poly_p2 = f84 +acosf_sgn_x_piby2 = f85 + +acosf_poly_p7a = f86 +acosf_2poly_p4a = f87 +acosf_2poly_p4b = f88 +acosf_2poly_p2a = f89 +acosf_poly_p1a = f90 + + + + + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +acosf_coeff_1_table: +ASM_TYPE_DIRECTIVE(acosf_coeff_1_table,@object) +data8 0x3FC5555607DCF816 // P1 +data8 0x3F9CF81AD9BAB2C6 // P4 +data8 0x3FC59E0975074DF3 // P7 +data8 0xBFA6F4CC2780AA1D // P6 +data8 0x3FC2DD45292E93CB // P9 +data8 0x3fe6a09e667f3bcd // sqrt(2)/2 +ASM_SIZE_DIRECTIVE(acosf_coeff_1_table) + +acosf_coeff_2_table: +ASM_TYPE_DIRECTIVE(acosf_coeff_2_table,@object) +data8 0x3FA6F108E31EFBA6 // P3 +data8 0xBFCA31BF175D82A0 // P8 +data8 0x3FA30C0337F6418B // P5 +data8 0x3FB332C9266CB1F9 // P2 +data8 0x3ff921fb54442d18 // pi_by_2 +ASM_SIZE_DIRECTIVE(acosf_coeff_2_table) + +.align 32 +.global acosf +ASM_TYPE_DIRECTIVE(acosf,@function) + +.section .text +.proc acosf +.align 32 + +acosf: + +// Load the addresses of the two tables. +// Then, load the coefficients and other constants. + +{ .mfi + alloc r32 = ar.pfs,1,8,4,0 + fnma.s1 acosf_t = f8,f8,f1 + dep.z ACOSF_GR_1by2 = 0x3f,24,8 // 0x3f000000 +} +{ .mfi + addl ACOSF_Addr1 = @ltoff(acosf_coeff_1_table),gp + fma.s1 acosf_x2 = f8,f8,f0 + addl ACOSF_Addr2 = @ltoff(acosf_coeff_2_table),gp ;; +} + + +{ .mfi + ld8 ACOSF_Addr1 = [ACOSF_Addr1] + fmerge.s acosf_abs_x = f1,f8 + dep ACOSF_GR_3by2 = -1,r0,22,8 // 0x3fc00000 +} +{ .mlx + nop.m 999 + movl ACOSF_GR_5by2 = 0x40200000;; +} + + + +{ .mfi + setf.s acosf_1by2 = ACOSF_GR_1by2 + fmerge.s acosf_sgn_x = f8,f1 + nop.i 999 +} +{ .mfi + ld8 ACOSF_Addr2 = [ACOSF_Addr2] + nop.f 0 + nop.i 999;; +} + + +{ .mfi + setf.s acosf_5by2 = ACOSF_GR_5by2 + fcmp.lt.s1 p11,p12 = f8,f0 + nop.i 999;; +} + +{ .mmf + ldfpd acosf_coeff_P1,acosf_coeff_P4 = [ACOSF_Addr1],16 + setf.s acosf_3by2 = ACOSF_GR_3by2 + fclass.m.unc p8,p0 = f8, 0xc3 ;; //@qnan | @snan +} + + +{ .mfi + ldfpd acosf_coeff_P7,acosf_coeff_P6 = [ACOSF_Addr1],16 + fma.s1 acosf_t2 = acosf_t,acosf_t,f0 + nop.i 999 +} +{ .mfi + ldfpd acosf_coeff_P3,acosf_coeff_P8 = [ACOSF_Addr2],16 + fma.s1 acosf_x4 = acosf_x2,acosf_x2,f0 + nop.i 999;; +} + + +{ .mfi + ldfpd acosf_coeff_P9,acosf_const_sqrt2by2 = [ACOSF_Addr1] + fclass.m.unc p10,p0 = f8, 0x07 //@zero + nop.i 999 +} +{ .mfi + ldfpd acosf_coeff_P5,acosf_coeff_P2 = [ACOSF_Addr2],16 + fma.s1 acosf_x3 = f8,acosf_x2,f0 + nop.i 999;; +} + + +{ .mfi + ldfd acosf_const_piby2 = [ACOSF_Addr2] + frsqrta.s1 acosf_B,p0 = acosf_t + nop.i 999 +} +{ .mfb + nop.m 999 +(p8) fma.s f8 = f8,f1,f0 +(p8) br.ret.spnt b0 ;; // Exit if x=nan +} + + +{ .mfb + nop.m 999 + fcmp.eq.s1 p6,p0 = acosf_abs_x,f1 +(p10) br.cond.spnt L(ACOSF_ZERO) ;; // Branch if x=0 +} + +{ .mfi + nop.m 999 + fcmp.gt.s1 p9,p0 = acosf_abs_x,f1 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 acosf_x8 = acosf_x4,acosf_x4,f0 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 acosf_t4 = acosf_t2,acosf_t2,f0 +(p6) br.cond.spnt L(ACOSF_ABS_ONE) ;; // Branch if |x|=1 +} + +{ .mfi + nop.m 999 + fma.s1 acosf_x5 = acosf_x2,acosf_x3,f0 + nop.i 999 +} +{ .mfb +(p9) mov GR_Parameter_TAG = 59 + fma.s1 acosf_yby2 = acosf_t,acosf_1by2,f0 +(p9) br.cond.spnt __libm_error_region ;; // Branch if |x|>1 +} + + +{ .mfi + nop.m 999 + fma.s1 acosf_Az = acosf_t,acosf_B,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_B2 = acosf_B,acosf_B,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p1 = f8,acosf_coeff_P1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_2poly_p1 = acosf_coeff_P1,acosf_t,f1 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p3 = acosf_coeff_P4,acosf_x2,acosf_coeff_P3 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_2poly_p6 = acosf_coeff_P7,acosf_t,acosf_coeff_P6 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p7 = acosf_x2,acosf_coeff_P8,acosf_coeff_P7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_2poly_p2 = acosf_coeff_P3,acosf_t,acosf_coeff_P2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p5 = acosf_x2,acosf_coeff_P6,acosf_coeff_P5 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_2poly_p4 = acosf_coeff_P5,acosf_t,acosf_coeff_P4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acosf_x11 = acosf_x8,acosf_x3,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fnma.s1 acosf_dz = acosf_B2,acosf_yby2,acosf_1by2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p1a = acosf_x2,acosf_poly_p1,f8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_2poly_p8 = acosf_coeff_P9,acosf_t,acosf_coeff_P8 + nop.i 999;; +} + + +// Get the absolute value of x and determine the region in which x lies + +{ .mfi + nop.m 999 + fcmp.le.s1 p7,p8 = acosf_abs_x,acosf_const_sqrt2by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p2 = acosf_x2,acosf_poly_p3,acosf_coeff_P2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 acosf_poly_p7a = acosf_x4,acosf_coeff_P9,acosf_poly_p7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 acosf_2poly_p2a = acosf_2poly_p2,acosf_t2,acosf_2poly_p1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_sgnx_t4 = acosf_sgn_x,acosf_t4,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_2poly_p4a = acosf_2poly_p6,acosf_t2,acosf_2poly_p4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_Sz = acosf_5by2,acosf_dz,acosf_3by2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_d2z = acosf_dz,acosf_dz,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fnma.d.s1 acosf_sgn_x_piby2 = acosf_sgn_x,acosf_const_piby2,acosf_const_piby2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 acosf_poly_Ax = acosf_x5,acosf_poly_p2,acosf_poly_p1a + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 acosf_poly_Bx = acosf_x4,acosf_poly_p7a,acosf_poly_p5 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_sgnx_2poly_p2 = acosf_sgn_x,acosf_2poly_p2a,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p6,p0 = f8,f0 // Only purpose is to set D if x denormal + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_2poly_p4b = acosf_2poly_p8,acosf_t4,acosf_2poly_p4a + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 acosf_Fz = acosf_d2z,acosf_Sz,acosf_dz + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.d.s1 acosf_Pt = acosf_2poly_p4b,acosf_sgnx_t4,acosf_sgnx_2poly_p2 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p8) fma.d.s1 acosf_z = acosf_Az,acosf_Fz,acosf_Az + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.d.s1 acosf_sinf1 = acosf_x11,acosf_poly_Bx,acosf_poly_Ax + nop.i 999;; +} + +.pred.rel "mutex",p8,p7 //acosf_pred_GTsqrt2by2,acosf_pred_LEsqrt2by2 +{ .mfi + nop.m 999 +(p8) fma.s f8 = acosf_z,acosf_Pt,acosf_sgn_x_piby2 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p7) fms.s f8 = acosf_const_piby2,f1,acosf_sinf1 + br.ret.sptk b0 ;; +} + +L(ACOSF_ZERO): +// Here if x=0 +{ .mfb + nop.m 999 + fma.s f8 = acosf_const_piby2,f1,f0 // acosf(0)=pi/2 + br.ret.sptk b0 ;; +} + + +L(ACOSF_ABS_ONE): +.pred.rel "mutex",p11,p12 +// Here if |x|=1 +{ .mfi + nop.m 999 +(p11) fma.s f8 = acosf_const_piby2,f1,acosf_const_piby2 // acosf(-1)=pi + nop.i 999 +} +{ .mfb + nop.m 999 +(p12) fma.s f8 = f1,f0,f0 // acosf(1)=0 + br.ret.sptk b0 ;; +} + +.endp acosf +ASM_SIZE_DIRECTIVE(acosf) + + +// Stack operations when calling error support. +// (1) (2) +// sp -> + psp -> + +// | | +// | | <- GR_Y +// | | +// | <-GR_Y Y2->| +// | | +// | | <- GR_X +// | | +// sp-64 -> + sp -> + +// save ar.pfs save b0 +// save gp + + +// Stack operations when calling error support. +// (3) (call) (4) +// psp -> + sp -> + +// | | +// R3 ->| <- GR_RESULT | -> f8 +// | | +// Y2 ->| <- GR_Y | +// | | +// X1 ->| | +// | | +// sp -> + + +// restore gp +// restore ar.pfs + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +{ .mfi + nop.m 0 + frcpa.s0 f9,p0 = f0,f0 + nop.i 0 +};; + +{ .mib + stfs [GR_Parameter_X] = f8 // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = f9 // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_acosl.S glibc-2.2.3/sysdeps/ia64/fpu/e_acosl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_acosl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_acosl.S Mon Feb 19 00:41:25 2001 @@ -0,0 +1,1094 @@ +.file "acosl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/07/00 Modified calculation of acos_corr to correct acosl +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 12/20/00 Set denormal flag properly. +// +// API +//============================================================== +// double-extended = acosl (double-extended) +// input floating point f8 +// output floating point f8 +// +// Registers used +//============================================================== +// +// predicate registers used: +// p6 -> p12 +// +// floating-point registers used: +// f8 has input, then output +// f8 -> f15, f32 ->f99 +// +// general registers used: +// r32 -> r48 +// +// Overview of operation +//============================================================== +// There are three paths +// 1. |x| < 2^-25 ACOS_TINY +// 2. 2^-25 <= |x| < 1/4 ACOS_POLY +// 3. 1/4 <= |x| < 1 ACOS_ATAN + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +// f8 is input, but acos_V must be put in f8 +// when __libm_atan2_reg is called, f8 must get V +// f9 gets U when __libm_atan2_reg is called + + +// __libm_atan2_reg returns +// f8 = Z_hi +// f10 = Z_lo +// f11 = s_lo + +acos_Z_hi = f8 +acos_Z_lo = f10 +acos_S_lo = f11 + +// When we call __libm_atan2_reg, we must save +// the following: + +acos_corr = f12 +acos_X = f13 +acos_pi_hi = f14 +acos_pi_lo = f15 + +// The rest of the assembly macros + +acos_P79 = f32 +acos_P59 = f33 +acos_P39 = f34 +acos_P19 = f35 + +acos_P810 = f36 +acos_P610 = f37 +acos_P410 = f38 +acos_P210 = f39 + +acos_A1 = f41 +acos_A2 = f42 +acos_A3 = f43 +acos_A4 = f44 +acos_A5 = f45 +acos_A6 = f46 +acos_A7 = f47 +acos_A8 = f48 +acos_A9 = f49 +acos_A10 = f50 + +acos_X2 = f51 +acos_X4 = f52 + +acos_B = f53 +acos_Bb = f54 +acos_A = f55 +acos_Aa = f56 + +acos_1mA = f57 + +acos_W = f58 +acos_Ww = f59 + +acos_y0 = f60 +acos_y1 = f61 +acos_y2 = f62 + +acos_H = f63 +acos_Hh = f64 + +acos_t1 = f65 +acos_t2 = f66 +acos_t3 = f67 +acos_t4 = f68 +acos_t5 = f69 + +acos_Pseries = f70 +acos_NORM_f8 = f71 +acos_ABS_NORM_f8 = f72 + +acos_2 = f73 +acos_P1P2 = f74 +acos_HALF = f75 +acos_U = f76 + +acos_1mB = f77 +acos_V = f78 +acos_S = f79 + +acos_BmUU = f80 +acos_BmUUpb = f81 +acos_2U = f82 +acos_1d2U = f83 + +acos_Dd = f84 + +acos_pi_by_2_hi = f85 +acos_pi_by_2_lo = f86 +acos_xmpi_by_2_lo = f87 +acos_xPmw = f88 + +acos_Uu = f89 +acos_AmVV = f90 +acos_AmVVpa = f91 + +acos_2V = f92 +acos_1d2V = f93 +acos_Vv = f94 + +acos_Vu = f95 +acos_Uv = f96 + +acos_2_Z_hi = f97 +acos_s_lo_Z_lo = f98 +acos_result_lo = f99 + +acos_Z_hi = f8 +acos_Z_lo = f10 +acos_s_lo = f11 + +acos_GR_17_ones = r33 +acos_GR_16_ones = r34 +acos_GR_signexp_f8 = r35 +acos_GR_exp = r36 +acos_GR_true_exp = r37 +acos_GR_fffe = r38 + +GR_SAVE_PFS = r43 +GR_SAVE_B0 = r39 +GR_SAVE_GP = r41 + +// r40 is address of table of coefficients +// r42 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 +GR_Parameter_TAG = r47 + + +// 2^-40: +// A true exponent of -40 is +// : -40 + register_bias +// : -28 + ffff = ffd7 + +// A true exponent of 1 is +// : 1 + register_bias +// : 1 + ffff = 10000 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +acos_coefficients: +ASM_TYPE_DIRECTIVE(acos_coefficients,@object) +data8 0xc90fdaa22168c234, 0x00003FFF // pi_by_2_hi +data8 0xc4c6628b80dc1cd1, 0x00003FBF // pi_by_2_lo +data8 0xc90fdaa22168c234, 0x00004000 // pi_hi +data8 0xc4c6628b80dc1cd1, 0x00003FC0 // pi_lo + +data8 0xBB08911F2013961E, 0x00003FF8 // A10 +data8 0x981F1095A23A87D3, 0x00003FF8 // A9 +data8 0xBDF09C6C4177BCC6, 0x00003FF8 // A8 +data8 0xE4C3A60B049ACCEA, 0x00003FF8 // A7 +data8 0x8E2789F4E8A8F1AD, 0x00003FF9 // A6 +data8 0xB745D09B2B0E850B, 0x00003FF9 // A5 +data8 0xF8E38E3BC4C50920, 0x00003FF9 // A4 +data8 0xB6DB6DB6D89FCD81, 0x00003FFA // A3 +data8 0x99999999999AF376, 0x00003FFB // A2 +data8 0xAAAAAAAAAAAAAA71, 0x00003FFC // A1 +ASM_SIZE_DIRECTIVE(acos_coefficients) + + +.align 32 +.global acosl# +ASM_TYPE_DIRECTIVE(acosl#,@function) + +.section .text +.proc acosl# +.align 32 + + +acosl: + +// After normalizing f8, get its true exponent +{ .mfi + alloc r32 = ar.pfs,1,11,4,0 +(p0) fnorm.s1 acos_NORM_f8 = f8 +(p0) mov acos_GR_17_ones = 0x1ffff +} + +{ .mmi +(p0) mov acos_GR_16_ones = 0xffff +(p0) addl r40 = @ltoff(acos_coefficients), gp + nop.i 999 +} +;; + +// Set denormal flag on denormal input with fcmp +{ .mfi + ld8 r40 = [r40] + fcmp.eq p6,p0 = f8,f0 + nop.i 999 +} +;; + + +// Load the constants pi_by_2 and pi. +// Each is stored as hi and lo values +// Also load the coefficients for ACOS_POLY + +{ .mmi +(p0) ldfe acos_pi_by_2_hi = [r40],16 ;; +(p0) ldfe acos_pi_by_2_lo = [r40],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe acos_pi_hi = [r40],16 ;; +(p0) ldfe acos_pi_lo = [r40],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe acos_A10 = [r40],16 ;; +(p0) ldfe acos_A9 = [r40],16 + nop.i 999 ;; +} + +// Take the absolute value of f8 +{ .mmf + nop.m 999 +(p0) getf.exp acos_GR_signexp_f8 = acos_NORM_f8 +(p0) fmerge.s acos_ABS_NORM_f8 = f0, acos_NORM_f8 +} + +{ .mii +(p0) ldfe acos_A8 = [r40],16 + nop.i 999 ;; +(p0) and acos_GR_exp = acos_GR_signexp_f8, acos_GR_17_ones ;; +} + +// case 1: |x| < 2^-25 ==> p6 ACOS_TINY +// case 2: 2^-25 <= |x| < 2^-2 ==> p8 ACOS_POLY +// case 3: 2^-2 <= |x| < 1 ==> p9 ACOS_ATAN +// case 4: 1 <= |x| ==> p11 ACOS_ERROR_RETURN +// Admittedly |x| = 1 is not an error but this is where that case is +// handled. + +{ .mii +(p0) ldfe acos_A7 = [r40],16 +(p0) sub acos_GR_true_exp = acos_GR_exp, acos_GR_16_ones ;; +(p0) cmp.ge.unc p6, p7 = -26, acos_GR_true_exp ;; +} + +{ .mii +(p0) ldfe acos_A6 = [r40],16 +(p7) cmp.ge.unc p8, p9 = -3, acos_GR_true_exp ;; +(p9) cmp.ge.unc p10, p11 = -1, acos_GR_true_exp +} + +{ .mmi +(p0) ldfe acos_A5 = [r40],16 ;; +(p0) ldfe acos_A4 = [r40],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe acos_A3 = [r40],16 ;; +(p0) ldfe acos_A2 = [r40],16 + nop.i 999 ;; +} + +// ACOS_ERROR_RETURN ==> p11 is true +// case 4: |x| >= 1 +{ .mib +(p0) ldfe acos_A1 = [r40],16 + nop.i 999 +(p11) br.spnt L(ACOS_ERROR_RETURN) ;; +} + +// ACOS_TINY ==> p6 is true +// case 1: |x| < 2^-25 +{ .mfi + nop.m 999 +(p6) fms.s1 acos_xmpi_by_2_lo = acos_NORM_f8,f1, acos_pi_by_2_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fms.s0 f8 = acos_pi_by_2_hi,f1, acos_xmpi_by_2_lo +(p6) br.ret.spnt b0 ;; +} + + + +// ACOS_POLY ==> p8 is true +// case 2: 2^-25 <= |x| < 2^-2 +{ .mfi + nop.m 999 +(p8) fms.s1 acos_W = acos_pi_by_2_hi, f1, acos_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_X2 = f8,f8, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fms.s1 acos_Ww = acos_pi_by_2_hi, f1, acos_W + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_X4 = acos_X2,acos_X2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fms.s1 acos_Ww = acos_Ww, f1, acos_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P810 = acos_X4, acos_A10, acos_A8 + nop.i 999 +} + +// acos_P79 = X4*A9 + A7 +// acos_P810 = X4*A10 + A8 +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P79 = acos_X4, acos_A9, acos_A7 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_Ww = acos_Ww, f1, acos_pi_by_2_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P610 = acos_X4, acos_P810, acos_A6 + nop.i 999 +} + + +// acos_P59 = X4*(X4*A9 + A7) + A5 +// acos_P610 = X4*(X4*A10 + A8) + A6 +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P59 = acos_X4, acos_P79, acos_A5 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P410 = acos_X4, acos_P610, acos_A4 + nop.i 999 +} + +// acos_P39 = X4*(X4*(X4*A9 + A7) + A5) + A3 +// acos_P410 = X4*(X4*(X4*A10 + A8) + A6) + A4 +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P39 = acos_X4, acos_P59, acos_A3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P210 = acos_X4, acos_P410, acos_A2 + nop.i 999 +} + +// acos_P19 = X4*(X4*(X4*(X4*A9 + A7) + A5) + A3) + A1 = P1 +// acos_P210 = X4*(X4*(X4*(X4*A10 + A8) + A6) + A4) + A2 = P2 +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P19 = acos_X4, acos_P39, acos_A1 + nop.i 999 ;; +} + +// acos_P1P2 = Xsq*P2 + P1 +// acos_P1P2 = Xsq*(Xsq*P2 + P1) +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P1P2 = acos_X2, acos_P210, acos_P19 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 acos_P1P2 = acos_X2, acos_P1P2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fms.s1 acos_xPmw = acos_NORM_f8, acos_P1P2, acos_Ww + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p8) fms.s0 f8 = acos_W, f1, acos_xPmw +(p8) br.ret.spnt b0 ;; +} + + +// ACOS_ATAN +// case 3: 2^-2 <= |x| < 1 +// case 3: 2^-2 <= |x| < 1 ==> p9 ACOS_ATAN + +// Step 1.1: Get A,B and a,b +// A + a = 1- |X| +// B + b = 1+ |X| +// Note also that we will use acos_corr (f13) +// and acos_W + +// Step 2 +// Call __libm_atan2_reg + + +{ .mfi +(p0) mov acos_GR_fffe = 0xfffe +(p0) fma.s1 acos_B = f1,f1, acos_ABS_NORM_f8 +(p0) mov GR_SAVE_B0 = b0 ;; +} + +{ .mmf +(p0) mov GR_SAVE_GP = gp + nop.m 999 +(p0) fms.s1 acos_A = f1,f1, acos_ABS_NORM_f8 +} + +{ .mfi +(p0) setf.exp acos_HALF = acos_GR_fffe + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fms.s1 acos_1mB = f1,f1, acos_B + nop.i 999 ;; +} + +// We want atan2(V,U) +// so put V in f8 and U in f9 +// but save X in acos_X + +{ .mfi + nop.m 999 +(p0) fmerge.se acos_X = f8, f8 + nop.i 999 ;; +} + +// Step 1.2: +///////////////////////// +// Get U = sqrt(B) +///////////////////////// + +{ .mfi + nop.m 999 +(p0) frsqrta.s1 acos_y0,p8 = acos_B + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fms.s1 acos_1mA = f1,f1, acos_A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_Bb = acos_1mB,f1, acos_ABS_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_Hh = acos_HALF, acos_B, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_t1 = acos_y0, acos_y0, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fms.s1 acos_Aa = acos_1mA,f1, acos_ABS_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_t2 = acos_t1, acos_Hh, acos_HALF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_y1 = acos_t2, acos_y0, acos_y0 + nop.i 999 +} + + +// Step 1.2: +///////////////////////// +// Get V = sqrt(A) +///////////////////////// +{ .mfi + nop.m 999 +(p0) frsqrta.s1 acos_y0,p8 = acos_A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_t3 = acos_y1, acos_Hh, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_t1 = acos_y0, acos_y0, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_t4 = acos_t3, acos_y1, acos_HALF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_y2 = acos_t4, acos_y1, acos_y1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_S = acos_B, acos_y2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_H = acos_y2, acos_HALF, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_t5 = acos_Hh, acos_y2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_Hh = acos_HALF, acos_A, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_Dd = acos_S, acos_S, acos_B + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_t2 = acos_t1, acos_Hh, acos_HALF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_U = acos_Dd, acos_H, acos_S + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_y1 = acos_t2, acos_y0, acos_y0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_2U = acos_U, f1, acos_U + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_t3 = acos_y1, acos_Hh, f0 + nop.i 999 +} + + +// Step 1.3: +// sqrt(A + a) = V + v +// sqrt(B + b) = U + u + +///////////////////////// +// Get u +///////////////////////// + +// acos_BmUU = B - UU +// acos_BmUUpb = (B - UU) + b + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_BmUU = acos_U, acos_U, acos_B + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.se f9 = acos_U, acos_U + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_t4 = acos_t3, acos_y1, acos_HALF + nop.i 999 ;; +} + +// acos_1d2U = frcpa(2U) +{ .mfi + nop.m 999 +(p0) frcpa.s1 acos_1d2U,p9 = f1, acos_2U + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_BmUUpb = acos_BmUU, f1, acos_Bb + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_y2 = acos_t4, acos_y1, acos_y1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// acos_Uu = ((B - UU) + b) * frcpa(2U) +(p0) fma.s1 acos_Uu = acos_BmUUpb, acos_1d2U, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_S = acos_A, acos_y2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_H = acos_y2, acos_HALF, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_t5 = acos_Hh, acos_y2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_Dd = acos_S, acos_S, acos_A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_V = acos_Dd, acos_H, acos_S + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_2V = acos_V, f1, acos_V + nop.i 999 +} + +// Step 3 +///////////////////////// +// Calculate the correction, acos_corr +///////////////////////// +// acos_corr = U*v - (V*u) + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_Vu = acos_V,acos_Uu, f0 + nop.i 999 ;; +} + +///////////////////////// +// Get v +///////////////////////// +// acos_AmVV = A - VV +// acos_AmVVpa = (A - VV) + a + +{ .mfi + nop.m 999 +(p0) fnma.s1 acos_AmVV = acos_V, acos_V, acos_A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.se f8 = acos_V, acos_V + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_AmVVpa = acos_AmVV, f1, acos_Aa + nop.i 999 ;; +} + +// acos_1d2V = frcpa(2V) +{ .mfi + nop.m 999 +(p0) frcpa.s1 acos_1d2V,p9 = f1, acos_2V + nop.i 999 ;; +} + +// acos_Vv = ((A - VV) + a) * frcpa(2V) +{ .mfi + nop.m 999 +(p0) fma.s1 acos_Vv = acos_AmVVpa, acos_1d2V, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_Uv = acos_U,acos_Vv, f0 + nop.i 999 ;; +} + + +.endp acosl# +ASM_SIZE_DIRECTIVE(acosl#) + + +.proc __libm_callout +__libm_callout: +.prologue +{ .mfi + nop.m 0 + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mfb + nop.m 999 +(p0) fms.s1 acos_corr = acos_Uv,f1, acos_Vu +(p0) br.call.sptk.many b0=__libm_atan2_reg# ;; +} + + +// p6 ==> X is negative +// p7 ==> x is positive +// We know that |X| >= 1/4 + +{ .mfi +(p0) mov gp = GR_SAVE_GP +(p0) fcmp.lt.unc p6,p7 = acos_X , f0 +(p0) mov b0 = GR_SAVE_B0 ;; +} + +// acos_2_Z_hi = 2 * acos_Z_hi +// acos_s_lo_Z_lo = s_lo * Z_lo + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_2_Z_hi = acos_Z_hi, f1, acos_Z_hi +(p0) mov ar.pfs = GR_SAVE_PFS +} + +{ .mfi + nop.m 999 +(p0) fma.s1 acos_s_lo_Z_lo = acos_s_lo, acos_Z_lo, f0 + nop.i 999 ;; +} + +// 2 is a constant needed later +{ .mfi + nop.m 999 +(p0) fma.s1 acos_2 = f1,f1,f1 + nop.i 999 ;; +} + +// X >= 1/4 +// acos_result_lo = 2(s_lo * Z_lo) - corr +// f8 = (2*Z_hi) + (2(s_lo * Z_lo) - corr) + +{ .mfi + nop.m 999 +(p7) fma.s1 acos_result_lo = acos_s_lo_Z_lo, acos_2, acos_corr + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s0 f8 = acos_2_Z_hi, f1, acos_result_lo + nop.i 999 +} + +// acos_result_lo = (pi_lo - corr) +// acos_result_lo = (pi_lo - corr) + acos_Ww +{ .mfi + nop.m 999 +(p6) fms.s1 acos_result_lo = acos_pi_lo, f1, acos_corr + nop.i 999 ;; +} + +// X <= -1/4 +// acos_W = pi_hi - 2 * Z_hi +{ .mfi + nop.m 999 +(p6) fnma.s1 acos_W = acos_2, acos_Z_hi, acos_pi_hi + nop.i 999 ;; +} + +// acos_Ww = pi_hi - W +// acos_Ww = (pi_hi - W) + (2 * Z_hi) +{ .mfi + nop.m 999 +(p6) fms.s1 acos_Ww = acos_pi_hi, f1, acos_W + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fms.s1 acos_Ww = acos_Ww, f1, acos_2_Z_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fma.s1 acos_result_lo = acos_result_lo, f1, acos_Ww + nop.i 999 ;; +} + +// acos_Z_lo = ((pi_lo - corr) + acos_Ww) - 2 * (s_lo * Z_lo) +{ .mfi + nop.m 999 +(p6) fnma.s1 acos_Z_lo = acos_s_lo_Z_lo, acos_2, acos_result_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fma.s0 f8 = acos_W, f1, acos_Z_lo +(p0) br.ret.sptk b0 ;; +} +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) + +.proc SPECIAL +SPECIAL: +L(ACOS_NAN): +{ .mfb + nop.m 999 +(p0) fma.s0 f8 = f8,f1,f0 +(p0) br.ret.sptk b0 ;; +} + +L(ACOS_ERROR_RETURN): +// Save ar.pfs, b0, and gp; restore on exit + +// qnan snan inf norm unorm 0 -+ +// 1 1 0 0 0 0 11 = 0xc3 + +// Coming in as X = +- 1 +// What should we return? + +// If X is 1, return (sign of X)pi/2 + + +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc p6,p7 = acos_ABS_NORM_f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fcmp.lt.unc p8,p9 = f8,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s0 f8 = acos_pi_hi, f1, acos_pi_lo + nop.i 999 +} + +{ .mfb + nop.m 999 +(p9) fmerge.s f8 = f8,f0 +(p6) br.ret.spnt b0 ;; +} + +// If X is a NAN, leave +{ .mfi + nop.m 999 +(p0) fclass.m.unc p12,p0 = f8, 0xc3 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p12) fma.s0 f8 = f8,f1,f0 +(p12) br.ret.spnt b0 ;; +} + +{ .mfi +(p0) mov GR_Parameter_TAG = 57 +(p0) frcpa f10, p6 = f0, f0 +nop.i 999 +};; + +.endp SPECIAL +ASM_SIZE_DIRECTIVE(SPECIAL) + +.proc __libm_error_region +__libm_error_region: +.prologue +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfe [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfe [GR_Parameter_X] = f8 // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = f10 // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; + +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# + +.type __libm_atan2_reg#,@function +.global __libm_atan2_reg# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_asin.S glibc-2.2.3/sysdeps/ia64/fpu/e_asin.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_asin.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_asin.S Mon Feb 19 00:41:35 2001 @@ -0,0 +1,884 @@ +.file "asin.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + +// History +//============================================================== +// 2/02/00 Initial version +// 8/17/00 New and much faster algorithm. +// 8/31/00 Avoided bank conflicts on loads, shortened |x|=1 path, +// fixed mfb split issue stalls. +// 12/19/00 Fixed small arg cases to force inexact, or inexact and underflow. + +// Description +//========================================= +// The asin function computes the principle value of the arc sine of x. +// asin(0) returns 0, asin(1) returns pi/2, asin(-1) returns -pi/2. +// A doman error occurs for arguments not in the range [-1,+1]. + +// The asin function returns the arc sine in the range [-pi/2, +pi/2] radians. + +#include "libm_support.h" + +// +// Assembly macros +//========================================= + + +// predicate registers +//asin_pred_LEsqrt2by2 = p7 +//asin_pred_GTsqrt2by2 = p8 + +// integer registers +ASIN_Addr1 = r33 +ASIN_Addr2 = r34 +ASIN_FFFE = r35 +ASIN_lnorm_sig = r36 +ASIN_snorm_exp = r37 + +GR_SAVE_B0 = r36 +GR_SAVE_PFS = r37 +GR_SAVE_GP = r38 + +GR_Parameter_X = r39 +GR_Parameter_Y = r40 +GR_Parameter_RESULT = r41 +GR_Parameter_Tag = r42 + +// floating point registers +asin_coeff_P1 = f32 +asin_coeff_P2 = f33 +asin_coeff_P3 = f34 +asin_coeff_P4 = f35 + +asin_coeff_P5 = f36 +asin_coeff_P6 = f37 +asin_coeff_P7 = f38 +asin_coeff_P8 = f39 +asin_coeff_P9 = f40 + +asin_coeff_P10 = f41 +asin_coeff_P11 = f42 +asin_coeff_P12 = f43 +asin_coeff_P13 = f44 +asin_coeff_P14 = f45 + +asin_coeff_P15 = f46 +asin_coeff_P16 = f47 +asin_coeff_P17 = f48 +asin_coeff_P18 = f49 +asin_coeff_P19 = f50 + +asin_coeff_P20 = f51 +asin_coeff_P21 = f52 +asin_const_sqrt2by2 = f53 +asin_const_piby2 = f54 +asin_abs_x = f55 + +asin_tx = f56 +asin_tx2 = f57 +asin_tx3 = f58 +asin_tx4 = f59 +asin_tx8 = f60 + +asin_tx11 = f61 +asin_1poly_p8 = f62 +asin_1poly_p19 = f63 +asin_1poly_p4 = f64 +asin_1poly_p15 = f65 + +asin_1poly_p6 = f66 +asin_1poly_p17 = f67 +asin_1poly_p0 = f68 +asin_1poly_p11 = f69 +asin_1poly_p2 = f70 + +asin_1poly_p13 = f71 +asin_series_tx = f72 +asin_t = f73 +asin_t2 = f74 +asin_t3 = f75 + +asin_t4 = f76 +asin_t8 = f77 +asin_t11 = f78 +asin_poly_p8 = f79 +asin_poly_p19 = f80 + +asin_poly_p4 = f81 +asin_poly_p15 = f82 +asin_poly_p6 = f83 +asin_poly_p17 = f84 +asin_poly_p0 = f85 + +asin_poly_p11 = f86 +asin_poly_p2 = f87 +asin_poly_p13 = f88 +asin_series_t = f89 +asin_1by2 = f90 + +asin_3by2 = f91 +asin_5by2 = f92 +asin_11by4 = f93 +asin_35by8 = f94 +asin_63by8 = f95 + +asin_231by16 = f96 +asin_y0 = f97 +asin_H0 = f98 +asin_S0 = f99 +asin_d = f100 + +asin_l1 = f101 +asin_d2 = f102 +asin_T0 = f103 +asin_d1 = f104 +asin_e0 = f105 + +asin_l2 = f106 +asin_d3 = f107 +asin_T3 = f108 +asin_S1 = f109 +asin_e1 = f110 + +asin_z = f111 +answer2 = f112 +asin_sgn_x = f113 +asin_429by16 = f114 +asin_18by4 = f115 + +asin_3by4 = f116 +asin_l3 = f117 +asin_T6 = f118 +asin_eps_exp = f119 +asin_eps_sig = f120 +asin_eps = f120 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +asin_coeff_1_table: +ASM_TYPE_DIRECTIVE(asin_coeff_1_table,@object) +data8 0xE4E7E0A423A21249 , 0x00003FF8 //P7 +data8 0xC2F7EE0200FCE2A5 , 0x0000C003 //P18 +data8 0xB745D7F6C65C20E0 , 0x00003FF9 //P5 +data8 0xF75E381A323D4D94 , 0x0000C002 //P16 +data8 0x8959C2629C1024C0 , 0x0000C002 //P20 +data8 0xAFF68E7D241292C5 , 0x00003FF8 //P9 +data8 0xB6DB6DB7260AC30D , 0x00003FFA //P3 +data8 0xD0417CE2B41CB7BF , 0x0000C000 //P14 +data8 0x81D570FEA724E3E4 , 0x0000BFFD //P12 +data8 0xAAAAAAAAAAAAC277 , 0x00003FFC //P1 +data8 0xF534912FF3E7B76F , 0x00003FFF //P21 +data8 0xc90fdaa22168c235 , 0x00003fff // pi/2 +data8 0x0000000000000000 , 0x00000000 // pad to avoid data bank conflict +ASM_SIZE_DIRECTIVE(asin_coeff_1_table) + + +asin_coeff_2_table: +ASM_TYPE_DIRECTIVE(asin_coeff_2_table,@object) +data8 0x8E26AF5F29B39A2A , 0x00003FF9 //P6 +data8 0xB4F118A4B1015470 , 0x00004003 //P17 +data8 0xF8E38E10C25990E0 , 0x00003FF9 //P4 +data8 0x80F50489AEF1CAC6 , 0x00004002 //P15 +data8 0x92728015172CFE1C , 0x00004003 //P19 +data8 0xBBC3D831D4595971 , 0x00003FF8 //P8 +data8 0x999999999952A5C3 , 0x00003FFB //P2 +data8 0x855576BE6F0975EC , 0x00003FFF //P13 +data8 0xF12420E778077D89 , 0x00003FFA //P11 +data8 0xB6590FF4D23DE003 , 0x00003FF3 //P10 +data8 0xb504f333f9de6484 , 0x00003ffe // sqrt(2)/2 +ASM_SIZE_DIRECTIVE(asin_coeff_2_table) + + + +.align 32 +.global asin + +.section .text +.proc asin +.align 32 + + +asin: + +{ .mfi + alloc r32 = ar.pfs,1,6,4,0 + fma.s1 asin_tx = f8,f8,f0 + addl ASIN_Addr2 = @ltoff(asin_coeff_2_table),gp +} +{ .mfi + mov ASIN_FFFE = 0xFFFE + fnma.s1 asin_t = f8,f8,f1 + addl ASIN_Addr1 = @ltoff(asin_coeff_1_table),gp +} +;; + + +{ .mfi + setf.exp asin_1by2 = ASIN_FFFE + fmerge.s asin_abs_x = f1,f8 + nop.i 999 ;; +} + +{ .mmf + ld8 ASIN_Addr1 = [ASIN_Addr1] + ld8 ASIN_Addr2 = [ASIN_Addr2] + fmerge.s asin_sgn_x = f8,f1 ;; +} + + +{ .mfi + ldfe asin_coeff_P7 = [ASIN_Addr1],16 + fma.s1 asin_tx2 = asin_tx,asin_tx,f0 + nop.i 999 +} +{ .mfi + ldfe asin_coeff_P6 = [ASIN_Addr2],16 + fma.s1 asin_t2 = asin_t,asin_t,f0 + nop.i 999;; +} + + +{ .mmf + ldfe asin_coeff_P18 = [ASIN_Addr1],16 + ldfe asin_coeff_P17 = [ASIN_Addr2],16 + fclass.m.unc p8,p0 = f8, 0xc3 //@qnan |@snan +} +;; + +{ .mmf + ldfe asin_coeff_P5 = [ASIN_Addr1],16 + ldfe asin_coeff_P4 = [ASIN_Addr2],16 + frsqrta.s1 asin_y0,p0 = asin_t +} +;; + +{ .mfi + ldfe asin_coeff_P16 = [ASIN_Addr1],16 + fcmp.gt.s1 p9,p0 = asin_abs_x,f1 + nop.i 999 +} +{ .mfb + ldfe asin_coeff_P15 = [ASIN_Addr2],16 +(p8) fma.d f8 = f8,f1,f0 +(p8) br.ret.spnt b0 +} +;; + + +{ .mmf + ldfe asin_coeff_P20 = [ASIN_Addr1],16 + ldfe asin_coeff_P19 = [ASIN_Addr2],16 + fclass.m.unc p8,p0 = f8, 0x07 //@zero +} +;; + + +{ .mfi + ldfe asin_coeff_P9 = [ASIN_Addr1],16 + fma.s1 asin_t4 = asin_t2,asin_t2,f0 +(p9) mov GR_Parameter_Tag = 61 +} +{ .mfi + ldfe asin_coeff_P8 = [ASIN_Addr2],16 + fma.s1 asin_3by2 = asin_1by2,f1,f1 + nop.i 999;; +} + + +{ .mfi + ldfe asin_coeff_P2 = [ASIN_Addr2],16 + fma.s1 asin_tx4 = asin_tx2,asin_tx2,f0 + nop.i 999 +} +{ .mfb + ldfe asin_coeff_P3 = [ASIN_Addr1],16 + fma.s1 asin_t3 = asin_t,asin_t2,f0 +(p8) br.ret.spnt b0 +} +;; + + +{ .mfi + ldfe asin_coeff_P13 = [ASIN_Addr2],16 + fma.s1 asin_H0 = asin_y0,asin_1by2,f0 + nop.i 999 +} +{ .mfb + ldfe asin_coeff_P14 = [ASIN_Addr1],16 + fma.s1 asin_S0 = asin_y0,asin_t,f0 +(p9) br.cond.spnt __libm_error_region +} +;; + + +{ .mfi + ldfe asin_coeff_P11 = [ASIN_Addr2],16 + fcmp.eq.s1 p6,p0 = asin_abs_x,f1 + nop.i 999 +} +{ .mfi + ldfe asin_coeff_P12 = [ASIN_Addr1],16 + fma.s1 asin_tx3 = asin_tx,asin_tx2,f0 + nop.i 999;; +} + + +{ .mfi + ldfe asin_coeff_P10 = [ASIN_Addr2],16 + fma.s1 asin_1poly_p6 = asin_tx,asin_coeff_P7,asin_coeff_P6 + nop.i 999 +} +{ .mfi + ldfe asin_coeff_P1 = [ASIN_Addr1],16 + fma.s1 asin_poly_p6 = asin_t,asin_coeff_P7,asin_coeff_P6 + nop.i 999;; +} + + +{ .mfi + ldfe asin_const_sqrt2by2 = [ASIN_Addr2],16 + fma.s1 asin_5by2 = asin_3by2,f1,f1 + nop.i 999 +} +{ .mfi + ldfe asin_coeff_P21 = [ASIN_Addr1],16 + fma.s1 asin_11by4 = asin_3by2,asin_3by2,asin_1by2 + nop.i 999;; +} + + +{ .mfi + ldfe asin_const_piby2 = [ASIN_Addr1],16 + fma.s1 asin_poly_p17 = asin_t,asin_coeff_P18,asin_coeff_P17 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 asin_3by4 = asin_3by2,asin_1by2,f0 +(p6) br.cond.spnt L(ASIN_ABS_1) // Branch to short exit if |x|=1 +} +;; + + +{ .mfi + addl ASIN_lnorm_sig = -0x1,r0 // Form significand 0xffffffffffffffff + fma.s1 asin_poly_p15 = asin_t,asin_coeff_P16,asin_coeff_P15 + nop.i 999 +} +{ .mfi + addl ASIN_snorm_exp = 0x0c001,r0 // Form small exponent + fnma.s1 asin_d = asin_S0,asin_H0,asin_1by2 + nop.i 999;; +} + + +// Form the exponent and significand of a small number +{ .mfi + setf.sig asin_eps_sig = ASIN_lnorm_sig + fma.s1 asin_poly_p19 = asin_t,asin_coeff_P20,asin_coeff_P19 + nop.i 999 +} +{ .mfi + setf.exp asin_eps_exp = ASIN_snorm_exp + fma.s1 asin_poly_p4 = asin_t,asin_coeff_P5,asin_coeff_P4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p17 = asin_tx,asin_coeff_P18,asin_coeff_P17 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p8 = asin_t,asin_coeff_P9,asin_coeff_P8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fms.s1 asin_35by8 = asin_5by2,asin_11by4,asin_5by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_63by8 = asin_5by2,asin_11by4,f1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p13 = asin_t,asin_coeff_P14,asin_coeff_P13 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_18by4 = asin_3by2,asin_5by2,asin_3by4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_l1 = asin_5by2,asin_d,asin_3by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_d2 = asin_d,asin_d,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p15 = asin_t2,asin_poly_p17,asin_poly_p15 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_T0 = asin_d,asin_S0,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p19 = asin_t2,asin_coeff_P21,asin_poly_p19 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p4 = asin_t2,asin_poly_p6,asin_poly_p4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_d1 = asin_35by8,asin_d,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_231by16 = asin_3by2,asin_35by8,asin_63by8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p2 = asin_t,asin_coeff_P3,asin_coeff_P2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p8 = asin_t2,asin_coeff_P10,asin_poly_p8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p11 = asin_t,asin_coeff_P12,asin_coeff_P11 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_e0 = asin_d2,asin_l1,asin_d + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p15 = asin_tx,asin_coeff_P16,asin_coeff_P15 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p0 = asin_t,asin_coeff_P1,f1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p19 = asin_tx,asin_coeff_P20,asin_coeff_P19 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p4 = asin_tx,asin_coeff_P5,asin_coeff_P4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p8 = asin_tx,asin_coeff_P9,asin_coeff_P8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_l2 = asin_231by16,asin_d,asin_63by8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_d3 = asin_d2,asin_d,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_T3 = asin_d2,asin_T0,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_429by16 = asin_18by4,asin_11by4,asin_231by16 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_S1 = asin_e0,asin_S0,asin_S0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p4 = asin_t4,asin_poly_p8,asin_poly_p4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p15 = asin_t4,asin_poly_p19,asin_poly_p15 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p0 = asin_t2,asin_poly_p2,asin_poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p11 = asin_t2,asin_poly_p13,asin_poly_p11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_t8 = asin_t4,asin_t4,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_e1 = asin_d2,asin_l2,asin_d1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p4 = asin_tx2,asin_1poly_p6,asin_1poly_p4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p15 = asin_tx2,asin_1poly_p17,asin_1poly_p15 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p8 = asin_tx2,asin_coeff_P10,asin_1poly_p8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p19 = asin_tx2,asin_coeff_P21,asin_1poly_p19 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p2 = asin_tx,asin_coeff_P3,asin_coeff_P2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p13 = asin_tx,asin_coeff_P14,asin_coeff_P13 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p0 = asin_tx,asin_coeff_P1,f1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p11 = asin_tx,asin_coeff_P12,asin_coeff_P11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_l3 = asin_429by16,asin_d,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_z = asin_e1,asin_T3,asin_S1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_poly_p11 = asin_t4,asin_poly_p15,asin_poly_p11 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_T6 = asin_T3,asin_d3,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_t11 = asin_t8,asin_t3,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_poly_p0 = asin_t4,asin_poly_p4,asin_poly_p0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p4 = asin_tx4,asin_1poly_p8,asin_1poly_p4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p15 = asin_tx4,asin_1poly_p19,asin_1poly_p15 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p0 = asin_tx2,asin_1poly_p2,asin_1poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p11 = asin_tx2,asin_1poly_p13,asin_1poly_p11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +// fcmp.le.s1 asin_pred_LEsqrt2by2,asin_pred_GTsqrt2by2 = asin_abs_x,asin_const_sqrt2by2 + fcmp.le.s1 p7,p8 = asin_abs_x,asin_const_sqrt2by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_tx8 = asin_tx4,asin_tx4,f0 + nop.i 999;; +} + + +// Form a small number to force inexact flag for small args +{ .mfi + nop.m 999 + fmerge.se asin_eps = asin_eps_exp,asin_eps_sig + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_z = asin_l3,asin_T6,asin_z + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asin_series_t = asin_t11,asin_poly_p11,asin_poly_p0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p0 = asin_tx4,asin_1poly_p4,asin_1poly_p0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asin_1poly_p11 = asin_tx4,asin_1poly_p15,asin_1poly_p11 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asin_tx11 = asin_tx8,asin_tx3,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 +//(asin_pred_GTsqrt2by2) fnma.s1 answer2 = asin_z,asin_series_t,asin_const_piby2 +(p8) fnma.s1 answer2 = asin_z,asin_series_t,asin_const_piby2 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asin_series_tx = asin_tx11,asin_1poly_p11,asin_1poly_p0 + nop.i 999;; +} + +{ .mfi + nop.m 999 +//(asin_pred_GTsqrt2by2) fma.d f8 = asin_sgn_x,answer2,f0 +(p8) fma.d f8 = asin_sgn_x,answer2,f0 + nop.i 999;; +} + +// asin_eps is added only to force inexact and possibly underflow flag +// in case asin_series_tx is zero +// +{ .mfi + nop.m 999 +(p7) fma.d asin_eps = f8,asin_series_tx,asin_eps + nop.i 999 +} +{ .mfb + nop.m 999 +//(asin_pred_LEsqrt2by2) fma.d f8 = f8,asin_series_tx,f0 +(p7) fma.d f8 = f8,asin_series_tx,f0 + br.ret.sptk b0 +} +;; + + +L(ASIN_ABS_1): +// Here for short exit if |x|=1 +{ .mfb + nop.m 999 + fma.d f8 = asin_sgn_x,asin_const_piby2,f0 + br.ret.sptk b0 +} +;; + + +.endp asin +ASM_SIZE_DIRECTIVE(asin) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body + frcpa.s0 f9,p0 = f0,f0 +;; + +{ .mib + stfd [GR_Parameter_X] = f8 // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfd [GR_Parameter_Y] = f9,-16 // Store Parameter 3 on stack + adds r32 = 48,sp + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + ldfd f8 = [r32] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return + +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support,@function +.global __libm_error_support diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_asinf.S glibc-2.2.3/sysdeps/ia64/fpu/e_asinf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_asinf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_asinf.S Mon Feb 19 00:41:44 2001 @@ -0,0 +1,674 @@ +.file "asinf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/02/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + +// History +//============================================================== +// 2/02/00 Initial revision +// 6/28/00 Improved speed +// 6/31/00 Changed register allocation because of some duplicate macros +// moved nan exit bundle up to gain a cycle. +// 8/08/00 Improved speed by avoiding SIR flush. +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 8/17/00 Changed predicate register macro-usage to direct predicate +// names due to an assembler bug. +// 10/17/00 Improved speed of x=0 and x=1 paths, set D flag if x denormal. + +// Description +//========================================= +// The asinf function computes the arc sine of x in the range [-pi,+pi]. +// A doman error occurs for arguments not in the range [-1,+1]. +// asinf(+-0) returns +-0 +// asinf(x) returns a Nan and raises the invalid exception for |x| >1 + +// The acosf function returns the arc cosine in the range [0, +pi] radians. +// A doman error occurs for arguments not in the range [-1,+1]. +// acosf(1) returns +0 +// acosf(x) returns a Nan and raises the invalid exception for |x| >1 + + +// |x| <= sqrt(2)/2. get Ax and Bx + +// poly_p1 = x p1 +// poly_p3 = x2 p4 + p3 +// poly_p1 = x2 (poly_p1) + x = x2(x p1) + x +// poly_p2 = x2( poly_p3) + p2 = x2(x2 p4 + p3) + p2 + +// poly_Ax = x5(x2( poly_p3) + p2) + x2(x p1) + x +// = x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x + +// poly_p7 = x2 p8 + p7 +// poly_p5 = x2 p6 + p5 + +// poly_p7 = x4 p9 + (poly_p7) +// poly_p7 = x4 p9 + (x2 p8 + p7) +// poly_Bx = x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5 + +// answer1 = x11(x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5) + x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x +// = x19 p9 + x17 p8 + x15 p7 x13 p6 + x11 p5 + x9 p4 + x7 p3 + x5 p2 + x3 p1 + x + + + +// |x| > sqrt(2)/2 + +// Get z = sqrt(1-x2) + +// Get polynomial in t = 1-x2 + +// t2 = t t +// t4 = t2 t2 + +// poly_p4 = t p5 + p4 +// poly_p1 = t p1 + 1 + +// poly_p6 = t p7 + p6 +// poly_p2 = t p3 + p2 + +// poly_p8 = t p9 + p8 + +// poly_p4 = t2 poly_p6 + poly_p4 +// = t2 (t p7 + p6) + (t p5 + p4) + +// poly_p2 = t2 poly_p2 + poly_p1 +// = t2 (t p3 + p2) + (t p1 + 1) + +// poly_p4 = t4 poly_p8 + poly_p4 +// = t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4)) + +// P(t) = poly_p2 + t4 poly_p8 +// = t2 (t p3 + p2) + (t p1 + 1) + t4 (t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4))) +// = t3 p3 + t2 p2 + t p1 + 1 + t9 p9 + t8 p8 + t7 p7 + t6 p6 + t5 p5 + t4 p4 + + +// answer2 = - sign(x) z P(t) + (sign(x) pi/2) +// + +#include "libm_support.h" + +// Assembly macros +//========================================= + +// predicate registers +//asinf_pred_LEsqrt2by2 = p7 +//asinf_pred_GTsqrt2by2 = p8 + +// integer registers +ASINF_Addr1 = r33 +ASINF_Addr2 = r34 +ASINF_GR_1by2 = r35 + +ASINF_GR_3by2 = r36 +ASINF_GR_5by2 = r37 + +GR_SAVE_B0 = r38 +GR_SAVE_PFS = r39 +GR_SAVE_GP = r40 + +GR_Parameter_X = r41 +GR_Parameter_Y = r42 +GR_Parameter_RESULT = r43 +GR_Parameter_TAG = r44 + +// floating point registers + +asinf_y = f32 +asinf_abs_x = f33 +asinf_x2 = f34 +asinf_sgn_x = f35 + +asinf_1by2 = f36 +asinf_3by2 = f37 +asinf_5by2 = f38 +asinf_coeff_P3 = f39 +asinf_coeff_P8 = f40 + +asinf_coeff_P1 = f41 +asinf_coeff_P4 = f42 +asinf_coeff_P5 = f43 +asinf_coeff_P2 = f44 +asinf_coeff_P7 = f45 + +asinf_coeff_P6 = f46 +asinf_coeff_P9 = f47 +asinf_x2 = f48 +asinf_x3 = f49 +asinf_x4 = f50 + +asinf_x8 = f51 +asinf_x5 = f52 +asinf_const_piby2 = f53 +asinf_const_sqrt2by2 = f54 +asinf_x11 = f55 + +asinf_poly_p1 = f56 +asinf_poly_p3 = f57 +asinf_sinf1 = f58 +asinf_poly_p2 = f59 +asinf_poly_Ax = f60 + +asinf_poly_p7 = f61 +asinf_poly_p5 = f62 +asinf_sgnx_t4 = f63 +asinf_poly_Bx = f64 +asinf_t = f65 + +asinf_yby2 = f66 +asinf_B = f67 +asinf_B2 = f68 +asinf_Az = f69 +asinf_dz = f70 + +asinf_Sz = f71 +asinf_d2z = f72 +asinf_Fz = f73 +asinf_z = f74 +asinf_sgnx_z = f75 + +asinf_t2 = f76 +asinf_2poly_p4 = f77 +asinf_2poly_p6 = f78 +asinf_2poly_p1 = f79 +asinf_2poly_p2 = f80 + +asinf_2poly_p8 = f81 +asinf_t4 = f82 +asinf_Pt = f83 +asinf_sgnx_2poly_p2 = f84 +asinf_sgn_x_piby2 = f85 + +asinf_poly_p7a = f86 +asinf_2poly_p4a = f87 +asinf_2poly_p4b = f88 +asinf_2poly_p2a = f89 +asinf_poly_p1a = f90 + + + + + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +asinf_coeff_1_table: +ASM_TYPE_DIRECTIVE(asinf_coeff_1_table,@object) +data8 0x3FC5555607DCF816 // P1 +data8 0x3F9CF81AD9BAB2C6 // P4 +data8 0x3FC59E0975074DF3 // P7 +data8 0xBFA6F4CC2780AA1D // P6 +data8 0x3FC2DD45292E93CB // P9 +data8 0x3fe6a09e667f3bcd // sqrt(2)/2 +ASM_SIZE_DIRECTIVE(asinf_coeff_1_table) + +asinf_coeff_2_table: +ASM_TYPE_DIRECTIVE(asinf_coeff_2_table,@object) +data8 0x3FA6F108E31EFBA6 // P3 +data8 0xBFCA31BF175D82A0 // P8 +data8 0x3FA30C0337F6418B // P5 +data8 0x3FB332C9266CB1F9 // P2 +data8 0x3ff921fb54442d18 // pi_by_2 +ASM_SIZE_DIRECTIVE(asinf_coeff_2_table) + + +.align 32 +.global asinf + +.section .text +.proc asinf +.align 32 + +asinf: + +// Load the addresses of the two tables. +// Then, load the coefficients and other constants. + +{ .mfi + alloc r32 = ar.pfs,1,8,4,0 + fnma.s1 asinf_t = f8,f8,f1 + dep.z ASINF_GR_1by2 = 0x3f,24,8 // 0x3f000000 +} +{ .mfi + addl ASINF_Addr1 = @ltoff(asinf_coeff_1_table),gp + fma.s1 asinf_x2 = f8,f8,f0 + addl ASINF_Addr2 = @ltoff(asinf_coeff_2_table),gp ;; +} + + +{ .mfi + ld8 ASINF_Addr1 = [ASINF_Addr1] + fmerge.s asinf_abs_x = f1,f8 + dep ASINF_GR_3by2 = -1,r0,22,8 // 0x3fc00000 +} +{ .mlx + nop.m 999 + movl ASINF_GR_5by2 = 0x40200000;; +} + + + +{ .mfi + setf.s asinf_1by2 = ASINF_GR_1by2 + fmerge.s asinf_sgn_x = f8,f1 + nop.i 999 +} +{ .mfi + ld8 ASINF_Addr2 = [ASINF_Addr2] + nop.f 0 + nop.i 999;; +} + + +{ .mfi + setf.s asinf_5by2 = ASINF_GR_5by2 + fcmp.lt.s1 p11,p12 = f8,f0 + nop.i 999;; +} + +{ .mmf + ldfpd asinf_coeff_P1,asinf_coeff_P4 = [ASINF_Addr1],16 + setf.s asinf_3by2 = ASINF_GR_3by2 + fclass.m.unc p8,p0 = f8, 0xc3 ;; //@qnan | @snan +} + + +{ .mfi + ldfpd asinf_coeff_P7,asinf_coeff_P6 = [ASINF_Addr1],16 + fma.s1 asinf_t2 = asinf_t,asinf_t,f0 + nop.i 999 +} +{ .mfi + ldfpd asinf_coeff_P3,asinf_coeff_P8 = [ASINF_Addr2],16 + fma.s1 asinf_x4 = asinf_x2,asinf_x2,f0 + nop.i 999;; +} + + +{ .mfi + ldfpd asinf_coeff_P9,asinf_const_sqrt2by2 = [ASINF_Addr1] + fclass.m.unc p10,p0 = f8, 0x07 //@zero + nop.i 999 +} +{ .mfi + ldfpd asinf_coeff_P5,asinf_coeff_P2 = [ASINF_Addr2],16 + fma.s1 asinf_x3 = f8,asinf_x2,f0 + nop.i 999;; +} + + +{ .mfi + ldfd asinf_const_piby2 = [ASINF_Addr2] + frsqrta.s1 asinf_B,p0 = asinf_t + nop.i 999 +} +{ .mfb + nop.m 999 +(p8) fma.s f8 = f8,f1,f0 +(p8) br.ret.spnt b0 ;; // Exit if x=nan +} + + +{ .mfb + nop.m 999 + fcmp.eq.s1 p6,p0 = asinf_abs_x,f1 +(p10) br.ret.spnt b0 ;; // Exit if x=0 +} + +{ .mfi + nop.m 999 + fcmp.gt.s1 p9,p0 = asinf_abs_x,f1 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asinf_x8 = asinf_x4,asinf_x4,f0 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 asinf_t4 = asinf_t2,asinf_t2,f0 +(p6) br.cond.spnt L(ASINF_ABS_ONE) ;; // Branch if |x|=1 +} + +{ .mfi + nop.m 999 + fma.s1 asinf_x5 = asinf_x2,asinf_x3,f0 + nop.i 999 +} +{ .mfb +(p9) mov GR_Parameter_TAG = 62 + fma.s1 asinf_yby2 = asinf_t,asinf_1by2,f0 +(p9) br.cond.spnt __libm_error_region ;; // Branch if |x|>1 +} + + +{ .mfi + nop.m 999 + fma.s1 asinf_Az = asinf_t,asinf_B,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_B2 = asinf_B,asinf_B,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p1 = f8,asinf_coeff_P1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_2poly_p1 = asinf_coeff_P1,asinf_t,f1 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p3 = asinf_coeff_P4,asinf_x2,asinf_coeff_P3 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_2poly_p6 = asinf_coeff_P7,asinf_t,asinf_coeff_P6 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p7 = asinf_x2,asinf_coeff_P8,asinf_coeff_P7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_2poly_p2 = asinf_coeff_P3,asinf_t,asinf_coeff_P2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p5 = asinf_x2,asinf_coeff_P6,asinf_coeff_P5 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_2poly_p4 = asinf_coeff_P5,asinf_t,asinf_coeff_P4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.d.s1 asinf_x11 = asinf_x8,asinf_x3,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fnma.s1 asinf_dz = asinf_B2,asinf_yby2,asinf_1by2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p1a = asinf_x2,asinf_poly_p1,f8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_2poly_p8 = asinf_coeff_P9,asinf_t,asinf_coeff_P8 + nop.i 999;; +} + + +// Get the absolute value of x and determine the region in which x lies + +{ .mfi + nop.m 999 + fcmp.le.s1 p7,p8 = asinf_abs_x,asinf_const_sqrt2by2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p2 = asinf_x2,asinf_poly_p3,asinf_coeff_P2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 asinf_poly_p7a = asinf_x4,asinf_coeff_P9,asinf_poly_p7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 asinf_2poly_p2a = asinf_2poly_p2,asinf_t2,asinf_2poly_p1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_sgnx_t4 = asinf_sgn_x,asinf_t4,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_2poly_p4a = asinf_2poly_p6,asinf_t2,asinf_2poly_p4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_Sz = asinf_5by2,asinf_dz,asinf_3by2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_d2z = asinf_dz,asinf_dz,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_sgn_x_piby2 = asinf_sgn_x,asinf_const_piby2,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.d.s1 asinf_poly_Ax = asinf_x5,asinf_poly_p2,asinf_poly_p1a + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p7) fma.d.s1 asinf_poly_Bx = asinf_x4,asinf_poly_p7a,asinf_poly_p5 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_sgnx_2poly_p2 = asinf_sgn_x,asinf_2poly_p2a,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p6,p0 = f8,f0 // Only purpose is to set D if x denormal + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_2poly_p4b = asinf_2poly_p8,asinf_t4,asinf_2poly_p4a + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 asinf_Fz = asinf_d2z,asinf_Sz,asinf_dz + nop.i 999;; +} + + +{ .mfi + nop.m 999 +(p8) fma.d.s1 asinf_Pt = asinf_2poly_p4b,asinf_sgnx_t4,asinf_sgnx_2poly_p2 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p8) fma.d.s1 asinf_z = asinf_Az,asinf_Fz,asinf_Az + nop.i 999;; +} + +.pred.rel "mutex",p8,p7 //asinf_pred_GTsqrt2by2,asinf_pred_LEsqrt2by2 +{ .mfi + nop.m 999 +(p8) fnma.s f8 = asinf_z,asinf_Pt,asinf_sgn_x_piby2 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p7) fma.s f8 = asinf_x11,asinf_poly_Bx,asinf_poly_Ax + br.ret.sptk b0 ;; +} + +L(ASINF_ABS_ONE): +// Here for short exit if |x|=1 +{ .mfb + nop.m 999 + fma.s f8 = asinf_sgn_x,asinf_const_piby2,f0 + br.ret.sptk b0 +} +;; + +.endp asinf +ASM_SIZE_DIRECTIVE(asinf) + +// Stack operations when calling error support. +// (1) (2) +// sp -> + psp -> + +// | | +// | | <- GR_Y +// | | +// | <-GR_Y Y2->| +// | | +// | | <- GR_X +// | | +// sp-64 -> + sp -> + +// save ar.pfs save b0 +// save gp + + +// Stack operations when calling error support. +// (3) (call) (4) +// psp -> + sp -> + +// | | +// R3 ->| <- GR_RESULT | -> f8 +// | | +// Y2 ->| <- GR_Y | +// | | +// X1 ->| | +// | | +// sp -> + + +// restore gp +// restore ar.pfs + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +{ .mfi + nop.m 0 + frcpa.s0 f9,p0 = f0,f0 + nop.i 0 +};; + +{ .mib + stfs [GR_Parameter_X] = f8 // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = f9 // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_asinl.S glibc-2.2.3/sysdeps/ia64/fpu/e_asinl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_asinl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_asinl.S Mon Feb 19 00:41:56 2001 @@ -0,0 +1,777 @@ +.file "asinl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// API +//============================================================== +// long double = asinl(long double) +// input floating point f8 +// output floating point f8 +// +// Registers used +//============================================================== +// +// predicate registers used: +// p6 -> p12 +// +// floating-point registers used: +// f8 has input, then output +// f32 -> f87, f8 -> f13, f32 -> f87 +// +// general registers used: +// r32 -> r47 +// +// Overview of operation +//============================================================== +// There are three paths +// 1. |x| < 2^-40 ASIN_TINY +// 2. 2^-40 <= |x| < 1/4 ASIN_POLY +// 3. 1/4 <= |x| < 1 ASIN_ATAN + +#include "libm_support.h" + +// Assembly macros +//============================================================== +FR_RESULT = f10 +FR_X = f8 +FR_Y = f1 +asin_P79 = f32 +asin_P59 = f33 +asin_P39 = f34 +asin_P19 = f35 + +asin_P810 = f36 +asin_P610 = f37 +asin_P410 = f38 +asin_P210 = f39 + +asin_A1 = f41 +asin_A2 = f42 +asin_A3 = f43 +asin_A4 = f44 +asin_A5 = f45 +asin_A6 = f46 +asin_A7 = f47 +asin_A8 = f48 +asin_A9 = f49 +asin_A10 = f50 + +asin_X2 = f51 +asin_X4 = f52 + +asin_B = f53 +asin_Bb = f54 +asin_C = f55 +asin_Cc = f56 +asin_D = f57 + +asin_W = f58 +asin_Ww = f59 + +asin_y0 = f60 +asin_y1 = f61 +asin_y2 = f62 + +asin_H = f63 +asin_Hh = f64 + +asin_t1 = f65 +asin_t2 = f66 +asin_t3 = f67 +asin_t4 = f68 +asin_t5 = f69 + +asin_Pseries = f70 +asin_NORM_f8 = f71 +asin_ABS_NORM_f8 = f72 + +asin_2m100 = f73 +asin_P1P2 = f74 +asin_HALF = f75 +asin_1mD = f76 + +asin_1mB = f77 +asin_1mBmC = f78 +asin_S = f79 + +asin_BmWW = f80 +asin_BmWWpb = f81 +asin_2W = f82 +asin_1d2W = f83 +asin_Dd = f84 + +asin_XWw = f85 +asin_low = f86 + +asin_pi_by_2 = f87 +asin_pi_by_2_lo = f88 + +asin_GR_17_ones = r33 +asin_GR_16_ones = r34 +asin_GR_signexp_f8 = r35 +asin_GR_exp = r36 +asin_GR_true_exp = r37 +asin_GR_ff9b = r38 + +GR_SAVE_B0 = r39 +GR_SAVE_SP = r40 +GR_SAVE_PFS = r33 +// r33 can be used safely. +// r40 is address of table of coefficients +// Later it is used to save sp across calls +GR_SAVE_GP = r41 +asin_GR_fffe = r42 +asin_GR_retval = r43 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 +GR_Parameter_TAG = r47 + + +// 2^-40: +// A true exponent of -40 is +// : -40 + register_bias +// : -28 + ffff = ffd7 + +// A true exponent of -100 is +// : -100 + register_bias +// : -64 + ffff = ff9b + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +asin_coefficients: +ASM_TYPE_DIRECTIVE(asin_coefficients,@object) +data8 0xBB08911F2013961E, 0x00003FF8 // A10 +data8 0x981F1095A23A87D3, 0x00003FF8 // A9 +data8 0xBDF09C6C4177BCC6, 0x00003FF8 // A8 +data8 0xE4C3A60B049ACCEA, 0x00003FF8 // A7 +data8 0x8E2789F4E8A8F1AD, 0x00003FF9 // A6 +data8 0xB745D09B2B0E850B, 0x00003FF9 // A5 +data8 0xF8E38E3BC4C50920, 0x00003FF9 // A4 +data8 0xB6DB6DB6D89FCD81, 0x00003FFA // A3 +data8 0x99999999999AF376, 0x00003FFB // A2 +data8 0xAAAAAAAAAAAAAA71, 0x00003FFC // A1 + +data8 0xc90fdaa22168c234, 0x00003FFF // pi_by_2_hi +data8 0xc4c6628b80dc1cd1, 0x00003FBF // pi_by_2_lo +ASM_SIZE_DIRECTIVE(asin_coefficients) + +.align 32 +.global asinl# + +.section .text +.proc asinl# +.align 32 + + +asinl: + +{ .mfi + alloc r32 = ar.pfs,1,11,4,0 +(p0) fnorm asin_NORM_f8 = f8 +(p0) mov asin_GR_17_ones = 0x1ffff +} + +{ .mii +(p0) mov asin_GR_16_ones = 0xffff +(p0) mov asin_GR_ff9b = 0xff9b ;; + nop.i 999 +} + + +{ .mmi +(p0) setf.exp asin_2m100 = asin_GR_ff9b +(p0) addl r40 = @ltoff(asin_coefficients), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r40 = [r40] + nop.m 999 + nop.i 999 +} +;; + + + +// Load the constants + +{ .mmi +(p0) ldfe asin_A10 = [r40],16 ;; +(p0) ldfe asin_A9 = [r40],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe asin_A8 = [r40],16 ;; +(p0) ldfe asin_A7 = [r40],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe asin_A6 = [r40],16 ;; +(p0) getf.exp asin_GR_signexp_f8 = asin_NORM_f8 + nop.i 999 +} + +{ .mmi +(p0) ldfe asin_A5 = [r40],16 ;; +(p0) ldfe asin_A4 = [r40],16 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s asin_ABS_NORM_f8 = f0, asin_NORM_f8 +(p0) and asin_GR_exp = asin_GR_signexp_f8, asin_GR_17_ones ;; +} + +// case 1: |x| < 2^-40 ==> p6 (includes x = +-0) +// case 2: 2^-40 <= |x| < 2^-2 ==> p8 +// case 3: 2^-2 <= |x| < 1 ==> p9 +// case 4: 1 <= |x| ==> p11 +// In case 4, we pick up the special case x = +-1 and return +-pi/2 + +{ .mii +(p0) ldfe asin_A3 = [r40],16 +(p0) sub asin_GR_true_exp = asin_GR_exp, asin_GR_16_ones ;; +(p0) cmp.ge.unc p6, p7 = -41, asin_GR_true_exp ;; +} + +{ .mii +(p0) ldfe asin_A2 = [r40],16 +(p7) cmp.ge.unc p8, p9 = -3, asin_GR_true_exp ;; +(p9) cmp.ge.unc p10, p11 = -1, asin_GR_true_exp +} + +{ .mmi +(p0) ldfe asin_A1 = [r40],16 ;; +(p0) ldfe asin_pi_by_2 = [r40],16 + nop.i 999 +} + +// case 4: |x| >= 1 +{ .mib + nop.m 999 + nop.i 999 +(p11) br.spnt L(ASIN_ERROR_RETURN) ;; +} + +// case 1: |x| < 2^-40 +{ .mfb + nop.m 999 +(p6) fma.s0 f8 = asin_2m100,f8,f8 +(p6) br.ret.spnt b0 ;; +} + + +// case 2: 2^-40 <= |x| < 2^-2 ==> p8 +{ .mfi + nop.m 999 +(p8) fma.s1 asin_X2 = f8,f8, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_X4 = asin_X2,asin_X2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P810 = asin_X4, asin_A10, asin_A8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P79 = asin_X4, asin_A9, asin_A7 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P610 = asin_X4, asin_P810, asin_A6 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P59 = asin_X4, asin_P79, asin_A5 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P410 = asin_X4, asin_P610, asin_A4 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P39 = asin_X4, asin_P59, asin_A3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P210 = asin_X4, asin_P410, asin_A2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P19 = asin_X4, asin_P39, asin_A1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P1P2 = asin_X2, asin_P210, asin_P19 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 asin_P1P2 = asin_X2, asin_P1P2, f0 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p8) fma.s0 f8 = asin_NORM_f8, asin_P1P2, asin_NORM_f8 +(p8) br.ret.spnt b0 ;; +} + +// case 3: 2^-2 <= |x| < 1 +// 1- X*X is computed as B + b +// Step 1.1: Get B and b + +// atan2 will return +// f8 = Z_hi +// f10 = Z_lo +// f11 = s_lo + + +{ .mfi +(p0) mov asin_GR_fffe = 0xfffe +(p0) fmerge.se f8 = asin_ABS_NORM_f8, asin_ABS_NORM_f8 +nop.i 0 +};; + +{ .mmf +nop.m 0 +(p0) setf.exp asin_HALF = asin_GR_fffe +(p0) fmerge.se f12 = asin_NORM_f8, asin_NORM_f8 ;; +} + + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p6,p7 = asin_ABS_NORM_f8, asin_HALF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 asin_D = f1,f1,asin_ABS_NORM_f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fms.s1 asin_C = f1,f1,asin_ABS_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 asin_B = asin_C, asin_D, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fms.s1 asin_1mD = f1,f1,asin_D + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 asin_Dd = asin_1mD,f1, asin_ABS_NORM_f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fms.s1 asin_Bb = asin_C, asin_D, asin_B + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 asin_Bb = asin_C, asin_Dd, asin_Bb + nop.i 999 +} + +{ .mfi + nop.m 999 +(p6) fma.s1 asin_C = asin_ABS_NORM_f8, asin_ABS_NORM_f8, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fms.s1 asin_B = f1, f1, asin_C + nop.i 999 +} + +{ .mfi + nop.m 999 +(p6) fms.s1 asin_Cc = asin_ABS_NORM_f8, asin_ABS_NORM_f8, asin_C + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_Hh = asin_HALF, asin_B, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p6) fms.s1 asin_1mB = f1, f1, asin_B + nop.i 999 ;; +} + +// Step 1.2: +// sqrt(B + b) is computed as W + w +// Get W + +{ .mfi + nop.m 999 +(p0) frsqrta.s1 asin_y0,p8 = asin_B + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fms.s1 asin_1mBmC = asin_1mB, f1, asin_C + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_t1 = asin_y0, asin_y0, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fms.s1 asin_Bb = asin_1mBmC, f1, asin_Cc + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 asin_t2 = asin_t1, asin_Hh, asin_HALF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_y1 = asin_t2, asin_y0, asin_y0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_t3 = asin_y1, asin_Hh, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 asin_t4 = asin_t3, asin_y1, asin_HALF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_y2 = asin_t4, asin_y1, asin_y1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_S = asin_B, asin_y2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_H = asin_y2, asin_HALF, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_t5 = asin_Hh, asin_y2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 asin_Dd = asin_S, asin_S, asin_B + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_W = asin_Dd, asin_H, asin_S + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_2W = asin_W, f1, asin_W + nop.i 999 +} + +// Step 1.3 +// Get w +{ .mfi + nop.m 999 +(p0) fnma.s1 asin_BmWW = asin_W, asin_W, asin_B + nop.i 999 ;; +} + +// Step 2 +// asin(x) = atan2(X,sqrt(1-X*X)) +// = atan2(X, W) -Xw +// corr = Xw +// asin(x) = Z_hi + (s_lo*Z_lo - corr) +// Call atan2(X, W) +// Save W in f9 +// Save X in f12 +// Save w in f13 + +{ .mfi + nop.m 999 +(p0) fmerge.se f9 = asin_W, asin_W + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_BmWWpb = asin_BmWW, f1, asin_Bb + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) frcpa.s1 asin_1d2W,p9 = f1, asin_2W + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 asin_Ww = asin_BmWWpb, asin_1d2W, f0 + nop.i 999 ;; +} +.endp asinl +ASM_SIZE_DIRECTIVE(asinl) + +.proc __libm_callout +__libm_callout: +.prologue +{ .mfi + nop.m 0 + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +};; +{ .mfi + mov GR_SAVE_GP=gp // Save gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +} +.body +{.mfb + nop.m 0 +(p0) fmerge.se f13 = asin_Ww, asin_Ww +(p0) br.call.sptk.many b0=__libm_atan2_reg# +};; +{ .mfi + mov gp = GR_SAVE_GP // Restore gp +(p0) fma.s1 asin_XWw = asin_ABS_NORM_f8,f13,f0 + mov b0 = GR_SAVE_B0 // Restore return address +};; +// asin_XWw = Xw = corr +// asin_low = (s_lo * Z_lo - corr) +// f8 = Z_hi + (s_lo * Z_lo - corr) + +{ .mfi + nop.m 999 +(p0) fms.s1 asin_low = f11, f10, asin_XWw + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs +};; + +{ .mfi + nop.m 999 +(p0) fma.s0 f8 = f8, f1, asin_low + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f12,f8 +(p0) br.ret.sptk b0 ;; +} +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) + +.proc SPECIAL +SPECIAL: +L(ASIN_ERROR_RETURN): + +// If X is 1, return (sign of X)pi/2 + +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc p6,p7 = asin_ABS_NORM_f8,f1 + nop.i 999 ;; +} + +{ .mfb +(p6) ldfe asin_pi_by_2_lo = [r40] +(p6) fmerge.s asin_pi_by_2 = f8,asin_pi_by_2 + nop.b 0;; +} + +// If X is a NAN, leave +// qnan snan inf norm unorm 0 -+ +// 1 1 0 0 0 0 11 +{ .mfb + nop.m 999 +(p6) fma.s0 f8 = f8,asin_pi_by_2_lo,asin_pi_by_2 +(p6) br.ret.spnt b0 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p12,p0 = f8, 0xc3 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p12) fma.s0 f8 = f8,f1,f0 +(p12) br.ret.spnt b0 ;; +} +{ .mfi +(p0) mov GR_Parameter_TAG = 60 +(p0) frcpa f10, p6 = f0, f0 +nop.i 0 +};; +.endp SPECIAL +ASM_SIZE_DIRECTIVE(SPECIAL) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# + +.type __libm_atan2_reg#,@function +.global __libm_atan2_reg# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_atan2.S glibc-2.2.3/sysdeps/ia64/fpu/e_atan2.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_atan2.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_atan2.S Mon Feb 19 00:42:15 2001 @@ -0,0 +1,1124 @@ +.file "atan2.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 8/17/00 Changed predicate register macro-usage to direct predicate +// names due to an assembler bug. +// 9/28/00 Updated to set invalid on SNaN inputs +// 1/19/01 Fixed flags for small results +// +// API +//============================================================== +// double atan2(double Y, double X) +// +// Overview of operation +//============================================================== +// +// There are two basic paths: swap true and swap false. +// atan2(Y,X) ==> atan2(V/U) where U >= V. If Y > X, we must swap. +// +// p6 swap True |Y| > |X| +// p7 swap False |Y| <= |X| +// p8 X+ (If swap=True p8=p9=0) +// p9 X- +// +// all the other predicates p10 thru p15 are false for the main path +// +// Simple trigonometric identities show +// Region 1 (-45 to +45 degrees): +// X>0, |Y|<=X, V=Y, U=X atan2(Y,X) = sgnY * (0 + atan(V/U)) +// +// Region 2 (-90 to -45 degrees, and +45 to +90 degrees): +// X>0, |Y|>X, V=X, U=Y atan2(Y,X) = sgnY * (pi/2 - atan(V/U)) +// +// Region 3 (-135 to -90 degrees, and +90 to +135 degrees): +// X<0, |Y|>X, V=X, U=Y atan2(Y,X) = sgnY * (pi/2 + atan(V/U)) +// +// Region 4 (-180 to -135 degrees, and +135 to +180 degrees): +// X<0, |Y|<=X, V=Y, U=X atan2(Y,X) = sgnY * (pi - atan(V/U)) +// +// So the result is always of the form atan2(Y,X) = P + sgnXY * atan(V/U) +// +// We compute atan(V/U) from the identity +// atan(z) + atan([(V/U)-z] / [1+(V/U)z]) +// where z is a limited precision approximation (16 bits) to V/U +// +// z is calculated with the assistance of the frcpa instruction. +// +// atan(z) is calculated by a polynomial z + z^3 * p(w), w=z^2 +// where p(w) = P0+P1*w+...+P22*w^22 +// +// Let d = [(V/U)-z] / [1+(V/U)z]) = (V-U*z)/(U+V*z) +// +// Approximate atan(d) by d + P0*d^3 +// Let F = 1/(U+V*z) * (1-a), where |a|< 2^-8.8. +// Compute q(a) = 1 + a + ... + a^5. +// Then F*q(a) approximates the reciprocal to more than 50 bits. + +// Special values +//============================================================== +// Y x Result +// +number +inf +0 +// -number +inf -0 +// +number -inf +pi +// -number -inf -pi +// +// +inf +number +pi/2 +// -inf +number -pi/2 +// +inf -number +pi/2 +// -inf -number -pi/2 +// +// +inf +inf +pi/4 +// -inf +inf -pi/4 +// +inf -inf +3pi/4 +// -inf -inf -3pi/4 +// +// +1 +1 +pi/4 +// -1 +1 -pi/4 +// +1 -1 +3pi/4 +// -1 -1 -3pi/4 +// +// +number +0 +pi/2 +// -number +0 -pi/2 +// +number -0 +pi/2 +// -number -0 -pi/2 +// +// +0 +number +0 +// -0 +number -0 +// +0 -number +pi +// -0 -number -pi +// +// +0 +0 +0 +// -0 +0 -0 +// +0 -0 +pi +// -0 -0 -pi +// +// Nan anything quiet Y +// anything NaN quiet X + +// atan2(+-0/+-0) sets double error tag to 37 +// atan2(+-0/+-0) sets single error tag to 38 + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +EXP_AD_P1 = r33 +EXP_AD_P2 = r34 +atan2_GR_sml_exp = r35 + + +GR_SAVE_B0 = r35 +GR_SAVE_GP = r36 +GR_SAVE_PFS = r37 + +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +atan2_GR_tag = r41 + + +atan2_X = f9 +atan2_Y = f8 + +atan2_u1_X = f32 +atan2_u1_Y = f33 +atan2_Umax = f34 +atan2_Vmin = f35 +atan2_two = f36 +atan2_absX = f37 +atan2_z1_X = f38 +atan2_z1_Y = f39 +atan2_B1X = f40 +atan2_B1Y = f41 +atan2_wp = f42 +atan2_B1sq = f43 +atan2_z = f44 +atan2_w = f45 + +atan2_P0 = f46 +atan2_P1 = f47 +atan2_P2 = f48 +atan2_P3 = f49 +atan2_P4 = f50 +atan2_P5 = f51 +atan2_P6 = f52 +atan2_P7 = f53 +atan2_P8 = f54 +atan2_P9 = f55 +atan2_P10 = f56 +atan2_P11 = f57 +atan2_P12 = f58 +atan2_P13 = f59 +atan2_P14 = f60 +atan2_P15 = f61 +atan2_P16 = f62 +atan2_P17 = f63 +atan2_P18 = f64 +atan2_P19 = f65 +atan2_P20 = f66 +atan2_P21 = f67 +atan2_P22 = f68 +atan2_Pi_by_2 = f69 + +atan2_V13 = f70 +atan2_W11 = f71 +atan2_E = f72 +atan2_gamma = f73 +atan2_V11 = f74 +atan2_V12 = f75 +atan2_V7 = f76 +atan2_V8 = f77 +atan2_W7 = f78 +atan2_W8 = f79 +atan2_W3 = f80 +atan2_W4 = f81 +atan2_V3 = f82 +atan2_V4 = f83 +atan2_F = f84 +atan2_gV = f85 +atan2_V10 = f86 +atan2_zcub = f87 +atan2_V6 = f88 +atan2_V9 = f89 +atan2_W10 = f90 +atan2_W6 = f91 +atan2_W2 = f92 +atan2_V2 = f93 + +atan2_alpha = f94 +atan2_alpha_1 = f95 +atan2_gVF = f96 +atan2_V5 = f97 +atan2_W12 = f98 +atan2_W5 = f99 +atan2_alpha_sq = f100 +atan2_Cp = f101 +atan2_V1 = f102 + +atan2_sml_norm = f103 +atan2_FR_tmp = f103 + +atan2_W1 = f104 +atan2_alpha_cub = f105 +atan2_C = f106 +atan2_P = f107 +atan2_d = f108 +atan2_A_hi = f109 +atan2_dsq = f110 +atan2_pd = f111 +atan2_A_lo = f112 +atan2_A = f113 + +atan2_Pp = f114 + +atan2_sgnY = f116 +atan2_pi = f117 +atan2_sgnX = f118 +atan2_sgnXY = f119 + +atan2_3pi_by_4 = f120 +atan2_pi_by_4 = f121 + +//atan2_sF = p7 +//atan2_sT = p6 + +// These coefficients are for atan2. +// You can also use this set to substitute those used in the |X| <= 1 case for atan; +// BUT NOT vice versa. + +///////////////////////////////////////////////////////////// + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +atan2_tb1: +ASM_TYPE_DIRECTIVE(atan2_tb1,@object) +data8 0xB199DD6D2675C40F , 0x0000BFFA // P10 +data8 0xA21922DC45605EA1 , 0x00003FFA // P11 +data8 0xD78F28FC2A592781 , 0x0000BFFA // P8 +data8 0xC2F01E5DDD100DBE , 0x00003FFA // P9 +data8 0x9D89D7D55C3287A5 , 0x00003FFB // P5 +data8 0xF0F03ADB3FC930D3 , 0x00003FFA // P7 +data8 0xF396268151CFB11C , 0x00003FF7 // P17 +data8 0x9D3436AABE218776 , 0x00003FF5 // P19 +data8 0x80D601879218B53A , 0x00003FFA // P13 +data8 0xA2270D30A90AA220 , 0x00003FF9 // P15 +data8 0xCCCCCCCCCCC906CD , 0x00003FFC // P1 +data8 0xE38E38E320A8A098 , 0x00003FFB // P3 +data8 0xFE7E52D2A89995B3 , 0x0000BFEC // P22 +data8 0xC90FDAA22168C235 , 0x00003FFE // pi/4 +ASM_SIZE_DIRECTIVE(atan2_tb1) + +atan2_tb2: +ASM_TYPE_DIRECTIVE(atan2_tb2,@object) +data8 0x9F90FB984D8E39D0 , 0x0000BFF3 // P20 +data8 0xCE585A259BD8374C , 0x00003FF0 // P21 +data8 0xBA2E8B9793955C77 , 0x0000BFFB // P4 +data8 0x88887EBB209E3543 , 0x0000BFFB // P6 +data8 0xD818B4BB43D84BF2 , 0x0000BFF8 // P16 +data8 0xDEC343E068A6D2A8 , 0x0000BFF6 // P18 +data8 0x9297B23CCFFB291F , 0x0000BFFA // P12 +data8 0xD5F4F2182E7A8725 , 0x0000BFF9 // P14 +data8 0xAAAAAAAAAAAAA8A9 , 0x0000BFFD // P0 +data8 0x9249249247E37913 , 0x0000BFFC // P2 +data8 0xC90FDAA22168C235 , 0x00003FFF // pi/2 +data8 0xC90FDAA22168C235 , 0x00004000 // pi +data8 0x96cbe3f9990e91a8 , 0x00004000 // 3pi/4 +ASM_SIZE_DIRECTIVE(atan2_tb2) + + + + +.align 32 +.global atan2# +#ifdef _LIBC +.global __atan2# +.global __ieee754_atan2# +#endif + +//////////////////////////////////////////////////////// + +.section .text +.align 32 + +.proc atan2# +atan2: +#ifdef _LIBC +.proc __atan2# +__atan2: +.proc __ieee754_atan2# +__ieee754_atan2: +#endif +// qnan snan inf norm unorm 0 -+ +// 0 0 1 0 0 0 11 + + +// Y NAN? p10 p11 +// p10 ==> quiet Y and return +// p11 X NAN? p12, p13 +// p12 ==> quiet X and return + +{ .mfi + alloc r32 = ar.pfs,1,5,4,0 + frcpa.s1 atan2_u1_X,p6 = f1,atan2_X + addl EXP_AD_P2 = @ltoff(atan2_tb2), gp +} +{ .mfi + addl EXP_AD_P1 = @ltoff(atan2_tb1), gp + fclass.m.unc p10,p11 = f8, 0xc3 + nop.i 999 +;; +} + +{ .mfi + ld8 EXP_AD_P1 = [EXP_AD_P1] + frcpa.s1 atan2_u1_Y,p7 = f1,atan2_Y + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_two = f1,f1,f1 + nop.i 999 +;; +} + + +{ .mfi + ld8 EXP_AD_P2 = [ EXP_AD_P2] + famax.s1 atan2_Umax = f8,f9 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fmerge.s atan2_absX = f0,atan2_X + nop.i 999 +} +;; + +// p10 Y NAN, quiet and return +{ .mfi + ldfe atan2_P10 = [EXP_AD_P1],16 + fmerge.s atan2_sgnY = atan2_Y,f1 + nop.i 999 +} +{ .mfb + nop.m 999 +(p10) fma.d f8 = f8,f9,f0 +(p10) br.ret.spnt b0 +;; +} + + +{ .mmf + ldfe atan2_P11 = [EXP_AD_P1],16 + ldfe atan2_P20 = [EXP_AD_P2],16 + fmerge.s atan2_sgnX = atan2_X,f1 +;; +} + + +{ .mfi + ldfe atan2_P8 = [EXP_AD_P1],16 + fma.s1 atan2_z1_X = atan2_u1_X, atan2_Y, f0 + nop.i 999 +} +{ .mfi + + ldfe atan2_P21 = [EXP_AD_P2],16 + fma.s1 atan2_z1_Y = atan2_u1_Y, atan2_X, f0 + nop.i 999 +;; +} + +{ .mfi + ldfe atan2_P9 = [EXP_AD_P1],16 + fnma.s1 atan2_B1X = atan2_u1_X, atan2_X, atan2_two + nop.i 999 +} +{ .mfi + + ldfe atan2_P4 = [EXP_AD_P2],16 + fnma.s1 atan2_B1Y = atan2_u1_Y, atan2_Y, atan2_two + nop.i 999 +;; +} + +// p6 (atan2_sT) true if swap +// p7 (atan2_sF) true if no swap +// p11 ==> Y !NAN; X NAN? + +{ .mfi + ldfe atan2_P5 = [EXP_AD_P1],16 +// fcmp.eq.unc.s1 atan2_sF,atan2_sT = atan2_Umax, atan2_X + fcmp.eq.unc.s1 p7,p6 = atan2_Umax, atan2_X + nop.i 999 +} +{ .mfi + ldfe atan2_P6 = [EXP_AD_P2],16 +(p11) fclass.m.unc p12,p13 = f9, 0xc3 + nop.i 999 +;; +} + +{ .mmf + ldfe atan2_P7 = [EXP_AD_P1],16 + ldfe atan2_P16 = [EXP_AD_P2],16 + famin.s1 atan2_Vmin = f8,f9 +;; +} + +// p8 true if X positive +// p9 true if X negative +// both are false is swap is true +{ .mfi + ldfe atan2_P17 = [EXP_AD_P1],16 +//(atan2_sF) fcmp.eq.unc.s1 p8,p9 = atan2_sgnX,f1 +(p7) fcmp.eq.unc.s1 p8,p9 = atan2_sgnX,f1 + nop.i 999 +} +{ .mfi + ldfe atan2_P18 = [EXP_AD_P2],16 + fma.s1 atan2_sgnXY = atan2_sgnX, atan2_sgnY, f0 + nop.i 999 +;; +} + + +{ .mfi + ldfe atan2_P19 = [EXP_AD_P1],16 +//(atan2_sF) fma.s1 atan2_wp = atan2_z1_X, atan2_z1_X, f0 +(p7) fma.s1 atan2_wp = atan2_z1_X, atan2_z1_X, f0 + nop.i 999 +} +{ .mfi + ldfe atan2_P12 = [EXP_AD_P2],16 +//(atan2_sT) fma.s1 atan2_wp = atan2_z1_Y, atan2_z1_Y, f0 +(p6) fma.s1 atan2_wp = atan2_z1_Y, atan2_z1_Y, f0 + nop.i 999 +;; +} + + +{ .mfi + ldfe atan2_P13 = [EXP_AD_P1],16 +//(atan2_sF) fma.s1 atan2_z = atan2_z1_X, atan2_B1X, f0 +(p7) fma.s1 atan2_z = atan2_z1_X, atan2_B1X, f0 + nop.i 999 +} +{ .mfi + ldfe atan2_P14 = [EXP_AD_P2],16 +//(atan2_sT) fma.s1 atan2_z = atan2_z1_Y, atan2_B1Y, f0 +(p6) fma.s1 atan2_z = atan2_z1_Y, atan2_B1Y, f0 + nop.i 999 +;; +} + + +{ .mfi + ldfe atan2_P15 = [EXP_AD_P1],16 +//(atan2_sF) fma.s1 atan2_B1sq = atan2_B1X, atan2_B1X, f0 +(p7) fma.s1 atan2_B1sq = atan2_B1X, atan2_B1X, f0 + nop.i 999 +} +{ .mfi + ldfe atan2_P0 = [EXP_AD_P2],16 +//(atan2_sT) fma.s1 atan2_B1sq = atan2_B1Y, atan2_B1Y, f0 +(p6) fma.s1 atan2_B1sq = atan2_B1Y, atan2_B1Y, f0 + nop.i 999 +;; +} + + +// p12 ==> X NAN, quiet and return +{ .mfi + ldfe atan2_P1 = [EXP_AD_P1],16 + fmerge.s atan2_Umax = f0,atan2_Umax + nop.i 999 +} +{ .mfb + ldfe atan2_P2 = [EXP_AD_P2],16 +(p12) fma.d f8 = f9,f8,f0 +(p12) br.ret.spnt b0 +;; +} + + +// p10 ==> x inf y ? +// p11 ==> x !inf y ? +{ .mfi + ldfe atan2_P3 = [EXP_AD_P1],16 + fmerge.s atan2_Vmin = f0,atan2_Vmin + nop.i 999 +} +{ .mfi + ldfe atan2_Pi_by_2 = [EXP_AD_P2],16 + fclass.m.unc p10,p11 = f9, 0x23 + nop.i 999 +;; +} + + +{ .mmf + ldfe atan2_P22 = [EXP_AD_P1],16 + ldfe atan2_pi = [EXP_AD_P2],16 + nop.f 999 +;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p12,p13=f9,f8 // Dummy to catch denormal and invalid + nop.i 999 +;; +} + + +{ .mfi + ldfe atan2_pi_by_4 = [EXP_AD_P1],16 +//(atan2_sT) fmerge.ns atan2_sgnXY = atan2_sgnXY, atan2_sgnXY +(p6) fmerge.ns atan2_sgnXY = atan2_sgnXY, atan2_sgnXY + nop.i 999 +} +{ .mfi + ldfe atan2_3pi_by_4 = [EXP_AD_P2],16 + fma.s1 atan2_w = atan2_wp, atan2_B1sq,f0 + nop.i 999 +;; +} + +// p12 ==> x inf y inf +// p13 ==> x inf y !inf +{ .mfi + nop.m 999 + fmerge.s atan2_z = f0, atan2_z + nop.i 999 +;; +} + +{ .mfi + nop.m 99 +(p10) fclass.m.unc p12,p13 = f8, 0x23 + nop.i 999 +} +{ .mfi + nop.m 99 +(p11) fclass.m.unc p14,p15 = f8, 0x23 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 +(p12) fcmp.eq.unc.s1 p10,p11 = atan2_sgnX,f1 + nop.i 99 +;; +} + + +{ .mfb + mov atan2_GR_sml_exp = 0x1 // Small exponent for making small norm +(p14) fma.d f8 = atan2_sgnY, atan2_Pi_by_2, f0 +(p14) br.ret.spnt b0 +;; +} + +// Make a very small normal in case need to force inexact and underflow +{ .mfi + setf.exp atan2_sml_norm = atan2_GR_sml_exp + fma.s1 atan2_V13 = atan2_w, atan2_P11, atan2_P10 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W11 = atan2_w, atan2_P21, atan2_P20 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2_E = atan2_Vmin, atan2_z, atan2_Umax + nop.i 999 +} +{ .mfi + nop.m 999 + fnma.s1 atan2_gamma = atan2_Umax, atan2_z, f1 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_V11 = atan2_w, atan2_P9, atan2_P8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_V12 = atan2_w, atan2_w, f0 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_V7 = atan2_w, atan2_P5 , atan2_P4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_V8 = atan2_w, atan2_P7 , atan2_P6 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_W7 = atan2_w, atan2_P17, atan2_P16 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W8 = atan2_w, atan2_P19, atan2_P18 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_W3 = atan2_w, atan2_P13, atan2_P12 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W4 = atan2_w, atan2_P15, atan2_P14 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_V3 = atan2_w, atan2_P1 , atan2_P0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_V4 = atan2_w, atan2_P3 , atan2_P2 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_zcub = atan2_z, atan2_w, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fnma.s1 atan2_gV = atan2_Umax, atan2_z, atan2_Vmin + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + frcpa.s1 atan2_F,p15 = f1, atan2_E + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_V10 = atan2_V12, atan2_V13, atan2_V11 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_V6 = atan2_V12, atan2_V8 , atan2_V7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_V9 = atan2_V12, atan2_V12, f0 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_W10 = atan2_V12, atan2_P22 , atan2_W11 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W6 = atan2_V12, atan2_W8 , atan2_W7 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_W2 = atan2_V12, atan2_W4 , atan2_W3 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_V2 = atan2_V12, atan2_V4 , atan2_V3 + nop.i 999 +;; +} + + +// Both X and Y are INF +// p10 ==> X + +// p11 ==> X - +.pred.rel "mutex",p10,p11 +{ .mfb + nop.m 999 +(p10) fma.d f8 = atan2_sgnY, atan2_pi_by_4, f0 +(p10) br.ret.spnt b0 +} +{ .mfb + nop.m 999 +(p11) fma.d f8 = atan2_sgnY, atan2_3pi_by_4, f0 +(p11) br.ret.spnt b0 +;; +} + + +.pred.rel "mutex",p8,p9,p6 +{ .mfi + nop.m 999 + fnma.s1 atan2_alpha = atan2_E, atan2_F, f1 + nop.i 999 +} +{ .mfi + nop.m 999 + fnma.s1 atan2_alpha_1 = atan2_E, atan2_F, atan2_two + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 +//(atan2_sT) fmerge.s atan2_P = atan2_Y, atan2_Pi_by_2 +(p6) fmerge.s atan2_P = atan2_Y, atan2_Pi_by_2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_gVF = atan2_gV, atan2_F, f0 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2_V5 = atan2_V9, atan2_V10, atan2_V6 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W12 = atan2_V9, atan2_V9, f0 + nop.i 999 +;; +} + + + +{ .mfi + nop.m 999 +(p8) fmerge.s atan2_P = atan2_sgnY, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W5 = atan2_V9, atan2_W10, atan2_W6 + nop.i 999 +;; +} + + + + +{ .mfi + nop.m 999 +(p9) fmerge.s atan2_P = atan2_sgnY, atan2_pi + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2_alpha_sq = atan2_alpha, atan2_alpha, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_Cp = atan2_alpha, atan2_alpha_1, f1 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2_V1 = atan2_V9, atan2_V5, atan2_V2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_W12 = atan2_V9, atan2_W12, f0 + nop.i 999 +;; +} + + +// p13 ==> x inf y !inf +{ .mfi + nop.m 999 + fma.s1 atan2_W1 = atan2_V9, atan2_W5, atan2_W2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fcmp.eq.unc.s1 p10,p11 = atan2_sgnX,f1 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2_alpha_cub = atan2_alpha, atan2_alpha_sq, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_C = atan2_gVF, atan2_Cp, f0 + nop.i 999 +;; +} + +.pred.rel "mutex",p10,p11 +// x inf y !inf +{ .mfb + nop.m 999 +(p10) fmerge.s f8 = atan2_sgnY, f0 +(p10) br.ret.spnt b0 +} +{ .mfb + nop.m 999 +(p11) fma.d f8 = atan2_sgnY, atan2_pi, f0 +(p11) br.ret.spnt b0 +;; +} + + + +// p10 ==> y 0 x? +// p11 ==> y !0 x? +{ .mfi + nop.m 999 + fclass.m.unc p10,p11 = f8, 0x07 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 +(p8) fmerge.s atan2_sml_norm = atan2_sgnY, atan2_sml_norm + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_Pp = atan2_W12, atan2_W1, atan2_V1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_d = atan2_alpha_cub, atan2_C, atan2_C + nop.i 999 +;; +} + +// p12 ==> y0 x0 +// p13 ==> y0 x!0 +// p14 ==> y!0 x0 +// p15 ==> y!0 x!0 +{ .mfi + nop.m 999 +(p10) fclass.m.unc p12,p13 = f9, 0x07 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fclass.m.unc p14,p15 = f9, 0x07 + nop.i 999 +;; +} + + + + +{ .mfb + nop.m 999 +(p13) fcmp.eq.unc.s1 p10,p11 = atan2_sgnX,f1 +(p12) br.spnt ATAN2_ERROR +;; +} + + + +{ .mfi + nop.m 999 + fma.s1 atan2_pd = atan2_P0, atan2_d, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2_dsq = atan2_d, atan2_d, f0 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2_A_hi = atan2_zcub, atan2_Pp, atan2_z + nop.i 999 +} +{ .mfb + nop.m 999 +(p14) fma.d f8 = atan2_sgnY, atan2_Pi_by_2, f0 +(p14) br.ret.spnt b0 +;; +} + + + +{ .mfb + nop.m 999 +(p10) fmerge.s f8 = atan2_sgnY, f0 +(p10) br.ret.spnt b0 +} +{ .mfb + nop.m 999 +(p11) fma.d f8 = atan2_sgnY, atan2_pi, f0 +(p11) br.ret.spnt b0 +;; +} + + + +{ .mfi + nop.m 999 + fma.s1 atan2_A_lo = atan2_pd, atan2_dsq, atan2_d + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2_A = atan2_A_hi, f1, atan2_A_lo + nop.i 999 +;; +} + +// Force inexact and possibly underflow if very small results +{ .mfi + nop.m 999 +(p8) fma.d atan2_FR_tmp = atan2_sgnXY, atan2_A, atan2_sml_norm + nop.i 999 +} +{ .mfb + nop.m 999 + fma.d f8 = atan2_sgnXY, atan2_A, atan2_P + br.ret.sptk b0 +;; +} + +ATAN2_ERROR: + +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p10,p11 = atan2_sgnX,f1 + nop.i 999 +} +;; + +{ .mfi + mov atan2_GR_tag = 37 +(p10) fmerge.s f10 = atan2_sgnY, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fma.d f10 = atan2_sgnY, atan2_pi, f0 + nop.i 999 +;; +} +.endp atan2# +ASM_SIZE_DIRECTIVE(atan2#) + + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + +.proc __libm_error_region +__libm_error_region: +.prologue +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f8,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = f9 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f10 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_atan2f.S glibc-2.2.3/sysdeps/ia64/fpu/e_atan2f.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_atan2f.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_atan2f.S Mon Feb 19 00:42:25 2001 @@ -0,0 +1,907 @@ +.file "atan2f.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 6/1/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + +// History +//============================================================== +// 6/01/00 Initial version +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 8/17/00 Changed predicate register macro-usage to direct predicate +// names due to an assembler bug. +// 1/05/01 Fixed flag settings for denormal input. +// 1/19/01 Added documentation +// 1/30/01 Improved speed + +// Description +//========================================= +// The atan2 function computes the principle value of the arc tangent of y/x using +// the signs of both arguments to determine the quadrant of the return value. +// A domain error may occur if both arguments are zero. + +// The atan2 function returns the arc tangent of y/x in the range [-pi,+pi] radians. + +//.. +//..Let (v,u) = (y,x) if |y| <= |x|, and (v,u) = (x,y) otherwise. Note that +//..v and u can be negative. We state the relationship between atan2(y,x) and +//..atan(v/u). +//.. +//..Let swap = false if v = y, and swap = true if v = x. +//..Define C according to the matrix +//.. +//.. TABLE FOR C +//.. x +ve x -ve +//.. no swap (swap = false) sgn(y)*0 sgn(y)*pi +//.. swap (swap = true ) sgn(y)*pi/2 sgn(y)*pi/2 +//.. +//.. atan2(y,x) = C + atan(v/u) if no swap +//.. atan2(y,x) = C - atan(v/u) if swap +//.. +//..These relationship is more efficient to compute as we accommodate signs in v and u +//..saving the need to obtain the absolute value before computation can proceed. +//.. +//..Suppose (v,u) = (y,x), we calculate atan(v/u) as follows: +//..A = y * frcpa(x) (so A = (y/x)(1 - beta)) +//..atan(y/x) = atan(A) + atan( ((y/x)-A))/(1 + (y/x)A) ), the second term is +//..a correction. +//..atan(A) is approximated by a polynomial +//..A + p1 A^3 + p2 A^5 + ... + p10 A^21, +//..atan(G) is approximated as follows: +//..Let G = (y - Ax)/(x + Ay), atan(G) can be approximated by G + g * p1 +//..where g is a limited precision approximation to G via g = (y - Ax)*frcpa(x + Ay). +//.. +//..Suppose (v,u) = (x,y), we calculate atan(v/u) as follows: +//..Z = x * frcpa(y) (so Z = (x/y)(1 - beta)) +//..atan(x/y) = atan(Z) + atan( ((x/y)-Z))/(1 + (x/y)Z) ), the second term is +//..a correction. +//..atan(Z) is approximated by a polynomial +//..Z + p1 Z^3 + p2 Z^5 + ... + p10 Z^21, +//..atan(T) is approximated as follows: +//..Let T = (x - Ay)/(y + Ax), atan(T) can be approximated by T + t * p1 +//..where t is a limited precision approximation to T via t = (x - Ay)*frcpa(y + Ax). +//.. +//.. +//..A = y * frcpa(x) +//..atan(A) ~=~ A + p1 A^3 + ... + P10 A^21 +//.. +//..This polynomial is computed as follows: +//..Asq = A*A; Acub = A*Asq, A4 = Asq*Asq +//..A5 = Asq*Acub, A6 = Asq*A4; A11 = A5 * A6 +//.. +//..poly_A1 = p9 + Asq*p10, poly_A2 = p7 + Asq*p8, poly_A3 = p5 + Asq*p6 +//..poly_A1 = poly_A2 + A4 * poly_A1 +//..poly_A1 = poly_A3 + A4 * poly_A1 +//.. +//..poly_A4 = p1 * A +//,,poly_A5 = p3 + Asq * p4, poly_A4 = A + Asq*poly_A4 +//..poly_A5 = p2 + Asq * poly_A5 +//..poly_A4 = poly_A4 + A5 * poly_A5 +//.. +//..atan_A = poly_A4 + A11 * poly_A1 +//.. +//..atan(G) is approximated as follows: +//..G_numer = y - A*x, G_denom = x + A*y +//..H1 = frcpa(G_denom) +//..H_beta = 1 - H1 * G_denom +//..H2 = H1 + H1 * H_beta +//..H_beta2 = H_beta*H_beta +//..H3 = H2 + H2*H_beta2 +//..g = H1 * G_numer; gsq = g*g; atan_G = g*p1, atan_G = atan_G*gsq +//..atan_G = G_numer*H3 + atan_G +//.. +//.. +//..A = y * frcpa(x) +//..atan(A) ~=~ A + p1 A^3 + ... + P10 A^21 +//.. +//..This polynomial is computed as follows: +//..Asq = A*A; Acub = A*Asq, A4 = Asq*Asq +//..A5 = Asq*Acub, A6 = Asq*A4; A11 = A5 * A6 +//.. +//..poly_A1 = p9 + Asq*p10, poly_A2 = p7 + Asq*p8, poly_A3 = p5 + Asq*p6 +//..poly_A1 = poly_A2 + A4 * poly_A1 +//..poly_A1 = poly_A3 + A4 * poly_A1 +//.. +//..poly_A4 = p1 * A +//,,poly_A5 = p3 + Asq * p4, poly_A4 = A + Asq*poly_A4 +//..poly_A5 = p2 + Asq * poly_A5 +//..poly_A4 = poly_A4 + A5 * poly_A5 +//.. +//..atan_A = poly_A4 + A11 * poly_A1 +//.. +//.. +//..==================================================================== +//.. COEFFICIENTS USED IN THE COMPUTATION +//..==================================================================== + +//coef_pj, j = 1,2,...,10; atan(A) ~=~ A + p1 A^3 + p2 A^5 + ... + p10 A^21 +// +// coef_p1 = -.3333332707155439167401311806315789E+00 +// coef_p1 in dbl = BFD5 5555 1219 1621 +// +// coef_p2 = .1999967670926658391827857030875748E+00 +// coef_p2 in dbl = 3FC9 997E 7AFB FF4E +// +// coef_p3 = -.1427989384500152360161563301087296E+00 +// coef_p3 in dbl = BFC2 473C 5145 EE38 +// +// coef_p4 = .1105852823460720770079031213661163E+00 +// coef_p4 in dbl = 3FBC 4F51 2B18 65F5 +// +// coef_p5 = -.8811839915595312348625710228448363E-01 +// coef_p5 in dbl = BFB6 8EED 6A8C FA32 +// +// coef_p6 = .6742329836955067042153645159059714E-01 +// coef_p6 in dbl = 3FB1 42A7 3D7C 54E3 +// +// coef_p7 = -.4468571068774672908561591262231909E-01 +// coef_p7 in dbl = BFA6 E10B A401 393F +// +// coef_p8 = .2252333246746511135532726960586493E-01 +// coef_p8 in dbl = 3F97 105B 4160 F86B +// +// coef_p9 = -.7303884867007574742501716845542314E-02 +// coef_p9 in dbl = BF7D EAAD AA33 6451 +// +// coef_p10 = .1109686868355312093949039454619058E-02 +// coef_p10 in dbl = 3F52 2E5D 33BC 9BAA +// + +// Special values +//============================================================== +// Y x Result +// +number +inf +0 +// -number +inf -0 +// +number -inf +pi +// -number -inf -pi +// +// +inf +number +pi/2 +// -inf +number -pi/2 +// +inf -number +pi/2 +// -inf -number -pi/2 +// +// +inf +inf +pi/4 +// -inf +inf -pi/4 +// +inf -inf +3pi/4 +// -inf -inf -3pi/4 +// +// +1 +1 +pi/4 +// -1 +1 -pi/4 +// +1 -1 +3pi/4 +// -1 -1 -3pi/4 +// +// +number +0 +pi/2 // does not raise DBZ +// -number +0 -pi/2 // does not raise DBZ +// +number -0 +pi/2 // does not raise DBZ +// -number -0 -pi/2 // does not raise DBZ +// +// +0 +number +0 +// -0 +number -0 +// +0 -number +pi +// -0 -number -pi +// +// +0 +0 +0 // does not raise invalid +// -0 +0 -0 // does not raise invalid +// +0 -0 +pi // does not raise invalid +// -0 -0 -pi // does not raise invalid +// +// Nan anything quiet Y +// anything NaN quiet X + +// atan2(+-0/+-0) sets double error tag to 37 +// atan2f(+-0/+-0) sets single error tag to 38 +// These are domain errors. + +#include "libm_support.h" + +// +// Assembly macros +//========================================= + + +// integer registers +atan2f_GR_Addr_1 = r33 +atan2f_GR_Addr_2 = r34 +GR_SAVE_B0 = r35 + +GR_SAVE_PFS = r36 +GR_SAVE_GP = r37 + +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +GR_Parameter_TAG = r41 + +// floating point registers +atan2f_coef_p1 = f32 +atan2f_coef_p10 = f33 +atan2f_coef_p7 = f34 +atan2f_coef_p6 = f35 + +atan2f_coef_p3 = f36 +atan2f_coef_p2 = f37 +atan2f_coef_p9 = f38 +atan2f_coef_p8 = f39 +atan2f_coef_p5 = f40 + +atan2f_coef_p4 = f41 +atan2f_const_piby2 = f42 +atan2f_const_pi = f43 +atan2f_const_piby4 = f44 +atan2f_const_3piby4 = f45 + +atan2f_xsq = f46 +atan2f_ysq = f47 +atan2f_xy = f48 +atan2f_const_1 = f49 +atan2f_sgn_Y = f50 + +atan2f_Z0 = f51 +atan2f_A0 = f52 +atan2f_Z = f53 +atan2f_A = f54 +atan2f_C = f55 + +atan2f_U = f56 +atan2f_Usq = f57 +atan2f_U4 = f58 +atan2f_U6 = f59 +atan2f_U8 = f60 + +atan2f_poly_u109 = f61 +atan2f_poly_u87 = f62 +atan2f_poly_u65 = f63 +atan2f_poly_u43 = f64 +atan2f_poly_u21 = f65 + +atan2f_poly_u10to7 = f66 +atan2f_poly_u6to3 = f67 +atan2f_poly_u10to3 = f68 +atan2f_poly_u10to0 = f69 +atan2f_poly_u210 = f70 + +atan2f_T_numer = f71 +atan2f_T_denom = f72 +atan2f_G_numer = f73 +atan2f_G_denom = f74 +atan2f_p1rnum = f75 + +atan2f_R_denom = f76 +atan2f_R_numer = f77 +atan2f_pR = f78 +atan2f_pRC = f79 +atan2f_pQRC = f80 + +atan2f_Q1 = f81 +atan2f_Q_beta = f82 +atan2f_Q2 = f83 +atan2f_Q_beta2 = f84 +atan2f_Q3 = f85 + +atan2f_r = f86 +atan2f_rsq = f87 +atan2f_poly_atan_U = f88 + + +// predicate registers +//atan2f_Pred_Swap = p6 // |y| > |x| +//atan2f_Pred_noSwap = p7 // |y| <= |x| +//atan2f_Pred_Xpos = p8 // x >= 0 +//atan2f_Pred_Xneg = p9 // x < 0 + + +.data + +.align 16 + +atan2f_coef_table1: +ASM_TYPE_DIRECTIVE(atan2f_coef_table1,@object) +data8 0xBFD5555512191621 // p1 +data8 0x3F522E5D33BC9BAA // p10 +data8 0xBFA6E10BA401393F // p7 +data8 0x3FB142A73D7C54E3 // p6 +data8 0xBFC2473C5145EE38 // p3 +data8 0x3FC9997E7AFBFF4E // p2 +ASM_SIZE_DIRECTIVE(atan2f_coef_table1) + +atan2f_coef_table2: +ASM_TYPE_DIRECTIVE(atan2f_coef_table2,@object) +data8 0xBF7DEAADAA336451 // p9 +data8 0x3F97105B4160F86B // p8 +data8 0xBFB68EED6A8CFA32 // p5 +data8 0x3FBC4F512B1865F5 // p4 +data8 0x3ff921fb54442d18 // pi/2 +data8 0x400921fb54442d18 // pi +data8 0x3fe921fb54442d18 // pi/4 +data8 0x4002d97c7f3321d2 // 3pi/4 +ASM_SIZE_DIRECTIVE(atan2f_coef_table2) + + + +.global atan2f +#ifdef _LIBC +.global __atan2f +.global __ieee754_atan2f +#endif + +.text +.align 32 + +atan2f: +.proc atan2f +#ifdef _LIBC +.proc __atan2f +__atan2f: +.proc __ieee754_atan2f +__ieee754_atan2f: +#endif + + + +{ .mfi + alloc r32 = ar.pfs,1,5,4,0 + frcpa.s1 atan2f_Z0,p0 = f1,f8 // Approx to 1/y + nop.i 999 +} +{ .mfi + addl atan2f_GR_Addr_1 = @ltoff(atan2f_coef_table1),gp + fma.s1 atan2f_xsq = f9,f9,f0 + nop.i 999 ;; +} + + +{ .mfi + ld8 atan2f_GR_Addr_1 = [atan2f_GR_Addr_1] + frcpa.s1 atan2f_A0,p0 = f1,f9 // Approx to 1/x + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_ysq = f8,f8,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.ge.s1 p8,p9 = f9,f0 // Set p8 if x>=0, p9 if x<0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_xy = f9,f8,f0 + nop.i 999 ;; +} + + +{ .mfi + add atan2f_GR_Addr_2 = 0x30, atan2f_GR_Addr_1 + fmerge.s atan2f_sgn_Y = f8,f1 + nop.i 999 ;; +} + +{ .mmf + ldfpd atan2f_coef_p1,atan2f_coef_p10 = [atan2f_GR_Addr_1],16 + ldfpd atan2f_coef_p9,atan2f_coef_p8 = [atan2f_GR_Addr_2],16 + fclass.m p10,p0 = f9,0xe7 // Test x @inf|@snan|@qnan|@zero +} +;; + +{ .mfi + ldfpd atan2f_coef_p7,atan2f_coef_p6 = [atan2f_GR_Addr_1],16 + fma.s1 atan2f_T_denom = atan2f_Z0,atan2f_xsq,f8 + nop.i 999 +} +{ .mfi + ldfpd atan2f_coef_p5,atan2f_coef_p4 = [atan2f_GR_Addr_2],16 + fma.s1 atan2f_Z = atan2f_Z0,f9,f0 + nop.i 999 ;; +} + + +{ .mfi + ldfpd atan2f_coef_p3,atan2f_coef_p2 = [atan2f_GR_Addr_1],16 + fma.s1 atan2f_G_denom = atan2f_A0,atan2f_ysq,f9 + nop.i 999 +} +{ .mfi + ldfpd atan2f_const_piby2,atan2f_const_pi = [atan2f_GR_Addr_2],16 + fma.s1 atan2f_A = atan2f_A0,f8,f0 + nop.i 999 ;; +} + +{ .mfi + ldfpd atan2f_const_piby4,atan2f_const_3piby4 = [atan2f_GR_Addr_2] + fclass.m p11,p0 = f8,0xe7 // Test y @inf|@snan|@qnan|@zero + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 atan2f_T_numer = atan2f_Z0,atan2f_xy,f9 +(p10) br.cond.spnt ATAN2F_XY_INF_NAN_ZERO ;; // Branch on x nan,inf,zero +} + + +// p6 if |y|>|x|, p7 if |x|>=|y| , use xsq and ysq for test +{ .mfi + nop.m 999 + fcmp.gt.s1 p6,p7 = atan2f_ysq,atan2f_xsq + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 atan2f_G_numer = atan2f_A0,atan2f_xy,f8 +(p11) br.cond.spnt ATAN2F_XY_INF_NAN_ZERO ;; // Branch on y nan,inf,zero +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 atan2f_const_1 = atan2f_sgn_Y,f0,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 atan2f_const_1 = atan2f_sgn_Y,f1,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fnma.s1 atan2f_U = atan2f_Z,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fma.s1 atan2f_Usq = atan2f_Z,atan2f_Z,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan2f_U = atan2f_A,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan2f_Usq = atan2f_A,atan2f_A,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) frcpa.s1 atan2f_Q1,p0 = f1,atan2f_T_denom + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fma.s1 atan2f_R_denom = atan2f_T_denom,f1,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) frcpa.s1 atan2f_Q1,p0 = f1,atan2f_G_denom + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan2f_R_denom = atan2f_G_denom,f1,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fnma.s1 atan2f_R_numer = atan2f_T_numer,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan2f_R_numer = atan2f_G_numer,f1,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fnma.s1 atan2f_p1rnum = atan2f_T_numer,atan2f_coef_p1,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan2f_p1rnum = atan2f_G_numer,atan2f_coef_p1,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2f_U4 = atan2f_Usq,atan2f_Usq,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u109 = atan2f_Usq,atan2f_coef_p10,atan2f_coef_p9 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u87 = atan2f_Usq,atan2f_coef_p8,atan2f_coef_p7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u65 = atan2f_Usq,atan2f_coef_p6,atan2f_coef_p5 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u43 = atan2f_Usq,atan2f_coef_p4,atan2f_coef_p3 + nop.i 999 +} +{ .mfi + nop.m 999 + fnma.s1 atan2f_Q_beta = atan2f_Q1,atan2f_R_denom,f1 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u21 = atan2f_Usq,atan2f_coef_p2,atan2f_coef_p1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_r = atan2f_Q1,atan2f_R_numer,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fma.s1 atan2f_C = atan2f_sgn_Y,atan2f_const_piby2,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan2f_C = atan2f_const_1,atan2f_const_pi,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_U6 = atan2f_U4,atan2f_Usq,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_U8 = atan2f_U4,atan2f_U4,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u10to7 = atan2f_U4,atan2f_poly_u109,atan2f_poly_u87 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_pR = atan2f_p1rnum,atan2f_Q1,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u6to3 = atan2f_U4,atan2f_poly_u65,atan2f_poly_u43 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_Q2 = atan2f_Q1,atan2f_Q_beta,atan2f_Q1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_Q_beta2 = atan2f_Q_beta,atan2f_Q_beta,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_rsq = atan2f_r,atan2f_r,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u210 = atan2f_Usq,atan2f_poly_u21,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p8,p0 = f8,f9 // Dummy op to set flag on denormal inputs + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u10to3 = atan2f_U8,atan2f_poly_u10to7,atan2f_poly_u6to3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_Q3 = atan2f_Q2,atan2f_Q_beta2,atan2f_Q2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atan2f_pRC = atan2f_rsq,atan2f_pR,atan2f_C + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_poly_u10to0 = atan2f_U6,atan2f_poly_u10to3,atan2f_poly_u210 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 atan2f_pQRC = atan2f_R_numer,atan2f_Q3,atan2f_pRC + nop.i 999 ;; +} + +{ .mfb + nop.m 999 + fma.s.s0 f8 = atan2f_U,atan2f_poly_u10to0,atan2f_pQRC + br.ret.sptk b0 ;; +} + + + +ATAN2F_XY_INF_NAN_ZERO: + +{ .mfi + nop.m 999 + fclass.m p10,p0 = f8,0xc3 // Is y nan + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fclass.m p12,p0 = f9,0xc3 // Is x nan + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fclass.m p6,p0 = f9,0x21 // Is x +inf + nop.i 999 +} +{ .mfb + nop.m 999 +(p10) fma.s f8 = f9,f8,f0 // Result quietized y if y is nan +(p10) br.ret.spnt b0 // Exit if y is nan +} +;; + + +{ .mfi + nop.m 999 +(p6) fclass.m.unc p7,p8 = f8,0x23 // x +inf, is y inf + nop.i 999 +} +{ .mfb + nop.m 999 +(p12) fnorm.s f8 = f9 // Result quietized x if x is nan, y not nan +(p12) br.ret.spnt b0 // Exit if x is nan, y not nan +} +;; + +// Here if x or y inf, or x or y zero +{ .mfi + nop.m 999 + fcmp.eq.s0 p15,p0 = f8,f9 // Dummy op to set flag on denormal inputs + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fclass.m p11,p12 = f9,0x22 // Is x -inf + nop.i 999 +} +{ .mfb + nop.m 999 +(p7) fma.s f8 = atan2f_sgn_Y, atan2f_const_piby4,f0 // Result +-pi/4 +(p7) br.ret.spnt b0 // Exit if x +inf and y inf +} +;; + +{ .mfb + nop.m 999 +(p8) fmerge.s f8 = f8,f0 // If x +inf and y not inf, result +-0 +(p8) br.ret.spnt b0 // Exit if x +inf and y not inf +} +;; + +{ .mfi + nop.m 999 +(p12) fclass.m.unc p13,p0 = f8,0x23 // x not -inf, is y inf + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p11) fclass.m.unc p14,p15 = f8,0x23 // x -inf, is y inf + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fclass.m p6,p7 = f9,0x7 // Is x zero + nop.i 999 +} +{ .mfb + nop.m 999 +(p13) fma.s f8 = atan2f_sgn_Y, atan2f_const_piby2,f0 // Result +-pi/2 +(p13) br.ret.spnt b0 // Exit if x not -inf and y inf +} +;; + +{ .mfi + nop.m 999 +(p14) fma.s f8 = atan2f_sgn_Y, atan2f_const_3piby4,f0 // Result +-3pi/4 + nop.i 999 +} +{ .mfb + nop.m 999 +(p15) fma.s f8 = atan2f_sgn_Y, atan2f_const_pi,f0 // Result +-pi +(p11) br.ret.spnt b0 // Exit if x -inf +} +;; + +// Here if x or y zero +{ .mfi + nop.m 999 +(p7) fclass.m.unc p8,p9 = f9,0x19 // x not zero, y zero, is x > zero + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p6) fclass.m.unc p10,p11 = f8,0x7 // x zero, is y zero + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p8) fmerge.s f8 = f8, f0 // x > zero and y zero, result is +-zero + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fma.s f8 = atan2f_sgn_Y, atan2f_const_pi,f0 // x < 0, y 0, result +-pi +(p10) br.cond.spnt __libm_error_region // Branch if x zero and y zero +} +;; + +{ .mfb + nop.m 999 +(p11) fma.s f8 = atan2f_sgn_Y, atan2f_const_piby2,f0 // x zero, y not zero + br.ret.sptk b0 // Final special case exit +} +;; + + +.endp atan2f +ASM_SIZE_DIRECTIVE(atan2f) + + +.proc __libm_error_region +__libm_error_region: +.prologue + mov GR_Parameter_TAG = 38 + fclass.m p10,p11 = f9,0x5 // @zero | @pos +;; +(p10) fmerge.s f10 = f8, f0 +(p11) fma.s f10 = atan2f_sgn_Y, atan2f_const_pi,f0 +;; + +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} + +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +} +;; + +{ .mmi + stfs [GR_Parameter_Y] = f9,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +} +;; + + +.body +{ .mib + stfs [GR_Parameter_X] = f8 // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = f10 // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +} +;; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +} +;; + +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +} +;; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_atan2l.c glibc-2.2.3/sysdeps/ia64/fpu/e_atan2l.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_atan2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_atan2l.c Mon Feb 19 00:42:32 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_cosh.S glibc-2.2.3/sysdeps/ia64/fpu/e_cosh.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_cosh.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_cosh.S Mon Feb 19 00:42:43 2001 @@ -0,0 +1,1142 @@ +.file "cosh.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// API +//============================================================== +// double = cosh(double) +// input floating point f8 +// output floating point f8 + + +// Overview of operation +//============================================================== +// There are four paths + +// 1. |x| < 0.25 COSH_BY_POLY +// 2. |x| < 32 COSH_BY_TBL +// 3. |x| < 2^14 COSH_BY_EXP +// 4. |x_ >= 2^14 COSH_HUGE + +// For paths 1, and 2 SAFE is always 1. +// For path 4, Safe is always 0. +// SAFE = 1 means we cannot overflow. + +#include "libm_support.h" + +// Assembly macros +//============================================================== +cosh_FR_X = f44 +cosh_FR_SGNX = f40 + +cosh_FR_Inv_log2by64 = f9 +cosh_FR_log2by64_lo = f11 +cosh_FR_log2by64_hi = f10 + +cosh_FR_A1 = f9 +cosh_FR_A2 = f10 +cosh_FR_A3 = f11 + +cosh_FR_Rcub = f12 +cosh_FR_M_temp = f13 +cosh_FR_R_temp = f13 +cosh_FR_Rsq = f13 +cosh_FR_R = f14 + +cosh_FR_M = f38 + +cosh_FR_B1 = f15 +cosh_FR_B2 = f32 +cosh_FR_B3 = f33 + +cosh_FR_peven_temp1 = f34 +cosh_FR_peven_temp2 = f35 +cosh_FR_peven = f36 + +cosh_FR_podd_temp1 = f34 +cosh_FR_podd_temp2 = f35 +cosh_FR_podd = f37 + +cosh_FR_J_temp = f9 +cosh_FR_J = f10 + +cosh_FR_Mmj = f39 + +cosh_FR_N_temp1 = f11 +cosh_FR_N_temp2 = f12 +cosh_FR_N = f13 + +cosh_FR_spos = f14 +cosh_FR_sneg = f15 + +cosh_FR_Tjhi = f32 +cosh_FR_Tjlo = f33 +cosh_FR_Tmjhi = f34 +cosh_FR_Tmjlo = f35 + +GR_mJ = r35 +GR_J = r36 + +AD_mJ = r38 +AD_J = r39 + +cosh_FR_C_hi = f9 +cosh_FR_C_hi_temp = f10 +cosh_FR_C_lo_temp1 = f11 +cosh_FR_C_lo_temp2 = f12 +cosh_FR_C_lo_temp3 = f13 + +cosh_FR_C_lo = f38 +cosh_FR_S_hi = f39 + +cosh_FR_S_hi_temp1 = f10 +cosh_FR_Y_hi = f11 +cosh_FR_Y_lo_temp = f12 +cosh_FR_Y_lo = f13 +cosh_FR_COSH = f9 + +cosh_FR_X2 = f9 +cosh_FR_X4 = f10 + +cosh_FR_P1 = f14 +cosh_FR_P2 = f15 +cosh_FR_P3 = f32 +cosh_FR_P4 = f33 +cosh_FR_P5 = f34 +cosh_FR_P6 = f35 + +cosh_FR_TINY_THRESH = f9 + +cosh_FR_COSH_temp = f10 +cosh_FR_SCALE = f11 + +cosh_FR_hi_lo = f10 + +cosh_FR_poly_podd_temp1 = f11 +cosh_FR_poly_podd_temp2 = f13 +cosh_FR_poly_peven_temp1 = f11 +cosh_FR_poly_peven_temp2 = f13 + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 + + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +double_cosh_arg_reduction: +ASM_TYPE_DIRECTIVE(double_cosh_arg_reduction,@object) + data8 0xB8AA3B295C17F0BC, 0x00004005 + data8 0xB17217F7D1000000, 0x00003FF8 + data8 0xCF79ABC9E3B39804, 0x00003FD0 +ASM_SIZE_DIRECTIVE(double_cosh_arg_reduction) + +double_cosh_p_table: +ASM_TYPE_DIRECTIVE(double_cosh_p_table,@object) + data8 0x8000000000000000, 0x00003FFE + data8 0xAAAAAAAAAAAAAB80, 0x00003FFA + data8 0xB60B60B60B4FE884, 0x00003FF5 + data8 0xD00D00D1021D7370, 0x00003FEF + data8 0x93F27740C0C2F1CC, 0x00003FE9 + data8 0x8FA02AC65BCBD5BC, 0x00003FE2 +ASM_SIZE_DIRECTIVE(double_cosh_p_table) + +double_cosh_ab_table: +ASM_TYPE_DIRECTIVE(double_cosh_ab_table,@object) + data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC + data8 0x88888888884ECDD5, 0x00003FF8 + data8 0xD00D0C6DCC26A86B, 0x00003FF2 + data8 0x8000000000000002, 0x00003FFE + data8 0xAAAAAAAAAA402C77, 0x00003FFA + data8 0xB60B6CC96BDB144D, 0x00003FF5 +ASM_SIZE_DIRECTIVE(double_cosh_ab_table) + +double_cosh_j_table: +ASM_TYPE_DIRECTIVE(double_cosh_j_table,@object) + data8 0xB504F333F9DE6484, 0x00003FFE, 0x1EB2FB13, 0x00000000 + data8 0xB6FD91E328D17791, 0x00003FFE, 0x1CE2CBE2, 0x00000000 + data8 0xB8FBAF4762FB9EE9, 0x00003FFE, 0x1DDC3CBC, 0x00000000 + data8 0xBAFF5AB2133E45FB, 0x00003FFE, 0x1EE9AA34, 0x00000000 + data8 0xBD08A39F580C36BF, 0x00003FFE, 0x9EAEFDC1, 0x00000000 + data8 0xBF1799B67A731083, 0x00003FFE, 0x9DBF517B, 0x00000000 + data8 0xC12C4CCA66709456, 0x00003FFE, 0x1EF88AFB, 0x00000000 + data8 0xC346CCDA24976407, 0x00003FFE, 0x1E03B216, 0x00000000 + data8 0xC5672A115506DADD, 0x00003FFE, 0x1E78AB43, 0x00000000 + data8 0xC78D74C8ABB9B15D, 0x00003FFE, 0x9E7B1747, 0x00000000 + data8 0xC9B9BD866E2F27A3, 0x00003FFE, 0x9EFE3C0E, 0x00000000 + data8 0xCBEC14FEF2727C5D, 0x00003FFE, 0x9D36F837, 0x00000000 + data8 0xCE248C151F8480E4, 0x00003FFE, 0x9DEE53E4, 0x00000000 + data8 0xD06333DAEF2B2595, 0x00003FFE, 0x9E24AE8E, 0x00000000 + data8 0xD2A81D91F12AE45A, 0x00003FFE, 0x1D912473, 0x00000000 + data8 0xD4F35AABCFEDFA1F, 0x00003FFE, 0x1EB243BE, 0x00000000 + data8 0xD744FCCAD69D6AF4, 0x00003FFE, 0x1E669A2F, 0x00000000 + data8 0xD99D15C278AFD7B6, 0x00003FFE, 0x9BBC610A, 0x00000000 + data8 0xDBFBB797DAF23755, 0x00003FFE, 0x1E761035, 0x00000000 + data8 0xDE60F4825E0E9124, 0x00003FFE, 0x9E0BE175, 0x00000000 + data8 0xE0CCDEEC2A94E111, 0x00003FFE, 0x1CCB12A1, 0x00000000 + data8 0xE33F8972BE8A5A51, 0x00003FFE, 0x1D1BFE90, 0x00000000 + data8 0xE5B906E77C8348A8, 0x00003FFE, 0x1DF2F47A, 0x00000000 + data8 0xE8396A503C4BDC68, 0x00003FFE, 0x1EF22F22, 0x00000000 + data8 0xEAC0C6E7DD24392F, 0x00003FFE, 0x9E3F4A29, 0x00000000 + data8 0xED4F301ED9942B84, 0x00003FFE, 0x1EC01A5B, 0x00000000 + data8 0xEFE4B99BDCDAF5CB, 0x00003FFE, 0x1E8CAC3A, 0x00000000 + data8 0xF281773C59FFB13A, 0x00003FFE, 0x9DBB3FAB, 0x00000000 + data8 0xF5257D152486CC2C, 0x00003FFE, 0x1EF73A19, 0x00000000 + data8 0xF7D0DF730AD13BB9, 0x00003FFE, 0x9BB795B5, 0x00000000 + data8 0xFA83B2DB722A033A, 0x00003FFE, 0x1EF84B76, 0x00000000 + data8 0xFD3E0C0CF486C175, 0x00003FFE, 0x9EF5818B, 0x00000000 + data8 0x8000000000000000, 0x00003FFF, 0x00000000, 0x00000000 + data8 0x8164D1F3BC030773, 0x00003FFF, 0x1F77CACA, 0x00000000 + data8 0x82CD8698AC2BA1D7, 0x00003FFF, 0x1EF8A91D, 0x00000000 + data8 0x843A28C3ACDE4046, 0x00003FFF, 0x1E57C976, 0x00000000 + data8 0x85AAC367CC487B15, 0x00003FFF, 0x9EE8DA92, 0x00000000 + data8 0x871F61969E8D1010, 0x00003FFF, 0x1EE85C9F, 0x00000000 + data8 0x88980E8092DA8527, 0x00003FFF, 0x1F3BF1AF, 0x00000000 + data8 0x8A14D575496EFD9A, 0x00003FFF, 0x1D80CA1E, 0x00000000 + data8 0x8B95C1E3EA8BD6E7, 0x00003FFF, 0x9D0373AF, 0x00000000 + data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF, 0x9F167097, 0x00000000 + data8 0x8EA4398B45CD53C0, 0x00003FFF, 0x1EB70051, 0x00000000 + data8 0x9031DC431466B1DC, 0x00003FFF, 0x1F6EB029, 0x00000000 + data8 0x91C3D373AB11C336, 0x00003FFF, 0x1DFD6D8E, 0x00000000 + data8 0x935A2B2F13E6E92C, 0x00003FFF, 0x9EB319B0, 0x00000000 + data8 0x94F4EFA8FEF70961, 0x00003FFF, 0x1EBA2BEB, 0x00000000 + data8 0x96942D3720185A00, 0x00003FFF, 0x1F11D537, 0x00000000 + data8 0x9837F0518DB8A96F, 0x00003FFF, 0x1F0D5A46, 0x00000000 + data8 0x99E0459320B7FA65, 0x00003FFF, 0x9E5E7BCA, 0x00000000 + data8 0x9B8D39B9D54E5539, 0x00003FFF, 0x9F3AAFD1, 0x00000000 + data8 0x9D3ED9A72CFFB751, 0x00003FFF, 0x9E86DACC, 0x00000000 + data8 0x9EF5326091A111AE, 0x00003FFF, 0x9F3EDDC2, 0x00000000 + data8 0xA0B0510FB9714FC2, 0x00003FFF, 0x1E496E3D, 0x00000000 + data8 0xA27043030C496819, 0x00003FFF, 0x9F490BF6, 0x00000000 + data8 0xA43515AE09E6809E, 0x00003FFF, 0x1DD1DB48, 0x00000000 + data8 0xA5FED6A9B15138EA, 0x00003FFF, 0x1E65EBFB, 0x00000000 + data8 0xA7CD93B4E965356A, 0x00003FFF, 0x9F427496, 0x00000000 + data8 0xA9A15AB4EA7C0EF8, 0x00003FFF, 0x1F283C4A, 0x00000000 + data8 0xAB7A39B5A93ED337, 0x00003FFF, 0x1F4B0047, 0x00000000 + data8 0xAD583EEA42A14AC6, 0x00003FFF, 0x1F130152, 0x00000000 + data8 0xAF3B78AD690A4375, 0x00003FFF, 0x9E8367C0, 0x00000000 + data8 0xB123F581D2AC2590, 0x00003FFF, 0x9F705F90, 0x00000000 + data8 0xB311C412A9112489, 0x00003FFF, 0x1EFB3C53, 0x00000000 + data8 0xB504F333F9DE6484, 0x00003FFF, 0x1F32FB13, 0x00000000 +ASM_SIZE_DIRECTIVE(double_cosh_j_table) + +.align 32 +.global cosh# + +.section .text +.proc cosh# +.align 32 + +cosh: + +#ifdef _LIBC +.global __ieee754_cosh# +.proc __ieee754_cosh# +__ieee754_cosh: +#endif + +// X NAN? + +{ .mfi + alloc r32 = ar.pfs,0,12,4,0 +(p0) fclass.m.unc p6,p7 = f8, 0xc3 //@snan | @qnan + nop.i 999 +} +;; + + +{ .mfb + nop.m 999 +(p6) fma.d.s0 f8 = f8,f1,f8 +(p6) br.ret.spnt b0 ;; +} + + +// X infinity +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6,p0 = f8, 0x23 //@inf + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fmerge.s f8 = f0,f8 +(p6) br.ret.spnt b0 ;; +} + + + +// Put 0.25 in f9; p6 true if x < 0.25 +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000000fffd ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s cosh_FR_X = f0,f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.s cosh_FR_SGNX = f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc p0,p7 = cosh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.sptk L(COSH_BY_TBL) +} +;; + + +// COSH_BY_POLY: +// POLY cannot overflow so there is no need to call __libm_error_support +// Get the values of P_x from the table + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_cosh_p_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate cosh_FR_X2 = ax*ax and cosh_FR_X4 = ax*ax*ax*ax +{ .mmf + nop.m 999 +(p0) ldfe cosh_FR_P1 = [r34],16 +(p0) fma.s1 cosh_FR_X2 = cosh_FR_X, cosh_FR_X, f0 ;; +} + +{ .mmi +(p0) ldfe cosh_FR_P2 = [r34],16 ;; +(p0) ldfe cosh_FR_P3 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe cosh_FR_P4 = [r34],16 ;; +(p0) ldfe cosh_FR_P5 = [r34],16 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe cosh_FR_P6 = [r34],16 +(p0) fma.s1 cosh_FR_X4 = cosh_FR_X2, cosh_FR_X2, f0 + nop.i 999 ;; +} + +// Calculate cosh_FR_podd = x4 *(x4 * P_5 + P_3) + P_1 +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_poly_podd_temp1 = cosh_FR_X4, cosh_FR_P5, cosh_FR_P3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd = cosh_FR_X4, cosh_FR_poly_podd_temp1, cosh_FR_P1 + nop.i 999 +} + +// Calculate cosh_FR_peven = p_even = x4 *(x4 * (x4 * P_6 + P_4) + P_2) +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_poly_peven_temp1 = cosh_FR_X4, cosh_FR_P6, cosh_FR_P4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_poly_peven_temp2 = cosh_FR_X4, cosh_FR_poly_peven_temp1, cosh_FR_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven = cosh_FR_X4, cosh_FR_poly_peven_temp2, f0 + nop.i 999 ;; +} + +// Y_lo = x2*p_odd + p_even +// Calculate f8 = Y_hi + Y_lo +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo = cosh_FR_X2, cosh_FR_podd, cosh_FR_peven + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.d.s0 f8 = f1, f1, cosh_FR_Y_lo +(p0) br.ret.sptk b0 ;; +} + + +L(COSH_BY_TBL): + +// Now that we are at TBL; so far all we know is that |x| >= 0.25. +// The first two steps are the same for TBL and EXP, but if we are HUGE +// Double +// Go to HUGE if |x| >= 2^10, 10009 (register-biased) is e = 10 (true) +// Single +// Go to HUGE if |x| >= 2^7, 10006 (register-biased) is e = 7 (true) +// we want to leave now. Go to HUGE if |x| >= 2^14 +// 1000d (register-biased) is e = 14 (true) + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010009 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc p6,p7 = cosh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(COSH_HUGE) ;; +} + +// r32 = 1 +// r34 = N-1 +// r35 = N +// r36 = j +// r37 = N+1 + +// TBL can never overflow +// cosh(x) = cosh(B+R) +// = cosh(B) cosh(R) + sinh(B) sinh(R) +// cosh(R) can be approximated by 1 + p_even +// sinh(R) can be approximated by p_odd + +// ****************************************************** +// STEP 1 (TBL and EXP) +// ****************************************************** +// Get the following constants. +// f9 = Inv_log2by64 +// f10 = log2by64_hi +// f11 = log2by64_lo + +{ .mmi +(p0) adds r32 = 0x1,r0 +(p0) addl r34 = @ltoff(double_cosh_arg_reduction), gp + nop.i 999 +} +;; + +// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and +// put them in an exponent. +// cosh_FR_spos = 2^(N-1) and cosh_FR_sneg = 2^(-N-1) +// r39 = 0xffff + (N-1) = 0xffff +N -1 +// r40 = 0xffff - (N +1) = 0xffff -N -1 + +{ .mlx + ld8 r34 = [r34] +(p0) movl r38 = 0x000000000000fffe ;; +} + +{ .mmi +(p0) ldfe cosh_FR_Inv_log2by64 = [r34],16 ;; +(p0) ldfe cosh_FR_log2by64_hi = [r34],16 + nop.i 999 ;; +} + +{ .mbb +(p0) ldfe cosh_FR_log2by64_lo = [r34],16 + nop.b 999 + nop.b 999 ;; +} + +// Get the A coefficients +// f9 = A_1 +// f10 = A_2 +// f11 = A_3 + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_cosh_ab_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate M and keep it as integer and floating point. +// M = round-to-integer(x*Inv_log2by64) +// cosh_FR_M = M = truncate(ax/(log2/64)) +// Put the significand of M in r35 +// and the floating point representation of M in cosh_FR_M + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_M = cosh_FR_X, cosh_FR_Inv_log2by64, f0 + nop.i 999 +} + +{ .mfi +(p0) ldfe cosh_FR_A1 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.fx.s1 cosh_FR_M_temp = cosh_FR_M + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnorm.s1 cosh_FR_M = cosh_FR_M_temp + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r35 = cosh_FR_M_temp + nop.f 999 + nop.i 999 ;; +} + +// M is still in r35. Calculate j. j is the signed extension of the six lsb of M. It +// has a range of -32 thru 31. +// r35 = M +// r36 = j +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) and r36 = 0x3f, r35 ;; +} + +// Calculate R +// f13 = f44 - f12*f10 = x - M*log2by64_hi +// f14 = f13 - f8*f11 = R = (x - M*log2by64_hi) - M*log2by64_lo + +{ .mfi + nop.m 999 +(p0) fnma.s1 cosh_FR_R_temp = cosh_FR_M, cosh_FR_log2by64_hi, cosh_FR_X + nop.i 999 +} + +{ .mfi +(p0) ldfe cosh_FR_A2 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 cosh_FR_R = cosh_FR_M, cosh_FR_log2by64_lo, cosh_FR_R_temp + nop.i 999 +} + +// Get the B coefficients +// f15 = B_1 +// f32 = B_2 +// f33 = B_3 + +{ .mmi +(p0) ldfe cosh_FR_A3 = [r34],16 ;; +(p0) ldfe cosh_FR_B1 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe cosh_FR_B2 = [r34],16 ;; +(p0) ldfe cosh_FR_B3 = [r34],16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) shl r34 = r36, 0x2 ;; +(p0) sxt1 r37 = r34 ;; +} + +// ****************************************************** +// STEP 2 (TBL and EXP) +// ****************************************************** +// Calculate Rsquared and Rcubed in preparation for p_even and p_odd +// f12 = R*R*R +// f13 = R*R +// f14 = R <== from above + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Rsq = cosh_FR_R, cosh_FR_R, f0 +(p0) shr r36 = r37, 0x2 ;; +} + +// r34 = M-j = r35 - r36 +// r35 = N = (M-j)/64 + +{ .mii +(p0) sub r34 = r35, r36 + nop.i 999 ;; +(p0) shr r35 = r34, 0x6 ;; +} + +{ .mii +(p0) sub r40 = r38, r35 +(p0) adds r37 = 0x1, r35 +(p0) add r39 = r38, r35 ;; +} + +// Get the address of the J table, add the offset, +// addresses are sinh_AD_mJ and sinh_AD_J, get the T value +// f32 = T(j)_hi +// f33 = T(j)_lo +// f34 = T(-j)_hi +// f35 = T(-j)_lo + +{ .mmi +(p0) sub r34 = r35, r32 +(p0) addl r37 = @ltoff(double_cosh_j_table), gp + nop.i 999 +} +;; + +{ .mfi + ld8 r37 = [r37] +(p0) fma.s1 cosh_FR_Rcub = cosh_FR_Rsq, cosh_FR_R, f0 + nop.i 999 +} + +// ****************************************************** +// STEP 3 Now decide if we need to branch to EXP +// ****************************************************** +// Put 32 in f9; p6 true if x < 32 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010004 ;; +} + +// Calculate p_even +// f34 = B_2 + Rsq *B_3 +// f35 = B_1 + Rsq*f34 = B_1 + Rsq * (B_2 + Rsq *B_3) +// f36 = peven = Rsq * f35 = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven_temp1 = cosh_FR_Rsq, cosh_FR_B3, cosh_FR_B2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven_temp2 = cosh_FR_Rsq, cosh_FR_peven_temp1, cosh_FR_B1 + nop.i 999 +} + +// Calculate p_odd +// f34 = A_2 + Rsq *A_3 +// f35 = A_1 + Rsq * (A_2 + Rsq *A_3) +// f37 = podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd_temp1 = cosh_FR_Rsq, cosh_FR_A3, cosh_FR_A2 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp cosh_FR_N_temp1 = r39 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven = cosh_FR_Rsq, cosh_FR_peven_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd_temp2 = cosh_FR_Rsq, cosh_FR_podd_temp1, cosh_FR_A1 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd = cosh_FR_podd_temp2, cosh_FR_Rcub, cosh_FR_R + nop.i 999 +} + +// sinh_GR_mj contains the table offset for -j +// sinh_GR_j contains the table offset for +j +// p6 is true when j <= 0 + +{ .mlx +(p0) setf.exp cosh_FR_N_temp2 = r40 +(p0) movl r40 = 0x0000000000000020 ;; +} + +{ .mfi +(p0) sub GR_mJ = r40, r36 +(p0) fmerge.se cosh_FR_spos = cosh_FR_N_temp1, f1 +(p0) adds GR_J = 0x20, r36 ;; +} + +{ .mii + nop.m 999 +(p0) shl GR_mJ = GR_mJ, 5 ;; +(p0) add AD_mJ = r37, GR_mJ ;; +} + +{ .mmi + nop.m 999 +(p0) ldfe cosh_FR_Tmjhi = [AD_mJ],16 +(p0) shl GR_J = GR_J, 5 ;; +} + +{ .mfi +(p0) ldfs cosh_FR_Tmjlo = [AD_mJ],16 +(p0) fcmp.lt.unc.s1 p6,p7 = cosh_FR_X,f9 +(p0) add AD_J = r37, GR_J ;; +} + +{ .mmi +(p0) ldfe cosh_FR_Tjhi = [AD_J],16 ;; +(p0) ldfs cosh_FR_Tjlo = [AD_J],16 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.se cosh_FR_sneg = cosh_FR_N_temp2, f1 +(p7) br.cond.spnt L(COSH_BY_EXP) ;; +} + +// ****************************************************** +// If NOT branch to EXP +// ****************************************************** +// Calculate C_hi +// ****************************************************** +// cosh_FR_C_hi_temp = cosh_FR_sneg * cosh_FR_Tmjhi +// cosh_FR_C_hi = cosh_FR_spos * cosh_FR_Tjhi + (cosh_FR_sneg * cosh_FR_Tmjhi) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_hi_temp = cosh_FR_sneg, cosh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_hi = cosh_FR_spos, cosh_FR_Tjhi, cosh_FR_C_hi_temp + nop.i 999 +} + +// ****************************************************** +// Calculate S_hi +// ****************************************************** +// cosh_FR_S_hi_temp1 = cosh_FR_sneg * cosh_FR_Tmjhi +// cosh_FR_S_hi = cosh_FR_spos * cosh_FR_Tjhi - cosh_FR_C_hi_temp1 + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_S_hi_temp1 = cosh_FR_sneg, cosh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +// ****************************************************** +// Calculate C_lo +// ****************************************************** +// cosh_FR_C_lo_temp1 = cosh_FR_spos * cosh_FR_Tjhi - cosh_FR_C_hi +// cosh_FR_C_lo_temp2 = cosh_FR_sneg * cosh_FR_Tmjlo + (cosh_FR_spos * cosh_FR_Tjhi - cosh_FR_C_hi) +// cosh_FR_C_lo_temp1 = cosh_FR_sneg * cosh_FR_Tmjlo +// cosh_FR_C_lo_temp3 = cosh_FR_spos * cosh_FR_Tjlo + (cosh_FR_sneg * cosh_FR_Tmjlo) +// cosh_FR_C_lo = cosh_FR_C_lo_temp3 + cosh_FR_C_lo_temp2 + +{ .mfi + nop.m 999 +(p0) fms.s1 cosh_FR_C_lo_temp1 = cosh_FR_spos, cosh_FR_Tjhi, cosh_FR_C_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fms.s1 cosh_FR_S_hi = cosh_FR_spos, cosh_FR_Tjhi, cosh_FR_S_hi_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo_temp2 = cosh_FR_sneg, cosh_FR_Tmjhi, cosh_FR_C_lo_temp1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo_temp1 = cosh_FR_sneg, cosh_FR_Tmjlo, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo_temp3 = cosh_FR_spos, cosh_FR_Tjlo, cosh_FR_C_lo_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo = cosh_FR_C_lo_temp3, f1, cosh_FR_C_lo_temp2 + nop.i 999 ;; +} + +// ****************************************************** +// cosh_FR_Y_lo_temp = cosh_FR_C_hi * cosh_FR_peven + cosh_FR_C_lo +// cosh_FR_Y_lo = cosh_FR_S_hi * cosh_FR_podd + cosh_FR_Y_lo_temp +// cosh_FR_COSH = Y_hi + Y_lo + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo_temp = cosh_FR_C_hi, cosh_FR_peven, cosh_FR_C_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo = cosh_FR_S_hi, cosh_FR_podd, cosh_FR_Y_lo_temp + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.d.s0 f8 = cosh_FR_C_hi, f1, cosh_FR_Y_lo +(p0) br.ret.sptk b0 ;; +} + +L(COSH_BY_EXP): + +// When p7 is true, we know that an overflow is not going to happen +// When p7 is false, we must check for possible overflow +// p7 is the over_SAFE flag +// f44 = Scale * (Y_hi + Y_lo) +// = cosh_FR_spos * (cosh_FR_Tjhi + cosh_FR_Y_lo) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo_temp = cosh_FR_peven, f1, cosh_FR_podd + nop.i 999 +} + +// Now we are in EXP. This is the only path where an overflow is possible +// but not for certain. So this is the only path where over_SAFE has any use. +// r34 still has N-1 +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// There is a danger of double overflow if N-1 > 0x3fe = 1022 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x00000000000003fe ;; +} + +{ .mfi +(p0) cmp.gt.unc p0,p7 = r34, r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo = cosh_FR_Tjhi, cosh_FR_Y_lo_temp, cosh_FR_Tjlo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_COSH_temp = cosh_FR_Y_lo, f1, cosh_FR_Tjhi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s0 f44 = cosh_FR_spos, cosh_FR_COSH_temp, f0 + nop.i 999 ;; +} + +// If over_SAFE is set, return +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = f44,f44 +(p7) br.ret.sptk b0 ;; +} + +// Else see if we overflowed +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// If WRE is set then an overflow will not occur in EXP. +// The input value that would cause a register (WRE) value to overflow is about 2^15 +// and this input would go into the HUGE path. +// Answer with WRE is in f43. + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s2 f43 = cosh_FR_spos, cosh_FR_COSH_temp, f0 + nop.i 999 ;; +} + +// 103FF => 103FF -FFFF = 400(true) +// 400 + 3FF = 7FF, which is 1 more that the exponent of the largest +// double (7FE). So 0 103FF 8000000000000000 is one ulp more than +// largest double in register bias +// Now set p8 if the answer with WRE is greater than or equal this value +// Also set p9 if the answer with WRE is less than or equal to negative this value + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x00000000000103ff ;; +} + +{ .mmf + nop.m 999 +(p0) setf.exp f41 = r32 +(p0) fsetc.s2 0x7F,0x40 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p8, p0 = f43, f41 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f42 = f41, f41 + nop.i 999 ;; +} + +// The error tag for overflow is 64 +{ .mii + nop.m 999 + nop.i 999 ;; +(p8) mov r47 = 64 ;; +} + +{ .mfb + nop.m 999 +(p0) fcmp.le.unc.s1 p9, p0 = f43, f42 +(p8) br.cond.spnt __libm_error_region ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov r47 = 64 +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt __libm_error_region ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f44,f44 +(p0) br.ret.sptk b0 ;; +} + + +// for COSH_HUGE, put 24000 in exponent; take sign from input; add 1 +// SAFE: SAFE is always 0 for HUGE + +L(COSH_HUGE): + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000015dbf ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_hi_lo = f1, f9, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s0 f44 = f9, cosh_FR_hi_lo, f0 +(p0) mov r47 = 64 +} +;; + +.endp cosh# +ASM_SIZE_DIRECTIVE(cosh#) + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + +.proc __libm_error_region +__libm_error_region: +.prologue +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = f8 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f44 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_coshf.S glibc-2.2.3/sysdeps/ia64/fpu/e_coshf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_coshf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_coshf.S Mon Feb 19 00:42:53 2001 @@ -0,0 +1,1133 @@ +.file "coshf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/16/00 The error tag for coshf overflow changed to 65 (from 64). +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// API +//============================================================== +// float = coshf(float) +// input floating point f8 +// output floating point f8 + + +// Overview of operation +//============================================================== +// There are four paths + +// 1. |x| < 0.25 COSH_BY_POLY +// 2. |x| < 32 COSH_BY_TBL +// 3. |x| < 2^14 COSH_BY_EXP +// 4. |x_ >= 2^14 COSH_HUGE + +// For paths 1, and 2 SAFE is always 1. +// For path 4, Safe is always 0. +// SAFE = 1 means we cannot overflow. + +#include "libm_support.h" + +// Assembly macros +//============================================================== +coshf_FR_X = f44 +coshf_FR_SGNX = f40 + +coshf_FR_Inv_log2by64 = f9 +coshf_FR_log2by64_lo = f11 +coshf_FR_log2by64_hi = f10 + +coshf_FR_A1 = f9 +coshf_FR_A2 = f10 +coshf_FR_A3 = f11 + +coshf_FR_Rcub = f12 +coshf_FR_M_temp = f13 +coshf_FR_R_temp = f13 +coshf_FR_Rsq = f13 +coshf_FR_R = f14 + +coshf_FR_M = f38 + +coshf_FR_B1 = f15 +coshf_FR_B2 = f32 +coshf_FR_B3 = f33 + +coshf_FR_peven_temp1 = f34 +coshf_FR_peven_temp2 = f35 +coshf_FR_peven = f36 + +coshf_FR_podd_temp1 = f34 +coshf_FR_podd_temp2 = f35 +coshf_FR_podd = f37 + +coshf_FR_J_temp = f9 +coshf_FR_J = f10 + +coshf_FR_Mmj = f39 + +coshf_FR_N_temp1 = f11 +coshf_FR_N_temp2 = f12 +coshf_FR_N = f13 + +coshf_FR_spos = f14 +coshf_FR_sneg = f15 + +coshf_FR_Tjhi = f32 +coshf_FR_Tjlo = f33 +coshf_FR_Tmjhi = f34 +coshf_FR_Tmjlo = f35 + +GR_mJ = r35 +GR_J = r36 + +AD_mJ = r38 +AD_J = r39 + + +GR_SAVE_B0 = r42 +GR_SAVE_PFS = r41 +GR_SAVE_GP = r43 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 +GR_Parameter_TAG = r47 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f44 + + +coshf_FR_C_hi = f9 +coshf_FR_C_hi_temp = f10 +coshf_FR_C_lo_temp1 = f11 +coshf_FR_C_lo_temp2 = f12 +coshf_FR_C_lo_temp3 = f13 + +coshf_FR_C_lo = f38 +coshf_FR_S_hi = f39 + +coshf_FR_S_hi_temp1 = f10 +coshf_FR_Y_hi = f11 +coshf_FR_Y_lo_temp = f12 +coshf_FR_Y_lo = f13 +coshf_FR_COSH = f9 + +coshf_FR_X2 = f9 +coshf_FR_X4 = f10 + +coshf_FR_P1 = f14 +coshf_FR_P2 = f15 +coshf_FR_P3 = f32 +coshf_FR_P4 = f33 +coshf_FR_P5 = f34 +coshf_FR_P6 = f35 + +coshf_FR_TINY_THRESH = f9 + +coshf_FR_COSH_temp = f10 +coshf_FR_SCALE = f11 + +coshf_FR_hi_lo = f10 + +coshf_FR_poly_podd_temp1 = f11 +coshf_FR_poly_podd_temp2 = f13 +coshf_FR_poly_peven_temp1 = f11 +coshf_FR_poly_peven_temp2 = f13 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +single_coshf_arg_reduction: +ASM_TYPE_DIRECTIVE(single_coshf_arg_reduction,@object) + data8 0xB8AA3B295C17F0BC, 0x00004005 + data8 0xB17217F7D1000000, 0x00003FF8 + data8 0xCF79ABC9E3B39804, 0x00003FD0 +ASM_SIZE_DIRECTIVE(single_coshf_arg_reduction) + +single_coshf_p_table: +ASM_TYPE_DIRECTIVE(single_coshf_p_table,@object) + data8 0x8000000000000000, 0x00003FFE + data8 0xAAAAAAAAAAAAAB80, 0x00003FFA + data8 0xB60B60B60B4FE884, 0x00003FF5 + data8 0xD00D00D1021D7370, 0x00003FEF + data8 0x93F27740C0C2F1CC, 0x00003FE9 + data8 0x8FA02AC65BCBD5BC, 0x00003FE2 +ASM_SIZE_DIRECTIVE(single_coshf_p_table) + +single_coshf_ab_table: +ASM_TYPE_DIRECTIVE(single_coshf_ab_table,@object) + data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC + data8 0x88888888884ECDD5, 0x00003FF8 + data8 0xD00D0C6DCC26A86B, 0x00003FF2 + data8 0x8000000000000002, 0x00003FFE + data8 0xAAAAAAAAAA402C77, 0x00003FFA + data8 0xB60B6CC96BDB144D, 0x00003FF5 +ASM_SIZE_DIRECTIVE(single_coshf_ab_table) + +single_coshf_j_table: +ASM_TYPE_DIRECTIVE(single_coshf_j_table,@object) + data8 0xB504F333F9DE6484, 0x00003FFE, 0x1EB2FB13, 0x00000000 + data8 0xB6FD91E328D17791, 0x00003FFE, 0x1CE2CBE2, 0x00000000 + data8 0xB8FBAF4762FB9EE9, 0x00003FFE, 0x1DDC3CBC, 0x00000000 + data8 0xBAFF5AB2133E45FB, 0x00003FFE, 0x1EE9AA34, 0x00000000 + data8 0xBD08A39F580C36BF, 0x00003FFE, 0x9EAEFDC1, 0x00000000 + data8 0xBF1799B67A731083, 0x00003FFE, 0x9DBF517B, 0x00000000 + data8 0xC12C4CCA66709456, 0x00003FFE, 0x1EF88AFB, 0x00000000 + data8 0xC346CCDA24976407, 0x00003FFE, 0x1E03B216, 0x00000000 + data8 0xC5672A115506DADD, 0x00003FFE, 0x1E78AB43, 0x00000000 + data8 0xC78D74C8ABB9B15D, 0x00003FFE, 0x9E7B1747, 0x00000000 + data8 0xC9B9BD866E2F27A3, 0x00003FFE, 0x9EFE3C0E, 0x00000000 + data8 0xCBEC14FEF2727C5D, 0x00003FFE, 0x9D36F837, 0x00000000 + data8 0xCE248C151F8480E4, 0x00003FFE, 0x9DEE53E4, 0x00000000 + data8 0xD06333DAEF2B2595, 0x00003FFE, 0x9E24AE8E, 0x00000000 + data8 0xD2A81D91F12AE45A, 0x00003FFE, 0x1D912473, 0x00000000 + data8 0xD4F35AABCFEDFA1F, 0x00003FFE, 0x1EB243BE, 0x00000000 + data8 0xD744FCCAD69D6AF4, 0x00003FFE, 0x1E669A2F, 0x00000000 + data8 0xD99D15C278AFD7B6, 0x00003FFE, 0x9BBC610A, 0x00000000 + data8 0xDBFBB797DAF23755, 0x00003FFE, 0x1E761035, 0x00000000 + data8 0xDE60F4825E0E9124, 0x00003FFE, 0x9E0BE175, 0x00000000 + data8 0xE0CCDEEC2A94E111, 0x00003FFE, 0x1CCB12A1, 0x00000000 + data8 0xE33F8972BE8A5A51, 0x00003FFE, 0x1D1BFE90, 0x00000000 + data8 0xE5B906E77C8348A8, 0x00003FFE, 0x1DF2F47A, 0x00000000 + data8 0xE8396A503C4BDC68, 0x00003FFE, 0x1EF22F22, 0x00000000 + data8 0xEAC0C6E7DD24392F, 0x00003FFE, 0x9E3F4A29, 0x00000000 + data8 0xED4F301ED9942B84, 0x00003FFE, 0x1EC01A5B, 0x00000000 + data8 0xEFE4B99BDCDAF5CB, 0x00003FFE, 0x1E8CAC3A, 0x00000000 + data8 0xF281773C59FFB13A, 0x00003FFE, 0x9DBB3FAB, 0x00000000 + data8 0xF5257D152486CC2C, 0x00003FFE, 0x1EF73A19, 0x00000000 + data8 0xF7D0DF730AD13BB9, 0x00003FFE, 0x9BB795B5, 0x00000000 + data8 0xFA83B2DB722A033A, 0x00003FFE, 0x1EF84B76, 0x00000000 + data8 0xFD3E0C0CF486C175, 0x00003FFE, 0x9EF5818B, 0x00000000 + data8 0x8000000000000000, 0x00003FFF, 0x00000000, 0x00000000 + data8 0x8164D1F3BC030773, 0x00003FFF, 0x1F77CACA, 0x00000000 + data8 0x82CD8698AC2BA1D7, 0x00003FFF, 0x1EF8A91D, 0x00000000 + data8 0x843A28C3ACDE4046, 0x00003FFF, 0x1E57C976, 0x00000000 + data8 0x85AAC367CC487B15, 0x00003FFF, 0x9EE8DA92, 0x00000000 + data8 0x871F61969E8D1010, 0x00003FFF, 0x1EE85C9F, 0x00000000 + data8 0x88980E8092DA8527, 0x00003FFF, 0x1F3BF1AF, 0x00000000 + data8 0x8A14D575496EFD9A, 0x00003FFF, 0x1D80CA1E, 0x00000000 + data8 0x8B95C1E3EA8BD6E7, 0x00003FFF, 0x9D0373AF, 0x00000000 + data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF, 0x9F167097, 0x00000000 + data8 0x8EA4398B45CD53C0, 0x00003FFF, 0x1EB70051, 0x00000000 + data8 0x9031DC431466B1DC, 0x00003FFF, 0x1F6EB029, 0x00000000 + data8 0x91C3D373AB11C336, 0x00003FFF, 0x1DFD6D8E, 0x00000000 + data8 0x935A2B2F13E6E92C, 0x00003FFF, 0x9EB319B0, 0x00000000 + data8 0x94F4EFA8FEF70961, 0x00003FFF, 0x1EBA2BEB, 0x00000000 + data8 0x96942D3720185A00, 0x00003FFF, 0x1F11D537, 0x00000000 + data8 0x9837F0518DB8A96F, 0x00003FFF, 0x1F0D5A46, 0x00000000 + data8 0x99E0459320B7FA65, 0x00003FFF, 0x9E5E7BCA, 0x00000000 + data8 0x9B8D39B9D54E5539, 0x00003FFF, 0x9F3AAFD1, 0x00000000 + data8 0x9D3ED9A72CFFB751, 0x00003FFF, 0x9E86DACC, 0x00000000 + data8 0x9EF5326091A111AE, 0x00003FFF, 0x9F3EDDC2, 0x00000000 + data8 0xA0B0510FB9714FC2, 0x00003FFF, 0x1E496E3D, 0x00000000 + data8 0xA27043030C496819, 0x00003FFF, 0x9F490BF6, 0x00000000 + data8 0xA43515AE09E6809E, 0x00003FFF, 0x1DD1DB48, 0x00000000 + data8 0xA5FED6A9B15138EA, 0x00003FFF, 0x1E65EBFB, 0x00000000 + data8 0xA7CD93B4E965356A, 0x00003FFF, 0x9F427496, 0x00000000 + data8 0xA9A15AB4EA7C0EF8, 0x00003FFF, 0x1F283C4A, 0x00000000 + data8 0xAB7A39B5A93ED337, 0x00003FFF, 0x1F4B0047, 0x00000000 + data8 0xAD583EEA42A14AC6, 0x00003FFF, 0x1F130152, 0x00000000 + data8 0xAF3B78AD690A4375, 0x00003FFF, 0x9E8367C0, 0x00000000 + data8 0xB123F581D2AC2590, 0x00003FFF, 0x9F705F90, 0x00000000 + data8 0xB311C412A9112489, 0x00003FFF, 0x1EFB3C53, 0x00000000 + data8 0xB504F333F9DE6484, 0x00003FFF, 0x1F32FB13, 0x00000000 +ASM_SIZE_DIRECTIVE(single_coshf_j_table) + +.align 32 +.global coshf# + +.section .text +.proc coshf# +.align 32 + +coshf: + +#ifdef _LIBC +.global __ieee754_coshf# +.proc __ieee754_coshf# +__ieee754_coshf: +#endif + +// X NAN? + + +{ .mfi + alloc r32 = ar.pfs,0,12,4,0 +(p0) fclass.m.unc p6,p7 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p6) fma.s.s0 f8 = f8,f1,f8 +(p6) br.ret.spnt b0 ;; +} + +{ .mfi + nop.m 999 + nop.f 999 + nop.i 999 ;; +} + +// X infinity +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6,p0 = f8, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fmerge.s f8 = f0,f8 +(p6) br.ret.spnt b0 ;; +} + +// Put 0.25 in f9; p6 true if x < 0.25 +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000000fffd ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s coshf_FR_X = f0,f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.s coshf_FR_SGNX = f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc p0,p7 = coshf_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.sptk L(COSH_BY_TBL) ;; +} + + +// COSH_BY_POLY: + +// POLY cannot overflow so there is no need to call __libm_error_support +// Get the values of P_x from the table + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(single_coshf_p_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + +// Calculate coshf_FR_X2 = ax*ax and coshf_FR_X4 = ax*ax*ax*ax +{ .mmf + nop.m 999 +(p0) ldfe coshf_FR_P1 = [r34],16 +(p0) fma.s1 coshf_FR_X2 = coshf_FR_X, coshf_FR_X, f0 ;; +} + +{ .mmi +(p0) ldfe coshf_FR_P2 = [r34],16 ;; +(p0) ldfe coshf_FR_P3 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe coshf_FR_P4 = [r34],16 ;; +(p0) ldfe coshf_FR_P5 = [r34],16 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe coshf_FR_P6 = [r34],16 +(p0) fma.s1 coshf_FR_X4 = coshf_FR_X2, coshf_FR_X2, f0 + nop.i 999 ;; +} + +// Calculate coshf_FR_podd = x4 *(x4 * P_5 + P_3) + P_1 +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_poly_podd_temp1 = coshf_FR_X4, coshf_FR_P5, coshf_FR_P3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_podd = coshf_FR_X4, coshf_FR_poly_podd_temp1, coshf_FR_P1 + nop.i 999 +} + +// Calculate coshf_FR_peven = p_even = x4 *(x4 * (x4 * P_6 + P_4) + P_2) +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_poly_peven_temp1 = coshf_FR_X4, coshf_FR_P6, coshf_FR_P4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_poly_peven_temp2 = coshf_FR_X4, coshf_FR_poly_peven_temp1, coshf_FR_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_peven = coshf_FR_X4, coshf_FR_poly_peven_temp2, f0 + nop.i 999 ;; +} + +// Y_lo = x2*p_odd + p_even +// Calculate f8 = Y_hi + Y_lo + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_Y_lo = coshf_FR_X2, coshf_FR_podd, coshf_FR_peven + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s.s0 f8 = f1, f1, coshf_FR_Y_lo +(p0) br.ret.sptk b0 ;; +} + + +L(COSH_BY_TBL): + +// Now that we are at TBL; so far all we know is that |x| >= 0.25. +// The first two steps are the same for TBL and EXP, but if we are HUGE +// Double +// Go to HUGE if |x| >= 2^10, 10009 (register-biased) is e = 10 (true) +// Single +// Go to HUGE if |x| >= 2^7, 10006 (register-biased) is e = 7 (true) +// we want to leave now. Go to HUGE if |x| >= 2^14 +// 1000d (register-biased) is e = 14 (true) + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010006 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc p6,p7 = coshf_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(COSH_HUGE) ;; +} + +// r32 = 1 +// r34 = N-1 +// r35 = N +// r36 = j +// r37 = N+1 + +// TBL can never overflow +// coshf(x) = coshf(B+R) +// = coshf(B) coshf(R) + sinh(B) sinh(R) +// coshf(R) can be approximated by 1 + p_even +// sinh(R) can be approximated by p_odd + +// ****************************************************** +// STEP 1 (TBL and EXP) +// ****************************************************** +// Get the following constants. +// f9 = Inv_log2by64 +// f10 = log2by64_hi +// f11 = log2by64_lo + +{ .mmi +(p0) adds r32 = 0x1,r0 +(p0) addl r34 = @ltoff(single_coshf_arg_reduction), gp + nop.i 999 +} +;; + + +// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and +// put them in an exponent. +// coshf_FR_spos = 2^(N-1) and coshf_FR_sneg = 2^(-N-1) +// r39 = 0xffff + (N-1) = 0xffff +N -1 +// r40 = 0xffff - (N +1) = 0xffff -N -1 + +{ .mlx + ld8 r34 = [r34] +(p0) movl r38 = 0x000000000000fffe ;; +} + +{ .mmi +(p0) ldfe coshf_FR_Inv_log2by64 = [r34],16 ;; +(p0) ldfe coshf_FR_log2by64_hi = [r34],16 + nop.i 999 ;; +} + +{ .mbb +(p0) ldfe coshf_FR_log2by64_lo = [r34],16 + nop.b 999 + nop.b 999 ;; +} + +// Get the A coefficients +// f9 = A_1 +// f10 = A_2 +// f11 = A_3 + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(single_coshf_ab_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate M and keep it as integer and floating point. +// M = round-to-integer(x*Inv_log2by64) +// coshf_FR_M = M = truncate(ax/(log2/64)) +// Put the significand of M in r35 +// and the floating point representation of M in coshf_FR_M + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_M = coshf_FR_X, coshf_FR_Inv_log2by64, f0 + nop.i 999 +} + +{ .mfi +(p0) ldfe coshf_FR_A1 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.fx.s1 coshf_FR_M_temp = coshf_FR_M + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnorm.s1 coshf_FR_M = coshf_FR_M_temp + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r35 = coshf_FR_M_temp + nop.f 999 + nop.i 999 ;; +} + +// M is still in r35. Calculate j. j is the signed extension of the six lsb of M. It +// has a range of -32 thru 31. +// r35 = M +// r36 = j + +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) and r36 = 0x3f, r35 ;; +} + +// Calculate R +// f13 = f44 - f12*f10 = x - M*log2by64_hi +// f14 = f13 - f8*f11 = R = (x - M*log2by64_hi) - M*log2by64_lo + +{ .mfi + nop.m 999 +(p0) fnma.s1 coshf_FR_R_temp = coshf_FR_M, coshf_FR_log2by64_hi, coshf_FR_X + nop.i 999 +} + +{ .mfi +(p0) ldfe coshf_FR_A2 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 coshf_FR_R = coshf_FR_M, coshf_FR_log2by64_lo, coshf_FR_R_temp + nop.i 999 +} + +// Get the B coefficients +// f15 = B_1 +// f32 = B_2 +// f33 = B_3 + +{ .mmi +(p0) ldfe coshf_FR_A3 = [r34],16 ;; +(p0) ldfe coshf_FR_B1 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe coshf_FR_B2 = [r34],16 ;; +(p0) ldfe coshf_FR_B3 = [r34],16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) shl r34 = r36, 0x2 ;; +(p0) sxt1 r37 = r34 ;; +} + +// ****************************************************** +// STEP 2 (TBL and EXP) +// ****************************************************** +// Calculate Rsquared and Rcubed in preparation for p_even and p_odd +// f12 = R*R*R +// f13 = R*R +// f14 = R <== from above + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_Rsq = coshf_FR_R, coshf_FR_R, f0 +(p0) shr r36 = r37, 0x2 ;; +} + +// r34 = M-j = r35 - r36 +// r35 = N = (M-j)/64 + +{ .mii +(p0) sub r34 = r35, r36 + nop.i 999 ;; +(p0) shr r35 = r34, 0x6 ;; +} + +{ .mii +(p0) sub r40 = r38, r35 +(p0) adds r37 = 0x1, r35 +(p0) add r39 = r38, r35 ;; +} + +// Get the address of the J table, add the offset, +// addresses are sinh_AD_mJ and sinh_AD_J, get the T value +// f32 = T(j)_hi +// f33 = T(j)_lo +// f34 = T(-j)_hi +// f35 = T(-j)_lo + +{ .mmi +(p0) sub r34 = r35, r32 +(p0) addl r37 = @ltoff(single_coshf_j_table), gp + nop.i 999 +} +;; + +{ .mfi + ld8 r37 = [r37] +(p0) fma.s1 coshf_FR_Rcub = coshf_FR_Rsq, coshf_FR_R, f0 + nop.i 999 +} + +// ****************************************************** +// STEP 3 Now decide if we need to branch to EXP +// ****************************************************** +// Put 32 in f9; p6 true if x < 32 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010004 ;; +} + +// Calculate p_even +// f34 = B_2 + Rsq *B_3 +// f35 = B_1 + Rsq*f34 = B_1 + Rsq * (B_2 + Rsq *B_3) +// f36 = peven = Rsq * f35 = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_peven_temp1 = coshf_FR_Rsq, coshf_FR_B3, coshf_FR_B2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_peven_temp2 = coshf_FR_Rsq, coshf_FR_peven_temp1, coshf_FR_B1 + nop.i 999 +} + +// Calculate p_odd +// f34 = A_2 + Rsq *A_3 +// f35 = A_1 + Rsq * (A_2 + Rsq *A_3) +// f37 = podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_podd_temp1 = coshf_FR_Rsq, coshf_FR_A3, coshf_FR_A2 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp coshf_FR_N_temp1 = r39 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_peven = coshf_FR_Rsq, coshf_FR_peven_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_podd_temp2 = coshf_FR_Rsq, coshf_FR_podd_temp1, coshf_FR_A1 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_podd = coshf_FR_podd_temp2, coshf_FR_Rcub, coshf_FR_R + nop.i 999 +} + +// sinh_GR_mj contains the table offset for -j +// sinh_GR_j contains the table offset for +j +// p6 is true when j <= 0 + +{ .mlx +(p0) setf.exp coshf_FR_N_temp2 = r40 +(p0) movl r40 = 0x0000000000000020 ;; +} + +{ .mfi +(p0) sub GR_mJ = r40, r36 +(p0) fmerge.se coshf_FR_spos = coshf_FR_N_temp1, f1 +(p0) adds GR_J = 0x20, r36 ;; +} + +{ .mii + nop.m 999 +(p0) shl GR_mJ = GR_mJ, 5 ;; +(p0) add AD_mJ = r37, GR_mJ ;; +} + +{ .mmi + nop.m 999 +(p0) ldfe coshf_FR_Tmjhi = [AD_mJ],16 +(p0) shl GR_J = GR_J, 5 ;; +} + +{ .mfi +(p0) ldfs coshf_FR_Tmjlo = [AD_mJ],16 +(p0) fcmp.lt.unc.s1 p6,p7 = coshf_FR_X,f9 +(p0) add AD_J = r37, GR_J ;; +} + +{ .mmi +(p0) ldfe coshf_FR_Tjhi = [AD_J],16 ;; +(p0) ldfs coshf_FR_Tjlo = [AD_J],16 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.se coshf_FR_sneg = coshf_FR_N_temp2, f1 +(p7) br.cond.spnt L(COSH_BY_EXP) ;; +} + +// ****************************************************** +// If NOT branch to EXP +// ****************************************************** +// Calculate C_hi +// ****************************************************** +// coshf_FR_C_hi_temp = coshf_FR_sneg * coshf_FR_Tmjhi +// coshf_FR_C_hi = coshf_FR_spos * coshf_FR_Tjhi + (coshf_FR_sneg * coshf_FR_Tmjhi) + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_C_hi_temp = coshf_FR_sneg, coshf_FR_Tmjhi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_C_hi = coshf_FR_spos, coshf_FR_Tjhi, coshf_FR_C_hi_temp + nop.i 999 +} + +// ****************************************************** +// Calculate S_hi +// ****************************************************** +// coshf_FR_S_hi_temp1 = coshf_FR_sneg * coshf_FR_Tmjhi +// coshf_FR_S_hi = coshf_FR_spos * coshf_FR_Tjhi - coshf_FR_C_hi_temp1 + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_S_hi_temp1 = coshf_FR_sneg, coshf_FR_Tmjhi, f0 + nop.i 999 ;; +} + +// ****************************************************** +// Calculate C_lo +// ****************************************************** +// coshf_FR_C_lo_temp1 = coshf_FR_spos * coshf_FR_Tjhi - coshf_FR_C_hi +// coshf_FR_C_lo_temp2 = coshf_FR_sneg * coshf_FR_Tmjlo + (coshf_FR_spos * coshf_FR_Tjhi - coshf_FR_C_hi) +// coshf_FR_C_lo_temp1 = coshf_FR_sneg * coshf_FR_Tmjlo +// coshf_FR_C_lo_temp3 = coshf_FR_spos * coshf_FR_Tjlo + (coshf_FR_sneg * coshf_FR_Tmjlo) +// coshf_FR_C_lo = coshf_FR_C_lo_temp3 + coshf_FR_C_lo_temp2 + +{ .mfi + nop.m 999 +(p0) fms.s1 coshf_FR_C_lo_temp1 = coshf_FR_spos, coshf_FR_Tjhi, coshf_FR_C_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fms.s1 coshf_FR_S_hi = coshf_FR_spos, coshf_FR_Tjhi, coshf_FR_S_hi_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_C_lo_temp2 = coshf_FR_sneg, coshf_FR_Tmjhi, coshf_FR_C_lo_temp1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_C_lo_temp1 = coshf_FR_sneg, coshf_FR_Tmjlo, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_C_lo_temp3 = coshf_FR_spos, coshf_FR_Tjlo, coshf_FR_C_lo_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_C_lo = coshf_FR_C_lo_temp3, f1, coshf_FR_C_lo_temp2 + nop.i 999 ;; +} + +// ****************************************************** +// coshf_FR_Y_lo_temp = coshf_FR_C_hi * coshf_FR_peven + coshf_FR_C_lo +// coshf_FR_Y_lo = coshf_FR_S_hi * coshf_FR_podd + coshf_FR_Y_lo_temp +// coshf_FR_COSH = Y_hi + Y_lo + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_Y_lo_temp = coshf_FR_C_hi, coshf_FR_peven, coshf_FR_C_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_Y_lo = coshf_FR_S_hi, coshf_FR_podd, coshf_FR_Y_lo_temp + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s.s0 f8 = coshf_FR_C_hi, f1, coshf_FR_Y_lo +(p0) br.ret.sptk b0 ;; +} + + +L(COSH_BY_EXP): + +// When p7 is true, we know that an overflow is not going to happen +// When p7 is false, we must check for possible overflow +// p7 is the over_SAFE flag +// f44 = Scale * (Y_hi + Y_lo) +// = coshf_FR_spos * (coshf_FR_Tjhi + coshf_FR_Y_lo) + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_Y_lo_temp = coshf_FR_peven, f1, coshf_FR_podd + nop.i 999 +} + +// Now we are in EXP. This is the only path where an overflow is possible +// but not for certain. So this is the only path where over_SAFE has any use. +// r34 still has N-1 +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// There is a danger of double overflow if N-1 > 0x3fe = 1022 +// There is a danger of single overflow if N-1 > 0x7e = 126 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000000007e ;; +} + +{ .mfi +(p0) cmp.gt.unc p0,p7 = r34, r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_Y_lo = coshf_FR_Tjhi, coshf_FR_Y_lo_temp, coshf_FR_Tjlo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_COSH_temp = coshf_FR_Y_lo, f1, coshf_FR_Tjhi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s0 f44 = coshf_FR_spos, coshf_FR_COSH_temp, f0 + nop.i 999 ;; +} + +// If over_SAFE is set, return +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = f44,f44 +(p7) br.ret.sptk b0 ;; +} + +// Else see if we overflowed +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// If WRE is set then an overflow will not occur in EXP. +// The input value that would cause a register (WRE) value to overflow is about 2^15 +// and this input would go into the HUGE path. +// Answer with WRE is in f43. + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s2 f43 = coshf_FR_spos, coshf_FR_COSH_temp, f0 + nop.i 999 ;; +} + +// 1 more that the exponent of the largest double (7FE) = 7FF +// 7FF - 3FF = 400 (true); 400 + FFFF = 103FF (register-biased) +// So 0 103FF 8000000000000000 is one ulp more than +// largest double in register bias +// 1 more that the exponent of the largest single (FE) = FF +// FF - 7F = 80 (true); 80 + FFFF = 1007F (register-biased) +// Now set p8 if the answer with WRE is greater than or equal this value +// Also set p9 if the answer with WRE is less than or equal to negative this value + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000001007f ;; +} + +{ .mmf + nop.m 999 +(p0) setf.exp f41 = r32 +(p0) fsetc.s2 0x7F,0x40 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p8, p0 = f43, f41 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f42 = f41, f41 + nop.i 999 ;; +} + +// The error tag for overflow is 65 +{ .mii + nop.m 999 + nop.i 999 ;; +(p8) mov GR_Parameter_TAG = 65 ;; +} + +{ .mfb + nop.m 999 +(p0) fcmp.le.unc.s1 p9, p0 = f43, f42 +(p8) br.cond.spnt __libm_error_region ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov GR_Parameter_TAG = 64 +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt __libm_error_region ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f44,f44 +(p0) br.ret.sptk b0 ;; +} + + +L(COSH_HUGE): + +// for COSH_HUGE, put 24000 in exponent; take sign from input; add 1 +// SAFE: SAFE is always 0 for HUGE + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000015dbf ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 coshf_FR_hi_lo = f1, f9, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s0 f44 = f9, coshf_FR_hi_lo, f0 +(p0) mov GR_Parameter_TAG = 65 +} +.endp coshf +ASM_SIZE_DIRECTIVE(coshf) + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk.many b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_coshl.S glibc-2.2.3/sysdeps/ia64/fpu/e_coshl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_coshl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_coshl.S Mon Feb 19 00:43:03 2001 @@ -0,0 +1,1150 @@ +.file "coshl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 1/23/01 Set inexact flag for large args. +// +// API +//============================================================== +// float = cosh(float) +// double = cosh(double) +// long double = coshl(long double) +// input floating point f8 +// output floating point f8 + + +// Overview of operation +//============================================================== +// There are four paths + +// 1. |x| < 0.25 COSH_BY_POLY +// 2. |x| < 32 COSH_BY_TBL +// 3. |x| < 2^14 COSH_BY_EXP +// 4. |x| >= 2^14 COSH_HUGE + +// For paths 1, and 2 SAFE is always 1. +// For path 4, Safe is always 0. +// SAFE = 1 means we cannot overflow. + +#include "libm_support.h" + +// Assembly macros +//============================================================== +cosh_FR_X = f44 +FR_RESULT = f44 +cosh_FR_SGNX = f40 +cosh_FR_all_ones = f45 + +FR_X = f8 +FR_Y = f0 +cosh_FR_Inv_log2by64 = f9 +cosh_FR_log2by64_lo = f11 +cosh_FR_log2by64_hi = f10 + +cosh_FR_A1 = f9 +cosh_FR_A2 = f10 +cosh_FR_A3 = f11 + +cosh_FR_Rcub = f12 +cosh_FR_M_temp = f13 +cosh_FR_R_temp = f13 +cosh_FR_Rsq = f13 +cosh_FR_R = f14 + +cosh_FR_M = f38 + +cosh_FR_tmp = f15 +cosh_FR_B1 = f15 +cosh_FR_B2 = f32 +cosh_FR_B3 = f33 + +cosh_FR_peven_temp1 = f34 +cosh_FR_peven_temp2 = f35 +cosh_FR_peven = f36 + +cosh_FR_podd_temp1 = f34 +cosh_FR_podd_temp2 = f35 +cosh_FR_podd = f37 + +cosh_FR_J_temp = f9 +cosh_FR_J = f10 + +cosh_FR_Mmj = f39 + +cosh_FR_N_temp1 = f11 +cosh_FR_N_temp2 = f12 +cosh_FR_N = f13 + +cosh_FR_spos = f14 +cosh_FR_sneg = f15 + +cosh_FR_Tjhi = f32 +cosh_FR_Tjlo = f33 +cosh_FR_Tmjhi = f34 +cosh_FR_Tmjlo = f35 + +GR_mJ = r35 +GR_J = r36 + +AD_mJ = r38 +AD_J = r39 + +cosh_GR_all_ones = r40 + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 +GR_Parameter_TAG = r47 + +cosh_FR_C_hi = f9 +cosh_FR_C_hi_temp = f10 +cosh_FR_C_lo_temp1 = f11 +cosh_FR_C_lo_temp2 = f12 +cosh_FR_C_lo_temp3 = f13 + +cosh_FR_C_lo = f38 +cosh_FR_S_hi = f39 + +cosh_FR_S_hi_temp1 = f10 +cosh_FR_Y_hi = f11 +cosh_FR_Y_lo_temp = f12 +cosh_FR_Y_lo = f13 +cosh_FR_COSH = f9 + +cosh_FR_X2 = f9 +cosh_FR_X4 = f10 + +cosh_FR_P1 = f14 +cosh_FR_P2 = f15 +cosh_FR_P3 = f32 +cosh_FR_P4 = f33 +cosh_FR_P5 = f34 +cosh_FR_P6 = f35 + +cosh_FR_TINY_THRESH = f9 + +cosh_FR_COSH_temp = f10 +cosh_FR_SCALE = f11 + +cosh_FR_hi_lo = f10 + +cosh_FR_poly_podd_temp1 = f11 +cosh_FR_poly_podd_temp2 = f13 +cosh_FR_poly_peven_temp1 = f11 +cosh_FR_poly_peven_temp2 = f13 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +double_cosh_arg_reduction: +ASM_TYPE_DIRECTIVE(double_cosh_arg_reduction,@object) + data8 0xB8AA3B295C17F0BC, 0x00004005 + data8 0xB17217F7D1000000, 0x00003FF8 + data8 0xCF79ABC9E3B39804, 0x00003FD0 +ASM_SIZE_DIRECTIVE(double_cosh_arg_reduction) + +double_cosh_p_table: +ASM_TYPE_DIRECTIVE(double_cosh_p_table,@object) + data8 0x8000000000000000, 0x00003FFE + data8 0xAAAAAAAAAAAAAB80, 0x00003FFA + data8 0xB60B60B60B4FE884, 0x00003FF5 + data8 0xD00D00D1021D7370, 0x00003FEF + data8 0x93F27740C0C2F1CC, 0x00003FE9 + data8 0x8FA02AC65BCBD5BC, 0x00003FE2 +ASM_SIZE_DIRECTIVE(double_cosh_p_table) + +double_cosh_ab_table: +ASM_TYPE_DIRECTIVE(double_cosh_ab_table,@object) + data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC + data8 0x88888888884ECDD5, 0x00003FF8 + data8 0xD00D0C6DCC26A86B, 0x00003FF2 + data8 0x8000000000000002, 0x00003FFE + data8 0xAAAAAAAAAA402C77, 0x00003FFA + data8 0xB60B6CC96BDB144D, 0x00003FF5 +ASM_SIZE_DIRECTIVE(double_cosh_ab_table) + +double_cosh_j_table: +ASM_TYPE_DIRECTIVE(double_cosh_j_table,@object) + data8 0xB504F333F9DE6484, 0x00003FFE, 0x1EB2FB13, 0x00000000 + data8 0xB6FD91E328D17791, 0x00003FFE, 0x1CE2CBE2, 0x00000000 + data8 0xB8FBAF4762FB9EE9, 0x00003FFE, 0x1DDC3CBC, 0x00000000 + data8 0xBAFF5AB2133E45FB, 0x00003FFE, 0x1EE9AA34, 0x00000000 + data8 0xBD08A39F580C36BF, 0x00003FFE, 0x9EAEFDC1, 0x00000000 + data8 0xBF1799B67A731083, 0x00003FFE, 0x9DBF517B, 0x00000000 + data8 0xC12C4CCA66709456, 0x00003FFE, 0x1EF88AFB, 0x00000000 + data8 0xC346CCDA24976407, 0x00003FFE, 0x1E03B216, 0x00000000 + data8 0xC5672A115506DADD, 0x00003FFE, 0x1E78AB43, 0x00000000 + data8 0xC78D74C8ABB9B15D, 0x00003FFE, 0x9E7B1747, 0x00000000 + data8 0xC9B9BD866E2F27A3, 0x00003FFE, 0x9EFE3C0E, 0x00000000 + data8 0xCBEC14FEF2727C5D, 0x00003FFE, 0x9D36F837, 0x00000000 + data8 0xCE248C151F8480E4, 0x00003FFE, 0x9DEE53E4, 0x00000000 + data8 0xD06333DAEF2B2595, 0x00003FFE, 0x9E24AE8E, 0x00000000 + data8 0xD2A81D91F12AE45A, 0x00003FFE, 0x1D912473, 0x00000000 + data8 0xD4F35AABCFEDFA1F, 0x00003FFE, 0x1EB243BE, 0x00000000 + data8 0xD744FCCAD69D6AF4, 0x00003FFE, 0x1E669A2F, 0x00000000 + data8 0xD99D15C278AFD7B6, 0x00003FFE, 0x9BBC610A, 0x00000000 + data8 0xDBFBB797DAF23755, 0x00003FFE, 0x1E761035, 0x00000000 + data8 0xDE60F4825E0E9124, 0x00003FFE, 0x9E0BE175, 0x00000000 + data8 0xE0CCDEEC2A94E111, 0x00003FFE, 0x1CCB12A1, 0x00000000 + data8 0xE33F8972BE8A5A51, 0x00003FFE, 0x1D1BFE90, 0x00000000 + data8 0xE5B906E77C8348A8, 0x00003FFE, 0x1DF2F47A, 0x00000000 + data8 0xE8396A503C4BDC68, 0x00003FFE, 0x1EF22F22, 0x00000000 + data8 0xEAC0C6E7DD24392F, 0x00003FFE, 0x9E3F4A29, 0x00000000 + data8 0xED4F301ED9942B84, 0x00003FFE, 0x1EC01A5B, 0x00000000 + data8 0xEFE4B99BDCDAF5CB, 0x00003FFE, 0x1E8CAC3A, 0x00000000 + data8 0xF281773C59FFB13A, 0x00003FFE, 0x9DBB3FAB, 0x00000000 + data8 0xF5257D152486CC2C, 0x00003FFE, 0x1EF73A19, 0x00000000 + data8 0xF7D0DF730AD13BB9, 0x00003FFE, 0x9BB795B5, 0x00000000 + data8 0xFA83B2DB722A033A, 0x00003FFE, 0x1EF84B76, 0x00000000 + data8 0xFD3E0C0CF486C175, 0x00003FFE, 0x9EF5818B, 0x00000000 + data8 0x8000000000000000, 0x00003FFF, 0x00000000, 0x00000000 + data8 0x8164D1F3BC030773, 0x00003FFF, 0x1F77CACA, 0x00000000 + data8 0x82CD8698AC2BA1D7, 0x00003FFF, 0x1EF8A91D, 0x00000000 + data8 0x843A28C3ACDE4046, 0x00003FFF, 0x1E57C976, 0x00000000 + data8 0x85AAC367CC487B15, 0x00003FFF, 0x9EE8DA92, 0x00000000 + data8 0x871F61969E8D1010, 0x00003FFF, 0x1EE85C9F, 0x00000000 + data8 0x88980E8092DA8527, 0x00003FFF, 0x1F3BF1AF, 0x00000000 + data8 0x8A14D575496EFD9A, 0x00003FFF, 0x1D80CA1E, 0x00000000 + data8 0x8B95C1E3EA8BD6E7, 0x00003FFF, 0x9D0373AF, 0x00000000 + data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF, 0x9F167097, 0x00000000 + data8 0x8EA4398B45CD53C0, 0x00003FFF, 0x1EB70051, 0x00000000 + data8 0x9031DC431466B1DC, 0x00003FFF, 0x1F6EB029, 0x00000000 + data8 0x91C3D373AB11C336, 0x00003FFF, 0x1DFD6D8E, 0x00000000 + data8 0x935A2B2F13E6E92C, 0x00003FFF, 0x9EB319B0, 0x00000000 + data8 0x94F4EFA8FEF70961, 0x00003FFF, 0x1EBA2BEB, 0x00000000 + data8 0x96942D3720185A00, 0x00003FFF, 0x1F11D537, 0x00000000 + data8 0x9837F0518DB8A96F, 0x00003FFF, 0x1F0D5A46, 0x00000000 + data8 0x99E0459320B7FA65, 0x00003FFF, 0x9E5E7BCA, 0x00000000 + data8 0x9B8D39B9D54E5539, 0x00003FFF, 0x9F3AAFD1, 0x00000000 + data8 0x9D3ED9A72CFFB751, 0x00003FFF, 0x9E86DACC, 0x00000000 + data8 0x9EF5326091A111AE, 0x00003FFF, 0x9F3EDDC2, 0x00000000 + data8 0xA0B0510FB9714FC2, 0x00003FFF, 0x1E496E3D, 0x00000000 + data8 0xA27043030C496819, 0x00003FFF, 0x9F490BF6, 0x00000000 + data8 0xA43515AE09E6809E, 0x00003FFF, 0x1DD1DB48, 0x00000000 + data8 0xA5FED6A9B15138EA, 0x00003FFF, 0x1E65EBFB, 0x00000000 + data8 0xA7CD93B4E965356A, 0x00003FFF, 0x9F427496, 0x00000000 + data8 0xA9A15AB4EA7C0EF8, 0x00003FFF, 0x1F283C4A, 0x00000000 + data8 0xAB7A39B5A93ED337, 0x00003FFF, 0x1F4B0047, 0x00000000 + data8 0xAD583EEA42A14AC6, 0x00003FFF, 0x1F130152, 0x00000000 + data8 0xAF3B78AD690A4375, 0x00003FFF, 0x9E8367C0, 0x00000000 + data8 0xB123F581D2AC2590, 0x00003FFF, 0x9F705F90, 0x00000000 + data8 0xB311C412A9112489, 0x00003FFF, 0x1EFB3C53, 0x00000000 + data8 0xB504F333F9DE6484, 0x00003FFF, 0x1F32FB13, 0x00000000 +ASM_SIZE_DIRECTIVE(double_cosh_j_table) + +.align 32 +.global coshl# + +.section .text +.proc coshl# +.align 32 + +coshl: + +#ifdef _LIBC +.global __ieee754_coshl# +.proc __ieee754_coshl# +__ieee754_coshl: +#endif + +// X NAN? + +{ .mfi + alloc r32 = ar.pfs,0,12,4,0 +(p0) fclass.m.unc p6,p7 = f8, 0xc3 + mov cosh_GR_all_ones = -1 +};; + +// This is more than we need but it is in preparation +// for the values we add for error support. We push three +// addresses on the stack (3*8) = 24 bytes and one tag + +{ .mfb + nop.m 999 +(p6) fma.s0 f8 = f8,f1,f8 +(p6) br.ret.spnt b0 ;; +} + + +// Make constant that will generate inexact when squared +// X infinity +{ .mfi + setf.sig cosh_FR_all_ones = cosh_GR_all_ones +(p0) fclass.m.unc p6,p0 = f8, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fmerge.s f8 = f0,f8 +(p6) br.ret.spnt b0 ;; +} + + + +// Put 0.25 in f9; p6 true if x < 0.25 +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000000fffd ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s cosh_FR_X = f0,f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.s cosh_FR_SGNX = f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc p0,p7 = cosh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.sptk L(COSH_BY_TBL) +} +;; + + +// COSH_BY_POLY: +// POLY cannot overflow so there is no need to call __libm_error_support +// Get the values of P_x from the table + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_cosh_p_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate cosh_FR_X2 = ax*ax and cosh_FR_X4 = ax*ax*ax*ax +{ .mmf + nop.m 999 +(p0) ldfe cosh_FR_P1 = [r34],16 +(p0) fma.s1 cosh_FR_X2 = cosh_FR_X, cosh_FR_X, f0 ;; +} + +{ .mmi +(p0) ldfe cosh_FR_P2 = [r34],16 ;; +(p0) ldfe cosh_FR_P3 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe cosh_FR_P4 = [r34],16 ;; +(p0) ldfe cosh_FR_P5 = [r34],16 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe cosh_FR_P6 = [r34],16 +(p0) fma.s1 cosh_FR_X4 = cosh_FR_X2, cosh_FR_X2, f0 + nop.i 999 ;; +} + +// Calculate cosh_FR_podd = x4 *(x4 * P_5 + P_3) + P_1 +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_poly_podd_temp1 = cosh_FR_X4, cosh_FR_P5, cosh_FR_P3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd = cosh_FR_X4, cosh_FR_poly_podd_temp1, cosh_FR_P1 + nop.i 999 +} + +// Calculate cosh_FR_peven = p_even = x4 *(x4 * (x4 * P_6 + P_4) + P_2) +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_poly_peven_temp1 = cosh_FR_X4, cosh_FR_P6, cosh_FR_P4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_poly_peven_temp2 = cosh_FR_X4, cosh_FR_poly_peven_temp1, cosh_FR_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven = cosh_FR_X4, cosh_FR_poly_peven_temp2, f0 + nop.i 999 ;; +} + +// Y_lo = x2*p_odd + p_even +// Calculate f8 = Y_hi + Y_lo +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo = cosh_FR_X2, cosh_FR_podd, cosh_FR_peven + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s0 f8 = f1, f1, cosh_FR_Y_lo +(p0) br.ret.sptk b0 ;; +} + + +L(COSH_BY_TBL): + +// Now that we are at TBL; so far all we know is that |x| >= 0.25. +// The first two steps are the same for TBL and EXP, but if we are HUGE +// Double Extended +// Go to HUGE if |x| >= 2^14, 1000d (register-biased) is e = 14 (true) +// Double +// Go to HUGE if |x| >= 2^10, 10009 (register-biased) is e = 10 (true) +// Single +// Go to HUGE if |x| >= 2^7, 10006 (register-biased) is e = 7 (true) +// we want to leave now. Go to HUGE if |x| >= 2^14 +// 1000d (register-biased) is e = 14 (true) + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000001000d ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc p6,p7 = cosh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(COSH_HUGE) ;; +} + +// r32 = 1 +// r34 = N-1 +// r35 = N +// r36 = j +// r37 = N+1 + +// TBL can never overflow +// cosh(x) = cosh(B+R) +// = cosh(B) cosh(R) + sinh(B) sinh(R) +// cosh(R) can be approximated by 1 + p_even +// sinh(R) can be approximated by p_odd + +// ****************************************************** +// STEP 1 (TBL and EXP) +// ****************************************************** +// Get the following constants. +// f9 = Inv_log2by64 +// f10 = log2by64_hi +// f11 = log2by64_lo + +{ .mmi +(p0) adds r32 = 0x1,r0 +(p0) addl r34 = @ltoff(double_cosh_arg_reduction), gp + nop.i 999 +} +;; + +// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and +// put them in an exponent. +// cosh_FR_spos = 2^(N-1) and cosh_FR_sneg = 2^(-N-1) +// r39 = 0xffff + (N-1) = 0xffff +N -1 +// r40 = 0xffff - (N +1) = 0xffff -N -1 + +{ .mlx + ld8 r34 = [r34] +(p0) movl r38 = 0x000000000000fffe ;; +} + +{ .mmi +(p0) ldfe cosh_FR_Inv_log2by64 = [r34],16 ;; +(p0) ldfe cosh_FR_log2by64_hi = [r34],16 + nop.i 999 ;; +} + +{ .mbb +(p0) ldfe cosh_FR_log2by64_lo = [r34],16 + nop.b 999 + nop.b 999 ;; +} + +// Get the A coefficients +// f9 = A_1 +// f10 = A_2 +// f11 = A_3 + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_cosh_ab_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate M and keep it as integer and floating point. +// M = round-to-integer(x*Inv_log2by64) +// cosh_FR_M = M = truncate(ax/(log2/64)) +// Put the significand of M in r35 +// and the floating point representation of M in cosh_FR_M + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_M = cosh_FR_X, cosh_FR_Inv_log2by64, f0 + nop.i 999 +} + +{ .mfi +(p0) ldfe cosh_FR_A1 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.fx.s1 cosh_FR_M_temp = cosh_FR_M + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnorm.s1 cosh_FR_M = cosh_FR_M_temp + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r35 = cosh_FR_M_temp + nop.f 999 + nop.i 999 ;; +} + +// M is still in r35. Calculate j. j is the signed extension of the six lsb of M. It +// has a range of -32 thru 31. +// r35 = M +// r36 = j +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) and r36 = 0x3f, r35 ;; +} + +// Calculate R +// f13 = f44 - f12*f10 = x - M*log2by64_hi +// f14 = f13 - f8*f11 = R = (x - M*log2by64_hi) - M*log2by64_lo + +{ .mfi + nop.m 999 +(p0) fnma.s1 cosh_FR_R_temp = cosh_FR_M, cosh_FR_log2by64_hi, cosh_FR_X + nop.i 999 +} + +{ .mfi +(p0) ldfe cosh_FR_A2 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 cosh_FR_R = cosh_FR_M, cosh_FR_log2by64_lo, cosh_FR_R_temp + nop.i 999 +} + +// Get the B coefficients +// f15 = B_1 +// f32 = B_2 +// f33 = B_3 + +{ .mmi +(p0) ldfe cosh_FR_A3 = [r34],16 ;; +(p0) ldfe cosh_FR_B1 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe cosh_FR_B2 = [r34],16 ;; +(p0) ldfe cosh_FR_B3 = [r34],16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) shl r34 = r36, 0x2 ;; +(p0) sxt1 r37 = r34 ;; +} + +// ****************************************************** +// STEP 2 (TBL and EXP) +// ****************************************************** +// Calculate Rsquared and Rcubed in preparation for p_even and p_odd +// f12 = R*R*R +// f13 = R*R +// f14 = R <== from above + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Rsq = cosh_FR_R, cosh_FR_R, f0 +(p0) shr r36 = r37, 0x2 ;; +} + +// r34 = M-j = r35 - r36 +// r35 = N = (M-j)/64 + +{ .mii +(p0) sub r34 = r35, r36 + nop.i 999 ;; +(p0) shr r35 = r34, 0x6 ;; +} + +{ .mii +(p0) sub r40 = r38, r35 +(p0) adds r37 = 0x1, r35 +(p0) add r39 = r38, r35 ;; +} + +// Get the address of the J table, add the offset, +// addresses are sinh_AD_mJ and sinh_AD_J, get the T value +// f32 = T(j)_hi +// f33 = T(j)_lo +// f34 = T(-j)_hi +// f35 = T(-j)_lo + +{ .mmi +(p0) sub r34 = r35, r32 +(p0) addl r37 = @ltoff(double_cosh_j_table), gp + nop.i 999 +} +;; + +{ .mfi + ld8 r37 = [r37] +(p0) fma.s1 cosh_FR_Rcub = cosh_FR_Rsq, cosh_FR_R, f0 + nop.i 999 +} + +// ****************************************************** +// STEP 3 Now decide if we need to branch to EXP +// ****************************************************** +// Put 32 in f9; p6 true if x < 32 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010004 ;; +} + +// Calculate p_even +// f34 = B_2 + Rsq *B_3 +// f35 = B_1 + Rsq*f34 = B_1 + Rsq * (B_2 + Rsq *B_3) +// f36 = peven = Rsq * f35 = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven_temp1 = cosh_FR_Rsq, cosh_FR_B3, cosh_FR_B2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven_temp2 = cosh_FR_Rsq, cosh_FR_peven_temp1, cosh_FR_B1 + nop.i 999 +} + +// Calculate p_odd +// f34 = A_2 + Rsq *A_3 +// f35 = A_1 + Rsq * (A_2 + Rsq *A_3) +// f37 = podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd_temp1 = cosh_FR_Rsq, cosh_FR_A3, cosh_FR_A2 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp cosh_FR_N_temp1 = r39 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_peven = cosh_FR_Rsq, cosh_FR_peven_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd_temp2 = cosh_FR_Rsq, cosh_FR_podd_temp1, cosh_FR_A1 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_podd = cosh_FR_podd_temp2, cosh_FR_Rcub, cosh_FR_R + nop.i 999 +} + +// sinh_GR_mj contains the table offset for -j +// sinh_GR_j contains the table offset for +j +// p6 is true when j <= 0 + +{ .mlx +(p0) setf.exp cosh_FR_N_temp2 = r40 +(p0) movl r40 = 0x0000000000000020 ;; +} + +{ .mfi +(p0) sub GR_mJ = r40, r36 +(p0) fmerge.se cosh_FR_spos = cosh_FR_N_temp1, f1 +(p0) adds GR_J = 0x20, r36 ;; +} + +{ .mii + nop.m 999 +(p0) shl GR_mJ = GR_mJ, 5 ;; +(p0) add AD_mJ = r37, GR_mJ ;; +} + +{ .mmi + nop.m 999 +(p0) ldfe cosh_FR_Tmjhi = [AD_mJ],16 +(p0) shl GR_J = GR_J, 5 ;; +} + +{ .mfi +(p0) ldfs cosh_FR_Tmjlo = [AD_mJ],16 +(p0) fcmp.lt.unc.s1 p6,p7 = cosh_FR_X,f9 +(p0) add AD_J = r37, GR_J ;; +} + +{ .mmi +(p0) ldfe cosh_FR_Tjhi = [AD_J],16 ;; +(p0) ldfs cosh_FR_Tjlo = [AD_J],16 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.se cosh_FR_sneg = cosh_FR_N_temp2, f1 +(p7) br.cond.spnt L(COSH_BY_EXP) ;; +} + +// ****************************************************** +// If NOT branch to EXP +// ****************************************************** +// Calculate C_hi +// ****************************************************** +// cosh_FR_C_hi_temp = cosh_FR_sneg * cosh_FR_Tmjhi +// cosh_FR_C_hi = cosh_FR_spos * cosh_FR_Tjhi + (cosh_FR_sneg * cosh_FR_Tmjhi) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_hi_temp = cosh_FR_sneg, cosh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_hi = cosh_FR_spos, cosh_FR_Tjhi, cosh_FR_C_hi_temp + nop.i 999 +} + +// ****************************************************** +// Calculate S_hi +// ****************************************************** +// cosh_FR_S_hi_temp1 = cosh_FR_sneg * cosh_FR_Tmjhi +// cosh_FR_S_hi = cosh_FR_spos * cosh_FR_Tjhi - cosh_FR_C_hi_temp1 + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_S_hi_temp1 = cosh_FR_sneg, cosh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +// ****************************************************** +// Calculate C_lo +// ****************************************************** +// cosh_FR_C_lo_temp1 = cosh_FR_spos * cosh_FR_Tjhi - cosh_FR_C_hi +// cosh_FR_C_lo_temp2 = cosh_FR_sneg * cosh_FR_Tmjlo + (cosh_FR_spos * cosh_FR_Tjhi - cosh_FR_C_hi) +// cosh_FR_C_lo_temp1 = cosh_FR_sneg * cosh_FR_Tmjlo +// cosh_FR_C_lo_temp3 = cosh_FR_spos * cosh_FR_Tjlo + (cosh_FR_sneg * cosh_FR_Tmjlo) +// cosh_FR_C_lo = cosh_FR_C_lo_temp3 + cosh_FR_C_lo_temp2 + +{ .mfi + nop.m 999 +(p0) fms.s1 cosh_FR_C_lo_temp1 = cosh_FR_spos, cosh_FR_Tjhi, cosh_FR_C_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fms.s1 cosh_FR_S_hi = cosh_FR_spos, cosh_FR_Tjhi, cosh_FR_S_hi_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo_temp2 = cosh_FR_sneg, cosh_FR_Tmjhi, cosh_FR_C_lo_temp1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo_temp1 = cosh_FR_sneg, cosh_FR_Tmjlo, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo_temp3 = cosh_FR_spos, cosh_FR_Tjlo, cosh_FR_C_lo_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_C_lo = cosh_FR_C_lo_temp3, f1, cosh_FR_C_lo_temp2 + nop.i 999 ;; +} + +// ****************************************************** +// cosh_FR_Y_lo_temp = cosh_FR_C_hi * cosh_FR_peven + cosh_FR_C_lo +// cosh_FR_Y_lo = cosh_FR_S_hi * cosh_FR_podd + cosh_FR_Y_lo_temp +// cosh_FR_COSH = Y_hi + Y_lo + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo_temp = cosh_FR_C_hi, cosh_FR_peven, cosh_FR_C_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo = cosh_FR_S_hi, cosh_FR_podd, cosh_FR_Y_lo_temp + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s0 f8 = cosh_FR_C_hi, f1, cosh_FR_Y_lo +(p0) br.ret.sptk b0 ;; +} + +L(COSH_BY_EXP): + +// When p7 is true, we know that an overflow is not going to happen +// When p7 is false, we must check for possible overflow +// p7 is the over_SAFE flag +// f44 = Scale * (Y_hi + Y_lo) +// = cosh_FR_spos * (cosh_FR_Tjhi + cosh_FR_Y_lo) + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo_temp = cosh_FR_peven, f1, cosh_FR_podd + nop.i 999 +} + +// Now we are in EXP. This is the only path where an overflow is possible +// but not for certain. So this is the only path where over_SAFE has any use. +// r34 still has N-1 +// There is a danger of double-extended overflow if N-1 > 0x3ffe = 16382 +// There is a danger of double overflow if N-1 > 0x3fe = 1022 +// There is a danger of single overflow if N-1 > 0x7e = 126 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000003ffe ;; +} + +{ .mfi +(p0) cmp.gt.unc p0,p7 = r34, r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_Y_lo = cosh_FR_Tjhi, cosh_FR_Y_lo_temp, cosh_FR_Tjlo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_COSH_temp = cosh_FR_Y_lo, f1, cosh_FR_Tjhi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s0 f44 = cosh_FR_spos, cosh_FR_COSH_temp, f0 + nop.i 999 ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p7) fmpy.s0 cosh_FR_tmp = cosh_FR_all_ones, cosh_FR_all_ones + nop.i 999 ;; +} + +// If over_SAFE is set, return +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = f44,f44 +(p7) br.ret.sptk b0 ;; +} + +// Else see if we overflowed +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// If WRE is set then an overflow will not occur in EXP. +// The input value that would cause a register (WRE) value to overflow is about 2^15 +// and this input would go into the HUGE path. +// Answer with WRE is in f43. + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.s2 f43 = cosh_FR_spos, cosh_FR_COSH_temp, f0 + nop.i 999 ;; +} + +// 103FF => 103FF -FFFF = 400(true) +// 400 + 3FF = 7FF, which is 1 more than the exponent of the largest +// double (7FE). So 0 103FF 8000000000000000 is one ulp more than +// largest double in register bias + +// 13FFF => 13FFF -FFFF = 4000(true) + +// Now set p8 if the answer with WRE is greater than or equal this value +// Also set p9 if the answer with WRE is less than or equal to negative this value + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000013fff ;; +} + +{ .mmf + nop.m 999 +(p0) setf.exp f41 = r32 +(p0) fsetc.s2 0x7F,0x40 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p8, p0 = f43, f41 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f42 = f41, f41 + nop.i 999 ;; +} + +// The error tag for overflow is 63 +{ .mii + nop.m 999 + nop.i 999 ;; +(p8) mov GR_Parameter_TAG = 63 ;; +} + +{ .mfb + nop.m 999 +(p0) fcmp.le.unc.s1 p9, p0 = f43, f42 +(p8) br.cond.spnt __libm_error_region ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov GR_Parameter_TAG = 63 +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt __libm_error_region ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 cosh_FR_tmp = cosh_FR_all_ones, cosh_FR_all_ones + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f44,f44 +(p0) br.ret.sptk b0 ;; +} + + +// for COSH_HUGE, put 24000 in exponent; take sign from input; add 1 +// SAFE: SAFE is always 0 for HUGE + +L(COSH_HUGE): + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000015dbf ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 cosh_FR_hi_lo = f1, f9, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s0 f44 = f9, cosh_FR_hi_lo, f0 +(p0) mov GR_Parameter_TAG = 63 +} +.endp coshl +ASM_SIZE_DIRECTIVE(coshl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_exp.S glibc-2.2.3/sysdeps/ia64/fpu/e_exp.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_exp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_exp.S Mon Feb 19 00:43:12 2001 @@ -0,0 +1,815 @@ +.file "exp.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 3/07/00 exp(inf) = inf but now does NOT call error support +// exp(-inf) = 0 but now does NOT call error support +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 11/30/00 Reworked to shorten main path, widen main path to include all +// args in normal range, and add quick exit for 0, nan, inf. +// 12/05/00 Loaded constants earlier with setf to save 2 cycles. + +// API +//============================================================== +// double exp(double) + +// Overview of operation +//============================================================== +// Take the input x. w is "how many log2/128 in x?" +// w = x * 128/log2 +// n = int(w) +// x = n log2/128 + r + delta + +// n = 128M + index_1 + 2^4 index_2 +// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta + +// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) +// Construct 2^M +// Get 2^(index_1/128) from table_1; +// Get 2^(index_2/8) from table_2; +// Calculate exp(r) by series +// r = x - n (log2/128)_high +// delta = - n (log2/128)_low +// Calculate exp(delta) as 1 + delta + + +// Special values +//============================================================== +// exp(+0) = 1.0 +// exp(-0) = 1.0 + +// exp(+qnan) = +qnan +// exp(-qnan) = -qnan +// exp(+snan) = +qnan +// exp(-snan) = -qnan + +// exp(-inf) = +0 +// exp(+inf) = +inf + +// Overfow and Underfow +//======================= +// exp(-x) = smallest double normal when +// x = -708.396 = c086232bdd7abcd2 + +// exp(x) = largest double normal when +// x = 709.7827 = 40862e42fefa39ef + + + +// Registers used +//============================================================== +// Floating Point registers used: +// f8, input +// f9 -> f15, f32 -> f60 + +// General registers used: +// r32 -> r60 + +// Predicate registers used: +// p6 -> p15 + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +exp_GR_rshf = r33 +EXP_AD_TB1 = r34 +EXP_AD_TB2 = r35 +EXP_AD_P = r36 + +exp_GR_N = r37 +exp_GR_index_1 = r38 +exp_GR_index_2_16 = r39 + +exp_GR_biased_M = r40 +exp_GR_index_1_16 = r41 +EXP_AD_T1 = r42 +EXP_AD_T2 = r43 +exp_GR_sig_inv_ln2 = r44 + +exp_GR_17ones = r45 +exp_GR_one = r46 +exp_TB1_size = r47 +exp_TB2_size = r48 +exp_GR_rshf_2to56 = r49 + +exp_GR_gt_ln = r50 +exp_GR_exp_2tom56 = r51 + +exp_GR_17ones_m1 = r52 + +GR_SAVE_B0 = r53 +GR_SAVE_PFS = r54 +GR_SAVE_GP = r55 +GR_SAVE_SP = r56 + +GR_Parameter_X = r57 +GR_Parameter_Y = r58 +GR_Parameter_RESULT = r59 +GR_Parameter_TAG = r60 + + +FR_X = f10 +FR_Y = f1 +FR_RESULT = f8 + +EXP_RSHF_2TO56 = f6 +EXP_INV_LN2_2TO63 = f7 +EXP_W_2TO56_RSH = f9 +EXP_2TOM56 = f11 +exp_P4 = f12 +exp_P3 = f13 +exp_P2 = f14 +exp_P1 = f15 + +exp_ln2_by_128_hi = f33 +exp_ln2_by_128_lo = f34 + +EXP_RSHF = f35 +EXP_Nfloat = f36 +exp_W = f37 +exp_r = f38 +exp_f = f39 + +exp_rsq = f40 +exp_rcube = f41 + +EXP_2M = f42 +exp_S1 = f43 +exp_T1 = f44 + +EXP_MIN_DBL_OFLOW_ARG = f45 +EXP_MAX_DBL_ZERO_ARG = f46 +EXP_MAX_DBL_NORM_ARG = f47 +EXP_MAX_DBL_UFLOW_ARG = f48 +EXP_MIN_DBL_NORM_ARG = f49 +exp_rP4pP3 = f50 +exp_P_lo = f51 +exp_P_hi = f52 +exp_P = f53 +exp_S = f54 + +EXP_NORM_f8 = f56 + +exp_wre_urm_f8 = f57 +exp_ftz_urm_f8 = f57 + +exp_gt_pln = f58 + +exp_S2 = f59 +exp_T2 = f60 + + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** + +// double-extended 1/ln(2) +// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 +// 3fff b8aa 3b29 5c17 f0bc +// For speed the significand will be loaded directly with a movl and setf.sig +// and the exponent will be bias+63 instead of bias+0. Thus subsequent +// computations need to scale appropriately. +// The constant 128/ln(2) is needed for the computation of w. This is also +// obtained by scaling the computations. +// +// Two shifting constants are loaded directly with movl and setf.d. +// 1. EXP_RSHF_2TO56 = 1.1000..00 * 2^(63-7) +// This constant is added to x*1/ln2 to shift the integer part of +// x*128/ln2 into the rightmost bits of the significand. +// The result of this fma is EXP_W_2TO56_RSH. +// 2. EXP_RSHF = 1.1000..00 * 2^(63) +// This constant is subtracted from EXP_W_2TO56_RSH * 2^(-56) to give +// the integer part of w, n, as a floating-point number. +// The result of this fms is EXP_Nfloat. + + +exp_table_1: +ASM_TYPE_DIRECTIVE(exp_table_1,@object) +data8 0x40862e42fefa39f0 // smallest dbl overflow arg +data8 0xc0874c0000000000 // approx largest arg for zero result +data8 0x40862e42fefa39ef // largest dbl arg to give normal dbl result +data8 0xc086232bdd7abcd3 // largest dbl underflow arg +data8 0xc086232bdd7abcd2 // smallest dbl arg to give normal dbl result +data8 0x0 // pad +data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi +data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo + +// Table 1 is 2^(index_1/128) where +// index_1 goes from 0 to 15 + +data8 0x8000000000000000 , 0x00003FFF +data8 0x80B1ED4FD999AB6C , 0x00003FFF +data8 0x8164D1F3BC030773 , 0x00003FFF +data8 0x8218AF4373FC25EC , 0x00003FFF +data8 0x82CD8698AC2BA1D7 , 0x00003FFF +data8 0x8383594EEFB6EE37 , 0x00003FFF +data8 0x843A28C3ACDE4046 , 0x00003FFF +data8 0x84F1F656379C1A29 , 0x00003FFF +data8 0x85AAC367CC487B15 , 0x00003FFF +data8 0x8664915B923FBA04 , 0x00003FFF +data8 0x871F61969E8D1010 , 0x00003FFF +data8 0x87DB357FF698D792 , 0x00003FFF +data8 0x88980E8092DA8527 , 0x00003FFF +data8 0x8955EE03618E5FDD , 0x00003FFF +data8 0x8A14D575496EFD9A , 0x00003FFF +data8 0x8AD4C6452C728924 , 0x00003FFF +ASM_SIZE_DIRECTIVE(exp_table_1) + +// Table 2 is 2^(index_1/8) where +// index_2 goes from 0 to 7 +exp_table_2: +ASM_TYPE_DIRECTIVE(exp_table_2,@object) +data8 0x8000000000000000 , 0x00003FFF +data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF +data8 0x9837F0518DB8A96F , 0x00003FFF +data8 0xA5FED6A9B15138EA , 0x00003FFF +data8 0xB504F333F9DE6484 , 0x00003FFF +data8 0xC5672A115506DADD , 0x00003FFF +data8 0xD744FCCAD69D6AF4 , 0x00003FFF +data8 0xEAC0C6E7DD24392F , 0x00003FFF +ASM_SIZE_DIRECTIVE (exp_table_2) + + +exp_p_table: +ASM_TYPE_DIRECTIVE(exp_p_table,@object) +data8 0x3f8111116da21757 //P_4 +data8 0x3fa55555d787761c //P_3 +data8 0x3fc5555555555414 //P_2 +data8 0x3fdffffffffffd6a //P_1 +ASM_SIZE_DIRECTIVE(exp_p_table) + + +.align 32 +.global exp# + +.section .text +.proc exp# +.align 32 +exp: +#ifdef _LIBC +.global __ieee754_exp# +__ieee754_exp: +#endif + +{ .mlx + alloc r32=ar.pfs,1,24,4,0 + movl exp_GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 +} +{ .mlx + addl EXP_AD_TB1 = @ltoff(exp_table_1), gp + movl exp_GR_rshf_2to56 = 0x4768000000000000 ;; // 1.10000 2^(63+56) +} +;; + +// We do this fnorm right at the beginning to take any enabled +// faults and to normalize any input unnormals so that SWA is not taken. +{ .mfi + ld8 EXP_AD_TB1 = [EXP_AD_TB1] + fclass.m p8,p0 = f8,0x07 // Test for x=0 + mov exp_GR_17ones = 0x1FFFF +} +{ .mfi + mov exp_TB1_size = 0x100 + fnorm EXP_NORM_f8 = f8 + mov exp_GR_exp_2tom56 = 0xffff-56 +} +;; + +// Form two constants we need +// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 +// 1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand + +{ .mmf + setf.sig EXP_INV_LN2_2TO63 = exp_GR_sig_inv_ln2 // form 1/ln2 * 2^63 + setf.d EXP_RSHF_2TO56 = exp_GR_rshf_2to56 // Form const 1.100 * 2^(63+56) + fclass.m p9,p0 = f8,0x22 // Test for x=-inf +} +;; + +{ .mlx + setf.exp EXP_2TOM56 = exp_GR_exp_2tom56 // form 2^-56 for scaling Nfloat + movl exp_GR_rshf = 0x43e8000000000000 // 1.10000 2^63 for right shift +} +{ .mfb + mov exp_TB2_size = 0x80 +(p8) fma.d f8 = f1,f1,f0 // quick exit for x=0 +(p8) br.ret.spnt b0 +;; +} + +{ .mfi + ldfpd EXP_MIN_DBL_OFLOW_ARG, EXP_MAX_DBL_ZERO_ARG = [EXP_AD_TB1],16 + fclass.m p10,p0 = f8,0x21 // Test for x=+inf + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fma.d f8 = f0,f0,f0 // quick exit for x=-inf +(p9) br.ret.spnt b0 +;; +} + +{ .mmf + ldfpd EXP_MAX_DBL_NORM_ARG, EXP_MAX_DBL_UFLOW_ARG = [EXP_AD_TB1],16 + setf.d EXP_RSHF = exp_GR_rshf // Form right shift const 1.100 * 2^63 + fclass.m p11,p0 = f8,0xc3 // Test for x=nan +;; +} + +{ .mfb + ldfd EXP_MIN_DBL_NORM_ARG = [EXP_AD_TB1],16 + nop.f 999 +(p10) br.ret.spnt b0 // quick exit for x=+inf +;; +} + +{ .mfi + ldfe exp_ln2_by_128_hi = [EXP_AD_TB1],16 + nop.f 999 + nop.i 999 +;; +} + + +{ .mfb + ldfe exp_ln2_by_128_lo = [EXP_AD_TB1],16 +(p11) fmerge.s f8 = EXP_NORM_f8, EXP_NORM_f8 +(p11) br.ret.spnt b0 // quick exit for x=nan +;; +} + +// After that last load, EXP_AD_TB1 points to the beginning of table 1 + +// W = X * Inv_log2_by_128 +// By adding 1.10...0*2^63 we shift and get round_int(W) in significand. +// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing. + +{ .mfi + nop.m 999 + fma.s1 EXP_W_2TO56_RSH = EXP_NORM_f8, EXP_INV_LN2_2TO63, EXP_RSHF_2TO56 + nop.i 999 +;; +} + + +// Divide arguments into the following categories: +// Certain Underflow/zero p11 - -inf < x <= MAX_DBL_ZERO_ARG +// Certain Underflow p12 - MAX_DBL_ZERO_ARG < x <= MAX_DBL_UFLOW_ARG +// Possible Underflow p13 - MAX_DBL_UFLOW_ARG < x < MIN_DBL_NORM_ARG +// Certain Safe - MIN_DBL_NORM_ARG <= x <= MAX_DBL_NORM_ARG +// Possible Overflow p14 - MAX_DBL_NORM_ARG < x < MIN_DBL_OFLOW_ARG +// Certain Overflow p15 - MIN_DBL_OFLOW_ARG <= x < +inf +// +// If the input is really a double arg, then there will never be "Possible +// Underflow" or "Possible Overflow" arguments. +// + +{ .mfi + add EXP_AD_TB2 = exp_TB1_size, EXP_AD_TB1 + fcmp.ge.s1 p15,p14 = EXP_NORM_f8,EXP_MIN_DBL_OFLOW_ARG + nop.i 999 +;; +} + +{ .mfi + add EXP_AD_P = exp_TB2_size, EXP_AD_TB2 + fcmp.le.s1 p11,p12 = EXP_NORM_f8,EXP_MAX_DBL_ZERO_ARG + nop.i 999 +;; +} + +{ .mfb + ldfpd exp_P4, exp_P3 = [EXP_AD_P] ,16 +(p14) fcmp.gt.unc.s1 p14,p0 = EXP_NORM_f8,EXP_MAX_DBL_NORM_ARG +(p15) br.cond.spnt L(EXP_CERTAIN_OVERFLOW) +;; +} + + +// Nfloat = round_int(W) +// The signficand of EXP_W_2TO56_RSH contains the rounded integer part of W, +// as a twos complement number in the lower bits (that is, it may be negative). +// That twos complement number (called N) is put into exp_GR_N. + +// Since EXP_W_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56 +// before the shift constant 1.10000 * 2^63 is subtracted to yield EXP_Nfloat. +// Thus, EXP_Nfloat contains the floating point version of N + + +{ .mfi + nop.m 999 +(p12) fcmp.le.unc p12,p0 = EXP_NORM_f8,EXP_MAX_DBL_UFLOW_ARG + nop.i 999 +} +{ .mfb + ldfpd exp_P2, exp_P1 = [EXP_AD_P] + fms.s1 EXP_Nfloat = EXP_W_2TO56_RSH, EXP_2TOM56, EXP_RSHF +(p11) br.cond.spnt L(EXP_CERTAIN_UNDERFLOW_ZERO) +;; +} + +{ .mfi + getf.sig exp_GR_N = EXP_W_2TO56_RSH +(p13) fcmp.lt.unc p13,p0 = EXP_NORM_f8,EXP_MIN_DBL_NORM_ARG + nop.i 999 +;; +} + + +// exp_GR_index_1 has index_1 +// exp_GR_index_2_16 has index_2 * 16 +// exp_GR_biased_M has M +// exp_GR_index_1_16 has index_1 * 16 + +// r2 has true M +{ .mfi + and exp_GR_index_1 = 0x0f, exp_GR_N + fnma.s1 exp_r = EXP_Nfloat, exp_ln2_by_128_hi, EXP_NORM_f8 + shr r2 = exp_GR_N, 0x7 +} +{ .mfi + and exp_GR_index_2_16 = 0x70, exp_GR_N + fnma.s1 exp_f = EXP_Nfloat, exp_ln2_by_128_lo, f1 + nop.i 999 +;; +} + + +// EXP_AD_T1 has address of T1 +// EXP_AD_T2 has address if T2 + +{ .mmi + addl exp_GR_biased_M = 0xffff, r2 + add EXP_AD_T2 = EXP_AD_TB2, exp_GR_index_2_16 + shladd EXP_AD_T1 = exp_GR_index_1, 4, EXP_AD_TB1 +;; +} + + +// Create Scale = 2^M +// r = x - Nfloat * ln2_by_128_hi +// f = 1 - Nfloat * ln2_by_128_lo + +{ .mmi + setf.exp EXP_2M = exp_GR_biased_M + ldfe exp_T2 = [EXP_AD_T2] + nop.i 999 +;; +} + +// Load T1 and T2 +{ .mfi + ldfe exp_T1 = [EXP_AD_T1] + nop.f 999 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 exp_rsq = exp_r, exp_r, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_rP4pP3 = exp_r, exp_P4, exp_P3 + nop.i 999 +;; +} + + + +{ .mfi + nop.m 999 + fma.s1 exp_rcube = exp_r, exp_rsq, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_P_lo = exp_r, exp_rP4pP3, exp_P2 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 exp_P_hi = exp_rsq, exp_P1, exp_r + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_S2 = exp_f,exp_T2,f0 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 exp_S1 = EXP_2M,exp_T1,f0 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 exp_P = exp_rcube, exp_P_lo, exp_P_hi + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fma.s1 exp_S = exp_S1,exp_S2,f0 + nop.i 999 +;; +} + +{ .bbb +(p12) br.cond.spnt L(EXP_CERTAIN_UNDERFLOW) +(p13) br.cond.spnt L(EXP_POSSIBLE_UNDERFLOW) +(p14) br.cond.spnt L(EXP_POSSIBLE_OVERFLOW) +;; +} + + +{ .mfb + nop.m 999 + fma.d f8 = exp_S, exp_P, exp_S + br.ret.sptk b0 ;; // Normal path exit +} + + +L(EXP_POSSIBLE_OVERFLOW): + +// We got an answer. EXP_MAX_DBL_NORM_ARG < x < EXP_MIN_DBL_OFLOW_ARG +// overflow is a possibility, not a certainty + +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.d.s2 exp_wre_urm_f8 = exp_S, exp_P, exp_S + nop.i 999 ;; +} + +// We define an overflow when the answer with +// WRE set +// user-defined rounding mode +// is ldn +1 + +// Is the exponent 1 more than the largest double? +// If so, go to ERROR RETURN, else get the answer and +// leave. + +// Largest double is 7FE (biased double) +// 7FE - 3FF + FFFF = 103FE +// Create + largest_double_plus_ulp +// Create - largest_double_plus_ulp +// Calculate answer with WRE set. + +// Cases when answer is ldn+1 are as follows: +// ldn ldn+1 +// --+----------|----------+------------ +// | +// +inf +inf -inf +// RN RN +// RZ + +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + mov exp_GR_gt_ln = 0x103ff ;; +} + +{ .mfi + setf.exp exp_gt_pln = exp_GR_gt_ln + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.ge.unc.s1 p6, p0 = exp_wre_urm_f8, exp_gt_pln + nop.i 999 ;; +} + +{ .mfb + nop.m 999 + nop.f 999 +(p6) br.cond.spnt L(EXP_CERTAIN_OVERFLOW) ;; // Branch if really overflow +} + +{ .mfb + nop.m 999 + fma.d f8 = exp_S, exp_P, exp_S + br.ret.sptk b0 ;; // Exit if really no overflow +} + +L(EXP_CERTAIN_OVERFLOW): +{ .mmi + sub exp_GR_17ones_m1 = exp_GR_17ones, r0, 1 ;; + setf.exp f9 = exp_GR_17ones_m1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fmerge.s FR_X = f8,f8 + nop.i 999 +} +{ .mfb + mov GR_Parameter_TAG = 14 + fma.d FR_RESULT = f9, f9, f0 // Set I,O and +INF result + br.cond.sptk __libm_error_region ;; +} + +L(EXP_POSSIBLE_UNDERFLOW): + +// We got an answer. EXP_MAX_DBL_UFLOW_ARG < x < EXP_MIN_DBL_NORM_ARG +// underflow is a possibility, not a certainty + +// We define an underflow when the answer with +// ftz set +// is zero (tiny numbers become zero) + +// Notice (from below) that if we have an unlimited exponent range, +// then there is an extra machine number E between the largest denormal and +// the smallest normal. + +// So if with unbounded exponent we round to E or below, then we are +// tiny and underflow has occurred. + +// But notice that you can be in a situation where we are tiny, namely +// rounded to E, but when the exponent is bounded we round to smallest +// normal. So the answer can be the smallest normal with underflow. + +// E +// -----+--------------------+--------------------+----- +// | | | +// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe +// 0.1...11 2^-3ffe (biased, 1) +// largest dn smallest normal + +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x41 + nop.i 999 ;; +} +{ .mfi + nop.m 999 + fma.d.s2 exp_ftz_urm_f8 = exp_S, exp_P, exp_S + nop.i 999 ;; +} +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p6, p0 = exp_ftz_urm_f8, f0 + nop.i 999 ;; +} +{ .mfb + nop.m 999 + nop.f 999 +(p6) br.cond.spnt L(EXP_CERTAIN_UNDERFLOW) ;; // Branch if really underflow +} +{ .mfb + nop.m 999 + fma.d f8 = exp_S, exp_P, exp_S + br.ret.sptk b0 ;; // Exit if really no underflow +} + +L(EXP_CERTAIN_UNDERFLOW): +{ .mfi + nop.m 999 + fmerge.s FR_X = f8,f8 + nop.i 999 +} +{ .mfb + mov GR_Parameter_TAG = 15 + fma.d FR_RESULT = exp_S, exp_P, exp_S // Set I,U and tiny result + br.cond.sptk __libm_error_region ;; +} + +L(EXP_CERTAIN_UNDERFLOW_ZERO): +{ .mmi + mov exp_GR_one = 1 ;; + setf.exp f9 = exp_GR_one + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fmerge.s FR_X = f8,f8 + nop.i 999 +} +{ .mfb + mov GR_Parameter_TAG = 15 + fma.d FR_RESULT = f9, f9, f0 // Set I,U and tiny (+0.0) result + br.cond.sptk __libm_error_region ;; +} + +.endp exp +ASM_SIZE_DIRECTIVE(exp) + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_expf.S glibc-2.2.3/sysdeps/ia64/fpu/e_expf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_expf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_expf.S Mon Feb 19 00:43:21 2001 @@ -0,0 +1,768 @@ +.file "expf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + +// History +//============================================================== +// 4/04/00 Unwind update +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 8/21/00 Improvements to save 2 cycles on main path, and shorten x=0 case +// 12/07/00 Widen main path, shorten x=inf, nan paths +// + +#include "libm_support.h" + +// Assembly macros +//============================================================== +// integer registers used + + exp_GR_0x0f = r33 + exp_GR_0xf0 = r34 + + EXP_AD_P_1 = r36 + EXP_AD_P_2 = r37 + EXP_AD_T1 = r38 + EXP_AD_T2 = r39 + exp_GR_Mint = r40 + + exp_GR_Mint_p_128 = r41 + exp_GR_Ind1 = r42 + EXP_AD_M1 = r43 + exp_GR_Ind2 = r44 + EXP_AD_M2 = r45 + + exp_GR_min_oflow = r46 + exp_GR_max_zero = r47 + exp_GR_max_norm = r48 + exp_GR_max_uflow = r49 + exp_GR_min_norm = r50 + + exp_GR_17ones = r51 + exp_GR_gt_ln = r52 + exp_GR_T2_size = r53 + + exp_GR_17ones_m1 = r56 + exp_GR_one = r57 + + + +GR_SAVE_B0 = r53 +GR_SAVE_PFS = r55 +GR_SAVE_GP = r54 + +GR_Parameter_X = r59 +GR_Parameter_Y = r60 +GR_Parameter_RESULT = r61 +GR_Parameter_TAG = r62 + +FR_X = f10 +FR_Y = f1 +FR_RESULT = f8 + + +// floating point registers used + + EXP_MIN_SGL_OFLOW_ARG = f11 + EXP_MAX_SGL_ZERO_ARG = f12 + EXP_MAX_SGL_NORM_ARG = f13 + EXP_MAX_SGL_UFLOW_ARG = f14 + EXP_MIN_SGL_NORM_ARG = f15 + + exp_coeff_P5 = f32 + exp_coeff_P6 = f33 + exp_coeff_P3 = f34 + exp_coeff_P4 = f35 + + exp_coeff_P1 = f36 + exp_coeff_P2 = f37 + exp_Mx = f38 + exp_Mfloat = f39 + exp_R = f40 + + exp_P1 = f41 + exp_P2 = f42 + exp_P3 = f43 + exp_Rsq = f44 + exp_R4 = f45 + + exp_P4 = f46 + exp_P5 = f47 + exp_P6 = f48 + exp_P7 = f49 + exp_T1 = f50 + + exp_T2 = f51 + exp_T = f52 + exp_A = f53 + exp_norm_f8 = f54 + exp_wre_urm_f8 = f55 + + exp_ftz_urm_f8 = f56 + exp_gt_pln = f57 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +exp_coeff_1_table: +ASM_TYPE_DIRECTIVE(exp_coeff_1_table,@object) +data8 0x3F56F35FDE4F8563 // p5 +data8 0x3F2A378BEFECCFDD // p6 +data8 0x3FE00000258C581D // p1 +data8 0x3FC555557AE7B3D4 // p2 +ASM_SIZE_DIRECTIVE(exp_coeff_1_table) + + +exp_coeff_2_table: +ASM_TYPE_DIRECTIVE(exp_coeff_2_table,@object) +data8 0x3FA5551BB6592FAE // p3 +data8 0x3F8110E8EBFFD485 // p4 +ASM_SIZE_DIRECTIVE(exp_coeff_2_table) + + +exp_T2_table: +ASM_TYPE_DIRECTIVE(exp_T2_table,@object) +data8 0xa175cf9cd7d85844 , 0x00003f46 // exp(-128) +data8 0xdb7279415a1f9eed , 0x00003f47 // exp(-127) +data8 0x95213b242bd8ca5f , 0x00003f49 // exp(-126) +data8 0xcab03c968c989f83 , 0x00003f4a // exp(-125) +data8 0x89bdb674702961ad , 0x00003f4c // exp(-124) +data8 0xbb35a2eec278be35 , 0x00003f4d // exp(-123) +data8 0xfe71b17f373e7e7a , 0x00003f4e // exp(-122) +data8 0xace9a6ec52a39b63 , 0x00003f50 // exp(-121) +data8 0xeb03423fe393cf1c , 0x00003f51 // exp(-120) +data8 0x9fb52c5bcaef1693 , 0x00003f53 // exp(-119) +data8 0xd910b6377ed60bf1 , 0x00003f54 // exp(-118) +data8 0x9382dad8a9fdbfe4 , 0x00003f56 // exp(-117) +data8 0xc87d0a84dea869a3 , 0x00003f57 // exp(-116) +data8 0x883efb4c6d1087b0 , 0x00003f59 // exp(-115) +data8 0xb92d7373dce9a502 , 0x00003f5a // exp(-114) +data8 0xfbaeb020577fb0cb , 0x00003f5b // exp(-113) +ASM_SIZE_DIRECTIVE(exp_T2_table) + + +exp_T1_table: +ASM_TYPE_DIRECTIVE(exp_T1_table,@object) +data8 0x8000000000000000 , 0x00003fff // exp(16 * 0) +data8 0x87975e8540010249 , 0x00004016 // exp(16 * 1) +data8 0x8fa1fe625b3163ec , 0x0000402d // exp(16 * 2) +data8 0x9826b576512a59d7 , 0x00004044 // exp(16 * 3) +data8 0xa12cc167acbe6902 , 0x0000405b // exp(16 * 4) +data8 0xaabbcdcc279f59e4 , 0x00004072 // exp(16 * 5) +data8 0xb4dbfaadc045d16f , 0x00004089 // exp(16 * 6) +data8 0xbf95e372ccdbf146 , 0x000040a0 // exp(16 * 7) +data8 0xcaf2a62eea10bbfb , 0x000040b7 // exp(16 * 8) +data8 0xd6fbeb62fddbd340 , 0x000040ce // exp(16 * 9) +data8 0xe3bbee32e4a440ea , 0x000040e5 // exp(16 * 10) +data8 0xf13d8517c34199a8 , 0x000040fc // exp(16 * 11) +data8 0xff8c2b166241eedd , 0x00004113 // exp(16 * 12) +data8 0x875a04c0b38d6129 , 0x0000412b // exp(16 * 13) +data8 0x8f610127db6774d7 , 0x00004142 // exp(16 * 14) +data8 0x97e1dd87e5c20bb6 , 0x00004159 // exp(16 * 15) +ASM_SIZE_DIRECTIVE(exp_T1_table) + +// Argument Reduction +// exp_Mx = (int)f8 ==> The value of f8 rounded to int is placed into the +// significand of exp_Mx as a two's +// complement number. + +// Later we want to have exp_Mx in a general register. Do this with a getf.sig +// and call the general register exp_GR_Mint + +// exp_Mfloat = (float)(int)f8 ==> the two's complement number in +// significand of exp_Mx is turned +// into a floating point number. +// R = 1 - exp_Mfloat ==> reduced argument + +// Core Approximation +// Calculate a series in R +// R * p6 + p5 +// R * p4 + p3 +// R * p2 + p1 +// R^2 +// R^4 +// R^2(R * p6 + p5) + (R * p4 + p3) +// R^2(R * p2 + p1) +// R^4(R^2(R * p6 + p5) + (R * p4 + p3)) + (R^2(R * p2 + p1)) +// R + 1 +// exp(R) = (1 + R) + R^4(R^2(R * p6 + p5) + (R * p4 + p3)) + (R^2(R * p2 + p1)) +// exp(R) = 1 + R + R^2 * p1 + R^3 * p2 + R^4 * p3 + R^5 * p4 + R^6 * p5 + R^7 * p6 + +// Reconstruction +// signficand of exp_Mx is two's complement, +// -103 < x < 89 +// The smallest single denormal is 2^-149 = ssdn +// For e^x = ssdn +// x = log(ssdn) = -103.279 +// But with rounding result goes to ssdn until -103.972079 +// The largest single normal is 1.<23 1's> 2^126 ~ 2^127 = lsn +// For e^x = lsn +// x = log(lsn) = 88.7228 +// +// expf overflows when x > 42b17218 = 88.7228 +// expf returns largest single denormal when x = c2aeac50 +// expf goes to zero when x < c2cff1b5 + +// Consider range of 8-bit two's complement, -128 ---> 127 +// Add 128; range becomes 0 ---> 255 + +// The number (=i) in 0 ---> 255 is used as offset into two tables. + +// i = abcd efgh = abcd * 16 + efgh = i1 * 16 + i2 + +// i1 = (exp_GR_Mint + 128) & 0xf0 (show 0xf0 as -0x10 to avoid assembler error) +// (The immediate in the AND is an 8-bit two's complement) +// i1 = i1 + start of T1 table (EXP_AD_T1) +// Note that the entries in T1 are double-extended numbers on 16-byte boundaries +// and that i1 is already shifted left by 16 after the AND. + +// i2 must be shifted left by 4 before adding to the start of the table. +// i2 = ((exp_GR_Mint + 128) & 0x0f) << 4 +// i2 = i2 + start of T2 table (EXP_AD_T2) + +// T = T1 * T2 +// A = T * (1 + R) +// answer = T * (R^2 * p1 + R^3 * p2 + R^4 * p3 + R^5 * p4 + R^6 * p5 + R^7 * p6) + +// T * (1 + R) +// = T * exp(R) + + +.global expf# + +.section .text +.proc expf# +.align 32 +expf: +#ifdef _LIBC +.global __ieee754_expf# +__ieee754_expf: +#endif + +{ .mfi + alloc r32 = ar.pfs,1,26,4,0 + fcvt.fx.s1 exp_Mx = f8 + mov exp_GR_17ones = 0x1FFFF +} +{ .mlx + addl EXP_AD_P_1 = @ltoff(exp_coeff_1_table),gp + movl exp_GR_min_oflow = 0x42b17218 +} +;; + +// Fnorm done to take any enabled faults +{ .mfi + ld8 EXP_AD_P_1 = [EXP_AD_P_1] + fclass.m p6,p0 = f8, 0x07 //@zero + nop.i 999 +} +{ .mfi + add exp_GR_max_norm = -1, exp_GR_min_oflow // 0x42b17217 + fnorm exp_norm_f8 = f8 + nop.i 999 +} +;; + +{ .mfi + setf.s EXP_MIN_SGL_OFLOW_ARG = exp_GR_min_oflow // 0x42b17218 + fclass.m p7,p0 = f8, 0x22 // Test for x=-inf + mov exp_GR_0xf0 = 0x0f0 +} +{ .mlx + setf.s EXP_MAX_SGL_NORM_ARG = exp_GR_max_norm + movl exp_GR_max_zero = 0xc2cff1b5 +} +;; + + +{ .mlx + mov exp_GR_0x0f = 0x00f + movl exp_GR_max_uflow = 0xc2aeac50 +} +{ .mfb + nop.m 999 +(p6) fma.s f8 = f1,f1,f0 +(p6) br.ret.spnt b0 // quick exit for x=0 +} +;; + +{ .mfi + setf.s EXP_MAX_SGL_ZERO_ARG = exp_GR_max_zero + fclass.m p8,p0 = f8, 0x21 // Test for x=+inf + adds exp_GR_min_norm = 1, exp_GR_max_uflow // 0xc2aeac51 +} +{ .mfb + ldfpd exp_coeff_P5,exp_coeff_P6 = [EXP_AD_P_1],16 +(p7) fma.s f8 = f0,f0,f0 +(p7) br.ret.spnt b0 // quick exit for x=-inf +} +;; + +{ .mmf + ldfpd exp_coeff_P1,exp_coeff_P2 = [EXP_AD_P_1],16 + setf.s EXP_MAX_SGL_UFLOW_ARG = exp_GR_max_uflow + fclass.m p9,p0 = f8, 0xc3 // Test for x=nan +} +;; + +{ .mmb + ldfpd exp_coeff_P3,exp_coeff_P4 = [EXP_AD_P_1],16 + setf.s EXP_MIN_SGL_NORM_ARG = exp_GR_min_norm +(p8) br.ret.spnt b0 // quick exit for x=+inf +} +;; + +// EXP_AD_P_1 now points to exp_T2_table +{ .mfi + mov exp_GR_T2_size = 0x100 + fcvt.xf exp_Mfloat = exp_Mx + nop.i 999 +} +;; + +{ .mfb + getf.sig exp_GR_Mint = exp_Mx +(p9) fmerge.s f8 = exp_norm_f8, exp_norm_f8 +(p9) br.ret.spnt b0 // quick exit for x=nan +} +;; + +{ .mmi + nop.m 999 + mov EXP_AD_T2 = EXP_AD_P_1 + add EXP_AD_T1 = exp_GR_T2_size,EXP_AD_P_1 ;; +} + + +{ .mmi + adds exp_GR_Mint_p_128 = 0x80,exp_GR_Mint ;; + and exp_GR_Ind1 = exp_GR_Mint_p_128, exp_GR_0xf0 + and exp_GR_Ind2 = exp_GR_Mint_p_128, exp_GR_0x0f ;; +} + +// Divide arguments into the following categories: +// Certain Underflow/zero p11 - -inf < x <= MAX_SGL_ZERO_ARG +// Certain Underflow p12 - MAX_SGL_ZERO_ARG < x <= MAX_SGL_UFLOW_ARG +// Possible Underflow p13 - MAX_SGL_UFLOW_ARG < x < MIN_SGL_NORM_ARG +// Certain Safe - MIN_SGL_NORM_ARG <= x <= MAX_SGL_NORM_ARG +// Possible Overflow p14 - MAX_SGL_NORM_ARG < x < MIN_SGL_OFLOW_ARG +// Certain Overflow p15 - MIN_SGL_OFLOW_ARG <= x < +inf +// +// If the input is really a single arg, then there will never be "Possible +// Underflow" or "Possible Overflow" arguments. +// + +{ .mfi + add EXP_AD_M1 = exp_GR_Ind1,EXP_AD_T1 + fcmp.ge.s1 p15,p14 = exp_norm_f8,EXP_MIN_SGL_OFLOW_ARG + nop.i 999 +} +{ .mfi + shladd EXP_AD_M2 = exp_GR_Ind2,4,EXP_AD_T2 + fms.s1 exp_R = f1,f8,exp_Mfloat + nop.i 999 ;; +} + +{ .mfi + ldfe exp_T1 = [EXP_AD_M1] + fcmp.le.s1 p11,p12 = exp_norm_f8,EXP_MAX_SGL_ZERO_ARG + nop.i 999 ;; +} + +{ .mfb + ldfe exp_T2 = [EXP_AD_M2] +(p14) fcmp.gt.s1 p14,p0 = exp_norm_f8,EXP_MAX_SGL_NORM_ARG +(p15) br.cond.spnt L(EXP_CERTAIN_OVERFLOW) ;; +} + +{ .mfb + nop.m 999 +(p12) fcmp.le.s1 p12,p0 = exp_norm_f8,EXP_MAX_SGL_UFLOW_ARG +(p11) br.cond.spnt L(EXP_CERTAIN_UNDERFLOW_ZERO) +} +;; + +{ .mfi + nop.m 999 +(p13) fcmp.lt.s1 p13,p0 = exp_norm_f8,EXP_MIN_SGL_NORM_ARG + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 exp_Rsq = exp_R,exp_R,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_P3 = exp_R,exp_coeff_P2,exp_coeff_P1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 exp_P1 = exp_R,exp_coeff_P6,exp_coeff_P5 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_P2 = exp_R,exp_coeff_P4,exp_coeff_P3 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 exp_P7 = f1,exp_R,f1 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 exp_P5 = exp_Rsq,exp_P3,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_R4 = exp_Rsq,exp_Rsq,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 exp_T = exp_T1,exp_T2,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_P4 = exp_Rsq,exp_P1,exp_P2 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 exp_A = exp_T,exp_P7,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 exp_P6 = exp_R4,exp_P4,exp_P5 + nop.i 999 +} +;; + +{ .bbb +(p12) br.cond.spnt L(EXP_CERTAIN_UNDERFLOW) +(p13) br.cond.spnt L(EXP_POSSIBLE_UNDERFLOW) +(p14) br.cond.spnt L(EXP_POSSIBLE_OVERFLOW) +} +;; + +{ .mfb + nop.m 999 + fma.s f8 = exp_T,exp_P6,exp_A + br.ret.sptk b0 +} +;; + +L(EXP_POSSIBLE_OVERFLOW): + +// We got an answer. EXP_MAX_SGL_NORM_ARG < x < EXP_MIN_SGL_OFLOW_ARG +// overflow is a possibility, not a certainty +// Set wre in s2 and perform the last operation with s2 + +// We define an overflow when the answer with +// WRE set +// user-defined rounding mode +// is lsn +1 + +// Is the exponent 1 more than the largest single? +// If so, go to ERROR RETURN, else (no overflow) get the answer and +// leave. + +// Largest single is FE (biased single) +// FE - 7F + FFFF = 1007E + +// Create + largest_single_plus_ulp +// Create - largest_single_plus_ulp + +// Calculate answer with WRE set. + +// Cases when answer is lsn+1 are as follows: + +// midpoint +// | +// lsn | lsn+1 +// --+----------|----------+------------ +// | +// +inf +inf -inf +// RN RN +// RZ +// exp_gt_pln contains the floating point number lsn+1. +// The setf.exp puts 0x1007f in the exponent and 0x800... in the significand. + +// If the answer is >= lsn+1, we have overflowed. +// Then p6 is TRUE. Set the overflow tag, save input in FR_X, +// do the final calculation for IEEE result, and branch to error return. + +{ .mfi + mov exp_GR_gt_ln = 0x1007F + fsetc.s2 0x7F,0x42 + nop.i 999 +} +;; + +{ .mfi + setf.exp exp_gt_pln = exp_GR_gt_ln + fma.s.s2 exp_wre_urm_f8 = exp_T, exp_P6, exp_A + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fcmp.ge.unc.s1 p6, p0 = exp_wre_urm_f8, exp_gt_pln + nop.i 999 +} +;; + +{ .mfb + nop.m 999 + nop.f 999 +(p6) br.cond.spnt L(EXP_CERTAIN_OVERFLOW) // Branch if really overflow +} +;; + +{ .mfb + nop.m 999 + fma.s f8 = exp_T, exp_P6, exp_A + br.ret.sptk b0 // Exit if really no overflow +} +;; + +L(EXP_CERTAIN_OVERFLOW): +{ .mmi + sub exp_GR_17ones_m1 = exp_GR_17ones, r0, 1 ;; + setf.exp f9 = exp_GR_17ones_m1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fmerge.s FR_X = f8,f8 + nop.i 999 +} +{ .mfb + mov GR_Parameter_TAG = 16 + fma.s FR_RESULT = f9, f9, f0 // Set I,O and +INF result + br.cond.sptk __libm_error_region ;; +} + +L(EXP_POSSIBLE_UNDERFLOW): + +// We got an answer. EXP_MAX_SGL_UFLOW_ARG < x < EXP_MIN_SGL_NORM_ARG +// underflow is a possibility, not a certainty + +// We define an underflow when the answer with +// ftz set +// is zero (tiny numbers become zero) + +// Notice (from below) that if we have an unlimited exponent range, +// then there is an extra machine number E between the largest denormal and +// the smallest normal. + +// So if with unbounded exponent we round to E or below, then we are +// tiny and underflow has occurred. + +// But notice that you can be in a situation where we are tiny, namely +// rounded to E, but when the exponent is bounded we round to smallest +// normal. So the answer can be the smallest normal with underflow. + +// E +// -----+--------------------+--------------------+----- +// | | | +// 1.1...10 2^-7f 1.1...11 2^-7f 1.0...00 2^-7e +// 0.1...11 2^-7e (biased, 1) +// largest dn smallest normal + +// If the answer is = 0, we have underflowed. +// Then p6 is TRUE. Set the underflow tag, save input in FR_X, +// do the final calculation for IEEE result, and branch to error return. + +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x41 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s.s2 exp_ftz_urm_f8 = exp_T, exp_P6, exp_A + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p6, p0 = exp_ftz_urm_f8, f0 + nop.i 999 +} +;; + +{ .mfb + nop.m 999 + nop.f 999 +(p6) br.cond.spnt L(EXP_CERTAIN_UNDERFLOW) // Branch if really underflow +} +;; + +{ .mfb + nop.m 999 + fma.s f8 = exp_T, exp_P6, exp_A + br.ret.sptk b0 // Exit if really no underflow +} +;; + +L(EXP_CERTAIN_UNDERFLOW): +{ .mfi + nop.m 999 + fmerge.s FR_X = f8,f8 + nop.i 999 +} +{ .mfb + mov GR_Parameter_TAG = 17 + fma.s FR_RESULT = exp_T, exp_P6, exp_A // Set I,U and tiny result + br.cond.sptk __libm_error_region ;; +} + +L(EXP_CERTAIN_UNDERFLOW_ZERO): +{ .mmi + mov exp_GR_one = 1 ;; + setf.exp f9 = exp_GR_one + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fmerge.s FR_X = f8,f8 + nop.i 999 +} +{ .mfb + mov GR_Parameter_TAG = 17 + fma.s FR_RESULT = f9, f9, f0 // Set I,U and tiny (+0.0) result + br.cond.sptk __libm_error_region ;; +} + +.endp expf +ASM_SIZE_DIRECTIVE(expf) + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 999 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mfi + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + nop.f 0 + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; + +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_expl.c glibc-2.2.3/sysdeps/ia64/fpu/e_expl.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_expl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_expl.c Mon Feb 19 00:43:27 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_fmod.S glibc-2.2.3/sysdeps/ia64/fpu/e_fmod.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_fmod.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_fmod.S Mon Feb 19 00:43:36 2001 @@ -0,0 +1,538 @@ +.file "fmod.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the Computational +// Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//==================================================================== +// 2/02/00 Initial version +// 3/02/00 New Algorithm +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +//11/28/00 Set FR_Y to f9 +// +// API +//==================================================================== +// double fmod(double,double); +// +// Overview of operation +//==================================================================== +// fmod(a,b)=a-i*b, +// where i is an integer such that, if b!=0, +// |i|<|a/b| and |a/b-i|<1 +// +// Algorithm +//==================================================================== +// a). if |a|<|b|, return a +// b). get quotient and reciprocal overestimates accurate to +// 33 bits (q2,y2) +// c). if the exponent difference (exponent(a)-exponent(b)) +// is less than 32, truncate quotient to integer and +// finish in one iteration +// d). if exponent(a)-exponent(b)>=32 (q2>=2^32) +// round quotient estimate to single precision (k=RN(q2)), +// calculate partial remainder (a'=a-k*b), +// get quotient estimate (a'*y2), and repeat from c). +// +// Special cases +//==================================================================== +// b=+/-0: return NaN, call libm_error_support +// a=+/-Inf, a=NaN or b=NaN: return NaN +// +// Registers used +//==================================================================== +// Predicate registers: p6-p11 +// General registers: r2,r29,r32 (ar.pfs), r33-r39 +// Floating point registers: f6-f15 + +#include "libm_support.h" + +.section .text + + +GR_SAVE_B0 = r33 +GR_SAVE_PFS = r34 +GR_SAVE_GP = r35 +GR_SAVE_SP = r36 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f10 +FR_Y = f9 +FR_RESULT = f8 + + +.proc fmod# +.align 32 +.global fmod# +.align 32 + +fmod: +#ifdef _LIBC +.global __ieee754_fmod +.type __ieee754_fmod,@function +__ieee754_fmod: +#endif +// inputs in f8, f9 +// result in f8 + +{ .mfi + alloc r32=ar.pfs,1,4,4,0 + // f6=|a| + fmerge.s f6=f0,f8 + mov r2 = 0x0ffdd +} + {.mfi + nop.m 0 + // f7=|b| + fmerge.s f7=f0,f9 + nop.i 0;; +} + +{ .mfi + setf.exp f11 = r2 + // (1) y0 + frcpa.s1 f10,p6=f6,f7 + nop.i 0 +} + +// Y +-NAN, +-inf, +-0? p7 +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0xe7 + nop.i 999;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f8, 0xe3 + nop.i 999 +} + +// |x| < |y|? Return x p8 +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p8,p0 = f6,f7 + nop.i 999 ;; +} + +{ .mfi + nop.m 0 + // normalize y (if |x|<|y|) + (p8) fma.s0 f9=f9,f1,f0 + nop.i 0;; +} + + { .mfi + mov r2=0x1001f + // (2) q0=a*y0 + (p6) fma.s1 f13=f6,f10,f0 + nop.i 0 +} +{ .mfi + nop.m 0 + // (3) e0 = 1 - b * y0 + (p6) fnma.s1 f12=f7,f10,f1 + nop.i 0;; +} + + {.mfi + nop.m 0 + // normalize x (if |x|<|y|) + (p8) fma.d.s0 f8=f8,f1,f0 + nop.i 0 +} +{.bbb + (p9) br.cond.spnt L(FMOD_X_NAN_INF) + (p7) br.cond.spnt L(FMOD_Y_NAN_INF_ZERO) + // if |x|<|y|, return + (p8) br.ret.spnt b0;; +} + + {.mfi + nop.m 0 + // normalize x + fma.s0 f6=f6,f1,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // normalize y + fma.s0 f7=f7,f1,f0 + nop.i 0;; +} + + {.mfi + // f15=2^32 + setf.exp f15=r2 + // (4) q1=q0+e0*q0 + (p6) fma.s1 f13=f12,f13,f13 + nop.i 0 +} +{ .mfi + nop.m 0 + // (5) e1 = e0 * e0 + 2^-34 + (p6) fma.s1 f14=f12,f12,f11 + nop.i 0;; +} +{.mlx + nop.m 0 + movl r2=0x33a00000;; +} +{ .mfi + nop.m 0 + // (6) y1 = y0 + e0 * y0 + (p6) fma.s1 f10=f12,f10,f10 + nop.i 0;; +} +{.mfi + // set f12=1.25*2^{-24} + setf.s f12=r2 + // (7) q2=q1+e1*q1 + (p6) fma.s1 f13=f13,f14,f13 + nop.i 0;; +} +{.mfi + nop.m 0 + fmerge.s f9=f8,f9 + nop.i 0 +} +{ .mfi + nop.m 0 + // (8) y2 = y1 + e1 * y1 + (p6) fma.s1 f10=f14,f10,f10 + // set p6=0, p10=0 + cmp.ne.and p6,p10=r0,r0;; +} + +.align 32 +L(loop53): + {.mfi + nop.m 0 + // compare q2, 2^32 + fcmp.lt.unc.s1 p8,p7=f13,f15 + nop.i 0 +} + {.mfi + nop.m 0 + // will truncate quotient to integer, if exponent<32 (in advance) + fcvt.fx.trunc.s1 f11=f13 + nop.i 0;; +} + {.mfi + nop.m 0 + // if exponent>32, round quotient to single precision (perform in advance) + fma.s.s1 f13=f13,f1,f0 + nop.i 0;; +} + {.mfi + nop.m 0 + // set f12=sgn(a) + (p8) fmerge.s f12=f8,f1 + nop.i 0 +} + {.mfi + nop.m 0 + // normalize truncated quotient + (p8) fcvt.xf f13=f11 + nop.i 0;; +} + { .mfi + nop.m 0 + // calculate remainder (assuming f13=RZ(Q)) + (p7) fnma.s1 f14=f13,f7,f6 + nop.i 0 +} + {.mfi + nop.m 0 + // also if exponent>32, round quotient to single precision + // and subtract 1 ulp: q=q-q*(1.25*2^{-24}) + (p7) fnma.s.s1 f11=f13,f12,f13 + nop.i 0;; +} + + {.mfi + nop.m 0 + // (p8) calculate remainder (82-bit format) + (p8) fnma.s1 f11=f13,f7,f6 + nop.i 0 +} + {.mfi + nop.m 0 + // (p7) calculate remainder (assuming f11=RZ(Q)) + (p7) fnma.s1 f6=f11,f7,f6 + nop.i 0;; +} + + + {.mfi + nop.m 0 + // Final iteration (p8): is f6 the correct remainder (quotient was not overestimated) ? + (p8) fcmp.lt.unc.s1 p6,p10=f11,f0 + nop.i 0;; +} + {.mfi + nop.m 0 + // get new quotient estimation: a'*y2 + (p7) fma.s1 f13=f14,f10,f0 + nop.i 0 +} + {.mfb + nop.m 0 + // was f14=RZ(Q) ? (then new remainder f14>=0) + (p7) fcmp.lt.unc.s1 p7,p9=f14,f0 + nop.b 0;; +} + + +.pred.rel "mutex",p6,p10 + {.mfb + nop.m 0 + // add b to estimated remainder (to cover the case when the quotient was overestimated) + // also set correct sign by using f9=|b|*sgn(a), f12=sgn(a) + (p6) fma.d.s0 f8=f11,f12,f9 + nop.b 0 +} + {.mfb + nop.m 0 + // calculate remainder (single precision) + // set correct sign of result before returning + (p10) fma.d.s0 f8=f11,f12,f0 + (p8) br.ret.sptk b0;; +} + {.mfi + nop.m 0 + // if f13!=RZ(Q), get alternative quotient estimation: a''*y2 + (p7) fma.s1 f13=f6,f10,f0 + nop.i 0 +} + {.mfb + nop.m 0 + // if f14 was RZ(Q), set remainder to f14 + (p9) mov f6=f14 + br.cond.sptk L(loop53);; +} + + + +L(FMOD_X_NAN_INF): + +// Y zero ? +{.mfi + nop.m 0 + fma.s1 f10=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + fcmp.eq.unc.s1 p11,p0=f10,f0 + nop.i 0;; +} +{.mib + nop.m 0 + nop.i 0 + // if Y zero + (p11) br.cond.spnt L(FMOD_Y_ZERO);; +} + +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8,p9 = f8, 0x23 + nop.i 999;; +} +// Y NaN ? +{.mfi + nop.m 999 +(p8) fclass.m p9,p8=f9,0xc3 + nop.i 0;; +} +{.mfi + nop.m 999 +(p8) frcpa.s0 f8,p0 = f8,f8 + nop.i 0 +} +{ .mfi + nop.m 999 + // also set Denormal flag if necessary +(p8) fma.s0 f9=f9,f1,f0 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p8) fma.d f8=f8,f1,f0 + nop.b 999 ;; +} + +{ .mfb + nop.m 999 +(p9) frcpa.s0 f8,p7=f8,f9 + br.ret.sptk b0 ;; +} + + +L(FMOD_Y_NAN_INF_ZERO): + +// Y INF +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p7) fma.d f8=f8,f1,f0 +(p7) br.ret.spnt b0 ;; +} + +// Y NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0xc3 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p9) fma.d f8=f9,f1,f0 +(p9) br.ret.spnt b0 ;; +} + +L(FMOD_Y_ZERO): +// Y zero? Must be zero at this point +// because it is the only choice left. +// Return QNAN indefinite + +{.mfi + nop.m 0 + // set Invalid + frcpa f12,p0=f0,f0 + nop.i 0 +} +// X NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p10 = f8, 0xff + nop.i 999 ;; +} + +{.mfi + nop.m 999 + (p9) frcpa f11,p7=f8,f0 + nop.i 0;; +} + +{ .mfi + nop.m 999 +(p10) frcpa f11,p7 = f9,f9 +(p0) mov GR_Parameter_TAG = 121 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8, f8 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p0) fma.d f8=f11,f1,f0 +(p0) br.sptk __libm_error_region;; +} + +.endp fmod +ASM_SIZE_DIRECTIVE(fmod) +ASM_SIZE_DIRECTIVE(__ieee754_fmod) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_fmodf.S glibc-2.2.3/sysdeps/ia64/fpu/e_fmodf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_fmodf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_fmodf.S Mon Feb 19 00:43:45 2001 @@ -0,0 +1,553 @@ +.file "fmodf.s" +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the Computational +// Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//==================================================================== +// 2/02/00 Initial version +// 3/02/00 New Algorithm +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +//11/28/00 Set FR_Y to f9 +// +// API +//==================================================================== +// float fmodf(float,float); +// +// Overview of operation +//==================================================================== +// fmod(a,b)=a-i*b, +// where i is an integer such that, if b!=0, +// |i|<|a/b| and |a/b-i|<1 + +// Algorithm +//==================================================================== +// a). if |a|<|b|, return a +// b). get quotient and reciprocal overestimates accurate to +// 33 bits (q2,y2) +// c). if the exponent difference (exponent(a)-exponent(b)) +// is less than 32, truncate quotient to integer and +// finish in one iteration +// d). if exponent(a)-exponent(b)>=32 (q2>=2^32) +// round quotient estimate to single precision (k=RN(q2)), +// calculate partial remainder (a'=a-k*b), +// get quotient estimate (a'*y2), and repeat from c). + +// Special cases +//==================================================================== +// b=+/-0: return NaN, call libm_error_support +// a=+/-Inf, a=NaN or b=NaN: return NaN + +// Registers used +//==================================================================== +// Predicate registers: p6-p11 +// General registers: r2,r29,r32 (ar.pfs), r33-r39 +// Floating point registers: f6-f15 + +#include "libm_support.h" + +.section .text + +GR_SAVE_B0 = r33 +GR_SAVE_PFS = r34 +GR_SAVE_GP = r35 +GR_SAVE_SP = r36 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f10 +FR_Y = f9 +FR_RESULT = f8 + + + +.proc fmodf# +.align 32 +.global fmodf# +.align 32 + +fmodf: +#ifdef _LIBC +.global __ieee754_fmodf +.type __ieee754_fmodf,@function +__ieee754_fmodf: +#endif +// inputs in f8, f9 +// result in f8 + +{ .mfi + alloc r32=ar.pfs,1,4,4,0 + // f6=|a| + fmerge.s f6=f0,f8 + mov r2 = 0x0ffdd +} + {.mfi + nop.m 0 + // f7=|b| + fmerge.s f7=f0,f9 + nop.i 0;; +} + +{ .mfi + setf.exp f11 = r2 + // (1) y0 + frcpa.s1 f10,p6=f6,f7 + nop.i 0 +} + +// eliminate special cases +// Y +-NAN, +-inf, +-0? p7 +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0xe7 + nop.i 999;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f8, 0xe3 + nop.i 999 +} + +// |x| < |y|? Return x p8 +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p8,p0 = f6,f7 + nop.i 999 ;; +} + +{ .mfi + nop.m 0 + // normalize y (if |x|<|y|) + (p8) fma.s0 f9=f9,f1,f0 + nop.i 0;; +} + + { .mfi + mov r2=0x1001f + // (2) q0=a*y0 + (p6) fma.s1 f13=f6,f10,f0 + nop.i 0 +} +{ .mfi + nop.m 0 + // (3) e0 = 1 - b * y0 + (p6) fnma.s1 f12=f7,f10,f1 + nop.i 0;; +} + + {.mfi + nop.m 0 + // normalize x (if |x|<|y|) + (p8) fma.s.s0 f8=f8,f1,f0 + nop.i 0 +} +{.bbb + (p9) br.cond.spnt L(FMOD_X_NAN_INF) + (p7) br.cond.spnt L(FMOD_Y_NAN_INF_ZERO) + // if |x|<|y|, return + (p8) br.ret.spnt b0;; +} + + {.mfi + nop.m 0 + // normalize x + fma.s0 f6=f6,f1,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // normalize y + fma.s0 f7=f7,f1,f0 + nop.i 0;; +} + + + {.mfi + // f15=2^32 + setf.exp f15=r2 + // (4) q1=q0+e0*q0 + (p6) fma.s1 f13=f12,f13,f13 + nop.i 0 +} +{ .mfi + nop.m 0 + // (5) e1 = e0 * e0 + 2^-34 + (p6) fma.s1 f14=f12,f12,f11 + nop.i 0;; +} +{.mlx + nop.m 0 + movl r2=0x33a00000;; +} +{ .mfi + nop.m 0 + // (6) y1 = y0 + e0 * y0 + (p6) fma.s1 f10=f12,f10,f10 + nop.i 0;; +} +{.mfi + // set f12=1.25*2^{-24} + setf.s f12=r2 + // (7) q2=q1+e1*q1 + (p6) fma.s1 f13=f13,f14,f13 + nop.i 0;; +} +{.mfi + nop.m 0 + fmerge.s f9=f8,f9 + nop.i 0 +} +{ .mfi + nop.m 0 + // (8) y2 = y1 + e1 * y1 + (p6) fma.s1 f10=f14,f10,f10 + // set p6=0, p10=0 + cmp.ne.and p6,p10=r0,r0;; +} + +.align 32 +L(loop24): + {.mfi + nop.m 0 + // compare q2, 2^32 + fcmp.lt.unc.s1 p8,p7=f13,f15 + nop.i 0 +} + {.mfi + nop.m 0 + // will truncate quotient to integer, if exponent<32 (in advance) + fcvt.fx.trunc.s1 f11=f13 + nop.i 0;; +} + {.mfi + nop.m 0 + // if exponent>32, round quotient to single precision (perform in advance) + fma.s.s1 f13=f13,f1,f0 + nop.i 0;; +} + {.mfi + nop.m 0 + // set f12=sgn(a) + (p8) fmerge.s f12=f8,f1 + nop.i 0 +} + {.mfi + nop.m 0 + // normalize truncated quotient + (p8) fcvt.xf f13=f11 + nop.i 0;; +} + { .mfi + nop.m 0 + // calculate remainder (assuming f13=RZ(Q)) + (p7) fnma.s1 f14=f13,f7,f6 + nop.i 0 +} + {.mfi + nop.m 0 + // also if exponent>32, round quotient to single precision + // and subtract 1 ulp: q=q-q*(1.25*2^{-24}) + (p7) fnma.s.s1 f11=f13,f12,f13 + nop.i 0;; +} + + {.mfi + nop.m 0 + // (p8) calculate remainder (82-bit format) + (p8) fnma.s1 f11=f13,f7,f6 + nop.i 0 +} + {.mfi + nop.m 0 + // (p7) calculate remainder (assuming f11=RZ(Q)) + (p7) fnma.s1 f6=f11,f7,f6 + nop.i 0;; +} + + + {.mfi + nop.m 0 + // Final iteration (p8): is f6 the correct remainder (quotient was not overestimated) ? + (p8) fcmp.lt.unc.s1 p6,p10=f11,f0 + nop.i 0;; +} + {.mfi + nop.m 0 + // get new quotient estimation: a'*y2 + (p7) fma.s1 f13=f14,f10,f0 + nop.i 0 +} + {.mfb + nop.m 0 + // was f14=RZ(Q) ? (then new remainder f14>=0) + (p7) fcmp.lt.unc.s1 p7,p9=f14,f0 + nop.b 0;; +} + + +.pred.rel "mutex",p6,p10 + {.mfb + nop.m 0 + // add b to estimated remainder (to cover the case when the quotient was overestimated) + // also set correct sign by using f9=|b|*sgn(a), f12=sgn(a) + (p6) fma.s.s0 f8=f11,f12,f9 + nop.b 0 +} + {.mfb + nop.m 0 + // calculate remainder (single precision) + // set correct sign of result before returning + (p10) fma.s.s0 f8=f11,f12,f0 + (p8) br.ret.sptk b0;; +} + {.mfi + nop.m 0 + // if f13!=RZ(Q), get alternative quotient estimation: a''*y2 + (p7) fma.s1 f13=f6,f10,f0 + nop.i 0 +} + {.mfb + nop.m 0 + // if f14 was RZ(Q), set remainder to f14 + (p9) mov f6=f14 + br.cond.sptk L(loop24);; +} + + { .mmb + nop.m 0 + nop.m 0 + br.ret.sptk b0;; + } + +L(FMOD_X_NAN_INF): + + +// Y zero ? +{.mfi + nop.m 0 + fma.s1 f10=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + fcmp.eq.unc.s1 p11,p0=f10,f0 + nop.i 0;; +} +{.mib + nop.m 0 + nop.i 0 + // if Y zero + (p11) br.cond.spnt L(FMOD_Y_ZERO);; +} + +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8,p9 = f8, 0x23 + nop.i 999;; +} +// Y NaN ? +{.mfi + nop.m 999 +(p8) fclass.m p9,p8=f9,0xc3 + nop.i 0;; +} +{.mfi + nop.m 999 +(p8) frcpa.s0 f8,p0 = f8,f8 + nop.i 0 +} +{ .mfi + nop.m 999 + // also set Denormal flag if necessary +(p8) fma.s0 f9=f9,f1,f0 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p8) fma.s f8=f8,f1,f0 + nop.b 999 ;; +} + +{ .mfb + nop.m 999 +(p9) frcpa.s0 f8,p7=f8,f9 + br.ret.sptk b0 ;; +} + + +L(FMOD_Y_NAN_INF_ZERO): + +// Y INF +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p7) fma.s f8=f8,f1,f0 +(p7) br.ret.spnt b0 ;; +} + +// Y NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0xc3 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p9) fma.s f8=f9,f1,f0 +(p9) br.ret.spnt b0 ;; +} + +L(FMOD_Y_ZERO): +// Y zero? Must be zero at this point +// because it is the only choice left. +// Return QNAN indefinite + +{.mfi + nop.m 0 + // set Invalid + frcpa f12,p0=f0,f0 + nop.i 999 +} +// X NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p10 = f8, 0xff + nop.i 999 ;; +} + +{.mfi + nop.m 999 + (p9) frcpa f11,p7=f8,f0 + nop.i 0;; +} + +{ .mfi + nop.m 999 +(p10) frcpa f11,p7 = f0,f0 +nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8, f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s f8=f11,f1,f0 + nop.i 999;; +} + +L(EXP_ERROR_RETURN): + + +{ .mib + nop.m 0 +(p0) mov GR_Parameter_TAG=122 +(p0) br.sptk __libm_error_region;; +} + +.endp fmodf +ASM_SIZE_DIRECTIVE(fmodf) +ASM_SIZE_DIRECTIVE(__ieee754_fmodf) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support#;; // Call error handling function +} +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_fmodl.S glibc-2.2.3/sysdeps/ia64/fpu/e_fmodl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_fmodl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_fmodl.S Mon Feb 19 00:43:53 2001 @@ -0,0 +1,577 @@ +.file "fmodl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the Computational +// Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//==================================================================== +// 2/02/00 Initial version +// 3/02/00 New Algorithm +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +//11/28/00 Set FR_Y to f9 +// +// API +//==================================================================== +// long double fmodl(long double,long double); +// +// Overview of operation +//==================================================================== +// fmod(a,b)=a-i*b, +// where i is an integer such that, if b!=0, +// |i|<|a/b| and |a/b-i|<1 +// +// Algorithm +//==================================================================== +// a). if |a|<|b|, return a +// b). get quotient and reciprocal overestimates accurate to +// 33 bits (q2,y2) +// c). if the exponent difference (exponent(a)-exponent(b)) +// is less than 32, truncate quotient to integer and +// finish in one iteration +// d). if exponent(a)-exponent(b)>=32 (q2>=2^32) +// round quotient estimate to single precision (k=RN(q2)), +// calculate partial remainder (a'=a-k*b), +// get quotient estimate (a'*y2), and repeat from c). +// +// Registers used +//==================================================================== +// Predicate registers: p6-p11 +// General registers: r2,r29,r32 (ar.pfs), r33-r39 +// Floating point registers: f6-f15 + +#include "libm_support.h" + +.section .text + +GR_SAVE_B0 = r33 +GR_SAVE_PFS = r34 +GR_SAVE_GP = r35 +GR_SAVE_SP = r36 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f10 +FR_Y = f9 +FR_RESULT = f8 + + + +.proc fmodl# +.align 32 +.global fmodl# +.align 32 + +fmodl: +#ifdef _LIBC +.global __ieee754_fmodl +.type __ieee754_fmodl,@function +__ieee754_fmodl: +#endif +// inputs in f8, f9 +// result in f8 + +{ .mfi + alloc r32=ar.pfs,1,4,4,0 + // f6=|a| + fmerge.s f6=f0,f8 + mov r2 = 0x0ffdd +} + {.mfi + getf.sig r29=f9 + // f7=|b| + fmerge.s f7=f0,f9 + nop.i 0;; +} + +{ .mfi + setf.exp f11 = r2 + // (1) y0 + frcpa.s1 f10,p6=f6,f7 + nop.i 0;; +} + +// eliminate special cases +{.mmi +nop.m 0 +nop.m 0 +// y pseudo-zero ? +cmp.eq p7,p10=r29,r0;; +} + +// Y +-NAN, +-inf, +-0? p7 +{ .mfi + nop.m 999 +(p10) fclass.m p7,p10 = f9, 0xe7 + nop.i 999;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p11 = f8, 0xe3 + nop.i 999 +} + +// |x| < |y|? Return x p8 +{ .mfi + nop.m 999 +(p10) fcmp.lt.unc.s1 p8,p0 = f6,f7 + nop.i 999 ;; +} + + { .mfi + mov r2=0x1001f + // (2) q0=a*y0 + (p6) fma.s1 f13=f6,f10,f0 + nop.i 0 +} { .mfi + nop.m 0 + // (3) e0 = 1 - b * y0 + (p6) fnma.s1 f12=f7,f10,f1 + nop.i 0;; +} + +// Y +-NAN, +-inf, +-0? p7 +{ .mfi + nop.m 999 + // pseudo-NaN ? +(p10) fclass.nm p7,p0 = f9, 0xff + nop.i 999 +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 + +{ .mfi + nop.m 999 +(p11) fclass.nm p9,p0 = f8, 0xff + nop.i 999;; +} + +{ .mfi + nop.m 0 + // y denormal ? set D flag (if |x|<|y|) + (p8) fnma.s0 f10=f9,f1,f9 + nop.i 0;; +} + + +{.mfi + nop.m 0 + // normalize x (if |x|<|y|) + (p8) fma.s0 f8=f8,f1,f0 + nop.i 0 +} +{.bbb + (p9) br.cond.spnt L(FMOD_X_NAN_INF) + (p7) br.cond.spnt L(FMOD_Y_NAN_INF_ZERO) + // if |x|<|y|, return + (p8) br.ret.spnt b0;; +} + + {.mfi + nop.m 0 + // x denormal ? set D flag + fnma.s0 f32=f6,f1,f6 + nop.i 0 +} +{.mfi + nop.m 0 + // y denormal ? set D flag + fnma.s0 f33=f7,f1,f7 + nop.i 0;; +} + + {.mfi + // f15=2^32 + setf.exp f15=r2 + // (4) q1=q0+e0*q0 + (p6) fma.s1 f13=f12,f13,f13 + nop.i 0 +} +{ .mfi + nop.m 0 + // (5) e1 = e0 * e0 + 2^-34 + (p6) fma.s1 f14=f12,f12,f11 + nop.i 0;; +} +{.mlx + nop.m 0 + movl r2=0x33a00000;; +} +{ .mfi + nop.m 0 + // (6) y1 = y0 + e0 * y0 + (p6) fma.s1 f10=f12,f10,f10 + nop.i 0;; +} +{.mfi + // set f12=1.25*2^{-24} + setf.s f12=r2 + // (7) q2=q1+e1*q1 + (p6) fma.s1 f13=f13,f14,f13 + nop.i 0;; +} +{.mfi + nop.m 0 + fmerge.s f9=f8,f9 + nop.i 0 +} +{ .mfi + nop.m 0 + // (8) y2 = y1 + e1 * y1 + (p6) fma.s1 f10=f14,f10,f10 + // set p6=0, p10=0 + cmp.ne.and p6,p10=r0,r0;; +} + + +.align 32 +L(loop64): + {.mfi + nop.m 0 + // compare q2, 2^32 + fcmp.lt.unc.s1 p8,p7=f13,f15 + nop.i 0 +} + {.mfi + nop.m 0 + // will truncate quotient to integer, if exponent<32 (in advance) + fcvt.fx.trunc.s1 f11=f13 + nop.i 0;; +} + {.mfi + nop.m 0 + // if exponent>32, round quotient to single precision (perform in advance) + fma.s.s1 f13=f13,f1,f0 + nop.i 0;; +} + + + {.mfi + nop.m 0 + // set f12=sgn(a) + (p8) fmerge.s f12=f8,f1 + nop.i 0 +} + {.mfi + nop.m 0 + // normalize truncated quotient + (p8) fcvt.xf f13=f11 + nop.i 0;; +} + { .mfi + nop.m 0 + // calculate remainder (assuming f13=RZ(Q)) + (p7) fnma.s1 f14=f13,f7,f6 + nop.i 0 +} + {.mfi + nop.m 0 + // also if exponent>32, round quotient to single precision + // and subtract 1 ulp: q=q-q*(1.25*2^{-24}) + (p7) fnma.s.s1 f11=f13,f12,f13 + nop.i 0;; +} + + {.mfi + nop.m 0 + // (p8) calculate remainder (82-bit format) + (p8) fnma.s1 f11=f13,f7,f6 + nop.i 0 +} + {.mfi + nop.m 0 + // (p7) calculate remainder (assuming f11=RZ(Q)) + (p7) fnma.s1 f6=f11,f7,f6 + nop.i 0;; +} + + + {.mfi + nop.m 0 + // Final iteration (p8): is f6 the correct remainder (quotient was not overestimated) ? + (p8) fcmp.lt.unc.s1 p6,p10=f11,f0 + nop.i 0;; +} + {.mfi + nop.m 0 + // get new quotient estimation: a'*y2 + (p7) fma.s1 f13=f14,f10,f0 + nop.i 0 +} + {.mfb + nop.m 0 + // was f13=RZ(Q) ? (then new remainder f14>=0) + (p7) fcmp.lt.unc.s1 p7,p9=f14,f0 + nop.b 0;; +} + + +.pred.rel "mutex",p6,p10 + {.mfb + nop.m 0 + // add b to estimated remainder (to cover the case when the quotient was overestimated) + // also set correct sign by using f9=|b|*sgn(a), f12=sgn(a) + (p6) fma.s0 f8=f11,f12,f9 + nop.b 0 +} + {.mfb + nop.m 0 + // set correct sign of result before returning: f12=sgn(a) + (p10) fma.s0 f8=f11,f12,f0 + (p8) br.ret.sptk b0;; +} + {.mfi + nop.m 0 + // if f13!=RZ(Q), get alternative quotient estimation: a''*y2 + (p7) fma.s1 f13=f6,f10,f0 + nop.i 0 +} + {.mfb + nop.m 0 + // if f14 was RZ(Q), set remainder to f14 + (p9) mov f6=f14 + br.cond.sptk L(loop64);; +} + + + +L(FMOD_X_NAN_INF): + +// Y zero ? +{.mfi + nop.m 0 + fma.s1 f10=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + fcmp.eq.unc.s1 p11,p0=f10,f0 + nop.i 0;; +} +{.mib + nop.m 0 + nop.i 0 + // if Y zero + (p11) br.cond.spnt L(FMOD_Y_ZERO);; +} + +// X infinity? Return QNAN indefinite +{ .mfi + // set p7 t0 0 + cmp.ne p7,p0=r0,r0 +(p0) fclass.m.unc p8,p9 = f8, 0x23 + nop.i 999;; +} +// Y NaN ? +{.mfi + nop.m 999 +(p8) fclass.m p9,p8=f9,0xc3 + nop.i 0;; +} +// Y not pseudo-zero ? (r29 holds significand) +{.mii + nop.m 999 +(p8) cmp.ne p7,p0=r29,r0 + nop.i 0;; +} +{.mfi + nop.m 999 +(p8) frcpa.s0 f8,p0 = f8,f8 + nop.i 0 +} +{ .mfi + nop.m 999 + // also set Denormal flag if necessary +(p7) fnma.s0 f9=f9,f1,f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p8) fma.s0 f8=f8,f1,f0 + nop.b 999 ;; +} + +{ .mfb + nop.m 999 +(p9) frcpa.s0 f8,p7=f8,f9 + br.ret.sptk b0 ;; +} + + +L(FMOD_Y_NAN_INF_ZERO): +// Y INF +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p7) fma f8=f8,f1,f0 +(p7) br.ret.spnt b0 ;; +} + +// Y NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f9, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p0 = f9, 0xff + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p9) fma f8=f9,f1,f0 +(p9) br.ret.spnt b0 ;; +} + +L(FMOD_Y_ZERO): +// Y zero? Must be zero at this point +// because it is the only choice left. +// Return QNAN indefinite + +{.mfi + nop.m 0 + // set Invalid + frcpa f12,p0=f0,f0 + nop.i 0 +} +// X NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p10 = f8, 0xff + nop.i 999 ;; +} + +{.mfi + nop.m 999 + (p9) frcpa f11,p7=f8,f0 + nop.i 0;; +} + + +{ .mfi + nop.m 999 +(p10) frcpa f11,p7 = f9,f9 +(p0) mov GR_Parameter_TAG = 120 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8, f8 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p0) fma f8=f11,f1,f0 +(p0) br.sptk __libm_error_region;; +} + +.endp fmodl +ASM_SIZE_DIRECTIVE(fmodl) +ASM_SIZE_DIRECTIVE(__ieee754_fmodl) + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_hypot.S glibc-2.2.3/sysdeps/ia64/fpu/e_hypot.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_hypot.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_hypot.S Mon Feb 19 00:44:03 2001 @@ -0,0 +1,438 @@ +.file "hypot.asm" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// 2/02/00 hand-optimized +// 4/04/00 Unwind support added +// 6/20/00 new version +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// ___________ +// Function: hypot(x,y) = |(x^2 + y^2) = for double precision values +// x and y +// Also provides cabs functionality. +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9 (Input) +// f6 -f15, f32-f34 +// +// General Purpose Registers: +// r2,r3,r29 (Scratch) +// r32-r36 (Locals) +// r37-r40 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6 - p10 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// All faults and exceptions should be raised correctly. +// Overflow can occur. +// hypot(Infinity and anything) = +Infinity +// hypot(QNaN and anything) = QNaN +// hypot(SNaN and anything ) = QNaN +// +// ********************************************************************* +// +// Implementation: +// x2 = x * x in double-extended +// y2 = y * y in double-extended +// temp = x2 + y2 in double-extended +// sqrt(temp) rounded to double +// +// ********************************************************************* + +#include "libm_support.h" + +GR_SAVE_PFS = r33 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r36 +GR_Parameter_Y = r37 +GR_Parameter_RESULT = r38 +GR_Parameter_TAG = r39 + +FR_X = f32 +FR_Y = f33 +FR_RESULT = f8 + +.section .text +#ifndef _LIBC +.proc cabs# +.global cabs# +cabs: +.endp cabs +#endif +.proc hypot# +.global hypot# +.align 64 + +hypot: +#ifdef _LIBC +.global __hypot +__hypot: +.global __ieee754_hypot +__ieee754_hypot: +#endif +{.mfi + alloc r32= ar.pfs,0,4,4,0 + // Compute x*x + fma.s1 f10=f8,f8,f0 + // r2=bias-1 + mov r2=0xfffe +} +{.mfi + // 63/8 + mov r3=0x40fc //0000 + // y*y + fma.s1 f11=f9,f9,f0 + // r29=429/16 + mov r29=0x41d68;; //000 +} + +{ .mfi + nop.m 0 +// Check if x is an Inf - if so return Inf even +// if y is a NaN (C9X) + fclass.m.unc p7, p6 = f8, 0x023 + shl r3=r3,16 +} +{.mfi + nop.m 0 + // if possible overflow, copy f8 to f32 + // set Denormal, if necessary + // (p8) + fma.d.s0 f32=f8,f1,f0 + nop.i 0;; +} +{ .mfi + nop.m 0 +// Check if y is an Inf - if so return Inf even +// if x is a NaN (C9X) + fclass.m.unc p8, p9 = f9, 0x023 + shl r29=r29,12 +} +{ .mfb + // f7=0.5 + setf.exp f7=r2 +// For x=inf, multiply y by 1 to raise invalid on y an SNaN +// (p7) fma.s0 f9=f9,f1,f0 + // copy f9 to f33; set Denormal, if necessary + fma.d.s0 f33=f9,f1,f0 + nop.b 0;; +} +{.mfb + // f13=63/8 + setf.s f13=r3 + // is y Zero ? + (p6) fclass.m p6,p0=f9,0x7 + nop.b 0 +} +{.mlx + nop.m 0 + movl r2=0x408c0000;; +} + +{.mfi + // f34=429/16 + setf.s f34=r29 + // is x Zero ? + (p9) fclass.m p9,p0=f8,0x7 + // 231/16 + mov r3=0x4167;; //0000 +} +{.mfi + nop.m 0 + // a=x2+y2 + fma.s1 f12=f10,f1,f11 + nop.i 0;; +} +{.mfi + nop.m 0 + // y not NaN ? + (p9) fclass.m p8,p0=f9,0x3f + shl r3=r3,16 +} +{.mfi + nop.m 0 + // f6=2 + fma.s1 f6=f1,f1,f1 + nop.i 0;; +} + + +{.mfi + nop.m 0 + // x not NaN ? + (p6) fclass.m p7,p0=f8,0x3f + nop.i 0;; +} +{.mfi + // f9=35/8 + setf.s f9=r2 + nop.f 0 + // 2*emax-2 + mov r2=0x107fb;; +} + +{.mfb + nop.m 0 + // if f8=Infinity or f9=Zero, return |f8| + (p7) fmerge.s f8=f0,f32 + (p7) br.ret.spnt b0 +} +{.mfb + nop.m 0 + // if f9=Infinity or f8=Zero, return |f9| + (p8) fmerge.s f8=f0,f33 + (p8) br.ret.spnt b0;; +} + + +{.mfi + // f10 =231/16 + setf.s f10=r3 + // z0=frsqrta(a) + frsqrta.s1 f8,p6=f12 + nop.i 0;; +} + +{ .mfi + nop.m 0 +// Identify Natvals, Infs, NaNs, and Zeros +// and return result + fclass.m.unc p7, p0 = f12, 0x1E7 + nop.i 0;; +} +{.mfb + // get exponent of x^2+y^2 + getf.exp r3=f12 + // if special case, set f8 + (p7) mov f8=f12 + (p7) br.ret.spnt b0;; +} + + +{.mfi + nop.m 0 + // S0=a*z0 + (p6) fma.s1 f14=f12,f8,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // H0=0.5*z0 + (p6) fma.s1 f15=f8,f7,f0 + nop.i 0;; +} + + +{.mfi + nop.m 0 + // f6=5/2 + fma.s1 f6=f7,f1,f6 + nop.i 0 +} +{.mfi + nop.m 0 + // f11=3/2 + fma.s1 f11=f7,f1,f1 + nop.i 0;; +} + +{.mfi + nop.m 0 + // d=0.5-S0*H0 + (p6) fnma.s1 f7=f14,f15,f7 + nop.i 0;; +} + +{.mfi + nop.m 0 + // P67=231/16+429/16*d + (p6) fma.s1 f10=f34,f7,f10 + nop.i 0 +} +{.mfi + nop.m 0 + // P45=63/8*d+35/8 + (p6) fma.s1 f9=f13,f7,f9 + nop.i 0;; +} +{.mfi + nop.m 0 + // P23=5/2*d+3/2 + (p6) fma.s1 f11=f6,f7,f11 + nop.i 0 +} +{.mfi + nop.m 0 + // d2=d*d + (p6) fma.s1 f13=f7,f7,f0 + nop.i 0;; +} + +{.mfi + nop.m 0 + // P47=d2*P67+P45 + (p6) fma.s1 f10=f10,f13,f9 + nop.i 0 +} +{.mfi + nop.m 0 + // P13=d*P23+1 + (p6) fma.s1 f11=f11,f7,f1 + nop.i 0;; +} +{.mfi + nop.m 0 + // d3=d2*d + (p6) fma.s1 f13=f13,f7,f0 + nop.i 0;; +} + +{.mfi + nop.m 0 + // T0=d*S0 + (p6) fma.s1 f15=f7,f14,f0 + nop.i 0 +} +{.mfi + // Is x^2 + y^2 well less than the overflow + // threshold? + (p6) cmp.lt.unc p7, p8 = r3,r2 + // P=P13+d3*P47 + (p6) fma.s1 f10=f13,f10,f11 + nop.i 0;; +} + +{.mfb + nop.m 0 + // S=P*T0+S0 + fma.d.s0 f8=f10,f15,f14 + // No overflow in this case + (p7) br.ret.sptk b0;; +} + +{ .mfi + nop.m 0 +(p8) fsetc.s2 0x7F,0x42 + // Possible overflow path, must detect by + // Setting widest range exponent with prevailing + // rounding mode. + nop.i 0 ;; +} + + +{ .mfi + // bias+0x400 (bias+EMAX+1) + (p8) mov r2=0x103ff + // S=P*T0+S0 + (p8) fma.d.s2 f12=f10,f15,f14 + nop.i 0 ;; +} +{ .mfi +(p8) setf.exp f11 = r2 +(p8) fsetc.s2 0x7F,0x40 +// Restore Original Mode in S2 + nop.i 0 ;; +} +{ .mfi + nop.m 0 +(p8) fcmp.lt.unc.s1 p9, p10 = f12, f11 + nop.i 0 ;; +} +{ .mib + nop.m 0 + mov GR_Parameter_TAG = 46 + // No overflow +(p9) br.ret.sptk b0;; +} +.endp hypot +ASM_SIZE_DIRECTIVE(hypot) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_hypotf.S glibc-2.2.3/sysdeps/ia64/fpu/e_hypotf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_hypotf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_hypotf.S Mon Feb 19 00:44:11 2001 @@ -0,0 +1,394 @@ +.file "hypotf.asm" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// 2/02/00 hand-optimized +// 4/04/00 Unwind support added +// 6/26/00 new version +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// ___________ +// Function: hypotf(x,y) = |(x^2 + y^2) = for single precision values +// x and y +// Also provides cabsf functionality. +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9 (Input) +// f6 -f15 +// +// General Purpose Registers: +// r2-r3 (Scratch) +// r32-r36 (Locals) +// r37-r40 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6 - p10 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// All faults and exceptions should be raised correctly. +// Overflow can occur. +// hypotf(Infinity and anything) = +Infinity +// hypotf(QNaN and anything) = QNaN +// hypotf(SNaN and anything ) = QNaN +// +// ********************************************************************* +// +// Implementation: +// x2 = x * x in double-extended +// y2 = y * y in double-extended +// temp = x2 + y2 in double-extended +// sqrt(temp) rounded to single precision +// +// ********************************************************************* + +#include "libm_support.h" + +GR_SAVE_PFS = r33 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r36 +GR_Parameter_Y = r37 +GR_Parameter_RESULT = r38 +GR_Parameter_TAG = r39 + +FR_X = f14 +FR_Y = f15 +FR_RESULT = f8 + +.section .text +#ifndef _LIBC +.proc cabsf# +.global cabsf# +cabsf: +.endp cabsf +#endif +.proc hypotf# +.global hypotf# +.align 64 + +hypotf: +#ifdef _LIBC +.global __hypotf +__hypotf: +.global __ieee754_hypotf +__ieee754_hypotf: +#endif +{.mfi + alloc r32= ar.pfs,0,4,4,0 + // Compute x*x + fma.s1 f10=f8,f8,f0 + // r2=bias-1 + mov r2=0xfffe +} +{.mfi + nop.m 0 + // y*y + fma.s1 f11=f9,f9,f0 + nop.i 0;; +} + +{ .mfi + nop.m 0 +// Check if x is an Inf - if so return Inf even +// if y is a NaN (C9X) + fclass.m.unc p7, p6 = f8, 0x023 + nop.i 0 +} +{.mfi + nop.m 0 + // if possible overflow, copy f8 to f14 + // set Denormal, if necessary + // (p8) + fma.s.s0 f14=f8,f1,f0 + nop.i 0;; +} + +{ .mfi + nop.m 0 +// Check if y is an Inf - if so return Inf even +// if x is a NaN (C9X) + fclass.m.unc p8, p9 = f9, 0x023 + nop.i 0 +} +{ .mfi + nop.m 0 +// For x=inf, multiply y by 1 to raise invalid on y an SNaN +// (p7) fma.s0 f9=f9,f1,f0 + // copy f9 to f15; set Denormal, if necessary + fma.s.s0 f15=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + // is y Zero ? + (p6) fclass.m p6,p0=f9,0x7 + nop.i 0;; +} +{.mfi + nop.m 0 + // is x Zero ? + (p9) fclass.m p9,p0=f8,0x7 + nop.i 0;; +} + +{.mfi + // f7=0.5 + setf.exp f7=r2 + // a=x2+y2 + fma.s1 f12=f10,f1,f11 + nop.i 0;; +} + +{.mfi + nop.m 0 + // x not NaN ? + (p6) fclass.m p7,p0=f8,0x3f + nop.i 0 +} +{.mfi + // 2*emax-2 + mov r2=0x100fb + // f6=2 + fma.s1 f6=f1,f1,f1 + nop.i 0;; +} + +{.mfi + nop.m 0 + // y not NaN ? + (p9) fclass.m p8,p0=f9,0x3f + nop.i 0;; +} + +{.mfb + nop.m 0 + // if f8=Infinity or f9=Zero, return |f8| + (p7) fmerge.s f8=f0,f14 + (p7) br.ret.spnt b0 +} +{.mfb + nop.m 0 + // if f9=Infinity or f8=Zero, return |f9| + (p8) fmerge.s f8=f0,f15 + (p8) br.ret.spnt b0;; +} + +{ .mfi + nop.m 0 +// Identify Natvals, Infs, NaNs, and Zeros +// and return result + fclass.m.unc p7, p0 = f12, 0x1E7 + nop.i 0 +} +{.mfi + nop.m 0 + // z0=frsqrta(a) + frsqrta.s1 f8,p6=f12 + nop.i 0;; +} + +{.mfb + // get exponent of x^2+y^2 + getf.exp r3=f12 + // if special case, set f8 + (p7) mov f8=f12 + (p7) br.ret.spnt b0;; +} + + +{.mfi + nop.m 0 + // S0=a*z0 + (p6) fma.s1 f12=f12,f8,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // H0=0.5*z0 + (p6) fma.s1 f10=f8,f7,f0 + nop.i 0;; +} + + +{.mfi + nop.m 0 + // f6=5/2 + fma.s1 f6=f7,f1,f6 + nop.i 0 +} +{.mfi + nop.m 0 + // f11=3/2 + fma.s1 f11=f7,f1,f1 + nop.i 0;; +} + +{.mfi + nop.m 0 + // d=0.5-S0*H0 + (p6) fnma.s1 f7=f12,f10,f7 + nop.i 0;; +} + +{.mfi + nop.m 0 + // P01=d+1 + (p6) fma.s1 f10=f1,f7,f1 + nop.i 0 +} +{.mfi + nop.m 0 + // P23=5/2*d+3/2 + (p6) fma.s1 f11=f6,f7,f11 + nop.i 0;; +} +{.mfi + nop.m 0 + // d2=d*d + (p6) fma.s1 f7=f7,f7,f0 + nop.i 0;; +} + + +{.mfi + // Is x^2 + y^2 well less than the overflow + // threshold? + (p6) cmp.lt.unc p7, p8 = r3,r2 + // P=P01+d2*P23 + (p6) fma.s1 f10=f7,f11,f10 + nop.i 0;; +} + +{.mfb + nop.m 0 + // S=P*S0 + fma.s.s0 f8=f10,f12,f0 + // No overflow in this case + (p7) br.ret.sptk b0;; +} + +{ .mfi + nop.m 0 +(p8) fsetc.s2 0x7F,0x42 + // Possible overflow path, must detect by + // Setting widest range exponent with prevailing + // rounding mode. + nop.i 0 ;; +} + + +{ .mfi + // bias+0x400 (bias+EMAX+1) + (p8) mov r2=0x1007f + // S=P*S0 + (p8) fma.s.s2 f12=f10,f12,f0 + nop.i 0 ;; +} +{ .mfi +(p8) setf.exp f11 = r2 +(p8) fsetc.s2 0x7F,0x40 +// Restore Original Mode in S2 + nop.i 0 ;; +} +{ .mfi + nop.m 0 +(p8) fcmp.lt.unc.s1 p9, p10 = f12, f11 + nop.i 0 ;; +} +{ .mib + nop.m 0 + mov GR_Parameter_TAG = 47 + // No overflow +(p9) br.ret.sptk b0;; +} +.endp hypotf +ASM_SIZE_DIRECTIVE(hypotf) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mii + add GR_Parameter_Y=-32,sp // Parameter 2 value +(p0) mov GR_Parameter_TAG = 47 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_hypotl.S glibc-2.2.3/sysdeps/ia64/fpu/e_hypotl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_hypotl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_hypotl.S Mon Feb 19 00:44:20 2001 @@ -0,0 +1,478 @@ +.file "hypotl.asm" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// 2/02/00 hand-optimized +// 4/04/00 Unwind support added +// 6/20/00 new version +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// ___________ +// Function: hypotl(x,y) = |(x^2 + y^2) = for double extended values +// x and y +// Also provides cabsl functionality. +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9 (Input) +// f6 -f15, f32-f34 +// +// General Purpose Registers: +// r2-r3 (Scratch) +// r32-r36 (Locals) +// r37-r40 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6 - p10 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// All faults and exceptions should be raised correctly. +// Overflow can occur. +// hypotl(Infinity and anything) = +Infinity +// hypotl(QNaN and anything) = QNaN +// hypotl(SNaN and anything ) = QNaN +// +// ********************************************************************* +// +// Implementation: +// x2 = x * x in double-extended +// y2 = y * y in double-extended +// temp = x2 + y2 in double-extended +// sqrt(temp) rounded to double extended +// +// ********************************************************************* + +#include "libm_support.h" + +GR_SAVE_PFS = r33 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r36 +GR_Parameter_Y = r37 +GR_Parameter_RESULT = r38 +GR_Parameter_TAG = r39 + +FR_X = f32 +FR_Y = f33 +FR_RESULT = f8 + +.section .text +#ifndef _LIBC +.proc cabsl# +.global cabsl# +cabsl: +.endp cabsl +#endif +.proc hypotl# +.global hypotl# +.align 64 + +hypotl: +#ifdef _LIBC +.global __hypotl +__hypotl: +.global __ieee754_hypotl +__ieee754_hypotl: +#endif +{.mfi + alloc r32= ar.pfs,0,4,4,0 + // Compute x*x + fma.s1 f10=f8,f8,f0 + // r2=bias-1 + mov r2=0xfffe +} +{.mfi + nop.m 0 + // y*y + fma.s1 f11=f9,f9,f0 + nop.i 0;; +} + +{ .mfi + nop.m 0 +// Check if x is an Inf - if so return Inf even +// if y is a NaN (C9X) + fclass.m.unc p7, p6 = f8, 0x023 + nop.i 0 +} +{.mfi + nop.m 0 + // if possible overflow, copy f8 to f32 + // set Denormal, if necessary + // (p8) + fma.s0 f32=f8,f1,f0 + nop.i 0;; +} +{ .mfi + nop.m 0 +// Check if y is an Inf - if so return Inf even +// if x is a NaN (C9X) + fclass.m.unc p8, p9 = f9, 0x023 + nop.i 0 +} +{ .mfi + nop.m 999 +// For x=inf, multiply y by 1 to raise invalid on y an SNaN +// (p7) fma.s0 f9=f9,f1,f0 + // copy f9 to f33; set Denormal, if necessary + fma.s0 f33=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + // is y Zero ? + (p6) fclass.m p6,p0=f9,0x7 + nop.i 0;; +} + +{.mfi + // f7=0.5 + setf.exp f7=r2 + // a=x2+y2 + fma.s1 f12=f10,f1,f11 + nop.i 0 +} +{.mfi + mov r2=0x408c //0000 + // dx=x*x-x2 + fms.s1 f13=f8,f8,f10 + nop.i 0;; +} +{.mfi + nop.m 0 + // is x Zero ? + (p9) fclass.m p9,p0=f8,0x7 + shl r2=r2,16 +} +{.mfi + nop.m 0 + // dy=y*y-y2 + fms.s1 f14=f9,f9,f11 + nop.i 0;; +} + +{.mfi + nop.m 0 + // x not NaN ? + (p6) fclass.m p7,p0=f8,0x3f + nop.i 0 +} +{.mfi + nop.m 0 + // f6=2 + fma.s1 f6=f1,f1,f1 + nop.i 0;; +} + +{.mfi + nop.m 0 + // f34=min(x2,y2) + famin.s1 f34=f10,f11 + nop.i 0 +} +{.mfb + nop.m 0 + // f10=max(x2,y2) + famax.s1 f10=f11,f10 + nop.b 0;; // +} + +{.mfi + nop.m 0 + // y not NaN ? + (p9) fclass.m p8,p0=f9,0x3f + nop.i 0;; +} +{.mfb + // f9=35/8 + setf.s f9=r2 + // if f8=Infinity or f9=Zero, return |f8| + (p7) fmerge.s f8=f0,f32 + (p7) br.ret.spnt b0;; +} + + +{.mfi + nop.m 0 + // z0=frsqrta(a) + frsqrta.s1 f8,p6=f12 + nop.i 0;; +} +{ .mfi + nop.m 0 +// Identify Natvals, Infs, NaNs, and Zeros +// and return result + fclass.m.unc p7, p0 = f12, 0x1E7 + nop.i 0 +} +{.mfi + // get exponent of x^2+y^2 + getf.exp r3=f12 + // dxy=dx+dy + fma.s1 f13=f13,f1,f14 + nop.i 0;; +} + +{.mfb + // 2*emax-2 + mov r2=0x17ffb + // if f9=Infinity or f8=Zero, return |f9| + (p8) fmerge.s f8=f0,f33 + (p8) br.ret.spnt b0 +} +{.mfi + nop.m 0 + // dd=a-max(x2,y2) + fnma.s1 f10=f10,f1,f12 + nop.i 0;; +} + +{.mfi + nop.m 0 + // S0=a*z0 + (p6) fma.s1 f14=f12,f8,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // H0=0.5*z0 + (p6) fma.s1 f15=f8,f7,f0 + nop.i 0;; +} + +{.mfb + nop.m 0 + // if special case, set f8 + (p7) mov f8=f12 + (p7) br.ret.spnt b0 +} +{.mfi + nop.m 0 + // da=min(x2,y2)-dd + fnma.s1 f10=f10,f1,f34 + nop.i 0;; +} +{.mfi + nop.m 0 + // f6=5/2 + fma.s1 f6=f7,f1,f6 + nop.i 0 +} +{.mfi + nop.m 0 + // f11=3/2 + fma.s1 f11=f7,f1,f1 + nop.i 0;; +} + +{.mfi + nop.m 0 + // d=0.5-S0*H0 + (p6) fnma.s1 f7=f14,f15,f7 + nop.i 0;; +} + +{.mfi + nop.m 0 + // P1=3/2*d+1 + (p6) fma.s1 f11=f11,f7,f1 + nop.i 0 +} +{.mfi + nop.m 0 + // P2=35/8*d+5/2 + (p6) fma.s1 f9=f9,f7,f6 + nop.i 0;; +} +{.mfi + nop.m 0 + // d2=d*d + (p6) fma.s1 f34=f7,f7,f0 + nop.i 0;; +} + +{.mfi + nop.m 0 + // T0=d*S0 + (p6) fma.s1 f6=f7,f14,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // G0=d*H0 + (p6) fma.s1 f7=f7,f15,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + // P=d2*P2+P1 + (p6) fma.s1 f11=f34,f9,f11 + nop.i 0;; +} + +{.mfi + nop.m 0 + // S1=p*T0+S0 + (p6) fma.s1 f14=f11,f6,f14 + nop.i 0 +} +{.mfi + nop.m 0 + // H1=p*G0+H0 + (p6) fma.s1 f15=f11,f7,f15 + nop.i 0;; +} + + +{.mfi + nop.m 0 + // e1=a-S1*S1 + (p6) fnma.s1 f7=f14,f14,f12 + nop.i 0 +} +{.mfi + // Is x^2 + y^2 well less than the overflow + // threshold? + (p6) cmp.lt.unc p7, p8 = r3,r2 + // c=dxy+da + (p6) fma.s1 f13=f13,f1,f10 + nop.i 0;; +} + +{.mfi + nop.m 0 + // e=e1+c + (p6) fma.s1 f13=f7,f1,f13 + nop.i 0;; +} + +{.mfb + nop.m 0 + // S=e*H1+S1 + fma.s0 f8=f13,f15,f14 + // No overflow in this case + (p7) br.ret.sptk b0;; +} + +{ .mfi + nop.m 0 +(p8) fsetc.s2 0x7F,0x42 + // Possible overflow path, must detect by + // Setting widest range exponent with prevailing + // rounding mode. + nop.i 0 ;; +} + + +{ .mfi + // bias+0x4000 (bias+EMAX+1) + (p8) mov r2=0x13fff + // S=e*H1+S1 + (p8) fma.s2 f12=f13,f15,f14 + nop.i 0 ;; +} +{ .mfi +(p8) setf.exp f11 = r2 +(p8) fsetc.s2 0x7F,0x40 +// Restore Original Mode in S2 + nop.i 0 ;; +} +{ .mfi + nop.m 0 +(p8) fcmp.lt.unc.s1 p9, p10 = f12, f11 + nop.i 0 ;; +} +{ .mib + nop.m 0 + mov GR_Parameter_TAG = 45; + // No overflow +(p9) br.ret.sptk b0;; +} +.endp hypotl +ASM_SIZE_DIRECTIVE(hypotl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_log.S glibc-2.2.3/sysdeps/ia64/fpu/e_log.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_log.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_log.S Mon Feb 19 00:44:31 2001 @@ -0,0 +1,1091 @@ +.file "log.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 6/16/00 Updated table to be rounded correctly +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 8/17/00 Improved speed of main path by 5 cycles +// Shortened path for x=1.0 +// 1/09/01 Improved speed, fixed flags for neg denormals +// +// +// API +//============================================================== +// double log(double) +// double log10(double) +// +// Overview of operation +//============================================================== +// Background +// +// Consider x = 2^N 1.f1 f2 f3 f4...f63 +// Log(x) = log(frcpa(x) x/frcpa(x)) +// = log(1/frcpa(x)) + log(frcpa(x) x) +// = -log(frcpa(x)) + log(frcpa(x) x) +// +// frcpa(x) = 2^-N frcpa((1.f1 f2 ... f63) +// +// -log(frcpa(x)) = -log(C) +// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) +// +// -log(frcpa(x)) = -log(C) +// = +Nlog2 - log(frcpa(1.f1 f2 ... f63)) +// +// -log(frcpa(x)) = -log(C) +// = +Nlog2 + log(frcpa(1.f1 f2 ... f63)) +// +// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) + +// Log(x) = +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) +// Log(x) = +Nlog2 - log(/frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) +// Log(x) = +Nlog2 + T + log(frcpa(x) x) +// +// Log(x) = +Nlog2 + T + log(C x) +// +// Cx = 1 + r +// +// Log(x) = +Nlog2 + T + log(1+r) +// Log(x) = +Nlog2 + T + Series( r - r^2/2 + r^3/3 - r^4/4 ....) +// +// 1.f1 f2 ... f8 has 256 entries. +// They are 1 + k/2^8, k = 0 ... 255 +// These 256 values are the table entries. +// +// Implementation +//=============== +// CASE 1: |x-1| >= 2^-6 +// C = frcpa(x) +// r = C * x - 1 +// +// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 + P4*r^5 + P5*r^6 +// +// x = f * 2*n where f is 1.f_1f_2f_3....f_63 +// Nfloat = float(n) where n is the true unbiased exponent +// pre-index = f_1f_2....f_8 +// index = pre_index * 16 +// get the dxt table entry at index + offset = T +// +// result = (T + Nfloat * log(2)) + rseries +// +// The T table is calculated as follows +// Form x_k = 1 + k/2^8 where k goes from 0... 255 +// y_k = frcpa(x_k) +// log(1/y_k) in quad and round to double-extended + +// CASE 2: |x-1| < 2^-6 +// w = x - 1 +// +// Form wseries = w + Q1*w^2 + Q2*w^3 + ... + Q7*w^8 + Q8*w^9 +// +// result = wseries + +// Special values +//============================================================== + + +// log(+0) = -inf +// log(-0) = -inf + +// log(+qnan) = +qnan +// log(-qnan) = -qnan +// log(+snan) = +qnan +// log(-snan) = -qnan + +// log(-n) = QNAN Indefinite +// log(-inf) = QNAN Indefinite + +// log(+inf) = +inf + +// Registers used +//============================================================== +// Floating Point registers used: +// f8, input +// f9 -> f15, f32 -> f68 + +// General registers used: +// r32 -> r51 + +// Predicate registers used: +// p6 -> p15 + +// p8 log base e +// p6 log base e special +// p9 used in the frcpa +// p13 log base e large W +// p14 log base e small w + +// p7 log base 10 +// p10 log base 10 large W +// p11 log base 10 small w +// p12 log base 10 special + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +log_int_Nfloat = f9 +log_Nfloat = f10 + +log_P5 = f11 +log_P4 = f12 +log_P3 = f13 +log_P2 = f14 +log_half = f15 + +log_log2 = f32 +log_T = f33 + +log_rp_p4 = f34 +log_rp_p32 = f35 +log_rp_p2 = f36 +log_w6 = f37 +log_rp_p10 = f38 +log_rcube = f39 +log_rsq = f40 + +log_T_plus_Nlog2 = f41 +log_w3 = f42 + +log_r = f43 +log_C = f44 + +log_w = f45 +log_Q8 = f46 +log_Q7 = f47 +log_Q4 = f48 +log_Q3 = f49 +log_Q6 = f50 +log_Q5 = f51 +log_Q2 = f52 +log_Q1 = f53 +log_P1 = f53 + +log_rp_q7 = f54 +log_rp_q65 = f55 +log_Qlo = f56 + +log_rp_q3 = f57 +log_rp_q21 = f58 +log_Qhi = f59 + +log_wsq = f60 +log_w4 = f61 +log_Q = f62 + +log_inv_ln10 = f63 +log_log10_hi = f64 +log_log10_lo = f65 +log_rp_q10 = f66 +log_NORM_f8 = f67 +log_r2P_r = f68 + +// =================================== + +log_GR_exp_17_ones = r33 +log_GR_exp_16_ones = r34 +log_GR_exp_f8 = r35 +log_GR_signexp_f8 = r36 +log_GR_true_exp_f8 = r37 +log_GR_significand_f8 = r38 +log_GR_half_exp = r39 +log_GR_index = r39 +log_AD_1 = r40 +log_GR_signexp_w = r41 +log_GR_fff9 = r42 +log_AD_2 = r43 +log_GR_exp_w = r44 + +GR_SAVE_B0 = r45 +GR_SAVE_GP = r46 +GR_SAVE_PFS = r47 + +GR_Parameter_X = r48 +GR_Parameter_Y = r49 +GR_Parameter_RESULT = r50 +log_GR_tag = r51 + + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +log_table_1: +ASM_TYPE_DIRECTIVE(log_table_1,@object) +data8 0xBFC5555DA7212371 // P5 +data8 0x3FC999A19EEF5826 // P4 +data8 0x3FBC756AC654273B // Q8 +data8 0xBFC001A42489AB4D // Q7 +data8 0x3FC99999999A169B // Q4 +data8 0xBFD00000000019AC // Q3 +ASM_SIZE_DIRECTIVE(log_table_1) +log_table_2: +ASM_TYPE_DIRECTIVE(log_table_2,@object) +data8 0xBFCFFFFFFFFEF009 // P3 +data8 0x3FD555555554ECB2 // P2 +data8 0x3FC2492479AA0DF8 // Q6 +data8 0xBFC5555544986F52 // Q5 +data8 0x3FD5555555555555 // Q2 +data8 0xBFE0000000000000 // Q1, P1 = -0.5 + + +data8 0xde5bd8a937287195, 0x00003ffd // double-extended 1/ln(10) +data8 0xb17217f7d1cf79ac, 0x00003ffe // log2 +// b17217f7d1cf79ab c9e3b39803f2f6a + + +data8 0x80200aaeac44ef38 , 0x00003ff6 // log(1/frcpa(1+ 0/2^-8)) + +data8 0xc09090a2c35aa070 , 0x00003ff7 // log(1/frcpa(1+ 1/2^-8)) +data8 0xa0c94fcb41977c75 , 0x00003ff8 // log(1/frcpa(1+ 2/2^-8)) +data8 0xe18b9c263af83301 , 0x00003ff8 // log(1/frcpa(1+ 3/2^-8)) +data8 0x8d35c8d6399c30ea , 0x00003ff9 // log(1/frcpa(1+ 4/2^-8)) +data8 0xadd4d2ecd601cbb8 , 0x00003ff9 // log(1/frcpa(1+ 5/2^-8)) + +data8 0xce95403a192f9f01 , 0x00003ff9 // log(1/frcpa(1+ 6/2^-8)) +data8 0xeb59392cbcc01096 , 0x00003ff9 // log(1/frcpa(1+ 7/2^-8)) +data8 0x862c7d0cefd54c5d , 0x00003ffa // log(1/frcpa(1+ 8/2^-8)) +data8 0x94aa63c65e70d499 , 0x00003ffa // log(1/frcpa(1+ 9/2^-8)) +data8 0xa54a696d4b62b382 , 0x00003ffa // log(1/frcpa(1+ 10/2^-8)) + +data8 0xb3e4a796a5dac208 , 0x00003ffa // log(1/frcpa(1+ 11/2^-8)) +data8 0xc28c45b1878340a9 , 0x00003ffa // log(1/frcpa(1+ 12/2^-8)) +data8 0xd35c55f39d7a6235 , 0x00003ffa // log(1/frcpa(1+ 13/2^-8)) +data8 0xe220f037b954f1f5 , 0x00003ffa // log(1/frcpa(1+ 14/2^-8)) +data8 0xf0f3389b036834f3 , 0x00003ffa // log(1/frcpa(1+ 15/2^-8)) + +data8 0xffd3488d5c980465 , 0x00003ffa // log(1/frcpa(1+ 16/2^-8)) +data8 0x87609ce2ed300490 , 0x00003ffb // log(1/frcpa(1+ 17/2^-8)) +data8 0x8ede9321e8c85927 , 0x00003ffb // log(1/frcpa(1+ 18/2^-8)) +data8 0x96639427f2f8e2f4 , 0x00003ffb // log(1/frcpa(1+ 19/2^-8)) +data8 0x9defad3e8f73217b , 0x00003ffb // log(1/frcpa(1+ 20/2^-8)) + +data8 0xa582ebd50097029c , 0x00003ffb // log(1/frcpa(1+ 21/2^-8)) +data8 0xac06dbe75ab80fee , 0x00003ffb // log(1/frcpa(1+ 22/2^-8)) +data8 0xb3a78449b2d3ccca , 0x00003ffb // log(1/frcpa(1+ 23/2^-8)) +data8 0xbb4f79635ab46bb2 , 0x00003ffb // log(1/frcpa(1+ 24/2^-8)) +data8 0xc2fec93a83523f3f , 0x00003ffb // log(1/frcpa(1+ 25/2^-8)) + +data8 0xc99af2eaca4c4571 , 0x00003ffb // log(1/frcpa(1+ 26/2^-8)) +data8 0xd1581106472fa653 , 0x00003ffb // log(1/frcpa(1+ 27/2^-8)) +data8 0xd8002560d4355f2e , 0x00003ffb // log(1/frcpa(1+ 28/2^-8)) +data8 0xdfcb43b4fe508632 , 0x00003ffb // log(1/frcpa(1+ 29/2^-8)) +data8 0xe67f6dff709d4119 , 0x00003ffb // log(1/frcpa(1+ 30/2^-8)) + +data8 0xed393b1c22351280 , 0x00003ffb // log(1/frcpa(1+ 31/2^-8)) +data8 0xf5192bff087bcc35 , 0x00003ffb // log(1/frcpa(1+ 32/2^-8)) +data8 0xfbdf4ff6dfef2fa3 , 0x00003ffb // log(1/frcpa(1+ 33/2^-8)) +data8 0x81559a97f92f9cc7 , 0x00003ffc // log(1/frcpa(1+ 34/2^-8)) +data8 0x84be72bce90266e8 , 0x00003ffc // log(1/frcpa(1+ 35/2^-8)) + +data8 0x88bc74113f23def2 , 0x00003ffc // log(1/frcpa(1+ 36/2^-8)) +data8 0x8c2ba3edf6799d11 , 0x00003ffc // log(1/frcpa(1+ 37/2^-8)) +data8 0x8f9dc92f92ea08b1 , 0x00003ffc // log(1/frcpa(1+ 38/2^-8)) +data8 0x9312e8f36efab5a7 , 0x00003ffc // log(1/frcpa(1+ 39/2^-8)) +data8 0x968b08643409ceb6 , 0x00003ffc // log(1/frcpa(1+ 40/2^-8)) + +data8 0x9a062cba08a1708c , 0x00003ffc // log(1/frcpa(1+ 41/2^-8)) +data8 0x9d845b3abf95485c , 0x00003ffc // log(1/frcpa(1+ 42/2^-8)) +data8 0xa06fd841bc001bb4 , 0x00003ffc // log(1/frcpa(1+ 43/2^-8)) +data8 0xa3f3a74652fbe0db , 0x00003ffc // log(1/frcpa(1+ 44/2^-8)) +data8 0xa77a8fb2336f20f5 , 0x00003ffc // log(1/frcpa(1+ 45/2^-8)) + +data8 0xab0497015d28b0a0 , 0x00003ffc // log(1/frcpa(1+ 46/2^-8)) +data8 0xae91c2be6ba6a615 , 0x00003ffc // log(1/frcpa(1+ 47/2^-8)) +data8 0xb189d1b99aebb20b , 0x00003ffc // log(1/frcpa(1+ 48/2^-8)) +data8 0xb51cced5de9c1b2c , 0x00003ffc // log(1/frcpa(1+ 49/2^-8)) +data8 0xb819bee9e720d42f , 0x00003ffc // log(1/frcpa(1+ 50/2^-8)) + +data8 0xbbb2a0947b093a5d , 0x00003ffc // log(1/frcpa(1+ 51/2^-8)) +data8 0xbf4ec1505811684a , 0x00003ffc // log(1/frcpa(1+ 52/2^-8)) +data8 0xc2535bacfa8975ff , 0x00003ffc // log(1/frcpa(1+ 53/2^-8)) +data8 0xc55a3eafad187eb8 , 0x00003ffc // log(1/frcpa(1+ 54/2^-8)) +data8 0xc8ff2484b2c0da74 , 0x00003ffc // log(1/frcpa(1+ 55/2^-8)) + +data8 0xcc0b1a008d53ab76 , 0x00003ffc // log(1/frcpa(1+ 56/2^-8)) +data8 0xcfb6203844b3209b , 0x00003ffc // log(1/frcpa(1+ 57/2^-8)) +data8 0xd2c73949a47a19f5 , 0x00003ffc // log(1/frcpa(1+ 58/2^-8)) +data8 0xd5daae18b49d6695 , 0x00003ffc // log(1/frcpa(1+ 59/2^-8)) +data8 0xd8f08248cf7e8019 , 0x00003ffc // log(1/frcpa(1+ 60/2^-8)) + +data8 0xdca7749f1b3e540e , 0x00003ffc // log(1/frcpa(1+ 61/2^-8)) +data8 0xdfc28e033aaaf7c7 , 0x00003ffc // log(1/frcpa(1+ 62/2^-8)) +data8 0xe2e012a5f91d2f55 , 0x00003ffc // log(1/frcpa(1+ 63/2^-8)) +data8 0xe600064ed9e292a8 , 0x00003ffc // log(1/frcpa(1+ 64/2^-8)) +data8 0xe9226cce42b39f60 , 0x00003ffc // log(1/frcpa(1+ 65/2^-8)) + +data8 0xec4749fd97a28360 , 0x00003ffc // log(1/frcpa(1+ 66/2^-8)) +data8 0xef6ea1bf57780495 , 0x00003ffc // log(1/frcpa(1+ 67/2^-8)) +data8 0xf29877ff38809091 , 0x00003ffc // log(1/frcpa(1+ 68/2^-8)) +data8 0xf5c4d0b245cb89be , 0x00003ffc // log(1/frcpa(1+ 69/2^-8)) +data8 0xf8f3afd6fcdef3aa , 0x00003ffc // log(1/frcpa(1+ 70/2^-8)) + +data8 0xfc2519756be1abc7 , 0x00003ffc // log(1/frcpa(1+ 71/2^-8)) +data8 0xff59119f503e6832 , 0x00003ffc // log(1/frcpa(1+ 72/2^-8)) +data8 0x8147ce381ae0e146 , 0x00003ffd // log(1/frcpa(1+ 73/2^-8)) +data8 0x82e45f06cb1ad0f2 , 0x00003ffd // log(1/frcpa(1+ 74/2^-8)) +data8 0x842f5c7c573cbaa2 , 0x00003ffd // log(1/frcpa(1+ 75/2^-8)) + +data8 0x85ce471968c8893a , 0x00003ffd // log(1/frcpa(1+ 76/2^-8)) +data8 0x876e8305bc04066d , 0x00003ffd // log(1/frcpa(1+ 77/2^-8)) +data8 0x891012678031fbb3 , 0x00003ffd // log(1/frcpa(1+ 78/2^-8)) +data8 0x8a5f1493d766a05f , 0x00003ffd // log(1/frcpa(1+ 79/2^-8)) +data8 0x8c030c778c56fa00 , 0x00003ffd // log(1/frcpa(1+ 80/2^-8)) + +data8 0x8da85df17e31d9ae , 0x00003ffd // log(1/frcpa(1+ 81/2^-8)) +data8 0x8efa663e7921687e , 0x00003ffd // log(1/frcpa(1+ 82/2^-8)) +data8 0x90a22b6875c6a1f8 , 0x00003ffd // log(1/frcpa(1+ 83/2^-8)) +data8 0x91f62cc8f5d24837 , 0x00003ffd // log(1/frcpa(1+ 84/2^-8)) +data8 0x93a06cfc3857d980 , 0x00003ffd // log(1/frcpa(1+ 85/2^-8)) + +data8 0x94f66d5e6fd01ced , 0x00003ffd // log(1/frcpa(1+ 86/2^-8)) +data8 0x96a330156e6772f2 , 0x00003ffd // log(1/frcpa(1+ 87/2^-8)) +data8 0x97fb3582754ea25b , 0x00003ffd // log(1/frcpa(1+ 88/2^-8)) +data8 0x99aa8259aad1bbf2 , 0x00003ffd // log(1/frcpa(1+ 89/2^-8)) +data8 0x9b0492f6227ae4a8 , 0x00003ffd // log(1/frcpa(1+ 90/2^-8)) + +data8 0x9c5f8e199bf3a7a5 , 0x00003ffd // log(1/frcpa(1+ 91/2^-8)) +data8 0x9e1293b9998c1daa , 0x00003ffd // log(1/frcpa(1+ 92/2^-8)) +data8 0x9f6fa31e0b41f308 , 0x00003ffd // log(1/frcpa(1+ 93/2^-8)) +data8 0xa0cda11eaf46390e , 0x00003ffd // log(1/frcpa(1+ 94/2^-8)) +data8 0xa22c8f029cfa45aa , 0x00003ffd // log(1/frcpa(1+ 95/2^-8)) + +data8 0xa3e48badb7856b34 , 0x00003ffd // log(1/frcpa(1+ 96/2^-8)) +data8 0xa5459a0aa95849f9 , 0x00003ffd // log(1/frcpa(1+ 97/2^-8)) +data8 0xa6a79c84480cfebd , 0x00003ffd // log(1/frcpa(1+ 98/2^-8)) +data8 0xa80a946d0fcb3eb2 , 0x00003ffd // log(1/frcpa(1+ 99/2^-8)) +data8 0xa96e831a3ea7b314 , 0x00003ffd // log(1/frcpa(1+100/2^-8)) + +data8 0xaad369e3dc544e3b , 0x00003ffd // log(1/frcpa(1+101/2^-8)) +data8 0xac92e9588952c815 , 0x00003ffd // log(1/frcpa(1+102/2^-8)) +data8 0xadfa035aa1ed8fdc , 0x00003ffd // log(1/frcpa(1+103/2^-8)) +data8 0xaf6219eae1ad6e34 , 0x00003ffd // log(1/frcpa(1+104/2^-8)) +data8 0xb0cb2e6d8160f753 , 0x00003ffd // log(1/frcpa(1+105/2^-8)) + +data8 0xb2354249ad950f72 , 0x00003ffd // log(1/frcpa(1+106/2^-8)) +data8 0xb3a056e98ef4a3b4 , 0x00003ffd // log(1/frcpa(1+107/2^-8)) +data8 0xb50c6dba52c6292a , 0x00003ffd // log(1/frcpa(1+108/2^-8)) +data8 0xb679882c33876165 , 0x00003ffd // log(1/frcpa(1+109/2^-8)) +data8 0xb78c07429785cedc , 0x00003ffd // log(1/frcpa(1+110/2^-8)) + +data8 0xb8faeb8dc4a77d24 , 0x00003ffd // log(1/frcpa(1+111/2^-8)) +data8 0xba6ad77eb36ae0d6 , 0x00003ffd // log(1/frcpa(1+112/2^-8)) +data8 0xbbdbcc915e9bee50 , 0x00003ffd // log(1/frcpa(1+113/2^-8)) +data8 0xbd4dcc44f8cf12ef , 0x00003ffd // log(1/frcpa(1+114/2^-8)) +data8 0xbec0d81bf5b531fa , 0x00003ffd // log(1/frcpa(1+115/2^-8)) + +data8 0xc034f19c139186f4 , 0x00003ffd // log(1/frcpa(1+116/2^-8)) +data8 0xc14cb69f7c5e55ab , 0x00003ffd // log(1/frcpa(1+117/2^-8)) +data8 0xc2c2abbb6e5fd56f , 0x00003ffd // log(1/frcpa(1+118/2^-8)) +data8 0xc439b2c193e6771e , 0x00003ffd // log(1/frcpa(1+119/2^-8)) +data8 0xc553acb9d5c67733 , 0x00003ffd // log(1/frcpa(1+120/2^-8)) + +data8 0xc6cc96e441272441 , 0x00003ffd // log(1/frcpa(1+121/2^-8)) +data8 0xc8469753eca88c30 , 0x00003ffd // log(1/frcpa(1+122/2^-8)) +data8 0xc962cf3ce072b05c , 0x00003ffd // log(1/frcpa(1+123/2^-8)) +data8 0xcadeba8771f694aa , 0x00003ffd // log(1/frcpa(1+124/2^-8)) +data8 0xcc5bc08d1f72da94 , 0x00003ffd // log(1/frcpa(1+125/2^-8)) + +data8 0xcd7a3f99ea035c29 , 0x00003ffd // log(1/frcpa(1+126/2^-8)) +data8 0xcef93860c8a53c35 , 0x00003ffd // log(1/frcpa(1+127/2^-8)) +data8 0xd0192f68a7ed23df , 0x00003ffd // log(1/frcpa(1+128/2^-8)) +data8 0xd19a201127d3c645 , 0x00003ffd // log(1/frcpa(1+129/2^-8)) +data8 0xd2bb92f4061c172c , 0x00003ffd // log(1/frcpa(1+130/2^-8)) + +data8 0xd43e80b2ee8cc8fc , 0x00003ffd // log(1/frcpa(1+131/2^-8)) +data8 0xd56173601fc4ade4 , 0x00003ffd // log(1/frcpa(1+132/2^-8)) +data8 0xd6e6637efb54086f , 0x00003ffd // log(1/frcpa(1+133/2^-8)) +data8 0xd80ad9f58f3c8193 , 0x00003ffd // log(1/frcpa(1+134/2^-8)) +data8 0xd991d1d31aca41f8 , 0x00003ffd // log(1/frcpa(1+135/2^-8)) + +data8 0xdab7d02231484a93 , 0x00003ffd // log(1/frcpa(1+136/2^-8)) +data8 0xdc40d532cde49a54 , 0x00003ffd // log(1/frcpa(1+137/2^-8)) +data8 0xdd685f79ed8b265e , 0x00003ffd // log(1/frcpa(1+138/2^-8)) +data8 0xde9094bbc0e17b1d , 0x00003ffd // log(1/frcpa(1+139/2^-8)) +data8 0xe01c91b78440c425 , 0x00003ffd // log(1/frcpa(1+140/2^-8)) + +data8 0xe14658f26997e729 , 0x00003ffd // log(1/frcpa(1+141/2^-8)) +data8 0xe270cdc2391e0d23 , 0x00003ffd // log(1/frcpa(1+142/2^-8)) +data8 0xe3ffce3a2aa64922 , 0x00003ffd // log(1/frcpa(1+143/2^-8)) +data8 0xe52bdb274ed82887 , 0x00003ffd // log(1/frcpa(1+144/2^-8)) +data8 0xe6589852e75d7df6 , 0x00003ffd // log(1/frcpa(1+145/2^-8)) + +data8 0xe786068c79937a7d , 0x00003ffd // log(1/frcpa(1+146/2^-8)) +data8 0xe91903adad100911 , 0x00003ffd // log(1/frcpa(1+147/2^-8)) +data8 0xea481236f7d35bb0 , 0x00003ffd // log(1/frcpa(1+148/2^-8)) +data8 0xeb77d48c692e6b14 , 0x00003ffd // log(1/frcpa(1+149/2^-8)) +data8 0xeca84b83d7297b87 , 0x00003ffd // log(1/frcpa(1+150/2^-8)) + +data8 0xedd977f4962aa158 , 0x00003ffd // log(1/frcpa(1+151/2^-8)) +data8 0xef7179a22f257754 , 0x00003ffd // log(1/frcpa(1+152/2^-8)) +data8 0xf0a450d139366ca7 , 0x00003ffd // log(1/frcpa(1+153/2^-8)) +data8 0xf1d7e0524ff9ffdb , 0x00003ffd // log(1/frcpa(1+154/2^-8)) +data8 0xf30c29036a8b6cae , 0x00003ffd // log(1/frcpa(1+155/2^-8)) + +data8 0xf4412bc411ea8d92 , 0x00003ffd // log(1/frcpa(1+156/2^-8)) +data8 0xf576e97564c8619d , 0x00003ffd // log(1/frcpa(1+157/2^-8)) +data8 0xf6ad62fa1b5f172f , 0x00003ffd // log(1/frcpa(1+158/2^-8)) +data8 0xf7e499368b55c542 , 0x00003ffd // log(1/frcpa(1+159/2^-8)) +data8 0xf91c8d10abaffe22 , 0x00003ffd // log(1/frcpa(1+160/2^-8)) + +data8 0xfa553f7018c966f3 , 0x00003ffd // log(1/frcpa(1+161/2^-8)) +data8 0xfb8eb13e185d802c , 0x00003ffd // log(1/frcpa(1+162/2^-8)) +data8 0xfcc8e3659d9bcbed , 0x00003ffd // log(1/frcpa(1+163/2^-8)) +data8 0xfe03d6d34d487fd2 , 0x00003ffd // log(1/frcpa(1+164/2^-8)) +data8 0xff3f8c7581e9f0ae , 0x00003ffd // log(1/frcpa(1+165/2^-8)) + +data8 0x803e029e280173ae , 0x00003ffe // log(1/frcpa(1+166/2^-8)) +data8 0x80dca10cc52d0757 , 0x00003ffe // log(1/frcpa(1+167/2^-8)) +data8 0x817ba200632755a1 , 0x00003ffe // log(1/frcpa(1+168/2^-8)) +data8 0x821b05f3b01d6774 , 0x00003ffe // log(1/frcpa(1+169/2^-8)) +data8 0x82bacd623ff19d06 , 0x00003ffe // log(1/frcpa(1+170/2^-8)) + +data8 0x835af8c88e7a8f47 , 0x00003ffe // log(1/frcpa(1+171/2^-8)) +data8 0x83c5f8299e2b4091 , 0x00003ffe // log(1/frcpa(1+172/2^-8)) +data8 0x8466cb43f3d87300 , 0x00003ffe // log(1/frcpa(1+173/2^-8)) +data8 0x850803a67c80ca4b , 0x00003ffe // log(1/frcpa(1+174/2^-8)) +data8 0x85a9a1d11a23b461 , 0x00003ffe // log(1/frcpa(1+175/2^-8)) + +data8 0x864ba644a18e6e05 , 0x00003ffe // log(1/frcpa(1+176/2^-8)) +data8 0x86ee1182dcc432f7 , 0x00003ffe // log(1/frcpa(1+177/2^-8)) +data8 0x875a925d7e48c316 , 0x00003ffe // log(1/frcpa(1+178/2^-8)) +data8 0x87fdaa109d23aef7 , 0x00003ffe // log(1/frcpa(1+179/2^-8)) +data8 0x88a129ed4becfaf2 , 0x00003ffe // log(1/frcpa(1+180/2^-8)) + +data8 0x89451278ecd7f9cf , 0x00003ffe // log(1/frcpa(1+181/2^-8)) +data8 0x89b29295f8432617 , 0x00003ffe // log(1/frcpa(1+182/2^-8)) +data8 0x8a572ac5a5496882 , 0x00003ffe // log(1/frcpa(1+183/2^-8)) +data8 0x8afc2d0ce3b2dadf , 0x00003ffe // log(1/frcpa(1+184/2^-8)) +data8 0x8b6a69c608cfd3af , 0x00003ffe // log(1/frcpa(1+185/2^-8)) + +data8 0x8c101e106e899a83 , 0x00003ffe // log(1/frcpa(1+186/2^-8)) +data8 0x8cb63de258f9d626 , 0x00003ffe // log(1/frcpa(1+187/2^-8)) +data8 0x8d2539c5bd19e2b1 , 0x00003ffe // log(1/frcpa(1+188/2^-8)) +data8 0x8dcc0e064b29e6f1 , 0x00003ffe // log(1/frcpa(1+189/2^-8)) +data8 0x8e734f45d88357ae , 0x00003ffe // log(1/frcpa(1+190/2^-8)) + +data8 0x8ee30cef034a20db , 0x00003ffe // log(1/frcpa(1+191/2^-8)) +data8 0x8f8b0515686d1d06 , 0x00003ffe // log(1/frcpa(1+192/2^-8)) +data8 0x90336bba039bf32f , 0x00003ffe // log(1/frcpa(1+193/2^-8)) +data8 0x90a3edd23d1c9d58 , 0x00003ffe // log(1/frcpa(1+194/2^-8)) +data8 0x914d0de2f5d61b32 , 0x00003ffe // log(1/frcpa(1+195/2^-8)) + +data8 0x91be0c20d28173b5 , 0x00003ffe // log(1/frcpa(1+196/2^-8)) +data8 0x9267e737c06cd34a , 0x00003ffe // log(1/frcpa(1+197/2^-8)) +data8 0x92d962ae6abb1237 , 0x00003ffe // log(1/frcpa(1+198/2^-8)) +data8 0x9383fa6afbe2074c , 0x00003ffe // log(1/frcpa(1+199/2^-8)) +data8 0x942f0421651c1c4e , 0x00003ffe // log(1/frcpa(1+200/2^-8)) + +data8 0x94a14a3845bb985e , 0x00003ffe // log(1/frcpa(1+201/2^-8)) +data8 0x954d133857f861e7 , 0x00003ffe // log(1/frcpa(1+202/2^-8)) +data8 0x95bfd96468e604c4 , 0x00003ffe // log(1/frcpa(1+203/2^-8)) +data8 0x9632d31cafafa858 , 0x00003ffe // log(1/frcpa(1+204/2^-8)) +data8 0x96dfaabd86fa1647 , 0x00003ffe // log(1/frcpa(1+205/2^-8)) + +data8 0x9753261fcbb2a594 , 0x00003ffe // log(1/frcpa(1+206/2^-8)) +data8 0x9800c11b426b996d , 0x00003ffe // log(1/frcpa(1+207/2^-8)) +data8 0x9874bf4d45ae663c , 0x00003ffe // log(1/frcpa(1+208/2^-8)) +data8 0x99231f5ee9a74f79 , 0x00003ffe // log(1/frcpa(1+209/2^-8)) +data8 0x9997a18a56bcad28 , 0x00003ffe // log(1/frcpa(1+210/2^-8)) + +data8 0x9a46c873a3267e79 , 0x00003ffe // log(1/frcpa(1+211/2^-8)) +data8 0x9abbcfc621eb6cb6 , 0x00003ffe // log(1/frcpa(1+212/2^-8)) +data8 0x9b310cb0d354c990 , 0x00003ffe // log(1/frcpa(1+213/2^-8)) +data8 0x9be14cf9e1b3515c , 0x00003ffe // log(1/frcpa(1+214/2^-8)) +data8 0x9c5710b8cbb73a43 , 0x00003ffe // log(1/frcpa(1+215/2^-8)) + +data8 0x9ccd0abd301f399c , 0x00003ffe // log(1/frcpa(1+216/2^-8)) +data8 0x9d7e67f3bdce8888 , 0x00003ffe // log(1/frcpa(1+217/2^-8)) +data8 0x9df4ea81a99daa01 , 0x00003ffe // log(1/frcpa(1+218/2^-8)) +data8 0x9e6ba405a54514ba , 0x00003ffe // log(1/frcpa(1+219/2^-8)) +data8 0x9f1e21c8c7bb62b3 , 0x00003ffe // log(1/frcpa(1+220/2^-8)) + +data8 0x9f956593f6b6355c , 0x00003ffe // log(1/frcpa(1+221/2^-8)) +data8 0xa00ce1092e5498c3 , 0x00003ffe // log(1/frcpa(1+222/2^-8)) +data8 0xa0c08309c4b912c1 , 0x00003ffe // log(1/frcpa(1+223/2^-8)) +data8 0xa1388a8c6faa2afa , 0x00003ffe // log(1/frcpa(1+224/2^-8)) +data8 0xa1b0ca7095b5f985 , 0x00003ffe // log(1/frcpa(1+225/2^-8)) + +data8 0xa22942eb47534a00 , 0x00003ffe // log(1/frcpa(1+226/2^-8)) +data8 0xa2de62326449d0a3 , 0x00003ffe // log(1/frcpa(1+227/2^-8)) +data8 0xa357690f88bfe345 , 0x00003ffe // log(1/frcpa(1+228/2^-8)) +data8 0xa3d0a93f45169a4b , 0x00003ffe // log(1/frcpa(1+229/2^-8)) +data8 0xa44a22f7ffe65f30 , 0x00003ffe // log(1/frcpa(1+230/2^-8)) + +data8 0xa500c5e5b4c1aa36 , 0x00003ffe // log(1/frcpa(1+231/2^-8)) +data8 0xa57ad064eb2ebbc2 , 0x00003ffe // log(1/frcpa(1+232/2^-8)) +data8 0xa5f5152dedf4384e , 0x00003ffe // log(1/frcpa(1+233/2^-8)) +data8 0xa66f9478856233ec , 0x00003ffe // log(1/frcpa(1+234/2^-8)) +data8 0xa6ea4e7cca02c32e , 0x00003ffe // log(1/frcpa(1+235/2^-8)) + +data8 0xa765437325341ccf , 0x00003ffe // log(1/frcpa(1+236/2^-8)) +data8 0xa81e21e6c75b4020 , 0x00003ffe // log(1/frcpa(1+237/2^-8)) +data8 0xa899ab333fe2b9ca , 0x00003ffe // log(1/frcpa(1+238/2^-8)) +data8 0xa9157039c51ebe71 , 0x00003ffe // log(1/frcpa(1+239/2^-8)) +data8 0xa991713433c2b999 , 0x00003ffe // log(1/frcpa(1+240/2^-8)) + +data8 0xaa0dae5cbcc048b3 , 0x00003ffe // log(1/frcpa(1+241/2^-8)) +data8 0xaa8a27ede5eb13ad , 0x00003ffe // log(1/frcpa(1+242/2^-8)) +data8 0xab06de228a9e3499 , 0x00003ffe // log(1/frcpa(1+243/2^-8)) +data8 0xab83d135dc633301 , 0x00003ffe // log(1/frcpa(1+244/2^-8)) +data8 0xac3fb076adc7fe7a , 0x00003ffe // log(1/frcpa(1+245/2^-8)) + +data8 0xacbd3cbbe47988f1 , 0x00003ffe // log(1/frcpa(1+246/2^-8)) +data8 0xad3b06b1a5dc57c3 , 0x00003ffe // log(1/frcpa(1+247/2^-8)) +data8 0xadb90e94af887717 , 0x00003ffe // log(1/frcpa(1+248/2^-8)) +data8 0xae3754a218f7c816 , 0x00003ffe // log(1/frcpa(1+249/2^-8)) +data8 0xaeb5d9175437afa2 , 0x00003ffe // log(1/frcpa(1+250/2^-8)) + +data8 0xaf349c322e9c7cee , 0x00003ffe // log(1/frcpa(1+251/2^-8)) +data8 0xafb39e30d1768d1c , 0x00003ffe // log(1/frcpa(1+252/2^-8)) +data8 0xb032df51c2c93116 , 0x00003ffe // log(1/frcpa(1+253/2^-8)) +data8 0xb0b25fd3e6035ad9 , 0x00003ffe // log(1/frcpa(1+254/2^-8)) +data8 0xb1321ff67cba178c , 0x00003ffe // log(1/frcpa(1+255/2^-8)) +ASM_SIZE_DIRECTIVE(log_table_2) + + +.align 32 +.global log# +.global log10# + +// log10 has p7 true, p8 false +// log has p8 true, p7 false + +.section .text +.proc log10# +.align 32 + +log10: +#ifdef _LIBC +.global __ieee754_log10 +.type __ieee754_log10,@function +__ieee754_log10: +#endif +{ .mfi + alloc r32=ar.pfs,1,15,4,0 + frcpa.s1 log_C,p9 = f1,f8 + cmp.eq.unc p7,p8 = r0, r0 +} +{ .mfb + addl log_AD_1 = @ltoff(log_table_1), gp + fnorm.s1 log_NORM_f8 = f8 + br.sptk L(LOG_LOG10_X) +} +;; + +.endp log10 +ASM_SIZE_DIRECTIVE(log10) +ASM_SIZE_DIRECTIVE(__ieee754_log10) + + +.section .text +.proc log# +.align 32 +log: +#ifdef _LIBC +.global __ieee754_log +.type __ieee754_log,@function +__ieee754_log: +#endif + +{ .mfi + alloc r32=ar.pfs,1,15,4,0 + frcpa.s1 log_C,p9 = f1,f8 + cmp.eq.unc p8,p7 = r0, r0 +} +{ .mfi + addl log_AD_1 = @ltoff(log_table_1), gp + fnorm.s1 log_NORM_f8 = f8 + nop.i 999 +} +;; + +L(LOG_LOG10_X): + +{ .mfi + ld8 log_AD_1 = [log_AD_1] + fclass.m.unc p15,p0 = f8, 0x0b // Test for x=unorm + mov log_GR_fff9 = 0xfff9 +} +{ .mfi + mov log_GR_half_exp = 0x0fffe + fms.s1 log_w = f8,f1,f1 + mov log_GR_exp_17_ones = 0x1ffff +} +;; + +{ .mmi + getf.exp log_GR_signexp_f8 = f8 // If x unorm then must recompute + setf.exp log_half = log_GR_half_exp // Form 0.5 = -Q1 + nop.i 999 +} +;; + +{ .mmb + adds log_AD_2 = 0x30, log_AD_1 + mov log_GR_exp_16_ones = 0xffff +(p15) br.cond.spnt L(LOG_DENORM) +} +;; + +L(LOG_COMMON): +{.mfi + ldfpd log_P5,log_P4 = [log_AD_1],16 + fclass.m.unc p6,p0 = f8, 0xc3 // Test for x=nan + and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones +} +{.mfi + ldfpd log_P3,log_P2 = [log_AD_2],16 + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + ldfpd log_Q8,log_Q7 = [log_AD_1],16 + fclass.m.unc p11,p0 = f8, 0x21 // Test for x=+inf + sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones +} +{ .mfi + ldfpd log_Q6,log_Q5 = [log_AD_2],16 + nop.f 999 + nop.i 999 +} +;; + + +{ .mfi + ldfpd log_Q4,log_Q3 = [log_AD_1],16 + fma.s1 log_wsq = log_w, log_w, f0 + nop.i 999 +} +{ .mfb + ldfpd log_Q2,log_Q1 = [log_AD_2],16 +(p6) fma.d.s0 f8 = f8,f1,f0 // quietize nan result if x=nan +(p6) br.ret.spnt b0 // Exit for x=nan +} +;; + + +{ .mfi + setf.sig log_int_Nfloat = log_GR_true_exp_f8 + fcmp.eq.s1 p10,p0 = log_NORM_f8, f1 // Test for x=+1.0 + nop.i 999 +} +{ .mfb + nop.m 999 + fms.s1 log_r = log_C,f8,f1 +(p11) br.ret.spnt b0 // Exit for x=+inf +} +;; + + +{ .mmf + getf.sig log_GR_significand_f8 = log_NORM_f8 + ldfe log_inv_ln10 = [log_AD_2],16 + fclass.m.unc p6,p0 = f8, 0x07 // Test for x=0 +} +;; + + +{ .mfb + nop.m 999 +(p10) fmerge.s f8 = f0, f0 +(p10) br.ret.spnt b0 // Exit for x=1.0 +;; +} + +{ .mfi + getf.exp log_GR_signexp_w = log_w + fclass.m.unc p12,p0 = f8, 0x3a // Test for x neg norm, unorm, inf + shl log_GR_index = log_GR_significand_f8,1 +} +;; + +{ .mfi + ldfe log_log2 = [log_AD_2],16 + fnma.s1 log_rp_q10 = log_half, log_wsq, log_w + shr.u log_GR_index = log_GR_index,56 +} +{ .mfb + nop.m 999 + fma.s1 log_w3 = log_wsq, log_w, f0 +(p6) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x=0 +;; +} + + +{ .mfi + and log_GR_exp_w = log_GR_exp_17_ones, log_GR_signexp_w + fma.s1 log_w4 = log_wsq, log_wsq, f0 + nop.i 999 +} +{ .mfb + shladd log_AD_2 = log_GR_index,4,log_AD_2 + fma.s1 log_rsq = log_r, log_r, f0 +(p12) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x<0 +;; +} + +{ .mfi + ldfe log_T = [log_AD_2] + fma.s1 log_rp_p4 = log_P5, log_r, log_P4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_p32 = log_P3, log_r, log_P2 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 log_rp_q7 = log_Q8, log_w, log_Q7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_q65 = log_Q6, log_w, log_Q5 + nop.i 999 +;; +} + +// p13 <== large w log +// p14 <== small w log +{ .mfi +(p8) cmp.ge.unc p13,p14 = log_GR_exp_w, log_GR_fff9 + fma.s1 log_rp_q3 = log_Q4, log_w, log_Q3 + nop.i 999 +;; +} + +// p10 <== large w log10 +// p11 <== small w log10 +{ .mfi +(p7) cmp.ge.unc p10,p11 = log_GR_exp_w, log_GR_fff9 + fcvt.xf log_Nfloat = log_int_Nfloat + nop.i 999 +} + +{ .mfi + nop.m 999 + fma.s1 log_rp_q21 = log_Q2, log_w3, log_rp_q10 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 log_rcube = log_rsq, log_r, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_p10 = log_rsq, log_P1, log_r + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p6,p0 = f8,f0 // Sets flag on +denormal input + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_p2 = log_rp_p4, log_rsq, log_rp_p32 + nop.i 999 +;; +} + + +{ .mfi + nop.m 999 + fma.s1 log_w6 = log_w3, log_w3, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_Qlo = log_rp_q7, log_wsq, log_rp_q65 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 log_Qhi = log_rp_q3, log_w4, log_rp_q21 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 log_T_plus_Nlog2 = log_Nfloat,log_log2, log_T + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 log_r2P_r = log_rp_p2, log_rcube, log_rp_p10 + nop.i 999 ;; +} + + +// small w, log <== p14 +{ .mfi + nop.m 999 +(p14) fma.d f8 = log_Qlo, log_w6, log_Qhi + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_Q = log_Qlo, log_w6, log_Qhi + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p10) fma.s1 log_log10_hi = log_T_plus_Nlog2, log_inv_ln10,f0 + nop.i 999 ;; +} + +// large w, log <== p13 +.pred.rel "mutex",p13,p10 +{ .mfi + nop.m 999 +(p13) fadd.d f8 = log_T_plus_Nlog2, log_r2P_r + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s1 log_log10_lo = log_inv_ln10, log_r2P_r,f0 + nop.i 999 ;; +} + + +// small w, log10 <== p11 +{ .mfi + nop.m 999 +(p11) fma.d f8 = log_inv_ln10,log_Q,f0 + nop.i 999 ;; +} + +// large w, log10 <== p10 +{ .mfb + nop.m 999 +(p10) fma.d f8 = log_log10_hi, f1, log_log10_lo + br.ret.sptk b0 +;; +} + +L(LOG_DENORM): +{ .mfb + getf.exp log_GR_signexp_f8 = log_NORM_f8 + nop.f 999 + br.cond.sptk L(LOG_COMMON) +} +;; + +L(LOG_ZERO_NEG): + +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 0 1 11 0x7 +// 0 0 1 1 1 0 10 0x3a + +// Save x (f8) in f10 +{ .mfi + nop.m 999 + fmerge.s f10 = f8,f8 + nop.i 999 ;; +} + +// p8 p9 means ln(+-0) = -inf +// p7 p10 means log(+-0) = -inf + +// p13 means ln(-) +// p14 means log(-) + + +{ .mfi + nop.m 999 + fmerge.ns f6 = f1,f1 // Form -1.0 + nop.i 999 ;; +} + +// p9 means ln(+-0) = -inf +// p10 means log(+-0) = -inf +// Log(+-0) = -inf + +{ .mfi + nop.m 999 +(p8) fclass.m.unc p9,p0 = f10, 0x07 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p10,p0 = f10, 0x07 + nop.i 999 ;; +} + + +// p13 ln(-) +// p14 log(-) + +// Log(-inf, -normal, -unnormal) = QNAN indefinite +{ .mfi + nop.m 999 +(p8) fclass.m.unc p13,p0 = f10, 0x3a + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p14,p0 = f10, 0x3a + nop.i 999 ;; +} + + +.pred.rel "mutex",p9,p10 +{ .mfi +(p9) mov log_GR_tag = 2 +(p9) frcpa f8,p11 = f6,f0 + nop.i 999 +} +{ .mfi +(p10) mov log_GR_tag = 8 +(p10) frcpa f8,p12 = f6,f0 + nop.i 999 ;; +} + +.pred.rel "mutex",p13,p14 +{ .mfi +(p13) mov log_GR_tag = 3 +(p13) frcpa f8,p11 = f0,f0 + nop.i 999 +} +{ .mfb +(p14) mov log_GR_tag = 9 +(p14) frcpa f8,p12 = f0,f0 + br.cond.sptk __libm_error_region ;; +} +.endp log +ASM_SIZE_DIRECTIVE(log) +ASM_SIZE_DIRECTIVE(__ieee754_log) + + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + + +.proc __libm_error_region +__libm_error_region: +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = f10 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; + +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_log10.c glibc-2.2.3/sysdeps/ia64/fpu/e_log10.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_log10.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_log10.c Mon Feb 19 00:44:38 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_log10f.c glibc-2.2.3/sysdeps/ia64/fpu/e_log10f.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_log10f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_log10f.c Mon Feb 19 00:44:49 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_log10l.c glibc-2.2.3/sysdeps/ia64/fpu/e_log10l.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_log10l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_log10l.c Mon Feb 19 00:44:56 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_logf.S glibc-2.2.3/sysdeps/ia64/fpu/e_logf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_logf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_logf.S Mon Feb 19 00:45:08 2001 @@ -0,0 +1,946 @@ +.file "logf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 3/01/00 Initial version +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 1/10/01 Improved speed, fixed flags for neg denormals +// +// +// API +//============================================================== +// float logf(float) +// float log10f(float) +// +// Overview of operation +//============================================================== +// Background +// +// Consider x = 2^N 1.f1 f2 f3 f4...f63 +// Log(x) = log(frcpa(x) x/frcpa(x)) +// = log(1/frcpa(x)) + log(frcpa(x) x) +// = -log(frcpa(x)) + log(frcpa(x) x) +// +// frcpa(x) = 2^-N frcpa((1.f1 f2 ... f63) +// +// -log(frcpa(x)) = -log(C) +// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) +// +// -log(frcpa(x)) = -log(C) +// = +Nlog2 - log(frcpa(1.f1 f2 ... f63)) +// +// -log(frcpa(x)) = -log(C) +// = +Nlog2 + log(frcpa(1.f1 f2 ... f63)) +// +// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) + +// Log(x) = +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) +// Log(x) = +Nlog2 - log(/frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) +// Log(x) = +Nlog2 + T + log(frcpa(x) x) +// +// Log(x) = +Nlog2 + T + log(C x) +// +// Cx = 1 + r +// +// Log(x) = +Nlog2 + T + log(1+r) +// Log(x) = +Nlog2 + T + Series( r - r^2/2 + r^3/3 - r^4/4 ....) +// +// 1.f1 f2 ... f8 has 256 entries. +// They are 1 + k/2^8, k = 0 ... 255 +// These 256 values are the table entries. +// +// Implementation +//=============== +// CASE 1: |x-1| >= 2^-8 +// C = frcpa(x) +// r = C * x - 1 +// +// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 +// +// x = f * 2*n where f is 1.f_1f_2f_3....f_63 +// Nfloat = float(n) where n is the true unbiased exponent +// pre-index = f_1f_2....f_8 +// index = pre_index * 16 +// get the dxt table entry at index + offset = T +// +// result = (T + Nfloat * log(2)) + rseries +// +// The T table is calculated as follows +// Form x_k = 1 + k/2^8 where k goes from 0... 255 +// y_k = frcpa(x_k) +// log(1/y_k) in quad and round to double + +// CASE 2: |x-1| < 2^-6 +// w = x - 1 +// +// Form wseries = w + Q1*w^2 + Q2*w^3 + Q3*w^4 +// +// result = wseries + +// Special values +//============================================================== + + +// log(+0) = -inf +// log(-0) = -inf + +// log(+qnan) = +qnan +// log(-qnan) = -qnan +// log(+snan) = +qnan +// log(-snan) = -qnan + +// log(-n) = QNAN Indefinite +// log(-inf) = QNAN Indefinite + +// log(+inf) = +inf + +// Registers used +//============================================================== +// Floating Point registers used: +// f8, input +// f9 -> f15, f32 -> f47 + +// General registers used: +// r32 -> r51 + +// Predicate registers used: +// p6 -> p15 + +// p8 log base e +// p6 log base e special +// p9 used in the frcpa +// p13 log base e large W +// p14 log base e small w + +// p7 log base 10 +// p10 log base 10 large W +// p11 log base 10 small w +// p12 log base 10 special + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +log_int_Nfloat = f9 +log_Nfloat = f10 + +log_P3 = f11 +log_P2 = f12 +log_P1 = f13 +log_inv_ln10 = f14 +log_log2 = f15 + +log_w = f32 +log_T = f33 +log_rp_p32 = f34 +log_rp_p2 = f35 +log_rp_p10 = f36 +log_rsq = f37 +log_T_plus_Nlog2 = f38 +log_r = f39 +log_C = f40 +log_rp_q32 = f41 +log_rp_q2 = f42 +log_rp_q10 = f43 +log_wsq = f44 +log_Q = f45 +log_inv_ln10 = f46 +log_NORM_f8 = f47 + +// =================================== + +log_GR_exp_17_ones = r33 +log_GR_exp_16_ones = r34 +log_GR_exp_f8 = r35 +log_GR_signexp_f8 = r36 +log_GR_true_exp_f8 = r37 +log_GR_significand_f8 = r38 +log_GR_index = r39 +log_AD_1 = r40 +log_GR_signexp_w = r41 +log_GR_fff7 = r42 +log_AD_2 = r43 +log_GR_exp_w = r44 + +GR_SAVE_B0 = r45 +GR_SAVE_GP = r46 +GR_SAVE_PFS = r47 + +GR_Parameter_X = r48 +GR_Parameter_Y = r49 +GR_Parameter_RESULT = r50 +log_GR_tag = r51 + + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +log_table_1: +ASM_TYPE_DIRECTIVE(log_table_1,@object) +data8 0xbfd0001008f39d59 // p3 +data8 0x3fd5556073e0c45a // p2 +ASM_SIZE_DIRECTIVE(log_table_1) + +log_table_2: +ASM_TYPE_DIRECTIVE(log_table_2,@object) +data8 0xbfdffffffffaea15 // p1 +data8 0x3fdbcb7b1526e50e // 1/ln10 +data8 0x3fe62e42fefa39ef // Log(2) +data8 0x0 // pad + +data8 0x3F60040155D5889E //log(1/frcpa(1+ 0/256) +data8 0x3F78121214586B54 //log(1/frcpa(1+ 1/256) +data8 0x3F841929F96832F0 //log(1/frcpa(1+ 2/256) +data8 0x3F8C317384C75F06 //log(1/frcpa(1+ 3/256) +data8 0x3F91A6B91AC73386 //log(1/frcpa(1+ 4/256) +data8 0x3F95BA9A5D9AC039 //log(1/frcpa(1+ 5/256) +data8 0x3F99D2A8074325F4 //log(1/frcpa(1+ 6/256) +data8 0x3F9D6B2725979802 //log(1/frcpa(1+ 7/256) +data8 0x3FA0C58FA19DFAAA //log(1/frcpa(1+ 8/256) +data8 0x3FA2954C78CBCE1B //log(1/frcpa(1+ 9/256) +data8 0x3FA4A94D2DA96C56 //log(1/frcpa(1+ 10/256) +data8 0x3FA67C94F2D4BB58 //log(1/frcpa(1+ 11/256) +data8 0x3FA85188B630F068 //log(1/frcpa(1+ 12/256) +data8 0x3FAA6B8ABE73AF4C //log(1/frcpa(1+ 13/256) +data8 0x3FAC441E06F72A9E //log(1/frcpa(1+ 14/256) +data8 0x3FAE1E6713606D07 //log(1/frcpa(1+ 15/256) +data8 0x3FAFFA6911AB9301 //log(1/frcpa(1+ 16/256) +data8 0x3FB0EC139C5DA601 //log(1/frcpa(1+ 17/256) +data8 0x3FB1DBD2643D190B //log(1/frcpa(1+ 18/256) +data8 0x3FB2CC7284FE5F1C //log(1/frcpa(1+ 19/256) +data8 0x3FB3BDF5A7D1EE64 //log(1/frcpa(1+ 20/256) +data8 0x3FB4B05D7AA012E0 //log(1/frcpa(1+ 21/256) +data8 0x3FB580DB7CEB5702 //log(1/frcpa(1+ 22/256) +data8 0x3FB674F089365A7A //log(1/frcpa(1+ 23/256) +data8 0x3FB769EF2C6B568D //log(1/frcpa(1+ 24/256) +data8 0x3FB85FD927506A48 //log(1/frcpa(1+ 25/256) +data8 0x3FB9335E5D594989 //log(1/frcpa(1+ 26/256) +data8 0x3FBA2B0220C8E5F5 //log(1/frcpa(1+ 27/256) +data8 0x3FBB0004AC1A86AC //log(1/frcpa(1+ 28/256) +data8 0x3FBBF968769FCA11 //log(1/frcpa(1+ 29/256) +data8 0x3FBCCFEDBFEE13A8 //log(1/frcpa(1+ 30/256) +data8 0x3FBDA727638446A2 //log(1/frcpa(1+ 31/256) +data8 0x3FBEA3257FE10F7A //log(1/frcpa(1+ 32/256) +data8 0x3FBF7BE9FEDBFDE6 //log(1/frcpa(1+ 33/256) +data8 0x3FC02AB352FF25F4 //log(1/frcpa(1+ 34/256) +data8 0x3FC097CE579D204D //log(1/frcpa(1+ 35/256) +data8 0x3FC1178E8227E47C //log(1/frcpa(1+ 36/256) +data8 0x3FC185747DBECF34 //log(1/frcpa(1+ 37/256) +data8 0x3FC1F3B925F25D41 //log(1/frcpa(1+ 38/256) +data8 0x3FC2625D1E6DDF57 //log(1/frcpa(1+ 39/256) +data8 0x3FC2D1610C86813A //log(1/frcpa(1+ 40/256) +data8 0x3FC340C59741142E //log(1/frcpa(1+ 41/256) +data8 0x3FC3B08B6757F2A9 //log(1/frcpa(1+ 42/256) +data8 0x3FC40DFB08378003 //log(1/frcpa(1+ 43/256) +data8 0x3FC47E74E8CA5F7C //log(1/frcpa(1+ 44/256) +data8 0x3FC4EF51F6466DE4 //log(1/frcpa(1+ 45/256) +data8 0x3FC56092E02BA516 //log(1/frcpa(1+ 46/256) +data8 0x3FC5D23857CD74D5 //log(1/frcpa(1+ 47/256) +data8 0x3FC6313A37335D76 //log(1/frcpa(1+ 48/256) +data8 0x3FC6A399DABBD383 //log(1/frcpa(1+ 49/256) +data8 0x3FC70337DD3CE41B //log(1/frcpa(1+ 50/256) +data8 0x3FC77654128F6127 //log(1/frcpa(1+ 51/256) +data8 0x3FC7E9D82A0B022D //log(1/frcpa(1+ 52/256) +data8 0x3FC84A6B759F512F //log(1/frcpa(1+ 53/256) +data8 0x3FC8AB47D5F5A310 //log(1/frcpa(1+ 54/256) +data8 0x3FC91FE49096581B //log(1/frcpa(1+ 55/256) +data8 0x3FC981634011AA75 //log(1/frcpa(1+ 56/256) +data8 0x3FC9F6C407089664 //log(1/frcpa(1+ 57/256) +data8 0x3FCA58E729348F43 //log(1/frcpa(1+ 58/256) +data8 0x3FCABB55C31693AD //log(1/frcpa(1+ 59/256) +data8 0x3FCB1E104919EFD0 //log(1/frcpa(1+ 60/256) +data8 0x3FCB94EE93E367CB //log(1/frcpa(1+ 61/256) +data8 0x3FCBF851C067555F //log(1/frcpa(1+ 62/256) +data8 0x3FCC5C0254BF23A6 //log(1/frcpa(1+ 63/256) +data8 0x3FCCC000C9DB3C52 //log(1/frcpa(1+ 64/256) +data8 0x3FCD244D99C85674 //log(1/frcpa(1+ 65/256) +data8 0x3FCD88E93FB2F450 //log(1/frcpa(1+ 66/256) +data8 0x3FCDEDD437EAEF01 //log(1/frcpa(1+ 67/256) +data8 0x3FCE530EFFE71012 //log(1/frcpa(1+ 68/256) +data8 0x3FCEB89A1648B971 //log(1/frcpa(1+ 69/256) +data8 0x3FCF1E75FADF9BDE //log(1/frcpa(1+ 70/256) +data8 0x3FCF84A32EAD7C35 //log(1/frcpa(1+ 71/256) +data8 0x3FCFEB2233EA07CD //log(1/frcpa(1+ 72/256) +data8 0x3FD028F9C7035C1C //log(1/frcpa(1+ 73/256) +data8 0x3FD05C8BE0D9635A //log(1/frcpa(1+ 74/256) +data8 0x3FD085EB8F8AE797 //log(1/frcpa(1+ 75/256) +data8 0x3FD0B9C8E32D1911 //log(1/frcpa(1+ 76/256) +data8 0x3FD0EDD060B78081 //log(1/frcpa(1+ 77/256) +data8 0x3FD122024CF0063F //log(1/frcpa(1+ 78/256) +data8 0x3FD14BE2927AECD4 //log(1/frcpa(1+ 79/256) +data8 0x3FD180618EF18ADF //log(1/frcpa(1+ 80/256) +data8 0x3FD1B50BBE2FC63B //log(1/frcpa(1+ 81/256) +data8 0x3FD1DF4CC7CF242D //log(1/frcpa(1+ 82/256) +data8 0x3FD214456D0EB8D4 //log(1/frcpa(1+ 83/256) +data8 0x3FD23EC5991EBA49 //log(1/frcpa(1+ 84/256) +data8 0x3FD2740D9F870AFB //log(1/frcpa(1+ 85/256) +data8 0x3FD29ECDABCDFA04 //log(1/frcpa(1+ 86/256) +data8 0x3FD2D46602ADCCEE //log(1/frcpa(1+ 87/256) +data8 0x3FD2FF66B04EA9D4 //log(1/frcpa(1+ 88/256) +data8 0x3FD335504B355A37 //log(1/frcpa(1+ 89/256) +data8 0x3FD360925EC44F5D //log(1/frcpa(1+ 90/256) +data8 0x3FD38BF1C3337E75 //log(1/frcpa(1+ 91/256) +data8 0x3FD3C25277333184 //log(1/frcpa(1+ 92/256) +data8 0x3FD3EDF463C1683E //log(1/frcpa(1+ 93/256) +data8 0x3FD419B423D5E8C7 //log(1/frcpa(1+ 94/256) +data8 0x3FD44591E0539F49 //log(1/frcpa(1+ 95/256) +data8 0x3FD47C9175B6F0AD //log(1/frcpa(1+ 96/256) +data8 0x3FD4A8B341552B09 //log(1/frcpa(1+ 97/256) +data8 0x3FD4D4F3908901A0 //log(1/frcpa(1+ 98/256) +data8 0x3FD501528DA1F968 //log(1/frcpa(1+ 99/256) +data8 0x3FD52DD06347D4F6 //log(1/frcpa(1+ 100/256) +data8 0x3FD55A6D3C7B8A8A //log(1/frcpa(1+ 101/256) +data8 0x3FD5925D2B112A59 //log(1/frcpa(1+ 102/256) +data8 0x3FD5BF406B543DB2 //log(1/frcpa(1+ 103/256) +data8 0x3FD5EC433D5C35AE //log(1/frcpa(1+ 104/256) +data8 0x3FD61965CDB02C1F //log(1/frcpa(1+ 105/256) +data8 0x3FD646A84935B2A2 //log(1/frcpa(1+ 106/256) +data8 0x3FD6740ADD31DE94 //log(1/frcpa(1+ 107/256) +data8 0x3FD6A18DB74A58C5 //log(1/frcpa(1+ 108/256) +data8 0x3FD6CF31058670EC //log(1/frcpa(1+ 109/256) +data8 0x3FD6F180E852F0BA //log(1/frcpa(1+ 110/256) +data8 0x3FD71F5D71B894F0 //log(1/frcpa(1+ 111/256) +data8 0x3FD74D5AEFD66D5C //log(1/frcpa(1+ 112/256) +data8 0x3FD77B79922BD37E //log(1/frcpa(1+ 113/256) +data8 0x3FD7A9B9889F19E2 //log(1/frcpa(1+ 114/256) +data8 0x3FD7D81B037EB6A6 //log(1/frcpa(1+ 115/256) +data8 0x3FD8069E33827231 //log(1/frcpa(1+ 116/256) +data8 0x3FD82996D3EF8BCB //log(1/frcpa(1+ 117/256) +data8 0x3FD85855776DCBFB //log(1/frcpa(1+ 118/256) +data8 0x3FD8873658327CCF //log(1/frcpa(1+ 119/256) +data8 0x3FD8AA75973AB8CF //log(1/frcpa(1+ 120/256) +data8 0x3FD8D992DC8824E5 //log(1/frcpa(1+ 121/256) +data8 0x3FD908D2EA7D9512 //log(1/frcpa(1+ 122/256) +data8 0x3FD92C59E79C0E56 //log(1/frcpa(1+ 123/256) +data8 0x3FD95BD750EE3ED3 //log(1/frcpa(1+ 124/256) +data8 0x3FD98B7811A3EE5B //log(1/frcpa(1+ 125/256) +data8 0x3FD9AF47F33D406C //log(1/frcpa(1+ 126/256) +data8 0x3FD9DF270C1914A8 //log(1/frcpa(1+ 127/256) +data8 0x3FDA0325ED14FDA4 //log(1/frcpa(1+ 128/256) +data8 0x3FDA33440224FA79 //log(1/frcpa(1+ 129/256) +data8 0x3FDA57725E80C383 //log(1/frcpa(1+ 130/256) +data8 0x3FDA87D0165DD199 //log(1/frcpa(1+ 131/256) +data8 0x3FDAAC2E6C03F896 //log(1/frcpa(1+ 132/256) +data8 0x3FDADCCC6FDF6A81 //log(1/frcpa(1+ 133/256) +data8 0x3FDB015B3EB1E790 //log(1/frcpa(1+ 134/256) +data8 0x3FDB323A3A635948 //log(1/frcpa(1+ 135/256) +data8 0x3FDB56FA04462909 //log(1/frcpa(1+ 136/256) +data8 0x3FDB881AA659BC93 //log(1/frcpa(1+ 137/256) +data8 0x3FDBAD0BEF3DB165 //log(1/frcpa(1+ 138/256) +data8 0x3FDBD21297781C2F //log(1/frcpa(1+ 139/256) +data8 0x3FDC039236F08819 //log(1/frcpa(1+ 140/256) +data8 0x3FDC28CB1E4D32FD //log(1/frcpa(1+ 141/256) +data8 0x3FDC4E19B84723C2 //log(1/frcpa(1+ 142/256) +data8 0x3FDC7FF9C74554C9 //log(1/frcpa(1+ 143/256) +data8 0x3FDCA57B64E9DB05 //log(1/frcpa(1+ 144/256) +data8 0x3FDCCB130A5CEBB0 //log(1/frcpa(1+ 145/256) +data8 0x3FDCF0C0D18F326F //log(1/frcpa(1+ 146/256) +data8 0x3FDD232075B5A201 //log(1/frcpa(1+ 147/256) +data8 0x3FDD490246DEFA6B //log(1/frcpa(1+ 148/256) +data8 0x3FDD6EFA918D25CD //log(1/frcpa(1+ 149/256) +data8 0x3FDD9509707AE52F //log(1/frcpa(1+ 150/256) +data8 0x3FDDBB2EFE92C554 //log(1/frcpa(1+ 151/256) +data8 0x3FDDEE2F3445E4AF //log(1/frcpa(1+ 152/256) +data8 0x3FDE148A1A2726CE //log(1/frcpa(1+ 153/256) +data8 0x3FDE3AFC0A49FF40 //log(1/frcpa(1+ 154/256) +data8 0x3FDE6185206D516E //log(1/frcpa(1+ 155/256) +data8 0x3FDE882578823D52 //log(1/frcpa(1+ 156/256) +data8 0x3FDEAEDD2EAC990C //log(1/frcpa(1+ 157/256) +data8 0x3FDED5AC5F436BE3 //log(1/frcpa(1+ 158/256) +data8 0x3FDEFC9326D16AB9 //log(1/frcpa(1+ 159/256) +data8 0x3FDF2391A2157600 //log(1/frcpa(1+ 160/256) +data8 0x3FDF4AA7EE03192D //log(1/frcpa(1+ 161/256) +data8 0x3FDF71D627C30BB0 //log(1/frcpa(1+ 162/256) +data8 0x3FDF991C6CB3B379 //log(1/frcpa(1+ 163/256) +data8 0x3FDFC07ADA69A910 //log(1/frcpa(1+ 164/256) +data8 0x3FDFE7F18EB03D3E //log(1/frcpa(1+ 165/256) +data8 0x3FE007C053C5002E //log(1/frcpa(1+ 166/256) +data8 0x3FE01B942198A5A1 //log(1/frcpa(1+ 167/256) +data8 0x3FE02F74400C64EB //log(1/frcpa(1+ 168/256) +data8 0x3FE04360BE7603AD //log(1/frcpa(1+ 169/256) +data8 0x3FE05759AC47FE34 //log(1/frcpa(1+ 170/256) +data8 0x3FE06B5F1911CF52 //log(1/frcpa(1+ 171/256) +data8 0x3FE078BF0533C568 //log(1/frcpa(1+ 172/256) +data8 0x3FE08CD9687E7B0E //log(1/frcpa(1+ 173/256) +data8 0x3FE0A10074CF9019 //log(1/frcpa(1+ 174/256) +data8 0x3FE0B5343A234477 //log(1/frcpa(1+ 175/256) +data8 0x3FE0C974C89431CE //log(1/frcpa(1+ 176/256) +data8 0x3FE0DDC2305B9886 //log(1/frcpa(1+ 177/256) +data8 0x3FE0EB524BAFC918 //log(1/frcpa(1+ 178/256) +data8 0x3FE0FFB54213A476 //log(1/frcpa(1+ 179/256) +data8 0x3FE114253DA97D9F //log(1/frcpa(1+ 180/256) +data8 0x3FE128A24F1D9AFF //log(1/frcpa(1+ 181/256) +data8 0x3FE1365252BF0865 //log(1/frcpa(1+ 182/256) +data8 0x3FE14AE558B4A92D //log(1/frcpa(1+ 183/256) +data8 0x3FE15F85A19C765B //log(1/frcpa(1+ 184/256) +data8 0x3FE16D4D38C119FA //log(1/frcpa(1+ 185/256) +data8 0x3FE18203C20DD133 //log(1/frcpa(1+ 186/256) +data8 0x3FE196C7BC4B1F3B //log(1/frcpa(1+ 187/256) +data8 0x3FE1A4A738B7A33C //log(1/frcpa(1+ 188/256) +data8 0x3FE1B981C0C9653D //log(1/frcpa(1+ 189/256) +data8 0x3FE1CE69E8BB106B //log(1/frcpa(1+ 190/256) +data8 0x3FE1DC619DE06944 //log(1/frcpa(1+ 191/256) +data8 0x3FE1F160A2AD0DA4 //log(1/frcpa(1+ 192/256) +data8 0x3FE2066D7740737E //log(1/frcpa(1+ 193/256) +data8 0x3FE2147DBA47A394 //log(1/frcpa(1+ 194/256) +data8 0x3FE229A1BC5EBAC3 //log(1/frcpa(1+ 195/256) +data8 0x3FE237C1841A502E //log(1/frcpa(1+ 196/256) +data8 0x3FE24CFCE6F80D9A //log(1/frcpa(1+ 197/256) +data8 0x3FE25B2C55CD5762 //log(1/frcpa(1+ 198/256) +data8 0x3FE2707F4D5F7C41 //log(1/frcpa(1+ 199/256) +data8 0x3FE285E0842CA384 //log(1/frcpa(1+ 200/256) +data8 0x3FE294294708B773 //log(1/frcpa(1+ 201/256) +data8 0x3FE2A9A2670AFF0C //log(1/frcpa(1+ 202/256) +data8 0x3FE2B7FB2C8D1CC1 //log(1/frcpa(1+ 203/256) +data8 0x3FE2C65A6395F5F5 //log(1/frcpa(1+ 204/256) +data8 0x3FE2DBF557B0DF43 //log(1/frcpa(1+ 205/256) +data8 0x3FE2EA64C3F97655 //log(1/frcpa(1+ 206/256) +data8 0x3FE3001823684D73 //log(1/frcpa(1+ 207/256) +data8 0x3FE30E97E9A8B5CD //log(1/frcpa(1+ 208/256) +data8 0x3FE32463EBDD34EA //log(1/frcpa(1+ 209/256) +data8 0x3FE332F4314AD796 //log(1/frcpa(1+ 210/256) +data8 0x3FE348D90E7464D0 //log(1/frcpa(1+ 211/256) +data8 0x3FE35779F8C43D6E //log(1/frcpa(1+ 212/256) +data8 0x3FE36621961A6A99 //log(1/frcpa(1+ 213/256) +data8 0x3FE37C299F3C366A //log(1/frcpa(1+ 214/256) +data8 0x3FE38AE2171976E7 //log(1/frcpa(1+ 215/256) +data8 0x3FE399A157A603E7 //log(1/frcpa(1+ 216/256) +data8 0x3FE3AFCCFE77B9D1 //log(1/frcpa(1+ 217/256) +data8 0x3FE3BE9D503533B5 //log(1/frcpa(1+ 218/256) +data8 0x3FE3CD7480B4A8A3 //log(1/frcpa(1+ 219/256) +data8 0x3FE3E3C43918F76C //log(1/frcpa(1+ 220/256) +data8 0x3FE3F2ACB27ED6C7 //log(1/frcpa(1+ 221/256) +data8 0x3FE4019C2125CA93 //log(1/frcpa(1+ 222/256) +data8 0x3FE4181061389722 //log(1/frcpa(1+ 223/256) +data8 0x3FE42711518DF545 //log(1/frcpa(1+ 224/256) +data8 0x3FE436194E12B6BF //log(1/frcpa(1+ 225/256) +data8 0x3FE445285D68EA69 //log(1/frcpa(1+ 226/256) +data8 0x3FE45BCC464C893A //log(1/frcpa(1+ 227/256) +data8 0x3FE46AED21F117FC //log(1/frcpa(1+ 228/256) +data8 0x3FE47A1527E8A2D3 //log(1/frcpa(1+ 229/256) +data8 0x3FE489445EFFFCCC //log(1/frcpa(1+ 230/256) +data8 0x3FE4A018BCB69835 //log(1/frcpa(1+ 231/256) +data8 0x3FE4AF5A0C9D65D7 //log(1/frcpa(1+ 232/256) +data8 0x3FE4BEA2A5BDBE87 //log(1/frcpa(1+ 233/256) +data8 0x3FE4CDF28F10AC46 //log(1/frcpa(1+ 234/256) +data8 0x3FE4DD49CF994058 //log(1/frcpa(1+ 235/256) +data8 0x3FE4ECA86E64A684 //log(1/frcpa(1+ 236/256) +data8 0x3FE503C43CD8EB68 //log(1/frcpa(1+ 237/256) +data8 0x3FE513356667FC57 //log(1/frcpa(1+ 238/256) +data8 0x3FE522AE0738A3D8 //log(1/frcpa(1+ 239/256) +data8 0x3FE5322E26867857 //log(1/frcpa(1+ 240/256) +data8 0x3FE541B5CB979809 //log(1/frcpa(1+ 241/256) +data8 0x3FE55144FDBCBD62 //log(1/frcpa(1+ 242/256) +data8 0x3FE560DBC45153C7 //log(1/frcpa(1+ 243/256) +data8 0x3FE5707A26BB8C66 //log(1/frcpa(1+ 244/256) +data8 0x3FE587F60ED5B900 //log(1/frcpa(1+ 245/256) +data8 0x3FE597A7977C8F31 //log(1/frcpa(1+ 246/256) +data8 0x3FE5A760D634BB8B //log(1/frcpa(1+ 247/256) +data8 0x3FE5B721D295F10F //log(1/frcpa(1+ 248/256) +data8 0x3FE5C6EA94431EF9 //log(1/frcpa(1+ 249/256) +data8 0x3FE5D6BB22EA86F6 //log(1/frcpa(1+ 250/256) +data8 0x3FE5E6938645D390 //log(1/frcpa(1+ 251/256) +data8 0x3FE5F673C61A2ED2 //log(1/frcpa(1+ 252/256) +data8 0x3FE6065BEA385926 //log(1/frcpa(1+ 253/256) +data8 0x3FE6164BFA7CC06B //log(1/frcpa(1+ 254/256) +data8 0x3FE62643FECF9743 //log(1/frcpa(1+ 255/256) +ASM_SIZE_DIRECTIVE(log_table_2) + + +.align 32 +.global logf# +.global log10f# + +// log10 has p7 true, p8 false +// log has p8 true, p7 false + +.section .text +.proc log10f# +.align 32 + +log10f: +#ifdef _LIBC +.global __ieee754_log10f +.type __ieee754_log10f,@function +__ieee754_log10f: +#endif +{ .mfi + alloc r32=ar.pfs,1,15,4,0 + frcpa.s1 log_C,p9 = f1,f8 + cmp.eq.unc p7,p8 = r0, r0 +} +{ .mfb + addl log_AD_1 = @ltoff(log_table_1), gp + fnorm.s1 log_NORM_f8 = f8 + br.sptk L(LOG_LOG10_X) +} +;; + +.endp log10f +ASM_SIZE_DIRECTIVE(log10f) +ASM_SIZE_DIRECTIVE(__ieee754_log10f) + + + +.section .text +.proc logf# +.align 32 +logf: +#ifdef _LIBC +.global __ieee754_logf +.type __ieee754_logf,@function +__ieee754_logf: +#endif + +{ .mfi + alloc r32=ar.pfs,1,15,4,0 + frcpa.s1 log_C,p9 = f1,f8 + cmp.eq.unc p8,p7 = r0, r0 +} +{ .mfi + addl log_AD_1 = @ltoff(log_table_1), gp + fnorm.s1 log_NORM_f8 = f8 + nop.i 999 +} +;; + +L(LOG_LOG10_X): + +{ .mfi + getf.exp log_GR_signexp_f8 = f8 // If x unorm then must recompute + fclass.m.unc p15,p0 = f8, 0x0b // Test for x=unorm + mov log_GR_fff7 = 0xfff7 +} +{ .mfi + ld8 log_AD_1 = [log_AD_1] + fms.s1 log_w = f8,f1,f1 + mov log_GR_exp_17_ones = 0x1ffff +} +;; + +{ .mmi + getf.sig log_GR_significand_f8 = f8 // If x unorm then must recompute + mov log_GR_exp_16_ones = 0xffff + nop.i 999 +} +;; + +{ .mmb + adds log_AD_2 = 0x10, log_AD_1 + and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones +(p15) br.cond.spnt L(LOG_DENORM) +} +;; + +L(LOG_COMMON): +{.mfi + ldfpd log_P3,log_P2 = [log_AD_1],16 + fclass.m.unc p6,p0 = f8, 0xc3 // Test for x=nan + shl log_GR_index = log_GR_significand_f8,1 +} +{.mfi + sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + ldfpd log_P1,log_inv_ln10 = [log_AD_2],16 + fclass.m.unc p11,p0 = f8, 0x21 // Test for x=+inf + shr.u log_GR_index = log_GR_index,56 +} +{ .mfi + setf.sig log_int_Nfloat = log_GR_true_exp_f8 + nop.f 999 + nop.i 999 +} +;; + + +{ .mfi + ldfd log_log2 = [log_AD_2],16 + fma.s1 log_wsq = log_w, log_w, f0 + nop.i 999 +} +{ .mfb + nop.m 999 +(p6) fma.s.s0 f8 = f8,f1,f0 // quietize nan result if x=nan +(p6) br.ret.spnt b0 // Exit for x=nan +} +;; + + +{ .mfi + shladd log_AD_2 = log_GR_index,3,log_AD_2 + fcmp.eq.s1 p10,p0 = log_NORM_f8, f1 // Test for x=+1.0 + nop.i 999 +} +{ .mfb + nop.m 999 + fms.s1 log_r = log_C,f8,f1 +(p11) br.ret.spnt b0 // Exit for x=+inf +} +;; + + +{ .mmf + nop.m 999 + nop.m 999 + fclass.m.unc p6,p0 = f8, 0x07 // Test for x=0 +} +;; + + +{ .mfb + ldfd log_T = [log_AD_2] +(p10) fmerge.s f8 = f0, f0 +(p10) br.ret.spnt b0 // Exit for x=1.0 +;; +} + +{ .mfi + getf.exp log_GR_signexp_w = log_w + fclass.m.unc p12,p0 = f8, 0x3a // Test for x neg norm, unorm, inf + nop.i 999 +} +;; + +{ .mmb + nop.m 999 + nop.m 999 +(p6) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x=0 +;; +} + + +{ .mfi + and log_GR_exp_w = log_GR_exp_17_ones, log_GR_signexp_w + nop.f 999 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 log_rsq = log_r, log_r, f0 +(p12) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x<0 +;; +} + +{ .mfi + nop.m 999 + fma.s1 log_rp_p32 = log_P3, log_r, log_P2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_q32 = log_P3, log_w, log_P2 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.xf log_Nfloat = log_int_Nfloat + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 log_rp_p10 = log_P1, log_r, f1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_q10 = log_P1, log_w, f1 + nop.i 999 +;; +} + +// p13 <== large w log +// p14 <== small w log +{ .mfi +(p8) cmp.ge.unc p13,p14 = log_GR_exp_w, log_GR_fff7 + fcmp.eq.s0 p6,p0 = f8,f0 // Sets flag on +denormal input + nop.i 999 +;; +} + +// p10 <== large w log10 +// p11 <== small w log10 +{ .mfi +(p7) cmp.ge.unc p10,p11 = log_GR_exp_w, log_GR_fff7 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 log_T_plus_Nlog2 = log_Nfloat,log_log2, log_T + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 log_rp_p2 = log_rp_p32, log_rsq, log_rp_p10 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 log_rp_q2 = log_rp_q32, log_wsq, log_rp_q10 + nop.i 999 +;; +} + + +// small w, log <== p14 +{ .mfi + nop.m 999 +(p14) fma.s f8 = log_rp_q2, log_w, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fma.s1 log_Q = log_rp_q2, log_w, f0 + nop.i 999 ;; +} + + +// large w, log <== p13 +.pred.rel "mutex",p13,p10 +{ .mfi + nop.m 999 +(p13) fma.s f8 = log_rp_p2, log_r, log_T_plus_Nlog2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s1 log_Q = log_rp_p2, log_r, log_T_plus_Nlog2 + nop.i 999 ;; +} + + +// log10 +{ .mfb + nop.m 999 +(p7) fma.s f8 = log_inv_ln10,log_Q,f0 + br.ret.sptk b0 +;; +} + + +L(LOG_DENORM): +{ .mmi + getf.exp log_GR_signexp_f8 = log_NORM_f8 + nop.m 999 + nop.i 999 +} +;; +{ .mmb + getf.sig log_GR_significand_f8 = log_NORM_f8 + and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones + br.cond.sptk L(LOG_COMMON) +} +;; + +L(LOG_ZERO_NEG): + +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 0 1 11 0x7 +// 0 0 1 1 1 0 10 0x3a + +// Save x (f8) in f10 +{ .mfi + nop.m 999 + fmerge.s f10 = f8,f8 + nop.i 999 ;; +} + +// p8 p9 means ln(+-0) = -inf +// p7 p10 means log(+-0) = -inf + +// p13 means ln(-) +// p14 means log(-) + + +{ .mfi + nop.m 999 + fmerge.ns f6 = f1,f1 // Form -1.0 + nop.i 999 ;; +} + +// p9 means ln(+-0) = -inf +// p10 means log(+-0) = -inf +// Log(+-0) = -inf + +{ .mfi + nop.m 999 +(p8) fclass.m.unc p9,p0 = f10, 0x07 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p10,p0 = f10, 0x07 + nop.i 999 ;; +} + + +// p13 ln(-) +// p14 log(-) + +// Log(-inf, -normal, -unnormal) = QNAN indefinite +{ .mfi + nop.m 999 +(p8) fclass.m.unc p13,p0 = f10, 0x3a + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p14,p0 = f10, 0x3a + nop.i 999 ;; +} + + +.pred.rel "mutex",p9,p10 +{ .mfi +(p9) mov log_GR_tag = 4 +(p9) frcpa f8,p11 = f6,f0 + nop.i 999 +} +{ .mfi +(p10) mov log_GR_tag = 10 +(p10) frcpa f8,p12 = f6,f0 + nop.i 999 ;; +} + +.pred.rel "mutex",p13,p14 +{ .mfi +(p13) mov log_GR_tag = 5 +(p13) frcpa f8,p11 = f0,f0 + nop.i 999 +} +{ .mfb +(p14) mov log_GR_tag = 11 +(p14) frcpa f8,p12 = f0,f0 + br.cond.sptk __libm_error_region ;; +} +.endp logf +ASM_SIZE_DIRECTIVE(logf) +ASM_SIZE_DIRECTIVE(__ieee754_logf) + + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + + +.proc __libm_error_region +__libm_error_region: +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfs [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfs [GR_Parameter_X] = f10 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; + +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_logl.c glibc-2.2.3/sysdeps/ia64/fpu/e_logl.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_logl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_logl.c Mon Feb 19 00:45:16 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_pow.S glibc-2.2.3/sysdeps/ia64/fpu/e_pow.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_pow.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_pow.S Mon Feb 19 00:45:31 2001 @@ -0,0 +1,2309 @@ +.file "pow.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/03/00 Added p12 to definite over/under path. With odd power we did not +// maintain the sign of x in this path. +// 4/04/00 Unwind support added +// 4/19/00 pow(+-1,inf) now returns NaN +// pow(+-val, +-inf) returns 0 or inf, but now does not call error support +// Added s1 to fcvt.fx because invalid flag was incorrectly set. +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 9/07/00 Improved performance by eliminating bank conflicts and other stalls, +// and tweaking the critical path +// 9/08/00 Per c99, pow(+-1,inf) now returns 1, and pow(+1,nan) returns 1 +// 9/28/00 Updated NaN**0 path +// 1/20/01 Fixed denormal flag settings. +// 2/12/01 Improved speed. +// +// API +//============================================================== +// double pow(double) +// float powf(float) +// +// Overview of operation +//============================================================== +// +// Three steps... +// 1. Log(x) +// 2. y Log(x) +// 3. exp(y log(x)) +// +// This means we work with the absolute value of x and merge in the sign later. +// Log(x) = G + delta + r -rsq/2 + p +// G,delta depend on the exponent of x and table entries. The table entries are +// indexed by the exponent of x, called K. +// +// The G and delta come out of the reduction; r is the reduced x. +// +// B = frcpa(x) +// xB-1 is small means that B is the approximate inverse of x. +// +// Log(x) = Log( (1/B)(Bx) ) +// = Log(1/B) + Log(Bx) +// = Log(1/B) + Log( 1 + (Bx-1)) +// +// x = 2^K 1.x_1x_2.....x_52 +// B= frcpa(x) = 2^-k Cm +// Log(1/B) = Log(1/(2^-K Cm)) +// Log(1/B) = Log((2^K/ Cm)) +// Log(1/B) = K Log(2) + Log(1/Cm) +// +// Log(x) = K Log(2) + Log(1/Cm) + Log( 1 + (Bx-1)) +// +// If you take the significand of x, set the exponent to true 0, then Cm is +// the frcpa. We tabulate the Log(1/Cm) values. There are 256 of them. +// The frcpa table is indexed by 8 bits, the x_1 thru x_8. +// m = x_1x_2...x_8 is an 8-bit index. +// +// Log(1/Cm) = log(1/frcpa(1+m/256)) where m goes from 0 to 255. +// +// We tabluate as two doubles, T and t, where T +t is the value itself. +// +// Log(x) = (K Log(2)_hi + T) + (Log(2)_hi + t) + Log( 1 + (Bx-1)) +// Log(x) = G + delta + Log( 1 + (Bx-1)) +// +// The Log( 1 + (Bx-1)) can be calculated as a series in r = Bx-1. +// +// Log( 1 + (Bx-1)) = r - rsq/2 + p +// +// Then, +// +// yLog(x) = yG + y delta + y(r-rsq/2) + yp +// yLog(x) = Z1 + e3 + Z2 + Z3 + (e2 + e3) +// +// +// exp(yLog(x)) = exp(Z1 + Z2 + Z3) exp(e1 + e2 + e3) +// +// +// exp(Z3) is another series. +// exp(e1 + e2 + e3) is approximated as f3 = 1 + (e1 + e2 + e3) +// +// Z1 (128/log2) = number of log2/128 in Z1 is N1 +// Z2 (128/log2) = number of log2/128 in Z2 is N2 +// +// s1 = Z1 - N1 log2/128 +// s2 = Z2 - N2 log2/128 +// +// s = s1 + s2 +// N = N1 + N2 +// +// exp(Z1 + Z2) = exp(Z) +// exp(Z) = exp(s) exp(N log2/128) +// +// exp(r) = exp(Z - N log2/128) +// +// r = s + d = (Z - N (log2/128)_hi) -N (log2/128)_lo +// = Z - N (log2/128) +// +// Z = s+d +N (log2/128) +// +// exp(Z) = exp(s) (1+d) exp(N log2/128) +// +// N = M 128 + n +// +// N log2/128 = M log2 + n log2/128 +// +// n is 8 binary digits = n_7n_6...n_1 +// +// n log2/128 = n_7n_6n_5 16 log2/128 + n_4n_3n_2n_1 log2/128 +// n log2/128 = n_7n_6n_5 log2/8 + n_4n_3n_2n_1 log2/128 +// n log2/128 = I2 log2/8 + I1 log2/128 +// +// N log2/128 = M log2 + I2 log2/8 + I1 log2/128 +// +// exp(Z) = exp(s) (1+d) exp(log(2^M) + log(2^I2/8) + log(2^I1/128)) +// exp(Z) = exp(s) (1+d1) (1+d2)(2^M) 2^I2/8 2^I1/128 +// exp(Z) = exp(s) f1 f2 (2^M) 2^I2/8 2^I1/128 +// +// I1, I2 are table indices. Use a series for exp(s). +// Then get exp(Z) +// +// exp(yLog(x)) = exp(Z1 + Z2 + Z3) exp(e1 + e2 + e3) +// exp(yLog(x)) = exp(Z) exp(Z3) f3 +// exp(yLog(x)) = exp(Z)f3 exp(Z3) +// exp(yLog(x)) = A exp(Z3) +// +// We actually calculate exp(Z3) -1. +// Then, +// exp(yLog(x)) = A + A( exp(Z3) -1) +// + +// Table Generation +//============================================================== + +// The log values +// ============== +// The operation (K*log2_hi) must be exact. K is the true exponent of x. +// If we allow gradual underflow (denormals), K can be represented in 12 bits +// (as a two's complement number). We assume 13 bits as an engineering precaution. +// +// +------------+----------------+-+ +// | 13 bits | 50 bits | | +// +------------+----------------+-+ +// 0 1 66 +// 2 34 +// +// So we want the lsb(log2_hi) to be 2^-50 +// We get log2 as a quad-extended (15-bit exponent, 128-bit significand) +// +// 0 fffe b17217f7d1cf79ab c9e3b39803f2f6af (4...) +// +// Consider numbering the bits left to right, starting at 0 thru 127. +// Bit 0 is the 2^-1 bit; bit 49 is the 2^-50 bit. +// +// ...79ab +// 0111 1001 1010 1011 +// 44 +// 89 +// +// So if we shift off the rightmost 14 bits, then (shift back only +// the top half) we get +// +// 0 fffe b17217f7d1cf4000 e6af278ece600fcb dabc000000000000 +// +// Put the right 64-bit signficand in an FR register, convert to double; +// it is exact. Put the next 128 bits into a quad register and round to double. +// The true exponent of the low part is -51. +// +// hi is 0 fffe b17217f7d1cf4000 +// lo is 0 ffcc e6af278ece601000 +// +// Convert to double memory format and get +// +// hi is 0x3fe62e42fefa39e8 +// lo is 0x3cccd5e4f1d9cc02 +// +// log2_hi + log2_lo is an accurate value for log2. +// +// +// The T and t values +// ================== +// A similar method is used to generate the T and t values. +// +// K * log2_hi + T must be exact. +// +// Smallest T,t +// ---------- +// The smallest T,t is +// T t +// data8 0x3f60040155d58800, 0x3c93bce0ce3ddd81 log(1/frcpa(1+0/256))= +1.95503e-003 +// +// The exponent is 0x3f6 (biased) or -9 (true). +// For the smallest T value, what we want is to clip the significand such that +// when it is shifted right by 9, its lsb is in the bit for 2^-51. The 9 is the specific +// for the first entry. In general, it is 0xffff - (biased 15-bit exponent). + +// Independently, what we have calculated is the table value as a quad precision number. +// Table entry 1 is +// 0 fff6 80200aaeac44ef38 338f77605fdf8000 +// +// We store this quad precision number in a data structure that is +// sign: 1 +// exponent: 15 +// signficand_hi: 64 (includes explicit bit) +// signficand_lo: 49 +// Because the explicit bit is included, the significand is 113 bits. +// +// Consider significand_hi for table entry 1. +// +// +// +-+--- ... -------+--------------------+ +// | | +// +-+--- ... -------+--------------------+ +// 0 1 4444444455555555556666 +// 2345678901234567890123 +// +// Labeled as above, bit 0 is 2^0, bit 1 is 2^-1, etc. +// Bit 42 is 2^-42. If we shift to the right by 9, the bit in +// bit 42 goes in 51. +// +// So what we want to do is shift bits 43 thru 63 into significand_lo. +// This is shifting bit 42 into bit 63, taking care to retain the shifted-off bits. +// Then shifting (just with signficaand_hi) back into bit 42. +// +// The shift_value is 63-42 = 21. In general, this is +// 63 - (51 -(0xffff - 0xfff6)) +// For this example, it is +// 63 - (51 - 9) = 63 - 42 = 21 +// +// This means we are shifting 21 bits into significand_lo. We must maintain more +// that a 128-bit signficand not to lose bits. So before the shift we put the 128-bit +// significand into a 256-bit signficand and then shift. +// The 256-bit significand has four parts: hh, hl, lh, and ll. +// +// Start off with +// hh hl lh ll +// <64> <49><15_0> <64_0> <64_0> +// +// After shift by 21 (then return for significand_hi), +// <43><21_0> <21><43> <6><58_0> <64_0> +// +// Take the hh part and convert to a double. There is no rounding here. +// The conversion is exact. The true exponent of the high part is the same as the +// true exponent of the input quad. +// +// We have some 64 plus significand bits for the low part. In this example, we have +// 70 bits. We want to round this to a double. Put them in a quad and then do a quad fnorm. +// For this example the true exponent of the low part is +// true_exponent_of_high - 43 = true_exponent_of_high - (64-21) +// In general, this is +// true_exponent_of_high - (64 - shift_value) +// +// +// Largest T,t +// ---------- +// The largest T,t is +// data8 0x3fe62643fecf9742, 0x3c9e3147684bd37d log(1/frcpa(1+255/256))= +6.92171e-001 +// +// Table entry 256 is +// 0 fffe b1321ff67cba178c 51da12f4df5a0000 +// +// The shift value is +// 63 - (51 -(0xffff - 0xfffe)) = 13 +// +// The true exponent of the low part is +// true_exponent_of_high - (64 - shift_value) +// -1 - (64-13) = -52 +// Biased as a double, this is 0x3cb +// +// +// +// So then lsb(T) must be >= 2^-51 +// msb(Klog2_hi) <= 2^12 +// +// +--------+---------+ +// | 51 bits | <== largest T +// +--------+---------+ +// | 9 bits | 42 bits | <== smallest T +// +------------+----------------+-+ +// | 13 bits | 50 bits | | +// +------------+----------------+-+ + + + +// Special Cases +//============================================================== + +// double float +// overflow error 24 30 + +// underflow error 25 31 + +// X zero Y zero +// +0 +0 +1 error 26 32 +// -0 +0 +1 error 26 32 +// +0 -0 +1 error 26 32 +// -0 -0 +1 error 26 32 + +// X zero Y negative +// +0 -odd integer +inf error 27 33 divide-by-zero +// -0 -odd integer -inf error 27 33 divide-by-zero +// +0 !-odd integer +inf error 27 33 divide-by-zero +// -0 !-odd integer +inf error 27 33 divide-by-zero +// +0 -inf +inf error 27 33 divide-by-zero +// -0 -inf +inf error 27 33 divide-by-zero + +// X zero Y positve +// +0 +odd integer +0 +// -0 +odd integer -0 +// +0 !+odd integer +0 +// -0 !+odd integer +0 +// +0 +inf +0 +// -0 +inf +0 +// +0 Y NaN quiet Y invalid if Y SNaN +// -0 Y NaN quiet Y invalid if Y SNaN + +// X one +// -1 Y inf +1 +// -1 Y NaN quiet Y invalid if Y SNaN +// +1 Y NaN +1 invalid if Y SNaN +// +1 Y any else +1 + +// X - Y not integer QNAN error 28 34 invalid + +// X NaN Y 0 +1 error 29 35 +// X NaN Y NaN quiet X invalid if X or Y SNaN +// X NaN Y any else quiet X invalid if X SNaN +// X !+1 Y NaN quiet Y invalid if Y SNaN + + +// X +inf Y >0 +inf +// X -inf Y >0, !odd integer +inf +// X -inf Y >0, odd integer -inf + +// X +inf Y <0 +0 +// X -inf Y <0, !odd integer +0 +// X -inf Y <0, odd integer -0 + +// X +inf Y =0 +1 +// X -inf Y =0 +1 + +// |X|<1 Y +inf +0 +// |X|<1 Y -inf +inf +// |X|>1 Y +inf +inf +// |X|>1 Y -inf +0 + +// X any Y =0 +1 + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +// integer registers used + +pow_AD_Tt = r33 +pow_GR_FFF7 = r34 +pow_GR_exp_Y = r34 // duplicate +pow_GR_17ones = r35 + +pow_AD_P = r36 +pow_AD_Q = r37 +pow_AD_tbl1 = r38 +pow_AD_tbl2 = r39 +pow_GR_exp_X = r40 +pow_GR_true_exp_X = r40 // duplicate + +pow_GR_offset = r41 +pow_GR_exp_Xm1 = r42 +pow_GR_sig_X = r43 +pow_GR_signexp_X = r44 + +pow_GR_signexp_Xm1 = r46 +pow_GR_int_W1 = r47 +pow_GR_int_W2 = r48 +pow_GR_int_N = r49 +pow_GR_index1 = r50 + +pow_GR_index2 = r51 +pow_AD_T1 = r52 +pow_AD_T2 = r53 +pow_GR_gt_ln = r53 // duplicate +pow_int_GR_M = r54 +pow_GR_10033 = r55 + +pow_GR_16ones = r56 +pow_GR_sig_int_Y = r57 +pow_GR_sign_Y_Gpr = r58 +pow_GR_17ones_m1 = r59 +pow_GR_one = r60 +pow_GR_sign_Y = r60 + +pow_GR_signexp_Y_Gpr = r61 +pow_GR_exp_Y_Gpr = r62 +pow_GR_true_exp_Y_Gpr = r63 +pow_GR_signexp_Y = r64 + +GR_SAVE_B0 = r65 +GR_SAVE_GP = r66 +GR_SAVE_PFS = r67 + +GR_Parameter_X = r68 +GR_Parameter_Y = r69 +GR_Parameter_RESULT = r70 +pow_GR_tag = r71 + + +// floating point registers used + +POW_B = f32 +POW_NORM_X = f33 +POW_Xm1 = f34 +POW_r1 = f34 +POW_P4 = f35 + +POW_P5 = f36 +POW_NORM_Y = f37 +POW_Q2 = f38 +POW_Q3 = f39 +POW_P2 = f40 + +POW_P3 = f41 +POW_P0 = f42 +POW_log2_lo = f43 +POW_r = f44 +POW_Q0_half = f45 + +POW_Q1 = f46 +POW_log2_hi = f48 +POW_Q4 = f49 +POW_P1 = f50 + +POW_log2_by_128_hi = f51 +POW_inv_log2_by_128 = f52 +POW_rsq = f53 +POW_Yrcub = f54 +POW_log2_by_128_lo = f55 + +POW_v6 = f56 +POW_v4 = f58 +POW_v2 = f59 +POW_T = f60 + +POW_Tt = f61 +POW_RSHF = f62 +POW_v21ps = f63 +POW_s4 = f64 + +POW_U = f66 +POW_G = f67 +POW_delta = f68 +POW_v3 = f69 +POW_V = f70 + +POW_p = f71 +POW_Z1 = f72 +POW_e3 = f73 +POW_e2 = f74 +POW_Z2 = f75 + +POW_e1 = f76 +POW_W1 = f77 +POW_UmZ2 = f78 +POW_W2 = f79 +POW_Z3 = f80 + +POW_int_W1 = f81 +POW_e12 = f82 +POW_int_W2 = f83 +POW_UmZ2pV = f84 +POW_Z3sq = f85 + +POW_e123 = f86 +POW_N1float = f87 +POW_N2float = f88 +POW_f3 = f89 +POW_q = f90 + +POW_s1 = f91 +POW_Nfloat = f92 +POW_s2 = f93 +POW_f2 = f94 +POW_f1 = f95 + +POW_T1 = f96 +POW_T2 = f97 +POW_2M = f98 +POW_s = f99 +POW_f12 = f100 + +POW_ssq = f101 +POW_T1T2 = f102 +POW_1ps = f103 +POW_A = f104 +POW_es = f105 + +POW_int_K = f107 +POW_K = f108 +POW_f123 = f109 +POW_Gpr = f110 + +POW_Y_Gpr = f111 +POW_int_Y = f112 + +POW_float_int_Y = f116 +POW_ftz_urm_f8 = f117 +POW_wre_urm_f8 = f118 +POW_abs_A = f119 +POW_gt_pln = f120 + +POW_xsq = f121 + +POW_twoV = f122 +POW_Xp1 = f123 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +pow_table_P: +ASM_TYPE_DIRECTIVE(pow_table_P,@object) +data8 0x8000F7B249FF332D, 0x0000BFFC // P_5 +data8 0xAAAAAAA9E7902C7F, 0x0000BFFC // P_3 +data8 0x80000000000018E5, 0x0000BFFD // P_1 +data8 0xb8aa3b295c17f0bc, 0x00004006 // inv_ln2_by_128 + + +data8 0x3FA5555555554A9E // Q_2 +data8 0x3F8111124F4DD9F9 // Q_3 +data8 0x3FE0000000000000 // Q_0 +data8 0x3FC5555555554733 // Q_1 +data8 0x3F56C16D9360FFA0 // Q_4 +data8 0x43e8000000000000 // Right shift constant for exp +data8 0xc9e3b39803f2f6af, 0x00003fb7 // ln2_by_128_lo +data8 0x0000000000000000 // pad to eliminate bank conflicts with pow_table_Q +data8 0x0000000000000000 // pad to eliminate bank conflicts with pow_table_Q +ASM_SIZE_DIRECTIVE(pow_table_P) + +pow_table_Q: +ASM_TYPE_DIRECTIVE(pow_table_Q,@object) +data8 0x9249FE7F0DC423CF, 0x00003FFC // P_4 +data8 0xCCCCCCCC4ED2BA7F, 0x00003FFC // P_2 +data8 0xAAAAAAAAAAAAB505, 0x00003FFD // P_0 +data8 0x3fe62e42fefa39e8, 0x3cccd5e4f1d9cc02 // log2 hi lo = +6.93147e-001 +data8 0xb17217f7d1cf79ab, 0x00003ff7 // ln2_by_128_hi +ASM_SIZE_DIRECTIVE(pow_table_Q) + + +pow_Tt: +ASM_TYPE_DIRECTIVE(pow_Tt,@object) +data8 0x3f60040155d58800, 0x3c93bce0ce3ddd81 // log(1/frcpa(1+0/256))= +1.95503e-003 +data8 0x3f78121214586a00, 0x3cb540e0a5cfc9bc // log(1/frcpa(1+1/256))= +5.87661e-003 +data8 0x3f841929f9683200, 0x3cbdf1d57404da1f // log(1/frcpa(1+2/256))= +9.81362e-003 +data8 0x3f8c317384c75f00, 0x3c69806208c04c22 // log(1/frcpa(1+3/256))= +1.37662e-002 +data8 0x3f91a6b91ac73380, 0x3c7874daa716eb32 // log(1/frcpa(1+4/256))= +1.72376e-002 +data8 0x3f95ba9a5d9ac000, 0x3cacbb84e08d78ac // log(1/frcpa(1+5/256))= +2.12196e-002 +data8 0x3f99d2a807432580, 0x3cbcf80538b441e1 // log(1/frcpa(1+6/256))= +2.52177e-002 +data8 0x3f9d6b2725979800, 0x3c6095e5c8f8f359 // log(1/frcpa(1+7/256))= +2.87291e-002 +data8 0x3fa0c58fa19dfa80, 0x3cb4c5d4e9d0dda2 // log(1/frcpa(1+8/256))= +3.27573e-002 +data8 0x3fa2954c78cbce00, 0x3caa932b860ab8d6 // log(1/frcpa(1+9/256))= +3.62953e-002 +data8 0x3fa4a94d2da96c40, 0x3ca670452b76bbd5 // log(1/frcpa(1+10/256))= +4.03542e-002 +data8 0x3fa67c94f2d4bb40, 0x3ca84104f9941798 // log(1/frcpa(1+11/256))= +4.39192e-002 +data8 0x3fa85188b630f040, 0x3cb40a882cbf0153 // log(1/frcpa(1+12/256))= +4.74971e-002 +data8 0x3faa6b8abe73af40, 0x3c988d46e25c9059 // log(1/frcpa(1+13/256))= +5.16017e-002 +data8 0x3fac441e06f72a80, 0x3cae3e930a1a2a96 // log(1/frcpa(1+14/256))= +5.52072e-002 +data8 0x3fae1e6713606d00, 0x3c8a796f6283b580 // log(1/frcpa(1+15/256))= +5.88257e-002 +data8 0x3faffa6911ab9300, 0x3c5193070351e88a // log(1/frcpa(1+16/256))= +6.24574e-002 +data8 0x3fb0ec139c5da600, 0x3c623f2a75eb992d // log(1/frcpa(1+17/256))= +6.61022e-002 +data8 0x3fb1dbd2643d1900, 0x3ca649b2ef8927f0 // log(1/frcpa(1+18/256))= +6.97605e-002 +data8 0x3fb2cc7284fe5f00, 0x3cbc5e86599513e2 // log(1/frcpa(1+19/256))= +7.34321e-002 +data8 0x3fb3bdf5a7d1ee60, 0x3c90bd4bb69dada3 // log(1/frcpa(1+20/256))= +7.71173e-002 +data8 0x3fb4b05d7aa012e0, 0x3c54e377c9b8a54f // log(1/frcpa(1+21/256))= +8.08161e-002 +data8 0x3fb580db7ceb5700, 0x3c7fdb2f98354cde // log(1/frcpa(1+22/256))= +8.39975e-002 +data8 0x3fb674f089365a60, 0x3cb9994c9d3301c1 // log(1/frcpa(1+23/256))= +8.77219e-002 +data8 0x3fb769ef2c6b5680, 0x3caaec639db52a79 // log(1/frcpa(1+24/256))= +9.14602e-002 +data8 0x3fb85fd927506a40, 0x3c9f9f99a3cf8e25 // log(1/frcpa(1+25/256))= +9.52125e-002 +data8 0x3fb9335e5d594980, 0x3ca15c3abd47d99a // log(1/frcpa(1+26/256))= +9.84401e-002 +data8 0x3fba2b0220c8e5e0, 0x3cb4ca639adf6fc3 // log(1/frcpa(1+27/256))= +1.02219e-001 +data8 0x3fbb0004ac1a86a0, 0x3ca7cb81bf959a59 // log(1/frcpa(1+28/256))= +1.05469e-001 +data8 0x3fbbf968769fca00, 0x3cb0c646c121418e // log(1/frcpa(1+29/256))= +1.09274e-001 +data8 0x3fbccfedbfee13a0, 0x3ca0465fce24ab4b // log(1/frcpa(1+30/256))= +1.12548e-001 +data8 0x3fbda727638446a0, 0x3c82803f4e2e6603 // log(1/frcpa(1+31/256))= +1.15832e-001 +data8 0x3fbea3257fe10f60, 0x3cb986a3f2313d1a // log(1/frcpa(1+32/256))= +1.19677e-001 +data8 0x3fbf7be9fedbfde0, 0x3c97d16a6a621cf4 // log(1/frcpa(1+33/256))= +1.22985e-001 +data8 0x3fc02ab352ff25f0, 0x3c9cc6baad365600 // log(1/frcpa(1+34/256))= +1.26303e-001 +data8 0x3fc097ce579d2040, 0x3cb9ba16d329440b // log(1/frcpa(1+35/256))= +1.29633e-001 +data8 0x3fc1178e8227e470, 0x3cb7bc671683f8e6 // log(1/frcpa(1+36/256))= +1.33531e-001 +data8 0x3fc185747dbecf30, 0x3c9d1116f66d2345 // log(1/frcpa(1+37/256))= +1.36885e-001 +data8 0x3fc1f3b925f25d40, 0x3c8162c9ef939ac6 // log(1/frcpa(1+38/256))= +1.40250e-001 +data8 0x3fc2625d1e6ddf50, 0x3caad3a1ec384fc3 // log(1/frcpa(1+39/256))= +1.43627e-001 +data8 0x3fc2d1610c868130, 0x3cb3ad997036941b // log(1/frcpa(1+40/256))= +1.47015e-001 +data8 0x3fc340c597411420, 0x3cbc2308262c7998 // log(1/frcpa(1+41/256))= +1.50414e-001 +data8 0x3fc3b08b6757f2a0, 0x3cb2170d6cdf0526 // log(1/frcpa(1+42/256))= +1.53825e-001 +data8 0x3fc40dfb08378000, 0x3c9bb453c4f7b685 // log(1/frcpa(1+43/256))= +1.56677e-001 +data8 0x3fc47e74e8ca5f70, 0x3cb836a48fdfce9d // log(1/frcpa(1+44/256))= +1.60109e-001 +data8 0x3fc4ef51f6466de0, 0x3ca07a43919aa64b // log(1/frcpa(1+45/256))= +1.63553e-001 +data8 0x3fc56092e02ba510, 0x3ca85006899d97b0 // log(1/frcpa(1+46/256))= +1.67010e-001 +data8 0x3fc5d23857cd74d0, 0x3ca30a5ba6e7abbe // log(1/frcpa(1+47/256))= +1.70478e-001 +data8 0x3fc6313a37335d70, 0x3ca905586f0ac97e // log(1/frcpa(1+48/256))= +1.73377e-001 +data8 0x3fc6a399dabbd380, 0x3c9b2c6657a96684 // log(1/frcpa(1+49/256))= +1.76868e-001 +data8 0x3fc70337dd3ce410, 0x3cb50bc52f55cdd8 // log(1/frcpa(1+50/256))= +1.79786e-001 +data8 0x3fc77654128f6120, 0x3cad2eb7c9a39efe // log(1/frcpa(1+51/256))= +1.83299e-001 +data8 0x3fc7e9d82a0b0220, 0x3cba127e90393c01 // log(1/frcpa(1+52/256))= +1.86824e-001 +data8 0x3fc84a6b759f5120, 0x3cbd7fd52079f706 // log(1/frcpa(1+53/256))= +1.89771e-001 +data8 0x3fc8ab47d5f5a300, 0x3cbfae141751a3de // log(1/frcpa(1+54/256))= +1.92727e-001 +data8 0x3fc91fe490965810, 0x3cb69cf30a1c319e // log(1/frcpa(1+55/256))= +1.96286e-001 +data8 0x3fc981634011aa70, 0x3ca5bb3d208bc42a // log(1/frcpa(1+56/256))= +1.99261e-001 +data8 0x3fc9f6c407089660, 0x3ca04d68658179a0 // log(1/frcpa(1+57/256))= +2.02843e-001 +data8 0x3fca58e729348f40, 0x3c99f5411546c286 // log(1/frcpa(1+58/256))= +2.05838e-001 +data8 0x3fcabb55c31693a0, 0x3cb9a5350eb327d5 // log(1/frcpa(1+59/256))= +2.08842e-001 +data8 0x3fcb1e104919efd0, 0x3c18965fcce7c406 // log(1/frcpa(1+60/256))= +2.11855e-001 +data8 0x3fcb94ee93e367c0, 0x3cb503716da45184 // log(1/frcpa(1+61/256))= +2.15483e-001 +data8 0x3fcbf851c0675550, 0x3cbdf1b3f7ab5378 // log(1/frcpa(1+62/256))= +2.18516e-001 +data8 0x3fcc5c0254bf23a0, 0x3ca7aab9ed0b1d7b // log(1/frcpa(1+63/256))= +2.21558e-001 +data8 0x3fccc000c9db3c50, 0x3c92a7a2a850072a // log(1/frcpa(1+64/256))= +2.24609e-001 +data8 0x3fcd244d99c85670, 0x3c9f6019120edf4c // log(1/frcpa(1+65/256))= +2.27670e-001 +data8 0x3fcd88e93fb2f450, 0x3c6affb96815e081 // log(1/frcpa(1+66/256))= +2.30741e-001 +data8 0x3fcdedd437eaef00, 0x3c72553595897976 // log(1/frcpa(1+67/256))= +2.33820e-001 +data8 0x3fce530effe71010, 0x3c90913b020fa182 // log(1/frcpa(1+68/256))= +2.36910e-001 +data8 0x3fceb89a1648b970, 0x3c837ba4045bfd25 // log(1/frcpa(1+69/256))= +2.40009e-001 +data8 0x3fcf1e75fadf9bd0, 0x3cbcea6d13e0498d // log(1/frcpa(1+70/256))= +2.43117e-001 +data8 0x3fcf84a32ead7c30, 0x3ca5e3a67b3c6d77 // log(1/frcpa(1+71/256))= +2.46235e-001 +data8 0x3fcfeb2233ea07c0, 0x3cba0c6f0049c5a6 // log(1/frcpa(1+72/256))= +2.49363e-001 +data8 0x3fd028f9c7035c18, 0x3cb0a30b06677ff6 // log(1/frcpa(1+73/256))= +2.52501e-001 +data8 0x3fd05c8be0d96358, 0x3ca0f1c77ccb5865 // log(1/frcpa(1+74/256))= +2.55649e-001 +data8 0x3fd085eb8f8ae790, 0x3cbd513f45fe7a97 // log(1/frcpa(1+75/256))= +2.58174e-001 +data8 0x3fd0b9c8e32d1910, 0x3c927449047ca006 // log(1/frcpa(1+76/256))= +2.61339e-001 +data8 0x3fd0edd060b78080, 0x3c89b52d8435f53e // log(1/frcpa(1+77/256))= +2.64515e-001 +data8 0x3fd122024cf00638, 0x3cbdd976fabda4bd // log(1/frcpa(1+78/256))= +2.67701e-001 +data8 0x3fd14be2927aecd0, 0x3cb02f90ad0bc471 // log(1/frcpa(1+79/256))= +2.70257e-001 +data8 0x3fd180618ef18ad8, 0x3cbd003792c71a98 // log(1/frcpa(1+80/256))= +2.73461e-001 +data8 0x3fd1b50bbe2fc638, 0x3ca9ae64c6403ead // log(1/frcpa(1+81/256))= +2.76675e-001 +data8 0x3fd1df4cc7cf2428, 0x3cb43f0455f7e395 // log(1/frcpa(1+82/256))= +2.79254e-001 +data8 0x3fd214456d0eb8d0, 0x3cb0fbd748d75d30 // log(1/frcpa(1+83/256))= +2.82487e-001 +data8 0x3fd23ec5991eba48, 0x3c906edd746b77e2 // log(1/frcpa(1+84/256))= +2.85081e-001 +data8 0x3fd2740d9f870af8, 0x3ca9802e6a00a670 // log(1/frcpa(1+85/256))= +2.88333e-001 +data8 0x3fd29ecdabcdfa00, 0x3cacecef70890cfa // log(1/frcpa(1+86/256))= +2.90943e-001 +data8 0x3fd2d46602adcce8, 0x3cb97911955f3521 // log(1/frcpa(1+87/256))= +2.94214e-001 +data8 0x3fd2ff66b04ea9d0, 0x3cb12dabe191d1c9 // log(1/frcpa(1+88/256))= +2.96838e-001 +data8 0x3fd335504b355a30, 0x3cbdf9139df924ec // log(1/frcpa(1+89/256))= +3.00129e-001 +data8 0x3fd360925ec44f58, 0x3cb253e68977a1e3 // log(1/frcpa(1+90/256))= +3.02769e-001 +data8 0x3fd38bf1c3337e70, 0x3cb3d283d2a2da21 // log(1/frcpa(1+91/256))= +3.05417e-001 +data8 0x3fd3c25277333180, 0x3cadaa5b035eae27 // log(1/frcpa(1+92/256))= +3.08735e-001 +data8 0x3fd3edf463c16838, 0x3cb983d680d3c108 // log(1/frcpa(1+93/256))= +3.11399e-001 +data8 0x3fd419b423d5e8c0, 0x3cbc86dd921c139d // log(1/frcpa(1+94/256))= +3.14069e-001 +data8 0x3fd44591e0539f48, 0x3c86a76d6dc2782e // log(1/frcpa(1+95/256))= +3.16746e-001 +data8 0x3fd47c9175b6f0a8, 0x3cb59a2e013c6b5f // log(1/frcpa(1+96/256))= +3.20103e-001 +data8 0x3fd4a8b341552b08, 0x3c93f1e86e468694 // log(1/frcpa(1+97/256))= +3.22797e-001 +data8 0x3fd4d4f390890198, 0x3cbf5e4ea7c5105a // log(1/frcpa(1+98/256))= +3.25498e-001 +data8 0x3fd501528da1f960, 0x3cbf58da53e9ad10 // log(1/frcpa(1+99/256))= +3.28206e-001 +data8 0x3fd52dd06347d4f0, 0x3cb98a28cebf6eef // log(1/frcpa(1+100/256))= +3.30921e-001 +data8 0x3fd55a6d3c7b8a88, 0x3c9c76b67c2d1fd4 // log(1/frcpa(1+101/256))= +3.33644e-001 +data8 0x3fd5925d2b112a58, 0x3c9029616a4331b8 // log(1/frcpa(1+102/256))= +3.37058e-001 +data8 0x3fd5bf406b543db0, 0x3c9fb8292ecfc820 // log(1/frcpa(1+103/256))= +3.39798e-001 +data8 0x3fd5ec433d5c35a8, 0x3cb71a1229d17eec // log(1/frcpa(1+104/256))= +3.42545e-001 +data8 0x3fd61965cdb02c18, 0x3cbba94fe1dbb8d2 // log(1/frcpa(1+105/256))= +3.45300e-001 +data8 0x3fd646a84935b2a0, 0x3c9ee496d2c9ae57 // log(1/frcpa(1+106/256))= +3.48063e-001 +data8 0x3fd6740add31de90, 0x3cb1da3a6c7a9dfd // log(1/frcpa(1+107/256))= +3.50833e-001 +data8 0x3fd6a18db74a58c0, 0x3cb494c257add8dc // log(1/frcpa(1+108/256))= +3.53610e-001 +data8 0x3fd6cf31058670e8, 0x3cb0b244a70a8da9 // log(1/frcpa(1+109/256))= +3.56396e-001 +data8 0x3fd6f180e852f0b8, 0x3c9db7aefa866720 // log(1/frcpa(1+110/256))= +3.58490e-001 +data8 0x3fd71f5d71b894e8, 0x3cbe91c4bf324957 // log(1/frcpa(1+111/256))= +3.61289e-001 +data8 0x3fd74d5aefd66d58, 0x3cb06b3d9bfac023 // log(1/frcpa(1+112/256))= +3.64096e-001 +data8 0x3fd77b79922bd378, 0x3cb727d8804491f4 // log(1/frcpa(1+113/256))= +3.66911e-001 +data8 0x3fd7a9b9889f19e0, 0x3ca2ef22df5bc543 // log(1/frcpa(1+114/256))= +3.69734e-001 +data8 0x3fd7d81b037eb6a0, 0x3cb8fd3ba07a7ece // log(1/frcpa(1+115/256))= +3.72565e-001 +data8 0x3fd8069e33827230, 0x3c8bd1e25866e61a // log(1/frcpa(1+116/256))= +3.75404e-001 +data8 0x3fd82996d3ef8bc8, 0x3ca5aab9f5928928 // log(1/frcpa(1+117/256))= +3.77538e-001 +data8 0x3fd85855776dcbf8, 0x3ca56f33337789d6 // log(1/frcpa(1+118/256))= +3.80391e-001 +data8 0x3fd8873658327cc8, 0x3cbb8ef0401db49d // log(1/frcpa(1+119/256))= +3.83253e-001 +data8 0x3fd8aa75973ab8c8, 0x3cbb9961f509a680 // log(1/frcpa(1+120/256))= +3.85404e-001 +data8 0x3fd8d992dc8824e0, 0x3cb220512a53732d // log(1/frcpa(1+121/256))= +3.88280e-001 +data8 0x3fd908d2ea7d9510, 0x3c985f0e513bfb5c // log(1/frcpa(1+122/256))= +3.91164e-001 +data8 0x3fd92c59e79c0e50, 0x3cb82e073fd30d63 // log(1/frcpa(1+123/256))= +3.93332e-001 +data8 0x3fd95bd750ee3ed0, 0x3ca4aa7cdb6dd8a8 // log(1/frcpa(1+124/256))= +3.96231e-001 +data8 0x3fd98b7811a3ee58, 0x3caa93a5b660893e // log(1/frcpa(1+125/256))= +3.99138e-001 +data8 0x3fd9af47f33d4068, 0x3cac294b3b3190ba // log(1/frcpa(1+126/256))= +4.01323e-001 +data8 0x3fd9df270c1914a0, 0x3cbe1a58fd0cd67e // log(1/frcpa(1+127/256))= +4.04245e-001 +data8 0x3fda0325ed14fda0, 0x3cb1efa7950fb57e // log(1/frcpa(1+128/256))= +4.06442e-001 +data8 0x3fda33440224fa78, 0x3c8915fe75e7d477 // log(1/frcpa(1+129/256))= +4.09379e-001 +data8 0x3fda57725e80c380, 0x3ca72bd1062b1b7f // log(1/frcpa(1+130/256))= +4.11587e-001 +data8 0x3fda87d0165dd198, 0x3c91f7845f58dbad // log(1/frcpa(1+131/256))= +4.14539e-001 +data8 0x3fdaac2e6c03f890, 0x3cb6f237a911c509 // log(1/frcpa(1+132/256))= +4.16759e-001 +data8 0x3fdadccc6fdf6a80, 0x3c90ddc4b7687169 // log(1/frcpa(1+133/256))= +4.19726e-001 +data8 0x3fdb015b3eb1e790, 0x3c692dd7d90e1e8e // log(1/frcpa(1+134/256))= +4.21958e-001 +data8 0x3fdb323a3a635948, 0x3c6f85655cbe14de // log(1/frcpa(1+135/256))= +4.24941e-001 +data8 0x3fdb56fa04462908, 0x3c95252d841994de // log(1/frcpa(1+136/256))= +4.27184e-001 +data8 0x3fdb881aa659bc90, 0x3caa53a745a3642f // log(1/frcpa(1+137/256))= +4.30182e-001 +data8 0x3fdbad0bef3db160, 0x3cb32f2540dcc16a // log(1/frcpa(1+138/256))= +4.32437e-001 +data8 0x3fdbd21297781c28, 0x3cbd8e891e106f1d // log(1/frcpa(1+139/256))= +4.34697e-001 +data8 0x3fdc039236f08818, 0x3c809435af522ba7 // log(1/frcpa(1+140/256))= +4.37718e-001 +data8 0x3fdc28cb1e4d32f8, 0x3cb3944752fbd81e // log(1/frcpa(1+141/256))= +4.39990e-001 +data8 0x3fdc4e19b84723c0, 0x3c9a465260cd3fe5 // log(1/frcpa(1+142/256))= +4.42267e-001 +data8 0x3fdc7ff9c74554c8, 0x3c92447d5b6ca369 // log(1/frcpa(1+143/256))= +4.45311e-001 +data8 0x3fdca57b64e9db00, 0x3cb44344a8a00c82 // log(1/frcpa(1+144/256))= +4.47600e-001 +data8 0x3fdccb130a5ceba8, 0x3cbefaddfb97b73f // log(1/frcpa(1+145/256))= +4.49895e-001 +data8 0x3fdcf0c0d18f3268, 0x3cbd3e7bfee57898 // log(1/frcpa(1+146/256))= +4.52194e-001 +data8 0x3fdd232075b5a200, 0x3c9222599987447c // log(1/frcpa(1+147/256))= +4.55269e-001 +data8 0x3fdd490246defa68, 0x3cabafe9a767a80d // log(1/frcpa(1+148/256))= +4.57581e-001 +data8 0x3fdd6efa918d25c8, 0x3cb58a2624e1c6fd // log(1/frcpa(1+149/256))= +4.59899e-001 +data8 0x3fdd9509707ae528, 0x3cbdc3babce578e7 // log(1/frcpa(1+150/256))= +4.62221e-001 +data8 0x3fddbb2efe92c550, 0x3cb0ac0943c434a4 // log(1/frcpa(1+151/256))= +4.64550e-001 +data8 0x3fddee2f3445e4a8, 0x3cbba9d07ce820e8 // log(1/frcpa(1+152/256))= +4.67663e-001 +data8 0x3fde148a1a2726c8, 0x3cb6537e3375b205 // log(1/frcpa(1+153/256))= +4.70004e-001 +data8 0x3fde3afc0a49ff38, 0x3cbfed5518dbc20e // log(1/frcpa(1+154/256))= +4.72350e-001 +data8 0x3fde6185206d5168, 0x3cb6572601f73d5c // log(1/frcpa(1+155/256))= +4.74702e-001 +data8 0x3fde882578823d50, 0x3c9b24abd4584d1a // log(1/frcpa(1+156/256))= +4.77060e-001 +data8 0x3fdeaedd2eac9908, 0x3cb0ceb5e4d2c8f7 // log(1/frcpa(1+157/256))= +4.79423e-001 +data8 0x3fded5ac5f436be0, 0x3ca72f21f1f5238e // log(1/frcpa(1+158/256))= +4.81792e-001 +data8 0x3fdefc9326d16ab8, 0x3c85081a1639a45c // log(1/frcpa(1+159/256))= +4.84166e-001 +data8 0x3fdf2391a21575f8, 0x3cbf11015bdd297a // log(1/frcpa(1+160/256))= +4.86546e-001 +data8 0x3fdf4aa7ee031928, 0x3cb3795bc052a2d1 // log(1/frcpa(1+161/256))= +4.88932e-001 +data8 0x3fdf71d627c30bb0, 0x3c35c61f0f5a88f3 // log(1/frcpa(1+162/256))= +4.91323e-001 +data8 0x3fdf991c6cb3b378, 0x3c97d99419be6028 // log(1/frcpa(1+163/256))= +4.93720e-001 +data8 0x3fdfc07ada69a908, 0x3cbfe9341ded70b1 // log(1/frcpa(1+164/256))= +4.96123e-001 +data8 0x3fdfe7f18eb03d38, 0x3cb85718a640c33f // log(1/frcpa(1+165/256))= +4.98532e-001 +data8 0x3fe007c053c5002c, 0x3cb3addc9c065f09 // log(1/frcpa(1+166/256))= +5.00946e-001 +data8 0x3fe01b942198a5a0, 0x3c9d5aa4c77da6ac // log(1/frcpa(1+167/256))= +5.03367e-001 +data8 0x3fe02f74400c64e8, 0x3cb5a0ee4450ef52 // log(1/frcpa(1+168/256))= +5.05793e-001 +data8 0x3fe04360be7603ac, 0x3c9dd00c35630fe0 // log(1/frcpa(1+169/256))= +5.08225e-001 +data8 0x3fe05759ac47fe30, 0x3cbd063e1f0bd82c // log(1/frcpa(1+170/256))= +5.10663e-001 +data8 0x3fe06b5f1911cf50, 0x3cae8da674af5289 // log(1/frcpa(1+171/256))= +5.13107e-001 +data8 0x3fe078bf0533c568, 0x3c62241edf5fd1f7 // log(1/frcpa(1+172/256))= +5.14740e-001 +data8 0x3fe08cd9687e7b0c, 0x3cb3007febcca227 // log(1/frcpa(1+173/256))= +5.17194e-001 +data8 0x3fe0a10074cf9018, 0x3ca496e84603816b // log(1/frcpa(1+174/256))= +5.19654e-001 +data8 0x3fe0b5343a234474, 0x3cb46098d14fc90a // log(1/frcpa(1+175/256))= +5.22120e-001 +data8 0x3fe0c974c89431cc, 0x3cac0a7cdcbb86c6 // log(1/frcpa(1+176/256))= +5.24592e-001 +data8 0x3fe0ddc2305b9884, 0x3cb2f753210410ff // log(1/frcpa(1+177/256))= +5.27070e-001 +data8 0x3fe0eb524bafc918, 0x3c88affd6682229e // log(1/frcpa(1+178/256))= +5.28726e-001 +data8 0x3fe0ffb54213a474, 0x3cadeefbab9af993 // log(1/frcpa(1+179/256))= +5.31214e-001 +data8 0x3fe114253da97d9c, 0x3cbaf1c2b8bc160a // log(1/frcpa(1+180/256))= +5.33709e-001 +data8 0x3fe128a24f1d9afc, 0x3cb9cf4df375e650 // log(1/frcpa(1+181/256))= +5.36210e-001 +data8 0x3fe1365252bf0864, 0x3c985a621d4be111 // log(1/frcpa(1+182/256))= +5.37881e-001 +data8 0x3fe14ae558b4a92c, 0x3ca104c4aa8977d1 // log(1/frcpa(1+183/256))= +5.40393e-001 +data8 0x3fe15f85a19c7658, 0x3cbadf26e540f375 // log(1/frcpa(1+184/256))= +5.42910e-001 +data8 0x3fe16d4d38c119f8, 0x3cb3aea11caec416 // log(1/frcpa(1+185/256))= +5.44592e-001 +data8 0x3fe18203c20dd130, 0x3cba82d1211d1d6d // log(1/frcpa(1+186/256))= +5.47121e-001 +data8 0x3fe196c7bc4b1f38, 0x3cb6267acc4f4f4a // log(1/frcpa(1+187/256))= +5.49656e-001 +data8 0x3fe1a4a738b7a33c, 0x3c858930213c987d // log(1/frcpa(1+188/256))= +5.51349e-001 +data8 0x3fe1b981c0c9653c, 0x3c9bc2a4a30f697b // log(1/frcpa(1+189/256))= +5.53895e-001 +data8 0x3fe1ce69e8bb1068, 0x3cb7ae6199cf2a00 // log(1/frcpa(1+190/256))= +5.56447e-001 +data8 0x3fe1dc619de06944, 0x3c6b50bb38388177 // log(1/frcpa(1+191/256))= +5.58152e-001 +data8 0x3fe1f160a2ad0da0, 0x3cbd05b2778a5e1d // log(1/frcpa(1+192/256))= +5.60715e-001 +data8 0x3fe2066d7740737c, 0x3cb32e828f9c6bd6 // log(1/frcpa(1+193/256))= +5.63285e-001 +data8 0x3fe2147dba47a390, 0x3cbd579851b8b672 // log(1/frcpa(1+194/256))= +5.65001e-001 +data8 0x3fe229a1bc5ebac0, 0x3cbb321be5237ce8 // log(1/frcpa(1+195/256))= +5.67582e-001 +data8 0x3fe237c1841a502c, 0x3cb3b56e0915ea64 // log(1/frcpa(1+196/256))= +5.69306e-001 +data8 0x3fe24cfce6f80d98, 0x3cb34a4d1a422919 // log(1/frcpa(1+197/256))= +5.71898e-001 +data8 0x3fe25b2c55cd5760, 0x3cb237401ea5015e // log(1/frcpa(1+198/256))= +5.73630e-001 +data8 0x3fe2707f4d5f7c40, 0x3c9d30f20acc8341 // log(1/frcpa(1+199/256))= +5.76233e-001 +data8 0x3fe285e0842ca380, 0x3cbc4d866d5f21c0 // log(1/frcpa(1+200/256))= +5.78842e-001 +data8 0x3fe294294708b770, 0x3cb85e14d5dc54fa // log(1/frcpa(1+201/256))= +5.80586e-001 +data8 0x3fe2a9a2670aff0c, 0x3c7e6f8f468bbf91 // log(1/frcpa(1+202/256))= +5.83207e-001 +data8 0x3fe2b7fb2c8d1cc0, 0x3c930ffcf63c8b65 // log(1/frcpa(1+203/256))= +5.84959e-001 +data8 0x3fe2c65a6395f5f4, 0x3ca0afe20b53d2d2 // log(1/frcpa(1+204/256))= +5.86713e-001 +data8 0x3fe2dbf557b0df40, 0x3cb646be1188fbc9 // log(1/frcpa(1+205/256))= +5.89350e-001 +data8 0x3fe2ea64c3f97654, 0x3c96516fa8df33b2 // log(1/frcpa(1+206/256))= +5.91113e-001 +data8 0x3fe3001823684d70, 0x3cb96d64e16d1360 // log(1/frcpa(1+207/256))= +5.93762e-001 +data8 0x3fe30e97e9a8b5cc, 0x3c98ef96bc97cca0 // log(1/frcpa(1+208/256))= +5.95531e-001 +data8 0x3fe32463ebdd34e8, 0x3caef1dc9a56c1bf // log(1/frcpa(1+209/256))= +5.98192e-001 +data8 0x3fe332f4314ad794, 0x3caa4f0ac5d5fa11 // log(1/frcpa(1+210/256))= +5.99970e-001 +data8 0x3fe348d90e7464cc, 0x3cbe7889f0516acd // log(1/frcpa(1+211/256))= +6.02643e-001 +data8 0x3fe35779f8c43d6c, 0x3ca96bbab7245411 // log(1/frcpa(1+212/256))= +6.04428e-001 +data8 0x3fe36621961a6a98, 0x3ca31f32262db9fb // log(1/frcpa(1+213/256))= +6.06217e-001 +data8 0x3fe37c299f3c3668, 0x3cb15c72c107ee29 // log(1/frcpa(1+214/256))= +6.08907e-001 +data8 0x3fe38ae2171976e4, 0x3cba42a2554b2dd4 // log(1/frcpa(1+215/256))= +6.10704e-001 +data8 0x3fe399a157a603e4, 0x3cb99c62286d8919 // log(1/frcpa(1+216/256))= +6.12504e-001 +data8 0x3fe3afccfe77b9d0, 0x3ca11048f96a43bd // log(1/frcpa(1+217/256))= +6.15210e-001 +data8 0x3fe3be9d503533b4, 0x3ca4022f47588c3e // log(1/frcpa(1+218/256))= +6.17018e-001 +data8 0x3fe3cd7480b4a8a0, 0x3cb4ba7afc2dc56a // log(1/frcpa(1+219/256))= +6.18830e-001 +data8 0x3fe3e3c43918f76c, 0x3c859673d064b8ba // log(1/frcpa(1+220/256))= +6.21554e-001 +data8 0x3fe3f2acb27ed6c4, 0x3cb55c6b452a16a8 // log(1/frcpa(1+221/256))= +6.23373e-001 +data8 0x3fe4019c2125ca90, 0x3cb8c367879c5a31 // log(1/frcpa(1+222/256))= +6.25197e-001 +data8 0x3fe4181061389720, 0x3cb2c17a79c5cc6c // log(1/frcpa(1+223/256))= +6.27937e-001 +data8 0x3fe42711518df544, 0x3ca5f38d47012fc5 // log(1/frcpa(1+224/256))= +6.29769e-001 +data8 0x3fe436194e12b6bc, 0x3cb9854d65a9b426 // log(1/frcpa(1+225/256))= +6.31604e-001 +data8 0x3fe445285d68ea68, 0x3ca3ff9b3a81cd81 // log(1/frcpa(1+226/256))= +6.33442e-001 +data8 0x3fe45bcc464c8938, 0x3cb0a2d8011a6c05 // log(1/frcpa(1+227/256))= +6.36206e-001 +data8 0x3fe46aed21f117fc, 0x3c8a2be41f8e9f3d // log(1/frcpa(1+228/256))= +6.38053e-001 +data8 0x3fe47a1527e8a2d0, 0x3cba4a83594fab09 // log(1/frcpa(1+229/256))= +6.39903e-001 +data8 0x3fe489445efffcc8, 0x3cbf306a23dcbcde // log(1/frcpa(1+230/256))= +6.41756e-001 +data8 0x3fe4a018bcb69834, 0x3ca46c9285029fd1 // log(1/frcpa(1+231/256))= +6.44543e-001 +data8 0x3fe4af5a0c9d65d4, 0x3cbbc1db897580e3 // log(1/frcpa(1+232/256))= +6.46405e-001 +data8 0x3fe4bea2a5bdbe84, 0x3cb84d880d7ef775 // log(1/frcpa(1+233/256))= +6.48271e-001 +data8 0x3fe4cdf28f10ac44, 0x3cb3ec4b7893ce1f // log(1/frcpa(1+234/256))= +6.50140e-001 +data8 0x3fe4dd49cf994058, 0x3c897224d59d3408 // log(1/frcpa(1+235/256))= +6.52013e-001 +data8 0x3fe4eca86e64a680, 0x3cbccf620f24f0cd // log(1/frcpa(1+236/256))= +6.53889e-001 +data8 0x3fe503c43cd8eb68, 0x3c3f872c65971084 // log(1/frcpa(1+237/256))= +6.56710e-001 +data8 0x3fe513356667fc54, 0x3cb9ca64cc3d52c8 // log(1/frcpa(1+238/256))= +6.58595e-001 +data8 0x3fe522ae0738a3d4, 0x3cbe708164c75968 // log(1/frcpa(1+239/256))= +6.60483e-001 +data8 0x3fe5322e26867854, 0x3cb9988ba4aea615 // log(1/frcpa(1+240/256))= +6.62376e-001 +data8 0x3fe541b5cb979808, 0x3ca1662e3a6b95f5 // log(1/frcpa(1+241/256))= +6.64271e-001 +data8 0x3fe55144fdbcbd60, 0x3cb3acd4ca45c1e0 // log(1/frcpa(1+242/256))= +6.66171e-001 +data8 0x3fe560dbc45153c4, 0x3cb4988947959fed // log(1/frcpa(1+243/256))= +6.68074e-001 +data8 0x3fe5707a26bb8c64, 0x3cb3017fe6607ba9 // log(1/frcpa(1+244/256))= +6.69980e-001 +data8 0x3fe587f60ed5b8fc, 0x3cbe7a3266366ed4 // log(1/frcpa(1+245/256))= +6.72847e-001 +data8 0x3fe597a7977c8f30, 0x3ca1e12b9959a90e // log(1/frcpa(1+246/256))= +6.74763e-001 +data8 0x3fe5a760d634bb88, 0x3cb7c365e53d9602 // log(1/frcpa(1+247/256))= +6.76682e-001 +data8 0x3fe5b721d295f10c, 0x3cb716c2551ccbf0 // log(1/frcpa(1+248/256))= +6.78605e-001 +data8 0x3fe5c6ea94431ef8, 0x3ca02b2ed0e28261 // log(1/frcpa(1+249/256))= +6.80532e-001 +data8 0x3fe5d6bb22ea86f4, 0x3caf43a8bbb2f974 // log(1/frcpa(1+250/256))= +6.82462e-001 +data8 0x3fe5e6938645d38c, 0x3cbcedc98821b333 // log(1/frcpa(1+251/256))= +6.84397e-001 +data8 0x3fe5f673c61a2ed0, 0x3caa385eef5f2789 // log(1/frcpa(1+252/256))= +6.86335e-001 +data8 0x3fe6065bea385924, 0x3cb11624f165c5b4 // log(1/frcpa(1+253/256))= +6.88276e-001 +data8 0x3fe6164bfa7cc068, 0x3cbad884f87073fa // log(1/frcpa(1+254/256))= +6.90222e-001 +data8 0x3fe62643fecf9740, 0x3cb78c51da12f4df // log(1/frcpa(1+255/256))= +6.92171e-001 +ASM_SIZE_DIRECTIVE(pow_Tt) + + +// Table 1 is 2^(index_1/128) where +// index_1 goes from 0 to 15 +pow_tbl1: +ASM_TYPE_DIRECTIVE(pow_tbl1,@object) +data8 0x8000000000000000 , 0x00003FFF +data8 0x80B1ED4FD999AB6C , 0x00003FFF +data8 0x8164D1F3BC030773 , 0x00003FFF +data8 0x8218AF4373FC25EC , 0x00003FFF +data8 0x82CD8698AC2BA1D7 , 0x00003FFF +data8 0x8383594EEFB6EE37 , 0x00003FFF +data8 0x843A28C3ACDE4046 , 0x00003FFF +data8 0x84F1F656379C1A29 , 0x00003FFF +data8 0x85AAC367CC487B15 , 0x00003FFF +data8 0x8664915B923FBA04 , 0x00003FFF +data8 0x871F61969E8D1010 , 0x00003FFF +data8 0x87DB357FF698D792 , 0x00003FFF +data8 0x88980E8092DA8527 , 0x00003FFF +data8 0x8955EE03618E5FDD , 0x00003FFF +data8 0x8A14D575496EFD9A , 0x00003FFF +data8 0x8AD4C6452C728924 , 0x00003FFF +ASM_SIZE_DIRECTIVE(pow_tbl1) + + +// Table 2 is 2^(index_1/8) where +// index_2 goes from 0 to 7 +pow_tbl2: +ASM_TYPE_DIRECTIVE(pow_tbl2,@object) +data8 0x8000000000000000 , 0x00003FFF +data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF +data8 0x9837F0518DB8A96F , 0x00003FFF +data8 0xA5FED6A9B15138EA , 0x00003FFF +data8 0xB504F333F9DE6484 , 0x00003FFF +data8 0xC5672A115506DADD , 0x00003FFF +data8 0xD744FCCAD69D6AF4 , 0x00003FFF +data8 0xEAC0C6E7DD24392F , 0x00003FFF +ASM_SIZE_DIRECTIVE(pow_tbl2) + +.global pow + +.section .text +.proc pow +.align 32 + +pow: + +{ .mfi + alloc r32=ar.pfs,1,35,4,0 + fms.s1 POW_Xm1 = f8,f1,f1 // Will be used for r1 if x>0 + mov pow_GR_17ones = 0x1FFFF +} +{ .mfi +(p0) addl pow_AD_P = @ltoff(pow_table_P), gp + fma.s1 POW_Xp1 = f8,f1,f1 // Will be used for r1 if x<0 + nop.i 999 +;; +} + + +// Get exponent of x. Will be used to calculate K. +{ .mfi + getf.exp pow_GR_signexp_X = f8 + frcpa.s1 POW_B, p6 = f1,f8 + nop.i 999 +} +{ .mfi + ld8 pow_AD_P = [pow_AD_P] + fma.s1 POW_NORM_X = f8,f1,f0 + mov pow_GR_FFF7 = 0xFFF7 +} +;; + + + +// Get significand of x. Will be used to get index to fetch T, Tt. +// p13 = TRUE ==> X is unorm +// DOUBLE 0x10033 exponent limit at which y is an integer +// SINGLE 0x10016 +{ .mfi + getf.sig pow_GR_sig_X = f8 + fclass.m p13,p0 = f8, 0x0b // Test for x unorm + addl pow_GR_10033 = 0x10033, r0 +} +{ .mfi + mov pow_GR_16ones = 0xFFFF + fma.s1 POW_NORM_Y = f9,f1,f0 + nop.i 999 +} +;; + + +// p14 = TRUE ==> X is ZERO +{ .mfi + adds pow_AD_Tt = pow_Tt - pow_table_P, pow_AD_P + fclass.m p14,p15 = f8, 0x07 + and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones +} +{ .mfi + adds pow_AD_Q = pow_table_Q - pow_table_P, pow_AD_P + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + ldfe POW_P5 = [pow_AD_P], 16 + fcmp.lt.s1 p8,p9 = f8, f0 // Test for x<0 + shl pow_GR_offset = pow_GR_sig_X, 1 +} +{ .mib + ldfe POW_P4 = [pow_AD_Q], 16 + sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones +(p13) br.cond.spnt L(POW_X_DENORM) +} +;; + + +// Continue normal and denormal paths here +L(POW_COMMON): +// p11 = TRUE ==> Y is a NAN +{ .mfi + ldfe POW_P3 = [pow_AD_P], 16 + fclass.m.unc p11,p0 = f9, 0xc3 + shr.u pow_GR_offset = pow_GR_offset,56 +} +{ .mfi + ldfe POW_P2 = [pow_AD_Q], 16 + nop.f 999 + nop.i 999 +} +;; + + + +// Compute xsq to decide later if |x|=1 +// p11 = TRUE ==> Y is a NaN +{ .mfi + setf.sig POW_int_K = pow_GR_true_exp_X +(p15) fms.s1 POW_r = POW_B, POW_NORM_X,f1 + shladd pow_AD_Tt = pow_GR_offset, 4, pow_AD_Tt +} +{ .mfi + nop.m 999 +(p8) fnma.s1 POW_Xm1 = POW_Xp1,f1,f0 + nop.i 999 +} +;; + + + +// p12 = TRUE ==> X is ZERO and Y is ZERO +{ .mfi + ldfe POW_P1 = [pow_AD_P], 16 +(p14) fclass.m.unc p12,p0 = f9, 0x07 + nop.i 999 +} +{ .mfb + ldfe POW_P0 = [pow_AD_Q], 16 + fma.s1 POW_xsq = POW_NORM_X, POW_NORM_X, f0 +(p11) br.cond.spnt L(POW_Y_NAN) +} +;; + + +.pred.rel "mutex",p8,p9 +// Get exponent of |x|-1 to use in comparison to 2^-8 +{ .mmf +(p8) getf.exp pow_GR_signexp_Xm1 = POW_Xp1 +(p9) getf.exp pow_GR_signexp_Xm1 = POW_Xm1 + fcvt.fx.s1 POW_int_Y = POW_NORM_Y +} +;; + + +// p11 = TRUE ==> X is a NAN +{ .mfi + ldfpd POW_log2_hi, POW_log2_lo = [pow_AD_Q], 16 + fclass.m.unc p11,p0 = f8, 0xc3 + nop.i 999 +} +{ .mib + ldfpd POW_T, POW_Tt = [pow_AD_Tt], 16 + nop.i 999 +(p12) br.cond.spnt L(POW_X_0_Y_0) +} +;; + + +// p14 = TRUE ==> X is zero +// p15 = TRUE ==> X is zero AND Y is negative +// p10 = TRUE ==> X is zero AND Y is >= zero +{ .mfi + ldfe POW_inv_log2_by_128 = [pow_AD_P], 16 +(p14) fcmp.lt.unc.s1 p15, p10 = f9,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + nop.f 999 + and pow_GR_exp_Xm1 = pow_GR_signexp_Xm1, pow_GR_17ones +} +;; + + +// Determine if we will use the |x| near 1 path (p6) or normal path (p7) +// p12 = TRUE ==> X is a NAN and Y is a zero +// p13 = TRUE ==> X is a NAN and Y is anything else +{ .mfi + getf.exp pow_GR_signexp_Y = POW_NORM_Y +(p11) fclass.m.unc p12,p13 = f9, 0x07 + cmp.lt.unc p6,p7 = pow_GR_exp_Xm1, pow_GR_FFF7 +} +{ .mfi + ldfpd POW_Q2, POW_Q3 = [pow_AD_P], 16 + fma.s1 POW_rsq = POW_r, POW_r,f0 + nop.i 999 +;; +} + +// If on the x near 1 path, assign r1 to r and r1*r1 to rsq +{ .mfi + ldfpd POW_Q0_half, POW_Q1 = [pow_AD_P], 16 +(p6) fma.s1 POW_r = POW_r1, f1, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fma.s1 POW_rsq = POW_r1, POW_r1, f0 + nop.i 999 +;; +} + + +{ .mfi + ldfpd POW_Q4, POW_RSHF = [pow_AD_P], 16 +(p7) fma.s1 POW_v6 = POW_r, POW_P5, POW_P4 + and pow_GR_exp_Y = pow_GR_signexp_Y, pow_GR_17ones +} +{ .mfb + nop.m 999 +(p6) fma.s1 POW_v6 = POW_r1, POW_P5, POW_P4 +(p12) br.cond.spnt L(POW_X_NAN_Y_0) +} +;; + + +{ .mfi + nop.m 999 +(p7) fma.s1 POW_v4 = POW_P3, POW_r, POW_P2 + andcm pow_GR_sign_Y = pow_GR_signexp_Y, pow_GR_17ones +} +{ .mfb + nop.m 999 +(p6) fma.s1 POW_v4 = POW_P3, POW_r1, POW_P2 +(p12) br.cond.spnt L(POW_X_NAN_Y_0) +} +;; + +{ .mfi + nop.m 999 + fcvt.xf POW_K = POW_int_K + nop.i 999 +} +{ .mfb + nop.m 999 +(p13) fma.d f8 = f8,f1,f0 +(p13) br.ret.spnt b0 // Exit if x nan, y anything but zero +} +;; + +// p10 = TRUE ==> X is zero AND Y is positive +// p8 = TRUE ==> X is zero AND Y is outside integer range (treat as even int) +// return +0 +// p9 = TRUE ==> X is zero AND Y is within integer range (may not be integer) +{ .mfi +(p10) cmp.gt.unc p8,p9 = pow_GR_exp_Y, pow_GR_10033 +(p6) fmerge.s POW_delta = f0,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fma.s1 POW_G = f0,f0,f0 + nop.i 999 +} +;; + +{ .mfi + getf.sig pow_GR_sig_int_Y = POW_int_Y + fnma.s1 POW_twoV = POW_NORM_Y, POW_rsq,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_U = POW_NORM_Y,POW_r,f0 + nop.i 999 +} +;; + +{ .mfi + ldfe POW_log2_by_128_lo = [pow_AD_P], 16 +(p6) fma.s1 POW_v2 = POW_P1, POW_r1, POW_P0 + nop.i 999 +} +{ .mfi + ldfe POW_log2_by_128_hi = [pow_AD_Q], 16 +(p7) fma.s1 POW_v2 = POW_P1, POW_r, POW_P0 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fcvt.xf POW_float_int_Y = POW_int_Y + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_v3 = POW_v6, POW_rsq, POW_v4 + adds pow_AD_tbl1 = pow_tbl1 - pow_Tt, pow_AD_Q +} +;; + +{ .mfi + nop.m 999 +(p7) fma.s1 POW_delta = POW_K, POW_log2_lo, POW_Tt + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 POW_G = POW_K, POW_log2_hi, POW_T + adds pow_AD_tbl2 = pow_tbl2 - pow_tbl1, pow_AD_tbl1 +} +;; + + +{ .mfi + nop.m 999 + fms.s1 POW_e2 = POW_NORM_Y, POW_r, POW_U + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_Z2 = POW_twoV, POW_Q0_half, POW_U + nop.i 999 +} +;; + +// p11 = TRUE ==> X is NEGATIVE +// p8 = TRUE ==> X is zero AND Y is outside intger range (treat as even int) +// return +0 +{ .mfi + nop.m 999 + fclass.m.unc p11,p0 = f8, 0x1a + nop.i 999 +} +{ .mfb + nop.m 999 +(p8) fma.d f8 = f0,f0,f0 +(p8) br.ret.spnt b0 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_Yrcub = POW_rsq, POW_U, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_p = POW_rsq, POW_v3, POW_v2 + nop.i 999 +} +;; + + +// p11 = TRUE ==> X is NEGATIVE +// p12 = TRUE ==> X is NEGATIVE AND Y already int +// p13 = TRUE ==> X is NEGATIVE AND Y possible int +{ .mfi + nop.m 999 + fma.s1 POW_Z1 = POW_NORM_Y, POW_G, f0 +(p11) cmp.ge.unc p12,p13 = pow_GR_exp_Y, pow_GR_10033 +} +{ .mfi + nop.m 999 + fma.s1 POW_e3 = POW_NORM_Y, POW_delta, f0 + nop.i 999 +} +;; + +// p9 = TRUE ==> X is zero AND Y is within integer range (may not be integer) +// p6 = TRUE ==> X is zero AND Y is an integer (may be even or odd) +// p7 = TRUE ==> X is zero AND Y is NOT an integer, return +0 +{ .mfi + nop.m 999 +(p9) fcmp.eq.unc.s1 p6,p7 = POW_float_int_Y, POW_NORM_Y + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_Gpr = POW_G, f1, POW_r + nop.i 999 +} +;; + +// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand +{ .mfi + nop.m 999 + fma.s1 POW_W2 = POW_Z2, POW_inv_log2_by_128, POW_RSHF + nop.i 999 +} +{ .mfi + nop.m 999 + fms.s1 POW_UmZ2 = POW_U, f1, POW_Z2 + nop.i 999 +} +;; + + +// If x=0 and y>0, test y and flag denormal +// p6 = TRUE ==> X is zero AND Y is an integer (may be even or odd) +// p8 = TRUE ==> X is zero AND Y is an odd integer +// p9 = TRUE ==> X is zero AND Y is an even integer +{ .mfi + nop.m 999 +(p10) fcmp.eq.s0 p15,p0 = f9,f0 +(p6) tbit.nz.unc p8,p9 = pow_GR_sig_int_Y,0 +} +{ .mfi + nop.m 999 + fma.s1 POW_Z3 = POW_p, POW_Yrcub, f0 + nop.i 999 +} +;; + +// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand +{ .mfi + nop.m 999 + fms.s1 POW_e1 = POW_NORM_Y, POW_G, POW_Z1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_W1 = POW_Z1, POW_inv_log2_by_128, POW_RSHF + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p7) fma.d f8 = f0,f0,f0 // Result +0 if x zero and y not integer + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 POW_Y_Gpr = POW_NORM_Y, POW_Gpr, f0 +(p8) br.ret.spnt b0 // Exit if x zero and y odd integer +} +;; + +// By subtracting RSHF we get rounded integer POW_N2float +// p15 = TRUE ==> X_0_Y_NEG +{ .mfi + nop.m 999 + fms.s1 POW_N2float = POW_W2, f1, POW_RSHF + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 POW_UmZ2pV = POW_twoV,POW_Q0_half,POW_UmZ2 +(p15) br.cond.spnt L(POW_X_0_Y_NEG) +} +;; + + + +{ .mfi + nop.m 999 + fma.s1 POW_Z3sq = POW_Z3, POW_Z3, f0 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 POW_v4 = POW_Z3, POW_Q3, POW_Q2 +(p7) br.ret.spnt b0 // Exit if x zero and y not an integer +} +;; + + + +// Extract rounded integer from rightmost significand of POW_W2 +// By subtracting RSHF we get rounded integer POW_N1float +{ .mfi + getf.sig pow_GR_int_W2 = POW_W2 + fms.s1 POW_N1float = POW_W1, f1, POW_RSHF + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_v2 = POW_Z3, POW_Q1, POW_Q0_half + nop.i 999 +} +;; + + + + +// p13 = TRUE ==> X is NEGATIVE AND Y possible int +// p10 = TRUE ==> X is NEG and Y is an int +// p12 = TRUE ==> X is NEG and Y is not an int +{ .mfi + nop.m 999 +(p13) fcmp.eq.unc.s1 p10,p12 = POW_float_int_Y, POW_NORM_Y + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fma.d f8 = f0,f0,f0 // Result +0 if x zero and y even integer +(p9) br.ret.spnt b0 // Exit if x zero and y even integer +} +;; + + +{ .mfi + nop.m 999 + fnma.s1 POW_s2 = POW_N2float, POW_log2_by_128_hi, POW_Z2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_e2 = POW_e2,f1,POW_UmZ2pV + nop.i 999 +} +;; + +// Extract rounded integer from rightmost significand of POW_W1 +// Test if x inf +{ .mfi + getf.sig pow_GR_int_W1 = POW_W1 + fclass.m.unc p15,p0 = POW_NORM_X, 0x23 + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 POW_f2 = POW_N2float, POW_log2_by_128_lo, f1 +(p12) br.cond.spnt L(POW_X_NEG_Y_NONINT) // Branch if x neg, y not integer +} +;; + +// p12 = TRUE ==> X is NEGATIVE AND Y is an odd integer +{ .mfi + getf.exp pow_GR_signexp_Y_Gpr = POW_Y_Gpr + fma.s1 POW_v3 = POW_Z3sq, POW_Q4, POW_v4 +(p10) tbit.nz.unc p12,p0 = pow_GR_sig_int_Y,0 +} +;; + + +{ .mfi + add pow_GR_int_N = pow_GR_int_W1, pow_GR_int_W2 + fnma.s1 POW_f1 = POW_N1float, POW_log2_by_128_lo, f1 + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 POW_s1 = POW_N1float, POW_log2_by_128_hi, POW_Z1 +(p15) br.cond.spnt L(POW_X_INF) +} +;; + + +// Test x and y and flag denormal +{ .mfi + and pow_GR_index1 = 0x0f, pow_GR_int_N + fcmp.eq.s0 p15,p0 = f8,f9 + shr r2 = pow_GR_int_N, 7 +} +{ .mfi + and pow_GR_exp_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones + nop.f 999 + and pow_GR_index2 = 0x70, pow_GR_int_N +} +;; + + + +{ .mfi + shladd pow_AD_T1 = pow_GR_index1, 4, pow_AD_tbl1 + fcmp.eq.s1 p7,p0 = POW_NORM_Y, f1 // Test for y=1.0 + sub pow_GR_true_exp_Y_Gpr = pow_GR_exp_Y_Gpr, pow_GR_16ones +} +{ .mfi + addl pow_int_GR_M = 0xFFFF, r2 + fma.s1 POW_e12 = POW_e1,f1,POW_e2 + add pow_AD_T2 = pow_AD_tbl2, pow_GR_index2 +} +;; + + +{ .mmi + ldfe POW_T1 = [pow_AD_T1],16 + setf.exp POW_2M = pow_int_GR_M + andcm pow_GR_sign_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones +} +;; + + +{ .mfb + ldfe POW_T2 = [pow_AD_T2],16 + fma.s1 POW_q = POW_Z3sq, POW_v3, POW_v2 +(p7) br.ret.spnt b0 // Early exit if y=1.0, result is x +} +;; + + +// double: p8 TRUE ==> |Y(G + r)| >= 10 +// single: p8 TRUE ==> |Y(G + r)| >= 7 + +// double +// -2^10 -2^9 2^9 2^10 +// -----+-----+----+ ... +-----+-----+----- +// p8 | p9 | p8 +// | | p10 | | +// single +// -2^7 -2^6 2^6 2^7 +// -----+-----+----+ ... +-----+-----+----- +// p8 | p9 | p8 +// | | p10 | | + + +{ .mfi +(p0) cmp.le.unc p8,p9 = 10, pow_GR_true_exp_Y_Gpr + fma.s1 POW_s = POW_s1, f1, POW_s2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_f12 = POW_f1, POW_f2,f0 + nop.i 999 +} +;; + + +{ .mfi + nop.f 999 +(p9) cmp.le.unc p0,p10 = 9, pow_GR_true_exp_Y_Gpr +} +;; + + + +{ .mfb + nop.m 999 + fma.s1 POW_e123 = POW_e12, f1, POW_e3 +(p8) br.cond.spnt L(POW_OVER_UNDER_X_NOT_INF) +} +;; + + +{ .mmf + fma.s1 POW_q = POW_Z3sq, POW_q, POW_Z3 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 POW_ssq = POW_s, POW_s, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_v4 = POW_s, POW_Q3, POW_Q2 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_v2 = POW_s, POW_Q1, POW_Q0_half + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_1ps = f1,f1,POW_s + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_f3 = POW_e123,f1,f1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_T1T2 = POW_T1, POW_T2, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_v3 = POW_ssq, POW_Q4, POW_v4 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_v21ps = POW_ssq, POW_v2, POW_1ps + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_s4 = POW_ssq, POW_ssq, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_f123 = POW_f12, POW_f3, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_A = POW_2M, POW_T1T2, f0 + nop.i 999 +} +;; + + + +{ .mfi + nop.m 999 +(p12) fmerge.s POW_f123 = f8,POW_f123 // if x neg, y odd int + nop.i 999 +} +{ .mfi + nop.m 999 +// fma.s1 POW_es = POW_ssq, POW_v3, POW_v2 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_es = POW_s4, POW_v3, POW_v21ps + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 POW_A = POW_A, POW_f123, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +// fma.s1 POW_es = POW_es, POW_ssq, POW_1ps + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 POW_A = POW_A, POW_es,f0 + nop.i 999 +} +;; + + + +{ .mfb + nop.m 999 +(p10) fma.d f8 = POW_A, POW_q, POW_A +(p10) br.ret.sptk b0 +} +;; + + + + + +// POSSIBLE_OVER_UNDER +// p6 = TRUE ==> Y negative + +{ .mfi + nop.m 999 + fmerge.s POW_abs_A = f0, POW_A + cmp.eq.unc p0,p6 = pow_GR_sign_Y, r0 +} +;; + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(POW_POSSIBLE_UNDER) +} +;; + +// POSSIBLE_OVER +// We got an answer. +// overflow is a possibility, not a certainty + + +// We define an overflow when the answer with +// WRE set +// user-defined rounding mode + +// double +// Largest double is 7FE (biased double) +// 7FE - 3FF + FFFF = 103FE +// Create + largest_double_plus_ulp +// Create - largest_double_plus_ulp +// Calculate answer with WRE set. + +// single +// Largest single is FE (biased double) +// FE - 7F + FFFF = 1007E +// Create + largest_single_plus_ulp +// Create - largest_single_plus_ulp +// Calculate answer with WRE set. + +// Cases when answer is ldn+1 are as follows: +// ldn ldn+1 +// --+----------|----------+------------ +// | +// +inf +inf -inf +// RN RN +// RZ + + +// Put in s2 (td set, wre set) +{ .mfi + mov pow_GR_gt_ln = 0x103ff + fsetc.s2 0x7F,0x42 + nop.i 999 +} +;; + + +{ .mfi + setf.exp POW_gt_pln = pow_GR_gt_ln + fma.d.s2 POW_wre_urm_f8 = POW_abs_A, POW_q, POW_abs_A + nop.i 999 ;; +} + +// Return s2 to default +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 +} +;; + + +// p7 = TRUE ==> yes, we have an overflow +{ .mfi + nop.m 999 + fcmp.ge.unc.s1 p7, p0 = POW_wre_urm_f8, POW_gt_pln + nop.i 999 +} +;; + + + +{ .mfb +(p7) mov pow_GR_tag = 24 + fma.d f8 = POW_A, POW_q, POW_A +(p7) br.cond.spnt __libm_error_region +} +{ .mfb + nop.m 999 + nop.f 999 +(p0) br.ret.sptk b0 +} +;; + + +L(POW_POSSIBLE_UNDER): +// We got an answer. input was < -2^9 but > -2^10 (double) +// We got an answer. input was < -2^6 but > -2^7 (float) +// underflow is a possibility, not a certainty + +// We define an underflow when the answer with +// ftz set +// is zero (tiny numbers become zero) +// Notice (from below) that if we have an unlimited exponent range, +// then there is an extra machine number E between the largest denormal and +// the smallest normal. +// So if with unbounded exponent we round to E or below, then we are +// tiny and underflow has occurred. +// But notice that you can be in a situation where we are tiny, namely +// rounded to E, but when the exponent is bounded we round to smallest +// normal. So the answer can be the smallest normal with underflow. +// E +// -----+--------------------+--------------------+----- +// | | | +// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe +// 0.1...11 2^-3ffe (biased, 1) +// largest dn smallest normal + + +// Put in s2 (td set, ftz set) +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x41 + nop.i 999 +} +;; + + + +{ .mfi + nop.m 999 + fma.d.s2 POW_ftz_urm_f8 = POW_A, POW_q, POW_A + nop.i 999 +} +;; + + +// Return s2 to default +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 +} +;; + + +// p7 = TRUE ==> yes, we have an underflow +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p7, p0 = POW_ftz_urm_f8, f0 + nop.i 999 +} +;; + + + + +{ .mfb +(p7) mov pow_GR_tag = 25 + fma.d f8 = POW_A, POW_q, POW_A +(p7) br.cond.spnt __libm_error_region +} +;; + + +{ .mfb + nop.m 999 + nop.f 999 + br.ret.sptk b0 +} +;; + + +L(POW_X_DENORM): +// Here if x unorm. Use the NORM_X for getf instructions, and the back +// to normal path +{ .mfi + getf.exp pow_GR_signexp_X = POW_NORM_X + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + getf.sig pow_GR_sig_X = POW_NORM_X + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones + nop.f 999 +} +;; + +{ .mib + sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones + shl pow_GR_offset = pow_GR_sig_X, 1 + br.cond.sptk L(POW_COMMON) +} +;; + + +L(POW_X_0_Y_0): +// When X is +-0 and Y is +-0, IEEE returns 1.0 +// We call error support with this value + +{ .mfb + mov pow_GR_tag = 26 + fma.d f8 = f1,f1,f0 + br.cond.sptk __libm_error_region +} +;; + + + + +L(POW_X_INF): +// When X is +-inf and Y is +-, IEEE returns + +// overflow +// X +inf Y +inf +inf +// X -inf Y +inf +inf + +// X +inf Y >0 +inf +// X -inf Y >0, !odd integer +inf <== (-inf)^0.5 = +inf !! +// X -inf Y >0, odd integer -inf + +// underflow +// X +inf Y -inf +0 +// X -inf Y -inf +0 + +// X +inf Y <0 +0 +// X -inf Y <0, !odd integer +0 +// X -inf Y <0, odd integer -0 + +// X + inf Y=+0 +1 +// X + inf Y=-0 +1 +// X - inf Y=+0 +1 +// X - inf Y=-0 +1 + +// p13 == Y negative +// p14 == Y positive + +// p6 == Y is a floating point number outside the integer. +// Hence it is an integer and is even. +// p13 == (Y negative) +// return +inf +// p14 == (Y positive) +// return +0 + + + +// p7 == Y is a floating point number within the integer range. +// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. +// p11 odd +// p13 == (Y negative) +// return (sign_of_x)inf +// p14 == (Y positive) +// return (sign_of_x)0 +// pxx even +// p13 == (Y negative) +// return +inf +// p14 == (Y positive) +// return +0 + +// pxx == Y is not an integer +// p13 == (Y negative) +// return +inf +// p14 == (Y positive) +// return +0 +// + +// If x=inf, test y and flag denormal +{ .mfi + nop.m 999 + fcmp.eq.s0 p10,p11 = f9,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fcmp.lt p13,p14 = POW_NORM_Y,f0 + cmp.gt.unc p6,p7 = pow_GR_exp_Y, pow_GR_10033 +} +{ .mfi + nop.m 999 + fclass.m p12,p0 = f9, 0x23 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fclass.m p15,p0 = f9, 0x07 //@zero + nop.i 999 +} +;; + +{ .mfb + nop.m 999 +(p15) fmerge.s f8 = f1,f1 +(p15) br.ret.spnt b0 +} +;; + + +{ .mfi +(p13) mov pow_GR_tag = 25 +(p14) frcpa.s1 f8,p10 = f1,f0 + nop.i 999 +} +{ .mfb +(p14) mov pow_GR_tag = 24 +(p13) fma.s1 f8 = f0,f0,f0 +(p12) br.ret.spnt b0 +} +;; + + + +{ .mfb + nop.m 999 +(p7) fcmp.eq.unc.s1 p9,p0 = POW_float_int_Y, POW_NORM_Y + nop.b 999 +} +;; + +{ .mfi + nop.m 999 + nop.f 999 +(p9) tbit.nz.unc p11,p0 = pow_GR_sig_int_Y,0 +} +;; + +{ .mfb + nop.m 999 +(p11) fmerge.s f8 = POW_NORM_X,f8 + br.ret.sptk b0 +} +;; + + + +L(POW_X_0_Y_NEG): +// When X is +-0 and Y is negative, IEEE returns +// X Y answer +// +0 -odd int +inf +// -0 -odd int -inf + +// +0 !-odd int +inf +// -0 !-odd int +inf + + +// p6 == Y is a floating point number outside the integer. +// Hence it is an integer and is even. +// return +inf + +// p7 == Y is a floating point number within the integer range. +// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. +// p11 odd +// return (sign_of_x)inf +// p12 even +// return +inf +// p10 == Y is not an integer +// return +inf +// +// + +{ .mfi + nop.m 999 + nop.f 999 + cmp.gt.unc p6,p7 = pow_GR_exp_Y, pow_GR_10033 +} +;; + + +{ .mfi + mov pow_GR_tag = 27 +(p7) fcmp.eq.unc.s1 p9,p10 = POW_float_int_Y, POW_NORM_Y + nop.i 999 +} +;; + + +{ .mfb + nop.m 999 +(p6) frcpa.s0 f8,p13 = f1, f0 +(p6) br.cond.sptk __libm_error_region +} +;; + +{ .mfb + nop.m 999 +(p10) frcpa.s0 f8,p13 = f1, f0 +(p10) br.cond.sptk __libm_error_region +} +;; + + + +{ .mib + nop.m 999 +(p9) tbit.nz.unc p11,p12 = pow_GR_sig_int_Y,0 + nop.b 999 +} +;; + + + +{ .mfi + nop.m 999 +(p12) frcpa.s0 f8,p13 = f1,f0 + nop.i 999 +} +;; + +{ .mfb + nop.m 999 +(p11) frcpa f8,p13 = f1,f8 + br.cond.sptk __libm_error_region +} +;; + + + + +L(POW_X_NEG_Y_NONINT): +// When X is negative and Y is a non-integer, IEEE +// returns a qnan indefinite. +// We call error support with this value + +{ .mfb + mov pow_GR_tag = 28 + frcpa f8,p6 = f0,f0 + br.cond.sptk __libm_error_region +} +;; + + + + +L(POW_X_NAN_Y_0): +// When X is a NAN and Y is zero, IEEE returns 1. +// We call error support with this value. + +{ .mfi + nop.m 0 + fma.d.s0 f10 = f8,f1,f0 + nop.i 0 +} +{ .mfb + mov pow_GR_tag = 29 + fma.d.s0 f8 = f0,f0,f1 + br.cond.sptk __libm_error_region +} +;; + + +L(POW_OVER_UNDER_X_NOT_INF): + +// p8 is TRUE for overflow +// p9 is TRUE for underflow + +// if y is infinity, we should not over/underflow + + +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p14, p13 = POW_xsq,f1 + cmp.eq.unc p8,p9 = pow_GR_sign_Y_Gpr, r0 +} +;; + +{ .mfi + nop.m 999 +(p14) fclass.m.unc p15, p0 = f9, 0x23 + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fclass.m.unc p11,p0 = f9, 0x23 + nop.i 999 +} +;; + +// p15 = TRUE if |x|=1, y=inf, return +1 +{ .mfb + nop.m 999 +(p15) fma.d f8 = f1,f1,f0 +(p15) br.ret.spnt b0 +} +;; + +.pred.rel "mutex",p8,p9 +{ .mfb +(p8) setf.exp f8 = pow_GR_17ones +(p9) fmerge.s f8 = f0,f0 +(p11) br.ret.sptk b0 +} + +{ .mfb + nop.m 999 + nop.f 999 + br.cond.sptk L(POW_OVER_UNDER_ERROR) +} +;; + +L(POW_Y_NAN): + +// Is x = +1 then result is +1, else result is quiet Y +{ .mfi + nop.m 999 + fcmp.eq.s1 p10,p9 = POW_NORM_X, f1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p10) fcmp.eq.s0 p6,p0 = f9,f1 // Set invalid, even if x=+1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p10) fma.d f8 = f1,f1,f0 + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fma.d f8 = f9,f8,f0 + br.ret.sptk b0 +} +;; + + +L(POW_OVER_UNDER_ERROR): + +{ .mfi + nop.m 999 + fmerge.s f10 = POW_NORM_X,POW_NORM_X + nop.i 999 +} +{ .mfi + sub pow_GR_17ones_m1 = pow_GR_17ones, r0, 1 + nop.f 999 + mov pow_GR_one = 0x1 +} +;; + +// overflow +{ .mmb +(p8) mov pow_GR_tag = 24 +(p8) setf.exp f11 = pow_GR_17ones_m1 + nop.b 999 +} +;; + + +// underflow +{ .mmi +(p9) mov pow_GR_tag = 25 +(p9) setf.exp f11 = pow_GR_one + nop.i 999 +} +;; + + +// p12 x is negative and y is an odd integer + + +{ .mfi + nop.m 999 + fma.d f8 = f11, f11, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p12) fmerge.ns f8 = f8, f8 + nop.i 999 +} +;; + + +.endp pow +ASM_SIZE_DIRECTIVE(pow) + + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + + +.proc __libm_error_region +__libm_error_region: + +// Answer is inf for overflow and 0 for underflow. +.prologue +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = POW_NORM_Y,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = POW_NORM_X // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_powf.S glibc-2.2.3/sysdeps/ia64/fpu/e_powf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_powf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_powf.S Mon Feb 19 00:45:47 2001 @@ -0,0 +1,2309 @@ +.file "powf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/03/00 Added p12 to definite over/under path. With odd power we did not +// maintain the sign of x in this path. +// 4/04/00 Unwind support added +// 4/19/00 pow(+-1,inf) now returns NaN +// pow(+-val, +-inf) returns 0 or inf, but now does not call error support +// Added s1 to fcvt.fx because invalid flag was incorrectly set. +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 9/07/00 Improved performance by eliminating bank conflicts and other stalls, +// and tweaking the critical path +// 9/08/00 Per c99, pow(+-1,inf) now returns 1, and pow(+1,nan) returns 1 +// 9/28/00 Updated NaN**0 path +// 1/20/01 Fixed denormal flag settings. +// 2/12/01 Improved speed. +// +// API +//============================================================== +// double pow(double) +// float powf(float) +// +// Overview of operation +//============================================================== +// +// Three steps... +// 1. Log(x) +// 2. y Log(x) +// 3. exp(y log(x)) +// +// This means we work with the absolute value of x and merge in the sign later. +// Log(x) = G + delta + r -rsq/2 + p +// G,delta depend on the exponent of x and table entries. The table entries are +// indexed by the exponent of x, called K. +// +// The G and delta come out of the reduction; r is the reduced x. +// +// B = frcpa(x) +// xB-1 is small means that B is the approximate inverse of x. +// +// Log(x) = Log( (1/B)(Bx) ) +// = Log(1/B) + Log(Bx) +// = Log(1/B) + Log( 1 + (Bx-1)) +// +// x = 2^K 1.x_1x_2.....x_52 +// B= frcpa(x) = 2^-k Cm +// Log(1/B) = Log(1/(2^-K Cm)) +// Log(1/B) = Log((2^K/ Cm)) +// Log(1/B) = K Log(2) + Log(1/Cm) +// +// Log(x) = K Log(2) + Log(1/Cm) + Log( 1 + (Bx-1)) +// +// If you take the significand of x, set the exponent to true 0, then Cm is +// the frcpa. We tabulate the Log(1/Cm) values. There are 256 of them. +// The frcpa table is indexed by 8 bits, the x_1 thru x_8. +// m = x_1x_2...x_8 is an 8-bit index. +// +// Log(1/Cm) = log(1/frcpa(1+m/256)) where m goes from 0 to 255. +// +// We tabluate as two doubles, T and t, where T +t is the value itself. +// +// Log(x) = (K Log(2)_hi + T) + (Log(2)_hi + t) + Log( 1 + (Bx-1)) +// Log(x) = G + delta + Log( 1 + (Bx-1)) +// +// The Log( 1 + (Bx-1)) can be calculated as a series in r = Bx-1. +// +// Log( 1 + (Bx-1)) = r - rsq/2 + p +// +// Then, +// +// yLog(x) = yG + y delta + y(r-rsq/2) + yp +// yLog(x) = Z1 + e3 + Z2 + Z3 + (e2 + e3) +// +// +// exp(yLog(x)) = exp(Z1 + Z2 + Z3) exp(e1 + e2 + e3) +// +// +// exp(Z3) is another series. +// exp(e1 + e2 + e3) is approximated as f3 = 1 + (e1 + e2 + e3) +// +// Z1 (128/log2) = number of log2/128 in Z1 is N1 +// Z2 (128/log2) = number of log2/128 in Z2 is N2 +// +// s1 = Z1 - N1 log2/128 +// s2 = Z2 - N2 log2/128 +// +// s = s1 + s2 +// N = N1 + N2 +// +// exp(Z1 + Z2) = exp(Z) +// exp(Z) = exp(s) exp(N log2/128) +// +// exp(r) = exp(Z - N log2/128) +// +// r = s + d = (Z - N (log2/128)_hi) -N (log2/128)_lo +// = Z - N (log2/128) +// +// Z = s+d +N (log2/128) +// +// exp(Z) = exp(s) (1+d) exp(N log2/128) +// +// N = M 128 + n +// +// N log2/128 = M log2 + n log2/128 +// +// n is 8 binary digits = n_7n_6...n_1 +// +// n log2/128 = n_7n_6n_5 16 log2/128 + n_4n_3n_2n_1 log2/128 +// n log2/128 = n_7n_6n_5 log2/8 + n_4n_3n_2n_1 log2/128 +// n log2/128 = I2 log2/8 + I1 log2/128 +// +// N log2/128 = M log2 + I2 log2/8 + I1 log2/128 +// +// exp(Z) = exp(s) (1+d) exp(log(2^M) + log(2^I2/8) + log(2^I1/128)) +// exp(Z) = exp(s) (1+d1) (1+d2)(2^M) 2^I2/8 2^I1/128 +// exp(Z) = exp(s) f1 f2 (2^M) 2^I2/8 2^I1/128 +// +// I1, I2 are table indices. Use a series for exp(s). +// Then get exp(Z) +// +// exp(yLog(x)) = exp(Z1 + Z2 + Z3) exp(e1 + e2 + e3) +// exp(yLog(x)) = exp(Z) exp(Z3) f3 +// exp(yLog(x)) = exp(Z)f3 exp(Z3) +// exp(yLog(x)) = A exp(Z3) +// +// We actually calculate exp(Z3) -1. +// Then, +// exp(yLog(x)) = A + A( exp(Z3) -1) +// + +// Table Generation +//============================================================== + +// The log values +// ============== +// The operation (K*log2_hi) must be exact. K is the true exponent of x. +// If we allow gradual underflow (denormals), K can be represented in 12 bits +// (as a two's complement number). We assume 13 bits as an engineering precaution. +// +// +------------+----------------+-+ +// | 13 bits | 50 bits | | +// +------------+----------------+-+ +// 0 1 66 +// 2 34 +// +// So we want the lsb(log2_hi) to be 2^-50 +// We get log2 as a quad-extended (15-bit exponent, 128-bit significand) +// +// 0 fffe b17217f7d1cf79ab c9e3b39803f2f6af (4...) +// +// Consider numbering the bits left to right, starting at 0 thru 127. +// Bit 0 is the 2^-1 bit; bit 49 is the 2^-50 bit. +// +// ...79ab +// 0111 1001 1010 1011 +// 44 +// 89 +// +// So if we shift off the rightmost 14 bits, then (shift back only +// the top half) we get +// +// 0 fffe b17217f7d1cf4000 e6af278ece600fcb dabc000000000000 +// +// Put the right 64-bit signficand in an FR register, convert to double; +// it is exact. Put the next 128 bits into a quad register and round to double. +// The true exponent of the low part is -51. +// +// hi is 0 fffe b17217f7d1cf4000 +// lo is 0 ffcc e6af278ece601000 +// +// Convert to double memory format and get +// +// hi is 0x3fe62e42fefa39e8 +// lo is 0x3cccd5e4f1d9cc02 +// +// log2_hi + log2_lo is an accurate value for log2. +// +// +// The T and t values +// ================== +// A similar method is used to generate the T and t values. +// +// K * log2_hi + T must be exact. +// +// Smallest T,t +// ---------- +// The smallest T,t is +// T t +// data8 0x3f60040155d58800, 0x3c93bce0ce3ddd81 log(1/frcpa(1+0/256))= +1.95503e-003 +// +// The exponent is 0x3f6 (biased) or -9 (true). +// For the smallest T value, what we want is to clip the significand such that +// when it is shifted right by 9, its lsb is in the bit for 2^-51. The 9 is the specific +// for the first entry. In general, it is 0xffff - (biased 15-bit exponent). + +// Independently, what we have calculated is the table value as a quad precision number. +// Table entry 1 is +// 0 fff6 80200aaeac44ef38 338f77605fdf8000 +// +// We store this quad precision number in a data structure that is +// sign: 1 +// exponent: 15 +// signficand_hi: 64 (includes explicit bit) +// signficand_lo: 49 +// Because the explicit bit is included, the significand is 113 bits. +// +// Consider significand_hi for table entry 1. +// +// +// +-+--- ... -------+--------------------+ +// | | +// +-+--- ... -------+--------------------+ +// 0 1 4444444455555555556666 +// 2345678901234567890123 +// +// Labeled as above, bit 0 is 2^0, bit 1 is 2^-1, etc. +// Bit 42 is 2^-42. If we shift to the right by 9, the bit in +// bit 42 goes in 51. +// +// So what we want to do is shift bits 43 thru 63 into significand_lo. +// This is shifting bit 42 into bit 63, taking care to retain the shifted-off bits. +// Then shifting (just with signficaand_hi) back into bit 42. +// +// The shift_value is 63-42 = 21. In general, this is +// 63 - (51 -(0xffff - 0xfff6)) +// For this example, it is +// 63 - (51 - 9) = 63 - 42 = 21 +// +// This means we are shifting 21 bits into significand_lo. We must maintain more +// that a 128-bit signficand not to lose bits. So before the shift we put the 128-bit +// significand into a 256-bit signficand and then shift. +// The 256-bit significand has four parts: hh, hl, lh, and ll. +// +// Start off with +// hh hl lh ll +// <64> <49><15_0> <64_0> <64_0> +// +// After shift by 21 (then return for significand_hi), +// <43><21_0> <21><43> <6><58_0> <64_0> +// +// Take the hh part and convert to a double. There is no rounding here. +// The conversion is exact. The true exponent of the high part is the same as the +// true exponent of the input quad. +// +// We have some 64 plus significand bits for the low part. In this example, we have +// 70 bits. We want to round this to a double. Put them in a quad and then do a quad fnorm. +// For this example the true exponent of the low part is +// true_exponent_of_high - 43 = true_exponent_of_high - (64-21) +// In general, this is +// true_exponent_of_high - (64 - shift_value) +// +// +// Largest T,t +// ---------- +// The largest T,t is +// data8 0x3fe62643fecf9742, 0x3c9e3147684bd37d log(1/frcpa(1+255/256))= +6.92171e-001 +// +// Table entry 256 is +// 0 fffe b1321ff67cba178c 51da12f4df5a0000 +// +// The shift value is +// 63 - (51 -(0xffff - 0xfffe)) = 13 +// +// The true exponent of the low part is +// true_exponent_of_high - (64 - shift_value) +// -1 - (64-13) = -52 +// Biased as a double, this is 0x3cb +// +// +// +// So then lsb(T) must be >= 2^-51 +// msb(Klog2_hi) <= 2^12 +// +// +--------+---------+ +// | 51 bits | <== largest T +// +--------+---------+ +// | 9 bits | 42 bits | <== smallest T +// +------------+----------------+-+ +// | 13 bits | 50 bits | | +// +------------+----------------+-+ + + + +// Special Cases +//============================================================== + +// double float +// overflow error 24 30 + +// underflow error 25 31 + +// X zero Y zero +// +0 +0 +1 error 26 32 +// -0 +0 +1 error 26 32 +// +0 -0 +1 error 26 32 +// -0 -0 +1 error 26 32 + +// X zero Y negative +// +0 -odd integer +inf error 27 33 divide-by-zero +// -0 -odd integer -inf error 27 33 divide-by-zero +// +0 !-odd integer +inf error 27 33 divide-by-zero +// -0 !-odd integer +inf error 27 33 divide-by-zero +// +0 -inf +inf error 27 33 divide-by-zero +// -0 -inf +inf error 27 33 divide-by-zero + +// X zero Y positve +// +0 +odd integer +0 +// -0 +odd integer -0 +// +0 !+odd integer +0 +// -0 !+odd integer +0 +// +0 +inf +0 +// -0 +inf +0 +// +0 Y NaN quiet Y invalid if Y SNaN +// -0 Y NaN quiet Y invalid if Y SNaN + +// X one +// -1 Y inf +1 +// -1 Y NaN quiet Y invalid if Y SNaN +// +1 Y NaN +1 invalid if Y SNaN +// +1 Y any else +1 + +// X - Y not integer QNAN error 28 34 invalid + +// X NaN Y 0 +1 error 29 35 +// X NaN Y NaN quiet X invalid if X or Y SNaN +// X NaN Y any else quiet X invalid if X SNaN +// X !+1 Y NaN quiet Y invalid if Y SNaN + + +// X +inf Y >0 +inf +// X -inf Y >0, !odd integer +inf +// X -inf Y >0, odd integer -inf + +// X +inf Y <0 +0 +// X -inf Y <0, !odd integer +0 +// X -inf Y <0, odd integer -0 + +// X +inf Y =0 +1 +// X -inf Y =0 +1 + +// |X|<1 Y +inf +0 +// |X|<1 Y -inf +inf +// |X|>1 Y +inf +inf +// |X|>1 Y -inf +0 + +// X any Y =0 +1 + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +// integer registers used + +pow_AD_Tt = r33 +pow_GR_FFF7 = r34 +pow_GR_exp_Y = r34 // duplicate +pow_GR_17ones = r35 + +pow_AD_P = r36 +pow_AD_Q = r37 +pow_AD_tbl1 = r38 +pow_AD_tbl2 = r39 +pow_GR_exp_X = r40 +pow_GR_true_exp_X = r40 // duplicate + +pow_GR_offset = r41 +pow_GR_exp_Xm1 = r42 +pow_GR_sig_X = r43 +pow_GR_signexp_X = r44 + +pow_GR_signexp_Xm1 = r46 +pow_GR_int_W1 = r47 +pow_GR_int_W2 = r48 +pow_GR_int_N = r49 +pow_GR_index1 = r50 + +pow_GR_index2 = r51 +pow_AD_T1 = r52 +pow_AD_T2 = r53 +pow_GR_gt_ln = r53 // duplicate +pow_int_GR_M = r54 +pow_GR_10033 = r55 + +pow_GR_16ones = r56 +pow_GR_sig_int_Y = r57 +pow_GR_sign_Y_Gpr = r58 +pow_GR_17ones_m1 = r59 +pow_GR_one = r60 +pow_GR_sign_Y = r60 + +pow_GR_signexp_Y_Gpr = r61 +pow_GR_exp_Y_Gpr = r62 +pow_GR_true_exp_Y_Gpr = r63 +pow_GR_signexp_Y = r64 + +GR_SAVE_B0 = r65 +GR_SAVE_GP = r66 +GR_SAVE_PFS = r67 + +GR_Parameter_X = r68 +GR_Parameter_Y = r69 +GR_Parameter_RESULT = r70 +pow_GR_tag = r71 + + +// floating point registers used + +POW_B = f32 +POW_NORM_X = f33 +POW_Xm1 = f34 +POW_r1 = f34 +POW_P4 = f35 + +POW_P5 = f36 +POW_NORM_Y = f37 +POW_Q2 = f38 +POW_Q3 = f39 +POW_P2 = f40 + +POW_P3 = f41 +POW_P0 = f42 +POW_log2_lo = f43 +POW_r = f44 +POW_Q0_half = f45 + +POW_Q1 = f46 +POW_log2_hi = f48 +POW_Q4 = f49 +POW_P1 = f50 + +POW_log2_by_128_hi = f51 +POW_inv_log2_by_128 = f52 +POW_rsq = f53 +POW_Yrcub = f54 +POW_log2_by_128_lo = f55 + +POW_v6 = f56 +POW_v4 = f58 +POW_v2 = f59 +POW_T = f60 + +POW_Tt = f61 +POW_RSHF = f62 +POW_v21ps = f63 +POW_s4 = f64 + +POW_U = f66 +POW_G = f67 +POW_delta = f68 +POW_v3 = f69 +POW_V = f70 + +POW_p = f71 +POW_Z1 = f72 +POW_e3 = f73 +POW_e2 = f74 +POW_Z2 = f75 + +POW_e1 = f76 +POW_W1 = f77 +POW_UmZ2 = f78 +POW_W2 = f79 +POW_Z3 = f80 + +POW_int_W1 = f81 +POW_e12 = f82 +POW_int_W2 = f83 +POW_UmZ2pV = f84 +POW_Z3sq = f85 + +POW_e123 = f86 +POW_N1float = f87 +POW_N2float = f88 +POW_f3 = f89 +POW_q = f90 + +POW_s1 = f91 +POW_Nfloat = f92 +POW_s2 = f93 +POW_f2 = f94 +POW_f1 = f95 + +POW_T1 = f96 +POW_T2 = f97 +POW_2M = f98 +POW_s = f99 +POW_f12 = f100 + +POW_ssq = f101 +POW_T1T2 = f102 +POW_1ps = f103 +POW_A = f104 +POW_es = f105 + +POW_int_K = f107 +POW_K = f108 +POW_f123 = f109 +POW_Gpr = f110 + +POW_Y_Gpr = f111 +POW_int_Y = f112 + +POW_float_int_Y = f116 +POW_ftz_urm_f8 = f117 +POW_wre_urm_f8 = f118 +POW_abs_A = f119 +POW_gt_pln = f120 + +POW_xsq = f121 + +POW_twoV = f122 +POW_Xp1 = f123 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +pow_table_P: +ASM_TYPE_DIRECTIVE(pow_table_P,@object) +data8 0x8000F7B249FF332D, 0x0000BFFC // P_5 +data8 0xAAAAAAA9E7902C7F, 0x0000BFFC // P_3 +data8 0x80000000000018E5, 0x0000BFFD // P_1 +data8 0xb8aa3b295c17f0bc, 0x00004006 // inv_ln2_by_128 + + +data8 0x3FA5555555554A9E // Q_2 +data8 0x3F8111124F4DD9F9 // Q_3 +data8 0x3FE0000000000000 // Q_0 +data8 0x3FC5555555554733 // Q_1 +data8 0x3F56C16D9360FFA0 // Q_4 +data8 0x43e8000000000000 // Right shift constant for exp +data8 0xc9e3b39803f2f6af, 0x00003fb7 // ln2_by_128_lo +data8 0x0000000000000000 // pad to eliminate bank conflicts with pow_table_Q +data8 0x0000000000000000 // pad to eliminate bank conflicts with pow_table_Q +ASM_SIZE_DIRECTIVE(pow_table_P) + +pow_table_Q: +ASM_TYPE_DIRECTIVE(pow_table_Q,@object) +data8 0x9249FE7F0DC423CF, 0x00003FFC // P_4 +data8 0xCCCCCCCC4ED2BA7F, 0x00003FFC // P_2 +data8 0xAAAAAAAAAAAAB505, 0x00003FFD // P_0 +data8 0x3fe62e42fefa39e8, 0x3cccd5e4f1d9cc02 // log2 hi lo = +6.93147e-001 +data8 0xb17217f7d1cf79ab, 0x00003ff7 // ln2_by_128_hi +ASM_SIZE_DIRECTIVE(pow_table_Q) + + +pow_Tt: +ASM_TYPE_DIRECTIVE(pow_Tt,@object) +data8 0x3f60040155d58800, 0x3c93bce0ce3ddd81 // log(1/frcpa(1+0/256))= +1.95503e-003 +data8 0x3f78121214586a00, 0x3cb540e0a5cfc9bc // log(1/frcpa(1+1/256))= +5.87661e-003 +data8 0x3f841929f9683200, 0x3cbdf1d57404da1f // log(1/frcpa(1+2/256))= +9.81362e-003 +data8 0x3f8c317384c75f00, 0x3c69806208c04c22 // log(1/frcpa(1+3/256))= +1.37662e-002 +data8 0x3f91a6b91ac73380, 0x3c7874daa716eb32 // log(1/frcpa(1+4/256))= +1.72376e-002 +data8 0x3f95ba9a5d9ac000, 0x3cacbb84e08d78ac // log(1/frcpa(1+5/256))= +2.12196e-002 +data8 0x3f99d2a807432580, 0x3cbcf80538b441e1 // log(1/frcpa(1+6/256))= +2.52177e-002 +data8 0x3f9d6b2725979800, 0x3c6095e5c8f8f359 // log(1/frcpa(1+7/256))= +2.87291e-002 +data8 0x3fa0c58fa19dfa80, 0x3cb4c5d4e9d0dda2 // log(1/frcpa(1+8/256))= +3.27573e-002 +data8 0x3fa2954c78cbce00, 0x3caa932b860ab8d6 // log(1/frcpa(1+9/256))= +3.62953e-002 +data8 0x3fa4a94d2da96c40, 0x3ca670452b76bbd5 // log(1/frcpa(1+10/256))= +4.03542e-002 +data8 0x3fa67c94f2d4bb40, 0x3ca84104f9941798 // log(1/frcpa(1+11/256))= +4.39192e-002 +data8 0x3fa85188b630f040, 0x3cb40a882cbf0153 // log(1/frcpa(1+12/256))= +4.74971e-002 +data8 0x3faa6b8abe73af40, 0x3c988d46e25c9059 // log(1/frcpa(1+13/256))= +5.16017e-002 +data8 0x3fac441e06f72a80, 0x3cae3e930a1a2a96 // log(1/frcpa(1+14/256))= +5.52072e-002 +data8 0x3fae1e6713606d00, 0x3c8a796f6283b580 // log(1/frcpa(1+15/256))= +5.88257e-002 +data8 0x3faffa6911ab9300, 0x3c5193070351e88a // log(1/frcpa(1+16/256))= +6.24574e-002 +data8 0x3fb0ec139c5da600, 0x3c623f2a75eb992d // log(1/frcpa(1+17/256))= +6.61022e-002 +data8 0x3fb1dbd2643d1900, 0x3ca649b2ef8927f0 // log(1/frcpa(1+18/256))= +6.97605e-002 +data8 0x3fb2cc7284fe5f00, 0x3cbc5e86599513e2 // log(1/frcpa(1+19/256))= +7.34321e-002 +data8 0x3fb3bdf5a7d1ee60, 0x3c90bd4bb69dada3 // log(1/frcpa(1+20/256))= +7.71173e-002 +data8 0x3fb4b05d7aa012e0, 0x3c54e377c9b8a54f // log(1/frcpa(1+21/256))= +8.08161e-002 +data8 0x3fb580db7ceb5700, 0x3c7fdb2f98354cde // log(1/frcpa(1+22/256))= +8.39975e-002 +data8 0x3fb674f089365a60, 0x3cb9994c9d3301c1 // log(1/frcpa(1+23/256))= +8.77219e-002 +data8 0x3fb769ef2c6b5680, 0x3caaec639db52a79 // log(1/frcpa(1+24/256))= +9.14602e-002 +data8 0x3fb85fd927506a40, 0x3c9f9f99a3cf8e25 // log(1/frcpa(1+25/256))= +9.52125e-002 +data8 0x3fb9335e5d594980, 0x3ca15c3abd47d99a // log(1/frcpa(1+26/256))= +9.84401e-002 +data8 0x3fba2b0220c8e5e0, 0x3cb4ca639adf6fc3 // log(1/frcpa(1+27/256))= +1.02219e-001 +data8 0x3fbb0004ac1a86a0, 0x3ca7cb81bf959a59 // log(1/frcpa(1+28/256))= +1.05469e-001 +data8 0x3fbbf968769fca00, 0x3cb0c646c121418e // log(1/frcpa(1+29/256))= +1.09274e-001 +data8 0x3fbccfedbfee13a0, 0x3ca0465fce24ab4b // log(1/frcpa(1+30/256))= +1.12548e-001 +data8 0x3fbda727638446a0, 0x3c82803f4e2e6603 // log(1/frcpa(1+31/256))= +1.15832e-001 +data8 0x3fbea3257fe10f60, 0x3cb986a3f2313d1a // log(1/frcpa(1+32/256))= +1.19677e-001 +data8 0x3fbf7be9fedbfde0, 0x3c97d16a6a621cf4 // log(1/frcpa(1+33/256))= +1.22985e-001 +data8 0x3fc02ab352ff25f0, 0x3c9cc6baad365600 // log(1/frcpa(1+34/256))= +1.26303e-001 +data8 0x3fc097ce579d2040, 0x3cb9ba16d329440b // log(1/frcpa(1+35/256))= +1.29633e-001 +data8 0x3fc1178e8227e470, 0x3cb7bc671683f8e6 // log(1/frcpa(1+36/256))= +1.33531e-001 +data8 0x3fc185747dbecf30, 0x3c9d1116f66d2345 // log(1/frcpa(1+37/256))= +1.36885e-001 +data8 0x3fc1f3b925f25d40, 0x3c8162c9ef939ac6 // log(1/frcpa(1+38/256))= +1.40250e-001 +data8 0x3fc2625d1e6ddf50, 0x3caad3a1ec384fc3 // log(1/frcpa(1+39/256))= +1.43627e-001 +data8 0x3fc2d1610c868130, 0x3cb3ad997036941b // log(1/frcpa(1+40/256))= +1.47015e-001 +data8 0x3fc340c597411420, 0x3cbc2308262c7998 // log(1/frcpa(1+41/256))= +1.50414e-001 +data8 0x3fc3b08b6757f2a0, 0x3cb2170d6cdf0526 // log(1/frcpa(1+42/256))= +1.53825e-001 +data8 0x3fc40dfb08378000, 0x3c9bb453c4f7b685 // log(1/frcpa(1+43/256))= +1.56677e-001 +data8 0x3fc47e74e8ca5f70, 0x3cb836a48fdfce9d // log(1/frcpa(1+44/256))= +1.60109e-001 +data8 0x3fc4ef51f6466de0, 0x3ca07a43919aa64b // log(1/frcpa(1+45/256))= +1.63553e-001 +data8 0x3fc56092e02ba510, 0x3ca85006899d97b0 // log(1/frcpa(1+46/256))= +1.67010e-001 +data8 0x3fc5d23857cd74d0, 0x3ca30a5ba6e7abbe // log(1/frcpa(1+47/256))= +1.70478e-001 +data8 0x3fc6313a37335d70, 0x3ca905586f0ac97e // log(1/frcpa(1+48/256))= +1.73377e-001 +data8 0x3fc6a399dabbd380, 0x3c9b2c6657a96684 // log(1/frcpa(1+49/256))= +1.76868e-001 +data8 0x3fc70337dd3ce410, 0x3cb50bc52f55cdd8 // log(1/frcpa(1+50/256))= +1.79786e-001 +data8 0x3fc77654128f6120, 0x3cad2eb7c9a39efe // log(1/frcpa(1+51/256))= +1.83299e-001 +data8 0x3fc7e9d82a0b0220, 0x3cba127e90393c01 // log(1/frcpa(1+52/256))= +1.86824e-001 +data8 0x3fc84a6b759f5120, 0x3cbd7fd52079f706 // log(1/frcpa(1+53/256))= +1.89771e-001 +data8 0x3fc8ab47d5f5a300, 0x3cbfae141751a3de // log(1/frcpa(1+54/256))= +1.92727e-001 +data8 0x3fc91fe490965810, 0x3cb69cf30a1c319e // log(1/frcpa(1+55/256))= +1.96286e-001 +data8 0x3fc981634011aa70, 0x3ca5bb3d208bc42a // log(1/frcpa(1+56/256))= +1.99261e-001 +data8 0x3fc9f6c407089660, 0x3ca04d68658179a0 // log(1/frcpa(1+57/256))= +2.02843e-001 +data8 0x3fca58e729348f40, 0x3c99f5411546c286 // log(1/frcpa(1+58/256))= +2.05838e-001 +data8 0x3fcabb55c31693a0, 0x3cb9a5350eb327d5 // log(1/frcpa(1+59/256))= +2.08842e-001 +data8 0x3fcb1e104919efd0, 0x3c18965fcce7c406 // log(1/frcpa(1+60/256))= +2.11855e-001 +data8 0x3fcb94ee93e367c0, 0x3cb503716da45184 // log(1/frcpa(1+61/256))= +2.15483e-001 +data8 0x3fcbf851c0675550, 0x3cbdf1b3f7ab5378 // log(1/frcpa(1+62/256))= +2.18516e-001 +data8 0x3fcc5c0254bf23a0, 0x3ca7aab9ed0b1d7b // log(1/frcpa(1+63/256))= +2.21558e-001 +data8 0x3fccc000c9db3c50, 0x3c92a7a2a850072a // log(1/frcpa(1+64/256))= +2.24609e-001 +data8 0x3fcd244d99c85670, 0x3c9f6019120edf4c // log(1/frcpa(1+65/256))= +2.27670e-001 +data8 0x3fcd88e93fb2f450, 0x3c6affb96815e081 // log(1/frcpa(1+66/256))= +2.30741e-001 +data8 0x3fcdedd437eaef00, 0x3c72553595897976 // log(1/frcpa(1+67/256))= +2.33820e-001 +data8 0x3fce530effe71010, 0x3c90913b020fa182 // log(1/frcpa(1+68/256))= +2.36910e-001 +data8 0x3fceb89a1648b970, 0x3c837ba4045bfd25 // log(1/frcpa(1+69/256))= +2.40009e-001 +data8 0x3fcf1e75fadf9bd0, 0x3cbcea6d13e0498d // log(1/frcpa(1+70/256))= +2.43117e-001 +data8 0x3fcf84a32ead7c30, 0x3ca5e3a67b3c6d77 // log(1/frcpa(1+71/256))= +2.46235e-001 +data8 0x3fcfeb2233ea07c0, 0x3cba0c6f0049c5a6 // log(1/frcpa(1+72/256))= +2.49363e-001 +data8 0x3fd028f9c7035c18, 0x3cb0a30b06677ff6 // log(1/frcpa(1+73/256))= +2.52501e-001 +data8 0x3fd05c8be0d96358, 0x3ca0f1c77ccb5865 // log(1/frcpa(1+74/256))= +2.55649e-001 +data8 0x3fd085eb8f8ae790, 0x3cbd513f45fe7a97 // log(1/frcpa(1+75/256))= +2.58174e-001 +data8 0x3fd0b9c8e32d1910, 0x3c927449047ca006 // log(1/frcpa(1+76/256))= +2.61339e-001 +data8 0x3fd0edd060b78080, 0x3c89b52d8435f53e // log(1/frcpa(1+77/256))= +2.64515e-001 +data8 0x3fd122024cf00638, 0x3cbdd976fabda4bd // log(1/frcpa(1+78/256))= +2.67701e-001 +data8 0x3fd14be2927aecd0, 0x3cb02f90ad0bc471 // log(1/frcpa(1+79/256))= +2.70257e-001 +data8 0x3fd180618ef18ad8, 0x3cbd003792c71a98 // log(1/frcpa(1+80/256))= +2.73461e-001 +data8 0x3fd1b50bbe2fc638, 0x3ca9ae64c6403ead // log(1/frcpa(1+81/256))= +2.76675e-001 +data8 0x3fd1df4cc7cf2428, 0x3cb43f0455f7e395 // log(1/frcpa(1+82/256))= +2.79254e-001 +data8 0x3fd214456d0eb8d0, 0x3cb0fbd748d75d30 // log(1/frcpa(1+83/256))= +2.82487e-001 +data8 0x3fd23ec5991eba48, 0x3c906edd746b77e2 // log(1/frcpa(1+84/256))= +2.85081e-001 +data8 0x3fd2740d9f870af8, 0x3ca9802e6a00a670 // log(1/frcpa(1+85/256))= +2.88333e-001 +data8 0x3fd29ecdabcdfa00, 0x3cacecef70890cfa // log(1/frcpa(1+86/256))= +2.90943e-001 +data8 0x3fd2d46602adcce8, 0x3cb97911955f3521 // log(1/frcpa(1+87/256))= +2.94214e-001 +data8 0x3fd2ff66b04ea9d0, 0x3cb12dabe191d1c9 // log(1/frcpa(1+88/256))= +2.96838e-001 +data8 0x3fd335504b355a30, 0x3cbdf9139df924ec // log(1/frcpa(1+89/256))= +3.00129e-001 +data8 0x3fd360925ec44f58, 0x3cb253e68977a1e3 // log(1/frcpa(1+90/256))= +3.02769e-001 +data8 0x3fd38bf1c3337e70, 0x3cb3d283d2a2da21 // log(1/frcpa(1+91/256))= +3.05417e-001 +data8 0x3fd3c25277333180, 0x3cadaa5b035eae27 // log(1/frcpa(1+92/256))= +3.08735e-001 +data8 0x3fd3edf463c16838, 0x3cb983d680d3c108 // log(1/frcpa(1+93/256))= +3.11399e-001 +data8 0x3fd419b423d5e8c0, 0x3cbc86dd921c139d // log(1/frcpa(1+94/256))= +3.14069e-001 +data8 0x3fd44591e0539f48, 0x3c86a76d6dc2782e // log(1/frcpa(1+95/256))= +3.16746e-001 +data8 0x3fd47c9175b6f0a8, 0x3cb59a2e013c6b5f // log(1/frcpa(1+96/256))= +3.20103e-001 +data8 0x3fd4a8b341552b08, 0x3c93f1e86e468694 // log(1/frcpa(1+97/256))= +3.22797e-001 +data8 0x3fd4d4f390890198, 0x3cbf5e4ea7c5105a // log(1/frcpa(1+98/256))= +3.25498e-001 +data8 0x3fd501528da1f960, 0x3cbf58da53e9ad10 // log(1/frcpa(1+99/256))= +3.28206e-001 +data8 0x3fd52dd06347d4f0, 0x3cb98a28cebf6eef // log(1/frcpa(1+100/256))= +3.30921e-001 +data8 0x3fd55a6d3c7b8a88, 0x3c9c76b67c2d1fd4 // log(1/frcpa(1+101/256))= +3.33644e-001 +data8 0x3fd5925d2b112a58, 0x3c9029616a4331b8 // log(1/frcpa(1+102/256))= +3.37058e-001 +data8 0x3fd5bf406b543db0, 0x3c9fb8292ecfc820 // log(1/frcpa(1+103/256))= +3.39798e-001 +data8 0x3fd5ec433d5c35a8, 0x3cb71a1229d17eec // log(1/frcpa(1+104/256))= +3.42545e-001 +data8 0x3fd61965cdb02c18, 0x3cbba94fe1dbb8d2 // log(1/frcpa(1+105/256))= +3.45300e-001 +data8 0x3fd646a84935b2a0, 0x3c9ee496d2c9ae57 // log(1/frcpa(1+106/256))= +3.48063e-001 +data8 0x3fd6740add31de90, 0x3cb1da3a6c7a9dfd // log(1/frcpa(1+107/256))= +3.50833e-001 +data8 0x3fd6a18db74a58c0, 0x3cb494c257add8dc // log(1/frcpa(1+108/256))= +3.53610e-001 +data8 0x3fd6cf31058670e8, 0x3cb0b244a70a8da9 // log(1/frcpa(1+109/256))= +3.56396e-001 +data8 0x3fd6f180e852f0b8, 0x3c9db7aefa866720 // log(1/frcpa(1+110/256))= +3.58490e-001 +data8 0x3fd71f5d71b894e8, 0x3cbe91c4bf324957 // log(1/frcpa(1+111/256))= +3.61289e-001 +data8 0x3fd74d5aefd66d58, 0x3cb06b3d9bfac023 // log(1/frcpa(1+112/256))= +3.64096e-001 +data8 0x3fd77b79922bd378, 0x3cb727d8804491f4 // log(1/frcpa(1+113/256))= +3.66911e-001 +data8 0x3fd7a9b9889f19e0, 0x3ca2ef22df5bc543 // log(1/frcpa(1+114/256))= +3.69734e-001 +data8 0x3fd7d81b037eb6a0, 0x3cb8fd3ba07a7ece // log(1/frcpa(1+115/256))= +3.72565e-001 +data8 0x3fd8069e33827230, 0x3c8bd1e25866e61a // log(1/frcpa(1+116/256))= +3.75404e-001 +data8 0x3fd82996d3ef8bc8, 0x3ca5aab9f5928928 // log(1/frcpa(1+117/256))= +3.77538e-001 +data8 0x3fd85855776dcbf8, 0x3ca56f33337789d6 // log(1/frcpa(1+118/256))= +3.80391e-001 +data8 0x3fd8873658327cc8, 0x3cbb8ef0401db49d // log(1/frcpa(1+119/256))= +3.83253e-001 +data8 0x3fd8aa75973ab8c8, 0x3cbb9961f509a680 // log(1/frcpa(1+120/256))= +3.85404e-001 +data8 0x3fd8d992dc8824e0, 0x3cb220512a53732d // log(1/frcpa(1+121/256))= +3.88280e-001 +data8 0x3fd908d2ea7d9510, 0x3c985f0e513bfb5c // log(1/frcpa(1+122/256))= +3.91164e-001 +data8 0x3fd92c59e79c0e50, 0x3cb82e073fd30d63 // log(1/frcpa(1+123/256))= +3.93332e-001 +data8 0x3fd95bd750ee3ed0, 0x3ca4aa7cdb6dd8a8 // log(1/frcpa(1+124/256))= +3.96231e-001 +data8 0x3fd98b7811a3ee58, 0x3caa93a5b660893e // log(1/frcpa(1+125/256))= +3.99138e-001 +data8 0x3fd9af47f33d4068, 0x3cac294b3b3190ba // log(1/frcpa(1+126/256))= +4.01323e-001 +data8 0x3fd9df270c1914a0, 0x3cbe1a58fd0cd67e // log(1/frcpa(1+127/256))= +4.04245e-001 +data8 0x3fda0325ed14fda0, 0x3cb1efa7950fb57e // log(1/frcpa(1+128/256))= +4.06442e-001 +data8 0x3fda33440224fa78, 0x3c8915fe75e7d477 // log(1/frcpa(1+129/256))= +4.09379e-001 +data8 0x3fda57725e80c380, 0x3ca72bd1062b1b7f // log(1/frcpa(1+130/256))= +4.11587e-001 +data8 0x3fda87d0165dd198, 0x3c91f7845f58dbad // log(1/frcpa(1+131/256))= +4.14539e-001 +data8 0x3fdaac2e6c03f890, 0x3cb6f237a911c509 // log(1/frcpa(1+132/256))= +4.16759e-001 +data8 0x3fdadccc6fdf6a80, 0x3c90ddc4b7687169 // log(1/frcpa(1+133/256))= +4.19726e-001 +data8 0x3fdb015b3eb1e790, 0x3c692dd7d90e1e8e // log(1/frcpa(1+134/256))= +4.21958e-001 +data8 0x3fdb323a3a635948, 0x3c6f85655cbe14de // log(1/frcpa(1+135/256))= +4.24941e-001 +data8 0x3fdb56fa04462908, 0x3c95252d841994de // log(1/frcpa(1+136/256))= +4.27184e-001 +data8 0x3fdb881aa659bc90, 0x3caa53a745a3642f // log(1/frcpa(1+137/256))= +4.30182e-001 +data8 0x3fdbad0bef3db160, 0x3cb32f2540dcc16a // log(1/frcpa(1+138/256))= +4.32437e-001 +data8 0x3fdbd21297781c28, 0x3cbd8e891e106f1d // log(1/frcpa(1+139/256))= +4.34697e-001 +data8 0x3fdc039236f08818, 0x3c809435af522ba7 // log(1/frcpa(1+140/256))= +4.37718e-001 +data8 0x3fdc28cb1e4d32f8, 0x3cb3944752fbd81e // log(1/frcpa(1+141/256))= +4.39990e-001 +data8 0x3fdc4e19b84723c0, 0x3c9a465260cd3fe5 // log(1/frcpa(1+142/256))= +4.42267e-001 +data8 0x3fdc7ff9c74554c8, 0x3c92447d5b6ca369 // log(1/frcpa(1+143/256))= +4.45311e-001 +data8 0x3fdca57b64e9db00, 0x3cb44344a8a00c82 // log(1/frcpa(1+144/256))= +4.47600e-001 +data8 0x3fdccb130a5ceba8, 0x3cbefaddfb97b73f // log(1/frcpa(1+145/256))= +4.49895e-001 +data8 0x3fdcf0c0d18f3268, 0x3cbd3e7bfee57898 // log(1/frcpa(1+146/256))= +4.52194e-001 +data8 0x3fdd232075b5a200, 0x3c9222599987447c // log(1/frcpa(1+147/256))= +4.55269e-001 +data8 0x3fdd490246defa68, 0x3cabafe9a767a80d // log(1/frcpa(1+148/256))= +4.57581e-001 +data8 0x3fdd6efa918d25c8, 0x3cb58a2624e1c6fd // log(1/frcpa(1+149/256))= +4.59899e-001 +data8 0x3fdd9509707ae528, 0x3cbdc3babce578e7 // log(1/frcpa(1+150/256))= +4.62221e-001 +data8 0x3fddbb2efe92c550, 0x3cb0ac0943c434a4 // log(1/frcpa(1+151/256))= +4.64550e-001 +data8 0x3fddee2f3445e4a8, 0x3cbba9d07ce820e8 // log(1/frcpa(1+152/256))= +4.67663e-001 +data8 0x3fde148a1a2726c8, 0x3cb6537e3375b205 // log(1/frcpa(1+153/256))= +4.70004e-001 +data8 0x3fde3afc0a49ff38, 0x3cbfed5518dbc20e // log(1/frcpa(1+154/256))= +4.72350e-001 +data8 0x3fde6185206d5168, 0x3cb6572601f73d5c // log(1/frcpa(1+155/256))= +4.74702e-001 +data8 0x3fde882578823d50, 0x3c9b24abd4584d1a // log(1/frcpa(1+156/256))= +4.77060e-001 +data8 0x3fdeaedd2eac9908, 0x3cb0ceb5e4d2c8f7 // log(1/frcpa(1+157/256))= +4.79423e-001 +data8 0x3fded5ac5f436be0, 0x3ca72f21f1f5238e // log(1/frcpa(1+158/256))= +4.81792e-001 +data8 0x3fdefc9326d16ab8, 0x3c85081a1639a45c // log(1/frcpa(1+159/256))= +4.84166e-001 +data8 0x3fdf2391a21575f8, 0x3cbf11015bdd297a // log(1/frcpa(1+160/256))= +4.86546e-001 +data8 0x3fdf4aa7ee031928, 0x3cb3795bc052a2d1 // log(1/frcpa(1+161/256))= +4.88932e-001 +data8 0x3fdf71d627c30bb0, 0x3c35c61f0f5a88f3 // log(1/frcpa(1+162/256))= +4.91323e-001 +data8 0x3fdf991c6cb3b378, 0x3c97d99419be6028 // log(1/frcpa(1+163/256))= +4.93720e-001 +data8 0x3fdfc07ada69a908, 0x3cbfe9341ded70b1 // log(1/frcpa(1+164/256))= +4.96123e-001 +data8 0x3fdfe7f18eb03d38, 0x3cb85718a640c33f // log(1/frcpa(1+165/256))= +4.98532e-001 +data8 0x3fe007c053c5002c, 0x3cb3addc9c065f09 // log(1/frcpa(1+166/256))= +5.00946e-001 +data8 0x3fe01b942198a5a0, 0x3c9d5aa4c77da6ac // log(1/frcpa(1+167/256))= +5.03367e-001 +data8 0x3fe02f74400c64e8, 0x3cb5a0ee4450ef52 // log(1/frcpa(1+168/256))= +5.05793e-001 +data8 0x3fe04360be7603ac, 0x3c9dd00c35630fe0 // log(1/frcpa(1+169/256))= +5.08225e-001 +data8 0x3fe05759ac47fe30, 0x3cbd063e1f0bd82c // log(1/frcpa(1+170/256))= +5.10663e-001 +data8 0x3fe06b5f1911cf50, 0x3cae8da674af5289 // log(1/frcpa(1+171/256))= +5.13107e-001 +data8 0x3fe078bf0533c568, 0x3c62241edf5fd1f7 // log(1/frcpa(1+172/256))= +5.14740e-001 +data8 0x3fe08cd9687e7b0c, 0x3cb3007febcca227 // log(1/frcpa(1+173/256))= +5.17194e-001 +data8 0x3fe0a10074cf9018, 0x3ca496e84603816b // log(1/frcpa(1+174/256))= +5.19654e-001 +data8 0x3fe0b5343a234474, 0x3cb46098d14fc90a // log(1/frcpa(1+175/256))= +5.22120e-001 +data8 0x3fe0c974c89431cc, 0x3cac0a7cdcbb86c6 // log(1/frcpa(1+176/256))= +5.24592e-001 +data8 0x3fe0ddc2305b9884, 0x3cb2f753210410ff // log(1/frcpa(1+177/256))= +5.27070e-001 +data8 0x3fe0eb524bafc918, 0x3c88affd6682229e // log(1/frcpa(1+178/256))= +5.28726e-001 +data8 0x3fe0ffb54213a474, 0x3cadeefbab9af993 // log(1/frcpa(1+179/256))= +5.31214e-001 +data8 0x3fe114253da97d9c, 0x3cbaf1c2b8bc160a // log(1/frcpa(1+180/256))= +5.33709e-001 +data8 0x3fe128a24f1d9afc, 0x3cb9cf4df375e650 // log(1/frcpa(1+181/256))= +5.36210e-001 +data8 0x3fe1365252bf0864, 0x3c985a621d4be111 // log(1/frcpa(1+182/256))= +5.37881e-001 +data8 0x3fe14ae558b4a92c, 0x3ca104c4aa8977d1 // log(1/frcpa(1+183/256))= +5.40393e-001 +data8 0x3fe15f85a19c7658, 0x3cbadf26e540f375 // log(1/frcpa(1+184/256))= +5.42910e-001 +data8 0x3fe16d4d38c119f8, 0x3cb3aea11caec416 // log(1/frcpa(1+185/256))= +5.44592e-001 +data8 0x3fe18203c20dd130, 0x3cba82d1211d1d6d // log(1/frcpa(1+186/256))= +5.47121e-001 +data8 0x3fe196c7bc4b1f38, 0x3cb6267acc4f4f4a // log(1/frcpa(1+187/256))= +5.49656e-001 +data8 0x3fe1a4a738b7a33c, 0x3c858930213c987d // log(1/frcpa(1+188/256))= +5.51349e-001 +data8 0x3fe1b981c0c9653c, 0x3c9bc2a4a30f697b // log(1/frcpa(1+189/256))= +5.53895e-001 +data8 0x3fe1ce69e8bb1068, 0x3cb7ae6199cf2a00 // log(1/frcpa(1+190/256))= +5.56447e-001 +data8 0x3fe1dc619de06944, 0x3c6b50bb38388177 // log(1/frcpa(1+191/256))= +5.58152e-001 +data8 0x3fe1f160a2ad0da0, 0x3cbd05b2778a5e1d // log(1/frcpa(1+192/256))= +5.60715e-001 +data8 0x3fe2066d7740737c, 0x3cb32e828f9c6bd6 // log(1/frcpa(1+193/256))= +5.63285e-001 +data8 0x3fe2147dba47a390, 0x3cbd579851b8b672 // log(1/frcpa(1+194/256))= +5.65001e-001 +data8 0x3fe229a1bc5ebac0, 0x3cbb321be5237ce8 // log(1/frcpa(1+195/256))= +5.67582e-001 +data8 0x3fe237c1841a502c, 0x3cb3b56e0915ea64 // log(1/frcpa(1+196/256))= +5.69306e-001 +data8 0x3fe24cfce6f80d98, 0x3cb34a4d1a422919 // log(1/frcpa(1+197/256))= +5.71898e-001 +data8 0x3fe25b2c55cd5760, 0x3cb237401ea5015e // log(1/frcpa(1+198/256))= +5.73630e-001 +data8 0x3fe2707f4d5f7c40, 0x3c9d30f20acc8341 // log(1/frcpa(1+199/256))= +5.76233e-001 +data8 0x3fe285e0842ca380, 0x3cbc4d866d5f21c0 // log(1/frcpa(1+200/256))= +5.78842e-001 +data8 0x3fe294294708b770, 0x3cb85e14d5dc54fa // log(1/frcpa(1+201/256))= +5.80586e-001 +data8 0x3fe2a9a2670aff0c, 0x3c7e6f8f468bbf91 // log(1/frcpa(1+202/256))= +5.83207e-001 +data8 0x3fe2b7fb2c8d1cc0, 0x3c930ffcf63c8b65 // log(1/frcpa(1+203/256))= +5.84959e-001 +data8 0x3fe2c65a6395f5f4, 0x3ca0afe20b53d2d2 // log(1/frcpa(1+204/256))= +5.86713e-001 +data8 0x3fe2dbf557b0df40, 0x3cb646be1188fbc9 // log(1/frcpa(1+205/256))= +5.89350e-001 +data8 0x3fe2ea64c3f97654, 0x3c96516fa8df33b2 // log(1/frcpa(1+206/256))= +5.91113e-001 +data8 0x3fe3001823684d70, 0x3cb96d64e16d1360 // log(1/frcpa(1+207/256))= +5.93762e-001 +data8 0x3fe30e97e9a8b5cc, 0x3c98ef96bc97cca0 // log(1/frcpa(1+208/256))= +5.95531e-001 +data8 0x3fe32463ebdd34e8, 0x3caef1dc9a56c1bf // log(1/frcpa(1+209/256))= +5.98192e-001 +data8 0x3fe332f4314ad794, 0x3caa4f0ac5d5fa11 // log(1/frcpa(1+210/256))= +5.99970e-001 +data8 0x3fe348d90e7464cc, 0x3cbe7889f0516acd // log(1/frcpa(1+211/256))= +6.02643e-001 +data8 0x3fe35779f8c43d6c, 0x3ca96bbab7245411 // log(1/frcpa(1+212/256))= +6.04428e-001 +data8 0x3fe36621961a6a98, 0x3ca31f32262db9fb // log(1/frcpa(1+213/256))= +6.06217e-001 +data8 0x3fe37c299f3c3668, 0x3cb15c72c107ee29 // log(1/frcpa(1+214/256))= +6.08907e-001 +data8 0x3fe38ae2171976e4, 0x3cba42a2554b2dd4 // log(1/frcpa(1+215/256))= +6.10704e-001 +data8 0x3fe399a157a603e4, 0x3cb99c62286d8919 // log(1/frcpa(1+216/256))= +6.12504e-001 +data8 0x3fe3afccfe77b9d0, 0x3ca11048f96a43bd // log(1/frcpa(1+217/256))= +6.15210e-001 +data8 0x3fe3be9d503533b4, 0x3ca4022f47588c3e // log(1/frcpa(1+218/256))= +6.17018e-001 +data8 0x3fe3cd7480b4a8a0, 0x3cb4ba7afc2dc56a // log(1/frcpa(1+219/256))= +6.18830e-001 +data8 0x3fe3e3c43918f76c, 0x3c859673d064b8ba // log(1/frcpa(1+220/256))= +6.21554e-001 +data8 0x3fe3f2acb27ed6c4, 0x3cb55c6b452a16a8 // log(1/frcpa(1+221/256))= +6.23373e-001 +data8 0x3fe4019c2125ca90, 0x3cb8c367879c5a31 // log(1/frcpa(1+222/256))= +6.25197e-001 +data8 0x3fe4181061389720, 0x3cb2c17a79c5cc6c // log(1/frcpa(1+223/256))= +6.27937e-001 +data8 0x3fe42711518df544, 0x3ca5f38d47012fc5 // log(1/frcpa(1+224/256))= +6.29769e-001 +data8 0x3fe436194e12b6bc, 0x3cb9854d65a9b426 // log(1/frcpa(1+225/256))= +6.31604e-001 +data8 0x3fe445285d68ea68, 0x3ca3ff9b3a81cd81 // log(1/frcpa(1+226/256))= +6.33442e-001 +data8 0x3fe45bcc464c8938, 0x3cb0a2d8011a6c05 // log(1/frcpa(1+227/256))= +6.36206e-001 +data8 0x3fe46aed21f117fc, 0x3c8a2be41f8e9f3d // log(1/frcpa(1+228/256))= +6.38053e-001 +data8 0x3fe47a1527e8a2d0, 0x3cba4a83594fab09 // log(1/frcpa(1+229/256))= +6.39903e-001 +data8 0x3fe489445efffcc8, 0x3cbf306a23dcbcde // log(1/frcpa(1+230/256))= +6.41756e-001 +data8 0x3fe4a018bcb69834, 0x3ca46c9285029fd1 // log(1/frcpa(1+231/256))= +6.44543e-001 +data8 0x3fe4af5a0c9d65d4, 0x3cbbc1db897580e3 // log(1/frcpa(1+232/256))= +6.46405e-001 +data8 0x3fe4bea2a5bdbe84, 0x3cb84d880d7ef775 // log(1/frcpa(1+233/256))= +6.48271e-001 +data8 0x3fe4cdf28f10ac44, 0x3cb3ec4b7893ce1f // log(1/frcpa(1+234/256))= +6.50140e-001 +data8 0x3fe4dd49cf994058, 0x3c897224d59d3408 // log(1/frcpa(1+235/256))= +6.52013e-001 +data8 0x3fe4eca86e64a680, 0x3cbccf620f24f0cd // log(1/frcpa(1+236/256))= +6.53889e-001 +data8 0x3fe503c43cd8eb68, 0x3c3f872c65971084 // log(1/frcpa(1+237/256))= +6.56710e-001 +data8 0x3fe513356667fc54, 0x3cb9ca64cc3d52c8 // log(1/frcpa(1+238/256))= +6.58595e-001 +data8 0x3fe522ae0738a3d4, 0x3cbe708164c75968 // log(1/frcpa(1+239/256))= +6.60483e-001 +data8 0x3fe5322e26867854, 0x3cb9988ba4aea615 // log(1/frcpa(1+240/256))= +6.62376e-001 +data8 0x3fe541b5cb979808, 0x3ca1662e3a6b95f5 // log(1/frcpa(1+241/256))= +6.64271e-001 +data8 0x3fe55144fdbcbd60, 0x3cb3acd4ca45c1e0 // log(1/frcpa(1+242/256))= +6.66171e-001 +data8 0x3fe560dbc45153c4, 0x3cb4988947959fed // log(1/frcpa(1+243/256))= +6.68074e-001 +data8 0x3fe5707a26bb8c64, 0x3cb3017fe6607ba9 // log(1/frcpa(1+244/256))= +6.69980e-001 +data8 0x3fe587f60ed5b8fc, 0x3cbe7a3266366ed4 // log(1/frcpa(1+245/256))= +6.72847e-001 +data8 0x3fe597a7977c8f30, 0x3ca1e12b9959a90e // log(1/frcpa(1+246/256))= +6.74763e-001 +data8 0x3fe5a760d634bb88, 0x3cb7c365e53d9602 // log(1/frcpa(1+247/256))= +6.76682e-001 +data8 0x3fe5b721d295f10c, 0x3cb716c2551ccbf0 // log(1/frcpa(1+248/256))= +6.78605e-001 +data8 0x3fe5c6ea94431ef8, 0x3ca02b2ed0e28261 // log(1/frcpa(1+249/256))= +6.80532e-001 +data8 0x3fe5d6bb22ea86f4, 0x3caf43a8bbb2f974 // log(1/frcpa(1+250/256))= +6.82462e-001 +data8 0x3fe5e6938645d38c, 0x3cbcedc98821b333 // log(1/frcpa(1+251/256))= +6.84397e-001 +data8 0x3fe5f673c61a2ed0, 0x3caa385eef5f2789 // log(1/frcpa(1+252/256))= +6.86335e-001 +data8 0x3fe6065bea385924, 0x3cb11624f165c5b4 // log(1/frcpa(1+253/256))= +6.88276e-001 +data8 0x3fe6164bfa7cc068, 0x3cbad884f87073fa // log(1/frcpa(1+254/256))= +6.90222e-001 +data8 0x3fe62643fecf9740, 0x3cb78c51da12f4df // log(1/frcpa(1+255/256))= +6.92171e-001 +ASM_SIZE_DIRECTIVE(pow_Tt) + + +// Table 1 is 2^(index_1/128) where +// index_1 goes from 0 to 15 +pow_tbl1: +ASM_TYPE_DIRECTIVE(pow_tbl1,@object) +data8 0x8000000000000000 , 0x00003FFF +data8 0x80B1ED4FD999AB6C , 0x00003FFF +data8 0x8164D1F3BC030773 , 0x00003FFF +data8 0x8218AF4373FC25EC , 0x00003FFF +data8 0x82CD8698AC2BA1D7 , 0x00003FFF +data8 0x8383594EEFB6EE37 , 0x00003FFF +data8 0x843A28C3ACDE4046 , 0x00003FFF +data8 0x84F1F656379C1A29 , 0x00003FFF +data8 0x85AAC367CC487B15 , 0x00003FFF +data8 0x8664915B923FBA04 , 0x00003FFF +data8 0x871F61969E8D1010 , 0x00003FFF +data8 0x87DB357FF698D792 , 0x00003FFF +data8 0x88980E8092DA8527 , 0x00003FFF +data8 0x8955EE03618E5FDD , 0x00003FFF +data8 0x8A14D575496EFD9A , 0x00003FFF +data8 0x8AD4C6452C728924 , 0x00003FFF +ASM_SIZE_DIRECTIVE(pow_tbl1) + + +// Table 2 is 2^(index_1/8) where +// index_2 goes from 0 to 7 +pow_tbl2: +ASM_TYPE_DIRECTIVE(pow_tbl2,@object) +data8 0x8000000000000000 , 0x00003FFF +data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF +data8 0x9837F0518DB8A96F , 0x00003FFF +data8 0xA5FED6A9B15138EA , 0x00003FFF +data8 0xB504F333F9DE6484 , 0x00003FFF +data8 0xC5672A115506DADD , 0x00003FFF +data8 0xD744FCCAD69D6AF4 , 0x00003FFF +data8 0xEAC0C6E7DD24392F , 0x00003FFF +ASM_SIZE_DIRECTIVE(pow_tbl2) + +.global powf + +.section .text +.proc powf +.align 32 + +powf: + +{ .mfi + alloc r32=ar.pfs,1,35,4,0 + fms.s1 POW_Xm1 = f8,f1,f1 // Will be used for r1 if x>0 + mov pow_GR_17ones = 0x1FFFF +} +{ .mfi +(p0) addl pow_AD_P = @ltoff(pow_table_P), gp + fma.s1 POW_Xp1 = f8,f1,f1 // Will be used for r1 if x<0 + nop.i 999 +;; +} + + +// Get exponent of x. Will be used to calculate K. +{ .mfi + getf.exp pow_GR_signexp_X = f8 + frcpa.s1 POW_B, p6 = f1,f8 + nop.i 999 +} +{ .mfi + ld8 pow_AD_P = [pow_AD_P] + fma.s1 POW_NORM_X = f8,f1,f0 + mov pow_GR_FFF7 = 0xFFF7 +} +;; + + + +// Get significand of x. Will be used to get index to fetch T, Tt. +// p13 = TRUE ==> X is unorm +// DOUBLE 0x10033 exponent limit at which y is an integer +// SINGLE 0x10016 +{ .mfi + getf.sig pow_GR_sig_X = f8 + fclass.m p13,p0 = f8, 0x0b // Test for x unorm + addl pow_GR_10033 = 0x10033, r0 +} +{ .mfi + mov pow_GR_16ones = 0xFFFF + fma.s1 POW_NORM_Y = f9,f1,f0 + nop.i 999 +} +;; + + +// p14 = TRUE ==> X is ZERO +{ .mfi + adds pow_AD_Tt = pow_Tt - pow_table_P, pow_AD_P + fclass.m p14,p15 = f8, 0x07 + and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones +} +{ .mfi + adds pow_AD_Q = pow_table_Q - pow_table_P, pow_AD_P + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + ldfe POW_P5 = [pow_AD_P], 16 + fcmp.lt.s1 p8,p9 = f8, f0 // Test for x<0 + shl pow_GR_offset = pow_GR_sig_X, 1 +} +{ .mib + ldfe POW_P4 = [pow_AD_Q], 16 + sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones +(p13) br.cond.spnt L(POW_X_DENORM) +} +;; + + +// Continue normal and denormal paths here +L(POW_COMMON): +// p11 = TRUE ==> Y is a NAN +{ .mfi + ldfe POW_P3 = [pow_AD_P], 16 + fclass.m.unc p11,p0 = f9, 0xc3 + shr.u pow_GR_offset = pow_GR_offset,56 +} +{ .mfi + ldfe POW_P2 = [pow_AD_Q], 16 + nop.f 999 + nop.i 999 +} +;; + + + +// Compute xsq to decide later if |x|=1 +// p11 = TRUE ==> Y is a NaN +{ .mfi + setf.sig POW_int_K = pow_GR_true_exp_X +(p15) fms.s1 POW_r = POW_B, POW_NORM_X,f1 + shladd pow_AD_Tt = pow_GR_offset, 4, pow_AD_Tt +} +{ .mfi + nop.m 999 +(p8) fnma.s1 POW_Xm1 = POW_Xp1,f1,f0 + nop.i 999 +} +;; + + + +// p12 = TRUE ==> X is ZERO and Y is ZERO +{ .mfi + ldfe POW_P1 = [pow_AD_P], 16 +(p14) fclass.m.unc p12,p0 = f9, 0x07 + nop.i 999 +} +{ .mfb + ldfe POW_P0 = [pow_AD_Q], 16 + fma.s1 POW_xsq = POW_NORM_X, POW_NORM_X, f0 +(p11) br.cond.spnt L(POW_Y_NAN) +} +;; + + +.pred.rel "mutex",p8,p9 +// Get exponent of |x|-1 to use in comparison to 2^-8 +{ .mmf +(p8) getf.exp pow_GR_signexp_Xm1 = POW_Xp1 +(p9) getf.exp pow_GR_signexp_Xm1 = POW_Xm1 + fcvt.fx.s1 POW_int_Y = POW_NORM_Y +} +;; + + +// p11 = TRUE ==> X is a NAN +{ .mfi + ldfpd POW_log2_hi, POW_log2_lo = [pow_AD_Q], 16 + fclass.m.unc p11,p0 = f8, 0xc3 + nop.i 999 +} +{ .mib + ldfpd POW_T, POW_Tt = [pow_AD_Tt], 16 + nop.i 999 +(p12) br.cond.spnt L(POW_X_0_Y_0) +} +;; + + +// p14 = TRUE ==> X is zero +// p15 = TRUE ==> X is zero AND Y is negative +// p10 = TRUE ==> X is zero AND Y is >= zero +{ .mfi + ldfe POW_inv_log2_by_128 = [pow_AD_P], 16 +(p14) fcmp.lt.unc.s1 p15, p10 = f9,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + nop.f 999 + and pow_GR_exp_Xm1 = pow_GR_signexp_Xm1, pow_GR_17ones +} +;; + + +// Determine if we will use the |x| near 1 path (p6) or normal path (p7) +// p12 = TRUE ==> X is a NAN and Y is a zero +// p13 = TRUE ==> X is a NAN and Y is anything else +{ .mfi + getf.exp pow_GR_signexp_Y = POW_NORM_Y +(p11) fclass.m.unc p12,p13 = f9, 0x07 + cmp.lt.unc p6,p7 = pow_GR_exp_Xm1, pow_GR_FFF7 +} +{ .mfi + ldfpd POW_Q2, POW_Q3 = [pow_AD_P], 16 + fma.s1 POW_rsq = POW_r, POW_r,f0 + nop.i 999 +;; +} + +// If on the x near 1 path, assign r1 to r and r1*r1 to rsq +{ .mfi + ldfpd POW_Q0_half, POW_Q1 = [pow_AD_P], 16 +(p6) fma.s1 POW_r = POW_r1, f1, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fma.s1 POW_rsq = POW_r1, POW_r1, f0 + nop.i 999 +;; +} + + +{ .mfi + ldfpd POW_Q4, POW_RSHF = [pow_AD_P], 16 +(p7) fma.s1 POW_v6 = POW_r, POW_P5, POW_P4 + and pow_GR_exp_Y = pow_GR_signexp_Y, pow_GR_17ones +} +{ .mfb + nop.m 999 +(p6) fma.s1 POW_v6 = POW_r1, POW_P5, POW_P4 +(p12) br.cond.spnt L(POW_X_NAN_Y_0) +} +;; + + +{ .mfi + nop.m 999 +(p7) fma.s1 POW_v4 = POW_P3, POW_r, POW_P2 + andcm pow_GR_sign_Y = pow_GR_signexp_Y, pow_GR_17ones +} +{ .mfb + nop.m 999 +(p6) fma.s1 POW_v4 = POW_P3, POW_r1, POW_P2 +(p12) br.cond.spnt L(POW_X_NAN_Y_0) +} +;; + +{ .mfi + nop.m 999 + fcvt.xf POW_K = POW_int_K + nop.i 999 +} +{ .mfb + nop.m 999 +(p13) fma.s f8 = f8,f1,f0 +(p13) br.ret.spnt b0 // Exit if x nan, y anything but zero +} +;; + +// p10 = TRUE ==> X is zero AND Y is positive +// p8 = TRUE ==> X is zero AND Y is outside integer range (treat as even int) +// return +0 +// p9 = TRUE ==> X is zero AND Y is within integer range (may not be integer) +{ .mfi +(p10) cmp.gt.unc p8,p9 = pow_GR_exp_Y, pow_GR_10033 +(p6) fmerge.s POW_delta = f0,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fma.s1 POW_G = f0,f0,f0 + nop.i 999 +} +;; + +{ .mfi + getf.sig pow_GR_sig_int_Y = POW_int_Y + fnma.s1 POW_twoV = POW_NORM_Y, POW_rsq,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_U = POW_NORM_Y,POW_r,f0 + nop.i 999 +} +;; + +{ .mfi + ldfe POW_log2_by_128_lo = [pow_AD_P], 16 +(p6) fma.s1 POW_v2 = POW_P1, POW_r1, POW_P0 + nop.i 999 +} +{ .mfi + ldfe POW_log2_by_128_hi = [pow_AD_Q], 16 +(p7) fma.s1 POW_v2 = POW_P1, POW_r, POW_P0 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fcvt.xf POW_float_int_Y = POW_int_Y + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_v3 = POW_v6, POW_rsq, POW_v4 + adds pow_AD_tbl1 = pow_tbl1 - pow_Tt, pow_AD_Q +} +;; + +{ .mfi + nop.m 999 +(p7) fma.s1 POW_delta = POW_K, POW_log2_lo, POW_Tt + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 POW_G = POW_K, POW_log2_hi, POW_T + adds pow_AD_tbl2 = pow_tbl2 - pow_tbl1, pow_AD_tbl1 +} +;; + + +{ .mfi + nop.m 999 + fms.s1 POW_e2 = POW_NORM_Y, POW_r, POW_U + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_Z2 = POW_twoV, POW_Q0_half, POW_U + nop.i 999 +} +;; + +// p11 = TRUE ==> X is NEGATIVE +// p8 = TRUE ==> X is zero AND Y is outside intger range (treat as even int) +// return +0 +{ .mfi + nop.m 999 + fclass.m.unc p11,p0 = f8, 0x1a + nop.i 999 +} +{ .mfb + nop.m 999 +(p8) fma.s f8 = f0,f0,f0 +(p8) br.ret.spnt b0 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_Yrcub = POW_rsq, POW_U, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_p = POW_rsq, POW_v3, POW_v2 + nop.i 999 +} +;; + + +// p11 = TRUE ==> X is NEGATIVE +// p12 = TRUE ==> X is NEGATIVE AND Y already int +// p13 = TRUE ==> X is NEGATIVE AND Y possible int +{ .mfi + nop.m 999 + fma.s1 POW_Z1 = POW_NORM_Y, POW_G, f0 +(p11) cmp.ge.unc p12,p13 = pow_GR_exp_Y, pow_GR_10033 +} +{ .mfi + nop.m 999 + fma.s1 POW_e3 = POW_NORM_Y, POW_delta, f0 + nop.i 999 +} +;; + +// p9 = TRUE ==> X is zero AND Y is within integer range (may not be integer) +// p6 = TRUE ==> X is zero AND Y is an integer (may be even or odd) +// p7 = TRUE ==> X is zero AND Y is NOT an integer, return +0 +{ .mfi + nop.m 999 +(p9) fcmp.eq.unc.s1 p6,p7 = POW_float_int_Y, POW_NORM_Y + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_Gpr = POW_G, f1, POW_r + nop.i 999 +} +;; + +// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand +{ .mfi + nop.m 999 + fma.s1 POW_W2 = POW_Z2, POW_inv_log2_by_128, POW_RSHF + nop.i 999 +} +{ .mfi + nop.m 999 + fms.s1 POW_UmZ2 = POW_U, f1, POW_Z2 + nop.i 999 +} +;; + + +// If x=0 and y>0, test y and flag denormal +// p6 = TRUE ==> X is zero AND Y is an integer (may be even or odd) +// p8 = TRUE ==> X is zero AND Y is an odd integer +// p9 = TRUE ==> X is zero AND Y is an even integer +{ .mfi + nop.m 999 +(p10) fcmp.eq.s0 p15,p0 = f9,f0 +(p6) tbit.nz.unc p8,p9 = pow_GR_sig_int_Y,0 +} +{ .mfi + nop.m 999 + fma.s1 POW_Z3 = POW_p, POW_Yrcub, f0 + nop.i 999 +} +;; + +// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand +{ .mfi + nop.m 999 + fms.s1 POW_e1 = POW_NORM_Y, POW_G, POW_Z1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_W1 = POW_Z1, POW_inv_log2_by_128, POW_RSHF + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p7) fma.s f8 = f0,f0,f0 // Result +0 if x zero and y not integer + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 POW_Y_Gpr = POW_NORM_Y, POW_Gpr, f0 +(p8) br.ret.spnt b0 // Exit if x zero and y odd integer +} +;; + +// By subtracting RSHF we get rounded integer POW_N2float +// p15 = TRUE ==> X_0_Y_NEG +{ .mfi + nop.m 999 + fms.s1 POW_N2float = POW_W2, f1, POW_RSHF + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 POW_UmZ2pV = POW_twoV,POW_Q0_half,POW_UmZ2 +(p15) br.cond.spnt L(POW_X_0_Y_NEG) +} +;; + + + +{ .mfi + nop.m 999 + fma.s1 POW_Z3sq = POW_Z3, POW_Z3, f0 + nop.i 999 +} +{ .mfb + nop.m 999 + fma.s1 POW_v4 = POW_Z3, POW_Q3, POW_Q2 +(p7) br.ret.spnt b0 // Exit if x zero and y not an integer +} +;; + + + +// Extract rounded integer from rightmost significand of POW_W2 +// By subtracting RSHF we get rounded integer POW_N1float +{ .mfi + getf.sig pow_GR_int_W2 = POW_W2 + fms.s1 POW_N1float = POW_W1, f1, POW_RSHF + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_v2 = POW_Z3, POW_Q1, POW_Q0_half + nop.i 999 +} +;; + + + + +// p13 = TRUE ==> X is NEGATIVE AND Y possible int +// p10 = TRUE ==> X is NEG and Y is an int +// p12 = TRUE ==> X is NEG and Y is not an int +{ .mfi + nop.m 999 +(p13) fcmp.eq.unc.s1 p10,p12 = POW_float_int_Y, POW_NORM_Y + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fma.s f8 = f0,f0,f0 // Result +0 if x zero and y even integer +(p9) br.ret.spnt b0 // Exit if x zero and y even integer +} +;; + + +{ .mfi + nop.m 999 + fnma.s1 POW_s2 = POW_N2float, POW_log2_by_128_hi, POW_Z2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_e2 = POW_e2,f1,POW_UmZ2pV + nop.i 999 +} +;; + +// Extract rounded integer from rightmost significand of POW_W1 +// Test if x inf +{ .mfi + getf.sig pow_GR_int_W1 = POW_W1 + fclass.m.unc p15,p0 = POW_NORM_X, 0x23 + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 POW_f2 = POW_N2float, POW_log2_by_128_lo, f1 +(p12) br.cond.spnt L(POW_X_NEG_Y_NONINT) // Branch if x neg, y not integer +} +;; + +// p12 = TRUE ==> X is NEGATIVE AND Y is an odd integer +{ .mfi + getf.exp pow_GR_signexp_Y_Gpr = POW_Y_Gpr + fma.s1 POW_v3 = POW_Z3sq, POW_Q4, POW_v4 +(p10) tbit.nz.unc p12,p0 = pow_GR_sig_int_Y,0 +} +;; + + +{ .mfi + add pow_GR_int_N = pow_GR_int_W1, pow_GR_int_W2 + fnma.s1 POW_f1 = POW_N1float, POW_log2_by_128_lo, f1 + nop.i 999 +} +{ .mfb + nop.m 999 + fnma.s1 POW_s1 = POW_N1float, POW_log2_by_128_hi, POW_Z1 +(p15) br.cond.spnt L(POW_X_INF) +} +;; + + +// Test x and y and flag denormal +{ .mfi + and pow_GR_index1 = 0x0f, pow_GR_int_N + fcmp.eq.s0 p15,p0 = f8,f9 + shr r2 = pow_GR_int_N, 7 +} +{ .mfi + and pow_GR_exp_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones + nop.f 999 + and pow_GR_index2 = 0x70, pow_GR_int_N +} +;; + + + +{ .mfi + shladd pow_AD_T1 = pow_GR_index1, 4, pow_AD_tbl1 + fcmp.eq.s1 p7,p0 = POW_NORM_Y, f1 // Test for y=1.0 + sub pow_GR_true_exp_Y_Gpr = pow_GR_exp_Y_Gpr, pow_GR_16ones +} +{ .mfi + addl pow_int_GR_M = 0xFFFF, r2 + fma.s1 POW_e12 = POW_e1,f1,POW_e2 + add pow_AD_T2 = pow_AD_tbl2, pow_GR_index2 +} +;; + + +{ .mmi + ldfe POW_T1 = [pow_AD_T1],16 + setf.exp POW_2M = pow_int_GR_M + andcm pow_GR_sign_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones +} +;; + + +{ .mfb + ldfe POW_T2 = [pow_AD_T2],16 + fma.s1 POW_q = POW_Z3sq, POW_v3, POW_v2 +(p7) br.ret.spnt b0 // Early exit if y=1.0, result is x +} +;; + + +// double: p8 TRUE ==> |Y(G + r)| >= 10 +// single: p8 TRUE ==> |Y(G + r)| >= 7 + +// double +// -2^10 -2^9 2^9 2^10 +// -----+-----+----+ ... +-----+-----+----- +// p8 | p9 | p8 +// | | p10 | | +// single +// -2^7 -2^6 2^6 2^7 +// -----+-----+----+ ... +-----+-----+----- +// p8 | p9 | p8 +// | | p10 | | + + +{ .mfi +(p0) cmp.le.unc p8,p9 = 7, pow_GR_true_exp_Y_Gpr + fma.s1 POW_s = POW_s1, f1, POW_s2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_f12 = POW_f1, POW_f2,f0 + nop.i 999 +} +;; + + +{ .mfi + nop.f 999 +(p9) cmp.le.unc p0,p10 = 6, pow_GR_true_exp_Y_Gpr +} +;; + + + +{ .mfb + nop.m 999 + fma.s1 POW_e123 = POW_e12, f1, POW_e3 +(p8) br.cond.spnt L(POW_OVER_UNDER_X_NOT_INF) +} +;; + + +{ .mmf + fma.s1 POW_q = POW_Z3sq, POW_q, POW_Z3 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 POW_ssq = POW_s, POW_s, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_v4 = POW_s, POW_Q3, POW_Q2 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_v2 = POW_s, POW_Q1, POW_Q0_half + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_1ps = f1,f1,POW_s + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_f3 = POW_e123,f1,f1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_T1T2 = POW_T1, POW_T2, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_v3 = POW_ssq, POW_Q4, POW_v4 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_v21ps = POW_ssq, POW_v2, POW_1ps + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 POW_s4 = POW_ssq, POW_ssq, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_f123 = POW_f12, POW_f3, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_A = POW_2M, POW_T1T2, f0 + nop.i 999 +} +;; + + + +{ .mfi + nop.m 999 +(p12) fmerge.s POW_f123 = f8,POW_f123 // if x neg, y odd int + nop.i 999 +} +{ .mfi + nop.m 999 +// fma.s1 POW_es = POW_ssq, POW_v3, POW_v2 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 POW_es = POW_s4, POW_v3, POW_v21ps + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 POW_A = POW_A, POW_f123, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +// fma.s1 POW_es = POW_es, POW_ssq, POW_1ps + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fma.s1 POW_A = POW_A, POW_es,f0 + nop.i 999 +} +;; + + + +{ .mfb + nop.m 999 +(p10) fma.s f8 = POW_A, POW_q, POW_A +(p10) br.ret.sptk b0 +} +;; + + + + + +// POSSIBLE_OVER_UNDER +// p6 = TRUE ==> Y negative + +{ .mfi + nop.m 999 + fmerge.s POW_abs_A = f0, POW_A + cmp.eq.unc p0,p6 = pow_GR_sign_Y, r0 +} +;; + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(POW_POSSIBLE_UNDER) +} +;; + +// POSSIBLE_OVER +// We got an answer. +// overflow is a possibility, not a certainty + + +// We define an overflow when the answer with +// WRE set +// user-defined rounding mode + +// double +// Largest double is 7FE (biased double) +// 7FE - 3FF + FFFF = 103FE +// Create + largest_double_plus_ulp +// Create - largest_double_plus_ulp +// Calculate answer with WRE set. + +// single +// Largest single is FE (biased double) +// FE - 7F + FFFF = 1007E +// Create + largest_single_plus_ulp +// Create - largest_single_plus_ulp +// Calculate answer with WRE set. + +// Cases when answer is ldn+1 are as follows: +// ldn ldn+1 +// --+----------|----------+------------ +// | +// +inf +inf -inf +// RN RN +// RZ + + +// Put in s2 (td set, wre set) +{ .mfi + mov pow_GR_gt_ln = 0x1007f + fsetc.s2 0x7F,0x42 + nop.i 999 +} +;; + + +{ .mfi + setf.exp POW_gt_pln = pow_GR_gt_ln + fma.s.s2 POW_wre_urm_f8 = POW_abs_A, POW_q, POW_abs_A + nop.i 999 ;; +} + +// Return s2 to default +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 +} +;; + + +// p7 = TRUE ==> yes, we have an overflow +{ .mfi + nop.m 999 + fcmp.ge.unc.s1 p7, p0 = POW_wre_urm_f8, POW_gt_pln + nop.i 999 +} +;; + + + +{ .mfb +(p7) mov pow_GR_tag = 30 + fma.s f8 = POW_A, POW_q, POW_A +(p7) br.cond.spnt __libm_error_region +} +{ .mfb + nop.m 999 + nop.f 999 +(p0) br.ret.sptk b0 +} +;; + + +L(POW_POSSIBLE_UNDER): +// We got an answer. input was < -2^9 but > -2^10 (double) +// We got an answer. input was < -2^6 but > -2^7 (float) +// underflow is a possibility, not a certainty + +// We define an underflow when the answer with +// ftz set +// is zero (tiny numbers become zero) +// Notice (from below) that if we have an unlimited exponent range, +// then there is an extra machine number E between the largest denormal and +// the smallest normal. +// So if with unbounded exponent we round to E or below, then we are +// tiny and underflow has occurred. +// But notice that you can be in a situation where we are tiny, namely +// rounded to E, but when the exponent is bounded we round to smallest +// normal. So the answer can be the smallest normal with underflow. +// E +// -----+--------------------+--------------------+----- +// | | | +// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe +// 0.1...11 2^-3ffe (biased, 1) +// largest dn smallest normal + + +// Put in s2 (td set, ftz set) +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x41 + nop.i 999 +} +;; + + + +{ .mfi + nop.m 999 + fma.s.s2 POW_ftz_urm_f8 = POW_A, POW_q, POW_A + nop.i 999 +} +;; + + +// Return s2 to default +{ .mfi + nop.m 999 + fsetc.s2 0x7F,0x40 + nop.i 999 +} +;; + + +// p7 = TRUE ==> yes, we have an underflow +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p7, p0 = POW_ftz_urm_f8, f0 + nop.i 999 +} +;; + + + + +{ .mfb +(p7) mov pow_GR_tag = 31 + fma.s f8 = POW_A, POW_q, POW_A +(p7) br.cond.spnt __libm_error_region +} +;; + + +{ .mfb + nop.m 999 + nop.f 999 + br.ret.sptk b0 +} +;; + + +L(POW_X_DENORM): +// Here if x unorm. Use the NORM_X for getf instructions, and the back +// to normal path +{ .mfi + getf.exp pow_GR_signexp_X = POW_NORM_X + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + getf.sig pow_GR_sig_X = POW_NORM_X + nop.f 999 + nop.i 999 +} +;; + +{ .mfi + and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones + nop.f 999 +} +;; + +{ .mib + sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones + shl pow_GR_offset = pow_GR_sig_X, 1 + br.cond.sptk L(POW_COMMON) +} +;; + + +L(POW_X_0_Y_0): +// When X is +-0 and Y is +-0, IEEE returns 1.0 +// We call error support with this value + +{ .mfb + mov pow_GR_tag = 32 + fma.s f8 = f1,f1,f0 + br.cond.sptk __libm_error_region +} +;; + + + + +L(POW_X_INF): +// When X is +-inf and Y is +-, IEEE returns + +// overflow +// X +inf Y +inf +inf +// X -inf Y +inf +inf + +// X +inf Y >0 +inf +// X -inf Y >0, !odd integer +inf <== (-inf)^0.5 = +inf !! +// X -inf Y >0, odd integer -inf + +// underflow +// X +inf Y -inf +0 +// X -inf Y -inf +0 + +// X +inf Y <0 +0 +// X -inf Y <0, !odd integer +0 +// X -inf Y <0, odd integer -0 + +// X + inf Y=+0 +1 +// X + inf Y=-0 +1 +// X - inf Y=+0 +1 +// X - inf Y=-0 +1 + +// p13 == Y negative +// p14 == Y positive + +// p6 == Y is a floating point number outside the integer. +// Hence it is an integer and is even. +// p13 == (Y negative) +// return +inf +// p14 == (Y positive) +// return +0 + + + +// p7 == Y is a floating point number within the integer range. +// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. +// p11 odd +// p13 == (Y negative) +// return (sign_of_x)inf +// p14 == (Y positive) +// return (sign_of_x)0 +// pxx even +// p13 == (Y negative) +// return +inf +// p14 == (Y positive) +// return +0 + +// pxx == Y is not an integer +// p13 == (Y negative) +// return +inf +// p14 == (Y positive) +// return +0 +// + +// If x=inf, test y and flag denormal +{ .mfi + nop.m 999 + fcmp.eq.s0 p10,p11 = f9,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fcmp.lt p13,p14 = POW_NORM_Y,f0 + cmp.gt.unc p6,p7 = pow_GR_exp_Y, pow_GR_10033 +} +{ .mfi + nop.m 999 + fclass.m p12,p0 = f9, 0x23 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fclass.m p15,p0 = f9, 0x07 //@zero + nop.i 999 +} +;; + +{ .mfb + nop.m 999 +(p15) fmerge.s f8 = f1,f1 +(p15) br.ret.spnt b0 +} +;; + + +{ .mfi +(p13) mov pow_GR_tag = 31 +(p14) frcpa.s1 f8,p10 = f1,f0 + nop.i 999 +} +{ .mfb +(p14) mov pow_GR_tag = 30 +(p13) fma.s1 f8 = f0,f0,f0 +(p12) br.ret.spnt b0 +} +;; + + + +{ .mfb + nop.m 999 +(p7) fcmp.eq.unc.s1 p9,p0 = POW_float_int_Y, POW_NORM_Y + nop.b 999 +} +;; + +{ .mfi + nop.m 999 + nop.f 999 +(p9) tbit.nz.unc p11,p0 = pow_GR_sig_int_Y,0 +} +;; + +{ .mfb + nop.m 999 +(p11) fmerge.s f8 = POW_NORM_X,f8 + br.ret.sptk b0 +} +;; + + + +L(POW_X_0_Y_NEG): +// When X is +-0 and Y is negative, IEEE returns +// X Y answer +// +0 -odd int +inf +// -0 -odd int -inf + +// +0 !-odd int +inf +// -0 !-odd int +inf + + +// p6 == Y is a floating point number outside the integer. +// Hence it is an integer and is even. +// return +inf + +// p7 == Y is a floating point number within the integer range. +// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. +// p11 odd +// return (sign_of_x)inf +// p12 even +// return +inf +// p10 == Y is not an integer +// return +inf +// +// + +{ .mfi + nop.m 999 + nop.f 999 + cmp.gt.unc p6,p7 = pow_GR_exp_Y, pow_GR_10033 +} +;; + + +{ .mfi + mov pow_GR_tag = 33 +(p7) fcmp.eq.unc.s1 p9,p10 = POW_float_int_Y, POW_NORM_Y + nop.i 999 +} +;; + + +{ .mfb + nop.m 999 +(p6) frcpa.s0 f8,p13 = f1, f0 +(p6) br.cond.sptk __libm_error_region +} +;; + +{ .mfb + nop.m 999 +(p10) frcpa.s0 f8,p13 = f1, f0 +(p10) br.cond.sptk __libm_error_region +} +;; + + + +{ .mib + nop.m 999 +(p9) tbit.nz.unc p11,p12 = pow_GR_sig_int_Y,0 + nop.b 999 +} +;; + + + +{ .mfi + nop.m 999 +(p12) frcpa.s0 f8,p13 = f1,f0 + nop.i 999 +} +;; + +{ .mfb + nop.m 999 +(p11) frcpa f8,p13 = f1,f8 + br.cond.sptk __libm_error_region +} +;; + + + + +L(POW_X_NEG_Y_NONINT): +// When X is negative and Y is a non-integer, IEEE +// returns a qnan indefinite. +// We call error support with this value + +{ .mfb + mov pow_GR_tag = 34 + frcpa f8,p6 = f0,f0 + br.cond.sptk __libm_error_region +} +;; + + + + +L(POW_X_NAN_Y_0): +// When X is a NAN and Y is zero, IEEE returns 1. +// We call error support with this value. + +{ .mfi + nop.m 0 + fma.s.s0 f10 = f8,f1,f0 + nop.i 0 +} +{ .mfb + mov pow_GR_tag = 35 + fma.s.s0 f8 = f0,f0,f1 + br.cond.sptk __libm_error_region +} +;; + + +L(POW_OVER_UNDER_X_NOT_INF): + +// p8 is TRUE for overflow +// p9 is TRUE for underflow + +// if y is infinity, we should not over/underflow + + +{ .mfi + nop.m 999 + fcmp.eq.unc.s1 p14, p13 = POW_xsq,f1 + cmp.eq.unc p8,p9 = pow_GR_sign_Y_Gpr, r0 +} +;; + +{ .mfi + nop.m 999 +(p14) fclass.m.unc p15, p0 = f9, 0x23 + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fclass.m.unc p11,p0 = f9, 0x23 + nop.i 999 +} +;; + +// p15 = TRUE if |x|=1, y=inf, return +1 +{ .mfb + nop.m 999 +(p15) fma.s f8 = f1,f1,f0 +(p15) br.ret.spnt b0 +} +;; + +.pred.rel "mutex",p8,p9 +{ .mfb +(p8) setf.exp f8 = pow_GR_17ones +(p9) fmerge.s f8 = f0,f0 +(p11) br.ret.sptk b0 +} + +{ .mfb + nop.m 999 + nop.f 999 + br.cond.sptk L(POW_OVER_UNDER_ERROR) +} +;; + +L(POW_Y_NAN): + +// Is x = +1 then result is +1, else result is quiet Y +{ .mfi + nop.m 999 + fcmp.eq.s1 p10,p9 = POW_NORM_X, f1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p10) fcmp.eq.s0 p6,p0 = f9,f1 // Set invalid, even if x=+1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p10) fma.s f8 = f1,f1,f0 + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fma.s f8 = f9,f8,f0 + br.ret.sptk b0 +} +;; + + +L(POW_OVER_UNDER_ERROR): + +{ .mfi + nop.m 999 + fmerge.s f10 = POW_NORM_X,POW_NORM_X + nop.i 999 +} +{ .mfi + sub pow_GR_17ones_m1 = pow_GR_17ones, r0, 1 + nop.f 999 + mov pow_GR_one = 0x1 +} +;; + +// overflow +{ .mmb +(p8) mov pow_GR_tag = 30 +(p8) setf.exp f11 = pow_GR_17ones_m1 + nop.b 999 +} +;; + + +// underflow +{ .mmi +(p9) mov pow_GR_tag = 31 +(p9) setf.exp f11 = pow_GR_one + nop.i 999 +} +;; + + +// p12 x is negative and y is an odd integer + + +{ .mfi + nop.m 999 + fma.s f8 = f11, f11, f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p12) fmerge.ns f8 = f8, f8 + nop.i 999 +} +;; + + +.endp powf +ASM_SIZE_DIRECTIVE(powf) + + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + + +.proc __libm_error_region +__libm_error_region: + +// Answer is inf for overflow and 0 for underflow. +.prologue +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfs [GR_Parameter_Y] = POW_NORM_Y,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfs [GR_Parameter_X] = POW_NORM_X // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_powl.S glibc-2.2.3/sysdeps/ia64/fpu/e_powl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_powl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_powl.S Mon Feb 19 00:46:01 2001 @@ -0,0 +1,3437 @@ +.file "powl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// Function: powl(x,y), where +// y +// powl(x,y) = x , for double extended precision x and y values +// +// ********************************************************************* +// +// History: +// 2/02/00 (Hand Optimized) +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 1/22/01 Corrected results for powl(1,inf), powl(1,nan), and +// powl(snan,0) to be 1 per C99, not nan. Fixed many flag settings. +// 2/06/01 Call __libm_error support if over/underflow when y=2. +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: +// f8 (Input and Return Value) +// f9-f15,f32-f63,f99 +// +// General Purpose Registers: +// Locals r32 - r61 +// Parameters to __libm_error_support r62,r63,r64,r65 +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// Special Cases and IEEE special conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions raised when appropriate for pow +// Underflow exceptions raised when appropriate for pow +// (Error Handling Routine called for overflow and Underflow) +// Inexact raised when appropriate by algorithm +// +// 1. (anything) ** NatVal or (NatVal) ** anything is NatVal +// 2. X or Y unsupported or sNaN is qNaN/Invalid +// 3. (anything) ** 0 is 1 +// 4. (anything) ** 1 is itself +// 5. (anything except 1) ** qNAN is qNAN +// 6. qNAN ** (anything except 0) is qNAN +// 7. +-(|x| > 1) ** +INF is +INF +// 8. +-(|x| > 1) ** -INF is +0 +// 9. +-(|x| < 1) ** +INF is +0 +// 10. +-(|x| < 1) ** -INF is +INF +// 11. +-1 ** +-INF is +1 +// 12. +0 ** (+anything except 0, NAN) is +0 +// 13. -0 ** (+anything except 0, NAN, odd integer) is +0 +// 14. +0 ** (-anything except 0, NAN) is +INF/div_0 +// 15. -0 ** (-anything except 0, NAN, odd integer) is +INF/div_0 +// 16. -0 ** (odd integer) = -( +0 ** (odd integer) ) +// 17. +INF ** (+anything except 0,NAN) is +INF +// 18. +INF ** (-anything except 0,NAN) is +0 +// 19. -INF ** (anything except NAN) = -0 ** (-anything) +// 20. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) +// 21. (-anything except 0 and inf) ** (non-integer) is qNAN/Invalid +// 22. X or Y denorm/unorm and denorm/unorm operand trap is enabled, +// generate denorm/unorm fault except if invalid or div_0 raised. +// +// ********************************************************************* +// +// Algorithm +// ========= +// +// Special Cases +// +// If Y = 2, return X*X. +// If Y = 0.5, return sqrt(X). +// +// Compute log(X) to extra precision. +// +// ker_log_80( X, logX_hi, logX_lo, Safe ); +// +// ...logX_hi + logX_lo approximates log(X) to roughly 80 +// ...significant bits of accuracy. +// +// Compute Y*log(X) to extra precision. +// +// P_hi := Y * logX_hi +// P_lo := Y * logX_hi - P_hi ...using FMA +// P_lo := Y * logX_lo + P_lo ...using FMA +// +// Compute exp(P_hi + P_lo) +// +// Flag := 2; +// Expo_Range := 2; (assuming double-extended power function) +// ker_exp_64( P_hi, P_lo, Flag, Expo_Range, +// Z_hi, Z_lo, scale, Safe ) +// +// scale := sgn * scale +// +// If (Safe) then ...result will not over/underflow +// return scale*Z_hi + (scale*Z_lo) +// quickly +// Else +// take necessary precaution in computing +// scale*Z_hi + (scale*Z_lo) +// to set possible exceptions correctly. +// End If +// +// Case_Y_Special +// +// ...Follow the order of the case checks +// +// If Y is +-0, return +1 without raising any exception. +// If Y is +1, return X without raising any exception. +// If Y is qNaN, return Y without exception. +// If X is qNaN, return X without exception. +// +// At this point, X is real and Y is +-inf. +// Thus |X| can only be 1, strictly bigger than 1, or +// strictly less than 1. +// +// If |X| < 1, then +// return ( Y == +inf? +0 : +inf ) +// elseif |X| > 1, then +// return ( Y == +inf? +0 : +inf ) +// else +// goto Case_Invalid +// +// Case_X_Special +// +// ...Follow the order of the case checks +// ...Note that Y is real, finite, non-zero, and not +1. +// +// If X is qNaN, return X without exception. +// +// If X is +-0, +// return ( Y > 0 ? +0 : +inf ) +// +// If X is +inf +// return ( Y > 0 ? +inf : +0 ) +// +// If X is -inf +// return -0 ** -Y +// return ( Y > 0 ? +inf : +0 ) +// +// Case_Invalid +// +// Return 0 * inf to generate a quiet NaN together +// with an invalid exception. +// +// Implementation +// ============== +// +// We describe the quick branch since this part is important +// in reaching the normal case efficiently. +// +// STAGE 1 +// ------- +// This stage contains two threads. +// +// Stage1.Thread1 +// +// fclass.m X_excep, X_ok = X, (NatVal or s/qNaN) or +// +-0, +-infinity +// +// fclass.nm X_unsupp, X_supp = X, (NatVal or s/qNaN) or +// +-(0, unnorm, norm, infinity) +// +// X_norm := fnorm( X ) with traps disabled +// +// If (X_excep) goto Filtering (Step 2) +// If (X_unsupp) goto Filtering (Step 2) +// +// Stage1.Thread2 +// .............. +// +// fclass.m Y_excep, Y_ok = Y, (NatVal or s/qNaN) or +// +-0, +-infinity +// +// fclass.nm Y_unsupp, Y_supp = Y, (NatVal or s/qNaN) or +// +-(0, unnorm, norm, infinity) +// +// Y_norm := fnorm( Y ) with traps disabled +// +// If (Y_excep) goto Filtering (Step 2) +// If (Y_unsupp) goto Filtering (Step 2) +// +// +// STAGE 2 +// ------- +// This stage contains two threads. +// +// Stage2.Thread1 +// .............. +// +// Set X_lt_0 if X < 0 (using fcmp) +// sgn := +1.0 +// If (X_lt_0) goto Filtering (Step 2) +// +// Stage2.Thread2 +// .............. +// +// Set Y_is_1 if Y = +1 (using fcmp) +// If (Y_is_1) goto Filtering (Step 2) +// +// STAGE 3 +// ------- +// This stage contains two threads. +// +// +// Stage3.Thread1 +// .............. +// +// X := fnorm(X) in prevailing traps +// +// +// Stage3.Thread2 +// .............. +// +// Y := fnorm(Y) in prevailing traps +// +// STAGE 4 +// ------- +// +// Go to Case_Normal. +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif + +// Inv_L, L_hi, L_lo +.align 64 +Constants_exp_64_Arg: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Arg,@object) +data4 0x5C17F0BC,0xB8AA3B29,0x0000400B,0x00000000 +data4 0x00000000,0xB17217F4,0x00003FF2,0x00000000 +data4 0xF278ECE6,0xF473DE6A,0x00003FD4,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_exp_64_Arg) + +.align 64 +Constants_exp_64_Exponents: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Exponents,@object) +data4 0x0000007E,0x00000000,0xFFFFFF83,0xFFFFFFFF +data4 0x000003FE,0x00000000,0xFFFFFC03,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0xFFFFFFE2,0xFFFFFFFF,0xFFFFFFC4,0xFFFFFFFF +data4 0xFFFFFFBA,0xFFFFFFFF,0xFFFFFFBA,0xFFFFFFFF +ASM_SIZE_DIRECTIVE(Constants_exp_64_Exponents) + +.align 64 +Constants_exp_64_A: +ASM_TYPE_DIRECTIVE(Constants_exp_64_A,@object) +// Reversed +data4 0xB1B736A0,0xAAAAAAAB,0x00003FFA,0x00000000 +data4 0x90CD6327,0xAAAAAAAB,0x00003FFC,0x00000000 +data4 0xFFFFFFFF,0xFFFFFFFF,0x00003FFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_exp_64_A) + +.align 64 +Constants_exp_64_P: +ASM_TYPE_DIRECTIVE(Constants_exp_64_P,@object) +// Reversed +data4 0x43914A8A,0xD00D6C81,0x00003FF2,0x00000000 +data4 0x30304B30,0xB60BC4AC,0x00003FF5,0x00000000 +data4 0x7474C518,0x88888888,0x00003FF8,0x00000000 +data4 0x8DAE729D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAAF61,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x000004C7,0x80000000,0x00003FFE,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_exp_64_P) + +.align 64 +Constants_exp_64_T1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T1,@object) +data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 +data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 +data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC +data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D +data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA +data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 +data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A +data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 +data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B +data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD +data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 +data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B +data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 +data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A +data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 +data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C +ASM_SIZE_DIRECTIVE(Constants_exp_64_T1) + +.align 64 +Constants_exp_64_T2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T2,@object) +data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 +data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 +data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E +data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 +data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 +data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA +data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 +data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A +data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 +data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA +data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 +data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA +data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 +data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 +data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE +data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 +ASM_SIZE_DIRECTIVE(Constants_exp_64_T2) + +.align 64 +Constants_exp_64_W1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W1,@object) +data4 0x00000000,0x00000000,0x171EC4B4,0xBE384454 +data4 0x4AA72766,0xBE694741,0xD42518F8,0xBE5D32B6 +data4 0x3A319149,0x3E68D96D,0x62415F36,0xBE68F4DA +data4 0xC9C86A3B,0xBE6DDA2F,0xF49228FE,0x3E6B2E50 +data4 0x1188B886,0xBE49C0C2,0x1A4C2F1F,0x3E64BFC2 +data4 0x2CB98B54,0xBE6A2FBB,0x9A55D329,0x3E5DC5DE +data4 0x39A7AACE,0x3E696490,0x5C66DBA5,0x3E54728B +data4 0xBA1C7D7D,0xBE62B0DB,0x09F1AF5F,0x3E576E04 +data4 0x1A0DD6A1,0x3E612500,0x795FBDEF,0xBE66A419 +data4 0xE1BD41FC,0xBE5CDE8C,0xEA54964F,0xBE621376 +data4 0x476E76EE,0x3E6370BE,0x3427EB92,0x3E390D1A +data4 0x2BF82BF8,0x3E1336DE,0xD0F7BD9E,0xBE5FF1CB +data4 0x0CEB09DD,0xBE60A355,0x0980F30D,0xBE5CA37E +data4 0x4C082D25,0xBE5C541B,0x3B467D29,0xBE5BBECA +data4 0xB9D946C5,0xBE400D8A,0x07ED374A,0xBE5E2A08 +data4 0x365C8B0A,0xBE66CB28,0xD3403BCA,0x3E3AAD5B +data4 0xC7EA21E0,0x3E526055,0xE72880D6,0xBE442C75 +data4 0x85222A43,0x3E58B2BB,0x522C42BF,0xBE5AAB79 +data4 0x469DC2BC,0xBE605CB4,0xA48C40DC,0xBE589FA7 +data4 0x1AA42614,0xBE51C214,0xC37293F4,0xBE48D087 +data4 0xA2D673E0,0x3E367A1C,0x114F7A38,0xBE51BEBB +data4 0x661A4B48,0xBE6348E5,0x1D3B9962,0xBDF52643 +data4 0x35A78A53,0x3E3A3B5E,0x1CECD788,0xBE46C46C +data4 0x7857D689,0xBE60B7EC,0xD14F1AD7,0xBE594D3D +data4 0x4C9A8F60,0xBE4F9C30,0x02DFF9D2,0xBE521873 +data4 0x55E6D68F,0xBE5E4C88,0x667F3DC4,0xBE62140F +data4 0x3BF88747,0xBE36961B,0xC96EC6AA,0x3E602861 +data4 0xD57FD718,0xBE3B5151,0xFC4A627B,0x3E561CD0 +data4 0xCA913FEA,0xBE3A5217,0x9A5D193A,0x3E40A3CC +data4 0x10A9C312,0xBE5AB713,0xC5F57719,0x3E4FDADB +data4 0xDBDF59D5,0x3E361428,0x61B4180D,0x3E5DB5DB +data4 0x7408D856,0xBE42AD5F,0x31B2B707,0x3E2A3148 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W1) + +.align 64 +Constants_exp_64_W2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W2,@object) +data4 0x00000000,0x00000000,0x37A3D7A2,0xBE641F25 +data4 0xAD028C40,0xBE68DD57,0xF212B1B6,0xBE5C77D8 +data4 0x1BA5B070,0x3E57878F,0x2ECAE6FE,0xBE55A36A +data4 0x569DFA3B,0xBE620608,0xA6D300A3,0xBE53B50E +data4 0x223F8F2C,0x3E5B5EF2,0xD6DE0DF4,0xBE56A0D9 +data4 0xEAE28F51,0xBE64EEF3,0x367EA80B,0xBE5E5AE2 +data4 0x5FCBC02D,0x3E47CB1A,0x9BDAFEB7,0xBE656BA0 +data4 0x805AFEE7,0x3E6E70C6,0xA3415EBA,0xBE6E0509 +data4 0x49BFF529,0xBE56856B,0x00508651,0x3E66DD33 +data4 0xC114BC13,0x3E51165F,0xC453290F,0x3E53333D +data4 0x05539FDA,0x3E6A072B,0x7C0A7696,0xBE47CD87 +data4 0xEB05C6D9,0xBE668BF4,0x6AE86C93,0xBE67C3E3 +data4 0xD0B3E84B,0xBE533904,0x556B53CE,0x3E63E8D9 +data4 0x63A98DC8,0x3E212C89,0x032A7A22,0xBE33138F +data4 0xBC584008,0x3E530FA9,0xCCB93C97,0xBE6ADF82 +data4 0x8370EA39,0x3E5F9113,0xFB6A05D8,0x3E5443A4 +data4 0x181FEE7A,0x3E63DACD,0xF0F67DEC,0xBE62B29D +data4 0x3DDE6307,0x3E65C483,0xD40A24C1,0x3E5BF030 +data4 0x14E437BE,0x3E658B8F,0xED98B6C7,0xBE631C29 +data4 0x04CF7C71,0x3E6335D2,0xE954A79D,0x3E529EED +data4 0xF64A2FB8,0x3E5D9257,0x854ED06C,0xBE6BED1B +data4 0xD71405CB,0x3E5096F6,0xACB9FDF5,0xBE3D4893 +data4 0x01B68349,0xBDFEB158,0xC6A463B9,0x3E628D35 +data4 0xADE45917,0xBE559725,0x042FC476,0xBE68C29C +data4 0x01E511FA,0xBE67593B,0x398801ED,0xBE4A4313 +data4 0xDA7C3300,0x3E699571,0x08062A9E,0x3E5349BE +data4 0x755BB28E,0x3E5229C4,0x77A1F80D,0x3E67E426 +data4 0x6B69C352,0xBE52B33F,0x084DA57F,0xBE6B3550 +data4 0xD1D09A20,0xBE6DB03F,0x2161B2C1,0xBE60CBC4 +data4 0x78A2B771,0x3E56ED9C,0x9D0FA795,0xBE508E31 +data4 0xFD1A54E9,0xBE59482A,0xB07FD23E,0xBE2A17CE +data4 0x17365712,0x3E68BF5C,0xB3785569,0x3E3956F9 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W2) + +.align 64 +Constants_log_80_P: +ASM_TYPE_DIRECTIVE(Constants_log_80_P,@object) +// 1/2, P_8, P_7, ..., P_1 +data4 0x00000000, 0x80000000, 0x00003FFE, 0x00000000 +data4 0x3B1042BC, 0xCCCE8B88, 0x0000BFFB, 0x00000000 +data4 0xCADC2149, 0xE38997B7, 0x00003FFB, 0x00000000 +data4 0xB1ACB090, 0xFFFFFFFE, 0x0000BFFB, 0x00000000 +data4 0x06481C81, 0x92492498, 0x00003FFC, 0x00000000 +data4 0xAAAAB0EF, 0xAAAAAAAA, 0x0000BFFC, 0x00000000 +data4 0xCCC91416, 0xCCCCCCCC, 0x00003FFC, 0x00000000 +data4 0x00000000, 0x80000000, 0x0000BFFD, 0x00000000 +data4 0xAAAAAAAB, 0xAAAAAAAA, 0x00003FFD +ASM_SIZE_DIRECTIVE(Constants_log_80_P) + +.align 64 +Constants_log_80_Q: +ASM_TYPE_DIRECTIVE(Constants_log_80_Q,@object) +// log2_hi, log2_lo, Q_6, Q_5, Q_4, Q_3, Q_2, Q_1 +data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 +data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 +data4 0xA51BE0AF,0x92492453,0x00003FFC,0x00000000 +data4 0xA0CFD29F,0xAAAAAB73,0x0000BFFC,0x00000000 +data4 0xCCCE3872,0xCCCCCCCC,0x00003FFC,0x00000000 +data4 0xFFFFB4FB,0xFFFFFFFF,0x0000BFFC,0x00000000 +data4 0xAAAAAAAB,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0x00000000,0x80000000,0x0000BFFE,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_log_80_Q) + +.align 64 +Constants_log_80_Z_G_H_h1: +ASM_TYPE_DIRECTIVE(Constants_log_80_Z_G_H_h1,@object) +// Z1 - 16 bit fixed, G1 and H1 IEEE single, h1 IEEE double +data4 0x00008000,0x3F800000,0x00000000,0x00000000 +data4 0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007879,0x3F70F0F0,0x3D785196,0x00000000 +data4 0xEBA0E0D1,0x8B1D330B,0x00003FDA,0x00000000 +data4 0x000071C8,0x3F638E38,0x3DF13843,0x00000000 +data4 0x9EADD553,0xE2AF365E,0x00003FE2,0x00000000 +data4 0x00006BCB,0x3F579430,0x3E2FF9A0,0x00000000 +data4 0x752F34A2,0xF585FEC3,0x0000BFE3,0x00000000 +data4 0x00006667,0x3F4CCCC8,0x3E647FD6,0x00000000 +data4 0x893B03F3,0xF3546435,0x00003FE2,0x00000000 +data4 0x00006187,0x3F430C30,0x3E8B3AE7,0x00000000 +data4 0x39CDD2AC,0xBABA62E0,0x00003FE4,0x00000000 +data4 0x00005D18,0x3F3A2E88,0x3EA30C68,0x00000000 +data4 0x457978A1,0x8718789F,0x00003FE2,0x00000000 +data4 0x0000590C,0x3F321640,0x3EB9CEC8,0x00000000 +data4 0x3185E56A,0x9442DF96,0x0000BFE4,0x00000000 +data4 0x00005556,0x3F2AAAA8,0x3ECF9927,0x00000000 +data4 0x2BBE2CBD,0xCBF9A4BF,0x00003FE4,0x00000000 +data4 0x000051EC,0x3F23D708,0x3EE47FC5,0x00000000 +data4 0x852D5935,0xF3537535,0x00003FE3,0x00000000 +data4 0x00004EC5,0x3F1D89D8,0x3EF8947D,0x00000000 +data4 0x46CDF32F,0xA1F1E699,0x0000BFDF,0x00000000 +data4 0x00004BDB,0x3F17B420,0x3F05F3A1,0x00000000 +data4 0xD8484CE3,0x84A61856,0x00003FE4,0x00000000 +data4 0x00004925,0x3F124920,0x3F0F4303,0x00000000 +data4 0xFF28821B,0xC7DD97E0,0x0000BFE2,0x00000000 +data4 0x0000469F,0x3F0D3DC8,0x3F183EBF,0x00000000 +data4 0xEF1FD32F,0xD3C4A887,0x00003FE3,0x00000000 +data4 0x00004445,0x3F088888,0x3F20EC80,0x00000000 +data4 0x464C76DA,0x84672BE6,0x00003FE5,0x00000000 +data4 0x00004211,0x3F042108,0x3F29516A,0x00000000 +data4 0x18835FB9,0x9A43A511,0x0000BFE5,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_log_80_Z_G_H_h1) + +.align 64 +Constants_log_80_Z_G_H_h2: +ASM_TYPE_DIRECTIVE(Constants_log_80_Z_G_H_h2,@object) +// Z2 - 16 bit fixed, G2 and H2 IEEE single, h2 IEEE double +data4 0x00008000,0x3F800000,0x00000000,0x00000000 +data4 0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007F81,0x3F7F00F8,0x3B7F875D,0x00000000 +data4 0x211398BF,0xAD08B116,0x00003FDB,0x00000000 +data4 0x00007F02,0x3F7E03F8,0x3BFF015B,0x00000000 +data4 0xC376958E,0xB106790F,0x00003FDE,0x00000000 +data4 0x00007E85,0x3F7D08E0,0x3C3EE393,0x00000000 +data4 0x79A7679A,0xFD03F242,0x0000BFDA,0x00000000 +data4 0x00007E08,0x3F7C0FC0,0x3C7E0586,0x00000000 +data4 0x05E7AE08,0xF03F81C3,0x0000BFDF,0x00000000 +data4 0x00007D8D,0x3F7B1880,0x3C9E75D2,0x00000000 +data4 0x049EB22F,0xD1B87D3C,0x00003FDE,0x00000000 +data4 0x00007D12,0x3F7A2328,0x3CBDC97A,0x00000000 +data4 0x3A9E81E0,0xFABC8B95,0x00003FDF,0x00000000 +data4 0x00007C98,0x3F792FB0,0x3CDCFE47,0x00000000 +data4 0x7C4B5443,0xF5F3653F,0x00003FDF,0x00000000 +data4 0x00007C20,0x3F783E08,0x3CFC15D0,0x00000000 +data4 0xF65A1773,0xE78AB204,0x00003FE0,0x00000000 +data4 0x00007BA8,0x3F774E38,0x3D0D874D,0x00000000 +data4 0x7B8EF695,0xDB7CBFFF,0x0000BFE0,0x00000000 +data4 0x00007B31,0x3F766038,0x3D1CF49B,0x00000000 +data4 0xCF773FB3,0xC0241AEA,0x0000BFE0,0x00000000 +data4 0x00007ABB,0x3F757400,0x3D2C531D,0x00000000 +data4 0xC9539FDF,0xFC8F4D48,0x00003FE1,0x00000000 +data4 0x00007A45,0x3F748988,0x3D3BA322,0x00000000 +data4 0x954665C2,0x9CD035FB,0x0000BFE1,0x00000000 +data4 0x000079D1,0x3F73A0D0,0x3D4AE46F,0x00000000 +data4 0xDD367A30,0xEC9017C7,0x00003FE1,0x00000000 +data4 0x0000795D,0x3F72B9D0,0x3D5A1756,0x00000000 +data4 0xCB11189C,0xEE6625D3,0x0000BFE1,0x00000000 +data4 0x000078EB,0x3F71D488,0x3D693B9D,0x00000000 +data4 0xBE11C424,0xA49C8DB5,0x0000BFE0,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_log_80_Z_G_H_h2) + +.align 64 +Constants_log_80_h3_G_H: +ASM_TYPE_DIRECTIVE(Constants_log_80_h3_G_H,@object) +// h3 IEEE double extended, H3 and G3 IEEE single +data4 0x112666B0,0xAAACAAB1,0x00003FD3,0x3F7FFC00 +data4 0x9B7FAD21,0x90051030,0x00003FD8,0x3F7FF400 +data4 0xF4D783C4,0xA6B46F46,0x00003FDA,0x3F7FEC00 +data4 0x11C6DDCA,0xDA148D88,0x0000BFD8,0x3F7FE400 +data4 0xCA964D95,0xCE65C1D8,0x0000BFD8,0x3F7FDC00 +data4 0x23412D13,0x883838EE,0x0000BFDB,0x3F7FD400 +data4 0x983ED687,0xB7E5CFA1,0x00003FDB,0x3F7FCC08 +data4 0xE3C3930B,0xDBE23B16,0x0000BFD9,0x3F7FC408 +data4 0x48AA4DFC,0x9B92F1FC,0x0000BFDC,0x3F7FBC10 +data4 0xCE9C8F7E,0x9A8CEB15,0x0000BFD9,0x3F7FB410 +data4 0x0DECE74A,0x8C220879,0x00003FDC,0x3F7FAC18 +data4 0x2F053150,0xB25CA912,0x0000BFDA,0x3F7FA420 +data4 0xD9A5BE20,0xA5876555,0x00003FDB,0x3F7F9C20 +data4 0x2053F087,0xC919BB6E,0x00003FD9,0x3F7F9428 +data4 0x041E9A77,0xB70BDA79,0x00003FDC,0x3F7F8C30 +data4 0xEA1C9C30,0xF18A5C08,0x00003FDA,0x3F7F8438 +data4 0x796D89E5,0xA3790D84,0x0000BFDD,0x3F7F7C40 +data4 0xA2915A3A,0xE1852369,0x0000BFDD,0x3F7F7448 +data4 0xA39ED868,0xD803858F,0x00003FDC,0x3F7F6C50 +data4 0x9417EBB7,0xB2EEE356,0x0000BFDD,0x3F7F6458 +data4 0x9BB0D07F,0xED5C1F8A,0x0000BFDC,0x3F7F5C68 +data4 0xE87C740A,0xD6D201A0,0x0000BFDD,0x3F7F5470 +data4 0x1CA74025,0xE8DEBF5E,0x00003FDC,0x3F7F4C78 +data4 0x1F34A7EB,0x9A995A97,0x0000BFDC,0x3F7F4488 +data4 0x359EED97,0x9CB0F742,0x0000BFDA,0x3F7F3C90 +data4 0xBBC6A1C8,0xD6F833C2,0x0000BFDD,0x3F7F34A0 +data4 0xE71090EC,0xE1F68F2A,0x00003FDC,0x3F7F2CA8 +data4 0xC160A74F,0xD1881CF1,0x0000BFDB,0x3F7F24B8 +data4 0xD78CB5A4,0x9AD05AE2,0x00003FD6,0x3F7F1CC8 +data4 0x9A77DC4B,0xE658CB8E,0x0000BFDD,0x3F7F14D8 +data4 0x6BD6D312,0xBA281296,0x00003FDC,0x3F7F0CE0 +data4 0xF95210D0,0xB478BBEB,0x0000BFDB,0x3F7F04F0 +data4 0x38800100,0x39400480,0x39A00640,0x39E00C41 // H's start here +data4 0x3A100A21,0x3A300F22,0x3A4FF51C,0x3A6FFC1D +data4 0x3A87F20B,0x3A97F68B,0x3AA7EB86,0x3AB7E101 +data4 0x3AC7E701,0x3AD7DD7B,0x3AE7D474,0x3AF7CBED +data4 0x3B03E1F3,0x3B0BDE2F,0x3B13DAAA,0x3B1BD766 +data4 0x3B23CC5C,0x3B2BC997,0x3B33C711,0x3B3BBCC6 +data4 0x3B43BAC0,0x3B4BB0F4,0x3B53AF6D,0x3B5BA620 +data4 0x3B639D12,0x3B6B9444,0x3B7393BC,0x3B7B8B6D +ASM_SIZE_DIRECTIVE(Constants_log_80_h3_G_H) + +.align 64 +Constant_half: +ASM_TYPE_DIRECTIVE(Constant_half,@object) +data4 0x00000000,0x80000000,0x00003FFE +ASM_SIZE_DIRECTIVE(Constant_half) + +GR_Expo_Range = r32 +GR_Flag = r33 +GR_Table_Ptr = r34 + +GR_Table_Ptr1 = r35 +GR_BIAS = r35 + +GR_Index1 = r36 +GR_sign_mask = r36 + +GR_Index2 = r37 +GR_Expo_X = r37 + +GR_signif_Z = r38 +GR_M = r38 + +GR_X_0 = r39 +GR_Mask = r39 + +GR_X_1 = r40 +GR_W1_ptr = r40 + +GR_W2_ptr = r41 +GR_X_2 = r41 + +GR_Z_1 = r42 +GR_M2 = r42 + +GR_M1 = r43 +GR_Z_2 = r43 + +GR_N = r44 +GR_k = r44 + +GR_Big_Pos_Exp = r45 + + +GR_BIAS_p_k = r47 +GR_BIASed_exp_y = r47 + +GR_Big_Neg_Exp = r48 +GR_Index3 = r48 +GR_temp = r48 + +GR_vsm_expo = r49 +GR_y_sign = r49 + +GR_T1_ptr = r50 +GR_T2_ptr = r51 +GR_N_fix = r52 +GR_exp_y = r53 +GR_signif_y = r54 +GR_exp_and_sign_y = r55 +GR_low_order_bit = r56 +GR_get_exp_mask = r57 +GR_exponent_zero = r58 + +// ** Registers for unwind support + +GR_SAVE_PFS = r59 +GR_SAVE_B0 = r60 +GR_SAVE_GP = r61 +GR_Parameter_X = r62 +GR_Parameter_Y = r63 +GR_Parameter_RESULT = r64 +GR_Parameter_TAG = r65 + +FR_X = f8 +FR_Y = f9 +FR_RESULT = f99 + +// ** + +FR_Input_X = f8 +FR_Output = f8 +FR_Input_Y = f9 + +FR_Neg = f10 +FR_P_hi = f10 +FR_X = f10 + +FR_Half = f11 +FR_h_3 = f11 +FR_poly_hi = f11 + +FR_Sgn = f12 + +FR_Neg_X = f13 +FR_half_W = f13 + +FR_X_cor = f14 +FR_P_lo = f14 + +FR_W = f15 + +FR_X_lo = f32 + +FR_S = f33 +FR_W3 = f33 + +FR_Y_hi = f34 +FR_logx_hi = f34 + +FR_Z = f35 +FR_logx_lo = f35 +FR_GS_hi = f35 +FR_Y_lo = f35 + +FR_r_cor = f36 +FR_Scale = f36 + +FR_G_1 = f37 +FR_G = f37 +FR_Wsq = f37 +FR_L_Inv = f37 +FR_temp = f37 + +FR_H_1 = f38 +FR_H = f38 +FR_W4 = f38 +FR_float_N = f38 + +FR_h = f39 +FR_h_1 = f39 +FR_N = f39 +FR_P_7 = f39 + +FR_G_2 = f40 +FR_P_8 = f40 +FR_L_hi = f40 + +FR_H_2 = f41 +FR_L_lo = f41 +FR_A_1 = f41 + +FR_h_2 = f42 +FR_P_6 = f42 + +FR_abs_W = f43 +FR_W1 = f43 + +FR_G_3 = f44 +FR_P_8 = f44 +FR_T1 = f44 + +FR_log2_hi = f45 +FR_W2 = f45 + +FR_GS_lo = f46 +FR_T2 = f46 + +FR_W_1_p1 = f47 +FR_H_3 = f47 + +FR_float_N = f48 + +FR_P_4 = f49 +FR_A_2 = f49 + +FR_Q_4 = f50 +FR_r4 = f50 + +FR_Q_3 = f51 +FR_A_3 = f51 + +FR_Q_2 = f52 +FR_P_2 = f52 + +FR_Q_1 = f53 +FR_P_1 = f53 +FR_T = f53 + +FR_Wp1 = f54 +FR_Q_5 = f54 +FR_P_3 = f54 + +FR_Q_6 = f55 + +FR_log2_lo = f56 +FR_Two = f56 + +FR_Big = f57 + +FR_neg_2_mK = f58 +FR_NBig = f58 + +FR_r = f59 + +FR_poly_lo = f60 + +FR_poly = f61 + +FR_P_5 = f62 + +FR_rsq = f63 + +FR_Result = f99 +FR_Result_small = f100 +FR_Result_big = f101 + +.section .text +.proc powl# +.global powl# +.align 64 + +powl: +{ .mfi +alloc GR_Expo_Range = ar.pfs,0,30,4,0 +(p0) fclass.m.unc p7, p13 = FR_Input_Y, 0x1E7 +nop.i 0 +} +{ .mfi +(p0) getf.exp GR_exp_and_sign_y = FR_Input_Y +// +// Save State +// +(p0) fclass.m.unc p6, p12 = FR_Input_X, 0x1E7 +nop.i 0 +};; +{ .mfi +(p0) getf.sig GR_signif_y = FR_Input_Y +(p0) fcmp.eq.unc.s1 p12, p13 = FR_Input_X, f1 +nop.i 0 +} +{ .mfi + nop.m 999 +// +// Check for y = 1 +// Identify EM unsupporteds. +// Load FR_half = .5 +// +(p0) fadd.s1 FR_Two = f1, f1 +// +// Load 1/2 in GP register +// +nop.i 0 +} +;; + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constant_half#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + +{ .mlx +(p0) ldfe FR_Half =[GR_Table_Ptr],0 +(p0) movl GR_get_exp_mask = 0x1FFFF ;; +} + +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p9, p15 = FR_Input_Y, 0x1FF +// +// Create FR_Two = 2 +// Get exp and significand of Y +// Crate Masks +// sgn = 1 +// +(p0) and GR_exp_y = GR_get_exp_mask,GR_exp_and_sign_y +} +{ .mlx + nop.m 999 +(p0) movl GR_exponent_zero = 0xFFFF ;; +} +{ .mfi + nop.m 999 +(p0) mov FR_Sgn = f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p10, p11 = FR_Input_Y, f1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Identify NatVals, NaNs, Infs, and Zeros. +// Load Half +// +(p0) fclass.nm.unc p8, p14 = FR_Input_X, 0x1FF +// +// Remove sign bit from exponent of y. +// Check for x = 1 +// +(p6) br.cond.spnt L(POWL_64_SPECIAL) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.spnt L(POWL_64_SPECIAL) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(POWL_64_UNSUPPORT) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt L(POWL_64_UNSUPPORT) ;; +} +{ .mfi +(p0) cmp.lt.unc p9, p0 = GR_exp_y,GR_exponent_zero +(p0) fcmp.lt.unc.s1 p6, p13 = FR_Input_X, f0 +// +// Branch on Infs, Nans, Zeros, and Natvals +// Check to see that exponent < 0 +// +(p0) sub GR_exp_y = GR_exp_y,GR_exponent_zero +} +// x not zero, is y ==2? +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p7, p14 = FR_Input_Y, FR_Two + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p9) fcmp.lt.unc.s1 p9, p0 = FR_Input_X, f0 +(p7) br.cond.spnt L(POWL_64_SQUARE) ;; // Branch if x not zero and y=2 +} +{ .mfi + nop.m 999 +(p6) fmerge.ns FR_Neg_X = FR_Input_X, FR_Input_X + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fmpy.s0 FR_Result = FR_Input_X, f1 +// +// For y = 1, compute result = x +// For x = 1, compute 1 +// When Y is one return X and possible raise +// denormal operand exception. +// Remove exponent BIAS +// +(p6) shl GR_exp_and_sign_y= GR_signif_y,GR_exp_y ;; +} +{ .mfi +(p9) or GR_exp_and_sign_y = 0xF,GR_signif_y +(p12) fma.s0 FR_Result = FR_Input_Y, f0, f1 + nop.i 999 ;; +} +{ .mii + nop.m 999 +(p6) extr.u GR_exp_y = GR_exp_and_sign_y,63,1 ;; +(p6) cmp.ne.unc p9, p0 = GR_exp_y, r0 +} +{ .mii + nop.m 999 +// +// Both predicates can be set. +// Don't consider y's < 1. +// +(p6) shl GR_signif_y= GR_exp_and_sign_y,1 ;; +// +// Is shift off integer part of y. +// Get y's even or odd bit. +// +(p6) cmp.ne.unc p8, p0 = GR_signif_y, r0 +} +{ .mib + nop.m 999 + nop.i 999 +// +// Is the fractional part of the y = 0? +// Is the integer even or odd. +// +(p10) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p12) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(POWL_64_XNEG) ;; +} +{ .mfi + nop.m 999 +(p9) fmerge.ns FR_Sgn = FR_Sgn, FR_Sgn + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s0 p11, p0 = FR_Input_Y, FR_Half + nop.i 999 ;; +} +// +// Raise possible denormal operand exception for both +// X and Y. +// +{ .mfb + nop.m 999 +// +// Branch for (x < 0) and Y not an integer. +// +(p0) fcmp.eq.unc.s0 p12, p0 = FR_Input_X, f1 +// +// For x < 0 and y integer, make x positive +// For x < 0 and y odd integer,, set sign = -1. +// +(p11) br.cond.spnt L(POWL_64_SQRT) ;; +} +{ .mmf +(p0) cmp.eq.unc p15, p14 = r0, r0 + nop.m 999 +(p13) fnorm.s1 FR_Z = FR_Input_X ;; +} +{ .mfi + nop.m 999 +(p6) fnorm.s1 FR_Z = FR_Neg_X + nop.i 999 +} +;; + +// +// Branch to embedded sqrt(x) +// +// +// Computes ln( x ) to extra precision +// Input FR 1: FR_X +// Output FR 2: FR_Y_hi +// Output FR 3: FR_Y_lo +// Output PR 1: PR_Safe +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_log_80_Z_G_H_h1#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + + +{ .mlx + nop.m 999 +(p0) movl GR_BIAS = 0x000000000000FFFF ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 FR_W = FR_Z, f1 + nop.i 999 ;; +} +// +// Z = Norm(X) - both + and - case +// Set Safe = True +// +{ .mmb +(p0) getf.sig GR_signif_Z = FR_Z +(p0) getf.exp GR_N = FR_Z + nop.b 999 ;; +} +{ .mii + nop.m 999 +// +// Get significand of Z +// W = Z - 1 +// +(p0) extr.u GR_Index1 = GR_signif_Z, 59, 4 ;; +// +// Index1 = High order 4 bits of Z +// X_0 = High order 15 bit of Z +// +(p0) shl GR_Index1 = GR_Index1,5 ;; +} +{ .mfi + nop.m 999 +// +// Add offset to Index1 ptr. +// +(p0) fabs FR_abs_W = FR_W +// +// BIAS = 0x000...FFFF +// Adjust Index1 ptr ( x 32) . +// +(p0) add GR_Index1 = GR_Index1,GR_Table_Ptr +} +{ .mmi + nop.m 999 ;; +(p0) ld2 GR_Z_1 =[GR_Index1],4 +(p0) extr.u GR_X_0 = GR_signif_Z, 49, 15 +} +;; + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_log_80_Z_G_H_h2#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + + +{ .mmi +(p0) ldfs FR_G_1 = [GR_Index1],4 ;; +(p0) ldfs FR_H_1 = [GR_Index1],8 + nop.i 999 ;; +} +// +// Adjust Index2 (x 32). +// +{ .mfi +(p0) ldfe FR_h_1 = [GR_Index1],0 + nop.f 999 +(p0) pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 ;; +} +{ .mmi + nop.m 999 ;; +// +// load Z_1 from Index1 +// abs_W = |W| +// Point to Table2 +// +(p0) getf.exp GR_M = FR_abs_W +// +// M = M - BIAS +// Load G_1 +// N = exponent of Z +// + nop.i 999;; +} +{ .mmi + nop.m 999 + nop.m 999 + nop.i 999;; +} +{ .mmi + nop.m 999 + nop.m 999 + nop.i 999;; +} +{ .mmi + nop.m 999 + nop.m 999 +(p0) extr.u GR_Index2 = GR_X_1, 6, 4 ;; +} +{ .mii + nop.m 999 +// +// Extract Index2 +// Load H_1 +// Is -8 > M ? +// +(p0) shl GR_Index2=GR_Index2,5 ;; +(p0) add GR_Index2 = GR_Index2, GR_Table_Ptr +} +// +// M = exponent of abs_W +// X_1 = X_0 * Z_1 +// +{ .mii +(p0) sub GR_M = GR_M, GR_BIAS + nop.i 999 ;; +(p0) cmp.gt.unc p7, p14 = -8, GR_M +} +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.spnt L(LOGL80_NEAR) ;; +} +// +// Load h_1 +// Possible branch out. +// Add offset of table to Index2 +// +{ .mfi +(p0) ld2 GR_Z_2 =[GR_Index2],4 +(p0) fmerge.se FR_S = f1,FR_Z +(p0) sub GR_N = GR_N, GR_BIAS +} +;; + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_log_80_h3_G_H#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + +// +// load Z_2 +// N - BIAS +// Point to Table 3. +// S = merging of Z and 1.0 +// +{ .mmi +(p0) ldfs FR_G_2 = [GR_Index2],4 +(p0) setf.sig FR_float_N = GR_N +(p0) add GR_Table_Ptr1 = 0x200,GR_Table_Ptr ;; +} +// +// load G_2 +// X_2 = X_1 * Z_2 +// Add offset to Table 2 ptr. +// float_N = significand of N +// +{ .mmi +(p0) ldfs FR_H_2 = [GR_Index2],8 ;; +// +// load H_2 +// G = G * G_2 +// +(p0) ldfe FR_h_2 = [GR_Index2],0 +(p0) pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 ;; +} +{ .mmi + nop.m 999 + nop.m 999 + nop.i 999;; +} +{ .mmi + nop.m 999 + nop.m 999 + nop.i 999;; +} +{ .mmi + nop.m 999 + nop.m 999 + nop.i 999;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) extr.u GR_Index3 = GR_X_2, 1, 5 ;; +} +{ .mfi +(p0) shladd GR_Table_Ptr1 = GR_Index3,2,GR_Table_Ptr1 + nop.f 999 +// +// h = h_1 + h_2 +// Adjust Index3 +// +(p0) shladd GR_Index3 = GR_Index3,4,GR_Table_Ptr ;; +} +{ .mmb + nop.m 999 +(p0) ldfe FR_h_3 = [GR_Index3],12 + nop.b 999 ;; +} +{ .mmf +(p0) ldfs FR_H_3 = [GR_Table_Ptr1],0 +// +// float_N = Make N a fp number +// Load h_3 +// Get pointer to Q table. +// +(p0) ldfs FR_G_3 = [GR_Index3],0 +(p0) fmpy.s1 FR_G = FR_G_1, FR_G_2 +} +;; + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_log_80_Q#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + + + +{ .mfi +(p0) ldfe FR_log2_hi = [GR_Table_Ptr],16 +(p0) fadd.s1 FR_H = FR_H_1, FR_H_2 + nop.i 999 ;; +} +{ .mmf + nop.m 999 +// +// G = G_1 * G_2 * G_3 +// +(p0) ldfe FR_log2_lo = [GR_Table_Ptr],16 +// +// load h_2 +// H = H_1 + H_2 +// Get Index3 +// +(p0) fadd.s1 FR_h = FR_h_1, FR_h_2 ;; +} +// +// Load log2_lo part +// r = G*S -1 +// +{ .mfi +(p0) ldfe FR_Q_6 = [GR_Table_Ptr],16 +// +// Load H_3 +// +(p0) fcvt.xf FR_float_N = FR_float_N + nop.i 999 ;; +} +// +// Load Q_6 +// +{ .mmi +(p0) ldfe FR_Q_5 = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_Q_4 = [GR_Table_Ptr],16 + nop.i 999 ;; +} +{ .mmi +(p0) ldfe FR_Q_3 = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_Q_2 = [GR_Table_Ptr],16 + nop.i 999 ;; +} +{ .mmf + nop.m 999 +// +// poly_lo = Q_5 + r * Q_6 +// Load Q_2 +// rsq = r * r +// +(p0) ldfe FR_Q_1 = [GR_Table_Ptr],16 +// +// h = h_1 + h_2 + h_3 +// H = H_1 + H_2 + H_3 +// Load G_3. +// Begin Loading Q's - load log2_hi part +// +(p0) fmpy.s1 FR_G = FR_G, FR_G_3 +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_H = FR_H, FR_H_3 + nop.i 999 +} +;; + +// +// Y_lo = poly + Y_lo +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_exp_64_Arg#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_h = FR_h, FR_h_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Load Q_5 +// +(p0) fmpy.s1 FR_GS_hi = FR_G, FR_S + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fms.s1 FR_r = FR_G, FR_S, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_lo = FR_r, FR_Q_6, FR_Q_5 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// GS_hi = G*S +// Load Q_4 +// +(p0) fsub.s1 FR_r_cor = FR_GS_hi, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fms.s1 FR_GS_lo = FR_G, FR_S, FR_GS_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly = FR_r, FR_Q_2, FR_Q_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Load Q_3 +// r_cor = GS_hi -1 +// GS_lo = G*S - GS_hi +// +(p0) fmpy.s1 FR_rsq = FR_r, FR_r + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_G = FR_float_N, FR_log2_hi, FR_H + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = poly_hi + rsq * poly_lo +// Tbl = float_N*log2_hi + H +// +(p0) fma.s1 FR_Y_lo = FR_float_N, FR_log2_lo, FR_h + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// r_cor = r_cor - r +// poly_hi = r * Q_2 + Q_1 +// +(p0) fma.s1 FR_poly_lo = FR_r, FR_poly_lo, FR_Q_4 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Load Q_1 +// +(p0) fsub.s1 FR_r_cor = FR_r_cor, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Y_lo = float_N*log2_lo + h +// +(p0) fadd.s1 FR_Y_hi = FR_G, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = Q_4 + r * poly_lo;; +// r_cor = r_cor + GS_lo;; +// +(p0) fma.s1 FR_poly_lo = FR_r, FR_poly_lo, FR_Q_3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_r_cor = FR_r_cor, FR_GS_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_r_cor = FR_r_cor, FR_Y_lo + nop.i 999 +} +{ .mfi + nop.m 999 +// +// poly_lo = Q_3 + r * poly_lo;; +// +(p0) fma.s1 FR_poly = FR_rsq, FR_poly_lo, FR_poly + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 FR_Y_lo = FR_G, FR_Y_hi + nop.i 999 +} +{ .mmi +(p0) ldfe FR_L_Inv = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_L_hi = [GR_Table_Ptr],16 + nop.i 999 ;; +} +{ .mfi +(p0) ldfe FR_L_lo = [GR_Table_Ptr],16 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Y_hi = Tbl + r +// r_cor = r_cor + Y_lo +// +(p0) fma.s1 FR_poly = FR_rsq, FR_poly, FR_r_cor + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// Y_lo = Tbl - Y_hi +// poly = rsq * poly + r_cor +// +(p0) fadd.s1 FR_Y_lo = FR_Y_lo, FR_r + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Y_lo = Y_lo + r +// +(p0) fadd.s1 FR_Y_lo = FR_Y_lo, FR_poly +// +// Load L_Inv +// Load L_hi +// Load L_lo +// all long before they are needed. +// They are used in LOGL_RETURN PATH +// +br.cond.sptk L(LOGL_RETURN) ;; +} +L(LOGL80_NEAR): +// +// Branch LOGL80_NEAR +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_log_80_P#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_Wsq = FR_W, FR_W +(p0) add GR_Table_Ptr1 = 0x50,GR_Table_Ptr +} +// +// Adjust ptr to 1/2 +// Adjust Ptr1 to P_4 +// +{ .mmi +(p0) ldfe FR_Half = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_P_4 = [GR_Table_Ptr1],16 + nop.i 999 +} +// +// Load 1/2 +// +{ .mmi +(p0) ldfe FR_P_8 = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_P_3 = [GR_Table_Ptr1],16 + nop.i 999 +} +{ .mmi +(p0) ldfe FR_P_7 = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_P_2 = [GR_Table_Ptr1],16 + nop.i 999 +} +// +// Load P_7 +// half_W = .5 * W +// Load P_3 +// +{ .mmi +(p0) ldfe FR_P_6 = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_P_1 = [GR_Table_Ptr1],16 + nop.i 999 ;; +} +// +// Load P_6 +// Wsq = w * w +// poly = w*P_4 + P_3 +// Load P_2 +// +{ .mfi +(p0) ldfe FR_P_5 = [GR_Table_Ptr],16 +// +// Load P_5 +// poly_lo = w * P_8 + P_7 +// Y_hi = w - (1/2)w*w +// Load P_1 +// +(p0) fmpy.s1 FR_W4 = FR_Wsq, FR_Wsq + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_W3 = FR_Wsq, FR_W + nop.i 999 +} +;; + +// +// Y_lo = W3 * poly + Y_lo +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_exp_64_Arg#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + + +{ .mmi +(p0) ldfe FR_L_Inv = [GR_Table_Ptr],16 ;; +(p0) ldfe FR_L_hi = [GR_Table_Ptr],16 + nop.i 999 ;; +} +{ .mfi +(p0) ldfe FR_L_lo = [GR_Table_Ptr],16 +// +// Load P_8 +// Load P_4 +// +(p0) fmpy.s1 FR_half_W = FR_Half, FR_W + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_lo = FR_W, FR_P_8,FR_P_7 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly = FR_W, FR_P_4, FR_P_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fnma.s1 FR_Y_hi = FR_W, FR_half_W, FR_W + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// W4 = Wsq * Wsq +// poly = w *poly + P_2 +// +(p0) fma.s1 FR_poly_lo = FR_W, FR_poly_lo, FR_P_6 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly = FR_W, FR_poly, FR_P_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 FR_Y_lo = FR_W, FR_Y_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = w * poly + P_1 +// w3 = wsq * w +// +(p0) fma.s1 FR_poly_lo = FR_W, FR_poly_lo, FR_P_5 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// poly_lo = w * poly_lo + P_6 +// Y_lo = W - Y_hi +// +(p0) fma.s1 FR_poly = FR_W, FR_poly, FR_P_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fnma.s1 FR_Y_lo = FR_W, FR_half_W, FR_Y_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = w * poly_lo + +// Y_lo = Y_lo - w * (1/2)w +// +(p0) fma.s1 FR_poly = FR_poly_lo, FR_W4, FR_poly + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Y_lo = (W-Y_hi) - w * (1/2)w +// poly = W4* poly_lo + poly +// +(p0) fma.s1 FR_Y_lo = FR_poly, FR_W3, FR_Y_lo + nop.i 999 ;; +} +L(LOGL_RETURN): +{ .mfi +(p0) add GR_Expo_Range = 0x2,r0 +// +// Load L_Inv +// Load L_hi +// Load L_lo +// all long before they are needed. +// +// +// kernel_log_80 computed ln(X) +// and return logX_hi and logX_lo as results. +// PR_pow_Safe set as well. +// +(p0) fmpy.s1 FR_X_lo = FR_Input_Y, FR_logx_lo +// +// Compute Y * (logX_hi + logX_lo) +// P_hi -> X +// P_lo -> X_cor +// (Manipulate names so that inputs are in +// the place kernel_exp expects them) +// Set GR_Flag to 2 +// Set GR_Expo_Range to Double +// +// This function computes exp( x + x_cor) +// Input FR 1: FR_X +// Input FR 2: FR_X_cor +// Input GR 1: GR_Flag +// Input GR 2: GR_Expo_Range +// Output FR 3: FR_Y_hi +// Output FR 4: FR_Y_lo +// Output FR 5: FR_Scale +// Output PR 1: PR_Safe +// +(p0) cmp.eq.unc p15, p0 = r0, r0 +} +;; + +{ .mmi +(p0) addl GR_W1_ptr = @ltoff(Constants_exp_64_W1#), gp +(p0) addl GR_W2_ptr = @ltoff(Constants_exp_64_W2#), gp +(p0) add GR_Flag = 0x2,r0 +} +;; + +{ .mmi + ld8 GR_W1_ptr = [GR_W1_ptr] + ld8 GR_W2_ptr = [GR_W2_ptr] +(p0) cmp.ne.unc p7, p0 = 0x1, GR_Flag +} +;; + +{ .mlx + nop.m 999 +(p0) movl GR_Mask = 0x1FFFF ;; +} + + +{ .mlx + nop.m 999 +(p0) movl GR_BIAS = 0x0FFFF ;; +} +{ .mfi + nop.m 999 +// +// X_lo = Y * logX_lo +// +(p0) fma.s1 FR_P_hi = FR_Input_Y, FR_logx_hi,FR_X_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Set Safe=True +// Flag is always 2 for this routine +// +(p0) fmpy.s1 FR_float_N = FR_X, FR_L_Inv + nop.i 999 +} +{ .mfi + nop.m 999 +// +// X_hi = Y * logX_hi + X_lo +// Set GR_Flag = 2 for exp(x + xcor) +// +(p0) fms.s1 FR_P_lo= FR_Input_Y, FR_logx_hi, FR_P_hi + nop.i 999 ;; +} +{ .mmi + nop.m 999 ;; +(p0) getf.exp GR_Expo_X = FR_X + nop.i 999 ;; +} +{ .mfi +(p0) and GR_Expo_X = GR_Expo_X, GR_Mask +// +// Calculate unBIASed exponent of X +// Point to Table of W1s +// Point to Table of W2s +// +(p0) fcvt.fx.s1 FR_N = FR_float_N + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_P_lo = FR_P_lo, FR_X_lo +// +// Float_N = X * L_Inv +// Create exponent BIAS +// Get BIASed exponent of X +// +(p0) sub GR_Expo_X = GR_Expo_X, GR_BIAS ;; +} +{ .mib +(p0) cmp.gt.unc p9, p0 = -6, GR_Expo_X + nop.i 999 +// +// N = fcvt.fx(float_N) +// If -6 > Expo_X, set P9 +// +(p9) br.cond.spnt L(EXPL_SMALL) +} +;; + +// +// If expo_X < -6 goto exp_small +// +{ .mmi + nop.m 999 +(p0) addl GR_T1_ptr = @ltoff(Constants_exp_64_T1#), gp +(p0) cmp.lt.unc p10, p0 = 14, GR_Expo_X +} +;; + +{ .mmi + ld8 GR_T1_ptr = [GR_T1_ptr] + nop.m 999 + nop.i 999 +} +;; + +{ .mib + nop.m 999 + nop.i 999 +// +// If 14 < Expo_X, set P10 +// Create pointer to T1 table +// +(p10) br.cond.spnt L(EXPL_HUGE) ;; +} + + +{ .mmi +(p0) addl GR_Table_Ptr = @ltoff(Constants_exp_64_Exponents#), gp +(p0) addl GR_T2_ptr = @ltoff(Constants_exp_64_T2#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + ld8 GR_T2_ptr = [GR_T2_ptr] + nop.i 999 +} +;; + + +{ .mmi +(p0) shladd GR_Table_Ptr = GR_Expo_Range,4,GR_Table_Ptr ;; +// +// Adjust T1_ptr by x 4 for single-precision values +// Adjust T2_ptr by x 4 for single-precision values +// +(p0) ld8 GR_Big_Pos_Exp = [GR_Table_Ptr],8 + nop.i 999 ;; +} +// +// Load double W1 +// Load +max exponent +// +{ .mfi +(p0) ld8 GR_Big_Neg_Exp = [GR_Table_Ptr],0 +// +// If 14 < Expo_X, goto exp_huge +// +(p0) fcvt.xf FR_float_N = FR_N + nop.i 999 +} +;; + +// +// Load double W2 +// Load -max exponent +// Load ptr to A's +// + +{ .mmi +(p0) getf.sig GR_N_fix = FR_N +(p0) addl GR_Table_Ptr = @ltoff(Constants_exp_64_A#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] + nop.m 999 + nop.i 999 +} +;; + +// +// Load single T1 +// Load single T2 +// W_1_p1 = W_1 + 1 +// +{ .mmi +(p0) ldfe FR_A_3 = [GR_Table_Ptr],16 ;; +// +// Load A_3 +// if k > big_pos_exp, set p14 and Safe=False +// +(p0) ldfe FR_A_2 = [GR_Table_Ptr],16 +(p0) extr.u GR_M1 = GR_N_fix, 6, 6 +} +{ .mmi + nop.m 999 ;; +(p0) shladd GR_W1_ptr = GR_M1,3,GR_W1_ptr +// +// float_N = fcvt.xf(N) +// N_fix = significand of N +// Create pointer to T2 table +// +(p0) extr.u GR_M2 = GR_N_fix, 0, 6 +} +// +// r = r + X_cor +// Adjust W1_ptr by x 8 for double-precision values +// Adjust W2_ptr by x 8 for double-precision values +// Adjust Table_ptr by Expo_Rangex16 +// +{ .mmi +(p0) shladd GR_T1_ptr = GR_M1,2,GR_T1_ptr ;; +(p0) ldfd FR_W1 = [GR_W1_ptr],0 +(p0) shladd GR_W2_ptr = GR_M2,3,GR_W2_ptr +} +// +// Load ptr to A's +// +{ .mfi +(p0) ldfs FR_T1 = [GR_T1_ptr],0 +(p0) fnma.s1 FR_r = FR_L_hi, FR_float_N, FR_X +(p0) shladd GR_T2_ptr = GR_M2,2,GR_T2_ptr ;; +} +{ .mmi +(p0) ldfd FR_W2 = [GR_W2_ptr],0 +(p0) ldfs FR_T2 = [GR_T2_ptr],0 +// +// r = x - L_hi * float_N +// M2 = extr.u(N_fix,0,6) +// M1 = extr.u(N_fix,6,6) +// +(p0) extr GR_k = GR_N_fix, 12, 52 ;; +} +// +// Load A_1 +// poly = A_3 * r + A_2 +// rsq = r*r +// +{ .mii +(p0) add GR_BIAS_p_k = GR_BIAS, GR_k +(p0) cmp.gt.unc p14,p15 = GR_k,GR_Big_Pos_Exp ;; +(p15) cmp.lt p14,p15 = GR_k,GR_Big_Neg_Exp +} +// +// BIAS_p_K = BIAS + k +// T = T1 * T2 +// +{ .mfi +(p0) setf.exp FR_Scale = GR_BIAS_p_k + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fnma.s1 FR_r = FR_L_lo, FR_float_N, FR_r + nop.i 999 +} +// +// W = W_1_p1 * W2 + W1 +// +{ .mfi +(p0) ldfe FR_A_1 = [GR_Table_Ptr],16 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_W_1_p1 = FR_W1, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// k = extr.u(N_fix,0,6) +// r = r - N * L_lo +// Load ptr to Table of exponent thresholds. +// +(p0) fadd.s1 FR_r = FR_r, FR_X_cor + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_T = FR_T1, FR_T2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if k < big_neg_exp, set p14 and Safe=False +// Load A_2 +// +(p0) fma.s1 FR_W = FR_W2, FR_W_1_p1, FR_W1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly = FR_r, FR_A_3, FR_A_2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_rsq = FR_r, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) mov FR_Y_hi = FR_T + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Scale = set_exp(BIAS_p_k) +// poly = r * poly + A_1 +// +(p0) fadd.s1 FR_Wp1 = FR_W, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly = FR_r, FR_poly, FR_A_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly = FR_rsq, FR_poly,FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Wp1 = W + 1 +// poly = rsq * poly + rk +// +(p0) fma.s1 FR_Y_lo = FR_Wp1, FR_poly, FR_W + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Y_lo = poly * Wp1 + W +// Y_hi = T +// +(p0) fmpy.s1 FR_Y_lo = FR_Y_lo, FR_T +// +// Y_lo = T * Y_lo +// +(p0) br.cond.sptk L(EXPL_RETURN) ;; +} + +L(EXPL_SMALL): + +// +// r4 = rsq * rsq +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr1 = @ltoff(Constants_exp_64_P), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr1 = [GR_Table_Ptr1] + nop.m 999 + nop.i 999 +} +;; + +{ .mmf + nop.m 999 +(p0) ldfe FR_P_6 = [GR_Table_Ptr1],16 +// +// Return +// +(p0) fadd.s1 FR_r = FR_X,f0 ;; +} + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Ptr = @ltoff(Constants_exp_64_Exponents#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Ptr = [GR_Table_Ptr] +(p0) ldfe FR_P_5 = [GR_Table_Ptr1],16 + nop.i 999 +} +;; + +// +// Is input very small? +// Load P_5 +// +{ .mii +(p0) ldfe FR_P_4 = [GR_Table_Ptr1],16 +(p0) add GR_Table_Ptr = 0x040,GR_Table_Ptr ;; +(p0) shladd GR_Table_Ptr = GR_Expo_Range,3,GR_Table_Ptr ;; +} +{ .mmb +(p0) ldfe FR_P_3 = [GR_Table_Ptr1],16 +// +// Adjust ptr. +// +(p0) ld8 GR_vsm_expo = [GR_Table_Ptr],0 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +// +// r = X (don't seem to need X_Cor) +// Load the threshold exponents +// +(p0) fmpy.s1 FR_rsq = FR_r, FR_r + nop.i 999 ;; +} +// +// Load the negative integer +// Load P_5 +// +{ .mfi +(p0) cmp.lt.unc p12, p0 = GR_Expo_X, GR_vsm_expo + nop.f 999 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// rsq = r * r +// Offset into exponents +// +(p0) fmpy.s1 FR_r4 = FR_rsq, FR_rsq +(p12) br.cond.spnt L(EXPL_VERY_SMALL) ;; +} +{ .mfi +(p0) ldfe FR_P_2 = [GR_Table_Ptr1],16 +// +// Load p4,p3,p2,p1 +// +(p0) fma.s1 FR_poly_lo = FR_P_6, FR_r, FR_P_5 +// +// Y_lo = r4 * poly_lo + poly_hi +// Scale = 1.0 +// +(p0) add GR_temp = 0x1,r0 ;; +} +{ .mmf + nop.m 999 +(p0) ldfe FR_P_1 = [GR_Table_Ptr1],0 +(p0) mov FR_Scale = f1 +} +// +// Begin creating lsb to perturb final result +// +{ .mfi +(p0) setf.sig FR_temp = GR_temp +(p0) mov FR_Y_hi = f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = p_5 + p_6 * r +// poly_hi = p_1 + p_2 * r +// +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_P_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = p_4 + poly_lo * r +// poly_hi = r + poly_hi * rsq +// +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_P_3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_hi = FR_P_2, FR_r, FR_P_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = p_3 + poly_lo * r +// Y_hi = 1, always +// +(p0) fma.s1 FR_Y_lo = FR_poly_lo, FR_r4, FR_poly_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Set lsb in fp register +// +(p0) for FR_temp = FR_Y_lo,FR_temp + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Toggle on last bit of Y_lo +// +(p0) fmerge.se FR_Y_lo = FR_Y_lo,FR_temp +// +// Set lsb of Y_lo to 1 +// +(p0) br.cond.sptk L(EXPL_RETURN) ;; +} +L(EXPL_VERY_SMALL): +{ .mfi + nop.m 999 +(p0) mov FR_Y_lo = FR_r +(p0) cmp.eq.unc p15, p0 = r0, r0 +} +{ .mfi + nop.m 999 +(p0) mov FR_Scale = f1 + nop.i 999 +};; +{ .mfb + nop.m 999 +(p0) mov FR_Y_hi = f1 +// +// If flag_not_1, +// Y_hi = 1.0 +// Y_lo = X + X_cor +// PR_Safe = true +// +(p0) br.cond.sptk L(EXPL_RETURN) ;; +} +L(EXPL_HUGE): +{ .mfi + nop.m 999 +// +// Return for flag=2 +// +(p0) fcmp.gt.unc.s1 p12, p13 = FR_X, f0 +(p0) cmp.eq.unc p14, p15 = r0, r0 ;; +} +{ .mlx + nop.m 999 +// +// Set Safe to false +// Is x > 0 +// +(p12) movl GR_Mask = 0x15DC0 ;; +} +{ .mlx +(p12) setf.exp FR_Y_hi = GR_Mask +(p13) movl GR_Mask = 0xA240 ;; +} +{ .mlx +(p13) setf.exp FR_Y_hi = GR_Mask +// +// x > 0: Create mask for Y_hi = 2**(24,000) +// x <= 0: Create mask for Y_hi = 2**(-24,000) +// +(p13) movl GR_temp = 0xA1DC ;; +} +{ .mfi +(p13) setf.exp FR_Y_lo = GR_temp +// +// x < =0: Create mask for 2**(-24,100) +// x <= 0: Y_lo = w**(-24,100) +// +(p12) mov FR_Y_lo = f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) mov FR_Scale = FR_Y_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// x > 0: Y_lo = 1.0 +// x > 0: Scale = 2**(24,000) +// +(p13) mov FR_Scale = FR_Y_hi + nop.i 999 ;; +} +L(EXPL_RETURN): +{ .mfi + nop.m 999 +// +// Scale = 2**(24,000) +// +// +// exp(y *ln(x)) almost complete +// FR_Scale is Scale +// f34 is Z_hi +// f35 is Z_lo +// +(p0) fmpy.s1 FR_Sgn = FR_Scale, FR_Sgn + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// sgn * scale +// +(p0) fmpy.s1 FR_Y_lo = FR_Y_lo,FR_Sgn + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Z_lo * (sgn * scale) +// +(p0) fma.s0 FR_Result = FR_Y_hi, FR_Sgn, FR_Y_lo +// +// Z_hi * (sgn * scale) + Z_lo +// +(p15) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x01 + nop.i 999 +} +{ .mlx + nop.m 999 +// +// Z_hi * (sgn * scale) + Z_lo with wre & td +// Z_hi * (sgn * scale) + Z_lo with fz & td +// +(p0) movl GR_T1_ptr = 0x00000000013FFF ;; +} +{ .mfi + nop.m 999 +(p0) fma.s3 FR_Result_small = FR_Y_hi, FR_Sgn, FR_Y_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Return if no danger of over of underflow. +// +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} +{ .mfi + nop.m 999 +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +(p0) fma.s2 FR_Result_big = FR_Y_hi, FR_Sgn, FR_Y_lo + nop.i 999 ;; +} +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +// +// If (Safe) is true, then +// Compute result using user supplied status field. +// No overflow or underflow here, but perhaps inexact. +// Return +// Else +// Determine if overflow or underflow was raised. +// Fetch +/- overflow threshold for IEEE single, double, +// double extended +// +{ .mfi +(p0) setf.exp FR_Big = GR_T1_ptr +(p0) fsetc.s2 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = FR_Result_small, 0x00F + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmerge.ns FR_NBig = FR_Big, FR_Big + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Create largest double exponent + 1. +// Create smallest double exponent - 1. +// Identify denormals +// +(p0) fcmp.ge.unc.s1 p8, p0 = FR_Result_big , FR_Big + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +// +// fcmp: resultS2 <= - overflow threshold +// fclass: resultS3 is denorm/unorm/0 +// +(p8) mov GR_Parameter_TAG = 18 ;; +} +{ .mfb + nop.m 999 +// +// fcmp: resultS2 >= + overflow threshold +// +(p0) fcmp.le.unc.s1 p9, p0 = FR_Result_big, FR_NBig +(p8) br.cond.spnt __libm_error_region ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov GR_Parameter_TAG = 18 +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt __libm_error_region ;; +} +// +// Report that pow overflowed - either +Inf, or -Inf +// +{ .mmb +(p11) mov GR_Parameter_TAG = 19 + nop.m 999 +(p11) br.cond.spnt __libm_error_region ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Report that pow underflowed +// +(p0) br.cond.sptk L(POWL_64_RETURN) ;; +} + + +L(POWL_64_SQUARE): +// Here if x not zero and y=2. +// Must call __libm_error_support for overflow or underflow +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fma.s0 FR_Result = FR_Input_X, FR_Input_X, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x01 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_T1_ptr = 0x00000000013FFF ;; +} +{ .mfi + nop.m 999 +(p0) fma.s3 FR_Result_small = FR_Input_X, FR_Input_X, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Return if no danger of over of underflow. +// +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} +{ .mfi + nop.m 999 +(p0) fma.s2 FR_Result_big = FR_Input_X, FR_Input_X, f0 + nop.i 999 ;; +} +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +// +// If (Safe) is true, then +// Compute result using user supplied status field. +// No overflow or underflow here, but perhaps inexact. +// Return +// Else +// Determine if overflow or underflow was raised. +// Fetch +/- overflow threshold for IEEE single, double, +// double extended +// +{ .mfi +(p0) setf.exp FR_Big = GR_T1_ptr +(p0) fsetc.s2 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = FR_Result_small, 0x00F + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmerge.ns FR_NBig = FR_Big, FR_Big + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Create largest double exponent + 1. +// Create smallest double exponent - 1. +// Identify denormals +// +(p0) fcmp.ge.unc.s1 p8, p0 = FR_Result_big , FR_Big + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +// +// fcmp: resultS2 <= - overflow threshold +// fclass: resultS3 is denorm/unorm/0 +// +(p8) mov GR_Parameter_TAG = 18 ;; +} +{ .mfb + nop.m 999 +// +// fcmp: resultS2 >= + overflow threshold +// +(p0) fcmp.le.unc.s1 p9, p0 = FR_Result_big, FR_NBig +(p8) br.cond.spnt __libm_error_region ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov GR_Parameter_TAG = 18 +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt __libm_error_region ;; +} +// +// Report that pow overflowed - either +Inf, or -Inf +// +{ .mmb +(p11) mov GR_Parameter_TAG = 19 + nop.m 999 +(p11) br.cond.spnt __libm_error_region ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Report that pow underflowed +// +(p0) br.cond.sptk L(POWL_64_RETURN) ;; +} + + + + +L(POWL_64_SPECIAL): +{ .mfi + nop.m 999 +(p0) fcmp.eq.s1 p15, p0 = FR_Input_X, f1 // Is x=+1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p14, p0 = FR_Input_Y, 0x023 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p15) fcmp.eq.unc.s0 p6,p0 = FR_Input_Y, f0 // If x=1, flag invalid if y=SNaN + nop.i 999 +} +{ .mfb + nop.m 999 +(p15) fmpy.s0 FR_Result = f1,f1 // If x=1, result=1 +(p15) br.cond.spnt L(POWL_64_RETURN) ;; // Exit if x=1 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p13, p0 = FR_Input_X, 0x023 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8, p0 = FR_Input_X, 0x143 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9, p0 = FR_Input_Y, 0x143 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p10, p0 = FR_Input_X, 0x083 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = FR_Input_Y, 0x083 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = FR_Input_Y, 0x007 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p7, p0 = FR_Input_Y, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// set p13 if x +/- Inf +// set p14 if y +/- Inf +// set p8 if x Natval or +/-SNaN +// set p9 if y Natval or +/-SNaN +// set p10 if x QNaN +// set p11 if y QNaNs +// set p6 if y is +/-0 +// set p7 if y is 1 +// +(p8) fmpy.s0 FR_Result = FR_Input_Y, FR_Input_X +(p6) cmp.ne p8,p0 = r0,r0 ;; // Don't exit if x=snan, y=0 ==> result=+1 +} +{ .mfb + nop.m 999 +(p9) fmpy.s0 FR_Result = FR_Input_Y, FR_Input_X +(p8) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mfb + nop.m 999 +(p10) fmpy.s0 FR_Result = FR_Input_X, f0 +(p9) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mfi + nop.m 999 +// +// Produce result for SNaN and NatVals and return +// +(p6) fclass.m.unc p15, p0 = FR_Input_X,0x007 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// If Y +/- 0, set p15 if x +/- 0 +// +(p6) fclass.m.unc p8, p0 = FR_Input_X,0x0C3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p6) fcmp.eq.s0 p9,p0 = FR_Input_X, f0 // If y=0, flag if x denormal + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fadd.s0 FR_Result = f1, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Set p8 if y = +/-0 and X is a QNaN/SNaN +// If y = +/-0, let result = 1.0 +// +(p7) fmpy.s0 FR_Result = FR_Input_X,f1 +// +// If y == 1, result = x * 1 +// +(p15) mov GR_Parameter_TAG = 20 +} +{ .mib + nop.m 999 + nop.i 999 +(p15) br.cond.spnt __libm_error_region ;; +} +{ .mib + nop.m 999 +// +// If x and y are both zero, result = 1.0 and call error +// support. +// +(p8) mov GR_Parameter_TAG = 23 +(p8) br.cond.spnt __libm_error_region ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// If y = +/-0 and x is a QNaN, result = 1.0 and call error +// support. +// +(p6) br.cond.spnt L(POWL_64_RETURN) ;; +} + +// If x=0, y=-inf, go to the X_IS_ZERO path +{ .mfb + nop.m 999 +(p14) fcmp.eq.unc.s1 p0,p14 = FR_Input_X,f0 +(p7) br.cond.spnt L(POWL_64_RETURN) ;; +} + +{ .mfi + nop.m 999 +// +// Produce all results for x**0 and x**1 +// Let all the result x ** 0 == 1 and return +// Let all x ** 1 == x and return +// +(p10) fmpy.s0 FR_Result = FR_Input_Y,FR_Input_X + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p11) fmpy.s0 FR_Result = FR_Input_Y,FR_Input_X +(p10) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p11) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Return result for x or y QNaN input with QNaN result +// +(p14) br.cond.spnt L(POWL_64_Y_IS_INF) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.spnt L(POWL_64_X_IS_INF) ;; +} +L(POWL_64_X_IS_ZERO): +{ .mmb +(p0) getf.sig GR_signif_y = FR_Input_Y +(p0) getf.exp GR_BIASed_exp_y = FR_Input_Y + nop.b 999 ;; +} +{ .mlx + nop.m 999 +(p0) movl GR_Mask = 0x1FFFF +} +{ .mlx + nop.m 999 +(p0) movl GR_y_sign = 0x20000 ;; +} +// +// Get BIASed exp and significand of y +// +{ .mfi +(p0) and GR_exp_y = GR_Mask,GR_BIASed_exp_y + nop.f 999 +(p0) and GR_y_sign = GR_y_sign,GR_BIASed_exp_y +} +{ .mlx + nop.m 999 +(p0) movl GR_BIAS = 0xFFFF ;; +} +{ .mfi +(p0) cmp.lt.unc p9, p8 = GR_exp_y,GR_BIAS + nop.f 999 +// +// Maybe y is < 1 already, so +// can never be an integer. +// Remove sign bit from exponent. +// +(p0) sub GR_exp_y = GR_exp_y,GR_BIAS ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Remove exponent BIAS +// +(p8) shl GR_exp_y= GR_signif_y,GR_exp_y ;; +} +{ .mfi +(p9) or GR_exp_y= 0xF,GR_signif_y + nop.f 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 +// +// Shift significand of y looking for nonzero bits +// For y > 1, shift signif_y exp_y bits to the left +// For y < 1, turn on 4 low order bits of significand of y +// so that the fraction will always be non-zero +// +(p0) shl GR_signif_y= GR_exp_y,1 ;; +(p0) extr.u GR_low_order_bit = GR_exp_y,63,1 +} +// +// Integer part of y shifted off. +// Get y's low even or odd bit - y might not be an int. +// +{ .mii +(p0) cmp.eq.unc p13,p0 = GR_signif_y, r0 +(p0) cmp.eq.unc p8,p9 = GR_y_sign, r0 ;; +// +// Is y an int? +// Is y positive +// +(p13) cmp.ne.unc p13,p0 = GR_low_order_bit, r0 ;; +} +// +// Is y and int and odd? +// +{ .mfb +(p13) cmp.eq.unc p13,p14 = GR_y_sign, r0 +(p8) fcmp.eq.s0 p12,p0 = FR_Input_Y, f0 // If x=0 and y>0 flag if y denormal + nop.b 999 ;; +} +{ .mfb + nop.m 999 +// +// Is y and int and odd and positive? +// +(p13) mov FR_Result = FR_Input_X +(p13) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mfi + nop.m 999 +// +// Return +/-0 when x=+/-0 and y is and odd pos. int +// +(p14) frcpa.s0 FR_Result, p10 = f1, FR_Input_X +(p14) mov GR_Parameter_TAG = 21 +} +{ .mib + nop.m 999 + nop.i 999 +(p14) br.cond.spnt __libm_error_region ;; +} + +{ .mfb + nop.m 999 +// +// Return +/-0 when x=+/-Inf and y is and odd neg int +// and raise dz exception +// +(p8) mov FR_Result = f0 +(p8) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mfi + nop.m 999 +// +// Return +0 when x=+/-0 and y > 0 and not odd. +// +(p9) frcpa.s0 FR_Result, p10 = f1,f0 +(p9) mov GR_Parameter_TAG = 21 +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.sptk __libm_error_region ;; +} +L(POWL_64_X_IS_INF): +{ .mfi +(p0) getf.exp GR_exp_y = FR_Input_Y +(p0) fclass.m.unc p13, p0 = FR_Input_X,0x022 +(p0) mov GR_Mask = 0x1FFFF ;; +} + +{ .mfi +(p0) getf.sig GR_signif_y = FR_Input_Y +(p0) fcmp.eq.s0 p9,p0 = FR_Input_Y, f0 // Flag if y denormal + nop.i 999 ;; +} + +// +// Get exp and significand of y +// Create exponent mask and sign mask +// +{ .mlx +(p0) and GR_low_order_bit = GR_Mask,GR_exp_y +(p0) movl GR_BIAS = 0xFFFF +} +{ .mmi + nop.m 999 ;; +// +// Remove sign bit from exponent. +// +(p0) cmp.lt.unc p9, p8 = GR_low_order_bit,GR_BIAS +// +// Maybe y is < 1 already, so +// isn't an int. +// +(p0) sub GR_low_order_bit = GR_low_order_bit,GR_BIAS +} +{ .mlx + nop.m 999 +(p0) movl GR_sign_mask = 0x20000 ;; +} +{ .mfi +(p0) and GR_sign_mask = GR_sign_mask,GR_exp_y +// +// Return +Inf when x=+/-0 and y < 0 and not odd and raise +// divide-by-zero exception. +// +(p0) fclass.m.unc p11, p0 = FR_Input_X,0x021 + nop.i 999 ;; +} +{ .mmi + nop.m 999 ;; +// +// Is shift off integer part of y. +// Get y's even or odd bit - y might not be an int. +// +(p11) cmp.eq.unc p11,p12 = GR_sign_mask, r0 +// +// Remove exponent BIAS +// +(p8) shl GR_exp_y = GR_signif_y,GR_low_order_bit ;; +} +{ .mfi +(p9) or GR_exp_y = 0xF,GR_signif_y +// +// Is y positive or negative when x is +Inf? +// Is y and int when x = -Inf +// +(p11) mov FR_Result = FR_Input_X + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) mov FR_Result = f0 + nop.i 999 ;; +} +{ .mii + nop.m 999 +// +// Shift signficand looking for nonzero bits +// For y non-ints, upset the significand. +// +(p0) shl GR_signif_y = GR_exp_y,1 ;; +(p13) cmp.eq.unc p13,p0 = GR_signif_y, r0 +} +{ .mii + nop.m 999 +(p0) extr.u GR_low_order_bit = GR_exp_y,63,1 ;; +(p13) cmp.ne.unc p13,p0 = GR_low_order_bit, r0 +} +{ .mib + nop.m 999 + nop.i 999 +(p11) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p12) br.cond.sptk L(POWL_64_RETURN) ;; +} +// +// Return Inf for y > 0 +// Return +0 for y < 0 +// Is y even or odd? +// +{ .mii +(p13) cmp.eq.unc p13,p10 = GR_sign_mask, r0 +(p0) cmp.eq.unc p8,p9 = GR_sign_mask, r0 ;; + nop.i 999 +} +{ .mfi + nop.m 999 +// +// For x = -inf, y is and int, positive +// and odd +// Is y positive in general? +// +(p13) mov FR_Result = FR_Input_X + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p10) fmerge.ns FR_Result = f0, f0 +(p13) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mfi + nop.m 999 +// +// Return -Inf for x = -inf and y > 0 and odd int. +// Return -0 for x = -inf and y < 0 and odd int. +// +(p8) fmerge.ns FR_Result = FR_Input_X, FR_Input_X + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p9) mov FR_Result = f0 +(p8) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.sptk L(POWL_64_RETURN) ;; +} +L(POWL_64_Y_IS_INF): +{ .mfi + nop.m 999 +// +// Return Inf for x = -inf and y > 0 not an odd int. +// Return +0 for x = -inf and y < 0 and not an odd int. +// +(p0) fclass.m.unc p8, p0 = FR_Input_Y, 0x021 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9, p0 = FR_Input_Y, 0x022 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fabs FR_X = FR_Input_X + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.eq.s0 p10,p0 = FR_Input_X, f0 // flag if x denormal + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Find y = +/- Inf +// Compute |x| +// +(p8) fcmp.lt.unc.s1 p6, p0 = FR_X, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fcmp.gt.unc.s1 p7, p0 = FR_X, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fcmp.lt.unc.s1 p12, p0 = FR_X, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fcmp.gt.unc.s1 p13, p0 = FR_X, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// For y = +Inf and |x| < 1 returns 0 +// For y = +Inf and |x| > 1 returns Inf +// For y = -Inf and |x| < 1 returns Inf +// For y = -Inf and |x| > 1 returns 0 +// +(p6) mov FR_Result = f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) mov FR_Result = FR_Input_Y + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fmpy.s0 FR_Result = FR_Input_Y, FR_Input_Y + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p13) mov FR_Result = f0 +// +// Produce x ** +/- Inf results +// +(p6) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p12) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.spnt L(POWL_64_RETURN) ;; +} +{ .mfb + nop.m 999 +// +// +/-1 ** +/-Inf, result is +1 +// +(p0) fmpy.s0 FR_Result = f1,f1 +(p0) br.cond.sptk L(POWL_64_RETURN) ;; +} +L(POWL_64_UNSUPPORT): +{ .mfb + nop.m 999 +// +// Return NaN and raise invalid +// +(p0) fmpy.s0 FR_Result = FR_Input_X,f0 +// +// Raise exceptions for specific +// values - pseudo NaN and +// infinities. +// +(p0) br.cond.sptk L(POWL_64_RETURN) ;; +} +L(POWL_64_XNEG): +{ .mfi + nop.m 999 +(p0) frcpa.s0 FR_Result, p8 = f0, f0 +// +// Raise invalid for x < 0 and +// y not an integer and +// +(p0) mov GR_Parameter_TAG = 22 +} +{ .mib + nop.m 999 + nop.i 999 +(p0) br.cond.sptk __libm_error_region ;; +} +L(POWL_64_SQRT): +{ .mfi + nop.m 999 +(p0) frsqrta.s0 FR_Result,p10 = FR_Input_X + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 f62=FR_Half,FR_Input_X,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (2) +// h = 1/2 * a in f9 +// +(p10) fma.s1 f63=FR_Result,FR_Result,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (3) +// t1 = y0 * y0 in f10 +// +(p10) fnma.s1 f32=f63,f62,f11 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (4) +// t2 = 1/2 - t1 * h in f10 +// +(p10) fma.s1 f33=f32,FR_Result,FR_Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (5) +// y1 = y0 + t2 * y0 in f13 +// +(p10) fma.s1 f34=f33,f62,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (6) +// t3 = y1 * h in f10 +// +(p10) fnma.s1 f35=f34,f33,f11 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (7) +// t4 = 1/2 - t3 * y1 in f10 +// +(p10) fma.s1 f63=f35,f33,f33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (8) +// y2 = y1 + t4 * y1 in f13 +// +(p10) fma.s1 f32=FR_Input_X,f63,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Step (9) +// S = a * y2 in f10 +// +(p10) fma.s1 FR_Result=f63,f62,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (10) +// t5 = y2 * h in f9 +// +(p10) fma.s1 f33=f11,f63,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (11) +// H = 1/2 * y2 in f11 +// +(p10) fnma.s1 f34=f32,f32,f8 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Step (12) +// d = a - S * S in f12 +// +(p10) fnma.s1 f35=FR_Result,f63,f11 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (13) +// t6 = 1/2 - t5 * y2 in f7 +// +(p10) fma.s1 f62=f33,f34,f32 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Step (14) +// S1 = S + d * H in f13 +// +(p10) fma.s1 f63=f33,f35,f33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Step (15) +// H1 = H + t6 * h in f7 +// +(p10) fnma.s1 f32=f62,f62,FR_Input_X + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Step (16) +// d1 = a - S1 * S1 +// +(p10) fma.s0 FR_Result=f32,f63,f62 +// +// Step (17) +// R = S1 + d1 * H1 +// +(p10) br.cond.sptk L(POWL_64_RETURN) ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Do the Newton-Raphson iteration from the EAS. +// +(p0) br.cond.sptk L(POWL_64_RETURN) ;; +} +// +// Take care of the degenerate cases. +// + +L(POWL_64_RETURN): +{ .mfb + nop.m 999 +(p0) mov FR_Output = FR_Result +(p0) br.ret.sptk b0 ;; +} +.endp powl +ASM_SIZE_DIRECTIVE(powl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_rem_pio2.c glibc-2.2.3/sysdeps/ia64/fpu/e_rem_pio2.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_rem_pio2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_rem_pio2.c Mon Feb 19 00:46:14 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_rem_pio2f.c glibc-2.2.3/sysdeps/ia64/fpu/e_rem_pio2f.c --- glibc-2.2.2/sysdeps/ia64/fpu/e_rem_pio2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_rem_pio2f.c Mon Feb 19 00:46:23 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_remainder.S glibc-2.2.3/sysdeps/ia64/fpu/e_remainder.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_remainder.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_remainder.S Mon Feb 19 00:46:32 2001 @@ -0,0 +1,592 @@ + .file "remainder.asm" +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, Bob Norin, +// Shane Story, and Ping Tak Peter Tang of the Computational Software Lab, +// Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//==================================================================== +// 2/02/00 Initial version +// 3/02/00 New Algorithm +// 4/04/00 Unwind support added +// 7/21/00 Fixed quotient=2^{24*m+23}*1.q1...q23 1 bug +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +//11/29/00 Set FR_Y to f9 +// +// API +//==================================================================== +// double remainder(double,double); +// +// Overview of operation +//==================================================================== +// remainder(a,b)=a-i*b, +// where i is an integer such that, if b!=0 and a is finite, +// |a/b-i|<=1/2. If |a/b-i|=1/2, i is even. +// +// Algorithm +//==================================================================== +// a). eliminate special cases +// b). if |a/b|<0.25 (first quotient estimate), return a +// c). use single precision divide algorithm to get quotient q +// rounded to 24 bits of precision +// d). calculate partial remainders (using both q and q-ulp); +// select one and RZ(a/b) based on the sign of |a|-|b|*q +// e). if the exponent difference (exponent(a)-exponent(b)) +// is less than 24 (quotient estimate<2^{24}-2), use RZ(a/b) +// and sticky bits to round to integer; exit loop and +// calculate final remainder +// f). if exponent(a)-exponent(b)>=24, select new value of a as +// the partial remainder calculated using RZ(a/b); +// repeat from c). +// +// Special cases +//==================================================================== +// a=+/- Inf, or b=+/-0: return NaN, call libm_error_support +// a=NaN or b=NaN: return NaN + +#include "libm_support.h" + +// Registers used +//==================================================================== +// Predicate registers: p6-p14 +// General registers: r2,r3,r28,r29,r32 (ar.pfs), r33-r39 +// Floating point registers: f6-f15,f32 + + .section .text + +GR_SAVE_B0 = r33 +GR_SAVE_PFS = r34 +GR_SAVE_GP = r35 +GR_SAVE_SP = r36 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f10 +FR_Y = f9 +FR_RESULT = f8 + + + + .proc remainder# + .align 32 + .global remainder# + .align 32 + +remainder: +#ifdef _LIBC +.global __remainder +.type __remainder,@function +__remainder: +#endif +// inputs in f8, f9 +// result in f8 + +{ .mfi + alloc r32=ar.pfs,1,4,4,0 + // f13=|a| + fmerge.s f13=f0,f8 + nop.i 0 +} + {.mfi + nop.m 0 + // f14=|b| + fmerge.s f14=f0,f9 + nop.i 0;; +} + {.mlx + mov r28=0x2ffdd + // r2=2^{23} + movl r3=0x4b000000;; +} + +// Y +-NAN, +-inf, +-0? p11 +{ .mfi + setf.exp f32=r28 +(p0) fclass.m.unc p11,p0 = f9, 0xe7 + nop.i 999 +} +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f8, 0xe3 + nop.i 999;; +} + +{.mfi + nop.m 0 + mov f12=f0 + nop.i 0 +} +{ .mfi + // set p7=1 + cmp.eq.unc p7,p0=r0,r0 + // Step (1) + // y0 = 1 / b in f10 + frcpa.s1 f10,p6=f13,f14 + nop.i 0;; +} + +{.bbb + (p9) br.cond.spnt L(FREM_X_NAN_INF) + (p11) br.cond.spnt L(FREM_Y_NAN_INF_ZERO) + nop.b 0 +} {.mfi + nop.m 0 + // set D flag if a (f8) is denormal + fnma.s0 f6=f8,f1,f8 + nop.i 0;; +} + + +L(remloop24): + { .mfi + nop.m 0 + // Step (2) + // q0 = a * y0 in f12 + (p6) fma.s1 f12=f13,f10,f0 + nop.i 0 +} { .mfi + nop.m 0 + // Step (3) + // e0 = 1 - b * y0 in f7 + (p6) fnma.s1 f7=f14,f10,f1 + nop.i 0;; +} {.mlx + nop.m 0 + // r2=1.25*2^{-24} + movl r2=0x33a00000;; +} + +{.mfi + nop.m 0 + // q1=q0*(1+e0) + fma.s1 f15=f12,f7,f12 + nop.i 0 +} +{ .mfi + nop.m 0 + // Step (4) + // e1 = e0 * e0 + E in f7 + (p6) fma.s1 f7=f7,f7,f32 + nop.i 0;; +} + {.mii + (p7) getf.exp r29=f12 + (p7) mov r28=0xfffd + nop.i 0;; +} + { .mfi + // f12=2^{23} + setf.s f12=r3 + // Step (5) + // q2 = q1 + e1 * q1 in f11 + (p6) fma.s.s1 f11=f7,f15,f15 + nop.i 0 +} { .mfi + nop.m 0 + // Step (6) + // q2 = q1 + e1 * q1 in f6 + (p6) fma.s1 f6=f7,f15,f15 + nop.i 0;; +} + + {.mmi + // f15=1.25*2^{-24} + setf.s f15=r2 + // q<1/4 ? (i.e. expon< -2) + (p7) cmp.gt p7,p0=r28,r29 + nop.i 0;; +} + +{.mfb + // r29= -32+bias + mov r29=0xffdf + // if |a/b|<1/4, set D flag before returning + (p7) fma.d.s0 f9=f9,f0,f8 + nop.b 0;; +} + {.mfb + nop.m 0 + // can be combined with bundle above if sign of 0 or + // FTZ enabled are not important + (p7) fmerge.s f8=f8,f9 + // return if |a|<4*|b| (estimated quotient < 1/4) + (p7) br.ret.spnt b0;; +} + {.mfi + // f7=2^{-32} + setf.exp f7=r29 + // set f8 to current a value | sign + fmerge.s f8=f8,f13 + nop.i 0;; +} + + + {.mfi + getf.exp r28=f6 + // last step ? (q<2^{23}) + fcmp.lt.unc.s1 p0,p12=f6,f12 + nop.i 0;; +} + {.mfi + nop.m 0 + // r=a-b*q + fnma.s1 f6=f14,f11,f13 + nop.i 0 +} {.mfi + // r2=23+bias + mov r2=0xffff+23 + // q'=q-q*(1.25*2^{-24}) (q'=q-ulp) + fnma.s.s1 f15=f11,f15,f11 + nop.i 0;; +} + {.mmi + nop.m 0 + cmp.eq p11,p14=r2,r28 + nop.i 0;; +} + +.pred.rel "mutex",p11,p14 + {.mfi + nop.m 0 + // if exp_q=2^23, then r=a-b*2^{23} + (p11) fnma.s1 f13=f12,f14,f13 + nop.i 0 +} +{.mfi + nop.m 0 + // r2=a-b*q' + (p14) fnma.s1 f13=f14,f15,f13 + nop.i 0;; +} + {.mfi + nop.m 0 + // r>0 iff q=RZ(a/b) and inexact + fcmp.gt.unc.s1 p8,p0=f6,f0 + nop.i 0 +} {.mfi + nop.m 0 + // r<0 iff q'=RZ(a/b) and inexact + (p14) fcmp.lt.unc.s1 p9,p10=f6,f0 + nop.i 0;; +} + +.pred.rel "mutex",p8,p9 + {.mfi + nop.m 0 + // (p8) Q=q+(last iteration ? sticky bits:0) + // i.e. Q=q+q*x (x=2^{-32} or 0) + (p8) fma.s1 f11=f11,f7,f11 + nop.i 0 +} {.mfi + nop.m 0 + // (p9) Q=q'+(last iteration ? sticky bits:0) + // i.e. Q=q'+q'*x (x=2^{-32} or 0) + (p9) fma.s1 f11=f15,f7,f15 + nop.i 0;; +} + + {.mfb + nop.m 0 + // (p9) set r=r2 (new a, if not last iteration) + // (p10) new a =r + (p10) mov f13=f6 + (p12) br.cond.sptk L(remloop24);; +} + +// last iteration + {.mfi + nop.m 0 + // set f9=|b|*sgn(a) + fmerge.s f9=f8,f9 + nop.i 0 +} + {.mfi + nop.m 0 + // round to integer + fcvt.fx.s1 f11=f11 + nop.i 0;; +} + {.mfi + nop.m 0 + // save sign of a + fmerge.s f7=f8,f8 + nop.i 0 +} {.mfi + nop.m 0 + // normalize + fcvt.xf f11=f11 + nop.i 0;; +} + {.mfi + nop.m 0 + // This can be removed if sign of 0 is not important + // get remainder using sf1 + fnma.d.s1 f12=f9,f11,f8 + nop.i 0 +} + {.mfi + nop.m 0 + // get remainder + fnma.d.s0 f8=f9,f11,f8 + nop.i 0;; +} + {.mfi + nop.m 0 + // f12=0? + // This can be removed if sign of 0 is not important + fcmp.eq.unc.s1 p8,p0=f12,f0 + nop.i 0;; +} + {.mfb + nop.m 0 + // if f8=0, set sign correctly + // This can be removed if sign of 0 is not important + (p8) fmerge.s f8=f7,f8 + // return + br.ret.sptk b0;; +} + + +L(FREM_X_NAN_INF): + +// Y zero ? +{.mfi + nop.m 0 + fma.s1 f10=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + fcmp.eq.unc.s1 p11,p0=f10,f0 + nop.i 0;; +} +{.mib + nop.m 0 + nop.i 0 + // if Y zero + (p11) br.cond.spnt L(FREM_Y_ZERO);; +} + +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8,p0 = f8, 0x23 + nop.i 999 +} +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11,p0 = f8, 0x23 + nop.i 999;; +} +// Y NaN ? +{.mfi + nop.m 999 +(p8) fclass.m.unc p0,p8=f9,0xc3 + nop.i 0;; +} +{.mfi + nop.m 999 + // also set Denormal flag if necessary +(p8) fma.s0 f9=f9,f1,f0 + nop.i 0 +} +{ .mfi + nop.m 999 +(p8) frcpa.s0 f8,p7 = f8,f8 + nop.i 999 ;; +} + +{.mfi + nop.m 999 +(p11) mov f10=f8 + nop.i 0 +} +{ .mfi + nop.m 999 +(p8) fma.d f8=f8,f1,f0 + nop.i 0 ;; +} + +{ .mfb + nop.m 999 + frcpa.s0 f8,p7=f8,f9 + (p11) br.cond.spnt L(EXP_ERROR_RETURN);; +} +{ .mib + nop.m 0 + nop.i 0 + br.ret.spnt b0 ;; +} + + +L(FREM_Y_NAN_INF_ZERO): + +// Y INF +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p7) fma.d f8=f8,f1,f0 +(p7) br.ret.spnt b0 ;; +} + +// Y NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0xc3 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p9) fma.d f8=f9,f1,f0 +(p9) br.ret.spnt b0 ;; +} + +L(FREM_Y_ZERO): +// Y zero? Must be zero at this point +// because it is the only choice left. +// Return QNAN indefinite + +// X NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p10 = f8, 0xff + nop.i 999 ;; +} + +{.mfi + nop.m 999 + (p9) frcpa f11,p7=f8,f0 + nop.i 0;; +} + +{ .mfi + nop.m 999 +(p10) frcpa f11,p7 = f0,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8, f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.d f8=f11,f1,f0 + nop.i 999 +} + + +L(EXP_ERROR_RETURN): + +{ .mib +(p0) mov GR_Parameter_TAG = 124 + nop.i 999 +(p0) br.sptk __libm_error_region;; +} + +.endp remainder +ASM_SIZE_DIRECTIVE(remainder) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__remainder) +#endif + + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_remainderf.S glibc-2.2.3/sysdeps/ia64/fpu/e_remainderf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_remainderf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_remainderf.S Mon Feb 19 00:46:40 2001 @@ -0,0 +1,611 @@ + .file "remainderf.asm" +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the Computational +// Software Lab, +// Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//==================================================================== +// 2/02/00 Initial version +// 3/02/00 New algorithm +// 4/04/00 Unwind support added +// 7/21/00 Fixed quotient=2^{24*m+23} bug +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +//11/29/00 Set FR_Y to f9 +// +// API +//==================================================================== +// float remainderf(float,float); +// +// Overview of operation +//==================================================================== +// remainder(a,b)=a-i*b, +// where i is an integer such that, if b!=0 and a is finite, +// |a/b-i|<=1/2. If |a/b-i|=1/2, i is even. +// +// Algorithm +//==================================================================== +// a). eliminate special cases +// b). if |a/b|<0.25 (first quotient estimate), return a +// c). use single precision divide algorithm to get quotient q +// rounded to 24 bits of precision +// d). calculate partial remainders (using both q and q-ulp); +// select one and RZ(a/b) based on the sign of |a|-|b|*q +// e). if the exponent difference (exponent(a)-exponent(b)) +// is less than 24 (quotient estimate<2^{24}-2), use RZ(a/b) +// and sticky bits to round to integer; exit loop and +// calculate final remainder +// f). if exponent(a)-exponent(b)>=24, select new value of a as +// the partial remainder calculated using RZ(a/b); +// repeat from c). +// +// Special cases +//==================================================================== +// a=+/- Inf, or b=+/-0: return NaN, call libm_error_support +// a=NaN or b=NaN: return NaN + +#include "libm_support.h" + +// +// Registers used +//==================================================================== +// Predicate registers: p6-p12 +// General registers: r2,r3,r28,r29,r32 (ar.pfs), r33-r39 +// Floating point registers: f6-f15 +// + +.section .text + +GR_SAVE_B0 = r33 +GR_SAVE_PFS = r34 +GR_SAVE_GP = r35 +GR_SAVE_SP = r36 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f10 +FR_Y = f9 +FR_RESULT = f8 + + + .proc remainderf# + .align 32 + .global remainderf# + .align 32 + +remainderf: +#ifdef _LIBC +.global __remainderf +.type __remainderf,@function +__remainderf: +#endif +// inputs in f8, f9 +// result in f8 + +{ .mfi + alloc r32=ar.pfs,1,4,4,0 + // f13=|a| + fmerge.s f13=f0,f8 + nop.i 0 +} + {.mfi + nop.m 0 + // f14=|b| + fmerge.s f14=f0,f9 + nop.i 0;; +} + {.mlx + nop.m 0 + // r2=2^{24}-2 + movl r3=0x4b7ffffe;; +} + +// Y +-NAN, +-inf, +-0? p11 +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11,p0 = f9, 0xe7 + nop.i 999 +} +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f8, 0xe3 + nop.i 999;; +} + +{.mfi + nop.m 0 + mov f15=f0 + nop.i 0 +} +{ .mfi + // set p7=1 + cmp.eq.unc p7,p0=r0,r0 + // Step (1) + // y0 = 1 / b in f10 + frcpa.s1 f10,p6=f13,f14 + nop.i 0;; +} +{.bbb + (p9) br.cond.spnt L(FREM_X_NAN_INF) + (p11) br.cond.spnt L(FREM_Y_NAN_INF_ZERO) + nop.b 0 +} {.mfi + nop.m 0 + // set D flag if a (f8) is denormal + fnma.s0 f6=f8,f1,f8 + nop.i 0;; +} + +.align 32 +L(remloop24): + { .mfi + // f12=2^{24}-2 + setf.s f12=r3 + // Step (2) + // q0 = a * y0 in f15 + (p6) fma.s1 f15=f13,f10,f0 + nop.i 0 +} +{ .mfi + nop.m 0 + // Step (3) + // e0 = 1 - b * y0 in f7 + (p6) fnma.s1 f7=f14,f10,f1 + nop.i 0;; +} +{.mlx + nop.m 0 + // r2=1.25*2^{-24} + movl r2=0x33a00000;; +} + { .mfi + nop.m 0 + // Step (4) + // q1 = q0 + e0 * q0 in f6 + (p6) fma.s1 f6=f7,f15,f15 + nop.i 0 +} +{ .mfi + nop.m 0 + // Step (5) + // e1 = e0 * e0 in f7 + (p6) fma.s1 f7=f7,f7,f0 + nop.i 0;; +} + {.mii + (p7) getf.exp r29=f15 + (p7) mov r28=0xfffd + nop.i 0;; +} + + { .mfi + // f15=1.25*2^{-24} + setf.s f15=r2 + // Step (6) + // q2 = q1 + e1 * q1 in f6 + (p6) fma.s1 f6=f7,f6,f6 + nop.i 0 +} +{ .mfi + mov r2=0x3e7 + // Step (7) + // e2 = e1 * e1 in f7 + (p6) fma.s1 f7=f7,f7,f0 + nop.i 0;; +} + + {.mmi + // q<1/4 ? (i.e. expon< -2) + (p7) cmp.gt.unc p7,p0=r28,r29 + nop.m 0 + // r2=0x3e7000000 + shl r2=r2,24;; +} + +{.mfb + // r2=0x3e7000001 + add r2=1,r2 + // if |a/b|<1/4, set D flag before returning + (p7) fma.s.s0 f9=f9,f0,f8 + nop.b 0;; +} + {.mfb + nop.m 0 + // can be combined with bundle above if sign of 0 or + // FTZ enabled are not important + (p7) fmerge.s f8=f8,f9 + // return if |a|<4*|b| (estimated quotient < 1/4) + (p7) br.ret.spnt b0;; +} + {.mfi + nop.m 0 + // set f8 to current a value | sign + fmerge.s f8=f8,f13 + // r2=2^{-24}+2^{-48} (double prec.) + shl r2=r2,28;; +} + + +{ .mfi + // r29= -32+bias + mov r29=0xffdf + // Step (8) + // q3 = q2 + e2 * q2 in f6 + (p6) fma.d.s1 f6=f7,f6,f6 + nop.i 0;; +} +{ .mfi + nop.m 0 + // Step (9) + // q = q3 in f11 + (p6) fma.s.s1 f11=f6,f1,f0 + nop.i 0;; +} + {.mfi + // f7=2^{-24} + setf.d f7=r2 + // last step ? (q3<2^{24}-2 --> q<2^{24}) + fcmp.lt.unc.s1 p0,p12=f6,f12 + nop.i 0 +} {.mfi + // f12=2^{-32} + setf.exp f12=r29 + nop.f 0 + nop.i 0;; +} + {.mfi + nop.m 0 + // r=a-b*q + fnma.s1 f6=f14,f11,f13 + nop.i 0 +} +{.mfi + nop.m 0 + // q'=q-q*(1.25*2^{-24}) (q'=q-ulp) + fnma.s.s1 f15=f11,f15,f11 + nop.i 0;; +} + + {.mfi + nop.m 0 + // r2=a-b*q' + fnma.s1 f13=f14,f15,f13 + nop.i 0;; +} + {.mfi + nop.m 0 + // r>0 iff q=RZ(a/b) and inexact + fcmp.gt.unc.s1 p8,p0=f6,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // r<0 iff q'=RZ(a/b) and inexact + fcmp.lt.unc.s1 p9,p10=f6,f0 + nop.i 0;; +} +.pred.rel "mutex",p8,p9 + {.mfi + nop.m 0 + // (p8) Q=q+(last iteration ? sticky bits:0) + // i.e. Q=q+q*x (x=2^{-32} or 0) + (p8) fma.s1 f11=f11,f12,f11 + nop.i 0 +} +{.mfi + nop.m 0 + // (p9) Q=q'+(last iteration ? sticky bits:0) + // i.e. Q=q'+q'*x (x=2^{-24} or 0: if expon. difference=23, want to round back to q) + (p9) fma.s1 f11=f15,f7,f15 + nop.i 0;; +} + + {.mfb + nop.m 0 + // (p9) set r=r2 (new a, if not last iteration) + // (p10) new a =r + (p10) mov f13=f6 + (p12) br.cond.sptk L(remloop24);; +} + +// last iteration + {.mfi + nop.m 0 + // set f9=|b|*sgn(a) + fmerge.s f9=f8,f9 + nop.i 0 +} + {.mfi + nop.m 0 + // round to integer + fcvt.fx.s1 f11=f11 + nop.i 0;; +} + {.mfi + nop.m 0 + // save sign of a + fmerge.s f7=f8,f8 + nop.i 0 +} +{.mfi + nop.m 0 + // normalize + fcvt.xf f11=f11 + nop.i 0;; +} + {.mfi + nop.m 0 + // This can be removed if sign of 0 is not important + // get remainder using sf1 + fnma.s.s1 f12=f9,f11,f8 + nop.i 0 +} + {.mfi + nop.m 0 + // get remainder + fnma.s.s0 f8=f9,f11,f8 + nop.i 0;; +} + + + + {.mfi + nop.m 0 + // f12=0? + // This can be removed if sign of 0 is not important + fcmp.eq.unc.s1 p8,p0=f12,f0 + nop.i 0;; +} + {.mfb + nop.m 0 + // if f8=0, set sign correctly + // This can be removed if sign of 0 is not important + (p8) fmerge.s f8=f7,f8 + // return + br.ret.sptk b0;; +} + + +L(FREM_X_NAN_INF): + +// Y zero ? +{.mfi + nop.m 0 + fma.s1 f10=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + fcmp.eq.unc.s1 p11,p0=f10,f0 + nop.i 0;; +} +{.mib + nop.m 0 + nop.i 0 + // if Y zero + (p11) br.cond.spnt L(FREM_Y_ZERO);; +} + +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8,p0 = f8, 0x23 + nop.i 999 +} +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11,p0 = f8, 0x23 + nop.i 999;; +} +// Y NaN ? +{.mfi + nop.m 999 +(p8) fclass.m.unc p0,p8=f9,0xc3 + nop.i 0;; +} +{.mfi + nop.m 999 + // also set Denormal flag if necessary +(p8) fma.s0 f9=f9,f1,f0 + nop.i 0 +} +{ .mfi + nop.m 999 +(p8) frcpa.s0 f8,p7 = f8,f8 + nop.i 999 ;; +} + +{.mfi + nop.m 999 +(p11) mov f10=f8 + nop.i 0 +} +{ .mfi + nop.m 999 +(p8) fma.s f8=f8,f1,f0 + nop.i 0 ;; +} + +{ .mfb + nop.m 999 + frcpa.s0 f8,p7=f8,f9 + (p11) br.cond.spnt L(EXP_ERROR_RETURN);; +} +{ .mib + nop.m 0 + nop.i 0 + br.ret.spnt b0 ;; +} + + +L(FREM_Y_NAN_INF_ZERO): + +// Y INF +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p7) fma.s f8=f8,f1,f0 +(p7) br.ret.spnt b0 ;; +} + +// Y NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0xc3 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p9) fma.s f8=f9,f1,f0 +(p9) br.ret.spnt b0 ;; +} + +L(FREM_Y_ZERO): +// Y zero? Must be zero at this point +// because it is the only choice left. +// Return QNAN indefinite + +// X NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p10 = f8, 0xff + nop.i 999 ;; +} + +{.mfi + nop.m 999 + (p9) frcpa f11,p7=f8,f0 + nop.i 0;; +} + +{ .mfi + nop.m 999 +(p10) frcpa f11,p7 = f0,f0 +nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8, f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s f8=f11,f1,f0 + nop.i 999 +} + + +L(EXP_ERROR_RETURN): + +{ .mib +(p0) mov GR_Parameter_TAG = 125 + nop.i 999 +(p0) br.sptk __libm_error_region;; +} + +.endp remainderf +ASM_SIZE_DIRECTIVE(remainderf) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__remainderf) +#endif + + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support#;; // Call error handling function +} +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_remainderl.S glibc-2.2.3/sysdeps/ia64/fpu/e_remainderl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_remainderl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_remainderl.S Mon Feb 19 00:46:48 2001 @@ -0,0 +1,619 @@ +.file "remainderl.asm" +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the Computational +// Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//==================================================================== +// 2/02/00 Initial version +// 3/02/00 New algorithm +// 4/04/00 Unwind support added +// 7/21/00 Fixed quotient=2^{24*m+23}*1.q1...q23 1 bug +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +//11/29/00 Set FR_Y to f9 +// +// API +//==================================================================== +// long double remainderl(long double,long double); +// +// Overview of operation +//==================================================================== +// remainder(a,b)=a-i*b, +// where i is an integer such that, if b!=0 and a is finite, +// |a/b-i|<=1/2. If |a/b-i|=1/2, i is even. +// +// Algorithm +//==================================================================== +// a). eliminate special cases +// b). if |a/b|<0.25 (first quotient estimate), return a +// c). use single precision divide algorithm to get quotient q +// rounded to 24 bits of precision +// d). calculate partial remainders (using both q and q-ulp); +// select one and RZ(a/b) based on the sign of |a|-|b|*q +// e). if the exponent difference (exponent(a)-exponent(b)) +// is less than 24 (quotient estimate<2^{24}-2), use RZ(a/b) +// and sticky bits to round to integer; exit loop and +// calculate final remainder +// f). if exponent(a)-exponent(b)>=24, select new value of a as +// the partial remainder calculated using RZ(a/b); +// repeat from c). +// +// Special cases +//==================================================================== +// a=+/- Inf, or b=+/-0: return NaN, call libm_error_support +// a=NaN or b=NaN: return NaN + +#include "libm_support.h" + +// +// Registers used +//==================================================================== +// Predicate registers: p6-p14 +// General registers: r2,r3,r28,r29,r32 (ar.pfs), r33-r39 +// Floating point registers: f6-f15,f32 +// +.section .text + + +GR_SAVE_B0 = r33 +GR_SAVE_PFS = r34 +GR_SAVE_GP = r35 +GR_SAVE_SP = r36 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f10 +FR_Y = f9 +FR_RESULT = f8 + + + + + .proc remainderl# + .align 32 + .global remainderl# + .align 32 + +remainderl: +#ifdef _LIBC +.global __remainderl +.type __remainderl,@function +__remainderl: +#endif +// inputs in f8, f9 +// result in f8 + +{ .mfi + alloc r32=ar.pfs,1,4,4,0 + // f13=|a| + fmerge.s f13=f0,f8 + nop.i 0 +} + {.mfi + getf.sig r29=f9 + // f14=|b| + fmerge.s f14=f0,f9 + nop.i 0;; +} + {.mlx + mov r28=0x2ffdd + // r2=2^{23} + movl r3=0x4b000000;; +} + + +{.mmi +setf.exp f32=r28 +nop.m 0 +// y pseudo-zero ? +cmp.eq p11,p10=r29,r0;; +} + +// Y +-NAN, +-inf, +-0? p11 +{ .mfi + nop.m 999 +(p10) fclass.m p11,p10 = f9, 0xe7 + nop.i 999 +} +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p8 = f8, 0xe3 + nop.i 999;; +} + +{.mfi + nop.m 0 + mov f12=f0 + nop.i 0 +} +{ .mfi + // set p7=1 + cmp.eq.unc p7,p0=r0,r0 + // Step (1) + // y0 = 1 / b in f10 + frcpa.s1 f10,p6=f13,f14 + nop.i 0;; +} +// Y +-NAN, +-inf, +-0? p11 +{ .mfi + nop.m 999 + // pseudo-NaN ? +(p10) fclass.nm p11,p0 = f9, 0xff + nop.i 999 +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X +-NAN, +-inf, ? p9 + +{ .mfi + nop.m 999 +(p8) fclass.nm p9,p0 = f8, 0xff + nop.i 999;; +} + +{.bbb + (p9) br.cond.spnt L(FREM_X_NAN_INF) + (p11) br.cond.spnt L(FREM_Y_NAN_INF_ZERO) + nop.b 0 +} {.mfi + nop.m 0 + // set D flag if a (f8) is denormal + fnma.s0 f6=f8,f1,f8 + nop.i 0;; +} + +L(remloop24): + { .mfi + nop.m 0 + // Step (2) + // q0 = a * y0 in f15 + (p6) fma.s1 f12=f13,f10,f0 + nop.i 0 +} { .mfi + nop.m 0 + // Step (3) + // e0 = 1 - b * y0 in f7 + (p6) fnma.s1 f7=f14,f10,f1 + nop.i 0;; +} {.mlx + nop.m 0 + // r2=1.25*2^{-24} + movl r2=0x33a00000;; +} + +{.mfi + nop.m 0 + // q1=q0*(1+e0) + fma.s1 f15=f12,f7,f12 + nop.i 0 +} +{ .mfi + nop.m 0 + // Step (4) + // e1 = e0 * e0 + E in f7 + (p6) fma.s1 f7=f7,f7,f32 + nop.i 0;; +} + {.mii + (p7) getf.exp r29=f12 + (p7) mov r28=0xfffd + nop.i 0;; +} + + { .mfi + // f12=2^{23} + setf.s f12=r3 + // Step (5) + // q2 = q1 + e1 * q1 in f11 + (p6) fma.s.s1 f11=f7,f15,f15 + nop.i 0 +} { .mfi + nop.m 0 + // Step (6) + // q2 = q1 + e1 * q1 in f6 + (p6) fma.s1 f6=f7,f15,f15 + nop.i 0;; +} + + {.mmi + // f15=1.25*2^{-24} + setf.s f15=r2 + // q<1/4 ? (i.e. expon< -2) + (p7) cmp.gt p7,p0=r28,r29 + nop.i 0;; +} + +{.mfb + // r29= -32+bias + mov r29=0xffdf + // if |a/b|<1/4, set D flag before returning + (p7) fma.s0 f9=f9,f0,f8 + nop.b 0;; +} + {.mfb + nop.m 0 + // can be combined with bundle above if sign of 0 or + // FTZ enabled are not important + (p7) fmerge.s f8=f8,f9 + // return if |a|<4*|b| (estimated quotient < 1/4) + (p7) br.ret.spnt b0;; +} + {.mfi + // f7=2^{-32} + setf.exp f7=r29 + // set f8 to current a value | sign + fmerge.s f8=f8,f13 + nop.i 0;; +} + {.mfi + getf.exp r28=f6 + // last step ? (q<2^{23}) + fcmp.lt.unc.s1 p0,p12=f6,f12 + nop.i 0;; +} + {.mfi + nop.m 0 + // r=a-b*q + fnma.s1 f6=f14,f11,f13 + nop.i 0 +} {.mfi + // r2=23+bias + mov r2=0xffff+23 + // q'=q-q*(1.25*2^{-24}) (q'=q-ulp) + fnma.s.s1 f15=f11,f15,f11 + nop.i 0;; +} + {.mmi + nop.m 0 + cmp.eq p11,p14=r2,r28 + nop.i 0;; +} + +.pred.rel "mutex",p11,p14 + {.mfi + nop.m 0 + // if exp_q=2^23, then r=a-b*2^{23} + (p11) fnma.s1 f13=f12,f14,f13 + nop.i 0 +} +{.mfi + nop.m 0 + // r2=a-b*q' + (p14) fnma.s1 f13=f14,f15,f13 + nop.i 0;; +} + {.mfi + nop.m 0 + // r>0 iff q=RZ(a/b) and inexact + fcmp.gt.unc.s1 p8,p0=f6,f0 + nop.i 0 +} {.mfi + nop.m 0 + // r<0 iff q'=RZ(a/b) and inexact + (p14) fcmp.lt.unc.s1 p9,p10=f6,f0 + nop.i 0;; +} + +.pred.rel "mutex",p8,p9 + {.mfi + nop.m 0 + // (p8) Q=q+(last iteration ? sticky bits:0) + // i.e. Q=q+q*x (x=2^{-32} or 0) + (p8) fma.s1 f11=f11,f7,f11 + nop.i 0 +} {.mfi + nop.m 0 + // (p9) Q=q'+(last iteration ? sticky bits:0) + // i.e. Q=q'+q'*x (x=2^{-32} or 0) + (p9) fma.s1 f11=f15,f7,f15 + nop.i 0;; +} + + {.mfb + nop.m 0 + // (p9) set r=r2 (new a, if not last iteration) + // (p10) new a =r + (p10) mov f13=f6 + (p12) br.cond.sptk L(remloop24);; +} + +// last iteration + {.mfi + nop.m 0 + // set f9=|b|*sgn(a) + fmerge.s f9=f8,f9 + nop.i 0 +} + {.mfi + nop.m 0 + // round to integer + fcvt.fx.s1 f11=f11 + nop.i 0;; +} + {.mfi + nop.m 0 + // save sign of a + fmerge.s f7=f8,f8 + nop.i 0 +} {.mfi + nop.m 0 + // normalize + fcvt.xf f11=f11 + nop.i 0;; +} + {.mfi + nop.m 0 + // This can be removed if sign of 0 is not important + // get remainder using sf1 + fnma.s1 f12=f9,f11,f8 + nop.i 0 +} + {.mfi + nop.m 0 + // get remainder + fnma.s0 f8=f9,f11,f8 + nop.i 0;; +} + {.mfi + nop.m 0 + // f12=0? + // This can be removed if sign of 0 is not important + fcmp.eq.unc.s1 p8,p0=f12,f0 + nop.i 0;; +} + {.mfb + nop.m 0 + // if f8=0, set sign correctly + // This can be removed if sign of 0 is not important + (p8) fmerge.s f8=f7,f8 + // return + br.ret.sptk b0;; +} + + + +L(FREM_X_NAN_INF): + +// Y zero ? +{.mfi + nop.m 0 + fma.s1 f10=f9,f1,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + fcmp.eq.unc.s1 p11,p0=f10,f0 + nop.i 0;; +} +{.mib + nop.m 0 + nop.i 0 + // if Y zero + (p11) br.cond.spnt L(FREM_Y_ZERO);; +} + +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8,p0 = f8, 0x23 + nop.i 999 +} +// X infinity? Return QNAN indefinite +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11,p0 = f8, 0x23 + nop.i 999;; +} +// Y NaN ? +{.mfi + nop.m 999 +(p8) fclass.m.unc p0,p8=f9,0xc3 + nop.i 0;; +} +{.mfi + nop.m 999 + // also set Denormal flag if necessary +(p8) fnma.s0 f9=f9,f1,f9 + nop.i 0 +} +{ .mfi + nop.m 999 +(p8) frcpa.s0 f8,p7 = f8,f8 + nop.i 999 ;; +} + +{.mfi + nop.m 999 +(p11) mov f10=f8 + nop.i 0 +} +{ .mfi + nop.m 999 +(p8) fma f8=f8,f1,f0 + nop.i 0 ;; +} + +{ .mfb + nop.m 999 + frcpa.s0 f8,p7=f8,f9 + (p11) br.cond.spnt L(EXP_ERROR_RETURN);; +} +{ .mib + nop.m 0 + nop.i 0 + br.ret.spnt b0 ;; +} + + +L(FREM_Y_NAN_INF_ZERO): +// Y INF +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x23 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p7) fma f8=f8,f1,f0 +(p7) br.ret.spnt b0 ;; +} + +// Y NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f9, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p0 = f9, 0xff + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p9) fma f8=f9,f1,f0 +(p9) br.ret.spnt b0 ;; +} + +L(FREM_Y_ZERO): +// Y zero? Must be zero at this point +// because it is the only choice left. +// Return QNAN indefinite + +// X NAN? +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p10 = f8, 0xc3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fclass.nm p9,p10 = f8, 0xff + nop.i 999 ;; +} + +{.mfi + nop.m 999 + (p9) frcpa f11,p7=f8,f0 + nop.i 0;; +} +{ .mfi + nop.m 999 +(p10) frcpa f11,p7 = f0,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8, f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma f8=f11,f1,f0 + nop.i 999;; +} + +L(EXP_ERROR_RETURN): + +{ .mib +(p0) mov GR_Parameter_TAG = 123 + nop.i 999 +(p0) br.sptk __libm_error_region;; +} + +.endp remainderl +ASM_SIZE_DIRECTIVE(remainderl) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__remainderl) +#endif + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_scalb.S glibc-2.2.3/sysdeps/ia64/fpu/e_scalb.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_scalb.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_scalb.S Mon Feb 19 00:46:58 2001 @@ -0,0 +1,551 @@ +.file "scalb.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 Scalb completely reworked and now standalone version +// +// API +//============================================================== +// double = scalb (double x, double n) +// input floating point f8 and floating point f9 +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Floating_X = f8 +FR_Result = f8 +FR_Floating_N = f9 +FR_Result2 = f9 +FR_Norm_N = f10 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_N_float_int = f13 +FR_Two_N = f14 +FR_Two_to_Big = f15 +FR_Big = f6 +FR_NBig = f7 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global scalb + +.section .text +.proc scalb +.align 32 + +scalb: +#ifdef _LIBC +.global __ieee754_scalb +.type __ieee754_scalb,@function +__ieee754_scalb: +#endif + +// +// Is x NAN, INF, ZERO, +-? +// +{ .mfi + alloc r32=ar.pfs,0,3,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Scratch = 0x019C3F,r0 +} +// +// Is y a NAN, INF, ZERO, +-? +// +{ .mfi + nop.m 999 + fclass.m.unc p6,p0 = FR_Floating_N, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Scratch1 = 0x063BF,r0 +} +;; + +// +// Convert N to a fp integer +// Normalize x +// +{ .mfi + nop.m 0 + fnorm.s1 FR_Norm_N = FR_Floating_N + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm.s1 FR_Norm_X = FR_Floating_X + nop.i 999 +};; + +// +// Create 2*big +// Create 2**-big +// Normalize x +// Branch on special values. +// +{ .mib + setf.exp FR_Big = GR_Scratch + nop.i 0 +(p6) br.cond.spnt L(SCALB_NAN_INF_ZERO) +} +{ .mib + setf.exp FR_NBig = GR_Scratch1 + nop.i 0 +(p7) br.cond.spnt L(SCALB_NAN_INF_ZERO) +};; + +// +// Convert N to a fp integer +// Create -35000 +// +{ .mfi + addl GR_Scratch = 1,r0 + fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N + addl GR_NBig = -35000,r0 +} +;; + +// +// Put N if a GP register +// Convert N_float_int to floating point value +// Create 35000 +// Build the exponent Bias +// +{ .mii + getf.sig GR_N_as_int = FR_N_float_int + shl GR_Scratch = GR_Scratch,63 + addl GR_Big = 35000,r0 +} +{ .mfi + addl GR_Bias = 0x0FFFF,r0 + fcvt.xf FR_N_float_int = FR_N_float_int + nop.i 0 +};; + +// +// Catch those fp values that are beyond 2**64-1 +// Is N > 35000 +// Is N < -35000 +// +{ .mfi + cmp.ne.unc p9,p10 = GR_N_as_int,GR_Scratch + nop.f 0 + nop.i 0 +} +{ .mmi + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig + nop.i 0 +};; + +// +// Is N really an int, only for those non-int indefinites? +// Create exp bias. +// +{ .mfi + add GR_N_Biased = GR_Bias,GR_N_as_int +(p9) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int + nop.i 0 +};; + +// +// Branch and return if N is not an int. +// Main path, create 2**N +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.i 999 +} +{ .mfb + nop.m 0 +(p7) frcpa f8,p11 = f0,f0 +(p7) br.ret.spnt b0 +};; + +// +// Set denormal on denormal input x and denormal input N +// +{ .mfi + nop.m 999 +(p10)fcmp.ge.s1 p6,p8 = FR_Norm_N,f0 + nop.i 0 +};; +{ .mfi + nop.m 999 + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fcmp.ge.s0 p12,p13 = FR_Floating_N,f0 + nop.i 0 +};; + +// +// Adjust 2**N if N was very small or very large +// + +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x00000000000303FF +};; +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x00000000000103FF +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.d.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.d.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.d.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflow) +// S3 user supplied status + FZ + TD (Underflow) +// +// +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 53, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 54, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(SCALB_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(SCALB_OVERFLOW) +(p9) br.cond.spnt L(SCALB_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +L(SCALB_NAN_INF_ZERO): + +// +// Convert N to a fp integer +// +{ .mfi + addl GR_Scratch = 1,r0 + fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N + nop.i 999 +} +{ .mfi + nop.m 0 + fclass.m.unc p6,p0 = FR_Floating_N, 0xc3 //@snan | @qnan + nop.i 0 +};; +{ .mfi + nop.m 0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xc3 //@snan | @qnan + shl GR_Scratch = GR_Scratch,63 +};; +{ .mfi + nop.m 0 + fclass.m.unc p8,p0 = FR_Floating_N, 0x21 // @inf + nop.i 0 +} + { .mfi + nop.m 0 + fclass.m.unc p9,p0 = FR_Floating_N, 0x22 // @-inf + nop.i 0 +};; + +// +// Either X or N is a Nan, return result and possible raise invalid. +// +{ .mfb + nop.m 0 +(p6) fma.d.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 +(p6) br.ret.spnt b0 +};; +{ .mfb + getf.sig GR_N_as_int = FR_N_float_int +(p7) fma.d.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 +(p7) br.ret.spnt b0 +};; + +// +// If N + Inf do something special +// For N = -Inf, create Int +// +{ .mfb + nop.m 0 +(p8) fma.d.s0 FR_Result = FR_Floating_X, FR_Floating_N,f0 +(p8) br.ret.spnt b0 +} +{ .mfi + nop.m 0 +(p9) fnma.d.s0 FR_Floating_N = FR_Floating_N, f1, f0 + nop.i 0 +};; + +// +// If N==-Inf,return x/(-N) +// +{ .mfb + nop.m 0 +(p9) frcpa.s0 FR_Result,p6 = FR_Floating_X,FR_Floating_N +(p9) br.ret.spnt b0 +};; + +// +// Convert N_float_int to floating point value +// +{ .mfi + cmp.ne.unc p9,p0 = GR_N_as_int,GR_Scratch + fcvt.xf FR_N_float_int = FR_N_float_int + nop.i 0 +};; + +// +// Is N an integer. +// +{ .mfi + nop.m 0 +(p9) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int + nop.i 0 +};; + +// +// If N not an int, return NaN and raise invalid. +// +{ .mfb + nop.m 0 +(p7) frcpa.s0 FR_Result,p6 = f0,f0 +(p7) br.ret.spnt b0 +};; + +// +// Always return x in other path. +// +{ .mfb + nop.m 0 + fma.d.s0 FR_Result = FR_Floating_X,f1,f0 + br.ret.sptk b0 +};; + +.endp scalb +ASM_SIZE_DIRECTIVE(scalb) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__ieee754_scalb) +#endif +.proc __libm_error_region +__libm_error_region: + +L(SCALB_OVERFLOW): +L(SCALB_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + stfd [GR_Parameter_Y] = FR_Norm_N,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfd [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfd FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_scalbf.S glibc-2.2.3/sysdeps/ia64/fpu/e_scalbf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_scalbf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_scalbf.S Mon Feb 19 00:47:07 2001 @@ -0,0 +1,551 @@ +.file "scalbf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 Scalb completely reworked and now standalone version +// +// API +//============================================================== +// float = scalbf (float x, float n) +// input floating point f8 and floating point f9 +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Floating_X = f8 +FR_Result = f8 +FR_Floating_N = f9 +FR_Result2 = f9 +FR_Norm_N = f10 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_N_float_int = f13 +FR_Two_N = f14 +FR_Two_to_Big = f15 +FR_Big = f6 +FR_NBig = f7 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global scalbf + +.section .text +.proc scalbf +.align 32 + +scalbf: +#ifdef _LIBC +.global __ieee754_scalbf +.type __ieee754_scalbf,@function +__ieee754_scalbf: +#endif + +// +// Is x NAN, INF, ZERO, +-? +// +{ .mfi + alloc r32=ar.pfs,0,3,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Scratch = 0x019C3F,r0 +} +// +// Is y a NAN, INF, ZERO, +-? +// +{ .mfi + nop.m 999 + fclass.m.unc p6,p0 = FR_Floating_N, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Scratch1 = 0x063BF,r0 +} +;; + +// +// Convert N to a fp integer +// Normalize x +// +{ .mfi + nop.m 0 + fnorm.s1 FR_Norm_N = FR_Floating_N + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm.s1 FR_Norm_X = FR_Floating_X + nop.i 999 +};; + +// +// Create 2*big +// Create 2**-big +// Normalize x +// Branch on special values. +// +{ .mib + setf.exp FR_Big = GR_Scratch + nop.i 0 +(p6) br.cond.spnt L(SCALBF_NAN_INF_ZERO) +} +{ .mib + setf.exp FR_NBig = GR_Scratch1 + nop.i 0 +(p7) br.cond.spnt L(SCALBF_NAN_INF_ZERO) +};; + +// +// Convert N to a fp integer +// Create -35000 +// +{ .mfi + addl GR_Scratch = 1,r0 + fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N + addl GR_NBig = -35000,r0 +} +;; + +// +// Put N if a GP register +// Convert N_float_int to floating point value +// Create 35000 +// Build the exponent Bias +// +{ .mii + getf.sig GR_N_as_int = FR_N_float_int + shl GR_Scratch = GR_Scratch,63 + addl GR_Big = 35000,r0 +} +{ .mfi + addl GR_Bias = 0x0FFFF,r0 + fcvt.xf FR_N_float_int = FR_N_float_int + nop.i 0 +};; + +// +// Catch those fp values that are beyond 2**64-1 +// Is N > 35000 +// Is N < -35000 +// +{ .mfi + cmp.ne.unc p9,p10 = GR_N_as_int,GR_Scratch + nop.f 0 + nop.i 0 +} +{ .mmi + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig + nop.i 0 +};; + +// +// Is N really an int, only for those non-int indefinites? +// Create exp bias. +// +{ .mfi + add GR_N_Biased = GR_Bias,GR_N_as_int +(p9) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int + nop.i 0 +};; + +// +// Branch and return if N is not an int. +// Main path, create 2**N +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.i 999 +} +{ .mfb + nop.m 0 +(p7) frcpa f8,p11 = f0,f0 +(p7) br.ret.spnt b0 +};; + +// +// Set denormal on denormal input x and denormal input N +// +{ .mfi + nop.m 999 +(p10)fcmp.ge.s1 p6,p8 = FR_Norm_N,f0 + nop.i 0 +};; +{ .mfi + nop.m 999 + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fcmp.ge.s0 p12,p13 = FR_Floating_N,f0 + nop.i 0 +};; + +// +// Adjust 2**N if N was very small or very large +// + +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x000000000003007F +};; +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x000000000001007F +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflow) +// S3 user supplied status + FZ + TD (Underflow) +// +// +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 55, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 56, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(SCALBF_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(SCALBF_OVERFLOW) +(p9) br.cond.spnt L(SCALBF_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +L(SCALBF_NAN_INF_ZERO): + +// +// Convert N to a fp integer +// +{ .mfi + addl GR_Scratch = 1,r0 + fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N + nop.i 999 +} +{ .mfi + nop.m 0 + fclass.m.unc p6,p0 = FR_Floating_N, 0xc3 //@snan | @qnan + nop.i 0 +};; +{ .mfi + nop.m 0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xc3 //@snan | @qnan + shl GR_Scratch = GR_Scratch,63 +};; +{ .mfi + nop.m 0 + fclass.m.unc p8,p0 = FR_Floating_N, 0x21 // @inf + nop.i 0 +} + { .mfi + nop.m 0 + fclass.m.unc p9,p0 = FR_Floating_N, 0x22 // @-inf + nop.i 0 +};; + +// +// Either X or N is a Nan, return result and possible raise invalid. +// +{ .mfb + nop.m 0 +(p6) fma.s.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 +(p6) br.ret.spnt b0 +};; +{ .mfb + getf.sig GR_N_as_int = FR_N_float_int +(p7) fma.s.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 +(p7) br.ret.spnt b0 +};; + +// +// If N + Inf do something special +// For N = -Inf, create Int +// +{ .mfb + nop.m 0 +(p8) fma.s.s0 FR_Result = FR_Floating_X, FR_Floating_N,f0 +(p8) br.ret.spnt b0 +} +{ .mfi + nop.m 0 +(p9) fnma.s.s0 FR_Floating_N = FR_Floating_N, f1, f0 + nop.i 0 +};; + +// +// If N==-Inf,return x/(-N) +// +{ .mfb + nop.m 0 +(p9) frcpa.s0 FR_Result,p6 = FR_Floating_X,FR_Floating_N +(p9) br.ret.spnt b0 +};; + +// +// Convert N_float_int to floating point value +// +{ .mfi + cmp.ne.unc p9,p0 = GR_N_as_int,GR_Scratch + fcvt.xf FR_N_float_int = FR_N_float_int + nop.i 0 +};; + +// +// Is N an integer. +// +{ .mfi + nop.m 0 +(p9) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int + nop.i 0 +};; + +// +// If N not an int, return NaN and raise invalid. +// +{ .mfb + nop.m 0 +(p7) frcpa.s0 FR_Result,p6 = f0,f0 +(p7) br.ret.spnt b0 +};; + +// +// Always return x in other path. +// +{ .mfb + nop.m 0 + fma.s.s0 FR_Result = FR_Floating_X,f1,f0 + br.ret.sptk b0 +};; + +.endp scalbf +ASM_SIZE_DIRECTIVE(scalbf) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__ieee754_scalbf) +#endif +.proc __libm_error_region +__libm_error_region: + +L(SCALBF_OVERFLOW): +L(SCALBF_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + stfs [GR_Parameter_Y] = FR_Norm_N,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfs [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfs FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_scalbl.S glibc-2.2.3/sysdeps/ia64/fpu/e_scalbl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_scalbl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_scalbl.S Mon Feb 19 00:47:15 2001 @@ -0,0 +1,551 @@ +.file "scalbl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 Scalb completely reworked and now standalone version +// +// API +//============================================================== +// double-extended = scalbl (double-extended x, double-extended n) +// input floating point f8 and floating point f9 +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Floating_X = f8 +FR_Result = f8 +FR_Floating_N = f9 +FR_Result2 = f9 +FR_Norm_N = f10 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_N_float_int = f13 +FR_Two_N = f14 +FR_Two_to_Big = f15 +FR_Big = f6 +FR_NBig = f7 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global scalbl + +.section .text +.proc scalbl +.align 32 + +scalbl: +#ifdef _LIBC +.global __ieee754_scalbl +.type __ieee754_scalbl,@function +__ieee754_scalbl: +#endif + +// +// Is x NAN, INF, ZERO, +-? +// +{ .mfi + alloc r32=ar.pfs,0,3,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Scratch = 0x019C3F,r0 +} +// +// Is y a NAN, INF, ZERO, +-? +// +{ .mfi + nop.m 999 + fclass.m.unc p6,p0 = FR_Floating_N, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Scratch1 = 0x063BF,r0 +} +;; + +// +// Convert N to a fp integer +// Normalize x +// +{ .mfi + nop.m 0 + fnorm.s1 FR_Norm_N = FR_Floating_N + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm.s1 FR_Norm_X = FR_Floating_X + nop.i 999 +};; + +// +// Create 2*big +// Create 2**-big +// Normalize x +// Branch on special values. +// +{ .mib + setf.exp FR_Big = GR_Scratch + nop.i 0 +(p6) br.cond.spnt L(SCALBL_NAN_INF_ZERO) +} +{ .mib + setf.exp FR_NBig = GR_Scratch1 + nop.i 0 +(p7) br.cond.spnt L(SCALBL_NAN_INF_ZERO) +};; + +// +// Convert N to a fp integer +// Create -35000 +// +{ .mfi + addl GR_Scratch = 1,r0 + fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N + addl GR_NBig = -35000,r0 +} +;; + +// +// Put N if a GP register +// Convert N_float_int to floating point value +// Create 35000 +// Build the exponent Bias +// +{ .mii + getf.sig GR_N_as_int = FR_N_float_int + shl GR_Scratch = GR_Scratch,63 + addl GR_Big = 35000,r0 +} +{ .mfi + addl GR_Bias = 0x0FFFF,r0 + fcvt.xf FR_N_float_int = FR_N_float_int + nop.i 0 +};; + +// +// Catch those fp values that are beyond 2**64-1 +// Is N > 35000 +// Is N < -35000 +// +{ .mfi + cmp.ne.unc p9,p10 = GR_N_as_int,GR_Scratch + nop.f 0 + nop.i 0 +} +{ .mmi + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig + nop.i 0 +};; + +// +// Is N really an int, only for those non-int indefinites? +// Create exp bias. +// +{ .mfi + add GR_N_Biased = GR_Bias,GR_N_as_int +(p9) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int + nop.i 0 +};; + +// +// Branch and return if N is not an int. +// Main path, create 2**N +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.i 999 +} +{ .mfb + nop.m 0 +(p7) frcpa f8,p11 = f0,f0 +(p7) br.ret.spnt b0 +};; + +// +// Set denormal on denormal input x and denormal input N +// +{ .mfi + nop.m 999 +(p10)fcmp.ge.s1 p6,p8 = FR_Norm_N,f0 + nop.i 0 +};; +{ .mfi + nop.m 999 + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fcmp.ge.s0 p12,p13 = FR_Floating_N,f0 + nop.i 0 +};; + +// +// Adjust 2**N if N was very small or very large +// + +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x0000000000033FFF +};; +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x0000000000013FFF +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflow) +// S3 user supplied status + FZ + TD (Underflow) +// +// +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 51, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 52, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(SCALBL_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(SCALBL_OVERFLOW) +(p9) br.cond.spnt L(SCALBL_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +L(SCALBL_NAN_INF_ZERO): + +// +// Convert N to a fp integer +// +{ .mfi + addl GR_Scratch = 1,r0 + fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N + nop.i 999 +} +{ .mfi + nop.m 0 + fclass.m.unc p6,p0 = FR_Floating_N, 0xc3 //@snan | @qnan + nop.i 0 +};; +{ .mfi + nop.m 0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xc3 //@snan | @qnan + shl GR_Scratch = GR_Scratch,63 +};; +{ .mfi + nop.m 0 + fclass.m.unc p8,p0 = FR_Floating_N, 0x21 // @inf + nop.i 0 +} + { .mfi + nop.m 0 + fclass.m.unc p9,p0 = FR_Floating_N, 0x22 // @-inf + nop.i 0 +};; + +// +// Either X or N is a Nan, return result and possible raise invalid. +// +{ .mfb + nop.m 0 +(p6) fma.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 +(p6) br.ret.spnt b0 +};; +{ .mfb + getf.sig GR_N_as_int = FR_N_float_int +(p7) fma.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 +(p7) br.ret.spnt b0 +};; + +// +// If N + Inf do something special +// For N = -Inf, create Int +// +{ .mfb + nop.m 0 +(p8) fma.s0 FR_Result = FR_Floating_X, FR_Floating_N,f0 +(p8) br.ret.spnt b0 +} +{ .mfi + nop.m 0 +(p9) fnma.s0 FR_Floating_N = FR_Floating_N, f1, f0 + nop.i 0 +};; + +// +// If N==-Inf,return x/(-N) +// +{ .mfb + nop.m 0 +(p9) frcpa.s0 FR_Result,p6 = FR_Floating_X,FR_Floating_N +(p9) br.ret.spnt b0 +};; + +// +// Convert N_float_int to floating point value +// +{ .mfi + cmp.ne.unc p9,p0 = GR_N_as_int,GR_Scratch + fcvt.xf FR_N_float_int = FR_N_float_int + nop.i 0 +};; + +// +// Is N an integer. +// +{ .mfi + nop.m 0 +(p9) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int + nop.i 0 +};; + +// +// If N not an int, return NaN and raise invalid. +// +{ .mfb + nop.m 0 +(p7) frcpa.s0 FR_Result,p6 = f0,f0 +(p7) br.ret.spnt b0 +};; + +// +// Always return x in other path. +// +{ .mfb + nop.m 0 + fma.s0 FR_Result = FR_Floating_X,f1,f0 + br.ret.sptk b0 +};; + +.endp scalbl +ASM_SIZE_DIRECTIVE(scalbl) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__ieee754_scalbl) +#endif +.proc __libm_error_region +__libm_error_region: + +L(SCALBL_OVERFLOW): +L(SCALBL_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + stfe [GR_Parameter_Y] = FR_Norm_N,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfe [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfe [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfe FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_sinh.S glibc-2.2.3/sysdeps/ia64/fpu/e_sinh.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_sinh.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_sinh.S Mon Feb 19 00:47:26 2001 @@ -0,0 +1,1310 @@ +.file "sinh.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 10/12/00 Update to set denormal operand and underflow flags +// 1/22/01 Fixed to set inexact flag for small args. +// +// API +//============================================================== +// double = sinh(double) +// input floating point f8 +// output floating point f8 +// +// Registers used +//============================================================== +// general registers: +// r32 -> r47 +// predicate registers used: +// p6 p7 p8 p9 +// floating-point registers used: +// f9 -> f15; f32 -> f45; +// f8 has input, then output +// +// Overview of operation +//============================================================== +// There are four paths +// 1. |x| < 0.25 SINH_BY_POLY +// 2. |x| < 32 SINH_BY_TBL +// 3. |x| < 2^14 SINH_BY_EXP +// 4. |x_ >= 2^14 SINH_HUGE +// +// For double extended we get infinity for x >= 400c b174 ddc0 31ae c0ea +// >= 1.0110001.... x 2^13 +// >= 11357.2166 +// +// But for double we get infinity for x >= 408633ce8fb9f87e +// >= 1.0110...x 2^9 +// >= +7.10476e+002 +// +// And for single we get infinity for x >= 42b3a496 +// >= 1.0110... 2^6 +// >= 89.8215 +// +// SAFE: If there is danger of overflow set SAFE to 0 +// NOT implemented: if there is danger of underflow, set SAFE to 0 +// SAFE for all paths listed below +// +// 1. SINH_BY_POLY +// =============== +// If |x| is less than the tiny threshold, then clear SAFE +// For double, the tiny threshold is -1022 = -0x3fe => -3fe + ffff = fc01 +// register-biased, this is fc01 +// For single, the tiny threshold is -126 = -7e => -7e + ffff = ff81 +// If |x| < tiny threshold, set SAFE = 0 +// +// 2. SINH_BY_TBL +// ============= +// SAFE: SAFE is always 1 for TBL; +// +// 3. SINH_BY_EXP +// ============== +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// r34 has N-1; 16382 is in register biased form, 0x13ffd +// There is danger of double overflow if N-1 > 0x3fe +// in register biased form, 0x103fd +// Analagously, there is danger of single overflow if N-1 > 0x7e +// in register biased form, 0x1007d +// SAFE: If there is danger of overflow set SAFE to 0 +// +// 4. SINH_HUGE +// ============ +// SAFE: SAFE is always 0 for HUGE + +#include "libm_support.h" + +// +// Assembly macros +//============================================================== +sinh_FR_X = f44 +sinh_FR_X2 = f9 +sinh_FR_X4 = f10 +sinh_FR_SGNX = f40 +sinh_FR_all_ones = f45 +sinh_FR_tmp = f42 + +sinh_FR_Inv_log2by64 = f9 +sinh_FR_log2by64_lo = f11 +sinh_FR_log2by64_hi = f10 + +sinh_FR_A1 = f9 +sinh_FR_A2 = f10 +sinh_FR_A3 = f11 + +sinh_FR_Rcub = f12 +sinh_FR_M_temp = f13 +sinh_FR_R_temp = f13 +sinh_FR_Rsq = f13 +sinh_FR_R = f14 + +sinh_FR_M = f38 + +sinh_FR_B1 = f15 +sinh_FR_B2 = f32 +sinh_FR_B3 = f33 + +sinh_FR_peven_temp1 = f34 +sinh_FR_peven_temp2 = f35 +sinh_FR_peven = f36 + +sinh_FR_podd_temp1 = f34 +sinh_FR_podd_temp2 = f35 +sinh_FR_podd = f37 + +sinh_FR_poly_podd_temp1 = f11 +sinh_FR_poly_podd_temp2 = f13 +sinh_FR_poly_peven_temp1 = f11 +sinh_FR_poly_peven_temp2 = f13 + +sinh_FR_J_temp = f9 +sinh_FR_J = f10 + +sinh_FR_Mmj = f39 + +sinh_FR_N_temp1 = f11 +sinh_FR_N_temp2 = f12 +sinh_FR_N = f13 + +sinh_FR_spos = f14 +sinh_FR_sneg = f15 + +sinh_FR_Tjhi = f32 +sinh_FR_Tjlo = f33 +sinh_FR_Tmjhi = f34 +sinh_FR_Tmjlo = f35 + +sinh_GR_mJ = r35 +sinh_GR_J = r36 + +sinh_AD_mJ = r38 +sinh_AD_J = r39 +sinh_GR_all_ones = r40 + +sinh_FR_S_hi = f9 +sinh_FR_S_hi_temp = f10 +sinh_FR_S_lo_temp1 = f11 +sinh_FR_S_lo_temp2 = f12 +sinh_FR_S_lo_temp3 = f13 + +sinh_FR_S_lo = f38 +sinh_FR_C_hi = f39 + +sinh_FR_C_hi_temp1 = f10 +sinh_FR_Y_hi = f11 +sinh_FR_Y_lo_temp = f12 +sinh_FR_Y_lo = f13 +sinh_FR_SINH = f9 + +sinh_FR_P1 = f14 +sinh_FR_P2 = f15 +sinh_FR_P3 = f32 +sinh_FR_P4 = f33 +sinh_FR_P5 = f34 +sinh_FR_P6 = f35 + +sinh_FR_TINY_THRESH = f9 + +sinh_FR_SINH_temp = f10 +sinh_FR_SCALE = f11 + +sinh_FR_signed_hi_lo = f10 + + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +double_sinh_arg_reduction: +ASM_TYPE_DIRECTIVE(double_sinh_arg_reduction,@object) + data8 0xB8AA3B295C17F0BC, 0x00004005 + data8 0xB17217F7D1000000, 0x00003FF8 + data8 0xCF79ABC9E3B39804, 0x00003FD0 +ASM_SIZE_DIRECTIVE(double_sinh_arg_reduction) + +double_sinh_p_table: +ASM_TYPE_DIRECTIVE(double_sinh_p_table,@object) + data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC + data8 0x8888888888888412, 0x00003FF8 + data8 0xD00D00D00D4D39F2, 0x00003FF2 + data8 0xB8EF1D28926D8891, 0x00003FEC + data8 0xD732377688025BE9, 0x00003FE5 + data8 0xB08AF9AE78C1239F, 0x00003FDE +ASM_SIZE_DIRECTIVE(double_sinh_p_table) + +double_sinh_ab_table: +ASM_TYPE_DIRECTIVE(double_sinh_ab_table,@object) + data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC + data8 0x88888888884ECDD5, 0x00003FF8 + data8 0xD00D0C6DCC26A86B, 0x00003FF2 + data8 0x8000000000000002, 0x00003FFE + data8 0xAAAAAAAAAA402C77, 0x00003FFA + data8 0xB60B6CC96BDB144D, 0x00003FF5 +ASM_SIZE_DIRECTIVE(double_sinh_ab_table) + +double_sinh_j_table: +ASM_TYPE_DIRECTIVE(double_sinh_j_table,@object) + data8 0xB504F333F9DE6484, 0x00003FFE, 0x1EB2FB13, 0x00000000 + data8 0xB6FD91E328D17791, 0x00003FFE, 0x1CE2CBE2, 0x00000000 + data8 0xB8FBAF4762FB9EE9, 0x00003FFE, 0x1DDC3CBC, 0x00000000 + data8 0xBAFF5AB2133E45FB, 0x00003FFE, 0x1EE9AA34, 0x00000000 + data8 0xBD08A39F580C36BF, 0x00003FFE, 0x9EAEFDC1, 0x00000000 + data8 0xBF1799B67A731083, 0x00003FFE, 0x9DBF517B, 0x00000000 + data8 0xC12C4CCA66709456, 0x00003FFE, 0x1EF88AFB, 0x00000000 + data8 0xC346CCDA24976407, 0x00003FFE, 0x1E03B216, 0x00000000 + data8 0xC5672A115506DADD, 0x00003FFE, 0x1E78AB43, 0x00000000 + data8 0xC78D74C8ABB9B15D, 0x00003FFE, 0x9E7B1747, 0x00000000 + data8 0xC9B9BD866E2F27A3, 0x00003FFE, 0x9EFE3C0E, 0x00000000 + data8 0xCBEC14FEF2727C5D, 0x00003FFE, 0x9D36F837, 0x00000000 + data8 0xCE248C151F8480E4, 0x00003FFE, 0x9DEE53E4, 0x00000000 + data8 0xD06333DAEF2B2595, 0x00003FFE, 0x9E24AE8E, 0x00000000 + data8 0xD2A81D91F12AE45A, 0x00003FFE, 0x1D912473, 0x00000000 + data8 0xD4F35AABCFEDFA1F, 0x00003FFE, 0x1EB243BE, 0x00000000 + data8 0xD744FCCAD69D6AF4, 0x00003FFE, 0x1E669A2F, 0x00000000 + data8 0xD99D15C278AFD7B6, 0x00003FFE, 0x9BBC610A, 0x00000000 + data8 0xDBFBB797DAF23755, 0x00003FFE, 0x1E761035, 0x00000000 + data8 0xDE60F4825E0E9124, 0x00003FFE, 0x9E0BE175, 0x00000000 + data8 0xE0CCDEEC2A94E111, 0x00003FFE, 0x1CCB12A1, 0x00000000 + data8 0xE33F8972BE8A5A51, 0x00003FFE, 0x1D1BFE90, 0x00000000 + data8 0xE5B906E77C8348A8, 0x00003FFE, 0x1DF2F47A, 0x00000000 + data8 0xE8396A503C4BDC68, 0x00003FFE, 0x1EF22F22, 0x00000000 + data8 0xEAC0C6E7DD24392F, 0x00003FFE, 0x9E3F4A29, 0x00000000 + data8 0xED4F301ED9942B84, 0x00003FFE, 0x1EC01A5B, 0x00000000 + data8 0xEFE4B99BDCDAF5CB, 0x00003FFE, 0x1E8CAC3A, 0x00000000 + data8 0xF281773C59FFB13A, 0x00003FFE, 0x9DBB3FAB, 0x00000000 + data8 0xF5257D152486CC2C, 0x00003FFE, 0x1EF73A19, 0x00000000 + data8 0xF7D0DF730AD13BB9, 0x00003FFE, 0x9BB795B5, 0x00000000 + data8 0xFA83B2DB722A033A, 0x00003FFE, 0x1EF84B76, 0x00000000 + data8 0xFD3E0C0CF486C175, 0x00003FFE, 0x9EF5818B, 0x00000000 + data8 0x8000000000000000, 0x00003FFF, 0x00000000, 0x00000000 + data8 0x8164D1F3BC030773, 0x00003FFF, 0x1F77CACA, 0x00000000 + data8 0x82CD8698AC2BA1D7, 0x00003FFF, 0x1EF8A91D, 0x00000000 + data8 0x843A28C3ACDE4046, 0x00003FFF, 0x1E57C976, 0x00000000 + data8 0x85AAC367CC487B15, 0x00003FFF, 0x9EE8DA92, 0x00000000 + data8 0x871F61969E8D1010, 0x00003FFF, 0x1EE85C9F, 0x00000000 + data8 0x88980E8092DA8527, 0x00003FFF, 0x1F3BF1AF, 0x00000000 + data8 0x8A14D575496EFD9A, 0x00003FFF, 0x1D80CA1E, 0x00000000 + data8 0x8B95C1E3EA8BD6E7, 0x00003FFF, 0x9D0373AF, 0x00000000 + data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF, 0x9F167097, 0x00000000 + data8 0x8EA4398B45CD53C0, 0x00003FFF, 0x1EB70051, 0x00000000 + data8 0x9031DC431466B1DC, 0x00003FFF, 0x1F6EB029, 0x00000000 + data8 0x91C3D373AB11C336, 0x00003FFF, 0x1DFD6D8E, 0x00000000 + data8 0x935A2B2F13E6E92C, 0x00003FFF, 0x9EB319B0, 0x00000000 + data8 0x94F4EFA8FEF70961, 0x00003FFF, 0x1EBA2BEB, 0x00000000 + data8 0x96942D3720185A00, 0x00003FFF, 0x1F11D537, 0x00000000 + data8 0x9837F0518DB8A96F, 0x00003FFF, 0x1F0D5A46, 0x00000000 + data8 0x99E0459320B7FA65, 0x00003FFF, 0x9E5E7BCA, 0x00000000 + data8 0x9B8D39B9D54E5539, 0x00003FFF, 0x9F3AAFD1, 0x00000000 + data8 0x9D3ED9A72CFFB751, 0x00003FFF, 0x9E86DACC, 0x00000000 + data8 0x9EF5326091A111AE, 0x00003FFF, 0x9F3EDDC2, 0x00000000 + data8 0xA0B0510FB9714FC2, 0x00003FFF, 0x1E496E3D, 0x00000000 + data8 0xA27043030C496819, 0x00003FFF, 0x9F490BF6, 0x00000000 + data8 0xA43515AE09E6809E, 0x00003FFF, 0x1DD1DB48, 0x00000000 + data8 0xA5FED6A9B15138EA, 0x00003FFF, 0x1E65EBFB, 0x00000000 + data8 0xA7CD93B4E965356A, 0x00003FFF, 0x9F427496, 0x00000000 + data8 0xA9A15AB4EA7C0EF8, 0x00003FFF, 0x1F283C4A, 0x00000000 + data8 0xAB7A39B5A93ED337, 0x00003FFF, 0x1F4B0047, 0x00000000 + data8 0xAD583EEA42A14AC6, 0x00003FFF, 0x1F130152, 0x00000000 + data8 0xAF3B78AD690A4375, 0x00003FFF, 0x9E8367C0, 0x00000000 + data8 0xB123F581D2AC2590, 0x00003FFF, 0x9F705F90, 0x00000000 + data8 0xB311C412A9112489, 0x00003FFF, 0x1EFB3C53, 0x00000000 + data8 0xB504F333F9DE6484, 0x00003FFF, 0x1F32FB13, 0x00000000 +ASM_SIZE_DIRECTIVE(double_sinh_j_table) + +.align 32 +.global sinh# + +.section .text +.proc sinh# +.align 32 + +sinh: +#ifdef _LIBC +.global __ieee754_sinh +.type __ieee754_sinh,@function +__ieee754_sinh: +#endif + +// X infinity or NAN? +// Take invalid fault if enabled + + +{ .mfi + alloc r32 = ar.pfs,0,12,4,0 +(p0) fclass.m.unc p6,p0 = f8, 0xe3 //@qnan | @snan | @inf + mov sinh_GR_all_ones = -1 +} +;; + + +{ .mfb + nop.m 999 +(p6) fma.d.s0 f8 = f8,f1,f8 +(p6) br.ret.spnt b0 ;; +} + +// Put 0.25 in f9; p6 true if x < 0.25 +// Make constant that will generate inexact when squared +{ .mlx + setf.sig sinh_FR_all_ones = sinh_GR_all_ones +(p0) movl r32 = 0x000000000000fffd ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 +(p0) fclass.m.unc p7,p0 = f8, 0x07 //@zero + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s sinh_FR_X = f0,f8 +(p7) br.ret.spnt b0 ;; +} + +// Identify denormal operands. +{ .mfi + nop.m 999 + fclass.m.unc p10,p0 = f8, 0x09 // + denorm + nop.i 999 +};; +{ .mfi + nop.m 999 + fclass.m.unc p11,p0 = f8, 0x0a // - denorm + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.s sinh_FR_SGNX = f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p0,p7 = sinh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.sptk L(SINH_BY_TBL) ;; +} + + +L(SINH_BY_POLY): + +// POLY cannot overflow so there is no need to call __libm_error_support +// Set tiny_SAFE (p7) to 1(0) if answer is not tiny +// Currently we do not use tiny_SAFE. So the setting of tiny_SAFE is +// commented out. +//(p0) movl r32 = 0x000000000000fc01 +//(p0) setf.exp f10 = r32 +//(p0) fcmp.lt.unc.s1 p6,p7 = f8,f10 +// Here is essentially the algorithm for SINH_BY_POLY. Care is take for the order +// of multiplication; and P_1 is not exactly 1/3!, P_2 is not exactly 1/5!, etc. +// Note that ax = |x| +// sinh(x) = sign * (series(e^x) - series(e^-x))/2 +// = sign * (ax + ax^3/3! + ax^5/5! + ax^7/7! + ax^9/9! + ax^11/11! + ax^13/13!) +// = sign * (ax + ax * ( ax^2 * (1/3! + ax^4 * (1/7! + ax^4*1/11!)) ) +// + ax * ( ax^4 * (1/5! + ax^4 * (1/9! + ax^4*1/13!)) ) ) +// = sign * (ax + ax*p_odd + (ax*p_even)) +// = sign * (ax + Y_lo) +// sinh(x) = sign * (Y_hi + Y_lo) +// Get the values of P_x from the table +{ .mfb +(p0) addl r34 = @ltoff(double_sinh_p_table), gp +(p10) fma.d.s0 f8 = f8,f8,f8 +(p10) br.ret.spnt b0 +} +;; + +{ .mfb + ld8 r34 = [r34] +(p11) fnma.d.s0 f8 = f8,f8,f8 +(p11) br.ret.spnt b0 +} +;; + +// Calculate sinh_FR_X2 = ax*ax and sinh_FR_X4 = ax*ax*ax*ax +{ .mmf + nop.m 999 +(p0) ldfe sinh_FR_P1 = [r34],16 +(p0) fma.s1 sinh_FR_X2 = sinh_FR_X, sinh_FR_X, f0 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_P2 = [r34],16 ;; +(p0) ldfe sinh_FR_P3 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_P4 = [r34],16 ;; +(p0) ldfe sinh_FR_P5 = [r34],16 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe sinh_FR_P6 = [r34],16 +(p0) fma.s1 sinh_FR_X4 = sinh_FR_X2, sinh_FR_X2, f0 + nop.i 999 ;; +} + +// Calculate sinh_FR_podd = p_odd and sinh_FR_peven = p_even +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_podd_temp1 = sinh_FR_X4, sinh_FR_P5, sinh_FR_P3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_podd_temp2 = sinh_FR_X4, sinh_FR_poly_podd_temp1, sinh_FR_P1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_peven_temp1 = sinh_FR_X4, sinh_FR_P6, sinh_FR_P4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd = sinh_FR_X2, sinh_FR_poly_podd_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_peven_temp2 = sinh_FR_X4, sinh_FR_poly_peven_temp1, sinh_FR_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven = sinh_FR_X4, sinh_FR_poly_peven_temp2, f0 + nop.i 999 ;; +} + +// Calculate sinh_FR_Y_lo = ax*p_odd + (ax*p_even) +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_X, sinh_FR_peven, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_X, sinh_FR_podd, sinh_FR_Y_lo_temp + nop.i 999 ;; +} + +// Calculate sinh_FR_SINH = Y_hi + Y_lo. Note that ax = Y_hi +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH = sinh_FR_X, f1, sinh_FR_Y_lo + nop.i 999 ;; +} +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 +} + +// Calculate f8 = sign * (Y_hi + Y_lo) +// Go to return +{ .mfb + nop.m 999 +(p0) fma.d.s0 f8 = sinh_FR_SGNX,sinh_FR_SINH,f0 +(p0) br.ret.sptk b0 ;; +} + + +L(SINH_BY_TBL): + +// Now that we are at TBL; so far all we know is that |x| >= 0.25. +// The first two steps are the same for TBL and EXP, but if we are HUGE +// we want to leave now. +// Double-extended: +// Go to HUGE if |x| >= 2^14, 1000d (register-biased) is e = 14 (true) +// Double +// Go to HUGE if |x| >= 2^10, 10009 (register-biased) is e = 10 (true) +// Single +// Go to HUGE if |x| >= 2^7, 10006 (register-biased) is e = 7 (true) + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010009 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p6,p7 = sinh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(SINH_HUGE) ;; +} + +// r32 = 1 +// r34 = N-1 +// r35 = N +// r36 = j +// r37 = N+1 + +// TBL can never overflow +// sinh(x) = sinh(B+R) +// = sinh(B)cosh(R) + cosh(B)sinh(R) +// +// ax = |x| = M*log2/64 + R +// B = M*log2/64 +// M = 64*N + j +// We will calcualte M and get N as (M-j)/64 +// The division is a shift. +// exp(B) = exp(N*log2 + j*log2/64) +// = 2^N * 2^(j*log2/64) +// sinh(B) = 1/2(e^B -e^-B) +// = 1/2(2^N * 2^(j*log2/64) - 2^-N * 2^(-j*log2/64)) +// sinh(B) = (2^(N-1) * 2^(j*log2/64) - 2^(-N-1) * 2^(-j*log2/64)) +// cosh(B) = (2^(N-1) * 2^(j*log2/64) + 2^(-N-1) * 2^(-j*log2/64)) +// 2^(j*log2/64) is stored as Tjhi + Tjlo , j= -32,....,32 +// Tjhi is double-extended (80-bit) and Tjlo is single(32-bit) +// R = ax - M*log2/64 +// R = ax - M*log2_by_64_hi - M*log2_by_64_lo +// exp(R) = 1 + R +R^2(1/2! + R(1/3! + R(1/4! + ... + R(1/n!)...) +// = 1 + p_odd + p_even +// where the p_even uses the A coefficients and the p_even uses the B coefficients +// So sinh(R) = 1 + p_odd + p_even -(1 -p_odd -p_even)/2 = p_odd +// cosh(R) = 1 + p_even +// sinh(B) = S_hi + S_lo +// cosh(B) = C_hi +// sinh(x) = sinh(B)cosh(R) + cosh(B)sinh(R) +// ****************************************************** +// STEP 1 (TBL and EXP) +// ****************************************************** +// Get the following constants. +// f9 = Inv_log2by64 +// f10 = log2by64_hi +// f11 = log2by64_lo + +{ .mmi +(p0) adds r32 = 0x1,r0 +(p0) addl r34 = @ltoff(double_sinh_arg_reduction), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and +// put them in an exponent. +// sinh_FR_spos = 2^(N-1) and sinh_FR_sneg = 2^(-N-1) +// r39 = 0xffff + (N-1) = 0xffff +N -1 +// r40 = 0xffff - (N +1) = 0xffff -N -1 + +{ .mlx + nop.m 999 +(p0) movl r38 = 0x000000000000fffe ;; +} + +{ .mmi +(p0) ldfe sinh_FR_Inv_log2by64 = [r34],16 ;; +(p0) ldfe sinh_FR_log2by64_hi = [r34],16 + nop.i 999 ;; +} + +{ .mbb +(p0) ldfe sinh_FR_log2by64_lo = [r34],16 + nop.b 999 + nop.b 999 ;; +} + +// Get the A coefficients +// f9 = A_1 +// f10 = A_2 +// f11 = A_3 + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_sinh_ab_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate M and keep it as integer and floating point. +// f38 = M = round-to-integer(x*Inv_log2by64) +// sinh_FR_M = M = truncate(ax/(log2/64)) +// Put the significand of M in r35 +// and the floating point representation of M in sinh_FR_M + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_M = sinh_FR_X, sinh_FR_Inv_log2by64, f0 + nop.i 999 +} + +{ .mfi +(p0) ldfe sinh_FR_A1 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.fx.s1 sinh_FR_M_temp = sinh_FR_M + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnorm.s1 sinh_FR_M = sinh_FR_M_temp + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r35 = sinh_FR_M_temp + nop.f 999 + nop.i 999 ;; +} + +// M is still in r35. Calculate j. j is the signed extension of the six lsb of M. It +// has a range of -32 thru 31. +// r35 = M +// r36 = j + +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) and r36 = 0x3f, r35 ;; +} + +// Calculate R +// f13 = f44 - f12*f10 = ax - M*log2by64_hi +// f14 = f13 - f8*f11 = R = (ax - M*log2by64_hi) - M*log2by64_lo + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_R_temp = sinh_FR_M, sinh_FR_log2by64_hi, sinh_FR_X + nop.i 999 +} + +{ .mfi +(p0) ldfe sinh_FR_A2 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_R = sinh_FR_M, sinh_FR_log2by64_lo, sinh_FR_R_temp + nop.i 999 +} + +// Get the B coefficients +// f15 = B_1 +// f32 = B_2 +// f33 = B_3 + +{ .mmi +(p0) ldfe sinh_FR_A3 = [r34],16 ;; +(p0) ldfe sinh_FR_B1 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_B2 = [r34],16 ;; +(p0) ldfe sinh_FR_B3 = [r34],16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) shl r34 = r36, 0x2 ;; +(p0) sxt1 r37 = r34 ;; +} + +// ****************************************************** +// STEP 2 (TBL and EXP) +// ****************************************************** +// Calculate Rsquared and Rcubed in preparation for p_even and p_odd +// f12 = R*R*R +// f13 = R*R +// f14 = R <== from above + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Rsq = sinh_FR_R, sinh_FR_R, f0 +(p0) shr r36 = r37, 0x2 ;; +} + +// r34 = M-j = r35 - r36 +// r35 = N = (M-j)/64 + +{ .mii +(p0) sub r34 = r35, r36 + nop.i 999 ;; +(p0) shr r35 = r34, 0x6 ;; +} + +{ .mii +(p0) sub r40 = r38, r35 +(p0) adds r37 = 0x1, r35 +(p0) add r39 = r38, r35 ;; +} + +// Get the address of the J table, add the offset, +// addresses are sinh_AD_mJ and sinh_AD_J, get the T value +// f32 = T(j)_hi +// f33 = T(j)_lo +// f34 = T(-j)_hi +// f35 = T(-j)_lo + +{ .mmi +(p0) sub r34 = r35, r32 +(p0) addl r37 = @ltoff(double_sinh_j_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r37 = [r37] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Rcub = sinh_FR_Rsq, sinh_FR_R, f0 + nop.i 999 +} + +// ****************************************************** +// STEP 3 Now decide if we need to branch to EXP +// ****************************************************** +// Put 32 in f9; p6 true if x < 32 +// Go to EXP if |x| >= 32 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010004 ;; +} + +// Calculate p_even +// f34 = B_2 + Rsq *B_3 +// f35 = B_1 + Rsq*f34 = B_1 + Rsq * (B_2 + Rsq *B_3) +// f36 = p_even = Rsq * f35 = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven_temp1 = sinh_FR_Rsq, sinh_FR_B3, sinh_FR_B2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven_temp2 = sinh_FR_Rsq, sinh_FR_peven_temp1, sinh_FR_B1 + nop.i 999 +} + +// Calculate p_odd +// f34 = A_2 + Rsq *A_3 +// f35 = A_1 + Rsq * (A_2 + Rsq *A_3) +// f37 = podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd_temp1 = sinh_FR_Rsq, sinh_FR_A3, sinh_FR_A2 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp sinh_FR_N_temp1 = r39 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven = sinh_FR_Rsq, sinh_FR_peven_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd_temp2 = sinh_FR_Rsq, sinh_FR_podd_temp1, sinh_FR_A1 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd = sinh_FR_podd_temp2, sinh_FR_Rcub, sinh_FR_R + nop.i 999 +} + +// sinh_GR_mj contains the table offset for -j +// sinh_GR_j contains the table offset for +j +// p6 is true when j <= 0 + +{ .mlx +(p0) setf.exp sinh_FR_N_temp2 = r40 +(p0) movl r40 = 0x0000000000000020 ;; +} + +{ .mfi +(p0) sub sinh_GR_mJ = r40, r36 +(p0) fmerge.se sinh_FR_spos = sinh_FR_N_temp1, f1 +(p0) adds sinh_GR_J = 0x20, r36 ;; +} + +{ .mii + nop.m 999 +(p0) shl sinh_GR_mJ = sinh_GR_mJ, 5 ;; +(p0) add sinh_AD_mJ = r37, sinh_GR_mJ ;; +} + +{ .mmi + nop.m 999 +(p0) ldfe sinh_FR_Tmjhi = [sinh_AD_mJ],16 +(p0) shl sinh_GR_J = sinh_GR_J, 5 ;; +} + +{ .mfi +(p0) ldfs sinh_FR_Tmjlo = [sinh_AD_mJ],16 +(p0) fcmp.lt.unc.s1 p0,p7 = sinh_FR_X,f9 +(p0) add sinh_AD_J = r37, sinh_GR_J ;; +} + +{ .mmi +(p0) ldfe sinh_FR_Tjhi = [sinh_AD_J],16 ;; +(p0) ldfs sinh_FR_Tjlo = [sinh_AD_J],16 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.se sinh_FR_sneg = sinh_FR_N_temp2, f1 +(p7) br.cond.spnt L(SINH_BY_EXP) ;; +} + +{ .mfi + nop.m 999 + nop.f 999 + nop.i 999 ;; +} + +// ****************************************************** +// If NOT branch to EXP +// ****************************************************** +// Calculate S_hi and S_lo +// sinh_FR_S_hi_temp = sinh_FR_sneg * sinh_FR_Tmjhi +// sinh_FR_S_hi = sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi_temp +// sinh_FR_S_hi = sinh_FR_spos * sinh_FR_Tjhi - (sinh_FR_sneg * sinh_FR_Tmjlo) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_hi_temp = sinh_FR_sneg, sinh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_hi = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_S_hi_temp + nop.i 999 +} + +// Calculate C_hi +// sinh_FR_C_hi_temp1 = sinh_FR_sneg * sinh_FR_Tmjhi +// sinh_FR_C_hi = sinh_FR_spos * sinh_FR_Tjhi + sinh_FR_C_hi_temp1 + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_C_hi_temp1 = sinh_FR_sneg, sinh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +// sinh_FR_S_lo_temp1 = sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi +// sinh_FR_S_lo_temp2 = -sinh_FR_sneg * sinh_FR_Tmjlo + (sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi) +// sinh_FR_S_lo_temp2 = -sinh_FR_sneg * sinh_FR_Tmjlo + (sinh_FR_S_lo_temp1 ) + +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_lo_temp1 = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_C_hi = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_C_hi_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_S_lo_temp2 = sinh_FR_sneg, sinh_FR_Tmjhi, sinh_FR_S_lo_temp1 + nop.i 999 +} + +// sinh_FR_S_lo_temp1 = sinh_FR_sneg * sinh_FR_Tmjlo +// sinh_FR_S_lo_temp3 = sinh_FR_spos * sinh_FR_Tjlo - sinh_FR_S_lo_temp1 +// sinh_FR_S_lo_temp3 = sinh_FR_spos * sinh_FR_Tjlo -(sinh_FR_sneg * sinh_FR_Tmjlo) +// sinh_FR_S_lo = sinh_FR_S_lo_temp3 + sinh_FR_S_lo_temp2 + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_lo_temp1 = sinh_FR_sneg, sinh_FR_Tmjlo, f0 + nop.i 999 ;; +} + +/////////// BUG FIX fma to fms -TK +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_lo_temp3 = sinh_FR_spos, sinh_FR_Tjlo, sinh_FR_S_lo_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_lo = sinh_FR_S_lo_temp3, f1, sinh_FR_S_lo_temp2 + nop.i 999 ;; +} + +// Y_hi = S_hi +// Y_lo = C_hi*p_odd + (S_hi*p_even + S_lo) +// sinh_FR_Y_lo_temp = sinh_FR_S_hi * sinh_FR_peven + sinh_FR_S_lo +// sinh_FR_Y_lo = sinh_FR_C_hi * sinh_FR_podd + sinh_FR_Y_lo_temp + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_S_hi, sinh_FR_peven, sinh_FR_S_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_C_hi, sinh_FR_podd, sinh_FR_Y_lo_temp + nop.i 999 ;; +} + +// sinh_FR_SINH = Y_hi + Y_lo +// f8 = answer = sinh_FR_SGNX * sinh_FR_SINH + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH = sinh_FR_S_hi, f1, sinh_FR_Y_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.d.s0 f8 = sinh_FR_SGNX, sinh_FR_SINH,f0 +(p0) br.ret.sptk b0 ;; +} + + +L(SINH_BY_EXP): + +// When p7 is true, we know that an overflow is not going to happen +// When p7 is false, we must check for possible overflow +// p7 is the over_SAFE flag +// Y_hi = Tjhi +// Y_lo = Tjhi * (p_odd + p_even) +Tjlo +// Scale = sign * 2^(N-1) +// sinh_FR_Y_lo = sinh_FR_Tjhi * (sinh_FR_peven + sinh_FR_podd) +// sinh_FR_Y_lo = sinh_FR_Tjhi * (sinh_FR_Y_lo_temp ) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_peven, f1, sinh_FR_podd + nop.i 999 +} + +// Now we are in EXP. This is the only path where an overflow is possible +// but not for certain. So this is the only path where over_SAFE has any use. +// r34 still has N-1 +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// There is a danger of double overflow if N-1 > 0x3fe = 1022 +{ .mlx + nop.m 999 +(p0) movl r32 = 0x00000000000003fe ;; +} + +{ .mfi +(p0) cmp.gt.unc p0,p7 = r34, r32 +(p0) fmerge.s sinh_FR_SCALE = sinh_FR_SGNX, sinh_FR_spos + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_Tjhi, sinh_FR_Y_lo_temp, sinh_FR_Tjlo + nop.i 999 ;; +} + +// f8 = answer = scale * (Y_hi + Y_lo) +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH_temp = sinh_FR_Y_lo, f1, sinh_FR_Tjhi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s0 f44 = sinh_FR_SCALE, sinh_FR_SINH_temp, f0 + nop.i 999 ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p7) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 ;; +} + +// If over_SAFE is set, return +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = f44,f44 +(p7) br.ret.sptk b0 ;; +} + +// Else see if we overflowed +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// If WRE is set then an overflow will not occur in EXP. +// The input value that would cause a register (WRE) value to overflow is about 2^15 +// and this input would go into the HUGE path. +// Answer with WRE is in f43. + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s2 f43 = sinh_FR_SCALE, sinh_FR_SINH_temp, f0 + nop.i 999 ;; +} + +// 103FF => 103FF -FFFF = 400(true) +// 400 + 3FF = 7FF, which is 1 more that the exponent of the largest +// double (7FE). So 0 103FF 8000000000000000 is one ulp more than +// largest double in register bias +// Now set p8 if the answer with WRE is greater than or equal this value +// Also set p9 if the answer with WRE is less than or equal to negative this value + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000103FF ;; +} + +{ .mmf + nop.m 999 +(p0) setf.exp f41 = r32 +(p0) fsetc.s2 0x7F,0x40 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p8, p0 = f43, f41 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f42 = f41, f41 + nop.i 999 ;; +} + +// The error tag for overflow is 127 +{ .mii + nop.m 999 + nop.i 999 ;; +(p8) mov r47 = 127 ;; +} + +{ .mfb + nop.m 999 +(p0) fcmp.le.unc.s1 p9, p0 = f43, f42 +(p8) br.cond.spnt L(SINH_ERROR_SUPPORT) ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov r47 = 127 +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt L(SINH_ERROR_SUPPORT) ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f44,f44 +(p0) br.ret.sptk b0 ;; +} + +L(SINH_HUGE): + +// for SINH_HUGE, put 24000 in exponent; take sign from input; add 1 +// SAFE: SAFE is always 0 for HUGE + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000015dbf ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_signed_hi_lo = sinh_FR_SGNX, f9, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s0 f44 = sinh_FR_signed_hi_lo, f9, f0 +(p0) mov r47 = 127 +} +.endp sinh +ASM_SIZE_DIRECTIVE(sinh) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__ieee754_sinh) +#endif + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + +.proc __libm_error_region +__libm_error_region: +L(SINH_ERROR_SUPPORT): +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = f8 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f44 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_sinhf.S glibc-2.2.3/sysdeps/ia64/fpu/e_sinhf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_sinhf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_sinhf.S Mon Feb 19 00:47:36 2001 @@ -0,0 +1,1311 @@ +.file "sinhf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 10/12/00 Update to set denormal operand and underflow flags +// 1/22/01 Fixed to set inexact flag for small args. +// +// API +//============================================================== +// float = sinhf(float) +// input floating point f8 +// output floating point f8 +// +// Registers used +//============================================================== +// general registers: +// r32 -> r47 +// predicate registers used: +// p6 p7 p8 p9 +// floating-point registers used: +// f9 -> f15; f32 -> f45; +// f8 has input, then output +// +// Overview of operation +//============================================================== +// There are four paths +// 1. |x| < 0.25 SINH_BY_POLY +// 2. |x| < 32 SINH_BY_TBL +// 3. |x| < 2^14 SINH_BY_EXP +// 4. |x_ >= 2^14 SINH_HUGE +// +// For double extended we get infinity for x >= 400c b174 ddc0 31ae c0ea +// >= 1.0110001.... x 2^13 +// >= 11357.2166 +// +// But for double we get infinity for x >= 408633ce8fb9f87e +// >= 1.0110...x 2^9 +// >= +7.10476e+002 +// +// And for single we get infinity for x >= 42b3a496 +// >= 1.0110... 2^6 +// >= 89.8215 +// +// SAFE: If there is danger of overflow set SAFE to 0 +// NOT implemented: if there is danger of underflow, set SAFE to 0 +// SAFE for all paths listed below +// +// 1. SINH_BY_POLY +// =============== +// If |x| is less than the tiny threshold, then clear SAFE +// For double, the tiny threshold is -1022 = -0x3fe => -3fe + ffff = fc01 +// register-biased, this is fc01 +// For single, the tiny threshold is -126 = -7e => -7e + ffff = ff81 +// If |x| < tiny threshold, set SAFE = 0 +// +// 2. SINH_BY_TBL +// ============= +// SAFE: SAFE is always 1 for TBL; +// +// 3. SINH_BY_EXP +// ============== +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// r34 has N-1; 16382 is in register biased form, 0x13ffd +// There is danger of double overflow if N-1 > 0x3fe +// in register biased form, 0x103fd +// Analagously, there is danger of single overflow if N-1 > 0x7e +// in register biased form, 0x1007d +// SAFE: If there is danger of overflow set SAFE to 0 +// +// 4. SINH_HUGE +// ============ +// SAFE: SAFE is always 0 for HUGE +// + +#include "libm_support.h" + +// Assembly macros +//============================================================== +sinh_FR_X = f44 +sinh_FR_X2 = f9 +sinh_FR_X4 = f10 +sinh_FR_SGNX = f40 +sinh_FR_all_ones = f45 +sinh_FR_tmp = f42 + +sinh_FR_Inv_log2by64 = f9 +sinh_FR_log2by64_lo = f11 +sinh_FR_log2by64_hi = f10 + +sinh_FR_A1 = f9 +sinh_FR_A2 = f10 +sinh_FR_A3 = f11 + +sinh_FR_Rcub = f12 +sinh_FR_M_temp = f13 +sinh_FR_R_temp = f13 +sinh_FR_Rsq = f13 +sinh_FR_R = f14 + +sinh_FR_M = f38 + +sinh_FR_B1 = f15 +sinh_FR_B2 = f32 +sinh_FR_B3 = f33 + +sinh_FR_peven_temp1 = f34 +sinh_FR_peven_temp2 = f35 +sinh_FR_peven = f36 + +sinh_FR_podd_temp1 = f34 +sinh_FR_podd_temp2 = f35 +sinh_FR_podd = f37 + +sinh_FR_poly_podd_temp1 = f11 +sinh_FR_poly_podd_temp2 = f13 +sinh_FR_poly_peven_temp1 = f11 +sinh_FR_poly_peven_temp2 = f13 + +sinh_FR_J_temp = f9 +sinh_FR_J = f10 + +sinh_FR_Mmj = f39 + +sinh_FR_N_temp1 = f11 +sinh_FR_N_temp2 = f12 +sinh_FR_N = f13 + +sinh_FR_spos = f14 +sinh_FR_sneg = f15 + +sinh_FR_Tjhi = f32 +sinh_FR_Tjlo = f33 +sinh_FR_Tmjhi = f34 +sinh_FR_Tmjlo = f35 + +sinh_GR_mJ = r35 +sinh_GR_J = r36 + +sinh_AD_mJ = r38 +sinh_AD_J = r39 +sinh_GR_all_ones = r40 + +sinh_FR_S_hi = f9 +sinh_FR_S_hi_temp = f10 +sinh_FR_S_lo_temp1 = f11 +sinh_FR_S_lo_temp2 = f12 +sinh_FR_S_lo_temp3 = f13 + +sinh_FR_S_lo = f38 +sinh_FR_C_hi = f39 + +sinh_FR_C_hi_temp1 = f10 +sinh_FR_Y_hi = f11 +sinh_FR_Y_lo_temp = f12 +sinh_FR_Y_lo = f13 +sinh_FR_SINH = f9 + +sinh_FR_P1 = f14 +sinh_FR_P2 = f15 +sinh_FR_P3 = f32 +sinh_FR_P4 = f33 +sinh_FR_P5 = f34 +sinh_FR_P6 = f35 + +sinh_FR_TINY_THRESH = f9 + +sinh_FR_SINH_temp = f10 +sinh_FR_SCALE = f11 + +sinh_FR_signed_hi_lo = f10 + + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +double_sinh_arg_reduction: +ASM_TYPE_DIRECTIVE(double_sinh_arg_reduction,@object) + data8 0xB8AA3B295C17F0BC, 0x00004005 + data8 0xB17217F7D1000000, 0x00003FF8 + data8 0xCF79ABC9E3B39804, 0x00003FD0 +ASM_SIZE_DIRECTIVE(double_sinh_arg_reduction) + +double_sinh_p_table: +ASM_TYPE_DIRECTIVE(double_sinh_p_table,@object) + data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC + data8 0x8888888888888412, 0x00003FF8 + data8 0xD00D00D00D4D39F2, 0x00003FF2 + data8 0xB8EF1D28926D8891, 0x00003FEC + data8 0xD732377688025BE9, 0x00003FE5 + data8 0xB08AF9AE78C1239F, 0x00003FDE +ASM_SIZE_DIRECTIVE(double_sinh_p_table) + +double_sinh_ab_table: +ASM_TYPE_DIRECTIVE(double_sinh_ab_table,@object) + data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC + data8 0x88888888884ECDD5, 0x00003FF8 + data8 0xD00D0C6DCC26A86B, 0x00003FF2 + data8 0x8000000000000002, 0x00003FFE + data8 0xAAAAAAAAAA402C77, 0x00003FFA + data8 0xB60B6CC96BDB144D, 0x00003FF5 +ASM_SIZE_DIRECTIVE(double_sinh_ab_table) + +double_sinh_j_table: +ASM_TYPE_DIRECTIVE(double_sinh_j_table,@object) + data8 0xB504F333F9DE6484, 0x00003FFE, 0x1EB2FB13, 0x00000000 + data8 0xB6FD91E328D17791, 0x00003FFE, 0x1CE2CBE2, 0x00000000 + data8 0xB8FBAF4762FB9EE9, 0x00003FFE, 0x1DDC3CBC, 0x00000000 + data8 0xBAFF5AB2133E45FB, 0x00003FFE, 0x1EE9AA34, 0x00000000 + data8 0xBD08A39F580C36BF, 0x00003FFE, 0x9EAEFDC1, 0x00000000 + data8 0xBF1799B67A731083, 0x00003FFE, 0x9DBF517B, 0x00000000 + data8 0xC12C4CCA66709456, 0x00003FFE, 0x1EF88AFB, 0x00000000 + data8 0xC346CCDA24976407, 0x00003FFE, 0x1E03B216, 0x00000000 + data8 0xC5672A115506DADD, 0x00003FFE, 0x1E78AB43, 0x00000000 + data8 0xC78D74C8ABB9B15D, 0x00003FFE, 0x9E7B1747, 0x00000000 + data8 0xC9B9BD866E2F27A3, 0x00003FFE, 0x9EFE3C0E, 0x00000000 + data8 0xCBEC14FEF2727C5D, 0x00003FFE, 0x9D36F837, 0x00000000 + data8 0xCE248C151F8480E4, 0x00003FFE, 0x9DEE53E4, 0x00000000 + data8 0xD06333DAEF2B2595, 0x00003FFE, 0x9E24AE8E, 0x00000000 + data8 0xD2A81D91F12AE45A, 0x00003FFE, 0x1D912473, 0x00000000 + data8 0xD4F35AABCFEDFA1F, 0x00003FFE, 0x1EB243BE, 0x00000000 + data8 0xD744FCCAD69D6AF4, 0x00003FFE, 0x1E669A2F, 0x00000000 + data8 0xD99D15C278AFD7B6, 0x00003FFE, 0x9BBC610A, 0x00000000 + data8 0xDBFBB797DAF23755, 0x00003FFE, 0x1E761035, 0x00000000 + data8 0xDE60F4825E0E9124, 0x00003FFE, 0x9E0BE175, 0x00000000 + data8 0xE0CCDEEC2A94E111, 0x00003FFE, 0x1CCB12A1, 0x00000000 + data8 0xE33F8972BE8A5A51, 0x00003FFE, 0x1D1BFE90, 0x00000000 + data8 0xE5B906E77C8348A8, 0x00003FFE, 0x1DF2F47A, 0x00000000 + data8 0xE8396A503C4BDC68, 0x00003FFE, 0x1EF22F22, 0x00000000 + data8 0xEAC0C6E7DD24392F, 0x00003FFE, 0x9E3F4A29, 0x00000000 + data8 0xED4F301ED9942B84, 0x00003FFE, 0x1EC01A5B, 0x00000000 + data8 0xEFE4B99BDCDAF5CB, 0x00003FFE, 0x1E8CAC3A, 0x00000000 + data8 0xF281773C59FFB13A, 0x00003FFE, 0x9DBB3FAB, 0x00000000 + data8 0xF5257D152486CC2C, 0x00003FFE, 0x1EF73A19, 0x00000000 + data8 0xF7D0DF730AD13BB9, 0x00003FFE, 0x9BB795B5, 0x00000000 + data8 0xFA83B2DB722A033A, 0x00003FFE, 0x1EF84B76, 0x00000000 + data8 0xFD3E0C0CF486C175, 0x00003FFE, 0x9EF5818B, 0x00000000 + data8 0x8000000000000000, 0x00003FFF, 0x00000000, 0x00000000 + data8 0x8164D1F3BC030773, 0x00003FFF, 0x1F77CACA, 0x00000000 + data8 0x82CD8698AC2BA1D7, 0x00003FFF, 0x1EF8A91D, 0x00000000 + data8 0x843A28C3ACDE4046, 0x00003FFF, 0x1E57C976, 0x00000000 + data8 0x85AAC367CC487B15, 0x00003FFF, 0x9EE8DA92, 0x00000000 + data8 0x871F61969E8D1010, 0x00003FFF, 0x1EE85C9F, 0x00000000 + data8 0x88980E8092DA8527, 0x00003FFF, 0x1F3BF1AF, 0x00000000 + data8 0x8A14D575496EFD9A, 0x00003FFF, 0x1D80CA1E, 0x00000000 + data8 0x8B95C1E3EA8BD6E7, 0x00003FFF, 0x9D0373AF, 0x00000000 + data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF, 0x9F167097, 0x00000000 + data8 0x8EA4398B45CD53C0, 0x00003FFF, 0x1EB70051, 0x00000000 + data8 0x9031DC431466B1DC, 0x00003FFF, 0x1F6EB029, 0x00000000 + data8 0x91C3D373AB11C336, 0x00003FFF, 0x1DFD6D8E, 0x00000000 + data8 0x935A2B2F13E6E92C, 0x00003FFF, 0x9EB319B0, 0x00000000 + data8 0x94F4EFA8FEF70961, 0x00003FFF, 0x1EBA2BEB, 0x00000000 + data8 0x96942D3720185A00, 0x00003FFF, 0x1F11D537, 0x00000000 + data8 0x9837F0518DB8A96F, 0x00003FFF, 0x1F0D5A46, 0x00000000 + data8 0x99E0459320B7FA65, 0x00003FFF, 0x9E5E7BCA, 0x00000000 + data8 0x9B8D39B9D54E5539, 0x00003FFF, 0x9F3AAFD1, 0x00000000 + data8 0x9D3ED9A72CFFB751, 0x00003FFF, 0x9E86DACC, 0x00000000 + data8 0x9EF5326091A111AE, 0x00003FFF, 0x9F3EDDC2, 0x00000000 + data8 0xA0B0510FB9714FC2, 0x00003FFF, 0x1E496E3D, 0x00000000 + data8 0xA27043030C496819, 0x00003FFF, 0x9F490BF6, 0x00000000 + data8 0xA43515AE09E6809E, 0x00003FFF, 0x1DD1DB48, 0x00000000 + data8 0xA5FED6A9B15138EA, 0x00003FFF, 0x1E65EBFB, 0x00000000 + data8 0xA7CD93B4E965356A, 0x00003FFF, 0x9F427496, 0x00000000 + data8 0xA9A15AB4EA7C0EF8, 0x00003FFF, 0x1F283C4A, 0x00000000 + data8 0xAB7A39B5A93ED337, 0x00003FFF, 0x1F4B0047, 0x00000000 + data8 0xAD583EEA42A14AC6, 0x00003FFF, 0x1F130152, 0x00000000 + data8 0xAF3B78AD690A4375, 0x00003FFF, 0x9E8367C0, 0x00000000 + data8 0xB123F581D2AC2590, 0x00003FFF, 0x9F705F90, 0x00000000 + data8 0xB311C412A9112489, 0x00003FFF, 0x1EFB3C53, 0x00000000 + data8 0xB504F333F9DE6484, 0x00003FFF, 0x1F32FB13, 0x00000000 +ASM_SIZE_DIRECTIVE(double_sinh_j_table) + +.align 32 +.global sinhf# + +.section .text +.proc sinhf# +.align 32 + +sinhf: +#ifdef _LIBC +.global __ieee754_sinhf +.type __ieee754_sinhf,@function +__ieee754_sinhf: +#endif + +// X infinity or NAN? +// Take invalid fault if enabled + + +{ .mfi + alloc r32 = ar.pfs,0,12,4,0 +(p0) fclass.m.unc p6,p0 = f8, 0xe3 //@qnan | @snan | @inf + mov sinh_GR_all_ones = -1 +} +;; + + +{ .mfb + nop.m 999 +(p6) fma.s.s0 f8 = f8,f1,f8 +(p6) br.ret.spnt b0 ;; +} + +// Put 0.25 in f9; p6 true if x < 0.25 +// Make constant that will generate inexact when squared +{ .mlx + setf.sig sinh_FR_all_ones = sinh_GR_all_ones +(p0) movl r32 = 0x000000000000fffd ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 +(p0) fclass.m.unc p7,p0 = f8, 0x07 //@zero + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s sinh_FR_X = f0,f8 +(p7) br.ret.spnt b0 ;; +} + +// Identify denormal operands. +{ .mfi + nop.m 999 + fclass.m.unc p10,p0 = f8, 0x09 // + denorm + nop.i 999 +};; +{ .mfi + nop.m 999 + fclass.m.unc p11,p0 = f8, 0x0a // - denorm + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.s sinh_FR_SGNX = f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p0,p7 = sinh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.sptk L(SINH_BY_TBL) ;; +} + + +L(SINH_BY_POLY): + +// POLY cannot overflow so there is no need to call __libm_error_support +// Set tiny_SAFE (p7) to 1(0) if answer is not tiny +// Currently we do not use tiny_SAFE. So the setting of tiny_SAFE is +// commented out. +//(p0) movl r32 = 0x000000000000fc01 +//(p0) setf.exp f10 = r32 +//(p0) fcmp.lt.unc.s1 p6,p7 = f8,f10 +// Here is essentially the algorithm for SINH_BY_POLY. Care is take for the order +// of multiplication; and P_1 is not exactly 1/3!, P_2 is not exactly 1/5!, etc. +// Note that ax = |x| +// sinh(x) = sign * (series(e^x) - series(e^-x))/2 +// = sign * (ax + ax^3/3! + ax^5/5! + ax^7/7! + ax^9/9! + ax^11/11! + ax^13/13!) +// = sign * (ax + ax * ( ax^2 * (1/3! + ax^4 * (1/7! + ax^4*1/11!)) ) +// + ax * ( ax^4 * (1/5! + ax^4 * (1/9! + ax^4*1/13!)) ) ) +// = sign * (ax + ax*p_odd + (ax*p_even)) +// = sign * (ax + Y_lo) +// sinh(x) = sign * (Y_hi + Y_lo) +// Get the values of P_x from the table +{ .mfb +(p0) addl r34 = @ltoff(double_sinh_p_table), gp +(p10) fma.s.s0 f8 = f8,f8,f8 +(p10) br.ret.spnt b0 +} +;; + +{ .mfb + ld8 r34 = [r34] +(p11) fnma.s.s0 f8 = f8,f8,f8 +(p11) br.ret.spnt b0 +} +;; + +// Calculate sinh_FR_X2 = ax*ax and sinh_FR_X4 = ax*ax*ax*ax +{ .mmf + nop.m 999 +(p0) ldfe sinh_FR_P1 = [r34],16 +(p0) fma.s1 sinh_FR_X2 = sinh_FR_X, sinh_FR_X, f0 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_P2 = [r34],16 ;; +(p0) ldfe sinh_FR_P3 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_P4 = [r34],16 ;; +(p0) ldfe sinh_FR_P5 = [r34],16 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe sinh_FR_P6 = [r34],16 +(p0) fma.s1 sinh_FR_X4 = sinh_FR_X2, sinh_FR_X2, f0 + nop.i 999 ;; +} + +// Calculate sinh_FR_podd = p_odd and sinh_FR_peven = p_even +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_podd_temp1 = sinh_FR_X4, sinh_FR_P5, sinh_FR_P3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_podd_temp2 = sinh_FR_X4, sinh_FR_poly_podd_temp1, sinh_FR_P1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_peven_temp1 = sinh_FR_X4, sinh_FR_P6, sinh_FR_P4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd = sinh_FR_X2, sinh_FR_poly_podd_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_peven_temp2 = sinh_FR_X4, sinh_FR_poly_peven_temp1, sinh_FR_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven = sinh_FR_X4, sinh_FR_poly_peven_temp2, f0 + nop.i 999 ;; +} + +// Calculate sinh_FR_Y_lo = ax*p_odd + (ax*p_even) +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_X, sinh_FR_peven, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_X, sinh_FR_podd, sinh_FR_Y_lo_temp + nop.i 999 ;; +} + +// Calculate sinh_FR_SINH = Y_hi + Y_lo. Note that ax = Y_hi +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH = sinh_FR_X, f1, sinh_FR_Y_lo + nop.i 999 ;; +} +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 +} + +// Calculate f8 = sign * (Y_hi + Y_lo) +// Go to return +{ .mfb + nop.m 999 +(p0) fma.s.s0 f8 = sinh_FR_SGNX,sinh_FR_SINH,f0 +(p0) br.ret.sptk b0 ;; +} + + +L(SINH_BY_TBL): + +// Now that we are at TBL; so far all we know is that |x| >= 0.25. +// The first two steps are the same for TBL and EXP, but if we are HUGE +// we want to leave now. +// Double-extended: +// Go to HUGE if |x| >= 2^14, 1000d (register-biased) is e = 14 (true) +// Double +// Go to HUGE if |x| >= 2^10, 10009 (register-biased) is e = 10 (true) +// Single +// Go to HUGE if |x| >= 2^7, 10006 (register-biased) is e = 7 (true) + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010006 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p6,p7 = sinh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(SINH_HUGE) ;; +} + +// r32 = 1 +// r34 = N-1 +// r35 = N +// r36 = j +// r37 = N+1 + +// TBL can never overflow +// sinh(x) = sinh(B+R) +// = sinh(B)cosh(R) + cosh(B)sinh(R) +// +// ax = |x| = M*log2/64 + R +// B = M*log2/64 +// M = 64*N + j +// We will calcualte M and get N as (M-j)/64 +// The division is a shift. +// exp(B) = exp(N*log2 + j*log2/64) +// = 2^N * 2^(j*log2/64) +// sinh(B) = 1/2(e^B -e^-B) +// = 1/2(2^N * 2^(j*log2/64) - 2^-N * 2^(-j*log2/64)) +// sinh(B) = (2^(N-1) * 2^(j*log2/64) - 2^(-N-1) * 2^(-j*log2/64)) +// cosh(B) = (2^(N-1) * 2^(j*log2/64) + 2^(-N-1) * 2^(-j*log2/64)) +// 2^(j*log2/64) is stored as Tjhi + Tjlo , j= -32,....,32 +// Tjhi is double-extended (80-bit) and Tjlo is single(32-bit) +// R = ax - M*log2/64 +// R = ax - M*log2_by_64_hi - M*log2_by_64_lo +// exp(R) = 1 + R +R^2(1/2! + R(1/3! + R(1/4! + ... + R(1/n!)...) +// = 1 + p_odd + p_even +// where the p_even uses the A coefficients and the p_even uses the B coefficients +// So sinh(R) = 1 + p_odd + p_even -(1 -p_odd -p_even)/2 = p_odd +// cosh(R) = 1 + p_even +// sinh(B) = S_hi + S_lo +// cosh(B) = C_hi +// sinh(x) = sinh(B)cosh(R) + cosh(B)sinh(R) +// ****************************************************** +// STEP 1 (TBL and EXP) +// ****************************************************** +// Get the following constants. +// f9 = Inv_log2by64 +// f10 = log2by64_hi +// f11 = log2by64_lo + +{ .mmi +(p0) adds r32 = 0x1,r0 +(p0) addl r34 = @ltoff(double_sinh_arg_reduction), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and +// put them in an exponent. +// sinh_FR_spos = 2^(N-1) and sinh_FR_sneg = 2^(-N-1) +// r39 = 0xffff + (N-1) = 0xffff +N -1 +// r40 = 0xffff - (N +1) = 0xffff -N -1 + +{ .mlx + nop.m 999 +(p0) movl r38 = 0x000000000000fffe ;; +} + +{ .mmi +(p0) ldfe sinh_FR_Inv_log2by64 = [r34],16 ;; +(p0) ldfe sinh_FR_log2by64_hi = [r34],16 + nop.i 999 ;; +} + +{ .mbb +(p0) ldfe sinh_FR_log2by64_lo = [r34],16 + nop.b 999 + nop.b 999 ;; +} + +// Get the A coefficients +// f9 = A_1 +// f10 = A_2 +// f11 = A_3 + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_sinh_ab_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate M and keep it as integer and floating point. +// f38 = M = round-to-integer(x*Inv_log2by64) +// sinh_FR_M = M = truncate(ax/(log2/64)) +// Put the significand of M in r35 +// and the floating point representation of M in sinh_FR_M + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_M = sinh_FR_X, sinh_FR_Inv_log2by64, f0 + nop.i 999 +} + +{ .mfi +(p0) ldfe sinh_FR_A1 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.fx.s1 sinh_FR_M_temp = sinh_FR_M + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnorm.s1 sinh_FR_M = sinh_FR_M_temp + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r35 = sinh_FR_M_temp + nop.f 999 + nop.i 999 ;; +} + +// M is still in r35. Calculate j. j is the signed extension of the six lsb of M. It +// has a range of -32 thru 31. +// r35 = M +// r36 = j + +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) and r36 = 0x3f, r35 ;; +} + +// Calculate R +// f13 = f44 - f12*f10 = ax - M*log2by64_hi +// f14 = f13 - f8*f11 = R = (ax - M*log2by64_hi) - M*log2by64_lo + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_R_temp = sinh_FR_M, sinh_FR_log2by64_hi, sinh_FR_X + nop.i 999 +} + +{ .mfi +(p0) ldfe sinh_FR_A2 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_R = sinh_FR_M, sinh_FR_log2by64_lo, sinh_FR_R_temp + nop.i 999 +} + +// Get the B coefficients +// f15 = B_1 +// f32 = B_2 +// f33 = B_3 + +{ .mmi +(p0) ldfe sinh_FR_A3 = [r34],16 ;; +(p0) ldfe sinh_FR_B1 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_B2 = [r34],16 ;; +(p0) ldfe sinh_FR_B3 = [r34],16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) shl r34 = r36, 0x2 ;; +(p0) sxt1 r37 = r34 ;; +} + +// ****************************************************** +// STEP 2 (TBL and EXP) +// ****************************************************** +// Calculate Rsquared and Rcubed in preparation for p_even and p_odd +// f12 = R*R*R +// f13 = R*R +// f14 = R <== from above + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Rsq = sinh_FR_R, sinh_FR_R, f0 +(p0) shr r36 = r37, 0x2 ;; +} + +// r34 = M-j = r35 - r36 +// r35 = N = (M-j)/64 + +{ .mii +(p0) sub r34 = r35, r36 + nop.i 999 ;; +(p0) shr r35 = r34, 0x6 ;; +} + +{ .mii +(p0) sub r40 = r38, r35 +(p0) adds r37 = 0x1, r35 +(p0) add r39 = r38, r35 ;; +} + +// Get the address of the J table, add the offset, +// addresses are sinh_AD_mJ and sinh_AD_J, get the T value +// f32 = T(j)_hi +// f33 = T(j)_lo +// f34 = T(-j)_hi +// f35 = T(-j)_lo + +{ .mmi +(p0) sub r34 = r35, r32 +(p0) addl r37 = @ltoff(double_sinh_j_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r37 = [r37] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Rcub = sinh_FR_Rsq, sinh_FR_R, f0 + nop.i 999 +} + +// ****************************************************** +// STEP 3 Now decide if we need to branch to EXP +// ****************************************************** +// Put 32 in f9; p6 true if x < 32 +// Go to EXP if |x| >= 32 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010004 ;; +} + +// Calculate p_even +// f34 = B_2 + Rsq *B_3 +// f35 = B_1 + Rsq*f34 = B_1 + Rsq * (B_2 + Rsq *B_3) +// f36 = p_even = Rsq * f35 = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven_temp1 = sinh_FR_Rsq, sinh_FR_B3, sinh_FR_B2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven_temp2 = sinh_FR_Rsq, sinh_FR_peven_temp1, sinh_FR_B1 + nop.i 999 +} + +// Calculate p_odd +// f34 = A_2 + Rsq *A_3 +// f35 = A_1 + Rsq * (A_2 + Rsq *A_3) +// f37 = podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd_temp1 = sinh_FR_Rsq, sinh_FR_A3, sinh_FR_A2 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp sinh_FR_N_temp1 = r39 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven = sinh_FR_Rsq, sinh_FR_peven_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd_temp2 = sinh_FR_Rsq, sinh_FR_podd_temp1, sinh_FR_A1 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd = sinh_FR_podd_temp2, sinh_FR_Rcub, sinh_FR_R + nop.i 999 +} + +// sinh_GR_mj contains the table offset for -j +// sinh_GR_j contains the table offset for +j +// p6 is true when j <= 0 + +{ .mlx +(p0) setf.exp sinh_FR_N_temp2 = r40 +(p0) movl r40 = 0x0000000000000020 ;; +} + +{ .mfi +(p0) sub sinh_GR_mJ = r40, r36 +(p0) fmerge.se sinh_FR_spos = sinh_FR_N_temp1, f1 +(p0) adds sinh_GR_J = 0x20, r36 ;; +} + +{ .mii + nop.m 999 +(p0) shl sinh_GR_mJ = sinh_GR_mJ, 5 ;; +(p0) add sinh_AD_mJ = r37, sinh_GR_mJ ;; +} + +{ .mmi + nop.m 999 +(p0) ldfe sinh_FR_Tmjhi = [sinh_AD_mJ],16 +(p0) shl sinh_GR_J = sinh_GR_J, 5 ;; +} + +{ .mfi +(p0) ldfs sinh_FR_Tmjlo = [sinh_AD_mJ],16 +(p0) fcmp.lt.unc.s1 p0,p7 = sinh_FR_X,f9 +(p0) add sinh_AD_J = r37, sinh_GR_J ;; +} + +{ .mmi +(p0) ldfe sinh_FR_Tjhi = [sinh_AD_J],16 ;; +(p0) ldfs sinh_FR_Tjlo = [sinh_AD_J],16 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.se sinh_FR_sneg = sinh_FR_N_temp2, f1 +(p7) br.cond.spnt L(SINH_BY_EXP) ;; +} + +{ .mfi + nop.m 999 + nop.f 999 + nop.i 999 ;; +} + +// ****************************************************** +// If NOT branch to EXP +// ****************************************************** +// Calculate S_hi and S_lo +// sinh_FR_S_hi_temp = sinh_FR_sneg * sinh_FR_Tmjhi +// sinh_FR_S_hi = sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi_temp +// sinh_FR_S_hi = sinh_FR_spos * sinh_FR_Tjhi - (sinh_FR_sneg * sinh_FR_Tmjlo) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_hi_temp = sinh_FR_sneg, sinh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_hi = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_S_hi_temp + nop.i 999 +} + +// Calculate C_hi +// sinh_FR_C_hi_temp1 = sinh_FR_sneg * sinh_FR_Tmjhi +// sinh_FR_C_hi = sinh_FR_spos * sinh_FR_Tjhi + sinh_FR_C_hi_temp1 + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_C_hi_temp1 = sinh_FR_sneg, sinh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +// sinh_FR_S_lo_temp1 = sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi +// sinh_FR_S_lo_temp2 = -sinh_FR_sneg * sinh_FR_Tmjlo + (sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi) +// sinh_FR_S_lo_temp2 = -sinh_FR_sneg * sinh_FR_Tmjlo + (sinh_FR_S_lo_temp1 ) + +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_lo_temp1 = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_C_hi = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_C_hi_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_S_lo_temp2 = sinh_FR_sneg, sinh_FR_Tmjhi, sinh_FR_S_lo_temp1 + nop.i 999 +} + +// sinh_FR_S_lo_temp1 = sinh_FR_sneg * sinh_FR_Tmjlo +// sinh_FR_S_lo_temp3 = sinh_FR_spos * sinh_FR_Tjlo - sinh_FR_S_lo_temp1 +// sinh_FR_S_lo_temp3 = sinh_FR_spos * sinh_FR_Tjlo -(sinh_FR_sneg * sinh_FR_Tmjlo) +// sinh_FR_S_lo = sinh_FR_S_lo_temp3 + sinh_FR_S_lo_temp2 + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_lo_temp1 = sinh_FR_sneg, sinh_FR_Tmjlo, f0 + nop.i 999 ;; +} + +/////////// BUG FIX fma to fms -TK +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_lo_temp3 = sinh_FR_spos, sinh_FR_Tjlo, sinh_FR_S_lo_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_lo = sinh_FR_S_lo_temp3, f1, sinh_FR_S_lo_temp2 + nop.i 999 ;; +} + +// Y_hi = S_hi +// Y_lo = C_hi*p_odd + (S_hi*p_even + S_lo) +// sinh_FR_Y_lo_temp = sinh_FR_S_hi * sinh_FR_peven + sinh_FR_S_lo +// sinh_FR_Y_lo = sinh_FR_C_hi * sinh_FR_podd + sinh_FR_Y_lo_temp + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_S_hi, sinh_FR_peven, sinh_FR_S_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_C_hi, sinh_FR_podd, sinh_FR_Y_lo_temp + nop.i 999 ;; +} + +// sinh_FR_SINH = Y_hi + Y_lo +// f8 = answer = sinh_FR_SGNX * sinh_FR_SINH + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH = sinh_FR_S_hi, f1, sinh_FR_Y_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s.s0 f8 = sinh_FR_SGNX, sinh_FR_SINH,f0 +(p0) br.ret.sptk b0 ;; +} + + +L(SINH_BY_EXP): + +// When p7 is true, we know that an overflow is not going to happen +// When p7 is false, we must check for possible overflow +// p7 is the over_SAFE flag +// Y_hi = Tjhi +// Y_lo = Tjhi * (p_odd + p_even) +Tjlo +// Scale = sign * 2^(N-1) +// sinh_FR_Y_lo = sinh_FR_Tjhi * (sinh_FR_peven + sinh_FR_podd) +// sinh_FR_Y_lo = sinh_FR_Tjhi * (sinh_FR_Y_lo_temp ) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_peven, f1, sinh_FR_podd + nop.i 999 +} + +// Now we are in EXP. This is the only path where an overflow is possible +// but not for certain. So this is the only path where over_SAFE has any use. +// r34 still has N-1 +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// There is a danger of double overflow if N-1 > 0x3fe = 1022 +// There is a danger of single overflow if N-1 > 0x7e = 126 +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000000007e ;; +} + +{ .mfi +(p0) cmp.gt.unc p0,p7 = r34, r32 +(p0) fmerge.s sinh_FR_SCALE = sinh_FR_SGNX, sinh_FR_spos + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_Tjhi, sinh_FR_Y_lo_temp, sinh_FR_Tjlo + nop.i 999 ;; +} + +// f8 = answer = scale * (Y_hi + Y_lo) +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH_temp = sinh_FR_Y_lo, f1, sinh_FR_Tjhi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s0 f44 = sinh_FR_SCALE, sinh_FR_SINH_temp, f0 + nop.i 999 ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p7) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 ;; +} + +// If over_SAFE is set, return +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = f44,f44 +(p7) br.ret.sptk b0 ;; +} + +// Else see if we overflowed +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// If WRE is set then an overflow will not occur in EXP. +// The input value that would cause a register (WRE) value to overflow is about 2^15 +// and this input would go into the HUGE path. +// Answer with WRE is in f43. + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s2 f43 = sinh_FR_SCALE, sinh_FR_SINH_temp, f0 + nop.i 999 ;; +} + +// 1007F => 1007F -FFFF = 80(true) +// 80 + 7F = FF, which is 1 more that the exponent of the largest +// double (FE). So 0 1007F 8000000000000000 is one ulp more than +// largest single in register bias +// Now set p8 if the answer with WRE is greater than or equal this value +// Also set p9 if the answer with WRE is less than or equal to negative this value + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000001007F ;; +} + +{ .mmf + nop.m 999 +(p0) setf.exp f41 = r32 +(p0) fsetc.s2 0x7F,0x40 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p8, p0 = f43, f41 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f42 = f41, f41 + nop.i 999 ;; +} + +// The error tag for overflow is 128 +{ .mii + nop.m 999 + nop.i 999 ;; +(p8) mov r47 = 128 ;; +} + +{ .mfb + nop.m 999 +(p0) fcmp.le.unc.s1 p9, p0 = f43, f42 +(p8) br.cond.spnt L(SINH_ERROR_SUPPORT) ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov r47 = 128 +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt L(SINH_ERROR_SUPPORT) ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f44,f44 +(p0) br.ret.sptk b0 ;; +} + +L(SINH_HUGE): + +// for SINH_HUGE, put 24000 in exponent; take sign from input; add 1 +// SAFE: SAFE is always 0 for HUGE + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000015dbf ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_signed_hi_lo = sinh_FR_SGNX, f9, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s0 f44 = sinh_FR_signed_hi_lo, f9, f0 +(p0) mov r47 = 128 +} +.endp sinhf +ASM_SIZE_DIRECTIVE(sinhf) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__ieee754_sinhf) +#endif + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + +.proc __libm_error_region +__libm_error_region: +L(SINH_ERROR_SUPPORT): +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfs [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfs [GR_Parameter_X] = f8 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = f44 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_sinhl.S glibc-2.2.3/sysdeps/ia64/fpu/e_sinhl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_sinhl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_sinhl.S Mon Feb 19 00:47:47 2001 @@ -0,0 +1,1311 @@ +.file "sinhl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 10/12/00 Update to set denormal operand and underflow flags +// 1/22/01 Fixed to set inexact flag for small args. Fixed incorrect +// call to __libm_error_support for 710.476 < x < 11357.2166. +// +// API +//============================================================== +// long double = sinhl(long double) +// input floating point f8 +// output floating point f8 +// +// Registers used +//============================================================== +// general registers: +// r32 -> r47 +// predicate registers used: +// p6 p7 p8 p9 +// floating-point registers used: +// f9 -> f15; f32 -> f45; +// f8 has input, then output +// +// Overview of operation +//============================================================== +// There are four paths +// 1. |x| < 0.25 SINH_BY_POLY +// 2. |x| < 32 SINH_BY_TBL +// 3. |x| < 2^14 SINH_BY_EXP +// 4. |x_ >= 2^14 SINH_HUGE +// +// For double extended we get infinity for x >= 400c b174 ddc0 31ae c0ea +// >= 1.0110001.... x 2^13 +// >= 11357.2166 +// +// But for double we get infinity for x >= 408633ce8fb9f87e +// >= 1.0110...x 2^9 +// >= +7.10476e+002 +// +// And for single we get infinity for x >= 42b3a496 +// >= 1.0110... 2^6 +// >= 89.8215 +// +// SAFE: If there is danger of overflow set SAFE to 0 +// NOT implemented: if there is danger of underflow, set SAFE to 0 +// SAFE for all paths listed below +// +// 1. SINH_BY_POLY +// =============== +// If |x| is less than the tiny threshold, then clear SAFE +// For double, the tiny threshold is -1022 = -0x3fe => -3fe + ffff = fc01 +// register-biased, this is fc01 +// For single, the tiny threshold is -126 = -7e => -7e + ffff = ff81 +// If |x| < tiny threshold, set SAFE = 0 +// +// 2. SINH_BY_TBL +// ============= +// SAFE: SAFE is always 1 for TBL; +// +// 3. SINH_BY_EXP +// ============== +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// r34 has N-1; 16382 is in register biased form, 0x13ffd +// There is danger of double overflow if N-1 > 0x3fe +// in register biased form, 0x103fd +// Analagously, there is danger of single overflow if N-1 > 0x7e +// in register biased form, 0x1007d +// SAFE: If there is danger of overflow set SAFE to 0 +// +// 4. SINH_HUGE +// ============ +// SAFE: SAFE is always 0 for HUGE +// + +#include "libm_support.h" + +// Assembly macros +//============================================================== +sinh_FR_X = f44 +sinh_FR_X2 = f9 +sinh_FR_X4 = f10 +sinh_FR_SGNX = f40 +sinh_FR_all_ones = f45 +sinh_FR_tmp = f42 + +sinh_FR_Inv_log2by64 = f9 +sinh_FR_log2by64_lo = f11 +sinh_FR_log2by64_hi = f10 + +sinh_FR_A1 = f9 +sinh_FR_A2 = f10 +sinh_FR_A3 = f11 + +sinh_FR_Rcub = f12 +sinh_FR_M_temp = f13 +sinh_FR_R_temp = f13 +sinh_FR_Rsq = f13 +sinh_FR_R = f14 + +sinh_FR_M = f38 + +sinh_FR_B1 = f15 +sinh_FR_B2 = f32 +sinh_FR_B3 = f33 + +sinh_FR_peven_temp1 = f34 +sinh_FR_peven_temp2 = f35 +sinh_FR_peven = f36 + +sinh_FR_podd_temp1 = f34 +sinh_FR_podd_temp2 = f35 +sinh_FR_podd = f37 + +sinh_FR_poly_podd_temp1 = f11 +sinh_FR_poly_podd_temp2 = f13 +sinh_FR_poly_peven_temp1 = f11 +sinh_FR_poly_peven_temp2 = f13 + +sinh_FR_J_temp = f9 +sinh_FR_J = f10 + +sinh_FR_Mmj = f39 + +sinh_FR_N_temp1 = f11 +sinh_FR_N_temp2 = f12 +sinh_FR_N = f13 + +sinh_FR_spos = f14 +sinh_FR_sneg = f15 + +sinh_FR_Tjhi = f32 +sinh_FR_Tjlo = f33 +sinh_FR_Tmjhi = f34 +sinh_FR_Tmjlo = f35 + +sinh_GR_mJ = r35 +sinh_GR_J = r36 + +sinh_AD_mJ = r38 +sinh_AD_J = r39 +sinh_GR_all_ones = r40 + +sinh_FR_S_hi = f9 +sinh_FR_S_hi_temp = f10 +sinh_FR_S_lo_temp1 = f11 +sinh_FR_S_lo_temp2 = f12 +sinh_FR_S_lo_temp3 = f13 + +sinh_FR_S_lo = f38 +sinh_FR_C_hi = f39 + +sinh_FR_C_hi_temp1 = f10 +sinh_FR_Y_hi = f11 +sinh_FR_Y_lo_temp = f12 +sinh_FR_Y_lo = f13 +sinh_FR_SINH = f9 + +sinh_FR_P1 = f14 +sinh_FR_P2 = f15 +sinh_FR_P3 = f32 +sinh_FR_P4 = f33 +sinh_FR_P5 = f34 +sinh_FR_P6 = f35 + +sinh_FR_TINY_THRESH = f9 + +sinh_FR_SINH_temp = f10 +sinh_FR_SCALE = f11 + +sinh_FR_signed_hi_lo = f10 + + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + +GR_Parameter_X = r44 +GR_Parameter_Y = r45 +GR_Parameter_RESULT = r46 + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +double_sinh_arg_reduction: +ASM_TYPE_DIRECTIVE(double_sinh_arg_reduction,@object) + data8 0xB8AA3B295C17F0BC, 0x00004005 + data8 0xB17217F7D1000000, 0x00003FF8 + data8 0xCF79ABC9E3B39804, 0x00003FD0 +ASM_SIZE_DIRECTIVE(double_sinh_arg_reduction) + +double_sinh_p_table: +ASM_TYPE_DIRECTIVE(double_sinh_p_table,@object) + data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC + data8 0x8888888888888412, 0x00003FF8 + data8 0xD00D00D00D4D39F2, 0x00003FF2 + data8 0xB8EF1D28926D8891, 0x00003FEC + data8 0xD732377688025BE9, 0x00003FE5 + data8 0xB08AF9AE78C1239F, 0x00003FDE +ASM_SIZE_DIRECTIVE(double_sinh_p_table) + +double_sinh_ab_table: +ASM_TYPE_DIRECTIVE(double_sinh_ab_table,@object) + data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC + data8 0x88888888884ECDD5, 0x00003FF8 + data8 0xD00D0C6DCC26A86B, 0x00003FF2 + data8 0x8000000000000002, 0x00003FFE + data8 0xAAAAAAAAAA402C77, 0x00003FFA + data8 0xB60B6CC96BDB144D, 0x00003FF5 +ASM_SIZE_DIRECTIVE(double_sinh_ab_table) + +double_sinh_j_table: +ASM_TYPE_DIRECTIVE(double_sinh_j_table,@object) + data8 0xB504F333F9DE6484, 0x00003FFE, 0x1EB2FB13, 0x00000000 + data8 0xB6FD91E328D17791, 0x00003FFE, 0x1CE2CBE2, 0x00000000 + data8 0xB8FBAF4762FB9EE9, 0x00003FFE, 0x1DDC3CBC, 0x00000000 + data8 0xBAFF5AB2133E45FB, 0x00003FFE, 0x1EE9AA34, 0x00000000 + data8 0xBD08A39F580C36BF, 0x00003FFE, 0x9EAEFDC1, 0x00000000 + data8 0xBF1799B67A731083, 0x00003FFE, 0x9DBF517B, 0x00000000 + data8 0xC12C4CCA66709456, 0x00003FFE, 0x1EF88AFB, 0x00000000 + data8 0xC346CCDA24976407, 0x00003FFE, 0x1E03B216, 0x00000000 + data8 0xC5672A115506DADD, 0x00003FFE, 0x1E78AB43, 0x00000000 + data8 0xC78D74C8ABB9B15D, 0x00003FFE, 0x9E7B1747, 0x00000000 + data8 0xC9B9BD866E2F27A3, 0x00003FFE, 0x9EFE3C0E, 0x00000000 + data8 0xCBEC14FEF2727C5D, 0x00003FFE, 0x9D36F837, 0x00000000 + data8 0xCE248C151F8480E4, 0x00003FFE, 0x9DEE53E4, 0x00000000 + data8 0xD06333DAEF2B2595, 0x00003FFE, 0x9E24AE8E, 0x00000000 + data8 0xD2A81D91F12AE45A, 0x00003FFE, 0x1D912473, 0x00000000 + data8 0xD4F35AABCFEDFA1F, 0x00003FFE, 0x1EB243BE, 0x00000000 + data8 0xD744FCCAD69D6AF4, 0x00003FFE, 0x1E669A2F, 0x00000000 + data8 0xD99D15C278AFD7B6, 0x00003FFE, 0x9BBC610A, 0x00000000 + data8 0xDBFBB797DAF23755, 0x00003FFE, 0x1E761035, 0x00000000 + data8 0xDE60F4825E0E9124, 0x00003FFE, 0x9E0BE175, 0x00000000 + data8 0xE0CCDEEC2A94E111, 0x00003FFE, 0x1CCB12A1, 0x00000000 + data8 0xE33F8972BE8A5A51, 0x00003FFE, 0x1D1BFE90, 0x00000000 + data8 0xE5B906E77C8348A8, 0x00003FFE, 0x1DF2F47A, 0x00000000 + data8 0xE8396A503C4BDC68, 0x00003FFE, 0x1EF22F22, 0x00000000 + data8 0xEAC0C6E7DD24392F, 0x00003FFE, 0x9E3F4A29, 0x00000000 + data8 0xED4F301ED9942B84, 0x00003FFE, 0x1EC01A5B, 0x00000000 + data8 0xEFE4B99BDCDAF5CB, 0x00003FFE, 0x1E8CAC3A, 0x00000000 + data8 0xF281773C59FFB13A, 0x00003FFE, 0x9DBB3FAB, 0x00000000 + data8 0xF5257D152486CC2C, 0x00003FFE, 0x1EF73A19, 0x00000000 + data8 0xF7D0DF730AD13BB9, 0x00003FFE, 0x9BB795B5, 0x00000000 + data8 0xFA83B2DB722A033A, 0x00003FFE, 0x1EF84B76, 0x00000000 + data8 0xFD3E0C0CF486C175, 0x00003FFE, 0x9EF5818B, 0x00000000 + data8 0x8000000000000000, 0x00003FFF, 0x00000000, 0x00000000 + data8 0x8164D1F3BC030773, 0x00003FFF, 0x1F77CACA, 0x00000000 + data8 0x82CD8698AC2BA1D7, 0x00003FFF, 0x1EF8A91D, 0x00000000 + data8 0x843A28C3ACDE4046, 0x00003FFF, 0x1E57C976, 0x00000000 + data8 0x85AAC367CC487B15, 0x00003FFF, 0x9EE8DA92, 0x00000000 + data8 0x871F61969E8D1010, 0x00003FFF, 0x1EE85C9F, 0x00000000 + data8 0x88980E8092DA8527, 0x00003FFF, 0x1F3BF1AF, 0x00000000 + data8 0x8A14D575496EFD9A, 0x00003FFF, 0x1D80CA1E, 0x00000000 + data8 0x8B95C1E3EA8BD6E7, 0x00003FFF, 0x9D0373AF, 0x00000000 + data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF, 0x9F167097, 0x00000000 + data8 0x8EA4398B45CD53C0, 0x00003FFF, 0x1EB70051, 0x00000000 + data8 0x9031DC431466B1DC, 0x00003FFF, 0x1F6EB029, 0x00000000 + data8 0x91C3D373AB11C336, 0x00003FFF, 0x1DFD6D8E, 0x00000000 + data8 0x935A2B2F13E6E92C, 0x00003FFF, 0x9EB319B0, 0x00000000 + data8 0x94F4EFA8FEF70961, 0x00003FFF, 0x1EBA2BEB, 0x00000000 + data8 0x96942D3720185A00, 0x00003FFF, 0x1F11D537, 0x00000000 + data8 0x9837F0518DB8A96F, 0x00003FFF, 0x1F0D5A46, 0x00000000 + data8 0x99E0459320B7FA65, 0x00003FFF, 0x9E5E7BCA, 0x00000000 + data8 0x9B8D39B9D54E5539, 0x00003FFF, 0x9F3AAFD1, 0x00000000 + data8 0x9D3ED9A72CFFB751, 0x00003FFF, 0x9E86DACC, 0x00000000 + data8 0x9EF5326091A111AE, 0x00003FFF, 0x9F3EDDC2, 0x00000000 + data8 0xA0B0510FB9714FC2, 0x00003FFF, 0x1E496E3D, 0x00000000 + data8 0xA27043030C496819, 0x00003FFF, 0x9F490BF6, 0x00000000 + data8 0xA43515AE09E6809E, 0x00003FFF, 0x1DD1DB48, 0x00000000 + data8 0xA5FED6A9B15138EA, 0x00003FFF, 0x1E65EBFB, 0x00000000 + data8 0xA7CD93B4E965356A, 0x00003FFF, 0x9F427496, 0x00000000 + data8 0xA9A15AB4EA7C0EF8, 0x00003FFF, 0x1F283C4A, 0x00000000 + data8 0xAB7A39B5A93ED337, 0x00003FFF, 0x1F4B0047, 0x00000000 + data8 0xAD583EEA42A14AC6, 0x00003FFF, 0x1F130152, 0x00000000 + data8 0xAF3B78AD690A4375, 0x00003FFF, 0x9E8367C0, 0x00000000 + data8 0xB123F581D2AC2590, 0x00003FFF, 0x9F705F90, 0x00000000 + data8 0xB311C412A9112489, 0x00003FFF, 0x1EFB3C53, 0x00000000 + data8 0xB504F333F9DE6484, 0x00003FFF, 0x1F32FB13, 0x00000000 +ASM_SIZE_DIRECTIVE(double_sinh_j_table) + +.align 32 +.global sinhl# + +.section .text +.proc sinhl# +.align 32 + +sinhl: +#ifdef _LIBC +.global __ieee754_sinhl +.type __ieee754_sinhl,@function +__ieee754_sinhl: +#endif + +// X infinity or NAN? +// Take invalid fault if enabled + + +{ .mfi + alloc r32 = ar.pfs,0,12,4,0 +(p0) fclass.m.unc p6,p0 = f8, 0xe3 //@qnan | @snan | @inf + mov sinh_GR_all_ones = -1 +} +;; + + +{ .mfb + nop.m 999 +(p6) fma.s0 f8 = f8,f1,f8 +(p6) br.ret.spnt b0 ;; +} + +// Put 0.25 in f9; p6 true if x < 0.25 +// Make constant that will generate inexact when squared +{ .mlx + setf.sig sinh_FR_all_ones = sinh_GR_all_ones +(p0) movl r32 = 0x000000000000fffd ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 +(p0) fclass.m.unc p7,p0 = f8, 0x07 //@zero + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s sinh_FR_X = f0,f8 +(p7) br.ret.spnt b0 ;; +} + +// Identify denormal operands. +{ .mfi + nop.m 999 + fclass.m.unc p10,p0 = f8, 0x09 // + denorm + nop.i 999 +};; +{ .mfi + nop.m 999 + fclass.m.unc p11,p0 = f8, 0x0a // - denorm + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.s sinh_FR_SGNX = f8,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p0,p7 = sinh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.sptk L(SINH_BY_TBL) ;; +} + + +L(SINH_BY_POLY): + +// POLY cannot overflow so there is no need to call __libm_error_support +// Set tiny_SAFE (p7) to 1(0) if answer is not tiny +// Currently we do not use tiny_SAFE. So the setting of tiny_SAFE is +// commented out. +//(p0) movl r32 = 0x000000000000fc01 +//(p0) setf.exp f10 = r32 +//(p0) fcmp.lt.unc.s1 p6,p7 = f8,f10 +// Here is essentially the algorithm for SINH_BY_POLY. Care is take for the order +// of multiplication; and P_1 is not exactly 1/3!, P_2 is not exactly 1/5!, etc. +// Note that ax = |x| +// sinh(x) = sign * (series(e^x) - series(e^-x))/2 +// = sign * (ax + ax^3/3! + ax^5/5! + ax^7/7! + ax^9/9! + ax^11/11! + ax^13/13!) +// = sign * (ax + ax * ( ax^2 * (1/3! + ax^4 * (1/7! + ax^4*1/11!)) ) +// + ax * ( ax^4 * (1/5! + ax^4 * (1/9! + ax^4*1/13!)) ) ) +// = sign * (ax + ax*p_odd + (ax*p_even)) +// = sign * (ax + Y_lo) +// sinh(x) = sign * (Y_hi + Y_lo) +// Get the values of P_x from the table +{ .mfb +(p0) addl r34 = @ltoff(double_sinh_p_table), gp +(p10) fma.s0 f8 = f8,f8,f8 +(p10) br.ret.spnt b0 +} +;; + +{ .mfb + ld8 r34 = [r34] +(p11) fnma.s0 f8 = f8,f8,f8 +(p11) br.ret.spnt b0 +} +;; + +// Calculate sinh_FR_X2 = ax*ax and sinh_FR_X4 = ax*ax*ax*ax +{ .mmf + nop.m 999 +(p0) ldfe sinh_FR_P1 = [r34],16 +(p0) fma.s1 sinh_FR_X2 = sinh_FR_X, sinh_FR_X, f0 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_P2 = [r34],16 ;; +(p0) ldfe sinh_FR_P3 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_P4 = [r34],16 ;; +(p0) ldfe sinh_FR_P5 = [r34],16 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe sinh_FR_P6 = [r34],16 +(p0) fma.s1 sinh_FR_X4 = sinh_FR_X2, sinh_FR_X2, f0 + nop.i 999 ;; +} + +// Calculate sinh_FR_podd = p_odd and sinh_FR_peven = p_even +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_podd_temp1 = sinh_FR_X4, sinh_FR_P5, sinh_FR_P3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_podd_temp2 = sinh_FR_X4, sinh_FR_poly_podd_temp1, sinh_FR_P1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_peven_temp1 = sinh_FR_X4, sinh_FR_P6, sinh_FR_P4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd = sinh_FR_X2, sinh_FR_poly_podd_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_poly_peven_temp2 = sinh_FR_X4, sinh_FR_poly_peven_temp1, sinh_FR_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven = sinh_FR_X4, sinh_FR_poly_peven_temp2, f0 + nop.i 999 ;; +} + +// Calculate sinh_FR_Y_lo = ax*p_odd + (ax*p_even) +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_X, sinh_FR_peven, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_X, sinh_FR_podd, sinh_FR_Y_lo_temp + nop.i 999 ;; +} + +// Calculate sinh_FR_SINH = Y_hi + Y_lo. Note that ax = Y_hi +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH = sinh_FR_X, f1, sinh_FR_Y_lo + nop.i 999 ;; +} +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 +} + +// Calculate f8 = sign * (Y_hi + Y_lo) +// Go to return +{ .mfb + nop.m 999 +(p0) fma.s0 f8 = sinh_FR_SGNX,sinh_FR_SINH,f0 +(p0) br.ret.sptk b0 ;; +} + + +L(SINH_BY_TBL): + +// Now that we are at TBL; so far all we know is that |x| >= 0.25. +// The first two steps are the same for TBL and EXP, but if we are HUGE +// we want to leave now. +// Double-extended: +// Go to HUGE if |x| >= 2^14, 1000d (register-biased) is e = 14 (true) +// Double +// Go to HUGE if |x| >= 2^10, 10009 (register-biased) is e = 10 (true) +// Single +// Go to HUGE if |x| >= 2^7, 10006 (register-biased) is e = 7 (true) + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x000000000001000d ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p6,p7 = sinh_FR_X,f9 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(SINH_HUGE) ;; +} + +// r32 = 1 +// r34 = N-1 +// r35 = N +// r36 = j +// r37 = N+1 + +// TBL can never overflow +// sinh(x) = sinh(B+R) +// = sinh(B)cosh(R) + cosh(B)sinh(R) +// +// ax = |x| = M*log2/64 + R +// B = M*log2/64 +// M = 64*N + j +// We will calcualte M and get N as (M-j)/64 +// The division is a shift. +// exp(B) = exp(N*log2 + j*log2/64) +// = 2^N * 2^(j*log2/64) +// sinh(B) = 1/2(e^B -e^-B) +// = 1/2(2^N * 2^(j*log2/64) - 2^-N * 2^(-j*log2/64)) +// sinh(B) = (2^(N-1) * 2^(j*log2/64) - 2^(-N-1) * 2^(-j*log2/64)) +// cosh(B) = (2^(N-1) * 2^(j*log2/64) + 2^(-N-1) * 2^(-j*log2/64)) +// 2^(j*log2/64) is stored as Tjhi + Tjlo , j= -32,....,32 +// Tjhi is double-extended (80-bit) and Tjlo is single(32-bit) +// R = ax - M*log2/64 +// R = ax - M*log2_by_64_hi - M*log2_by_64_lo +// exp(R) = 1 + R +R^2(1/2! + R(1/3! + R(1/4! + ... + R(1/n!)...) +// = 1 + p_odd + p_even +// where the p_even uses the A coefficients and the p_even uses the B coefficients +// So sinh(R) = 1 + p_odd + p_even -(1 -p_odd -p_even)/2 = p_odd +// cosh(R) = 1 + p_even +// sinh(B) = S_hi + S_lo +// cosh(B) = C_hi +// sinh(x) = sinh(B)cosh(R) + cosh(B)sinh(R) +// ****************************************************** +// STEP 1 (TBL and EXP) +// ****************************************************** +// Get the following constants. +// f9 = Inv_log2by64 +// f10 = log2by64_hi +// f11 = log2by64_lo + +{ .mmi +(p0) adds r32 = 0x1,r0 +(p0) addl r34 = @ltoff(double_sinh_arg_reduction), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and +// put them in an exponent. +// sinh_FR_spos = 2^(N-1) and sinh_FR_sneg = 2^(-N-1) +// r39 = 0xffff + (N-1) = 0xffff +N -1 +// r40 = 0xffff - (N +1) = 0xffff -N -1 + +{ .mlx + nop.m 999 +(p0) movl r38 = 0x000000000000fffe ;; +} + +{ .mmi +(p0) ldfe sinh_FR_Inv_log2by64 = [r34],16 ;; +(p0) ldfe sinh_FR_log2by64_hi = [r34],16 + nop.i 999 ;; +} + +{ .mbb +(p0) ldfe sinh_FR_log2by64_lo = [r34],16 + nop.b 999 + nop.b 999 ;; +} + +// Get the A coefficients +// f9 = A_1 +// f10 = A_2 +// f11 = A_3 + +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(double_sinh_ab_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r34 = [r34] + nop.m 999 + nop.i 999 +} +;; + + +// Calculate M and keep it as integer and floating point. +// f38 = M = round-to-integer(x*Inv_log2by64) +// sinh_FR_M = M = truncate(ax/(log2/64)) +// Put the significand of M in r35 +// and the floating point representation of M in sinh_FR_M + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_M = sinh_FR_X, sinh_FR_Inv_log2by64, f0 + nop.i 999 +} + +{ .mfi +(p0) ldfe sinh_FR_A1 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.fx.s1 sinh_FR_M_temp = sinh_FR_M + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnorm.s1 sinh_FR_M = sinh_FR_M_temp + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r35 = sinh_FR_M_temp + nop.f 999 + nop.i 999 ;; +} + +// M is still in r35. Calculate j. j is the signed extension of the six lsb of M. It +// has a range of -32 thru 31. +// r35 = M +// r36 = j + +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) and r36 = 0x3f, r35 ;; +} + +// Calculate R +// f13 = f44 - f12*f10 = ax - M*log2by64_hi +// f14 = f13 - f8*f11 = R = (ax - M*log2by64_hi) - M*log2by64_lo + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_R_temp = sinh_FR_M, sinh_FR_log2by64_hi, sinh_FR_X + nop.i 999 +} + +{ .mfi +(p0) ldfe sinh_FR_A2 = [r34],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_R = sinh_FR_M, sinh_FR_log2by64_lo, sinh_FR_R_temp + nop.i 999 +} + +// Get the B coefficients +// f15 = B_1 +// f32 = B_2 +// f33 = B_3 + +{ .mmi +(p0) ldfe sinh_FR_A3 = [r34],16 ;; +(p0) ldfe sinh_FR_B1 = [r34],16 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe sinh_FR_B2 = [r34],16 ;; +(p0) ldfe sinh_FR_B3 = [r34],16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) shl r34 = r36, 0x2 ;; +(p0) sxt1 r37 = r34 ;; +} + +// ****************************************************** +// STEP 2 (TBL and EXP) +// ****************************************************** +// Calculate Rsquared and Rcubed in preparation for p_even and p_odd +// f12 = R*R*R +// f13 = R*R +// f14 = R <== from above + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Rsq = sinh_FR_R, sinh_FR_R, f0 +(p0) shr r36 = r37, 0x2 ;; +} + +// r34 = M-j = r35 - r36 +// r35 = N = (M-j)/64 + +{ .mii +(p0) sub r34 = r35, r36 + nop.i 999 ;; +(p0) shr r35 = r34, 0x6 ;; +} + +{ .mii +(p0) sub r40 = r38, r35 +(p0) adds r37 = 0x1, r35 +(p0) add r39 = r38, r35 ;; +} + +// Get the address of the J table, add the offset, +// addresses are sinh_AD_mJ and sinh_AD_J, get the T value +// f32 = T(j)_hi +// f33 = T(j)_lo +// f34 = T(-j)_hi +// f35 = T(-j)_lo + +{ .mmi +(p0) sub r34 = r35, r32 +(p0) addl r37 = @ltoff(double_sinh_j_table), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r37 = [r37] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Rcub = sinh_FR_Rsq, sinh_FR_R, f0 + nop.i 999 +} + +// ****************************************************** +// STEP 3 Now decide if we need to branch to EXP +// ****************************************************** +// Put 32 in f9; p6 true if x < 32 +// Go to EXP if |x| >= 32 + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000010004 ;; +} + +// Calculate p_even +// f34 = B_2 + Rsq *B_3 +// f35 = B_1 + Rsq*f34 = B_1 + Rsq * (B_2 + Rsq *B_3) +// f36 = p_even = Rsq * f35 = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven_temp1 = sinh_FR_Rsq, sinh_FR_B3, sinh_FR_B2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven_temp2 = sinh_FR_Rsq, sinh_FR_peven_temp1, sinh_FR_B1 + nop.i 999 +} + +// Calculate p_odd +// f34 = A_2 + Rsq *A_3 +// f35 = A_1 + Rsq * (A_2 + Rsq *A_3) +// f37 = podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd_temp1 = sinh_FR_Rsq, sinh_FR_A3, sinh_FR_A2 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp sinh_FR_N_temp1 = r39 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_peven = sinh_FR_Rsq, sinh_FR_peven_temp2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd_temp2 = sinh_FR_Rsq, sinh_FR_podd_temp1, sinh_FR_A1 + nop.i 999 ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_podd = sinh_FR_podd_temp2, sinh_FR_Rcub, sinh_FR_R + nop.i 999 +} + +// sinh_GR_mj contains the table offset for -j +// sinh_GR_j contains the table offset for +j +// p6 is true when j <= 0 + +{ .mlx +(p0) setf.exp sinh_FR_N_temp2 = r40 +(p0) movl r40 = 0x0000000000000020 ;; +} + +{ .mfi +(p0) sub sinh_GR_mJ = r40, r36 +(p0) fmerge.se sinh_FR_spos = sinh_FR_N_temp1, f1 +(p0) adds sinh_GR_J = 0x20, r36 ;; +} + +{ .mii + nop.m 999 +(p0) shl sinh_GR_mJ = sinh_GR_mJ, 5 ;; +(p0) add sinh_AD_mJ = r37, sinh_GR_mJ ;; +} + +{ .mmi + nop.m 999 +(p0) ldfe sinh_FR_Tmjhi = [sinh_AD_mJ],16 +(p0) shl sinh_GR_J = sinh_GR_J, 5 ;; +} + +{ .mfi +(p0) ldfs sinh_FR_Tmjlo = [sinh_AD_mJ],16 +(p0) fcmp.lt.unc.s1 p0,p7 = sinh_FR_X,f9 +(p0) add sinh_AD_J = r37, sinh_GR_J ;; +} + +{ .mmi +(p0) ldfe sinh_FR_Tjhi = [sinh_AD_J],16 ;; +(p0) ldfs sinh_FR_Tjlo = [sinh_AD_J],16 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.se sinh_FR_sneg = sinh_FR_N_temp2, f1 +(p7) br.cond.spnt L(SINH_BY_EXP) ;; +} + +{ .mfi + nop.m 999 + nop.f 999 + nop.i 999 ;; +} + +// ****************************************************** +// If NOT branch to EXP +// ****************************************************** +// Calculate S_hi and S_lo +// sinh_FR_S_hi_temp = sinh_FR_sneg * sinh_FR_Tmjhi +// sinh_FR_S_hi = sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi_temp +// sinh_FR_S_hi = sinh_FR_spos * sinh_FR_Tjhi - (sinh_FR_sneg * sinh_FR_Tmjlo) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_hi_temp = sinh_FR_sneg, sinh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_hi = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_S_hi_temp + nop.i 999 +} + +// Calculate C_hi +// sinh_FR_C_hi_temp1 = sinh_FR_sneg * sinh_FR_Tmjhi +// sinh_FR_C_hi = sinh_FR_spos * sinh_FR_Tjhi + sinh_FR_C_hi_temp1 + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_C_hi_temp1 = sinh_FR_sneg, sinh_FR_Tmjhi, f0 + nop.i 999 ;; +} + +// sinh_FR_S_lo_temp1 = sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi +// sinh_FR_S_lo_temp2 = -sinh_FR_sneg * sinh_FR_Tmjlo + (sinh_FR_spos * sinh_FR_Tjhi - sinh_FR_S_hi) +// sinh_FR_S_lo_temp2 = -sinh_FR_sneg * sinh_FR_Tmjlo + (sinh_FR_S_lo_temp1 ) + +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_lo_temp1 = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_C_hi = sinh_FR_spos, sinh_FR_Tjhi, sinh_FR_C_hi_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 sinh_FR_S_lo_temp2 = sinh_FR_sneg, sinh_FR_Tmjhi, sinh_FR_S_lo_temp1 + nop.i 999 +} + +// sinh_FR_S_lo_temp1 = sinh_FR_sneg * sinh_FR_Tmjlo +// sinh_FR_S_lo_temp3 = sinh_FR_spos * sinh_FR_Tjlo - sinh_FR_S_lo_temp1 +// sinh_FR_S_lo_temp3 = sinh_FR_spos * sinh_FR_Tjlo -(sinh_FR_sneg * sinh_FR_Tmjlo) +// sinh_FR_S_lo = sinh_FR_S_lo_temp3 + sinh_FR_S_lo_temp2 + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_lo_temp1 = sinh_FR_sneg, sinh_FR_Tmjlo, f0 + nop.i 999 ;; +} + +/////////// BUG FIX fma to fms -TK +{ .mfi + nop.m 999 +(p0) fms.s1 sinh_FR_S_lo_temp3 = sinh_FR_spos, sinh_FR_Tjlo, sinh_FR_S_lo_temp1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_S_lo = sinh_FR_S_lo_temp3, f1, sinh_FR_S_lo_temp2 + nop.i 999 ;; +} + +// Y_hi = S_hi +// Y_lo = C_hi*p_odd + (S_hi*p_even + S_lo) +// sinh_FR_Y_lo_temp = sinh_FR_S_hi * sinh_FR_peven + sinh_FR_S_lo +// sinh_FR_Y_lo = sinh_FR_C_hi * sinh_FR_podd + sinh_FR_Y_lo_temp + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_S_hi, sinh_FR_peven, sinh_FR_S_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_C_hi, sinh_FR_podd, sinh_FR_Y_lo_temp + nop.i 999 ;; +} + +// sinh_FR_SINH = Y_hi + Y_lo +// f8 = answer = sinh_FR_SGNX * sinh_FR_SINH + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH = sinh_FR_S_hi, f1, sinh_FR_Y_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s0 f8 = sinh_FR_SGNX, sinh_FR_SINH,f0 +(p0) br.ret.sptk b0 ;; +} + + +L(SINH_BY_EXP): + +// When p7 is true, we know that an overflow is not going to happen +// When p7 is false, we must check for possible overflow +// p7 is the over_SAFE flag +// Y_hi = Tjhi +// Y_lo = Tjhi * (p_odd + p_even) +Tjlo +// Scale = sign * 2^(N-1) +// sinh_FR_Y_lo = sinh_FR_Tjhi * (sinh_FR_peven + sinh_FR_podd) +// sinh_FR_Y_lo = sinh_FR_Tjhi * (sinh_FR_Y_lo_temp ) + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo_temp = sinh_FR_peven, f1, sinh_FR_podd + nop.i 999 +} + +// Now we are in EXP. This is the only path where an overflow is possible +// but not for certain. So this is the only path where over_SAFE has any use. +// r34 still has N-1 +// There is a danger of double-extended overflow if N-1 > 16382 = 0x3ffe +// There is a danger of double overflow if N-1 > 0x3fe = 1022 +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000003ffe ;; +} + +{ .mfi +(p0) cmp.gt.unc p0,p7 = r34, r32 +(p0) fmerge.s sinh_FR_SCALE = sinh_FR_SGNX, sinh_FR_spos + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_Y_lo = sinh_FR_Tjhi, sinh_FR_Y_lo_temp, sinh_FR_Tjlo + nop.i 999 ;; +} + +// f8 = answer = scale * (Y_hi + Y_lo) +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_SINH_temp = sinh_FR_Y_lo, f1, sinh_FR_Tjhi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s0 f44 = sinh_FR_SCALE, sinh_FR_SINH_temp, f0 + nop.i 999 ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p7) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 ;; +} + +// If over_SAFE is set, return +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = f44,f44 +(p7) br.ret.sptk b0 ;; +} + +// Else see if we overflowed +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// If WRE is set then an overflow will not occur in EXP. +// The input value that would cause a register (WRE) value to overflow is about 2^15 +// and this input would go into the HUGE path. +// Answer with WRE is in f43. + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.s2 f43 = sinh_FR_SCALE, sinh_FR_SINH_temp, f0 + nop.i 999 ;; +} + +// 13FFF => 13FFF -FFFF = 4000(true) +// 4000 + 3FFF = 7FFF, which is 1 more that the exponent of the largest +// long double (7FFE). So 0 13FFF 8000000000000000 is one ulp more than +// largest long double in register bias +// Now set p8 if the answer with WRE is greater than or equal this value +// Also set p9 if the answer with WRE is less than or equal to negative this value + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x00000000013FFF ;; +} + +{ .mmf + nop.m 999 +(p0) setf.exp f41 = r32 +(p0) fsetc.s2 0x7F,0x40 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p8, p0 = f43, f41 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f42 = f41, f41 + nop.i 999 ;; +} + +// The error tag for overflow is 126 +{ .mii + nop.m 999 + nop.i 999 ;; +(p8) mov r47 = 126 ;; +} + +{ .mfb + nop.m 999 +(p0) fcmp.le.unc.s1 p9, p0 = f43, f42 +(p8) br.cond.spnt L(SINH_ERROR_SUPPORT) ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) mov r47 = 126 +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt L(SINH_ERROR_SUPPORT) ;; +} + +// Dummy multiply to generate inexact +{ .mfi + nop.m 999 +(p0) fmpy.s0 sinh_FR_tmp = sinh_FR_all_ones, sinh_FR_all_ones + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmerge.s f8 = f44,f44 +(p0) br.ret.sptk b0 ;; +} + +L(SINH_HUGE): + +// for SINH_HUGE, put 24000 in exponent; take sign from input; add 1 +// SAFE: SAFE is always 0 for HUGE + +{ .mlx + nop.m 999 +(p0) movl r32 = 0x0000000000015dbf ;; +} + +{ .mfi +(p0) setf.exp f9 = r32 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 sinh_FR_signed_hi_lo = sinh_FR_SGNX, f9, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s0 f44 = sinh_FR_signed_hi_lo, f9, f0 +(p0) mov r47 = 126 +} +.endp sinhl +ASM_SIZE_DIRECTIVE(sinhl) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__ieee754_sinhl) +#endif + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + +.proc __libm_error_region +__libm_error_region: +L(SINH_ERROR_SUPPORT): +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfe [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfe [GR_Parameter_X] = f8 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfe [GR_Parameter_Y] = f44 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_sqrt.S glibc-2.2.3/sysdeps/ia64/fpu/e_sqrt.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_sqrt.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_sqrt.S Mon Feb 19 00:47:57 2001 @@ -0,0 +1,347 @@ +.file "sqrt.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ******************************************************************** +// History +// ******************************************************************** +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ******************************************************************** +// +// Function: Combined sqrt(x), where +// _ +// sqrt(x) = |x, for double precision x values +// +// ******************************************************************** +// +// Accuracy: Correctly Rounded +// +// ******************************************************************** +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f7 -f14 +// +// General Purpose Registers: +// r32-r36 (Locals) +// r37-r40 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6, p7, p8 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// All faults and exceptions should be raised correctly. +// sqrt(QNaN) = QNaN +// sqrt(SNaN) = QNaN +// sqrt(+/-0) = +/-0 +// sqrt(negative) = QNaN and error handling is called +// +// ********************************************************************* +// +// Implementation: +// +// Modified Newton-Raphson Algorithm +// +// ********************************************************************* + +#include "libm_support.h" + +GR_SAVE_PFS = r33 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 + + +.section .text +.proc sqrt# +.global sqrt# +.align 64 + +sqrt: +#ifdef _LIBC +.global __sqrt +.type __sqrt,@function +__sqrt: +.global __ieee754_sqrt +.type __ieee754_sqrt,@function +__ieee754_sqrt: +#endif +{ .mfi + alloc r32= ar.pfs,0,5,4,0 + frsqrta.s0 f7,p6=f8 + nop.i 0 +} { .mlx + // BEGIN DOUBLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM + nop.m 0 + // exponent of +1/2 in r2 + movl r2 = 0x0fffe;; +} { .mmi + // +1/2 in f9 + setf.exp f9 = r2 + nop.m 0 + nop.i 0 +} { .mlx + nop.m 0 + // 3/2 in r3 + movl r3=0x3fc00000;; +} { .mfi + setf.s f10=r3 + // Step (1) + // y0 = 1/sqrt(a) in f7 + fclass.m.unc p7,p8 = f8,0x3A + nop.i 0;; +} { .mlx + nop.m 0 + // 5/2 in r2 + movl r2 = 0x40200000 +} { .mlx + nop.m 0 + // 63/8 in r3 + movl r3 = 0x40fc0000;; +} { .mfi + setf.s f11=r2 + // Step (2) + // h = +1/2 * y0 in f6 + (p6) fma.s1 f6=f9,f7,f0 + nop.i 0 +} { .mfi + setf.s f12=r3 + // Step (3) + // g = a * y0 in f7 + (p6) fma.s1 f7=f8,f7,f0 + nop.i 0 +} { .mfi + nop.m 0 + mov f15 = f8 + nop.i 0;; +} { .mlx + nop.m 0 + // 231/16 in r2 + movl r2 = 0x41670000;; +} { .mfi + setf.s f13=r2 + // Step (4) + // e = 1/2 - g * h in f9 + (p6) fnma.s1 f9=f7,f6,f9 + nop.i 0 +} { .mlx + nop.m 0 + // 35/8 in r3 + movl r3 = 0x408c0000;; +} { .mfi + setf.s f14=r3 + // Step (5) + // S = 3/2 + 5/2 * e in f10 + (p6) fma.s1 f10=f11,f9,f10 + nop.i 0 +} { .mfi + nop.m 0 + // Step (6) + // e2 = e * e in f11 + (p6) fma.s1 f11=f9,f9,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (7) + // t = 63/8 + 231/16 * e in f12 + (p6) fma.s1 f12=f13,f9,f12 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (8) + // S1 = e + e2 * S in f10 + (p6) fma.s1 f10=f11,f10,f9 + nop.i 0 +} { .mfi + nop.m 0 + // Step (9) + // e4 = e2 * e2 in f11 + (p6) fma.s1 f11=f11,f11,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (10) + // t1 = 35/8 + e * t in f9 + (p6) fma.s1 f9=f9,f12,f14 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (11) + // G = g + S1 * g in f12 + (p6) fma.s1 f12=f10,f7,f7 + nop.i 0 +} { .mfi + nop.m 0 + // Step (12) + // E = g * e4 in f7 + (p6) fma.s1 f7=f7,f11,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (13) + // u = S1 + e4 * t1 in f10 + (p6) fma.s1 f10=f11,f9,f10 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (14) + // g1 = G + t1 * E in f7 + (p6) fma.d.s1 f7=f9,f7,f12 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (15) + // h1 = h + u * h in f6 + (p6) fma.s1 f6=f10,f6,f6 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (16) + // d = a - g1 * g1 in f9 + (p6) fnma.s1 f9=f7,f7,f8 + nop.i 0;; +} { .mfb + nop.m 0 + // Step (17) + // g2 = g1 + d * h1 in f7 + (p6) fma.d.s0 f8=f9,f6,f7 + (p6) br.ret.sptk b0 ;; +} + +{ .mfb + nop.m 0 + (p0) mov f8 = f7 + (p8) br.ret.sptk b0 ;; +} +{ .mfb + (p7) mov r40 = 49 + nop.f 0 + (p7) br.cond.sptk __libm_error_region ;; +} +// END DOUBLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM +.endp sqrt# +ASM_SIZE_DIRECTIVE(sqrt) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__sqrt) +ASM_SIZE_DIRECTIVE(__ieee754_sqrt) +#endif + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + +.proc __libm_error_region +__libm_error_region: + +// +// This branch includes all those special values that are not negative, +// with the result equal to frcpa(x) +// + +.prologue +// We are distinguishing between over(under)flow and letting +// __libm_error_support set ERANGE or do anything else needed. + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = f15 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_sqrtf.S glibc-2.2.3/sysdeps/ia64/fpu/e_sqrtf.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_sqrtf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_sqrtf.S Mon Feb 19 00:48:06 2001 @@ -0,0 +1,266 @@ +.file "sqrtf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// History: +// +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: Combined sqrtf(x), where +// _ +// sqrtf(x) = |x, for single precision x values +// +// ******************************************************************** +// +// Accuracy: Correctly Rounded +// +// ******************************************************************** +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f7 -f14 +// +// General Purpose Registers: +// r32-r36 (Locals) +// r37-r40 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6, p7, p8 +// +// ******************************************************************** +// +// IEEE Special Conditions: +// +// All faults and exceptions should be raised correctly. +// sqrtf(QNaN) = QNaN +// sqrtf(SNaN) = QNaN +// sqrtf(+/-0) = +/-0 +// sqrtf(negative) = QNaN and error handling is called +// +// ******************************************************************** +// +// Implementation: +// +// Modified Newton-Raphson Algorithm +// +// ******************************************************************** + +#include "libm_support.h" + +GR_SAVE_B0 = r34 +GR_SAVE_PFS = r33 +GR_SAVE_GP = r35 + +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f13 +FR_Y = f0 +FR_RESULT = f8 + + + +.section .text +.proc sqrtf# +.global sqrtf# +.align 64 + +sqrtf: +#ifdef _LIBC +.global __sqrtf +.type __sqrtf,@function +__sqrtf: +.global __ieee754_sqrtf +.type __ieee754_sqrtf,@function +__ieee754_sqrtf: +#endif +{ .mlx + // BEGIN SINGLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM + alloc r32= ar.pfs,0,5,4,0 + // exponent of +1/2 in r2 + movl r2 = 0x0fffe +} { .mfi + // +1/2 in f12 + nop.m 0 + frsqrta.s0 f7,p6=f8 + nop.i 0;; +} { .mfi + setf.exp f12 = r2 + // Step (1) + // y0 = 1/sqrt(a) in f7 + fclass.m.unc p7,p8 = f8,0x3A + nop.i 0 +} { .mfi + nop.m 0 + // Make a copy of x just in case + mov f13 = f8 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (2) + // H0 = 1/2 * y0 in f9 + (p6) fma.s1 f9=f12,f7,f0 + nop.i 0 +} { .mfi + nop.m 0 + // Step (3) + // S0 = a * y0 in f7 + (p6) fma.s1 f7=f8,f7,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (4) + // d = 1/2 - S0 * H0 in f10 + (p6) fnma.s1 f10=f7,f9,f12 + nop.i 0 +} { .mfi + nop.m 0 + // Step (0'') + // 3/2 = 1 + 1/2 in f12 + (p6) fma.s1 f12=f12,f1,f1 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (5) + // e = 1 + 3/2 * d in f12 + (p6) fma.s1 f12=f12,f10,f1 + nop.i 0 +} { .mfi + nop.m 0 + // Step (6) + // T0 = d * S0 in f11 + (p6) fma.s1 f11=f10,f7,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (7) + // G0 = d * H0 in f10 + (p6) fma.s1 f10=f10,f9,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (8) + // S1 = S0 + e * T0 in f7 + (p6) fma.s.s1 f7=f12,f11,f7 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (9) + // H1 = H0 + e * G0 in f12 + (p6) fma.s1 f12=f12,f10,f9 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (10) + // d1 = a - S1 * S1 in f9 + (p6) fnma.s1 f9=f7,f7,f8 + nop.i 0;;; +} { .mfb + nop.m 0 + // Step (11) + // S = S1 + d1 * H1 in f7 + (p6) fma.s.s0 f8=f9,f12,f7 + (p6) br.ret.sptk b0 ;; +// END SINGLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM +} { .mfb + nop.m 0 + (p0) mov f8 = f7 + (p8) br.ret.sptk b0 ;; +} +// +// This branch includes all those special values that are not negative, +// with the result equal to frcpa(x) +// +.endp sqrtf +ASM_SIZE_DIRECTIVE(sqrtf) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__sqrtf) +ASM_SIZE_DIRECTIVE(__ieee754_sqrtf) +#endif + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mii + add GR_Parameter_Y=-32,sp // Parameter 2 value +(p0) mov GR_Parameter_TAG = 50 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/e_sqrtl.S glibc-2.2.3/sysdeps/ia64/fpu/e_sqrtl.S --- glibc-2.2.2/sysdeps/ia64/fpu/e_sqrtl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/e_sqrtl.S Mon Feb 19 00:48:14 2001 @@ -0,0 +1,281 @@ +.file "sqrtl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ******************************************************************** +// +// History: +// 2/02/00 (hand-optimized) +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ******************************************************************** +// +// Function: Combined sqrtl(x), where +// _ +// sqrtl(x) = |x, for double-extended precision x values +// +// ******************************************************************** +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f7 -f14 +// +// General Purpose Registers: +// r32-r36 (Locals) +// r37-r40 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6, p7, p8 +// +// ******************************************************************** +// +// IEEE Special Conditions: +// +// All faults and exceptions should be raised correctly. +// sqrtl(QNaN) = QNaN +// sqrtl(SNaN) = QNaN +// sqrtl(+/-0) = +/-0 +// sqrtl(negative) = QNaN and error handling is called +// +// ******************************************************************** +// +// Implementation: +// +// Modified Newton-Raphson Algorithm +// +// ******************************************************************** + +#include "libm_support.h" + +GR_SAVE_PFS = r33 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r37 +GR_Parameter_Y = r38 +GR_Parameter_RESULT = r39 +GR_Parameter_TAG = r40 + +FR_X = f15 +FR_Y = f0 +FR_RESULT = f8 + +.section .text +.proc sqrtl# +.global sqrtl# +.align 64 + +sqrtl: +#ifdef _LIBC +.global __sqrtl +.type __sqrtl,@function +__sqrtl: +.global __ieee754_sqrtl +.type __ieee754_sqrtl,@function +__ieee754_sqrtl: +#endif +{ .mlx +alloc r32= ar.pfs,0,5,4,0 + // exponent of +1/2 in r2 + movl r2 = 0x0fffe;; +} { .mfi + // +1/2 in f10 + setf.exp f12 = r2 + // Step (1) + // y0 = 1/sqrt(a) in f7 + frsqrta.s0 f7,p6=f8 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (2) + // H0 = +1/2 * y0 in f9 + (p6) fma.s1 f9=f12,f7,f0 + nop.i 0 +} { .mfi + nop.m 0 + // Step (3) + // S0 = a * y0 in f7 + (p6) fma.s1 f7=f8,f7,f0 + nop.i 0;; +} { .mfi + nop.m 0 + // Make copy input x + mov f13=f8 + nop.i 0 +} { .mfi + nop.m 0 + fclass.m.unc p7,p8 = f8,0x3A + nop.i 0;; +} { .mfi + nop.m 0 + // Step (4) + // d0 = 1/2 - S0 * H0 in f10 + (p6) fnma.s1 f10=f7,f9,f12 + nop.i 0;; +} +{ .mfi + nop.m 0 + (p0) mov f15=f8 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (5) + // H1 = H0 + d0 * H0 in f9 + (p6) fma.s1 f9=f10,f9,f9 + nop.i 0 +} { .mfi + nop.m 0 + // Step (6) + // S1 = S0 + d0 * S0 in f7 + (p6) fma.s1 f7=f10,f7,f7 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (7) + // d1 = 1/2 - S1 * H1 in f10 + (p6) fnma.s1 f10=f7,f9,f12 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (8) + // H2 = H1 + d1 * H1 in f9 + (p6) fma.s1 f9=f10,f9,f9 + nop.i 0 +} { .mfi + nop.m 0 + // Step (9) + // S2 = S1 + d1 * S1 in f7 + (p6) fma.s1 f7=f10,f7,f7 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (10) + // d2 = 1/2 - S2 * H2 in f10 + (p6) fnma.s1 f10=f7,f9,f12 + nop.i 0 +} { .mfi + nop.m 0 + // Step (11) + // e2 = a - S2 * S2 in f12 + (p6) fnma.s1 f12=f7,f7,f8 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (12) + // S3 = S2 + d2 * S2 in f7 + (p6) fma.s1 f7=f12,f9,f7 + nop.i 0 +} { .mfi + nop.m 0 + // Step (13) + // H3 = H2 + d2 * H2 in f9 + (p6) fma.s1 f9=f10,f9,f9 + nop.i 0;; +} { .mfi + nop.m 0 + // Step (14) + // e3 = a - S3 * S3 in f12 + (p6) fnma.s1 f12=f7,f7,f8 + nop.i 0;; +} { .mfb + nop.m 0 + // Step (15) + // S = S3 + e3 * H3 in f7 + (p6) fma.s0 f8=f12,f9,f7 + (p6) br.ret.sptk b0 ;; +} +{ .mfb + (p0) mov GR_Parameter_TAG = 48 + (p0) mov f8 = f7 + (p8) br.ret.sptk b0 ;; +} +// +// This branch includes all those special values that are not negative, +// with the result equal to frcpa(x) +// + + +// END DOUBLE EXTENDED PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM +.endp sqrtl# +ASM_SIZE_DIRECTIVE(sqrtl) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__sqrtl) +ASM_SIZE_DIRECTIVE(__ieee754_sqrtl) +#endif + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/feenablxcpt.c glibc-2.2.3/sysdeps/ia64/fpu/feenablxcpt.c --- glibc-2.2.2/sysdeps/ia64/fpu/feenablxcpt.c Sun Oct 8 17:05:06 2000 +++ glibc-2.2.3/sysdeps/ia64/fpu/feenablxcpt.c Mon Mar 26 20:53:22 2001 @@ -27,7 +27,7 @@ feenableexcept (int excepts) fenv_t new_fpsr; /* Get the current fpsr. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r " (old_fpsr)); + __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (old_fpsr)); new_fpsr = old_fpsr & ~((fenv_t) excepts & FE_ALL_EXCEPT); diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/halfulp.c glibc-2.2.3/sysdeps/ia64/fpu/halfulp.c --- glibc-2.2.2/sysdeps/ia64/fpu/halfulp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/halfulp.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/k_rem_pio2.c glibc-2.2.3/sysdeps/ia64/fpu/k_rem_pio2.c --- glibc-2.2.2/sysdeps/ia64/fpu/k_rem_pio2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/k_rem_pio2.c Mon Feb 19 00:48:24 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/k_rem_pio2f.c glibc-2.2.3/sysdeps/ia64/fpu/k_rem_pio2f.c --- glibc-2.2.2/sysdeps/ia64/fpu/k_rem_pio2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/k_rem_pio2f.c Mon Feb 19 00:48:31 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/k_rem_pio2l.c glibc-2.2.3/sysdeps/ia64/fpu/k_rem_pio2l.c --- glibc-2.2.2/sysdeps/ia64/fpu/k_rem_pio2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/k_rem_pio2l.c Mon Feb 19 00:48:37 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libc_libm_error.c glibc-2.2.3/sysdeps/ia64/fpu/libc_libm_error.c --- glibc-2.2.2/sysdeps/ia64/fpu/libc_libm_error.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libc_libm_error.c Mon Feb 19 14:08:30 2001 @@ -0,0 +1,13 @@ +/* Error handling in libm-style for libc. */ + +#include + +#include "libm_support.h" + + +void +__libm_error_support (void *arg1, void *arg2, void *retval, + error_types input_tag) +{ + __set_errno (ERANGE); +} diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm-test-ulps glibc-2.2.3/sysdeps/ia64/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/ia64/fpu/libm-test-ulps Thu Nov 16 11:12:04 2000 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm-test-ulps Tue Apr 17 14:57:12 2001 @@ -1,31 +1,16 @@ # 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": +Test "acosh (7) == 2.633915793849633417250092694615937": 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.77539749661075306374035335271498708": -float: 2 -ifloat: 2 double: 1 idouble: 1 -ildouble: 1147 -ldouble: 1147 +ldouble: 1 +ildouble: 1 # asinh Test "asinh (0.7) == 0.652666566082355786": @@ -33,17 +18,9 @@ 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 +#Test "atan (0.7) == 0.61072596438920861654375887649023613": +#ildouble: 549 +#ldouble: 549 # atanh Test "atanh (0.7) == 0.8673005276940531944": @@ -75,88 +52,88 @@ 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": +Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i": +Test "Imaginary part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i": ildouble: 1 ldouble: 1 -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 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": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 2 ifloat: 2 ildouble: 329 ldouble: 329 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 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": +ildouble: 7 +ldouble: 7 +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 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": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 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": +Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 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": +Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i": +Test "Imaginary part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i": ildouble: 1 ldouble: 1 -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 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": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 2 ifloat: 2 ildouble: 329 ldouble: 329 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 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": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 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": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 ildouble: 892 ldouble: 892 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 double: 1 @@ -165,22 +142,22 @@ ildouble: 12 ldouble: 12 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 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": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 ildouble: 251 ldouble: 251 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 1 ifloat: 1 double: 1 @@ -189,24 +166,24 @@ ildouble: 474 ldouble: 474 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 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": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 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": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 6 ifloat: 6 double: 1 @@ -215,27 +192,9 @@ ildouble: 447 ldouble: 447 # cbrt -Test "cbrt (-0.001) == -0.1": -ildouble: 717 -ldouble: 717 -Test "cbrt (-27.0) == -3.0": -double: 1 -idouble: 1 -ildouble: 948 -ldouble: 948 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 -Test "cbrt (8) == 2": -ildouble: 191 -ldouble: 191 # ccos Test "Real part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i": @@ -304,8 +263,8 @@ 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": +Test "Real part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": float: 3 ifloat: 3 double: 1 @@ -453,15 +412,17 @@ ldouble: 0.25 # cosh Test "cosh (0.7) == 1.255169005630943018": -ildouble: 309 -ldouble: 309 +ildouble: 2 +ldouble: 2 # cpow Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": double: 1 -float: 4 +float: 5 idouble: 1 -ifloat: 4 +ifloat: 5 +ldouble: 1 +ildouble: 1 Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": float: 2 ifloat: 2 @@ -475,6 +436,9 @@ idouble: 1.104 ifloat: 2.5333 ildouble: 1 ldouble: 1 +Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i": +ldouble: 1 +ildouble: 1 # csin Test "Real part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i": @@ -575,8 +539,8 @@ ldouble: 2 Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i": float: 1 ifloat: 1 -ildouble: 23 -ldouble: 23 +ildouble: 24 +ldouble: 24 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 @@ -602,11 +566,15 @@ ldouble: 3074 Test "erfc (0.7) == 0.32219880616258152702": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "erfc (1.2) == 0.089686021770364619762": float: 2 double: 1 idouble: 1 ifloat: 2 +ldouble: 2 +ildouble: 2 Test "erfc (2.0) == 0.0046777349810472658379": double: 1 idouble: 1 @@ -615,6 +583,8 @@ double: 24 float: 12 idouble: 24 ifloat: 12 +ldouble: 12 +ildouble: 12 # exp Test "exp (0.7) == 2.0137527074704765216": @@ -655,6 +625,8 @@ float: 1 ifloat: 1 double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 # fmod Test "fmod (-6.5, -2.3) == -1.9": @@ -690,6 +662,8 @@ ldouble: 4096 Test "gamma (-0.5) == log(2*sqrt(pi))": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 # hypot Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271": @@ -799,32 +773,46 @@ idouble: 1 Test "jn (10, -1.0) == 0.26306151236874532070e-9": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "jn (10, 0.1) == 0.26905328954342155795e-19": float: 4 ifloat: 4 double: 6 idouble: 6 +ldouble: 1 +ildouble: 1 Test "jn (10, 0.7) == 0.75175911502153953928e-11": double: 4 float: 1 idouble: 4 ifloat: 1 +ldouble: 2 +ildouble: 2 Test "jn (10, 1.0) == 0.26306151236874532070e-9": float: 1 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "jn (10, 2.0) == 0.25153862827167367096e-6": float: 3 ifloat: 3 double: 2 idouble: 2 +ldouble: 1 +ildouble: 1 Test "jn (10, 10.0) == 0.20748610663335885770": float: 2 ifloat: 2 double: 4 idouble: 4 +ldouble: 2 +ildouble: 2 Test "jn (3, 0.1) == 0.000020820315754756261429": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "jn (3, 0.7) == 0.0069296548267508408077": float: 1 ifloat: 1 @@ -840,11 +828,21 @@ float: 1 ifloat: 1 double: 3 idouble: 3 +ldouble: 1 +ildouble: 1 +Test "jn (3, -1.0) == -0.019563353982668405919": +ldouble: 1 +ildouble: 1 +Test "jn (3, 1.0) == 0.019563353982668405919": +ldouble: 1 +ildouble: 1 # lgamma Test "lgamma (-0.5) == log(2*sqrt(pi))": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Test "lgamma (0.7) == 0.26086724653166651439": double: 1 float: 1 @@ -855,9 +853,11 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -883,7 +883,7 @@ ildouble: 1 ldouble: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -906,21 +906,17 @@ ildouble: 725 ldouble: 725 # sin -Test "sin (0.7) == 0.64421768723769105367": -ildouble: 627 -ldouble: 627 +Test "sin (0.7) == 0.64421768723769105367261435139872014": +ildouble: 1 +ldouble: 1 # 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.64421768723769105367261435139872014 in sin_res": +ldouble: 1 +ildouble: 1 Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842625585999019186495 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 @@ -963,7 +959,7 @@ ildouble: 325 ldouble: 325 # tan -Test "tan (0.7) == 0.84228838046307944813": +Test "tan (0.7) == 0.84228838046307944812813500221293775": ildouble: 1401 ldouble: 1401 Test "tan (pi/4) == 1": @@ -985,6 +981,8 @@ double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "tgamma (0.5) == sqrt (pi)": float: 1 ifloat: 1 @@ -1005,6 +1003,8 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 2 +ildouble: 2 Test "y0 (1.0) == 0.088256964215676957983": double: 2 float: 1 @@ -1028,6 +1028,8 @@ float: 1 ifloat: 1 double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 # y1 Test "y1 (0.1) == -6.4589510947020269877": @@ -1056,11 +1058,15 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 Test "y1 (8.0) == -0.15806046173124749426": float: 2 ifloat: 2 double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 # yn Test "yn (0, 0.1) == -1.5342386513503668441": @@ -1073,6 +1079,8 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 2 +ildouble: 2 Test "yn (0, 1.0) == 0.088256964215676957983": double: 2 float: 1 @@ -1096,6 +1104,8 @@ float: 1 ifloat: 1 double: 1 idouble: 1 +ldouble: 2 +ildouble: 2 Test "yn (1, 0.1) == -6.4589510947020269877": double: 1 float: 1 @@ -1122,21 +1132,29 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 2 +ildouble: 2 Test "yn (1, 8.0) == -0.15806046173124749426": float: 2 ifloat: 2 double: 1 idouble: 1 +ldouble: 2 +ildouble: 2 Test "yn (10, 0.1) == -0.11831335132045197885e19": double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 1 +ildouble: 1 Test "yn (10, 0.7) == -0.42447194260703866924e10": double: 6 float: 3 idouble: 6 ifloat: 3 +ldouble: 7 +ildouble: 7 Test "yn (10, 1.0) == -0.12161801427868918929e9": float: 2 ifloat: 2 @@ -1152,6 +1170,8 @@ float: 1 ifloat: 1 double: 3 idouble: 3 +ldouble: 1 +ildouble: 1 Test "yn (3, 0.1) == -5099.3323786129048894": double: 1 float: 1 @@ -1162,6 +1182,8 @@ float: 1 ifloat: 1 double: 2 idouble: 2 +ldouble: 3 +ildouble: 3 Test "yn (3, 2.0) == -1.1277837768404277861": float: 1 ifloat: 1 @@ -1174,17 +1196,11 @@ 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 +ldouble: 1 +ildouble: 1 Function: "asinh": double: 1 @@ -1192,14 +1208,6 @@ idouble: 1 ildouble: 656 ldouble: 656 -Function: "atan": -ildouble: 549 -ldouble: 549 - -Function: "atan2": -ildouble: 549 -ldouble: 549 - Function: "atanh": double: 1 idouble: 1 @@ -1305,8 +1313,6 @@ ldouble: 447 Function: "cbrt": double: 1 idouble: 1 -ildouble: 948 -ldouble: 948 Function: Real part of "ccos": double: 1 @@ -1389,22 +1395,24 @@ ildouble: 529 ldouble: 529 Function: "cosh": -ildouble: 309 -ldouble: 309 +ildouble: 2 +ldouble: 2 Function: Real part of "cpow": double: 1 -float: 4 +float: 5 idouble: 1 -ifloat: 4 +ifloat: 5 +ldouble: 1 +ildouble: 1 Function: Imaginary part of "cpow": double: 1.104 float: 2.5333 idouble: 1.104 ifloat: 2.5333 -ildouble: 2 -ldouble: 2 +ildouble: 4 +ldouble: 4 Function: Real part of "csin": float: 1 @@ -1485,6 +1493,8 @@ double: 24 float: 12 idouble: 24 ifloat: 12 +ldouble: 12 +ildouble: 12 Function: "exp": ildouble: 412 @@ -1521,6 +1531,8 @@ ldouble: 4096 Function: "gamma": double: 1 idouble: 1 +ldouble: 1 +ildouble: 1 Function: "hypot": float: 1 @@ -1547,12 +1559,16 @@ float: 4 ifloat: 4 double: 6 idouble: 6 +ldouble: 2 +ildouble: 2 Function: "lgamma": double: 1 float: 2 idouble: 1 ifloat: 2 +ldouble: 1 +ildouble: 1 Function: "log": double: 1 @@ -1633,23 +1649,31 @@ double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 1 +ildouble: 1 Function: "y0": double: 2 float: 1 idouble: 2 ifloat: 1 +ldouble: 2 +ildouble: 2 Function: "y1": double: 3 float: 2 idouble: 3 ifloat: 2 +ldouble: 1 +ildouble: 1 Function: "yn": double: 6 float: 3 idouble: 6 ifloat: 3 +ldouble: 7 +ildouble: 7 # end of automatic generation diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_atan2_reg.S glibc-2.2.3/sysdeps/ia64/fpu/libm_atan2_reg.S --- glibc-2.2.2/sysdeps/ia64/fpu/libm_atan2_reg.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_atan2_reg.S Mon Feb 19 00:48:53 2001 @@ -0,0 +1,1221 @@ +.file "libm_atan2_reg.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00 Unwind support added + +#include "libm_support.h" + +.data + +.align 64 +ASM_TYPE_DIRECTIVE(Constants_atan#,@object) +Constants_atan: +data4 0x54442D18, 0x3FF921FB, 0x248D3132, 0x3E000000 +// double pi/2, single lo_pi/2, two**(-3) +data4 0xAAAAAAA3, 0xAAAAAAAA, 0x0000BFFD, 0x00000000 // P_1 +data4 0xCCCC54B2, 0xCCCCCCCC, 0x00003FFC, 0x00000000 // P_2 +data4 0x47E4D0C2, 0x92492492, 0x0000BFFC, 0x00000000 // P_3 +data4 0x58870889, 0xE38E38E0, 0x00003FFB, 0x00000000 // P_4 +data4 0x290149F8, 0xBA2E895B, 0x0000BFFB, 0x00000000 // P_5 +data4 0x250F733D, 0x9D88E6D4, 0x00003FFB, 0x00000000 // P_6 +data4 0xFB8745A0, 0x884E51FF, 0x0000BFFB, 0x00000000 // P_7 +data4 0x394396BD, 0xE1C7412B, 0x00003FFA, 0x00000000 // P_8 +data4 0xAAAAA52F, 0xAAAAAAAA, 0x0000BFFD, 0x00000000 // Q_1 +data4 0xC75B60D3, 0xCCCCCCCC, 0x00003FFC, 0x00000000 // Q_2 +data4 0x011F1940, 0x924923AD, 0x0000BFFC, 0x00000000 // Q_3 +data4 0x2A5F89BD, 0xE36F716D, 0x00003FFB, 0x00000000 // Q_4 +// Entries Tbl_hi (double precision) +// B = 1+Index/16+1/32 Index = 0 +// Entries Tbl_lo (single precision) +// B = 1+Index/16+1/32 Index = 0 +data4 0xA935BD8E, 0x3FE9A000, 0x23ACA08F, 0x00000000 +// Entries Tbl_hi (double precision) Index = 0,1,...,15 +// B = 2^(-1)*(1+Index/16+1/32) +// Entries Tbl_lo (single precision) +// Index = 0,1,...,15 B = 2^(-1)*(1+Index/16+1/32) +data4 0x7F175A34, 0x3FDE77EB, 0x238729EE, 0x00000000 +data4 0x73C1A40B, 0x3FE0039C, 0x249334DB, 0x00000000 +data4 0x5B5B43DA, 0x3FE0C614, 0x22CBA7D1, 0x00000000 +data4 0x88BE7C13, 0x3FE1835A, 0x246310E7, 0x00000000 +data4 0xE2CC9E6A, 0x3FE23B71, 0x236210E5, 0x00000000 +data4 0x8406CBCA, 0x3FE2EE62, 0x2462EAF5, 0x00000000 +data4 0x1CD41719, 0x3FE39C39, 0x24B73EF3, 0x00000000 +data4 0x5B795B55, 0x3FE44506, 0x24C11260, 0x00000000 +data4 0x5BB6EC04, 0x3FE4E8DE, 0x242519EE, 0x00000000 +data4 0x1F732FBA, 0x3FE587D8, 0x24D4346C, 0x00000000 +data4 0x115D7B8D, 0x3FE6220D, 0x24ED487B, 0x00000000 +data4 0x920B3D98, 0x3FE6B798, 0x2495FF1E, 0x00000000 +data4 0x8FBA8E0F, 0x3FE74897, 0x223D9531, 0x00000000 +data4 0x289FA093, 0x3FE7D528, 0x242B0411, 0x00000000 +data4 0x576CC2C5, 0x3FE85D69, 0x2335B374, 0x00000000 +data4 0xA99CC05D, 0x3FE8E17A, 0x24C27CFB, 0x00000000 +// +// Entries Tbl_hi (double precision) Index = 0,1,...,15 +// B = 2^(-2)*(1+Index/16+1/32) +// Entries Tbl_lo (single precision) +// Index = 0,1,...,15 B = 2^(-2)*(1+Index/16+1/32) +// +data4 0x510665B5, 0x3FD025FA, 0x24263482, 0x00000000 +data4 0x362431C9, 0x3FD1151A, 0x242C8DC9, 0x00000000 +data4 0x67E47C95, 0x3FD20255, 0x245CF9BA, 0x00000000 +data4 0x7A823CFE, 0x3FD2ED98, 0x235C892C, 0x00000000 +data4 0x29271134, 0x3FD3D6D1, 0x2389BE52, 0x00000000 +data4 0x586890E6, 0x3FD4BDEE, 0x24436471, 0x00000000 +data4 0x175E0F4E, 0x3FD5A2E0, 0x2389DBD4, 0x00000000 +data4 0x9F5FA6FD, 0x3FD68597, 0x2476D43F, 0x00000000 +data4 0x52817501, 0x3FD76607, 0x24711774, 0x00000000 +data4 0xB8DF95D7, 0x3FD84422, 0x23EBB501, 0x00000000 +data4 0x7CD0C662, 0x3FD91FDE, 0x23883A0C, 0x00000000 +data4 0x66168001, 0x3FD9F930, 0x240DF63F, 0x00000000 +data4 0x5422058B, 0x3FDAD00F, 0x23FE261A, 0x00000000 +data4 0x378624A5, 0x3FDBA473, 0x23A8CD0E, 0x00000000 +data4 0x0AAD71F8, 0x3FDC7655, 0x2422D1D0, 0x00000000 +data4 0xC9EC862B, 0x3FDD45AE, 0x2344A109, 0x00000000 +// +// Entries Tbl_hi (double precision) Index = 0,1,...,15 +// B = 2^(-3)*(1+Index/16+1/32) +// Entries Tbl_lo (single precision) +// Index = 0,1,...,15 B = 2^(-3)*(1+Index/16+1/32) +// +data4 0x84212B3D, 0x3FC068D5, 0x239874B6, 0x00000000 +data4 0x41060850, 0x3FC16465, 0x2335E774, 0x00000000 +data4 0x171A535C, 0x3FC25F6E, 0x233E36BE, 0x00000000 +data4 0xEDEB99A3, 0x3FC359E8, 0x239680A3, 0x00000000 +data4 0xC6092A9E, 0x3FC453CE, 0x230FB29E, 0x00000000 +data4 0xBA11570A, 0x3FC54D18, 0x230C1418, 0x00000000 +data4 0xFFB3AA73, 0x3FC645BF, 0x23F0564A, 0x00000000 +data4 0xE8A7D201, 0x3FC73DBD, 0x23D4A5E1, 0x00000000 +data4 0xE398EBC7, 0x3FC8350B, 0x23D4ADDA, 0x00000000 +data4 0x7D050271, 0x3FC92BA3, 0x23BCB085, 0x00000000 +data4 0x601081A5, 0x3FCA217E, 0x23BC841D, 0x00000000 +data4 0x574D780B, 0x3FCB1696, 0x23CF4A8E, 0x00000000 +data4 0x4D768466, 0x3FCC0AE5, 0x23BECC90, 0x00000000 +data4 0x4E1D5395, 0x3FCCFE65, 0x2323DCD2, 0x00000000 +data4 0x864C9D9D, 0x3FCDF110, 0x23F53F3A, 0x00000000 +data4 0x451D980C, 0x3FCEE2E1, 0x23CCB11F, 0x00000000 +data4 0x54442D18, 0x400921FB, 0x33145C07, 0x3CA1A626 // I two doubles +data4 0x54442D18, 0x3FF921FB, 0x33145C07, 0x3C91A626 // I_by_2 two dbls +data4 0x54442D18, 0x3FE921FB, 0x33145C07, 0x3C81A626 // I_by_4 two dbls +data4 0x7F3321D2, 0x4002D97C, 0x4C9E8A0A, 0x3C9A7939 // 3I_by_4 two dbls +ASM_SIZE_DIRECTIVE(Constants_atan#) +.section .text + +.proc __libm_atan2_reg# +.global __libm_atan2_reg# +.align 64 +__libm_atan2_reg: + + +{ .mfi + alloc r32 = ar.pfs,0,20,4,0 +(p0) mov f32 = f8 + nop.i 0 +} +{ .mmi + nop.m 0 +(p0) addl r39 = @ltoff(Constants_atan#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r39 = [r39] + nop.m 999 + nop.i 999 +} +;; + +{ .mfi + nop 999 // EMbo added ... +(p0) mov f33 = f9 + nop.i 0 + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.nm.unc p9,p0 = f32 ,0x1FF + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.nm.unc p8,p0 = f33 ,0x1FF + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p6,p0 = f33 ,0x103 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p7,p0 = f32 ,0x103 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p12,p0 = f33 ,0x0C3 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// Check for NatVals. +// Check for EM Unsupporteds +// Check for NaNs. +// +(p0) fclass.m.unc p13,p0 = f32 ,0x0C3 +(p6) br.cond.sptk L(ATAN_NATVAL);; + } { .mbb + nop 999 // EMbo added ... +(p7) br.cond.sptk L(ATAN_NATVAL) +(p8) br.cond.sptk L(ATAN_UNSUPPORTED);; + } { .mib +(p0) add r40 = 96, r39 + nop 999 // EMbo added ... +(p9) br.cond.sptk L(ATAN_UNSUPPORTED);; + } { .mib +(p0) ldfd f50 = [r39],8 + nop 999 // EMbo added ... +(p12) br.cond.sptk L(ATAN_NAN);; + } { .mfb + nop 999 // EMbo added ... +(p0) fnorm.s1 f33 = f33 +(p13) br.cond.sptk L(ATAN_NAN);; + } { .mfi +(p0) ldfs f51 = [r39],4 +// +// Remove sign bits from exponents +// Load 2**(-3) +// Normalize the input argument. +// +(p0) fnorm.s1 f32 = f32 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) mov f82 = f1 + nop 999;; // EMbo added ... + } { .mmi + nop 999;; // EMbo added ... +(p0) ldfs f78 = [r39],180 + nop 999;; // EMbo added ... + } { .mmi +(p0) getf.exp r36 = f33;; +// +// Get exp and sign of ArgX +// Get exp and sign of ArgY +// Load 2**(-3) and increment ptr to Q_4. +// +(p0) getf.exp r37 = f32 +(p0) shr.u r36 = r36,17;; + } { .mfi + nop 999 // EMbo added ... +(p0) fmerge.s f84 = f1,f32 +(p0) shr.u r37 = r37,17;; + } { .mfi + nop 999 // EMbo added ... +// +// ArgX_abs = |ArgX| +// ArgY_abs = |ArgY| +// sign_X is sign bit of ArgX +// sign_Y is sign bit of ArgY +// +(p0) fmerge.s f83 = f1,f33 +(p0) cmp.eq.unc p8,p9 = 0x00000, r37;; + } { .mfi + nop 999 // EMbo added ... +(p8) fadd.s1 f34 = f0, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p9) fsub.s1 f34 = f0, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmin.s1 f36 = f83, f84 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmax.s1 f35 = f83, f84 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// Is ArgX_abs >= ArgY_abs +// Is sign_Y == 0? +// +(p0) fcmp.ge.s1 p6,p7 = f83,f84 + nop 999;; // EMbo added ... + } { .mii +(p6) cmp.eq.unc p10, p11 = 0x00000, r36 +(p6) add r38 = r0, r0;; +// +// U = max(ArgX_abs,ArgY_abs) +// V = min(ArgX_abs,ArgY_abs) +// if p6, swap = 0 +// if p7, swap = 1 +// +// +// Let M = 1.0 +// if p8, s_Y = 1.0 +// if p9, s_Y = -1.0 +// +(p7) add r38 = 1,r0;; + } { .mfi + nop 999 // EMbo added ... +(p0) frcpa.s1 f37, p6 = f36, f35 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// E = frcpa(V,U) +// +(p10) fsub.s1 f82 = f82, f1 +(p6) br.cond.sptk L(ATAN_STEP2);; + } { .mib + nop 999 // EMbo added ... + nop 999 // EMbo added ... +// /**************************************************/ +// /********************* STEP2 **********************/ +// /**************************************************/ +(p0) br.cond.spnt L(ATAN_SPECIAL_HANDLING);; + } +L(ATAN_STEP2): + { .mlx + nop 999 // EMbo added ... +(p0) movl r47 = 0x8400000000000000 + } { .mlx + nop 999 // EMbo added ... +(p0) movl r48 = 0x0000000000000100;; + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f38 = f37, f36 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fcmp.lt.unc.s0 p0,p9 = f9,f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fcmp.lt.unc.s0 p0,p8 = f8,f1 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// Q = E * V +// +(p11) fadd.s1 f82 = f82, f1 + nop 999;; // EMbo added ... + } { .mfi +(p0) getf.sig r46 = f38 +(p0) fcmp.lt.unc p6,p7 = f38,f78 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f38 = f37, f36 +(p0) extr.u r42 = r46, 59, 4;; + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f50 = f82, f50 +(p0) dep r47 = r42, r47, 59, 4 + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f51 = f82, f51 + nop 999;; // EMbo added ... + } { .mmi + nop 999;; // EMbo added ... +// +// Is Q < 2**(-3)? +// +// +// Do fcmp to raise any denormal operand +// exceptions. +// +(p0) getf.exp r45 = f38 + nop 999;; // EMbo added ... + } { .mib +// +// lookup = b_1 b_2 b_3 B_4 +// +// +// Generate 1.b_1 b_2 b_3 b_4 1 0 0 0 ... 0 +// +(p0) andcm r41 = 0x0003, r45 + nop 999 // EMbo added ... +// +// We waited a few extra cycles so P_lo and P_hi could be calculated. +// Load the constant 256 for loading up table entries. +// +// /**************************************************/ +// /********************* STEP3 **********************/ +// /**************************************************/ +(p6) br.cond.spnt L(ATAN_POLY);; + } { .mii +(p0) setf.sig f39 = r47 +(p0) cmp.eq.unc p8, p9 = 0x0000, r41 +// +// z_hi = s exp 1.b_1 b_2 b_3 b_4 1 0 0 0 ... 0 +// point to beginning of Tbl_hi entries - k = 0. +// +(p0) add r40 = 16, r39 + } { .mmi +(p0) ldfe f73 = [r39],-16;; +(p9) sub r41 = r41,r0,1 +(p9) add r40 = 16,r40 + } { .mfi +(p8) ldfd f48 = [r40],8 +(p0) fmpy.s1 f50 = f34, f50 +(p0) xor r38 = r36,r38;; + } { .mmi +(p0) ldfe f71 = [r39],-16;; +(p8) ldfs f49 = [r40],8 +(p9) pmpy2.r r41 = r41,r48;; + } { .mfi +(p0) ldfe f69 = [r39],-16 +// +// Let z_hi have exponent and sign of original Q +// Load the Tbl_hi(0) else, increment pointer. +// +(p0) fmerge.se f39 = f38,f39 +(p9) shladd r42 = r42,0x0004,r41;; + } { .mmi +(p9) add r40 = r40, r42;; +(p9) ldfd f48 = [r40],8 + nop 999;; // EMbo added ... + } { .mmi +(p0) ldfe f67 = [r39],-16;; +(p9) ldfs f49 = [r40],8 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// U_prime_hi = U + V * z_hi +// Load the Tbl_lo(0) +// +(p0) fma.s1 f40 = f36, f39, f35 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fnma.s1 f42 = f35, f39, f36 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) mov f52 = f48 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) frcpa.s1 f43, p6 = f1, f40 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// U_prime_lo = U - U_prime_hi +// k = k * 256 - result can be 0, 256, or 512. +// +(p0) fsub.s1 f41 = f35, f40 +(p0) cmp.eq.unc p7, p6 = 0x00000, r38 + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f52 = f34, f52 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p7) fadd.s1 f54 = f0, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fsub.s1 f54 = f0, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fnma.s1 f80 = f43, f40, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fadd.s1 f79 = f41, f40 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f41 = f36, f39, f41 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f56 = f54, f52, f50 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f43 = f80, f43, f43 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// U_prime_lo = U - U_hold +// lookup -> lookup * 16 + k +// +// +// V_prime = V - U * z_hi +// U_prime_lo = V * z_hi + U_prime_lo +// +(p0) fsub.s1 f79 = f35, f79 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fnma.s1 f80 = f43, f40, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// C_hi = frcpa(1,U_prime_hi) +// U_prime_lo = U_prime_lo + U_hold +// +// +// C_hi_hold = 1 - C_hi * U_prime_hi (1) +// +// +// C_hi = C_hi + C_hi * C_hi_hold (1) +// +// +// C_hi_hold = 1 - C_hi * U_prime_hi (2) +// +(p0) fadd.s1 f41 = f41, f79 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// C_hi = C_hi + C_hi * C_hi_hold (2) +// +(p0) fma.s1 f43 = f80, f43, f43 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// C_hi_hold = 1 - C_hi * U_prime_hi (3) +// +(p0) fnma.s1 f80 = f43, f40, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// C_hi = C_hi + C_hi * C_hi_hold (3) +// +(p0) fma.s1 f43 = f80, f43, f43 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// w_hi = V_prime * C_hi +// +(p0) fmpy.s1 f44 = f42, f43 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f46 = f44, f44 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// wsq = w_hi * w_hi +// w_lo = = V_prime - w_hi * U_prime_hi +// +(p0) fnma.s1 f45 = f44, f40, f42 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f47 = f46, f73, f71 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly = Q_3 + wsq * Q_4 +// w_lo = = w_lo - w_hi * U_prime_lo +// +(p0) fnma.s1 f45 = f44, f41, f45 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f47 = f46, f47, f69 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly = Q_2 + wsq * poly +// w_lo = = w_lo * C_hi +// +(p0) fmpy.s1 f45 = f43, f45 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f47 = f46, f47, f67 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly = Q_1 + wsq * poly +// A_lo = Tbl_lo + w_lo +// swap = xor(swap,sign_X) +// +(p0) fadd.s1 f53 = f49, f45 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// Is (swap) != 0 ? +// poly = wsq * poly +// A_hi = Tbl_hi +// +(p0) fmpy.s1 f47 = f46, f47 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly = wsq * poly +// +// +// if (p6) sigma = -1.0 +// if (p7) sigma = 1.0 +// +(p0) fmpy.s1 f47 = f44, f47 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// P_hi = s_Y * P_hi +// A_lo = A_lo + poly +// +(p0) fadd.s1 f53 = f53, f47 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// A_lo = A_lo + w_hi +// A_hi = s_Y * A_hi +// +(p0) fadd.s1 f53 = f53, f44 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// result_hi = P_hi + sigma * A_hi +// result_lo = P_lo + sigma * A_lo +// +(p0) fma.s1 f55 = f54, f53, f51 +(p0) br.cond.sptk L(RETURN_ATAN);; +} +// +// result = result_hi + result_lo * s_Y (User Supplied Rounding Mode) +// +// (p0) fma.d.s0 f57 = f55, f34, f56 +// +// /**************************************************/ +// /********************* STEP4 **********************/ +// /**************************************************/ +// +L(ATAN_POLY): +{ .mmi +(p0) xor r38 = r36,r38 +(p0) addl r39 = @ltoff(Constants_atan#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r39 = [r39] + nop.m 999 + nop.i 999 +} +;; + + +{ .mlx + nop 999 // EMbo added ... +(p0) movl r47 = 0x24005;; + } { .mfi +(p0) add r39 = 128, r39 +(p0) fnma.s1 f81 = f37, f35, f1 +(p0) cmp.eq.unc p7, p6 = 0x00000, r38;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f77 = [r39],-16 +// +// Iterate 3 times E = E + E*(1.0 - E*U) +// Also load P_8, P_7, P_6, P_5, P_4 +// E_hold = 1.0 - E * U (1) +// A_temp = Q +// +(p0) mov f85 = f38;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f76 = [r39],-16 +(p6) fsub.s1 f54 = f0, f1;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f75 = [r39],-16 +// +// E = E + E_hold*E (1) +// Point to P_8. +// +(p0) fma.s1 f37 = f37, f81, f37;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f74 = [r39],-16 +(p0) fnma.s1 f64 = f85, f35, f36;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f72 = [r39],-16 +(p7) fadd.s1 f54 = f0, f1;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f70 = [r39],-16 +// +// E_hold = 1.0 - E * U (2) +// +(p0) fnma.s1 f81 = f37, f35, f1;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f68 = [r39],-16 +(p0) fmpy.s1 f50 = f34, f50;; + } { .mmf + nop 999 // EMbo added ... +(p0) ldfe f66 = [r39],-16 +(p0) fmpy.d.s0 f67 = f67, f67 + } { .mfi + nop 999 // EMbo added ... +// +// E = E + E_hold*E (2) +// +(p0) fma.s1 f37 = f37, f81, f37 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// E_hold = 1.0 - E * U (3) +// +(p0) fnma.s1 f81 = f37, f35, f1 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// E = E + E_hold*E (3) +// At this point E approximates 1/U to roughly working precision +// z = V*E approximates V/U +// +(p0) fma.s1 f37 = f37, f81, f37 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// z = V * E +// +(p0) fmpy.s1 f59 = f36, f37 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f64 = f64, f37 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// zsq = z * z +// Also load P_3 +// +(p0) fmpy.s1 f60 = f59, f59 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fadd.s1 f52 = f85, f64 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f62 = f60, f77, f76 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f63 = f60, f70, f68 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// z8 = zsq * zsq +// Also load P_2 +// +(p0) fmpy.s1 f61 = f60, f60 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fsub.s1 f85 = f85, f52 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmerge.s f65 = f52,f52 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f62 = f60, f62, f75 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f63 = f60, f63, f66 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// z8 = z8 * z8 +// Also load P_1 +// poly1 = _4 + zsq*(P_5 + zsq*(P_6 + zsq*(P_7 + zsq*P_8))) +// poly2 = zsq*(P_1 + zsq*(P_2 + zsq*P_3)) +// +// +// poly1 = P_7 + zsq * P_8 +// poly2 = P_2 + zsq * P_3 +// poly1 = P_4 + zsq*(P_5 + zsq*(P_6 + zsq*poly1)) +// poly2 = zsq*(P_1 + zsq*poly2) +// +// +// poly1 = P_6 + zsq * poly1 +// poly2 = P_1 + zsq * poly2 +// poly1 = P_4 + zsq*(P_5 + zsq*poly1) +// poly2 = zsq*poly2 +// +(p0) fmpy.s1 f61 = f61, f61 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fadd.s1 f64 = f85, f64 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f62 = f60, f62, f74 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly1 = P_5 + zsq * poly1 +// poly2 = zsq * poly2 +// poly1 = P_4 + zsq*poly1 +// +(p0) fmpy.s1 f63 = f63, f60 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly1 = P_4 + zsq * poly1 +// swap = xor(swap,sign_X) +// +(p0) fma.s1 f62 = f60, f62, f72 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// poly = z8*poly1 + poly2 (Typo in writeup) +// Is (swap) != 0 ? +// +// +// z_lo = V - A_temp * U +// if (p7) sigma = 1.0 +// Writeup shows A_temp as A_hi +// +// +// z_lo = z_lo * E +// if (p6) sigma = -1.0 +// z_lo = (V - A_temp * U) *E +// +// +// Fixup added to force inexact later - +// A_hi = A_temp + z_lo +// z_lo = (A_temp - A_hi) + z_lo +// z_lo = A_hi - z_lo -A_hi + z_lo = about 0 +// +(p0) fma.s1 f47 = f61, f62, f63 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// A_lo = z * poly + z_lo +// +(p0) fma.s1 f53 = f59, f47, f64 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fadd.s1 f52 = f65, f53 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fsub.s1 f65 = f65, f52 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fmpy.s1 f52 = f34, f52 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fadd.s1 f53 = f65, f53 + nop 999 // EMbo added ... + } { .mfi +(p0) setf.exp f65 = r47 +(p0) fma.s1 f56 = f54, f52, f50 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p6,p0 = f53,0x007 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// P_hi = s_Y * P_hi +// A_hi = s_Y * A_hi +// +// +// result_hi = P_hi + sigma * A_hi +// +(p6) mov f53 = f65 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// tmp = P_hi - result_hi +// +(p0) fsub.s1 f65 = f50, f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fma.s1 f65 = f52, f54, f65 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// tmp = sigma * A_hi + tmp +// sigma = A_lo * sigma + P_lo +// +(p0) fma.s1 f54 = f53, f54, f51 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// result_lo = s_Y * sigma + tmp +// +(p0) fma.s1 f55 = f34, f54, f65 + nop 999;; // EMbo added ... + } { .mfb + nop.m 0 + mov f34 = f1 +(p0) br.cond.sptk L(RETURN_ATAN);; +} +// +// result = result_hi + result_lo (User Supplied Rounding Mode) +// +// (p0) fadd.d.s0 f57 = f55, f56 +L(ATAN_UNSUPPORTED): +L(ATAN_NATVAL): + { .mfb + nop 999 // EMbo added ... +// +// Deal with the NatVal and unsupported cases. +// Raise invalid if warrented. +// +(p0) fmpy.d.s0 f57 = f8, f9 +br.cond.sptk L(RETURN_ATAN);; + } +L(ATAN_NAN): + { .mfb + nop 999 // EMbo added ... +// +// If only one NaN, then generate the resulting +// NaN and return - may raise invalid. +// +(p0) fmpy.d.s0 f57 = f8, f9 +(p0) br.cond.sptk L(RETURN_ATAN);; + } +L(ATAN_SPECIAL_HANDLING): + + { .mmf +(p0) addl r39 = @ltoff(Constants_atan#), gp + nop.m 999 +(p0) fcmp.lt.s0 p0,p7 = f8,f1 + } +;; + +// +// Raise denormal operand faults if necessary +// + +{ .mfi + ld8 r39 = [r39] +(p0) fcmp.lt.s0 p0,p6 = f9,f1 + nop 999;; // EMbo added ... +} +;; + + + +{ .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p6,p7 = f32,0x007 + nop 999;; // EMbo added ... + } { .mlx + nop 999 // EMbo added ... +(p0) movl r47 = 992;; + } { .mib +(p0) add r39 = r39, r47 + nop 999 // EMbo added ... +(p7) br.cond.sptk L(ATAN_ArgY_Not_ZERO);; + } { .mfi + nop 999 // EMbo added ... +(p6) fclass.m.unc p14,p0 = f33,0x035 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fclass.m.unc p15,p0 = f33,0x036 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fclass.m.unc p13,p0 = f33,0x007 + nop 999 // EMbo added ... + } { .mfi +(p0) ldfd f56 = [r39],8 + nop 999 // EMbo added ... + nop 999;; // EMbo added ... + } { .mfi +(p0) ldfd f55 = [r39],-8 +(p14) fmerge.s f56 = f32,f0 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// Return sign_Y * 0 when Y = +/-0 and X > 0 +// +(p14) fmerge.s f55 = f32,f0 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p15) fmerge.s f56 = f32,f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// Return sign_Y * PI when X < -0 +// +// +(p15) fmerge.s f55 = f32,f55 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fadd.d.s0 f57 = f56,f55 + nop.i 0 + } { .bbb +// +// Call error support function for atan(0,0) +// - expected value already computed. +// + nop.b 0 + nop.b 0 +(p0) br.cond.sptk L(RETURN_ATAN) + } +L(ATAN_ArgY_Not_ZERO): + { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p9,p10 = f32,0x023 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +(p9) fclass.m.unc p6,p0 = f33,0x017 +(p10) br.cond.sptk L(ATAN_ArgY_Not_INF);; + } { .mfi +(p6) add r39 = 16,r39 +(p9) fclass.m.unc p7,p0 = f33,0x021 + nop 999;; // EMbo added ... + } { .mmf + nop 999 // EMbo added ... +(p0) ldfd f56 = [r39],8 +(p9) fclass.m.unc p8,p0 = f33,0x022;; + } { .mbb +(p0) ldfd f55 = [r39],-8 + nop 999 // EMbo added ... + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fmerge.s f56 = f32,f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fmerge.s f55 = f32,f55 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// Load I/2 and adjust its sign. +// Return +I/2 when ArgY = +Inf and ArgX = +/-0,normal +// Return -I/2 when ArgY = -Inf and ArgX = +/-0,normal +// +(p6) fadd.d.s0 f57 = f56, f55 +(p6) br.cond.sptk L(RETURN_ATAN);; + } { .mmi +(p7) add r39 = 32,r39;; +(p7) ldfd f56 = [r39],8 + nop 999;; // EMbo added ... + } { .mmi + nop 999;; // EMbo added ... +(p7) ldfd f55 = [r39],-8 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p7) fmerge.s f56 = f32,f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p7) fmerge.s f55 = f32,f55 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// Load PI/4 and adjust its sign. +// Return +PI/4 when ArgY = +Inf and ArgX = +Inf +// Return -PI/4 when ArgY = -Inf and ArgX = +Inf +// +(p7) fadd.d.s0 f57 = f56, f55 +(p7) br.cond.sptk L(RETURN_ATAN);; + } { .mmi +(p8) add r39 = 48,r39;; +(p8) ldfd f56 =[r39],8 + nop 999;; // EMbo added ... + } { .mmi + nop 999;; // EMbo added ... +(p8) ldfd f55 =[r39],-8 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p8) fmerge.s f56 = f32,f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p8) fmerge.s f55 = f32,f55 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// Load I/4 and adjust its sign. +// Return +3I/4 when ArgY = +Inf and ArgX = -Inf +// Return -3I/4 when ArgY = -Inf and ArgX = -Inf +// +(p8) fadd.d.s0 f57 = f56, f55 +(p8) br.cond.sptk L(RETURN_ATAN);; + } +L(ATAN_ArgY_Not_INF): + { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p6,p0 = f33,0x007 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p7,p0 = f33,0x021 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p0) fclass.m.unc p8,p0 = f33,0x022 +(p6) add r39 = 16,r39;; + } { .mfi +(p6) ldfd f56 =[r39],8 + nop 999 // EMbo added ... + nop 999;; // EMbo added ... + } { .mmi + nop 999;; // EMbo added ... +(p6) ldfd f55 =[r39],-8 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fmerge.s f56 = f32,f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p6) fmerge.s f55 = f32,f55 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// return = sign_Y * I/2 when ArgX = +/-0 +// +(p6) fadd.d.s0 f57 = f56, f55 +(p6) br.cond.sptk L(RETURN_ATAN);; + } { .mfi + nop 999 // EMbo added ... +(p7) fmerge.s f56 = f32,f0 + nop 999 // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p7) fmerge.s f55 = f32,f0 + nop 999;; // EMbo added ... + } { .mfb + nop 999 // EMbo added ... +// +// return = sign_Y * 0 when ArgX = Inf +// +(p7) fadd.d.s0 f57 = f56, f55 +(p7) br.cond.sptk L(RETURN_ATAN);; + } { .mfi +(p8) ldfd f56 = [r39],8 + nop 999 // EMbo added ... + nop 999;; // EMbo added ... + } { .mmi + nop 999;; // EMbo added ... +(p8) ldfd f55 = [r39],-8 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p8) fmerge.s f56 = f32,f56 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +(p8) fmerge.s f55 = f32,f55 + nop 999;; // EMbo added ... + } { .mfi + nop 999 // EMbo added ... +// +// return = sign_Y * I when ArgX = -Inf +// +(p8) fadd.d.s0 f57 = f56, f55 + nop 999 // EMbo added ... + };; +L(RETURN_ATAN): +// mov f8 = f57 ;; +// The answer is in f57. +// But Z_hi is f56 +// Z_lo is f55 +// s_Y is f34 +// W is in f9 and untouched + +{ .mfi + nop 999 +mov f8 = f56 + nop.i 0 +};; + +{ .mfi + nop 999 +mov f10 = f55 + nop.i 999 +} +{ .mfb + nop 999 +mov f11 = f34 +br.ret.sptk b0 +};; + +.endp __libm_atan2_reg +ASM_SIZE_DIRECTIVE(__libm_atan2_reg) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_error.c glibc-2.2.3/sysdeps/ia64/fpu/libm_error.c --- glibc-2.2.2/sysdeps/ia64/fpu/libm_error.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_error.c Mon Feb 19 00:49:09 2001 @@ -0,0 +1,3545 @@ +// +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, James +// Edwards, and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. + +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 3/22/00: Updated to support flexible and dynamic error handling. +// 8/16/00: Changed all matherr function-calls to use the pmatherr +// function-pointers. +// 10/03/00: Corrected a scalb type. +// 11/28/00: Changed INPUT_XL to INPUT_XD for scalb_underflow case. +// 12/07/00: Added code to make scalbn error support equivalent to ldexp. +// 2/07/01: Added __declspec(align(16)) to long double constants to correct +// alignment problem. +// + +#include +#include +#include +#include "libm_support.h" + +#ifndef _LIBC +_LIB_VERSION_TYPE +#if defined( __POSIX__ ) +_LIB_VERSION = _POSIX_; +#elif defined( __XOPEN__ ) +_LIB_VERSION = _XOPEN_; +#elif defined( __SVID__ ) +_LIB_VERSION = _SVID_; +#elif defined( __IEEE__ ) +_LIB_VERSION = _IEEE_; +#else +_LIB_VERSION = _ISOC_; +#endif +#endif + +/************************************************************/ +/* matherrX function pointers and setusermatherrX functions */ +/************************************************************/ +#if 0 +int (*pmatherrf)(struct exceptionf*) = MATHERR_F; +int (*pmatherr)(struct EXC_DECL_D*) = MATHERR_D; +int (*pmatherrl)(struct exceptionl*) = matherrl; + +void __libm_setusermatherrf( int(*user_merrf)(struct exceptionf*) ) +{ pmatherrf = ( (user_merrf==NULL)? (MATHERR_F) : (user_merrf) ); } + +void __libm_setusermatherr( int(*user_merr)(struct EXC_DECL_D*) ) +{ pmatherr = ( (user_merr==NULL)? (MATHERR_D) : (user_merr) ); } + +void __libm_setusermatherrl( int(*user_merrl)(struct exceptionl*) ) +{ pmatherrl = ( (user_merrl==NULL)? (matherrl) : (user_merrl) ); } +#endif + +/***********************************************/ +/* error-handling function, libm_error_support */ +/***********************************************/ +void __libm_error_support(void *arg1,void *arg2,void *retval,error_types input_tag) +{ + + +# ifdef __cplusplus +struct __exception exc; +# else +struct exception exc; +# endif + +struct exceptionf excf; +struct exceptionl excl; + +# if defined opensource || defined _LIBC +#define ALIGNIT +#define ALIGNATTR __attribute__ ((__aligned__ (16))) +# else +#define ALIGNIT __declspec(align(16)) +#define ALIGNATTR +# endif + +const char float_inf[4] = {0x00,0x00,0x80,0x7F}; +const char float_huge[4] = {0xFF,0xFF,0x7F,0x7F}; +const char float_zero[4] = {0x00,0x00,0x00,0x00}; +const char float_neg_inf[4] = {0x00,0x00,0x80,0xFF}; +const char float_neg_huge[4] = {0xFF,0xFF,0x7F,0xFF}; +const char float_neg_zero[4] = {0x00,0x00,0x00,0x80}; +ALIGNIT +const char double_inf[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F}; +ALIGNIT +//const char double_huge[8] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0x7F}; +ALIGNIT +const char double_zero[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +ALIGNIT +const char double_neg_inf[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF}; +ALIGNIT +//const char double_neg_huge[8] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF}; +ALIGNIT +const char double_neg_zero[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80}; +ALIGNIT +const char long_double_inf[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00}; +ALIGNIT +//const char long_double_huge[16] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00}; +ALIGNIT +const char long_double_zero[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +ALIGNIT +const char long_double_neg_inf[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00}; +ALIGNIT +//const char long_double_neg_huge[16] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00}; +ALIGNIT +const char long_double_neg_zero[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00}; + +#define RETVAL_HUGE_VALL *(long double *)retval = *(long double *)long_double_inf +#define RETVAL_NEG_HUGE_VALL *(long double *)retval = *(long double *)long_double_neg_inf +#define RETVAL_HUGEL *(long double *)retval = (long double)*(float *)float_huge +#define RETVAL_NEG_HUGEL *(long double *)retval =(long double)*(float*)float_neg_huge + +#define RETVAL_HUGE_VALD *(double *)retval = *(double *) double_inf +#define RETVAL_NEG_HUGE_VALD *(double *)retval = *(double *) double_neg_inf +#define RETVAL_HUGED *(double *)retval = (double) *(float *)float_huge +#define RETVAL_NEG_HUGED *(double *)retval = (double) *(float *) float_neg_huge + +#define RETVAL_HUGE_VALF *(float *)retval = *(float *) float_inf +#define RETVAL_NEG_HUGE_VALF *(float *)retval = *(float *) float_neg_inf +#define RETVAL_HUGEF *(float *)retval = *(float *) float_huge +#define RETVAL_NEG_HUGEF *(float *)retval = *(float *) float_neg_huge + +#define RETVAL_ZEROL *(long double *)retval = *(long double *)long_double_zero +#define RETVAL_ZEROD *(double *)retval = *(double *)double_zero +#define RETVAL_ZEROF *(float *)retval = *(float *)float_zero + +#define RETVAL_NEG_ZEROL *(long double *)retval = *(long double *)long_double_neg_zero +#define RETVAL_NEG_ZEROD *(double *)retval = *(double *)double_neg_zero +#define RETVAL_NEG_ZEROF *(float *)retval = *(float *)float_neg_zero + +#define RETVAL_ONEL *(long double *)retval = (long double) 1.0 +#define RETVAL_ONED *(double *)retval = 1.0 +#define RETVAL_ONEF *(float *)retval = 1.0f + +#define NOT_MATHERRL excl.arg1=*(long double *)arg1;excl.arg2=*(long double *)arg2;excl.retval=*(long double *)retval;if(!matherrl(&excl)) +#define NOT_MATHERRD exc.arg1=*(double *)arg1;exc.arg2=*(double *)arg2;exc.retval=*(double *)retval;if(!MATHERR_D(&exc)) +#define NOT_MATHERRF excf.arg1=*(float *)arg1;excf.arg2=*(float *)arg2;excf.retval=*(float *)retval;if(!MATHERR_F(&excf)) + +#define ifSVID if(_LIB_VERSION==_SVID_) + +#define NAMEL excl.name +#define NAMED exc.name +#define NAMEF excf.name + +// +// These should work OK for MS because they are ints - +// leading underbars are not necessary. +// + +#define DOMAIN 1 +#define SING 2 +#define OVERFLOW 3 +#define UNDERFLOW 4 +#define TLOSS 5 +#define PLOSS 6 + +#define SINGL excl.type = SING +#define DOMAINL excl.type = DOMAIN +#define OVERFLOWL excl.type = OVERFLOW +#define UNDERFLOWL excl.type = UNDERFLOW +#define TLOSSL excl.type = TLOSS +#define SINGD exc.type = SING +#define DOMAIND exc.type = DOMAIN +#define OVERFLOWD exc.type = OVERFLOW +#define UNDERFLOWD exc.type = UNDERFLOW +#define TLOSSD exc.type = TLOSS +#define SINGF excf.type = SING +#define DOMAINF excf.type = DOMAIN +#define OVERFLOWF excf.type = OVERFLOW +#define UNDERFLOWF excf.type = UNDERFLOW +#define TLOSSF excf.type = TLOSS + +#define INPUT_XL (excl.arg1=*(long double*)arg1) +#define INPUT_XD (exc.arg1=*(double*)arg1) +#define INPUT_XF (excf.arg1=*(float*)arg1) +#define INPUT_YL (excl.arg1=*(long double*)arg2) +#define INPUT_YD (exc.arg1=*(double*)arg2) +#define INPUT_YF (excf.arg1=*(float*)arg2) +#define INPUT_RESL (*(long double *)retval) +#define INPUT_RESD (*(double *)retval) +#define INPUT_RESF (*(float *)retval) + +#define WRITEL_LOG_ZERO fputs("logl: SING error\n",stderr) +#define WRITED_LOG_ZERO fputs("log: SING error\n",stderr) +#define WRITEF_LOG_ZERO fputs("logf: SING error\n",stderr) +#define WRITEL_LOG_NEGATIVE fputs("logl: DOMAIN error\n",stderr) +#define WRITED_LOG_NEGATIVE fputs("log: DOMAIN error\n",stderr) +#define WRITEF_LOG_NEGATIVE fputs("logf: DOMAIN error\n",stderr) +#define WRITEL_Y0_ZERO fputs("y0l: DOMAIN error\n",stderr) +#define WRITED_Y0_ZERO fputs("y0: DOMAIN error\n",stderr) +#define WRITEF_Y0_ZERO fputs("y0f: DOMAIN error\n",stderr) +#define WRITEL_Y0_NEGATIVE fputs("y0l: DOMAIN error\n",stderr) +#define WRITED_Y0_NEGATIVE fputs("y0: DOMAIN error\n",stderr) +#define WRITEF_Y0_NEGATIVE fputs("y0f: DOMAIN error\n",stderr) +#define WRITEL_Y1_ZERO fputs("y1l: DOMAIN error\n",stderr) +#define WRITED_Y1_ZERO fputs("y1: DOMAIN error\n",stderr) +#define WRITEF_Y1_ZERO fputs("y1f: DOMAIN error\n",stderr) +#define WRITEL_Y1_NEGATIVE fputs("y1l: DOMAIN error\n",stderr) +#define WRITED_Y1_NEGATIUE fputs("y1: DOMAIN error\n",stderr) +#define WRITEF_Y1_NEGATIVE fputs("y1f: DOMAIN error\n",stderr) +#define WRITEL_YN_ZERO fputs("ynl: DOMAIN error\n",stderr) +#define WRITED_YN_ZERO fputs("yn: DOMAIN error\n",stderr) +#define WRITEF_YN_ZERO fputs("ynf: DOMAIN error\n",stderr) +#define WRITEL_YN_NEGATIVE fputs("ynl: DOMAIN error\n",stderr) +#define WRITED_YN_NEGATIVE fputs("yn: DOMAIN error\n",stderr) +#define WRITEF_YN_NEGATIVE fputs("ynf: DOMAIN error\n",stderr) +#define WRITEL_LOG1P_ZERO fputs("log1pl: SING error\n",stderr) +#define WRITED_LOG1P_ZERO fputs("log1p: SING error\n",stderr) +#define WRITEF_LOG1P_ZERO fputs("log1pf: SING error\n",stderr) +#define WRITEL_LOG1P_NEGATIVE fputs("log1pl: DOMAIN error\n",stderr) +#define WRITED_LOG1P_NEGATIVE fputs("log1p: DOMAIN error\n",stderr) +#define WRITEF_LOG1P_NEGATIVE fputs("log1pf: DOMAIN error\n",stderr) +#define WRITEL_LOG10_ZERO fputs("log10l: SING error\n",stderr) +#define WRITED_LOG10_ZERO fputs("log10: SING error\n",stderr) +#define WRITEF_LOG10_ZERO fputs("log10f: SING error\n",stderr) +#define WRITEL_LOG10_NEGATIVE fputs("log10l: DOMAIN error\n",stderr) +#define WRITED_LOG10_NEGATIVE fputs("log10: DOMAIN error\n",stderr) +#define WRITEF_LOG10_NEGATIVE fputs("log10f: DOMAIN error\n",stderr) +#define WRITEL_POW_ZERO_TO_ZERO fputs("powl(0,0): DOMAIN error\n",stderr) +#define WRITED_POW_ZERO_TO_ZERO fputs("pow(0,0): DOMAIN error\n",stderr) +#define WRITEF_POW_ZERO_TO_ZERO fputs("powf(0,0): DOMAIN error\n",stderr) +#define WRITEL_POW_ZERO_TO_NEGATIVE fputs("powl(0,negative): DOMAIN error\n",stderr) +#define WRITED_POW_ZERO_TO_NEGATIVE fputs("pow(0,negative): DOMAIN error\n",stderr) +#define WRITEF_POW_ZERO_TO_NEGATIVE fputs("powf(0,negative): DOMAIN error\n",stderr) +#define WRITEL_POW_NEG_TO_NON_INTEGER fputs("powl(negative,non-integer): DOMAIN error\n",stderr) +#define WRITED_POW_NEG_TO_NON_INTEGER fputs("pow(negative,non-integer): DOMAIN error\n",stderr) +#define WRITEF_POW_NEG_TO_NON_INTEGER fputs("powf(negative,non-integer): DOMAIN error\n",stderr) +#define WRITEL_ATAN2_ZERO_BY_ZERO fputs("atan2l: DOMAIN error\n",stderr) +#define WRITED_ATAN2_ZERO_BY_ZERO fputs("atan2: DOMAIN error\n",stderr) +#define WRITEF_ATAN2_ZERO_BY_ZERO fputs("atan2f: DOMAIN error\n",stderr) +#define WRITEL_SQRT fputs("sqrtl: DOMAIN error\n",stderr) +#define WRITED_SQRT fputs("sqrt: DOMAIN error\n",stderr) +#define WRITEF_SQRT fputs("sqrtf: DOMAIN error\n",stderr) +#define WRITEL_FMOD fputs("fmodl: DOMAIN error\n",stderr) +#define WRITED_FMOD fputs("fmod: DOMAIN error\n",stderr) +#define WRITEF_FMOD fputs("fmodf: DOMAIN error\n",stderr) +#define WRITEL_REM fputs("remainderl: DOMAIN error\n",stderr) +#define WRITED_REM fputs("remainder: DOMAIN error\n",stderr) +#define WRITEF_REM fputs("remainderf: DOMAIN error\n",stderr) +#define WRITEL_ACOS fputs("acosl: DOMAIN error\n",stderr) +#define WRITED_ACOS fputs("acos: DOMAIN error\n",stderr) +#define WRITEF_ACOS fputs("acosf: DOMAIN error\n",stderr) +#define WRITEL_ASIN fputs("asinl: DOMAIN error\n",stderr) +#define WRITED_ASIN fputs("asin: DOMAIN error\n",stderr) +#define WRITEF_ASIN fputs("asinf: DOMAIN error\n",stderr) +#define WRITEL_ACOSH fputs("acoshl: DOMAIN error\n",stderr) +#define WRITED_ACOSH fputs("acosh: DOMAIN error\n",stderr) +#define WRITEF_ACOSH fputs("acoshf: DOMAIN error\n",stderr) +#define WRITEL_ATANH_GT_ONE fputs("atanhl: DOMAIN error\n",stderr) +#define WRITED_ATANH_GT_ONE fputs("atanh: DOMAIN error\n",stderr) +#define WRITEF_ATANH_GT_ONE fputs("atanhf: DOMAIN error\n",stderr) +#define WRITEL_ATANH_EQ_ONE fputs("atanhl: SING error\n",stderr) +#define WRITED_ATANH_EQ_ONE fputs("atanh: SING error\n",stderr) +#define WRITEF_ATANH_EQ_ONE fputs("atanhf: SING error\n",stderr) +#define WRITEL_LGAMMA_NEGATIVE fputs("lgammal: SING error\n",stderr) +#define WRITED_LGAMMA_NEGATIVE fputs("lgamma: SING error\n",stderr) +#define WRITEF_LGAMMA_NEGATIVE fputs("lgammaf: SING error\n",stderr) +#define WRITEL_GAMMA_NEGATIVE fputs("gammal: SING error\n",stderr) +#define WRITED_GAMMA_NEGATIVE fputs("gamma: SING error\n",stderr) +#define WRITEF_GAMMA_NEGATIVE fputs("gammaf: SING error\n",stderr) +#define WRITEL_J0_TLOSS fputs("j0l: TLOSS error\n",stderr) +#define WRITEL_Y0_TLOSS fputs("y0l: TLOSS error\n",stderr) +#define WRITEL_J1_TLOSS fputs("j1l: TLOSS error\n",stderr) +#define WRITEL_Y1_TLOSS fputs("y1l: TLOSS error\n",stderr) +#define WRITEL_JN_TLOSS fputs("jnl: TLOSS error\n",stderr) +#define WRITEL_YN_TLOSS fputs("ynl: TLOSS error\n",stderr) +#define WRITED_J0_TLOSS fputs("j0: TLOSS error\n",stderr) +#define WRITED_Y0_TLOSS fputs("y0: TLOSS error\n",stderr) +#define WRITED_J1_TLOSS fputs("j1: TLOSS error\n",stderr) +#define WRITED_Y1_TLOSS fputs("y1: TLOSS error\n",stderr) +#define WRITED_JN_TLOSS fputs("jn: TLOSS error\n",stderr) +#define WRITED_YN_TLOSS fputs("yn: TLOSS error\n",stderr) +#define WRITEF_J0_TLOSS fputs("j0f: TLOSS error\n",stderr) +#define WRITEF_Y0_TLOSS fputs("y0f: TLOSS error\n",stderr) +#define WRITEF_J1_TLOSS fputs("j1f: TLOSS error\n",stderr) +#define WRITEF_Y1_TLOSS fputs("y1f: TLOSS error\n",stderr) +#define WRITEF_JN_TLOSS fputs("jnf: TLOSS error\n",stderr) +#define WRITEF_YN_TLOSS fputs("ynf: TLOSS error\n",stderr) + +/***********************/ +/* IEEE Path */ +/***********************/ +if(_LIB_VERSION==_IEEE_) return; + +/***********************/ +/* C9X Path */ +/***********************/ +else if(_LIB_VERSION==_ISOC_) +{ + switch(input_tag) + { + case logl_zero: + case log_zero: + case logf_zero: + case log10l_zero: + case log10_zero: + case log10f_zero: + case log2l_zero: + case log2_zero: + case log2f_zero: + case log1pl_zero: + case log1p_zero: + case log1pf_zero: + case powl_overflow: + case pow_overflow: + case powf_overflow: + case powl_underflow: + case pow_underflow: + case powf_underflow: + case expl_overflow: + case exp_overflow: + case expf_overflow: + case expl_underflow: + case exp_underflow: + case expf_underflow: + case exp2l_overflow: + case exp2_overflow: + case exp2f_overflow: + case exp2l_underflow: + case exp2_underflow: + case exp2f_underflow: + case exp10l_overflow: + case exp10_overflow: + case exp10f_overflow: + case expm1l_overflow: + case expm1_overflow: + case expm1f_overflow: + case hypotl_overflow: + case hypot_overflow: + case hypotf_overflow: + case sinhl_overflow: + case sinh_overflow: + case sinhf_overflow: + case atanhl_eq_one: + case atanh_eq_one: + case atanhf_eq_one: + case scalbl_overflow: + case scalb_overflow: + case scalbf_overflow: + case scalbl_underflow: + case scalb_underflow: + case scalbf_underflow: + case coshl_overflow: + case cosh_overflow: + case coshf_overflow: + case nextafterl_overflow: + case nextafter_overflow: + case nextafterf_overflow: + case scalbnl_overflow: + case scalbn_overflow: + case scalbnf_overflow: + case scalbnl_underflow: + case scalbn_underflow: + case scalbnf_underflow: + case ldexpl_overflow: + case ldexp_overflow: + case ldexpf_overflow: + case ldexpl_underflow: + case ldexp_underflow: + case ldexpf_underflow: + case lgammal_overflow: + case lgamma_overflow: + case lgammaf_overflow: + case lgammal_negative: + case lgamma_negative: + case lgammaf_negative: + case gammal_overflow: + case gamma_overflow: + case gammaf_overflow: + case gammal_negative: + case gamma_negative: + case gammaf_negative: + case ilogbl_zero: + case ilogb_zero: + case ilogbf_zero: + { + ERRNO_RANGE; break; + } + case logl_negative: + case log_negative: + case logf_negative: + case log10l_negative: + case log10_negative: + case log10f_negative: + case log2l_negative: + case log2_negative: + case log2f_negative: + case log1pl_negative: + case log1p_negative: + case log1pf_negative: + case sqrtl_negative: + case sqrt_negative: + case sqrtf_negative: + case atan2l_zero: + case atan2_zero: + case atan2f_zero: + case powl_zero_to_negative: + case powl_neg_to_non_integer: + case pow_zero_to_negative: + case pow_neg_to_non_integer: + case powf_zero_to_negative: + case powf_neg_to_non_integer: + case fmodl_by_zero: + case fmod_by_zero: + case fmodf_by_zero: + case atanhl_gt_one: + case atanh_gt_one: + case atanhf_gt_one: + case acosl_gt_one: + case acos_gt_one: + case acosf_gt_one: + case asinl_gt_one: + case asin_gt_one: + case asinf_gt_one: + case logbl_zero: + case logb_zero: + case logbf_zero: + case acoshl_lt_one: + case acosh_lt_one: + case acoshf_lt_one: + case y0l_zero: + case y0_zero: + case y0f_zero: + case y1l_zero: + case y1_zero: + case y1f_zero: + case ynl_zero: + case yn_zero: + case ynf_zero: + case y0l_negative: + case y0_negative: + case y0f_negative: + case y1l_negative: + case y1_negative: + case y1f_negative: + case ynl_negative: + case yn_negative: + case ynf_negative: + { + ERRNO_DOMAIN; break; + } + default: + abort(); + } + return; +} + +/***********************/ +/* _POSIX_ Path */ +/***********************/ + +else if(_LIB_VERSION==_POSIX_) +{ +switch(input_tag) + { + case gammal_overflow: + case lgammal_overflow: + { + RETVAL_HUGE_VALL; ERRNO_RANGE; break; + } + case gamma_overflow: + case lgamma_overflow: + { + RETVAL_HUGE_VALD; ERRNO_RANGE; break; + } + case gammaf_overflow: + case lgammaf_overflow: + { + RETVAL_HUGE_VALF; ERRNO_RANGE; break; + } + case gammal_negative: + case gamma_negative: + case gammaf_negative: + case lgammal_negative: + case lgamma_negative: + case lgammaf_negative: + { + ERRNO_DOMAIN; break; + } + case ldexpl_overflow: + case ldexpl_underflow: + case ldexp_overflow: + case ldexp_underflow: + case ldexpf_overflow: + case ldexpf_underflow: + case scalbnl_overflow: + case scalbnl_underflow: + case scalbn_overflow: + case scalbn_underflow: + case scalbnf_overflow: + case scalbnf_underflow: + { + ERRNO_RANGE; break; + } + case atanhl_gt_one: + case atanhl_eq_one: + /* atanhl(|x| >= 1) */ + { + ERRNO_DOMAIN; break; + } + case atanh_gt_one: + case atanh_eq_one: + /* atanh(|x| >= 1) */ + { + ERRNO_DOMAIN; break; + } + case atanhf_gt_one: + case atanhf_eq_one: + /* atanhf(|x| >= 1) */ + { + ERRNO_DOMAIN; break; + } + case sqrtl_negative: + /* sqrtl(x < 0) */ + { + ERRNO_DOMAIN; break; + } + case sqrt_negative: + /* sqrt(x < 0) */ + { + ERRNO_DOMAIN; break; + } + case sqrtf_negative: + /* sqrtf(x < 0) */ + { + ERRNO_DOMAIN; break; + } + case y0l_zero: + case y1l_zero: + case ynl_zero: + /* y0l(0) */ + /* y1l(0) */ + /* ynl(0) */ + { + RETVAL_NEG_HUGE_VALL; ERRNO_DOMAIN; break; + } + case y0_zero: + case y1_zero: + case yn_zero: + /* y0(0) */ + /* y1(0) */ + /* yn(0) */ + { + RETVAL_NEG_HUGE_VALD; ERRNO_DOMAIN; break; + } + case y0f_zero: + case y1f_zero: + case ynf_zero: + /* y0f(0) */ + /* y1f(0) */ + /* ynf(0) */ + { + RETVAL_NEG_HUGE_VALF; ERRNO_DOMAIN; break; + } + case y0l_negative: + case y1l_negative: + case ynl_negative: + /* y0l(x < 0) */ + /* y1l(x < 0) */ + /* ynl(x < 0) */ + { + RETVAL_NEG_HUGE_VALL; ERRNO_DOMAIN; break; + } + case y0_negative: + case y1_negative: + case yn_negative: + /* y0(x < 0) */ + /* y1(x < 0) */ + /* yn(x < 0) */ + { + RETVAL_NEG_HUGE_VALD; ERRNO_DOMAIN; break; + } + case y0f_negative: + case y1f_negative: + case ynf_negative: + /* y0f(x < 0) */ + /* y1f(x < 0) */ + /* ynf(x < 0) */ + { + RETVAL_NEG_HUGE_VALF; ERRNO_DOMAIN; break; + } + case logl_zero: + case log1pl_zero: + case log10l_zero: + /* logl(0) */ + /* log1pl(0) */ + /* log10l(0) */ + { + RETVAL_NEG_HUGE_VALL; ERRNO_RANGE; break; + } + case log_zero: + case log1p_zero: + case log10_zero: + case log2l_zero: + /* log(0) */ + /* log1p(0) */ + /* log10(0) */ + { + RETVAL_NEG_HUGE_VALD; ERRNO_RANGE; break; + } + case logf_zero: + case log1pf_zero: + case log10f_zero: + /* logf(0) */ + /* log1pf(0) */ + /* log10f(0) */ + { + RETVAL_NEG_HUGE_VALF; ERRNO_RANGE; break; + } + case logl_negative: + case log1pl_negative: + case log10l_negative: + case log2l_negative: + /* logl(x < 0) */ + /* log1pl(x < 0) */ + /* log10l(x < 0) */ + { + ERRNO_DOMAIN; break; + } + case log_negative: + case log1p_negative: + case log10_negative: + case log2_negative: + /* log(x < 0) */ + /* log1p(x < 0) */ + /* log10(x < 0) */ + { + ERRNO_DOMAIN; break; + } + case logf_negative: + case log1pf_negative: + case log10f_negative: + case log2f_negative: + /* logf(x < 0) */ + /* log1pf(x < 0) */ + /* log10f(x < 0) */ + { + ERRNO_DOMAIN; break; + } + case expl_overflow: + /* expl overflow */ + { + RETVAL_HUGE_VALL; ERRNO_RANGE; break; + } + case exp_overflow: + /* exp overflow */ + { + RETVAL_HUGE_VALD; ERRNO_RANGE; break; + } + case expf_overflow: + /* expf overflow */ + { + RETVAL_HUGE_VALF; ERRNO_RANGE; break; + } + case expl_underflow: + /* expl underflow */ + { + RETVAL_ZEROL; ERRNO_RANGE; break; + } + case exp_underflow: + /* exp underflow */ + { + RETVAL_ZEROD; ERRNO_RANGE; break; + } + case expf_underflow: + /* expf underflow */ + { + RETVAL_ZEROF; ERRNO_RANGE; break; + } + case j0l_gt_loss: + case y0l_gt_loss: + case j1l_gt_loss: + case y1l_gt_loss: + case jnl_gt_loss: + case ynl_gt_loss: + /* jn and yn doubl-extended> XLOSS */ + { + RETVAL_ZEROL; ERRNO_RANGE; break; + } + case j0_gt_loss: + case y0_gt_loss: + case j1_gt_loss: + case y1_gt_loss: + case jn_gt_loss: + case yn_gt_loss: + /* jn and yn double > XLOSS */ + { + RETVAL_ZEROD; ERRNO_RANGE; break; + } + case j0f_gt_loss: + case y0f_gt_loss: + case j1f_gt_loss: + case y1f_gt_loss: + case jnf_gt_loss: + case ynf_gt_loss: + /* j0n and y0n > XLOSS */ + { + RETVAL_ZEROF; ERRNO_RANGE; break; + } + case powl_zero_to_zero: + /* powl 0**0 */ + { + break; + } + case pow_zero_to_zero: + /* pow 0**0 */ + { + break; + } + case powf_zero_to_zero: + /* powf 0**0 */ + { + break; + } + case powl_overflow: + /* powl(x,y) overflow */ + { + if (INPUT_RESL < 0) RETVAL_NEG_HUGE_VALL; + else RETVAL_HUGE_VALL; + ERRNO_RANGE; break; + } + case pow_overflow: + /* pow(x,y) overflow */ + { + if (INPUT_RESD < 0) RETVAL_NEG_HUGE_VALD; + else RETVAL_HUGE_VALD; + ERRNO_RANGE; break; + } + case powf_overflow: + /* powf(x,y) overflow */ + { + if (INPUT_RESF < 0) RETVAL_NEG_HUGE_VALF; + else RETVAL_HUGE_VALF; + ERRNO_RANGE; break; + } + case powl_underflow: + /* powl(x,y) underflow */ + { + RETVAL_ZEROL; ERRNO_RANGE; break; + } + case pow_underflow: + /* pow(x,y) underflow */ + { + RETVAL_ZEROD; ERRNO_RANGE; break; + } + case powf_underflow: + /* powf(x,y) underflow */ + { + RETVAL_ZEROF; ERRNO_RANGE; break; + } + case powl_zero_to_negative: + /* 0**neg */ + { + ERRNO_DOMAIN; break; + } + case pow_zero_to_negative: + /* 0**neg */ + { + ERRNO_DOMAIN; break; + } + case powf_zero_to_negative: + /* 0**neg */ + { + ERRNO_DOMAIN; break; + } + case powl_neg_to_non_integer: + /* neg**non_integral */ + { + ERRNO_DOMAIN; break; + } + case pow_neg_to_non_integer: + /* neg**non_integral */ + { + ERRNO_DOMAIN; break; + } + case powf_neg_to_non_integer: + /* neg**non-integral */ + { + ERRNO_DOMAIN; break; + } + case powl_nan_to_zero: + /* powl(NaN,0.0) */ + /* Special Error */ + { + break; + } + case pow_nan_to_zero: + /* pow(NaN,0.0) */ + { + break; + } + case powf_nan_to_zero: + /* powf(NaN,0.0) */ + { + break; + } + case atan2l_zero: + /* atan2l(0,0) */ + { + /* XXX arg1 and arg2 are switched!!!! */ + if (signbit (*(long double *) arg1)) + /* y == -0 */ + *(long double *) retval = copysignl (M_PIl, *(long double *) arg2); + else + *(long double *) retval = *(long double *) arg2; + ERRNO_DOMAIN; break; + } + case atan2_zero: + /* atan2(0,0) */ + { + /* XXX arg1 and arg2 are switched!!!! */ + if (signbit (*(double *) arg1)) + /* y == -0 */ + *(double *) retval = copysign (M_PI, *(double *) arg2); + else + *(double *) retval = *(double *) arg2; + ERRNO_DOMAIN; break; + } + case + atan2f_zero: + /* atan2f(0,0) */ + { + if (signbit (*(float *) arg2)) + /* y == -0 */ + *(float *) retval = copysignf (M_PI, *(float *) arg1); + else + *(float *) retval = *(float *) arg1; + ERRNO_DOMAIN; break; + } + case expm1l_overflow: + /* expm1 overflow */ + { + ERRNO_RANGE; break; + } + case expm1_overflow: + /* expm1 overflow */ + { + ERRNO_RANGE; break; + } + case expm1f_overflow: + /* expm1f overflow */ + { + ERRNO_RANGE; break; + } + case expm1l_underflow: + /* expm1 underflow */ + { + ERRNO_RANGE; break; + } + case expm1_underflow: + /* expm1 underflow */ + { + ERRNO_RANGE; break; + } + case expm1f_underflow: + /* expm1f underflow */ + { + ERRNO_RANGE; break; + } + case hypotl_overflow: + /* hypotl overflow */ + { + RETVAL_HUGE_VALL; ERRNO_RANGE; break; + } + case hypot_overflow: + /* hypot overflow */ + { + RETVAL_HUGE_VALD; ERRNO_RANGE; break; + } + case hypotf_overflow: + /* hypotf overflow */ + { + RETVAL_HUGE_VALF; ERRNO_RANGE; break; + } + case scalbl_underflow: + /* scalbl underflow */ + { + if (INPUT_XL < 0) RETVAL_NEG_ZEROL; + else RETVAL_ZEROL; + ERRNO_RANGE; break; + } + case scalb_underflow: + /* scalb underflow */ + { + if (INPUT_XD < 0) RETVAL_NEG_ZEROD; + else RETVAL_ZEROD; + ERRNO_RANGE; break; + } + case scalbf_underflow: + /* scalbf underflow */ + { + if (INPUT_XF < 0) RETVAL_NEG_ZEROF; + else RETVAL_ZEROF; + ERRNO_RANGE; break; + } + case scalbl_overflow: + /* scalbl overflow */ + { + if (INPUT_XL < 0) RETVAL_NEG_HUGE_VALL; + else RETVAL_HUGE_VALL; + ERRNO_RANGE; break; + } + case scalb_overflow: + /* scalb overflow */ + { + if (INPUT_XD < 0) RETVAL_NEG_HUGE_VALD; + else RETVAL_HUGE_VALD; + ERRNO_RANGE; break; + } + case scalbf_overflow: + /* scalbf overflow */ + { + if (INPUT_XF < 0) RETVAL_NEG_HUGE_VALF; + else RETVAL_HUGE_VALF; + ERRNO_RANGE; break; + } + case acoshl_lt_one: + /* acoshl(x < 1) */ + { + ERRNO_DOMAIN; break; + } + case acosh_lt_one: + /* acosh(x < 1) */ + { + ERRNO_DOMAIN; break; + } + case acoshf_lt_one: + /* acoshf(x < 1) */ + { + ERRNO_DOMAIN; break; + } + case acosl_gt_one: + /* acosl(x > 1) */ + { + ERRNO_DOMAIN; break; + } + case acos_gt_one: + /* acos(x > 1) */ + { + ERRNO_DOMAIN; break; + } + case acosf_gt_one: + /* acosf(x > 1) */ + { + ERRNO_DOMAIN; break; + } + case asinl_gt_one: + /* asinl(x > 1) */ + { + ERRNO_DOMAIN; break; + } + case asin_gt_one: + /* asin(x > 1) */ + { + ERRNO_DOMAIN; break; + } + case asinf_gt_one: + /* asinf(x > 1) */ + { + ERRNO_DOMAIN; break; + } + case remainderl_by_zero: + case fmodl_by_zero: + /* fmodl(x,0) */ + { + ERRNO_DOMAIN; break; + } + case remainder_by_zero: + case fmod_by_zero: + /* fmod(x,0) */ + { + ERRNO_DOMAIN; break; + } + case remainderf_by_zero: + case fmodf_by_zero: + /* fmodf(x,0) */ + { + ERRNO_DOMAIN; break; + } + case coshl_overflow: + /* coshl overflows */ + { + RETVAL_HUGE_VALL; ERRNO_RANGE; break; + } + case cosh_overflow: + /* cosh overflows */ + { + RETVAL_HUGE_VALD; ERRNO_RANGE; break; + } + case coshf_overflow: + /* coshf overflows */ + { + RETVAL_HUGE_VALF; ERRNO_RANGE; break; + } + case sinhl_overflow: + /* sinhl overflows */ + { + if (INPUT_XL > 0) RETVAL_HUGE_VALL; + else RETVAL_NEG_HUGE_VALL; + ERRNO_RANGE; break; + } + case sinh_overflow: + /* sinh overflows */ + { + if (INPUT_XD > 0) RETVAL_HUGE_VALD; + else RETVAL_NEG_HUGE_VALD; + ERRNO_RANGE; break; + } + case sinhf_overflow: + /* sinhf overflows */ + { + if (INPUT_XF > 0) RETVAL_HUGE_VALF; + else RETVAL_NEG_HUGE_VALF; + ERRNO_RANGE; break; + } + case logbl_zero: + /* logbl(0) */ + { + ERRNO_DOMAIN; break; + } + case logb_zero: + /* logb(0) */ + { + ERRNO_DOMAIN; break; + } + case logbf_zero: + /* logbf(0) */ + { + ERRNO_DOMAIN; break; + } + case ilogbl_zero: + /* ilogbl(0) */ + { + ERRNO_RANGE; break; + } + case ilogb_zero: + /* ilogb(0) */ + { + ERRNO_RANGE; break; + } + case ilogbf_zero: + /* ilogbf(0) */ + { + ERRNO_RANGE; break; + } + default: + abort(); +} +return; +/* _POSIX_ */ +} + +/*******************************/ +/* __SVID__ and __XOPEN__ Path */ +/*******************************/ +else +{ + switch(input_tag) + { + case ldexpl_overflow: + case ldexpl_underflow: + case ldexp_overflow: + case ldexp_underflow: + case ldexpf_overflow: + case ldexpf_underflow: + case scalbnl_overflow: + case scalbnl_underflow: + case scalbn_overflow: + case scalbn_underflow: + case scalbnf_overflow: + case scalbnf_underflow: + { + ERRNO_RANGE; break; + } + case sqrtl_negative: + /* sqrtl(x < 0) */ + { + DOMAINL; NAMEL = (char *) "sqrtl"; + ifSVID + { + RETVAL_ZEROL; + NOT_MATHERRL + { + WRITEL_SQRT; + ERRNO_DOMAIN; + } + } + else + { /* NaN already computed */ + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case sqrt_negative: + /* sqrt(x < 0) */ + { + DOMAIND; NAMED = (char *) "sqrt"; + ifSVID + { + + RETVAL_ZEROD; + NOT_MATHERRD + { + WRITED_SQRT; + ERRNO_DOMAIN; + } + } + else + { /* NaN already computed */ + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case sqrtf_negative: + /* sqrtf(x < 0) */ + { + DOMAINF; NAMEF = (char *) "sqrtf"; + ifSVID + { + RETVAL_ZEROF; + NOT_MATHERRF + { + WRITEF_SQRT; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case logl_zero: + case log2l_zero: + /* logl(0) */ + { + SINGL; NAMEL = (char *) "logl"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_LOG_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case log_zero: + case log2_zero: + /* log(0) */ + { + SINGD; NAMED = (char *) "log"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_LOG_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case logf_zero: + case log2f_zero: + /* logf(0) */ + { + SINGF; NAMEF = (char *) "logf"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_LOG_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + + case logl_negative: + case log2l_negative: + /* logl(x < 0) */ + { + DOMAINL; NAMEL = (char *) "logl"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_LOG_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case log_negative: + case log2_negative: + /* log(x < 0) */ + { + DOMAIND; NAMED = (char *) "log"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_LOG_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case logf_negative: + case log2f_negative: + /* logf(x < 0) */ + { + DOMAINF; NAMEF = (char *) "logf"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_LOG_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF{ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case log1pl_zero: + /* log1pl(-1) */ + { + SINGL; NAMEL = (char *) "log1pl"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_LOG1P_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case log1p_zero: + /* log1p(-1) */ + { + SINGD; NAMED = (char *) "log1p"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_LOG1P_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case log1pf_zero: + /* log1pf(-1) */ + { + SINGF; NAMEF = (char *) "log1pf"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_LOG1P_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {}ERRNO_DOMAIN; + } + *(float *)retval = excf.retval; + break; + } + case log1pl_negative: + /* log1pl(x < -1) */ + { + DOMAINL; NAMEL = (char *) "log1pl"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_LOG1P_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case log1p_negative: + /* log1p(x < -1) */ + { + DOMAIND; NAMED = (char *) "log1p"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_LOG1P_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case log1pf_negative: + /* log1pf(x < -1) */ + { + DOMAINF; NAMEF = (char *) "log1pf"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_LOG1P_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case log10l_zero: + /* log10l(0) */ + { + SINGL; NAMEL = (char *) "log10l"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_LOG10_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case log10_zero: + /* log10(0) */ + { + SINGD; NAMED = (char *) "log10"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_LOG10_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case log10f_zero: + /* log10f(0) */ + { + SINGF; NAMEF = (char *) "log10f"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_LOG10_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case log10l_negative: + /* log10l(x < 0) */ + { + DOMAINL; NAMEL = (char *) "log10l"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_LOG10_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case log10_negative: + /* log10(x < 0) */ + { + DOMAIND; NAMED = (char *) "log10"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_LOG10_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case log10f_negative: + /* log10f(x < 0) */ + { + DOMAINF; NAMEF = (char *) "log10f"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_LOG10_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case expl_overflow: + /* expl overflow */ + { + OVERFLOWL; NAMEL = (char *) "expl"; + ifSVID + { + RETVAL_HUGEL; + } + else + { + RETVAL_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case exp_overflow: + /* exp overflow */ + { + OVERFLOWD; NAMED = (char *) "exp"; + ifSVID + { + RETVAL_HUGED; + } + else + { + RETVAL_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case expf_overflow: + /* expf overflow */ + { + OVERFLOWF; NAMEF = (char *) "expf"; + ifSVID + { + RETVAL_HUGEF; + } + else + { + RETVAL_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case expl_underflow: + /* expl underflow */ + { + UNDERFLOWL; NAMEL = (char *) "expl"; RETVAL_ZEROL; + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case exp_underflow: + /* exp underflow */ + { + UNDERFLOWD; NAMED = (char *) "exp"; RETVAL_ZEROD; + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case expf_underflow: + /* expf underflow */ + { + UNDERFLOWF; NAMEF = (char *) "expf"; RETVAL_ZEROF; + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case powl_zero_to_zero: + /* powl 0**0 */ + { + DOMAINL; NAMEL = (char *) "powl"; + ifSVID + { + RETVAL_ZEROL; + NOT_MATHERRL + { + WRITEL_POW_ZERO_TO_ZERO; + ERRNO_RANGE; + } + *(long double *)retval = excl.retval; + } + else RETVAL_ONEL; + break; + } + case pow_zero_to_zero: + /* pow 0**0 */ + { + DOMAIND; NAMED = (char *) "pow"; + ifSVID + { + RETVAL_ZEROD; + NOT_MATHERRD + { + WRITED_POW_ZERO_TO_ZERO; + ERRNO_RANGE; + } + *(double *)retval = exc.retval; + } + else RETVAL_ONED; + break; + } + case powf_zero_to_zero: + /* powf 0**0 */ + { + DOMAINF; NAMEF = (char *) "powf"; + ifSVID + { + RETVAL_ZEROF; + NOT_MATHERRF + { + WRITEF_POW_ZERO_TO_ZERO; + ERRNO_RANGE; + } + *(float *)retval = excf.retval; + } + else RETVAL_ONEF; + break; + } + case powl_overflow: + /* powl(x,y) overflow */ + { + OVERFLOWL; NAMEL = (char *) "powl"; + ifSVID + { + if (INPUT_XL < 0) RETVAL_NEG_HUGEL; + else RETVAL_HUGEL; + } + else + { + if (INPUT_XL < 0) RETVAL_NEG_HUGE_VALL; + else RETVAL_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case pow_overflow: + /* pow(x,y) overflow */ + { + OVERFLOWD; NAMED = (char *) "pow"; + ifSVID + { + if (INPUT_XD < 0) RETVAL_NEG_HUGED; + else RETVAL_HUGED; + } + else + { + if (INPUT_XD < 0) RETVAL_NEG_HUGE_VALD; + else RETVAL_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case powf_overflow: + /* powf(x,y) overflow */ + { + OVERFLOWF; NAMEF = (char *) "powf"; + ifSVID + { + if (INPUT_XF < 0) RETVAL_NEG_HUGEF; + else RETVAL_HUGEF; + } + else + { + if (INPUT_XF < 0) RETVAL_NEG_HUGE_VALF; + else RETVAL_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case powl_underflow: + /* powl(x,y) underflow */ + { + UNDERFLOWL; NAMEL = (char *) "powl"; RETVAL_ZEROL; + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case pow_underflow: + /* pow(x,y) underflow */ + { + UNDERFLOWD; NAMED = (char *) "pow"; RETVAL_ZEROD; + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case powf_underflow: + /* powf(x,y) underflow */ + { + UNDERFLOWF; NAMEF = (char *) "powf"; RETVAL_ZEROF; + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case powl_zero_to_negative: + /* 0 to neg */ + { + DOMAINL; NAMEL = (char *) "powl"; + ifSVID + { + RETVAL_ZEROL; + NOT_MATHERRL + { + WRITEL_POW_ZERO_TO_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case pow_zero_to_negative: + /* 0**neg */ + { + DOMAIND; NAMED = (char *) "pow"; + ifSVID + { + RETVAL_ZEROD; + NOT_MATHERRD + { + WRITED_POW_ZERO_TO_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case powf_zero_to_negative: + /* 0**neg */ + { + DOMAINF; NAMEF = (char *) "powf"; + RETVAL_NEG_HUGE_VALF; + ifSVID + { + RETVAL_ZEROF; + NOT_MATHERRF + { + WRITEF_POW_ZERO_TO_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case powl_neg_to_non_integer: + /* neg**non_integral */ + { + DOMAINL; NAMEL = (char *) "powl"; + ifSVID + { + RETVAL_ZEROF; + NOT_MATHERRL + { + WRITEL_POW_NEG_TO_NON_INTEGER; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case pow_neg_to_non_integer: + /* neg**non_integral */ + { + DOMAIND; NAMED = (char *) "pow"; + ifSVID + { + RETVAL_ZEROD; + NOT_MATHERRD + { + WRITED_POW_NEG_TO_NON_INTEGER; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case powf_neg_to_non_integer: + /* neg**non-integral */ + { + DOMAINF; NAMEF = (char *) "powf"; + ifSVID + { + RETVAL_ZEROF; + NOT_MATHERRF + { + WRITEF_POW_NEG_TO_NON_INTEGER; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case powl_nan_to_zero: + /* pow(NaN,0.0) */ + /* Special Error */ + { + DOMAINL; NAMEL = (char *) "powl"; INPUT_XL; INPUT_YL; + excl.retval = *(long double *)arg1; + NOT_MATHERRL {ERRNO_DOMAIN;} + *(long double *)retval = excl.retval; + break; + } + case pow_nan_to_zero: + /* pow(NaN,0.0) */ + /* Special Error */ + { + DOMAIND; NAMED = (char *) "pow"; INPUT_XD; INPUT_YD; + exc.retval = *(double *)arg1; + NOT_MATHERRD {ERRNO_DOMAIN;} + *(double *)retval = exc.retval; + break; + } + case powf_nan_to_zero: + /* powf(NaN,0.0) */ + /* Special Error */ + { + DOMAINF; NAMEF = (char *) "powf"; INPUT_XF; INPUT_YF; + excf.retval = *(float *)arg1; + NOT_MATHERRF {ERRNO_DOMAIN;} + *(float *)retval = excf.retval; + break; + } + case atan2l_zero: + /* atan2l(0.0,0.0) */ + { + DOMAINL; NAMEL = (char *) "atan2l"; + RETVAL_ZEROL; + NOT_MATHERRL + { + ifSVID + { + WRITEL_ATAN2_ZERO_BY_ZERO; + } + ERRNO_DOMAIN; + } + *(long double *)retval = excl.retval; + break; + } + case atan2_zero: + /* atan2(0.0,0.0) */ + { + DOMAIND; NAMED = (char *) "atan2"; + RETVAL_ZEROD; + NOT_MATHERRD + { + ifSVID + { + WRITED_ATAN2_ZERO_BY_ZERO; + } + ERRNO_DOMAIN; + } + *(double *)retval = exc.retval; + break; + } + case atan2f_zero: + /* atan2f(0.0,0.0) */ + { + DOMAINF; NAMEF = (char *) "atan2f"; + RETVAL_ZEROF; + NOT_MATHERRF + ifSVID + { + WRITEF_ATAN2_ZERO_BY_ZERO; + } + ERRNO_DOMAIN; + *(float *)retval = excf.retval; + break; + } + case expm1_overflow: + /* expm1(finite) overflow */ + /* Overflow is the only documented */ + /* special value. */ + { + ERRNO_RANGE; + break; + } + case expm1f_overflow: + /* expm1f(finite) overflow */ + { + ERRNO_RANGE; + break; + } + case expm1_underflow: + /* expm1(finite) underflow */ + /* Underflow is not documented */ + /* special value. */ + { + ERRNO_RANGE; + break; + } + case expm1f_underflow: + /* expm1f(finite) underflow */ + { + ERRNO_RANGE; + break; + } + case scalbl_underflow: + /* scalbl underflow */ + { + UNDERFLOWL; NAMEL = (char *) "scalbl"; + if (INPUT_XL < 0.0L) RETVAL_NEG_ZEROL; + else RETVAL_ZEROL; + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excf.retval; + break; + } + case scalb_underflow: + /* scalb underflow */ + { + UNDERFLOWD; NAMED = (char *) "scalb"; + if (INPUT_XD < 0.0) RETVAL_NEG_ZEROD; + else RETVAL_ZEROD; + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case scalbf_underflow: + /* scalbf underflow */ + { + UNDERFLOWF; NAMEF = (char *) "scalbf"; + if (INPUT_XF < 0.0) RETVAL_NEG_ZEROF; + else RETVAL_ZEROF; + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case scalbl_overflow: + /* scalbl overflow */ + { + OVERFLOWL; NAMEL = (char *) "scalbl"; + if (INPUT_XL < 0) RETVAL_NEG_HUGE_VALL; + else RETVAL_HUGE_VALL; + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case scalb_overflow: + /* scalb overflow */ + { + OVERFLOWD; NAMED = (char *) "scalb"; + if (INPUT_XD < 0) RETVAL_NEG_HUGE_VALD; + else RETVAL_HUGE_VALD; + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case scalbf_overflow: + /* scalbf overflow */ + { + OVERFLOWF; NAMEF = (char *) "scalbf"; + if (INPUT_XF < 0) RETVAL_NEG_HUGE_VALF; + else RETVAL_HUGE_VALF; + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case hypotl_overflow: + /* hypotl overflow */ + { + OVERFLOWL; NAMEL = (char *) "hypotl"; + ifSVID + { + RETVAL_HUGEL; + } + else + { + RETVAL_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case hypot_overflow: + /* hypot overflow */ + { + OVERFLOWD; NAMED = (char *) "hypot"; + ifSVID + { + RETVAL_HUGED; + } + else + { + RETVAL_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case hypotf_overflow: + /* hypotf overflow */ + { + OVERFLOWF; NAMEF = (char *) "hypotf"; + ifSVID + { + RETVAL_HUGEF; + } + else + { + RETVAL_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case acosl_gt_one: + /* acosl(x > 1) */ + { + DOMAINL; NAMEL = (char *) "acosl"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_ACOS; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case acos_gt_one: + /* acos(x > 1) */ + { + DOMAIND; NAMED = (char *) "acos"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_ACOS; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case acosf_gt_one: + /* acosf(x > 1) */ + { + DOMAINF; NAMEF = (char *) "acosf"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_ACOS; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case asinl_gt_one: + /* asinl(x > 1) */ + { + DOMAINL; NAMEL = (char *) "asinl"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_ASIN; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case asin_gt_one: + /* asin(x > 1) */ + { + DOMAIND; NAMED = (char *) "asin"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_ASIN; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case asinf_gt_one: + /* asinf(x > 1) */ + { + DOMAINF; NAMEF = (char *) "asinf"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_ASIN; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case coshl_overflow: + /* coshl overflow */ + { + OVERFLOWL; NAMEL = (char *) "coshl"; + ifSVID + { + RETVAL_HUGEL; + } + else + { + RETVAL_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case cosh_overflow: + /* cosh overflow */ + { + OVERFLOWD; NAMED = (char *) "cosh"; + ifSVID + { + RETVAL_HUGED; + } + else + { + RETVAL_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case coshf_overflow: + /* coshf overflow */ + { + OVERFLOWF; NAMEF = (char *) "coshf"; + ifSVID + { + RETVAL_HUGEF; + } + else + { + RETVAL_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case sinhl_overflow: + /* sinhl overflow */ + { + OVERFLOWL; NAMEL = (char *) "sinhl"; + ifSVID + { + if (INPUT_XL > 0.0) RETVAL_HUGEL; + else RETVAL_NEG_HUGEL; + } + else + { + if (INPUT_XL > 0.0) RETVAL_HUGE_VALL; + else RETVAL_NEG_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case sinh_overflow: + /* sinh overflow */ + { + OVERFLOWD; NAMED = (char *) "sinh"; + ifSVID + { + if (INPUT_XD > 0.0) RETVAL_HUGED; + else RETVAL_NEG_HUGED; + } + else + { + if (INPUT_XD > 0.0) RETVAL_HUGE_VALD; + else RETVAL_NEG_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case sinhf_overflow: + /* sinhf overflow */ + { + OVERFLOWF; NAMEF = (char *) "sinhf"; + ifSVID + { + if( INPUT_XF > 0.0) RETVAL_HUGEF; + else RETVAL_NEG_HUGEF; + } + else + { + if (INPUT_XF > 0.0) RETVAL_HUGE_VALF; + else RETVAL_NEG_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case acoshl_lt_one: + /* acoshl(x < 1) */ + { + DOMAINL; NAMEL = (char *) "acoshl"; + ifSVID + { + NOT_MATHERRL + { + WRITEL_ACOSH; + ERRNO_DOMAIN; + } + } + else NOT_MATHERRL {ERRNO_DOMAIN;} + *(long double *)retval = excl.retval; + break; + } + case acosh_lt_one: + /* acosh(x < 1) */ + { + DOMAIND; NAMED = (char *) "acosh"; + ifSVID + { + NOT_MATHERRD + { + WRITEL_ACOSH; + ERRNO_DOMAIN; + } + } + else NOT_MATHERRD {ERRNO_DOMAIN;} + *(double *)retval = exc.retval; + break; + } + case acoshf_lt_one: + /* acoshf(x < 1) */ + { + DOMAINF; NAMEF = (char *) "acoshf"; + ifSVID + { + NOT_MATHERRF + { + WRITEF_ACOSH; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + ERRNO_DOMAIN; break; + } + case atanhl_gt_one: + /* atanhl(|x| > 1) */ + { + DOMAINL; NAMEL = (char *) "atanhl"; + ifSVID + { + NOT_MATHERRL + { + WRITEL_ATANH_GT_ONE; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRL {ERRNO_DOMAIN;} + } + break; + } + case atanh_gt_one: + /* atanh(|x| > 1) */ + { + DOMAIND; NAMED = (char *) "atanh"; + ifSVID + { + NOT_MATHERRD + { + WRITED_ATANH_GT_ONE; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRD {ERRNO_DOMAIN;} + } + break; + } + case atanhf_gt_one: + /* atanhf(|x| > 1) */ + { + DOMAINF; NAMEF = (char *) "atanhf"; + ifSVID + { + NOT_MATHERRF + { + WRITEF_ATANH_GT_ONE; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + break; + } + case atanhl_eq_one: + /* atanhl(|x| == 1) */ + { + SINGL; NAMEL = (char *)"atanhl"; + ifSVID + { + NOT_MATHERRL + { + WRITEL_ATANH_EQ_ONE; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRL {ERRNO_DOMAIN;} + } + break; + } + case atanh_eq_one: + /* atanh(|x| == 1) */ + { + SINGD; NAMED = (char *) "atanh"; + ifSVID + { + NOT_MATHERRD + { + WRITED_ATANH_EQ_ONE; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRD {ERRNO_DOMAIN;} + } + break; + } + case atanhf_eq_one: + /* atanhf(|x| == 1) */ + { + SINGF; NAMEF = (char *) "atanhf"; + ifSVID + { + NOT_MATHERRF + { + WRITEF_ATANH_EQ_ONE; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + break; + } + case gammal_overflow: + /* gammal overflow */ + { + OVERFLOWL; NAMEL = (char *) "gammal"; + ifSVID + { + RETVAL_HUGEL; + } + else + { + RETVAL_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case gamma_overflow: + /* gamma overflow */ + { + OVERFLOWD; NAMED = (char *) "gamma"; + ifSVID + { + RETVAL_HUGED; + } + else + { + RETVAL_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case gammaf_overflow: + /* gammaf overflow */ + { + OVERFLOWF; NAMEF = (char *) "gammaf"; + ifSVID + { + RETVAL_HUGEF; + } + else + { + RETVAL_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case lgammal_overflow: + /* lgammal overflow */ + { + OVERFLOWL; NAMEL = (char *) "lgammal"; + ifSVID + { + RETVAL_HUGEL; + } + else + { + RETVAL_HUGE_VALL; + } + NOT_MATHERRL {ERRNO_RANGE;} + *(long double *)retval = excl.retval; + break; + } + case lgamma_overflow: + /* lgamma overflow */ + { + OVERFLOWD; NAMED = (char *) "lgamma"; + ifSVID + { + RETVAL_HUGED; + } + else + { + RETVAL_HUGE_VALD; + } + NOT_MATHERRD {ERRNO_RANGE;} + *(double *)retval = exc.retval; + break; + } + case lgammaf_overflow: + /* lgammaf overflow */ + { + OVERFLOWF; NAMEF = (char *) "lgammaf"; + ifSVID + { + RETVAL_HUGEF; + } + else + { + RETVAL_HUGE_VALF; + } + NOT_MATHERRF {ERRNO_RANGE;} + *(float *)retval = excf.retval; + break; + } + case lgammal_negative: + /* lgammal -int or 0 */ + { + SINGL; NAMEL = (char *) "lgammal"; + ifSVID + { + RETVAL_HUGEL; + NOT_MATHERRL + { + WRITEL_LGAMMA_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case lgamma_negative: + /* lgamma -int or 0 */ + { + SINGD; NAMED = (char *) "lgamma"; + ifSVID + { + RETVAL_HUGED; + NOT_MATHERRD + { + WRITED_LGAMMA_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case lgammaf_negative: + /* lgammaf -int or 0 */ + { + SINGF; NAMEF = (char *) "lgammaf"; + ifSVID + { + RETVAL_HUGEF; + NOT_MATHERRF + { + WRITEF_LGAMMA_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case gammal_negative: + /* gammal -int or 0 */ + { + SINGL; NAMEL = (char *) "gammal"; + ifSVID + { + RETVAL_HUGEL; + NOT_MATHERRL + { + WRITEL_GAMMA_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case gamma_negative: + /* gamma -int or 0 */ + { + SINGD; NAMED = (char *) "gamma"; + ifSVID + { + RETVAL_HUGED; + NOT_MATHERRD + { + WRITED_GAMMA_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case gammaf_negative: + /* gammaf -int or 0 */ + { + SINGF; NAMEF = (char *) "gammaf"; + ifSVID + { + RETVAL_HUGEF; + NOT_MATHERRF + { + WRITEF_GAMMA_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case j0l_gt_loss: + /* j0l > loss */ + { + TLOSSL; NAMEL = (char *) "j0l"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_J0_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRL {ERRNO_RANGE;} + } + *(long double *)retval = excl.retval; + break; + } + case j0_gt_loss: + /* j0 > loss */ + { + TLOSSD; NAMED = (char *) "j0"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_J0_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRD {ERRNO_RANGE;} + } + *(double*)retval = exc.retval; + break; + } + case j0f_gt_loss: + /* j0f > loss */ + { + TLOSSF; NAMEF = (char *) "j0f"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_J0_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRF {ERRNO_RANGE;} + } + *(float*)retval = excf.retval; + break; + } + case j1l_gt_loss: + /* j1l > loss */ + { + TLOSSL; NAMEL = (char *) "j1l"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_J1_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRL {ERRNO_RANGE;} + } + *(long double *)retval = excl.retval; + break; + } + case j1_gt_loss: + /* j1 > loss */ + { + TLOSSD; NAMED = (char *) "j1"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_J1_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRD {ERRNO_RANGE;} + } + *(double*)retval = exc.retval; + break; + } + case j1f_gt_loss: + /* j1f > loss */ + { + TLOSSF; NAMEF = (char *) "j1f"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_J1_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRF {ERRNO_RANGE;} + } + *(float*)retval = excf.retval; + break; + } + case jnl_gt_loss: + /* jnl > loss */ + { + TLOSSL; NAMEL = (char *) "jnl"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_JN_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRL {ERRNO_RANGE;} + } + *(long double *)retval = excl.retval; + break; + } + case jn_gt_loss: + /* jn > loss */ + { + TLOSSD; NAMED = (char *) "jn"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_JN_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRD {ERRNO_RANGE;} + } + *(double*)retval = exc.retval; + break; + } + case jnf_gt_loss: + /* jnf > loss */ + { + TLOSSF; NAMEF = (char *) "jnf"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_JN_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRF {ERRNO_RANGE;} + } + *(float*)retval = excf.retval; + break; + } + case y0l_gt_loss: + /* y0l > loss */ + { + TLOSSL; NAMEL = (char *) "y0l"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_Y0_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRL {ERRNO_RANGE;} + } + *(long double *)retval = excl.retval; + break; + } + case y0_gt_loss: + /* y0 > loss */ + { + TLOSSD; NAMED = (char *) "y0"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_Y0_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRD {ERRNO_RANGE;} + } + *(double*)retval = exc.retval; + break; + } + case y0f_gt_loss: + /* y0f > loss */ + { + TLOSSF; NAMEF = (char *) "y0f"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_Y0_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRF {ERRNO_RANGE;} + } + *(float*)retval = excf.retval; + break; + } + case y0l_zero: + /* y0l(0) */ + { + DOMAINL; NAMEL = (char *) "y0l"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_Y0_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case y0_zero: + /* y0(0) */ + { + DOMAIND; NAMED = (char *) "y0"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_Y0_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case y0f_zero: + /* y0f(0) */ + { + DOMAINF; NAMEF = (char *) "y0f"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_Y0_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case y1l_gt_loss: + /* y1l > loss */ + { + TLOSSL; NAMEL = (char *) "y1l"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_Y1_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRL {ERRNO_RANGE;} + } + *(long double *)retval = excl.retval; + break; + } + case y1_gt_loss: + /* y1 > loss */ + { + TLOSSD; NAMED = (char *) "y1"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_Y1_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRD {ERRNO_RANGE;} + } + *(double*)retval = exc.retval; + break; + } + case y1f_gt_loss: + /* y1f > loss */ + { + TLOSSF; NAMEF = (char *) "y1f"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_Y1_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRF {ERRNO_RANGE;} + } + *(float*)retval = excf.retval; + break; + } + case y1l_zero: + /* y1l(0) */ + { + DOMAINL; NAMEL = (char *) "y1l"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_Y1_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case y1_zero: + /* y1(0) */ + { + DOMAIND; NAMED = (char *) "y1"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_Y1_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case y1f_zero: + /* y1f(0) */ + { + DOMAINF; NAMEF = (char *) "y1f"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_Y1_ZERO; + ERRNO_DOMAIN; + } + }else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case ynl_gt_loss: + /* ynl > loss */ + { + TLOSSL; NAMEL = (char *) "ynl"; + RETVAL_ZEROL; + ifSVID + { + NOT_MATHERRL + { + WRITEL_YN_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRL {ERRNO_RANGE;} + } + *(long double *)retval = excl.retval; + break; + } + case yn_gt_loss: + /* yn > loss */ + { + TLOSSD; NAMED = (char *) "yn"; + RETVAL_ZEROD; + ifSVID + { + NOT_MATHERRD + { + WRITED_YN_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRD {ERRNO_RANGE;} + } + *(double*)retval = exc.retval; + break; + } + case ynf_gt_loss: + /* ynf > loss */ + { + TLOSSF; NAMEF = (char *) "ynf"; + RETVAL_ZEROF; + ifSVID + { + NOT_MATHERRF + { + WRITEF_YN_TLOSS; + ERRNO_RANGE; + } + } + else + { + NOT_MATHERRF {ERRNO_RANGE;} + } + *(float*)retval = excf.retval; + break; + } + case ynl_zero: + /* ynl(0) */ + { + DOMAINL; NAMEL = (char *) "ynl"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_YN_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case yn_zero: + /* yn(0) */ + { + DOMAIND; NAMED = (char *) "yn"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_YN_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case ynf_zero: + /* ynf(0) */ + { + DOMAINF; NAMEF = (char *) "ynf"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_YN_ZERO; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case y0l_negative: + /* y0l(x<0) */ + { + DOMAINL; NAMEL = (char *) "y0l"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_Y0_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case y0_negative: + /* y0(x<0) */ + { + DOMAIND; NAMED = (char *) "y0"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_Y0_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case y0f_negative: + /* y0f(x<0) */ + { + DOMAINF; NAMEF = (char *) "y0f"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_Y0_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case y1l_negative: + /* y1l(x<0) */ + { + DOMAINL; NAMEL = (char *) "y1l"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_Y1_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case y1_negative: + /* y1(x<0) */ + { + DOMAIND; NAMED = (char *) "y1"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_Y1_NEGATIUE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case y1f_negative: + /* y1f(x<0) */ + { + DOMAINF; NAMEF = (char *) "y1f"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_Y1_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case ynl_negative: + /* ynl(x<0) */ + { + DOMAINL; NAMEL = (char *) "ynl"; + ifSVID + { + RETVAL_NEG_HUGEL; + NOT_MATHERRL + { + WRITEL_YN_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALL; + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case yn_negative: + /* yn(x<0) */ + { + DOMAIND; NAMED = (char *) "yn"; + ifSVID + { + RETVAL_NEG_HUGED; + NOT_MATHERRD + { + WRITED_YN_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALD; + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case ynf_negative: + /* ynf(x<0) */ + { + DOMAINF; NAMEF = (char *) "ynf"; + ifSVID + { + RETVAL_NEG_HUGEF; + NOT_MATHERRF + { + WRITEF_YN_NEGATIVE; + ERRNO_DOMAIN; + } + } + else + { + RETVAL_NEG_HUGE_VALF; + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case fmodl_by_zero: + /* fmodl(x,0) */ + { + DOMAINL; NAMEL = (char *) "fmodl"; + ifSVID + { + *(long double *)retval = *(long double *)arg1; + NOT_MATHERRL + { + WRITEL_FMOD; + ERRNO_DOMAIN; + } + } + else + { /* NaN already computed */ + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case fmod_by_zero: + /* fmod(x,0) */ + { + DOMAIND; NAMED = (char *) "fmod"; + ifSVID + { + *(double *)retval = *(double *)arg1; + NOT_MATHERRD + { + WRITED_FMOD; + ERRNO_DOMAIN; + } + } + else + { /* NaN already computed */ + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case fmodf_by_zero: + /* fmodf(x,0) */ + { + DOMAINF; NAMEF = (char *) "fmodf"; + ifSVID + { + *(float *)retval = *(float *)arg1; + NOT_MATHERRF + { + WRITEF_FMOD; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + case remainderl_by_zero: + /* remainderl(x,0) */ + { + DOMAINL; NAMEL = (char *) "remainderl"; + ifSVID + { + NOT_MATHERRL + { + WRITEL_REM; + ERRNO_DOMAIN; + } + } + else + { /* NaN already computed */ + NOT_MATHERRL {ERRNO_DOMAIN;} + } + *(long double *)retval = excl.retval; + break; + } + case remainder_by_zero: + /* remainder(x,0) */ + { + DOMAIND; NAMED = (char *) "remainder"; + ifSVID + { + NOT_MATHERRD + { + WRITED_REM; + ERRNO_DOMAIN; + } + } + else + { /* NaN already computed */ + NOT_MATHERRD {ERRNO_DOMAIN;} + } + *(double *)retval = exc.retval; + break; + } + case remainderf_by_zero: + /* remainderf(x,0) */ + { + DOMAINF; NAMEF = (char *) "remainderf"; + ifSVID + { + NOT_MATHERRF + { + WRITEF_REM; + ERRNO_DOMAIN; + } + } + else + { + NOT_MATHERRF {ERRNO_DOMAIN;} + } + *(float *)retval = excf.retval; + break; + } + default: + abort(); + } + return; + } +} diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_frexp4.S glibc-2.2.3/sysdeps/ia64/fpu/libm_frexp4.S --- glibc-2.2.2/sysdeps/ia64/fpu/libm_frexp4.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_frexp4.S Mon Feb 19 00:49:21 2001 @@ -0,0 +1,185 @@ +.file "libm_frexp_4.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 3/20/00: Improved speed +// 6/01/00: Fixed bug when x a double-extended denormal +// 12/08/00 Corrected label on .endp +// +// API +//============================================================== +// double frexp(double x, int* y) +// double __libm_frexp_4(double x, int* y) +// where int* y is a 32-bit integer +// +// Overview of operation +//============================================================== +// break a floating point x number into fraction and an exponent +// The fraction is returned as a double +// The exponent is returned as an integer pointed to by y +// This is a true (not a biased exponent) but 0fffe is subtracted +// as a bias instead of 0xffff. This is because the fraction returned +// is between 0.5 and 1.0, not the expected IEEE range. +// +// The fraction is 0.5 <= fraction < 1.0 +// +// Registers used +//============================================================== +// +// general registers: +// r14 exponent bias for x negative +// r15 exponent bias for x positive +// r16 signexp of x +// r17 exponent mask +// r18 exponent of x +// r19 exponent result +// r20 signexp of 2^64 +// r32 on input contains the 64-bit IEEE double that is in f8 +// r33 on input pointer to 32-bit integer for exponent +// +// predicate registers: +// p6 set if x is Nan, zero, or infinity +// p7 set if x negative +// p8 set if x positive +// p9 set if x double-extended denormal +// +// floating-point registers: +// f8 input, output +// f9 normalized x +// f10 signexp for significand result for x positive +// f11 signexp for significand result for x negative +// f12 2^64 + +#include "libm_support.h" + +.align 32 +.global __libm_frexp_4# + +.section .text +.proc __libm_frexp_4# +.align 32 + +__libm_frexp_4: + +// Set signexp for significand result for x>0 +// If x is a NaN, zero, or infinity, return it. +// Put 0 in the int pointer. +// x NAN, ZERO, INFINITY? +// Set signexp for significand result for x<0 +{ .mfi +(p0) mov r15 = 0x0fffe +(p0) fclass.m.unc p6,p0 = f8, 0xe7 +(p0) mov r14 = 0x2fffe +} +// Form signexp of 2^64 in case x double-extended denormal +// Save the normalized value of input in f9 +// The normalization also sets fault flags and takes faults if necessary +{ .mfi +(p0) mov r20 = 0x1003f +(p0) fnorm f9 = f8 + nop.i 999 ;; +} + +// Move signexp for significand result for x>0 to FP reg +// Form 2^64 in case x double-extended denormal +{ .mmi +(p0) setf.exp f10 = r15 +(p0) setf.exp f12 = r20 + nop.i 999 ;; +} + +// Move signexp for significand result for x<0 to FP reg +// If x NAN, ZERO, INFINITY, set *y=0 as a 32-bit integer, and exit +{ .mmb +(p0) setf.exp f11 = r14 +(p6) st4 [r33] = r0 +(p6) br.ret.spnt b0 ;; +} + +// Form exponent mask +// p7 if x<0, else p8 +{ .mfi +(p0) mov r17 = 0x1ffff +(p0) fcmp.lt.unc p7,p8 = f8,f0 + nop.i 999 ;; +} + +// Test for fnorm(x) denormal, means x double-extended denormal +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0x0b + nop.i 999 ;; +} + +// If x double-extended denormal add 64 to exponent bias for scaling +// If x double-extended denormal multiply x * 2^64 which is normal +{ .mfi +(p9) add r15 = 64, r15 +(p9) fmpy f9 = f9, f12 + nop.i 999 ;; +} + +// true exponent stored to int pointer +// the bias is treated as 0xfffe instead of +// normal 0xffff because we want the significand +// to be in the range <=0.5 sig < 1.0 +// Store the value of the exponent at the pointer in r33 + +// If x>0 form significand result +{ .mfi + nop.m 999 +(p8) fmerge.se f8 = f10,f9 + nop.i 999 ;; +} + +// Get signexp of normalized x +// If x<0 form significand result +{ .mfi +(p0) getf.exp r16 = f9 +(p7) fmerge.se f8 = f11,f9 + nop.i 999 ;; +} + +// Get exp of normalized x +// Subtract off bias to get true exponent of x +{ .mmi +(p0) and r18 = r17,r16 ;; +(p0) sub r19 = r18,r15 + nop.i 999 ;; +} + +// Store int y as a 32-bit integer +// Make the value a double +{ .mfb +(p0) st4 [r33] = r19 +(p0) fnorm.d f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +.endp __libm_frexp_4 +ASM_SIZE_DIRECTIVE(__libm_frexp_4) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_frexp4f.S glibc-2.2.3/sysdeps/ia64/fpu/libm_frexp4f.S --- glibc-2.2.2/sysdeps/ia64/fpu/libm_frexp4f.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_frexp4f.S Mon Feb 19 00:49:29 2001 @@ -0,0 +1,185 @@ +.file "libm_frexp_4f.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 3/20/00: Improved speed +// 6/01/00: Fixed bug when x a double-extended denormal +// 12/08/00 Corrected label on .endp +// +// API +//============================================================== +// float frexp(float x, int* y) +// float __libm_frexp_4f(float x, int* y) +// where int* y is a 32-bit integer +// +// Overview of operation +//============================================================== +// break a floating point x number into fraction and an exponent +// The fraction is returned as a float +// The exponent is returned as an integer pointed to by y +// This is a true (not a biased exponent) but 0fffe is subtracted +// as a bias instead of 0xffff. This is because the fraction returned +// is between 0.5 and 1.0, not the expected IEEE range. +// +// The fraction is 0.5 <= fraction < 1.0 +// +// Registers used +//============================================================== + +// general registers: +// r14 exponent bias for x negative +// r15 exponent bias for x positive +// r16 signexp of x +// r17 exponent mask +// r18 exponent of x +// r19 exponent result +// r20 signexp of 2^64 +// r32 on input contains the 32-bit IEEE float that is in f8 +// r33 on input pointer to 32-bit integer for exponent + +// predicate registers: +// p6 set if x is Nan, zero, or infinity +// p7 set if x negative +// p8 set if x positive +// p9 set if x double-extended denormal + +// floating-point registers: +// f8 input, output +// f9 normalized x +// f10 signexp for significand result for x positive +// f11 signexp for significand result for x negative +// f12 2^64 + +#include "libm_support.h" + +.align 32 +.global __libm_frexp_4f# + +.section .text +.proc __libm_frexp_4f# +.align 32 + +__libm_frexp_4f: + +// Set signexp for significand result for x>0 +// If x is a NaN, zero, or infinity, return it. +// Put 0 in the int pointer. +// x NAN, ZERO, INFINITY? +// Set signexp for significand result for x<0 +{ .mfi +(p0) mov r15 = 0x0fffe +(p0) fclass.m.unc p6,p0 = f8, 0xe7 +(p0) mov r14 = 0x2fffe +} +// Form signexp of 2^64 in case x double-extended denormal +// Save the normalized value of input in f9 +// The normalization also sets fault flags and takes faults if necessary +{ .mfi +(p0) mov r20 = 0x1003f +(p0) fnorm f9 = f8 + nop.i 999 ;; +} + +// Move signexp for significand result for x>0 to FP reg +// Form 2^64 in case x double-extended denormal +{ .mmi +(p0) setf.exp f10 = r15 +(p0) setf.exp f12 = r20 + nop.i 999 ;; +} + +// Move signexp for significand result for x<0 to FP reg +// If x NAN, ZERO, INFINITY, set *y=0 as a 32-bit integer, and exit +{ .mmb +(p0) setf.exp f11 = r14 +(p6) st4 [r33] = r0 +(p6) br.ret.spnt b0 ;; +} + +// Form exponent mask +// p7 if x<0, else p8 +{ .mfi +(p0) mov r17 = 0x1ffff +(p0) fcmp.lt.unc p7,p8 = f8,f0 + nop.i 999 ;; +} + +// Test for fnorm(x) denormal, means x double-extended denormal +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0x0b + nop.i 999 ;; +} + +// If x double-extended denormal add 64 to exponent bias for scaling +// If x double-extended denormal multiply x * 2^64 which is normal +{ .mfi +(p9) add r15 = 64, r15 +(p9) fmpy f9 = f9, f12 + nop.i 999 ;; +} + +// true exponent stored to int pointer +// the bias is treated as 0xfffe instead of +// normal 0xffff because we want the significand +// to be in the range <=0.5 sig < 1.0 +// Store the value of the exponent at the pointer in r33 + +// If x>0 form significand result +{ .mfi + nop.m 999 +(p8) fmerge.se f8 = f10,f9 + nop.i 999 ;; +} + +// Get signexp of normalized x +// If x<0 form significand result +{ .mfi +(p0) getf.exp r16 = f9 +(p7) fmerge.se f8 = f11,f9 + nop.i 999 ;; +} + +// Get exp of normalized x +// Subtract off bias to get true exponent of x +{ .mmi +(p0) and r18 = r17,r16 ;; +(p0) sub r19 = r18,r15 + nop.i 999 ;; +} + +// Store int y as a 32-bit integer +// Make the value a float +{ .mfb +(p0) st4 [r33] = r19 +(p0) fnorm.s f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +.endp __libm_frexp_4f +ASM_SIZE_DIRECTIVE(__libm_frexp_4f) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_frexp4l.S glibc-2.2.3/sysdeps/ia64/fpu/libm_frexp4l.S --- glibc-2.2.2/sysdeps/ia64/fpu/libm_frexp4l.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_frexp4l.S Mon Feb 19 00:49:37 2001 @@ -0,0 +1,184 @@ +.file "libm_frexp_4l.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 3/20/00: Initial version +// 6/01/00: Fixed bug when x a double-extended denormal +// 12/08/00 Corrected label on .endp +// +// API +//============================================================== +// long double frexpl(long double x, int* y) +// long double __libm_frexp_4l(long double x, int* y) +// where int* y is a 32-bit integer +// +// Overview of operation +//============================================================== +// break a floating point x number into fraction and an exponent +// The fraction is returned as a long double +// The exponent is returned as an integer pointed to by y +// This is a true (not a biased exponent) but 0fffe is subtracted +// as a bias instead of 0xffff. This is because the fraction returned +// is between 0.5 and 1.0, not the expected IEEE range. +// +// The fraction is 0.5 <= fraction < 1.0 +// +// Registers used +//============================================================== +// +// general registers: +// r14 exponent bias for x negative +// r15 exponent bias for x positive +// r16 signexp of x +// r17 exponent mask +// r18 exponent of x +// r19 exponent result +// r20 signexp of 2^64 +// r32-33 on input contains the 80-bit IEEE long double that is in f8 +// r34 on input pointer to 32-bit integer for exponent +// +// predicate registers: +// p6 set if x is Nan, zero, or infinity +// p7 set if x negative +// p8 set if x positive +// p9 set if x double-extended denormal +// +// floating-point registers: +// f8 input, output +// f9 normalized x +// f10 signexp for significand result for x positive +// f11 signexp for significand result for x negative +// f12 2^64 + +#include "libm_support.h" + +.align 32 +.global __libm_frexp_4l# + +.section .text +.proc __libm_frexp_4l# +.align 32 + +__libm_frexp_4l: + +// Set signexp for significand result for x>0 +// If x is a NaN, zero, or infinity, return it. +// Put 0 in the int pointer. +// x NAN, ZERO, INFINITY? +// Set signexp for significand result for x<0 +{ .mfi +(p0) mov r15 = 0x0fffe +(p0) fclass.m.unc p6,p0 = f8, 0xe7 +(p0) mov r14 = 0x2fffe +} +// Form signexp of 2^64 in case x double-extended denormal +// Save the normalized value of input in f9 +// The normalization also sets fault flags and takes faults if necessary +{ .mfi +(p0) mov r20 = 0x1003f +(p0) fnorm f9 = f8 + nop.i 999 ;; +} + +// Move signexp for significand result for x>0 to FP reg +// Form 2^64 in case x double-extended denormal +{ .mmi +(p0) setf.exp f10 = r15 +(p0) setf.exp f12 = r20 + nop.i 999 ;; +} + +// Move signexp for significand result for x<0 to FP reg +// If x NAN, ZERO, INFINITY, set *y=0 as a 32-bit integer, and exit +{ .mmb +(p0) setf.exp f11 = r14 +(p6) st4 [r34] = r0 +(p6) br.ret.spnt b0 ;; +} + +// Form exponent mask +// p7 if x<0, else p8 +{ .mfi +(p0) mov r17 = 0x1ffff +(p0) fcmp.lt.unc p7,p8 = f8,f0 + nop.i 999 ;; +} + +// Test for fnorm(x) denormal, means x double-extended denormal +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9,p0 = f9, 0x0b + nop.i 999 ;; +} + +// If x double-extended denormal add 64 to exponent bias for scaling +// If x double-extended denormal multiply x * 2^64 which is normal +{ .mfi +(p9) add r15 = 64, r15 +(p9) fmpy f9 = f9, f12 + nop.i 999 ;; +} + +// true exponent stored to int pointer +// the bias is treated as 0xfffe instead of +// normal 0xffff because we want the significand +// to be in the range <=0.5 sig < 1.0 +// Store the value of the exponent at the pointer in r34 + +// If x>0 form significand result +{ .mfi + nop.m 999 +(p8) fmerge.se f8 = f10,f9 + nop.i 999 ;; +} + +// Get signexp of normalized x +// If x<0 form significand result +{ .mfi +(p0) getf.exp r16 = f9 +(p7) fmerge.se f8 = f11,f9 + nop.i 999 ;; +} + +// Get exp of normalized x +// Subtract off bias to get true exponent of x +{ .mmi +(p0) and r18 = r17,r16 ;; +(p0) sub r19 = r18,r15 + nop.i 999 ;; +} + +// Store int y as a 32-bit integer +// Make the value a long double +{ .mfb +(p0) st4 [r34] = r19 +(p0) fnorm f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +.endp __libm_frexp_4l +ASM_SIZE_DIRECTIVE(__libm_frexp_4l) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_reduce.S glibc-2.2.3/sysdeps/ia64/fpu/libm_reduce.S --- glibc-2.2.2/sysdeps/ia64/fpu/libm_reduce.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_reduce.S Mon Feb 19 00:50:14 2001 @@ -0,0 +1,1527 @@ +.file "libm_reduce.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History: 02/02/00 Initial Version +// +// ********************************************************************* +// ********************************************************************* +// +// Function: __libm_pi_by_two_reduce(x) return r, c, and N where +// x = N * pi/4 + (r+c) , where |r+c| <= pi/4. +// This function is not designed to be used by the +// general user. +// +// ********************************************************************* +// +// Accuracy: Returns double-precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f32-f70 +// +// General Purpose Registers: +// r8 = return value N +// r32 = Address of x +// r33 = Address of where to place r and then c +// r34-r64 +// +// Predicate Registers: p6-p14 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// No condions should be raised. +// +// ********************************************************************* +// +// I. Introduction +// =============== +// +// For the forward trigonometric functions sin, cos, sincos, and +// tan, the original algorithms for IA 64 handle arguments up to +// 1 ulp less than 2^63 in magnitude. For double-extended arguments x, +// |x| >= 2^63, this routine returns CASE, N and r_hi, r_lo where +// +// x is accurately approximated by +// 2*K*pi + N * pi/2 + r_hi + r_lo, |r_hi+r_lo| <= pi/4. +// CASE = 1 or 2. +// CASE is 1 unless |r_hi + r_lo| < 2^(-33). +// +// The exact value of K is not determined, but that information is +// not required in trigonometric function computations. +// +// We first assume the argument x in question satisfies x >= 2^(63). +// In particular, it is positive. Negative x can be handled by symmetry: +// +// -x is accurately approximated by +// -2*K*pi + (-N) * pi/2 - (r_hi + r_lo), |r_hi+r_lo| <= pi/4. +// +// The idea of the reduction is that +// +// x * 2/pi = N_big + N + f, |f| <= 1/2 +// +// Moreover, for double extended x, |f| >= 2^(-75). (This is an +// non-obvious fact found by enumeration using a special algorithm +// involving continued fraction.) The algorithm described below +// calculates N and an accurate approximation of f. +// +// Roughly speaking, an appropriate 256-bit (4 X 64) portion of +// 2/pi is multiplied with x to give the desired information. +// +// II. Representation of 2/PI +// ========================== +// +// The value of 2/pi in binary fixed-point is +// +// .101000101111100110...... +// +// We store 2/pi in a table, starting at the position corresponding +// to bit position 63 +// +// bit position 63 62 ... 0 -1 -2 -3 -4 -5 -6 -7 .... -16576 +// +// 0 0 ... 0 . 1 0 1 0 1 0 1 .... X +// +// ^ +// |__ implied binary pt +// +// III. Algorithm +// ============== +// +// This describes the algorithm in the most natural way using +// unsigned interger multiplication. The implementation section +// describes how the integer arithmetic is simulated. +// +// STEP 0. Initialization +// ---------------------- +// +// Let the input argument x be +// +// x = 2^m * ( 1. b_1 b_2 b_3 ... b_63 ), 63 <= m <= 16383. +// +// The first crucial step is to fetch four 64-bit portions of 2/pi. +// To fulfill this goal, we calculate the bit position L of the +// beginning of these 256-bit quantity by +// +// L := 62 - m. +// +// Note that -16321 <= L <= -1 because 63 <= m <= 16383; and that +// the storage of 2/pi is adequate. +// +// Fetch P_1, P_2, P_3, P_4 beginning at bit position L thus: +// +// bit position L L-1 L-2 ... L-63 +// +// P_1 = b b b ... b +// +// each b can be 0 or 1. Also, let P_0 be the two bits correspoding to +// bit positions L+2 and L+1. So, when each of the P_j is interpreted +// with appropriate scaling, we have +// +// 2/pi = P_big + P_0 + (P_1 + P_2 + P_3 + P_4) + P_small +// +// Note that P_big and P_small can be ignored. The reasons are as follow. +// First, consider P_big. If P_big = 0, we can certainly ignore it. +// Otherwise, P_big >= 2^(L+3). Now, +// +// P_big * ulp(x) >= 2^(L+3) * 2^(m-63) +// >= 2^(65-m + m-63 ) +// >= 2^2 +// +// Thus, P_big * x is an integer of the form 4*K. So +// +// x = 4*K * (pi/2) + x*(P_0 + P_1 + P_2 + P_3 + P_4)*(pi/2) +// + x*P_small*(pi/2). +// +// Hence, P_big*x corresponds to information that can be ignored for +// trigonometic function evaluation. +// +// Next, we must estimate the effect of ignoring P_small. The absolute +// error made by ignoring P_small is bounded by +// +// |P_small * x| <= ulp(P_4) * x +// <= 2^(L-255) * 2^(m+1) +// <= 2^(62-m-255 + m + 1) +// <= 2^(-192) +// +// Since for double-extended precision, x * 2/pi = integer + f, +// 0.5 >= |f| >= 2^(-75), the relative error introduced by ignoring +// P_small is bounded by 2^(-192+75) <= 2^(-117), which is acceptable. +// +// Further note that if x is split into x_hi + x_lo where x_lo is the +// two bits corresponding to bit positions 2^(m-62) and 2^(m-63); then +// +// P_0 * x_hi +// +// is also an integer of the form 4*K; and thus can also be ignored. +// Let M := P_0 * x_lo which is a small integer. The main part of the +// calculation is really the multiplication of x with the four pieces +// P_1, P_2, P_3, and P_4. +// +// Unless the reduced argument is extremely small in magnitude, it +// suffices to carry out the multiplication of x with P_1, P_2, and +// P_3. x*P_4 will be carried out and added on as a correction only +// when it is found to be needed. Note also that x*P_4 need not be +// computed exactly. A straightforward multiplication suffices since +// the rounding error thus produced would be bounded by 2^(-3*64), +// that is 2^(-192) which is small enough as the reduced argument +// is bounded from below by 2^(-75). +// +// Now that we have four 64-bit data representing 2/pi and a +// 64-bit x. We first need to calculate a highly accurate product +// of x and P_1, P_2, P_3. This is best understood as integer +// multiplication. +// +// +// STEP 1. Multiplication +// ---------------------- +// +// +// --------- --------- --------- +// | P_1 | | P_2 | | P_3 | +// --------- --------- --------- +// +// --------- +// X | X | +// --------- +// ---------------------------------------------------- +// +// --------- --------- +// | A_hi | | A_lo | +// --------- --------- +// +// +// --------- --------- +// | B_hi | | B_lo | +// --------- --------- +// +// +// --------- --------- +// | C_hi | | C_lo | +// --------- --------- +// +// ==================================================== +// --------- --------- --------- --------- +// | S_0 | | S_1 | | S_2 | | S_3 | +// --------- --------- --------- --------- +// +// +// +// STEP 2. Get N and f +// ------------------- +// +// Conceptually, after the individual pieces S_0, S_1, ..., are obtained, +// we have to sum them and obtain an integer part, N, and a fraction, f. +// Here, |f| <= 1/2, and N is an integer. Note also that N need only to +// be known to module 2^k, k >= 2. In the case when |f| is small enough, +// we would need to add in the value x*P_4. +// +// +// STEP 3. Get reduced argument +// ---------------------------- +// +// The value f is not yet the reduced argument that we seek. The +// equation +// +// x * 2/pi = 4K + N + f +// +// says that +// +// x = 2*K*pi + N * pi/2 + f * (pi/2). +// +// Thus, the reduced argument is given by +// +// reduced argument = f * pi/2. +// +// This multiplication must be performed to extra precision. +// +// IV. Implementation +// ================== +// +// Step 0. Initialization +// ---------------------- +// +// Set sgn_x := sign(x); x := |x|; x_lo := 2 lsb of x. +// +// In memory, 2/pi is stored contigously as +// +// 0x00000000 0x00000000 0xA2F.... +// ^ +// |__ implied binary bit +// +// Given x = 2^m * 1.xxxx...xxx; we calculate L := 62 - m. Thus +// -1 <= L <= -16321. We fetch from memory 5 integer pieces of data. +// +// P_0 is the two bits corresponding to bit positions L+2 and L+1 +// P_1 is the 64-bit starting at bit position L +// P_2 is the 64-bit starting at bit position L-64 +// P_3 is the 64-bit starting at bit position L-128 +// P_4 is the 64-bit starting at bit position L-192 +// +// For example, if m = 63, P_0 would be 0 and P_1 would look like +// 0xA2F... +// +// If m = 65, P_0 would be the two msb of 0xA, thus, P_0 is 10 in binary. +// P_1 in binary would be 1 0 0 0 1 0 1 1 1 1 .... +// +// Step 1. Multiplication +// ---------------------- +// +// At this point, P_1, P_2, P_3, P_4 are integers. They are +// supposed to be interpreted as +// +// 2^(L-63) * P_1; +// 2^(L-63-64) * P_2; +// 2^(L-63-128) * P_3; +// 2^(L-63-192) * P_4; +// +// Since each of them need to be multiplied to x, we would scale +// both x and the P_j's by some convenient factors: scale each +// of P_j's up by 2^(63-L), and scale x down by 2^(L-63). +// +// p_1 := fcvt.xf ( P_1 ) +// p_2 := fcvt.xf ( P_2 ) * 2^(-64) +// p_3 := fcvt.xf ( P_3 ) * 2^(-128) +// p_4 := fcvt.xf ( P_4 ) * 2^(-192) +// x := replace exponent of x by -1 +// because 2^m * 1.xxxx...xxx * 2^(L-63) +// is 2^(-1) * 1.xxxx...xxx +// +// We are now faced with the task of computing the following +// +// --------- --------- --------- +// | P_1 | | P_2 | | P_3 | +// --------- --------- --------- +// +// --------- +// X | X | +// --------- +// ---------------------------------------------------- +// +// --------- --------- +// | A_hi | | A_lo | +// --------- --------- +// +// --------- --------- +// | B_hi | | B_lo | +// --------- --------- +// +// --------- --------- +// | C_hi | | C_lo | +// --------- --------- +// +// ==================================================== +// ----------- --------- --------- --------- +// | S_0 | | S_1 | | S_2 | | S_3 | +// ----------- --------- --------- --------- +// ^ ^ +// | |___ binary point +// | +// |___ possibly one more bit +// +// Let FPSR3 be set to round towards zero with widest precision +// and exponent range. Unless an explicit FPSR is given, +// round-to-nearest with widest precision and exponent range is +// used. +// +// Define sigma_C := 2^63; sigma_B := 2^(-1); sigma_C := 2^(-65). +// +// Tmp_C := fmpy.fpsr3( x, p_1 ); +// If Tmp_C >= sigma_C then +// C_hi := Tmp_C; +// C_lo := x*p_1 - C_hi ...fma, exact +// Else +// C_hi := fadd.fpsr3(sigma_C, Tmp_C) - sigma_C +// ...subtraction is exact, regardless +// ...of rounding direction +// C_lo := x*p_1 - C_hi ...fma, exact +// End If +// +// Tmp_B := fmpy.fpsr3( x, p_2 ); +// If Tmp_B >= sigma_B then +// B_hi := Tmp_B; +// B_lo := x*p_2 - B_hi ...fma, exact +// Else +// B_hi := fadd.fpsr3(sigma_B, Tmp_B) - sigma_B +// ...subtraction is exact, regardless +// ...of rounding direction +// B_lo := x*p_2 - B_hi ...fma, exact +// End If +// +// Tmp_A := fmpy.fpsr3( x, p_3 ); +// If Tmp_A >= sigma_A then +// A_hi := Tmp_A; +// A_lo := x*p_3 - A_hi ...fma, exact +// Else +// A_hi := fadd.fpsr3(sigma_A, Tmp_A) - sigma_A +// ...subtraction is exact, regardless +// ...of rounding direction +// A_lo := x*p_3 - A_hi ...fma, exact +// End If +// +// ...Note that C_hi is of integer value. We need only the +// ...last few bits. Thus we can ensure C_hi is never a big +// ...integer, freeing us from overflow worry. +// +// Tmp_C := fadd.fpsr3( C_hi, 2^(70) ) - 2^(70); +// ...Tmp_C is the upper portion of C_hi +// C_hi := C_hi - Tmp_C +// ...0 <= C_hi < 2^7 +// +// Step 2. Get N and f +// ------------------- +// +// At this point, we have all the components to obtain +// S_0, S_1, S_2, S_3 and thus N and f. We start by adding +// C_lo and B_hi. This sum together with C_hi gives a good +// estimation of N and f. +// +// A := fadd.fpsr3( B_hi, C_lo ) +// B := max( B_hi, C_lo ) +// b := min( B_hi, C_lo ) +// +// a := (B - A) + b ...exact. Note that a is either 0 +// ...or 2^(-64). +// +// N := round_to_nearest_integer_value( A ); +// f := A - N; ...exact because lsb(A) >= 2^(-64) +// ...and |f| <= 1/2. +// +// f := f + a ...exact because a is 0 or 2^(-64); +// ...the msb of the sum is <= 1/2 +// ...lsb >= 2^(-64). +// +// N := convert to integer format( C_hi + N ); +// M := P_0 * x_lo; +// N := N + M; +// +// If sgn_x == 1 (that is original x was negative) +// N := 2^10 - N +// ...this maintains N to be non-negative, but still +// ...equivalent to the (negated N) mod 4. +// End If +// +// If |f| >= 2^(-33) +// +// ...Case 1 +// CASE := 1 +// g := A_hi + B_lo; +// s_hi := f + g; +// s_lo := (f - s_hi) + g; +// +// Else +// +// ...Case 2 +// CASE := 2 +// A := fadd.fpsr3( A_hi, B_lo ) +// B := max( A_hi, B_lo ) +// b := min( A_hi, B_lo ) +// +// a := (B - A) + b ...exact. Note that a is either 0 +// ...or 2^(-128). +// +// f_hi := A + f; +// f_lo := (f - f_hi) + A; +// ...this is exact. +// ...f-f_hi is exact because either |f| >= |A|, in which +// ...case f-f_hi is clearly exact; or otherwise, 0<|f|<|A| +// ...means msb(f) <= msb(A) = 2^(-64) => |f| = 2^(-64). +// ...If f = 2^(-64), f-f_hi involves cancellation and is +// ...exact. If f = -2^(-64), then A + f is exact. Hence +// ...f-f_hi is -A exactly, giving f_lo = 0. +// +// f_lo := f_lo + a; +// +// If |f| >= 2^(-50) then +// s_hi := f_hi; +// s_lo := f_lo; +// Else +// f_lo := (f_lo + A_lo) + x*p_4 +// s_hi := f_hi + f_lo +// s_lo := (f_hi - s_hi) + f_lo +// End If +// +// End If +// +// Step 3. Get reduced argument +// ---------------------------- +// +// If sgn_x == 0 (that is original x is positive) +// +// D_hi := Pi_by_2_hi +// D_lo := Pi_by_2_lo +// ...load from table +// +// Else +// +// D_hi := neg_Pi_by_2_hi +// D_lo := neg_Pi_by_2_lo +// ...load from table +// End If +// +// r_hi := s_hi*D_hi +// r_lo := s_hi*D_hi - r_hi ...fma +// r_lo := (s_hi*D_lo + r_lo) + s_lo*D_hi +// +// Return CASE, N, r_hi, r_lo +// + +#include "libm_support.h" + +FR_X = f32 +FR_N = f33 +FR_p_1 = f34 +FR_TWOM33 = f35 +FR_TWOM50 = f36 +FR_g = f37 +FR_p_2 = f38 +FR_f = f39 +FR_s_lo = f40 +FR_p_3 = f41 +FR_f_abs = f42 +FR_D_lo = f43 +FR_p_4 = f44 +FR_D_hi = f45 +FR_Tmp2_C = f46 +FR_s_hi = f47 +FR_sigma_A = f48 +FR_A = f49 +FR_sigma_B = f50 +FR_B = f51 +FR_sigma_C = f52 +FR_b = f53 +FR_ScaleP2 = f54 +FR_ScaleP3 = f55 +FR_ScaleP4 = f56 +FR_Tmp_A = f57 +FR_Tmp_B = f58 +FR_Tmp_C = f59 +FR_A_hi = f60 +FR_f_hi = f61 +FR_r_hi = f62 +FR_A_lo = f63 +FR_B_hi = f64 +FR_a = f65 +FR_B_lo = f66 +FR_f_lo = f67 +FR_r_lo = f68 +FR_C_hi = f69 +FR_C_lo = f70 + +GR_N = r8 +GR_Address_of_Input = r32 +GR_Address_of_Outputs = r33 +GR_Exp_x = r36 +GR_Temp = r37 +GR_BIASL63 = r38 +GR_CASE = r39 +GR_x_lo = r40 +GR_sgn_x = r41 +GR_M = r42 +GR_BASE = r43 +GR_LENGTH1 = r44 +GR_LENGTH2 = r45 +GR_ASUB = r46 +GR_P_0 = r47 +GR_P_1 = r48 +GR_P_2 = r49 +GR_P_3 = r50 +GR_P_4 = r51 +GR_START = r52 +GR_SEGMENT = r53 +GR_A = r54 +GR_B = r55 +GR_C = r56 +GR_D = r57 +GR_E = r58 +GR_TEMP1 = r59 +GR_TEMP2 = r60 +GR_TEMP3 = r61 +GR_TEMP4 = r62 +GR_TEMP5 = r63 +GR_TEMP6 = r64 + +.align 64 + +#ifdef _LIBC +.rodata +#else +.data +#endif + +Constants_Bits_of_2_by_pi: +ASM_TYPE_DIRECTIVE(Constants_Bits_of_2_by_pi,@object) +data8 0x0000000000000000,0xA2F9836E4E441529 +data8 0xFC2757D1F534DDC0,0xDB6295993C439041 +data8 0xFE5163ABDEBBC561,0xB7246E3A424DD2E0 +data8 0x06492EEA09D1921C,0xFE1DEB1CB129A73E +data8 0xE88235F52EBB4484,0xE99C7026B45F7E41 +data8 0x3991D639835339F4,0x9C845F8BBDF9283B +data8 0x1FF897FFDE05980F,0xEF2F118B5A0A6D1F +data8 0x6D367ECF27CB09B7,0x4F463F669E5FEA2D +data8 0x7527BAC7EBE5F17B,0x3D0739F78A5292EA +data8 0x6BFB5FB11F8D5D08,0x56033046FC7B6BAB +data8 0xF0CFBC209AF4361D,0xA9E391615EE61B08 +data8 0x6599855F14A06840,0x8DFFD8804D732731 +data8 0x06061556CA73A8C9,0x60E27BC08C6B47C4 +data8 0x19C367CDDCE8092A,0x8359C4768B961CA6 +data8 0xDDAF44D15719053E,0xA5FF07053F7E33E8 +data8 0x32C2DE4F98327DBB,0xC33D26EF6B1E5EF8 +data8 0x9F3A1F35CAF27F1D,0x87F121907C7C246A +data8 0xFA6ED5772D30433B,0x15C614B59D19C3C2 +data8 0xC4AD414D2C5D000C,0x467D862D71E39AC6 +data8 0x9B0062337CD2B497,0xA7B4D55537F63ED7 +data8 0x1810A3FC764D2A9D,0x64ABD770F87C6357 +data8 0xB07AE715175649C0,0xD9D63B3884A7CB23 +data8 0x24778AD623545AB9,0x1F001B0AF1DFCE19 +data8 0xFF319F6A1E666157,0x9947FBACD87F7EB7 +data8 0x652289E83260BFE6,0xCDC4EF09366CD43F +data8 0x5DD7DE16DE3B5892,0x9BDE2822D2E88628 +data8 0x4D58E232CAC616E3,0x08CB7DE050C017A7 +data8 0x1DF35BE01834132E,0x6212830148835B8E +data8 0xF57FB0ADF2E91E43,0x4A48D36710D8DDAA +data8 0x425FAECE616AA428,0x0AB499D3F2A6067F +data8 0x775C83C2A3883C61,0x78738A5A8CAFBDD7 +data8 0x6F63A62DCBBFF4EF,0x818D67C12645CA55 +data8 0x36D9CAD2A8288D61,0xC277C9121426049B +data8 0x4612C459C444C5C8,0x91B24DF31700AD43 +data8 0xD4E5492910D5FDFC,0xBE00CC941EEECE70 +data8 0xF53E1380F1ECC3E7,0xB328F8C79405933E +data8 0x71C1B3092EF3450B,0x9C12887B20AB9FB5 +data8 0x2EC292472F327B6D,0x550C90A7721FE76B +data8 0x96CB314A1679E279,0x4189DFF49794E884 +data8 0xE6E29731996BED88,0x365F5F0EFDBBB49A +data8 0x486CA46742727132,0x5D8DB8159F09E5BC +data8 0x25318D3974F71C05,0x30010C0D68084B58 +data8 0xEE2C90AA4702E774,0x24D6BDA67DF77248 +data8 0x6EEF169FA6948EF6,0x91B45153D1F20ACF +data8 0x3398207E4BF56863,0xB25F3EDD035D407F +data8 0x8985295255C06437,0x10D86D324832754C +data8 0x5BD4714E6E5445C1,0x090B69F52AD56614 +data8 0x9D072750045DDB3B,0xB4C576EA17F9877D +data8 0x6B49BA271D296996,0xACCCC65414AD6AE2 +data8 0x9089D98850722CBE,0xA4049407777030F3 +data8 0x27FC00A871EA49C2,0x663DE06483DD9797 +data8 0x3FA3FD94438C860D,0xDE41319D39928C70 +data8 0xDDE7B7173BDF082B,0x3715A0805C93805A +data8 0x921110D8E80FAF80,0x6C4BFFDB0F903876 +data8 0x185915A562BBCB61,0xB989C7BD401004F2 +data8 0xD2277549F6B6EBBB,0x22DBAA140A2F2689 +data8 0x768364333B091A94,0x0EAA3A51C2A31DAE +data8 0xEDAF12265C4DC26D,0x9C7A2D9756C0833F +data8 0x03F6F0098C402B99,0x316D07B43915200C +data8 0x5BC3D8C492F54BAD,0xC6A5CA4ECD37A736 +data8 0xA9E69492AB6842DD,0xDE6319EF8C76528B +data8 0x6837DBFCABA1AE31,0x15DFA1AE00DAFB0C +data8 0x664D64B705ED3065,0x29BF56573AFF47B9 +data8 0xF96AF3BE75DF9328,0x3080ABF68C6615CB +data8 0x040622FA1DE4D9A4,0xB33D8F1B5709CD36 +data8 0xE9424EA4BE13B523,0x331AAAF0A8654FA5 +data8 0xC1D20F3F0BCD785B,0x76F923048B7B7217 +data8 0x8953A6C6E26E6F00,0xEBEF584A9BB7DAC4 +data8 0xBA66AACFCF761D02,0xD12DF1B1C1998C77 +data8 0xADC3DA4886A05DF7,0xF480C62FF0AC9AEC +data8 0xDDBC5C3F6DDED01F,0xC790B6DB2A3A25A3 +data8 0x9AAF009353AD0457,0xB6B42D297E804BA7 +data8 0x07DA0EAA76A1597B,0x2A12162DB7DCFDE5 +data8 0xFAFEDB89FDBE896C,0x76E4FCA90670803E +data8 0x156E85FF87FD073E,0x2833676186182AEA +data8 0xBD4DAFE7B36E6D8F,0x3967955BBF3148D7 +data8 0x8416DF30432DC735,0x6125CE70C9B8CB30 +data8 0xFD6CBFA200A4E46C,0x05A0DD5A476F21D2 +data8 0x1262845CB9496170,0xE0566B0152993755 +data8 0x50B7D51EC4F1335F,0x6E13E4305DA92E85 +data8 0xC3B21D3632A1A4B7,0x08D4B1EA21F716E4 +data8 0x698F77FF2780030C,0x2D408DA0CD4F99A5 +data8 0x20D3A2B30A5D2F42,0xF9B4CBDA11D0BE7D +data8 0xC1DB9BBD17AB81A2,0xCA5C6A0817552E55 +data8 0x0027F0147F8607E1,0x640B148D4196DEBE +data8 0x872AFDDAB6256B34,0x897BFEF3059EBFB9 +data8 0x4F6A68A82A4A5AC4,0x4FBCF82D985AD795 +data8 0xC7F48D4D0DA63A20,0x5F57A4B13F149538 +data8 0x800120CC86DD71B6,0xDEC9F560BF11654D +data8 0x6B0701ACB08CD0C0,0xB24855510EFB1EC3 +data8 0x72953B06A33540C0,0x7BDC06CC45E0FA29 +data8 0x4EC8CAD641F3E8DE,0x647CD8649B31BED9 +data8 0xC397A4D45877C5E3,0x6913DAF03C3ABA46 +data8 0x18465F7555F5BDD2,0xC6926E5D2EACED44 +data8 0x0E423E1C87C461E9,0xFD29F3D6E7CA7C22 +data8 0x35916FC5E0088DD7,0xFFE26A6EC6FDB0C1 +data8 0x0893745D7CB2AD6B,0x9D6ECD7B723E6A11 +data8 0xC6A9CFF7DF7329BA,0xC9B55100B70DB2E2 +data8 0x24BA74607DE58AD8,0x742C150D0C188194 +data8 0x667E162901767A9F,0xBEFDFDEF4556367E +data8 0xD913D9ECB9BA8BFC,0x97C427A831C36EF1 +data8 0x36C59456A8D8B5A8,0xB40ECCCF2D891234 +data8 0x576F89562CE3CE99,0xB920D6AA5E6B9C2A +data8 0x3ECC5F114A0BFDFB,0xF4E16D3B8E2C86E2 +data8 0x84D4E9A9B4FCD1EE,0xEFC9352E61392F44 +data8 0x2138C8D91B0AFC81,0x6A4AFBD81C2F84B4 +data8 0x538C994ECC2254DC,0x552AD6C6C096190B +data8 0xB8701A649569605A,0x26EE523F0F117F11 +data8 0xB5F4F5CBFC2DBC34,0xEEBC34CC5DE8605E +data8 0xDD9B8E67EF3392B8,0x17C99B5861BC57E1 +data8 0xC68351103ED84871,0xDDDD1C2DA118AF46 +data8 0x2C21D7F359987AD9,0xC0549EFA864FFC06 +data8 0x56AE79E536228922,0xAD38DC9367AAE855 +data8 0x3826829BE7CAA40D,0x51B133990ED7A948 +data8 0x0569F0B265A7887F,0x974C8836D1F9B392 +data8 0x214A827B21CF98DC,0x9F405547DC3A74E1 +data8 0x42EB67DF9DFE5FD4,0x5EA4677B7AACBAA2 +data8 0xF65523882B55BA41,0x086E59862A218347 +data8 0x39E6E389D49EE540,0xFB49E956FFCA0F1C +data8 0x8A59C52BFA94C5C1,0xD3CFC50FAE5ADB86 +data8 0xC5476243853B8621,0x94792C8761107B4C +data8 0x2A1A2C8012BF4390,0x2688893C78E4C4A8 +data8 0x7BDBE5C23AC4EAF4,0x268A67F7BF920D2B +data8 0xA365B1933D0B7CBD,0xDC51A463DD27DDE1 +data8 0x6919949A9529A828,0xCE68B4ED09209F44 +data8 0xCA984E638270237C,0x7E32B90F8EF5A7E7 +data8 0x561408F1212A9DB5,0x4D7E6F5119A5ABF9 +data8 0xB5D6DF8261DD9602,0x36169F3AC4A1A283 +data8 0x6DED727A8D39A9B8,0x825C326B5B2746ED +data8 0x34007700D255F4FC,0x4D59018071E0E13F +data8 0x89B295F364A8F1AE,0xA74B38FC4CEAB2BB +ASM_SIZE_DIRECTIVE(Constants_Bits_of_2_by_pi) + +Constants_Bits_of_pi_by_2: +ASM_TYPE_DIRECTIVE(Constants_Bits_of_pi_by_2,@object) +data4 0x2168C234,0xC90FDAA2,0x00003FFF,0x00000000 +data4 0x80DC1CD1,0xC4C6628B,0x00003FBF,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Bits_of_pi_by_2) + +.section .text +.proc __libm_pi_by_2_reduce# +.global __libm_pi_by_2_reduce# +.align 64 + +__libm_pi_by_2_reduce: + +// X is at the address in Address_of_Input +// Place the two-piece result at the address in Address_of_Outputs +// r followed by c +// N is returned + +{ .mmf +alloc r34 = ar.pfs,2,34,0,0 +(p0) ldfe FR_X = [GR_Address_of_Input] +(p0) fsetc.s3 0x00,0x7F ;; +} +{ .mlx + nop.m 999 +(p0) movl GR_BIASL63 = 0x1003E +} +;; + + +// L -1-2-3-4 +// 0 0 0 0 0. 1 0 1 0 +// M 0 1 2 .... 63, 64 65 ... 127, 128 +// --------------------------------------------- +// Segment 0. 1 , 2 , 3 +// START = M - 63 M = 128 becomes 65 +// LENGTH1 = START & 0x3F 65 become position 1 +// SEGMENT = shr(START,6) + 1 0 maps to 1, 64 maps to 2, +// LENGTH2 = 64 - LENGTH1 +// Address_BASE = shladd(SEGMENT,3) + BASE + + + +{ .mmi + nop.m 999 +(p0) addl GR_BASE = @ltoff(Constants_Bits_of_2_by_pi#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_BASE = [GR_BASE] + nop.m 999 + nop.i 999 +} +;; + + +{ .mlx + nop.m 999 +(p0) movl GR_TEMP5 = 0x000000000000FFFE +} +{ .mmi + nop.m 999 ;; +(p0) setf.exp FR_sigma_B = GR_TEMP5 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_TEMP6 = 0x000000000000FFBE ;; +} +// Define sigma_C := 2^63; sigma_B := 2^(-1); sigma_A := 2^(-65). +{ .mfi +(p0) setf.exp FR_sigma_A = GR_TEMP6 + nop.f 999 + nop.i 999 ;; +} +// Special Code for testing DE arguments +// (p0) movl GR_BIASL63 = 0x0000000000013FFE +// (p0) movl GR_x_lo = 0xFFFFFFFFFFFFFFFF +// (p0) setf.exp FR_X = GR_BIASL63 +// (p0) setf.sig FR_ScaleP3 = GR_x_lo +// (p0) fmerge.se FR_X = FR_X,FR_ScaleP3 +// Set sgn_x := sign(x); x := |x|; x_lo := 2 lsb of x. +// 2/pi is stored contigously as +// 0x00000000 0x00000000.0xA2F.... +// M = EXP - BIAS ( M >= 63) +// Given x = 2^m * 1.xxxx...xxx; we calculate L := 62 - m. +// Thus -1 <= L <= -16321. +{ .mmf +(p0) getf.exp GR_Exp_x = FR_X +(p0) getf.sig GR_x_lo = FR_X +(p0) fabs FR_X = FR_X ;; +} +{ .mii +(p0) and GR_x_lo = 0x03,GR_x_lo +(p0) extr.u GR_M = GR_Exp_x,0,17 ;; +(p0) sub GR_START = GR_M,GR_BIASL63 +} +{ .mmi + nop.m 999 ;; +(p0) and GR_LENGTH1 = 0x3F,GR_START +(p0) shr.u GR_SEGMENT = GR_START,6 +} +{ .mmi + nop.m 999 ;; +(p0) add GR_SEGMENT = 0x1,GR_SEGMENT +(p0) sub GR_LENGTH2 = 0x40,GR_LENGTH1 +} +// P_0 is the two bits corresponding to bit positions L+2 and L+1 +// P_1 is the 64-bit starting at bit position L +// P_2 is the 64-bit starting at bit position L-64 +// P_3 is the 64-bit starting at bit position L-128 +// P_4 is the 64-bit starting at bit position L-192 +// P_1 is made up of Alo and Bhi +// P_1 = deposit Alo, position 0, length2 into P_1,position length1 +// deposit Bhi, position length2, length1 into P_1, position 0 +// P_2 is made up of Blo and Chi +// P_2 = deposit Blo, position 0, length2 into P_2, position length1 +// deposit Chi, position length2, length1 into P_2, position 0 +// P_3 is made up of Clo and Dhi +// P_3 = deposit Clo, position 0, length2 into P_3, position length1 +// deposit Dhi, position length2, length1 into P_3, position 0 +// P_4 is made up of Clo and Dhi +// P_4 = deposit Dlo, position 0, length2 into P_4, position length1 +// deposit Ehi, position length2, length1 into P_4, position 0 +{ .mmi +(p0) cmp.le.unc p6,p7 = 0x2,GR_LENGTH1 ;; +(p0) shladd GR_BASE = GR_SEGMENT,3,GR_BASE +(p7) cmp.eq.unc p8,p9 = 0x1,GR_LENGTH1 ;; +} +{ .mmi + nop.m 999 +// ld_64 A at Base and increment Base by 8 +// ld_64 B at Base and increment Base by 8 +// ld_64 C at Base and increment Base by 8 +// ld_64 D at Base and increment Base by 8 +// ld_64 E at Base and increment Base by 8 +// A/B/C/D +// --------------------- +// A, B, C, D, and E look like | length1 | length2 | +// --------------------- +// hi lo +(p0) ld8 GR_A = [GR_BASE],8 +(p0) extr.u GR_sgn_x = GR_Exp_x,17,1 ;; +} +{ .mmf + nop.m 999 +(p0) ld8 GR_B = [GR_BASE],8 +(p0) fmerge.se FR_X = FR_sigma_B,FR_X ;; +} +{ .mii +(p0) ld8 GR_C = [GR_BASE],8 +(p8) extr.u GR_Temp = GR_A,63,1 ;; +(p0) shl GR_TEMP1 = GR_A,GR_LENGTH1 +} +{ .mii +(p0) ld8 GR_D = [GR_BASE],8 +// If length1 >= 2, +// P_0 = deposit Ahi, position length2, 2 bit into P_0 at position 0. +(p6) shr.u GR_P_0 = GR_A,GR_LENGTH2 ;; +(p0) shl GR_TEMP2 = GR_B,GR_LENGTH1 +} +{ .mii +(p0) ld8 GR_E = [GR_BASE],-40 +(p0) shr.u GR_P_1 = GR_B,GR_LENGTH2 ;; +(p0) shr.u GR_P_2 = GR_C,GR_LENGTH2 +} +// Else +// Load 16 bit of ASUB from (Base_Address_of_A - 2) +// P_0 = ASUB & 0x3 +// If length1 == 0, +// P_0 complete +// Else +// Deposit element 63 from Ahi and place in element 0 of P_0. +// Endif +// Endif +{ .mii +(p7) ld2 GR_ASUB = [GR_BASE],8 +(p0) shl GR_TEMP3 = GR_C,GR_LENGTH1 ;; +(p0) shl GR_TEMP4 = GR_D,GR_LENGTH1 +} +{ .mii + nop.m 999 +(p0) shr.u GR_P_3 = GR_D,GR_LENGTH2 ;; +(p0) shr.u GR_P_4 = GR_E,GR_LENGTH2 +} +{ .mii +(p7) and GR_P_0 = 0x03,GR_ASUB +(p6) and GR_P_0 = 0x03,GR_P_0 ;; +(p0) or GR_P_1 = GR_P_1,GR_TEMP1 +} +{ .mmi +(p8) and GR_P_0 = 0x1,GR_P_0 ;; +(p0) or GR_P_2 = GR_P_2,GR_TEMP2 +(p8) shl GR_P_0 = GR_P_0,0x1 ;; +} +{ .mii + nop.m 999 +(p0) or GR_P_3 = GR_P_3,GR_TEMP3 +(p8) or GR_P_0 = GR_P_0,GR_Temp +} +{ .mmi +(p0) setf.sig FR_p_1 = GR_P_1 ;; +(p0) setf.sig FR_p_2 = GR_P_2 +(p0) or GR_P_4 = GR_P_4,GR_TEMP4 ;; +} +{ .mmi + nop.m 999 ;; +(p0) setf.sig FR_p_3 = GR_P_3 +(p0) pmpy2.r GR_M = GR_P_0,GR_x_lo +} +{ .mlx +(p0) setf.sig FR_p_4 = GR_P_4 +// P_1, P_2, P_3, P_4 are integers. They should be +// 2^(L-63) * P_1; +// 2^(L-63-64) * P_2; +// 2^(L-63-128) * P_3; +// 2^(L-63-192) * P_4; +// Since each of them need to be multiplied to x, we would scale +// both x and the P_j's by some convenient factors: scale each +// of P_j's up by 2^(63-L), and scale x down by 2^(L-63). +// p_1 := fcvt.xf ( P_1 ) +// p_2 := fcvt.xf ( P_2 ) * 2^(-64) +// p_3 := fcvt.xf ( P_3 ) * 2^(-128) +// p_4 := fcvt.xf ( P_4 ) * 2^(-192) +// x= Set x's exp to -1 because 2^m*1.x...x *2^(L-63)=2^(-1)*1.x...xxx +// --------- --------- --------- +// | P_1 | | P_2 | | P_3 | +// --------- --------- --------- +// --------- +// X | X | +// --------- +// ---------------------------------------------------- +// --------- --------- +// | A_hi | | A_lo | +// --------- --------- +// --------- --------- +// | B_hi | | B_lo | +// --------- --------- +// --------- --------- +// | C_hi | | C_lo | +// --------- --------- +// ==================================================== +// ----------- --------- --------- --------- +// | S_0 | | S_1 | | S_2 | | S_3 | +// ----------- --------- --------- --------- +// | |___ binary point +// |___ possibly one more bit +// +// Let FPSR3 be set to round towards zero with widest precision +// and exponent range. Unless an explicit FPSR is given, +// round-to-nearest with widest precision and exponent range is +// used. +(p0) movl GR_TEMP1 = 0x000000000000FFBF +} +{ .mmi + nop.m 999 ;; +(p0) setf.exp FR_ScaleP2 = GR_TEMP1 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_TEMP4 = 0x000000000001003E +} +{ .mmi + nop.m 999 ;; +(p0) setf.exp FR_sigma_C = GR_TEMP4 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_TEMP2 = 0x000000000000FF7F ;; +} +{ .mmf + nop.m 999 +(p0) setf.exp FR_ScaleP3 = GR_TEMP2 +(p0) fcvt.xuf.s1 FR_p_1 = FR_p_1 ;; +} +{ .mfi + nop.m 999 +(p0) fcvt.xuf.s1 FR_p_2 = FR_p_2 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_Temp = 0x000000000000FFDE ;; +} +{ .mmf + nop.m 999 +(p0) setf.exp FR_TWOM33 = GR_Temp +(p0) fcvt.xuf.s1 FR_p_3 = FR_p_3 ;; +} +{ .mfi + nop.m 999 +(p0) fcvt.xuf.s1 FR_p_4 = FR_p_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// Tmp_C := fmpy.fpsr3( x, p_1 ); +// Tmp_B := fmpy.fpsr3( x, p_2 ); +// Tmp_A := fmpy.fpsr3( x, p_3 ); +// If Tmp_C >= sigma_C then +// C_hi := Tmp_C; +// C_lo := x*p_1 - C_hi ...fma, exact +// Else +// C_hi := fadd.fpsr3(sigma_C, Tmp_C) - sigma_C +// C_lo := x*p_1 - C_hi ...fma, exact +// End If +// If Tmp_B >= sigma_B then +// B_hi := Tmp_B; +// B_lo := x*p_2 - B_hi ...fma, exact +// Else +// B_hi := fadd.fpsr3(sigma_B, Tmp_B) - sigma_B +// B_lo := x*p_2 - B_hi ...fma, exact +// End If +// If Tmp_A >= sigma_A then +// A_hi := Tmp_A; +// A_lo := x*p_3 - A_hi ...fma, exact +// Else +// A_hi := fadd.fpsr3(sigma_A, Tmp_A) - sigma_A +// Exact, regardless ...of rounding direction +// A_lo := x*p_3 - A_hi ...fma, exact +// Endif +(p0) fmpy.s3 FR_Tmp_C = FR_X,FR_p_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_p_2 = FR_p_2,FR_ScaleP2 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_Temp = 0x0000000000000400 +} +{ .mlx + nop.m 999 +(p0) movl GR_TEMP3 = 0x000000000000FF3F ;; +} +{ .mmf + nop.m 999 +(p0) setf.exp FR_ScaleP4 = GR_TEMP3 +(p0) fmpy.s1 FR_p_3 = FR_p_3,FR_ScaleP3 ;; +} +{ .mlx + nop.m 999 +(p0) movl GR_TEMP4 = 0x0000000000010045 ;; +} +{ .mmf + nop.m 999 +(p0) setf.exp FR_Tmp2_C = GR_TEMP4 +(p0) fmpy.s3 FR_Tmp_B = FR_X,FR_p_2 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p12, p9 = FR_Tmp_C,FR_sigma_C + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s3 FR_Tmp_A = FR_X,FR_p_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) mov FR_C_hi = FR_Tmp_C + nop.i 999 ;; +} +{ .mfi +(p0) addl GR_BASE = @ltoff(Constants_Bits_of_pi_by_2#), gp +(p9) fadd.s3 FR_C_hi = FR_sigma_C,FR_Tmp_C + nop.i 999 +} +;; + + + +// End If +// Step 3. Get reduced argument +// If sgn_x == 0 (that is original x is positive) +// D_hi := Pi_by_2_hi +// D_lo := Pi_by_2_lo +// Load from table +// Else +// D_hi := neg_Pi_by_2_hi +// D_lo := neg_Pi_by_2_lo +// Load from table +// End If + + +{ .mmi + ld8 GR_BASE = [GR_BASE] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi +(p0) ldfe FR_D_hi = [GR_BASE],16 +(p0) fmpy.s1 FR_p_4 = FR_p_4,FR_ScaleP4 + nop.i 999 ;; +} +{ .mfi +(p0) ldfe FR_D_lo = [GR_BASE],0 +(p0) fcmp.ge.unc.s1 p13, p10 = FR_Tmp_B,FR_sigma_B + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) mov FR_B_hi = FR_Tmp_B + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fms.s1 FR_C_lo = FR_X,FR_p_1,FR_C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fadd.s3 FR_B_hi = FR_sigma_B,FR_Tmp_B + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fsub.s1 FR_C_hi = FR_C_hi,FR_sigma_C + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p14, p11 = FR_Tmp_A,FR_sigma_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) mov FR_A_hi = FR_Tmp_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fadd.s3 FR_A_hi = FR_sigma_A,FR_Tmp_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fms.s1 FR_C_lo = FR_X,FR_p_1,FR_C_hi +(p0) cmp.eq.unc p12,p9 = 0x1,GR_sgn_x +} +{ .mfi + nop.m 999 +(p13) fms.s1 FR_B_lo = FR_X,FR_p_2,FR_B_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fsub.s1 FR_B_hi = FR_B_hi,FR_sigma_B + nop.i 999 +} +{ .mfi + nop.m 999 +// Note that C_hi is of integer value. We need only the +// last few bits. Thus we can ensure C_hi is never a big +// integer, freeing us from overflow worry. +// Tmp_C := fadd.fpsr3( C_hi, 2^(70) ) - 2^(70); +// Tmp_C is the upper portion of C_hi +(p0) fadd.s3 FR_Tmp_C = FR_C_hi,FR_Tmp2_C + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) fms.s1 FR_A_lo = FR_X,FR_p_3,FR_A_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fsub.s1 FR_A_hi = FR_A_hi,FR_sigma_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// ******************* +// Step 2. Get N and f +// ******************* +// We have all the components to obtain +// S_0, S_1, S_2, S_3 and thus N and f. We start by adding +// C_lo and B_hi. This sum together with C_hi estimates +// N and f well. +// A := fadd.fpsr3( B_hi, C_lo ) +// B := max( B_hi, C_lo ) +// b := min( B_hi, C_lo ) +(p0) fadd.s3 FR_A = FR_B_hi,FR_C_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fms.s1 FR_B_lo = FR_X,FR_p_2,FR_B_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 FR_Tmp_C = FR_Tmp_C,FR_Tmp2_C + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmax.s1 FR_B = FR_B_hi,FR_C_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmin.s1 FR_b = FR_B_hi,FR_C_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fms.s1 FR_A_lo = FR_X,FR_p_3,FR_A_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// N := round_to_nearest_integer_value( A ); +(p0) fcvt.fx.s1 FR_N = FR_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// C_hi := C_hi - Tmp_C ...0 <= C_hi < 2^7 +(p0) fsub.s1 FR_C_hi = FR_C_hi,FR_Tmp_C + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// a := (B - A) + b: Exact - note that a is either 0 or 2^(-64). +(p0) fsub.s1 FR_a = FR_B,FR_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// f := A - N; Exact because lsb(A) >= 2^(-64) and |f| <= 1/2. +(p0) fnorm.s1 FR_N = FR_N + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_a = FR_a,FR_b + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 FR_f = FR_A,FR_N + nop.i 999 +} +{ .mfi + nop.m 999 +// N := convert to integer format( C_hi + N ); +// M := P_0 * x_lo; +// N := N + M; +(p0) fadd.s1 FR_N = FR_N,FR_C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// f = f + a Exact because a is 0 or 2^(-64); +// the msb of the sum is <= 1/2 and lsb >= 2^(-64). +(p0) fadd.s1 FR_f = FR_f,FR_a + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Create 2**(-33) +// +(p0) fcvt.fx.s1 FR_N = FR_N + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fabs FR_f_abs = FR_f + nop.i 999 ;; +} +{ .mfi +(p0) getf.sig GR_N = FR_N + nop.f 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) add GR_N = GR_N,GR_M ;; +} +// If sgn_x == 1 (that is original x was negative) +// N := 2^10 - N +// this maintains N to be non-negative, but still +// equivalent to the (negated N) mod 4. +// End If +{ .mii +(p12) sub GR_N = GR_Temp,GR_N +(p0) cmp.eq.unc p12,p9 = 0x0,GR_sgn_x ;; + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.ge.unc.s1 p13, p10 = FR_f_abs,FR_TWOM33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fsub.s1 FR_D_hi = f0, FR_D_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fadd.s3 FR_A = FR_A_hi,FR_B_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fadd.s1 FR_g = FR_A_hi,FR_B_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fmax.s1 FR_B = FR_A_hi,FR_B_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fsub.s1 FR_D_lo = f0, FR_D_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fmin.s1 FR_b = FR_A_hi,FR_B_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mlx + nop.m 999 +(p10) movl GR_Temp = 0x000000000000FFCD ;; +} +{ .mmf + nop.m 999 +(p10) setf.exp FR_TWOM50 = GR_Temp +(p10) fadd.s1 FR_f_hi = FR_A,FR_f ;; +} +{ .mfi + nop.m 999 +// a := (B - A) + b Exact. +// Note that a is either 0 or 2^(-128). +// f_hi := A + f; +// f_lo := (f - f_hi) + A +// f_lo=f-f_hi is exact because either |f| >= |A|, in which +// case f-f_hi is clearly exact; or otherwise, 0<|f|<|A| +// means msb(f) <= msb(A) = 2^(-64) => |f| = 2^(-64). +// If f = 2^(-64), f-f_hi involves cancellation and is +// exact. If f = -2^(-64), then A + f is exact. Hence +// f-f_hi is -A exactly, giving f_lo = 0. +// f_lo := f_lo + a; +(p10) fsub.s1 FR_a = FR_B,FR_A + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fadd.s1 FR_s_hi = FR_f,FR_g + nop.i 999 ;; +} +{ .mlx + nop.m 999 +// If |f| >= 2^(-33) +// Case 1 +// CASE := 1 +// g := A_hi + B_lo; +// s_hi := f + g; +// s_lo := (f - s_hi) + g; +(p13) movl GR_CASE = 0x1 ;; +} +{ .mlx + nop.m 999 +// Else +// Case 2 +// CASE := 2 +// A := fadd.fpsr3( A_hi, B_lo ) +// B := max( A_hi, B_lo ) +// b := min( A_hi, B_lo ) +(p10) movl GR_CASE = 0x2 +} +{ .mfi + nop.m 999 +(p10) fsub.s1 FR_f_lo = FR_f,FR_f_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fadd.s1 FR_a = FR_a,FR_b + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fsub.s1 FR_s_lo = FR_f,FR_s_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) fadd.s1 FR_s_lo = FR_s_lo,FR_g + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fcmp.ge.unc.s1 p14, p11 = FR_f_abs,FR_TWOM50 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Create 2**(-50) +(p10) fadd.s1 FR_f_lo = FR_f_lo,FR_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// If |f| >= 2^(-50) then +// s_hi := f_hi; +// s_lo := f_lo; +// Else +// f_lo := (f_lo + A_lo) + x*p_4 +// s_hi := f_hi + f_lo +// s_lo := (f_hi - s_hi) + f_lo +// End If +(p14) mov FR_s_hi = FR_f_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fadd.s1 FR_f_lo = FR_f_lo,FR_a + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) mov FR_s_lo = FR_f_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fadd.s1 FR_f_lo = FR_f_lo,FR_A_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fma.s1 FR_f_lo = FR_X,FR_p_4,FR_f_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fadd.s1 FR_s_hi = FR_f_hi,FR_f_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// r_hi := s_hi*D_hi +// r_lo := s_hi*D_hi - r_hi with fma +// r_lo := (s_hi*D_lo + r_lo) + s_lo*D_hi +(p0) fmpy.s1 FR_r_hi = FR_s_hi,FR_D_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fsub.s1 FR_s_lo = FR_f_hi,FR_s_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fms.s1 FR_r_lo = FR_s_hi,FR_D_hi,FR_r_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fadd.s1 FR_s_lo = FR_s_lo,FR_f_lo + nop.i 999 ;; +} +{ .mmi + nop.m 999 ;; +// Return N, r_hi, r_lo +// We do not return CASE +(p0) stfe [GR_Address_of_Outputs] = FR_r_hi,16 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_r_lo = FR_s_hi,FR_D_lo,FR_r_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_r_lo = FR_s_lo,FR_D_hi,FR_r_lo + nop.i 999 ;; +} +{ .mmi + nop.m 999 ;; +(p0) stfe [GR_Address_of_Outputs] = FR_r_lo,-16 + nop.i 999 +} +{ .mib + nop.m 999 + nop.i 999 +(p0) br.ret.sptk b0 ;; +} + +.endp __libm_pi_by_2_reduce +ASM_SIZE_DIRECTIVE(__libm_pi_by_2_reduce) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_support.h glibc-2.2.3/sysdeps/ia64/fpu/libm_support.h --- glibc-2.2.2/sysdeps/ia64/fpu/libm_support.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_support.h Mon Feb 19 00:50:29 2001 @@ -0,0 +1,339 @@ +// +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// + +// History: 02/02/2000 Initial version +// 2/28/2000 added tags for logb and nextafter +// 3/22/2000 Changes to support _LIB_VERSION variable +// and filled some enum gaps. Added support for C99. +// 5/31/2000 added prototypes for __libm_frexp_4l/8l +// 8/10/2000 Changed declaration of _LIB_VERSION to work for library +// builds and other application builds (precompiler directives). +// 8/11/2000 Added pointers-to-matherr-functions declarations to allow +// for user-defined matherr functions in the dll build. +// 12/07/2000 Added scalbn error_types values. +// + +#ifndef ASSEMBLER +#include + +float __libm_frexp_4f( float x, int* exp); +float __libm_frexp_8f( float x, int* exp); +double __libm_frexp_4( double x, int* exp); +double __libm_frexp_8( double x, int* exp); +long double __libm_frexp_4l( long double x, int* exp); +long double __libm_frexp_8l( long double x, int* exp); +void __libm_sincos_pi4(double,double*,double*,int); +void __libm_y0y1(double , double *, double *); +void __libm_j0j1(double , double *, double *); +double __libm_lgamma_kernel(double,int*,int,int); +double __libm_j0(double); +double __libm_j1(double); +double __libm_jn(int,double); +double __libm_y0(double); +double __libm_y1(double); +double __libm_yn(int,double); + +extern double rint(double); +extern double sqrt(double); +extern double fabs(double); +extern double log(double); +extern double log1p(double); +extern double sqrt(double); +extern double sin(double); +extern double exp(double); +extern double modf(double, double *); +extern double asinh(double); +extern double acosh(double); +extern double atanh(double); +extern double tanh(double); +extern double erf(double); +extern double erfc(double); +extern double j0(double); +extern double j1(double); +extern double jn(int, double); +extern double y0(double); +extern double y1(double); +extern double yn(int, double); + +extern float fabsf(float); +extern float asinhf(float); +extern float acoshf(float); +extern float atanhf(float); +extern float tanhf(float); +extern float erff(float); +extern float erfcf(float); +extern float j0f(float); +extern float j1f(float); +extern float jnf(int, float); +extern float y0f(float); +extern float y1f(float); +extern float ynf(int, float); + +extern long double log1pl(long double); +extern long double logl(long double); +extern long double sqrtl(long double); +extern long double expl(long double); + +extern long lround(double); +extern long lroundf(float); +extern long lroundl(long double); + +#if !(defined(SIZE_INT_32) || defined(SIZE_INT_64)) + #error integer size not established; define SIZE_INT_32 or SIZE_INT_64 +#endif + +struct fp64 { /*/ sign:1 exponent:11 significand:52 (implied leading 1)*/ + unsigned lo_significand:32; + unsigned hi_significand:20; + unsigned exponent:11; + unsigned sign:1; +}; + +#define HI_SIGNIFICAND_LESS(X, HI) ((X)->hi_significand < 0x ## HI) +#define f64abs(x) ((x) < 0.0 ? -(x) : (x)) + +typedef enum +{ + logl_zero=0, logl_negative, /* 0, 1 */ + log_zero, log_negative, /* 2, 3 */ + logf_zero, logf_negative, /* 4, 5 */ + log10l_zero, log10l_negative, /* 6, 7 */ + log10_zero, log10_negative, /* 8, 9 */ + log10f_zero, log10f_negative, /* 10, 11 */ + expl_overflow, expl_underflow, /* 12, 13 */ + exp_overflow, exp_underflow, /* 14, 15 */ + expf_overflow, expf_underflow, /* 16, 17 */ + powl_overflow, powl_underflow, /* 18, 19 */ + powl_zero_to_zero, /* 20 */ + powl_zero_to_negative, /* 21 */ + powl_neg_to_non_integer, /* 22 */ + powl_nan_to_zero, /* 23 */ + pow_overflow, pow_underflow, /* 24, 25 */ + pow_zero_to_zero, /* 26 */ + pow_zero_to_negative, /* 27 */ + pow_neg_to_non_integer, /* 28 */ + pow_nan_to_zero, /* 29 */ + powf_overflow, powf_underflow, /* 30, 31 */ + powf_zero_to_zero, /* 32 */ + powf_zero_to_negative, /* 33 */ + powf_neg_to_non_integer, /* 34 */ + powf_nan_to_zero, /* 35 */ + atan2l_zero, /* 36 */ + atan2_zero, /* 37 */ + atan2f_zero, /* 38 */ + expm1l_overflow, /* 39 */ + expm1l_underflow, /* 40 */ + expm1_overflow, /* 41 */ + expm1_underflow, /* 42 */ + expm1f_overflow, /* 43 */ + expm1f_underflow, /* 44 */ + hypotl_overflow, /* 45 */ + hypot_overflow, /* 46 */ + hypotf_overflow, /* 47 */ + sqrtl_negative, /* 48 */ + sqrt_negative, /* 49 */ + sqrtf_negative, /* 50 */ + scalbl_overflow, scalbl_underflow, /* 51, 52 */ + scalb_overflow, scalb_underflow, /* 53, 54 */ + scalbf_overflow, scalbf_underflow, /* 55, 56 */ + acosl_gt_one, acos_gt_one, acosf_gt_one, /* 57, 58, 59 */ + asinl_gt_one, asin_gt_one, asinf_gt_one, /* 60, 61, 62 */ + coshl_overflow, cosh_overflow, coshf_overflow, /* 63, 64, 65 */ + y0l_zero, y0l_negative,y0l_gt_loss, /* 66, 67, 68 */ + y0_zero, y0_negative,y0_gt_loss, /* 69, 70, 71 */ + y0f_zero, y0f_negative,y0f_gt_loss, /* 72, 73, 74 */ + y1l_zero, y1l_negative,y1l_gt_loss, /* 75, 76, 77 */ + y1_zero, y1_negative,y1_gt_loss, /* 78, 79, 80 */ + y1f_zero, y1f_negative,y1f_gt_loss, /* 81, 82, 83 */ + ynl_zero, ynl_negative,ynl_gt_loss, /* 84, 85, 86 */ + yn_zero, yn_negative,yn_gt_loss, /* 87, 88, 89 */ + ynf_zero, ynf_negative,ynf_gt_loss, /* 90, 91, 92 */ + j0l_gt_loss, /* 93 */ + j0_gt_loss, /* 94 */ + j0f_gt_loss, /* 95 */ + j1l_gt_loss, /* 96 */ + j1_gt_loss, /* 97 */ + j1f_gt_loss, /* 98 */ + jnl_gt_loss, /* 99 */ + jn_gt_loss, /* 100 */ + jnf_gt_loss, /* 101 */ + lgammal_overflow, lgammal_negative,lgammal_reserve, /* 102, 103, 104 */ + lgamma_overflow, lgamma_negative,lgamma_reserve, /* 105, 106, 107 */ + lgammaf_overflow, lgammaf_negative, lgammaf_reserve,/* 108, 109, 110 */ + gammal_overflow,gammal_negative, gammal_reserve, /* 111, 112, 113 */ + gamma_overflow, gamma_negative, gamma_reserve, /* 114, 115, 116 */ + gammaf_overflow,gammaf_negative,gammaf_reserve, /* 117, 118, 119 */ + fmodl_by_zero, /* 120 */ + fmod_by_zero, /* 121 */ + fmodf_by_zero, /* 122 */ + remainderl_by_zero, /* 123 */ + remainder_by_zero, /* 124 */ + remainderf_by_zero, /* 125 */ + sinhl_overflow, sinh_overflow, sinhf_overflow, /* 126, 127, 128 */ + atanhl_gt_one, atanhl_eq_one, /* 129, 130 */ + atanh_gt_one, atanh_eq_one, /* 131, 132 */ + atanhf_gt_one, atanhf_eq_one, /* 133, 134 */ + acoshl_lt_one, /* 135 */ + acosh_lt_one, /* 136 */ + acoshf_lt_one, /* 137 */ + log1pl_zero, log1pl_negative, /* 138, 139 */ + log1p_zero, log1p_negative, /* 140, 141 */ + log1pf_zero, log1pf_negative, /* 142, 143 */ + ldexpl_overflow, ldexpl_underflow, /* 144, 145 */ + ldexp_overflow, ldexp_underflow, /* 146, 147 */ + ldexpf_overflow, ldexpf_underflow, /* 148, 149 */ + logbl_zero, logb_zero, logbf_zero, /* 150, 151, 152 */ + nextafterl_overflow, nextafter_overflow, + nextafterf_overflow, /* 153, 154, 155 */ + ilogbl_zero, ilogb_zero, ilogbf_zero, /* 156, 157, 158 */ + exp2l_overflow, exp2l_underflow, /* 159, 160 */ + exp2_overflow, exp2_underflow, /* 161, 162 */ + exp2f_overflow, exp2f_underflow, /* 163, 164 */ + exp10l_overflow, exp10_overflow, + exp10f_overflow, /* 165, 166, 167 */ + log2l_zero, log2l_negative, /* 168, 169 */ + log2_zero, log2_negative, /* 170, 171 */ + log2f_zero, log2f_negative, /* 172, 173 */ + scalbnl_overflow, scalbnl_underflow, /* 174, 175 */ + scalbn_overflow, scalbn_underflow, /* 176, 177 */ + scalbnf_overflow, scalbnf_underflow /* 178, 179 */ +} error_types; + +void __libm_error_support(void*,void*,void*,error_types); + +#define BIAS_64 1023 +#define EXPINF_64 2047 + +#define DOUBLE_HEX(HI, LO) 0x ## LO, 0x ## HI + +#if 0 +static const unsigned INF[] = { + DOUBLE_HEX(7ff00000, 00000000), + DOUBLE_HEX(fff00000, 00000000) +}; + +static const double _zeroo = 0.0; +static const double _bigg = 1.0e300; +static const double _ponee = 1.0; +static const double _nonee = -1.0; + +#define INVALID (_zeroo * *((double*)&INF[0])) +#define PINF *((double*)&INF[0]) +#define NINF -PINF +#define PINF_DZ (_ponee/_zeroo) +#define X_TLOSS 1.41484755040568800000e+16 +#endif + +struct exceptionf +{ + int type; + char *name; + float arg1, arg2, retval; +}; + +# ifdef __cplusplus +struct __exception +{ + int type; + char *name; + double arg1, arg2, retval; +}; +# else + +# ifndef _LIBC +struct exception +{ + int type; + char *name; + double arg1, arg2, retval; +}; +# endif +# endif + + + +struct exceptionl +{ + int type; + char *name; + long double arg1, arg2, retval; +}; + +#ifdef _MS_ +#define MATHERR_F _matherrf +#define MATHERR_D _matherr +#else +#define MATHERR_F matherrf +#define MATHERR_D matherr +#endif + +# ifdef __cplusplus +#define EXC_DECL_D __exception +#else +// exception is a reserved name in C++ +#define EXC_DECL_D exception +#endif + +extern int MATHERR_F(struct exceptionf*); +extern int MATHERR_D(struct EXC_DECL_D*); +extern int matherrl(struct exceptionl*); + + +/* Set these appropriately to make thread Safe */ +#define ERRNO_RANGE errno = ERANGE +#define ERRNO_DOMAIN errno = EDOM + + +// Add code to support _LIB_VERSION +#ifndef _LIBC +typedef enum +{ + _IEEE_ = -1, // IEEE-like behavior + _SVID_, // SysV, Rel. 4 behavior + _XOPEN_, // Unix98 + _POSIX_, // Posix + _ISOC_ // ISO C9X +} _LIB_VERSION_TYPE; + +extern _LIB_VERSION_TYPE _LIB_VERSION; +#endif + +// This is a run-time variable and may effect +// floating point behavior of the libm functions + +#endif /* ASSEMBLER */ + +/* Support for compatible assembler handling. */ +#if !defined L && defined _LIBC +#define L(name) .L##name +#endif +#ifdef __ELF__ +#define ASM_SIZE_DIRECTIVE(name) .size name,.-name +#define ASM_TYPE_DIRECTIVE(name,T) .type name,T +#else +#define ASM_SIZE_DIRECTIVE(name) +#define ASM_TYPE_DIRECTIVE(name,T) +#endif diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/libm_tan.S glibc-2.2.3/sysdeps/ia64/fpu/libm_tan.S --- glibc-2.2.2/sysdeps/ia64/fpu/libm_tan.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/libm_tan.S Mon Feb 19 00:50:54 2001 @@ -0,0 +1,3319 @@ +.file "libm_tan.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// 02/02/00 Initial Version +// 4/04/00 Unwind support added +// 12/28/00 Fixed false invalid flags +// +// ********************************************************************* +// +// Function: tan(x) = tangent(x), for double precision x values +// +// ********************************************************************* +// +// Accuracy: Very accurate for double-precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9-f15 +// f32-f112 +// +// General Purpose Registers: +// r32-r48 +// r49-r50 (Used to pass arguments to pi_by_2 reduce routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions do not occur +// Underflow exceptions raised when appropriate for tan +// (No specialized error handling for this routine) +// Inexact raised when appropriate by algorithm +// +// tan(SNaN) = QNaN +// tan(QNaN) = QNaN +// tan(inf) = QNaN +// tan(+/-0) = +/-0 +// +// ********************************************************************* +// +// Mathematical Description +// +// We consider the computation of FPTAN of Arg. Now, given +// +// Arg = N pi/2 + alpha, |alpha| <= pi/4, +// +// basic mathematical relationship shows that +// +// tan( Arg ) = tan( alpha ) if N is even; +// = -cot( alpha ) otherwise. +// +// The value of alpha is obtained by argument reduction and +// represented by two working precision numbers r and c where +// +// alpha = r + c accurately. +// +// The reduction method is described in a previous write up. +// The argument reduction scheme identifies 4 cases. For Cases 2 +// and 4, because |alpha| is small, tan(r+c) and -cot(r+c) can be +// computed very easily by 2 or 3 terms of the Taylor series +// expansion as follows: +// +// Case 2: +// ------- +// +// tan(r + c) = r + c + r^3/3 ...accurately +// -cot(r + c) = -1/(r+c) + r/3 ...accurately +// +// Case 4: +// ------- +// +// tan(r + c) = r + c + r^3/3 + 2r^5/15 ...accurately +// -cot(r + c) = -1/(r+c) + r/3 + r^3/45 ...accurately +// +// +// The only cases left are Cases 1 and 3 of the argument reduction +// procedure. These two cases will be merged since after the +// argument is reduced in either cases, we have the reduced argument +// represented as r + c and that the magnitude |r + c| is not small +// enough to allow the usage of a very short approximation. +// +// The greatest challenge of this task is that the second terms of +// the Taylor series for tan(r) and -cot(r) +// +// r + r^3/3 + 2 r^5/15 + ... +// +// and +// +// -1/r + r/3 + r^3/45 + ... +// +// are not very small when |r| is close to pi/4 and the rounding +// errors will be a concern if simple polynomial accumulation is +// used. When |r| < 2^(-2), however, the second terms will be small +// enough (5 bits or so of right shift) that a normal Horner +// recurrence suffices. Hence there are two cases that we consider +// in the accurate computation of tan(r) and cot(r), |r| <= pi/4. +// +// Case small_r: |r| < 2^(-2) +// -------------------------- +// +// Since Arg = N pi/4 + r + c accurately, we have +// +// tan(Arg) = tan(r+c) for N even, +// = -cot(r+c) otherwise. +// +// Here for this case, both tan(r) and -cot(r) can be approximated +// by simple polynomials: +// +// tan(r) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 +// -cot(r) = -1/r + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 +// +// accurately. Since |r| is relatively small, tan(r+c) and +// -cot(r+c) can be accurately approximated by replacing r with +// r+c only in the first two terms of the corresponding polynomials. +// +// Note that P1_1 (and Q1_1 for that matter) approximates 1/3 to +// almost 64 sig. bits, thus +// +// P1_1 (r+c)^3 = P1_1 r^3 + c * r^2 accurately. +// +// Hence, +// +// tan(r+c) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 +// + c*(1 + r^2) +// +// -cot(r+c) = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 +// + Q1_1*c +// +// +// Case normal_r: 2^(-2) <= |r| <= pi/4 +// ------------------------------------ +// +// This case is more likely than the previous one if one considers +// r to be uniformly distributed in [-pi/4 pi/4]. +// +// The required calculation is either +// +// tan(r + c) = tan(r) + correction, or +// -cot(r + c) = -cot(r) + correction. +// +// Specifically, +// +// tan(r + c) = tan(r) + c tan'(r) + O(c^2) +// = tan(r) + c sec^2(r) + O(c^2) +// = tan(r) + c SEC_sq ...accurately +// as long as SEC_sq approximates sec^2(r) +// to, say, 5 bits or so. +// +// Similarly, +// +// -cot(r + c) = -cot(r) - c cot'(r) + O(c^2) +// = -cot(r) + c csc^2(r) + O(c^2) +// = -cot(r) + c CSC_sq ...accurately +// as long as CSC_sq approximates csc^2(r) +// to, say, 5 bits or so. +// +// We therefore concentrate on accurately calculating tan(r) and +// cot(r) for a working-precision number r, |r| <= pi/4 to within +// 0.1% or so. +// +// We will employ a table-driven approach. Let +// +// r = sgn_r * 2^k * 1.b_1 b_2 ... b_5 ... b_63 +// = sgn_r * ( B + x ) +// +// where +// +// B = 2^k * 1.b_1 b_2 ... b_5 1 +// x = |r| - B +// +// Now, +// tan(B) + tan(x) +// tan( B + x ) = ------------------------ +// 1 - tan(B)*tan(x) +// +// / \ +// | tan(B) + tan(x) | + +// = tan(B) + | ------------------------ - tan(B) | +// | 1 - tan(B)*tan(x) | +// \ / +// +// sec^2(B) * tan(x) +// = tan(B) + ------------------------ +// 1 - tan(B)*tan(x) +// +// (1/[sin(B)*cos(B)]) * tan(x) +// = tan(B) + -------------------------------- +// cot(B) - tan(x) +// +// +// Clearly, the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are +// calculated beforehand and stored in a table. Since +// +// |x| <= 2^k * 2^(-6) <= 2^(-7) (because k = -1, -2) +// +// a very short polynomial will be sufficient to approximate tan(x) +// accurately. The details involved in computing the last expression +// will be given in the next section on algorithm description. +// +// +// Now, we turn to the case where cot( B + x ) is needed. +// +// +// 1 - tan(B)*tan(x) +// cot( B + x ) = ------------------------ +// tan(B) + tan(x) +// +// / \ +// | 1 - tan(B)*tan(x) | + +// = cot(B) + | ----------------------- - cot(B) | +// | tan(B) + tan(x) | +// \ / +// +// [tan(B) + cot(B)] * tan(x) +// = cot(B) - ---------------------------- +// tan(B) + tan(x) +// +// (1/[sin(B)*cos(B)]) * tan(x) +// = cot(B) - -------------------------------- +// tan(B) + tan(x) +// +// +// Note that the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) that +// are needed are the same set of values needed in the previous +// case. +// +// Finally, we can put all the ingredients together as follows: +// +// Arg = N * pi/2 + r + c ...accurately +// +// tan(Arg) = tan(r) + correction if N is even; +// = -cot(r) + correction otherwise. +// +// For Cases 2 and 4, +// +// Case 2: +// tan(Arg) = tan(r + c) = r + c + r^3/3 N even +// = -cot(r + c) = -1/(r+c) + r/3 N odd +// Case 4: +// tan(Arg) = tan(r + c) = r + c + r^3/3 + 2r^5/15 N even +// = -cot(r + c) = -1/(r+c) + r/3 + r^3/45 N odd +// +// +// For Cases 1 and 3, +// +// Case small_r: |r| < 2^(-2) +// +// tan(Arg) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 +// + c*(1 + r^2) N even +// +// = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 +// + Q1_1*c N odd +// +// Case normal_r: 2^(-2) <= |r| <= pi/4 +// +// tan(Arg) = tan(r) + c * sec^2(r) N even +// = -cot(r) + c * csc^2(r) otherwise +// +// For N even, +// +// tan(Arg) = tan(r) + c*sec^2(r) +// = tan( sgn_r * (B+x) ) + c * sec^2(|r|) +// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(|r|) ) +// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(B) ) +// +// since B approximates |r| to 2^(-6) in relative accuracy. +// +// / (1/[sin(B)*cos(B)]) * tan(x) +// tan(Arg) = sgn_r * | tan(B) + -------------------------------- +// \ cot(B) - tan(x) +// \ +// + CORR | + +// / +// where +// +// CORR = sgn_r*c*tan(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). +// +// For N odd, +// +// tan(Arg) = -cot(r) + c*csc^2(r) +// = -cot( sgn_r * (B+x) ) + c * csc^2(|r|) +// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(|r|) ) +// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(B) ) +// +// since B approximates |r| to 2^(-6) in relative accuracy. +// +// / (1/[sin(B)*cos(B)]) * tan(x) +// tan(Arg) = sgn_r * | -cot(B) + -------------------------------- +// \ tan(B) + tan(x) +// \ +// + CORR | + +// / +// where +// +// CORR = sgn_r*c*cot(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). +// +// +// The actual algorithm prescribes how all the mathematical formulas +// are calculated. +// +// +// 2. Algorithmic Description +// ========================== +// +// 2.1 Computation for Cases 2 and 4. +// ---------------------------------- +// +// For Case 2, we use two-term polynomials. +// +// For N even, +// +// rsq := r * r +// Result := c + r * rsq * P1_1 +// Result := r + Result ...in user-defined rounding +// +// For N odd, +// S_hi := -frcpa(r) ...8 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits +// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) +// ...S_hi + S_lo is -1/(r+c) to extra precision +// S_lo := S_lo + Q1_1*r +// +// Result := S_hi + S_lo ...in user-defined rounding +// +// For Case 4, we use three-term polynomials +// +// For N even, +// +// rsq := r * r +// Result := c + r * rsq * (P1_1 + rsq * P1_2) +// Result := r + Result ...in user-defined rounding +// +// For N odd, +// S_hi := -frcpa(r) ...8 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits +// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) +// ...S_hi + S_lo is -1/(r+c) to extra precision +// rsq := r * r +// P := Q1_1 + rsq*Q1_2 +// S_lo := S_lo + r*P +// +// Result := S_hi + S_lo ...in user-defined rounding +// +// +// Note that the coefficients P1_1, P1_2, Q1_1, and Q1_2 are +// the same as those used in the small_r case of Cases 1 and 3 +// below. +// +// +// 2.2 Computation for Cases 1 and 3. +// ---------------------------------- +// This is further divided into the case of small_r, +// where |r| < 2^(-2), and the case of normal_r, where |r| lies between +// 2^(-2) and pi/4. +// +// Algorithm for the case of small_r +// --------------------------------- +// +// For N even, +// rsq := r * r +// Poly1 := rsq*(P1_1 + rsq*(P1_2 + rsq*P1_3)) +// r_to_the_8 := rsq * rsq +// r_to_the_8 := r_to_the_8 * r_to_the_8 +// Poly2 := P1_4 + rsq*(P1_5 + rsq*(P1_6 + ... rsq*P1_9)) +// CORR := c * ( 1 + rsq ) +// Poly := Poly1 + r_to_the_8*Poly2 +// Result := r*Poly + CORR +// Result := r + Result ...in user-defined rounding +// ...note that Poly1 and r_to_the_8 can be computed in parallel +// ...with Poly2 (Poly1 is intentionally set to be much +// ...shorter than Poly2 so that r_to_the_8 and CORR can be hidden) +// +// For N odd, +// S_hi := -frcpa(r) ...8 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits +// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) +// ...S_hi + S_lo is -1/(r+c) to extra precision +// S_lo := S_lo + Q1_1*c +// +// ...S_hi and S_lo are computed in parallel with +// ...the following +// rsq := r*r +// P := Q1_1 + rsq*(Q1_2 + rsq*(Q1_3 + ... + rsq*Q1_7)) +// +// Result := r*P + S_lo +// Result := S_hi + Result ...in user-defined rounding +// +// +// Algorithm for the case of normal_r +// ---------------------------------- +// +// Here, we first consider the computation of tan( r + c ). As +// presented in the previous section, +// +// tan( r + c ) = tan(r) + c * sec^2(r) +// = sgn_r * [ tan(B+x) + CORR ] +// CORR = sgn_r * c * tan(B) * 1/[sin(B)*cos(B)] +// +// because sec^2(r) = sec^(|r|), and B approximate |r| to 6.5 bits. +// +// tan( r + c ) = +// / (1/[sin(B)*cos(B)]) * tan(x) +// sgn_r * | tan(B) + -------------------------------- + +// \ cot(B) - tan(x) +// \ +// CORR | + +// / +// +// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are +// calculated beforehand and stored in a table. Specifically, +// the table values are +// +// tan(B) as T_hi + T_lo; +// cot(B) as C_hi + C_lo; +// 1/[sin(B)*cos(B)] as SC_inv +// +// T_hi, C_hi are in double-precision memory format; +// T_lo, C_lo are in single-precision memory format; +// SC_inv is in extended-precision memory format. +// +// The value of tan(x) will be approximated by a short polynomial of +// the form +// +// tan(x) as x + x * P, where +// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) +// +// Because |x| <= 2^(-7), cot(B) - x approximates cot(B) - tan(x) +// to a relative accuracy better than 2^(-20). Thus, a good +// initial guess of 1/( cot(B) - tan(x) ) to initiate the iterative +// division is: +// +// 1/(cot(B) - tan(x)) is approximately +// 1/(cot(B) - x) is +// tan(B)/(1 - x*tan(B)) is approximately +// T_hi / ( 1 - T_hi * x ) is approximately +// +// T_hi * [ 1 + (Thi * x) + (T_hi * x)^2 ] +// +// The calculation of tan(r+c) therefore proceed as follows: +// +// Tx := T_hi * x +// xsq := x * x +// +// V_hi := T_hi*(1 + Tx*(1 + Tx)) +// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) +// ...V_hi serves as an initial guess of 1/(cot(B) - tan(x)) +// ...good to about 20 bits of accuracy +// +// tanx := x + x*P +// D := C_hi - tanx +// ...D is a double precision denominator: cot(B) - tan(x) +// +// V_hi := V_hi + V_hi*(1 - V_hi*D) +// ....V_hi approximates 1/(cot(B)-tan(x)) to 40 bits +// +// V_lo := V_hi * ( [ (1 - V_hi*C_hi) + V_hi*tanx ] +// - V_hi*C_lo ) ...observe all order +// ...V_hi + V_lo approximates 1/(cot(B) - tan(x)) +// ...to extra accuracy +// +// ... SC_inv(B) * (x + x*P) +// ... tan(B) + ------------------------- + CORR +// ... cot(B) - (x + x*P) +// ... +// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// +// Sx := SC_inv * x +// CORR := sgn_r * c * SC_inv * T_hi +// +// ...put the ingredients together to compute +// ... SC_inv(B) * (x + x*P) +// ... tan(B) + ------------------------- + CORR +// ... cot(B) - (x + x*P) +// ... +// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// ... = T_hi + T_lo + CORR + +// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) +// +// CORR := CORR + T_lo +// tail := V_lo + P*(V_hi + V_lo) +// tail := Sx * tail + CORR +// tail := Sx * V_hi + tail +// T_hi := sgn_r * T_hi +// +// ...T_hi + sgn_r*tail now approximate +// ...sgn_r*(tan(B+x) + CORR) accurately +// +// Result := T_hi + sgn_r*tail ...in user-defined +// ...rounding control +// ...It is crucial that independent paths be fully +// ...exploited for performance's sake. +// +// +// Next, we consider the computation of -cot( r + c ). As +// presented in the previous section, +// +// -cot( r + c ) = -cot(r) + c * csc^2(r) +// = sgn_r * [ -cot(B+x) + CORR ] +// CORR = sgn_r * c * cot(B) * 1/[sin(B)*cos(B)] +// +// because csc^2(r) = csc^(|r|), and B approximate |r| to 6.5 bits. +// +// -cot( r + c ) = +// / (1/[sin(B)*cos(B)]) * tan(x) +// sgn_r * | -cot(B) + -------------------------------- + +// \ tan(B) + tan(x) +// \ +// CORR | + +// / +// +// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are +// calculated beforehand and stored in a table. Specifically, +// the table values are +// +// tan(B) as T_hi + T_lo; +// cot(B) as C_hi + C_lo; +// 1/[sin(B)*cos(B)] as SC_inv +// +// T_hi, C_hi are in double-precision memory format; +// T_lo, C_lo are in single-precision memory format; +// SC_inv is in extended-precision memory format. +// +// The value of tan(x) will be approximated by a short polynomial of +// the form +// +// tan(x) as x + x * P, where +// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) +// +// Because |x| <= 2^(-7), tan(B) + x approximates tan(B) + tan(x) +// to a relative accuracy better than 2^(-18). Thus, a good +// initial guess of 1/( tan(B) + tan(x) ) to initiate the iterative +// division is: +// +// 1/(tan(B) + tan(x)) is approximately +// 1/(tan(B) + x) is +// cot(B)/(1 + x*cot(B)) is approximately +// C_hi / ( 1 + C_hi * x ) is approximately +// +// C_hi * [ 1 - (C_hi * x) + (C_hi * x)^2 ] +// +// The calculation of -cot(r+c) therefore proceed as follows: +// +// Cx := C_hi * x +// xsq := x * x +// +// V_hi := C_hi*(1 - Cx*(1 - Cx)) +// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) +// ...V_hi serves as an initial guess of 1/(tan(B) + tan(x)) +// ...good to about 18 bits of accuracy +// +// tanx := x + x*P +// D := T_hi + tanx +// ...D is a double precision denominator: tan(B) + tan(x) +// +// V_hi := V_hi + V_hi*(1 - V_hi*D) +// ....V_hi approximates 1/(tan(B)+tan(x)) to 40 bits +// +// V_lo := V_hi * ( [ (1 - V_hi*T_hi) - V_hi*tanx ] +// - V_hi*T_lo ) ...observe all order +// ...V_hi + V_lo approximates 1/(tan(B) + tan(x)) +// ...to extra accuracy +// +// ... SC_inv(B) * (x + x*P) +// ... -cot(B) + ------------------------- + CORR +// ... tan(B) + (x + x*P) +// ... +// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// +// Sx := SC_inv * x +// CORR := sgn_r * c * SC_inv * C_hi +// +// ...put the ingredients together to compute +// ... SC_inv(B) * (x + x*P) +// ... -cot(B) + ------------------------- + CORR +// ... tan(B) + (x + x*P) +// ... +// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// ... =-C_hi - C_lo + CORR + +// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) +// +// CORR := CORR - C_lo +// tail := V_lo + P*(V_hi + V_lo) +// tail := Sx * tail + CORR +// tail := Sx * V_hi + tail +// C_hi := -sgn_r * C_hi +// +// ...C_hi + sgn_r*tail now approximates +// ...sgn_r*(-cot(B+x) + CORR) accurately +// +// Result := C_hi + sgn_r*tail in user-defined rounding control +// ...It is crucial that independent paths be fully +// ...exploited for performance's sake. +// +// 3. Implementation Notes +// ======================= +// +// Table entries T_hi, T_lo; C_hi, C_lo; SC_inv +// +// Recall that 2^(-2) <= |r| <= pi/4; +// +// r = sgn_r * 2^k * 1.b_1 b_2 ... b_63 +// +// and +// +// B = 2^k * 1.b_1 b_2 b_3 b_4 b_5 1 +// +// Thus, for k = -2, possible values of B are +// +// B = 2^(-2) * ( 1 + index/32 + 1/64 ), +// index ranges from 0 to 31 +// +// For k = -1, however, since |r| <= pi/4 = 0.78... +// possible values of B are +// +// B = 2^(-1) * ( 1 + index/32 + 1/64 ) +// index ranges from 0 to 19. +// +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 128 + +TAN_BASE_CONSTANTS: +ASM_TYPE_DIRECTIVE(TAN_BASE_CONSTANTS,@object) +data4 0x4B800000, 0xCB800000, 0x38800000, 0xB8800000 // two**24, -two**24 + // two**-14, -two**-14 +data4 0x4E44152A, 0xA2F9836E, 0x00003FFE, 0x00000000 // two_by_pi +data4 0xCE81B9F1, 0xC84D32B0, 0x00004016, 0x00000000 // P_0 +data4 0x2168C235, 0xC90FDAA2, 0x00003FFF, 0x00000000 // P_1 +data4 0xFC8F8CBB, 0xECE675D1, 0x0000BFBD, 0x00000000 // P_2 +data4 0xACC19C60, 0xB7ED8FBB, 0x0000BF7C, 0x00000000 // P_3 +data4 0x5F000000, 0xDF000000, 0x00000000, 0x00000000 // two_to_63, -two_to_63 +data4 0x6EC6B45A, 0xA397E504, 0x00003FE7, 0x00000000 // Inv_P_0 +data4 0xDBD171A1, 0x8D848E89, 0x0000BFBF, 0x00000000 // d_1 +data4 0x18A66F8E, 0xD5394C36, 0x0000BF7C, 0x00000000 // d_2 +data4 0x2168C234, 0xC90FDAA2, 0x00003FFE, 0x00000000 // PI_BY_4 +data4 0x2168C234, 0xC90FDAA2, 0x0000BFFE, 0x00000000 // MPI_BY_4 +data4 0x3E800000, 0xBE800000, 0x00000000, 0x00000000 // two**-2, -two**-2 +data4 0x2F000000, 0xAF000000, 0x00000000, 0x00000000 // two**-33, -two**-33 +data4 0xAAAAAABD, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // P1_1 +data4 0x88882E6A, 0x88888888, 0x00003FFC, 0x00000000 // P1_2 +data4 0x0F0177B6, 0xDD0DD0DD, 0x00003FFA, 0x00000000 // P1_3 +data4 0x646B8C6D, 0xB327A440, 0x00003FF9, 0x00000000 // P1_4 +data4 0x1D5F7D20, 0x91371B25, 0x00003FF8, 0x00000000 // P1_5 +data4 0x61C67914, 0xEB69A5F1, 0x00003FF6, 0x00000000 // P1_6 +data4 0x019318D2, 0xBEDD37BE, 0x00003FF5, 0x00000000 // P1_7 +data4 0x3C794015, 0x9979B146, 0x00003FF4, 0x00000000 // P1_8 +data4 0x8C6EB58A, 0x8EBD21A3, 0x00003FF3, 0x00000000 // P1_9 +data4 0xAAAAAAB4, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // Q1_1 +data4 0x0B5FC93E, 0xB60B60B6, 0x00003FF9, 0x00000000 // Q1_2 +data4 0x0C9BBFBF, 0x8AB355E0, 0x00003FF6, 0x00000000 // Q1_3 +data4 0xCBEE3D4C, 0xDDEBBC89, 0x00003FF2, 0x00000000 // Q1_4 +data4 0x5F80BBB6, 0xB3548A68, 0x00003FEF, 0x00000000 // Q1_5 +data4 0x4CED5BF1, 0x91362560, 0x00003FEC, 0x00000000 // Q1_6 +data4 0x8EE92A83, 0xF189D95A, 0x00003FE8, 0x00000000 // Q1_7 +data4 0xAAAB362F, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // P2_1 +data4 0xE97A6097, 0x88888886, 0x00003FFC, 0x00000000 // P2_2 +data4 0x25E716A1, 0xDD108EE0, 0x00003FFA, 0x00000000 // P2_3 +// +// Entries T_hi double-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// Entries T_lo single-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// +data4 0x62400794, 0x3FD09BC3, 0x23A05C32, 0x00000000 +data4 0xDFFBC074, 0x3FD124A9, 0x240078B2, 0x00000000 +data4 0x5BD4920F, 0x3FD1AE23, 0x23826B8E, 0x00000000 +data4 0x15E2701D, 0x3FD23835, 0x22D31154, 0x00000000 +data4 0x63739C2D, 0x3FD2C2E4, 0x2265C9E2, 0x00000000 +data4 0xAFEEA48B, 0x3FD34E36, 0x245C05EB, 0x00000000 +data4 0x7DBB35D1, 0x3FD3DA31, 0x24749F2D, 0x00000000 +data4 0x67321619, 0x3FD466DA, 0x2462CECE, 0x00000000 +data4 0x1F94A4D5, 0x3FD4F437, 0x246D0DF1, 0x00000000 +data4 0x740C3E6D, 0x3FD5824D, 0x240A85B5, 0x00000000 +data4 0x4CB1E73D, 0x3FD61123, 0x23F96E33, 0x00000000 +data4 0xAD9EA64B, 0x3FD6A0BE, 0x247C5393, 0x00000000 +data4 0xB804FD01, 0x3FD73125, 0x241F3B29, 0x00000000 +data4 0xAB53EE83, 0x3FD7C25E, 0x2479989B, 0x00000000 +data4 0xE6640EED, 0x3FD8546F, 0x23B343BC, 0x00000000 +data4 0xE8AF1892, 0x3FD8E75F, 0x241454D1, 0x00000000 +data4 0x53928BDA, 0x3FD97B35, 0x238613D9, 0x00000000 +data4 0xEB9DE4DE, 0x3FDA0FF6, 0x22859FA7, 0x00000000 +data4 0x99ECF92D, 0x3FDAA5AB, 0x237A6D06, 0x00000000 +data4 0x6D8F1796, 0x3FDB3C5A, 0x23952F6C, 0x00000000 +data4 0x9CFB8BE4, 0x3FDBD40A, 0x2280FC95, 0x00000000 +data4 0x87943100, 0x3FDC6CC3, 0x245D2EC0, 0x00000000 +data4 0xB736C500, 0x3FDD068C, 0x23C4AD7D, 0x00000000 +data4 0xE1DDBC31, 0x3FDDA16D, 0x23D076E6, 0x00000000 +data4 0xEB515A93, 0x3FDE3D6E, 0x244809A6, 0x00000000 +data4 0xE6E9E5F1, 0x3FDEDA97, 0x220856C8, 0x00000000 +data4 0x1963CE69, 0x3FDF78F1, 0x244BE993, 0x00000000 +data4 0x7D635BCE, 0x3FE00C41, 0x23D21799, 0x00000000 +data4 0x1C302CD3, 0x3FE05CAB, 0x248A1B1D, 0x00000000 +data4 0xDB6A1FA0, 0x3FE0ADB9, 0x23D53E33, 0x00000000 +data4 0x4A20BA81, 0x3FE0FF72, 0x24DB9ED5, 0x00000000 +data4 0x153FA6F5, 0x3FE151D9, 0x24E9E451, 0x00000000 +// +// Entries T_hi double-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// Entries T_lo single-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// +data4 0xBA1BE39E, 0x3FE1CEC4, 0x24B60F9E, 0x00000000 +data4 0x5ABD9B2D, 0x3FE277E4, 0x248C2474, 0x00000000 +data4 0x0272B110, 0x3FE32418, 0x247B8311, 0x00000000 +data4 0x890E2DF0, 0x3FE3D38B, 0x24C55751, 0x00000000 +data4 0x46236871, 0x3FE4866D, 0x24E5BC34, 0x00000000 +data4 0x45E044B0, 0x3FE53CEE, 0x24001BA4, 0x00000000 +data4 0x82EC06E4, 0x3FE5F742, 0x24B973DC, 0x00000000 +data4 0x25DF43F9, 0x3FE6B5A1, 0x24895440, 0x00000000 +data4 0xCAFD348C, 0x3FE77844, 0x240021CA, 0x00000000 +data4 0xCEED6B92, 0x3FE83F6B, 0x24C45372, 0x00000000 +data4 0xA34F3665, 0x3FE90B58, 0x240DAD33, 0x00000000 +data4 0x2C1E56B4, 0x3FE9DC52, 0x24F846CE, 0x00000000 +data4 0x27041578, 0x3FEAB2A4, 0x2323FB6E, 0x00000000 +data4 0x9DD8C373, 0x3FEB8E9F, 0x24B3090B, 0x00000000 +data4 0x65C9AA7B, 0x3FEC709B, 0x2449F611, 0x00000000 +data4 0xACCF8435, 0x3FED58F4, 0x23616A7E, 0x00000000 +data4 0x97635082, 0x3FEE480F, 0x24C2FEAE, 0x00000000 +data4 0xF0ACC544, 0x3FEF3E57, 0x242CE964, 0x00000000 +data4 0xF7E06E4B, 0x3FF01E20, 0x2480D3EE, 0x00000000 +data4 0x8A798A69, 0x3FF0A125, 0x24DB8967, 0x00000000 +// +// Entries C_hi double-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// Entries C_lo single-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// +data4 0xE63EFBD0, 0x400ED3E2, 0x259D94D4, 0x00000000 +data4 0xC515DAB5, 0x400DDDB4, 0x245F0537, 0x00000000 +data4 0xBE19A79F, 0x400CF57A, 0x25D4EA9F, 0x00000000 +data4 0xD15298ED, 0x400C1A06, 0x24AE40A0, 0x00000000 +data4 0x164B2708, 0x400B4A4C, 0x25A5AAB6, 0x00000000 +data4 0x5285B068, 0x400A855A, 0x25524F18, 0x00000000 +data4 0x3FFA549F, 0x4009CA5A, 0x24C999C0, 0x00000000 +data4 0x646AF623, 0x4009188A, 0x254FD801, 0x00000000 +data4 0x6084D0E7, 0x40086F3C, 0x2560F5FD, 0x00000000 +data4 0xA29A76EE, 0x4007CDD2, 0x255B9D19, 0x00000000 +data4 0x6C8ECA95, 0x400733BE, 0x25CB021B, 0x00000000 +data4 0x1F8DDC52, 0x4006A07E, 0x24AB4722, 0x00000000 +data4 0xC298AD58, 0x4006139B, 0x252764E2, 0x00000000 +data4 0xBAD7164B, 0x40058CAB, 0x24DAF5DB, 0x00000000 +data4 0xAE31A5D3, 0x40050B4B, 0x25EA20F4, 0x00000000 +data4 0x89F85A8A, 0x40048F21, 0x2583A3E8, 0x00000000 +data4 0xA862380D, 0x400417DA, 0x25DCC4CC, 0x00000000 +data4 0x1088FCFE, 0x4003A52B, 0x2430A492, 0x00000000 +data4 0xCD3527D5, 0x400336CC, 0x255F77CF, 0x00000000 +data4 0x5760766D, 0x4002CC7F, 0x25DA0BDA, 0x00000000 +data4 0x11CE02E3, 0x40026607, 0x256FF4A2, 0x00000000 +data4 0xD37BBE04, 0x4002032C, 0x25208AED, 0x00000000 +data4 0x7F050775, 0x4001A3BD, 0x24B72DD6, 0x00000000 +data4 0xA554848A, 0x40014789, 0x24AB4DAA, 0x00000000 +data4 0x323E81B7, 0x4000EE65, 0x2584C440, 0x00000000 +data4 0x21CF1293, 0x40009827, 0x25C9428D, 0x00000000 +data4 0x3D415EEB, 0x400044A9, 0x25DC8482, 0x00000000 +data4 0xBD72C577, 0x3FFFE78F, 0x257F5070, 0x00000000 +data4 0x75EFD28E, 0x3FFF4AC3, 0x23EBBF7A, 0x00000000 +data4 0x60B52DDE, 0x3FFEB2AF, 0x22EECA07, 0x00000000 +data4 0x35204180, 0x3FFE1F19, 0x24191079, 0x00000000 +data4 0x54F7E60A, 0x3FFD8FCA, 0x248D3058, 0x00000000 +// +// Entries C_hi double-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// Entries C_lo single-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// +data4 0x79F6FADE, 0x3FFCC06A, 0x239C7886, 0x00000000 +data4 0x891662A6, 0x3FFBB91F, 0x250BD191, 0x00000000 +data4 0x529F155D, 0x3FFABFB6, 0x256CC3E6, 0x00000000 +data4 0x2E964AE9, 0x3FF9D300, 0x250843E3, 0x00000000 +data4 0x89DCB383, 0x3FF8F1EF, 0x2277C87E, 0x00000000 +data4 0x7C87DBD6, 0x3FF81B93, 0x256DA6CF, 0x00000000 +data4 0x1042EDE4, 0x3FF74F14, 0x2573D28A, 0x00000000 +data4 0x1784B360, 0x3FF68BAF, 0x242E489A, 0x00000000 +data4 0x7C923C4C, 0x3FF5D0B5, 0x2532D940, 0x00000000 +data4 0xF418EF20, 0x3FF51D88, 0x253C7DD6, 0x00000000 +data4 0x02F88DAE, 0x3FF4719A, 0x23DB59BF, 0x00000000 +data4 0x49DA0788, 0x3FF3CC66, 0x252B4756, 0x00000000 +data4 0x0B980DB8, 0x3FF32D77, 0x23FE585F, 0x00000000 +data4 0xE56C987A, 0x3FF2945F, 0x25378A63, 0x00000000 +data4 0xB16523F6, 0x3FF200BD, 0x247BB2E0, 0x00000000 +data4 0x8CE27778, 0x3FF17235, 0x24446538, 0x00000000 +data4 0xFDEFE692, 0x3FF0E873, 0x2514638F, 0x00000000 +data4 0x33154062, 0x3FF0632C, 0x24A7FC27, 0x00000000 +data4 0xB3EF115F, 0x3FEFC42E, 0x248FD0FE, 0x00000000 +data4 0x135D26F6, 0x3FEEC9E8, 0x2385C719, 0x00000000 +// +// Entries SC_inv in Swapped IEEE format (extended) +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// +data4 0x1BF30C9E, 0x839D6D4A, 0x00004001, 0x00000000 +data4 0x554B0EB0, 0x80092804, 0x00004001, 0x00000000 +data4 0xA1CF0DE9, 0xF959F94C, 0x00004000, 0x00000000 +data4 0x77378677, 0xF3086BA0, 0x00004000, 0x00000000 +data4 0xCCD4723C, 0xED154515, 0x00004000, 0x00000000 +data4 0x1C27CF25, 0xE7790944, 0x00004000, 0x00000000 +data4 0x8DDACB88, 0xE22D037D, 0x00004000, 0x00000000 +data4 0x89C73522, 0xDD2B2D8A, 0x00004000, 0x00000000 +data4 0xBB2C1171, 0xD86E1A23, 0x00004000, 0x00000000 +data4 0xDFF5E0F9, 0xD3F0E288, 0x00004000, 0x00000000 +data4 0x283BEBD5, 0xCFAF16B1, 0x00004000, 0x00000000 +data4 0x0D88DD53, 0xCBA4AFAA, 0x00004000, 0x00000000 +data4 0xCA67C43D, 0xC7CE03CC, 0x00004000, 0x00000000 +data4 0x0CA0DDB0, 0xC427BC82, 0x00004000, 0x00000000 +data4 0xF13D8CAB, 0xC0AECD57, 0x00004000, 0x00000000 +data4 0x71ECE6B1, 0xBD606C38, 0x00004000, 0x00000000 +data4 0xA44C4929, 0xBA3A0A96, 0x00004000, 0x00000000 +data4 0xE5CCCEC1, 0xB7394F6F, 0x00004000, 0x00000000 +data4 0x9637D8BC, 0xB45C1203, 0x00004000, 0x00000000 +data4 0x92CB051B, 0xB1A05528, 0x00004000, 0x00000000 +data4 0x6BA2FFD0, 0xAF04432B, 0x00004000, 0x00000000 +data4 0x7221235F, 0xAC862A23, 0x00004000, 0x00000000 +data4 0x5F00A9D1, 0xAA2478AF, 0x00004000, 0x00000000 +data4 0x81E082BF, 0xA7DDBB0C, 0x00004000, 0x00000000 +data4 0x45684FEE, 0xA5B0987D, 0x00004000, 0x00000000 +data4 0x627A8F53, 0xA39BD0F5, 0x00004000, 0x00000000 +data4 0x6EC5C8B0, 0xA19E3B03, 0x00004000, 0x00000000 +data4 0x91CD7C66, 0x9FB6C1F0, 0x00004000, 0x00000000 +data4 0x1FA3DF8A, 0x9DE46410, 0x00004000, 0x00000000 +data4 0xA8F6B888, 0x9C263139, 0x00004000, 0x00000000 +data4 0xC27B0450, 0x9A7B4968, 0x00004000, 0x00000000 +data4 0x5EE614EE, 0x98E2DB7E, 0x00004000, 0x00000000 +// +// Entries SC_inv in Swapped IEEE format (extended) +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// +data4 0x13B2B5BA, 0x969F335C, 0x00004000, 0x00000000 +data4 0xD4C0F548, 0x93D446D9, 0x00004000, 0x00000000 +data4 0x61B798AF, 0x9147094F, 0x00004000, 0x00000000 +data4 0x758787AC, 0x8EF317CC, 0x00004000, 0x00000000 +data4 0xB99EEFDB, 0x8CD498B3, 0x00004000, 0x00000000 +data4 0xDFF8BC37, 0x8AE82A7D, 0x00004000, 0x00000000 +data4 0xE3C55D42, 0x892AD546, 0x00004000, 0x00000000 +data4 0xD15573C1, 0x8799FEA9, 0x00004000, 0x00000000 +data4 0x435A4B4C, 0x86335F88, 0x00004000, 0x00000000 +data4 0x3E93A87B, 0x84F4FB6E, 0x00004000, 0x00000000 +data4 0x80A382FB, 0x83DD1952, 0x00004000, 0x00000000 +data4 0xA4CB8C9E, 0x82EA3D7F, 0x00004000, 0x00000000 +data4 0x6861D0A8, 0x821B247C, 0x00004000, 0x00000000 +data4 0x63E8D244, 0x816EBED1, 0x00004000, 0x00000000 +data4 0x27E4CFC6, 0x80E42D91, 0x00004000, 0x00000000 +data4 0x28E64AFD, 0x807ABF8D, 0x00004000, 0x00000000 +data4 0x863B4FD8, 0x8031EF26, 0x00004000, 0x00000000 +data4 0xAE8C11FD, 0x800960AD, 0x00004000, 0x00000000 +data4 0x5FDBEC21, 0x8000E147, 0x00004000, 0x00000000 +data4 0xA07791FA, 0x80186650, 0x00004000, 0x00000000 + +Arg = f8 +Result = f8 +fp_tmp = f9 +U_2 = f10 +rsq = f11 +C_hi = f12 +C_lo = f13 +T_hi = f14 +T_lo = f15 + +N_0 = f32 +d_1 = f33 +MPI_BY_4 = f34 +tail = f35 +tanx = f36 +Cx = f37 +Sx = f38 +sgn_r = f39 +CORR = f40 +P = f41 +D = f42 +ArgPrime = f43 +P_0 = f44 + +P2_1 = f45 +P2_2 = f46 +P2_3 = f47 + +P1_1 = f45 +P1_2 = f46 +P1_3 = f47 + +P1_4 = f48 +P1_5 = f49 +P1_6 = f50 +P1_7 = f51 +P1_8 = f52 +P1_9 = f53 + +TWO_TO_63 = f54 +NEGTWO_TO_63 = f55 +x = f56 +xsq = f57 +Tx = f58 +Tx1 = f59 +Set = f60 +poly1 = f61 +poly2 = f62 +Poly = f63 +Poly1 = f64 +Poly2 = f65 +r_to_the_8 = f66 +B = f67 +SC_inv = f68 +Pos_r = f69 +N_0_fix = f70 +PI_BY_4 = f71 +NEGTWO_TO_NEG2 = f72 +TWO_TO_24 = f73 +TWO_TO_NEG14 = f74 +TWO_TO_NEG33 = f75 +NEGTWO_TO_24 = f76 +NEGTWO_TO_NEG14 = f76 +NEGTWO_TO_NEG33 = f77 +two_by_PI = f78 +N = f79 +N_fix = f80 +P_1 = f81 +P_2 = f82 +P_3 = f83 +s_val = f84 +w = f85 +c = f86 +r = f87 +Z = f88 +A = f89 +a = f90 +t = f91 +U_1 = f92 +d_2 = f93 +TWO_TO_NEG2 = f94 +Q1_1 = f95 +Q1_2 = f96 +Q1_3 = f97 +Q1_4 = f98 +Q1_5 = f99 +Q1_6 = f100 +Q1_7 = f101 +Q1_8 = f102 +S_hi = f103 +S_lo = f104 +V_hi = f105 +V_lo = f106 +U_hi = f107 +U_lo = f108 +U_hiabs = f109 +V_hiabs = f110 +V = f111 +Inv_P_0 = f112 + +GR_SAVE_B0 = r33 +GR_SAVE_GP = r34 +GR_SAVE_PFS = r35 + +delta1 = r36 +table_ptr1 = r37 +table_ptr2 = r38 +i_0 = r39 +i_1 = r40 +N_fix_gr = r41 +N_inc = r42 +exp_Arg = r43 +exp_r = r44 +sig_r = r45 +lookup = r46 +table_offset = r47 +Create_B = r48 +gr_tmp = r49 + +GR_Parameter_X = r49 +GR_Parameter_r = r50 + + + +.global __libm_tan +.section .text +.proc __libm_tan + + +__libm_tan: + +{ .mfi +alloc r32 = ar.pfs, 0,17,2,0 +(p0) fclass.m.unc p6,p0 = Arg, 0x1E7 + addl gr_tmp = -1,r0 +} +;; + +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p7,p0 = Arg, 0x1FF + nop.i 999 +} +;; + +{ .mfi +(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp + nop.f 999 + nop.i 999 +} +;; + +{ .mmi + ld8 table_ptr1 = [table_ptr1] + setf.sig fp_tmp = gr_tmp // Make a constant so fmpy produces inexact + nop.i 999 +} +;; + +// +// Check for NatVals, Infs , NaNs, and Zeros +// Check for everything - if false, then must be pseudo-zero +// or pseudo-nan. +// Local table pointer +// + +{ .mbb +(p0) add table_ptr2 = 96, table_ptr1 +(p6) br.cond.spnt __libm_TAN_SPECIAL +(p7) br.cond.spnt __libm_TAN_SPECIAL ;; +} +// +// Point to Inv_P_0 +// Branch out to deal with unsupporteds and special values. +// + +{ .mmf +(p0) ldfs TWO_TO_24 = [table_ptr1],4 +(p0) ldfs TWO_TO_63 = [table_ptr2],4 +// +// Load -2**24, load -2**63. +// +(p0) fcmp.eq.s0 p0, p6 = Arg, f1 ;; +} + +{ .mfi +(p0) ldfs NEGTWO_TO_63 = [table_ptr2],12 +(p0) fnorm.s1 Arg = Arg + nop.i 999 +} +// +// Load 2**24, Load 2**63. +// + +{ .mmi +(p0) ldfs NEGTWO_TO_24 = [table_ptr1],12 ;; +// +// Do fcmp to generate Denormal exception +// - can't do FNORM (will generate Underflow when U is unmasked!) +// Normalize input argument. +// +(p0) ldfe two_by_PI = [table_ptr1],16 + nop.i 999 +} + +{ .mmi +(p0) ldfe Inv_P_0 = [table_ptr2],16 ;; +(p0) ldfe d_1 = [table_ptr2],16 + nop.i 999 +} +// +// Decide about the paths to take: +// PR_1 and PR_3 set if -2**24 < Arg < 2**24 - CASE 1 OR 2 +// OTHERWISE - CASE 3 OR 4 +// Load inverse of P_0 . +// Set PR_6 if Arg <= -2**63 +// Are there any Infs, NaNs, or zeros? +// + +{ .mmi +(p0) ldfe P_0 = [table_ptr1],16 ;; +(p0) ldfe d_2 = [table_ptr2],16 + nop.i 999 +} +// +// Set PR_8 if Arg <= -2**24 +// Set PR_6 if Arg >= 2**63 +// + +{ .mmi +(p0) ldfe P_1 = [table_ptr1],16 ;; +(p0) ldfe PI_BY_4 = [table_ptr2],16 + nop.i 999 +} +// +// Set PR_8 if Arg >= 2**24 +// + +{ .mmi +(p0) ldfe P_2 = [table_ptr1],16 ;; +(p0) ldfe MPI_BY_4 = [table_ptr2],16 + nop.i 999 +} +// +// Load P_2 and PI_BY_4 +// + +{ .mfi +(p0) ldfe P_3 = [table_ptr1],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.le.unc.s1 p6,p7 = Arg,NEGTWO_TO_63 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fcmp.le.unc.s1 p8,p9 = Arg,NEGTWO_TO_24 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fcmp.ge.s1 p6,p0 = Arg,TWO_TO_63 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p9) fcmp.ge.s1 p8,p0 = Arg,TWO_TO_24 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Load P_3 and -PI_BY_4 +// +(p6) br.cond.spnt TAN_ARG_TOO_LARGE ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Load 2**(-2). +// Load -2**(-2). +// Branch out if we have a special argument. +// Branch out if the magnitude of the input argument is too large +// - do this branch before the next. +// +(p8) br.cond.spnt TAN_LARGER_ARG ;; +} +// +// Branch to Cases 3 or 4 if Arg <= -2**24 or Arg >= 2**24 +// + +{ .mfi +(p0) ldfs TWO_TO_NEG2 = [table_ptr2],4 +// ARGUMENT REDUCTION CODE - CASE 1 and 2 +// Load 2**(-2). +// Load -2**(-2). +(p0) fmpy.s1 N = Arg,two_by_PI + nop.i 999 ;; +} + +{ .mfi +(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr2],12 +// +// N = Arg * 2/pi +// +(p0) fcmp.lt.unc.s1 p8,p9= Arg,PI_BY_4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if Arg < pi/4, set PR_8. +// +(p8) fcmp.gt.s1 p8,p9= Arg,MPI_BY_4 + nop.i 999 ;; +} +// +// Case 1: Is |r| < 2**(-2). +// Arg is the same as r in this case. +// r = Arg +// c = 0 +// + +{ .mfi +(p8) mov N_fix_gr = r0 +// +// if Arg > -pi/4, reset PR_8. +// Select the case when |Arg| < pi/4 - set PR[8] = true. +// Else Select the case when |Arg| >= pi/4 - set PR[9] = true. +// +(p0) fcvt.fx.s1 N_fix = N + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Grab the integer part of N . +// +(p8) mov r = Arg + nop.i 999 +} + +{ .mfi + nop.m 999 +(p8) mov c = f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fcmp.lt.unc.s1 p10, p11 = Arg, TWO_TO_NEG2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fcmp.gt.s1 p10,p0 = Arg, NEGTWO_TO_NEG2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 2: Place integer part of N in GP register. +// +(p9) fcvt.xf N = N_fix + nop.i 999 ;; +} + +{ .mib +(p9) getf.sig N_fix_gr = N_fix + nop.i 999 +// +// Case 2: Convert integer N_fix back to normalized floating-point value. +// +(p10) br.cond.spnt TAN_SMALL_R ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.sptk TAN_NORMAL_R ;; +} +// +// Case 1: PR_3 is only affected when PR_1 is set. +// + +{ .mmi +(p9) ldfs TWO_TO_NEG33 = [table_ptr2], 4 ;; +// +// Case 2: Load 2**(-33). +// +(p9) ldfs NEGTWO_TO_NEG33 = [table_ptr2], 4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 2: Load -2**(-33). +// +(p9) fnma.s1 s_val = N, P_1, Arg + nop.i 999 +} + +{ .mfi + nop.m 999 +(p9) fmpy.s1 w = N, P_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 2: w = N * P_2 +// Case 2: s_val = -N * P_1 + Arg +// +(p0) fcmp.lt.unc.s1 p9,p8 = s_val, TWO_TO_NEG33 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Decide between case_1 and case_2 reduce: +// +(p9) fcmp.gt.s1 p9, p8 = s_val, NEGTWO_TO_NEG33 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 1_reduce: s <= -2**(-33) or s >= 2**(-33) +// Case 2_reduce: -2**(-33) < s < 2**(-33) +// +(p8) fsub.s1 r = s_val, w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p9) fmpy.s1 w = N, P_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 U_1 = N, P_2, w + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Case 1_reduce: Is |r| < 2**(-2), if so set PR_10 +// else set PR_11. +// +(p8) fsub.s1 c = s_val, r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 1_reduce: r = s + w (change sign) +// Case 2_reduce: w = N * P_3 (change sign) +// +(p8) fcmp.lt.unc.s1 p10, p11 = r, TWO_TO_NEG2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fcmp.gt.s1 p10, p11 = r, NEGTWO_TO_NEG2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fsub.s1 r = s_val, U_1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Case 1_reduce: c is complete here. +// c = c + w (w has not been negated.) +// Case 2_reduce: r is complete here - continue to calculate c . +// r = s - U_1 +// +(p9) fms.s1 U_2 = N, P_2, U_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 1_reduce: c = s - r +// Case 2_reduce: U_1 = N * P_2 + w +// +(p8) fsub.s1 c = c, w + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fsub.s1 s_val = s_val, r + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// Case 2_reduce: +// U_2 = N * P_2 - U_1 +// Not needed until later. +// +(p9) fadd.s1 U_2 = U_2, w +// +// Case 2_reduce: +// s = s - r +// U_2 = U_2 + w +// +(p10) br.cond.spnt TAN_SMALL_R ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p11) br.cond.sptk TAN_NORMAL_R ;; +} + +{ .mii + nop.m 999 +// +// Case 2_reduce: +// c = c - U_2 +// c is complete here +// Argument reduction ends here. +// +(p9) extr.u i_1 = N_fix_gr, 0, 1 ;; +(p9) cmp.eq.unc p11, p12 = 0x0000,i_1 ;; +} + +{ .mfi + nop.m 999 +// +// Is i_1 even or odd? +// if i_1 == 0, set p11, else set p12. +// +(p11) fmpy.s1 rsq = r, Z + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) frcpa.s1 S_hi,p0 = f1, r + nop.i 999 +} + +// +// Case 1: Branch to SMALL_R or NORMAL_R. +// Case 1 is done now. +// + +{ .mfi +(p9) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp +(p9) fsub.s1 c = s_val, U_1 + nop.i 999 ;; +} +;; + +{ .mmi +(p9) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + +{ .mmi +(p9) add table_ptr1 = 224, table_ptr1 ;; +(p9) ldfe P1_1 = [table_ptr1],144 + nop.i 999 ;; +} +// +// Get [i_1] - lsb of N_fix_gr . +// Load P1_1 and point to Q1_1 . +// + +{ .mfi +(p9) ldfe Q1_1 = [table_ptr1] , 0 +// +// N even: rsq = r * Z +// N odd: S_hi = frcpa(r) +// +(p12) fmerge.ns S_hi = S_hi, S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Case 2_reduce: +// c = s - U_1 +// +(p9) fsub.s1 c = c, U_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: Change sign of S_hi +// +(p11) fmpy.s1 rsq = rsq, P1_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: rsq = rsq * P1_1 +// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary +// +(p11) fma.s1 Result = r, rsq, c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result = c + r * rsq +// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result = Result + r +// N odd: poly1 = 1.0 + S_hi * r 32 bits partial +// +(p11) fadd.s0 Result = r, Result + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result1 = Result + r +// N odd: S_hi = S_hi * poly1 + S_hi 32 bits +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 64 bits partial +// +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * poly + 1.0 64 bits +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 +// +(p12) fma.s1 poly1 = S_hi, c, poly1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * c + poly1 +// +(p12) fmpy.s1 S_lo = S_hi, poly1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: S_lo = S_hi * poly1 +// +(p12) fma.s1 S_lo = Q1_1, r, S_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N odd: Result = S_hi + S_lo +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// N odd: S_lo = S_lo + Q1_1 * r +// +(p12) fadd.s0 Result = S_hi, S_lo +(p0) br.ret.sptk b0 ;; +} + + +TAN_LARGER_ARG: + +{ .mmf +(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp + nop.m 999 +(p0) fmpy.s1 N_0 = Arg, Inv_P_0 +} +;; + +// +// ARGUMENT REDUCTION CODE - CASE 3 and 4 +// +// +// Adjust table_ptr1 to beginning of table. +// N_0 = Arg * Inv_P_0 +// + + +{ .mmi +(p0) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +{ .mmi +(p0) add table_ptr1 = 8, table_ptr1 ;; +// +// Point to 2*-14 +// +(p0) ldfs TWO_TO_NEG14 = [table_ptr1], 4 + nop.i 999 ;; +} +// +// Load 2**(-14). +// + +{ .mmi +(p0) ldfs NEGTWO_TO_NEG14 = [table_ptr1], 180 ;; +// +// N_0_fix = integer part of N_0 . +// Adjust table_ptr1 to beginning of table. +// +(p0) ldfs TWO_TO_NEG2 = [table_ptr1], 4 + nop.i 999 ;; +} +// +// Make N_0 the integer part. +// + +{ .mfi +(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr1] +// +// Load -2**(-14). +// +(p0) fcvt.fx.s1 N_0_fix = N_0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.xf N_0 = N_0_fix + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 ArgPrime = N_0, P_0, Arg + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 w = N_0, d_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// ArgPrime = -N_0 * P_0 + Arg +// w = N_0 * d_1 +// +(p0) fmpy.s1 N = ArgPrime, two_by_PI + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N = ArgPrime * 2/pi +// +(p0) fcvt.fx.s1 N_fix = N + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N_fix is the integer part. +// +(p0) fcvt.xf N = N_fix + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig N_fix_gr = N_fix + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N is the integer part of the reduced-reduced argument. +// Put the integer in a GP register. +// +(p0) fnma.s1 s_val = N, P_1, ArgPrime + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fnma.s1 w = N, P_2, w + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// s_val = -N*P_1 + ArgPrime +// w = -N*P_2 + w +// +(p0) fcmp.lt.unc.s1 p11, p10 = s_val, TWO_TO_NEG14 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcmp.gt.s1 p11, p10 = s_val, NEGTWO_TO_NEG14 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 3: r = s_val + w (Z complete) +// Case 4: U_hi = N_0 * d_1 +// +(p10) fmpy.s1 V_hi = N, P_2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fmpy.s1 U_hi = N_0, d_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 3: r = s_val + w (Z complete) +// Case 4: U_hi = N_0 * d_1 +// +(p11) fmpy.s1 V_hi = N, P_2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fmpy.s1 U_hi = N_0, d_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Decide between case 3 and 4: +// Case 3: s <= -2**(-14) or s >= 2**(-14) +// Case 4: -2**(-14) < s < 2**(-14) +// +(p10) fadd.s1 r = s_val, w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fmpy.s1 w = N, P_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: We need abs of both U_hi and V_hi - dont +// worry about switched sign of V_hi . +// +(p11) fsub.s1 A = U_hi, V_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Case 4: A = U_hi + V_hi +// Note: Worry about switched sign of V_hi, so subtract instead of add. +// +(p11) fnma.s1 V_lo = N, P_2, V_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fms.s1 U_lo = N_0, d_1, U_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fabs V_hiabs = V_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Case 4: V_hi = N * P_2 +// w = N * P_3 +// Note the product does not include the (-) as in the writeup +// so (-) missing for V_hi and w . +(p10) fadd.s1 r = s_val, w + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 3: c = s_val - r +// Case 4: U_lo = N_0 * d_1 - U_hi +// +(p11) fabs U_hiabs = U_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fmpy.s1 w = N, P_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: Set P_12 if U_hiabs >= V_hiabs +// +(p11) fadd.s1 C_hi = s_val, A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: C_hi = s_val + A +// +(p11) fadd.s1 t = U_lo, V_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 3: Is |r| < 2**(-2), if so set PR_7 +// else set PR_8. +// Case 3: If PR_7 is set, prepare to branch to Small_R. +// Case 3: If PR_8 is set, prepare to branch to Normal_R. +// +(p10) fsub.s1 c = s_val, r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 3: c = (s - r) + w (c complete) +// +(p11) fcmp.ge.unc.s1 p12, p13 = U_hiabs, V_hiabs + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fms.s1 w = N_0, d_2, w + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: V_hi = N * P_2 +// w = N * P_3 +// Note the product does not include the (-) as in the writeup +// so (-) missing for V_hi and w . +// +(p10) fcmp.lt.unc.s1 p14, p15 = r, TWO_TO_NEG2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) fcmp.gt.s1 p14, p15 = r, NEGTWO_TO_NEG2 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Case 4: V_lo = -N * P_2 - V_hi (U_hi is in place of V_hi in writeup) +// Note: the (-) is still missing for V_hi . +// Case 4: w = w + N_0 * d_2 +// Note: the (-) is now incorporated in w . +// +(p10) fadd.s1 c = c, w +// +// Case 4: t = U_lo + V_lo +// Note: remember V_lo should be (-), subtract instead of add. NO +// +(p14) br.cond.spnt TAN_SMALL_R ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p15) br.cond.spnt TAN_NORMAL_R ;; +} + +{ .mfi + nop.m 999 +// +// Case 3: Vector off when |r| < 2**(-2). Recall that PR_3 will be true. +// The remaining stuff is for Case 4. +// +(p12) fsub.s1 a = U_hi, A +(p11) extr.u i_1 = N_fix_gr, 0, 1 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: C_lo = s_val - C_hi +// +(p11) fadd.s1 t = t, w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p13) fadd.s1 a = V_hi, A + nop.i 999 ;; +} + +// +// Case 4: a = U_hi - A +// a = V_hi - A (do an add to account for missing (-) on V_hi +// + +{ .mfi +(p11) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp +(p11) fsub.s1 C_lo = s_val, C_hi + nop.i 999 +} +;; + +{ .mmi +(p11) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + +// +// Case 4: a = (U_hi - A) + V_hi +// a = (V_hi - A) + U_hi +// In each case account for negative missing form V_hi . +// +// +// Case 4: C_lo = (s_val - C_hi) + A +// + +{ .mmi +(p11) add table_ptr1 = 224, table_ptr1 ;; +(p11) ldfe P1_1 = [table_ptr1], 16 + nop.i 999 ;; +} + +{ .mfi +(p11) ldfe P1_2 = [table_ptr1], 128 +// +// Case 4: w = U_lo + V_lo + w +// +(p12) fsub.s1 a = a, V_hi + nop.i 999 ;; +} +// +// Case 4: r = C_hi + C_lo +// + +{ .mfi +(p11) ldfe Q1_1 = [table_ptr1], 16 +(p11) fadd.s1 C_lo = C_lo, A + nop.i 999 ;; +} +// +// Case 4: c = C_hi - r +// Get [i_1] - lsb of N_fix_gr. +// + +{ .mfi +(p11) ldfe Q1_2 = [table_ptr1], 16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fsub.s1 a = U_hi, a + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd.s1 t = t, a + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: t = t + a +// +(p11) fadd.s1 C_lo = C_lo, t + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Case 4: C_lo = C_lo + t +// +(p11) fadd.s1 r = C_hi, C_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fsub.s1 c = C_hi, r + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Case 4: c = c + C_lo finished. +// Is i_1 even or odd? +// if i_1 == 0, set PR_4, else set PR_5. +// +// r and c have been computed. +// We known whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +(p0) fmpy.s1 rsq = r, r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd.s1 c = c , C_lo +(p11) cmp.eq.unc p11, p12 = 0x0000, i_1 ;; +} + +{ .mfi + nop.m 999 +(p12) frcpa.s1 S_hi, p0 = f1, r + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N odd: Change sign of S_hi +// +(p11) fma.s1 Result = rsq, P1_2, P1_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 P = rsq, Q1_2, Q1_1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N odd: Result = S_hi + S_lo (User supplied rounding mode for C1) +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: rsq = r * r +// N odd: S_hi = frcpa(r) +// +(p12) fmerge.ns S_hi = S_hi, S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N even: rsq = rsq * P1_2 + P1_1 +// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary +// +(p11) fmpy.s1 Result = rsq, Result + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r,f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N even: Result = Result * rsq +// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary +// +(p11) fma.s1 Result = r, Result, c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N odd: S_hi = S_hi * poly1 + S_hi 32 bits +// +(p11) fadd.s0 Result= r, Result + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result = Result * r + c +// N odd: poly1 = 1.0 + S_hi * r 32 bits partial +// +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result1 = Result + r (Rounding mode S0) +// N odd: poly1 = S_hi * r + 1.0 64 bits partial +// +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * poly + S_hi 64 bits +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 +// +(p12) fma.s1 poly1 = S_hi, c, poly1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * c + poly1 +// +(p12) fmpy.s1 S_lo = S_hi, poly1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: S_lo = S_hi * poly1 +// +(p12) fma.s1 S_lo = P, r, S_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// N odd: S_lo = S_lo + r * P +// +(p12) fadd.s0 Result = S_hi, S_lo +(p0) br.ret.sptk b0 ;; +} + + +TAN_SMALL_R: + +{ .mii + nop.m 999 +(p0) extr.u i_1 = N_fix_gr, 0, 1 ;; +(p0) cmp.eq.unc p11, p12 = 0x0000, i_1 +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 rsq = r, r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) frcpa.s1 S_hi, p0 = f1, r + nop.i 999 +} + +{ .mfi +(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp + nop.f 999 + nop.i 999 +} +;; + +{ .mmi +(p0) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + +// ***************************************************************** +// ***************************************************************** +// ***************************************************************** + +{ .mmi +(p0) add table_ptr1 = 224, table_ptr1 ;; +(p0) ldfe P1_1 = [table_ptr1], 16 + nop.i 999 ;; +} +// r and c have been computed. +// We known whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +// |r| < 2**(-2) + +{ .mfi +(p0) ldfe P1_2 = [table_ptr1], 16 +(p11) fmpy.s1 r_to_the_8 = rsq, rsq + nop.i 999 ;; +} +// +// Set table_ptr1 to beginning of constant table. +// Get [i_1] - lsb of N_fix_gr. +// + +{ .mfi +(p0) ldfe P1_3 = [table_ptr1], 96 +// +// N even: rsq = r * r +// N odd: S_hi = frcpa(r) +// +(p12) fmerge.ns S_hi = S_hi, S_hi + nop.i 999 ;; +} +// +// Is i_1 even or odd? +// if i_1 == 0, set PR_11. +// if i_1 != 0, set PR_12. +// + +{ .mfi +(p11) ldfe P1_9 = [table_ptr1], -16 +// +// N even: Poly2 = P1_7 + Poly2 * rsq +// N odd: poly2 = Q1_5 + poly2 * rsq +// +(p11) fadd.s1 CORR = rsq, f1 + nop.i 999 ;; +} + +{ .mmi +(p11) ldfe P1_8 = [table_ptr1], -16 ;; +// +// N even: Poly1 = P1_2 + P1_3 * rsq +// N odd: poly1 = 1.0 + S_hi * r +// 16 bits partial account for necessary (-1) +// +(p11) ldfe P1_7 = [table_ptr1], -16 + nop.i 999 ;; +} +// +// N even: Poly1 = P1_1 + Poly1 * rsq +// N odd: S_hi = S_hi + S_hi * poly1) 16 bits account for necessary +// + +{ .mfi +(p11) ldfe P1_6 = [table_ptr1], -16 +// +// N even: Poly2 = P1_5 + Poly2 * rsq +// N odd: poly2 = Q1_3 + poly2 * rsq +// +(p11) fmpy.s1 r_to_the_8 = r_to_the_8, r_to_the_8 + nop.i 999 ;; +} +// +// N even: Poly1 = Poly1 * rsq +// N odd: poly1 = 1.0 + S_hi * r 32 bits partial +// + +{ .mfi +(p11) ldfe P1_5 = [table_ptr1], -16 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +// +// N even: CORR = CORR * c +// N odd: S_hi = S_hi * poly1 + S_hi 32 bits +// + +// +// N even: Poly2 = P1_6 + Poly2 * rsq +// N odd: poly2 = Q1_4 + poly2 * rsq +// +{ .mmf +(p0) addl table_ptr2 = @ltoff(TAN_BASE_CONSTANTS), gp +(p11) ldfe P1_4 = [table_ptr1], -16 +(p11) fmpy.s1 CORR = CORR, c +} +;; + + +{ .mmi +(p0) ld8 table_ptr2 = [table_ptr2] + nop.m 999 + nop.i 999 +} +;; + + +{ .mii +(p0) add table_ptr2 = 464, table_ptr2 + nop.i 999 ;; + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fma.s1 Poly1 = P1_3, rsq, P1_2 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe Q1_7 = [table_ptr2], -16 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe Q1_6 = [table_ptr2], -16 +(p11) fma.s1 Poly2 = P1_9, rsq, P1_8 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfe Q1_5 = [table_ptr2], -16 ;; +(p12) ldfe Q1_4 = [table_ptr2], -16 + nop.i 999 ;; +} + +{ .mfi +(p12) ldfe Q1_3 = [table_ptr2], -16 +// +// N even: Poly2 = P1_8 + P1_9 * rsq +// N odd: poly2 = Q1_6 + Q1_7 * rsq +// +(p11) fma.s1 Poly1 = Poly1, rsq, P1_1 + nop.i 999 ;; +} + +{ .mfi +(p12) ldfe Q1_2 = [table_ptr2], -16 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +{ .mfi +(p12) ldfe Q1_1 = [table_ptr2], -16 +(p11) fma.s1 Poly2 = Poly2, rsq, P1_7 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: CORR = rsq + 1 +// N even: r_to_the_8 = rsq * rsq +// +(p11) fmpy.s1 Poly1 = Poly1, rsq + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = Q1_7, rsq, Q1_6 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fma.s1 Poly2 = Poly2, rsq, P1_6 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_5 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fma.s1 Poly2= Poly2, rsq, P1_5 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: r_to_the_8 = r_to_the_8 * r_to_the_8 +// N odd: poly1 = S_hi * r + 1.0 64 bits partial +// +(p11) fma.s1 Poly2 = Poly2, rsq, P1_4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result = CORR + Poly * r +// N odd: P = Q1_1 + poly2 * rsq +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Poly2 = P1_4 + Poly2 * rsq +// N odd: poly2 = Q1_2 + poly2 * rsq +// +(p11) fma.s1 Poly = Poly2, r_to_the_8, Poly1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, c, poly1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Poly = Poly1 + Poly2 * r_to_the_8 +// N odd: S_hi = S_hi * poly1 + S_hi 64 bits +// +(p11) fma.s1 Result = Poly, r, CORR + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result = r + Result (User supplied rounding mode) +// N odd: poly1 = S_hi * c + poly1 +// +(p12) fmpy.s1 S_lo = S_hi, poly1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fma.s1 P = poly2, rsq, Q1_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 +// +(p11) fadd.s0 Result = Result, r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: S_lo = S_hi * poly1 +// +(p12) fma.s1 S_lo = Q1_1, c, S_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N odd: Result = Result + S_hi (user supplied rounding mode) +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: S_lo = Q1_1 * c + S_lo +// +(p12) fma.s1 Result = P, r, S_lo + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// N odd: Result = S_lo + r * P +// +(p12) fadd.s0 Result = Result, S_hi +(p0) br.ret.sptk b0 ;; +} + + +TAN_NORMAL_R: + +{ .mfi +(p0) getf.sig sig_r = r +// ******************************************************************* +// ******************************************************************* +// ******************************************************************* +// +// r and c have been computed. +// Make sure ftz mode is set - should be automatic when using wre +// +// +// Get [i_1] - lsb of N_fix_gr alone. +// +(p0) fmerge.s Pos_r = f1, r +(p0) extr.u i_1 = N_fix_gr, 0, 1 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s sgn_r = r, f1 +(p0) cmp.eq.unc p11, p12 = 0x0000, i_1 ;; +} + +{ .mfi + nop.m 999 + nop.f 999 +(p0) extr.u lookup = sig_r, 58, 5 +} + +{ .mlx + nop.m 999 +(p0) movl Create_B = 0x8200000000000000 ;; +} + +{ .mfi +(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp + nop.f 999 +(p0) dep Create_B = lookup, Create_B, 58, 5 +} +;; + +// +// Get [i_1] - lsb of N_fix_gr alone. +// Pos_r = abs (r) +// + + +{ .mmi + ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +{ .mmi + nop.m 999 +(p0) setf.sig B = Create_B +// +// Set table_ptr1 and table_ptr2 to base address of +// constant table. +// +(p0) add table_ptr1 = 480, table_ptr1 ;; +} + +{ .mmb + nop.m 999 +// +// Is i_1 or i_0 == 0 ? +// Create the constant 1 00000 1000000000000000000000... +// +(p0) ldfe P2_1 = [table_ptr1], 16 + nop.b 999 +} + +{ .mmi + nop.m 999 ;; +(p0) getf.exp exp_r = Pos_r + nop.i 999 +} +// +// Get r's exponent +// Get r's significand +// + +{ .mmi +(p0) ldfe P2_2 = [table_ptr1], 16 ;; +// +// Get the 5 bits or r for the lookup. 1.xxxxx .... +// from sig_r. +// Grab lsb of exp of B +// +(p0) ldfe P2_3 = [table_ptr1], 16 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) andcm table_offset = 0x0001, exp_r ;; +(p0) shl table_offset = table_offset, 9 ;; +} + +{ .mii + nop.m 999 +// +// Deposit 0 00000 1000000000000000000000... on +// 1 xxxxx yyyyyyyyyyyyyyyyyyyyyy..., +// getting rid of the ys. +// Is B = 2** -2 or B= 2** -1? If 2**-1, then +// we want an offset of 512 for table addressing. +// +(p0) shladd table_offset = lookup, 4, table_offset ;; +// +// B = ........ 1xxxxx 1000000000000000000... +// +(p0) add table_ptr1 = table_ptr1, table_offset ;; +} + +{ .mmb + nop.m 999 +// +// B = ........ 1xxxxx 1000000000000000000... +// Convert B so it has the same exponent as Pos_r +// +(p0) ldfd T_hi = [table_ptr1], 8 + nop.b 999 ;; +} + +// +// x = |r| - B +// Load T_hi. +// Load C_hi. +// + +{ .mmf +(p0) addl table_ptr2 = @ltoff(TAN_BASE_CONSTANTS), gp +(p0) ldfs T_lo = [table_ptr1] +(p0) fmerge.se B = Pos_r, B +} +;; + +{ .mmi + ld8 table_ptr2 = [table_ptr2] + nop.m 999 + nop.i 999 +} +;; + +{ .mii +(p0) add table_ptr2 = 1360, table_ptr2 + nop.i 999 ;; +(p0) add table_ptr2 = table_ptr2, table_offset ;; +} + +{ .mfi +(p0) ldfd C_hi = [table_ptr2], 8 +(p0) fsub.s1 x = Pos_r, B + nop.i 999 ;; +} + +{ .mii +(p0) ldfs C_lo = [table_ptr2],255 + nop.i 999 ;; +// +// xsq = x * x +// N even: Tx = T_hi * x +// Load T_lo. +// Load C_lo - increment pointer to get SC_inv +// - cant get all the way, do an add later. +// +(p0) add table_ptr2 = 569, table_ptr2 ;; +} +// +// N even: Tx1 = Tx + 1 +// N odd: Cx1 = 1 - Cx +// + +{ .mfi +(p0) ldfe SC_inv = [table_ptr2], 0 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 xsq = x, x + nop.i 999 +} + +{ .mfi + nop.m 999 +(p11) fmpy.s1 Tx = T_hi, x + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fmpy.s1 Cx = C_hi, x + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: Cx = C_hi * x +// +(p0) fma.s1 P = P2_3, xsq, P2_2 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N even and odd: P = P2_3 + P2_2 * xsq +// +(p11) fadd.s1 Tx1 = Tx, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: D = C_hi - tanx +// N odd: D = T_hi + tanx +// +(p11) fmpy.s1 CORR = SC_inv, T_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 Sx = SC_inv, x + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fmpy.s1 CORR = SC_inv, C_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fsub.s1 V_hi = f1, Cx + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 P = P, xsq, P2_1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N even and odd: P = P2_1 + P * xsq +// +(p11) fma.s1 V_hi = Tx, Tx1, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Result = sgn_r * tail + T_hi (user rounding mode for C1) +// N odd: Result = sgn_r * tail + C_hi (user rounding mode for C1) +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 CORR = CORR, c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fnma.s1 V_hi = Cx,V_hi,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: V_hi = Tx * Tx1 + 1 +// N odd: Cx1 = 1 - Cx * Cx1 +// +(p0) fmpy.s1 P = P, xsq + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// N even and odd: P = P * xsq +// +(p11) fmpy.s1 V_hi = V_hi, T_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: tail = P * tail + V_lo +// +(p11) fmpy.s1 T_hi = sgn_r, T_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 CORR = CORR, sgn_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fmpy.s1 V_hi = V_hi,C_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: V_hi = T_hi * V_hi +// N odd: V_hi = C_hi * V_hi +// +(p0) fma.s1 tanx = P, x, x + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fnmpy.s1 C_hi = sgn_r, C_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: V_lo = 1 - V_hi + C_hi +// N odd: V_lo = 1 - V_hi + T_hi +// +(p11) fadd.s1 CORR = CORR, T_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fsub.s1 CORR = CORR, C_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: tanx = x + x * P +// N even and odd: Sx = SC_inv * x +// +(p11) fsub.s1 D = C_hi, tanx + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fadd.s1 D = T_hi, tanx + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N odd: CORR = SC_inv * C_hi +// N even: CORR = SC_inv * T_hi +// +(p0) fnma.s1 D = V_hi, D, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: D = 1 - V_hi * D +// N even and odd: CORR = CORR * c +// +(p0) fma.s1 V_hi = V_hi, D, V_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: V_hi = V_hi + V_hi * D +// N even and odd: CORR = sgn_r * CORR +// +(p11) fnma.s1 V_lo = V_hi, C_hi, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fnma.s1 V_lo = V_hi, T_hi, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: CORR = COOR + T_lo +// N odd: CORR = CORR - C_lo +// +(p11) fma.s1 V_lo = tanx, V_hi, V_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fnma.s1 V_lo = tanx, V_hi, V_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: V_lo = V_lo + V_hi * tanx +// N odd: V_lo = V_lo - V_hi * tanx +// +(p11) fnma.s1 V_lo = C_lo, V_hi, V_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +(p12) fnma.s1 V_lo = T_lo, V_hi, V_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: V_lo = V_lo - V_hi * C_lo +// N odd: V_lo = V_lo - V_hi * T_lo +// +(p0) fmpy.s1 V_lo = V_hi, V_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: V_lo = V_lo * V_hi +// +(p0) fadd.s1 tail = V_hi, V_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: tail = V_hi + V_lo +// +(p0) fma.s1 tail = tail, P, V_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: T_hi = sgn_r * T_hi +// N odd : C_hi = -sgn_r * C_hi +// +(p0) fma.s1 tail = tail, Sx, CORR + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even and odd: tail = Sx * tail + CORR +// +(p0) fma.s1 tail = V_hi, Sx, tail + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even an odd: tail = Sx * V_hi + tail +// +(p11) fma.s0 Result = sgn_r, tail, T_hi + nop.i 999 +} + +{ .mfb + nop.m 999 +(p12) fma.s0 Result = sgn_r, tail, C_hi +(p0) br.ret.sptk b0 ;; +} + +.endp __libm_tan +ASM_SIZE_DIRECTIVE(__libm_tan) + + + +// ******************************************************************* +// ******************************************************************* +// ******************************************************************* +// +// Special Code to handle very large argument case. +// Call int pi_by_2_reduce(&x,&r) +// for |arguments| >= 2**63 +// (Arg or x) is in f8 +// Address to save r and c as double + +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | r50 ->| <- r50 f0 ->| r50 -> | -> c +// | | | | +// sp-32 -> | <- r50 f0 ->| f0 ->| <- r50 r49 -> | -> r +// | | | | +// | r49 ->| <- r49 Arg ->| <- r49 | -> x +// | | | | +// sp -64 ->| sp -64 ->| sp -64 ->| | +// +// save pfs save b0 restore gp +// save gp restore b0 +// restore pfs + + + +.proc __libm_callout +__libm_callout: +TAN_ARG_TOO_LARGE: +.prologue +// (1) +{ .mfi + add GR_Parameter_r =-32,sp // Parameter: r address + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + +// (2) +{ .mmi + stfe [GR_Parameter_r ] = f0,16 // Clear Parameter r on stack + add GR_Parameter_X = 16,sp // Parameter x address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +// (3) +.body +{ .mib + stfe [GR_Parameter_r ] = f0,-16 // Clear Parameter c on stack + nop.i 0 + nop.b 0 +} +{ .mib + stfe [GR_Parameter_X] = Arg // Store Parameter x on stack + nop.i 0 +(p0) br.call.sptk b0=__libm_pi_by_2_reduce# +} +;; + + +// (4) +{ .mmi + mov gp = GR_SAVE_GP // Restore gp +(p0) mov N_fix_gr = r8 + nop.i 999 +} +;; + +{ .mmi +(p0) ldfe Arg =[GR_Parameter_X],16 +(p0) ldfs TWO_TO_NEG2 = [table_ptr2],4 + nop.i 999 +} +;; + + +{ .mmb +(p0) ldfe r =[GR_Parameter_r ],16 +(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr2],4 + nop.b 999 ;; +} + +{ .mfi +(p0) ldfe c =[GR_Parameter_r ] + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Is |r| < 2**(-2) +// +(p0) fcmp.lt.unc.s1 p6, p0 = r, TWO_TO_NEG2 + mov b0 = GR_SAVE_B0 // Restore return address +} +;; + +{ .mfi + nop.m 999 +(p6) fcmp.gt.unc.s1 p6, p0 = r, NEGTWO_TO_NEG2 + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs +} +;; + +{ .mbb +.restore sp + add sp = 64,sp // Restore stack pointer +(p6) br.cond.spnt TAN_SMALL_R +(p0) br.cond.sptk TAN_NORMAL_R +} +;; +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) + + +.proc __libm_TAN_SPECIAL +__libm_TAN_SPECIAL: + +// +// Code for NaNs, Unsupporteds, Infs, or +/- zero ? +// Invalid raised for Infs and SNaNs. +// + +{ .mfb + nop.m 999 +(p0) fmpy.s0 Arg = Arg, f0 +(p0) br.ret.sptk b0 +} +.endp __libm_TAN_SPECIAL +ASM_SIZE_DIRECTIVE(__libm_TAN_SPECIAL) + + +.type __libm_pi_by_2_reduce#,@function +.global __libm_pi_by_2_reduce# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mpa.c glibc-2.2.3/sysdeps/ia64/fpu/mpa.c --- glibc-2.2.2/sysdeps/ia64/fpu/mpa.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mpa.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mpatan.c glibc-2.2.3/sysdeps/ia64/fpu/mpatan.c --- glibc-2.2.2/sysdeps/ia64/fpu/mpatan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mpatan.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mpatan2.c glibc-2.2.3/sysdeps/ia64/fpu/mpatan2.c --- glibc-2.2.2/sysdeps/ia64/fpu/mpatan2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mpatan2.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mpexp.c glibc-2.2.3/sysdeps/ia64/fpu/mpexp.c --- glibc-2.2.2/sysdeps/ia64/fpu/mpexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mpexp.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mplog.c glibc-2.2.3/sysdeps/ia64/fpu/mplog.c --- glibc-2.2.2/sysdeps/ia64/fpu/mplog.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mplog.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mpsqrt.c glibc-2.2.3/sysdeps/ia64/fpu/mpsqrt.c --- glibc-2.2.2/sysdeps/ia64/fpu/mpsqrt.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mpsqrt.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/mptan.c glibc-2.2.3/sysdeps/ia64/fpu/mptan.c --- glibc-2.2.2/sysdeps/ia64/fpu/mptan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/mptan.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_atan.S glibc-2.2.3/sysdeps/ia64/fpu/s_atan.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_atan.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_atan.S Mon Feb 19 00:51:43 2001 @@ -0,0 +1,953 @@ +.file "atan.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/13/00: Improved speed +// 4/19/00: Removed the qualifying predicate from the fmerge.s that +// takes the absolute value. +// 6/16/00: Reassigned FP registers to eliminate stalls on loads +// 8/30/00: Saved 5 cycles in main path by rearranging large argument logic +// and delaying use of result of fcmp in load by 1 group +// +// API +//============================================================== +// double atan( double x); +// +// Overview of operation +//============================================================== +// atan(x) = sign(X)pi/2 - atan(1/x) +// +// We have two paths: |x| > 1 and |x| <= 1 +// +// |x| > 1 +// ========================================== +// +// c = frcpa(x) which is approximately 1/x +// +// xc = 1- B +// B = 1-xc +// +// Approximate 1/(1-B)^k by a polynomial in B, poly(B) +// k is 45. +// +// poly(B) = 1 + r1 B + r2 B^2 + ...+ r10 B^10 +// +// c^k = (1-B)^k/x^k +// c^k/(1-B)^k = 1/x^k +// c^k poly(B) = 1/x^k + +// poly(x) = series(atan(1/x)) = 1/x - 1/3x^3 + 1/5x^5 - 1/7x^7 .... + 1/45 x^45 +// = 1/x^45 ( x^44 - x^42/3 + x^40/5 - x^38/7 ... +1) +// = 1/x^45 ( y^22 - y^21/3 + y^20/5 - y^19/7 ... +1) +// +// = c^45 poly(B) poly(x) +// = c^45 r(B) q(y) + +// q(y) = q0 + q1 y + q2 y^2 + ... + q22 y^22 +// where q22 is 1.0 + +// atan(x) = sign(X)pi/2 - c^45 r(B) q(y) + +// |x| <= 1 +// ========================================== +// poly(x) = series(atan(x)) = x - x^3/3 + x^5/5 + ..... +// poly(x) = series(atan(x)) = x + x^3(- 1/3 + x^2/5 + ..... +x^47/47) +// poly(x) = series(atan(x)) = x + x^3(p0 + x^2/5 + ..... + x^44/47) +// poly(x) = series(atan(x)) = x + x^3(p0 + y/5 + ..... + y^22/47) + +// where p0 is about -1/3. + +// atan(x) = poly(x) + +#include "libm_support.h" + +// Special Values +//============================================================== +// atan(QNAN) = QNAN +// atan(SNAN) = quieted SNAN +// atan(+-inf) = +- pi/2 +// atan(+-0) = +-0 + + + +// Registers used +//============================================================== + +// predicate registers used: +// p6 -> p11 + +// floating-point registers used: +// f32 -> f127 + +// general registers used +// r32 -> r37 + +// Assembly macros +//============================================================== +atan_Pi_by_2 = f32 +atan_S_PI = f33 +atan_ABS_f8 = f34 + +atan_R0 = f35 +atan_R1 = f36 +atan_R2 = f37 +atan_R3 = f38 +atan_R4 = f39 +atan_R5 = f40 +atan_R6 = f41 +atan_R7 = f42 +atan_R8 = f43 +atan_R9 = f44 +atan_R10 = f45 + +atan_Q0 = f46 + +atan_Q1 = f47 +atan_Q2 = f48 +atan_Q3 = f49 +atan_Q4 = f50 +atan_Q5 = f51 +atan_Q6 = f52 +atan_Q7 = f53 +atan_Q8 = f54 +atan_Q9 = f55 +atan_Q10 = f56 + +atan_Q11 = f57 +atan_Q12 = f58 +atan_Q13 = f59 +atan_Q14 = f60 +atan_Q15 = f61 +atan_Q16 = f62 +atan_Q17 = f63 +atan_Q18 = f64 +atan_Q19 = f65 +atan_Q20 = f66 +atan_Q21 = f67 +atan_Q22 = f68 + +// P and Q constants are mutually exclusive +// so they can share macro definitions +atan_P0 = f46 + +atan_P1 = f47 +atan_P2 = f48 +atan_P3 = f49 +atan_P4 = f10 +atan_P5 = f11 +atan_P6 = f12 +atan_P7 = f13 +atan_P10 = f103 + +atan_P11 = f114 +atan_P12 = f58 +atan_P13 = f59 +atan_P14 = f60 +atan_P15 = f61 +atan_P16 = f62 +atan_P17 = f63 +atan_P18 = f64 +atan_P19 = f65 +atan_P20 = f14 +atan_P21 = f99 +atan_P22 = f68 +// end of P constant macros + +atan_C = f69 +atan_Y = f70 +atan_B = f71 +atan_Z = f72 +atan_V11 = f73 +atan_V12 = f74 + +atan_V7 = f75 +atan_V8 = f76 + +atan_W13 = f77 +atan_W11 = f78 + +atan_V3 = f79 +atan_V4 = f80 + +atan_G11 = f81 +atan_G12 = f82 +atan_G7 = f83 +atan_G8 = f84 + +atan_Z1 = f85 +atan_W7 = f86 + +atan_G3 = f87 +atan_W8 = f88 +atan_V9 = f89 +atan_V10 = f90 + +atan_G10 = f91 +atan_W3 = f92 +atan_G4 = f93 +atan_G9 = f94 + +atan_G6 = f95 +atan_W4 = f96 +atan_Z2 = f97 +atan_V6 = f98 + +atan_V2 = f99 +atan_W6 = f100 +atan_W10 = f101 +atan_Y3 = f102 + +atan_G2 = f103 + +atan_Y8 = f104 + +atan_G5 = f105 +atan_Z3 = f106 +atan_Z4 = f107 +atan_W2 = f108 +atan_V5 = f109 + +atan_W5 = f110 +atan_G1 = f111 +atan_Y11 = f112 + +atan_Z5 = f113 +atan_Z6 = f114 +atan_V1 = f115 +atan_W1 = f116 + +atan_Z7 = f117 +atan_Q = f118 +atan_Z = f119 +atan_abs_f8 = f120 + +atan_V13 = f121 +atan_Xcub = f122 +atan_Y12 = f123 +atan_P = f124 + +atan_NORM_f8 = f125 + +atan_P8 = f126 +atan_P9 = f127 + + + + +atan_GR_AD_R = r14 +atan_GR_AD_Q = r15 +atan_GR_AD_P = r16 +atan_GR_10172 = r17 +atan_GR_exp_f8 = r18 +atan_GR_signexp_f8 = r19 +atan_GR_exp_mask = r20 + + + + +///////////////////////////////////////////////////////////// + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +double_atan_constants_R: +ASM_TYPE_DIRECTIVE(double_atan_constants_R,@object) + data8 0xB36B46B9C5443CED, 0x0000401C //R8 + data8 0x842633E0D126261F, 0x0000401F //R9 + data8 0xBE04FFFFFFFF46E0, 0x00004010 //R4 + data8 0xE8C62000244D66E2, 0x00004013 //R5 + data8 0xF2790C001E3789B3, 0x00004016 //R6 + data8 0xDCD2CCF97D7C764F, 0x00004019 //R7 + data8 0xB40000000000000B, 0x00004004 //R1 + data8 0xB265F3D38F5EE28F, 0x00004021 //R10 + data8 0x8160000000000001, 0x00004009 //R2 + data8 0xFD5BFFFFFFFE55CD, 0x0000400C //R3 + data8 0xC90FDAA22168C235, 0x00003FFF // pi/2 +ASM_SIZE_DIRECTIVE(double_atan_constants_R) + +double_atan_constants_Q: +ASM_TYPE_DIRECTIVE(double_atan_constants_Q,@object) + data8 0xEBD602FA7761BC33, 0x00003FF9 //Q8 + data8 0x8CB1CABD6A91913C, 0x0000BFFA //Q9 + data8 0x84C665C37D623CD2, 0x00003FF7 //Q4 + data8 0x8DE0D1673DAEA9BC, 0x0000BFF8 //Q5 + data8 0xF658ADBE2C6E6FCC, 0x00003FF8 //Q6 + + data8 0xB56307BE1DD3FFB6, 0x0000BFF9 //Q7 + data8 0xAAAAAAAAAAAA8000, 0x0000BFFD //Q21 + data8 0x8000000000000000, 0x00003FFF //Q22 + data8 0x924924923A9D710C, 0x0000BFFC //Q19 + data8 0xCCCCCCCCCC9380E7, 0x00003FFC //Q20 + + data8 0xA644DC250EFA2800, 0x00003FED //Q0 + data8 0x83DEAE24EEBF5E44, 0x0000BFF1 //Q1 + data8 0xC758CCC64793D4EC, 0x00003FF3 //Q2 + data8 0xBFDC0B54E7C89DCE, 0x0000BFF5 //Q3 + data8 0x888855199D1290AF, 0x0000BFFB //Q15 + + data8 0x9D89D3BE514B0178, 0x00003FFB //Q16 + data8 0xBA2E8B4DEC70282A, 0x0000BFFB //Q17 + data8 0xE38E38DF9E9FC83B, 0x00003FFB //Q18 + data8 0x9F8781CC990029D9, 0x00003FFA //Q10 + data8 0xB0B39472DEBA3C79, 0x0000BFFA //Q11 + + data8 0xC2AFAEF8C85B0BC6, 0x00003FFA //Q12 + data8 0xD780E539797525DD, 0x0000BFFA //Q13 + data8 0xF0EDC449AC786DF9, 0x00003FFA //Q14 +ASM_SIZE_DIRECTIVE(double_atan_constants_Q) + + + +double_atan_constants_P: +ASM_TYPE_DIRECTIVE(double_atan_constants_P,@object) + data8 0xB1899EC590CDB8DF, 0x0000BFFA //P10 + data8 0xA1E79850A67D59B0, 0x00003FFA //P11 + data8 0x911D8B30C2A96E6D, 0x0000BFF3 //P20 + data8 0xB87233C68A640706, 0x00003FF0 //P21 + data8 0xD78E4B82F3C29D7A, 0x0000BFFA //P8 + + data8 0xC2EBE37AF932C14F, 0x00003FFA //P9 + data8 0xBA2E8B94AA104DD6, 0x0000BFFB //P4 + data8 0x9D89D7A640B71D38, 0x00003FFB //P5 + data8 0x88887CA2CE9B2A40, 0x0000BFFB //P6 + data8 0xF0F017D57A919C1E, 0x00003FFA //P7 + + data8 0xD0D635F230C80E06, 0x0000BFF8 //P16 + data8 0xE847BECA7209B479, 0x00003FF7 //P17 + data8 0xD14C6A2AAE0D5B07, 0x0000BFF6 //P18 + data8 0x915F612A5C469117, 0x00003FF5 //P19 + data8 0x921EDE5FD0DBBBE2, 0x0000BFFA //P12 + + data8 0xFFD303C2C8535445, 0x00003FF9 //P13 + data8 0xD30DF50E295386F7, 0x0000BFF9 //P14 + data8 0x9E81F2B1BBD210A8, 0x00003FF9 //P15 + data8 0xAAAAAAAAAAAAA800, 0x0000BFFD //P0 + data8 0xCCCCCCCCCCC7D476, 0x00003FFC //P1 + + data8 0x9249249247838066, 0x0000BFFC //P2 + data8 0xE38E38E302290D68, 0x00003FFB //P3 + data8 0xDF7F0A816F7E5025, 0x0000BFEC //P22 +ASM_SIZE_DIRECTIVE(double_atan_constants_P) + + +.align 32 +.global atan# + +//////////////////////////////////////////////////////// + + + +.section .text +.proc atan# +.align 32 + +atan: + +{ .mmf +(p0) addl atan_GR_AD_P = @ltoff(double_atan_constants_P), gp +(p0) addl atan_GR_AD_Q = @ltoff(double_atan_constants_Q), gp +(p0) fmerge.s atan_ABS_f8 = f0,f8 +} +;; + +{ .mmf + ld8 atan_GR_AD_P = [atan_GR_AD_P] + ld8 atan_GR_AD_Q = [atan_GR_AD_Q] +(p0) frcpa.s1 atan_C,p8 = f1,f8 +} +;; + +{ .mmf +(p0) addl atan_GR_AD_R = @ltoff(double_atan_constants_R), gp +(p0) addl atan_GR_exp_mask = 0x1ffff, r0 +(p0) fma.s1 atan_Y = f8,f8,f0 +} +;; + +// This fnorm takes faults or sets fault flags +{ .mmf +(p0) mov atan_GR_10172 = 0x10172 + ld8 atan_GR_AD_R = [atan_GR_AD_R] +(p0) fnorm atan_NORM_f8 = f8 +} +;; + + +// qnan snan inf norm unorm 0 -+ +// 1 1 0 0 0 1 11 +// c 7 + +// p9 set if we have a NAN or +-0 + +{ .mmf +(p0) ldfe atan_Q8 = [atan_GR_AD_Q],16 +(p0) ldfe atan_P10 = [atan_GR_AD_P],16 +(p0) fclass.m.unc p9, p0 = f8, 0xc7 +} +;; + + +{ .mmi +(p0) ldfe atan_Q9 = [atan_GR_AD_Q],16 +(p0) ldfe atan_P11 = [atan_GR_AD_P],16 + nop.i 999 +} +;; + + +{ .mmf +(p0) ldfe atan_Q4 = [atan_GR_AD_Q],16 +(p0) ldfe atan_P20 = [atan_GR_AD_P],16 +(p9) fma.d.s0 f8 = f8,f1,f0 +;; +} + +// Exit if we have a NAN or +-0 +{ .mmb +(p0) ldfe atan_Q5 = [atan_GR_AD_Q],16 +(p0) ldfe atan_P21 = [atan_GR_AD_P],16 +(p9) br.ret.spnt b0 +;; +} + + +// p6 is TRUE if |x| <= 1 +// p7 is TRUE if |x| > 1 +{ .mmf +(p0) ldfe atan_Q6 = [atan_GR_AD_Q],16 +(p0) ldfe atan_P8 = [atan_GR_AD_P],16 +(p0) fcmp.le.unc p6,p7 = atan_ABS_f8, f1 +;; +} + + +{ .mfi +(p0) ldfe atan_Q7 = [atan_GR_AD_Q],16 +(p0) fma.s1 atan_Z = atan_C, atan_C, f0 + nop.i 999 +} +{ .mfi +(p0) ldfe atan_P9 = [atan_GR_AD_P],16 +(p0) fnma.s1 atan_B = atan_C,f8, f1 + nop.i 999 ;; +} + + +{ .mfi +(p0) ldfe atan_Q21 = [atan_GR_AD_Q],16 +(p0) fma.s1 atan_V12 = atan_Y, atan_Y, f0 + nop.i 999 +} +{ .mfi +(p0) ldfe atan_P4 = [atan_GR_AD_P],16 +(p0) fma.s1 atan_Xcub = f8, atan_Y , f0 + nop.i 999 +;; +} + + +{ .mmi +(p7) ldfe atan_Q22 = [atan_GR_AD_Q],16 +(p6) ldfe atan_P5 = [atan_GR_AD_P],16 +(p6) cmp.eq.unc p8,p0 = r0,r0 +;; +} + + +{ .mmi +(p7) ldfe atan_Q19 = [atan_GR_AD_Q],16 +(p6) ldfe atan_P6 = [atan_GR_AD_P],16 +(p7) cmp.eq.unc p9,p0 = r0,r0 +;; +} + + +{ .mmi +(p7) ldfe atan_Q20 = [atan_GR_AD_Q],16 +(p6) ldfe atan_P7 = [atan_GR_AD_P],16 + nop.i 999 +;; +} + +{ .mfi +(p7) ldfe atan_Q0 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_V13 = atan_Y, atan_P11, atan_P10 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P16 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_V11 = atan_Y, atan_Q9, atan_Q8 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_Q1 = [atan_GR_AD_Q],16 +(p7) fma.s1 atan_G12 = atan_B, atan_B, f0 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P17 = [atan_GR_AD_P],16 +(p0) fma.s1 atan_V9 = atan_V12, atan_V12, f0 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_Q2 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_W11 = atan_Y, atan_P21, atan_P20 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P18 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_V7 = atan_Y, atan_Q5, atan_Q4 + nop.i 999 ;; +} + +{ .mfi +(p7) ldfe atan_Q3 = [atan_GR_AD_Q],16 +(p7) fma.s1 atan_Z1 = atan_Z, atan_Z, f0 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P19 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_Y3 = atan_Y , atan_V12, f0 + nop.i 999 ;; +} + +{ .mfi +(p7) ldfe atan_R8 = [atan_GR_AD_R],16 +(p6) fma.s1 atan_V11 = atan_Y, atan_P9, atan_P8 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P12 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_V8 = atan_Y, atan_Q7, atan_Q6 + nop.i 999 ;; +} + +{ .mmi +(p7) ldfe atan_R9 = [atan_GR_AD_R],16 +(p6) ldfe atan_P13 = [atan_GR_AD_P],16 + nop.i 999 +;; +} + +{ .mfi +(p7) ldfe atan_R4 = [atan_GR_AD_R],16 +(p6) fma.s1 atan_V7 = atan_Y, atan_P5, atan_P4 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P14 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_W13 = atan_Y, atan_Q22, atan_Q21 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_R5 = [atan_GR_AD_R],16 +(p6) fma.s1 atan_Y12 = atan_V9 , atan_V9 , f0 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P15 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_Y8 = atan_V9 , atan_V9 , f0 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_R6 = [atan_GR_AD_R],16 +(p6) fma.s1 atan_V8 = atan_Y, atan_P7, atan_P6 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P0 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_W11 = atan_Y, atan_Q20, atan_Q19 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_R7 = [atan_GR_AD_R],16 +(p7) fma.s1 atan_Z2 = atan_Z1 , atan_Z1, f0 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P1 = [atan_GR_AD_P],16 +(p6) fma.s1 atan_V10 = atan_V12, atan_V13, atan_V11 + nop.i 999 ;; +} + +{ .mfi +(p7) ldfe atan_Q15 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_W7 = atan_Y, atan_P17, atan_P16 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P2 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_V3 = atan_Y, atan_Q1 , atan_Q0 + nop.i 999 ;; +} + +{ .mfi +(p7) ldfe atan_Q16 = [atan_GR_AD_Q],16 +(p7) fma.s1 atan_G9 = atan_G12, atan_G12, f0 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P3 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_V6 = atan_V12, atan_V8, atan_V7 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_R1 = [atan_GR_AD_R],16 +(p6) fma.s1 atan_W8 = atan_Y, atan_P19, atan_P18 + nop.i 999 +} +{ .mfi +(p6) ldfe atan_P22 = [atan_GR_AD_P],16 +(p7) fma.s1 atan_V4 = atan_Y, atan_Q3 , atan_Q2 + nop.i 999 ;; +} + + +{ .mfi + getf.exp atan_GR_signexp_f8 = atan_NORM_f8 +(p7) fma.s1 atan_Y11 = atan_Y3 , atan_Y8 , f0 + nop.i 999 +} +{ .mfi +(p7) ldfe atan_Q17 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_V6 = atan_V12, atan_V8, atan_V7 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_Q18 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_W3 = atan_Y, atan_P13, atan_P12 + nop.i 999 +} +{ .mfi +(p7) ldfe atan_R10 = [atan_GR_AD_R],16 +(p7) fma.s1 atan_G11 = atan_B, atan_R9 , atan_R8 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_Q10 = [atan_GR_AD_Q],16 +(p7) fma.s1 atan_Z3 = atan_Z1 , atan_Z2 , f0 +(p0) and atan_GR_exp_f8 = atan_GR_signexp_f8,atan_GR_exp_mask +} +{ .mfi +(p7) ldfe atan_R2 = [atan_GR_AD_R],16 +(p7) fma.s1 atan_Z4 = atan_Z2 , atan_Z2 , f0 + nop.i 999 ;; +} + + +{ .mfi +(p7) ldfe atan_Q11 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_W4 = atan_Y, atan_P15, atan_P14 + nop.i 999 +} +{ .mfi +(p7) ldfe atan_R3 = [atan_GR_AD_R],16 +(p7) fma.s1 atan_G7 = atan_B, atan_R5 , atan_R4 +(p0) cmp.le.unc p11,p0 = atan_GR_10172,atan_GR_exp_f8 +;; +} + + +{ .mmf +(p9) ldfe atan_Q12 = [atan_GR_AD_Q],16 +(p0) ldfe atan_S_PI = [atan_GR_AD_R],16 +(p8) fma.s1 atan_W6 = atan_V12, atan_W8, atan_W7 +;; +} + + + +{ .mfi +(p9) ldfe atan_Q13 = [atan_GR_AD_Q],16 +(p8) fma.s1 atan_V3 = atan_Y, atan_P1 , atan_P0 +(p11) cmp.ne.and p6,p7 = r0,r0 +} +{ .mfi + nop.m 999 +(p8) fma.s1 atan_V5 = atan_V9 , atan_V10, atan_V6 + nop.i 999 ;; +} + + +.pred.rel "mutex",p6,p7,p11 +{ .mfi +(p7) ldfe atan_Q14 = [atan_GR_AD_Q],16 +(p6) fma.s1 atan_Y12 = atan_V9 , atan_Y12, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G8 = atan_B, atan_R7 , atan_R6 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_V4 = atan_Y, atan_P3 , atan_P2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W7 = atan_Y, atan_Q16, atan_Q15 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_W10 = atan_V12, atan_P22, atan_W11 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G3 = atan_B, atan_R1 , f1 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_W2 = atan_V12, atan_W4 , atan_W3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_V2 = atan_V12, atan_V4 , atan_V3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W8 = atan_Y, atan_Q18, atan_Q17 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G10 = atan_G12, atan_R10, atan_G11 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_V10 = atan_V12, atan_Q10, atan_V11 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G6 = atan_G12, atan_G8 , atan_G7 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_V2 = atan_V12, atan_V4, atan_V3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G4 = atan_B , atan_R3 , atan_R2 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_W5 = atan_V9 , atan_W10, atan_W6 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W3 = atan_Y , atan_Q12, atan_Q11 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_Z5 = atan_Z3 , atan_Z4 , f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W10 = atan_V12, atan_W13, atan_W11 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W4 = atan_Y , atan_Q14, atan_Q13 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W6 = atan_V12, atan_W8, atan_W7 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_V5 = atan_V9 , atan_V10, atan_V6 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G5 = atan_G9 , atan_G10, atan_G6 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_V1 = atan_V9 , atan_V5 , atan_V2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G2 = atan_G12, atan_G4 , atan_G3 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_W1 = atan_V9 , atan_W5 , atan_W2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_Z6 = atan_Z4 , atan_C , f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.s atan_S_PI = f8, atan_S_PI + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W5 = atan_V9 , atan_W10, atan_W6 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W2 = atan_V12, atan_W4 , atan_W3 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_G1 = atan_G9 , atan_G5 , atan_G2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_V1 = atan_V9 , atan_V5 , atan_V2 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.s1 atan_P = atan_Y12, atan_W1 , atan_V1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_Z7 = atan_Z5 , atan_Z6 , f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_W1 = atan_V9 , atan_W5 , atan_W2 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p11) fma.d.s0 f8 = atan_S_PI,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 atan_Z = atan_G1 , atan_Z7 , f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p7) fma.s1 atan_Q = atan_Y11, atan_W1 , atan_V1 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p6) fma.d.s0 f8 = atan_P , atan_Xcub , f8 + nop.i 999 +} +{ .mfb + nop.m 999 +(p7) fnma.d.s0 f8 = atan_Z , atan_Q , atan_S_PI +(p0) br.ret.sptk b0 ;; +} + +.endp atan +ASM_SIZE_DIRECTIVE(atan) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_atanf.S glibc-2.2.3/sysdeps/ia64/fpu/s_atanf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_atanf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_atanf.S Mon Feb 19 00:51:56 2001 @@ -0,0 +1,543 @@ +.file "atanf.s" + +// THIS IS NOT OPTIMIZED AND NOT OFFICIAL + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + + +// History +//============================================================== +// ?/??/00 Initial revision +// 8/17/00 Changed predicate register macro-usage to direct predicate +// names due to an assembler bug. + +#include "libm_support.h" + +// +// Assembly macros +//============================================================== + +// integer registers used +EXP_Addr1 = r33 +EXP_Addr2 = r34 + +// floating point registers used +atanf_coeff_R4 = f32 +atanf_coeff_R5 = f33 +atanf_coeff_R1 = f34 +atanf_coeff_R2 = f35 + +atanf_coeff_R3 = f36 +atanf_coeff_P1 = f37 +atanf_coeff_Q6 = f38 +atanf_coeff_Q7 = f39 +atanf_coeff_Q8 = f40 + +atanf_coeff_Q9 = f41 +atanf_coeff_Q4 = f42 +atanf_coeff_Q5 = f43 +atanf_coeff_Q2 = f44 +atanf_coeff_Q3 = f45 + +atanf_coeff_P5 = f46 +atanf_coeff_P6 = f47 +atanf_coeff_Q0 = f48 +atanf_coeff_Q1 = f49 +atanf_coeff_P7 = f50 + +atanf_coeff_P8 = f51 +atanf_coeff_P3 = f52 +atanf_coeff_P4 = f53 +atanf_coeff_P9 = f54 +atanf_coeff_P10 = f55 + +atanf_coeff_P2 = f56 +atanf_piby2 = f57 +atanf_z = f58 +atanf_b = f59 +atanf_zsq = f60 + +atanf_sgn_x = f61 +atanf_sgnx_piby2 = f62 +atanf_abs_x = f63 +atanf_t = f64 +atanf_xcub = f65 + +atanf_tsq = f66 +atanf_t4 = f67 +atanf_x5 = f68 +atanf_x6 = f69 +atanf_x11 = f70 + +atanf_poly_p1 = f71 +atanf_poly_p2 = f72 +atanf_poly_p3 = f73 +atanf_poly_p4 = f74 +atanf_poly_p5 = f75 + +atanf_poly_q1 = f76 +atanf_poly_q2 = f77 +atanf_poly_q3 = f78 +atanf_poly_q4 = f79 +atanf_poly_q5 = f80 + +atanf_poly_q = f81 +atanf_poly_r1 = f81 +atanf_poly_r2 = f82 +atanf_poly_r3 = f83 +atanf_bsq = f84 +atanf_z4 = f85 + +atanf_z5 = f86 +atanf_z8 = f87 +atanf_z13 = f88 +atanf_poly_r2 = f89 +atanf_poly_r1 = f90 + +atanf_z8_bsq = f91 +atanf_poly_r = f92 +atanf_z21_poly_r = f93 +atanf_answer = f8 + + +// predicate registers used +//atanf_pred_LE1 = p6 +//atanf_pred_GT1 = p7 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +atanf_coeff_1_table: +ASM_TYPE_DIRECTIVE(atanf_coeff_1_table,@object) +data8 0x40c4c241be751ff2 // r4 +data8 0x40e9f300c2f3070b // r5 +data8 0x409babffef772075 // r3 +data8 0xbfd5555512191621 // p1 +data8 0x3fc9997e7afbff4e // p2 = q8 +data8 0xbfd5555512191621 // p1 = q9 +data8 0x3f97105b4160f86b // p8 = q2 +data8 0xbfa6e10ba401393f // p7 = q3 +data8 0x3f522e5d33bc9baa // p10 = q0 +data8 0xbf7deaadaa336451 // p9 = q1 +data8 0xbfc2473c5145ee38 // p3 +data8 0x3fbc4f512b1865f5 // p4 +data8 0x3fc9997e7afbff4e // p2 +data8 0x3ff921fb54442d18 // pi/2 +ASM_SIZE_DIRECTIVE(atanf_coeff_1_table) + + + +atanf_coeff_2_table: +ASM_TYPE_DIRECTIVE(atanf_coeff_2_table,@object) +data8 0x4035000000004284 // r1 +data8 0x406cdffff336a59b // r2 +data8 0x3fbc4f512b1865f5 // p4 = q6 +data8 0xbfc2473c5145ee38 // p3 = q7 +data8 0x3fb142a73d7c54e3 // p6 = q4 +data8 0xbfb68eed6a8cfa32 // p5 = q5 +data8 0xbfb68eed6a8cfa32 // p5 +data8 0x3fb142a73d7c54e3 // p6 +data8 0xbfa6e10ba401393f // p7 +data8 0x3f97105b4160f86b // p8 +data8 0xbf7deaadaa336451 // p9 +data8 0x3f522e5d33bc9baa // p10 +ASM_SIZE_DIRECTIVE(atanf_coeff_2_table) + + + +.global atanf + +.text +.proc atanf + +.align 32 +atanf: + + +{ .mfi + alloc r32 = ar.pfs,1,2,0,0 + frcpa.s1 atanf_z,p0 = f1,f8 + addl EXP_Addr2 = @ltoff(atanf_coeff_2_table),gp +} +{ .mfi + addl EXP_Addr1 = @ltoff(atanf_coeff_1_table),gp + fma.s1 atanf_t = f8,f8,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fmerge.s atanf_sgn_x = f8,f1 + nop.i 999;; +} + +{ .mfi + ld8 EXP_Addr1 = [EXP_Addr1] + fmerge.s atanf_abs_x = f1,f8 + nop.i 999 +} +{ .mfi + ld8 EXP_Addr2 = [EXP_Addr2] + nop.f 999 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fclass.m p8,p0 = f8,0x7 // @zero + nop.i 999;; +} + +{ .mfi + nop.m 999 + fcmp.eq.unc.s0 p9,p10 = f8,f1 + nop.i 999;; +} + +{ .mfi + ldfpd atanf_coeff_R4,atanf_coeff_R5 = [EXP_Addr1],16 + fnma.s1 atanf_b = f8,atanf_z,f1 + nop.i 999 +} +{ .mfi + ldfpd atanf_coeff_R1,atanf_coeff_R2 = [EXP_Addr2],16 + fma.s1 atanf_zsq = atanf_z,atanf_z,f0 + nop.i 999;; +} + + +{ .mfi + ldfpd atanf_coeff_R3,atanf_coeff_P1 = [EXP_Addr1],16 + fma.s1 atanf_xcub = f8,atanf_t,f0 + nop.i 999 +} +{ .mfi + ldfpd atanf_coeff_Q6,atanf_coeff_Q7 = [EXP_Addr2],16 + fma.s1 atanf_tsq = atanf_t,atanf_t,f0 + nop.i 999;; +} + + +{ .mfi + ldfpd atanf_coeff_Q8,atanf_coeff_Q9 = [EXP_Addr1],16 +// fcmp.le.s1 atanf_pred_LE1,atanf_pred_GT1 = atanf_abs_x,f1 + fcmp.le.s1 p6,p7 = atanf_abs_x,f1 + nop.i 999 +} +{ .mfi + ldfpd atanf_coeff_Q4,atanf_coeff_Q5 = [EXP_Addr2],16 + nop.f 999 + nop.i 999;; +} + + +{ .mfi + ldfpd atanf_coeff_Q2,atanf_coeff_Q3 = [EXP_Addr1],16 + fclass.m p8,p0 = f8,0xe7 // @inf|@qnan|@snan|@zero + nop.i 999 +} +{ .mfi + ldfpd atanf_coeff_P5,atanf_coeff_P6 = [EXP_Addr2],16 + nop.f 999 + nop.i 999;; +} + + +{ .mfi + ldfpd atanf_coeff_Q0,atanf_coeff_Q1 = [EXP_Addr1],16 + nop.f 999 + nop.i 999 +} +{ .mfi + ldfpd atanf_coeff_P7,atanf_coeff_P8 = [EXP_Addr2],16 + nop.f 999 + nop.i 999;; +} + + +{ .mfi + ldfpd atanf_coeff_P3,atanf_coeff_P4 = [EXP_Addr1],16 + fma.s1 atanf_bsq = atanf_b,atanf_b,f0 + nop.i 999 +} +{ .mfi + ldfpd atanf_coeff_P9,atanf_coeff_P10 = [EXP_Addr2] + fma.s1 atanf_z4 = atanf_zsq,atanf_zsq,f0 + nop.i 999;; +} + + +{ .mfi + ldfpd atanf_coeff_P2,atanf_piby2 = [EXP_Addr1] + fma.s1 atanf_x6 = atanf_t,atanf_tsq,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_t4 = atanf_tsq,atanf_tsq,f0 + nop.i 999;; +} + + +{ .mfb + nop.m 999 + fma.s1 atanf_x5 = atanf_t,atanf_xcub,f0 +(p8) br.cond.spnt L(ATANF_X_INF_NAN_ZERO) +} +;; + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_r1 = atanf_b,atanf_coeff_R1,f1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_r3 = atanf_b,atanf_coeff_R5,atanf_coeff_R4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_r2 = atanf_b,atanf_coeff_R3,atanf_coeff_R2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_z8 = atanf_z4,atanf_z4,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q2 = atanf_t,atanf_coeff_Q5,atanf_coeff_Q4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q3 = atanf_t,atanf_coeff_Q7,atanf_coeff_Q6 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_z5 = atanf_z,atanf_z4,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q1 = atanf_t,atanf_coeff_Q9,atanf_coeff_Q8 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q4 = atanf_t,atanf_coeff_Q1,atanf_coeff_Q0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q5 = atanf_t,atanf_coeff_Q3,atanf_coeff_Q2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p4 = f8,atanf_coeff_P1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p5 = atanf_t,atanf_coeff_P4,atanf_coeff_P3 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_r1 = atanf_z8,atanf_poly_r1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_z8_bsq = atanf_z8,atanf_bsq,f0 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q2 = atanf_tsq,atanf_poly_q3,atanf_poly_q2 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_r2 = atanf_bsq,atanf_poly_r3,atanf_poly_r2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p2 = atanf_t,atanf_coeff_P8,atanf_coeff_P7 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q1 = atanf_poly_q1,f1,atanf_tsq + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_z13 = atanf_z5,atanf_z8,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p1 = atanf_t,atanf_coeff_P10,atanf_coeff_P9 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p4 = atanf_t,atanf_poly_p4,f8 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q4 = atanf_tsq,atanf_poly_q5,atanf_poly_q4 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p3 = atanf_t,atanf_coeff_P6,atanf_coeff_P5 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p5 = atanf_t,atanf_poly_p5,atanf_coeff_P2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_x11 = atanf_x5,atanf_x6,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_r = atanf_z8_bsq,atanf_poly_r2,atanf_poly_r1 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma atanf_sgnx_piby2 = atanf_sgn_x,atanf_piby2,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q2 = atanf_t4,atanf_poly_q1,atanf_poly_q2 + nop.i 999;; +} + + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p1 = atanf_tsq,atanf_poly_p1,atanf_poly_p2 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p4 = atanf_x5,atanf_poly_p5,atanf_poly_p4 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 atanf_z21_poly_r = atanf_z13,atanf_poly_r,f0 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_q = atanf_t4,atanf_poly_q2,atanf_poly_q4 + nop.i 999;; +} + +{ .mfi + nop.m 999 + fma.s1 atanf_poly_p1 = atanf_tsq,atanf_poly_p1,atanf_poly_p3 + nop.i 999;; +} + +{ .mfi + nop.m 999 +//(atanf_pred_GT1) fnma.s atanf_answer = atanf_poly_q,atanf_z21_poly_r,atanf_sgnx_piby2 +(p7) fnma.s atanf_answer = atanf_poly_q,atanf_z21_poly_r,atanf_sgnx_piby2 + nop.i 999;; +} + +{ .mfb + nop.m 999 +//(atanf_pred_LE1) fma.s atanf_answer = atanf_x11,atanf_poly_p1,atanf_poly_p4 +(p6) fma.s atanf_answer = atanf_x11,atanf_poly_p1,atanf_poly_p4 + br.ret.sptk b0 +} + + + +L(ATANF_X_INF_NAN_ZERO): + + fclass.m p8,p9 = f8,0x23 // @inf +;; +(p8) fmerge.s f8 = f8, atanf_piby2 +;; + fnorm.s f8 = f8 + br.ret.sptk b0 + +.endp atanf +ASM_SIZE_DIRECTIVE(atanf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_atanl.S glibc-2.2.3/sysdeps/ia64/fpu/s_atanl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_atanl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_atanl.S Mon Feb 19 00:52:11 2001 @@ -0,0 +1,1994 @@ +.file "atanl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// +// ********************************************************************* +// +// History +// 2/02/00 (hand-optimized) +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: atanl(x) = inverse tangent(x), for double extended x values +// Function: atan2l(y,x) = atan(y/x), for double extended x values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9-f15 +// f32-f79 +// +// General Purpose Registers: +// r32-r48 +// r49,r50,r51,r52 (Arguments to error support for 0,0 case) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Underflow exceptions may occur +// Special error handling for the y=0 and x=0 case +// Inexact raised when appropriate by algorithm +// +// atanl(SNaN) = QNaN +// atanl(QNaN) = QNaN +// atanl(+/-0) = +/- 0 +// atanl(+/-Inf) = +/-pi/2 +// +// atan2l(Any NaN for x or y) = QNaN +// atan2l(+/-0,x) = +/-0 for x > 0 +// atan2l(+/-0,x) = +/-pi for x < 0 +// atan2l(+/-0,+0) = +/-0 +// atan2l(+/-0,-0) = +/-pi +// atan2l(y,+/-0) = pi/2 y > 0 +// atan2l(y,+/-0) = -pi/2 y < 0 +// atan2l(+/-y, Inf) = +/-0 for finite y > 0 +// atan2l(+/-Inf, x) = +/-pi/2 for finite x +// atan2l(+/-y, -Inf) = +/-pi for finite y > 0 +// atan2l(+/-Inf, Inf) = +/-pi/4 +// atan2l(+/-Inf, -Inf) = +/-3pi/4 +// +// ********************************************************************* +// +// Mathematical Description +// --------------------------- +// +// The function ATANL( Arg_Y, Arg_X ) returns the "argument" +// or the "phase" of the complex number +// +// Arg_X + i Arg_Y +// +// or equivalently, the angle in radians from the positive +// x-axis to the line joining the origin and the point +// (Arg_X,Arg_Y) +// +// +// (Arg_X, Arg_Y) x +// \ +// \ +// \ +// \ +// \ angle between is ATANL(Arg_Y,Arg_X) + + + + +// \ +// ------------------> X-axis + +// Origin +// +// Moreover, this angle is reported in the range [-pi,pi] thus +// +// -pi <= ATANL( Arg_Y, Arg_X ) <= pi. +// +// From the geometry, it is easy to define ATANL when one of +// Arg_X or Arg_Y is +-0 or +-inf: +// +// +// \ Y | +// X \ | +0 | -0 | +inf | -inf | finite non-zero +// \ | | | | | +// ______________________________________________________ +// | | | | +// +-0 | Invalid/ | pi/2 | -pi/2 | sign(Y)*pi/2 +// | qNaN | | | +// -------------------------------------------------------- +// | | | | | +// +inf | +0 | -0 | pi/4 | -pi/4 | sign(Y)*0 +// -------------------------------------------------------- +// | | | | | +// -inf | +pi | -pi | 3pi/4 | -3pi/4 | sign(Y)*pi +// -------------------------------------------------------- +// finite | X>0? | pi/2 | -pi/2 | normal case +// non-zero| sign(Y)*0: | | | +// | sign(Y)*pi | | | +// +// +// One must take note that ATANL is NOT the arctangent of the +// value Arg_Y/Arg_X; but rather ATANL and arctan are related +// in a slightly more complicated way as follows: +// +// Let U := max(|Arg_X|, |Arg_Y|); V := min(|Arg_X|, |Arg_Y|); +// sign_X be the sign bit of Arg_X, i.e., sign_X is 0 or 1; +// s_X be the sign of Arg_X, i.e., s_X = (-1)^sign_X; +// +// sign_Y be the sign bit of Arg_Y, i.e., sign_Y is 0 or 1; +// s_Y be the sign of Arg_Y, i.e., s_Y = (-1)^sign_Y; +// +// swap be 0 if |Arg_X| >= |Arg_Y| and 1 otherwise. +// +// Then, ATANL(Arg_Y, Arg_X) = +// +// / arctan(V/U) \ sign_X = 0 & swap = 0 +// | pi/2 - arctan(V/U) | sign_X = 0 & swap = 1 +// s_Y * | | +// | pi - arctan(V/U) | sign_X = 1 & swap = 0 +// \ pi/2 + arctan(V/U) / sign_X = 1 & swap = 1 +// +// +// This relationship also suggest that the algorithm's major +// task is to calculate arctan(V/U) for 0 < V <= U; and the +// final Result is given by +// +// s_Y * { (P_hi + P_lo) + sigma * arctan(V/U) } +// +// where +// +// (P_hi,P_lo) represents M(sign_X,swap)*(pi/2) accurately +// +// M(sign_X,swap) = 0 for sign_X = 0 and swap = 0 +// 1 for swap = 1 +// 2 for sign_X = 1 and swap = 0 +// +// and +// +// sigma = { (sign_X XOR swap) : -1.0 : 1.0 } +// +// = (-1) ^ ( sign_X XOR swap ) +// +// Both (P_hi,P_lo) and sigma can be stored in a table and fetched +// using (sign_X,swap) as an index. (P_hi, P_lo) can be stored as a +// double-precision, and single-precision pair; and sigma can +// obviously be just a single-precision number. +// +// In the algorithm we propose, arctan(V/U) is calculated to high accuracy +// as A_hi + A_lo. Consequently, the Result ATANL( Arg_Y, Arg_X ) is +// given by +// +// s_Y*P_hi + s_Y*sigma*A_hi + s_Y*(sigma*A_lo + P_lo) +// +// We now discuss the calculation of arctan(V/U) for 0 < V <= U. +// +// For (V/U) < 2^(-3), we use a simple polynomial of the form +// +// z + z^3*(P_1 + z^2*(P_2 + z^2*(P_3 + ... + P_8))) +// +// where z = V/U. +// +// For the sake of accuracy, the first term "z" must approximate V/U to +// extra precision. For z^3 and higher power, a working precision +// approximation to V/U suffices. Thus, we obtain: +// +// z_hi + z_lo = V/U to extra precision and +// z = V/U to working precision +// +// The value arctan(V/U) is delivered as two pieces (A_hi, A_lo) +// +// (A_hi,A_lo) = (z_hi, z^3*(P_1 + ... + P_8) + z_lo). +// +// +// For 2^(-3) <= (V/U) <= 1, we use a table-driven approach. +// Consider +// +// (V/U) = 2^k * 1.b_1 b_2 .... b_63 b_64 b_65 .... +// +// Define +// +// z_hi = 2^k * 1.b_1 b_2 b_3 b_4 1 +// +// then +// / \ +// | (V/U) - z_hi | + +// arctan(V/U) = arctan(z_hi) + acrtan| -------------- | +// | 1 + (V/U)*z_hi | +// \ / +// +// / \ +// | V - z_hi*U | + +// = arctan(z_hi) + acrtan| -------------- | +// | U + V*z_hi | +// \ / +// +// = arctan(z_hi) + acrtan( V' / U' ) +// +// +// where +// +// V' = V - U*z_hi; U' = U + V*z_hi. +// +// Let +// +// w_hi + w_lo = V'/U' to extra precision and +// w = V'/U' to working precision +// +// then we can approximate arctan(V'/U') by +// +// arctan(V'/U') = w_hi + w_lo +// + w^3*(Q_1 + w^2*(Q_2 + w^2*(Q_3 + w^2*Q_4))) +// +// = w_hi + w_lo + poly +// +// Finally, arctan(z_hi) is calculated beforehand and stored in a table +// as Tbl_hi, Tbl_lo. Thus, +// +// (A_hi, A_lo) = (Tbl_hi, w_hi+(poly+(w_lo+Tbl_lo))) +// +// This completes the mathematical description. +// +// +// Algorithm +// ------------- +// +// Step 0. Check for unsupported format. +// +// If +// ( expo(Arg_X) not zero AND msb(Arg_X) = 0 ) OR +// ( expo(Arg_Y) not zero AND msb(Arg_Y) = 0 ) +// +// then one of the arguments is unsupported. Generate an +// invalid and return qNaN. +// +// Step 1. Initialize +// +// Normalize Arg_X and Arg_Y and set the following +// +// sign_X := sign_bit(Arg_X) +// s_Y := (sign_bit(Arg_Y)==0? 1.0 : -1.0) +// swap := (|Arg_X| >= |Arg_Y|? 0 : 1 ) +// U := max( |Arg_X|, |Arg_Y| ) +// V := min( |Arg_X|, |Arg_Y| ) +// +// execute: frcap E, pred, V, U +// If pred is 0, go to Step 5 for special cases handling. +// +// Step 2. Decide on branch. +// +// Q := E * V +// If Q < 2^(-3) go to Step 4 for simple polynomial case. +// +// Step 3. Table-driven algorithm. +// +// Q is represented as +// +// 2^(-k) * 1.b_1 b_2 b_3 ... b_63; k = 0,-1,-2,-3 +// +// and that if k = 0, b_1 = b_2 = b_3 = b_4 = 0. +// +// Define +// +// z_hi := 2^(-k) * 1.b_1 b_2 b_3 b_4 1 +// +// (note that there are 49 possible values of z_hi). +// +// ...We now calculate V' and U'. While V' is representable +// ...as a 64-bit number because of cancellation, U' is +// ...not in general a 64-bit number. Obtaining U' accurately +// ...requires two working precision numbers +// +// U_prime_hi := U + V * z_hi ...WP approx. to U' +// U_prime_lo := ( U - U_prime_hi ) + V*z_hi ...observe order +// V_prime := V - U * z_hi ...this is exact +// +// C_hi := frcpa (1.0, U_prime_hi) ...C_hi approx 1/U'_hi +// +// loop 3 times +// C_hi := C_hi + C_hi*(1.0 - C_hi*U_prime_hi) +// +// ...at this point C_hi is (1/U_prime_hi) to roughly 64 bits +// +// w_hi := V_prime * C_hi ...w_hi is V_prime/U_prime to +// ...roughly working precision +// +// ...note that we want w_hi + w_lo to approximate +// ...V_prime/(U_prime_hi + U_prime_lo) to extra precision +// ...but for now, w_hi is good enough for the polynomial +// ...calculation. +// +// wsq := w_hi*w_hi +// poly := w_hi*wsq*(Q_1 + wsq*(Q_2 + wsq*(Q_3 + wsq*Q_4))) +// +// Fetch +// (Tbl_hi, Tbl_lo) = atan(z_hi) indexed by (k,b_1,b_2,b_3,b_4) +// ...Tbl_hi is a double-precision number +// ...Tbl_lo is a single-precision number +// +// (P_hi, P_lo) := M(sign_X,swap)*(Pi_by_2_hi, Pi_by_2_lo) +// ...as discussed previous. Again; the implementation can +// ...chose to fetch P_hi and P_lo from a table indexed by +// ...(sign_X, swap). +// ...P_hi is a double-precision number; +// ...P_lo is a single-precision number. +// +// ...calculate w_lo so that w_hi + w_lo is V'/U' accurately +// w_lo := ((V_prime - w_hi*U_prime_hi) - +// w_hi*U_prime_lo) * C_hi ...observe order +// +// +// ...Ready to deliver arctan(V'/U') as A_hi, A_lo +// A_hi := Tbl_hi +// A_lo := w_hi + (poly + (Tbl_lo + w_lo)) ...observe order +// +// ...Deliver final Result +// ...s_Y*P_hi + s_Y*sigma*A_hi + s_Y*(sigma*A_lo + P_lo) +// +// sigma := ( (sign_X XOR swap) ? -1.0 : 1.0 ) +// ...sigma can be obtained by a table lookup using +// ...(sign_X,swap) as index and stored as single precision +// ...sigma should be calculated earlier +// +// P_hi := s_Y*P_hi +// A_hi := s_Y*A_hi +// +// Res_hi := P_hi + sigma*A_hi ...this is exact because +// ...both P_hi and Tbl_hi +// ...are double-precision +// ...and |Tbl_hi| > 2^(-4) +// ...P_hi is either 0 or +// ...between (1,4) +// +// Res_lo := sigma*A_lo + P_lo +// +// Return Res_hi + s_Y*Res_lo in user-defined rounding control +// +// Step 4. Simple polynomial case. +// +// ...E and Q are inherited from Step 2. +// +// A_hi := Q ...Q is inherited from Step 2 Q approx V/U +// +// loop 3 times +// E := E + E2(1.0 - E*U1 +// ...at this point E approximates 1/U to roughly working precision +// +// z := V * E ...z approximates V/U to roughly working precision +// zsq := z * z +// z8 := zsq * zsq; z8 := z8 * z8 +// +// poly1 := P_4 + zsq*(P_5 + zsq*(P_6 + zsq*(P_7 + zsq*P_8))) +// poly2 := zsq*(P_1 + zsq*(P_2 + zsq*P_3)) +// +// poly := poly1 + z8*poly2 +// +// z_lo := (V - A_hi*U)*E +// +// A_lo := z*poly + z_lo +// ...A_hi, A_lo approximate arctan(V/U) accurately +// +// (P_hi, P_lo) := M(sign_X,swap)*(Pi_by_2_hi, Pi_by_2_lo) +// ...one can store the M(sign_X,swap) as single precision +// ...values +// +// ...Deliver final Result +// ...s_Y*P_hi + s_Y*sigma*A_hi + s_Y*(sigma*A_lo + P_lo) +// +// sigma := ( (sign_X XOR swap) ? -1.0 : 1.0 ) +// ...sigma can be obtained by a table lookup using +// ...(sign_X,swap) as index and stored as single precision +// ...sigma should be calculated earlier +// +// P_hi := s_Y*P_hi +// A_hi := s_Y*A_hi +// +// Res_hi := P_hi + sigma*A_hi ...need to compute +// ...P_hi + sigma*A_hi +// ...exactly +// +// tmp := (P_hi - Res_hi) + sigma*A_hi +// +// Res_lo := s_Y*(sigma*A_lo + P_lo) + tmp +// +// Return Res_hi + Res_lo in user-defined rounding control +// +// Step 5. Special Cases +// +// If pred is 0 where pred is obtained in +// frcap E, pred, V, U +// +// we are in one of those special cases of 0,+-inf or NaN +// +// If one of U and V is NaN, return U+V (which will generate +// invalid in case one is a signaling NaN). Otherwise, +// return the Result as described in the table +// +// +// +// \ Y | +// X \ | +0 | -0 | +inf | -inf | finite non-zero +// \ | | | | | +// ______________________________________________________ +// | | | | +// +-0 | Invalid/ | pi/2 | -pi/2 | sign(Y)*pi/2 +// | qNaN | | | +// -------------------------------------------------------- +// | | | | | +// +inf | +0 | -0 | pi/4 | -pi/4 | sign(Y)*0 +// -------------------------------------------------------- +// | | | | | +// -inf | +pi | -pi | 3pi/4 | -3pi/4 | sign(Y)*pi +// -------------------------------------------------------- +// finite | X>0? | pi/2 | -pi/2 | +// non-zero| sign(Y)*0: | | | N/A +// | sign(Y)*pi | | | +// +// + +#include "libm_support.h" + +ArgY_orig = f8 +Result = f8 +FR_RESULT = f8 +ArgX_orig = f9 +ArgX = f10 +FR_X = f10 +ArgY = f11 +FR_Y = f11 +s_Y = f12 +U = f13 +V = f14 +E = f15 +Q = f32 +z_hi = f33 +U_prime_hi = f34 +U_prime_lo = f35 +V_prime = f36 +C_hi = f37 +w_hi = f38 +w_lo = f39 +wsq = f40 +poly = f41 +Tbl_hi = f42 +Tbl_lo = f43 +P_hi = f44 +P_lo = f45 +A_hi = f46 +A_lo = f47 +sigma = f48 +Res_hi = f49 +Res_lo = f50 +Z = f52 +zsq = f53 +z8 = f54 +poly1 = f55 +poly2 = f56 +z_lo = f57 +tmp = f58 +P_1 = f59 +Q_1 = f60 +P_2 = f61 +Q_2 = f62 +P_3 = f63 +Q_3 = f64 +P_4 = f65 +Q_4 = f66 +P_5 = f67 +P_6 = f68 +P_7 = f69 +P_8 = f70 +TWO_TO_NEG3 = f71 +U_hold = f72 +C_hi_hold = f73 +E_hold = f74 +M = f75 +ArgX_abs = f76 +ArgY_abs = f77 +Result_lo = f78 +A_temp = f79 +GR_SAVE_PFS = r33 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +sign_X = r36 +sign_Y = r37 +swap = r38 +table_ptr1 = r39 +table_ptr2 = r40 +k = r41 +lookup = r42 +exp_ArgX = r43 +exp_ArgY = r44 +exponent_Q = r45 +significand_Q = r46 +special = r47 +special1 = r48 +GR_Parameter_X = r49 +GR_Parameter_Y = r50 +GR_Parameter_RESULT = r51 +GR_Parameter_TAG = r52 +int_temp = r52 + +#ifdef _LIBC +.rodata +#else +.data +#endif +.align 64 + +Constants_atan: +ASM_TYPE_DIRECTIVE(Constants_atan,@object) +data4 0x54442D18, 0x3FF921FB, 0x248D3132, 0x3E000000 +// double pi/2, single lo_pi/2, two**(-3) +data4 0xAAAAAAA3, 0xAAAAAAAA, 0x0000BFFD, 0x00000000 // P_1 +data4 0xCCCC54B2, 0xCCCCCCCC, 0x00003FFC, 0x00000000 // P_2 +data4 0x47E4D0C2, 0x92492492, 0x0000BFFC, 0x00000000 // P_3 +data4 0x58870889, 0xE38E38E0, 0x00003FFB, 0x00000000 // P_4 +data4 0x290149F8, 0xBA2E895B, 0x0000BFFB, 0x00000000 // P_5 +data4 0x250F733D, 0x9D88E6D4, 0x00003FFB, 0x00000000 // P_6 +data4 0xFB8745A0, 0x884E51FF, 0x0000BFFB, 0x00000000 // P_7 +data4 0x394396BD, 0xE1C7412B, 0x00003FFA, 0x00000000 // P_8 +data4 0xAAAAA52F, 0xAAAAAAAA, 0x0000BFFD, 0x00000000 // Q_1 +data4 0xC75B60D3, 0xCCCCCCCC, 0x00003FFC, 0x00000000 // Q_2 +data4 0x011F1940, 0x924923AD, 0x0000BFFC, 0x00000000 // Q_3 +data4 0x2A5F89BD, 0xE36F716D, 0x00003FFB, 0x00000000 // Q_4 +// +// Entries Tbl_hi (double precision) +// B = 1+Index/16+1/32 Index = 0 +// Entries Tbl_lo (single precision) +// B = 1+Index/16+1/32 Index = 0 +// +data4 0xA935BD8E, 0x3FE9A000, 0x23ACA08F, 0x00000000 +// +// Entries Tbl_hi (double precision) Index = 0,1,...,15 +// B = 2^(-1)*(1+Index/16+1/32) +// Entries Tbl_lo (single precision) +// Index = 0,1,...,15 B = 2^(-1)*(1+Index/16+1/32) +// +data4 0x7F175A34, 0x3FDE77EB, 0x238729EE, 0x00000000 +data4 0x73C1A40B, 0x3FE0039C, 0x249334DB, 0x00000000 +data4 0x5B5B43DA, 0x3FE0C614, 0x22CBA7D1, 0x00000000 +data4 0x88BE7C13, 0x3FE1835A, 0x246310E7, 0x00000000 +data4 0xE2CC9E6A, 0x3FE23B71, 0x236210E5, 0x00000000 +data4 0x8406CBCA, 0x3FE2EE62, 0x2462EAF5, 0x00000000 +data4 0x1CD41719, 0x3FE39C39, 0x24B73EF3, 0x00000000 +data4 0x5B795B55, 0x3FE44506, 0x24C11260, 0x00000000 +data4 0x5BB6EC04, 0x3FE4E8DE, 0x242519EE, 0x00000000 +data4 0x1F732FBA, 0x3FE587D8, 0x24D4346C, 0x00000000 +data4 0x115D7B8D, 0x3FE6220D, 0x24ED487B, 0x00000000 +data4 0x920B3D98, 0x3FE6B798, 0x2495FF1E, 0x00000000 +data4 0x8FBA8E0F, 0x3FE74897, 0x223D9531, 0x00000000 +data4 0x289FA093, 0x3FE7D528, 0x242B0411, 0x00000000 +data4 0x576CC2C5, 0x3FE85D69, 0x2335B374, 0x00000000 +data4 0xA99CC05D, 0x3FE8E17A, 0x24C27CFB, 0x00000000 +// +// Entries Tbl_hi (double precision) Index = 0,1,...,15 +// B = 2^(-2)*(1+Index/16+1/32) +// Entries Tbl_lo (single precision) +// Index = 0,1,...,15 B = 2^(-2)*(1+Index/16+1/32) +// +data4 0x510665B5, 0x3FD025FA, 0x24263482, 0x00000000 +data4 0x362431C9, 0x3FD1151A, 0x242C8DC9, 0x00000000 +data4 0x67E47C95, 0x3FD20255, 0x245CF9BA, 0x00000000 +data4 0x7A823CFE, 0x3FD2ED98, 0x235C892C, 0x00000000 +data4 0x29271134, 0x3FD3D6D1, 0x2389BE52, 0x00000000 +data4 0x586890E6, 0x3FD4BDEE, 0x24436471, 0x00000000 +data4 0x175E0F4E, 0x3FD5A2E0, 0x2389DBD4, 0x00000000 +data4 0x9F5FA6FD, 0x3FD68597, 0x2476D43F, 0x00000000 +data4 0x52817501, 0x3FD76607, 0x24711774, 0x00000000 +data4 0xB8DF95D7, 0x3FD84422, 0x23EBB501, 0x00000000 +data4 0x7CD0C662, 0x3FD91FDE, 0x23883A0C, 0x00000000 +data4 0x66168001, 0x3FD9F930, 0x240DF63F, 0x00000000 +data4 0x5422058B, 0x3FDAD00F, 0x23FE261A, 0x00000000 +data4 0x378624A5, 0x3FDBA473, 0x23A8CD0E, 0x00000000 +data4 0x0AAD71F8, 0x3FDC7655, 0x2422D1D0, 0x00000000 +data4 0xC9EC862B, 0x3FDD45AE, 0x2344A109, 0x00000000 +// +// Entries Tbl_hi (double precision) Index = 0,1,...,15 +// B = 2^(-3)*(1+Index/16+1/32) +// Entries Tbl_lo (single precision) +// Index = 0,1,...,15 B = 2^(-3)*(1+Index/16+1/32) +// +data4 0x84212B3D, 0x3FC068D5, 0x239874B6, 0x00000000 +data4 0x41060850, 0x3FC16465, 0x2335E774, 0x00000000 +data4 0x171A535C, 0x3FC25F6E, 0x233E36BE, 0x00000000 +data4 0xEDEB99A3, 0x3FC359E8, 0x239680A3, 0x00000000 +data4 0xC6092A9E, 0x3FC453CE, 0x230FB29E, 0x00000000 +data4 0xBA11570A, 0x3FC54D18, 0x230C1418, 0x00000000 +data4 0xFFB3AA73, 0x3FC645BF, 0x23F0564A, 0x00000000 +data4 0xE8A7D201, 0x3FC73DBD, 0x23D4A5E1, 0x00000000 +data4 0xE398EBC7, 0x3FC8350B, 0x23D4ADDA, 0x00000000 +data4 0x7D050271, 0x3FC92BA3, 0x23BCB085, 0x00000000 +data4 0x601081A5, 0x3FCA217E, 0x23BC841D, 0x00000000 +data4 0x574D780B, 0x3FCB1696, 0x23CF4A8E, 0x00000000 +data4 0x4D768466, 0x3FCC0AE5, 0x23BECC90, 0x00000000 +data4 0x4E1D5395, 0x3FCCFE65, 0x2323DCD2, 0x00000000 +data4 0x864C9D9D, 0x3FCDF110, 0x23F53F3A, 0x00000000 +data4 0x451D980C, 0x3FCEE2E1, 0x23CCB11F, 0x00000000 + +data4 0x54442D18, 0x400921FB, 0x33145C07, 0x3CA1A626 // PI two doubles +data4 0x54442D18, 0x3FF921FB, 0x33145C07, 0x3C91A626 // PI_by_2 two dbles +data4 0x54442D18, 0x3FE921FB, 0x33145C07, 0x3C81A626 // PI_by_4 two dbles +data4 0x7F3321D2, 0x4002D97C, 0x4C9E8A0A, 0x3C9A7939 // 3PI_by_4 two dbles +ASM_SIZE_DIRECTIVE(Constants_atan) + + +.text +.proc atanl# +.global atanl# +.align 64 + +atanl: +{ .mfb + nop.m 999 +(p0) mov ArgX_orig = f1 +(p0) br.cond.sptk atan2l ;; +} +.endp atanl +ASM_SIZE_DIRECTIVE(atanl) + +.text +.proc atan2l# +.global atan2l# +#ifdef _LIBC +.proc __atan2l# +.global __atan2l# +.proc __ieee754_atan2l# +.global __ieee754_atan2l# +#endif +.align 64 + + +atan2l: +#ifdef _LIBC +__atan2l: +__ieee754_atan2l: +#endif +{ .mfi +alloc r32 = ar.pfs, 0, 17 , 4, 0 +(p0) mov ArgY = ArgY_orig +} +{ .mfi + nop.m 999 +(p0) mov ArgX = ArgX_orig + nop.i 999 +};; +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = ArgY_orig, 0x103 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// +// Save original input args and load table ptr. +// +(p0) fclass.m.unc p6,p0 = ArgX_orig, 0x103 + nop.i 999 +};; +{ .mfi +(p0) addl table_ptr1 = @ltoff(Constants_atan#), gp +(p0) fclass.m.unc p0,p9 = ArgY_orig, 0x1FF + nop.i 999 ;; +} +{ .mfi + ld8 table_ptr1 = [table_ptr1] +(p0) fclass.m.unc p0,p8 = ArgX_orig, 0x1FF + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p13,p0 = ArgY_orig, 0x0C3 + nop.i 999 ;; +} +{ .mfi +(p0) fclass.m.unc p12,p0 = ArgX_orig, 0x0C3 + nop.i 999 +} + + +// +// Check for NatVals. +// Check for everything - if false, then must be pseudo-zero +// or pseudo-nan (IA unsupporteds). +// +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(ATANL_NATVAL) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p7) br.cond.spnt L(ATANL_NATVAL) ;; +} +{ .mib +(p0) ldfd P_hi = [table_ptr1],8 + nop.i 999 +(p8) br.cond.spnt L(ATANL_UNSUPPORTED) ;; +} +{ .mbb +(p0) add table_ptr2 = 96, table_ptr1 +(p9) br.cond.spnt L(ATANL_UNSUPPORTED) +// +// Load double precision high-order part of pi +// +(p12) br.cond.spnt L(ATANL_NAN) ;; +} +{ .mfb + nop.m 999 +(p0) fnorm.s1 ArgX = ArgX +(p13) br.cond.spnt L(ATANL_NAN) ;; +} +// +// Normalize the input argument. +// Branch out if NaN inputs +// +{ .mmf +(p0) ldfs P_lo = [table_ptr1], 4 + nop.m 999 +(p0) fnorm.s1 ArgY = ArgY ;; +} +{ .mmf + nop.m 999 +(p0) ldfs TWO_TO_NEG3 = [table_ptr1], 180 +// +// U = max(ArgX_abs,ArgY_abs) +// V = min(ArgX_abs,ArgY_abs) +// if PR1, swap = 0 +// if PR2, swap = 1 +// +(p0) mov M = f1 ;; +} +{ .mfi + nop.m 999 +// +// Get exp and sign of ArgX +// Get exp and sign of ArgY +// Load 2**(-3) and increment ptr to Q_4. +// +(p0) fmerge.s ArgX_abs = f1, ArgX + nop.i 999 ;; +} +// +// load single precision low-order part of pi = P_lo +// +{ .mfi +(p0) getf.exp sign_X = ArgX +(p0) fmerge.s ArgY_abs = f1, ArgY + nop.i 999 ;; +} +{ .mii +(p0) getf.exp sign_Y = ArgY + nop.i 999 ;; +(p0) shr sign_X = sign_X, 17 ;; +} +{ .mii + nop.m 999 +(p0) shr sign_Y = sign_Y, 17 ;; +(p0) cmp.eq.unc p8, p9 = 0x00000, sign_Y ;; +} +{ .mfi + nop.m 999 +// +// Is ArgX_abs >= ArgY_abs +// Is sign_Y == 0? +// +(p0) fmax.s1 U = ArgX_abs, ArgY_abs + nop.i 999 +} +{ .mfi + nop.m 999 +// +// ArgX_abs = |ArgX| +// ArgY_abs = |ArgY| +// sign_X is sign bit of ArgX +// sign_Y is sign bit of ArgY +// +(p0) fcmp.ge.s1 p6, p7 = ArgX_abs, ArgY_abs + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmin.s1 V = ArgX_abs, ArgY_abs + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fadd.s1 s_Y = f0, f1 +(p6) cmp.eq.unc p10, p11 = 0x00000, sign_X +} +{ .mii +(p6) add swap = r0, r0 + nop.i 999 ;; +(p7) add swap = 1, r0 +} +{ .mfi + nop.m 999 +// +// Let M = 1.0 +// if p8, s_Y = 1.0 +// if p9, s_Y = -1.0 +// +(p10) fsub.s1 M = M, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fsub.s1 s_Y = f0, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) frcpa.s1 E, p6 = V, U + nop.i 999 ;; +} +{ .mbb + nop.m 999 +// +// E = frcpa(V,U) +// +(p6) br.cond.sptk L(ATANL_STEP2) +(p0) br.cond.spnt L(ATANL_SPECIAL_HANDLING) ;; +} +L(ATANL_STEP2): +{ .mfi + nop.m 999 +(p0) fmpy.s1 Q = E, V + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.s0 p0, p9 = f1, ArgY_orig + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Is Q < 2**(-3)? +// +(p0) fcmp.eq.s0 p0, p8 = f1, ArgX_orig + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fadd.s1 M = M, f1 + nop.i 999 ;; +} +{ .mlx + nop.m 999 +// ************************************************* +// ********************* STEP2 ********************* +// ************************************************* +(p0) movl special = 0x8400000000000000 +} +{ .mlx + nop.m 999 +// +// lookup = b_1 b_2 b_3 B_4 +// +(p0) movl special1 = 0x0000000000000100 ;; +} +{ .mfi + nop.m 999 +// +// Do fnorms to raise any denormal operand +// exceptions. +// +(p0) fmpy.s1 P_hi = M, P_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 P_lo = M, P_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Q = E * V +// +(p0) fcmp.lt.unc.s1 p6, p7 = Q, TWO_TO_NEG3 + nop.i 999 ;; +} +{ .mmb +(p0) getf.sig significand_Q = Q +(p0) getf.exp exponent_Q = Q + nop.b 999 ;; +} +{ .mmi + nop.m 999 ;; +(p0) andcm k = 0x0003, exponent_Q +(p0) extr.u lookup = significand_Q, 59, 4 ;; +} +{ .mib + nop.m 999 +(p0) dep special = lookup, special, 59, 4 +// +// Generate 1.b_1 b_2 b_3 b_4 1 0 0 0 ... 0 +// +(p6) br.cond.spnt L(ATANL_POLY) ;; +} +{ .mfi +(p0) cmp.eq.unc p8, p9 = 0x0000, k +(p0) fmpy.s1 P_hi = s_Y, P_hi +// +// We waited a few extra cycles so P_lo and P_hi could be calculated. +// Load the constant 256 for loading up table entries. +// +// ************************************************* +// ******************** STEP3 ********************** +// ************************************************* +(p0) add table_ptr2 = 16, table_ptr1 +} +// +// Let z_hi have exponent and sign of original Q +// Load the Tbl_hi(0) else, increment pointer. +// +{ .mii +(p0) ldfe Q_4 = [table_ptr1], -16 +(p0) xor swap = sign_X, swap ;; +(p9) sub k = k, r0, 1 +} +{ .mmi +(p0) setf.sig z_hi = special +(p0) ldfe Q_3 = [table_ptr1], -16 +(p9) add table_ptr2 = 16, table_ptr2 ;; +} +// +// U_hold = U - U_prime_hi +// k = k * 256 - Result can be 0, 256, or 512. +// +{ .mmb +(p0) ldfe Q_2 = [table_ptr1], -16 +(p8) ldfd Tbl_hi = [table_ptr2], 8 + nop.b 999 ;; +} +// +// U_prime_lo = U_hold + V * z_hi +// lookup -> lookup * 16 + k +// +{ .mmi +(p0) ldfe Q_1 = [table_ptr1], -16 ;; +(p8) ldfs Tbl_lo = [table_ptr2], 8 +// +// U_prime_hi = U + V * z_hi +// Load the Tbl_lo(0) +// +(p9) pmpy2.r k = k, special1 ;; +} +{ .mii + nop.m 999 + nop.i 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +(p9) shladd lookup = lookup, 0x0004, k ;; +} +{ .mmi +(p9) add table_ptr2 = table_ptr2, lookup ;; +// +// V_prime = V - U * z_hi +// +(p9) ldfd Tbl_hi = [table_ptr2], 8 + nop.i 999 ;; +} +{ .mmf + nop.m 999 +// +// C_hi = frcpa(1,U_prime_hi) +// +(p9) ldfs Tbl_lo = [table_ptr2], 8 +// +// z_hi = s exp 1.b_1 b_2 b_3 b_4 1 0 0 0 ... 0 +// Point to beginning of Tbl_hi entries - k = 0. +// +(p0) fmerge.se z_hi = Q, z_hi ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 U_prime_hi = V, z_hi, U + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnma.s1 V_prime = U, z_hi, V + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) mov A_hi = Tbl_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 U_hold = U, U_prime_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) frcpa.s1 C_hi, p6 = f1, U_prime_hi + nop.i 999 ;; +} +{ .mfi +(p0) cmp.eq.unc p7, p6 = 0x00000, swap +(p0) fmpy.s1 A_hi = s_Y, A_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = wsq * poly +// +(p7) fadd.s1 sigma = f0, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 U_prime_lo = z_hi, V, U_hold + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fsub.s1 sigma = f0, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fnma.s1 C_hi_hold = C_hi, U_prime_hi, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// A_lo = A_lo + w_hi +// A_hi = s_Y * A_hi +// +(p0) fma.s1 Res_hi = sigma, A_hi, P_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_hi_hold = 1 - C_hi * U_prime_hi (1) +// +(p0) fma.s1 C_hi = C_hi_hold, C_hi, C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_hi = C_hi + C_hi * C_hi_hold (1) +// +(p0) fnma.s1 C_hi_hold = C_hi, U_prime_hi, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_hi_hold = 1 - C_hi * U_prime_hi (2) +// +(p0) fma.s1 C_hi = C_hi_hold, C_hi, C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_hi = C_hi + C_hi * C_hi_hold (2) +// +(p0) fnma.s1 C_hi_hold = C_hi, U_prime_hi, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_hi_hold = 1 - C_hi * U_prime_hi (3) +// +(p0) fma.s1 C_hi = C_hi_hold, C_hi, C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_hi = C_hi + C_hi * C_hi_hold (3) +// +(p0) fmpy.s1 w_hi = V_prime, C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// w_hi = V_prime * C_hi +// +(p0) fmpy.s1 wsq = w_hi, w_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnma.s1 w_lo = w_hi, U_prime_hi, V_prime + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// wsq = w_hi * w_hi +// w_lo = = V_prime - w_hi * U_prime_hi +// +(p0) fma.s1 poly = wsq, Q_4, Q_3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnma.s1 w_lo = w_hi, U_prime_lo, w_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = Q_3 + wsq * Q_4 +// w_lo = = w_lo - w_hi * U_prime_lo +// +(p0) fma.s1 poly = wsq, poly, Q_2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 w_lo = C_hi, w_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = Q_2 + wsq * poly +// w_lo = = w_lo * C_hi +// +(p0) fma.s1 poly = wsq, poly, Q_1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fadd.s1 A_lo = Tbl_lo, w_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Result = Res_hi + Res_lo * s_Y (User Supplied Rounding Mode) +// +(p0) fmpy.s0 Q_1 = Q_1, Q_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = Q_1 + wsq * poly +// A_lo = Tbl_lo + w_lo +// swap = xor(swap,sign_X) +// +(p0) fmpy.s1 poly = wsq, poly + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Is (swap) != 0 ? +// poly = wsq * poly +// A_hi = Tbl_hi +// +(p0) fmpy.s1 poly = w_hi, poly + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (PR_1) sigma = -1.0 +// if (PR_2) sigma = 1.0 +// +(p0) fadd.s1 A_lo = A_lo, poly + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// P_hi = s_Y * P_hi +// A_lo = A_lo + poly +// +(p0) fadd.s1 A_lo = A_lo, w_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 Res_lo = sigma, A_lo, P_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Res_hi = P_hi + sigma * A_hi +// Res_lo = P_lo + sigma * A_lo +// +(p0) fma.s0 Result = Res_lo, s_Y, Res_hi +// +// Raise inexact. +// +br.ret.sptk b0 ;; +} +// +// poly1 = P_5 + zsq * poly1 +// poly2 = zsq * poly2 +// +L(ATANL_POLY): +{ .mmf +(p0) xor swap = sign_X, swap + nop.m 999 +(p0) fnma.s1 E_hold = E, U, f1 ;; +} +{ .mfi + nop.m 999 +(p0) mov A_temp = Q +// +// poly1 = P_4 + zsq * poly1 +// swap = xor(swap,sign_X) +// +// sign_X gr_002 +// swap gr_004 +// poly1 = poly1 <== Done with poly1 +// poly1 = P_4 + zsq * poly1 +// swap = xor(swap,sign_X) +// +(p0) cmp.eq.unc p7, p6 = 0x00000, swap +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 P_hi = s_Y, P_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p6) fsub.s1 sigma = f0, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fadd.s1 sigma = f0, f1 + nop.i 999 ;; +} + +// *********************************************** +// ******************** STEP4 ******************** +// *********************************************** + +{ .mmi + nop.m 999 +(p0) addl table_ptr1 = @ltoff(Constants_atan#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 +(p0) fma.s1 E = E, E_hold, E +// +// Following: +// Iterate 3 times E = E + E*(1.0 - E*U) +// Also load P_8, P_7, P_6, P_5, P_4 +// E_hold = 1.0 - E * U (1) +// A_temp = Q +// +(p0) add table_ptr1 = 128, table_ptr1 ;; +} +{ .mmf + nop.m 999 +// +// E = E + E_hold*E (1) +// Point to P_8. +// +(p0) ldfe P_8 = [table_ptr1], -16 +// +// poly = z8*poly1 + poly2 (Typo in writeup) +// Is (swap) != 0 ? +// +(p0) fnma.s1 z_lo = A_temp, U, V ;; +} +{ .mmb + nop.m 999 +// +// E_hold = 1.0 - E * U (2) +// +(p0) ldfe P_7 = [table_ptr1], -16 + nop.b 999 ;; +} +{ .mmb + nop.m 999 +// +// E = E + E_hold*E (2) +// +(p0) ldfe P_6 = [table_ptr1], -16 + nop.b 999 ;; +} +{ .mmb + nop.m 999 +// +// E_hold = 1.0 - E * U (3) +// +(p0) ldfe P_5 = [table_ptr1], -16 + nop.b 999 ;; +} +{ .mmf + nop.m 999 +// +// E = E + E_hold*E (3) +// +// +// At this point E approximates 1/U to roughly working precision +// z = V*E approximates V/U +// +(p0) ldfe P_4 = [table_ptr1], -16 +(p0) fnma.s1 E_hold = E, U, f1 ;; +} +{ .mmb + nop.m 999 +// +// Z = V * E +// +(p0) ldfe P_3 = [table_ptr1], -16 + nop.b 999 ;; +} +{ .mmb + nop.m 999 +// +// zsq = Z * Z +// +(p0) ldfe P_2 = [table_ptr1], -16 + nop.b 999 ;; +} +{ .mmb + nop.m 999 +// +// z8 = zsq * zsq +// +(p0) ldfe P_1 = [table_ptr1], -16 + nop.b 999 ;; +} +{ .mlx + nop.m 999 +(p0) movl int_temp = 0x24005 +} +{ .mfi + nop.m 999 +(p0) fma.s1 E = E, E_hold, E + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fnma.s1 E_hold = E, U, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 E = E, E_hold, E + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 Z = V, E + nop.i 999 +} +{ .mfi + nop.m 999 +// +// z_lo = V - A_temp * U +// if (PR_2) sigma = 1.0 +// +(p0) fmpy.s1 z_lo = z_lo, E + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 zsq = Z, Z + nop.i 999 +} +{ .mfi + nop.m 999 +// +// z_lo = z_lo * E +// if (PR_1) sigma = -1.0 +// +(p0) fadd.s1 A_hi = A_temp, z_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// z8 = z8 * z8 +// +// +// Now what we want to do is +// poly1 = P_4 + zsq*(P_5 + zsq*(P_6 + zsq*(P_7 + zsq*P_8))) +// poly2 = zsq*(P_1 + zsq*(P_2 + zsq*P_3)) +// +(p0) fma.s1 poly1 = zsq, P_8, P_7 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 poly2 = zsq, P_3, P_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 z8 = zsq, zsq + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsub.s1 A_temp = A_temp, A_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// A_lo = Z * poly + z_lo +// +(p0) fmerge.s tmp = A_hi, A_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly1 = P_7 + zsq * P_8 +// poly2 = P_2 + zsq * P_3 +// +(p0) fma.s1 poly1 = zsq, poly1, P_6 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 poly2 = zsq, poly2, P_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 z8 = z8, z8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fadd.s1 z_lo = A_temp, z_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly1 = P_6 + zsq * poly1 +// poly2 = P_2 + zsq * poly2 +// +(p0) fma.s1 poly1 = zsq, poly1, P_5 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 poly2 = poly2, zsq + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Result = Res_hi + Res_lo (User Supplied Rounding Mode) +// +(p0) fmpy.s1 P_5 = P_5, P_5 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 poly1 = zsq, poly1, P_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 poly = z8, poly1, poly2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Fixup added to force inexact later - +// A_hi = A_temp + z_lo +// z_lo = (A_temp - A_hi) + z_lo +// +(p0) fma.s1 A_lo = Z, poly, z_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 A_hi = tmp, A_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 tmp = tmp, A_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 A_hi = s_Y, A_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 A_lo = tmp, A_lo + nop.i 999 +} +{ .mfi +(p0) setf.exp tmp = int_temp +// +// P_hi = s_Y * P_hi +// A_hi = s_Y * A_hi +// +(p0) fma.s1 Res_hi = sigma, A_hi, P_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6,p0 = A_lo, 0x007 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p6) mov A_lo = tmp + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Res_hi = P_hi + sigma * A_hi +// +(p0) fsub.s1 tmp = P_hi, Res_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// tmp = P_hi - Res_hi +// +(p0) fma.s1 tmp = A_hi, sigma, tmp + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 sigma = A_lo, sigma, P_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// tmp = sigma * A_hi + tmp +// sigma = A_lo * sigma + P_lo +// +(p0) fma.s1 Res_lo = s_Y, sigma, tmp + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Res_lo = s_Y * sigma + tmp +// +(p0) fadd.s0 Result = Res_lo, Res_hi +br.ret.sptk b0 ;; +} +L(ATANL_NATVAL): +L(ATANL_UNSUPPORTED): +L(ATANL_NAN): +{ .mfb + nop.m 999 +(p0) fmpy.s0 Result = ArgX,ArgY +(p0) br.ret.sptk b0 ;; +} +L(ATANL_SPECIAL_HANDLING): +{ .mfi + nop.m 999 +(p0) fcmp.eq.s0 p0, p6 = f1, ArgY_orig + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.s0 p0, p5 = f1, ArgX_orig + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p7 = ArgY, 0x007 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl special = 992 +} +;; + + +{ .mmi + nop.m 999 +(p0) addl table_ptr1 = @ltoff(Constants_atan#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +{ .mib +(p0) add table_ptr1 = table_ptr1, special + nop.i 999 +(p7) br.cond.spnt L(ATANL_ArgY_Not_ZERO) ;; +} +{ .mmf +(p0) ldfd Result = [table_ptr1], 8 + nop.m 999 +(p6) fclass.m.unc p14, p0 = ArgX, 0x035 ;; +} +{ .mmf + nop.m 999 +(p0) ldfd Result_lo = [table_ptr1], -8 +(p6) fclass.m.unc p15, p0 = ArgX, 0x036 ;; +} +{ .mfi + nop.m 999 +(p14) fmerge.s Result = ArgY, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fclass.m.unc p13, p0 = ArgX, 0x007 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) fmerge.s Result_lo = ArgY, f0 + nop.i 999 ;; +} +{ .mfi +(p13) mov GR_Parameter_TAG = 36 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Return sign_Y * 0 when ArgX > +0 +// +(p15) fmerge.s Result = ArgY, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p15) fmerge.s Result_lo = ArgY, Result_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Return sign_Y * 0 when ArgX < -0 +// +(p0) fadd.s0 Result = Result, Result_lo +(p13) br.cond.spnt __libm_error_region ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Call error support funciton for atan(0,0) +// +(p0) br.ret.sptk b0 ;; +} +L(ATANL_ArgY_Not_ZERO): +{ .mfi + nop.m 999 +(p0) fclass.m.unc p9, p10 = ArgY, 0x023 + nop.i 999 ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt L(ATANL_ArgY_Not_INF) ;; +} +{ .mfi + nop.m 999 +(p9) fclass.m.unc p6, p0 = ArgX, 0x017 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fclass.m.unc p7, p0 = ArgX, 0x021 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fclass.m.unc p8, p0 = ArgX, 0x022 + nop.i 999 ;; +} +{ .mmi +(p6) add table_ptr1 = 16, table_ptr1 ;; +(p0) ldfd Result = [table_ptr1], 8 + nop.i 999 ;; +} +{ .mfi +(p0) ldfd Result_lo = [table_ptr1], -8 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p6) fmerge.s Result = ArgY, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p6) fmerge.s Result_lo = ArgY, Result_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p6) fadd.s0 Result = Result, Result_lo +(p6) br.ret.sptk b0 ;; +} +// +// Load PI/2 and adjust its sign. +// Return +PI/2 when ArgY = +Inf and ArgX = +/-0 or normal +// Return -PI/2 when ArgY = -Inf and ArgX = +/-0 or normal +// +{ .mmi +(p7) add table_ptr1 = 32, table_ptr1 ;; +(p7) ldfd Result = [table_ptr1], 8 + nop.i 999 ;; +} +{ .mfi +(p7) ldfd Result_lo = [table_ptr1], -8 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fmerge.s Result = ArgY, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fmerge.s Result_lo = ArgY, Result_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p7) fadd.s0 Result = Result, Result_lo +(p7) br.ret.sptk b0 ;; +} +// +// Load PI/4 and adjust its sign. +// Return +PI/4 when ArgY = +Inf and ArgX = +Inf +// Return -PI/4 when ArgY = -Inf and ArgX = +Inf +// +{ .mmi +(p8) add table_ptr1 = 48, table_ptr1 ;; +(p8) ldfd Result = [table_ptr1], 8 + nop.i 999 ;; +} +{ .mfi +(p8) ldfd Result_lo = [table_ptr1], -8 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fmerge.s Result = ArgY, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fmerge.s Result_lo = ArgY, Result_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p8) fadd.s0 Result = Result, Result_lo +(p8) br.ret.sptk b0 ;; +} +L(ATANL_ArgY_Not_INF): +{ .mfi + nop.m 999 +// +// Load PI/4 and adjust its sign. +// Return +3PI/4 when ArgY = +Inf and ArgX = -Inf +// Return -3PI/4 when ArgY = -Inf and ArgX = -Inf +// +(p0) fclass.m.unc p6, p0 = ArgX, 0x007 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7, p0 = ArgX, 0x021 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p8, p0 = ArgX, 0x022 + nop.i 999 ;; +} +{ .mmi +(p6) add table_ptr1 = 16, table_ptr1 ;; +(p6) ldfd Result = [table_ptr1], 8 + nop.i 999 ;; +} +{ .mfi +(p6) ldfd Result_lo = [table_ptr1], -8 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p6) fmerge.s Result = ArgY, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p6) fmerge.s Result_lo = ArgY, Result_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p6) fadd.s0 Result = Result, Result_lo +(p6) br.ret.spnt b0 ;; +} +{ .mfi + nop.m 999 +// +// return = sign_Y * PI/2 when ArgX = 0 +// +(p7) fmerge.s Result = ArgY, f0 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p7) fnorm.s0 Result = Result +(p7) br.ret.spnt b0 ;; +} +// +// return = sign_Y * 0 when ArgX = Inf +// +{ .mmi +(p8) ldfd Result = [table_ptr1], 8 ;; +(p8) ldfd Result_lo = [table_ptr1], -8 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fmerge.s Result = ArgY, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fmerge.s Result_lo = ArgY, Result_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p8) fadd.s0 Result = Result, Result_lo +(p8) br.ret.sptk b0 ;; +} +// +// return = sign_Y * PI when ArgX = -Inf +// +.endp atan2l +ASM_SIZE_DIRECTIVE(atan2l) +ASM_SIZE_DIRECTIVE(__atan2l) +ASM_SIZE_DIRECTIVE(__ieee754_atan2l) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_cbrt.S glibc-2.2.3/sysdeps/ia64/fpu/s_cbrt.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_cbrt.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_cbrt.S Mon Feb 19 00:52:39 2001 @@ -0,0 +1,676 @@ +.file "cbrt.asm" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang +// of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 5/19/00: New version (modified algorithm) +// +// API +//============================================================== +// double cbrt(double) +// +// Overview of operation +//============================================================== +// Background +// +// Implementation +// +// cbrt(a) = cbrt(a y) / cbrt(y) +// = cbrt(1 - (1 - a y)) * 1/cbrt(y) +// +// where y = frcpa(a). +// +// * cbrt(1 - (1 - a y)) is approximated by a degree-5 polynomial +// +// 1 - (1/3)*r - (1/9)*r^2 - (5/81)*r^3 - (10/243)*r^4 - (22/729)*r^5 +// +// in r = 1 - a y. +// +// * The values 1/cbrt(y) are stored in a table of constants T0 +// to 64 bits of accuracy +// +// The table values are stored for three exponent values and are +// then multiplied by e/3 where e is the exponent of the input number. +// This computation is carried out in parallel with the polynomial +// evaluation: +// +// T = 2^(e/3) * T0 + + + + + +//=============== +// input = x +// C = frcpa(x) +// r = 1 - C * x +// +// Special values +//============================================================== + + + +// Registers used +//============================================================== +// f6-f15 +// r2, r23-r26, r28-r30 +// p6,p7,p8,p12 + +#include "libm_support.h" + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +poly_coeffs: +ASM_TYPE_DIRECTIVE(poly_coeffs,@object) +data8 0xaaaaaaaaaaaaaaab, 0x00003ffd // 1/3 +data8 0x3fbc71c71c71c71d, 0x3faf9add3c0ca459 +data8 0x3fa511e8d2b3183b, 0x3f9ee7113506ac13 +ASM_SIZE_DIRECTIVE(poly_coeffs) + +T_table: +ASM_TYPE_DIRECTIVE(T_table,@object) + +data8 0x80155c748c374836, 0xa160019ed37fb4ae +data8 0xcb51ddcb9e93095e, 0x8040404b0879f7f9 +data8 0xa1960b5966da4608, 0xcb95f333968ad59b +data8 0x806b5dce4b405c10, 0xa1cc5dbe6dc2aab4 +data8 0xcbda64292d3ffd97, 0x8096b586974669b1 +data8 0xa202f97995b69c0d, 0xcc1f3184af961596 +data8 0x80bcd273d952a028, 0xa232fe6eb0c0577d +data8 0xcc5bb1ac954d33e2, 0x80e898c52813f2f3 +data8 0xa26a2582012f6e17, 0xcca12e9831fc6402 +data8 0x81149add67c2d208, 0xa2a197e5d10465cb +data8 0xcce70a67b64f24ad, 0x813b4e2c856b6e9a +data8 0xa2d25a532efefbc8, 0xcd24794726477ea5 +data8 0x8167c1dde03de7aa, 0xa30a5bd6e49e4ab8 +data8 0xcd6b096a0b70ee87, 0x818ed973b811135e +data8 0xa33b9c9b59879e24, 0xcda9177738b15a90 +data8 0x81bbc0c33e13ec98, 0xa3742fca6a3c1f21 +data8 0xcdf05f2247dffab9, 0x81e33e69fbe7504a +data8 0xa3a5f1273887bf22, 0xce2f0f347f96f906 +data8 0x820aec524e3c23e9, 0xa3d7ef508ff11574 +data8 0xce6e0be0cd551a61, 0x823880f78e70b805 +data8 0xa4115ce30548bc15, 0xceb666b2c347d1de +data8 0x826097a62a8e5200, 0xa443df0e53df577a +data8 0xcef609b0cb874f00, 0x8288dfe00e9b5eaf +data8 0xa4769fa5913c0ec3, 0xcf35fb5447e5c765 +data8 0x82b15a10c5371624, 0xa4a99f303bc7def5 +data8 0xcf763c47ee869f00, 0x82da06a527b18937 +data8 0xa4dcde37779adf4b, 0xcfb6cd3888d71785 +data8 0x8302e60b635ab394, 0xa5105d46152c938a +data8 0xcff7aed4fbfbb447, 0x832bf8b2feec2f0e +data8 0xa5441ce89825cb8d, 0xd038e1ce5167e3c6 +data8 0x83553f0ce00e276b, 0xa5781dad3e54d899 +data8 0xd07a66d7bfa0ebba, 0x837eb98b50f8322a +data8 0xa5ac602406c4e68c, 0xd0bc3ea6b32d1b21 +data8 0x83a270f44c84f699, 0xa5d9601d95c2c0bc +data8 0xd0f4f0e8f36c1bf8, 0x83cc4d7cfcfac5ca +data8 0xa60e1e1a2de14745, 0xd1376458e34b037e +data8 0x83f65f78a8872b4c, 0xa6431f6e3fbd9658 +data8 0xd17a2ca133f78572, 0x8420a75f2f7b53c8 +data8 0xa67864b0d432fda4, 0xd1bd4a80301c5715 +data8 0x844510461ff14209, 0xa6a6444aa0243c0b +data8 0xd1f71682b2fa4575, 0x846fbd91b930bed2 +data8 0xa6dc094d10f25792, 0xd23ad555f773f059 +data8 0x84947e18234f3294, 0xa70a574cc02bba69 +data8 0xd2752c7039a5bf73, 0x84bf92755825045a +data8 0xa7409e2af9549084, 0xd2b98ee008c06b59 +data8 0x84e4ac0ee112ba51, 0xa76f5c64ca2cf13b +data8 0xd2f4735ffd700280, 0x8509ef44b86f20be +data8 0xa79e4f0babab5dc0, 0xd32f99ed6d9ac0e1 +data8 0x85359d5d91768427, 0xa7d5579ae5164b85 +data8 0xd374f0666c75d51c, 0x855b3bd5b7384357 +data8 0xa804bd3c6fe61cc8, 0xd3b0a7d13618e4a1 +data8 0x858104f0c415f79a, 0xa8345895e5250a5a +data8 0xd3eca2ea53bcec0c, 0x85a6f90390d29864 +data8 0xa8642a122b44ef0b, 0xd428e23874f13a17 +data8 0x85d3772fcd56a1dd, 0xa89c38ca18f6108b +data8 0xd46f82fe293bc6d3, 0x85f9c982fcc002f3 +data8 0xa8cc81063b6e87ca, 0xd4ac57e9b7186420 +data8 0x862047e0e7ea554b, 0xa8fd00bfa409285e +data8 0xd4e972becb04e8b8, 0x8646f2a26f7f5852 +data8 0xa92db8664d5516da, 0xd526d40a7a9b43a3 +data8 0x866dca21754096b5, 0xa95ea86b75cc2c20 +data8 0xd5647c5b73917370, 0x8694ceb8dfd17a37 +data8 0xa98fd141a4992deb, 0xd5a26c4201bd6d13 +data8 0x86bc00c49e9307e8, 0xa9c1335cae7446ba +data8 0xd5e0a45015350a7e, 0x86dccd74fce79610 +data8 0xa9ea8686f556f645, 0xd614b539c6194104 +data8 0x870453c845acf90f, 0xaa1c52d17906bb19 +data8 0xd6537310e224283f, 0x872c089a1e90342c +data8 0xaa4e59b046dab887, 0xd6927ab62244c917 +data8 0x8753ec4a92d16c5e, 0xaa809b9c60d1890b +data8 0xd6d1ccc1fc4ef4b7, 0x877bff3aca19f6b4 +data8 0xaab319102f3f9b33, 0xd71169cea98fdded +data8 0x879d88b6fe1c324c, 0xaadd5a18c1e21274 +data8 0xd746a66a5bc9f6d9, 0x87c5f346dbf98c3a +data8 0xab1045f2ac31bdf5, 0xd786ce8f0fae5317 +data8 0x87e7c653efacef2c, 0xab3ae3ab2df7231e +data8 0xd7bc7ff214c4e75a, 0x881089d4e73ffefc +data8 0xab6e3f945d1e96fc, 0xd7fd35467a517ed1 +data8 0x88397e6a366f2a8a, 0xaba1d953a08fa94e +data8 0xd83e38838648d815, 0x885bc559e5e1c081 +data8 0xabcd090db7ef4c3f, 0xd874a1db598b8951 +data8 0x887e2ee392bb7a93, 0xabf864602d7c323d +data8 0xd8ab42205b80edaf, 0x88a7a8587e404257 +data8 0xac2ca5886ccf9b57, 0xd8ed1849d202f965 +data8 0x88ca5eda67594784, 0xac5861d4aa441f0f +data8 0xd92432bd5a173685, 0x88f4356166bd590e +data8 0xac8d183fe3a2fbed, 0xd9669ca45b03c23e +data8 0x89173a0acf5ce026, 0xacb93703ff51571e +data8 0xd99e3327cf89574e, 0x893a62a098b6a57b +data8 0xace5830ad0c3f14b, 0xd9d602b19b100466 +data8 0x895daf637236ae2c, 0xad11fca5d78b3ff2 +data8 0xda0e0ba86c096841, 0x89883b9d1c2fa9c5 +data8 0xad4797fddf91a798, 0xda5195fcdb1c3dce +data8 0x89abd8dd374a5d7b, 0xad747701e559ebcb +data8 0xda8a1eb87a491f6c, 0x89cf9b1dcd197fa0 +data8 0xada184a47e9c7613, 0xdac2e230b91c3f84 +data8 0x89f382a258ea79de, 0xadcec13ab0dda8ff +data8 0xdafbe0d0b66aea30, 0x8a178faf06648f29 +data8 0xadfc2d1a5fd21ba8, 0xdb351b04a8fafced +data8 0x8a3bc288b3e1d18a, 0xae29c89a5053c33a +data8 0xdb6e9139e33cdd8e, 0x8a601b74f4d1f835 +data8 0xae5794122b638df9, 0xdba843ded7151ea1 +data8 0x8a849aba14274764, 0xae858fda8137ae0a +data8 0xdbe2336319b61fc8, 0x8aa9409f16cdbc9b +data8 0xaeb3bc4ccc56d3d1, 0xdc1c60376789fa68 +data8 0x8ace0d6bbe2cb316, 0xaee219c374c09920 +data8 0xdc56cacda82d0cd5, 0x8af301688ab33558 +data8 0xaf10a899d3235fe7, 0xdc917398f2797814 +data8 0x8b181cdebe6f3206, 0xaf3f692c341fe8b4 +data8 0xdccc5b0d90a3e628, 0x8b3d60185fafcb7c +data8 0xaf6e5bd7db9ae6c2, 0xdd0781a10469f0f2 +data8 0x8b62cb603bb2fad0, 0xaf9d80fb081cd91b +data8 0xdd42e7ca0b52838f, 0x8b80d7d6bc4104de +data8 0xafc35ce063eb3787, 0xdd729ad01c69114d +data8 0x8ba68bf73ac74f39, 0xaff2ddcb5f28f03d +data8 0xddae749c001fbf5e, 0x8bcc68fb9f9f7335 +data8 0xb022923b148e05c5, 0xddea8f50a51c69b1 +data8 0x8bf26f31c534fca2, 0xb0527a919adbf58b +data8 0xde26eb69a0f0f111, 0x8c10f86e13a1a1f9 +data8 0xb078f3ab1d701c65, 0xde576480262399bc +data8 0x8c3749916cc6abb5, 0xb0a93a6870649f31 +data8 0xde943789645933c8, 0x8c5dc4c4f7706032 +data8 0xb0d9b624d62ec856, 0xded14d58139a28af +data8 0x8c7cac3a8c42e3e0, 0xb100a5f53fb3c8e1 +data8 0xdf025c00bbf2b5c7, 0x8ca373f1b7bf2716 +data8 0xb131821882f5540a, 0xdf3feb44d723a713 +data8 0x8cc29907fb951294, 0xb158bf8e4cb04055 +data8 0xdf715bc16c159be0, 0x8ce9ae4e9492aac8 +data8 0xb189fd69d56b238f, 0xdfaf66240e29cda8 +data8 0x8d0911dddbfdad0e, 0xb1b189958e8108e4 +data8 0xdfe139cbf6e19bdc, 0x8d3075c4f20f04ee +data8 0xb1e32a8165b09832, 0xe01fc0fe94d9fc52 +data8 0x8d5018a9d4de77d5, 0xb20b0678fc271eec +data8 0xe051f92ffcc0bd60, 0x8d77cc47dd143515 +data8 0xb23d0bd3f7592b6e, 0xe090feec9c9a06ac +data8 0x8d97af6352739cb7, 0xb26538b2db8420dc +data8 0xe0c39d0c9ff862d6, 0x8db7af523167800f +data8 0xb28d89e339ceca14, 0xe0f668eeb99f188d +data8 0x8ddfd80bc68c32ff, 0xb2c022ca12e55a16 +data8 0xe1362890eb663139, 0x8e00197e1e7c88fe +data8 0xb2e8c6852c6b03f1, 0xe1695c7212aecbaa +data8 0x8e207859f77e20e7, 0xb3118f4eda9fe40f +data8 0xe19cbf0391bbbbe9, 0x8e40f4ce60c9f8e2 +data8 0xb33a7d6268109ebe, 0xe1d050901c531e85 +data8 0x8e69ba46cf2fde4d, 0xb36ddbc5ea70ec55 +data8 0xe2110903b4f4047a, 0x8e8a7a00bd7ae63e +data8 0xb3971e9b39264023, 0xe2450559b4d80b6d +data8 0x8eab57ef1cf2f529, 0xb3c0877ecc18e24a +data8 0xe27931a231554ef3, 0x8ecc5442cffb1dad +data8 0xb3ea16ae3a6c905f, 0xe2ad8e2ac3c5b04b +data8 0x8eed6f2d2a4acbfe, 0xb413cc67aa0e4d2d +data8 0xe2e21b41b9694cce, 0x8f0ea8dff24441ff +data8 0xb43da8e9d163e1af, 0xe316d93615862714 +data8 0x8f385c95d696b817, 0xb47233773b84d425 +data8 0xe3590bd86a0d30f9, 0x8f59dc43edd930f3 +data8 0xb49c6825430fe730, 0xe38e38e38e38e38e +data8 0x8f7b7b5f5ffad1c4, 0xb4c6c46bcdb27dcf +data8 0xe3c397d1e6db7839, 0x8f9d3a1bea165f38 +data8 0xb4f1488c0b35d26f, 0xe3f928f5953feb9e +data8 0x8fbf18adc34b66da, 0xb51bf4c7c51f0168 +data8 0xe42eeca17c62886c, 0x8fe117499e356095 +data8 0xb546c9616087ab9c, 0xe464e32943446305 +data8 0x90033624aa685f8d, 0xb571c69bdffd9a70 +data8 0xe49b0ce15747a8a2, 0x9025757495f36b86 +data8 0xb59cecbae56984c3, 0xe4d16a1eee94e9d4 +data8 0x903f3a5dcc091203, 0xb5bd64512bb14bb7 +data8 0xe4fa52107353f67d, 0x9061b2fceb2bdbab +data8 0xb5e8d2a4bf5ba416, 0xe5310a471f4d2dc3 +data8 0x90844ca7211032a7, 0xb6146a9a1bc47819 +data8 0xe567f6f1c2b9c224, 0x90a7079403e6a15d +data8 0xb6402c7749d621c0, 0xe59f18689a9e4c9a +data8 0x90c9e3fbafd63799, 0xb66c1882fb435ea2 +data8 0xe5d66f04b8a68ecf, 0x90ece216c8a16ee4 +data8 0xb6982f048c999a56, 0xe60dfb2005c192e9 +data8 0x9110021e7b516f0a, 0xb6c47044075b4142 +data8 0xe645bd1544c7ea51, 0x912a708a39be9075 +data8 0xb6e5bd6bfd02bafd, 0xe66fb21b505b20a0 +data8 0x914dcc7b31146370, 0xb7124a2736ff8ef2 +data8 0xe6a7d32af4a7c59a, 0x91714af8cfe984d5 +data8 0xb73f026a01e94177, 0xe6e02b129c6a5ae4 +data8 0x918c00a6f3795e97, 0xb760a959f1d0a7a7 +data8 0xe70a9136a7403039, 0x91afbc299ed0295d +data8 0xb78dae7e06868ab0, 0xe74349fb2d92a589 +data8 0x91d39add3e958db0, 0xb7badff8ad9e4e02 +data8 0xe77c3a9c86ed7d42, 0x91ee9920a8974d92 +data8 0xb7dce25b8e17ae9f, 0xe7a713f88151518a +data8 0x9212b5fcac537c19, 0xb80a6226904045e2 +data8 0xe7e067453317ed2b, 0x9236f6b256923fcf +data8 0xb8380f1cafd73c1c, 0xe819f37a81871bb5 +data8 0x92523ee6f90dcfc3, 0xb85a6ea8e321b4d8 +data8 0xe8454236bfaeca14, 0x9276bef031e6eb79 +data8 0xb8886b684ae7d2fa, 0xe87f32f24c3fc90e +data8 0x929236ec237a24ad, 0xb8ab0726fa00cf5d +data8 0xe8aacd8688892ba6, 0x92b6f70b7efe9dc3 +data8 0xb8d954a4d13b7cb1, 0xe8e523fd32f606f7 +data8 0x92d29f61eec7dc2b, 0xb8fc2d4f6cd9f04a +data8 0xe9110b5311407927, 0x92f7a05d5b8ba92f +data8 0xb92acc851476b1ab, 0xe94bc8bf0c108fa3 +data8 0x931379a403be5c16, 0xb94de2d841a184c2 +data8 0xe977fdc439c2ca3c, 0x9338bc44de2e3f34 +data8 0xb97cd4c36c92693c, 0xe9b3236528fc349e +data8 0x9354c71412c69486, 0xb9a0297f172665e3 +data8 0xe9dfa70b745ac1b4, 0x937a4c273907e262 +data8 0xb9cf6f21e36c3924, 0xea1b36268d0eaa38 +data8 0x93968919f6e7975d, 0xb9f3030951267208 +data8 0xea480963fd394197, 0x93bc516fdd4680c9 +data8 0xba229d6a618e7c59, 0xea84034425f27484 +data8 0x93d8c123d9be59b2, 0xba467144459f9855 +data8 0xeab12713138dd1cc, 0x93f546c955e60076 +data8 0xba6a60c3c48f1a4b, 0xeade6db73a5e503b +data8 0x941b70a65879079f, 0xba9a76056b67ee7a +data8 0xeb1b0268343b121b, 0x943829f337410591 +data8 0xbabea699563ada6e, 0xeb489b0b2bdb5f14 +data8 0x9454f995765bc4d2, 0xbae2f350b262cc4b +data8 0xeb765721e85f03d0, 0x947b86b57f5842ed +data8 0xbb1385a23be24e57, 0xebb389645f222f62 +data8 0x94988aeb23470f86, 0xbb3814975e17c680 +data8 0xebe198f090607e0c, 0x94b5a5dc9695f42a +data8 0xbb5cc031009bf467, 0xec0fcc9321024509 +data8 0x94d2d7a9170d8b42, 0xbb81889680024764 +data8 0xec3e247da8b82f61, 0x94f9e87dd78bf019 +data8 0xbbb2c0d8703ae95d, 0xec7c27d21321c9f7 +data8 0x95175019a503d89e, 0xbbd7cd09ba3c5463 +data8 0xecaad5278824e453, 0x9534cefa625fcb3a +data8 0xbbfcf68c4977718f, 0xecd9a76d097d4e77 +data8 0x955265405c491a25, 0xbc223d88cfc88eee +data8 0xed089ed5dcd99446, 0x9570130c1f9bb857 +data8 0xbc47a2284fee4ff8, 0xed37bb95add09a1c +data8 0x9597ca4119525184, 0xbc79ac0916ed7b8a +data8 0xed76c70508f904b6, 0x95b5af6fb5aa4d3c +data8 0xbc9f5670d1a13030, 0xeda63bb05e7f93c6 +data8 0x95d3ac9273aafd7a, 0xbcc51f068cb95c1d +data8 0xedd5d661daed2dc4, 0x95f1c1cafdfd3684 +data8 0xbceb05f4b30a9bc0, 0xee05974eef86b903 +data8 0x960fef3b430b8d5f, 0xbd110b6604c7d306 +data8 0xee357ead791fc670, 0x962e350575b409c5 +data8 0xbd372f8598620f19, 0xee658cb3c134a463 +data8 0x964c934c0dfc1708, 0xbd5d727edb6b3c7e +data8 0xee95c1987f080211, 0x966b0a31c9c6bc7d +data8 0xbd83d47d937bbc6d, 0xeec61d92d8c4314f +data8 0x968999d9ad8d264e, 0xbdaa55addf1ae47d +data8 0xeef6a0da64a014ac, 0x96a8426705198795 +data8 0xbdd0f63c36aa73f0, 0xef274ba72a07c811 +data8 0x96c703fd64445ee5, 0xbdf7b6556d550a15 +data8 0xef581e31a2c91260, 0x96e5dec0a7b4268d +data8 0xbe1e9626b1ffa96b, 0xef8918b2bc43aec6 +data8 0x9704d2d4f59f79f3, 0xbe4595dd903e5371 +data8 0xefba3b63d89d7cbf, 0x9723e05ebe91b9b0 +data8 0xbe6cb5a7f14bc935, 0xefeb867ecffaa607 +data8 0x97430782be323831, 0xbe93f5b41d047cf7 +data8 0xf01cfa3df1b9c9fa, 0x97624865fc0df8bf +data8 0xbebb5630bae4c15f, 0xf04e96dc05b43e2d +data8 0x9781a32dcc640b2a, 0xbee2d74cd30a430c +data8 0xf0805c944d827454, 0x97a117ffd0f48e46 +data8 0xbf0a7937cf38d981, 0xf0b24ba285c495cb +data8 0x97c0a701f9d263c9, 0xbf323c217be2bc8c +data8 0xf0e46442e76f6569, 0x97e0505a8637a036 +data8 0xbf5a203a09342bbb, 0xf116a6b2291d7896 +data8 0x97f57a9fb0b08c6e, 0xbf74cad1c14ebfc4 +data8 0xf1383fa9e9b5b381, 0x9815503365914a9d +data8 0xbf9ce6a497a89f78, 0xf16ac84f90083b9b +data8 0x98354085054fd204, 0xbfc52428bec6e72f +data8 0xf19d7b686dcb03d7, 0x98554bbbf8a77902 +data8 0xbfed838fddab024b, 0xf1d0593311db1757 +data8 0x987571fffb7f94f6, 0xc016050c0420981a +data8 0xf20361ee8f1c711e, 0x9895b3791dd03c23 +data8 0xc03ea8cfabddc330, 0xf23695da7de51d3f +data8 0x98ab43a5fc65d0c8, 0xc059d3cbd65ddbce +data8 0xf258d095e465cc35, 0x98cbb2d196bd713d +data8 0xc082b122a3c78c9d, 0xf28c4d0bfc982b34 +data8 0x98ec3d9ec7b6f21a, 0xc0abb1499ae736c4 +data8 0xf2bff55eb3f0ea71, 0x990ce436db5e8344 +data8 0xc0d4d474c3aedaaf, 0xf2f3c9cf9884636e +data8 0x9922b8218160967a, 0xc0f054ca33eb3437 +data8 0xf31670135ab9cc0f, 0x99438d686f75779d +data8 0xc119b2c67e600ed0, 0xf34a8e9f0b54cdfb +data8 0x99647eea131fa20b, 0xc1433453de2033ff +data8 0xf37ed9fa6b8add3f, 0x997a85045a47c6d0 +data8 0xc15ef3e44e10032d, 0xf3a1cfe884ef6bb6 +data8 0x999ba5f14f8add02, 0xc188b130431d80e6 +data8 0xf3d66689dcc8e8d3, 0x99bce38b5465ecae +data8 0xc1b2929d6067730e, 0xf40b2ab069d5c96a +data8 0x99d31ca0887f30f9, 0xc1ce9268f31cc734 +data8 0xf42e718b90c8bc16, 0x99f48a669c74c09e +data8 0xc1f8b0877c1b0c08, 0xf463822a0a3b4b00 +data8 0x9a16154eb445c873, 0xc222f35a87b415ba +data8 0xf498c1076015faf8, 0x9a2c822ec198d667 +data8 0xc23f3467349e5c88, 0xf4bc5a19a33990b5 +data8 0x9a4e3e080cd91b78, 0xc269b4e40e088c01 +data8 0xf4f1e6a7d6f5425f, 0x9a70177afe52322e +data8 0xc2945aac24daaf6e, 0xf527a232cf6be334 +data8 0x9a86b8fa94eebe10, 0xc2b0de05e43c1d66 +data8 0xf54b8ecdcda90851, 0x9aa8c42866ae2958 +data8 0xc2dbc275e1229d09, 0xf5819949c7ad87b4 +data8 0x9abf86f9e12fc45e, 0xc2f86fca9d80eeff +data8 0xf5a5bac9213b48a9, 0x9ae1c462fc05f49d +data8 0xc323938449a2587e, 0xf5dc1501f324a812 +data8 0x9af8a8dc936b84d0, 0xc3406b40a538ed20 +data8 0xf6006bee86b5589e, 0x9b1b19033be35730 +data8 0xc36bcee8211d15e0, 0xf63716b2fa067fa4 +data8 0x9b3da7daf04c2892, 0xc397593adf2ba366 +data8 0xf66df22fb6132b9c, 0x9b54c2e4c8a9012b +data8 0xc3b475b6206155d5, 0xf6929fb98225deb1 +data8 0x9b77854e6c661200, 0xc3e0410243b97383 +data8 0xf6c9cd13021e3fea, 0x9b8ec2e678d56d2f +data8 0xc3fd890709833d37, 0xf6eeb177472cedae +data8 0x9ba60e6a5ca133b6, 0xc41ae295f7e7fa06 +data8 0xf713abf4cb0b3afb, 0x9bc919ea66a151a4 +data8 0xc44709f7bb8a4dd2, 0xf74b4d5333684ef1 +data8 0x9be0887c09ef82bb, 0xc4648fb0e0bec4c1 +data8 0xf7707f75a72f8e94, 0x9c03c8d5fffc3503 +data8 0xc490f9a94695ba14, 0xf7a874b97927af44 +data8 0x9c1b5ad21a81cbb9, 0xc4aeac0173b7d390 +data8 0xf7cddf140aedf1d8, 0x9c3ed09216e9ca02 +data8 0xc4db5941007aa853, 0xf806291bacb7f7a9 +data8 0x9c568656c0423def, 0xc4f938aec206291a +data8 0xf82bcc43b92eafef, 0x9c7a320af242ce60 +data8 0xc52629e899dfd622, 0xf8646bf0defb759e +data8 0x9c920bf7a8c01dc2, 0xc54436e44043b965 +data8 0xf88a487dfc3ff5f7, 0x9ca9f475d98b159c +data8 0xc562563abf9ea07f, 0xf8b03c2b46cdc17f +data8 0x9ccdeca60e80b5f8, 0xc58fa7d1dc42921c +data8 0xf8e95541c152ae7a, 0x9ce5f9d4653d4902 +data8 0xc5adf561b91e110a, 0xf90f832c2700c160 +data8 0x9cfe15cb38bfdd8e, 0xc5cc5591bdbd82fa +data8 0xf935c88e0c7f419b, 0x9d225b983f6c1f96 +data8 0xc5fa08f1ff20593c, 0xf96f5cd84fd86873 +data8 0x9d3a9cca32261ed7, 0xc618980a79ce6862 +data8 0xf995dd53ebdd9d6d, 0x9d52ecfccebe1768 +data8 0xc6373a09e34b50fa, 0xf9bc75a034436a41 +data8 0x9d77818d95b82f86, 0xc66550a6e0baaf35 +data8 0xf9f686f26d5518de, 0x9d8ff7893fa4706c +data8 0xc6842241926342c9, 0xfa1d5b39b910a8c5 +data8 0x9da87cbef36f2a5e, 0xc6a3070b7c93bb9e +data8 0xfa4447acc4ecbfd2, 0x9dcd6140b4a35aeb +data8 0xc6d18260bb84081b, 0xfa7ed7e51e6fdfb4 +data8 0x9de60cd06dc6e2d4, 0xc6f0977c9416828b +data8 0xfaa601394d49a1a0, 0x9dfec7d4cc43b76f +data8 0xc70fc0117c641630, 0xfacd431644ce0e40 +data8 0x9e17925ec9fccc4a, 0xc72efc34d7e615be +data8 0xfaf49d96f7a75909, 0x9e3cdf6db57dc075 +data8 0xc75dfb441594141e, 0xfb2fd3c65e562fd5 +data8 0x9e55d110b63637a8, 0xc77d68aa019bda4c +data8 0xfb576c5762024805, 0x9e6ed27594550d2e +data8 0xc79ce9ea478dbc4f, 0xfb7f1debc22c4040 +data8 0x9e87e3adc385d393, 0xc7bc7f1ae453219d +data8 0xfba6e89f32d0190a, 0x9ead9b54b37a1055 +data8 0xc7ec0476e15e141a, 0xfbe2c803a0894893 +data8 0x9ec6d46a3d7de215, 0xc80bcbe16f1d540f +data8 0xfc0ad1ff0ed9ecf0, 0x9ee01d9108be3154 +data8 0xc82ba78a5d349735, 0xfc32f57bdfbcbe7f +data8 0x9ef976db07288d04, 0xc84b978847a06b87 +data8 0xfc5b32968f99b21c, 0x9f12e05a4759ec25 +data8 0xc86b9bf1ee817bc6, 0xfc83896bc861ab08 +data8 0x9f2c5a20f4da6668, 0xc88bb4de3667cdf4 +data8 0xfcabfa1861ed4815, 0x9f52af78ed1733ca +data8 0xc8bc00e7fe9e23a3, 0xfce8d3cea7d3163e +data8 0x9f6c52426a39d003, 0xc8dc4d7ff2d25232 +data8 0xfd118595143ee273, 0x9f860593d42fd7f3 +data8 0xc8fcaeebcb40eb47, 0xfd3a519943d4865a +data8 0x9f9fc97fdb96bd51, 0xc91d25431426a663 +data8 0xfd6337f8e1ae5a4b, 0x9fb99e194f4a7037 +data8 0xc93db09d7fdb2949, 0xfd8c38d1c8e927eb +data8 0x9fd383731ca51db9, 0xc95e5112e721582a +data8 0xfdb5544205095a53, 0x9fed79a04fbf9423 +data8 0xc97f06bb49787677, 0xfdde8a67d2613531 +data8 0xa00780b413b24ee8, 0xc99fd1aecd6e1b06 +data8 0xfe07db619e781611, 0xa02eab2c4474b0cd +data8 0xc9d12a3e27bb1625, 0xfe460768d80bf758 +data8 0xa048dcd51ccfd142, 0xc9f22ad82ba3d5f0 +data8 0xfe6f9bfb06cd32f6, 0xa0631fa894b11b8d +data8 0xca134113105e67b2, 0xfe994bcd3d14fcc2 +data8 0xa07d73ba65e680af, 0xca346d07b045a876 +data8 0xfec316fecaf3f2ab, 0xa097d91e6aaf71b0 +data8 0xca55aecf0e94bb88, 0xfeecfdaf33fadb80 +data8 0xa0b24fe89e02602f, 0xca77068257be9bab +data8 0xff16fffe2fa8fad6, 0xa0ccd82d1bd2f68b +data8 0xca98743ae1c693a8, 0xff411e0ba9db886d +data8 0xa0e77200215909e6, 0xcab9f8122c99a101 +data8 0xff6b57f7c33e4e9a, 0xa1021d760d584855 +data8 0xcadb9221e268c3b5, 0xff95ade2d1bd7358 +data8 0xa11cdaa36068a57d, 0xcafd4283d8043dfd +data8 0xffc01fed60f86fb5, 0xa137a99cbd3f880b +data8 0xcb1f09520d37c6fb, 0xffeaae3832b63956 +ASM_SIZE_DIRECTIVE(T_table) + + + + + + +.align 32 +.global cbrt# + +.section .text +.proc cbrt# +.align 32 +cbrt: + + +{ .mfi + // get significand + getf.sig r23=f8 + // will continue only for normal/denormal numbers + (p0) fclass.nm.unc p12,p0 = f8, 0x1b + // r2 = pointer to C_1,...,C_5 followed by T_table + addl r2 = @ltoff(poly_coeffs), gp +} +{.mfi + // get exponent + getf.exp r24=f8 + // normalize a + fma.s1 f14=f8,f1,f0 + // r29=bias-((2^{12}-1)/3) -63=0xffff-0x555-0x3f=0xfa6b + mov r29=0xfa6b;; +} +{.mlx + mov r25=0x20000 + // r28=2^52 + movl r28=0x8000000000000000;; +} +{.mfb + // load start address for C_1,...,C_5 followed by T_table + ld8 r3=[r2] + (p12) fma.d.s0 f8=f8,f1,f0 + (p12) br.ret.spnt b0 +} +{.mfi + nop.m 0 + // y=frcpa(a) + frcpa.s0 f8,p6=f1,f8 + // p7=1 if denormal input + cmp.gtu p7,p0=r28,r23;; +} +{.mmi + // get exponent + (p7) getf.exp r24=f14 + // get normalized significand + (p7) getf.sig r23=f14 + // r28=bias-(2^{12}-1) + mov r28=0xf000;; +} +{.mii + // get r26=sign + and r26=r24,r25 + // eliminate leading 1 from r23=1st table index + shl r23=r23,1 + // eliminate sign from exponent (r25) + andcm r25=r24,r25;; +} +{.mib + add r2=32,r3 + // r23=1st table index (y_index,8 bits) + shr.u r23=r23,56 + nop.b 0 +} +{.mib + // load C_1 + ldfe f7=[r3],16 + // subtract bias from r25=exponent + sub r25=r25,r28 + nop.b 0;; +} +{.mib + // load C_2, C_3 + ldfpd f9,f10=[r3] + // 1: exponent*=5; // (2^{16}-1)/3=0x5555 + shladd r24=r25,2,r25 + nop.b 0 +} +{.mib + // load C_4, C_5 + ldfpd f11,f12=[r2],16 + // r23=3*y_index + shladd r23=r23,1,r23 + nop.b 0;; +} + +{.mfi + // r30=(5*expon)*16+5*expon=(0x55)*expon + shladd r30=r24,4,r24 + // r=1-a*y + (p6) fnma.s1 f6=f8,f14,f1 + // adjust T_table pointer by 1st index + shladd r2=r23,3,r2;; +} + +{.mii + nop.m 0 + // r24=(0x5500)*expon + shl r24=r30,8;; + // r24=(0x5555)*expon + add r24=r24,r30;; +} +{.mii + // r24=(0x5556)*expon // 0x5556=(2^{16}+2)/3 + add r24=r24,r25 + nop.i 0;; + // r24=floor(expon/3) + shr r24=r24,16;; +} +{.mfi + // r28=3*exponent + shladd r28=r24,1,r24 + // r2=r*r + (p6) fma.s1 f13=f6,f6,f0 + // bias exponent + add r24=r29,r24;; +} +{.mfi + // get remainder of exponent/3 : r25-r28 + sub r25=r25,r28 + // c2+c3*r + (p6) fma.s1 f9=f10,f6,f9 + // add sign to exponent + or r24=r24,r26 +} +{.mfi + nop.m 0 + // c4+c5*r + (p6) fma.s1 f11=f12,f6,f11 + nop.i 0;; +} +{.mmi + // f14=sign*2^{exponent/3} + (p6) setf.exp f14=r24 + // adjust T_table pointer by 2nd index + shladd r2=r25,3,r2 + nop.i 0;; +} +{.mmi + // load T + (p6) ldf8 f8=[r2] + nop.m 0 + nop.i 0;; +} + +{.mfi + nop.m 0 + // (c2+c3*r)+r^2*(c4+c5*r) + (p6) fma.s1 f9=f11,f13,f9 + nop.i 0 +} +{.mfi + nop.m 0 + // c1*r + (p6) fma.s1 f7=f7,f6,f0 + nop.i 0;; +} + +{.mfi + nop.m 0 + // P=c1*r+r^2*[(c2+c3*r)+r^2*(c4+c5*r)] + (p6) fma.s1 f9=f9,f13,f7 + nop.i 0 +} +{.mfi + nop.m 0 + // T'=T*(2^exp) + (p6) fma.s1 f8=f8,f14,f0 + nop.i 0;; +} +{.mfb + nop.m 0 + // result = T'-T'*P + (p6) fnma.d.s0 f8=f8,f9,f8 + br.ret.sptk b0;; +} +.endp cbrt +ASM_SIZE_DIRECTIVE(cbrt) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_cbrtf.S glibc-2.2.3/sysdeps/ia64/fpu/s_cbrtf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_cbrtf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_cbrtf.S Mon Feb 19 00:52:50 2001 @@ -0,0 +1,655 @@ +.file "cbrtf.asm" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang +// of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 5/18/00: New version (modified algorithm) +// +// API +//============================================================== +// float cbrtf(float) +// +// Overview of operation +//============================================================== +// Background +// +// Implementation +// +// cbrt(a) = cbrt(a y) / cbrt(y) +// = cbrt(1 - (1 - a y)) * 1/cbrt(y) +// +// where y = frcpa(a). +// +// * cbrt(1 - (1 - a y)) is approximated by a degree-2 polynomial +// +// 1 - (1/3)*r - (1/9)*r^2 +// +// in r = 1 - a y. +// +// * The values 1/cbrt(y) are stored in a table of constants T0 +// to 64 bits of accuracy +// +// The table values are stored for three exponent values and are +// then multiplied by e/3 where e is the exponent of the input number. +// This computation is carried out in parallel with the polynomial +// evaluation: +// +// T = 2^(e/3) * T0 + + + + + +//=============== +// input = x +// C = frcpa(x) +// r = 1 - C * x +// +// Special values +//============================================================== + + + +// Registers used +//============================================================== +// f6-f15 +// r2, r23-r26, r28-r30 +// p6,p7,p8,p12 + +#include "libm_support.h" + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +poly_coeffs: +ASM_TYPE_DIRECTIVE(poly_coeffs,@object) +data8 0xaaaaaaaaaaaaaaab, 0x00003ffd // 1/3 +data8 0xe38e38e38e38e38e, 0x00003ffb // 1/9 +ASM_SIZE_DIRECTIVE(poly_coeffs) + + +T_table: +ASM_TYPE_DIRECTIVE(T_table,@object) + +data8 0x80155c748c374836, 0xa160019ed37fb4ae +data8 0xcb51ddcb9e93095e, 0x8040404b0879f7f9 +data8 0xa1960b5966da4608, 0xcb95f333968ad59b +data8 0x806b5dce4b405c10, 0xa1cc5dbe6dc2aab4 +data8 0xcbda64292d3ffd97, 0x8096b586974669b1 +data8 0xa202f97995b69c0d, 0xcc1f3184af961596 +data8 0x80bcd273d952a028, 0xa232fe6eb0c0577d +data8 0xcc5bb1ac954d33e2, 0x80e898c52813f2f3 +data8 0xa26a2582012f6e17, 0xcca12e9831fc6402 +data8 0x81149add67c2d208, 0xa2a197e5d10465cb +data8 0xcce70a67b64f24ad, 0x813b4e2c856b6e9a +data8 0xa2d25a532efefbc8, 0xcd24794726477ea5 +data8 0x8167c1dde03de7aa, 0xa30a5bd6e49e4ab8 +data8 0xcd6b096a0b70ee87, 0x818ed973b811135e +data8 0xa33b9c9b59879e24, 0xcda9177738b15a90 +data8 0x81bbc0c33e13ec98, 0xa3742fca6a3c1f21 +data8 0xcdf05f2247dffab9, 0x81e33e69fbe7504a +data8 0xa3a5f1273887bf22, 0xce2f0f347f96f906 +data8 0x820aec524e3c23e9, 0xa3d7ef508ff11574 +data8 0xce6e0be0cd551a61, 0x823880f78e70b805 +data8 0xa4115ce30548bc15, 0xceb666b2c347d1de +data8 0x826097a62a8e5200, 0xa443df0e53df577a +data8 0xcef609b0cb874f00, 0x8288dfe00e9b5eaf +data8 0xa4769fa5913c0ec3, 0xcf35fb5447e5c765 +data8 0x82b15a10c5371624, 0xa4a99f303bc7def5 +data8 0xcf763c47ee869f00, 0x82da06a527b18937 +data8 0xa4dcde37779adf4b, 0xcfb6cd3888d71785 +data8 0x8302e60b635ab394, 0xa5105d46152c938a +data8 0xcff7aed4fbfbb447, 0x832bf8b2feec2f0e +data8 0xa5441ce89825cb8d, 0xd038e1ce5167e3c6 +data8 0x83553f0ce00e276b, 0xa5781dad3e54d899 +data8 0xd07a66d7bfa0ebba, 0x837eb98b50f8322a +data8 0xa5ac602406c4e68c, 0xd0bc3ea6b32d1b21 +data8 0x83a270f44c84f699, 0xa5d9601d95c2c0bc +data8 0xd0f4f0e8f36c1bf8, 0x83cc4d7cfcfac5ca +data8 0xa60e1e1a2de14745, 0xd1376458e34b037e +data8 0x83f65f78a8872b4c, 0xa6431f6e3fbd9658 +data8 0xd17a2ca133f78572, 0x8420a75f2f7b53c8 +data8 0xa67864b0d432fda4, 0xd1bd4a80301c5715 +data8 0x844510461ff14209, 0xa6a6444aa0243c0b +data8 0xd1f71682b2fa4575, 0x846fbd91b930bed2 +data8 0xa6dc094d10f25792, 0xd23ad555f773f059 +data8 0x84947e18234f3294, 0xa70a574cc02bba69 +data8 0xd2752c7039a5bf73, 0x84bf92755825045a +data8 0xa7409e2af9549084, 0xd2b98ee008c06b59 +data8 0x84e4ac0ee112ba51, 0xa76f5c64ca2cf13b +data8 0xd2f4735ffd700280, 0x8509ef44b86f20be +data8 0xa79e4f0babab5dc0, 0xd32f99ed6d9ac0e1 +data8 0x85359d5d91768427, 0xa7d5579ae5164b85 +data8 0xd374f0666c75d51c, 0x855b3bd5b7384357 +data8 0xa804bd3c6fe61cc8, 0xd3b0a7d13618e4a1 +data8 0x858104f0c415f79a, 0xa8345895e5250a5a +data8 0xd3eca2ea53bcec0c, 0x85a6f90390d29864 +data8 0xa8642a122b44ef0b, 0xd428e23874f13a17 +data8 0x85d3772fcd56a1dd, 0xa89c38ca18f6108b +data8 0xd46f82fe293bc6d3, 0x85f9c982fcc002f3 +data8 0xa8cc81063b6e87ca, 0xd4ac57e9b7186420 +data8 0x862047e0e7ea554b, 0xa8fd00bfa409285e +data8 0xd4e972becb04e8b8, 0x8646f2a26f7f5852 +data8 0xa92db8664d5516da, 0xd526d40a7a9b43a3 +data8 0x866dca21754096b5, 0xa95ea86b75cc2c20 +data8 0xd5647c5b73917370, 0x8694ceb8dfd17a37 +data8 0xa98fd141a4992deb, 0xd5a26c4201bd6d13 +data8 0x86bc00c49e9307e8, 0xa9c1335cae7446ba +data8 0xd5e0a45015350a7e, 0x86dccd74fce79610 +data8 0xa9ea8686f556f645, 0xd614b539c6194104 +data8 0x870453c845acf90f, 0xaa1c52d17906bb19 +data8 0xd6537310e224283f, 0x872c089a1e90342c +data8 0xaa4e59b046dab887, 0xd6927ab62244c917 +data8 0x8753ec4a92d16c5e, 0xaa809b9c60d1890b +data8 0xd6d1ccc1fc4ef4b7, 0x877bff3aca19f6b4 +data8 0xaab319102f3f9b33, 0xd71169cea98fdded +data8 0x879d88b6fe1c324c, 0xaadd5a18c1e21274 +data8 0xd746a66a5bc9f6d9, 0x87c5f346dbf98c3a +data8 0xab1045f2ac31bdf5, 0xd786ce8f0fae5317 +data8 0x87e7c653efacef2c, 0xab3ae3ab2df7231e +data8 0xd7bc7ff214c4e75a, 0x881089d4e73ffefc +data8 0xab6e3f945d1e96fc, 0xd7fd35467a517ed1 +data8 0x88397e6a366f2a8a, 0xaba1d953a08fa94e +data8 0xd83e38838648d815, 0x885bc559e5e1c081 +data8 0xabcd090db7ef4c3f, 0xd874a1db598b8951 +data8 0x887e2ee392bb7a93, 0xabf864602d7c323d +data8 0xd8ab42205b80edaf, 0x88a7a8587e404257 +data8 0xac2ca5886ccf9b57, 0xd8ed1849d202f965 +data8 0x88ca5eda67594784, 0xac5861d4aa441f0f +data8 0xd92432bd5a173685, 0x88f4356166bd590e +data8 0xac8d183fe3a2fbed, 0xd9669ca45b03c23e +data8 0x89173a0acf5ce026, 0xacb93703ff51571e +data8 0xd99e3327cf89574e, 0x893a62a098b6a57b +data8 0xace5830ad0c3f14b, 0xd9d602b19b100466 +data8 0x895daf637236ae2c, 0xad11fca5d78b3ff2 +data8 0xda0e0ba86c096841, 0x89883b9d1c2fa9c5 +data8 0xad4797fddf91a798, 0xda5195fcdb1c3dce +data8 0x89abd8dd374a5d7b, 0xad747701e559ebcb +data8 0xda8a1eb87a491f6c, 0x89cf9b1dcd197fa0 +data8 0xada184a47e9c7613, 0xdac2e230b91c3f84 +data8 0x89f382a258ea79de, 0xadcec13ab0dda8ff +data8 0xdafbe0d0b66aea30, 0x8a178faf06648f29 +data8 0xadfc2d1a5fd21ba8, 0xdb351b04a8fafced +data8 0x8a3bc288b3e1d18a, 0xae29c89a5053c33a +data8 0xdb6e9139e33cdd8e, 0x8a601b74f4d1f835 +data8 0xae5794122b638df9, 0xdba843ded7151ea1 +data8 0x8a849aba14274764, 0xae858fda8137ae0a +data8 0xdbe2336319b61fc8, 0x8aa9409f16cdbc9b +data8 0xaeb3bc4ccc56d3d1, 0xdc1c60376789fa68 +data8 0x8ace0d6bbe2cb316, 0xaee219c374c09920 +data8 0xdc56cacda82d0cd5, 0x8af301688ab33558 +data8 0xaf10a899d3235fe7, 0xdc917398f2797814 +data8 0x8b181cdebe6f3206, 0xaf3f692c341fe8b4 +data8 0xdccc5b0d90a3e628, 0x8b3d60185fafcb7c +data8 0xaf6e5bd7db9ae6c2, 0xdd0781a10469f0f2 +data8 0x8b62cb603bb2fad0, 0xaf9d80fb081cd91b +data8 0xdd42e7ca0b52838f, 0x8b80d7d6bc4104de +data8 0xafc35ce063eb3787, 0xdd729ad01c69114d +data8 0x8ba68bf73ac74f39, 0xaff2ddcb5f28f03d +data8 0xddae749c001fbf5e, 0x8bcc68fb9f9f7335 +data8 0xb022923b148e05c5, 0xddea8f50a51c69b1 +data8 0x8bf26f31c534fca2, 0xb0527a919adbf58b +data8 0xde26eb69a0f0f111, 0x8c10f86e13a1a1f9 +data8 0xb078f3ab1d701c65, 0xde576480262399bc +data8 0x8c3749916cc6abb5, 0xb0a93a6870649f31 +data8 0xde943789645933c8, 0x8c5dc4c4f7706032 +data8 0xb0d9b624d62ec856, 0xded14d58139a28af +data8 0x8c7cac3a8c42e3e0, 0xb100a5f53fb3c8e1 +data8 0xdf025c00bbf2b5c7, 0x8ca373f1b7bf2716 +data8 0xb131821882f5540a, 0xdf3feb44d723a713 +data8 0x8cc29907fb951294, 0xb158bf8e4cb04055 +data8 0xdf715bc16c159be0, 0x8ce9ae4e9492aac8 +data8 0xb189fd69d56b238f, 0xdfaf66240e29cda8 +data8 0x8d0911dddbfdad0e, 0xb1b189958e8108e4 +data8 0xdfe139cbf6e19bdc, 0x8d3075c4f20f04ee +data8 0xb1e32a8165b09832, 0xe01fc0fe94d9fc52 +data8 0x8d5018a9d4de77d5, 0xb20b0678fc271eec +data8 0xe051f92ffcc0bd60, 0x8d77cc47dd143515 +data8 0xb23d0bd3f7592b6e, 0xe090feec9c9a06ac +data8 0x8d97af6352739cb7, 0xb26538b2db8420dc +data8 0xe0c39d0c9ff862d6, 0x8db7af523167800f +data8 0xb28d89e339ceca14, 0xe0f668eeb99f188d +data8 0x8ddfd80bc68c32ff, 0xb2c022ca12e55a16 +data8 0xe1362890eb663139, 0x8e00197e1e7c88fe +data8 0xb2e8c6852c6b03f1, 0xe1695c7212aecbaa +data8 0x8e207859f77e20e7, 0xb3118f4eda9fe40f +data8 0xe19cbf0391bbbbe9, 0x8e40f4ce60c9f8e2 +data8 0xb33a7d6268109ebe, 0xe1d050901c531e85 +data8 0x8e69ba46cf2fde4d, 0xb36ddbc5ea70ec55 +data8 0xe2110903b4f4047a, 0x8e8a7a00bd7ae63e +data8 0xb3971e9b39264023, 0xe2450559b4d80b6d +data8 0x8eab57ef1cf2f529, 0xb3c0877ecc18e24a +data8 0xe27931a231554ef3, 0x8ecc5442cffb1dad +data8 0xb3ea16ae3a6c905f, 0xe2ad8e2ac3c5b04b +data8 0x8eed6f2d2a4acbfe, 0xb413cc67aa0e4d2d +data8 0xe2e21b41b9694cce, 0x8f0ea8dff24441ff +data8 0xb43da8e9d163e1af, 0xe316d93615862714 +data8 0x8f385c95d696b817, 0xb47233773b84d425 +data8 0xe3590bd86a0d30f9, 0x8f59dc43edd930f3 +data8 0xb49c6825430fe730, 0xe38e38e38e38e38e +data8 0x8f7b7b5f5ffad1c4, 0xb4c6c46bcdb27dcf +data8 0xe3c397d1e6db7839, 0x8f9d3a1bea165f38 +data8 0xb4f1488c0b35d26f, 0xe3f928f5953feb9e +data8 0x8fbf18adc34b66da, 0xb51bf4c7c51f0168 +data8 0xe42eeca17c62886c, 0x8fe117499e356095 +data8 0xb546c9616087ab9c, 0xe464e32943446305 +data8 0x90033624aa685f8d, 0xb571c69bdffd9a70 +data8 0xe49b0ce15747a8a2, 0x9025757495f36b86 +data8 0xb59cecbae56984c3, 0xe4d16a1eee94e9d4 +data8 0x903f3a5dcc091203, 0xb5bd64512bb14bb7 +data8 0xe4fa52107353f67d, 0x9061b2fceb2bdbab +data8 0xb5e8d2a4bf5ba416, 0xe5310a471f4d2dc3 +data8 0x90844ca7211032a7, 0xb6146a9a1bc47819 +data8 0xe567f6f1c2b9c224, 0x90a7079403e6a15d +data8 0xb6402c7749d621c0, 0xe59f18689a9e4c9a +data8 0x90c9e3fbafd63799, 0xb66c1882fb435ea2 +data8 0xe5d66f04b8a68ecf, 0x90ece216c8a16ee4 +data8 0xb6982f048c999a56, 0xe60dfb2005c192e9 +data8 0x9110021e7b516f0a, 0xb6c47044075b4142 +data8 0xe645bd1544c7ea51, 0x912a708a39be9075 +data8 0xb6e5bd6bfd02bafd, 0xe66fb21b505b20a0 +data8 0x914dcc7b31146370, 0xb7124a2736ff8ef2 +data8 0xe6a7d32af4a7c59a, 0x91714af8cfe984d5 +data8 0xb73f026a01e94177, 0xe6e02b129c6a5ae4 +data8 0x918c00a6f3795e97, 0xb760a959f1d0a7a7 +data8 0xe70a9136a7403039, 0x91afbc299ed0295d +data8 0xb78dae7e06868ab0, 0xe74349fb2d92a589 +data8 0x91d39add3e958db0, 0xb7badff8ad9e4e02 +data8 0xe77c3a9c86ed7d42, 0x91ee9920a8974d92 +data8 0xb7dce25b8e17ae9f, 0xe7a713f88151518a +data8 0x9212b5fcac537c19, 0xb80a6226904045e2 +data8 0xe7e067453317ed2b, 0x9236f6b256923fcf +data8 0xb8380f1cafd73c1c, 0xe819f37a81871bb5 +data8 0x92523ee6f90dcfc3, 0xb85a6ea8e321b4d8 +data8 0xe8454236bfaeca14, 0x9276bef031e6eb79 +data8 0xb8886b684ae7d2fa, 0xe87f32f24c3fc90e +data8 0x929236ec237a24ad, 0xb8ab0726fa00cf5d +data8 0xe8aacd8688892ba6, 0x92b6f70b7efe9dc3 +data8 0xb8d954a4d13b7cb1, 0xe8e523fd32f606f7 +data8 0x92d29f61eec7dc2b, 0xb8fc2d4f6cd9f04a +data8 0xe9110b5311407927, 0x92f7a05d5b8ba92f +data8 0xb92acc851476b1ab, 0xe94bc8bf0c108fa3 +data8 0x931379a403be5c16, 0xb94de2d841a184c2 +data8 0xe977fdc439c2ca3c, 0x9338bc44de2e3f34 +data8 0xb97cd4c36c92693c, 0xe9b3236528fc349e +data8 0x9354c71412c69486, 0xb9a0297f172665e3 +data8 0xe9dfa70b745ac1b4, 0x937a4c273907e262 +data8 0xb9cf6f21e36c3924, 0xea1b36268d0eaa38 +data8 0x93968919f6e7975d, 0xb9f3030951267208 +data8 0xea480963fd394197, 0x93bc516fdd4680c9 +data8 0xba229d6a618e7c59, 0xea84034425f27484 +data8 0x93d8c123d9be59b2, 0xba467144459f9855 +data8 0xeab12713138dd1cc, 0x93f546c955e60076 +data8 0xba6a60c3c48f1a4b, 0xeade6db73a5e503b +data8 0x941b70a65879079f, 0xba9a76056b67ee7a +data8 0xeb1b0268343b121b, 0x943829f337410591 +data8 0xbabea699563ada6e, 0xeb489b0b2bdb5f14 +data8 0x9454f995765bc4d2, 0xbae2f350b262cc4b +data8 0xeb765721e85f03d0, 0x947b86b57f5842ed +data8 0xbb1385a23be24e57, 0xebb389645f222f62 +data8 0x94988aeb23470f86, 0xbb3814975e17c680 +data8 0xebe198f090607e0c, 0x94b5a5dc9695f42a +data8 0xbb5cc031009bf467, 0xec0fcc9321024509 +data8 0x94d2d7a9170d8b42, 0xbb81889680024764 +data8 0xec3e247da8b82f61, 0x94f9e87dd78bf019 +data8 0xbbb2c0d8703ae95d, 0xec7c27d21321c9f7 +data8 0x95175019a503d89e, 0xbbd7cd09ba3c5463 +data8 0xecaad5278824e453, 0x9534cefa625fcb3a +data8 0xbbfcf68c4977718f, 0xecd9a76d097d4e77 +data8 0x955265405c491a25, 0xbc223d88cfc88eee +data8 0xed089ed5dcd99446, 0x9570130c1f9bb857 +data8 0xbc47a2284fee4ff8, 0xed37bb95add09a1c +data8 0x9597ca4119525184, 0xbc79ac0916ed7b8a +data8 0xed76c70508f904b6, 0x95b5af6fb5aa4d3c +data8 0xbc9f5670d1a13030, 0xeda63bb05e7f93c6 +data8 0x95d3ac9273aafd7a, 0xbcc51f068cb95c1d +data8 0xedd5d661daed2dc4, 0x95f1c1cafdfd3684 +data8 0xbceb05f4b30a9bc0, 0xee05974eef86b903 +data8 0x960fef3b430b8d5f, 0xbd110b6604c7d306 +data8 0xee357ead791fc670, 0x962e350575b409c5 +data8 0xbd372f8598620f19, 0xee658cb3c134a463 +data8 0x964c934c0dfc1708, 0xbd5d727edb6b3c7e +data8 0xee95c1987f080211, 0x966b0a31c9c6bc7d +data8 0xbd83d47d937bbc6d, 0xeec61d92d8c4314f +data8 0x968999d9ad8d264e, 0xbdaa55addf1ae47d +data8 0xeef6a0da64a014ac, 0x96a8426705198795 +data8 0xbdd0f63c36aa73f0, 0xef274ba72a07c811 +data8 0x96c703fd64445ee5, 0xbdf7b6556d550a15 +data8 0xef581e31a2c91260, 0x96e5dec0a7b4268d +data8 0xbe1e9626b1ffa96b, 0xef8918b2bc43aec6 +data8 0x9704d2d4f59f79f3, 0xbe4595dd903e5371 +data8 0xefba3b63d89d7cbf, 0x9723e05ebe91b9b0 +data8 0xbe6cb5a7f14bc935, 0xefeb867ecffaa607 +data8 0x97430782be323831, 0xbe93f5b41d047cf7 +data8 0xf01cfa3df1b9c9fa, 0x97624865fc0df8bf +data8 0xbebb5630bae4c15f, 0xf04e96dc05b43e2d +data8 0x9781a32dcc640b2a, 0xbee2d74cd30a430c +data8 0xf0805c944d827454, 0x97a117ffd0f48e46 +data8 0xbf0a7937cf38d981, 0xf0b24ba285c495cb +data8 0x97c0a701f9d263c9, 0xbf323c217be2bc8c +data8 0xf0e46442e76f6569, 0x97e0505a8637a036 +data8 0xbf5a203a09342bbb, 0xf116a6b2291d7896 +data8 0x97f57a9fb0b08c6e, 0xbf74cad1c14ebfc4 +data8 0xf1383fa9e9b5b381, 0x9815503365914a9d +data8 0xbf9ce6a497a89f78, 0xf16ac84f90083b9b +data8 0x98354085054fd204, 0xbfc52428bec6e72f +data8 0xf19d7b686dcb03d7, 0x98554bbbf8a77902 +data8 0xbfed838fddab024b, 0xf1d0593311db1757 +data8 0x987571fffb7f94f6, 0xc016050c0420981a +data8 0xf20361ee8f1c711e, 0x9895b3791dd03c23 +data8 0xc03ea8cfabddc330, 0xf23695da7de51d3f +data8 0x98ab43a5fc65d0c8, 0xc059d3cbd65ddbce +data8 0xf258d095e465cc35, 0x98cbb2d196bd713d +data8 0xc082b122a3c78c9d, 0xf28c4d0bfc982b34 +data8 0x98ec3d9ec7b6f21a, 0xc0abb1499ae736c4 +data8 0xf2bff55eb3f0ea71, 0x990ce436db5e8344 +data8 0xc0d4d474c3aedaaf, 0xf2f3c9cf9884636e +data8 0x9922b8218160967a, 0xc0f054ca33eb3437 +data8 0xf31670135ab9cc0f, 0x99438d686f75779d +data8 0xc119b2c67e600ed0, 0xf34a8e9f0b54cdfb +data8 0x99647eea131fa20b, 0xc1433453de2033ff +data8 0xf37ed9fa6b8add3f, 0x997a85045a47c6d0 +data8 0xc15ef3e44e10032d, 0xf3a1cfe884ef6bb6 +data8 0x999ba5f14f8add02, 0xc188b130431d80e6 +data8 0xf3d66689dcc8e8d3, 0x99bce38b5465ecae +data8 0xc1b2929d6067730e, 0xf40b2ab069d5c96a +data8 0x99d31ca0887f30f9, 0xc1ce9268f31cc734 +data8 0xf42e718b90c8bc16, 0x99f48a669c74c09e +data8 0xc1f8b0877c1b0c08, 0xf463822a0a3b4b00 +data8 0x9a16154eb445c873, 0xc222f35a87b415ba +data8 0xf498c1076015faf8, 0x9a2c822ec198d667 +data8 0xc23f3467349e5c88, 0xf4bc5a19a33990b5 +data8 0x9a4e3e080cd91b78, 0xc269b4e40e088c01 +data8 0xf4f1e6a7d6f5425f, 0x9a70177afe52322e +data8 0xc2945aac24daaf6e, 0xf527a232cf6be334 +data8 0x9a86b8fa94eebe10, 0xc2b0de05e43c1d66 +data8 0xf54b8ecdcda90851, 0x9aa8c42866ae2958 +data8 0xc2dbc275e1229d09, 0xf5819949c7ad87b4 +data8 0x9abf86f9e12fc45e, 0xc2f86fca9d80eeff +data8 0xf5a5bac9213b48a9, 0x9ae1c462fc05f49d +data8 0xc323938449a2587e, 0xf5dc1501f324a812 +data8 0x9af8a8dc936b84d0, 0xc3406b40a538ed20 +data8 0xf6006bee86b5589e, 0x9b1b19033be35730 +data8 0xc36bcee8211d15e0, 0xf63716b2fa067fa4 +data8 0x9b3da7daf04c2892, 0xc397593adf2ba366 +data8 0xf66df22fb6132b9c, 0x9b54c2e4c8a9012b +data8 0xc3b475b6206155d5, 0xf6929fb98225deb1 +data8 0x9b77854e6c661200, 0xc3e0410243b97383 +data8 0xf6c9cd13021e3fea, 0x9b8ec2e678d56d2f +data8 0xc3fd890709833d37, 0xf6eeb177472cedae +data8 0x9ba60e6a5ca133b6, 0xc41ae295f7e7fa06 +data8 0xf713abf4cb0b3afb, 0x9bc919ea66a151a4 +data8 0xc44709f7bb8a4dd2, 0xf74b4d5333684ef1 +data8 0x9be0887c09ef82bb, 0xc4648fb0e0bec4c1 +data8 0xf7707f75a72f8e94, 0x9c03c8d5fffc3503 +data8 0xc490f9a94695ba14, 0xf7a874b97927af44 +data8 0x9c1b5ad21a81cbb9, 0xc4aeac0173b7d390 +data8 0xf7cddf140aedf1d8, 0x9c3ed09216e9ca02 +data8 0xc4db5941007aa853, 0xf806291bacb7f7a9 +data8 0x9c568656c0423def, 0xc4f938aec206291a +data8 0xf82bcc43b92eafef, 0x9c7a320af242ce60 +data8 0xc52629e899dfd622, 0xf8646bf0defb759e +data8 0x9c920bf7a8c01dc2, 0xc54436e44043b965 +data8 0xf88a487dfc3ff5f7, 0x9ca9f475d98b159c +data8 0xc562563abf9ea07f, 0xf8b03c2b46cdc17f +data8 0x9ccdeca60e80b5f8, 0xc58fa7d1dc42921c +data8 0xf8e95541c152ae7a, 0x9ce5f9d4653d4902 +data8 0xc5adf561b91e110a, 0xf90f832c2700c160 +data8 0x9cfe15cb38bfdd8e, 0xc5cc5591bdbd82fa +data8 0xf935c88e0c7f419b, 0x9d225b983f6c1f96 +data8 0xc5fa08f1ff20593c, 0xf96f5cd84fd86873 +data8 0x9d3a9cca32261ed7, 0xc618980a79ce6862 +data8 0xf995dd53ebdd9d6d, 0x9d52ecfccebe1768 +data8 0xc6373a09e34b50fa, 0xf9bc75a034436a41 +data8 0x9d77818d95b82f86, 0xc66550a6e0baaf35 +data8 0xf9f686f26d5518de, 0x9d8ff7893fa4706c +data8 0xc6842241926342c9, 0xfa1d5b39b910a8c5 +data8 0x9da87cbef36f2a5e, 0xc6a3070b7c93bb9e +data8 0xfa4447acc4ecbfd2, 0x9dcd6140b4a35aeb +data8 0xc6d18260bb84081b, 0xfa7ed7e51e6fdfb4 +data8 0x9de60cd06dc6e2d4, 0xc6f0977c9416828b +data8 0xfaa601394d49a1a0, 0x9dfec7d4cc43b76f +data8 0xc70fc0117c641630, 0xfacd431644ce0e40 +data8 0x9e17925ec9fccc4a, 0xc72efc34d7e615be +data8 0xfaf49d96f7a75909, 0x9e3cdf6db57dc075 +data8 0xc75dfb441594141e, 0xfb2fd3c65e562fd5 +data8 0x9e55d110b63637a8, 0xc77d68aa019bda4c +data8 0xfb576c5762024805, 0x9e6ed27594550d2e +data8 0xc79ce9ea478dbc4f, 0xfb7f1debc22c4040 +data8 0x9e87e3adc385d393, 0xc7bc7f1ae453219d +data8 0xfba6e89f32d0190a, 0x9ead9b54b37a1055 +data8 0xc7ec0476e15e141a, 0xfbe2c803a0894893 +data8 0x9ec6d46a3d7de215, 0xc80bcbe16f1d540f +data8 0xfc0ad1ff0ed9ecf0, 0x9ee01d9108be3154 +data8 0xc82ba78a5d349735, 0xfc32f57bdfbcbe7f +data8 0x9ef976db07288d04, 0xc84b978847a06b87 +data8 0xfc5b32968f99b21c, 0x9f12e05a4759ec25 +data8 0xc86b9bf1ee817bc6, 0xfc83896bc861ab08 +data8 0x9f2c5a20f4da6668, 0xc88bb4de3667cdf4 +data8 0xfcabfa1861ed4815, 0x9f52af78ed1733ca +data8 0xc8bc00e7fe9e23a3, 0xfce8d3cea7d3163e +data8 0x9f6c52426a39d003, 0xc8dc4d7ff2d25232 +data8 0xfd118595143ee273, 0x9f860593d42fd7f3 +data8 0xc8fcaeebcb40eb47, 0xfd3a519943d4865a +data8 0x9f9fc97fdb96bd51, 0xc91d25431426a663 +data8 0xfd6337f8e1ae5a4b, 0x9fb99e194f4a7037 +data8 0xc93db09d7fdb2949, 0xfd8c38d1c8e927eb +data8 0x9fd383731ca51db9, 0xc95e5112e721582a +data8 0xfdb5544205095a53, 0x9fed79a04fbf9423 +data8 0xc97f06bb49787677, 0xfdde8a67d2613531 +data8 0xa00780b413b24ee8, 0xc99fd1aecd6e1b06 +data8 0xfe07db619e781611, 0xa02eab2c4474b0cd +data8 0xc9d12a3e27bb1625, 0xfe460768d80bf758 +data8 0xa048dcd51ccfd142, 0xc9f22ad82ba3d5f0 +data8 0xfe6f9bfb06cd32f6, 0xa0631fa894b11b8d +data8 0xca134113105e67b2, 0xfe994bcd3d14fcc2 +data8 0xa07d73ba65e680af, 0xca346d07b045a876 +data8 0xfec316fecaf3f2ab, 0xa097d91e6aaf71b0 +data8 0xca55aecf0e94bb88, 0xfeecfdaf33fadb80 +data8 0xa0b24fe89e02602f, 0xca77068257be9bab +data8 0xff16fffe2fa8fad6, 0xa0ccd82d1bd2f68b +data8 0xca98743ae1c693a8, 0xff411e0ba9db886d +data8 0xa0e77200215909e6, 0xcab9f8122c99a101 +data8 0xff6b57f7c33e4e9a, 0xa1021d760d584855 +data8 0xcadb9221e268c3b5, 0xff95ade2d1bd7358 +data8 0xa11cdaa36068a57d, 0xcafd4283d8043dfd +data8 0xffc01fed60f86fb5, 0xa137a99cbd3f880b +data8 0xcb1f09520d37c6fb, 0xffeaae3832b63956 +ASM_SIZE_DIRECTIVE(T_table) + + + + + + +.align 32 +.global cbrtf# + +.section .text +.proc cbrtf# +.align 32 +cbrtf: + + +{ .mfi + getf.sig r28=f8 + // will continue only for normal/denormal numbers +(p0) fclass.nm.unc p12,p7 = f8, 0x1b + // r2 = pointer to C_1,C_2 followed by T_table + addl r2 = @ltoff(poly_coeffs), gp +} +{.mfi + // r29=bias-((2^8-1)/3) -63=0xffff-0x55-0x3f=0xff6b + mov r29=0xff6b + // normalize a + fma.s1 f14=f8,f1,f0 + nop.i 0;; +} +{.mib + nop.m 0 + (p7) cmp.eq p12,p0=r28,r0 + nop.b 0;; +} +{.mfb + // load start address for C_1,C_2 followed by T_table + ld8 r2=[r2] + (p12) fma.s.s0 f8=f8,f1,f0 + (p12) br.ret.spnt b0;; +} +{.mmf + // load C_1 + ldfe f7=[r2],16 + nop.m 0 + // y=frcpa(a) + frcpa.s0 f8,p6=f1,f8;; +} +{.mmi + // load C_2 + ldfe f9=[r2],16 + // r28=bias-(2^8-1) + mov r28=0xff00 + nop.i 0;; +} +{.mmi + // get normalized significand + getf.sig r23=f14 + // get exponent + getf.exp r24=f14 + mov r25=0x20000;; +} +{.mii + // get r26=sign + and r26=r24,r25 + // eliminate leading 1 from r23=1st table index + shl r23=r23,1 + // eliminate sign from exponent (r25) + andcm r25=r24,r25;; +} +{.mfi + // subtract bias from r25=exponent + sub r25=r25,r28 + // r=1-a*y + (p6) fnma.s1 f6=f8,f14,f1 + // r23=1st table index (y_index8 bits) + shr.u r23=r23,56;; +} +{.mii + // 1: exponent*=5; // (2^{16}-1)/3=0x5555 + shladd r24=r25,2,r25 + // r23=3*y_index + shladd r23=r23,1,r23;; + // r30=(5*expon)*16+5*expon=(0x55)*expon + shladd r30=r24,4,r24;; +} +{.mmi + // adjust T_table pointer by 1st index + shladd r2=r23,3,r2;; + // f10=T[0][y] + (p6) ldf8 f10=[r2],8 + // r24=(0x5500)*expon + shl r24=r30,8;; +} +{.mfi + // f11=T[1][y] + (p6) ldf8 f11=[r2],8 + // P_1=C_1+C_2*r + (p6) fma.s1 f7=f9,f6,f7 + // r24=(0x5555)*expon + add r24=r24,r30;; +} +{.mmi + // r24=(0x5556)*expon // 0x5556=(2^{16}+2)/3 + add r24=r24,r25;; + // f8=T[2][y] + (p6) ldf8 f8=[r2] + // r24=floor(expon/3) + shr r24=r24,16;; +} +{.mmi + nop.m 0 + // r28=3*exponent + shladd r28=r24,1,r24 + // bias exponent + add r24=r29,r24;; +} +{.mmi + // get remainder of exponent/3 + sub r25=r25,r28 + // add sign to exponent + or r24=r24,r26 + nop.i 0;; +} +{.mfi + nop.m 0 + // P_2=-r*P_1 + (p6) fnma.s1 f6=f7,f6,f0 + // remainder=0 ? + (p6) cmp.eq.unc p7,p8=r0,r25;; +} +{.mfi + // f14=sign*2^{exponent/3} + (p6) setf.exp f14=r24 + nop.f 0 + // remainder = 1 ? + (p8) cmp.eq.unc p8,p12=1,r25;; +} +.pred.rel "mutex",p7,p8 +{.mfi + nop.m 0 + // remainder=0 -> use T=f10 + (p7) fma.s1 f8=f10,f6,f10 + nop.i 0 +} +{.mfi + nop.m 0 + // remainder =1 -> use f11 + (p8) fma.s1 f8=f11,f6,f11 + nop.i 0;; +} +{.mfi + nop.m 0 + // result=T+T*P_2 + (p12) fma.s.s0 f8=f8,f6,f8 + nop.i 0;; +} +{.mfb + nop.m 0 + // T*=sgn*2^{expon/3} + (p6) fma.s.s0 f8=f8,f14,f0 + br.ret.sptk b0;; +} +.endp cbrtf +ASM_SIZE_DIRECTIVE(cbrtf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_cbrtl.S glibc-2.2.3/sysdeps/ia64/fpu/s_cbrtl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_cbrtl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_cbrtl.S Mon Feb 19 00:53:02 2001 @@ -0,0 +1,889 @@ +.file "cbrtl.asm" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang +// of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 4/28/00: Initial version +// +// API +//============================================================== +// long double cbrtl(long double) +// +// Overview of operation +//============================================================== +// Background +// +// Implementation +// +// cbrt(a) = cbrt(a y) / cbrt(y) +// = cbrt(1 - (1 - a y)) * 1/cbrt(y) +// +// where y = frcpa(a). +// +// * cbrt(1 - (1 - a y)) is approximated by a degree-6 polynomial +// +// 1 - c_1 r - c_2 * r^2 - c_3 * r^3 - c_4 * r^4 - c_5 * r^5 - c_6 * r^6 +// +// in r = 1 - a y. +// +// * The values 1/cbrt(y) are stored as two tables of constants T_hi +// (double-extended precision) and D (single precision) as follows: +// +// T_hi (1 + D) = 1/cbrt(y) to about 80 bits of accuracy +// +// The tables are only stored for three exponent values and are +// then multiplied by e/3 where e is the exponent of the input number. +// This computation is carried out in parallel with the polynomial +// evaluation: +// +// T = 2^(e/3) * T_hi + + + + + +//=============== +// input = x +// C = frcpa(x) +// r = C * x - 1 +// +// Special values +//============================================================== + + + +// Registers used +//============================================================== +// f6-f15 +// r2-r3, r23-r30 +// p6,p7,p12 + +#include "libm_support.h" + +// Data tables +//============================================================== + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +poly_coeffs: +ASM_TYPE_DIRECTIVE(poly_coeffs,@object) +data8 0xaaaaaaaaaaaaaab1, 0x00003ffd // C_1 +data8 0xe38e38e38e38e3e0, 0x00003ffb // C_2 +data8 0x3faf9add3c0be9a6, 0x3fa511e8d2b1f749 // C_3, C_4 +data8 0x3f9ee71b2c6ebe99, 0x3f9809180fd0340c // C_5, C_6 +ASM_SIZE_DIRECTIVE(poly_coeffs) + +T_table: +ASM_TYPE_DIRECTIVE(T_table,@object) + +data8 0x80155c748c374836, 0x8040404b0879f7f9 +data8 0x806b5dce4b405c10, 0x8096b586974669b1 +data8 0x80bcd273d952a028, 0x80e898c52813f2f3 +data8 0x81149add67c2d208, 0x813b4e2c856b6e9a +data8 0x8167c1dde03de7aa, 0x818ed973b811135e +data8 0x81bbc0c33e13ec98, 0x81e33e69fbe7504a +data8 0x820aec524e3c23e9, 0x823880f78e70b805 +data8 0x826097a62a8e5200, 0x8288dfe00e9b5eaf +data8 0x82b15a10c5371624, 0x82da06a527b18937 +data8 0x8302e60b635ab394, 0x832bf8b2feec2f0e +data8 0x83553f0ce00e276b, 0x837eb98b50f8322a +data8 0x83a270f44c84f699, 0x83cc4d7cfcfac5ca +data8 0x83f65f78a8872b4c, 0x8420a75f2f7b53c8 +data8 0x844510461ff14209, 0x846fbd91b930bed2 +data8 0x84947e18234f3294, 0x84bf92755825045a +data8 0x84e4ac0ee112ba51, 0x8509ef44b86f20be +data8 0x85359d5d91768427, 0x855b3bd5b7384357 +data8 0x858104f0c415f79a, 0x85a6f90390d29864 +data8 0x85d3772fcd56a1dd, 0x85f9c982fcc002f3 +data8 0x862047e0e7ea554b, 0x8646f2a26f7f5852 +data8 0x866dca21754096b5, 0x8694ceb8dfd17a37 +data8 0x86bc00c49e9307e8, 0x86dccd74fce79610 +data8 0x870453c845acf90f, 0x872c089a1e90342c +data8 0x8753ec4a92d16c5e, 0x877bff3aca19f6b4 +data8 0x879d88b6fe1c324c, 0x87c5f346dbf98c3a +data8 0x87e7c653efacef2c, 0x881089d4e73ffefc +data8 0x88397e6a366f2a8a, 0x885bc559e5e1c081 +data8 0x887e2ee392bb7a93, 0x88a7a8587e404257 +data8 0x88ca5eda67594784, 0x88f4356166bd590e +data8 0x89173a0acf5ce026, 0x893a62a098b6a57b +data8 0x895daf637236ae2c, 0x89883b9d1c2fa9c5 +data8 0x89abd8dd374a5d7b, 0x89cf9b1dcd197fa0 +data8 0x89f382a258ea79de, 0x8a178faf06648f29 +data8 0x8a3bc288b3e1d18a, 0x8a601b74f4d1f835 +data8 0x8a849aba14274764, 0x8aa9409f16cdbc9b +data8 0x8ace0d6bbe2cb316, 0x8af301688ab33558 +data8 0x8b181cdebe6f3206, 0x8b3d60185fafcb7c +data8 0x8b62cb603bb2fad0, 0x8b80d7d6bc4104de +data8 0x8ba68bf73ac74f39, 0x8bcc68fb9f9f7335 +data8 0x8bf26f31c534fca2, 0x8c10f86e13a1a1f9 +data8 0x8c3749916cc6abb5, 0x8c5dc4c4f7706032 +data8 0x8c7cac3a8c42e3e0, 0x8ca373f1b7bf2716 +data8 0x8cc29907fb951294, 0x8ce9ae4e9492aac8 +data8 0x8d0911dddbfdad0e, 0x8d3075c4f20f04ee +data8 0x8d5018a9d4de77d5, 0x8d77cc47dd143515 +data8 0x8d97af6352739cb7, 0x8db7af523167800f +data8 0x8ddfd80bc68c32ff, 0x8e00197e1e7c88fe +data8 0x8e207859f77e20e7, 0x8e40f4ce60c9f8e2 +data8 0x8e69ba46cf2fde4d, 0x8e8a7a00bd7ae63e +data8 0x8eab57ef1cf2f529, 0x8ecc5442cffb1dad +data8 0x8eed6f2d2a4acbfe, 0x8f0ea8dff24441ff +data8 0x8f385c95d696b817, 0x8f59dc43edd930f3 +data8 0x8f7b7b5f5ffad1c4, 0x8f9d3a1bea165f38 +data8 0x8fbf18adc34b66da, 0x8fe117499e356095 +data8 0x90033624aa685f8d, 0x9025757495f36b86 +data8 0x903f3a5dcc091203, 0x9061b2fceb2bdbab +data8 0x90844ca7211032a7, 0x90a7079403e6a15d +data8 0x90c9e3fbafd63799, 0x90ece216c8a16ee4 +data8 0x9110021e7b516f0a, 0x912a708a39be9075 +data8 0x914dcc7b31146370, 0x91714af8cfe984d5 +data8 0x918c00a6f3795e97, 0x91afbc299ed0295d +data8 0x91d39add3e958db0, 0x91ee9920a8974d92 +data8 0x9212b5fcac537c19, 0x9236f6b256923fcf +data8 0x92523ee6f90dcfc3, 0x9276bef031e6eb79 +data8 0x929236ec237a24ad, 0x92b6f70b7efe9dc3 +data8 0x92d29f61eec7dc2b, 0x92f7a05d5b8ba92f +data8 0x931379a403be5c16, 0x9338bc44de2e3f34 +data8 0x9354c71412c69486, 0x937a4c273907e262 +data8 0x93968919f6e7975d, 0x93bc516fdd4680c9 +data8 0x93d8c123d9be59b2, 0x93f546c955e60076 +data8 0x941b70a65879079f, 0x943829f337410591 +data8 0x9454f995765bc4d2, 0x947b86b57f5842ed +data8 0x94988aeb23470f86, 0x94b5a5dc9695f42a +data8 0x94d2d7a9170d8b42, 0x94f9e87dd78bf019 +data8 0x95175019a503d89e, 0x9534cefa625fcb3a +data8 0x955265405c491a25, 0x9570130c1f9bb857 +data8 0x9597ca4119525184, 0x95b5af6fb5aa4d3c +data8 0x95d3ac9273aafd7a, 0x95f1c1cafdfd3684 +data8 0x960fef3b430b8d5f, 0x962e350575b409c5 +data8 0x964c934c0dfc1708, 0x966b0a31c9c6bc7d +data8 0x968999d9ad8d264e, 0x96a8426705198795 +data8 0x96c703fd64445ee5, 0x96e5dec0a7b4268d +data8 0x9704d2d4f59f79f3, 0x9723e05ebe91b9b0 +data8 0x97430782be323831, 0x97624865fc0df8bf +data8 0x9781a32dcc640b2a, 0x97a117ffd0f48e46 +data8 0x97c0a701f9d263c9, 0x97e0505a8637a036 +data8 0x97f57a9fb0b08c6e, 0x9815503365914a9d +data8 0x98354085054fd204, 0x98554bbbf8a77902 +data8 0x987571fffb7f94f6, 0x9895b3791dd03c23 +data8 0x98ab43a5fc65d0c8, 0x98cbb2d196bd713d +data8 0x98ec3d9ec7b6f21a, 0x990ce436db5e8344 +data8 0x9922b8218160967a, 0x99438d686f75779d +data8 0x99647eea131fa20b, 0x997a85045a47c6d0 +data8 0x999ba5f14f8add02, 0x99bce38b5465ecae +data8 0x99d31ca0887f30f9, 0x99f48a669c74c09e +data8 0x9a16154eb445c873, 0x9a2c822ec198d667 +data8 0x9a4e3e080cd91b78, 0x9a70177afe52322e +data8 0x9a86b8fa94eebe10, 0x9aa8c42866ae2958 +data8 0x9abf86f9e12fc45e, 0x9ae1c462fc05f49d +data8 0x9af8a8dc936b84d0, 0x9b1b19033be35730 +data8 0x9b3da7daf04c2892, 0x9b54c2e4c8a9012b +data8 0x9b77854e6c661200, 0x9b8ec2e678d56d2f +data8 0x9ba60e6a5ca133b6, 0x9bc919ea66a151a4 +data8 0x9be0887c09ef82bb, 0x9c03c8d5fffc3503 +data8 0x9c1b5ad21a81cbb9, 0x9c3ed09216e9ca02 +data8 0x9c568656c0423def, 0x9c7a320af242ce60 +data8 0x9c920bf7a8c01dc2, 0x9ca9f475d98b159c +data8 0x9ccdeca60e80b5f8, 0x9ce5f9d4653d4902 +data8 0x9cfe15cb38bfdd8e, 0x9d225b983f6c1f96 +data8 0x9d3a9cca32261ed7, 0x9d52ecfccebe1768 +data8 0x9d77818d95b82f86, 0x9d8ff7893fa4706c +data8 0x9da87cbef36f2a5e, 0x9dcd6140b4a35aeb +data8 0x9de60cd06dc6e2d4, 0x9dfec7d4cc43b76f +data8 0x9e17925ec9fccc4a, 0x9e3cdf6db57dc075 +data8 0x9e55d110b63637a8, 0x9e6ed27594550d2e +data8 0x9e87e3adc385d393, 0x9ead9b54b37a1055 +data8 0x9ec6d46a3d7de215, 0x9ee01d9108be3154 +data8 0x9ef976db07288d04, 0x9f12e05a4759ec25 +data8 0x9f2c5a20f4da6668, 0x9f52af78ed1733ca +data8 0x9f6c52426a39d003, 0x9f860593d42fd7f3 +data8 0x9f9fc97fdb96bd51, 0x9fb99e194f4a7037 +data8 0x9fd383731ca51db9, 0x9fed79a04fbf9423 +data8 0xa00780b413b24ee8, 0xa02eab2c4474b0cd +data8 0xa048dcd51ccfd142, 0xa0631fa894b11b8d +data8 0xa07d73ba65e680af, 0xa097d91e6aaf71b0 +data8 0xa0b24fe89e02602f, 0xa0ccd82d1bd2f68b +data8 0xa0e77200215909e6, 0xa1021d760d584855 +data8 0xa11cdaa36068a57d, 0xa137a99cbd3f880b +data8 0xa160019ed37fb4ae, 0xa1960b5966da4608 +data8 0xa1cc5dbe6dc2aab4, 0xa202f97995b69c0d +data8 0xa232fe6eb0c0577d, 0xa26a2582012f6e17 +data8 0xa2a197e5d10465cb, 0xa2d25a532efefbc8 +data8 0xa30a5bd6e49e4ab8, 0xa33b9c9b59879e24 +data8 0xa3742fca6a3c1f21, 0xa3a5f1273887bf22 +data8 0xa3d7ef508ff11574, 0xa4115ce30548bc15 +data8 0xa443df0e53df577a, 0xa4769fa5913c0ec3 +data8 0xa4a99f303bc7def5, 0xa4dcde37779adf4b +data8 0xa5105d46152c938a, 0xa5441ce89825cb8d +data8 0xa5781dad3e54d899, 0xa5ac602406c4e68c +data8 0xa5d9601d95c2c0bc, 0xa60e1e1a2de14745 +data8 0xa6431f6e3fbd9658, 0xa67864b0d432fda4 +data8 0xa6a6444aa0243c0b, 0xa6dc094d10f25792 +data8 0xa70a574cc02bba69, 0xa7409e2af9549084 +data8 0xa76f5c64ca2cf13b, 0xa79e4f0babab5dc0 +data8 0xa7d5579ae5164b85, 0xa804bd3c6fe61cc8 +data8 0xa8345895e5250a5a, 0xa8642a122b44ef0b +data8 0xa89c38ca18f6108b, 0xa8cc81063b6e87ca +data8 0xa8fd00bfa409285e, 0xa92db8664d5516da +data8 0xa95ea86b75cc2c20, 0xa98fd141a4992deb +data8 0xa9c1335cae7446ba, 0xa9ea8686f556f645 +data8 0xaa1c52d17906bb19, 0xaa4e59b046dab887 +data8 0xaa809b9c60d1890b, 0xaab319102f3f9b33 +data8 0xaadd5a18c1e21274, 0xab1045f2ac31bdf5 +data8 0xab3ae3ab2df7231e, 0xab6e3f945d1e96fc +data8 0xaba1d953a08fa94e, 0xabcd090db7ef4c3f +data8 0xabf864602d7c323d, 0xac2ca5886ccf9b57 +data8 0xac5861d4aa441f0f, 0xac8d183fe3a2fbed +data8 0xacb93703ff51571e, 0xace5830ad0c3f14b +data8 0xad11fca5d78b3ff2, 0xad4797fddf91a798 +data8 0xad747701e559ebcb, 0xada184a47e9c7613 +data8 0xadcec13ab0dda8ff, 0xadfc2d1a5fd21ba8 +data8 0xae29c89a5053c33a, 0xae5794122b638df9 +data8 0xae858fda8137ae0a, 0xaeb3bc4ccc56d3d1 +data8 0xaee219c374c09920, 0xaf10a899d3235fe7 +data8 0xaf3f692c341fe8b4, 0xaf6e5bd7db9ae6c2 +data8 0xaf9d80fb081cd91b, 0xafc35ce063eb3787 +data8 0xaff2ddcb5f28f03d, 0xb022923b148e05c5 +data8 0xb0527a919adbf58b, 0xb078f3ab1d701c65 +data8 0xb0a93a6870649f31, 0xb0d9b624d62ec856 +data8 0xb100a5f53fb3c8e1, 0xb131821882f5540a +data8 0xb158bf8e4cb04055, 0xb189fd69d56b238f +data8 0xb1b189958e8108e4, 0xb1e32a8165b09832 +data8 0xb20b0678fc271eec, 0xb23d0bd3f7592b6e +data8 0xb26538b2db8420dc, 0xb28d89e339ceca14 +data8 0xb2c022ca12e55a16, 0xb2e8c6852c6b03f1 +data8 0xb3118f4eda9fe40f, 0xb33a7d6268109ebe +data8 0xb36ddbc5ea70ec55, 0xb3971e9b39264023 +data8 0xb3c0877ecc18e24a, 0xb3ea16ae3a6c905f +data8 0xb413cc67aa0e4d2d, 0xb43da8e9d163e1af +data8 0xb47233773b84d425, 0xb49c6825430fe730 +data8 0xb4c6c46bcdb27dcf, 0xb4f1488c0b35d26f +data8 0xb51bf4c7c51f0168, 0xb546c9616087ab9c +data8 0xb571c69bdffd9a70, 0xb59cecbae56984c3 +data8 0xb5bd64512bb14bb7, 0xb5e8d2a4bf5ba416 +data8 0xb6146a9a1bc47819, 0xb6402c7749d621c0 +data8 0xb66c1882fb435ea2, 0xb6982f048c999a56 +data8 0xb6c47044075b4142, 0xb6e5bd6bfd02bafd +data8 0xb7124a2736ff8ef2, 0xb73f026a01e94177 +data8 0xb760a959f1d0a7a7, 0xb78dae7e06868ab0 +data8 0xb7badff8ad9e4e02, 0xb7dce25b8e17ae9f +data8 0xb80a6226904045e2, 0xb8380f1cafd73c1c +data8 0xb85a6ea8e321b4d8, 0xb8886b684ae7d2fa +data8 0xb8ab0726fa00cf5d, 0xb8d954a4d13b7cb1 +data8 0xb8fc2d4f6cd9f04a, 0xb92acc851476b1ab +data8 0xb94de2d841a184c2, 0xb97cd4c36c92693c +data8 0xb9a0297f172665e3, 0xb9cf6f21e36c3924 +data8 0xb9f3030951267208, 0xba229d6a618e7c59 +data8 0xba467144459f9855, 0xba6a60c3c48f1a4b +data8 0xba9a76056b67ee7a, 0xbabea699563ada6e +data8 0xbae2f350b262cc4b, 0xbb1385a23be24e57 +data8 0xbb3814975e17c680, 0xbb5cc031009bf467 +data8 0xbb81889680024764, 0xbbb2c0d8703ae95d +data8 0xbbd7cd09ba3c5463, 0xbbfcf68c4977718f +data8 0xbc223d88cfc88eee, 0xbc47a2284fee4ff8 +data8 0xbc79ac0916ed7b8a, 0xbc9f5670d1a13030 +data8 0xbcc51f068cb95c1d, 0xbceb05f4b30a9bc0 +data8 0xbd110b6604c7d306, 0xbd372f8598620f19 +data8 0xbd5d727edb6b3c7e, 0xbd83d47d937bbc6d +data8 0xbdaa55addf1ae47d, 0xbdd0f63c36aa73f0 +data8 0xbdf7b6556d550a15, 0xbe1e9626b1ffa96b +data8 0xbe4595dd903e5371, 0xbe6cb5a7f14bc935 +data8 0xbe93f5b41d047cf7, 0xbebb5630bae4c15f +data8 0xbee2d74cd30a430c, 0xbf0a7937cf38d981 +data8 0xbf323c217be2bc8c, 0xbf5a203a09342bbb +data8 0xbf74cad1c14ebfc4, 0xbf9ce6a497a89f78 +data8 0xbfc52428bec6e72f, 0xbfed838fddab024b +data8 0xc016050c0420981a, 0xc03ea8cfabddc330 +data8 0xc059d3cbd65ddbce, 0xc082b122a3c78c9d +data8 0xc0abb1499ae736c4, 0xc0d4d474c3aedaaf +data8 0xc0f054ca33eb3437, 0xc119b2c67e600ed0 +data8 0xc1433453de2033ff, 0xc15ef3e44e10032d +data8 0xc188b130431d80e6, 0xc1b2929d6067730e +data8 0xc1ce9268f31cc734, 0xc1f8b0877c1b0c08 +data8 0xc222f35a87b415ba, 0xc23f3467349e5c88 +data8 0xc269b4e40e088c01, 0xc2945aac24daaf6e +data8 0xc2b0de05e43c1d66, 0xc2dbc275e1229d09 +data8 0xc2f86fca9d80eeff, 0xc323938449a2587e +data8 0xc3406b40a538ed20, 0xc36bcee8211d15e0 +data8 0xc397593adf2ba366, 0xc3b475b6206155d5 +data8 0xc3e0410243b97383, 0xc3fd890709833d37 +data8 0xc41ae295f7e7fa06, 0xc44709f7bb8a4dd2 +data8 0xc4648fb0e0bec4c1, 0xc490f9a94695ba14 +data8 0xc4aeac0173b7d390, 0xc4db5941007aa853 +data8 0xc4f938aec206291a, 0xc52629e899dfd622 +data8 0xc54436e44043b965, 0xc562563abf9ea07f +data8 0xc58fa7d1dc42921c, 0xc5adf561b91e110a +data8 0xc5cc5591bdbd82fa, 0xc5fa08f1ff20593c +data8 0xc618980a79ce6862, 0xc6373a09e34b50fa +data8 0xc66550a6e0baaf35, 0xc6842241926342c9 +data8 0xc6a3070b7c93bb9e, 0xc6d18260bb84081b +data8 0xc6f0977c9416828b, 0xc70fc0117c641630 +data8 0xc72efc34d7e615be, 0xc75dfb441594141e +data8 0xc77d68aa019bda4c, 0xc79ce9ea478dbc4f +data8 0xc7bc7f1ae453219d, 0xc7ec0476e15e141a +data8 0xc80bcbe16f1d540f, 0xc82ba78a5d349735 +data8 0xc84b978847a06b87, 0xc86b9bf1ee817bc6 +data8 0xc88bb4de3667cdf4, 0xc8bc00e7fe9e23a3 +data8 0xc8dc4d7ff2d25232, 0xc8fcaeebcb40eb47 +data8 0xc91d25431426a663, 0xc93db09d7fdb2949 +data8 0xc95e5112e721582a, 0xc97f06bb49787677 +data8 0xc99fd1aecd6e1b06, 0xc9d12a3e27bb1625 +data8 0xc9f22ad82ba3d5f0, 0xca134113105e67b2 +data8 0xca346d07b045a876, 0xca55aecf0e94bb88 +data8 0xca77068257be9bab, 0xca98743ae1c693a8 +data8 0xcab9f8122c99a101, 0xcadb9221e268c3b5 +data8 0xcafd4283d8043dfd, 0xcb1f09520d37c6fb +data8 0xcb51ddcb9e93095e, 0xcb95f333968ad59b +data8 0xcbda64292d3ffd97, 0xcc1f3184af961596 +data8 0xcc5bb1ac954d33e2, 0xcca12e9831fc6402 +data8 0xcce70a67b64f24ad, 0xcd24794726477ea5 +data8 0xcd6b096a0b70ee87, 0xcda9177738b15a90 +data8 0xcdf05f2247dffab9, 0xce2f0f347f96f906 +data8 0xce6e0be0cd551a61, 0xceb666b2c347d1de +data8 0xcef609b0cb874f00, 0xcf35fb5447e5c765 +data8 0xcf763c47ee869f00, 0xcfb6cd3888d71785 +data8 0xcff7aed4fbfbb447, 0xd038e1ce5167e3c6 +data8 0xd07a66d7bfa0ebba, 0xd0bc3ea6b32d1b21 +data8 0xd0f4f0e8f36c1bf8, 0xd1376458e34b037e +data8 0xd17a2ca133f78572, 0xd1bd4a80301c5715 +data8 0xd1f71682b2fa4575, 0xd23ad555f773f059 +data8 0xd2752c7039a5bf73, 0xd2b98ee008c06b59 +data8 0xd2f4735ffd700280, 0xd32f99ed6d9ac0e1 +data8 0xd374f0666c75d51c, 0xd3b0a7d13618e4a1 +data8 0xd3eca2ea53bcec0c, 0xd428e23874f13a17 +data8 0xd46f82fe293bc6d3, 0xd4ac57e9b7186420 +data8 0xd4e972becb04e8b8, 0xd526d40a7a9b43a3 +data8 0xd5647c5b73917370, 0xd5a26c4201bd6d13 +data8 0xd5e0a45015350a7e, 0xd614b539c6194104 +data8 0xd6537310e224283f, 0xd6927ab62244c917 +data8 0xd6d1ccc1fc4ef4b7, 0xd71169cea98fdded +data8 0xd746a66a5bc9f6d9, 0xd786ce8f0fae5317 +data8 0xd7bc7ff214c4e75a, 0xd7fd35467a517ed1 +data8 0xd83e38838648d815, 0xd874a1db598b8951 +data8 0xd8ab42205b80edaf, 0xd8ed1849d202f965 +data8 0xd92432bd5a173685, 0xd9669ca45b03c23e +data8 0xd99e3327cf89574e, 0xd9d602b19b100466 +data8 0xda0e0ba86c096841, 0xda5195fcdb1c3dce +data8 0xda8a1eb87a491f6c, 0xdac2e230b91c3f84 +data8 0xdafbe0d0b66aea30, 0xdb351b04a8fafced +data8 0xdb6e9139e33cdd8e, 0xdba843ded7151ea1 +data8 0xdbe2336319b61fc8, 0xdc1c60376789fa68 +data8 0xdc56cacda82d0cd5, 0xdc917398f2797814 +data8 0xdccc5b0d90a3e628, 0xdd0781a10469f0f2 +data8 0xdd42e7ca0b52838f, 0xdd729ad01c69114d +data8 0xddae749c001fbf5e, 0xddea8f50a51c69b1 +data8 0xde26eb69a0f0f111, 0xde576480262399bc +data8 0xde943789645933c8, 0xded14d58139a28af +data8 0xdf025c00bbf2b5c7, 0xdf3feb44d723a713 +data8 0xdf715bc16c159be0, 0xdfaf66240e29cda8 +data8 0xdfe139cbf6e19bdc, 0xe01fc0fe94d9fc52 +data8 0xe051f92ffcc0bd60, 0xe090feec9c9a06ac +data8 0xe0c39d0c9ff862d6, 0xe0f668eeb99f188d +data8 0xe1362890eb663139, 0xe1695c7212aecbaa +data8 0xe19cbf0391bbbbe9, 0xe1d050901c531e85 +data8 0xe2110903b4f4047a, 0xe2450559b4d80b6d +data8 0xe27931a231554ef3, 0xe2ad8e2ac3c5b04b +data8 0xe2e21b41b9694cce, 0xe316d93615862714 +data8 0xe3590bd86a0d30f9, 0xe38e38e38e38e38e +data8 0xe3c397d1e6db7839, 0xe3f928f5953feb9e +data8 0xe42eeca17c62886c, 0xe464e32943446305 +data8 0xe49b0ce15747a8a2, 0xe4d16a1eee94e9d4 +data8 0xe4fa52107353f67d, 0xe5310a471f4d2dc3 +data8 0xe567f6f1c2b9c224, 0xe59f18689a9e4c9a +data8 0xe5d66f04b8a68ecf, 0xe60dfb2005c192e9 +data8 0xe645bd1544c7ea51, 0xe66fb21b505b20a0 +data8 0xe6a7d32af4a7c59a, 0xe6e02b129c6a5ae4 +data8 0xe70a9136a7403039, 0xe74349fb2d92a589 +data8 0xe77c3a9c86ed7d42, 0xe7a713f88151518a +data8 0xe7e067453317ed2b, 0xe819f37a81871bb5 +data8 0xe8454236bfaeca14, 0xe87f32f24c3fc90e +data8 0xe8aacd8688892ba6, 0xe8e523fd32f606f7 +data8 0xe9110b5311407927, 0xe94bc8bf0c108fa3 +data8 0xe977fdc439c2ca3c, 0xe9b3236528fc349e +data8 0xe9dfa70b745ac1b4, 0xea1b36268d0eaa38 +data8 0xea480963fd394197, 0xea84034425f27484 +data8 0xeab12713138dd1cc, 0xeade6db73a5e503b +data8 0xeb1b0268343b121b, 0xeb489b0b2bdb5f14 +data8 0xeb765721e85f03d0, 0xebb389645f222f62 +data8 0xebe198f090607e0c, 0xec0fcc9321024509 +data8 0xec3e247da8b82f61, 0xec7c27d21321c9f7 +data8 0xecaad5278824e453, 0xecd9a76d097d4e77 +data8 0xed089ed5dcd99446, 0xed37bb95add09a1c +data8 0xed76c70508f904b6, 0xeda63bb05e7f93c6 +data8 0xedd5d661daed2dc4, 0xee05974eef86b903 +data8 0xee357ead791fc670, 0xee658cb3c134a463 +data8 0xee95c1987f080211, 0xeec61d92d8c4314f +data8 0xeef6a0da64a014ac, 0xef274ba72a07c811 +data8 0xef581e31a2c91260, 0xef8918b2bc43aec6 +data8 0xefba3b63d89d7cbf, 0xefeb867ecffaa607 +data8 0xf01cfa3df1b9c9fa, 0xf04e96dc05b43e2d +data8 0xf0805c944d827454, 0xf0b24ba285c495cb +data8 0xf0e46442e76f6569, 0xf116a6b2291d7896 +data8 0xf1383fa9e9b5b381, 0xf16ac84f90083b9b +data8 0xf19d7b686dcb03d7, 0xf1d0593311db1757 +data8 0xf20361ee8f1c711e, 0xf23695da7de51d3f +data8 0xf258d095e465cc35, 0xf28c4d0bfc982b34 +data8 0xf2bff55eb3f0ea71, 0xf2f3c9cf9884636e +data8 0xf31670135ab9cc0f, 0xf34a8e9f0b54cdfb +data8 0xf37ed9fa6b8add3f, 0xf3a1cfe884ef6bb6 +data8 0xf3d66689dcc8e8d3, 0xf40b2ab069d5c96a +data8 0xf42e718b90c8bc16, 0xf463822a0a3b4b00 +data8 0xf498c1076015faf8, 0xf4bc5a19a33990b5 +data8 0xf4f1e6a7d6f5425f, 0xf527a232cf6be334 +data8 0xf54b8ecdcda90851, 0xf5819949c7ad87b4 +data8 0xf5a5bac9213b48a9, 0xf5dc1501f324a812 +data8 0xf6006bee86b5589e, 0xf63716b2fa067fa4 +data8 0xf66df22fb6132b9c, 0xf6929fb98225deb1 +data8 0xf6c9cd13021e3fea, 0xf6eeb177472cedae +data8 0xf713abf4cb0b3afb, 0xf74b4d5333684ef1 +data8 0xf7707f75a72f8e94, 0xf7a874b97927af44 +data8 0xf7cddf140aedf1d8, 0xf806291bacb7f7a9 +data8 0xf82bcc43b92eafef, 0xf8646bf0defb759e +data8 0xf88a487dfc3ff5f7, 0xf8b03c2b46cdc17f +data8 0xf8e95541c152ae7a, 0xf90f832c2700c160 +data8 0xf935c88e0c7f419b, 0xf96f5cd84fd86873 +data8 0xf995dd53ebdd9d6d, 0xf9bc75a034436a41 +data8 0xf9f686f26d5518de, 0xfa1d5b39b910a8c5 +data8 0xfa4447acc4ecbfd2, 0xfa7ed7e51e6fdfb4 +data8 0xfaa601394d49a1a0, 0xfacd431644ce0e40 +data8 0xfaf49d96f7a75909, 0xfb2fd3c65e562fd5 +data8 0xfb576c5762024805, 0xfb7f1debc22c4040 +data8 0xfba6e89f32d0190a, 0xfbe2c803a0894893 +data8 0xfc0ad1ff0ed9ecf0, 0xfc32f57bdfbcbe7f +data8 0xfc5b32968f99b21c, 0xfc83896bc861ab08 +data8 0xfcabfa1861ed4815, 0xfce8d3cea7d3163e +data8 0xfd118595143ee273, 0xfd3a519943d4865a +data8 0xfd6337f8e1ae5a4b, 0xfd8c38d1c8e927eb +data8 0xfdb5544205095a53, 0xfdde8a67d2613531 +data8 0xfe07db619e781611, 0xfe460768d80bf758 +data8 0xfe6f9bfb06cd32f6, 0xfe994bcd3d14fcc2 +data8 0xfec316fecaf3f2ab, 0xfeecfdaf33fadb80 +data8 0xff16fffe2fa8fad6, 0xff411e0ba9db886d +data8 0xff6b57f7c33e4e9a, 0xff95ade2d1bd7358 +data8 0xffc01fed60f86fb5, 0xffeaae3832b63956 +ASM_SIZE_DIRECTIVE(T_table) + + + + + +D_table: +ASM_TYPE_DIRECTIVE(D_table,@object) +data4 0x1e50f488, 0x1ebdc559, 0x1e649ec1, 0x9eed9b2c +data4 0x9e511c44, 0x9ec6d551, 0x9eefe248, 0x9e313854 +data4 0x9f54ff18, 0x9d231411, 0x1ee5d63c, 0x9edf6b95 +data4 0x9f332aaa, 0x1dc92a84, 0x1f73fb7b, 0x1e32f100 +data4 0x9ea636f5, 0x9f6c3353, 0x9f405552, 0x1f33fd97 +data4 0x1e975291, 0x9e59a11e, 0x1e47b0ba, 0x9d8ad33e +data4 0x1ea51bf6, 0x1f25d782, 0x9ecf534d, 0x1f55436f +data4 0x1d0975e4, 0x9f0633a1, 0x1f3e840a, 0x1f523a4c +data4 0x9f53cbbc, 0x9c8b5661, 0x9f6bc8eb, 0x1f4f6c7b +data4 0x9ed9b376, 0x9f5b30b6, 0x1f64fa5e, 0x1cbcc3e0 +data4 0x1f343548, 0x1f62a6a2, 0x9f336abb, 0x9f1d15af +data4 0x1f476c83, 0x1ea86421, 0x1f33b2cf, 0x9e8f1348 +data4 0x1f6fa829, 0x9f30ee3a, 0x9ebd6146, 0x1f2db598 +data4 0x1ef9600d, 0x1f5b1427, 0x9edd741b, 0x1f51ef4e +data4 0x9f1aa57d, 0x9ee9b5e0, 0x9f17ecd7, 0x1ead71ff +data4 0x1f6c910e, 0x9e1837df, 0x9f0f17d9, 0x9e8350dd +data4 0x9d292f1b, 0x9e33b3ab, 0x9d6f0fe8, 0x9ed8c7cc +data4 0x9ec598c8, 0x9d56758c, 0x1e090c1e, 0x9ed4b941 +data4 0x9f1fc4cf, 0x1f63513a, 0x9edd0abc, 0x1e3924dd +data4 0x1f60d56f, 0x1ea84424, 0x9e88f4fb, 0x1f205c09 +data4 0x1ec9ae4e, 0x1d2d5738, 0x9f2c9f6d, 0x1e0765c2 +data4 0x1e8bbdd7, 0x9f16d9f1, 0x9ea62627, 0x1f13904c +data4 0x1e566ab8, 0x9dca3d1a, 0x9e91f2a1, 0x9f14641c +data4 0x9f278946, 0x1f490c1e, 0x1f575eb6, 0x1f50b3fd +data4 0x9da32efb, 0x1ea95e59, 0x9e41e058, 0x9eada15f +data4 0x9e4fe66c, 0x1f3abc98, 0x1f1b8d1e, 0x9ece97e4 +data4 0x1d188aed, 0x9e89b6ee, 0x1f287478, 0x9e8a161a +data4 0x1e4749f7, 0x9e68084a, 0x1e867f33, 0x9f462b63 +data4 0x1db30792, 0x1f59a767, 0x9d1da4ae, 0x9f472a33 +data4 0x1d1e91cd, 0x9f414824, 0x9f473d4f, 0x1f4b5783 +data4 0x9f5b04b8, 0x9f5c205b, 0x1f309617, 0x9f0d6852 +data4 0x9d96a609, 0x9f0965c2, 0x9e23f467, 0x9f089884 +data4 0x9ec71458, 0x9ed6e955, 0x1e5e8691, 0x1f5b2bbc +data4 0x9f128268, 0x1ed40f5b, 0x1dc430ce, 0x1f345986 +data4 0x1d778f72, 0x1e9b11d6, 0x9f5a40be, 0x9e07f61a +data4 0x9ed641a7, 0x9f334787, 0x1e952fd0, 0x1edeb5e2 +data4 0x9e9f3eb1, 0x9e379fd9, 0x1f13102a, 0x9e5e80e1 +data4 0x1c757944, 0x1dae2260, 0x1f183ab7, 0x1e55d576 +data4 0x9e6bb99f, 0x9f52d7cb, 0x9e73a0f5, 0x1d4e1d14 +data4 0x9dd05b53, 0x1f2261e4, 0x9d4ee73d, 0x1ede515e +data4 0x1f22a573, 0x9ecac348, 0x1e6a2ac0, 0x1e2787d2 +data4 0x9eb64b87, 0x1f0c69c6, 0x9f470a01, 0x9d7c1686 +data4 0x1e468ebe, 0x9f21ee2f, 0x9ee52116, 0x9e20f715 +data4 0x1ed18533, 0x9f005b38, 0x9f20cb95, 0x1da72967 +data4 0x1f1ba5d7, 0x1e2f8b16, 0x9c794f96, 0x9ca74ea3 +data4 0x1f410555, 0x9eff2b96, 0x1ce8f0b1, 0x1f0cee77 +data4 0x1f191edd, 0x9ed5fcbc, 0x1f30f242, 0x9e0ad369 +data4 0x1ed8f3c8, 0x1f52bb0e, 0x9e9ce408, 0x1f18907f +data4 0x9ecdad40, 0x9e8af91d, 0x1d46698a, 0x9f4b93d6 +data4 0x9f3f5d33, 0x1e2e52f7, 0x9f13aeec, 0x9f3b1969 +data4 0x1f0996f4, 0x9f2a03df, 0x1e264767, 0x1f3ab1fb +data4 0x9f3193c9, 0x9f21ce22, 0x9eab624c, 0x9ecd8fb1 +data4 0x1eaf9a85, 0x1f0c6a2c, 0x1eecbe61, 0x1f3fead9 +data4 0x1f1d3a29, 0x1e9099ce, 0x1eadd875, 0x1e4dbfb8 +data4 0x9dc640d2, 0x1f413680, 0x9f3f57b3, 0x1dfa1553 +data4 0x1ec71c6b, 0x1e00cc00, 0x9f271e55, 0x1e5a88bb +data4 0x1f46cc2b, 0x1ee80ff9, 0x9e29c6f3, 0x1f15e229 +data4 0x9ea83d66, 0x1f37408e, 0x9dacb66e, 0x1e6f6259 +data4 0x9f106973, 0x1dd4e5ac, 0x1cbfdcc8, 0x9f231c9f +data4 0x9e8677e4, 0x9e9e695a, 0x1efd782b, 0x9dd26959 +data4 0x9e80af69, 0x1f386fb3, 0x1f022e8c, 0x9e839967 +data4 0x1ce6796f, 0x1e4c22c2, 0x1e57ef24, 0x1e919804 +data4 0x9d7ea090, 0x1e40140a, 0x1f261b46, 0x1db75be2 +data4 0x1f145019, 0x9e3102b9, 0x9e22507b, 0x1eae813c +data4 0x1f117e97, 0x1f282296, 0x1f3814b3, 0x1e17977b +data4 0x1f39d6ff, 0x9f1c81b9, 0x9eb5bcad, 0x1f0f596e +data4 0x1e757fd5, 0x9f090daa, 0x9f2532fc, 0x9eebafbb +data4 0x1f086556, 0x9eeedde8, 0x9f32e174, 0x1e33c030 +data4 0x1f1f145a, 0x1e6e556c, 0x1e419ffb, 0x9eb6019a +data4 0x9e872a2e, 0x1e113136, 0x1e93096f, 0x1f39be40 +data4 0x1f1665ad, 0x9db81d7d, 0x9cd29091, 0x1e3f4af7 +data4 0x9f23176c, 0x9eccf9b3, 0x1f34fc6c, 0x9ed36894 +data4 0x1ef08e06, 0x9f3b46bb, 0x9f2c850b, 0x1f1565a4 +data4 0x1e887bc3, 0x1e92629c, 0x9f11ac9e, 0x9e5579f3 +data4 0x1e4d5790, 0x9ee1c3d1, 0x9e916aec, 0x9eb8d9b8 +data4 0x1db46105, 0x1e168663, 0x1f26a942, 0x9f0f0383 +data4 0x9f079032, 0x9ecae1d8, 0x1ed3b34c, 0x9edc5ee6 +data4 0x9e8a75a7, 0x1f3c3de2, 0x9ee5041e, 0x1f08c727 +data4 0x1d02d7ae, 0x9f36adda, 0x9ef9a857, 0x9ef5cb3a +data4 0x9eee73da, 0x9da5d629, 0x1e0e99be, 0x1e5159b9 +data4 0x1f2eac89, 0x9e8eedc5, 0x1dd0ec90, 0x1f229aff +data4 0x1ed9c3e6, 0x1e95c55a, 0x9f0c24e4, 0x1e8afed6 +data4 0x1e599a96, 0x1e881b21, 0x1eab84b9, 0x9ba2bb0e +data4 0x9e33ab10, 0x1f1710b5, 0x1ebfa271, 0x9e90bbc5 +data4 0x9f32515b, 0x9b32aae8, 0x1eda455c, 0x1da8186e +data4 0x9e8917ff, 0x1ec4d08e, 0x1c90069d, 0x9f2f1d29 +data4 0x9ecee86d, 0x9f234d1f, 0x1f370724, 0x1da87496 +data4 0x1e7959f0, 0x9e8ada34, 0x1f1c7f6f, 0x1edd576b +data4 0x9de91e8b, 0x1ec4ef89, 0x1f32078a, 0x1e9925e2 +data4 0x9d8eeccb, 0x9ea3d011, 0x1f231fdf, 0x9f1dbdfa +data4 0x1e7507a3, 0x1ec42614, 0x9e8693cb, 0x9ec68398 +data4 0x1d5b05fb, 0x1de32119, 0x9f003429, 0x9ec16d92 +data4 0x9f095315, 0x9f119d2c, 0x9ed0c984, 0x9f090662 +data4 0x9e59aa1f, 0x9ed4e64a, 0x9f2798a7, 0x9f23624d +data4 0x1e0467d9, 0x1f22e7e7, 0x1e915256, 0x9cb4df70 +data4 0x9e6f687c, 0x9e3c35e5, 0x9e5757ab, 0x9f031fa1 +data4 0x1f25bff7, 0x1f0e58c2, 0x1ef3ce04, 0x1f002ecb +data4 0x9ebdc836, 0x9ed657dd, 0x9f149441, 0x9e8544b2 +data4 0x1cd8ff1e, 0x1e9bb463, 0x1eaa1c5c, 0x1f200c1a +data4 0x1edbfbaf, 0x1f18724d, 0x9ed63c22, 0x9f08e045 +data4 0x1f13ad07, 0x9e949311, 0x9f0c50d4, 0x1e824516 +data4 0x1d5e52ba, 0x1d583fbd, 0x1e3b60a9, 0x9effe6d3 +data4 0x1f0d0508, 0x1f00be77, 0x9e404bfa, 0x9e1ca381 +data4 0x9f084dd8, 0x9e6db85d, 0x1db698e4, 0x9ebd1871 +data4 0x9ecc2679, 0x1ee68442, 0x1edb1050, 0x9dbc96a4 +data4 0x9f27c1f4, 0x1c99b756, 0x1eb4400a, 0x9f24390a +data4 0x1d927875, 0x9f074faa, 0x1e9dc2c3, 0x1f13c0d2 +data4 0x1e3c9685, 0x9e6b6f75, 0x9db9cb31, 0x1ea5f3aa +data4 0x9d992c61, 0x1f1015e4, 0x1f194f70, 0x9e19d2b3 +data4 0x9d89116c, 0x1f23cd35, 0x1e33d3a2, 0x1ee331b8 +data4 0x1d5ba7ec, 0x9f273788, 0x9e6907f4, 0x9ed5f912 +data4 0x9edd458d, 0x1e2ca7b2, 0x1ef81fe4, 0x1dc7ade6 +data4 0x1e876e51, 0x9f04ec89, 0x1f1da63a, 0x1ec02bd0 +data4 0x9e71326f, 0x1e7847b4, 0x1f0de618, 0x9e036cb6 +data4 0x1eec61e2, 0x1ef1758b, 0x9ee880a3, 0x1ed269d7 +data4 0x1e27edd3, 0x9e8a81a1, 0x1eacb84d, 0x9e1aad37 +data4 0x1f1aa8f7, 0x1e9bbd90, 0x1ea1b61f, 0x9ed41c2f +data4 0x1dbb5dd6, 0x1f0ec733, 0x9df06b1b, 0x1e06fef1 +data4 0x9edede3a, 0x1edeb5e2, 0x1f0e63ee, 0x9db316bb +data4 0x9efc1ad3, 0x1f01fbb5, 0x9cc0d078, 0x1ea28b36 +data4 0x9e9dd205, 0x9e791534, 0x1da1c8d5, 0x9e8195cc +data4 0x1f0681a4, 0x1eeaf1e2, 0x9ef83b37, 0x9f22a92b +data4 0x1eabc4ce, 0x1f10eefb, 0x1e06d9aa, 0x1e7cacd5 +data4 0x1f1ea087, 0x1eb21983, 0x9f100c78, 0x1e840abe +data4 0x9efab66c, 0x1f183fa8, 0x9e84ee68, 0x9eea083d +data4 0x9ee23a74, 0x1f1351d7, 0x9ec5d42a, 0x9f071f57 +data4 0x9ef578d9, 0x9f1aa7e7, 0x1eb02044, 0x1f151a2e +data4 0x9c0dc8b2, 0x9ef4087a, 0x1ec12b93, 0x1c1a946b +data4 0x1e89946f, 0x9dafe8c3, 0x1d295288, 0x9e8497ab +data4 0x1ec000c6, 0x1e102f29, 0x1e542256, 0x1e67d44d +data4 0x1ef688d8, 0x1f0e0f29, 0x1e67861f, 0x1e869748 +data4 0x1ee6aa6e, 0x9e4d228b, 0x9e50be5b, 0x1e9fe225 +data4 0x9ea34102, 0x9e628a3b, 0x9ed9fd83, 0x1ecd7109 +data4 0x1f1864ff, 0x1ea19b76, 0x1db0d1c9, 0x9dff519b +data4 0x1e8fea71, 0x9ee82e9a, 0x9f08919b, 0x9ef5c8ae +data4 0x9ee446a4, 0x1ea59444, 0x1eb74230, 0x1ea13fbf +data4 0x9ea6a3ea, 0x1e5f2797, 0x9e0adb07, 0x9d3adadd +data4 0x1ebf2ee2, 0x1da19bfa, 0x1e8dea6d, 0x1ec4fea9 +data4 0x1e669f22, 0x1dc5f919, 0x9ed25caa, 0x1ee475b1 +data4 0x1ed0603e, 0x9eacb35c, 0x1dc00b27, 0x1e2f9991 +data4 0x1e7b0406, 0x1eaa3387, 0x9d865bde, 0x1eb78a48 +data4 0x1c40ae2e, 0x1ee9838b, 0x9f0f0d7f, 0x1e3e5d26 +data4 0x1e99e7a6, 0x9e681ccf, 0x9e93ed65, 0x9eeb6a66 +data4 0x1e29e9af, 0x9e96f923, 0x9e74f11d, 0x9f1474da +data4 0x1eec2ea7, 0x1ebf7aa3, 0x9c25dcca, 0x9f0553c2 +data4 0x9e599efd, 0x1d2ab490, 0x1e95d7cd, 0x9ee4b20e +data4 0x9d988ce5, 0x9ef9787e, 0x9dbbba5b, 0x9f12c304 +data4 0x1e3b9d70, 0x1e7bcae8, 0x9d98bb6e, 0x9e8e6b01 +data4 0x9f07d03b, 0x9d67c822, 0x9f0ef69e, 0x1c7c0fe3 +data4 0x9e9bfbb9, 0x9e83b84b, 0x1efbf15e, 0x9ecfa6a6 +data4 0x9c91158e, 0x9ecf6770, 0x1ee1e3a8, 0x9dc95ec0 +data4 0x1ef603f7, 0x1d5e52ba, 0x1c477d1b, 0x9e955cd8 +data4 0x1ed665b0, 0x9e8376c4, 0x9c0ee88e, 0x1e8c989e +data4 0x1ea2df29, 0x9d961e5c, 0x1e101813, 0x1e7fffff +data4 0x9e5abff4, 0x1dbddd71, 0x1eb69100, 0x1e71f114 +data4 0x1e9ca798, 0x1ef62c8d, 0x9db4e55a, 0x1dbe69ce +data4 0x9ef1c01f, 0x1f044a2a, 0x9eb9e0d7, 0x9ee59745 +data4 0x9e874803, 0x1ea0b418, 0x9e13572a, 0x1ddbb3a2 +data4 0x9ec0e391, 0x1e89fba1, 0x1ee8b261, 0x9e5d25f0 +data4 0x9ef222cb, 0x9ef135ec, 0x1ea04b9a, 0x9f04291f +data4 0x9e969254, 0x9ee32f08, 0x9ed909d3, 0x9e362640 +data4 0x9ec20735, 0x1e50131b, 0x9ed4e049, 0x1ee8e817 +data4 0x1e1e09c0, 0x9ea643c5, 0x9e5a1ab6, 0x9e389059 +data4 0x1e560947, 0x1d02b877, 0x1e4475ab, 0x9ea9aaf6 +data4 0x1e95bc5e, 0x1eaf6afd, 0x1d43067d, 0x9d043821 +data4 0x9e97baa9, 0x1de5c4f9, 0x9e9a0069, 0x9e1b9944 +data4 0x1eb13686, 0x9eb907eb, 0x1e059589, 0x1cbd0f93 +data4 0x9eb7e6ae, 0x1e9fa175, 0x1ee5bdf4, 0x1e8052f7 +data4 0x9c80d1e3, 0x1bfbe28e, 0x9e672b3b, 0x9ecacf19 +data4 0x9e3c04be, 0x1dfe8c5c, 0x1e1ba9cb, 0x1eb40b1e +data4 0x1ec7e7f6, 0x9d0d45b3, 0x1ef0113b, 0x9a155fa3 +data4 0x1e28ec3b, 0x1e7ca8df, 0x9d2f91b4, 0x1eccd9ed +data4 0x9ed943bc, 0x9ccaab19, 0x9e8a5c58, 0x1ec3bca8 +data4 0x1ed78dc7, 0x9ed391a8, 0x9e938f6e, 0x9ec4a030 +data4 0x9e80346e, 0x1e7a4686, 0x9e284315, 0x9e39584c +data4 0x1ebdc9b4, 0x9e9cfce5, 0x9ef55c65, 0x1e2941e7 +data4 0x9efbe59f, 0x1d87c41b, 0x1e40befc, 0x1e3d05b5 +data4 0x1de9ea67, 0x1ec9a21c, 0x1decb69a, 0x1df6e75a +data4 0x9e8030ab, 0x9db20540, 0x9ef1e977, 0x1e3cdc43 +data4 0x1e0492b0, 0x9e91d872, 0x1e775346, 0x9e939978 +data4 0x1eb2714e, 0x1e49a203, 0x9e10195a, 0x1ef1ffc3 +data4 0x9ea8b709, 0x9e832e27, 0x1ed5ac3b, 0x1edb20a6 +data4 0x1e4dbd4e, 0x1efbb932, 0x1d8170ec, 0x1e6c4849 +data4 0x1f008e17, 0x1e8000c4, 0x1d855ecf, 0x9e37cb85 +data4 0x1ecffdf5, 0x1eba6519, 0x9edbe600, 0x1ea3e5e7 +data4 0x1ed4fb39, 0x1f00be77, 0x1e6f4484, 0x9e9e7107 +data4 0x9e30b29d, 0x9ee6e174, 0x1e3a2656, 0x9dd72f3f +data4 0x9ee12138, 0x1ed16fed, 0x9ece8a02, 0x9ca5b249 +data4 0x9eafd508, 0x9ef0e9fc, 0x1d1307ac, 0x1eecee20 +data4 0x1cf60c6f, 0x9d556216, 0x9eaed175, 0x9ec919f4 +data4 0x1ec2c988, 0x1cd82772, 0x9dc99456, 0x1eab0467 +data4 0x1e89b36f, 0x1c757944, 0x1eef9abd, 0x9e98664d +ASM_SIZE_DIRECTIVE(D_table) + + + + + +.align 32 +.global cbrtl# + +.section .text +.proc cbrtl# +.align 32 +cbrtl: + + +{ .mfi + getf.sig r3=f8 + // will continue only for normal/denormal numbers +(p0) fclass.nm.unc p12,p7 = f8, 0x1b + // r2 = pointer to C_1...C_6 followed by T_table + addl r2 = @ltoff(poly_coeffs), gp;; +} +{.mfi + // r29=2/3*bias -63=0xaaaa-0x3f=0xaa6b + mov r29=0xaa6b + // normalize a + fma.s1 f14=f8,f1,f0 + // r27 = pointer to D table + addl r27 = @ltoff(D_table), gp;; +} +{.mib + nop.m 0 + (p7) cmp.eq p12,p0=r3,r0 + nop.b 0;; +} +{.mfb + // load start address for C_1...C_6 followed by T_table + ld8 r2=[r2] + (p12) fma.s0 f8=f8,f1,f0 + (p12) br.ret.spnt b0;; +} +{.mmf + // load C_1 + ldfe f7=[r2],16 + // load start address of D table + ld8 r27=[r27] + // y=frcpa(a) + frcpa.s0 f8,p6=f1,f8;; +} +{.mmi + // load C_2 + ldfe f9=[r2],16;; + // load C_3, C_4 + ldfpd f10,f11=[r2],16 + nop.i 0;; +} +{.mmi + // get normalized significand + getf.sig r23=f14 + // get exponent + getf.exp r24=f14 + mov r25=0x20000;; +} +{.mii + // get r26=sign + and r26=r24,r25 + // eliminate leading 1 from r23=2nd table index + shl r23=r23,1 + // eliminate sign from exponent (r25) + andcm r25=r24,r25;; +} +{.mfi + // load C_5,C_6 + (p6) ldfpd f12,f13=[r2],16 + // r=1-a*y + (p6) fnma.s1 f6=f8,f14,f1 + // 1: exponent*=5; // (2^{16}-1)/3=0x5555 + shladd r24=r25,2,r25;; +} +{.mib + // r30=(5*expon)*16 + shladd r30=r24,4,r0 + // r28=3*exponent + shladd r28=r25,1,r25 + nop.b 0;; +} +{.mmi + // r28=6*exponent + shladd r28=r28,1,r0 + // r24=17*expon + add r24=r24,r30 + // r23=2nd table index (8 bits) + shr.u r23=r23,56;; +} +{.mmi + // adjust T_table pointer by 2nd index + shladd r2=r23,3,r2 + // adjust D_table pointer by 2nd index + shladd r27=r23,2,r27 + // r30=(17*expon)*16^2 + shl r30=r24,8;; +} +{.mmi + // r24=expon*(2^16-1)/3 + add r24=r24,r30;; + // r24=expon*(2^20+2)/3=expon*0x55556 + shladd r24=r24,4,r28 + nop.i 0;; +} +{.mii + nop.m 0 + // r24=floor(expon/3) + shr.u r24=r24,20 + nop.i 0;; +} +{.mmi + nop.m 0 + // r28=3*exponent + shladd r28=r24,1,r24 + // bias exponent + add r24=r29,r24;; +} +{.mmi + // get remainder of exponent/3 + sub r25=r25,r28;; + // add sign to exponent + or r24=r24,r26 + // remainder <<=8 + shl r25=r25,8;; +} +{.mfi + // adjust D_table pointer by 1st index + shladd r27=r25,2,r27 + // P_1=C_1+C_2*r + (p6) fma.s1 f7=f9,f6,f7 + // adjust T_table pointer by 1st index + shladd r2=r25,3,r2 +} +{.mfi + // f14=sign*2^{exponent/3} + (p6) setf.exp f14=r24 + // r2=r*r + (p6) fma.s1 f9=f6,f6,f0 + nop.i 0;; +} +{.mfi + // load D + (p6) ldfs f15=[r27] + // P_2=C_3+C_4*r + (p6) fma.s1 f10=f11,f6,f10 + nop.i 0 +} +{.mfi + // load T + (p6) ldf8 f8=[r2] + // P_3=C_5+C_6*r + (p6) fma.s1 f12=f13,f6,f12 + nop.i 0;; +} +{.mfi + nop.m 0 + // P_4=D-r*P_1 + (p6) fnma.s1 f15=f6,f7,f15 + nop.i 0 +} +{.mfi + nop.m 0 + // r3=r*r2 + (p6) fma.s1 f6=f6,f9,f0 + nop.i 0;; +} +{.mfi + nop.m 0 + // P_5=P_2+r2*P_3 + (p6) fma.s1 f10=f9,f12,f10 + nop.i 0;; +} +{.mfi + nop.m 0 + // T=T*(sign*2^{exponent/3}) + (p6) fma.s1 f8=f8,f14,f0 + nop.i 0 +} +{.mfi + nop.m 0 + // P=P_4-r3*P_5 + (p6) fnma.s1 f6=f6,f10,f15 + nop.i 0;; +} +{.mfb + nop.m 0 + // result=T+T*p + (p6) fma.s0 f8=f8,f6,f8 + br.ret.sptk b0;; +} +.endp cbrtl +ASM_SIZE_DIRECTIVE(cbrtl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ceil.S glibc-2.2.3/sysdeps/ia64/fpu/s_ceil.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ceil.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ceil.S Mon Feb 19 00:53:21 2001 @@ -0,0 +1,249 @@ +.file "ceil.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// + +#include "libm_support.h" + +.align 32 +.global ceil# + +.section .text +.proc ceil# +.align 32 + +// History +//============================================================== +// 2/02/00: Initial version +// 6/13/00: Improved speed +// 6/27/00: Eliminated incorrect invalid flag setting + +// API +//============================================================== +// double ceil(double x) + +// general input registers: + +ceil_GR_FFFF = r14 +ceil_GR_signexp = r15 +ceil_GR_exponent = r16 +ceil_GR_expmask = r17 +ceil_GR_bigexp = r18 + + +// predicate registers used: + +// p6 ==> Input is NaN, infinity, zero +// p7 ==> Input is denormal +// p8 ==> Input is <0 +// p9 ==> Input is >=0 +// p10 ==> Input is already an integer (bigger than largest integer) +// p11 ==> Input is not a large integer +// p12 ==> Input is a smaller integer +// p13 ==> Input is not an even integer, so inexact must be set +// p14 ==> Input is between -1 and 0, so result will be -0 and inexact + + +// floating-point registers used: + +CEIL_SIGNED_ZERO = f7 +CEIL_NORM_f8 = f9 +CEIL_FFFF = f10 +CEIL_INEXACT = f11 +CEIL_FLOAT_INT_f8 = f12 +CEIL_INT_f8 = f13 +CEIL_adj = f14 +CEIL_MINUS_ONE = f15 + +// Overview of operation +//============================================================== + +// double ceil(double x) +// Return an integer value (represented as a double) that is the smallest +// value not less than x +// This is x rounded toward +infinity to an integral value. +// Inexact is set if x != ceil(x) +// ************************************************************************** + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +ceil: + +{ .mfi + getf.exp ceil_GR_signexp = f8 + fcvt.fx.trunc.s1 CEIL_INT_f8 = f8 + addl ceil_GR_bigexp = 0x10033, r0 +} +{ .mfi + addl ceil_GR_FFFF = -1,r0 + fcmp.lt.s1 p8,p9 = f8,f0 + mov ceil_GR_expmask = 0x1FFFF ;; +} + +// p7 ==> denorm +{ .mfi + setf.sig CEIL_FFFF = ceil_GR_FFFF + fclass.m p7,p0 = f8, 0x0b + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm CEIL_NORM_f8 = f8 + nop.i 999 ;; +} + +// Form 0 with sign of input in case negative zero is needed +{ .mfi + nop.m 999 + fmerge.s CEIL_SIGNED_ZERO = f8, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fsub.s1 CEIL_MINUS_ONE = f0, f1 + nop.i 999 ;; +} + +// p6 ==> NAN, INF, ZERO +{ .mfb + nop.m 999 + fclass.m p6,p10 = f8, 0xe7 +(p7) br.cond.spnt L(CEIL_DENORM) ;; +} + +L(CEIL_COMMON): +.pred.rel "mutex",p8,p9 +// Set adjustment to add to trunc(x) for result +// If x>0, adjustment is 1.0 +// If x<=0, adjustment is 0.0 +{ .mfi + and ceil_GR_exponent = ceil_GR_signexp, ceil_GR_expmask +(p9) fadd.s1 CEIL_adj = f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fadd.s1 CEIL_adj = f0,f0 + nop.i 999 ;; +} + +{ .mfi +(p10) cmp.ge.unc p10,p11 = ceil_GR_exponent, ceil_GR_bigexp +(p6) fnorm.d f8 = f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcvt.xf CEIL_FLOAT_INT_f8 = CEIL_INT_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fnorm.d f8 = CEIL_NORM_f8 + nop.i 999 ;; +} + +// Is -1 < x < 0? If so, result will be -0. Special case it with p14 set. +{ .mfi + nop.m 999 +(p8) fcmp.gt.unc.s1 p14,p0 = CEIL_NORM_f8, CEIL_MINUS_ONE + nop.i 999 ;; +} + +{ .mfi +(p14) cmp.ne p11,p0 = r0,r0 +(p14) fnorm.d f8 = CEIL_SIGNED_ZERO + nop.i 999 +} +{ .mfi + nop.m 999 +(p14) fmpy.s0 CEIL_INEXACT = CEIL_FFFF,CEIL_FFFF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd.d f8 = CEIL_FLOAT_INT_f8,CEIL_adj + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p12,p13 = CEIL_FLOAT_INT_f8, CEIL_NORM_f8 + nop.i 999 ;; +} + +// Set inexact if result not equal to input +{ .mfi + nop.m 999 +(p13) fmpy.s0 CEIL_INEXACT = CEIL_FFFF,CEIL_FFFF + nop.i 999 +} +// Set result to input if integer +{ .mfb + nop.m 999 +(p12) fnorm.d f8 = CEIL_NORM_f8 + br.ret.sptk b0 ;; +} + +// Here if input denorm +L(CEIL_DENORM): +{ .mfb + getf.exp ceil_GR_signexp = CEIL_NORM_f8 + fcvt.fx.trunc.s1 CEIL_INT_f8 = CEIL_NORM_f8 + br.cond.sptk L(CEIL_COMMON) ;; +} + +.endp ceil +ASM_SIZE_DIRECTIVE(ceil) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ceilf.S glibc-2.2.3/sysdeps/ia64/fpu/s_ceilf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ceilf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ceilf.S Mon Feb 19 00:53:30 2001 @@ -0,0 +1,249 @@ +.file "ceilf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// + +#include "libm_support.h" + +.align 32 +.global ceilf# + +.section .text +.proc ceilf# +.align 32 + +// History +//============================================================== +// 2/02/00: Initial version +// 6/13/00: Improved speed +// 6/27/00: Eliminated incorrect invalid flag setting + +// API +//============================================================== +// float ceilf(float x) + +// general input registers: + +ceil_GR_FFFF = r14 +ceil_GR_signexp = r15 +ceil_GR_exponent = r16 +ceil_GR_expmask = r17 +ceil_GR_bigexp = r18 + + +// predicate registers used: + +// p6 ==> Input is NaN, infinity, zero +// p7 ==> Input is denormal +// p8 ==> Input is <0 +// p9 ==> Input is >=0 +// p10 ==> Input is already an integer (bigger than largest integer) +// p11 ==> Input is not a large integer +// p12 ==> Input is a smaller integer +// p13 ==> Input is not an even integer, so inexact must be set +// p14 ==> Input is between -1 and 0, so result will be -0 and inexact + + +// floating-point registers used: + +CEIL_SIGNED_ZERO = f7 +CEIL_NORM_f8 = f9 +CEIL_FFFF = f10 +CEIL_INEXACT = f11 +CEIL_FLOAT_INT_f8 = f12 +CEIL_INT_f8 = f13 +CEIL_adj = f14 +CEIL_MINUS_ONE = f15 + +// Overview of operation +//============================================================== + +// float ceilf(float x) +// Return an integer value (represented as a float) that is the smallest +// value not less than x +// This is x rounded toward +infinity to an integral value. +// Inexact is set if x != ceilf(x) +// ************************************************************************** + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +ceilf: + +{ .mfi + getf.exp ceil_GR_signexp = f8 + fcvt.fx.trunc.s1 CEIL_INT_f8 = f8 + addl ceil_GR_bigexp = 0x10016, r0 +} +{ .mfi + addl ceil_GR_FFFF = -1,r0 + fcmp.lt.s1 p8,p9 = f8,f0 + mov ceil_GR_expmask = 0x1FFFF ;; +} + +// p7 ==> denorm +{ .mfi + setf.sig CEIL_FFFF = ceil_GR_FFFF + fclass.m p7,p0 = f8, 0x0b + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm CEIL_NORM_f8 = f8 + nop.i 999 ;; +} + +// Form 0 with sign of input in case negative zero is needed +{ .mfi + nop.m 999 + fmerge.s CEIL_SIGNED_ZERO = f8, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fsub.s1 CEIL_MINUS_ONE = f0, f1 + nop.i 999 ;; +} + +// p6 ==> NAN, INF, ZERO +{ .mfb + nop.m 999 + fclass.m p6,p10 = f8, 0xe7 +(p7) br.cond.spnt L(CEIL_DENORM) ;; +} + +L(CEIL_COMMON): +.pred.rel "mutex",p8,p9 +// Set adjustment to add to trunc(x) for result +// If x>0, adjustment is 1.0 +// If x<=0, adjustment is 0.0 +{ .mfi + and ceil_GR_exponent = ceil_GR_signexp, ceil_GR_expmask +(p9) fadd.s1 CEIL_adj = f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fadd.s1 CEIL_adj = f0,f0 + nop.i 999 ;; +} + +{ .mfi +(p10) cmp.ge.unc p10,p11 = ceil_GR_exponent, ceil_GR_bigexp +(p6) fnorm.s f8 = f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcvt.xf CEIL_FLOAT_INT_f8 = CEIL_INT_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fnorm.s f8 = CEIL_NORM_f8 + nop.i 999 ;; +} + +// Is -1 < x < 0? If so, result will be -0. Special case it with p14 set. +{ .mfi + nop.m 999 +(p8) fcmp.gt.unc.s1 p14,p0 = CEIL_NORM_f8, CEIL_MINUS_ONE + nop.i 999 ;; +} + +{ .mfi +(p14) cmp.ne p11,p0 = r0,r0 +(p14) fnorm.s f8 = CEIL_SIGNED_ZERO + nop.i 999 +} +{ .mfi + nop.m 999 +(p14) fmpy.s0 CEIL_INEXACT = CEIL_FFFF,CEIL_FFFF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd.s f8 = CEIL_FLOAT_INT_f8,CEIL_adj + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p12,p13 = CEIL_FLOAT_INT_f8, CEIL_NORM_f8 + nop.i 999 ;; +} + +// Set inexact if result not equal to input +{ .mfi + nop.m 999 +(p13) fmpy.s0 CEIL_INEXACT = CEIL_FFFF,CEIL_FFFF + nop.i 999 +} +// Set result to input if integer +{ .mfb + nop.m 999 +(p12) fnorm.s f8 = CEIL_NORM_f8 + br.ret.sptk b0 ;; +} + +// Here if input denorm +L(CEIL_DENORM): +{ .mfb + getf.exp ceil_GR_signexp = CEIL_NORM_f8 + fcvt.fx.trunc.s1 CEIL_INT_f8 = CEIL_NORM_f8 + br.cond.sptk L(CEIL_COMMON) ;; +} + +.endp ceilf +ASM_SIZE_DIRECTIVE(ceilf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ceill.S glibc-2.2.3/sysdeps/ia64/fpu/s_ceill.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ceill.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ceill.S Mon Feb 19 00:53:38 2001 @@ -0,0 +1,249 @@ +.file "ceill.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// + +#include "libm_support.h" + +.align 32 +.global ceill# + +.section .text +.proc ceill# +.align 32 + +// History +//============================================================== +// 2/02/00: Initial version +// 6/13/00: Improved speed +// 6/27/00: Eliminated incorrect invalid flag setting + +// API +//============================================================== +// double ceill(double x) + +// general input registers: + +ceil_GR_FFFF = r14 +ceil_GR_signexp = r15 +ceil_GR_exponent = r16 +ceil_GR_expmask = r17 +ceil_GR_bigexp = r18 + + +// predicate registers used: + +// p6 ==> Input is NaN, infinity, zero +// p7 ==> Input is denormal +// p8 ==> Input is <0 +// p9 ==> Input is >=0 +// p10 ==> Input is already an integer (bigger than largest integer) +// p11 ==> Input is not a large integer +// p12 ==> Input is a smaller integer +// p13 ==> Input is not an even integer, so inexact must be set +// p14 ==> Input is between -1 and 0, so result will be -0 and inexact + + +// floating-point registers used: + +CEIL_SIGNED_ZERO = f7 +CEIL_NORM_f8 = f9 +CEIL_FFFF = f10 +CEIL_INEXACT = f11 +CEIL_FLOAT_INT_f8 = f12 +CEIL_INT_f8 = f13 +CEIL_adj = f14 +CEIL_MINUS_ONE = f15 + +// Overview of operation +//============================================================== + +// long double ceill(long double x) +// Return an integer value (represented as a long double) that is the smallest +// value not less than x +// This is x rounded toward +infinity to an integral value. +// Inexact is set if x != ceill(x) +// ************************************************************************** + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +ceill: + +{ .mfi + getf.exp ceil_GR_signexp = f8 + fcvt.fx.trunc.s1 CEIL_INT_f8 = f8 + addl ceil_GR_bigexp = 0x1003e, r0 +} +{ .mfi + addl ceil_GR_FFFF = -1,r0 + fcmp.lt.s1 p8,p9 = f8,f0 + mov ceil_GR_expmask = 0x1FFFF ;; +} + +// p7 ==> denorm +{ .mfi + setf.sig CEIL_FFFF = ceil_GR_FFFF + fclass.m p7,p0 = f8, 0x0b + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm CEIL_NORM_f8 = f8 + nop.i 999 ;; +} + +// Form 0 with sign of input in case negative zero is needed +{ .mfi + nop.m 999 + fmerge.s CEIL_SIGNED_ZERO = f8, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fsub.s1 CEIL_MINUS_ONE = f0, f1 + nop.i 999 ;; +} + +// p6 ==> NAN, INF, ZERO +{ .mfb + nop.m 999 + fclass.m p6,p10 = f8, 0xe7 +(p7) br.cond.spnt L(CEIL_DENORM) ;; +} + +L(CEIL_COMMON): +.pred.rel "mutex",p8,p9 +// Set adjustment to add to trunc(x) for result +// If x>0, adjustment is 1.0 +// If x<=0, adjustment is 0.0 +{ .mfi + and ceil_GR_exponent = ceil_GR_signexp, ceil_GR_expmask +(p9) fadd.s1 CEIL_adj = f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fadd.s1 CEIL_adj = f0,f0 + nop.i 999 ;; +} + +{ .mfi +(p10) cmp.ge.unc p10,p11 = ceil_GR_exponent, ceil_GR_bigexp +(p6) fnorm f8 = f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcvt.xf CEIL_FLOAT_INT_f8 = CEIL_INT_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fnorm f8 = CEIL_NORM_f8 + nop.i 999 ;; +} + +// Is -1 < x < 0? If so, result will be -0. Special case it with p14 set. +{ .mfi + nop.m 999 +(p8) fcmp.gt.unc.s1 p14,p0 = CEIL_NORM_f8, CEIL_MINUS_ONE + nop.i 999 ;; +} + +{ .mfi +(p14) cmp.ne p11,p0 = r0,r0 +(p14) fnorm f8 = CEIL_SIGNED_ZERO + nop.i 999 +} +{ .mfi + nop.m 999 +(p14) fmpy.s0 CEIL_INEXACT = CEIL_FFFF,CEIL_FFFF + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd f8 = CEIL_FLOAT_INT_f8,CEIL_adj + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p12,p13 = CEIL_FLOAT_INT_f8, CEIL_NORM_f8 + nop.i 999 ;; +} + +// Set inexact if result not equal to input +{ .mfi + nop.m 999 +(p13) fmpy.s0 CEIL_INEXACT = CEIL_FFFF,CEIL_FFFF + nop.i 999 +} +// Set result to input if integer +{ .mfb + nop.m 999 +(p12) fnorm f8 = CEIL_NORM_f8 + br.ret.sptk b0 ;; +} + +// Here if input denorm +L(CEIL_DENORM): +{ .mfb + getf.exp ceil_GR_signexp = CEIL_NORM_f8 + fcvt.fx.trunc.s1 CEIL_INT_f8 = CEIL_NORM_f8 + br.cond.sptk L(CEIL_COMMON) ;; +} + +.endp ceill +ASM_SIZE_DIRECTIVE(ceill) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_cos.S glibc-2.2.3/sysdeps/ia64/fpu/s_cos.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_cos.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_cos.S Mon Feb 19 00:53:56 2001 @@ -0,0 +1,3488 @@ +.file "sincos.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial revision +// 4/02/00 Unwind support added. +// 6/16/00 Updated tables to enforce symmetry +// 8/31/00 Saved 2 cycles in main path, and 9 in other paths. +// 9/20/00 The updated tables regressed to an old version, so reinstated them +// 10/18/00 Changed one table entry to ensure symmetry +// 1/03/01 Improved speed, fixed flag settings for small arguments. + +// API +//============================================================== +// double sin( double x); +// double cos( double x); +// +// Overview of operation +//============================================================== +// +// Step 1 +// ====== +// Reduce x to region -1/2*pi/2^k ===== 0 ===== +1/2*pi/2^k where k=4 +// divide x by pi/2^k. +// Multiply by 2^k/pi. +// nfloat = Round result to integer (round-to-nearest) +// +// r = x - nfloat * pi/2^k +// Do this as (x - nfloat * HIGH(pi/2^k)) - nfloat * LOW(pi/2^k) for increased accuracy. +// pi/2^k is stored as two numbers that when added make pi/2^k. +// pi/2^k = HIGH(pi/2^k) + LOW(pi/2^k) +// +// x = (nfloat * pi/2^k) + r +// r is small enough that we can use a polynomial approximation +// and is referred to as the reduced argument. +// +// Step 3 +// ====== +// Take the unreduced part and remove the multiples of 2pi. +// So nfloat = nfloat (with lower k+1 bits cleared) + lower k+1 bits +// +// nfloat (with lower k+1 bits cleared) is a multiple of 2^(k+1) +// N * 2^(k+1) +// nfloat * pi/2^k = N * 2^(k+1) * pi/2^k + (lower k+1 bits) * pi/2^k +// nfloat * pi/2^k = N * 2 * pi + (lower k+1 bits) * pi/2^k +// nfloat * pi/2^k = N2pi + M * pi/2^k +// +// +// Sin(x) = Sin((nfloat * pi/2^k) + r) +// = Sin(nfloat * pi/2^k) * Cos(r) + Cos(nfloat * pi/2^k) * Sin(r) +// +// Sin(nfloat * pi/2^k) = Sin(N2pi + Mpi/2^k) +// = Sin(N2pi)Cos(Mpi/2^k) + Cos(N2pi)Sin(Mpi/2^k) +// = Sin(Mpi/2^k) +// +// Cos(nfloat * pi/2^k) = Cos(N2pi + Mpi/2^k) +// = Cos(N2pi)Cos(Mpi/2^k) + Sin(N2pi)Sin(Mpi/2^k) +// = Cos(Mpi/2^k) +// +// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) +// +// +// Step 4 +// ====== +// 0 <= M < 2^(k+1) +// There are 2^(k+1) Sin entries in a table. +// There are 2^(k+1) Cos entries in a table. +// +// Get Sin(Mpi/2^k) and Cos(Mpi/2^k) by table lookup. +// +// +// Step 5 +// ====== +// Calculate Cos(r) and Sin(r) by polynomial approximation. +// +// Cos(r) = 1 + r^2 q1 + r^4 q2 + r^6 q3 + ... = Series for Cos +// Sin(r) = r + r^3 p1 + r^5 p2 + r^7 p3 + ... = Series for Sin +// +// and the coefficients q1, q2, ... and p1, p2, ... are stored in a table +// +// +// Calculate +// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) +// +// as follows +// +// Sm = Sin(Mpi/2^k) and Cm = Cos(Mpi/2^k) +// rsq = r*r +// +// +// P = p1 + r^2p2 + r^4p3 + r^6p4 +// Q = q1 + r^2q2 + r^4q3 + r^6q4 +// +// rcub = r * rsq +// Sin(r) = r + rcub * P +// = r + r^3p1 + r^5p2 + r^7p3 + r^9p4 + ... = Sin(r) +// +// The coefficients are not exactly these values, but almost. +// +// p1 = -1/6 = -1/3! +// p2 = 1/120 = 1/5! +// p3 = -1/5040 = -1/7! +// p4 = 1/362889 = 1/9! +// +// P = r + rcub * P +// +// Answer = Sm Cos(r) + Cm P +// +// Cos(r) = 1 + rsq Q +// Cos(r) = 1 + r^2 Q +// Cos(r) = 1 + r^2 (q1 + r^2q2 + r^4q3 + r^6q4) +// Cos(r) = 1 + r^2q1 + r^4q2 + r^6q3 + r^8q4 + ... +// +// Sm Cos(r) = Sm(1 + rsq Q) +// Sm Cos(r) = Sm + Sm rsq Q +// Sm Cos(r) = Sm + s_rsq Q +// Q = Sm + s_rsq Q +// +// Then, +// +// Answer = Q + Cm P + +#include "libm_support.h" + +// Registers used +//============================================================== +// general input registers: +// r14 -> r19 +// r32 -> r45 + +// predicate registers used: +// p6 -> p14 + +// floating-point registers used +// f9 -> f15 +// f32 -> f61 + +// Assembly macros +//============================================================== +sind_NORM_f8 = f9 +sind_W = f10 +sind_int_Nfloat = f11 +sind_Nfloat = f12 + +sind_r = f13 +sind_rsq = f14 +sind_rcub = f15 + +sind_Inv_Pi_by_16 = f32 +sind_Pi_by_16_hi = f33 +sind_Pi_by_16_lo = f34 + +sind_Inv_Pi_by_64 = f35 +sind_Pi_by_64_hi = f36 +sind_Pi_by_64_lo = f37 + +sind_Sm = f38 +sind_Cm = f39 + +sind_P1 = f40 +sind_Q1 = f41 +sind_P2 = f42 +sind_Q2 = f43 +sind_P3 = f44 +sind_Q3 = f45 +sind_P4 = f46 +sind_Q4 = f47 + +sind_P_temp1 = f48 +sind_P_temp2 = f49 + +sind_Q_temp1 = f50 +sind_Q_temp2 = f51 + +sind_P = f52 +sind_Q = f53 + +sind_srsq = f54 + +sind_SIG_INV_PI_BY_16_2TO61 = f55 +sind_RSHF_2TO61 = f56 +sind_RSHF = f57 +sind_2TOM61 = f58 +sind_NFLOAT = f59 +sind_W_2TO61_RSH = f60 + +fp_tmp = f61 + +///////////////////////////////////////////////////////////// + +sind_AD_1 = r33 +sind_AD_2 = r34 +sind_exp_limit = r35 +sind_r_signexp = r36 +sind_AD_beta_table = r37 +sind_r_sincos = r38 + +sind_r_exp = r39 +sind_r_17_ones = r40 + +sind_GR_sig_inv_pi_by_16 = r14 +sind_GR_rshf_2to61 = r15 +sind_GR_rshf = r16 +sind_GR_exp_2tom61 = r17 +sind_GR_n = r18 +sind_GR_m = r19 +sind_GR_32m = r19 + +gr_tmp = r41 +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 +double_sind_pi: +ASM_TYPE_DIRECTIVE(double_sind_pi,@object) +// data8 0xA2F9836E4E44152A, 0x00004001 // 16/pi (significand loaded w/ setf) +// c90fdaa22168c234 + data8 0xC90FDAA22168C234, 0x00003FFC // pi/16 hi +// c4c6628b80dc1cd1 29024e088a + data8 0xC4C6628B80DC1CD1, 0x00003FBC // pi/16 lo +ASM_SIZE_DIRECTIVE(double_sind_pi) + +double_sind_pq_k4: +ASM_TYPE_DIRECTIVE(double_sind_pq_k4,@object) + data8 0x3EC71C963717C63A // P4 + data8 0x3EF9FFBA8F191AE6 // Q4 + data8 0xBF2A01A00F4E11A8 // P3 + data8 0xBF56C16C05AC77BF // Q3 + data8 0x3F8111111110F167 // P2 + data8 0x3FA555555554DD45 // Q2 + data8 0xBFC5555555555555 // P1 + data8 0xBFDFFFFFFFFFFFFC // Q1 +ASM_SIZE_DIRECTIVE(double_sind_pq_k4) + + +double_sin_cos_beta_k4: +ASM_TYPE_DIRECTIVE(double_sin_cos_beta_k4,@object) +data8 0x0000000000000000 , 0x00000000 // sin( 0 pi/16) S0 +data8 0x8000000000000000 , 0x00003fff // cos( 0 pi/16) C0 + +data8 0xc7c5c1e34d3055b3 , 0x00003ffc // sin( 1 pi/16) S1 +data8 0xfb14be7fbae58157 , 0x00003ffe // cos( 1 pi/16) C1 + +data8 0xc3ef1535754b168e , 0x00003ffd // sin( 2 pi/16) S2 +data8 0xec835e79946a3146 , 0x00003ffe // cos( 2 pi/16) C2 + +data8 0x8e39d9cd73464364 , 0x00003ffe // sin( 3 pi/16) S3 +data8 0xd4db3148750d181a , 0x00003ffe // cos( 3 pi/16) C3 + +data8 0xb504f333f9de6484 , 0x00003ffe // sin( 4 pi/16) S4 +data8 0xb504f333f9de6484 , 0x00003ffe // cos( 4 pi/16) C4 + + +data8 0xd4db3148750d181a , 0x00003ffe // sin( 5 pi/16) C3 +data8 0x8e39d9cd73464364 , 0x00003ffe // cos( 5 pi/16) S3 + +data8 0xec835e79946a3146 , 0x00003ffe // sin( 6 pi/16) C2 +data8 0xc3ef1535754b168e , 0x00003ffd // cos( 6 pi/16) S2 + +data8 0xfb14be7fbae58157 , 0x00003ffe // sin( 7 pi/16) C1 +data8 0xc7c5c1e34d3055b3 , 0x00003ffc // cos( 7 pi/16) S1 + +data8 0x8000000000000000 , 0x00003fff // sin( 8 pi/16) C0 +data8 0x0000000000000000 , 0x00000000 // cos( 8 pi/16) S0 + + +data8 0xfb14be7fbae58157 , 0x00003ffe // sin( 9 pi/16) C1 +data8 0xc7c5c1e34d3055b3 , 0x0000bffc // cos( 9 pi/16) -S1 + +data8 0xec835e79946a3146 , 0x00003ffe // sin(10 pi/16) C2 +data8 0xc3ef1535754b168e , 0x0000bffd // cos(10 pi/16) -S2 + +data8 0xd4db3148750d181a , 0x00003ffe // sin(11 pi/16) C3 +data8 0x8e39d9cd73464364 , 0x0000bffe // cos(11 pi/16) -S3 + +data8 0xb504f333f9de6484 , 0x00003ffe // sin(12 pi/16) S4 +data8 0xb504f333f9de6484 , 0x0000bffe // cos(12 pi/16) -S4 + + +data8 0x8e39d9cd73464364 , 0x00003ffe // sin(13 pi/16) S3 +data8 0xd4db3148750d181a , 0x0000bffe // cos(13 pi/16) -C3 + +data8 0xc3ef1535754b168e , 0x00003ffd // sin(14 pi/16) S2 +data8 0xec835e79946a3146 , 0x0000bffe // cos(14 pi/16) -C2 + +data8 0xc7c5c1e34d3055b3 , 0x00003ffc // sin(15 pi/16) S1 +data8 0xfb14be7fbae58157 , 0x0000bffe // cos(15 pi/16) -C1 + +data8 0x0000000000000000 , 0x00000000 // sin(16 pi/16) S0 +data8 0x8000000000000000 , 0x0000bfff // cos(16 pi/16) -C0 + + +data8 0xc7c5c1e34d3055b3 , 0x0000bffc // sin(17 pi/16) -S1 +data8 0xfb14be7fbae58157 , 0x0000bffe // cos(17 pi/16) -C1 + +data8 0xc3ef1535754b168e , 0x0000bffd // sin(18 pi/16) -S2 +data8 0xec835e79946a3146 , 0x0000bffe // cos(18 pi/16) -C2 + +data8 0x8e39d9cd73464364 , 0x0000bffe // sin(19 pi/16) -S3 +data8 0xd4db3148750d181a , 0x0000bffe // cos(19 pi/16) -C3 + +data8 0xb504f333f9de6484 , 0x0000bffe // sin(20 pi/16) -S4 +data8 0xb504f333f9de6484 , 0x0000bffe // cos(20 pi/16) -S4 + + +data8 0xd4db3148750d181a , 0x0000bffe // sin(21 pi/16) -C3 +data8 0x8e39d9cd73464364 , 0x0000bffe // cos(21 pi/16) -S3 + +data8 0xec835e79946a3146 , 0x0000bffe // sin(22 pi/16) -C2 +data8 0xc3ef1535754b168e , 0x0000bffd // cos(22 pi/16) -S2 + +data8 0xfb14be7fbae58157 , 0x0000bffe // sin(23 pi/16) -C1 +data8 0xc7c5c1e34d3055b3 , 0x0000bffc // cos(23 pi/16) -S1 + +data8 0x8000000000000000 , 0x0000bfff // sin(24 pi/16) -C0 +data8 0x0000000000000000 , 0x00000000 // cos(24 pi/16) S0 + + +data8 0xfb14be7fbae58157 , 0x0000bffe // sin(25 pi/16) -C1 +data8 0xc7c5c1e34d3055b3 , 0x00003ffc // cos(25 pi/16) S1 + +data8 0xec835e79946a3146 , 0x0000bffe // sin(26 pi/16) -C2 +data8 0xc3ef1535754b168e , 0x00003ffd // cos(26 pi/16) S2 + +data8 0xd4db3148750d181a , 0x0000bffe // sin(27 pi/16) -C3 +data8 0x8e39d9cd73464364 , 0x00003ffe // cos(27 pi/16) S3 + +data8 0xb504f333f9de6484 , 0x0000bffe // sin(28 pi/16) -S4 +data8 0xb504f333f9de6484 , 0x00003ffe // cos(28 pi/16) S4 + + +data8 0x8e39d9cd73464364 , 0x0000bffe // sin(29 pi/16) -S3 +data8 0xd4db3148750d181a , 0x00003ffe // cos(29 pi/16) C3 + +data8 0xc3ef1535754b168e , 0x0000bffd // sin(30 pi/16) -S2 +data8 0xec835e79946a3146 , 0x00003ffe // cos(30 pi/16) C2 + +data8 0xc7c5c1e34d3055b3 , 0x0000bffc // sin(31 pi/16) -S1 +data8 0xfb14be7fbae58157 , 0x00003ffe // cos(31 pi/16) C1 + +data8 0x0000000000000000 , 0x00000000 // sin(32 pi/16) S0 +data8 0x8000000000000000 , 0x00003fff // cos(32 pi/16) C0 +ASM_SIZE_DIRECTIVE(double_sin_cos_beta_k4) + +.align 32 +.global sin# +.global cos# +#ifdef _LIBC +.global __sin# +.global __cos# +#endif + +//////////////////////////////////////////////////////// +// There are two entry points: sin and cos + + +// If from sin, p8 is true +// If from cos, p9 is true + +.section .text +.proc sin# +#ifdef _LIBC +.proc __sin# +#endif +.align 32 + +sin: +#ifdef _LIBC +__sin: +#endif + +{ .mlx + alloc r32=ar.pfs,1,13,0,0 + movl sind_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A // significand of 16/pi +} +{ .mlx + addl sind_AD_1 = @ltoff(double_sind_pi), gp + movl sind_GR_rshf_2to61 = 0x47b8000000000000 // 1.1000 2^(63+63-2) +} +;; + +{ .mfi + ld8 sind_AD_1 = [sind_AD_1] + fnorm sind_NORM_f8 = f8 + cmp.eq p8,p9 = r0, r0 +} +{ .mib + mov sind_GR_exp_2tom61 = 0xffff-61 // exponent of scaling factor 2^-61 + mov sind_r_sincos = 0x0 + br.cond.sptk L(SIND_SINCOS) +} +;; + +.endp sin +ASM_SIZE_DIRECTIVE(sin) + + +.section .text +.proc cos# +#ifdef _LIBC +.proc __cos# +#endif +.align 32 +cos: +#ifdef _LIBC +__cos: +#endif + +{ .mlx + alloc r32=ar.pfs,1,13,0,0 + movl sind_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A // significand of 16/pi +} +{ .mlx + addl sind_AD_1 = @ltoff(double_sind_pi), gp + movl sind_GR_rshf_2to61 = 0x47b8000000000000 // 1.1000 2^(63+63-2) +} +;; + +{ .mfi + ld8 sind_AD_1 = [sind_AD_1] + fnorm.s1 sind_NORM_f8 = f8 + cmp.eq p9,p8 = r0, r0 +} +{ .mib + mov sind_GR_exp_2tom61 = 0xffff-61 // exponent of scaling factor 2^-61 + mov sind_r_sincos = 0x8 + br.cond.sptk L(SIND_SINCOS) +} +;; + + +//////////////////////////////////////////////////////// +// All entry points end up here. +// If from sin, sind_r_sincos is 0 and p8 is true +// If from cos, sind_r_sincos is 8 = 2^(k-1) and p9 is true +// We add sind_r_sincos to N + +L(SIND_SINCOS): + + +// Form two constants we need +// 16/pi * 2^-2 * 2^63, scaled by 2^61 since we just loaded the significand +// 1.1000...000 * 2^(63+63-2) to right shift int(W) into the low significand +// fcmp used to set denormal, and invalid on snans +{ .mfi + setf.sig sind_SIG_INV_PI_BY_16_2TO61 = sind_GR_sig_inv_pi_by_16 + fcmp.eq.s0 p12,p0=f8,f0 + mov sind_r_17_ones = 0x1ffff +} +{ .mlx + setf.d sind_RSHF_2TO61 = sind_GR_rshf_2to61 + movl sind_GR_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift +} +;; + +// Form another constant +// 2^-61 for scaling Nfloat +// 0x10009 is register_bias + 10. +// So if f8 > 2^10 = Gamma, go to DBX +{ .mfi + setf.exp sind_2TOM61 = sind_GR_exp_2tom61 + fclass.m p13,p0 = f8, 0x23 // Test for x inf + mov sind_exp_limit = 0x10009 +} +;; + +// Load the two pieces of pi/16 +// Form another constant +// 1.1000...000 * 2^63, the right shift constant +{ .mmf + ldfe sind_Pi_by_16_hi = [sind_AD_1],16 + setf.d sind_RSHF = sind_GR_rshf + fclass.m p14,p0 = f8, 0xc3 // Test for x nan +} +;; + +{ .mfi + ldfe sind_Pi_by_16_lo = [sind_AD_1],16 +(p13) frcpa.s0 f8,p12=f0,f0 // force qnan indef for x=inf + addl gr_tmp = -1,r0 +} +{ .mfb + addl sind_AD_beta_table = @ltoff(double_sin_cos_beta_k4), gp + nop.f 999 +(p13) br.ret.spnt b0 ;; // Exit for x=inf +} + +// Start loading P, Q coefficients +// SIN(0) +{ .mfi + ldfpd sind_P4,sind_Q4 = [sind_AD_1],16 +(p8) fclass.m.unc p6,p0 = f8, 0x07 // Test for sin(0) + nop.i 999 +} +{ .mfb + addl sind_AD_beta_table = @ltoff(double_sin_cos_beta_k4), gp +(p14) fma.d f8=f8,f1,f0 // qnan for x=nan +(p14) br.ret.spnt b0 ;; // Exit for x=nan +} + + +// COS(0) +{ .mfi + getf.exp sind_r_signexp = f8 +(p9) fclass.m.unc p7,p0 = f8, 0x07 // Test for sin(0) + nop.i 999 +} +{ .mfi + ld8 sind_AD_beta_table = [sind_AD_beta_table] + nop.f 999 + nop.i 999 ;; +} + +{ .mmb + ldfpd sind_P3,sind_Q3 = [sind_AD_1],16 + setf.sig fp_tmp = gr_tmp // Create constant such that fmpy sets inexact +(p6) br.ret.spnt b0 ;; +} + +{ .mfb + and sind_r_exp = sind_r_17_ones, sind_r_signexp +(p7) fmerge.s f8 = f1,f1 +(p7) br.ret.spnt b0 ;; +} + +// p10 is true if we must call routines to handle larger arguments +// p10 is true if f8 exp is > 0x10009 + +{ .mfi + ldfpd sind_P2,sind_Q2 = [sind_AD_1],16 + nop.f 999 + cmp.ge p10,p0 = sind_r_exp,sind_exp_limit +} +;; + +// sind_W = x * sind_Inv_Pi_by_16 +// Multiply x by scaled 16/pi and add large const to shift integer part of W to +// rightmost bits of significand +{ .mfi + ldfpd sind_P1,sind_Q1 = [sind_AD_1] + fma.s1 sind_W_2TO61_RSH = sind_NORM_f8,sind_SIG_INV_PI_BY_16_2TO61,sind_RSHF_2TO61 + nop.i 999 +} +{ .mbb +(p10) cmp.ne.unc p11,p12=sind_r_sincos,r0 // p11 call __libm_cos_double_dbx + // p12 call __libm_sin_double_dbx +(p11) br.cond.spnt L(COSD_DBX) +(p12) br.cond.spnt L(SIND_DBX) +} +;; + + +// sind_NFLOAT = Round_Int_Nearest(sind_W) +// This is done by scaling back by 2^-61 and subtracting the shift constant +{ .mfi + nop.m 999 + fms.s1 sind_NFLOAT = sind_W_2TO61_RSH,sind_2TOM61,sind_RSHF + nop.i 999 ;; +} + + +// get N = (int)sind_int_Nfloat +{ .mfi + getf.sig sind_GR_n = sind_W_2TO61_RSH + nop.f 999 + nop.i 999 ;; +} + +// Add 2^(k-1) (which is in sind_r_sincos) to N +// sind_r = -sind_Nfloat * sind_Pi_by_16_hi + x +// sind_r = sind_r -sind_Nfloat * sind_Pi_by_16_lo +{ .mfi + add sind_GR_n = sind_GR_n, sind_r_sincos + fnma.s1 sind_r = sind_NFLOAT, sind_Pi_by_16_hi, sind_NORM_f8 + nop.i 999 ;; +} + + +// Get M (least k+1 bits of N) +{ .mmi + and sind_GR_m = 0x1f,sind_GR_n ;; + nop.m 999 + shl sind_GR_32m = sind_GR_m,5 ;; +} + +// Add 32*M to address of sin_cos_beta table +{ .mmi + add sind_AD_2 = sind_GR_32m, sind_AD_beta_table + nop.m 999 + nop.i 999 ;; +} + +{ .mfi + ldfe sind_Sm = [sind_AD_2],16 +(p8) fclass.m.unc p10,p0=f8,0x0b // If sin, note denormal input to set uflow + nop.i 999 ;; +} + +{ .mfi + ldfe sind_Cm = [sind_AD_2] + fnma.s1 sind_r = sind_NFLOAT, sind_Pi_by_16_lo, sind_r + nop.i 999 ;; +} + +// get rsq +{ .mfi + nop.m 999 + fma.s1 sind_rsq = sind_r, sind_r, f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fmpy.s0 fp_tmp = fp_tmp,fp_tmp // fmpy forces inexact flag + nop.i 999 ;; +} + +// form P and Q series +{ .mfi + nop.m 999 + fma.s1 sind_P_temp1 = sind_rsq, sind_P4, sind_P3 + nop.i 999 +} + +{ .mfi + nop.m 999 + fma.s1 sind_Q_temp1 = sind_rsq, sind_Q4, sind_Q3 + nop.i 999 ;; +} + +// get rcube and sm*rsq +{ .mfi + nop.m 999 + fmpy.s1 sind_srsq = sind_Sm,sind_rsq + nop.i 999 +} + +{ .mfi + nop.m 999 + fmpy.s1 sind_rcub = sind_r, sind_rsq + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 sind_Q_temp2 = sind_rsq, sind_Q_temp1, sind_Q2 + nop.i 999 +} + +{ .mfi + nop.m 999 + fma.s1 sind_P_temp2 = sind_rsq, sind_P_temp1, sind_P2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fma.s1 sind_Q = sind_rsq, sind_Q_temp2, sind_Q1 + nop.i 999 +} + +{ .mfi + nop.m 999 + fma.s1 sind_P = sind_rsq, sind_P_temp2, sind_P1 + nop.i 999 ;; +} + +// Get final P and Q +{ .mfi + nop.m 999 + fma.s1 sind_Q = sind_srsq,sind_Q, sind_Sm + nop.i 999 +} + +{ .mfi + nop.m 999 + fma.s1 sind_P = sind_rcub,sind_P, sind_r + nop.i 999 ;; +} + +// If sin(denormal), force inexact to be set +{ .mfi + nop.m 999 +(p10) fmpy.d.s0 fp_tmp = f8,f8 + nop.i 999 ;; +} + +// Final calculation +{ .mfb + nop.m 999 + fma.d f8 = sind_Cm, sind_P, sind_Q + br.ret.sptk b0 ;; +} +.endp cos# +ASM_SIZE_DIRECTIVE(cos#) + + + +.proc __libm_callout_1s +__libm_callout_1s: +L(SIND_DBX): +.prologue +{ .mfi + nop.m 0 + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mib + nop.m 999 + nop.i 999 + br.call.sptk.many b0=__libm_sin_double_dbx# ;; +} +;; + + +{ .mfi + mov gp = GR_SAVE_GP + nop.f 999 + mov b0 = GR_SAVE_B0 +} +;; + +{ .mib + nop.m 999 + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 ;; +} +.endp __libm_callout_1s +ASM_SIZE_DIRECTIVE(__libm_callout_1s) + + +.proc __libm_callout_1c +__libm_callout_1c: +L(COSD_DBX): +.prologue +{ .mfi + nop.m 0 + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mib + nop.m 999 + nop.i 999 + br.call.sptk.many b0=__libm_cos_double_dbx# ;; +} +;; + + +{ .mfi + mov gp = GR_SAVE_GP + nop.f 999 + mov b0 = GR_SAVE_B0 +} +;; + +{ .mib + nop.m 999 + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 ;; +} +.endp __libm_callout_1c +ASM_SIZE_DIRECTIVE(__libm_callout_1c) + + +// ==================================================================== +// ==================================================================== + +// These functions calculate the sin and cos for inputs +// greater than 2^10 +// __libm_sin_double_dbx# and __libm_cos_double_dbx# + +// ********************************************************************* +// ********************************************************************* +// +// Function: Combined sin(x) and cos(x), where +// +// sin(x) = sine(x), for double precision x values +// cos(x) = cosine(x), for double precision x values +// +// ********************************************************************* +// +// Accuracy: Within .7 ulps for 80-bit floating point values +// Very accurate for double precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f32-f99 +// +// General Purpose Registers: +// r32-r43 +// r44-r45 (Used to pass arguments to pi_by_2 reduce routine) +// +// Predicate Registers: p6-p13 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions do not occur +// Underflow exceptions raised when appropriate for sin +// (No specialized error handling for this routine) +// Inexact raised when appropriate by algorithm +// +// sin(SNaN) = QNaN +// sin(QNaN) = QNaN +// sin(inf) = QNaN +// sin(+/-0) = +/-0 +// cos(inf) = QNaN +// cos(SNaN) = QNaN +// cos(QNaN) = QNaN +// cos(0) = 1 +// +// ********************************************************************* +// +// Mathematical Description +// ======================== +// +// The computation of FSIN and FCOS is best handled in one piece of +// code. The main reason is that given any argument Arg, computation +// of trigonometric functions first calculate N and an approximation +// to alpha where +// +// Arg = N pi/2 + alpha, |alpha| <= pi/4. +// +// Since +// +// cos( Arg ) = sin( (N+1) pi/2 + alpha ), +// +// therefore, the code for computing sine will produce cosine as long +// as 1 is added to N immediately after the argument reduction +// process. +// +// Let M = N if sine +// N+1 if cosine. +// +// Now, given +// +// Arg = M pi/2 + alpha, |alpha| <= pi/4, +// +// let I = M mod 4, or I be the two lsb of M when M is represented +// as 2's complement. I = [i_0 i_1]. Then +// +// sin( Arg ) = (-1)^i_0 sin( alpha ) if i_1 = 0, +// = (-1)^i_0 cos( alpha ) if i_1 = 1. +// +// For example: +// if M = -1, I = 11 +// sin ((-pi/2 + alpha) = (-1) cos (alpha) +// if M = 0, I = 00 +// sin (alpha) = sin (alpha) +// if M = 1, I = 01 +// sin (pi/2 + alpha) = cos (alpha) +// if M = 2, I = 10 +// sin (pi + alpha) = (-1) sin (alpha) +// if M = 3, I = 11 +// sin ((3/2)pi + alpha) = (-1) cos (alpha) +// +// The value of alpha is obtained by argument reduction and +// represented by two working precision numbers r and c where +// +// alpha = r + c accurately. +// +// The reduction method is described in a previous write up. +// The argument reduction scheme identifies 4 cases. For Cases 2 +// and 4, because |alpha| is small, sin(r+c) and cos(r+c) can be +// computed very easily by 2 or 3 terms of the Taylor series +// expansion as follows: +// +// Case 2: +// ------- +// +// sin(r + c) = r + c - r^3/6 accurately +// cos(r + c) = 1 - 2^(-67) accurately +// +// Case 4: +// ------- +// +// sin(r + c) = r + c - r^3/6 + r^5/120 accurately +// cos(r + c) = 1 - r^2/2 + r^4/24 accurately +// +// The only cases left are Cases 1 and 3 of the argument reduction +// procedure. These two cases will be merged since after the +// argument is reduced in either cases, we have the reduced argument +// represented as r + c and that the magnitude |r + c| is not small +// enough to allow the usage of a very short approximation. +// +// The required calculation is either +// +// sin(r + c) = sin(r) + correction, or +// cos(r + c) = cos(r) + correction. +// +// Specifically, +// +// sin(r + c) = sin(r) + c sin'(r) + O(c^2) +// = sin(r) + c cos (r) + O(c^2) +// = sin(r) + c(1 - r^2/2) accurately. +// Similarly, +// +// cos(r + c) = cos(r) - c sin(r) + O(c^2) +// = cos(r) - c(r - r^3/6) accurately. +// +// We therefore concentrate on accurately calculating sin(r) and +// cos(r) for a working-precision number r, |r| <= pi/4 to within +// 0.1% or so. +// +// The greatest challenge of this task is that the second terms of +// the Taylor series +// +// r - r^3/3! + r^r/5! - ... +// +// and +// +// 1 - r^2/2! + r^4/4! - ... +// +// are not very small when |r| is close to pi/4 and the rounding +// errors will be a concern if simple polynomial accumulation is +// used. When |r| < 2^-3, however, the second terms will be small +// enough (6 bits or so of right shift) that a normal Horner +// recurrence suffices. Hence there are two cases that we consider +// in the accurate computation of sin(r) and cos(r), |r| <= pi/4. +// +// Case small_r: |r| < 2^(-3) +// -------------------------- +// +// Since Arg = M pi/4 + r + c accurately, and M mod 4 is [i_0 i_1], +// we have +// +// sin(Arg) = (-1)^i_0 * sin(r + c) if i_1 = 0 +// = (-1)^i_0 * cos(r + c) if i_1 = 1 +// +// can be accurately approximated by +// +// sin(Arg) = (-1)^i_0 * [sin(r) + c] if i_1 = 0 +// = (-1)^i_0 * [cos(r) - c*r] if i_1 = 1 +// +// because |r| is small and thus the second terms in the correction +// are unneccessary. +// +// Finally, sin(r) and cos(r) are approximated by polynomials of +// moderate lengths. +// +// sin(r) = r + S_1 r^3 + S_2 r^5 + ... + S_5 r^11 +// cos(r) = 1 + C_1 r^2 + C_2 r^4 + ... + C_5 r^10 +// +// We can make use of predicates to selectively calculate +// sin(r) or cos(r) based on i_1. +// +// Case normal_r: 2^(-3) <= |r| <= pi/4 +// ------------------------------------ +// +// This case is more likely than the previous one if one considers +// r to be uniformly distributed in [-pi/4 pi/4]. Again, +// +// sin(Arg) = (-1)^i_0 * sin(r + c) if i_1 = 0 +// = (-1)^i_0 * cos(r + c) if i_1 = 1. +// +// Because |r| is now larger, we need one extra term in the +// correction. sin(Arg) can be accurately approximated by +// +// sin(Arg) = (-1)^i_0 * [sin(r) + c(1-r^2/2)] if i_1 = 0 +// = (-1)^i_0 * [cos(r) - c*r*(1 - r^2/6)] i_1 = 1. +// +// Finally, sin(r) and cos(r) are approximated by polynomials of +// moderate lengths. +// +// sin(r) = r + PP_1_hi r^3 + PP_1_lo r^3 + +// PP_2 r^5 + ... + PP_8 r^17 +// +// cos(r) = 1 + QQ_1 r^2 + QQ_2 r^4 + ... + QQ_8 r^16 +// +// where PP_1_hi is only about 16 bits long and QQ_1 is -1/2. +// The crux in accurate computation is to calculate +// +// r + PP_1_hi r^3 or 1 + QQ_1 r^2 +// +// accurately as two pieces: U_hi and U_lo. The way to achieve this +// is to obtain r_hi as a 10 sig. bit number that approximates r to +// roughly 8 bits or so of accuracy. (One convenient way is +// +// r_hi := frcpa( frcpa( r ) ).) +// +// This way, +// +// r + PP_1_hi r^3 = r + PP_1_hi r_hi^3 + +// PP_1_hi (r^3 - r_hi^3) +// = [r + PP_1_hi r_hi^3] + +// [PP_1_hi (r - r_hi) +// (r^2 + r_hi r + r_hi^2) ] +// = U_hi + U_lo +// +// Since r_hi is only 10 bit long and PP_1_hi is only 16 bit long, +// PP_1_hi * r_hi^3 is only at most 46 bit long and thus computed +// exactly. Furthermore, r and PP_1_hi r_hi^3 are of opposite sign +// and that there is no more than 8 bit shift off between r and +// PP_1_hi * r_hi^3. Hence the sum, U_hi, is representable and thus +// calculated without any error. Finally, the fact that +// +// |U_lo| <= 2^(-8) |U_hi| +// +// says that U_hi + U_lo is approximating r + PP_1_hi r^3 to roughly +// 8 extra bits of accuracy. +// +// Similarly, +// +// 1 + QQ_1 r^2 = [1 + QQ_1 r_hi^2] + +// [QQ_1 (r - r_hi)(r + r_hi)] +// = U_hi + U_lo. +// +// Summarizing, we calculate r_hi = frcpa( frcpa( r ) ). +// +// If i_1 = 0, then +// +// U_hi := r + PP_1_hi * r_hi^3 +// U_lo := PP_1_hi * (r - r_hi) * (r^2 + r*r_hi + r_hi^2) +// poly := PP_1_lo r^3 + PP_2 r^5 + ... + PP_8 r^17 +// correction := c * ( 1 + C_1 r^2 ) +// +// Else ...i_1 = 1 +// +// U_hi := 1 + QQ_1 * r_hi * r_hi +// U_lo := QQ_1 * (r - r_hi) * (r + r_hi) +// poly := QQ_2 * r^4 + QQ_3 * r^6 + ... + QQ_8 r^16 +// correction := -c * r * (1 + S_1 * r^2) +// +// End +// +// Finally, +// +// V := poly + ( U_lo + correction ) +// +// / U_hi + V if i_0 = 0 +// result := | +// \ (-U_hi) - V if i_0 = 1 +// +// It is important that in the last step, negation of U_hi is +// performed prior to the subtraction which is to be performed in +// the user-set rounding mode. +// +// +// Algorithmic Description +// ======================= +// +// The argument reduction algorithm is tightly integrated into FSIN +// and FCOS which share the same code. The following is complete and +// self-contained. The argument reduction description given +// previously is repeated below. +// +// +// Step 0. Initialization. +// +// If FSIN is invoked, set N_inc := 0; else if FCOS is invoked, +// set N_inc := 1. +// +// Step 1. Check for exceptional and special cases. +// +// * If Arg is +-0, +-inf, NaN, NaT, go to Step 10 for special +// handling. +// * If |Arg| < 2^24, go to Step 2 for reduction of moderate +// arguments. This is the most likely case. +// * If |Arg| < 2^63, go to Step 8 for pre-reduction of large +// arguments. +// * If |Arg| >= 2^63, go to Step 10 for special handling. +// +// Step 2. Reduction of moderate arguments. +// +// If |Arg| < pi/4 ...quick branch +// N_fix := N_inc (integer) +// r := Arg +// c := 0.0 +// Branch to Step 4, Case_1_complete +// Else ...cf. argument reduction +// N := Arg * two_by_PI (fp) +// N_fix := fcvt.fx( N ) (int) +// N := fcvt.xf( N_fix ) +// N_fix := N_fix + N_inc +// s := Arg - N * P_1 (first piece of pi/2) +// w := -N * P_2 (second piece of pi/2) +// +// If |s| >= 2^(-33) +// go to Step 3, Case_1_reduce +// Else +// go to Step 7, Case_2_reduce +// Endif +// Endif +// +// Step 3. Case_1_reduce. +// +// r := s + w +// c := (s - r) + w ...observe order +// +// Step 4. Case_1_complete +// +// ...At this point, the reduced argument alpha is +// ...accurately represented as r + c. +// If |r| < 2^(-3), go to Step 6, small_r. +// +// Step 5. Normal_r. +// +// Let [i_0 i_1] by the 2 lsb of N_fix. +// FR_rsq := r * r +// r_hi := frcpa( frcpa( r ) ) +// r_lo := r - r_hi +// +// If i_1 = 0, then +// poly := r*FR_rsq*(PP_1_lo + FR_rsq*(PP_2 + ... FR_rsq*PP_8)) +// U_hi := r + PP_1_hi*r_hi*r_hi*r_hi ...any order +// U_lo := PP_1_hi*r_lo*(r*r + r*r_hi + r_hi*r_hi) +// correction := c + c*C_1*FR_rsq ...any order +// Else +// poly := FR_rsq*FR_rsq*(QQ_2 + FR_rsq*(QQ_3 + ... + FR_rsq*QQ_8)) +// U_hi := 1 + QQ_1 * r_hi * r_hi ...any order +// U_lo := QQ_1 * r_lo * (r + r_hi) +// correction := -c*(r + S_1*FR_rsq*r) ...any order +// Endif +// +// V := poly + (U_lo + correction) ...observe order +// +// result := (i_0 == 0? 1.0 : -1.0) +// +// Last instruction in user-set rounding mode +// +// result := (i_0 == 0? result*U_hi + V : +// result*U_hi - V) +// +// Return +// +// Step 6. Small_r. +// +// ...Use flush to zero mode without causing exception +// Let [i_0 i_1] be the two lsb of N_fix. +// +// FR_rsq := r * r +// +// If i_1 = 0 then +// z := FR_rsq*FR_rsq; z := FR_rsq*z *r +// poly_lo := S_3 + FR_rsq*(S_4 + FR_rsq*S_5) +// poly_hi := r*FR_rsq*(S_1 + FR_rsq*S_2) +// correction := c +// result := r +// Else +// z := FR_rsq*FR_rsq; z := FR_rsq*z +// poly_lo := C_3 + FR_rsq*(C_4 + FR_rsq*C_5) +// poly_hi := FR_rsq*(C_1 + FR_rsq*C_2) +// correction := -c*r +// result := 1 +// Endif +// +// poly := poly_hi + (z * poly_lo + correction) +// +// If i_0 = 1, result := -result +// +// Last operation. Perform in user-set rounding mode +// +// result := (i_0 == 0? result + poly : +// result - poly ) +// Return +// +// Step 7. Case_2_reduce. +// +// ...Refer to the write up for argument reduction for +// ...rationale. The reduction algorithm below is taken from +// ...argument reduction description and integrated this. +// +// w := N*P_3 +// U_1 := N*P_2 + w ...FMA +// U_2 := (N*P_2 - U_1) + w ...2 FMA +// ...U_1 + U_2 is N*(P_2+P_3) accurately +// +// r := s - U_1 +// c := ( (s - r) - U_1 ) - U_2 +// +// ...The mathematical sum r + c approximates the reduced +// ...argument accurately. Note that although compared to +// ...Case 1, this case requires much more work to reduce +// ...the argument, the subsequent calculation needed for +// ...any of the trigonometric function is very little because +// ...|alpha| < 1.01*2^(-33) and thus two terms of the +// ...Taylor series expansion suffices. +// +// If i_1 = 0 then +// poly := c + S_1 * r * r * r ...any order +// result := r +// Else +// poly := -2^(-67) +// result := 1.0 +// Endif +// +// If i_0 = 1, result := -result +// +// Last operation. Perform in user-set rounding mode +// +// result := (i_0 == 0? result + poly : +// result - poly ) +// +// Return +// +// +// Step 8. Pre-reduction of large arguments. +// +// ...Again, the following reduction procedure was described +// ...in the separate write up for argument reduction, which +// ...is tightly integrated here. + +// N_0 := Arg * Inv_P_0 +// N_0_fix := fcvt.fx( N_0 ) +// N_0 := fcvt.xf( N_0_fix) + +// Arg' := Arg - N_0 * P_0 +// w := N_0 * d_1 +// N := Arg' * two_by_PI +// N_fix := fcvt.fx( N ) +// N := fcvt.xf( N_fix ) +// N_fix := N_fix + N_inc +// +// s := Arg' - N * P_1 +// w := w - N * P_2 +// +// If |s| >= 2^(-14) +// go to Step 3 +// Else +// go to Step 9 +// Endif +// +// Step 9. Case_4_reduce. +// +// ...first obtain N_0*d_1 and -N*P_2 accurately +// U_hi := N_0 * d_1 V_hi := -N*P_2 +// U_lo := N_0 * d_1 - U_hi V_lo := -N*P_2 - U_hi ...FMAs +// +// ...compute the contribution from N_0*d_1 and -N*P_3 +// w := -N*P_3 +// w := w + N_0*d_2 +// t := U_lo + V_lo + w ...any order +// +// ...at this point, the mathematical value +// ...s + U_hi + V_hi + t approximates the true reduced argument +// ...accurately. Just need to compute this accurately. +// +// ...Calculate U_hi + V_hi accurately: +// A := U_hi + V_hi +// if |U_hi| >= |V_hi| then +// a := (U_hi - A) + V_hi +// else +// a := (V_hi - A) + U_hi +// endif +// ...order in computing "a" must be observed. This branch is +// ...best implemented by predicates. +// ...A + a is U_hi + V_hi accurately. Moreover, "a" is +// ...much smaller than A: |a| <= (1/2)ulp(A). +// +// ...Just need to calculate s + A + a + t +// C_hi := s + A t := t + a +// C_lo := (s - C_hi) + A +// C_lo := C_lo + t +// +// ...Final steps for reduction +// r := C_hi + C_lo +// c := (C_hi - r) + C_lo +// +// ...At this point, we have r and c +// ...And all we need is a couple of terms of the corresponding +// ...Taylor series. +// +// If i_1 = 0 +// poly := c + r*FR_rsq*(S_1 + FR_rsq*S_2) +// result := r +// Else +// poly := FR_rsq*(C_1 + FR_rsq*C_2) +// result := 1 +// Endif +// +// If i_0 = 1, result := -result +// +// Last operation. Perform in user-set rounding mode +// +// result := (i_0 == 0? result + poly : +// result - poly ) +// Return +// +// Large Arguments: For arguments above 2**63, a Payne-Hanek +// style argument reduction is used and pi_by_2 reduce is called. +// + + +#ifdef _LIBC +.rodata +#else +.data +#endif +.align 64 + +FSINCOS_CONSTANTS: +ASM_TYPE_DIRECTIVE(FSINCOS_CONSTANTS,@object) +data4 0x4B800000, 0xCB800000, 0x00000000,0x00000000 // two**24, -two**24 +data4 0x4E44152A, 0xA2F9836E, 0x00003FFE,0x00000000 // Inv_pi_by_2 +data4 0xCE81B9F1, 0xC84D32B0, 0x00004016,0x00000000 // P_0 +data4 0x2168C235, 0xC90FDAA2, 0x00003FFF,0x00000000 // P_1 +data4 0xFC8F8CBB, 0xECE675D1, 0x0000BFBD,0x00000000 // P_2 +data4 0xACC19C60, 0xB7ED8FBB, 0x0000BF7C,0x00000000 // P_3 +data4 0x5F000000, 0xDF000000, 0x00000000,0x00000000 // two_to_63, -two_to_63 +data4 0x6EC6B45A, 0xA397E504, 0x00003FE7,0x00000000 // Inv_P_0 +data4 0xDBD171A1, 0x8D848E89, 0x0000BFBF,0x00000000 // d_1 +data4 0x18A66F8E, 0xD5394C36, 0x0000BF7C,0x00000000 // d_2 +data4 0x2168C234, 0xC90FDAA2, 0x00003FFE,0x00000000 // pi_by_4 +data4 0x2168C234, 0xC90FDAA2, 0x0000BFFE,0x00000000 // neg_pi_by_4 +data4 0x3E000000, 0xBE000000, 0x00000000,0x00000000 // two**-3, -two**-3 +data4 0x2F000000, 0xAF000000, 0x9E000000,0x00000000 // two**-33, -two**-33, -two**-67 +data4 0xA21C0BC9, 0xCC8ABEBC, 0x00003FCE,0x00000000 // PP_8 +data4 0x720221DA, 0xD7468A05, 0x0000BFD6,0x00000000 // PP_7 +data4 0x640AD517, 0xB092382F, 0x00003FDE,0x00000000 // PP_6 +data4 0xD1EB75A4, 0xD7322B47, 0x0000BFE5,0x00000000 // PP_5 +data4 0xFFFFFFFE, 0xFFFFFFFF, 0x0000BFFD,0x00000000 // C_1 +data4 0x00000000, 0xAAAA0000, 0x0000BFFC,0x00000000 // PP_1_hi +data4 0xBAF69EEA, 0xB8EF1D2A, 0x00003FEC,0x00000000 // PP_4 +data4 0x0D03BB69, 0xD00D00D0, 0x0000BFF2,0x00000000 // PP_3 +data4 0x88888962, 0x88888888, 0x00003FF8,0x00000000 // PP_2 +data4 0xAAAB0000, 0xAAAAAAAA, 0x0000BFEC,0x00000000 // PP_1_lo +data4 0xC2B0FE52, 0xD56232EF, 0x00003FD2,0x00000000 // QQ_8 +data4 0x2B48DCA6, 0xC9C99ABA, 0x0000BFDA,0x00000000 // QQ_7 +data4 0x9C716658, 0x8F76C650, 0x00003FE2,0x00000000 // QQ_6 +data4 0xFDA8D0FC, 0x93F27DBA, 0x0000BFE9,0x00000000 // QQ_5 +data4 0xAAAAAAAA, 0xAAAAAAAA, 0x0000BFFC,0x00000000 // S_1 +data4 0x00000000, 0x80000000, 0x0000BFFE,0x00000000 // QQ_1 +data4 0x0C6E5041, 0xD00D00D0, 0x00003FEF,0x00000000 // QQ_4 +data4 0x0B607F60, 0xB60B60B6, 0x0000BFF5,0x00000000 // QQ_3 +data4 0xAAAAAA9B, 0xAAAAAAAA, 0x00003FFA,0x00000000 // QQ_2 +data4 0xFFFFFFFE, 0xFFFFFFFF, 0x0000BFFD,0x00000000 // C_1 +data4 0xAAAA719F, 0xAAAAAAAA, 0x00003FFA,0x00000000 // C_2 +data4 0x0356F994, 0xB60B60B6, 0x0000BFF5,0x00000000 // C_3 +data4 0xB2385EA9, 0xD00CFFD5, 0x00003FEF,0x00000000 // C_4 +data4 0x292A14CD, 0x93E4BD18, 0x0000BFE9,0x00000000 // C_5 +data4 0xAAAAAAAA, 0xAAAAAAAA, 0x0000BFFC,0x00000000 // S_1 +data4 0x888868DB, 0x88888888, 0x00003FF8,0x00000000 // S_2 +data4 0x055EFD4B, 0xD00D00D0, 0x0000BFF2,0x00000000 // S_3 +data4 0x839730B9, 0xB8EF1C5D, 0x00003FEC,0x00000000 // S_4 +data4 0xE5B3F492, 0xD71EA3A4, 0x0000BFE5,0x00000000 // S_5 +data4 0x38800000, 0xB8800000, 0x00000000 // two**-14, -two**-14 +ASM_SIZE_DIRECTIVE(FSINCOS_CONSTANTS) + +FR_Input_X = f8 +FR_Neg_Two_to_M3 = f32 +FR_Two_to_63 = f32 +FR_Two_to_24 = f33 +FR_Pi_by_4 = f33 +FR_Two_to_M14 = f34 +FR_Two_to_M33 = f35 +FR_Neg_Two_to_24 = f36 +FR_Neg_Pi_by_4 = f36 +FR_Neg_Two_to_M14 = f37 +FR_Neg_Two_to_M33 = f38 +FR_Neg_Two_to_M67 = f39 +FR_Inv_pi_by_2 = f40 +FR_N_float = f41 +FR_N_fix = f42 +FR_P_1 = f43 +FR_P_2 = f44 +FR_P_3 = f45 +FR_s = f46 +FR_w = f47 +FR_c = f48 +FR_r = f49 +FR_Z = f50 +FR_A = f51 +FR_a = f52 +FR_t = f53 +FR_U_1 = f54 +FR_U_2 = f55 +FR_C_1 = f56 +FR_C_2 = f57 +FR_C_3 = f58 +FR_C_4 = f59 +FR_C_5 = f60 +FR_S_1 = f61 +FR_S_2 = f62 +FR_S_3 = f63 +FR_S_4 = f64 +FR_S_5 = f65 +FR_poly_hi = f66 +FR_poly_lo = f67 +FR_r_hi = f68 +FR_r_lo = f69 +FR_rsq = f70 +FR_r_cubed = f71 +FR_C_hi = f72 +FR_N_0 = f73 +FR_d_1 = f74 +FR_V = f75 +FR_V_hi = f75 +FR_V_lo = f76 +FR_U_hi = f77 +FR_U_lo = f78 +FR_U_hiabs = f79 +FR_V_hiabs = f80 +FR_PP_8 = f81 +FR_QQ_8 = f81 +FR_PP_7 = f82 +FR_QQ_7 = f82 +FR_PP_6 = f83 +FR_QQ_6 = f83 +FR_PP_5 = f84 +FR_QQ_5 = f84 +FR_PP_4 = f85 +FR_QQ_4 = f85 +FR_PP_3 = f86 +FR_QQ_3 = f86 +FR_PP_2 = f87 +FR_QQ_2 = f87 +FR_QQ_1 = f88 +FR_N_0_fix = f89 +FR_Inv_P_0 = f90 +FR_corr = f91 +FR_poly = f92 +FR_d_2 = f93 +FR_Two_to_M3 = f94 +FR_Neg_Two_to_63 = f94 +FR_P_0 = f95 +FR_C_lo = f96 +FR_PP_1 = f97 +FR_PP_1_lo = f98 +FR_ArgPrime = f99 + +GR_Table_Base = r32 +GR_Table_Base1 = r33 +GR_i_0 = r34 +GR_i_1 = r35 +GR_N_Inc = r36 +GR_Sin_or_Cos = r37 + +GR_SAVE_B0 = r39 +GR_SAVE_GP = r40 +GR_SAVE_PFS = r41 + +.section .text +.proc __libm_sin_double_dbx# +.align 64 +__libm_sin_double_dbx: + +{ .mlx +alloc GR_Table_Base = ar.pfs,0,12,2,0 + movl GR_Sin_or_Cos = 0x0 ;; +} + +{ .mmi + nop.m 999 + addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +{ .mib + nop.m 999 + nop.i 999 + br.cond.sptk L(SINCOS_CONTINUE) ;; +} + +.endp __libm_sin_double_dbx# +ASM_SIZE_DIRECTIVE(__libm_sin_double_dbx) + +.section .text +.proc __libm_cos_double_dbx# +__libm_cos_double_dbx: + +{ .mlx +alloc GR_Table_Base= ar.pfs,0,12,2,0 + movl GR_Sin_or_Cos = 0x1 ;; +} + +{ .mmi + nop.m 999 + addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + +// +// Load Table Address +// +L(SINCOS_CONTINUE): + +{ .mmi + add GR_Table_Base1 = 96, GR_Table_Base + ldfs FR_Two_to_24 = [GR_Table_Base], 4 + nop.i 999 +} +;; + +{ .mmi + nop.m 999 +// +// Load 2**24, load 2**63. +// + ldfs FR_Neg_Two_to_24 = [GR_Table_Base], 12 + mov r41 = ar.pfs ;; +} + +{ .mfi + ldfs FR_Two_to_63 = [GR_Table_Base1], 4 +// +// Check for unnormals - unsupported operands. We do not want +// to generate denormal exception +// Check for NatVals, QNaNs, SNaNs, +/-Infs +// Check for EM unsupporteds +// Check for Zero +// + fclass.m.unc p6, p8 = FR_Input_X, 0x1E3 + mov r40 = gp ;; +} + +{ .mfi + nop.m 999 + fclass.nm.unc p8, p0 = FR_Input_X, 0x1FF +// GR_Sin_or_Cos denotes + mov r39 = b0 +} + +{ .mfb + ldfs FR_Neg_Two_to_63 = [GR_Table_Base1], 12 + fclass.m.unc p10, p0 = FR_Input_X, 0x007 +(p6) br.cond.spnt L(SINCOS_SPECIAL) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(SINCOS_SPECIAL) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Branch if +/- NaN, Inf. +// Load -2**24, load -2**63. +// +(p10) br.cond.spnt L(SINCOS_ZERO) ;; +} + +{ .mmb + ldfe FR_Inv_pi_by_2 = [GR_Table_Base], 16 + ldfe FR_Inv_P_0 = [GR_Table_Base1], 16 + nop.b 999 ;; +} + +{ .mmb + nop.m 999 + ldfe FR_d_1 = [GR_Table_Base1], 16 + nop.b 999 ;; +} +// +// Raise possible denormal operand flag with useful fcmp +// Is x <= -2**63 +// Load Inv_P_0 for pre-reduction +// Load Inv_pi_by_2 +// + +{ .mmb + ldfe FR_P_0 = [GR_Table_Base], 16 + ldfe FR_d_2 = [GR_Table_Base1], 16 + nop.b 999 ;; +} +// +// Load P_0 +// Load d_1 +// Is x >= 2**63 +// Is x <= -2**24? +// + +{ .mmi + ldfe FR_P_1 = [GR_Table_Base], 16 ;; +// +// Load P_1 +// Load d_2 +// Is x >= 2**24? +// + ldfe FR_P_2 = [GR_Table_Base], 16 + nop.i 999 ;; +} + +{ .mmf + nop.m 999 + ldfe FR_P_3 = [GR_Table_Base], 16 + fcmp.le.unc.s1 p7, p8 = FR_Input_X, FR_Neg_Two_to_24 +} + +{ .mfi + nop.m 999 +// +// Branch if +/- zero. +// Decide about the paths to take: +// If -2**24 < FR_Input_X < 2**24 - CASE 1 OR 2 +// OTHERWISE - CASE 3 OR 4 +// + fcmp.le.unc.s0 p10, p11 = FR_Input_X, FR_Neg_Two_to_63 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fcmp.ge.s1 p7, p0 = FR_Input_X, FR_Two_to_24 + nop.i 999 +} + +{ .mfi + ldfe FR_Pi_by_4 = [GR_Table_Base1], 16 +(p11) fcmp.ge.s1 p10, p0 = FR_Input_X, FR_Two_to_63 + nop.i 999 ;; +} + +{ .mmi + ldfe FR_Neg_Pi_by_4 = [GR_Table_Base1], 16 ;; + ldfs FR_Two_to_M3 = [GR_Table_Base1], 4 + nop.i 999 ;; +} + +{ .mib + ldfs FR_Neg_Two_to_M3 = [GR_Table_Base1], 12 + nop.i 999 +// +// Load P_2 +// Load P_3 +// Load pi_by_4 +// Load neg_pi_by_4 +// Load 2**(-3) +// Load -2**(-3). +// +(p10) br.cond.spnt L(SINCOS_ARG_TOO_LARGE) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Branch out if x >= 2**63. Use Payne-Hanek Reduction +// +(p7) br.cond.spnt L(SINCOS_LARGER_ARG) ;; +} + +{ .mfi + nop.m 999 +// +// Branch if Arg <= -2**24 or Arg >= 2**24 and use pre-reduction. +// + fma.s1 FR_N_float = FR_Input_X, FR_Inv_pi_by_2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.lt.unc.s1 p6, p7 = FR_Input_X, FR_Pi_by_4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Select the case when |Arg| < pi/4 +// Else Select the case when |Arg| >= pi/4 +// + fcvt.fx.s1 FR_N_fix = FR_N_float + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N = Arg * 2/pi +// Check if Arg < pi/4 +// +(p6) fcmp.gt.s1 p6, p7 = FR_Input_X, FR_Neg_Pi_by_4 + nop.i 999 ;; +} +// +// Case 2: Convert integer N_fix back to normalized floating-point value. +// Case 1: p8 is only affected when p6 is set +// + +{ .mfi +(p7) ldfs FR_Two_to_M33 = [GR_Table_Base1], 4 +// +// Grab the integer part of N and call it N_fix +// +(p6) fmerge.se FR_r = FR_Input_X, FR_Input_X +// If |x| < pi/4, r = x and c = 0 +// lf |x| < pi/4, is x < 2**(-3). +// r = Arg +// c = 0 +(p6) mov GR_N_Inc = GR_Sin_or_Cos ;; +} + +{ .mmf + nop.m 999 +(p7) ldfs FR_Neg_Two_to_M33 = [GR_Table_Base1], 4 +(p6) fmerge.se FR_c = f0, f0 +} + +{ .mfi + nop.m 999 +(p6) fcmp.lt.unc.s1 p8, p9 = FR_Input_X, FR_Two_to_M3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// lf |x| < pi/4, is -2**(-3)< x < 2**(-3) - set p8. +// If |x| >= pi/4, +// Create the right N for |x| < pi/4 and otherwise +// Case 2: Place integer part of N in GP register +// +(p7) fcvt.xf FR_N_float = FR_N_fix + nop.i 999 ;; +} + +{ .mmf + nop.m 999 +(p7) getf.sig GR_N_Inc = FR_N_fix +(p8) fcmp.gt.s1 p8, p0 = FR_Input_X, FR_Neg_Two_to_M3 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Load 2**(-33), -2**(-33) +// +(p8) br.cond.spnt L(SINCOS_SMALL_R) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.sptk L(SINCOS_NORMAL_R) ;; +} +// +// if |x| < pi/4, branch based on |x| < 2**(-3) or otherwise. +// +// +// In this branch, |x| >= pi/4. +// + +{ .mfi + ldfs FR_Neg_Two_to_M67 = [GR_Table_Base1], 8 +// +// Load -2**(-67) +// + fnma.s1 FR_s = FR_N_float, FR_P_1, FR_Input_X +// +// w = N * P_2 +// s = -N * P_1 + Arg +// + add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos +} + +{ .mfi + nop.m 999 + fma.s1 FR_w = FR_N_float, FR_P_2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Adjust N_fix by N_inc to determine whether sine or +// cosine is being calculated +// + fcmp.lt.unc.s1 p7, p6 = FR_s, FR_Two_to_M33 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fcmp.gt.s1 p7, p6 = FR_s, FR_Neg_Two_to_M33 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// Remember x >= pi/4. +// Is s <= -2**(-33) or s >= 2**(-33) (p6) +// or -2**(-33) < s < 2**(-33) (p7) +(p6) fms.s1 FR_r = FR_s, f1, FR_w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fma.s1 FR_w = FR_N_float, FR_P_3, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 FR_U_1 = FR_N_float, FR_P_2, FR_w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p6) fms.s1 FR_c = FR_s, f1, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For big s: r = s - w: No futher reduction is necessary +// For small s: w = N * P_3 (change sign) More reduction +// +(p6) fcmp.lt.unc.s1 p8, p9 = FR_r, FR_Two_to_M3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fcmp.gt.s1 p8, p9 = FR_r, FR_Neg_Two_to_M3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fms.s1 FR_r = FR_s, f1, FR_U_1 + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// For big s: Is |r| < 2**(-3)? +// For big s: c = S - r +// For small s: U_1 = N * P_2 + w +// +// If p8 is set, prepare to branch to Small_R. +// If p9 is set, prepare to branch to Normal_R. +// For big s, r is complete here. +// +(p6) fms.s1 FR_c = FR_c, f1, FR_w +// +// For big s: c = c + w (w has not been negated.) +// For small s: r = S - U_1 +// +(p8) br.cond.spnt L(SINCOS_SMALL_R) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.sptk L(SINCOS_NORMAL_R) ;; +} + +{ .mfi +(p7) add GR_Table_Base1 = 224, GR_Table_Base1 +// +// Branch to SINCOS_SMALL_R or SINCOS_NORMAL_R +// +(p7) fms.s1 FR_U_2 = FR_N_float, FR_P_2, FR_U_1 +// +// c = S - U_1 +// r = S_1 * r +// +// +(p7) extr.u GR_i_1 = GR_N_Inc, 0, 1 +} + +{ .mmi + nop.m 999 ;; +// +// Get [i_0,i_1] - two lsb of N_fix_gr. +// Do dummy fmpy so inexact is always set. +// +(p7) cmp.eq.unc p9, p10 = 0x0, GR_i_1 +(p7) extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} +// +// For small s: U_2 = N * P_2 - U_1 +// S_1 stored constant - grab the one stored with the +// coefficients. +// + +{ .mfi +(p7) ldfe FR_S_1 = [GR_Table_Base1], 16 +// +// Check if i_1 and i_0 != 0 +// +(p10) fma.s1 FR_poly = f0, f1, FR_Neg_Two_to_M67 +(p7) cmp.eq.unc p11, p12 = 0x0, GR_i_0 ;; +} + +{ .mfi + nop.m 999 +(p7) fms.s1 FR_s = FR_s, f1, FR_r + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// S = S - r +// U_2 = U_2 + w +// load S_1 +// +(p7) fma.s1 FR_rsq = FR_r, FR_r, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.s1 FR_U_2 = FR_U_2, f1, FR_w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fmerge.se FR_Input_X = FR_r, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_Input_X = f0, f1, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// FR_rsq = r * r +// Save r as the result. +// +(p7) fms.s1 FR_c = FR_s, f1, FR_U_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if ( i_1 ==0) poly = c + S_1*r*r*r +// else Result = 1 +// +(p12) fnma.s1 FR_Input_X = FR_Input_X, f1, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fma.s1 FR_r = FR_S_1, FR_r, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fma.d.s0 FR_S_1 = FR_S_1, FR_S_1, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// If i_1 != 0, poly = 2**(-67) +// +(p7) fms.s1 FR_c = FR_c, f1, FR_U_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// c = c - U_2 +// +(p9) fma.s1 FR_poly = FR_r, FR_rsq, FR_c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// i_0 != 0, so Result = -Result +// +(p11) fma.d.s0 FR_Input_X = FR_Input_X, f1, FR_poly + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p12) fms.d.s0 FR_Input_X = FR_Input_X, f1, FR_poly +// +// if (i_0 == 0), Result = Result + poly +// else Result = Result - poly +// + br.ret.sptk b0 ;; +} +L(SINCOS_LARGER_ARG): + +{ .mfi + nop.m 999 + fma.s1 FR_N_0 = FR_Input_X, FR_Inv_P_0, f0 + nop.i 999 +} +;; + +// This path for argument > 2*24 +// Adjust table_ptr1 to beginning of table. +// + +{ .mmi + nop.m 999 + addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +// +// Point to 2*-14 +// N_0 = Arg * Inv_P_0 +// + +{ .mmi + add GR_Table_Base = 688, GR_Table_Base ;; + ldfs FR_Two_to_M14 = [GR_Table_Base], 4 + nop.i 999 ;; +} + +{ .mfi + ldfs FR_Neg_Two_to_M14 = [GR_Table_Base], 0 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Load values 2**(-14) and -2**(-14) +// + fcvt.fx.s1 FR_N_0_fix = FR_N_0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N_0_fix = integer part of N_0 +// + fcvt.xf FR_N_0 = FR_N_0_fix + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Make N_0 the integer part +// + fnma.s1 FR_ArgPrime = FR_N_0, FR_P_0, FR_Input_X + nop.i 999 +} + +{ .mfi + nop.m 999 + fma.s1 FR_w = FR_N_0, FR_d_1, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Arg' = -N_0 * P_0 + Arg +// w = N_0 * d_1 +// + fma.s1 FR_N_float = FR_ArgPrime, FR_Inv_pi_by_2, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N = A' * 2/pi +// + fcvt.fx.s1 FR_N_fix = FR_N_float + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N_fix is the integer part +// + fcvt.xf FR_N_float = FR_N_fix + nop.i 999 ;; +} + +{ .mfi + getf.sig GR_N_Inc = FR_N_fix + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; + add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos ;; +} + +{ .mfi + nop.m 999 +// +// N is the integer part of the reduced-reduced argument. +// Put the integer in a GP register +// + fnma.s1 FR_s = FR_N_float, FR_P_1, FR_ArgPrime + nop.i 999 +} + +{ .mfi + nop.m 999 + fnma.s1 FR_w = FR_N_float, FR_P_2, FR_w + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// s = -N*P_1 + Arg' +// w = -N*P_2 + w +// N_fix_gr = N_fix_gr + N_inc +// + fcmp.lt.unc.s1 p9, p8 = FR_s, FR_Two_to_M14 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fcmp.gt.s1 p9, p8 = FR_s, FR_Neg_Two_to_M14 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For |s| > 2**(-14) r = S + w (r complete) +// Else U_hi = N_0 * d_1 +// +(p9) fma.s1 FR_V_hi = FR_N_float, FR_P_2, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_hi = FR_N_0, FR_d_1, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Either S <= -2**(-14) or S >= 2**(-14) +// or -2**(-14) < s < 2**(-14) +// +(p8) fma.s1 FR_r = FR_s, f1, FR_w + nop.i 999 +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_w = FR_N_float, FR_P_3, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// We need abs of both U_hi and V_hi - don't +// worry about switched sign of V_hi. +// +(p9) fms.s1 FR_A = FR_U_hi, f1, FR_V_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Big s: finish up c = (S - r) + w (c complete) +// Case 4: A = U_hi + V_hi +// Note: Worry about switched sign of V_hi, so subtract instead of add. +// +(p9) fnma.s1 FR_V_lo = FR_N_float, FR_P_2, FR_V_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fms.s1 FR_U_lo = FR_N_0, FR_d_1, FR_U_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fmerge.s FR_V_hiabs = f0, FR_V_hi + nop.i 999 +} + +{ .mfi + nop.m 999 +// For big s: c = S - r +// For small s do more work: U_lo = N_0 * d_1 - U_hi +// +(p9) fmerge.s FR_U_hiabs = f0, FR_U_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For big s: Is |r| < 2**(-3) +// For big s: if p12 set, prepare to branch to Small_R. +// For big s: If p13 set, prepare to branch to Normal_R. +// +(p8) fms.s1 FR_c = FR_s, f1, FR_r + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// For small S: V_hi = N * P_2 +// w = N * P_3 +// Note the product does not include the (-) as in the writeup +// so (-) missing for V_hi and w. +// +(p8) fcmp.lt.unc.s1 p12, p13 = FR_r, FR_Two_to_M3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fcmp.gt.s1 p12, p13 = FR_r, FR_Neg_Two_to_M3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p8) fma.s1 FR_c = FR_c, f1, FR_w + nop.i 999 +} + +{ .mfb + nop.m 999 +(p9) fms.s1 FR_w = FR_N_0, FR_d_2, FR_w +(p12) br.cond.spnt L(SINCOS_SMALL_R) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.sptk L(SINCOS_NORMAL_R) ;; +} + +{ .mfi + nop.m 999 +// +// Big s: Vector off when |r| < 2**(-3). Recall that p8 will be true. +// The remaining stuff is for Case 4. +// Small s: V_lo = N * P_2 + U_hi (U_hi is in place of V_hi in writeup) +// Note: the (-) is still missing for V_lo. +// Small s: w = w + N_0 * d_2 +// Note: the (-) is now incorporated in w. +// +(p9) fcmp.ge.unc.s1 p10, p11 = FR_U_hiabs, FR_V_hiabs + extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; +} + +{ .mfi + nop.m 999 +// +// C_hi = S + A +// +(p9) fma.s1 FR_t = FR_U_lo, f1, FR_V_lo + extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} + +{ .mfi + nop.m 999 +// +// t = U_lo + V_lo +// +// +(p10) fms.s1 FR_a = FR_U_hi, f1, FR_A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fma.s1 FR_a = FR_V_hi, f1, FR_A + nop.i 999 +} +;; + +{ .mmi + nop.m 999 + addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi + add GR_Table_Base = 528, GR_Table_Base +// +// Is U_hiabs >= V_hiabs? +// +(p9) fma.s1 FR_C_hi = FR_s, f1, FR_A + nop.i 999 ;; +} + +{ .mmi + ldfe FR_C_1 = [GR_Table_Base], 16 ;; + ldfe FR_C_2 = [GR_Table_Base], 64 + nop.i 999 ;; +} + +{ .mmf + nop.m 999 +// +// c = c + C_lo finished. +// Load C_2 +// + ldfe FR_S_1 = [GR_Table_Base], 16 +// +// C_lo = S - C_hi +// + fma.s1 FR_t = FR_t, f1, FR_w ;; +} +// +// r and c have been computed. +// Make sure ftz mode is set - should be automatic when using wre +// |r| < 2**(-3) +// Get [i_0,i_1] - two lsb of N_fix. +// Load S_1 +// + +{ .mfi + ldfe FR_S_2 = [GR_Table_Base], 64 +// +// t = t + w +// +(p10) fms.s1 FR_a = FR_a, f1, FR_V_hi + cmp.eq.unc p9, p10 = 0x0, GR_i_0 +} + +{ .mfi + nop.m 999 +// +// For larger u than v: a = U_hi - A +// Else a = V_hi - A (do an add to account for missing (-) on V_hi +// + fms.s1 FR_C_lo = FR_s, f1, FR_C_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fms.s1 FR_a = FR_U_hi, f1, FR_a + cmp.eq.unc p11, p12 = 0x0, GR_i_1 +} + +{ .mfi + nop.m 999 +// +// If u > v: a = (U_hi - A) + V_hi +// Else a = (V_hi - A) + U_hi +// In each case account for negative missing from V_hi. +// + fma.s1 FR_C_lo = FR_C_lo, f1, FR_A + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// C_lo = (S - C_hi) + A +// + fma.s1 FR_t = FR_t, f1, FR_a + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// t = t + a +// + fma.s1 FR_C_lo = FR_C_lo, f1, FR_t + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// C_lo = C_lo + t +// Adjust Table_Base to beginning of table +// + fma.s1 FR_r = FR_C_hi, f1, FR_C_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Load S_2 +// + fma.s1 FR_rsq = FR_r, FR_r, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Table_Base points to C_1 +// r = C_hi + C_lo +// + fms.s1 FR_c = FR_C_hi, f1, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if i_1 ==0: poly = S_2 * FR_rsq + S_1 +// else poly = C_2 * FR_rsq + C_1 +// +(p11) fma.s1 FR_Input_X = f0, f1, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 FR_Input_X = f0, f1, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Compute r_cube = FR_rsq * r +// +(p11) fma.s1 FR_poly = FR_rsq, FR_S_2, FR_S_1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 FR_poly = FR_rsq, FR_C_2, FR_C_1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Compute FR_rsq = r * r +// Is i_1 == 0 ? +// + fma.s1 FR_r_cubed = FR_rsq, FR_r, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// c = C_hi - r +// Load C_1 +// + fma.s1 FR_c = FR_c, f1, FR_C_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// if i_1 ==0: poly = r_cube * poly + c +// else poly = FR_rsq * poly +// +(p10) fms.s1 FR_Input_X = f0, f1, FR_Input_X + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if i_1 ==0: Result = r +// else Result = 1.0 +// +(p11) fma.s1 FR_poly = FR_r_cubed, FR_poly, FR_c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 FR_poly = FR_rsq, FR_poly, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if i_0 !=0: Result = -Result +// +(p9) fma.d.s0 FR_Input_X = FR_Input_X, f1, FR_poly + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p10) fms.d.s0 FR_Input_X = FR_Input_X, f1, FR_poly +// +// if i_0 == 0: Result = Result + poly +// else Result = Result - poly +// + br.ret.sptk b0 ;; +} +L(SINCOS_SMALL_R): + +{ .mii + nop.m 999 + extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; +// +// +// Compare both i_1 and i_0 with 0. +// if i_1 == 0, set p9. +// if i_0 == 0, set p11. +// + cmp.eq.unc p9, p10 = 0x0, GR_i_1 ;; +} + +{ .mfi + nop.m 999 + fma.s1 FR_rsq = FR_r, FR_r, f0 + extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} + +{ .mfi + nop.m 999 +// +// Z = Z * FR_rsq +// +(p10) fnma.s1 FR_c = FR_c, FR_r, f0 + cmp.eq.unc p11, p12 = 0x0, GR_i_0 +} +;; + +// ****************************************************************** +// ****************************************************************** +// ****************************************************************** +// r and c have been computed. +// We know whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +// |r| < 2**(-3) +// +// Set table_ptr1 to beginning of constant table. +// Get [i_0,i_1] - two lsb of N_fix_gr. +// + +{ .mmi + nop.m 999 + addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +// +// Set table_ptr1 to point to S_5. +// Set table_ptr1 to point to C_5. +// Compute FR_rsq = r * r +// + +{ .mfi +(p9) add GR_Table_Base = 672, GR_Table_Base +(p10) fmerge.s FR_r = f1, f1 +(p10) add GR_Table_Base = 592, GR_Table_Base ;; +} +// +// Set table_ptr1 to point to S_5. +// Set table_ptr1 to point to C_5. +// + +{ .mmi +(p9) ldfe FR_S_5 = [GR_Table_Base], -16 ;; +// +// if (i_1 == 0) load S_5 +// if (i_1 != 0) load C_5 +// +(p9) ldfe FR_S_4 = [GR_Table_Base], -16 + nop.i 999 ;; +} + +{ .mmf +(p10) ldfe FR_C_5 = [GR_Table_Base], -16 +// +// Z = FR_rsq * FR_rsq +// +(p9) ldfe FR_S_3 = [GR_Table_Base], -16 +// +// Compute FR_rsq = r * r +// if (i_1 == 0) load S_4 +// if (i_1 != 0) load C_4 +// + fma.s1 FR_Z = FR_rsq, FR_rsq, f0 ;; +} +// +// if (i_1 == 0) load S_3 +// if (i_1 != 0) load C_3 +// + +{ .mmi +(p9) ldfe FR_S_2 = [GR_Table_Base], -16 ;; +// +// if (i_1 == 0) load S_2 +// if (i_1 != 0) load C_2 +// +(p9) ldfe FR_S_1 = [GR_Table_Base], -16 + nop.i 999 +} + +{ .mmi +(p10) ldfe FR_C_4 = [GR_Table_Base], -16 ;; +(p10) ldfe FR_C_3 = [GR_Table_Base], -16 + nop.i 999 ;; +} + +{ .mmi +(p10) ldfe FR_C_2 = [GR_Table_Base], -16 ;; +(p10) ldfe FR_C_1 = [GR_Table_Base], -16 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// if (i_1 != 0): +// poly_lo = FR_rsq * C_5 + C_4 +// poly_hi = FR_rsq * C_2 + C_1 +// +(p9) fma.s1 FR_Z = FR_Z, FR_r, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1 == 0) load S_1 +// if (i_1 != 0) load C_1 +// +(p9) fma.s1 FR_poly_lo = FR_rsq, FR_S_5, FR_S_4 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// c = -c * r +// dummy fmpy's to flag inexact. +// +(p9) fma.d.s0 FR_S_4 = FR_S_4, FR_S_4, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// poly_lo = FR_rsq * poly_lo + C_3 +// poly_hi = FR_rsq * poly_hi +// + fma.s1 FR_Z = FR_Z, FR_rsq, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_poly_hi = FR_rsq, FR_S_2, FR_S_1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// if (i_1 == 0): +// poly_lo = FR_rsq * S_5 + S_4 +// poly_hi = FR_rsq * S_2 + S_1 +// +(p10) fma.s1 FR_poly_lo = FR_rsq, FR_C_5, FR_C_4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1 == 0): +// Z = Z * r for only one of the small r cases - not there +// in original implementation notes. +// +(p9) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_S_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly_hi = FR_rsq, FR_C_2, FR_C_1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p10) fma.d.s0 FR_C_1 = FR_C_1, FR_C_1, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// poly_lo = FR_rsq * poly_lo + S_3 +// poly_hi = FR_rsq * poly_hi +// +(p10) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_C_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1 == 0): dummy fmpy's to flag inexact +// r = 1 +// +(p9) fma.s1 FR_poly_hi = FR_r, FR_poly_hi, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// poly_hi = r * poly_hi +// + fma.s1 FR_poly = FR_Z, FR_poly_lo, FR_c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fms.s1 FR_r = f0, f1, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// poly_hi = Z * poly_lo + c +// if i_0 == 1: r = -r +// + fma.s1 FR_poly = FR_poly, f1, FR_poly_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fms.d.s0 FR_Input_X = FR_r, f1, FR_poly + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// poly = poly + poly_hi +// +(p11) fma.d.s0 FR_Input_X = FR_r, f1, FR_poly +// +// if (i_0 == 0) Result = r + poly +// if (i_0 != 0) Result = r - poly +// + br.ret.sptk b0 ;; +} +L(SINCOS_NORMAL_R): + +{ .mii + nop.m 999 + extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; +// +// Set table_ptr1 and table_ptr2 to base address of +// constant table. + cmp.eq.unc p9, p10 = 0x0, GR_i_1 ;; +} + +{ .mfi + nop.m 999 + fma.s1 FR_rsq = FR_r, FR_r, f0 + extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} + +{ .mfi + nop.m 999 + frcpa.s1 FR_r_hi, p6 = f1, FR_r + cmp.eq.unc p11, p12 = 0x0, GR_i_0 +} +;; + +// ****************************************************************** +// ****************************************************************** +// ****************************************************************** +// +// r and c have been computed. +// We known whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +// Get [i_0,i_1] - two lsb of N_fix_gr alone. +// + +{ .mmi + nop.m 999 + addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi +(p10) add GR_Table_Base = 384, GR_Table_Base +(p12) fms.s1 FR_Input_X = f0, f1, f1 +(p9) add GR_Table_Base = 224, GR_Table_Base ;; +} + +{ .mmf + nop.m 999 +(p10) ldfe FR_QQ_8 = [GR_Table_Base], 16 +// +// if (i_1==0) poly = poly * FR_rsq + PP_1_lo +// else poly = FR_rsq * poly +// +(p11) fma.s1 FR_Input_X = f0, f1, f1 ;; +} + +{ .mmf +(p10) ldfe FR_QQ_7 = [GR_Table_Base], 16 +// +// Adjust table pointers based on i_0 +// Compute rsq = r * r +// +(p9) ldfe FR_PP_8 = [GR_Table_Base], 16 + fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 ;; +} + +{ .mmf +(p9) ldfe FR_PP_7 = [GR_Table_Base], 16 +(p10) ldfe FR_QQ_6 = [GR_Table_Base], 16 +// +// Load PP_8 and QQ_8; PP_7 and QQ_7 +// + frcpa.s1 FR_r_hi, p6 = f1, FR_r_hi ;; +} +// +// if (i_1==0) poly = PP_7 + FR_rsq * PP_8. +// else poly = QQ_7 + FR_rsq * QQ_8. +// + +{ .mmb +(p9) ldfe FR_PP_6 = [GR_Table_Base], 16 +(p10) ldfe FR_QQ_5 = [GR_Table_Base], 16 + nop.b 999 ;; +} + +{ .mmb +(p9) ldfe FR_PP_5 = [GR_Table_Base], 16 +(p10) ldfe FR_S_1 = [GR_Table_Base], 16 + nop.b 999 ;; +} + +{ .mmb +(p10) ldfe FR_QQ_1 = [GR_Table_Base], 16 +(p9) ldfe FR_C_1 = [GR_Table_Base], 16 + nop.b 999 ;; +} + +{ .mmi +(p10) ldfe FR_QQ_4 = [GR_Table_Base], 16 ;; +(p9) ldfe FR_PP_1 = [GR_Table_Base], 16 + nop.i 999 ;; +} + +{ .mmf +(p10) ldfe FR_QQ_3 = [GR_Table_Base], 16 +// +// if (i_1=0) corr = corr + c*c +// else corr = corr * c +// +(p9) ldfe FR_PP_4 = [GR_Table_Base], 16 +(p10) fma.s1 FR_poly = FR_rsq, FR_QQ_8, FR_QQ_7 ;; +} +// +// if (i_1=0) poly = rsq * poly + PP_5 +// else poly = rsq * poly + QQ_5 +// Load PP_4 or QQ_4 +// + +{ .mmf +(p9) ldfe FR_PP_3 = [GR_Table_Base], 16 +(p10) ldfe FR_QQ_2 = [GR_Table_Base], 16 +// +// r_hi = frcpa(frcpa(r)). +// r_cube = r * FR_rsq. +// +(p9) fma.s1 FR_poly = FR_rsq, FR_PP_8, FR_PP_7 ;; +} +// +// Do dummy multiplies so inexact is always set. +// + +{ .mfi +(p9) ldfe FR_PP_2 = [GR_Table_Base], 16 +// +// r_lo = r - r_hi +// +(p9) fma.s1 FR_U_lo = FR_r_hi, FR_r_hi, f0 + nop.i 999 ;; +} + +{ .mmf + nop.m 999 +(p9) ldfe FR_PP_1_lo = [GR_Table_Base], 16 +(p10) fma.s1 FR_corr = FR_S_1, FR_r_cubed, FR_r +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_6 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1=0) U_lo = r_hi * r_hi +// else U_lo = r_hi + r +// +(p9) fma.s1 FR_corr = FR_C_1, FR_rsq, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1=0) corr = C_1 * rsq +// else corr = S_1 * r_cubed + r +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_6 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_lo = FR_r_hi, f1, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1=0) U_hi = r_hi + U_hi +// else U_hi = QQ_1 * U_hi + 1 +// +(p9) fma.s1 FR_U_lo = FR_r, FR_r_hi, FR_U_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// U_hi = r_hi * r_hi +// + fms.s1 FR_r_lo = FR_r, f1, FR_r_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Load PP_1, PP_6, PP_5, and C_1 +// Load QQ_1, QQ_6, QQ_5, and S_1 +// + fma.s1 FR_U_hi = FR_r_hi, FR_r_hi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_5 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p10) fnma.s1 FR_corr = FR_corr, FR_c, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1=0) U_lo = r * r_hi + U_lo +// else U_lo = r_lo * U_lo +// +(p9) fma.s1 FR_corr = FR_corr, FR_c, FR_c + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_5 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// if (i_1 =0) U_hi = r + U_hi +// if (i_1 =0) U_lo = r_lo * U_lo +// +// +(p9) fma.d.s0 FR_PP_5 = FR_PP_5, FR_PP_4, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_lo = FR_r, FR_r, FR_U_lo + nop.i 999 +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1=0) poly = poly * rsq + PP_6 +// else poly = poly * rsq + QQ_6 +// +(p9) fma.s1 FR_U_hi = FR_r_hi, FR_U_hi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_4 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_hi = FR_QQ_1, FR_U_hi, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.d.s0 FR_QQ_5 = FR_QQ_5, FR_QQ_5, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1!=0) U_hi = PP_1 * U_hi +// if (i_1!=0) U_lo = r * r + U_lo +// Load PP_3 or QQ_3 +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_4 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_lo = FR_QQ_1,FR_U_lo, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_hi = FR_PP_1, FR_U_hi, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Load PP_2, QQ_2 +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_3 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1==0) poly = FR_rsq * poly + PP_3 +// else poly = FR_rsq * poly + QQ_3 +// Load PP_1_lo +// +(p9) fma.s1 FR_U_lo = FR_PP_1, FR_U_lo, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1 =0) poly = poly * rsq + pp_r4 +// else poly = poly * rsq + qq_r4 +// +(p9) fma.s1 FR_U_hi = FR_r, f1, FR_U_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1==0) U_lo = PP_1_hi * U_lo +// else U_lo = QQ_1 * U_lo +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_0==0) Result = 1 +// else Result = -1 +// + fma.s1 FR_V = FR_U_lo, f1, FR_corr + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1==0) poly = FR_rsq * poly + PP_2 +// else poly = FR_rsq * poly + QQ_2 +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_1_lo + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// V = U_lo + corr +// +(p9) fma.s1 FR_poly = FR_r_cubed, FR_poly, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// if (i_1==0) poly = r_cube * poly +// else poly = FR_rsq * poly +// + fma.s1 FR_V = FR_poly, f1, FR_V + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fms.d.s0 FR_Input_X = FR_Input_X, FR_U_hi, FR_V + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// V = V + poly +// +(p11) fma.d.s0 FR_Input_X = FR_Input_X, FR_U_hi, FR_V +// +// if (i_0==0) Result = Result * U_hi + V +// else Result = Result * U_hi - V +// + br.ret.sptk b0 ;; +} + +// +// If cosine, FR_Input_X = 1 +// If sine, FR_Input_X = +/-Zero (Input FR_Input_X) +// Results are exact, no exceptions +// +L(SINCOS_ZERO): + +{ .mmb + cmp.eq.unc p6, p7 = 0x1, GR_Sin_or_Cos + nop.m 999 + nop.b 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fmerge.s FR_Input_X = FR_Input_X, FR_Input_X + nop.i 999 +} + +{ .mfb + nop.m 999 +(p6) fmerge.s FR_Input_X = f1, f1 + br.ret.sptk b0 ;; +} + +L(SINCOS_SPECIAL): + +// +// Path for Arg = +/- QNaN, SNaN, Inf +// Invalid can be raised. SNaNs +// become QNaNs +// + +{ .mfb + nop.m 999 + fmpy.d.s0 FR_Input_X = FR_Input_X, f0 + br.ret.sptk b0 ;; +} +.endp __libm_cos_double_dbx# +ASM_SIZE_DIRECTIVE(__libm_cos_double_dbx#) + + + +// +// Call int pi_by_2_reduce(double* x, double *y) +// for |arguments| >= 2**63 +// Address to save r and c as double +// +// +// psp sp+64 +// sp+48 -> f0 c +// r45 sp+32 -> f0 r +// r44 -> sp+16 -> InputX +// sp sp -> scratch provided to callee + + + +.proc __libm_callout_2 +__libm_callout_2: +L(SINCOS_ARG_TOO_LARGE): + +.prologue +{ .mfi + add r45=-32,sp // Parameter: r address + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [r45] = f0,16 // Clear Parameter r on stack + add r44 = 16,sp // Parameter x address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [r45] = f0,-16 // Clear Parameter c on stack + nop.i 0 + nop.b 0 +} +{ .mib + stfe [r44] = FR_Input_X // Store Parameter x on stack + nop.i 0 + br.call.sptk b0=__libm_pi_by_2_reduce# ;; +};; + + +{ .mii + ldfe FR_Input_X =[r44],16 +// +// Get r and c off stack +// + adds GR_Table_Base1 = -16, GR_Table_Base1 +// +// Get r and c off stack +// + add GR_N_Inc = GR_Sin_or_Cos,r8 ;; +} +{ .mmb + ldfe FR_r =[r45],16 +// +// Get X off the stack +// Readjust Table ptr +// + ldfs FR_Two_to_M3 = [GR_Table_Base1],4 + nop.b 999 ;; +} +{ .mmb + ldfs FR_Neg_Two_to_M3 = [GR_Table_Base1],0 + ldfe FR_c =[r45] + nop.b 999 ;; +} + +{ .mfi +.restore sp + add sp = 64,sp // Restore stack pointer + fcmp.lt.unc.s1 p6, p0 = FR_r, FR_Two_to_M3 + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + nop.b 0 +};; + + +{ .mfi + nop.m 999 +(p6) fcmp.gt.unc.s1 p6, p0 = FR_r, FR_Neg_Two_to_M3 + nop.i 999 ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(SINCOS_SMALL_R) ;; +} + +{ .mib + nop.m 999 + nop.i 999 + br.cond.sptk L(SINCOS_NORMAL_R) ;; +} + +.endp __libm_callout_2 +ASM_SIZE_DIRECTIVE(__libm_callout_2) + +.type __libm_pi_by_2_reduce#,@function +.global __libm_pi_by_2_reduce# + + +.type __libm_sin_double_dbx#,@function +.global __libm_sin_double_dbx# +.type __libm_cos_double_dbx#,@function +.global __libm_cos_double_dbx# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_cosf.S glibc-2.2.3/sysdeps/ia64/fpu/s_cosf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_cosf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_cosf.S Mon Feb 19 00:54:07 2001 @@ -0,0 +1,686 @@ + +.file "sincosf.s" + + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. + + +// History +//============================================================== +// 2/02/00 Initial revision +// 4/02/00 Unwind support added. +// 5/10/00 Improved speed with new algorithm. +// 8/08/00 Improved speed by avoiding SIR flush. +// 8/17/00 Changed predicate register macro-usage to direct predicate +// names due to an assembler bug. +// 8/30/00 Put sin_of_r before sin_tbl_S_cos_of_r to gain a cycle +// 1/02/00 Fixed flag settings, improved speed. +// +// API +//============================================================== +// float sinf( float x); +// float cosf( float x); +// + +#include "libm_support.h" + +// Assembly macros +//============================================================== + +// SIN_Sin_Flag = p6 +// SIN_Cos_Flag = p7 + +// integer registers used + + SIN_AD_PQ_1 = r33 + SIN_AD_PQ_2 = r33 + sin_GR_sincos_flag = r34 + sin_GR_Mint = r35 + + sin_GR_index = r36 + gr_tmp = r37 + + GR_SAVE_B0 = r37 + GR_SAVE_GP = r38 + GR_SAVE_PFS = r39 + + +// floating point registers used + + sin_coeff_P1 = f32 + sin_coeff_P2 = f33 + sin_coeff_Q1 = f34 + sin_coeff_Q2 = f35 + sin_coeff_P4 = f36 + sin_coeff_P5 = f37 + sin_coeff_Q3 = f38 + sin_coeff_Q4 = f39 + sin_Mx = f40 + sin_Mfloat = f41 + sin_tbl_S = f42 + sin_tbl_C = f43 + sin_r = f44 + sin_rcube = f45 + sin_tsq = f46 + sin_r7 = f47 + sin_t = f48 + sin_poly_p2 = f49 + sin_poly_p1 = f50 + fp_tmp = f51 + sin_poly_p3 = f52 + sin_poly_p4 = f53 + sin_of_r = f54 + sin_S_t = f55 + sin_poly_q2 = f56 + sin_poly_q1 = f57 + sin_S_tcube = f58 + sin_poly_q3 = f59 + sin_poly_q4 = f60 + sin_tbl_S_tcube = f61 + sin_tbl_S_cos_of_r = f62 + + sin_coeff_Q5 = f63 + sin_coeff_Q6 = f64 + sin_coeff_P3 = f65 + + sin_poly_q5 = f66 + sin_poly_q12 = f67 + sin_poly_q3456 = f68 + fp_tmp2 = f69 + SIN_NORM_f8 = f70 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +sin_coeff_1_table: +ASM_TYPE_DIRECTIVE(sin_coeff_1_table,@object) +data8 0xBF56C16C16BF6462 // q3 +data8 0x3EFA01A0128B9EBC // q4 +data8 0xBE927E42FDF33FFE // q5 +data8 0x3E21DA5C72A446F3 // q6 +data8 0x3EC71DD1D5E421A4 // p4 +data8 0xBE5AC5C9D0ACF95A // p5 +data8 0xBFC55555555554CA // p1 +data8 0x3F811111110F2395 // p2 +data8 0xBFE0000000000000 // q1 +data8 0x3FA55555555554EF // q2 +data8 0xBF2A01A011232913 // p3 +data8 0x0000000000000000 // pad + + +///////////////////////////////////////// + +data8 0xBFE1A54991426566 //sin(-32) +data8 0x3FEAB1F5305DE8E5 //cos(-32) +data8 0x3FD9DBC0B640FC81 //sin(-31) +data8 0x3FED4591C3E12A20 //cos(-31) +data8 0x3FEF9DF47F1C903D //sin(-30) +data8 0x3FC3BE82F2505A52 //cos(-30) +data8 0x3FE53C7D20A6C9E7 //sin(-29) +data8 0xBFE7F01658314E47 //cos(-29) +data8 0xBFD156853B4514D6 //sin(-28) +data8 0xBFEECDAAD1582500 //cos(-28) +data8 0xBFEE9AA1B0E5BA30 //sin(-27) +data8 0xBFD2B266F959DED5 //cos(-27) +data8 0xBFE866E0FAC32583 //sin(-26) +data8 0x3FE4B3902691A9ED //cos(-26) +data8 0x3FC0F0E6F31E809D //sin(-25) +data8 0x3FEFB7EEF59504FF //cos(-25) +data8 0x3FECFA7F7919140F //sin(-24) +data8 0x3FDB25BFB50A609A //cos(-24) +data8 0x3FEB143CD0247D02 //sin(-23) +data8 0xBFE10CF7D591F272 //cos(-23) +data8 0x3F8220A29F6EB9F4 //sin(-22) +data8 0xBFEFFFADD8D4ACDA //cos(-22) +data8 0xBFEAC5E20BB0D7ED //sin(-21) +data8 0xBFE186FF83773759 //cos(-21) +data8 0xBFED36D8F55D3CE0 //sin(-20) +data8 0x3FDA1E043964A83F //cos(-20) +data8 0xBFC32F2D28F584CF //sin(-19) +data8 0x3FEFA377DE108258 //cos(-19) +data8 0x3FE8081668131E26 //sin(-18) +data8 0x3FE52150815D2470 //cos(-18) +data8 0x3FEEC3C4AC42882B //sin(-17) +data8 0xBFD19C46B07F58E7 //cos(-17) +data8 0x3FD26D02085F20F8 //sin(-16) +data8 0xBFEEA5257E962F74 //cos(-16) +data8 0xBFE4CF2871CEC2E8 //sin(-15) +data8 0xBFE84F5D069CA4F3 //cos(-15) +data8 0xBFEFB30E327C5E45 //sin(-14) +data8 0x3FC1809AEC2CA0ED //cos(-14) +data8 0xBFDAE4044881C506 //sin(-13) +data8 0x3FED09CDD5260CB7 //cos(-13) +data8 0x3FE12B9AF7D765A5 //sin(-12) +data8 0x3FEB00DA046B65E3 //cos(-12) +data8 0x3FEFFFEB762E93EB //sin(-11) +data8 0x3F7220AE41EE2FDF //cos(-11) +data8 0x3FE1689EF5F34F52 //sin(-10) +data8 0xBFEAD9AC890C6B1F //cos(-10) +data8 0xBFDA6026360C2F91 //sin( -9) +data8 0xBFED27FAA6A6196B //cos( -9) +data8 0xBFEFA8D2A028CF7B //sin( -8) +data8 0xBFC29FBEBF632F94 //cos( -8) +data8 0xBFE50608C26D0A08 //sin( -7) +data8 0x3FE81FF79ED92017 //cos( -7) +data8 0x3FD1E1F18AB0A2C0 //sin( -6) +data8 0x3FEEB9B7097822F5 //cos( -6) +data8 0x3FEEAF81F5E09933 //sin( -5) +data8 0x3FD22785706B4AD9 //cos( -5) +data8 0x3FE837B9DDDC1EAE //sin( -4) +data8 0xBFE4EAA606DB24C1 //cos( -4) +data8 0xBFC210386DB6D55B //sin( -3) +data8 0xBFEFAE04BE85E5D2 //cos( -3) +data8 0xBFED18F6EAD1B446 //sin( -2) +data8 0xBFDAA22657537205 //cos( -2) +data8 0xBFEAED548F090CEE //sin( -1) +data8 0x3FE14A280FB5068C //cos( -1) +data8 0x0000000000000000 //sin( 0) +data8 0x3FF0000000000000 //cos( 0) +data8 0x3FEAED548F090CEE //sin( 1) +data8 0x3FE14A280FB5068C //cos( 1) +data8 0x3FED18F6EAD1B446 //sin( 2) +data8 0xBFDAA22657537205 //cos( 2) +data8 0x3FC210386DB6D55B //sin( 3) +data8 0xBFEFAE04BE85E5D2 //cos( 3) +data8 0xBFE837B9DDDC1EAE //sin( 4) +data8 0xBFE4EAA606DB24C1 //cos( 4) +data8 0xBFEEAF81F5E09933 //sin( 5) +data8 0x3FD22785706B4AD9 //cos( 5) +data8 0xBFD1E1F18AB0A2C0 //sin( 6) +data8 0x3FEEB9B7097822F5 //cos( 6) +data8 0x3FE50608C26D0A08 //sin( 7) +data8 0x3FE81FF79ED92017 //cos( 7) +data8 0x3FEFA8D2A028CF7B //sin( 8) +data8 0xBFC29FBEBF632F94 //cos( 8) +data8 0x3FDA6026360C2F91 //sin( 9) +data8 0xBFED27FAA6A6196B //cos( 9) +data8 0xBFE1689EF5F34F52 //sin( 10) +data8 0xBFEAD9AC890C6B1F //cos( 10) +data8 0xBFEFFFEB762E93EB //sin( 11) +data8 0x3F7220AE41EE2FDF //cos( 11) +data8 0xBFE12B9AF7D765A5 //sin( 12) +data8 0x3FEB00DA046B65E3 //cos( 12) +data8 0x3FDAE4044881C506 //sin( 13) +data8 0x3FED09CDD5260CB7 //cos( 13) +data8 0x3FEFB30E327C5E45 //sin( 14) +data8 0x3FC1809AEC2CA0ED //cos( 14) +data8 0x3FE4CF2871CEC2E8 //sin( 15) +data8 0xBFE84F5D069CA4F3 //cos( 15) +data8 0xBFD26D02085F20F8 //sin( 16) +data8 0xBFEEA5257E962F74 //cos( 16) +data8 0xBFEEC3C4AC42882B //sin( 17) +data8 0xBFD19C46B07F58E7 //cos( 17) +data8 0xBFE8081668131E26 //sin( 18) +data8 0x3FE52150815D2470 //cos( 18) +data8 0x3FC32F2D28F584CF //sin( 19) +data8 0x3FEFA377DE108258 //cos( 19) +data8 0x3FED36D8F55D3CE0 //sin( 20) +data8 0x3FDA1E043964A83F //cos( 20) +data8 0x3FEAC5E20BB0D7ED //sin( 21) +data8 0xBFE186FF83773759 //cos( 21) +data8 0xBF8220A29F6EB9F4 //sin( 22) +data8 0xBFEFFFADD8D4ACDA //cos( 22) +data8 0xBFEB143CD0247D02 //sin( 23) +data8 0xBFE10CF7D591F272 //cos( 23) +data8 0xBFECFA7F7919140F //sin( 24) +data8 0x3FDB25BFB50A609A //cos( 24) +data8 0xBFC0F0E6F31E809D //sin( 25) +data8 0x3FEFB7EEF59504FF //cos( 25) +data8 0x3FE866E0FAC32583 //sin( 26) +data8 0x3FE4B3902691A9ED //cos( 26) +data8 0x3FEE9AA1B0E5BA30 //sin( 27) +data8 0xBFD2B266F959DED5 //cos( 27) +data8 0x3FD156853B4514D6 //sin( 28) +data8 0xBFEECDAAD1582500 //cos( 28) +data8 0xBFE53C7D20A6C9E7 //sin( 29) +data8 0xBFE7F01658314E47 //cos( 29) +data8 0xBFEF9DF47F1C903D //sin( 30) +data8 0x3FC3BE82F2505A52 //cos( 30) +data8 0xBFD9DBC0B640FC81 //sin( 31) +data8 0x3FED4591C3E12A20 //cos( 31) +data8 0x3FE1A54991426566 //sin( 32) +data8 0x3FEAB1F5305DE8E5 //cos( 32) +ASM_SIZE_DIRECTIVE(sin_coeff_1_table) + +////////////////////////////////////////// + + +.global sinf +.global cosf +#ifdef _LIBC +.global __sinf +.global __cosf +#endif + +.text +.proc cosf +#ifdef _LIBC +.proc __cosf +#endif +.align 32 + + +cosf: +#ifdef _LIBC +__cosf: +#endif +{ .mfi + alloc r32 = ar.pfs,1,7,0,0 + fcvt.fx.s1 sin_Mx = f8 + cmp.ne p6,p7 = r0,r0 // p7 set if cos +} +{ .mfi + addl SIN_AD_PQ_1 = @ltoff(sin_coeff_1_table),gp + fnorm.s0 SIN_NORM_f8 = f8 // Sets denormal or invalid + mov sin_GR_sincos_flag = 0x0 +} +;; + +{ .mfi + ld8 SIN_AD_PQ_1 = [SIN_AD_PQ_1] + fclass.m.unc p9,p0 = f8, 0x07 + cmp.ne p8,p0 = r0,r0 +} +{ .mfb + nop.m 999 + nop.f 999 + br.sptk L(SINCOSF_COMMON) +} +;; + +.endp cosf +ASM_SIZE_DIRECTIVE(cosf) + + +.text +.proc sinf +#ifdef _LIBC +.proc __sinf +#endif +.align 32 + +sinf: +#ifdef _LIBC +__sinf: +#endif +{ .mfi + alloc r32 = ar.pfs,1,7,0,0 + fcvt.fx.s1 sin_Mx = f8 + cmp.eq p6,p7 = r0,r0 // p6 set if sin +} +{ .mfi + addl SIN_AD_PQ_1 = @ltoff(sin_coeff_1_table),gp + fnorm.s0 SIN_NORM_f8 = f8 // Sets denormal or invalid + mov sin_GR_sincos_flag = 0x1 +} +;; + +{ .mfi + ld8 SIN_AD_PQ_1 = [SIN_AD_PQ_1] + fclass.m.unc p8,p0 = f8, 0x07 + cmp.ne p9,p0 = r0,r0 +} +{ .mfb + nop.m 999 + nop.f 999 + br.sptk L(SINCOSF_COMMON) +} +;; + + +L(SINCOSF_COMMON): + +// Here with p6 if sin, p7 if cos, p8 if sin(0), p9 if cos(0) + + +{ .mmf + ldfpd sin_coeff_Q3, sin_coeff_Q4 = [SIN_AD_PQ_1], 16 + nop.m 999 + fclass.m.unc p11,p0 = f8, 0x23 // Test for x=inf +} +;; + +{ .mfb + ldfpd sin_coeff_Q5, sin_coeff_Q6 = [SIN_AD_PQ_1], 16 + fclass.m.unc p10,p0 = f8, 0xc3 // Test for x=nan +(p8) br.ret.spnt b0 // Exit for sin(0) +} +{ .mfb + nop.m 999 +(p9) fma.s f8 = f1,f1,f0 +(p9) br.ret.spnt b0 // Exit for cos(0) +} +;; + +{ .mmf + ldfpd sin_coeff_P4, sin_coeff_P5 = [SIN_AD_PQ_1], 16 + addl gr_tmp = -1,r0 + fcvt.xf sin_Mfloat = sin_Mx +} +;; + +{ .mfi + getf.sig sin_GR_Mint = sin_Mx +(p11) frcpa.s0 f8,p13 = f0,f0 // qnan indef if x=inf + nop.i 999 +} +{ .mfb + ldfpd sin_coeff_P1, sin_coeff_P2 = [SIN_AD_PQ_1], 16 + nop.f 999 +(p11) br.ret.spnt b0 // Exit for x=inf +} +;; + +{ .mfi + ldfpd sin_coeff_Q1, sin_coeff_Q2 = [SIN_AD_PQ_1], 16 + nop.f 999 + cmp.ge p8,p9 = -33,sin_GR_Mint +} +{ .mfb + add sin_GR_index = 32,sin_GR_Mint +(p10) fma.s f8 = f8,f1,f0 // Force qnan if x=nan +(p10) br.ret.spnt b0 // Exit for x=nan +} +;; + +{ .mmi + ldfd sin_coeff_P3 = [SIN_AD_PQ_1], 16 +(p9) cmp.le p8,p0 = 33, sin_GR_Mint + shl sin_GR_index = sin_GR_index,4 +} +;; + + +{ .mfi + setf.sig fp_tmp = gr_tmp // Create constant such that fmpy sets inexact + fnma.s1 sin_r = f1,sin_Mfloat,SIN_NORM_f8 +(p8) cmp.eq.unc p11,p12=sin_GR_sincos_flag,r0 // p11 if must call dbl cos + // p12 if must call dbl sin +} +{ .mbb + add SIN_AD_PQ_2 = sin_GR_index,SIN_AD_PQ_1 +(p11) br.cond.spnt COS_DOUBLE +(p12) br.cond.spnt SIN_DOUBLE +} +;; + +.pred.rel "mutex",p6,p7 //SIN_Sin_Flag, SIN_Cos_Flag +{ .mmi +(p6) ldfpd sin_tbl_S,sin_tbl_C = [SIN_AD_PQ_2] +(p7) ldfpd sin_tbl_C,sin_tbl_S = [SIN_AD_PQ_2] + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p6) fclass.m.unc p8,p0 = f8, 0x0b // If sin, note denormal input to set uflow + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_t = sin_r,sin_r,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_rcube = sin_t,sin_r,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_tsq = sin_t,sin_t,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_poly_q3 = sin_t,sin_coeff_Q4,sin_coeff_Q3 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_poly_q5 = sin_t,sin_coeff_Q6,sin_coeff_Q5 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_poly_p1 = sin_t,sin_coeff_P5,sin_coeff_P4 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_poly_p2 = sin_t,sin_coeff_P2,sin_coeff_P1 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_poly_q1 = sin_t,sin_coeff_Q2,sin_coeff_Q1 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_S_t = sin_t,sin_tbl_S,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p8) fmpy.s.s0 fp_tmp2 = f8,f8 // Dummy mult to set underflow if sin(denormal) + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_r7 = sin_rcube,sin_tsq,f0 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_poly_q3456 = sin_tsq,sin_poly_q5,sin_poly_q3 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_poly_p3 = sin_t,sin_poly_p1,sin_coeff_P3 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_poly_p4 = sin_rcube,sin_poly_p2,sin_r + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.s1 sin_tbl_S_tcube = sin_S_t,sin_tsq,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s1 sin_poly_q12 = sin_S_t,sin_poly_q1,sin_tbl_S + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.d.s1 sin_of_r = sin_r7,sin_poly_p3,sin_poly_p4 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 + fma.d.s1 sin_tbl_S_cos_of_r = sin_tbl_S_tcube,sin_poly_q3456,sin_poly_q12 + nop.i 999 +} +{ .mfi + nop.m 999 + fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 +} +;; + + +.pred.rel "mutex",p6,p7 //SIN_Sin_Flag, SIN_Cos_Flag +{ .mfi + nop.m 999 +//(SIN_Sin_Flag) fma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r +(p6) fma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r + nop.i 999 +} +{ .mfb + nop.m 999 +//(SIN_Cos_Flag) fnma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r +(p7) fnma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r + br.ret.sptk b0 +} + +.endp sinf +ASM_SIZE_DIRECTIVE(sinf) + + +.proc SIN_DOUBLE +SIN_DOUBLE: +.prologue +{ .mfi + nop.m 0 + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mmb + nop.m 999 + nop.m 999 + br.call.sptk.many b0=sin +} +;; + +{ .mfi + mov gp = GR_SAVE_GP + nop.f 999 + mov b0 = GR_SAVE_B0 +} +;; + +{ .mfi + nop.m 999 + fma.s f8 = f8,f1,f0 +(p0) mov ar.pfs = GR_SAVE_PFS +} +{ .mib + nop.m 999 + nop.i 999 +(p0) br.ret.sptk b0 +} +;; + +.endp SIN_DOUBLE +ASM_SIZE_DIRECTIVE(SIN_DOUBLE) + + +.proc COS_DOUBLE +COS_DOUBLE: +.prologue +{ .mfi + nop.m 0 + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mmb + nop.m 999 + nop.m 999 + br.call.sptk.many b0=cos +} +;; + +{ .mfi + mov gp = GR_SAVE_GP + nop.f 999 + mov b0 = GR_SAVE_B0 +} +;; + +{ .mfi + nop.m 999 + fma.s f8 = f8,f1,f0 +(p0) mov ar.pfs = GR_SAVE_PFS +} +{ .mib + nop.m 999 + nop.i 999 +(p0) br.ret.sptk b0 +} +;; + +.endp COS_DOUBLE +ASM_SIZE_DIRECTIVE(COS_DOUBLE) + + + +.type sin,@function +.global sin +.type cos,@function +.global cos diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_cosl.S glibc-2.2.3/sysdeps/ia64/fpu/s_cosl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_cosl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_cosl.S Mon Feb 19 00:54:20 2001 @@ -0,0 +1,2506 @@ +.file "sincosl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// 2/02/2000 (hand-optimized) +// 4/04/00 Unwind support added +// +// ********************************************************************* +// +// Function: Combined sinl(x) and cosl(x), where +// +// sinl(x) = sine(x), for double-extended precision x values +// cosl(x) = cosine(x), for double-extended precision x values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f32-f99 +// +// General Purpose Registers: +// r32-r43 +// r44-r45 (Used to pass arguments to pi_by_2 reduce routine) +// +// Predicate Registers: p6-p13 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions do not occur +// Underflow exceptions raised when appropriate for sin +// (No specialized error handling for this routine) +// Inexact raised when appropriate by algorithm +// +// sinl(SNaN) = QNaN +// sinl(QNaN) = QNaN +// sinl(inf) = QNaN +// sinl(+/-0) = +/-0 +// cosl(inf) = QNaN +// cosl(SNaN) = QNaN +// cosl(QNaN) = QNaN +// cosl(0) = 1 +// +// ********************************************************************* +// +// Mathematical Description +// ======================== +// +// The computation of FSIN and FCOS is best handled in one piece of +// code. The main reason is that given any argument Arg, computation +// of trigonometric functions first calculate N and an approximation +// to alpha where +// +// Arg = N pi/2 + alpha, |alpha| <= pi/4. +// +// Since +// +// cosl( Arg ) = sinl( (N+1) pi/2 + alpha ), +// +// therefore, the code for computing sine will produce cosine as long +// as 1 is added to N immediately after the argument reduction +// process. +// +// Let M = N if sine +// N+1 if cosine. +// +// Now, given +// +// Arg = M pi/2 + alpha, |alpha| <= pi/4, +// +// let I = M mod 4, or I be the two lsb of M when M is represented +// as 2's complement. I = [i_0 i_1]. Then +// +// sinl( Arg ) = (-1)^i_0 sinl( alpha ) if i_1 = 0, +// = (-1)^i_0 cosl( alpha ) if i_1 = 1. +// +// For example: +// if M = -1, I = 11 +// sin ((-pi/2 + alpha) = (-1) cos (alpha) +// if M = 0, I = 00 +// sin (alpha) = sin (alpha) +// if M = 1, I = 01 +// sin (pi/2 + alpha) = cos (alpha) +// if M = 2, I = 10 +// sin (pi + alpha) = (-1) sin (alpha) +// if M = 3, I = 11 +// sin ((3/2)pi + alpha) = (-1) cos (alpha) +// +// The value of alpha is obtained by argument reduction and +// represented by two working precision numbers r and c where +// +// alpha = r + c accurately. +// +// The reduction method is described in a previous write up. +// The argument reduction scheme identifies 4 cases. For Cases 2 +// and 4, because |alpha| is small, sinl(r+c) and cosl(r+c) can be +// computed very easily by 2 or 3 terms of the Taylor series +// expansion as follows: +// +// Case 2: +// ------- +// +// sinl(r + c) = r + c - r^3/6 accurately +// cosl(r + c) = 1 - 2^(-67) accurately +// +// Case 4: +// ------- +// +// sinl(r + c) = r + c - r^3/6 + r^5/120 accurately +// cosl(r + c) = 1 - r^2/2 + r^4/24 accurately +// +// The only cases left are Cases 1 and 3 of the argument reduction +// procedure. These two cases will be merged since after the +// argument is reduced in either cases, we have the reduced argument +// represented as r + c and that the magnitude |r + c| is not small +// enough to allow the usage of a very short approximation. +// +// The required calculation is either +// +// sinl(r + c) = sinl(r) + correction, or +// cosl(r + c) = cosl(r) + correction. +// +// Specifically, +// +// sinl(r + c) = sinl(r) + c sin'(r) + O(c^2) +// = sinl(r) + c cos (r) + O(c^2) +// = sinl(r) + c(1 - r^2/2) accurately. +// Similarly, +// +// cosl(r + c) = cosl(r) - c sinl(r) + O(c^2) +// = cosl(r) - c(r - r^3/6) accurately. +// +// We therefore concentrate on accurately calculating sinl(r) and +// cosl(r) for a working-precision number r, |r| <= pi/4 to within +// 0.1% or so. +// +// The greatest challenge of this task is that the second terms of +// the Taylor series +// +// r - r^3/3! + r^r/5! - ... +// +// and +// +// 1 - r^2/2! + r^4/4! - ... +// +// are not very small when |r| is close to pi/4 and the rounding +// errors will be a concern if simple polynomial accumulation is +// used. When |r| < 2^-3, however, the second terms will be small +// enough (6 bits or so of right shift) that a normal Horner +// recurrence suffices. Hence there are two cases that we consider +// in the accurate computation of sinl(r) and cosl(r), |r| <= pi/4. +// +// Case small_r: |r| < 2^(-3) +// -------------------------- +// +// Since Arg = M pi/4 + r + c accurately, and M mod 4 is [i_0 i_1], +// we have +// +// sinl(Arg) = (-1)^i_0 * sinl(r + c) if i_1 = 0 +// = (-1)^i_0 * cosl(r + c) if i_1 = 1 +// +// can be accurately approximated by +// +// sinl(Arg) = (-1)^i_0 * [sinl(r) + c] if i_1 = 0 +// = (-1)^i_0 * [cosl(r) - c*r] if i_1 = 1 +// +// because |r| is small and thus the second terms in the correction +// are unneccessary. +// +// Finally, sinl(r) and cosl(r) are approximated by polynomials of +// moderate lengths. +// +// sinl(r) = r + S_1 r^3 + S_2 r^5 + ... + S_5 r^11 +// cosl(r) = 1 + C_1 r^2 + C_2 r^4 + ... + C_5 r^10 +// +// We can make use of predicates to selectively calculate +// sinl(r) or cosl(r) based on i_1. +// +// Case normal_r: 2^(-3) <= |r| <= pi/4 +// ------------------------------------ +// +// This case is more likely than the previous one if one considers +// r to be uniformly distributed in [-pi/4 pi/4]. Again, +// +// sinl(Arg) = (-1)^i_0 * sinl(r + c) if i_1 = 0 +// = (-1)^i_0 * cosl(r + c) if i_1 = 1. +// +// Because |r| is now larger, we need one extra term in the +// correction. sinl(Arg) can be accurately approximated by +// +// sinl(Arg) = (-1)^i_0 * [sinl(r) + c(1-r^2/2)] if i_1 = 0 +// = (-1)^i_0 * [cosl(r) - c*r*(1 - r^2/6)] i_1 = 1. +// +// Finally, sinl(r) and cosl(r) are approximated by polynomials of +// moderate lengths. +// +// sinl(r) = r + PP_1_hi r^3 + PP_1_lo r^3 + +// PP_2 r^5 + ... + PP_8 r^17 +// +// cosl(r) = 1 + QQ_1 r^2 + QQ_2 r^4 + ... + QQ_8 r^16 +// +// where PP_1_hi is only about 16 bits long and QQ_1 is -1/2. +// The crux in accurate computation is to calculate +// +// r + PP_1_hi r^3 or 1 + QQ_1 r^2 +// +// accurately as two pieces: U_hi and U_lo. The way to achieve this +// is to obtain r_hi as a 10 sig. bit number that approximates r to +// roughly 8 bits or so of accuracy. (One convenient way is +// +// r_hi := frcpa( frcpa( r ) ).) +// +// This way, +// +// r + PP_1_hi r^3 = r + PP_1_hi r_hi^3 + +// PP_1_hi (r^3 - r_hi^3) +// = [r + PP_1_hi r_hi^3] + +// [PP_1_hi (r - r_hi) +// (r^2 + r_hi r + r_hi^2) ] +// = U_hi + U_lo +// +// Since r_hi is only 10 bit long and PP_1_hi is only 16 bit long, +// PP_1_hi * r_hi^3 is only at most 46 bit long and thus computed +// exactly. Furthermore, r and PP_1_hi r_hi^3 are of opposite sign +// and that there is no more than 8 bit shift off between r and +// PP_1_hi * r_hi^3. Hence the sum, U_hi, is representable and thus +// calculated without any error. Finally, the fact that +// +// |U_lo| <= 2^(-8) |U_hi| +// +// says that U_hi + U_lo is approximating r + PP_1_hi r^3 to roughly +// 8 extra bits of accuracy. +// +// Similarly, +// +// 1 + QQ_1 r^2 = [1 + QQ_1 r_hi^2] + +// [QQ_1 (r - r_hi)(r + r_hi)] +// = U_hi + U_lo. +// +// Summarizing, we calculate r_hi = frcpa( frcpa( r ) ). +// +// If i_1 = 0, then +// +// U_hi := r + PP_1_hi * r_hi^3 +// U_lo := PP_1_hi * (r - r_hi) * (r^2 + r*r_hi + r_hi^2) +// poly := PP_1_lo r^3 + PP_2 r^5 + ... + PP_8 r^17 +// correction := c * ( 1 + C_1 r^2 ) +// +// Else ...i_1 = 1 +// +// U_hi := 1 + QQ_1 * r_hi * r_hi +// U_lo := QQ_1 * (r - r_hi) * (r + r_hi) +// poly := QQ_2 * r^4 + QQ_3 * r^6 + ... + QQ_8 r^16 +// correction := -c * r * (1 + S_1 * r^2) +// +// End +// +// Finally, +// +// V := poly + ( U_lo + correction ) +// +// / U_hi + V if i_0 = 0 +// result := | +// \ (-U_hi) - V if i_0 = 1 +// +// It is important that in the last step, negation of U_hi is +// performed prior to the subtraction which is to be performed in +// the user-set rounding mode. +// +// +// Algorithmic Description +// ======================= +// +// The argument reduction algorithm is tightly integrated into FSIN +// and FCOS which share the same code. The following is complete and +// self-contained. The argument reduction description given +// previously is repeated below. +// +// +// Step 0. Initialization. +// +// If FSIN is invoked, set N_inc := 0; else if FCOS is invoked, +// set N_inc := 1. +// +// Step 1. Check for exceptional and special cases. +// +// * If Arg is +-0, +-inf, NaN, NaT, go to Step 10 for special +// handling. +// * If |Arg| < 2^24, go to Step 2 for reduction of moderate +// arguments. This is the most likely case. +// * If |Arg| < 2^63, go to Step 8 for pre-reduction of large +// arguments. +// * If |Arg| >= 2^63, go to Step 10 for special handling. +// +// Step 2. Reduction of moderate arguments. +// +// If |Arg| < pi/4 ...quick branch +// N_fix := N_inc (integer) +// r := Arg +// c := 0.0 +// Branch to Step 4, Case_1_complete +// Else ...cf. argument reduction +// N := Arg * two_by_PI (fp) +// N_fix := fcvt.fx( N ) (int) +// N := fcvt.xf( N_fix ) +// N_fix := N_fix + N_inc +// s := Arg - N * P_1 (first piece of pi/2) +// w := -N * P_2 (second piece of pi/2) +// +// If |s| >= 2^(-33) +// go to Step 3, Case_1_reduce +// Else +// go to Step 7, Case_2_reduce +// Endif +// Endif +// +// Step 3. Case_1_reduce. +// +// r := s + w +// c := (s - r) + w ...observe order +// +// Step 4. Case_1_complete +// +// ...At this point, the reduced argument alpha is +// ...accurately represented as r + c. +// If |r| < 2^(-3), go to Step 6, small_r. +// +// Step 5. Normal_r. +// +// Let [i_0 i_1] by the 2 lsb of N_fix. +// FR_rsq := r * r +// r_hi := frcpa( frcpa( r ) ) +// r_lo := r - r_hi +// +// If i_1 = 0, then +// poly := r*FR_rsq*(PP_1_lo + FR_rsq*(PP_2 + ... FR_rsq*PP_8)) +// U_hi := r + PP_1_hi*r_hi*r_hi*r_hi ...any order +// U_lo := PP_1_hi*r_lo*(r*r + r*r_hi + r_hi*r_hi) +// correction := c + c*C_1*FR_rsq ...any order +// Else +// poly := FR_rsq*FR_rsq*(QQ_2 + FR_rsq*(QQ_3 + ... + FR_rsq*QQ_8)) +// U_hi := 1 + QQ_1 * r_hi * r_hi ...any order +// U_lo := QQ_1 * r_lo * (r + r_hi) +// correction := -c*(r + S_1*FR_rsq*r) ...any order +// Endif +// +// V := poly + (U_lo + correction) ...observe order +// +// result := (i_0 == 0? 1.0 : -1.0) +// +// Last instruction in user-set rounding mode +// +// result := (i_0 == 0? result*U_hi + V : +// result*U_hi - V) +// +// Return +// +// Step 6. Small_r. +// +// ...Use flush to zero mode without causing exception +// Let [i_0 i_1] be the two lsb of N_fix. +// +// FR_rsq := r * r +// +// If i_1 = 0 then +// z := FR_rsq*FR_rsq; z := FR_rsq*z *r +// poly_lo := S_3 + FR_rsq*(S_4 + FR_rsq*S_5) +// poly_hi := r*FR_rsq*(S_1 + FR_rsq*S_2) +// correction := c +// result := r +// Else +// z := FR_rsq*FR_rsq; z := FR_rsq*z +// poly_lo := C_3 + FR_rsq*(C_4 + FR_rsq*C_5) +// poly_hi := FR_rsq*(C_1 + FR_rsq*C_2) +// correction := -c*r +// result := 1 +// Endif +// +// poly := poly_hi + (z * poly_lo + correction) +// +// If i_0 = 1, result := -result +// +// Last operation. Perform in user-set rounding mode +// +// result := (i_0 == 0? result + poly : +// result - poly ) +// Return +// +// Step 7. Case_2_reduce. +// +// ...Refer to the write up for argument reduction for +// ...rationale. The reduction algorithm below is taken from +// ...argument reduction description and integrated this. +// +// w := N*P_3 +// U_1 := N*P_2 + w ...FMA +// U_2 := (N*P_2 - U_1) + w ...2 FMA +// ...U_1 + U_2 is N*(P_2+P_3) accurately +// +// r := s - U_1 +// c := ( (s - r) - U_1 ) - U_2 +// +// ...The mathematical sum r + c approximates the reduced +// ...argument accurately. Note that although compared to +// ...Case 1, this case requires much more work to reduce +// ...the argument, the subsequent calculation needed for +// ...any of the trigonometric function is very little because +// ...|alpha| < 1.01*2^(-33) and thus two terms of the +// ...Taylor series expansion suffices. +// +// If i_1 = 0 then +// poly := c + S_1 * r * r * r ...any order +// result := r +// Else +// poly := -2^(-67) +// result := 1.0 +// Endif +// +// If i_0 = 1, result := -result +// +// Last operation. Perform in user-set rounding mode +// +// result := (i_0 == 0? result + poly : +// result - poly ) +// +// Return +// +// +// Step 8. Pre-reduction of large arguments. +// +// ...Again, the following reduction procedure was described +// ...in the separate write up for argument reduction, which +// ...is tightly integrated here. + +// N_0 := Arg * Inv_P_0 +// N_0_fix := fcvt.fx( N_0 ) +// N_0 := fcvt.xf( N_0_fix) + +// Arg' := Arg - N_0 * P_0 +// w := N_0 * d_1 +// N := Arg' * two_by_PI +// N_fix := fcvt.fx( N ) +// N := fcvt.xf( N_fix ) +// N_fix := N_fix + N_inc +// +// s := Arg' - N * P_1 +// w := w - N * P_2 +// +// If |s| >= 2^(-14) +// go to Step 3 +// Else +// go to Step 9 +// Endif +// +// Step 9. Case_4_reduce. +// +// ...first obtain N_0*d_1 and -N*P_2 accurately +// U_hi := N_0 * d_1 V_hi := -N*P_2 +// U_lo := N_0 * d_1 - U_hi V_lo := -N*P_2 - U_hi ...FMAs +// +// ...compute the contribution from N_0*d_1 and -N*P_3 +// w := -N*P_3 +// w := w + N_0*d_2 +// t := U_lo + V_lo + w ...any order +// +// ...at this point, the mathematical value +// ...s + U_hi + V_hi + t approximates the true reduced argument +// ...accurately. Just need to compute this accurately. +// +// ...Calculate U_hi + V_hi accurately: +// A := U_hi + V_hi +// if |U_hi| >= |V_hi| then +// a := (U_hi - A) + V_hi +// else +// a := (V_hi - A) + U_hi +// endif +// ...order in computing "a" must be observed. This branch is +// ...best implemented by predicates. +// ...A + a is U_hi + V_hi accurately. Moreover, "a" is +// ...much smaller than A: |a| <= (1/2)ulp(A). +// +// ...Just need to calculate s + A + a + t +// C_hi := s + A t := t + a +// C_lo := (s - C_hi) + A +// C_lo := C_lo + t +// +// ...Final steps for reduction +// r := C_hi + C_lo +// c := (C_hi - r) + C_lo +// +// ...At this point, we have r and c +// ...And all we need is a couple of terms of the corresponding +// ...Taylor series. +// +// If i_1 = 0 +// poly := c + r*FR_rsq*(S_1 + FR_rsq*S_2) +// result := r +// Else +// poly := FR_rsq*(C_1 + FR_rsq*C_2) +// result := 1 +// Endif +// +// If i_0 = 1, result := -result +// +// Last operation. Perform in user-set rounding mode +// +// result := (i_0 == 0? result + poly : +// result - poly ) +// Return +// +// Large Arguments: For arguments above 2**63, a Payne-Hanek +// style argument reduction is used and pi_by_2 reduce is called. +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif +.align 64 + +FSINCOSL_CONSTANTS: +ASM_TYPE_DIRECTIVE(FSINCOSL_CONSTANTS,@object) +data4 0x4B800000, 0xCB800000, 0x00000000,0x00000000 // two**24, -two**24 +data4 0x4E44152A, 0xA2F9836E, 0x00003FFE,0x00000000 // Inv_pi_by_2 +data4 0xCE81B9F1, 0xC84D32B0, 0x00004016,0x00000000 // P_0 +data4 0x2168C235, 0xC90FDAA2, 0x00003FFF,0x00000000 // P_1 +data4 0xFC8F8CBB, 0xECE675D1, 0x0000BFBD,0x00000000 // P_2 +data4 0xACC19C60, 0xB7ED8FBB, 0x0000BF7C,0x00000000 // P_3 +data4 0x5F000000, 0xDF000000, 0x00000000,0x00000000 // two_to_63, -two_to_63 +data4 0x6EC6B45A, 0xA397E504, 0x00003FE7,0x00000000 // Inv_P_0 +data4 0xDBD171A1, 0x8D848E89, 0x0000BFBF,0x00000000 // d_1 +data4 0x18A66F8E, 0xD5394C36, 0x0000BF7C,0x00000000 // d_2 +data4 0x2168C234, 0xC90FDAA2, 0x00003FFE,0x00000000 // pi_by_4 +data4 0x2168C234, 0xC90FDAA2, 0x0000BFFE,0x00000000 // neg_pi_by_4 +data4 0x3E000000, 0xBE000000, 0x00000000,0x00000000 // two**-3, -two**-3 +data4 0x2F000000, 0xAF000000, 0x9E000000,0x00000000 // two**-33, -two**-33, -two**-67 +data4 0xA21C0BC9, 0xCC8ABEBC, 0x00003FCE,0x00000000 // PP_8 +data4 0x720221DA, 0xD7468A05, 0x0000BFD6,0x00000000 // PP_7 +data4 0x640AD517, 0xB092382F, 0x00003FDE,0x00000000 // PP_6 +data4 0xD1EB75A4, 0xD7322B47, 0x0000BFE5,0x00000000 // PP_5 +data4 0xFFFFFFFE, 0xFFFFFFFF, 0x0000BFFD,0x00000000 // C_1 +data4 0x00000000, 0xAAAA0000, 0x0000BFFC,0x00000000 // PP_1_hi +data4 0xBAF69EEA, 0xB8EF1D2A, 0x00003FEC,0x00000000 // PP_4 +data4 0x0D03BB69, 0xD00D00D0, 0x0000BFF2,0x00000000 // PP_3 +data4 0x88888962, 0x88888888, 0x00003FF8,0x00000000 // PP_2 +data4 0xAAAB0000, 0xAAAAAAAA, 0x0000BFEC,0x00000000 // PP_1_lo +data4 0xC2B0FE52, 0xD56232EF, 0x00003FD2,0x00000000 // QQ_8 +data4 0x2B48DCA6, 0xC9C99ABA, 0x0000BFDA,0x00000000 // QQ_7 +data4 0x9C716658, 0x8F76C650, 0x00003FE2,0x00000000 // QQ_6 +data4 0xFDA8D0FC, 0x93F27DBA, 0x0000BFE9,0x00000000 // QQ_5 +data4 0xAAAAAAAA, 0xAAAAAAAA, 0x0000BFFC,0x00000000 // S_1 +data4 0x00000000, 0x80000000, 0x0000BFFE,0x00000000 // QQ_1 +data4 0x0C6E5041, 0xD00D00D0, 0x00003FEF,0x00000000 // QQ_4 +data4 0x0B607F60, 0xB60B60B6, 0x0000BFF5,0x00000000 // QQ_3 +data4 0xAAAAAA9B, 0xAAAAAAAA, 0x00003FFA,0x00000000 // QQ_2 +data4 0xFFFFFFFE, 0xFFFFFFFF, 0x0000BFFD,0x00000000 // C_1 +data4 0xAAAA719F, 0xAAAAAAAA, 0x00003FFA,0x00000000 // C_2 +data4 0x0356F994, 0xB60B60B6, 0x0000BFF5,0x00000000 // C_3 +data4 0xB2385EA9, 0xD00CFFD5, 0x00003FEF,0x00000000 // C_4 +data4 0x292A14CD, 0x93E4BD18, 0x0000BFE9,0x00000000 // C_5 +data4 0xAAAAAAAA, 0xAAAAAAAA, 0x0000BFFC,0x00000000 // S_1 +data4 0x888868DB, 0x88888888, 0x00003FF8,0x00000000 // S_2 +data4 0x055EFD4B, 0xD00D00D0, 0x0000BFF2,0x00000000 // S_3 +data4 0x839730B9, 0xB8EF1C5D, 0x00003FEC,0x00000000 // S_4 +data4 0xE5B3F492, 0xD71EA3A4, 0x0000BFE5,0x00000000 // S_5 +data4 0x38800000, 0xB8800000, 0x00000000 // two**-14, -two**-14 +ASM_SIZE_DIRECTIVE(FSINCOSL_CONSTANTS) + +FR_Input_X = f8 +FR_Neg_Two_to_M3 = f32 +FR_Two_to_63 = f32 +FR_Two_to_24 = f33 +FR_Pi_by_4 = f33 +FR_Two_to_M14 = f34 +FR_Two_to_M33 = f35 +FR_Neg_Two_to_24 = f36 +FR_Neg_Pi_by_4 = f36 +FR_Neg_Two_to_M14 = f37 +FR_Neg_Two_to_M33 = f38 +FR_Neg_Two_to_M67 = f39 +FR_Inv_pi_by_2 = f40 +FR_N_float = f41 +FR_N_fix = f42 +FR_P_1 = f43 +FR_P_2 = f44 +FR_P_3 = f45 +FR_s = f46 +FR_w = f47 +FR_c = f48 +FR_r = f49 +FR_Z = f50 +FR_A = f51 +FR_a = f52 +FR_t = f53 +FR_U_1 = f54 +FR_U_2 = f55 +FR_C_1 = f56 +FR_C_2 = f57 +FR_C_3 = f58 +FR_C_4 = f59 +FR_C_5 = f60 +FR_S_1 = f61 +FR_S_2 = f62 +FR_S_3 = f63 +FR_S_4 = f64 +FR_S_5 = f65 +FR_poly_hi = f66 +FR_poly_lo = f67 +FR_r_hi = f68 +FR_r_lo = f69 +FR_rsq = f70 +FR_r_cubed = f71 +FR_C_hi = f72 +FR_N_0 = f73 +FR_d_1 = f74 +FR_V = f75 +FR_V_hi = f75 +FR_V_lo = f76 +FR_U_hi = f77 +FR_U_lo = f78 +FR_U_hiabs = f79 +FR_V_hiabs = f80 +FR_PP_8 = f81 +FR_QQ_8 = f81 +FR_PP_7 = f82 +FR_QQ_7 = f82 +FR_PP_6 = f83 +FR_QQ_6 = f83 +FR_PP_5 = f84 +FR_QQ_5 = f84 +FR_PP_4 = f85 +FR_QQ_4 = f85 +FR_PP_3 = f86 +FR_QQ_3 = f86 +FR_PP_2 = f87 +FR_QQ_2 = f87 +FR_QQ_1 = f88 +FR_N_0_fix = f89 +FR_Inv_P_0 = f90 +FR_corr = f91 +FR_poly = f92 +FR_d_2 = f93 +FR_Two_to_M3 = f94 +FR_Neg_Two_to_63 = f94 +FR_P_0 = f95 +FR_C_lo = f96 +FR_PP_1 = f97 +FR_PP_1_lo = f98 +FR_ArgPrime = f99 + +GR_Table_Base = r32 +GR_Table_Base1 = r33 +GR_i_0 = r34 +GR_i_1 = r35 +GR_N_Inc = r36 +GR_Sin_or_Cos = r37 + +// Added for unwind support + +GR_SAVE_B0 = r39 +GR_SAVE_GP = r40 +GR_SAVE_PFS = r41 + + +.global sinl# +.global cosl# +#ifdef _LIBC +.global __sinl# +.global __cosl# +#endif + +.section .text +.proc sinl# +#ifdef _LIBC +.proc __sinl# +#endif +.align 64 +sinl: +#ifdef _LIBC +__sinl: +#endif +{ .mlx +alloc GR_Table_Base = ar.pfs,0,12,2,0 +(p0) movl GR_Sin_or_Cos = 0x0 ;; +} + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(FSINCOSL_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmb + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 +(p0) br.cond.sptk L(SINCOSL_CONTINUE) ;; +} +;; + + +.endp sinl# +ASM_SIZE_DIRECTIVE(sinl#) + +.section .text +.proc cosl# +cosl: +#ifdef _LIBC +.proc __cosl# +__cosl: +#endif +{ .mlx +alloc GR_Table_Base= ar.pfs,0,12,2,0 +(p0) movl GR_Sin_or_Cos = 0x1 ;; +} +;; + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(FSINCOSL_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmb + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.b 999 +} +;; + + + +// +// Load Table Address +// + +L(SINCOSL_CONTINUE): +{ .mmi +(p0) add GR_Table_Base1 = 96, GR_Table_Base +(p0) ldfs FR_Two_to_24 = [GR_Table_Base], 4 +// GR_Sin_or_Cos denotes +(p0) mov r39 = b0 ;; +} +{ .mmi + nop.m 0 +// +// Load 2**24, load 2**63. +// +(p0) ldfs FR_Neg_Two_to_24 = [GR_Table_Base], 12 + nop.i 0 +} +{ .mfi +(p0) ldfs FR_Two_to_63 = [GR_Table_Base1], 4 +// +// Check for unnormals - unsupported operands. We do not want +// to generate denormal exception +// Check for NatVals, QNaNs, SNaNs, +/-Infs +// Check for EM unsupporteds +// Check for Zero +// +(p0) fclass.m.unc p6, p0 = FR_Input_X, 0x1E3 + nop.i 0 +};; +{ .mmf + nop.m 999 +(p0) ldfs FR_Neg_Two_to_63 = [GR_Table_Base1], 12 +(p0) fclass.nm.unc p8, p0 = FR_Input_X, 0x1FF +} +{ .mfb + nop.m 999 +(p0) fclass.m.unc p10, p0 = FR_Input_X, 0x007 +(p6) br.cond.spnt L(SINCOSL_SPECIAL) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(SINCOSL_SPECIAL) ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Branch if +/- NaN, Inf. +// Load -2**24, load -2**63. +// +(p10) br.cond.spnt L(SINCOSL_ZERO) ;; +} +{ .mmb +(p0) ldfe FR_Inv_pi_by_2 = [GR_Table_Base], 16 +(p0) ldfe FR_Inv_P_0 = [GR_Table_Base1], 16 + nop.b 999 ;; +} +{ .mmb +(p0) ldfe FR_d_1 = [GR_Table_Base1], 16 +// +// Raise possible denormal operand flag with useful fcmp +// Is x <= -2**63 +// Load Inv_P_0 for pre-reduction +// Load Inv_pi_by_2 +// +(p0) ldfe FR_P_0 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mmb +(p0) ldfe FR_d_2 = [GR_Table_Base1], 16 +// +// Load P_0 +// Load d_1 +// Is x >= 2**63 +// Is x <= -2**24? +// +(p0) ldfe FR_P_1 = [GR_Table_Base], 16 + nop.b 999 ;; +} +// +// Load P_1 +// Load d_2 +// Is x >= 2**24? +// +{ .mfi +(p0) ldfe FR_P_2 = [GR_Table_Base], 16 +(p0) fcmp.le.unc.s1 p7, p8 = FR_Input_X, FR_Neg_Two_to_24 + nop.i 999 ;; +} +{ .mbb +(p0) ldfe FR_P_3 = [GR_Table_Base], 16 + nop.b 999 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +(p8) fcmp.ge.s1 p7, p0 = FR_Input_X, FR_Two_to_24 + nop.i 999 +} +{ .mfi +(p0) ldfe FR_Pi_by_4 = [GR_Table_Base1], 16 +// +// Branch if +/- zero. +// Decide about the paths to take: +// If -2**24 < FR_Input_X < 2**24 - CASE 1 OR 2 +// OTHERWISE - CASE 3 OR 4 +// +(p0) fcmp.le.unc.s0 p10, p11 = FR_Input_X, FR_Neg_Two_to_63 + nop.i 999 ;; +} +{ .mmi +(p0) ldfe FR_Neg_Pi_by_4 = [GR_Table_Base1], 16 ;; +(p0) ldfs FR_Two_to_M3 = [GR_Table_Base1], 4 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fcmp.ge.s1 p10, p0 = FR_Input_X, FR_Two_to_63 + nop.i 999 ;; +} +{ .mib +(p0) ldfs FR_Neg_Two_to_M3 = [GR_Table_Base1], 12 + nop.i 999 +// +// Load P_2 +// Load P_3 +// Load pi_by_4 +// Load neg_pi_by_4 +// Load 2**(-3) +// Load -2**(-3). +// +(p10) br.cond.spnt L(SINCOSL_ARG_TOO_LARGE) ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Branch out if x >= 2**63. Use Payne-Hanek Reduction +// +(p7) br.cond.spnt L(SINCOSL_LARGER_ARG) ;; +} +{ .mfi + nop.m 999 +// +// Branch if Arg <= -2**24 or Arg >= 2**24 and use pre-reduction. +// +(p0) fma.s1 FR_N_float = FR_Input_X, FR_Inv_pi_by_2, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p6, p7 = FR_Input_X, FR_Pi_by_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Select the case when |Arg| < pi/4 +// Else Select the case when |Arg| >= pi/4 +// +(p0) fcvt.fx.s1 FR_N_fix = FR_N_float + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N = Arg * 2/pi +// Check if Arg < pi/4 +// +(p6) fcmp.gt.s1 p6, p7 = FR_Input_X, FR_Neg_Pi_by_4 + nop.i 999 ;; +} +// +// Case 2: Convert integer N_fix back to normalized floating-point value. +// Case 1: p8 is only affected when p6 is set +// +{ .mfi +(p7) ldfs FR_Two_to_M33 = [GR_Table_Base1], 4 +// +// Grab the integer part of N and call it N_fix +// +(p6) fmerge.se FR_r = FR_Input_X, FR_Input_X +// If |x| < pi/4, r = x and c = 0 +// lf |x| < pi/4, is x < 2**(-3). +// r = Arg +// c = 0 +(p6) mov GR_N_Inc = GR_Sin_or_Cos ;; +} +{ .mmf + nop.m 999 +(p7) ldfs FR_Neg_Two_to_M33 = [GR_Table_Base1], 4 +(p6) fmerge.se FR_c = f0, f0 +} +{ .mfi + nop.m 999 +(p6) fcmp.lt.unc.s1 p8, p9 = FR_Input_X, FR_Two_to_M3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// lf |x| < pi/4, is -2**(-3)< x < 2**(-3) - set p8. +// If |x| >= pi/4, +// Create the right N for |x| < pi/4 and otherwise +// Case 2: Place integer part of N in GP register +// +(p7) fcvt.xf FR_N_float = FR_N_fix + nop.i 999 ;; +} +{ .mmf + nop.m 999 +(p7) getf.sig GR_N_Inc = FR_N_fix +(p8) fcmp.gt.s1 p8, p0 = FR_Input_X, FR_Neg_Two_to_M3 ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Load 2**(-33), -2**(-33) +// +(p8) br.cond.spnt L(SINCOSL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.sptk L(SINCOSL_NORMAL_R) ;; +} +// +// if |x| < pi/4, branch based on |x| < 2**(-3) or otherwise. +// +// +// In this branch, |x| >= pi/4. +// +{ .mfi +(p0) ldfs FR_Neg_Two_to_M67 = [GR_Table_Base1], 8 +// +// Load -2**(-67) +// +(p0) fnma.s1 FR_s = FR_N_float, FR_P_1, FR_Input_X +// +// w = N * P_2 +// s = -N * P_1 + Arg +// +(p0) add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_w = FR_N_float, FR_P_2, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Adjust N_fix by N_inc to determine whether sine or +// cosine is being calculated +// +(p0) fcmp.lt.unc.s1 p7, p6 = FR_s, FR_Two_to_M33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fcmp.gt.s1 p7, p6 = FR_s, FR_Neg_Two_to_M33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// Remember x >= pi/4. +// Is s <= -2**(-33) or s >= 2**(-33) (p6) +// or -2**(-33) < s < 2**(-33) (p7) +(p6) fms.s1 FR_r = FR_s, f1, FR_w + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 FR_w = FR_N_float, FR_P_3, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fma.s1 FR_U_1 = FR_N_float, FR_P_2, FR_w + nop.i 999 +} +{ .mfi + nop.m 999 +(p6) fms.s1 FR_c = FR_s, f1, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// For big s: r = s - w: No futher reduction is necessary +// For small s: w = N * P_3 (change sign) More reduction +// +(p6) fcmp.lt.unc.s1 p8, p9 = FR_r, FR_Two_to_M3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fcmp.gt.s1 p8, p9 = FR_r, FR_Neg_Two_to_M3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fms.s1 FR_r = FR_s, f1, FR_U_1 + nop.i 999 +} +{ .mfb + nop.m 999 +// +// For big s: Is |r| < 2**(-3)? +// For big s: c = S - r +// For small s: U_1 = N * P_2 + w +// +// If p8 is set, prepare to branch to Small_R. +// If p9 is set, prepare to branch to Normal_R. +// For big s, r is complete here. +// +(p6) fms.s1 FR_c = FR_c, f1, FR_w +// +// For big s: c = c + w (w has not been negated.) +// For small s: r = S - U_1 +// +(p8) br.cond.spnt L(SINCOSL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.sptk L(SINCOSL_NORMAL_R) ;; +} +{ .mfi +(p7) add GR_Table_Base1 = 224, GR_Table_Base1 +// +// Branch to SINCOSL_SMALL_R or SINCOSL_NORMAL_R +// +(p7) fms.s1 FR_U_2 = FR_N_float, FR_P_2, FR_U_1 +// +// c = S - U_1 +// r = S_1 * r +// +// +(p7) extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; +} +{ .mmi + nop.m 999 +// +// Get [i_0,i_1] - two lsb of N_fix_gr. +// Do dummy fmpy so inexact is always set. +// +(p7) cmp.eq.unc p9, p10 = 0x0, GR_i_1 +(p7) extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} +// +// For small s: U_2 = N * P_2 - U_1 +// S_1 stored constant - grab the one stored with the +// coefficients. +// +{ .mfi +(p7) ldfe FR_S_1 = [GR_Table_Base1], 16 +// +// Check if i_1 and i_0 != 0 +// +(p10) fma.s1 FR_poly = f0, f1, FR_Neg_Two_to_M67 +(p7) cmp.eq.unc p11, p12 = 0x0, GR_i_0 ;; +} +{ .mfi + nop.m 999 +(p7) fms.s1 FR_s = FR_s, f1, FR_r + nop.i 999 +} +{ .mfi + nop.m 999 +// +// S = S - r +// U_2 = U_2 + w +// load S_1 +// +(p7) fma.s1 FR_rsq = FR_r, FR_r, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fma.s1 FR_U_2 = FR_U_2, f1, FR_w + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fmerge.se FR_Input_X = FR_r, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_Input_X = f0, f1, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// FR_rsq = r * r +// Save r as the result. +// +(p7) fms.s1 FR_c = FR_s, f1, FR_U_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if ( i_1 ==0) poly = c + S_1*r*r*r +// else Result = 1 +// +(p12) fnma.s1 FR_Input_X = FR_Input_X, f1, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fma.s1 FR_r = FR_S_1, FR_r, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fma.s0 FR_S_1 = FR_S_1, FR_S_1, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// If i_1 != 0, poly = 2**(-67) +// +(p7) fms.s1 FR_c = FR_c, f1, FR_U_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// c = c - U_2 +// +(p9) fma.s1 FR_poly = FR_r, FR_rsq, FR_c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// i_0 != 0, so Result = -Result +// +(p11) fma.s0 FR_Input_X = FR_Input_X, f1, FR_poly + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p12) fms.s0 FR_Input_X = FR_Input_X, f1, FR_poly +// +// if (i_0 == 0), Result = Result + poly +// else Result = Result - poly +// +(p0) br.ret.sptk b0 ;; +} +L(SINCOSL_LARGER_ARG): +{ .mfi + nop.m 999 +(p0) fma.s1 FR_N_0 = FR_Input_X, FR_Inv_P_0, f0 + nop.i 999 +} +;; + +// This path for argument > 2*24 +// Adjust table_ptr1 to beginning of table. +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(FSINCOSL_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +// +// Point to 2*-14 +// N_0 = Arg * Inv_P_0 +// +{ .mmi +(p0) add GR_Table_Base = 688, GR_Table_Base ;; +(p0) ldfs FR_Two_to_M14 = [GR_Table_Base], 4 + nop.i 999 ;; +} +{ .mfi +(p0) ldfs FR_Neg_Two_to_M14 = [GR_Table_Base], 0 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Load values 2**(-14) and -2**(-14) +// +(p0) fcvt.fx.s1 FR_N_0_fix = FR_N_0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N_0_fix = integer part of N_0 +// +(p0) fcvt.xf FR_N_0 = FR_N_0_fix + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Make N_0 the integer part +// +(p0) fnma.s1 FR_ArgPrime = FR_N_0, FR_P_0, FR_Input_X + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_w = FR_N_0, FR_d_1, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Arg' = -N_0 * P_0 + Arg +// w = N_0 * d_1 +// +(p0) fma.s1 FR_N_float = FR_ArgPrime, FR_Inv_pi_by_2, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N = A' * 2/pi +// +(p0) fcvt.fx.s1 FR_N_fix = FR_N_float + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N_fix is the integer part +// +(p0) fcvt.xf FR_N_float = FR_N_fix + nop.i 999 ;; +} +{ .mfi +(p0) getf.sig GR_N_Inc = FR_N_fix + nop.f 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +(p0) add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos ;; +} +{ .mfi + nop.m 999 +// +// N is the integer part of the reduced-reduced argument. +// Put the integer in a GP register +// +(p0) fnma.s1 FR_s = FR_N_float, FR_P_1, FR_ArgPrime + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnma.s1 FR_w = FR_N_float, FR_P_2, FR_w + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// s = -N*P_1 + Arg' +// w = -N*P_2 + w +// N_fix_gr = N_fix_gr + N_inc +// +(p0) fcmp.lt.unc.s1 p9, p8 = FR_s, FR_Two_to_M14 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fcmp.gt.s1 p9, p8 = FR_s, FR_Neg_Two_to_M14 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// For |s| > 2**(-14) r = S + w (r complete) +// Else U_hi = N_0 * d_1 +// +(p9) fma.s1 FR_V_hi = FR_N_float, FR_P_2, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_hi = FR_N_0, FR_d_1, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Either S <= -2**(-14) or S >= 2**(-14) +// or -2**(-14) < s < 2**(-14) +// +(p8) fma.s1 FR_r = FR_s, f1, FR_w + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_w = FR_N_float, FR_P_3, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// We need abs of both U_hi and V_hi - don't +// worry about switched sign of V_hi. +// +(p9) fms.s1 FR_A = FR_U_hi, f1, FR_V_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Big s: finish up c = (S - r) + w (c complete) +// Case 4: A = U_hi + V_hi +// Note: Worry about switched sign of V_hi, so subtract instead of add. +// +(p9) fnma.s1 FR_V_lo = FR_N_float, FR_P_2, FR_V_hi + nop.i 999 ;; +} +{ .mmf + nop.m 999 + nop.m 999 +(p9) fms.s1 FR_U_lo = FR_N_0, FR_d_1, FR_U_hi +} +{ .mfi + nop.m 999 +(p9) fmerge.s FR_V_hiabs = f0, FR_V_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// For big s: c = S - r +// For small s do more work: U_lo = N_0 * d_1 - U_hi +// +(p9) fmerge.s FR_U_hiabs = f0, FR_U_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// For big s: Is |r| < 2**(-3) +// For big s: if p12 set, prepare to branch to Small_R. +// For big s: If p13 set, prepare to branch to Normal_R. +// +(p8) fms.s1 FR_c = FR_s, f1, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// For small S: V_hi = N * P_2 +// w = N * P_3 +// Note the product does not include the (-) as in the writeup +// so (-) missing for V_hi and w. +// +(p8) fcmp.lt.unc.s1 p12, p13 = FR_r, FR_Two_to_M3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fcmp.gt.s1 p12, p13 = FR_r, FR_Neg_Two_to_M3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fma.s1 FR_c = FR_c, f1, FR_w + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fms.s1 FR_w = FR_N_0, FR_d_2, FR_w +(p12) br.cond.spnt L(SINCOSL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.sptk L(SINCOSL_NORMAL_R) ;; +} +{ .mfi + nop.m 999 +// +// Big s: Vector off when |r| < 2**(-3). Recall that p8 will be true. +// The remaining stuff is for Case 4. +// Small s: V_lo = N * P_2 + U_hi (U_hi is in place of V_hi in writeup) +// Note: the (-) is still missing for V_lo. +// Small s: w = w + N_0 * d_2 +// Note: the (-) is now incorporated in w. +// +(p9) fcmp.ge.unc.s1 p10, p11 = FR_U_hiabs, FR_V_hiabs +(p0) extr.u GR_i_1 = GR_N_Inc, 0, 1 +} +{ .mfi + nop.m 999 +// +// C_hi = S + A +// +(p9) fma.s1 FR_t = FR_U_lo, f1, FR_V_lo +(p0) extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} +{ .mfi + nop.m 999 +// +// t = U_lo + V_lo +// +// +(p10) fms.s1 FR_a = FR_U_hi, f1, FR_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fma.s1 FR_a = FR_V_hi, f1, FR_A + nop.i 999 +} +;; + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(FSINCOSL_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi +(p0) add GR_Table_Base = 528, GR_Table_Base +// +// Is U_hiabs >= V_hiabs? +// +(p9) fma.s1 FR_C_hi = FR_s, f1, FR_A + nop.i 999 ;; +} +{ .mmi +(p0) ldfe FR_C_1 = [GR_Table_Base], 16 ;; +(p0) ldfe FR_C_2 = [GR_Table_Base], 64 + nop.i 999 ;; +} +// +// c = c + C_lo finished. +// Load C_2 +// +{ .mfi +(p0) ldfe FR_S_1 = [GR_Table_Base], 16 +// +// C_lo = S - C_hi +// +(p0) fma.s1 FR_t = FR_t, f1, FR_w + nop.i 999 ;; +} +// +// r and c have been computed. +// Make sure ftz mode is set - should be automatic when using wre +// |r| < 2**(-3) +// Get [i_0,i_1] - two lsb of N_fix. +// Load S_1 +// +{ .mfi +(p0) ldfe FR_S_2 = [GR_Table_Base], 64 +// +// t = t + w +// +(p10) fms.s1 FR_a = FR_a, f1, FR_V_hi +(p0) cmp.eq.unc p9, p10 = 0x0, GR_i_0 ;; +} +{ .mfi + nop.m 999 +// +// For larger u than v: a = U_hi - A +// Else a = V_hi - A (do an add to account for missing (-) on V_hi +// +(p0) fms.s1 FR_C_lo = FR_s, f1, FR_C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fms.s1 FR_a = FR_U_hi, f1, FR_a +(p0) cmp.eq.unc p11, p12 = 0x0, GR_i_1 ;; +} +{ .mfi + nop.m 999 +// +// If u > v: a = (U_hi - A) + V_hi +// Else a = (V_hi - A) + U_hi +// In each case account for negative missing from V_hi. +// +(p0) fma.s1 FR_C_lo = FR_C_lo, f1, FR_A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_lo = (S - C_hi) + A +// +(p0) fma.s1 FR_t = FR_t, f1, FR_a + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// t = t + a +// +(p0) fma.s1 FR_C_lo = FR_C_lo, f1, FR_t + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// C_lo = C_lo + t +// Adjust Table_Base to beginning of table +// +(p0) fma.s1 FR_r = FR_C_hi, f1, FR_C_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Load S_2 +// +(p0) fma.s1 FR_rsq = FR_r, FR_r, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Table_Base points to C_1 +// r = C_hi + C_lo +// +(p0) fms.s1 FR_c = FR_C_hi, f1, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if i_1 ==0: poly = S_2 * FR_rsq + S_1 +// else poly = C_2 * FR_rsq + C_1 +// +(p11) fma.s1 FR_Input_X = f0, f1, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 FR_Input_X = f0, f1, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Compute r_cube = FR_rsq * r +// +(p11) fma.s1 FR_poly = FR_rsq, FR_S_2, FR_S_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 FR_poly = FR_rsq, FR_C_2, FR_C_1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Compute FR_rsq = r * r +// Is i_1 == 0 ? +// +(p0) fma.s1 FR_r_cubed = FR_rsq, FR_r, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// c = C_hi - r +// Load C_1 +// +(p0) fma.s1 FR_c = FR_c, f1, FR_C_lo + nop.i 999 +} +{ .mfi + nop.m 999 +// +// if i_1 ==0: poly = r_cube * poly + c +// else poly = FR_rsq * poly +// +(p10) fms.s1 FR_Input_X = f0, f1, FR_Input_X + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if i_1 ==0: Result = r +// else Result = 1.0 +// +(p11) fma.s1 FR_poly = FR_r_cubed, FR_poly, FR_c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 FR_poly = FR_rsq, FR_poly, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if i_0 !=0: Result = -Result +// +(p9) fma.s0 FR_Input_X = FR_Input_X, f1, FR_poly + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p10) fms.s0 FR_Input_X = FR_Input_X, f1, FR_poly +// +// if i_0 == 0: Result = Result + poly +// else Result = Result - poly +// +(p0) br.ret.sptk b0 ;; +} +L(SINCOSL_SMALL_R): +{ .mii + nop.m 999 +(p0) extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; +// +// +// Compare both i_1 and i_0 with 0. +// if i_1 == 0, set p9. +// if i_0 == 0, set p11. +// +(p0) cmp.eq.unc p9, p10 = 0x0, GR_i_1 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_rsq = FR_r, FR_r, f0 +(p0) extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} +{ .mfi + nop.m 999 +// +// Z = Z * FR_rsq +// +(p10) fnma.s1 FR_c = FR_c, FR_r, f0 +(p0) cmp.eq.unc p11, p12 = 0x0, GR_i_0 +} +;; + +// ****************************************************************** +// ****************************************************************** +// ****************************************************************** +// r and c have been computed. +// We know whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +// |r| < 2**(-3) +// +// Set table_ptr1 to beginning of constant table. +// Get [i_0,i_1] - two lsb of N_fix_gr. +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(FSINCOSL_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +// +// Set table_ptr1 to point to S_5. +// Set table_ptr1 to point to C_5. +// Compute FR_rsq = r * r +// +{ .mfi +(p9) add GR_Table_Base = 672, GR_Table_Base +(p10) fmerge.s FR_r = f1, f1 +(p10) add GR_Table_Base = 592, GR_Table_Base ;; +} +// +// Set table_ptr1 to point to S_5. +// Set table_ptr1 to point to C_5. +// +{ .mmi +(p9) ldfe FR_S_5 = [GR_Table_Base], -16 ;; +// +// if (i_1 == 0) load S_5 +// if (i_1 != 0) load C_5 +// +(p9) ldfe FR_S_4 = [GR_Table_Base], -16 + nop.i 999 ;; +} +{ .mmf +(p10) ldfe FR_C_5 = [GR_Table_Base], -16 +// +// Z = FR_rsq * FR_rsq +// +(p9) ldfe FR_S_3 = [GR_Table_Base], -16 +// +// Compute FR_rsq = r * r +// if (i_1 == 0) load S_4 +// if (i_1 != 0) load C_4 +// +(p0) fma.s1 FR_Z = FR_rsq, FR_rsq, f0 ;; +} +// +// if (i_1 == 0) load S_3 +// if (i_1 != 0) load C_3 +// +{ .mmi +(p9) ldfe FR_S_2 = [GR_Table_Base], -16 ;; +// +// if (i_1 == 0) load S_2 +// if (i_1 != 0) load C_2 +// +(p9) ldfe FR_S_1 = [GR_Table_Base], -16 + nop.i 999 +} +{ .mmi +(p10) ldfe FR_C_4 = [GR_Table_Base], -16 ;; +(p10) ldfe FR_C_3 = [GR_Table_Base], -16 + nop.i 999 ;; +} +{ .mmi +(p10) ldfe FR_C_2 = [GR_Table_Base], -16 ;; +(p10) ldfe FR_C_1 = [GR_Table_Base], -16 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// if (i_1 != 0): +// poly_lo = FR_rsq * C_5 + C_4 +// poly_hi = FR_rsq * C_2 + C_1 +// +(p9) fma.s1 FR_Z = FR_Z, FR_r, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1 == 0) load S_1 +// if (i_1 != 0) load C_1 +// +(p9) fma.s1 FR_poly_lo = FR_rsq, FR_S_5, FR_S_4 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// c = -c * r +// dummy fmpy's to flag inexact. +// +(p9) fma.s0 FR_S_4 = FR_S_4, FR_S_4, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = FR_rsq * poly_lo + C_3 +// poly_hi = FR_rsq * poly_hi +// +(p0) fma.s1 FR_Z = FR_Z, FR_rsq, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_poly_hi = FR_rsq, FR_S_2, FR_S_1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// if (i_1 == 0): +// poly_lo = FR_rsq * S_5 + S_4 +// poly_hi = FR_rsq * S_2 + S_1 +// +(p10) fma.s1 FR_poly_lo = FR_rsq, FR_C_5, FR_C_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1 == 0): +// Z = Z * r for only one of the small r cases - not there +// in original implementation notes. +// +(p9) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_S_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly_hi = FR_rsq, FR_C_2, FR_C_1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s0 FR_C_1 = FR_C_1, FR_C_1, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// poly_lo = FR_rsq * poly_lo + S_3 +// poly_hi = FR_rsq * poly_hi +// +(p10) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_C_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1 == 0): dummy fmpy's to flag inexact +// r = 1 +// +(p9) fma.s1 FR_poly_hi = FR_r, FR_poly_hi, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// poly_hi = r * poly_hi +// +(p0) fma.s1 FR_poly = FR_Z, FR_poly_lo, FR_c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fms.s1 FR_r = f0, f1, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_hi = Z * poly_lo + c +// if i_0 == 1: r = -r +// +(p0) fma.s1 FR_poly = FR_poly, f1, FR_poly_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fms.s0 FR_Input_X = FR_r, f1, FR_poly + nop.i 999 +} +{ .mfb + nop.m 999 +// +// poly = poly + poly_hi +// +(p11) fma.s0 FR_Input_X = FR_r, f1, FR_poly +// +// if (i_0 == 0) Result = r + poly +// if (i_0 != 0) Result = r - poly +// +(p0) br.ret.sptk b0 ;; +} +L(SINCOSL_NORMAL_R): +{ .mii + nop.m 999 +(p0) extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; +// +// Set table_ptr1 and table_ptr2 to base address of +// constant table. +(p0) cmp.eq.unc p9, p10 = 0x0, GR_i_1 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_rsq = FR_r, FR_r, f0 +(p0) extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; +} +{ .mfi + nop.m 999 +(p0) frcpa.s1 FR_r_hi, p6 = f1, FR_r +(p0) cmp.eq.unc p11, p12 = 0x0, GR_i_0 +} +;; + +// ****************************************************************** +// ****************************************************************** +// ****************************************************************** +// +// r and c have been computed. +// We known whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +// Get [i_0,i_1] - two lsb of N_fix_gr alone. +// + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(FSINCOSL_CONSTANTS#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 GR_Table_Base = [GR_Table_Base] + nop.m 999 + nop.i 999 +} +;; + + +{ .mfi +(p10) add GR_Table_Base = 384, GR_Table_Base +(p12) fms.s1 FR_Input_X = f0, f1, f1 +(p9) add GR_Table_Base = 224, GR_Table_Base ;; +} +{ .mfi +(p10) ldfe FR_QQ_8 = [GR_Table_Base], 16 +// +// if (i_1==0) poly = poly * FR_rsq + PP_1_lo +// else poly = FR_rsq * poly +// +(p11) fma.s1 FR_Input_X = f0, f1, f1 + nop.i 999 ;; +} +{ .mmb +(p10) ldfe FR_QQ_7 = [GR_Table_Base], 16 +// +// Adjust table pointers based on i_0 +// Compute rsq = r * r +// +(p9) ldfe FR_PP_8 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 + nop.i 999 ;; +} +{ .mmf +(p9) ldfe FR_PP_7 = [GR_Table_Base], 16 +(p10) ldfe FR_QQ_6 = [GR_Table_Base], 16 +// +// Load PP_8 and QQ_8; PP_7 and QQ_7 +// +(p0) frcpa.s1 FR_r_hi, p6 = f1, FR_r_hi ;; +} +// +// if (i_1==0) poly = PP_7 + FR_rsq * PP_8. +// else poly = QQ_7 + FR_rsq * QQ_8. +// +{ .mmb +(p9) ldfe FR_PP_6 = [GR_Table_Base], 16 +(p10) ldfe FR_QQ_5 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mmb +(p9) ldfe FR_PP_5 = [GR_Table_Base], 16 +(p10) ldfe FR_S_1 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mmb +(p10) ldfe FR_QQ_1 = [GR_Table_Base], 16 +(p9) ldfe FR_C_1 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mmb +(p10) ldfe FR_QQ_4 = [GR_Table_Base], 16 +(p9) ldfe FR_PP_1 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mmb +(p10) ldfe FR_QQ_3 = [GR_Table_Base], 16 +// +// if (i_1=0) corr = corr + c*c +// else corr = corr * c +// +(p9) ldfe FR_PP_4 = [GR_Table_Base], 16 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_QQ_8, FR_QQ_7 + nop.i 999 ;; +} +// +// if (i_1=0) poly = rsq * poly + PP_5 +// else poly = rsq * poly + QQ_5 +// Load PP_4 or QQ_4 +// +{ .mmi +(p9) ldfe FR_PP_3 = [GR_Table_Base], 16 ;; +(p10) ldfe FR_QQ_2 = [GR_Table_Base], 16 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// r_hi = frcpa(frcpa(r)). +// r_cube = r * FR_rsq. +// +(p9) fma.s1 FR_poly = FR_rsq, FR_PP_8, FR_PP_7 + nop.i 999 ;; +} +// +// Do dummy multiplies so inexact is always set. +// +{ .mfi +(p9) ldfe FR_PP_2 = [GR_Table_Base], 16 +// +// r_lo = r - r_hi +// +(p9) fma.s1 FR_U_lo = FR_r_hi, FR_r_hi, f0 + nop.i 999 ;; +} +{ .mbb +(p9) ldfe FR_PP_1_lo = [GR_Table_Base], 16 + nop.b 999 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_corr = FR_S_1, FR_r_cubed, FR_r + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_6 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1=0) U_lo = r_hi * r_hi +// else U_lo = r_hi + r +// +(p9) fma.s1 FR_corr = FR_C_1, FR_rsq, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1=0) corr = C_1 * rsq +// else corr = S_1 * r_cubed + r +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_6 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_lo = FR_r_hi, f1, FR_r + nop.i 999 +} +{ .mfi + nop.m 999 +// +// if (i_1=0) U_hi = r_hi + U_hi +// else U_hi = QQ_1 * U_hi + 1 +// +(p9) fma.s1 FR_U_lo = FR_r, FR_r_hi, FR_U_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// U_hi = r_hi * r_hi +// +(p0) fms.s1 FR_r_lo = FR_r, f1, FR_r_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Load PP_1, PP_6, PP_5, and C_1 +// Load QQ_1, QQ_6, QQ_5, and S_1 +// +(p0) fma.s1 FR_U_hi = FR_r_hi, FR_r_hi, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_5 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fnma.s1 FR_corr = FR_corr, FR_c, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1=0) U_lo = r * r_hi + U_lo +// else U_lo = r_lo * U_lo +// +(p9) fma.s1 FR_corr = FR_corr, FR_c, FR_c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_5 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// if (i_1 =0) U_hi = r + U_hi +// if (i_1 =0) U_lo = r_lo * U_lo +// +// +(p9) fma.s0 FR_PP_5 = FR_PP_5, FR_PP_4, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_lo = FR_r, FR_r, FR_U_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1=0) poly = poly * rsq + PP_6 +// else poly = poly * rsq + QQ_6 +// +(p9) fma.s1 FR_U_hi = FR_r_hi, FR_U_hi, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_hi = FR_QQ_1, FR_U_hi, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s0 FR_QQ_5 = FR_QQ_5, FR_QQ_5, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1!=0) U_hi = PP_1 * U_hi +// if (i_1!=0) U_lo = r * r + U_lo +// Load PP_3 or QQ_3 +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_U_lo = FR_QQ_1,FR_U_lo, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 FR_U_hi = FR_PP_1, FR_U_hi, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Load PP_2, QQ_2 +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1==0) poly = FR_rsq * poly + PP_3 +// else poly = FR_rsq * poly + QQ_3 +// Load PP_1_lo +// +(p9) fma.s1 FR_U_lo = FR_PP_1, FR_U_lo, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1 =0) poly = poly * rsq + pp_r4 +// else poly = poly * rsq + qq_r4 +// +(p9) fma.s1 FR_U_hi = FR_r, f1, FR_U_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1==0) U_lo = PP_1_hi * U_lo +// else U_lo = QQ_1 * U_lo +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_0==0) Result = 1 +// else Result = -1 +// +(p0) fma.s1 FR_V = FR_U_lo, f1, FR_corr + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1==0) poly = FR_rsq * poly + PP_2 +// else poly = FR_rsq * poly + QQ_2 +// +(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_1_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// V = U_lo + corr +// +(p9) fma.s1 FR_poly = FR_r_cubed, FR_poly, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if (i_1==0) poly = r_cube * poly +// else poly = FR_rsq * poly +// +(p0) fma.s1 FR_V = FR_poly, f1, FR_V + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fms.s0 FR_Input_X = FR_Input_X, FR_U_hi, FR_V + nop.i 999 +} +{ .mfb + nop.m 999 +// +// V = V + poly +// +(p11) fma.s0 FR_Input_X = FR_Input_X, FR_U_hi, FR_V +// +// if (i_0==0) Result = Result * U_hi + V +// else Result = Result * U_hi - V +// +(p0) br.ret.sptk b0 +};; + +// +// If cosine, FR_Input_X = 1 +// If sine, FR_Input_X = +/-Zero (Input FR_Input_X) +// Results are exact, no exceptions +// + +L(SINCOSL_ZERO): +{ .mbb +(p0) cmp.eq.unc p6, p7 = 0x1, GR_Sin_or_Cos + nop.b 999 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +(p7) fmerge.s FR_Input_X = FR_Input_X, FR_Input_X + nop.i 999 +} +{ .mfb + nop.m 999 +(p6) fmerge.s FR_Input_X = f1, f1 +(p0) br.ret.sptk b0 ;; +} +L(SINCOSL_SPECIAL): +{ .mfb + nop.m 999 +// +// Path for Arg = +/- QNaN, SNaN, Inf +// Invalid can be raised. SNaNs +// become QNaNs +// +(p0) fmpy.s0 FR_Input_X = FR_Input_X, f0 +(p0) br.ret.sptk b0 ;; +} +.endp cosl# +ASM_SIZE_DIRECTIVE(cosl#) + +// Call int pi_by_2_reduce(double* x, double *y) +// for |arguments| >= 2**63 +// Address to save r and c as double +// +// sp+32 -> f0 +// r45 sp+16 -> f0 +// r44 -> sp -> InputX +// + +.proc __libm_callout +__libm_callout: +L(SINCOSL_ARG_TOO_LARGE): +.prologue +{ .mfi + add r45=-32,sp // Parameter: r address + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [r45] = f0,16 // Clear Parameter r on stack + add r44 = 16,sp // Parameter x address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [r45] = f0,-16 // Clear Parameter c on stack + nop.i 0 + nop.b 0 +} +{ .mib + stfe [r44] = FR_Input_X // Store Parameter x on stack + nop.i 0 +(p0) br.call.sptk b0=__libm_pi_by_2_reduce# ;; +};; +{ .mii +(p0) ldfe FR_Input_X =[r44],16 +// +// Get r and c off stack +// +(p0) adds GR_Table_Base1 = -16, GR_Table_Base1 +// +// Get r and c off stack +// +(p0) add GR_N_Inc = GR_Sin_or_Cos,r8 ;; +} +{ .mmb +(p0) ldfe FR_r =[r45],16 +// +// Get X off the stack +// Readjust Table ptr +// +(p0) ldfs FR_Two_to_M3 = [GR_Table_Base1],4 + nop.b 999 ;; +} +{ .mmb +(p0) ldfs FR_Neg_Two_to_M3 = [GR_Table_Base1],0 +(p0) ldfe FR_c =[r45] + nop.b 999 ;; +} +{ .mfi +.restore sp + add sp = 64,sp // Restore stack pointer +(p0) fcmp.lt.unc.s1 p6, p0 = FR_r, FR_Two_to_M3 + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + nop.b 0 +};; +{ .mfi + nop.m 999 +(p6) fcmp.gt.unc.s1 p6, p0 = FR_r, FR_Neg_Two_to_M3 + nop.i 999 ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(SINCOSL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p0) br.cond.sptk L(SINCOSL_NORMAL_R) ;; +} +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) +.type __libm_pi_by_2_reduce#,@function +.global __libm_pi_by_2_reduce# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_expm1.S glibc-2.2.3/sysdeps/ia64/fpu/s_expm1.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_expm1.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_expm1.S Mon Feb 19 00:54:35 2001 @@ -0,0 +1,1755 @@ +.file "exp_m1.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// HISTORY +// 2/02/00 Initial Version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: Combined exp(x) and expm1(x), where +// x +// exp(x) = e , for double precision x values +// x +// expm1(x) = e - 1 for double precision x values +// +// ********************************************************************* +// +// Accuracy: Within .7 ulps for 80-bit floating point values +// Very accurate for double precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9,f32-f61, f99-f102 +// +// General Purpose Registers: +// r32-r61 +// r62-r65 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions raised when appropriate for exp and expm1 +// Underflow exceptions raised when appropriate for exp and expm1 +// (Error Handling Routine called for overflow and Underflow) +// Inexact raised when appropriate by algorithm +// +// exp(inf) = inf +// exp(-inf) = +0 +// exp(SNaN) = QNaN +// exp(QNaN) = QNaN +// exp(0) = 1 +// exp(EM_special Values) = QNaN +// exp(inf) = inf +// expm1(-inf) = -1 +// expm1(SNaN) = QNaN +// expm1(QNaN) = QNaN +// expm1(0) = 0 +// expm1(EM_special Values) = QNaN +// +// ********************************************************************* +// +// Implementation and Algorithm Notes: +// +// ker_exp_64( in_FR : X, +// in_GR : Flag, +// in_GR : Expo_Range +// out_FR : Y_hi, +// out_FR : Y_lo, +// out_FR : scale, +// out_PR : Safe ) +// +// On input, X is in register format and +// Flag = 0 for exp, +// Flag = 1 for expm1, +// +// On output, provided X and X_cor are real numbers, then +// +// scale*(Y_hi + Y_lo) approximates exp(X) if Flag is 0 +// scale*(Y_hi + Y_lo) approximates exp(X)-1 if Flag is 1 +// +// The accuracy is sufficient for a highly accurate 64 sig. +// bit implementation. Safe is set if there is no danger of +// overflow/underflow when the result is composed from scale, +// Y_hi and Y_lo. Thus, we can have a fast return if Safe is set. +// Otherwise, one must prepare to handle the possible exception +// appropriately. Note that SAFE not set (false) does not mean +// that overflow/underflow will occur; only the setting of SAFE +// guarantees the opposite. +// +// **** High Level Overview **** +// +// The method consists of three cases. +// +// If |X| < Tiny use case exp_tiny; +// else if |X| < 2^(-6) use case exp_small; +// else use case exp_regular; +// +// Case exp_tiny: +// +// 1 + X can be used to approximate exp(X) or exp(X+X_cor); +// X + X^2/2 can be used to approximate exp(X) - 1 +// +// Case exp_small: +// +// Here, exp(X), exp(X+X_cor), and exp(X) - 1 can all be +// appproximated by a relatively simple polynomial. +// +// This polynomial resembles the truncated Taylor series +// +// exp(w) = 1 + w + w^2/2! + w^3/3! + ... + w^n/n! +// +// Case exp_regular: +// +// Here we use a table lookup method. The basic idea is that in +// order to compute exp(X), we accurately decompose X into +// +// X = N * log(2)/(2^12) + r, |r| <= log(2)/2^13. +// +// Hence +// +// exp(X) = 2^( N / 2^12 ) * exp(r). +// +// The value 2^( N / 2^12 ) is obtained by simple combinations +// of values calculated beforehand and stored in table; exp(r) +// is approximated by a short polynomial because |r| is small. +// +// We elaborate this method in 4 steps. +// +// Step 1: Reduction +// +// The value 2^12/log(2) is stored as a double-extended number +// L_Inv. +// +// N := round_to_nearest_integer( X * L_Inv ) +// +// The value log(2)/2^12 is stored as two numbers L_hi and L_lo so +// that r can be computed accurately via +// +// r := (X - N*L_hi) - N*L_lo +// +// We pick L_hi such that N*L_hi is representable in 64 sig. bits +// and thus the FMA X - N*L_hi is error free. So r is the +// 1 rounding error from an exact reduction with respect to +// +// L_hi + L_lo. +// +// In particular, L_hi has 30 significant bit and can be stored +// as a double-precision number; L_lo has 64 significant bits and +// stored as a double-extended number. +// +// In the case Flag = 2, we further modify r by +// +// r := r + X_cor. +// +// Step 2: Approximation +// +// exp(r) - 1 is approximated by a short polynomial of the form +// +// r + A_1 r^2 + A_2 r^3 + A_3 r^4 . +// +// Step 3: Composition from Table Values +// +// The value 2^( N / 2^12 ) can be composed from a couple of tables +// of precalculated values. First, express N as three integers +// K, M_1, and M_2 as +// +// N = K * 2^12 + M_1 * 2^6 + M_2 +// +// Where 0 <= M_1, M_2 < 2^6; and K can be positive or negative. +// When N is represented in 2's complement, M_2 is simply the 6 +// lsb's, M_1 is the next 6, and K is simply N shifted right +// arithmetically (sign extended) by 12 bits. +// +// Now, 2^( N / 2^12 ) is simply +// +// 2^K * 2^( M_1 / 2^6 ) * 2^( M_2 / 2^12 ) +// +// Clearly, 2^K needs no tabulation. The other two values are less +// trivial because if we store each accurately to more than working +// precision, than its product is too expensive to calculate. We +// use the following method. +// +// Define two mathematical values, delta_1 and delta_2, implicitly +// such that +// +// T_1 = exp( [M_1 log(2)/2^6] - delta_1 ) +// T_2 = exp( [M_2 log(2)/2^12] - delta_2 ) +// +// are representable as 24 significant bits. To illustrate the idea, +// we show how we define delta_1: +// +// T_1 := round_to_24_bits( exp( M_1 log(2)/2^6 ) ) +// delta_1 = (M_1 log(2)/2^6) - log( T_1 ) +// +// The last equality means mathematical equality. We then tabulate +// +// W_1 := exp(delta_1) - 1 +// W_2 := exp(delta_2) - 1 +// +// Both in double precision. +// +// From the tabulated values T_1, T_2, W_1, W_2, we compose the values +// T and W via +// +// T := T_1 * T_2 ...exactly +// W := W_1 + (1 + W_1)*W_2 +// +// W approximates exp( delta ) - 1 where delta = delta_1 + delta_2. +// The mathematical product of T and (W+1) is an accurate representation +// of 2^(M_1/2^6) * 2^(M_2/2^12). +// +// Step 4. Reconstruction +// +// Finally, we can reconstruct exp(X), exp(X) - 1. +// Because +// +// X = K * log(2) + (M_1*log(2)/2^6 - delta_1) +// + (M_2*log(2)/2^12 - delta_2) +// + delta_1 + delta_2 + r ...accurately +// We have +// +// exp(X) ~=~ 2^K * ( T + T*[exp(delta_1+delta_2+r) - 1] ) +// ~=~ 2^K * ( T + T*[exp(delta + r) - 1] ) +// ~=~ 2^K * ( T + T*[(exp(delta)-1) +// + exp(delta)*(exp(r)-1)] ) +// ~=~ 2^K * ( T + T*( W + (1+W)*poly(r) ) ) +// ~=~ 2^K * ( Y_hi + Y_lo ) +// +// where Y_hi = T and Y_lo = T*(W + (1+W)*poly(r)) +// +// For exp(X)-1, we have +// +// exp(X)-1 ~=~ 2^K * ( Y_hi + Y_lo ) - 1 +// ~=~ 2^K * ( Y_hi + Y_lo - 2^(-K) ) +// +// and we combine Y_hi + Y_lo - 2^(-N) into the form of two +// numbers Y_hi + Y_lo carefully. +// +// **** Algorithm Details **** +// +// A careful algorithm must be used to realize the mathematical ideas +// accurately. We describe each of the three cases. We assume SAFE +// is preset to be TRUE. +// +// Case exp_tiny: +// +// The important points are to ensure an accurate result under +// different rounding directions and a correct setting of the SAFE +// flag. +// +// If Flag is 1, then +// SAFE := False ...possibility of underflow +// Scale := 1.0 +// Y_hi := X +// Y_lo := 2^(-17000) +// Else +// Scale := 1.0 +// Y_hi := 1.0 +// Y_lo := X ...for different rounding modes +// Endif +// +// Case exp_small: +// +// Here we compute a simple polynomial. To exploit parallelism, we split +// the polynomial into several portions. +// +// Let r = X +// +// If Flag is not 1 ...i.e. exp( argument ) +// +// rsq := r * r; +// r4 := rsq*rsq +// poly_lo := P_3 + r*(P_4 + r*(P_5 + r*P_6)) +// poly_hi := r + rsq*(P_1 + r*P_2) +// Y_lo := poly_hi + r4 * poly_lo +// set lsb(Y_lo) to 1 +// Y_hi := 1.0 +// Scale := 1.0 +// +// Else ...i.e. exp( argument ) - 1 +// +// rsq := r * r +// r4 := rsq * rsq +// r6 := rsq * r4 +// poly_lo := r6*(Q_5 + r*(Q_6 + r*Q_7)) +// poly_hi := Q_1 + r*(Q_2 + r*(Q_3 + r*Q_4)) +// Y_lo := rsq*poly_hi + poly_lo +// set lsb(Y_lo) to 1 +// Y_hi := X +// Scale := 1.0 +// +// Endif +// +// Case exp_regular: +// +// The previous description contain enough information except the +// computation of poly and the final Y_hi and Y_lo in the case for +// exp(X)-1. +// +// The computation of poly for Step 2: +// +// rsq := r*r +// poly := r + rsq*(A_1 + r*(A_2 + r*A_3)) +// +// For the case exp(X) - 1, we need to incorporate 2^(-K) into +// Y_hi and Y_lo at the end of Step 4. +// +// If K > 10 then +// Y_lo := Y_lo - 2^(-K) +// Else +// If K < -10 then +// Y_lo := Y_hi + Y_lo +// Y_hi := -2^(-K) +// Else +// Y_hi := Y_hi - 2^(-K) +// End If +// End If +// + +#include "libm_support.h" + +GR_SAVE_PFS = r59 +GR_SAVE_B0 = r60 +GR_SAVE_GP = r61 + +GR_Parameter_X = r62 +GR_Parameter_Y = r63 +GR_Parameter_RESULT = r64 + +FR_X = f9 +FR_Y = f1 +FR_RESULT = f99 + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 64 +Constants_exp_64_Arg: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Arg,@object) +data4 0x5C17F0BC,0xB8AA3B29,0x0000400B,0x00000000 +data4 0x00000000,0xB17217F4,0x00003FF2,0x00000000 +data4 0xF278ECE6,0xF473DE6A,0x00003FD4,0x00000000 +// /* Inv_L, L_hi, L_lo */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_Arg) + +.align 64 +Constants_exp_64_Exponents: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Exponents,@object) +data4 0x0000007E,0x00000000,0xFFFFFF83,0xFFFFFFFF +data4 0x000003FE,0x00000000,0xFFFFFC03,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0xFFFFFFE2,0xFFFFFFFF,0xFFFFFFC4,0xFFFFFFFF +data4 0xFFFFFFBA,0xFFFFFFFF,0xFFFFFFBA,0xFFFFFFFF +ASM_SIZE_DIRECTIVE(Constants_exp_64_Exponents) + +.align 64 +Constants_exp_64_A: +ASM_TYPE_DIRECTIVE(Constants_exp_64_A,@object) +data4 0xB1B736A0,0xAAAAAAAB,0x00003FFA,0x00000000 +data4 0x90CD6327,0xAAAAAAAB,0x00003FFC,0x00000000 +data4 0xFFFFFFFF,0xFFFFFFFF,0x00003FFD,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_A) + +.align 64 +Constants_exp_64_P: +ASM_TYPE_DIRECTIVE(Constants_exp_64_P,@object) +data4 0x43914A8A,0xD00D6C81,0x00003FF2,0x00000000 +data4 0x30304B30,0xB60BC4AC,0x00003FF5,0x00000000 +data4 0x7474C518,0x88888888,0x00003FF8,0x00000000 +data4 0x8DAE729D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAAF61,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x000004C7,0x80000000,0x00003FFE,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_P) + +.align 64 +Constants_exp_64_Q: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Q,@object) +data4 0xA49EF6CA,0xD00D56F7,0x00003FEF,0x00000000 +data4 0x1C63493D,0xD00D59AB,0x00003FF2,0x00000000 +data4 0xFB50CDD2,0xB60B60B5,0x00003FF5,0x00000000 +data4 0x7BA68DC8,0x88888888,0x00003FF8,0x00000000 +data4 0xAAAAAC8D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAACCA,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x00000000,0x80000000,0x00003FFE,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_Q) + +.align 64 +Constants_exp_64_T1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T1,@object) +data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 +data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 +data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC +data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D +data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA +data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 +data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A +data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 +data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B +data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD +data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 +data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B +data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 +data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A +data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 +data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C +ASM_SIZE_DIRECTIVE(Constants_exp_64_T1) + +.align 64 +Constants_exp_64_T2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T2,@object) +data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 +data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 +data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E +data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 +data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 +data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA +data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 +data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A +data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 +data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA +data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 +data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA +data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 +data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 +data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE +data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 +ASM_SIZE_DIRECTIVE(Constants_exp_64_T2) + +.align 64 +Constants_exp_64_W1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W1,@object) +data4 0x00000000,0x00000000,0x171EC4B4,0xBE384454 +data4 0x4AA72766,0xBE694741,0xD42518F8,0xBE5D32B6 +data4 0x3A319149,0x3E68D96D,0x62415F36,0xBE68F4DA +data4 0xC9C86A3B,0xBE6DDA2F,0xF49228FE,0x3E6B2E50 +data4 0x1188B886,0xBE49C0C2,0x1A4C2F1F,0x3E64BFC2 +data4 0x2CB98B54,0xBE6A2FBB,0x9A55D329,0x3E5DC5DE +data4 0x39A7AACE,0x3E696490,0x5C66DBA5,0x3E54728B +data4 0xBA1C7D7D,0xBE62B0DB,0x09F1AF5F,0x3E576E04 +data4 0x1A0DD6A1,0x3E612500,0x795FBDEF,0xBE66A419 +data4 0xE1BD41FC,0xBE5CDE8C,0xEA54964F,0xBE621376 +data4 0x476E76EE,0x3E6370BE,0x3427EB92,0x3E390D1A +data4 0x2BF82BF8,0x3E1336DE,0xD0F7BD9E,0xBE5FF1CB +data4 0x0CEB09DD,0xBE60A355,0x0980F30D,0xBE5CA37E +data4 0x4C082D25,0xBE5C541B,0x3B467D29,0xBE5BBECA +data4 0xB9D946C5,0xBE400D8A,0x07ED374A,0xBE5E2A08 +data4 0x365C8B0A,0xBE66CB28,0xD3403BCA,0x3E3AAD5B +data4 0xC7EA21E0,0x3E526055,0xE72880D6,0xBE442C75 +data4 0x85222A43,0x3E58B2BB,0x522C42BF,0xBE5AAB79 +data4 0x469DC2BC,0xBE605CB4,0xA48C40DC,0xBE589FA7 +data4 0x1AA42614,0xBE51C214,0xC37293F4,0xBE48D087 +data4 0xA2D673E0,0x3E367A1C,0x114F7A38,0xBE51BEBB +data4 0x661A4B48,0xBE6348E5,0x1D3B9962,0xBDF52643 +data4 0x35A78A53,0x3E3A3B5E,0x1CECD788,0xBE46C46C +data4 0x7857D689,0xBE60B7EC,0xD14F1AD7,0xBE594D3D +data4 0x4C9A8F60,0xBE4F9C30,0x02DFF9D2,0xBE521873 +data4 0x55E6D68F,0xBE5E4C88,0x667F3DC4,0xBE62140F +data4 0x3BF88747,0xBE36961B,0xC96EC6AA,0x3E602861 +data4 0xD57FD718,0xBE3B5151,0xFC4A627B,0x3E561CD0 +data4 0xCA913FEA,0xBE3A5217,0x9A5D193A,0x3E40A3CC +data4 0x10A9C312,0xBE5AB713,0xC5F57719,0x3E4FDADB +data4 0xDBDF59D5,0x3E361428,0x61B4180D,0x3E5DB5DB +data4 0x7408D856,0xBE42AD5F,0x31B2B707,0x3E2A3148 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W1) + +.align 64 +Constants_exp_64_W2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W2,@object) +data4 0x00000000,0x00000000,0x37A3D7A2,0xBE641F25 +data4 0xAD028C40,0xBE68DD57,0xF212B1B6,0xBE5C77D8 +data4 0x1BA5B070,0x3E57878F,0x2ECAE6FE,0xBE55A36A +data4 0x569DFA3B,0xBE620608,0xA6D300A3,0xBE53B50E +data4 0x223F8F2C,0x3E5B5EF2,0xD6DE0DF4,0xBE56A0D9 +data4 0xEAE28F51,0xBE64EEF3,0x367EA80B,0xBE5E5AE2 +data4 0x5FCBC02D,0x3E47CB1A,0x9BDAFEB7,0xBE656BA0 +data4 0x805AFEE7,0x3E6E70C6,0xA3415EBA,0xBE6E0509 +data4 0x49BFF529,0xBE56856B,0x00508651,0x3E66DD33 +data4 0xC114BC13,0x3E51165F,0xC453290F,0x3E53333D +data4 0x05539FDA,0x3E6A072B,0x7C0A7696,0xBE47CD87 +data4 0xEB05C6D9,0xBE668BF4,0x6AE86C93,0xBE67C3E3 +data4 0xD0B3E84B,0xBE533904,0x556B53CE,0x3E63E8D9 +data4 0x63A98DC8,0x3E212C89,0x032A7A22,0xBE33138F +data4 0xBC584008,0x3E530FA9,0xCCB93C97,0xBE6ADF82 +data4 0x8370EA39,0x3E5F9113,0xFB6A05D8,0x3E5443A4 +data4 0x181FEE7A,0x3E63DACD,0xF0F67DEC,0xBE62B29D +data4 0x3DDE6307,0x3E65C483,0xD40A24C1,0x3E5BF030 +data4 0x14E437BE,0x3E658B8F,0xED98B6C7,0xBE631C29 +data4 0x04CF7C71,0x3E6335D2,0xE954A79D,0x3E529EED +data4 0xF64A2FB8,0x3E5D9257,0x854ED06C,0xBE6BED1B +data4 0xD71405CB,0x3E5096F6,0xACB9FDF5,0xBE3D4893 +data4 0x01B68349,0xBDFEB158,0xC6A463B9,0x3E628D35 +data4 0xADE45917,0xBE559725,0x042FC476,0xBE68C29C +data4 0x01E511FA,0xBE67593B,0x398801ED,0xBE4A4313 +data4 0xDA7C3300,0x3E699571,0x08062A9E,0x3E5349BE +data4 0x755BB28E,0x3E5229C4,0x77A1F80D,0x3E67E426 +data4 0x6B69C352,0xBE52B33F,0x084DA57F,0xBE6B3550 +data4 0xD1D09A20,0xBE6DB03F,0x2161B2C1,0xBE60CBC4 +data4 0x78A2B771,0x3E56ED9C,0x9D0FA795,0xBE508E31 +data4 0xFD1A54E9,0xBE59482A,0xB07FD23E,0xBE2A17CE +data4 0x17365712,0x3E68BF5C,0xB3785569,0x3E3956F9 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W2) + +.section .text +.proc expm1# +.global expm1# +.align 64 + +expm1: +#ifdef _LIBC +.global __expm1# +__expm1: +#endif + + +{ .mii + alloc r32 = ar.pfs,0,30,4,0 +(p0) add r33 = 1, r0 +(p0) cmp.eq.unc p7, p0 = r0, r0 +} +;; + + +// +// Set p7 true for expm1 +// Set Flag = r33 = 1 for expm1 +// These are really no longer necesary, but are a remnant +// when this file had multiple entry points. +// They should be carefully removed + + + +{ .mfi +(p0) add r32 = 1,r0 +(p0) fnorm.s1 f9 = f8 + nop.i 999 +} + + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p8 = f8, 0x1E7 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p9, p0 = f8, 0x1FF + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) mov f36 = f1 + nop.i 999 ;; +} + +// +// Identify NatVals, NaNs, Infs, and Zeros. +// Identify EM unsupporteds. +// Save special input registers +// +// Create FR_X_cor = 0.0 +// GR_Flag = 0 +// GR_Expo_Range = 1 +// FR_Scale = 1.0 +// + +{ .mfb + nop.m 999 +(p0) mov f32 = f0 +(p6) br.cond.spnt EXP_64_SPECIAL ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt EXP_64_UNSUPPORTED ;; +} + +// +// Branch out for special input values +// + +{ .mfi +(p0) cmp.ne.unc p12, p13 = 0x01, r33 +(p0) fcmp.lt.unc.s0 p9,p0 = f8, f0 +(p0) cmp.eq.unc p15, p0 = r0, r0 +} + +// +// Raise possible denormal operand exception +// Normalize x +// +// This function computes exp( x + x_cor) +// Input FR 1: FR_X +// Input FR 2: FR_X_cor +// Input GR 1: GR_Flag +// Input GR 2: GR_Expo_Range +// Output FR 3: FR_Y_hi +// Output FR 4: FR_Y_lo +// Output FR 5: FR_Scale +// Output PR 1: PR_Safe + +// +// Prepare to load constants +// Set Safe = True +// + +{ .mmi +(p0) addl r34 = @ltoff(Constants_exp_64_Arg#), gp +(p0) addl r40 = @ltoff(Constants_exp_64_W1#), gp +(p0) addl r41 = @ltoff(Constants_exp_64_W2#), gp +} +;; + +{ .mmi + ld8 r34 = [r34] + ld8 r40 = [r40] +(p0) addl r50 = @ltoff(Constants_exp_64_T1#), gp +} +;; + + +{ .mmi + ld8 r41 = [r41] +(p0) ldfe f37 = [r34],16 +(p0) addl r51 = @ltoff(Constants_exp_64_T2#), gp +} +;; + +// +// N = fcvt.fx(float_N) +// Set p14 if -6 > expo_X +// + + +// +// Bias = 0x0FFFF +// expo_X = expo_X and Mask +// + +// +// Load L_lo +// Set p10 if 14 < expo_X +// + +{ .mmi + ld8 r50 = [r50] +(p0) ldfe f40 = [r34],16 + nop.i 999 +} +;; + +{ .mlx + nop.m 999 +(p0) movl r58 = 0x0FFFF +} +;; + +// +// Load W2_ptr +// Branch to SMALL is expo_X < -6 +// + +// +// float_N = X * L_Inv +// expo_X = exponent of X +// Mask = 0x1FFFF +// + +{ .mmi + ld8 r51 = [r51] +(p0) ldfe f41 = [r34],16 +} +;; + +{ .mlx +(p0) addl r34 = @ltoff(Constants_exp_64_Exponents#), gp +(p0) movl r39 = 0x1FFFF +} +;; + +{ .mmi + ld8 r34 = [r34] +(p0) getf.exp r37 = f9 + nop.i 999 +} +;; + +{ .mii + nop.m 999 + nop.i 999 +(p0) and r37 = r37, r39 ;; +} + +{ .mmi +(p0) sub r37 = r37, r58 ;; +(p0) cmp.gt.unc p14, p0 = -6, r37 +(p0) cmp.lt.unc p10, p0 = 14, r37 ;; +} + +{ .mfi + nop.m 999 +// +// Load L_inv +// Set p12 true for Flag = 0 (exp) +// Set p13 true for Flag = 1 (expm1) +// +(p0) fmpy.s1 f38 = f9, f37 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Load L_hi +// expo_X = expo_X - Bias +// get W1_ptr +// +(p0) fcvt.fx.s1 f39 = f38 +(p14) br.cond.spnt EXP_SMALL ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt EXP_HUGE ;; +} + +{ .mmi +(p0) shladd r34 = r32,4,r34 +(p0) addl r35 = @ltoff(Constants_exp_64_A#), gp + nop.i 999 +} +;; + +{ .mmi + ld8 r35 = [r35] + nop.m 999 + nop.i 999 +} +;; + +// +// Load T_1,T_2 +// + +{ .mmb +(p0) ldfe f51 = [r35],16 +(p0) ld8 r45 = [r34],8 + nop.b 999 ;; +} +// +// Set Safe = True if k >= big_expo_neg +// Set Safe = False if k < big_expo_neg +// + +{ .mmb +(p0) ldfe f49 = [r35],16 +(p0) ld8 r48 = [r34],0 + nop.b 999 ;; +} + +{ .mfi + nop.m 999 +// +// Branch to HUGE is expo_X > 14 +// +(p0) fcvt.xf f38 = f39 + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r52 = f39 + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) extr.u r43 = r52, 6, 6 ;; +// +// r = r - float_N * L_lo +// K = extr(N_fix,12,52) +// +(p0) shladd r40 = r43,3,r40 ;; +} + +{ .mfi +(p0) shladd r50 = r43,2,r50 +(p0) fnma.s1 f42 = f40, f38, f9 +// +// float_N = float(N) +// N_fix = signficand N +// +(p0) extr.u r42 = r52, 0, 6 +} + +{ .mmi +(p0) ldfd f43 = [r40],0 ;; +(p0) shladd r41 = r42,3,r41 +(p0) shladd r51 = r42,2,r51 +} +// +// W_1_p1 = 1 + W_1 +// + +{ .mmi +(p0) ldfs f44 = [r50],0 ;; +(p0) ldfd f45 = [r41],0 +// +// M_2 = extr(N_fix,0,6) +// M_1 = extr(N_fix,6,6) +// r = X - float_N * L_hi +// +(p0) extr r44 = r52, 12, 52 +} + +{ .mmi +(p0) ldfs f46 = [r51],0 ;; +(p0) sub r46 = r58, r44 +(p0) cmp.gt.unc p8, p15 = r44, r45 +} +// +// W = W_1 + W_1_p1*W_2 +// Load A_2 +// Bias_m_K = Bias - K +// + +{ .mii +(p0) ldfe f40 = [r35],16 +// +// load A_1 +// poly = A_2 + r*A_3 +// rsq = r * r +// neg_2_mK = exponent of Bias_m_k +// +(p0) add r47 = r58, r44 ;; +// +// Set Safe = True if k <= big_expo_pos +// Set Safe = False if k > big_expo_pos +// Load A_3 +// +(p15) cmp.lt p8,p15 = r44,r48 ;; +} + +{ .mmf +(p0) setf.exp f61 = r46 +// +// Bias_p + K = Bias + K +// T = T_1 * T_2 +// +(p0) setf.exp f36 = r47 +(p0) fnma.s1 f42 = f41, f38, f42 ;; +} + +{ .mfi + nop.m 999 +// +// Load W_1,W_2 +// Load big_exp_pos, load big_exp_neg +// +(p0) fadd.s1 f47 = f43, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 f52 = f42, f51, f49 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 f48 = f42, f42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 f53 = f44, f46 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 f54 = f45, f47, f43 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fneg f61 = f61 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 f52 = f42, f52, f40 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fadd.s1 f55 = f54, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// W + Wp1 * poly +// +(p0) mov f34 = f53 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// A_1 + r * poly +// Scale = setf_exp(Bias_p_k) +// +(p0) fma.s1 f52 = f48, f52, f42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// poly = r + rsq(A_1 + r*poly) +// Wp1 = 1 + W +// neg_2_mK = -neg_2_mK +// +(p0) fma.s1 f35 = f55, f52, f54 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmpy.s1 f35 = f35, f53 +// +// Y_hi = T +// Y_lo = T * (W + Wp1*poly) +// +(p12) br.cond.sptk EXP_MAIN ;; +} +// +// Branch if exp(x) +// Continue for exp(x-1) +// + +{ .mii +(p0) cmp.lt.unc p12, p13 = 10, r44 + nop.i 999 ;; +// +// Set p12 if 10 < K, Else p13 +// +(p13) cmp.gt.unc p13, p14 = -10, r44 ;; +} +// +// K > 10: Y_lo = Y_lo + neg_2_mK +// K <=10: Set p13 if -10 > K, Else set p14 +// + +{ .mfi +(p13) cmp.eq p15, p0 = r0, r0 +(p14) fadd.s1 f34 = f61, f34 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fadd.s1 f35 = f35, f61 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fadd.s1 f35 = f35, f34 + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// K <= 10 and K < -10, Set Safe = True +// K <= 10 and K < 10, Y_lo = Y_hi + Y_lo +// K <= 10 and K > =-10, Y_hi = Y_hi + neg_2_mk +// +(p13) mov f34 = f61 +(p0) br.cond.sptk EXP_MAIN ;; +} +EXP_SMALL: + +{ .mmi +(p12) addl r35 = @ltoff(Constants_exp_64_P#), gp +(p0) addl r34 = @ltoff(Constants_exp_64_Exponents#), gp + nop.i 999 +} +;; + +{ .mmi +(p12) ld8 r35 = [r35] + ld8 r34 = [r34] + nop.i 999 +} +;; + + +{ .mmi +(p13) addl r35 = @ltoff(Constants_exp_64_Q#), gp + nop.m 999 + nop.i 999 +} +;; + + +// +// Return +// K <= 10 and K < 10, Y_hi = neg_2_mk +// +// /*******************************************************/ +// /*********** Branch EXP_SMALL *************************/ +// /*******************************************************/ + +{ .mfi +(p13) ld8 r35 = [r35] +(p0) mov f42 = f9 +(p0) add r34 = 0x48,r34 +} +;; + +// +// Flag = 0 +// r4 = rsq * rsq +// + +{ .mfi +(p0) ld8 r49 =[r34],0 + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Flag = 1 +// +(p0) cmp.lt.unc p14, p0 = r37, r49 ;; +} + +{ .mfi + nop.m 999 +// +// r = X +// +(p0) fmpy.s1 f48 = f42, f42 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// rsq = r * r +// +(p0) fmpy.s1 f50 = f48, f48 +// +// Is input very small? +// +(p14) br.cond.spnt EXP_VERY_SMALL ;; +} +// +// Flag_not1: Y_hi = 1.0 +// Flag is 1: r6 = rsq * r4 +// + +{ .mfi +(p12) ldfe f52 = [r35],16 +(p12) mov f34 = f1 +(p0) add r53 = 0x1,r0 ;; +} + +{ .mfi +(p13) ldfe f51 = [r35],16 +// +// Flag_not_1: Y_lo = poly_hi + r4 * poly_lo +// +(p13) mov f34 = f9 + nop.i 999 ;; +} + +{ .mmf +(p12) ldfe f53 = [r35],16 +// +// For Flag_not_1, Y_hi = X +// Scale = 1 +// Create 0x000...01 +// +(p0) setf.sig f37 = r53 +(p0) mov f36 = f1 ;; +} + +{ .mmi +(p13) ldfe f52 = [r35],16 ;; +(p12) ldfe f54 = [r35],16 + nop.i 999 ;; +} + +{ .mfi +(p13) ldfe f53 = [r35],16 +(p13) fmpy.s1 f58 = f48, f50 + nop.i 999 ;; +} +// +// Flag_not1: poly_lo = P_5 + r*P_6 +// Flag_1: poly_lo = Q_6 + r*Q_7 +// + +{ .mmi +(p13) ldfe f54 = [r35],16 ;; +(p12) ldfe f55 = [r35],16 + nop.i 999 ;; +} + +{ .mmi +(p12) ldfe f56 = [r35],16 ;; +(p13) ldfe f55 = [r35],16 + nop.i 999 ;; +} + +{ .mmi +(p12) ldfe f57 = [r35],0 ;; +(p13) ldfe f56 = [r35],16 + nop.i 999 ;; +} + +{ .mfi +(p13) ldfe f57 = [r35],0 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For Flag_not_1, load p5,p6,p1,p2 +// Else load p5,p6,p1,p2 +// +(p12) fma.s1 f60 = f52, f42, f53 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fma.s1 f60 = f51, f42, f52 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f60 = f60, f42, f54 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f59 = f56, f42, f57 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fma.s1 f60 = f42, f60, f53 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f59 = f59, f48, f42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_1: poly_lo = Q_5 + r*(Q_6 + r*Q_7) +// Flag_not1: poly_lo = P_4 + r*(P_5 + r*P_6) +// Flag_not1: poly_hi = (P_1 + r*P_2) +// +(p13) fmpy.s1 f60 = f60, f58 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f60 = f60, f42, f55 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_1: poly_lo = r6 *(Q_5 + ....) +// Flag_not1: poly_hi = r + rsq *(P_1 + r*P_2) +// +(p12) fma.s1 f35 = f60, f50, f59 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p13) fma.s1 f59 = f54, f42, f55 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_not1: Y_lo = rsq* poly_hi + poly_lo +// Flag_1: poly_lo = rsq* poly_hi + poly_lo +// +(p13) fma.s1 f59 = f59, f42, f56 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_not_1: (P_1 + r*P_2) +// +(p13) fma.s1 f59 = f59, f42, f57 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_not_1: poly_hi = r + rsq * (P_1 + r*P_2) +// +(p13) fma.s1 f35 = f59, f48, f60 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Create 0.000...01 +// +(p0) for f37 = f35, f37 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Set lsb of Y_lo to 1 +// +(p0) fmerge.se f35 = f35,f37 +(p0) br.cond.sptk EXP_MAIN ;; +} +EXP_VERY_SMALL: + +{ .mmi + nop.m 999 +(p13) addl r34 = @ltoff(Constants_exp_64_Exponents#),gp + nop.i 999;; +} + +{ .mfi +(p13) ld8 r34 = [r34]; +(p12) mov f35 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p12) mov f34 = f1 +(p12) br.cond.sptk EXP_MAIN ;; +} + +{ .mlx +(p13) add r34 = 8,r34 +(p13) movl r39 = 0x0FFFE ;; +} +// +// Load big_exp_neg +// Create 1/2's exponent +// + +{ .mii +(p13) setf.exp f56 = r39 +(p13) shladd r34 = r32,4,r34 ;; + nop.i 999 +} +// +// Negative exponents are stored after positive +// + +{ .mfi +(p13) ld8 r45 = [r34],0 +// +// Y_hi = x +// Scale = 1 +// +(p13) fmpy.s1 f35 = f9, f9 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Reset Safe if necessary +// Create 1/2 +// +(p13) mov f34 = f9 + nop.i 999 ;; +} + +{ .mfi +(p13) cmp.lt.unc p0, p15 = r37, r45 +(p13) mov f36 = f1 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Y_lo = x * x +// +(p13) fmpy.s1 f35 = f35, f56 +// +// Y_lo = x*x/2 +// +(p13) br.cond.sptk EXP_MAIN ;; +} +EXP_HUGE: + +{ .mfi + nop.m 999 +(p0) fcmp.gt.unc.s1 p14, p0 = f9, f0 + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl r39 = 0x15DC0 ;; +} + +{ .mfi +(p14) setf.exp f34 = r39 +(p14) mov f35 = f1 +(p14) cmp.eq p0, p15 = r0, r0 ;; +} + +{ .mfb + nop.m 999 +(p14) mov f36 = f34 +// +// If x > 0, Set Safe = False +// If x > 0, Y_hi = 2**(24,000) +// If x > 0, Y_lo = 1.0 +// If x > 0, Scale = 2**(24,000) +// +(p14) br.cond.sptk EXP_MAIN ;; +} + +{ .mlx + nop.m 999 +(p12) movl r39 = 0xA240 +} + +{ .mlx + nop.m 999 +(p12) movl r38 = 0xA1DC ;; +} + +{ .mmb +(p13) cmp.eq p15, p14 = r0, r0 +(p12) setf.exp f34 = r39 + nop.b 999 ;; +} + +{ .mlx +(p12) setf.exp f35 = r38 +(p13) movl r39 = 0xFF9C +} + +{ .mfi + nop.m 999 +(p13) fsub.s1 f34 = f0, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) mov f36 = f34 +(p12) cmp.eq p0, p15 = r0, r0 ;; +} + +{ .mfi +(p13) setf.exp f35 = r39 +(p13) mov f36 = f1 + nop.i 999 ;; +} +EXP_MAIN: + +{ .mfi +(p0) cmp.ne.unc p12, p0 = 0x01, r33 +(p0) fmpy.s1 f101 = f36, f35 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.d.s0 f99 = f34, f36, f101 +(p15) br.cond.sptk EXP_64_RETURN;; +} + +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x01 + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl r50 = 0x000000000103FF ;; +} +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + RZ + TD (Underflows) +// +// +// If (Safe) is true, then +// Compute result using user supplied status field. +// No overflow or underflow here, but perhaps inexact. +// Return +// Else +// Determine if overflow or underflow was raised. +// Fetch +/- overflow threshold for IEEE single, double, +// double extended +// + +{ .mfi +(p0) setf.exp f60 = r50 +(p0) fma.d.s3 f102 = f34, f36, f101 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x40 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For Safe, no need to check for over/under. +// For expm1, handle errors like exp. +// +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.d.s2 f100 = f34, f36, f101 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x40 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fclass.m.unc p12, p0 = f102, 0x00F + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = f102, 0x00F + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fcmp.ge.unc.s1 p10, p0 = f100, f60 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Create largest double exponent + 1. +// Create smallest double exponent - 1. +// +(p0) fcmp.ge.unc.s1 p8, p0 = f100, f60 + nop.i 999 ;; +} +// +// fcmp: resultS2 >= + overflow threshold -> set (a) if true +// fcmp: resultS2 <= - overflow threshold -> set (b) if true +// fclass: resultS3 is denorm/unorm/0 -> set (d) if true +// + +{ .mib +(p10) mov r65 = 41 + nop.i 999 +(p10) br.cond.sptk __libm_error_region ;; +} + +{ .mib +(p8) mov r65 = 14 + nop.i 999 +(p8) br.cond.sptk __libm_error_region ;; +} +// +// Report that exp overflowed +// + +{ .mib +(p12) mov r65 = 42 + nop.i 999 +(p12) br.cond.sptk __libm_error_region ;; +} + +{ .mib +(p11) mov r65 = 15 + nop.i 999 +(p11) br.cond.sptk __libm_error_region ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Report that exp underflowed +// +(p0) br.cond.sptk EXP_64_RETURN;; +} +EXP_64_SPECIAL: + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = f8, 0x0c3 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p13, p8 = f8, 0x007 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fclass.m.unc p14, p0 = f8, 0x007 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p12, p9 = f8, 0x021 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = f8, 0x022 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fclass.m.unc p10, p0 = f8, 0x022 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Identify +/- 0, Inf, or -Inf +// Generate the right kind of NaN. +// +(p13) fadd.d.s0 f99 = f0, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) mov f99 = f8 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fadd.d.s0 f99 = f8, f1 +// +// exp(+/-0) = 1 +// expm1(+/-0) = +/-0 +// No exceptions raised +// +(p6) br.cond.sptk EXP_64_RETURN;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p14) br.cond.sptk EXP_64_RETURN;; +} + +{ .mfi + nop.m 999 +(p11) mov f99 = f0 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p10) fsub.d.s1 f99 = f0, f1 +// +// exp(-Inf) = 0 +// expm1(-Inf) = -1 +// No exceptions raised. +// +(p10) br.cond.sptk EXP_64_RETURN;; +} + +{ .mfb + nop.m 999 +(p12) fmpy.d.s1 f99 = f8, f1 +// +// exp(+Inf) = Inf +// No exceptions raised. +// +(p0) br.cond.sptk EXP_64_RETURN;; +} + + +EXP_64_UNSUPPORTED: + +{ .mfb + nop.m 999 +(p0) fmpy.d.s0 f99 = f8, f0 + nop.b 0;; +} + +EXP_64_RETURN: +{ .mfb + nop.m 999 +(p0) mov f8 = f99 +(p0) br.ret.sptk b0 +} +.endp expm1 +ASM_SIZE_DIRECTIVE(expm1) + +.proc __libm_error_region +__libm_error_region: +.prologue +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_expm1f.S glibc-2.2.3/sysdeps/ia64/fpu/s_expm1f.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_expm1f.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_expm1f.S Mon Feb 19 00:54:46 2001 @@ -0,0 +1,1742 @@ +.file "exp_m1f.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// HISTORY +// 2/02/00 Initial Version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: Combined expf(x) and expm1f(x), where +// x +// expf(x) = e , for single precision x values +// x +// expm1f(x) = e - 1 for single precision x values +// +// ********************************************************************* +// +// Accuracy: Within .7 ulps for 80-bit floating point values +// Very accurate for single precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9,f32-f61, f99-f102 +// +// General Purpose Registers: +// r32-r61 +// r62-r65 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions raised when appropriate for exp and expm1 +// Underflow exceptions raised when appropriate for exp and expm1 +// (Error Handling Routine called for overflow and Underflow) +// Inexact raised when appropriate by algorithm +// +// expf(inf) = inf +// expf(-inf) = +0 +// expf(SNaN) = QNaN +// expf(QNaN) = QNaN +// expf(0) = 1 +// expf(EM_special Values) = QNaN +// expf(inf) = inf +// expm1f(-inf) = -1 +// expm1f(SNaN) = QNaN +// expm1f(QNaN) = QNaN +// expm1f(0) = 0 +// expm1f(EM_special Values) = QNaN +// +// ********************************************************************* +// +// Implementation and Algorithm Notes: +// +// ker_exp_64( in_FR : X, +// in_GR : Flag, +// in_GR : Expo_Range +// out_FR : Y_hi, +// out_FR : Y_lo, +// out_FR : scale, +// out_PR : Safe ) +// +// On input, X is in register format and +// Flag = 0 for exp, +// Flag = 1 for expm1, +// +// On output, provided X and X_cor are real numbers, then +// +// scale*(Y_hi + Y_lo) approximates expf(X) if Flag is 0 +// scale*(Y_hi + Y_lo) approximates expf(X)-1 if Flag is 1 +// +// The accuracy is sufficient for a highly accurate 64 sig. +// bit implementation. Safe is set if there is no danger of +// overflow/underflow when the result is composed from scale, +// Y_hi and Y_lo. Thus, we can have a fast return if Safe is set. +// Otherwise, one must prepare to handle the possible exception +// appropriately. Note that SAFE not set (false) does not mean +// that overflow/underflow will occur; only the setting of SAFE +// guarantees the opposite. +// +// **** High Level Overview **** +// +// The method consists of three cases. +// +// If |X| < Tiny use case exp_tiny; +// else if |X| < 2^(-6) use case exp_small; +// else use case exp_regular; +// +// Case exp_tiny: +// +// 1 + X can be used to approximate expf(X) or expf(X+X_cor); +// X + X^2/2 can be used to approximate expf(X) - 1 +// +// Case exp_small: +// +// Here, expf(X), expf(X+X_cor), and expf(X) - 1 can all be +// appproximated by a relatively simple polynomial. +// +// This polynomial resembles the truncated Taylor series +// +// expf(w) = 1 + w + w^2/2! + w^3/3! + ... + w^n/n! +// +// Case exp_regular: +// +// Here we use a table lookup method. The basic idea is that in +// order to compute expf(X), we accurately decompose X into +// +// X = N * log(2)/(2^12) + r, |r| <= log(2)/2^13. +// +// Hence +// +// expf(X) = 2^( N / 2^12 ) * expf(r). +// +// The value 2^( N / 2^12 ) is obtained by simple combinations +// of values calculated beforehand and stored in table; expf(r) +// is approximated by a short polynomial because |r| is small. +// +// We elaborate this method in 4 steps. +// +// Step 1: Reduction +// +// The value 2^12/log(2) is stored as a double-extended number +// L_Inv. +// +// N := round_to_nearest_integer( X * L_Inv ) +// +// The value log(2)/2^12 is stored as two numbers L_hi and L_lo so +// that r can be computed accurately via +// +// r := (X - N*L_hi) - N*L_lo +// +// We pick L_hi such that N*L_hi is representable in 64 sig. bits +// and thus the FMA X - N*L_hi is error free. So r is the +// 1 rounding error from an exact reduction with respect to +// +// L_hi + L_lo. +// +// In particular, L_hi has 30 significant bit and can be stored +// as a double-precision number; L_lo has 64 significant bits and +// stored as a double-extended number. +// +// In the case Flag = 2, we further modify r by +// +// r := r + X_cor. +// +// Step 2: Approximation +// +// expf(r) - 1 is approximated by a short polynomial of the form +// +// r + A_1 r^2 + A_2 r^3 + A_3 r^4 . +// +// Step 3: Composition from Table Values +// +// The value 2^( N / 2^12 ) can be composed from a couple of tables +// of precalculated values. First, express N as three integers +// K, M_1, and M_2 as +// +// N = K * 2^12 + M_1 * 2^6 + M_2 +// +// Where 0 <= M_1, M_2 < 2^6; and K can be positive or negative. +// When N is represented in 2's complement, M_2 is simply the 6 +// lsb's, M_1 is the next 6, and K is simply N shifted right +// arithmetically (sign extended) by 12 bits. +// +// Now, 2^( N / 2^12 ) is simply +// +// 2^K * 2^( M_1 / 2^6 ) * 2^( M_2 / 2^12 ) +// +// Clearly, 2^K needs no tabulation. The other two values are less +// trivial because if we store each accurately to more than working +// precision, than its product is too expensive to calculate. We +// use the following method. +// +// Define two mathematical values, delta_1 and delta_2, implicitly +// such that +// +// T_1 = expf( [M_1 log(2)/2^6] - delta_1 ) +// T_2 = expf( [M_2 log(2)/2^12] - delta_2 ) +// +// are representable as 24 significant bits. To illustrate the idea, +// we show how we define delta_1: +// +// T_1 := round_to_24_bits( expf( M_1 log(2)/2^6 ) ) +// delta_1 = (M_1 log(2)/2^6) - log( T_1 ) +// +// The last equality means mathematical equality. We then tabulate +// +// W_1 := expf(delta_1) - 1 +// W_2 := expf(delta_2) - 1 +// +// Both in double precision. +// +// From the tabulated values T_1, T_2, W_1, W_2, we compose the values +// T and W via +// +// T := T_1 * T_2 ...exactly +// W := W_1 + (1 + W_1)*W_2 +// +// W approximates expf( delta ) - 1 where delta = delta_1 + delta_2. +// The mathematical product of T and (W+1) is an accurate representation +// of 2^(M_1/2^6) * 2^(M_2/2^12). +// +// Step 4. Reconstruction +// +// Finally, we can reconstruct expf(X), expf(X) - 1. +// Because +// +// X = K * log(2) + (M_1*log(2)/2^6 - delta_1) +// + (M_2*log(2)/2^12 - delta_2) +// + delta_1 + delta_2 + r ...accurately +// We have +// +// expf(X) ~=~ 2^K * ( T + T*[expf(delta_1+delta_2+r) - 1] ) +// ~=~ 2^K * ( T + T*[expf(delta + r) - 1] ) +// ~=~ 2^K * ( T + T*[(expf(delta)-1) +// + expf(delta)*(expf(r)-1)] ) +// ~=~ 2^K * ( T + T*( W + (1+W)*poly(r) ) ) +// ~=~ 2^K * ( Y_hi + Y_lo ) +// +// where Y_hi = T and Y_lo = T*(W + (1+W)*poly(r)) +// +// For expf(X)-1, we have +// +// expf(X)-1 ~=~ 2^K * ( Y_hi + Y_lo ) - 1 +// ~=~ 2^K * ( Y_hi + Y_lo - 2^(-K) ) +// +// and we combine Y_hi + Y_lo - 2^(-N) into the form of two +// numbers Y_hi + Y_lo carefully. +// +// **** Algorithm Details **** +// +// A careful algorithm must be used to realize the mathematical ideas +// accurately. We describe each of the three cases. We assume SAFE +// is preset to be TRUE. +// +// Case exp_tiny: +// +// The important points are to ensure an accurate result under +// different rounding directions and a correct setting of the SAFE +// flag. +// +// If Flag is 1, then +// SAFE := False ...possibility of underflow +// Scale := 1.0 +// Y_hi := X +// Y_lo := 2^(-17000) +// Else +// Scale := 1.0 +// Y_hi := 1.0 +// Y_lo := X ...for different rounding modes +// Endif +// +// Case exp_small: +// +// Here we compute a simple polynomial. To exploit parallelism, we split +// the polynomial into several portions. +// +// Let r = X +// +// If Flag is not 1 ...i.e. expf( argument ) +// +// rsq := r * r; +// r4 := rsq*rsq +// poly_lo := P_3 + r*(P_4 + r*(P_5 + r*P_6)) +// poly_hi := r + rsq*(P_1 + r*P_2) +// Y_lo := poly_hi + r4 * poly_lo +// set lsb(Y_lo) to 1 +// Y_hi := 1.0 +// Scale := 1.0 +// +// Else ...i.e. expf( argument ) - 1 +// +// rsq := r * r +// r4 := rsq * rsq +// r6 := rsq * r4 +// poly_lo := r6*(Q_5 + r*(Q_6 + r*Q_7)) +// poly_hi := Q_1 + r*(Q_2 + r*(Q_3 + r*Q_4)) +// Y_lo := rsq*poly_hi + poly_lo +// set lsb(Y_lo) to 1 +// Y_hi := X +// Scale := 1.0 +// +// Endif +// +// Case exp_regular: +// +// The previous description contain enough information except the +// computation of poly and the final Y_hi and Y_lo in the case for +// expf(X)-1. +// +// The computation of poly for Step 2: +// +// rsq := r*r +// poly := r + rsq*(A_1 + r*(A_2 + r*A_3)) +// +// For the case expf(X) - 1, we need to incorporate 2^(-K) into +// Y_hi and Y_lo at the end of Step 4. +// +// If K > 10 then +// Y_lo := Y_lo - 2^(-K) +// Else +// If K < -10 then +// Y_lo := Y_hi + Y_lo +// Y_hi := -2^(-K) +// Else +// Y_hi := Y_hi - 2^(-K) +// End If +// End If +// + +#include "libm_support.h" + + +GR_SAVE_B0 = r60 +GR_SAVE_PFS = r59 +GR_SAVE_GP = r61 + +GR_Parameter_X = r62 +GR_Parameter_Y = r63 +GR_Parameter_RESULT = r64 +GR_Parameter_TAG = r65 + +FR_X = f9 +FR_Y = f1 +FR_RESULT = f99 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 64 +Constants_exp_64_Arg: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Arg,@object) +data4 0x5C17F0BC,0xB8AA3B29,0x0000400B,0x00000000 +data4 0x00000000,0xB17217F4,0x00003FF2,0x00000000 +data4 0xF278ECE6,0xF473DE6A,0x00003FD4,0x00000000 +// /* Inv_L, L_hi, L_lo */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_Arg) + +.align 64 +Constants_exp_64_Exponents: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Exponents,@object) +data4 0x0000007E,0x00000000,0xFFFFFF83,0xFFFFFFFF +data4 0x000003FE,0x00000000,0xFFFFFC03,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0xFFFFFFE2,0xFFFFFFFF,0xFFFFFFC4,0xFFFFFFFF +data4 0xFFFFFFBA,0xFFFFFFFF,0xFFFFFFBA,0xFFFFFFFF +ASM_SIZE_DIRECTIVE(Constants_exp_64_Exponents) + +.align 64 +Constants_exp_64_A: +ASM_TYPE_DIRECTIVE(Constants_exp_64_A,@object) +data4 0xB1B736A0,0xAAAAAAAB,0x00003FFA,0x00000000 +data4 0x90CD6327,0xAAAAAAAB,0x00003FFC,0x00000000 +data4 0xFFFFFFFF,0xFFFFFFFF,0x00003FFD,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_A) + +.align 64 +Constants_exp_64_P: +ASM_TYPE_DIRECTIVE(Constants_exp_64_P,@object) +data4 0x43914A8A,0xD00D6C81,0x00003FF2,0x00000000 +data4 0x30304B30,0xB60BC4AC,0x00003FF5,0x00000000 +data4 0x7474C518,0x88888888,0x00003FF8,0x00000000 +data4 0x8DAE729D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAAF61,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x000004C7,0x80000000,0x00003FFE,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_P) + +.align 64 +Constants_exp_64_Q: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Q,@object) +data4 0xA49EF6CA,0xD00D56F7,0x00003FEF,0x00000000 +data4 0x1C63493D,0xD00D59AB,0x00003FF2,0x00000000 +data4 0xFB50CDD2,0xB60B60B5,0x00003FF5,0x00000000 +data4 0x7BA68DC8,0x88888888,0x00003FF8,0x00000000 +data4 0xAAAAAC8D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAACCA,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x00000000,0x80000000,0x00003FFE,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_Q) + +.align 64 +Constants_exp_64_T1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T1,@object) +data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 +data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 +data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC +data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D +data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA +data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 +data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A +data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 +data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B +data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD +data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 +data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B +data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 +data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A +data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 +data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C +ASM_SIZE_DIRECTIVE(Constants_exp_64_T1) + +.align 64 +Constants_exp_64_T2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T2,@object) +data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 +data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 +data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E +data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 +data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 +data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA +data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 +data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A +data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 +data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA +data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 +data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA +data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 +data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 +data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE +data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 +ASM_SIZE_DIRECTIVE(Constants_exp_64_T2) + +.align 64 +Constants_exp_64_W1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W1,@object) +data4 0x00000000,0x00000000,0x171EC4B4,0xBE384454 +data4 0x4AA72766,0xBE694741,0xD42518F8,0xBE5D32B6 +data4 0x3A319149,0x3E68D96D,0x62415F36,0xBE68F4DA +data4 0xC9C86A3B,0xBE6DDA2F,0xF49228FE,0x3E6B2E50 +data4 0x1188B886,0xBE49C0C2,0x1A4C2F1F,0x3E64BFC2 +data4 0x2CB98B54,0xBE6A2FBB,0x9A55D329,0x3E5DC5DE +data4 0x39A7AACE,0x3E696490,0x5C66DBA5,0x3E54728B +data4 0xBA1C7D7D,0xBE62B0DB,0x09F1AF5F,0x3E576E04 +data4 0x1A0DD6A1,0x3E612500,0x795FBDEF,0xBE66A419 +data4 0xE1BD41FC,0xBE5CDE8C,0xEA54964F,0xBE621376 +data4 0x476E76EE,0x3E6370BE,0x3427EB92,0x3E390D1A +data4 0x2BF82BF8,0x3E1336DE,0xD0F7BD9E,0xBE5FF1CB +data4 0x0CEB09DD,0xBE60A355,0x0980F30D,0xBE5CA37E +data4 0x4C082D25,0xBE5C541B,0x3B467D29,0xBE5BBECA +data4 0xB9D946C5,0xBE400D8A,0x07ED374A,0xBE5E2A08 +data4 0x365C8B0A,0xBE66CB28,0xD3403BCA,0x3E3AAD5B +data4 0xC7EA21E0,0x3E526055,0xE72880D6,0xBE442C75 +data4 0x85222A43,0x3E58B2BB,0x522C42BF,0xBE5AAB79 +data4 0x469DC2BC,0xBE605CB4,0xA48C40DC,0xBE589FA7 +data4 0x1AA42614,0xBE51C214,0xC37293F4,0xBE48D087 +data4 0xA2D673E0,0x3E367A1C,0x114F7A38,0xBE51BEBB +data4 0x661A4B48,0xBE6348E5,0x1D3B9962,0xBDF52643 +data4 0x35A78A53,0x3E3A3B5E,0x1CECD788,0xBE46C46C +data4 0x7857D689,0xBE60B7EC,0xD14F1AD7,0xBE594D3D +data4 0x4C9A8F60,0xBE4F9C30,0x02DFF9D2,0xBE521873 +data4 0x55E6D68F,0xBE5E4C88,0x667F3DC4,0xBE62140F +data4 0x3BF88747,0xBE36961B,0xC96EC6AA,0x3E602861 +data4 0xD57FD718,0xBE3B5151,0xFC4A627B,0x3E561CD0 +data4 0xCA913FEA,0xBE3A5217,0x9A5D193A,0x3E40A3CC +data4 0x10A9C312,0xBE5AB713,0xC5F57719,0x3E4FDADB +data4 0xDBDF59D5,0x3E361428,0x61B4180D,0x3E5DB5DB +data4 0x7408D856,0xBE42AD5F,0x31B2B707,0x3E2A3148 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W1) + +.align 64 +Constants_exp_64_W2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W2,@object) +data4 0x00000000,0x00000000,0x37A3D7A2,0xBE641F25 +data4 0xAD028C40,0xBE68DD57,0xF212B1B6,0xBE5C77D8 +data4 0x1BA5B070,0x3E57878F,0x2ECAE6FE,0xBE55A36A +data4 0x569DFA3B,0xBE620608,0xA6D300A3,0xBE53B50E +data4 0x223F8F2C,0x3E5B5EF2,0xD6DE0DF4,0xBE56A0D9 +data4 0xEAE28F51,0xBE64EEF3,0x367EA80B,0xBE5E5AE2 +data4 0x5FCBC02D,0x3E47CB1A,0x9BDAFEB7,0xBE656BA0 +data4 0x805AFEE7,0x3E6E70C6,0xA3415EBA,0xBE6E0509 +data4 0x49BFF529,0xBE56856B,0x00508651,0x3E66DD33 +data4 0xC114BC13,0x3E51165F,0xC453290F,0x3E53333D +data4 0x05539FDA,0x3E6A072B,0x7C0A7696,0xBE47CD87 +data4 0xEB05C6D9,0xBE668BF4,0x6AE86C93,0xBE67C3E3 +data4 0xD0B3E84B,0xBE533904,0x556B53CE,0x3E63E8D9 +data4 0x63A98DC8,0x3E212C89,0x032A7A22,0xBE33138F +data4 0xBC584008,0x3E530FA9,0xCCB93C97,0xBE6ADF82 +data4 0x8370EA39,0x3E5F9113,0xFB6A05D8,0x3E5443A4 +data4 0x181FEE7A,0x3E63DACD,0xF0F67DEC,0xBE62B29D +data4 0x3DDE6307,0x3E65C483,0xD40A24C1,0x3E5BF030 +data4 0x14E437BE,0x3E658B8F,0xED98B6C7,0xBE631C29 +data4 0x04CF7C71,0x3E6335D2,0xE954A79D,0x3E529EED +data4 0xF64A2FB8,0x3E5D9257,0x854ED06C,0xBE6BED1B +data4 0xD71405CB,0x3E5096F6,0xACB9FDF5,0xBE3D4893 +data4 0x01B68349,0xBDFEB158,0xC6A463B9,0x3E628D35 +data4 0xADE45917,0xBE559725,0x042FC476,0xBE68C29C +data4 0x01E511FA,0xBE67593B,0x398801ED,0xBE4A4313 +data4 0xDA7C3300,0x3E699571,0x08062A9E,0x3E5349BE +data4 0x755BB28E,0x3E5229C4,0x77A1F80D,0x3E67E426 +data4 0x6B69C352,0xBE52B33F,0x084DA57F,0xBE6B3550 +data4 0xD1D09A20,0xBE6DB03F,0x2161B2C1,0xBE60CBC4 +data4 0x78A2B771,0x3E56ED9C,0x9D0FA795,0xBE508E31 +data4 0xFD1A54E9,0xBE59482A,0xB07FD23E,0xBE2A17CE +data4 0x17365712,0x3E68BF5C,0xB3785569,0x3E3956F9 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W2) + +.section .text +.proc expm1f# +.global expm1f# +.align 64 + +expm1f: +#ifdef _LIBC +.global __expm1f# +__expm1f: +#endif + + +{ .mii + alloc r32 = ar.pfs,0,30,4,0 +(p0) add r33 = 1, r0 +(p0) cmp.eq.unc p7, p0 = r0, r0 +} +;; + +// +// Set p7 true for expm1 +// Set Flag = r33 = 1 for expm1 +// These are really no longer necesary, but are a remnant +// when this file had multiple entry points. +// They should be carefully removed + + +{ .mfi +(p0) add r32 = 0,r0 +(p0) fnorm.s1 f9 = f8 + nop.i 0 +} + +{ .mfi + nop.m 0 +// +// Set p7 false for exp +// Set Flag = r33 = 0 for exp +// +(p0) fclass.m.unc p6, p8 = f8, 0x1E7 + nop.i 0 ;; +} + +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p9, p0 = f8, 0x1FF + nop.i 0 +} + +{ .mfi + nop.m 999 +(p0) mov f36 = f1 + nop.i 999 ;; +} + +// +// Identify NatVals, NaNs, Infs, and Zeros. +// Identify EM unsupporteds. +// Save special input registers +// +// Create FR_X_cor = 0.0 +// GR_Flag = 0 +// GR_Expo_Range = 0 (r32) for single precision +// FR_Scale = 1.0 +// + +{ .mfb + nop.m 999 +(p0) mov f32 = f0 +(p6) br.cond.spnt EXPF_64_SPECIAL ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt EXPF_64_UNSUPPORTED ;; +} + +// +// Branch out for special input values +// + +{ .mfi +(p0) cmp.ne.unc p12, p13 = 0x01, r33 +(p0) fcmp.lt.unc.s0 p9,p0 = f8, f0 +(p0) cmp.eq.unc p15, p0 = r0, r0 +} + +// +// Raise possible denormal operand exception +// Normalize x +// +// This function computes expf( x + x_cor) +// Input FR 1: FR_X +// Input FR 2: FR_X_cor +// Input GR 1: GR_Flag +// Input GR 2: GR_Expo_Range +// Output FR 3: FR_Y_hi +// Output FR 4: FR_Y_lo +// Output FR 5: FR_Scale +// Output PR 1: PR_Safe + +// +// Prepare to load constants +// Set Safe = True +// + +{ .mmi +(p0) addl r34 = @ltoff(Constants_exp_64_Arg#),gp +(p0) addl r40 = @ltoff(Constants_exp_64_W1#),gp +(p0) addl r41 = @ltoff(Constants_exp_64_W2#),gp +};; + +{ .mmi + ld8 r34 = [r34] + ld8 r40 = [r40] +(p0) addl r50 = @ltoff(Constants_exp_64_T1#), gp +} +;; +{ .mmi + ld8 r41 = [r41] +(p0) ldfe f37 = [r34],16 +(p0) addl r51 = @ltoff(Constants_exp_64_T2#), gp +} +;; +// +// N = fcvt.fx(float_N) +// Set p14 if -6 > expo_X +// +// +// Bias = 0x0FFFF +// expo_X = expo_X and Mask +// + +{ .mmi + ld8 r50 = [r50] +(p0) ldfe f40 = [r34],16 + nop.i 999 +} +;; + +{ .mlx + nop.m 999 +(p0) movl r58 = 0x0FFFF +};; + +// +// Load W2_ptr +// Branch to SMALL is expo_X < -6 +// +// +// float_N = X * L_Inv +// expo_X = exponent of X +// Mask = 0x1FFFF +// + +{ .mmi + ld8 r51 = [r51] +(p0) ldfe f41 = [r34],16 +// +// float_N = X * L_Inv +// expo_X = exponent of X +// Mask = 0x1FFFF +// + nop.i 0 +};; + +{ .mlx +(p0) addl r34 = @ltoff(Constants_exp_64_Exponents#), gp +(p0) movl r39 = 0x1FFFF +} +;; + +{ .mmi + ld8 r34 = [r34] +(p0) getf.exp r37 = f9 + nop.i 999 +} +;; + +{ .mii + nop.m 999 + nop.i 999 +(p0) and r37 = r37, r39 ;; +} + +{ .mmi +(p0) sub r37 = r37, r58 ;; +(p0) cmp.gt.unc p14, p0 = -6, r37 +(p0) cmp.lt.unc p10, p0 = 14, r37 ;; +} + +{ .mfi + nop.m 999 +// +// Load L_inv +// Set p12 true for Flag = 0 (exp) +// Set p13 true for Flag = 1 (expm1) +// +(p0) fmpy.s1 f38 = f9, f37 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Load L_hi +// expo_X = expo_X - Bias +// get W1_ptr +// +(p0) fcvt.fx.s1 f39 = f38 +(p14) br.cond.spnt EXPF_SMALL ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt EXPF_HUGE ;; +} + +{ .mmi +(p0) shladd r34 = r32,4,r34 +(p0) addl r35 = @ltoff(Constants_exp_64_A#),gp + nop.i 999 +} +;; + +{ .mmi + ld8 r35 = [r35] + nop.m 999 + nop.i 999 +} +;; + +// +// Load T_1,T_2 +// + +{ .mmb +(p0) ldfe f51 = [r35],16 +(p0) ld8 r45 = [r34],8 + nop.b 999 ;; +} +// +// Set Safe = True if k >= big_expo_neg +// Set Safe = False if k < big_expo_neg +// + +{ .mmb +(p0) ldfe f49 = [r35],16 +(p0) ld8 r48 = [r34],0 + nop.b 999 ;; +} + +{ .mfi + nop.m 999 +// +// Branch to HUGE is expo_X > 14 +// +(p0) fcvt.xf f38 = f39 + nop.i 999 ;; +} + +{ .mfi +(p0) getf.sig r52 = f39 + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 +(p0) extr.u r43 = r52, 6, 6 ;; +// +// r = r - float_N * L_lo +// K = extr(N_fix,12,52) +// +(p0) shladd r40 = r43,3,r40 ;; +} + +{ .mfi +(p0) shladd r50 = r43,2,r50 +(p0) fnma.s1 f42 = f40, f38, f9 +// +// float_N = float(N) +// N_fix = signficand N +// +(p0) extr.u r42 = r52, 0, 6 +} + +{ .mmi +(p0) ldfd f43 = [r40],0 ;; +(p0) shladd r41 = r42,3,r41 +(p0) shladd r51 = r42,2,r51 +} +// +// W_1_p1 = 1 + W_1 +// + +{ .mmi +(p0) ldfs f44 = [r50],0 ;; +(p0) ldfd f45 = [r41],0 +// +// M_2 = extr(N_fix,0,6) +// M_1 = extr(N_fix,6,6) +// r = X - float_N * L_hi +// +(p0) extr r44 = r52, 12, 52 +} + +{ .mmi +(p0) ldfs f46 = [r51],0 ;; +(p0) sub r46 = r58, r44 +(p0) cmp.gt.unc p8, p15 = r44, r45 +} +// +// W = W_1 + W_1_p1*W_2 +// Load A_2 +// Bias_m_K = Bias - K +// + +{ .mii +(p0) ldfe f40 = [r35],16 +// +// load A_1 +// poly = A_2 + r*A_3 +// rsq = r * r +// neg_2_mK = exponent of Bias_m_k +// +(p0) add r47 = r58, r44 ;; +// +// Set Safe = True if k <= big_expo_pos +// Set Safe = False if k > big_expo_pos +// Load A_3 +// +(p15) cmp.lt p8,p15 = r44,r48 ;; +} + +{ .mmf +(p0) setf.exp f61 = r46 +// +// Bias_p + K = Bias + K +// T = T_1 * T_2 +// +(p0) setf.exp f36 = r47 +(p0) fnma.s1 f42 = f41, f38, f42 ;; +} + +{ .mfi + nop.m 999 +// +// Load W_1,W_2 +// Load big_exp_pos, load big_exp_neg +// +(p0) fadd.s1 f47 = f43, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 f52 = f42, f51, f49 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 f48 = f42, f42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 f53 = f44, f46 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 f54 = f45, f47, f43 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fneg f61 = f61 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 f52 = f42, f52, f40 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fadd.s1 f55 = f54, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// W + Wp1 * poly +// +(p0) mov f34 = f53 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// A_1 + r * poly +// Scale = setf_expf(Bias_p_k) +// +(p0) fma.s1 f52 = f48, f52, f42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// poly = r + rsq(A_1 + r*poly) +// Wp1 = 1 + W +// neg_2_mK = -neg_2_mK +// +(p0) fma.s1 f35 = f55, f52, f54 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fmpy.s1 f35 = f35, f53 +// +// Y_hi = T +// Y_lo = T * (W + Wp1*poly) +// +(p12) br.cond.sptk EXPF_MAIN ;; +} +// +// Branch if expf(x) +// Continue for expf(x-1) +// + +{ .mii +(p0) cmp.lt.unc p12, p13 = 10, r44 + nop.i 999 ;; +// +// Set p12 if 10 < K, Else p13 +// +(p13) cmp.gt.unc p13, p14 = -10, r44 ;; +} +// +// K > 10: Y_lo = Y_lo + neg_2_mK +// K <=10: Set p13 if -10 > K, Else set p14 +// + +{ .mfi +(p13) cmp.eq p15, p0 = r0, r0 +(p14) fadd.s1 f34 = f61, f34 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fadd.s1 f35 = f35, f61 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fadd.s1 f35 = f35, f34 + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// K <= 10 and K < -10, Set Safe = True +// K <= 10 and K < 10, Y_lo = Y_hi + Y_lo +// K <= 10 and K > =-10, Y_hi = Y_hi + neg_2_mk +// +(p13) mov f34 = f61 +(p0) br.cond.sptk EXPF_MAIN ;; +} +EXPF_SMALL: +{ .mmi +(p12) addl r35 = @ltoff(Constants_exp_64_P#), gp +(p0) addl r34 = @ltoff(Constants_exp_64_Exponents#), gp + nop.i 999 +} +;; + +{ .mmi +(p12) ld8 r35 = [r35] + ld8 r34 = [r34] + nop.i 999 +} +;; + + +{ .mmi +(p13) addl r35 = @ltoff(Constants_exp_64_Q#), gp + nop.m 999 + nop.i 999 +} +;; + + +// +// Return +// K <= 10 and K < 10, Y_hi = neg_2_mk +// +// /*******************************************************/ +// /*********** Branch EXP_SMALL *************************/ +// /*******************************************************/ + +{ .mfi +(p13) ld8 r35 = [r35] +(p0) mov f42 = f9 +(p0) add r34 = 0x48,r34 +} +;; + +// +// Flag = 0 +// r4 = rsq * rsq +// + +{ .mfi +(p0) ld8 r49 =[r34],0 + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Flag = 1 +// +(p0) cmp.lt.unc p14, p0 = r37, r49 ;; +} + +{ .mfi + nop.m 999 +// +// r = X +// +(p0) fmpy.s1 f48 = f42, f42 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// rsq = r * r +// +(p0) fmpy.s1 f50 = f48, f48 +// +// Is input very small? +// +(p14) br.cond.spnt EXPF_VERY_SMALL ;; +} +// +// Flag_not1: Y_hi = 1.0 +// Flag is 1: r6 = rsq * r4 +// + +{ .mfi +(p12) ldfe f52 = [r35],16 +(p12) mov f34 = f1 +(p0) add r53 = 0x1,r0 ;; +} + +{ .mfi +(p13) ldfe f51 = [r35],16 +// +// Flag_not_1: Y_lo = poly_hi + r4 * poly_lo +// +(p13) mov f34 = f9 + nop.i 999 ;; +} + +{ .mmf +(p12) ldfe f53 = [r35],16 +// +// For Flag_not_1, Y_hi = X +// Scale = 1 +// Create 0x000...01 +// +(p0) setf.sig f37 = r53 +(p0) mov f36 = f1 ;; +} + +{ .mmi +(p13) ldfe f52 = [r35],16 ;; +(p12) ldfe f54 = [r35],16 + nop.i 999 ;; +} + +{ .mfi +(p13) ldfe f53 = [r35],16 +(p13) fmpy.s1 f58 = f48, f50 + nop.i 999 ;; +} +// +// Flag_not1: poly_lo = P_5 + r*P_6 +// Flag_1: poly_lo = Q_6 + r*Q_7 +// + +{ .mmi +(p13) ldfe f54 = [r35],16 ;; +(p12) ldfe f55 = [r35],16 + nop.i 999 ;; +} + +{ .mmi +(p12) ldfe f56 = [r35],16 ;; +(p13) ldfe f55 = [r35],16 + nop.i 999 ;; +} + +{ .mmi +(p12) ldfe f57 = [r35],0 ;; +(p13) ldfe f56 = [r35],16 + nop.i 999 ;; +} + +{ .mfi +(p13) ldfe f57 = [r35],0 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For Flag_not_1, load p5,p6,p1,p2 +// Else load p5,p6,p1,p2 +// +(p12) fma.s1 f60 = f52, f42, f53 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fma.s1 f60 = f51, f42, f52 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f60 = f60, f42, f54 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f59 = f56, f42, f57 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fma.s1 f60 = f42, f60, f53 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f59 = f59, f48, f42 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_1: poly_lo = Q_5 + r*(Q_6 + r*Q_7) +// Flag_not1: poly_lo = P_4 + r*(P_5 + r*P_6) +// Flag_not1: poly_hi = (P_1 + r*P_2) +// +(p13) fmpy.s1 f60 = f60, f58 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fma.s1 f60 = f60, f42, f55 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_1: poly_lo = r6 *(Q_5 + ....) +// Flag_not1: poly_hi = r + rsq *(P_1 + r*P_2) +// +(p12) fma.s1 f35 = f60, f50, f59 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p13) fma.s1 f59 = f54, f42, f55 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_not1: Y_lo = rsq* poly_hi + poly_lo +// Flag_1: poly_lo = rsq* poly_hi + poly_lo +// +(p13) fma.s1 f59 = f59, f42, f56 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_not_1: (P_1 + r*P_2) +// +(p13) fma.s1 f59 = f59, f42, f57 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Flag_not_1: poly_hi = r + rsq * (P_1 + r*P_2) +// +(p13) fma.s1 f35 = f59, f48, f60 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Create 0.000...01 +// +(p0) for f37 = f35, f37 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Set lsb of Y_lo to 1 +// +(p0) fmerge.se f35 = f35,f37 +(p0) br.cond.sptk EXPF_MAIN ;; +} +EXPF_VERY_SMALL: + +{ .mmi + nop.m 999 +(p13) addl r34 = @ltoff(Constants_exp_64_Exponents#),gp + nop.i 999;; +} + +{ .mfi +(p13) ld8 r34 = [r34]; +(p12) mov f35 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p12) mov f34 = f1 +(p12) br.cond.sptk EXPF_MAIN ;; +} + +{ .mlx +(p13) add r34 = 8,r34 +(p13) movl r39 = 0x0FFFE ;; +} +// +// Load big_exp_neg +// Create 1/2's exponent +// + +{ .mii +(p13) setf.exp f56 = r39 +(p13) shladd r34 = r32,4,r34 ;; + nop.i 999 +} +// +// Negative exponents are stored after positive +// + +{ .mfi +(p13) ld8 r45 = [r34],0 +// +// Y_hi = x +// Scale = 1 +// +(p13) fmpy.s1 f35 = f9, f9 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Reset Safe if necessary +// Create 1/2 +// +(p13) mov f34 = f9 + nop.i 999 ;; +} + +{ .mfi +(p13) cmp.lt.unc p0, p15 = r37, r45 +(p13) mov f36 = f1 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Y_lo = x * x +// +(p13) fmpy.s1 f35 = f35, f56 +// +// Y_lo = x*x/2 +// +(p13) br.cond.sptk EXPF_MAIN ;; +} +EXPF_HUGE: + +{ .mfi + nop.m 999 +(p0) fcmp.gt.unc.s1 p14, p0 = f9, f0 + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl r39 = 0x15DC0 ;; +} + +{ .mfi +(p14) setf.exp f34 = r39 +(p14) mov f35 = f1 +(p14) cmp.eq p0, p15 = r0, r0 ;; +} + +{ .mfb + nop.m 999 +(p14) mov f36 = f34 +// +// If x > 0, Set Safe = False +// If x > 0, Y_hi = 2**(24,000) +// If x > 0, Y_lo = 1.0 +// If x > 0, Scale = 2**(24,000) +// +(p14) br.cond.sptk EXPF_MAIN ;; +} + +{ .mlx + nop.m 999 +(p12) movl r39 = 0xA240 +} + +{ .mlx + nop.m 999 +(p12) movl r38 = 0xA1DC ;; +} + +{ .mmb +(p13) cmp.eq p15, p14 = r0, r0 +(p12) setf.exp f34 = r39 + nop.b 999 ;; +} + +{ .mlx +(p12) setf.exp f35 = r38 +(p13) movl r39 = 0xFF9C +} + +{ .mfi + nop.m 999 +(p13) fsub.s1 f34 = f0, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) mov f36 = f34 +(p12) cmp.eq p0, p15 = r0, r0 ;; +} + +{ .mfi +(p13) setf.exp f35 = r39 +(p13) mov f36 = f1 + nop.i 999 ;; +} +EXPF_MAIN: + +{ .mfi +(p0) cmp.ne.unc p12, p0 = 0x01, r33 +(p0) fmpy.s1 f101 = f36, f35 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fma.s.s0 f99 = f34, f36, f101 +(p15) br.cond.sptk EXPF_64_RETURN ;; +} + +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x01 + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl r50 = 0x0000000001007F ;; +} +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + RZ + TD (Underflows) +// +// +// If (Safe) is true, then +// Compute result using user supplied status field. +// No overflow or underflow here, but perhaps inexact. +// Return +// Else +// Determine if overflow or underflow was raised. +// Fetch +/- overflow threshold for IEEE single, double, +// double extended +// + +{ .mfi +(p0) setf.exp f60 = r50 +(p0) fma.s.s3 f102 = f34, f36, f101 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x40 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// For Safe, no need to check for over/under. +// For expm1, handle errors like exp. +// +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} + +{ .mfi + nop.m 999 +(p0) fma.s.s2 f100 = f34, f36, f101 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x40 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fclass.m.unc p12, p0 = f102, 0x00F + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = f102, 0x00F + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fcmp.ge.unc.s1 p10, p0 = f100, f60 + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// Create largest double exponent + 1. +// Create smallest double exponent - 1. +// +(p0) fcmp.ge.unc.s1 p8, p0 = f100, f60 + nop.i 999 ;; +} +// +// fcmp: resultS2 >= + overflow threshold -> set (a) if true +// fcmp: resultS2 <= - overflow threshold -> set (b) if true +// fclass: resultS3 is denorm/unorm/0 -> set (d) if true +// + +{ .mib +(p10) mov GR_Parameter_TAG = 43 + nop.i 999 +(p10) br.cond.sptk __libm_error_region ;; +} + +{ .mib +(p8) mov GR_Parameter_TAG = 16 + nop.i 999 +(p8) br.cond.sptk __libm_error_region ;; +} +// +// Report that exp overflowed +// + +{ .mib +(p12) mov GR_Parameter_TAG = 44 + nop.i 999 +(p12) br.cond.sptk __libm_error_region ;; +} + +{ .mib +(p11) mov GR_Parameter_TAG = 17 + nop.i 999 +(p11) br.cond.sptk __libm_error_region ;; +} + +{ .mib + nop.m 999 + nop.i 999 +// +// Report that exp underflowed +// +(p0) br.cond.sptk EXPF_64_RETURN ;; +} +EXPF_64_SPECIAL: + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = f8, 0x0c3 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p13, p8 = f8, 0x007 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p7) fclass.m.unc p14, p0 = f8, 0x007 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p12, p9 = f8, 0x021 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = f8, 0x022 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fclass.m.unc p10, p0 = f8, 0x022 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Identify +/- 0, Inf, or -Inf +// Generate the right kind of NaN. +// +(p13) fadd.s.s0 f99 = f0, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) mov f99 = f8 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p6) fadd.s.s0 f99 = f8, f1 +// +// expf(+/-0) = 1 +// expm1f(+/-0) = +/-0 +// No exceptions raised +// +(p6) br.cond.sptk EXPF_64_RETURN ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p14) br.cond.sptk EXPF_64_RETURN ;; +} + +{ .mfi + nop.m 999 +(p11) mov f99 = f0 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p10) fsub.s.s1 f99 = f0, f1 +// +// expf(-Inf) = 0 +// expm1f(-Inf) = -1 +// No exceptions raised. +// +(p10) br.cond.sptk EXPF_64_RETURN ;; +} + +{ .mfb + nop.m 999 +(p12) fmpy.s.s1 f99 = f8, f1 +// +// expf(+Inf) = Inf +// No exceptions raised. +// +(p0) br.cond.sptk EXPF_64_RETURN ;; +} +EXPF_64_UNSUPPORTED: + +{ .mfb + nop.m 999 +(p0) fmpy.s.s0 f99 = f8, f0 + nop.b 0;; +} + +EXPF_64_RETURN: +{ .mfb + nop.m 999 +(p0) mov f8 = f99 +(p0) br.ret.sptk b0 +} +.endp expm1f +ASM_SIZE_DIRECTIVE(expm1f) + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_expm1l.S glibc-2.2.3/sysdeps/ia64/fpu/s_expm1l.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_expm1l.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_expm1l.S Mon Feb 19 00:54:57 2001 @@ -0,0 +1,1603 @@ +.file "exp_m1l.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: Combined expl(x) and expm1l(x), where +// x +// expl(x) = e , for double-extended precision x values +// x +// expm1l(x) = e - 1 for double-extended precision x values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9,f32-f61, f99-f102 +// +// General Purpose Registers: +// r32-r61 +// r62-r65 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions raised when appropriate for exp and expm1 +// Underflow exceptions raised when appropriate for exp and expm1 +// (Error Handling Routine called for overflow and Underflow) +// Inexact raised when appropriate by algorithm +// +// expl(inf) = inf +// expl(-inf) = +0 +// expl(SNaN) = QNaN +// expl(QNaN) = QNaN +// expl(0) = 1 +// expl(EM_special Values) = QNaN +// expl(inf) = inf +// expm1l(-inf) = -1 +// expm1l(SNaN) = QNaN +// expm1l(QNaN) = QNaN +// expm1l(0) = 0 +// expm1l(EM_special Values) = QNaN +// +// ********************************************************************* +// +// Implementation and Algorithm Notes: +// +// ker_exp_64( in_FR : X, +// in_GR : Flag, +// in_GR : Expo_Range +// out_FR : Y_hi, +// out_FR : Y_lo, +// out_FR : scale, +// out_PR : Safe ) +// +// On input, X is in register format and +// Flag = 0 for exp, +// Flag = 1 for expm1, +// +// On output, provided X and X_cor are real numbers, then +// +// scale*(Y_hi + Y_lo) approximates expl(X) if Flag is 0 +// scale*(Y_hi + Y_lo) approximates expl(X)-1 if Flag is 1 +// +// The accuracy is sufficient for a highly accurate 64 sig. +// bit implementation. Safe is set if there is no danger of +// overflow/underflow when the result is composed from scale, +// Y_hi and Y_lo. Thus, we can have a fast return if Safe is set. +// Otherwise, one must prepare to handle the possible exception +// appropriately. Note that SAFE not set (false) does not mean +// that overflow/underflow will occur; only the setting of SAFE +// guarantees the opposite. +// +// **** High Level Overview **** +// +// The method consists of three cases. +// +// If |X| < Tiny use case exp_tiny; +// else if |X| < 2^(-6) use case exp_small; +// else use case exp_regular; +// +// Case exp_tiny: +// +// 1 + X can be used to approximate expl(X) or expl(X+X_cor); +// X + X^2/2 can be used to approximate expl(X) - 1 +// +// Case exp_small: +// +// Here, expl(X), expl(X+X_cor), and expl(X) - 1 can all be +// appproximated by a relatively simple polynomial. +// +// This polynomial resembles the truncated Taylor series +// +// expl(w) = 1 + w + w^2/2! + w^3/3! + ... + w^n/n! +// +// Case exp_regular: +// +// Here we use a table lookup method. The basic idea is that in +// order to compute expl(X), we accurately decompose X into +// +// X = N * log(2)/(2^12) + r, |r| <= log(2)/2^13. +// +// Hence +// +// expl(X) = 2^( N / 2^12 ) * expl(r). +// +// The value 2^( N / 2^12 ) is obtained by simple combinations +// of values calculated beforehand and stored in table; expl(r) +// is approximated by a short polynomial because |r| is small. +// +// We elaborate this method in 4 steps. +// +// Step 1: Reduction +// +// The value 2^12/log(2) is stored as a double-extended number +// L_Inv. +// +// N := round_to_nearest_integer( X * L_Inv ) +// +// The value log(2)/2^12 is stored as two numbers L_hi and L_lo so +// that r can be computed accurately via +// +// r := (X - N*L_hi) - N*L_lo +// +// We pick L_hi such that N*L_hi is representable in 64 sig. bits +// and thus the FMA X - N*L_hi is error free. So r is the +// 1 rounding error from an exact reduction with respect to +// +// L_hi + L_lo. +// +// In particular, L_hi has 30 significant bit and can be stored +// as a double-precision number; L_lo has 64 significant bits and +// stored as a double-extended number. +// +// In the case Flag = 2, we further modify r by +// +// r := r + X_cor. +// +// Step 2: Approximation +// +// expl(r) - 1 is approximated by a short polynomial of the form +// +// r + A_1 r^2 + A_2 r^3 + A_3 r^4 . +// +// Step 3: Composition from Table Values +// +// The value 2^( N / 2^12 ) can be composed from a couple of tables +// of precalculated values. First, express N as three integers +// K, M_1, and M_2 as +// +// N = K * 2^12 + M_1 * 2^6 + M_2 +// +// Where 0 <= M_1, M_2 < 2^6; and K can be positive or negative. +// When N is represented in 2's complement, M_2 is simply the 6 +// lsb's, M_1 is the next 6, and K is simply N shifted right +// arithmetically (sign extended) by 12 bits. +// +// Now, 2^( N / 2^12 ) is simply +// +// 2^K * 2^( M_1 / 2^6 ) * 2^( M_2 / 2^12 ) +// +// Clearly, 2^K needs no tabulation. The other two values are less +// trivial because if we store each accurately to more than working +// precision, than its product is too expensive to calculate. We +// use the following method. +// +// Define two mathematical values, delta_1 and delta_2, implicitly +// such that +// +// T_1 = expl( [M_1 log(2)/2^6] - delta_1 ) +// T_2 = expl( [M_2 log(2)/2^12] - delta_2 ) +// +// are representable as 24 significant bits. To illustrate the idea, +// we show how we define delta_1: +// +// T_1 := round_to_24_bits( expl( M_1 log(2)/2^6 ) ) +// delta_1 = (M_1 log(2)/2^6) - log( T_1 ) +// +// The last equality means mathematical equality. We then tabulate +// +// W_1 := expl(delta_1) - 1 +// W_2 := expl(delta_2) - 1 +// +// Both in double precision. +// +// From the tabulated values T_1, T_2, W_1, W_2, we compose the values +// T and W via +// +// T := T_1 * T_2 ...exactly +// W := W_1 + (1 + W_1)*W_2 +// +// W approximates expl( delta ) - 1 where delta = delta_1 + delta_2. +// The mathematical product of T and (W+1) is an accurate representation +// of 2^(M_1/2^6) * 2^(M_2/2^12). +// +// Step 4. Reconstruction +// +// Finally, we can reconstruct expl(X), expl(X) - 1. +// Because +// +// X = K * log(2) + (M_1*log(2)/2^6 - delta_1) +// + (M_2*log(2)/2^12 - delta_2) +// + delta_1 + delta_2 + r ...accurately +// We have +// +// expl(X) ~=~ 2^K * ( T + T*[expl(delta_1+delta_2+r) - 1] ) +// ~=~ 2^K * ( T + T*[expl(delta + r) - 1] ) +// ~=~ 2^K * ( T + T*[(expl(delta)-1) +// + expl(delta)*(expl(r)-1)] ) +// ~=~ 2^K * ( T + T*( W + (1+W)*poly(r) ) ) +// ~=~ 2^K * ( Y_hi + Y_lo ) +// +// where Y_hi = T and Y_lo = T*(W + (1+W)*poly(r)) +// +// For expl(X)-1, we have +// +// expl(X)-1 ~=~ 2^K * ( Y_hi + Y_lo ) - 1 +// ~=~ 2^K * ( Y_hi + Y_lo - 2^(-K) ) +// +// and we combine Y_hi + Y_lo - 2^(-N) into the form of two +// numbers Y_hi + Y_lo carefully. +// +// **** Algorithm Details **** +// +// A careful algorithm must be used to realize the mathematical ideas +// accurately. We describe each of the three cases. We assume SAFE +// is preset to be TRUE. +// +// Case exp_tiny: +// +// The important points are to ensure an accurate result under +// different rounding directions and a correct setting of the SAFE +// flag. +// +// If Flag is 1, then +// SAFE := False ...possibility of underflow +// Scale := 1.0 +// Y_hi := X +// Y_lo := 2^(-17000) +// Else +// Scale := 1.0 +// Y_hi := 1.0 +// Y_lo := X ...for different rounding modes +// Endif +// +// Case exp_small: +// +// Here we compute a simple polynomial. To exploit parallelism, we split +// the polynomial into several portions. +// +// Let r = X +// +// If Flag is not 1 ...i.e. expl( argument ) +// +// rsq := r * r; +// r4 := rsq*rsq +// poly_lo := P_3 + r*(P_4 + r*(P_5 + r*P_6)) +// poly_hi := r + rsq*(P_1 + r*P_2) +// Y_lo := poly_hi + r4 * poly_lo +// set lsb(Y_lo) to 1 +// Y_hi := 1.0 +// Scale := 1.0 +// +// Else ...i.e. expl( argument ) - 1 +// +// rsq := r * r +// r4 := rsq * rsq +// r6 := rsq * r4 +// poly_lo := r6*(Q_5 + r*(Q_6 + r*Q_7)) +// poly_hi := Q_1 + r*(Q_2 + r*(Q_3 + r*Q_4)) +// Y_lo := rsq*poly_hi + poly_lo +// set lsb(Y_lo) to 1 +// Y_hi := X +// Scale := 1.0 +// +// Endif +// +// Case exp_regular: +// +// The previous description contain enough information except the +// computation of poly and the final Y_hi and Y_lo in the case for +// expl(X)-1. +// +// The computation of poly for Step 2: +// +// rsq := r*r +// poly := r + rsq*(A_1 + r*(A_2 + r*A_3)) +// +// For the case expl(X) - 1, we need to incorporate 2^(-K) into +// Y_hi and Y_lo at the end of Step 4. +// +// If K > 10 then +// Y_lo := Y_lo - 2^(-K) +// Else +// If K < -10 then +// Y_lo := Y_hi + Y_lo +// Y_hi := -2^(-K) +// Else +// Y_hi := Y_hi - 2^(-K) +// End If +// End If +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 64 +Constants_exp_64_Arg: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Arg,@object) +data4 0x5C17F0BC,0xB8AA3B29,0x0000400B,0x00000000 +data4 0x00000000,0xB17217F4,0x00003FF2,0x00000000 +data4 0xF278ECE6,0xF473DE6A,0x00003FD4,0x00000000 +// /* Inv_L, L_hi, L_lo */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_Arg) + +.align 64 +Constants_exp_64_Exponents: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Exponents,@object) +data4 0x0000007E,0x00000000,0xFFFFFF83,0xFFFFFFFF +data4 0x000003FE,0x00000000,0xFFFFFC03,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0x00003FFE,0x00000000,0xFFFFC003,0xFFFFFFFF +data4 0xFFFFFFE2,0xFFFFFFFF,0xFFFFFFC4,0xFFFFFFFF +data4 0xFFFFFFBA,0xFFFFFFFF,0xFFFFFFBA,0xFFFFFFFF +ASM_SIZE_DIRECTIVE(Constants_exp_64_Exponents) + +.align 64 +Constants_exp_64_A: +ASM_TYPE_DIRECTIVE(Constants_exp_64_A,@object) +data4 0xB1B736A0,0xAAAAAAAB,0x00003FFA,0x00000000 +data4 0x90CD6327,0xAAAAAAAB,0x00003FFC,0x00000000 +data4 0xFFFFFFFF,0xFFFFFFFF,0x00003FFD,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_A) + +.align 64 +Constants_exp_64_P: +ASM_TYPE_DIRECTIVE(Constants_exp_64_P,@object) +data4 0x43914A8A,0xD00D6C81,0x00003FF2,0x00000000 +data4 0x30304B30,0xB60BC4AC,0x00003FF5,0x00000000 +data4 0x7474C518,0x88888888,0x00003FF8,0x00000000 +data4 0x8DAE729D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAAF61,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x000004C7,0x80000000,0x00003FFE,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_P) + +.align 64 +Constants_exp_64_Q: +ASM_TYPE_DIRECTIVE(Constants_exp_64_Q,@object) +data4 0xA49EF6CA,0xD00D56F7,0x00003FEF,0x00000000 +data4 0x1C63493D,0xD00D59AB,0x00003FF2,0x00000000 +data4 0xFB50CDD2,0xB60B60B5,0x00003FF5,0x00000000 +data4 0x7BA68DC8,0x88888888,0x00003FF8,0x00000000 +data4 0xAAAAAC8D,0xAAAAAAAA,0x00003FFA,0x00000000 +data4 0xAAAAACCA,0xAAAAAAAA,0x00003FFC,0x00000000 +data4 0x00000000,0x80000000,0x00003FFE,0x00000000 +// /* Reversed */ +ASM_SIZE_DIRECTIVE(Constants_exp_64_Q) + +.align 64 +Constants_exp_64_T1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T1,@object) +data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 +data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 +data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC +data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D +data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA +data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 +data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A +data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 +data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B +data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD +data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 +data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B +data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 +data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A +data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 +data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C +ASM_SIZE_DIRECTIVE(Constants_exp_64_T1) + +.align 64 +Constants_exp_64_T2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_T2,@object) +data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 +data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 +data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E +data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 +data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 +data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA +data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 +data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A +data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 +data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA +data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 +data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA +data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 +data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 +data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE +data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 +ASM_SIZE_DIRECTIVE(Constants_exp_64_T2) + +.align 64 +Constants_exp_64_W1: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W1,@object) +data4 0x00000000,0x00000000,0x171EC4B4,0xBE384454 +data4 0x4AA72766,0xBE694741,0xD42518F8,0xBE5D32B6 +data4 0x3A319149,0x3E68D96D,0x62415F36,0xBE68F4DA +data4 0xC9C86A3B,0xBE6DDA2F,0xF49228FE,0x3E6B2E50 +data4 0x1188B886,0xBE49C0C2,0x1A4C2F1F,0x3E64BFC2 +data4 0x2CB98B54,0xBE6A2FBB,0x9A55D329,0x3E5DC5DE +data4 0x39A7AACE,0x3E696490,0x5C66DBA5,0x3E54728B +data4 0xBA1C7D7D,0xBE62B0DB,0x09F1AF5F,0x3E576E04 +data4 0x1A0DD6A1,0x3E612500,0x795FBDEF,0xBE66A419 +data4 0xE1BD41FC,0xBE5CDE8C,0xEA54964F,0xBE621376 +data4 0x476E76EE,0x3E6370BE,0x3427EB92,0x3E390D1A +data4 0x2BF82BF8,0x3E1336DE,0xD0F7BD9E,0xBE5FF1CB +data4 0x0CEB09DD,0xBE60A355,0x0980F30D,0xBE5CA37E +data4 0x4C082D25,0xBE5C541B,0x3B467D29,0xBE5BBECA +data4 0xB9D946C5,0xBE400D8A,0x07ED374A,0xBE5E2A08 +data4 0x365C8B0A,0xBE66CB28,0xD3403BCA,0x3E3AAD5B +data4 0xC7EA21E0,0x3E526055,0xE72880D6,0xBE442C75 +data4 0x85222A43,0x3E58B2BB,0x522C42BF,0xBE5AAB79 +data4 0x469DC2BC,0xBE605CB4,0xA48C40DC,0xBE589FA7 +data4 0x1AA42614,0xBE51C214,0xC37293F4,0xBE48D087 +data4 0xA2D673E0,0x3E367A1C,0x114F7A38,0xBE51BEBB +data4 0x661A4B48,0xBE6348E5,0x1D3B9962,0xBDF52643 +data4 0x35A78A53,0x3E3A3B5E,0x1CECD788,0xBE46C46C +data4 0x7857D689,0xBE60B7EC,0xD14F1AD7,0xBE594D3D +data4 0x4C9A8F60,0xBE4F9C30,0x02DFF9D2,0xBE521873 +data4 0x55E6D68F,0xBE5E4C88,0x667F3DC4,0xBE62140F +data4 0x3BF88747,0xBE36961B,0xC96EC6AA,0x3E602861 +data4 0xD57FD718,0xBE3B5151,0xFC4A627B,0x3E561CD0 +data4 0xCA913FEA,0xBE3A5217,0x9A5D193A,0x3E40A3CC +data4 0x10A9C312,0xBE5AB713,0xC5F57719,0x3E4FDADB +data4 0xDBDF59D5,0x3E361428,0x61B4180D,0x3E5DB5DB +data4 0x7408D856,0xBE42AD5F,0x31B2B707,0x3E2A3148 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W1) + +.align 64 +Constants_exp_64_W2: +ASM_TYPE_DIRECTIVE(Constants_exp_64_W2,@object) +data4 0x00000000,0x00000000,0x37A3D7A2,0xBE641F25 +data4 0xAD028C40,0xBE68DD57,0xF212B1B6,0xBE5C77D8 +data4 0x1BA5B070,0x3E57878F,0x2ECAE6FE,0xBE55A36A +data4 0x569DFA3B,0xBE620608,0xA6D300A3,0xBE53B50E +data4 0x223F8F2C,0x3E5B5EF2,0xD6DE0DF4,0xBE56A0D9 +data4 0xEAE28F51,0xBE64EEF3,0x367EA80B,0xBE5E5AE2 +data4 0x5FCBC02D,0x3E47CB1A,0x9BDAFEB7,0xBE656BA0 +data4 0x805AFEE7,0x3E6E70C6,0xA3415EBA,0xBE6E0509 +data4 0x49BFF529,0xBE56856B,0x00508651,0x3E66DD33 +data4 0xC114BC13,0x3E51165F,0xC453290F,0x3E53333D +data4 0x05539FDA,0x3E6A072B,0x7C0A7696,0xBE47CD87 +data4 0xEB05C6D9,0xBE668BF4,0x6AE86C93,0xBE67C3E3 +data4 0xD0B3E84B,0xBE533904,0x556B53CE,0x3E63E8D9 +data4 0x63A98DC8,0x3E212C89,0x032A7A22,0xBE33138F +data4 0xBC584008,0x3E530FA9,0xCCB93C97,0xBE6ADF82 +data4 0x8370EA39,0x3E5F9113,0xFB6A05D8,0x3E5443A4 +data4 0x181FEE7A,0x3E63DACD,0xF0F67DEC,0xBE62B29D +data4 0x3DDE6307,0x3E65C483,0xD40A24C1,0x3E5BF030 +data4 0x14E437BE,0x3E658B8F,0xED98B6C7,0xBE631C29 +data4 0x04CF7C71,0x3E6335D2,0xE954A79D,0x3E529EED +data4 0xF64A2FB8,0x3E5D9257,0x854ED06C,0xBE6BED1B +data4 0xD71405CB,0x3E5096F6,0xACB9FDF5,0xBE3D4893 +data4 0x01B68349,0xBDFEB158,0xC6A463B9,0x3E628D35 +data4 0xADE45917,0xBE559725,0x042FC476,0xBE68C29C +data4 0x01E511FA,0xBE67593B,0x398801ED,0xBE4A4313 +data4 0xDA7C3300,0x3E699571,0x08062A9E,0x3E5349BE +data4 0x755BB28E,0x3E5229C4,0x77A1F80D,0x3E67E426 +data4 0x6B69C352,0xBE52B33F,0x084DA57F,0xBE6B3550 +data4 0xD1D09A20,0xBE6DB03F,0x2161B2C1,0xBE60CBC4 +data4 0x78A2B771,0x3E56ED9C,0x9D0FA795,0xBE508E31 +data4 0xFD1A54E9,0xBE59482A,0xB07FD23E,0xBE2A17CE +data4 0x17365712,0x3E68BF5C,0xB3785569,0x3E3956F9 +ASM_SIZE_DIRECTIVE(Constants_exp_64_W2) + +GR_SAVE_PFS = r59 +GR_SAVE_B0 = r60 +GR_SAVE_GP = r61 +GR_Parameter_X = r62 +GR_Parameter_Y = r63 +GR_Parameter_RESULT = r64 +GR_Parameter_TAG = r65 + +FR_X = f9 +FR_Y = f9 +FR_RESULT = f99 + +.section .text +.proc expm1l# +.global expm1l# +.align 64 +expm1l: +#ifdef _LIBC +.global __expm1l# +__expm1l: +#endif +{ .mii +alloc r32 = ar.pfs,0,30,4,0 +(p0) add r33 = 1, r0 +(p0) cmp.eq.unc p7, p0 = r0, r0 +} +{ .mbb + nop.m 999 +(p0) br.cond.sptk exp_continue + nop.b 999 ;; +} + +// +// Set p7 true for expm1 +// Set Flag = r33 = 1 for expm1 +// + +.endp expm1l +ASM_SIZE_DIRECTIVE(expm1l) + +.section .text +.proc expl# +.global expl# +.align 64 +expl: +#ifdef _LIBC +.global __ieee754_expl# +__ieee754_expl: +#endif +{ .mii +alloc r32 = ar.pfs,0,30,4,0 +(p0) add r33 = r0, r0 +(p0) cmp.eq.unc p0, p7 = r0, r0 ;; +} +exp_continue: +{ .mfi +(p0) add r32 = 2,r0 +(p0) fnorm.s1 f9 = f8 + nop.i 0 +} +{ .mfi +(p0) nop.m 0 +// +// Set p7 false for exp +// Set Flag = r33 = 0 for exp +// +(p0) fclass.m.unc p6, p8 = f8, 0x1E7 + nop.i 0;; +} +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p9, p0 = f8, 0x1FF + nop.i 0 +} +{ .mfi + nop.m 999 +(p0) mov f36 = f1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Identify NatVals, NaNs, Infs, and Zeros. +// Identify EM unsupporteds. +// Save special input registers +(p0) mov f32 = f0 +// +// Create FR_X_cor = 0.0 +// GR_Flag = 0 +// GR_Expo_Range = 2 (r32) for double-extended precision +// FR_Scale = 1.0 +// +(p6) br.cond.spnt EXPL_64_SPECIAL ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p9) br.cond.spnt EXPL_64_UNSUPPORTED ;; +} +{ .mfi +(p0) cmp.ne.unc p12, p13 = 0x01, r33 +// +// Branch out for special input values +// +(p0) fcmp.lt.unc.s0 p9,p0 = f8, f0 +(p0) cmp.eq.unc p15, p0 = r0, r0 +} +{ .mmi + nop.m 999 +// +// Raise possible denormal operand exception +// Normalize x +// +// This function computes expl( x + x_cor) +// Input FR 1: FR_X +// Input FR 2: FR_X_cor +// Input GR 1: GR_Flag +// Input GR 2: GR_Expo_Range +// Output FR 3: FR_Y_hi +// Output FR 4: FR_Y_lo +// Output FR 5: FR_Scale +// Output PR 1: PR_Safe +(p0) addl r34 = @ltoff(Constants_exp_64_Arg#),gp +(p0) addl r40 = @ltoff(Constants_exp_64_W1#),gp +};; +// +// Prepare to load constants +// Set Safe = True +// + +{ .mmi + ld8 r34 = [r34] + ld8 r40 = [r40] +(p0) addl r41 = @ltoff(Constants_exp_64_W2#),gp +};; + +{ .mmi +(p0) ldfe f37 = [r34],16 +(p0) ld8 r41 = [r41] ;; +} + +// +// N = fcvt.fx(float_N) +// Set p14 if -6 > expo_X +// +// +// Bias = 0x0FFFF +// expo_X = expo_X and Mask +// + +{ .mmi +(p0) ldfe f40 = [r34],16 + nop.m 999 +// +// Load L_lo +// Set p10 if 14 < expo_X +// +(p0) addl r50 = @ltoff(Constants_exp_64_T1#),gp +} +{ .mmi + nop.m 999 + nop.m 999 +(p0) addl r51 = @ltoff(Constants_exp_64_T2#),gp ;; +} +// +// Load W2_ptr +// Branch to SMALL is expo_X < -6 +// + +{.mmi +(p0) ld8 r50 = [r50] +(p0) ld8 r51 = [r51] +};; + +{ .mlx +(p0) ldfe f41 = [r34],16 +// +// float_N = X * L_Inv +// expo_X = exponent of X +// Mask = 0x1FFFF +// +(p0) movl r58 = 0x0FFFF +} +{ .mlx + nop.m 999 +(p0) movl r39 = 0x1FFFF ;; +} +{ .mmi +(p0) getf.exp r37 = f9 + nop.m 999 +(p0) addl r34 = @ltoff(Constants_exp_64_Exponents#),gp ;; +} +{ .mii +(p0) ld8 r34 = [r34] + nop.i 999 +(p0) and r37 = r37, r39 ;; +} +{ .mmi +(p0) sub r37 = r37, r58 ;; +(p0) cmp.gt.unc p14, p0 = -6, r37 +(p0) cmp.lt.unc p10, p0 = 14, r37 ;; +} +{ .mfi +(p0) nop.m 0 +// +// Load L_inv +// Set p12 true for Flag = 0 (exp) +// Set p13 true for Flag = 1 (expm1) +// +(p0) fmpy.s1 f38 = f9, f37 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Load L_hi +// expo_X = expo_X - Bias +// get W1_ptr +// +(p0) fcvt.fx.s1 f39 = f38 +(p14) br.cond.spnt EXPL_SMALL ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt EXPL_HUGE ;; +} +{ .mmi +(p0) shladd r34 = r32,4,r34 + nop.m 999 +(p0) addl r35 = @ltoff(Constants_exp_64_A#),gp ;; +} +// +// Load T_1,T_2 +// +{ .mmi + nop.m 999 + ld8 r35 =[r35] + nop.i 99 +};; +{ .mmb +(p0) ldfe f51 = [r35],16 +(p0) ld8 r45 = [r34],8 + nop.b 999 ;; +} +// +// Set Safe = True if k >= big_expo_neg +// Set Safe = False if k < big_expo_neg +// +{ .mmb +(p0) ldfe f49 = [r35],16 +(p0) ld8 r48 = [r34],0 + nop.b 999 ;; +} +{ .mfi + nop.m 999 +// +// Branch to HUGE is expo_X > 14 +// +(p0) fcvt.xf f38 = f39 + nop.i 999 ;; +} +{ .mfi +(p0) getf.sig r52 = f39 + nop.f 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 +(p0) extr.u r43 = r52, 6, 6 ;; +// +// r = r - float_N * L_lo +// K = extr(N_fix,12,52) +// +(p0) shladd r40 = r43,3,r40 ;; +} +{ .mfi +(p0) shladd r50 = r43,2,r50 +(p0) fnma.s1 f42 = f40, f38, f9 +// +// float_N = float(N) +// N_fix = signficand N +// +(p0) extr.u r42 = r52, 0, 6 +} +{ .mmi +(p0) ldfd f43 = [r40],0 ;; +(p0) shladd r41 = r42,3,r41 +(p0) shladd r51 = r42,2,r51 +} +// +// W_1_p1 = 1 + W_1 +// +{ .mmi +(p0) ldfs f44 = [r50],0 ;; +(p0) ldfd f45 = [r41],0 +// +// M_2 = extr(N_fix,0,6) +// M_1 = extr(N_fix,6,6) +// r = X - float_N * L_hi +// +(p0) extr r44 = r52, 12, 52 +} +{ .mmi +(p0) ldfs f46 = [r51],0 ;; +(p0) sub r46 = r58, r44 +(p0) cmp.gt.unc p8, p15 = r44, r45 +} +// +// W = W_1 + W_1_p1*W_2 +// Load A_2 +// Bias_m_K = Bias - K +// +{ .mii +(p0) ldfe f40 = [r35],16 +// +// load A_1 +// poly = A_2 + r*A_3 +// rsq = r * r +// neg_2_mK = exponent of Bias_m_k +// +(p0) add r47 = r58, r44 ;; +// +// Set Safe = True if k <= big_expo_pos +// Set Safe = False if k > big_expo_pos +// Load A_3 +// +(p15) cmp.lt p8,p15 = r44,r48 ;; +} +{ .mmf +(p0) setf.exp f61 = r46 +// +// Bias_p + K = Bias + K +// T = T_1 * T_2 +// +(p0) setf.exp f36 = r47 +(p0) fnma.s1 f42 = f41, f38, f42 ;; +} +{ .mfi + nop.m 999 +// +// Load W_1,W_2 +// Load big_exp_pos, load big_exp_neg +// +(p0) fadd.s1 f47 = f43, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 f52 = f42, f51, f49 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 f48 = f42, f42 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 f53 = f44, f46 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 f54 = f45, f47, f43 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fneg f61 = f61 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 f52 = f42, f52, f40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 f55 = f54, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// W + Wp1 * poly +// +(p0) mov f34 = f53 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// A_1 + r * poly +// Scale = setf_expl(Bias_p_k) +// +(p0) fma.s1 f52 = f48, f52, f42 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly = r + rsq(A_1 + r*poly) +// Wp1 = 1 + W +// neg_2_mK = -neg_2_mK +// +(p0) fma.s1 f35 = f55, f52, f54 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p0) fmpy.s1 f35 = f35, f53 +// +// Y_hi = T +// Y_lo = T * (W + Wp1*poly) +// +(p12) br.cond.sptk EXPL_MAIN ;; +} +// +// Branch if expl(x) +// Continue for expl(x-1) +// +{ .mii +(p0) cmp.lt.unc p12, p13 = 10, r44 + nop.i 999 ;; +// +// Set p12 if 10 < K, Else p13 +// +(p13) cmp.gt.unc p13, p14 = -10, r44 ;; +} +// +// K > 10: Y_lo = Y_lo + neg_2_mK +// K <=10: Set p13 if -10 > K, Else set p14 +// +{ .mfi +(p13) cmp.eq p15, p0 = r0, r0 +(p14) fadd.s1 f34 = f61, f34 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fadd.s1 f35 = f35, f61 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) fadd.s1 f35 = f35, f34 + nop.i 999 +} +{ .mfb + nop.m 999 +// +// K <= 10 and K < -10, Set Safe = True +// K <= 10 and K < 10, Y_lo = Y_hi + Y_lo +// K <= 10 and K > =-10, Y_hi = Y_hi + neg_2_mk +// +(p13) mov f34 = f61 +(p0) br.cond.sptk EXPL_MAIN ;; +} +EXPL_SMALL: +{ .mmi + nop.m 999 +(p0) addl r34 = @ltoff(Constants_exp_64_Exponents#),gp +(p12) addl r35 = @ltoff(Constants_exp_64_P#),gp ;; +} +.pred.rel "mutex",p12,p13 +{ .mmi +(p12) ld8 r35=[r35] +nop.m 999 +(p13) addl r35 = @ltoff(Constants_exp_64_Q#),gp +};; +{ .mmi +(p13) ld8 r35=[r35] +(p0) ld8 r34=[r34] +nop.i 999 +};; +{ .mfi +(p0) add r34 = 0x48,r34 +// +// Return +// K <= 10 and K < 10, Y_hi = neg_2_mk +// +// /*******************************************************/ +// /*********** Branch EXPL_SMALL ************************/ +// /*******************************************************/ +(p0) mov f42 = f9 + nop.i 999 ;; +} +// +// Flag = 0 +// r4 = rsq * rsq +// +{ .mfi +(p0) ld8 r49 =[r34],0 + nop.f 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Flag = 1 +// +(p0) cmp.lt.unc p14, p0 = r37, r49 ;; +} +{ .mfi + nop.m 999 +// +// r = X +// +(p0) fmpy.s1 f48 = f42, f42 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// rsq = r * r +// +(p0) fmpy.s1 f50 = f48, f48 +// +// Is input very small? +// +(p14) br.cond.spnt EXPL_VERY_SMALL ;; +} +// +// Flag_not1: Y_hi = 1.0 +// Flag is 1: r6 = rsq * r4 +// +{ .mfi +(p12) ldfe f52 = [r35],16 +(p12) mov f34 = f1 +(p0) add r53 = 0x1,r0 ;; +} +{ .mfi +(p13) ldfe f51 = [r35],16 +// +// Flag_not_1: Y_lo = poly_hi + r4 * poly_lo +// +(p13) mov f34 = f9 + nop.i 999 ;; +} +{ .mmf +(p12) ldfe f53 = [r35],16 +// +// For Flag_not_1, Y_hi = X +// Scale = 1 +// Create 0x000...01 +// +(p0) setf.sig f37 = r53 +(p0) mov f36 = f1 ;; +} +{ .mmi +(p13) ldfe f52 = [r35],16 ;; +(p12) ldfe f54 = [r35],16 + nop.i 999 ;; +} +{ .mfi +(p13) ldfe f53 = [r35],16 +(p13) fmpy.s1 f58 = f48, f50 + nop.i 999 ;; +} +// +// Flag_not1: poly_lo = P_5 + r*P_6 +// Flag_1: poly_lo = Q_6 + r*Q_7 +// +{ .mmi +(p13) ldfe f54 = [r35],16 ;; +(p12) ldfe f55 = [r35],16 + nop.i 999 ;; +} +{ .mmi +(p12) ldfe f56 = [r35],16 ;; +(p13) ldfe f55 = [r35],16 + nop.i 999 ;; +} +{ .mmi +(p12) ldfe f57 = [r35],0 ;; +(p13) ldfe f56 = [r35],16 + nop.i 999 ;; +} +{ .mfi +(p13) ldfe f57 = [r35],0 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// For Flag_not_1, load p5,p6,p1,p2 +// Else load p5,p6,p1,p2 +// +(p12) fma.s1 f60 = f52, f42, f53 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) fma.s1 f60 = f51, f42, f52 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 f60 = f60, f42, f54 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 f59 = f56, f42, f57 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) fma.s1 f60 = f42, f60, f53 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 f59 = f59, f48, f42 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Flag_1: poly_lo = Q_5 + r*(Q_6 + r*Q_7) +// Flag_not1: poly_lo = P_4 + r*(P_5 + r*P_6) +// Flag_not1: poly_hi = (P_1 + r*P_2) +// +(p13) fmpy.s1 f60 = f60, f58 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 f60 = f60, f42, f55 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Flag_1: poly_lo = r6 *(Q_5 + ....) +// Flag_not1: poly_hi = r + rsq *(P_1 + r*P_2) +// +(p12) fma.s1 f35 = f60, f50, f59 + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fma.s1 f59 = f54, f42, f55 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Flag_not1: Y_lo = rsq* poly_hi + poly_lo +// Flag_1: poly_lo = rsq* poly_hi + poly_lo +// +(p13) fma.s1 f59 = f59, f42, f56 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Flag_not_1: (P_1 + r*P_2) +// +(p13) fma.s1 f59 = f59, f42, f57 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Flag_not_1: poly_hi = r + rsq * (P_1 + r*P_2) +// +(p13) fma.s1 f35 = f59, f48, f60 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Create 0.000...01 +// +(p0) for f37 = f35, f37 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Set lsb of Y_lo to 1 +// +(p0) fmerge.se f35 = f35,f37 +(p0) br.cond.sptk EXPL_MAIN ;; +} +EXPL_VERY_SMALL: +{ .mmi + nop.m 999 + nop.m 999 +(p13) addl r34 = @ltoff(Constants_exp_64_Exponents#),gp +} +{ .mfi + nop.m 999 +(p12) mov f35 = f9 + nop.i 999 ;; +} +{ .mfb +(p13) ld8 r34 = [r34] +(p12) mov f34 = f1 +(p12) br.cond.sptk EXPL_MAIN ;; +} +{ .mlx +(p13) add r34 = 8,r34 +(p13) movl r39 = 0x0FFFE ;; +} +// +// Load big_exp_neg +// Create 1/2's exponent +// +{ .mii +(p13) setf.exp f56 = r39 +(p13) shladd r34 = r32,4,r34 ;; + nop.i 999 +} +// +// Negative exponents are stored after positive +// +{ .mfi +(p13) ld8 r45 = [r34],0 +// +// Y_hi = x +// Scale = 1 +// +(p13) fmpy.s1 f35 = f9, f9 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Reset Safe if necessary +// Create 1/2 +// +(p13) mov f34 = f9 + nop.i 999 ;; +} +{ .mfi +(p13) cmp.lt.unc p0, p15 = r37, r45 +(p13) mov f36 = f1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Y_lo = x * x +// +(p13) fmpy.s1 f35 = f35, f56 +// +// Y_lo = x*x/2 +// +(p13) br.cond.sptk EXPL_MAIN ;; +} +EXPL_HUGE: +{ .mfi + nop.m 999 +(p0) fcmp.gt.unc.s1 p14, p0 = f9, f0 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl r39 = 0x15DC0 ;; +} +{ .mfi +(p14) setf.exp f34 = r39 +(p14) mov f35 = f1 +(p14) cmp.eq p0, p15 = r0, r0 ;; +} +{ .mfb + nop.m 999 +(p14) mov f36 = f34 +// +// If x > 0, Set Safe = False +// If x > 0, Y_hi = 2**(24,000) +// If x > 0, Y_lo = 1.0 +// If x > 0, Scale = 2**(24,000) +// +(p14) br.cond.sptk EXPL_MAIN ;; +} +{ .mlx + nop.m 999 +(p12) movl r39 = 0xA240 +} +{ .mlx + nop.m 999 +(p12) movl r38 = 0xA1DC ;; +} +{ .mmb +(p13) cmp.eq p15, p14 = r0, r0 +(p12) setf.exp f34 = r39 + nop.b 999 ;; +} +{ .mlx +(p12) setf.exp f35 = r38 +(p13) movl r39 = 0xFF9C +} +{ .mfi + nop.m 999 +(p13) fsub.s1 f34 = f0, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) mov f36 = f34 +(p12) cmp.eq p0, p15 = r0, r0 ;; +} +{ .mfi +(p13) setf.exp f35 = r39 +(p13) mov f36 = f1 + nop.i 999 ;; +} +EXPL_MAIN: +{ .mfi +(p0) cmp.ne.unc p12, p0 = 0x01, r33 +(p0) fmpy.s1 f101 = f36, f35 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p0) fma.s0 f99 = f34, f36, f101 +(p15) br.cond.sptk EXPL_64_RETURN ;; +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x01 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl r50 = 0x00000000013FFF ;; +} +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + RZ + TD (Underflows) +// +// +// If (Safe) is true, then +// Compute result using user supplied status field. +// No overflow or underflow here, but perhaps inexact. +// Return +// Else +// Determine if overflow or underflow was raised. +// Fetch +/- overflow threshold for IEEE single, double, +// double extended +// +{ .mfi +(p0) setf.exp f60 = r50 +(p0) fma.s3 f102 = f34, f36, f101 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// For Safe, no need to check for over/under. +// For expm1, handle errors like exp. +// +(p0) fsetc.s2 0x7F,0x42 + nop.i 999;; +} +{ .mfi + nop.m 999 +(p0) fma.s2 f100 = f34, f36, f101 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x40 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p12, p0 = f102, 0x00F + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = f102, 0x00F + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fcmp.ge.unc.s1 p10, p0 = f100, f60 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Create largest double exponent + 1. +// Create smallest double exponent - 1. +// +(p0) fcmp.ge.unc.s1 p8, p0 = f100, f60 + nop.i 999 ;; +} +// +// fcmp: resultS2 >= + overflow threshold -> set (a) if true +// fcmp: resultS2 <= - overflow threshold -> set (b) if true +// fclass: resultS3 is denorm/unorm/0 -> set (d) if true +// +{ .mib +(p10) mov GR_Parameter_TAG = 39 + nop.i 999 +(p10) br.cond.sptk __libm_error_region ;; +} +{ .mib +(p8) mov GR_Parameter_TAG = 12 + nop.i 999 +(p8) br.cond.sptk __libm_error_region ;; +} +// +// Report that exp overflowed +// +{ .mib +(p12) mov GR_Parameter_TAG = 40 + nop.i 999 +(p12) br.cond.sptk __libm_error_region ;; +} +{ .mib +(p11) mov GR_Parameter_TAG = 13 + nop.i 999 +(p11) br.cond.sptk __libm_error_region ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Report that exp underflowed +// +(p0) br.cond.sptk EXPL_64_RETURN ;; +} +EXPL_64_SPECIAL: +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = f8, 0x0c3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p13, p8 = f8, 0x007 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p14, p0 = f8, 0x007 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p12, p9 = f8, 0x021 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p11, p0 = f8, 0x022 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fclass.m.unc p10, p0 = f8, 0x022 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Identify +/- 0, Inf, or -Inf +// Generate the right kind of NaN. +// +(p13) fadd.s0 f99 = f0, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) mov f99 = f8 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p6) fadd.s0 f99 = f8, f1 +// +// expl(+/-0) = 1 +// expm1l(+/-0) = +/-0 +// No exceptions raised +// +(p6) br.cond.sptk EXPL_64_RETURN ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p14) br.cond.sptk EXPL_64_RETURN ;; +} +{ .mfi + nop.m 999 +(p11) mov f99 = f0 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p10) fsub.s1 f99 = f0, f1 +// +// expl(-Inf) = 0 +// expm1l(-Inf) = -1 +// No exceptions raised. +// +(p10) br.cond.sptk EXPL_64_RETURN ;; +} +{ .mfb + nop.m 999 +(p12) fmpy.s1 f99 = f8, f1 +// +// expl(+Inf) = Inf +// No exceptions raised. +// +(p0) br.cond.sptk EXPL_64_RETURN ;; +} +EXPL_64_UNSUPPORTED: +{ .mfb + nop.m 999 +(p0) fmpy.s0 f99 = f8, f0 +(p0) br.cond.sptk EXPL_64_RETURN ;; +} +EXPL_64_RETURN: +{ .mfb + nop.m 999 +(p0) mov f8 = f99 +(p0) br.ret.sptk b0 +} +.endp +ASM_SIZE_DIRECTIVE(expl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_floor.S glibc-2.2.3/sysdeps/ia64/fpu/s_floor.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_floor.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_floor.S Mon Feb 19 00:55:09 2001 @@ -0,0 +1,227 @@ +.file "floor.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +.align 32 +.global floor# + +.section .text +.proc floor# +.align 32 + +// History +//============================================================== +// 2/02/00: Initial version +// 3/22/00: Updated to improve performance +// 6/13/00: Improved speed, fixed setting of inexact flag +// 6/27/00: Eliminated incorrect invalid flag setting +// 2/07/01: Corrected sign of zero result in round to -inf mode + +// API +//============================================================== +// double floor(double x) + +// general input registers: + +floor_GR_FFFF = r14 +floor_GR_signexp = r15 +floor_GR_exponent = r16 +floor_GR_expmask = r17 +floor_GR_bigexp = r18 + + +// predicate registers used: + +// p6 ==> Input is NaN, infinity, zero +// p7 ==> Input is denormal +// p8 ==> Input is <0 +// p9 ==> Input is >=0 +// p10 ==> Input is already an integer (bigger than largest integer) +// p11 ==> Input is not a large integer +// p12 ==> Input is a smaller integer +// p13 ==> Input is not an even integer, so inexact must be set + + +// floating-point registers used: + +FLOOR_NORM_f8 = f9 +FLOOR_FFFF = f10 +FLOOR_INEXACT = f11 +FLOOR_FLOAT_INT_f8 = f12 +FLOOR_INT_f8 = f13 +FLOOR_adj = f14 + +// Overview of operation +//============================================================== + +// double floor(double x) +// Return an integer value (represented as a double) that is the largest +// value not greater than x +// This is x rounded toward -infinity to an integral value. +// Inexact is set if x != floor(x) +// ************************************************************************** + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + +#include "libm_support.h" + +floor: +#ifdef _LIBC +.global __floor +__floor: +#endif + +{ .mfi + getf.exp floor_GR_signexp = f8 + fcvt.fx.trunc.s1 FLOOR_INT_f8 = f8 + addl floor_GR_bigexp = 0x10033, r0 +} +{ .mfi + addl floor_GR_FFFF = -1,r0 + fcmp.lt.s1 p8,p9 = f8,f0 + mov floor_GR_expmask = 0x1FFFF ;; +} + +// p7 ==> denorm +{ .mfi + setf.sig FLOOR_FFFF = floor_GR_FFFF + fclass.m p7,p0 = f8, 0x0b + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm.s1 FLOOR_NORM_f8 = f8 + nop.i 999 ;; +} + +// p6 ==> NAN, INF, ZERO +{ .mfb + nop.m 999 + fclass.m p6,p10 = f8, 0xe7 +(p7) br.cond.spnt L(FLOOR_DENORM) ;; +} + +L(FLOOR_COMMON): +.pred.rel "mutex",p8,p9 +// Set adjustment to subtract from trunc(x) for result +// If x<0, adjustment is -1.0 +// If x>=0, adjustment is 0.0 +{ .mfi + and floor_GR_exponent = floor_GR_signexp, floor_GR_expmask +(p8) fnma.s1 FLOOR_adj = f1,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fadd.s1 FLOOR_adj = f0,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p12,p0 = f8,f0 // Dummy op to set denormal and invalid flag + nop.i 999 +} +{ .mfi +(p10) cmp.ge.unc p10,p11 = floor_GR_exponent, floor_GR_bigexp +(p6) fnorm.d f8 = f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcvt.xf FLOOR_FLOAT_INT_f8 = FLOOR_INT_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fnorm.d f8 = FLOOR_NORM_f8 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p11) fadd.d f8 = FLOOR_FLOAT_INT_f8,FLOOR_adj + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p12,p13 = FLOOR_FLOAT_INT_f8, FLOOR_NORM_f8 + nop.i 999 ;; +} + +// Set inexact if result not equal to input +{ .mfi + nop.m 999 +(p13) fmpy.s0 FLOOR_INEXACT = FLOOR_FFFF,FLOOR_FFFF + nop.i 999 +} +// Set result to input if integer +{ .mfb + nop.m 999 +(p12) fnorm.d f8 = FLOOR_NORM_f8 + br.ret.sptk b0 ;; +} + +// Here if input denorm +L(FLOOR_DENORM): +{ .mfb + getf.exp floor_GR_signexp = FLOOR_NORM_f8 + fcvt.fx.trunc.s1 FLOOR_INT_f8 = FLOOR_NORM_f8 + br.cond.sptk L(FLOOR_COMMON) ;; +} + +.endp floor +ASM_SIZE_DIRECTIVE(floor) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_floorf.S glibc-2.2.3/sysdeps/ia64/fpu/s_floorf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_floorf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_floorf.S Mon Feb 19 00:55:18 2001 @@ -0,0 +1,224 @@ +.file "floorf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +.align 32 +.global floorf# + +.section .text +.proc floorf# +.align 32 + +// History +//============================================================== +// 2/02/00: Initial version +// 6/13/00: Improved speed +// 6/27/00: Eliminated incorrect invalid flag setting +// 2/07/01: Corrected sign of zero result in round to -inf mode + +// API +//============================================================== +// float floorf(float x) + +// general input registers: + +floor_GR_FFFF = r14 +floor_GR_signexp = r15 +floor_GR_exponent = r16 +floor_GR_expmask = r17 +floor_GR_bigexp = r18 + + +// predicate registers used: + +// p6 ==> Input is NaN, infinity, zero +// p7 ==> Input is denormal +// p8 ==> Input is <0 +// p9 ==> Input is >=0 +// p10 ==> Input is already an integer (bigger than largest integer) +// p11 ==> Input is not a large integer +// p12 ==> Input is a smaller integer +// p13 ==> Input is not an even integer, so inexact must be set + + +// floating-point registers used: + +FLOOR_NORM_f8 = f9 +FLOOR_FFFF = f10 +FLOOR_INEXACT = f11 +FLOOR_FLOAT_INT_f8 = f12 +FLOOR_INT_f8 = f13 +FLOOR_adj = f14 + +// Overview of operation +//============================================================== + +// float floorf(float x) +// Return an integer value (represented as a float) that is the largest +// value not greater than x +// This is x rounded toward -infinity to an integral value. +// Inexact is set if x != floorf(x) +// ************************************************************************** + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + +#include "libm_support.h" + +floorf: +#ifdef _LIBC +.global __floorf +__floorf: +#endif + +{ .mfi + getf.exp floor_GR_signexp = f8 + fcvt.fx.trunc.s1 FLOOR_INT_f8 = f8 + addl floor_GR_bigexp = 0x10016, r0 +} +{ .mfi + addl floor_GR_FFFF = -1,r0 + fcmp.lt.s1 p8,p9 = f8,f0 + mov floor_GR_expmask = 0x1FFFF ;; +} + +// p7 ==> denorm +{ .mfi + setf.sig FLOOR_FFFF = floor_GR_FFFF + fclass.m p7,p0 = f8, 0x0b + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm.s1 FLOOR_NORM_f8 = f8 + nop.i 999 ;; +} + +// p6 ==> NAN, INF, ZERO +{ .mfb + nop.m 999 + fclass.m p6,p10 = f8, 0xe7 +(p7) br.cond.spnt L(FLOOR_DENORM) ;; +} + +L(FLOOR_COMMON): +.pred.rel "mutex",p8,p9 +// Set adjustment to subtract from trunc(x) for result +// If x<0, adjustment is -1.0 +// If x>=0, adjustment is 0.0 +{ .mfi + and floor_GR_exponent = floor_GR_signexp, floor_GR_expmask +(p8) fnma.s1 FLOOR_adj = f1,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fadd.s1 FLOOR_adj = f0,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p12,p0 = f8,f0 // Dummy op to set denormal and invalid flag + nop.i 999 +} +{ .mfi +(p10) cmp.ge.unc p10,p11 = floor_GR_exponent, floor_GR_bigexp +(p6) fnorm.s f8 = f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcvt.xf FLOOR_FLOAT_INT_f8 = FLOOR_INT_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fnorm.s f8 = FLOOR_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd.s f8 = FLOOR_FLOAT_INT_f8,FLOOR_adj + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p12,p13 = FLOOR_FLOAT_INT_f8, FLOOR_NORM_f8 + nop.i 999 ;; +} + +// Set inexact if result not equal to input +{ .mfi + nop.m 999 +(p13) fmpy.s0 FLOOR_INEXACT = FLOOR_FFFF,FLOOR_FFFF + nop.i 999 +} +// Set result to input if integer +{ .mfb + nop.m 999 +(p12) fnorm.s f8 = FLOOR_NORM_f8 + br.ret.sptk b0 ;; +} + +// Here if input denorm +L(FLOOR_DENORM): +{ .mfb + getf.exp floor_GR_signexp = FLOOR_NORM_f8 + fcvt.fx.trunc.s1 FLOOR_INT_f8 = FLOOR_NORM_f8 + br.cond.sptk L(FLOOR_COMMON) ;; +} + +.endp floorf +ASM_SIZE_DIRECTIVE(floorf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_floorl.S glibc-2.2.3/sysdeps/ia64/fpu/s_floorl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_floorl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_floorl.S Mon Feb 19 00:55:27 2001 @@ -0,0 +1,224 @@ +.file "floorl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +.align 32 +.global floorl# + +.section .text +.proc floorl# +.align 32 + +// History +//============================================================== +// 2/02/00: Initial version +// 6/13/00: Improved speed +// 6/27/00: Eliminated incorrect invalid flag setting +// 2/07/01: Corrected sign of zero result in round to -inf mode + +// API +//============================================================== +// long double floorl(long double x) + +// general input registers: + +floor_GR_FFFF = r14 +floor_GR_signexp = r15 +floor_GR_exponent = r16 +floor_GR_expmask = r17 +floor_GR_bigexp = r18 + + +// predicate registers used: + +// p6 ==> Input is NaN, infinity, zero +// p7 ==> Input is denormal +// p8 ==> Input is <0 +// p9 ==> Input is >=0 +// p10 ==> Input is already an integer (bigger than largest integer) +// p11 ==> Input is not a large integer +// p12 ==> Input is a smaller integer +// p13 ==> Input is not an even integer, so inexact must be set + + +// floating-point registers used: + +FLOOR_NORM_f8 = f9 +FLOOR_FFFF = f10 +FLOOR_INEXACT = f11 +FLOOR_FLOAT_INT_f8 = f12 +FLOOR_INT_f8 = f13 +FLOOR_adj = f14 + +// Overview of operation +//============================================================== + +// long double floorl(long double x) +// Return an integer value (represented as a long double) that is the largest +// value not greater than x +// This is x rounded toward -infinity to an integral value. +// Inexact is set if x != floorl(x) +// ************************************************************************** + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + +#include "libm_support.h" + +floorl: +#ifdef _LIBC +.global __floorl +__floorl: +#endif + +{ .mfi + getf.exp floor_GR_signexp = f8 + fcvt.fx.trunc.s1 FLOOR_INT_f8 = f8 + addl floor_GR_bigexp = 0x1003e, r0 +} +{ .mfi + addl floor_GR_FFFF = -1,r0 + fcmp.lt.s1 p8,p9 = f8,f0 + mov floor_GR_expmask = 0x1FFFF ;; +} + +// p7 ==> denorm +{ .mfi + setf.sig FLOOR_FFFF = floor_GR_FFFF + fclass.m p7,p0 = f8, 0x0b + nop.i 999 +} +{ .mfi + nop.m 999 + fnorm.s1 FLOOR_NORM_f8 = f8 + nop.i 999 ;; +} + +// p6 ==> NAN, INF, ZERO +{ .mfb + nop.m 999 + fclass.m p6,p10 = f8, 0xe7 +(p7) br.cond.spnt L(FLOOR_DENORM) ;; +} + +L(FLOOR_COMMON): +.pred.rel "mutex",p8,p9 +// Set adjustment to subtract from trunc(x) for result +// If x<0, adjustment is -1.0 +// If x>=0, adjustment is 0.0 +{ .mfi + and floor_GR_exponent = floor_GR_signexp, floor_GR_expmask +(p8) fnma.s1 FLOOR_adj = f1,f1,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fadd.s1 FLOOR_adj = f0,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 + fcmp.eq.s0 p12,p0 = f8,f0 // Dummy op to set denormal and invalid flag + nop.i 999 +} +{ .mfi +(p10) cmp.ge.unc p10,p11 = floor_GR_exponent, floor_GR_bigexp +(p6) fnorm f8 = f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fcvt.xf FLOOR_FLOAT_INT_f8 = FLOOR_INT_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p10) fnorm f8 = FLOOR_NORM_f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p11) fadd f8 = FLOOR_FLOAT_INT_f8,FLOOR_adj + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fcmp.eq.unc.s1 p12,p13 = FLOOR_FLOAT_INT_f8, FLOOR_NORM_f8 + nop.i 999 ;; +} + +// Set inexact if result not equal to input +{ .mfi + nop.m 999 +(p13) fmpy.s0 FLOOR_INEXACT = FLOOR_FFFF,FLOOR_FFFF + nop.i 999 +} +// Set result to input if integer +{ .mfb + nop.m 999 +(p12) fnorm f8 = FLOOR_NORM_f8 + br.ret.sptk b0 ;; +} + +// Here if input denorm +L(FLOOR_DENORM): +{ .mfb + getf.exp floor_GR_signexp = FLOOR_NORM_f8 + fcvt.fx.trunc.s1 FLOOR_INT_f8 = FLOOR_NORM_f8 + br.cond.sptk L(FLOOR_COMMON) ;; +} + +.endp floorl +ASM_SIZE_DIRECTIVE(floorl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_frexp.c glibc-2.2.3/sysdeps/ia64/fpu/s_frexp.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_frexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_frexp.c Mon Feb 19 00:55:36 2001 @@ -0,0 +1,44 @@ +// +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// + +#include "libm_support.h" + +double frexp(double x, int *y) +{ + +#ifdef SIZE_INT_64 + return( __libm_frexp_8(x, y) ); + +#else + +#ifdef SIZE_INT_32 + return( __libm_frexp_4(x, y) ); +#endif + +#endif + +} diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_frexpf.c glibc-2.2.3/sysdeps/ia64/fpu/s_frexpf.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_frexpf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_frexpf.c Mon Feb 19 00:55:56 2001 @@ -0,0 +1,44 @@ +// +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// + +#include "libm_support.h" + +float frexpf(float x, int *y) +{ + +#ifdef SIZE_INT_64 + return( __libm_frexp_8f(x, y) ); + +#else + +#ifdef SIZE_INT_32 + return( __libm_frexp_4f(x, y) ); +#endif + +#endif + +} diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_frexpl.c glibc-2.2.3/sysdeps/ia64/fpu/s_frexpl.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_frexpl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_frexpl.c Mon Feb 19 00:56:06 2001 @@ -0,0 +1,44 @@ +// +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// + +#include "libm_support.h" + +long double frexpl(long double x, int *y) +{ + +#ifdef SIZE_INT_64 + return( __libm_frexp_8l(x, y) ); + +#else + +#ifdef SIZE_INT_32 + return( __libm_frexp_4l(x, y) ); +#endif + +#endif + +} diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ilogb.S glibc-2.2.3/sysdeps/ia64/fpu/s_ilogb.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ilogb.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ilogb.S Mon Feb 19 00:57:15 2001 @@ -0,0 +1,240 @@ +.file "ilogb.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/03/00 Initial version +// 5/26/00 Fix bug when x a double-extended denormal; +// if x=0 call error routine, per C9X +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 1/20/01 Fixed result for x=0, corrected error tag value. + +.align 32 +.global ilogb# + +.section .text +.proc ilogb# +.align 32 + +// API +//============================================================== +// int = ilogb(double) + +// Overview of operation +//============================================================== +// ilogb computes log2(x) as an int +// and returns it in r8 + +// ilogb is similar to logb but differs in the following ways: +// +-inf +// ilogb: returns INT_MAX +// logb: returns +inf +// Nan returns FP_ILOGBNAN (which is either INT_MAX or INT_MIN) +// ilogb: returns INT_MAX (7fffffff) +// logb: returns QNAN (quieted SNAN) +// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) +// ilogb: returns INT_MIN (80000000) +// logb: returns -inf + +// Registers used +//============================================================== + +// general local registers: +// ar.pfs r32 +// r33 -> r37 +// r38 -> r41 used as parameters to error path + +// predicate registers used: +// p6 - x nan, inf +// p7 - x 0 +// p8 - x norm, unorm +// p9 - x unorm + +// floating-point registers used: +// f8 - f10 + +#include "libm_support.h" + +GR_SAVE_PFS = r32 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +GR_Parameter_TAG = r41 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f0 + + +ilogb: + +// Form signexp of 2^64 in case need to scale denormal +{ .mmf + alloc r32=ar.pfs,1,5,4,0 +(p0) mov r37 = 0x1003f +(p0) fnorm f9 = f8 ;; +} + +// Form 2^64 in case need to scale denormal +{ .mfi +(p0) setf.exp f10 = r37 +(p0) fclass.m.unc p7, p8 = f8, 0xe3 +(p0) mov r34 = 0xffff ;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X ZERO, returns INT_MIN +// X INF or NAN, returns INT_MAX + +{ .mfi +(p0) mov r35 = 0x1ffff +(p8) fclass.m.unc p6, p8 = f8, 0x07 + nop.i 999 ;; +} +{ .mlx + nop.m 999 +(p7) movl r8 = 0x000000007fffffff ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(ILOGB_ZERO) ;; +} + +// Test for denormal +{ .mfi + nop.m 999 +(p8) fclass.m.unc p9, p0 = f9, 0x0b + nop.i 999 ;; +} + +L(ILOGB_COMMON): +// X NORMAL returns true exponent +{ .mmi + nop.m 999 +(p8) getf.exp r33 = f9 + nop.i 999 ;; +} + +// If denormal add 64 to exponent bias for scaling +{ .mfb +(p9) add r34 = 64, r34 + nop.f 999 +(p9) br.cond.spnt L(ILOGB_DENORM) ;; +} + +{ .mmi +(p8) and r36 = r35, r33 + nop.m 999 + nop.i 999 ;; +} + +{ .mib +(p8) sub r8 = r36, r34 + nop.i 999 +(p0) br.ret.sptk b0 ;; +} + +L(ILOGB_DENORM): +// Here if x denormal +// Form x * 2^64 which is normal +// Return to common code +{ .mfb + cmp.eq p8,p9 = r0,r0 + fmpy f9 = f9, f10 + br.cond.sptk L(ILOGB_COMMON) ;; +} + +// X ZERO +// return INT_MIN, call error support +L(ILOGB_ZERO): +{.mlx + mov GR_Parameter_TAG = 157 +(p6) movl r33 = 0x0000000080000000 ;; +};; +.endp ilogb +ASM_SIZE_DIRECTIVE(ilogb) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + mov r8 = r33 // Store result +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ilogbf.S glibc-2.2.3/sysdeps/ia64/fpu/s_ilogbf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ilogbf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ilogbf.S Mon Feb 19 00:57:30 2001 @@ -0,0 +1,240 @@ +.file "ilogbf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/03/00 Initial version +// 5/26/00 Fix bug when x a double-extended denormal; +// if x=0 call error routine, per C9X +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 1/20/01 Fixed result for x=0 + +.align 32 +.global ilogbf# + +.section .text +.proc ilogbf# +.align 32 + +// API +//============================================================== +// int = ilogbf(float) + +// Overview of operation +//============================================================== +// ilogbf computes log2(x) as an int +// and returns it in r8 + +// ilogbf is similar to logbf but differs in the following ways: +// +-inf +// ilogbf: returns INT_MAX +// logbf: returns +inf +// Nan returns FP_ILOGBNAN (which is either INT_MAX or INT_MIN) +// ilogbf: returns INT_MAX (7fffffff) +// logbf: returns QNAN (quieted SNAN) +// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) +// ilogbf: returns INT_MIN (80000000) +// logbf: returns -inf + +// Registers used +//============================================================== + +// general local registers: +// ar.pfs r32 +// r33 -> r37 +// r38 -> r41 used as parameters to error path + +// predicate registers used: +// p6 - x nan, inf +// p7 - x 0 +// p8 - x norm, unorm +// p9 - x unorm + +// floating-point registers used: +// f8 - f10 + +#include "libm_support.h" + +GR_SAVE_PFS = r32 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +GR_Parameter_TAG = r41 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f0 + + +ilogbf: + +// Form signexp of 2^64 in case need to scale denormal +{ .mmf + alloc r32=ar.pfs,1,5,4,0 +(p0) mov r37 = 0x1003f +(p0) fnorm f9 = f8 ;; +} + +// Form 2^64 in case need to scale denormal +{ .mfi +(p0) setf.exp f10 = r37 +(p0) fclass.m.unc p7, p8 = f8, 0xe3 +(p0) mov r34 = 0xffff ;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X ZERO, returns INT_MIN +// X INF or NAN, returns INT_MAX + +{ .mfi +(p0) mov r35 = 0x1ffff +(p8) fclass.m.unc p6, p8 = f8, 0x07 + nop.i 999 ;; +} +{ .mlx + nop.m 999 +(p7) movl r8 = 0x000000007fffffff ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(ILOGB_ZERO) ;; +} + +// Test for denormal +{ .mfi + nop.m 999 +(p8) fclass.m.unc p9, p0 = f9, 0x0b + nop.i 999 ;; +} + +L(ILOGB_COMMON): +// X NORMAL returns true exponent +{ .mmi + nop.m 999 +(p8) getf.exp r33 = f9 + nop.i 999 ;; +} + +// If denormal add 64 to exponent bias for scaling +{ .mfb +(p9) add r34 = 64, r34 + nop.f 999 +(p9) br.cond.spnt L(ILOGB_DENORM) ;; +} + +{ .mmi +(p8) and r36 = r35, r33 + nop.m 999 + nop.i 999 ;; +} + +{ .mib +(p8) sub r8 = r36, r34 + nop.i 999 +(p0) br.ret.sptk b0 ;; +} + +L(ILOGB_DENORM): +// Here if x denormal +// Form x * 2^64 which is normal +// Return to common code +{ .mfb + cmp.eq p8,p9 = r0,r0 + fmpy f9 = f9, f10 + br.cond.sptk L(ILOGB_COMMON) ;; +} + +// X ZERO +// return INT_MIN, call error support +L(ILOGB_ZERO): +{.mlx + mov GR_Parameter_TAG = 158 +(p6) movl r33 = 0x0000000080000000 ;; +};; +.endp ilogbf +ASM_SIZE_DIRECTIVE(ilogbf) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + mov r8 = r33 // Store result +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ilogbl.S glibc-2.2.3/sysdeps/ia64/fpu/s_ilogbl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ilogbl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ilogbl.S Mon Feb 19 00:57:38 2001 @@ -0,0 +1,240 @@ +.file "ilogbl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/03/00 Initial version +// 5/26/00 Fix bug when x a double-extended denormal; +// if x=0 call error routine, per C9X +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// 1/20/01 Fixed result for x=0 + +.align 32 +.global ilogbl# + +.section .text +.proc ilogbl# +.align 32 + +// API +//============================================================== +// int = ilogbl(double_extended) + +// Overview of operation +//============================================================== +// ilogbl computes log2(x) as an int +// and returns it in r8 + +// ilogbl is similar to logbl but differs in the following ways: +// +-inf +// ilogbl: returns INT_MAX +// logbl: returns +inf +// Nan returns FP_ILOGBNAN (which is either INT_MAX or INT_MIN) +// ilogbl: returns INT_MAX (7fffffff) +// logbl: returns QNAN (quieted SNAN) +// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) +// ilogbl: returns INT_MIN (80000000) +// logbl: returns -inf + +// Registers used +//============================================================== + +// general local registers: +// ar.pfs r32 +// r33 -> r37 +// r38 -> r41 used as parameters to error path + +// predicate registers used: +// p6 - x nan, inf +// p7 - x 0 +// p8 - x norm, unorm +// p9 - x unorm + +// floating-point registers used: +// f8 - f10 + +#include "libm_support.h" + +GR_SAVE_PFS = r32 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +GR_Parameter_TAG = r41 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f0 + + +ilogbl: + +// Form signexp of 2^64 in case need to scale denormal +{ .mmf + alloc r32=ar.pfs,1,5,4,0 +(p0) mov r37 = 0x1003f +(p0) fnorm f9 = f8 ;; +} + +// Form 2^64 in case need to scale denormal +{ .mfi +(p0) setf.exp f10 = r37 +(p0) fclass.m.unc p7, p8 = f8, 0xe3 +(p0) mov r34 = 0xffff ;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +// X ZERO, returns INT_MIN +// X INF or NAN, returns INT_MAX + +{ .mfi +(p0) mov r35 = 0x1ffff +(p8) fclass.m.unc p6, p8 = f8, 0x07 + nop.i 999 ;; +} +{ .mlx + nop.m 999 +(p7) movl r8 = 0x000000007fffffff ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p6) br.cond.spnt L(ILOGB_ZERO) ;; +} + +// Test for denormal +{ .mfi + nop.m 999 +(p8) fclass.m.unc p9, p0 = f9, 0x0b + nop.i 999 ;; +} + +L(ILOGB_COMMON): +// X NORMAL returns true exponent +{ .mmi + nop.m 999 +(p8) getf.exp r33 = f9 + nop.i 999 ;; +} + +// If denormal add 64 to exponent bias for scaling +{ .mfb +(p9) add r34 = 64, r34 + nop.f 999 +(p9) br.cond.spnt L(ILOGB_DENORM) ;; +} + +{ .mmi +(p8) and r36 = r35, r33 + nop.m 999 + nop.i 999 ;; +} + +{ .mib +(p8) sub r8 = r36, r34 + nop.i 999 +(p0) br.ret.sptk b0 ;; +} + +L(ILOGB_DENORM): +// Here if x denormal +// Form x * 2^64 which is normal +// Return to common code +{ .mfb + cmp.eq p8,p9 = r0,r0 + fmpy f9 = f9, f10 + br.cond.sptk L(ILOGB_COMMON) ;; +} + +// X ZERO +// return INT_MIN, call error support +L(ILOGB_ZERO): +{.mlx + mov GR_Parameter_TAG = 156 +(p6) movl r33 = 0x0000000080000000 ;; +};; +.endp ilogbl +ASM_SIZE_DIRECTIVE(ilogbl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + mov r8 = r33 // Store result +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ldexp.S glibc-2.2.3/sysdeps/ia64/fpu/s_ldexp.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ldexp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ldexp.S Mon Feb 19 00:57:48 2001 @@ -0,0 +1,367 @@ +.file "ldexp.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 ldex pcompletely reworked and now standalone version +// +// API +//============================================================== +// double = ldexp (double x, int n) +// input floating point f8 and int n (r33) +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Big = f6 +FR_NBig = f7 +FR_Floating_X = f8 +FR_Result = f8 +FR_Result2 = f9 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_Two_N = f14 +FR_Two_to_Big = f15 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global ldexp + +.section .text +.proc ldexp +.align 32 + +ldexp: + +// +// Is x NAN, INF, ZERO, +-? +// Build the exponent Bias +// +{ .mfi + alloc r32=ar.pfs,1,2,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Bias = 0x0FFFF,r0 +} + +// +// Sign extend input +// Is N zero? +// Normalize x +// +{ .mfi + cmp.eq.unc p6,p0 = r33,r0 + fnorm.s1 FR_Norm_X = FR_Floating_X + sxt4 GR_N_as_int = r33 +} +;; + +// +// Normalize x +// Branch and return special values. +// Create -35000 +// Create 35000 +// +{ .mfi + addl GR_Big = 35000,r0 + nop.f 0 + add GR_N_Biased = GR_Bias,GR_N_as_int +} +{ .mfb + addl GR_NBig = -35000,r0 +(p7) fma.d.s0 FR_Result = FR_Floating_X,f1, f0 +(p7) br.ret.spnt b0 +};; + +// +// Build the exponent Bias +// Return x when N = 0 +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.f 0 + addl GR_Scratch1 = 0x063BF,r0 +} +{ .mfb + addl GR_Scratch = 0x019C3F,r0 +(p6) fma.d.s0 FR_Result = FR_Floating_X,f1, f0 +(p6) br.ret.spnt b0 +};; + +// +// Create 2*big +// Create 2**-big +// Is N > 35000 +// Is N < -35000 +// Raise Denormal operand flag with compare +// Main path, create 2**N +// +{ .mfi + setf.exp FR_NBig = GR_Scratch1 + nop.f 0 + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big +} +{ .mfi + setf.exp FR_Big = GR_Scratch + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig +};; + +// +// Adjust 2**N if N was very small or very large +// +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x00000000000303FF +};; + + +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x00000000000103FF +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.d.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.d.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.d.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// +// Check for overflow or underflow. +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 146, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 147, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(LDEXP_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(LDEXP_OVERFLOW) +(p9) br.cond.spnt L(LDEXP_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +.endp ldexp +ASM_SIZE_DIRECTIVE(ldexp) +.proc __libm_error_region +__libm_error_region: + +L(LDEXP_OVERFLOW): +L(LDEXP_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + st8 [GR_Parameter_Y] = GR_N_as_int,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfd [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfd FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ldexpf.S glibc-2.2.3/sysdeps/ia64/fpu/s_ldexpf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ldexpf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ldexpf.S Mon Feb 19 00:57:56 2001 @@ -0,0 +1,366 @@ +//.file "ldexpf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 ldexpf completely reworked and now standalone version +// +// API +//============================================================== +// float = ldexpf (float x, int n) +// input floating point f8 and int n (r33) +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Big = f6 +FR_NBig = f7 +FR_Floating_X = f8 +FR_Result = f8 +FR_Result2 = f9 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_Two_N = f14 +FR_Two_to_Big = f15 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global ldexpf + +.section .text +.proc ldexpf +.align 32 + +ldexpf: + +// +// Is x NAN, INF, ZERO, +-? +// Build the exponent Bias +// +{ .mfi + alloc r32=ar.pfs,1,2,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Bias = 0x0FFFF,r0 +} + +// +// Sign extend input +// Is N zero? +// Normalize x +// +{ .mfi + cmp.eq.unc p6,p0 = r33,r0 + fnorm.s1 FR_Norm_X = FR_Floating_X + sxt4 GR_N_as_int = r33 +} +;; + +// +// Normalize x +// Branch and return special values. +// Create -35000 +// Create 35000 +// +{ .mfi + addl GR_Big = 35000,r0 + nop.f 0 + add GR_N_Biased = GR_Bias,GR_N_as_int +} +{ .mfb + addl GR_NBig = -35000,r0 +(p7) fma.s.s0 FR_Result = FR_Floating_X,f1, f0 +(p7) br.ret.spnt b0 +};; + +// +// Build the exponent Bias +// Return x when N = 0 +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.f 0 + addl GR_Scratch1 = 0x063BF,r0 +} +{ .mfb + addl GR_Scratch = 0x019C3F,r0 +(p6) fma.s.s0 FR_Result = FR_Floating_X,f1, f0 +(p6) br.ret.spnt b0 +};; + +// +// Create 2*big +// Create 2**-big +// Is N > 35000 +// Is N < -35000 +// Raise Denormal operand flag with compare +// Main path, create 2**N +// +{ .mfi + setf.exp FR_NBig = GR_Scratch1 + nop.f 0 + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big +} +{ .mfi + setf.exp FR_Big = GR_Scratch + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig +};; + +// +// Adjust 2**N if N was very small or very large +// +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x000000000003007F +};; + + +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x000000000001007F +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 148, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 149, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(ldexpf_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(ldexpf_OVERFLOW) +(p9) br.cond.spnt L(ldexpf_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +.endp ldexpf +ASM_SIZE_DIRECTIVE(ldexpf) +.proc __libm_error_region +__libm_error_region: + +L(ldexpf_OVERFLOW): +L(ldexpf_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + st8 [GR_Parameter_Y] = GR_N_as_int,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfs [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfs FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_ldexpl.S glibc-2.2.3/sysdeps/ia64/fpu/s_ldexpl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_ldexpl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_ldexpl.S Mon Feb 19 00:58:04 2001 @@ -0,0 +1,366 @@ +//.file "ldexpl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 ldexpl completely reworked and now standalone version +// +// API +//============================================================== +// double-extended = ldexpl (double-extended x, int n) +// input floating point f8 and int n (r34) +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Big = f6 +FR_NBig = f7 +FR_Floating_X = f8 +FR_Result = f8 +FR_Result2 = f9 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_Two_N = f14 +FR_Two_to_Big = f15 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global ldexpl + +.section .text +.proc ldexpl +.align 32 + +ldexpl: + +// +// Is x NAN, INF, ZERO, +-? +// Build the exponent Bias +// +{ .mfi + alloc r32=ar.pfs,2,1,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Bias = 0x0FFFF,r0 +} + +// +// Sign extend input +// Is N zero? +// Normalize x +// +{ .mfi + cmp.eq.unc p6,p0 = r34,r0 + fnorm.s1 FR_Norm_X = FR_Floating_X + sxt4 GR_N_as_int = r34 +} +;; + +// +// Normalize x +// Branch and return special values. +// Create -35000 +// Create 35000 +// +{ .mfi + addl GR_Big = 35000,r0 + nop.f 0 + add GR_N_Biased = GR_Bias,GR_N_as_int +} +{ .mfb + addl GR_NBig = -35000,r0 +(p7) fma.s0 FR_Result = FR_Floating_X,f1, f0 +(p7) br.ret.spnt b0 +};; + +// +// Build the exponent Bias +// Return x when N = 0 +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.f 0 + addl GR_Scratch1 = 0x063BF,r0 +} +{ .mfb + addl GR_Scratch = 0x019C3F,r0 +(p6) fma.s0 FR_Result = FR_Floating_X,f1, f0 +(p6) br.ret.spnt b0 +};; + +// +// Create 2*big +// Create 2**-big +// Is N > 35000 +// Is N < -35000 +// Raise Denormal operand flag with compare +// Main path, create 2**N +// +{ .mfi + setf.exp FR_NBig = GR_Scratch1 + nop.f 0 + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big +} +{ .mfi + setf.exp FR_Big = GR_Scratch + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig +};; + +// +// Adjust 2**N if N was very small or very large +// +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x0000000000033FFF +};; + + +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x0000000000013FFF +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 144, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 145, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(ldexpl_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(ldexpl_OVERFLOW) +(p9) br.cond.spnt L(ldexpl_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +.endp ldexpl +ASM_SIZE_DIRECTIVE(ldexpl) +.proc __libm_error_region +__libm_error_region: + +L(ldexpl_OVERFLOW): +L(ldexpl_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + st8 [GR_Parameter_Y] = GR_N_as_int,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfe [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfe [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfe FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_log1p.S glibc-2.2.3/sysdeps/ia64/fpu/s_log1p.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_log1p.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_log1p.S Mon Feb 19 00:58:16 2001 @@ -0,0 +1,1614 @@ +.file "log1p.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: log1p(x) = ln(x+1), for double precision x values +// +// ********************************************************************* +// +// Accuracy: Very accurate for double precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9,f33-f55,f99 +// +// General Purpose Registers: +// r32-r53 +// r54-r57 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions cannot occur +// Underflow exceptions raised when appropriate for log1p +// (Error Handling Routine called for underflow) +// Inexact raised when appropriate by algorithm +// +// log1p(inf) = inf +// log1p(-inf) = QNaN +// log1p(+/-0) = +/-0 +// log1p(-1) = -inf +// log1p(SNaN) = QNaN +// log1p(QNaN) = QNaN +// log1p(EM_special Values) = QNaN +// +// ********************************************************************* +// +// Computation is based on the following kernel. +// +// ker_log_64( in_FR : X, +// in_FR : E, +// in_FR : Em1, +// in_GR : Expo_Range, +// out_FR : Y_hi, +// out_FR : Y_lo, +// out_FR : Scale, +// out_PR : Safe ) +// +// Overview +// +// The method consists of three cases. +// +// If |X+Em1| < 2^(-80) use case log1p_small; +// elseif |X+Em1| < 2^(-7) use case log_near1; +// else use case log_regular; +// +// Case log1p_small: +// +// log( 1 + (X+Em1) ) can be approximated by (X+Em1). +// +// Case log_near1: +// +// log( 1 + (X+Em1) ) can be approximated by a simple polynomial +// in W = X+Em1. This polynomial resembles the truncated Taylor +// series W - W^/2 + W^3/3 - ... +// +// Case log_regular: +// +// Here we use a table lookup method. The basic idea is that in +// order to compute log(Arg) for an argument Arg in [1,2), we +// construct a value G such that G*Arg is close to 1 and that +// log(1/G) is obtainable easily from a table of values calculated +// beforehand. Thus +// +// log(Arg) = log(1/G) + log(G*Arg) +// = log(1/G) + log(1 + (G*Arg - 1)) +// +// Because |G*Arg - 1| is small, the second term on the right hand +// side can be approximated by a short polynomial. We elaborate +// this method in four steps. +// +// Step 0: Initialization +// +// We need to calculate log( E + X ). Obtain N, S_hi, S_lo such that +// +// E + X = 2^N * ( S_hi + S_lo ) exactly +// +// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense +// that |S_lo| <= ulp(S_hi). +// +// Step 1: Argument Reduction +// +// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate +// +// G := G_1 * G_2 * G_3 +// r := (G * S_hi - 1) + G * S_lo +// +// These G_j's have the property that the product is exactly +// representable and that |r| < 2^(-12) as a result. +// +// Step 2: Approximation +// +// +// log(1 + r) is approximated by a short polynomial poly(r). +// +// Step 3: Reconstruction +// +// +// Finally, log( E + X ) is given by +// +// log( E + X ) = log( 2^N * (S_hi + S_lo) ) +// ~=~ N*log(2) + log(1/G) + log(1 + r) +// ~=~ N*log(2) + log(1/G) + poly(r). +// +// **** Algorithm **** +// +// Case log1p_small: +// +// Although log(1 + (X+Em1)) is basically X+Em1, we would like to +// preserve the inexactness nature as well as consistent behavior +// under different rounding modes. Note that this case can only be +// taken if E is set to be 1.0. In this case, Em1 is zero, and that +// X can be very tiny and thus the final result can possibly underflow. +// Thus, we compare X against a threshold that is dependent on the +// input Expo_Range. If |X| is smaller than this threshold, we set +// SAFE to be FALSE. +// +// The result is returned as Y_hi, Y_lo, and in the case of SAFE +// is FALSE, an additional value Scale is also returned. +// +// W := X + Em1 +// Threshold := Threshold_Table( Expo_Range ) +// Tiny := Tiny_Table( Expo_Range ) +// +// If ( |W| > Threshold ) then +// Y_hi := W +// Y_lo := -W*W +// Else +// Y_hi := W +// Y_lo := -Tiny +// Scale := 2^(-100) +// Safe := FALSE +// EndIf +// +// +// One may think that Y_lo should be -W*W/2; however, it does not matter +// as Y_lo will be rounded off completely except for the correct effect in +// directed rounding. Clearly -W*W is simplier to compute. Moreover, +// because of the difference in exponent value, Y_hi + Y_lo or +// Y_hi + Scale*Y_lo is always inexact. +// +// Case log_near1: +// +// Here we compute a simple polynomial. To exploit parallelism, we split +// the polynomial into two portions. +// +// W := X + Em1 +// Wsq := W * W +// W4 := Wsq*Wsq +// W6 := W4*Wsq +// Y_hi := W + Wsq*(P_1 + W*(P_2 + W*(P_3 + W*P_4)) +// Y_lo := W6*(P_5 + W*(P_6 + W*(P_7 + W*P_8))) +// set lsb(Y_lo) to be 1 +// +// Case log_regular: +// +// We present the algorithm in four steps. +// +// Step 0. Initialization +// ---------------------- +// +// Z := X + E +// N := unbaised exponent of Z +// S_hi := 2^(-N) * Z +// S_lo := 2^(-N) * { (max(X,E)-Z) + min(X,E) } +// +// Note that S_lo is always 0 for the case E = 0. +// +// Step 1. Argument Reduction +// -------------------------- +// +// Let +// +// Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63 +// +// We obtain G_1, G_2, G_3 by the following steps. +// +// +// Define X_0 := 1.d_1 d_2 ... d_14. This is extracted +// from S_hi. +// +// Define A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated +// to lsb = 2^(-4). +// +// Define index_1 := [ d_1 d_2 d_3 d_4 ]. +// +// Fetch Z_1 := (1/A_1) rounded UP in fixed point with +// fixed point lsb = 2^(-15). +// Z_1 looks like z_0.z_1 z_2 ... z_15 +// Note that the fetching is done using index_1. +// A_1 is actually not needed in the implementation +// and is used here only to explain how is the value +// Z_1 defined. +// +// Fetch G_1 := (1/A_1) truncated to 21 sig. bits. +// floating pt. Again, fetching is done using index_1. A_1 +// explains how G_1 is defined. +// +// Calculate X_1 := X_0 * Z_1 truncated to lsb = 2^(-14) +// = 1.0 0 0 0 d_5 ... d_14 +// This is accomplised by integer multiplication. +// It is proved that X_1 indeed always begin +// with 1.0000 in fixed point. +// +// +// Define A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1 +// truncated to lsb = 2^(-8). Similar to A_1, +// A_2 is not needed in actual implementation. It +// helps explain how some of the values are defined. +// +// Define index_2 := [ d_5 d_6 d_7 d_8 ]. +// +// Fetch Z_2 := (1/A_2) rounded UP in fixed point with +// fixed point lsb = 2^(-15). Fetch done using index_2. +// Z_2 looks like z_0.z_1 z_2 ... z_15 +// +// Fetch G_2 := (1/A_2) truncated to 21 sig. bits. +// floating pt. +// +// Calculate X_2 := X_1 * Z_2 truncated to lsb = 2^(-14) +// = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14 +// This is accomplised by integer multiplication. +// It is proved that X_2 indeed always begin +// with 1.00000000 in fixed point. +// +// +// Define A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1. +// This is 2^(-14) + X_2 truncated to lsb = 2^(-13). +// +// Define index_3 := [ d_9 d_10 d_11 d_12 d_13 ]. +// +// Fetch G_3 := (1/A_3) truncated to 21 sig. bits. +// floating pt. Fetch is done using index_3. +// +// Compute G := G_1 * G_2 * G_3. +// +// This is done exactly since each of G_j only has 21 sig. bits. +// +// Compute +// +// r := (G*S_hi - 1) + G*S_lo using 2 FMA operations. +// +// thus, r approximates G*(S_hi+S_lo) - 1 to within a couple of +// rounding errors. +// +// +// Step 2. Approximation +// --------------------- +// +// This step computes an approximation to log( 1 + r ) where r is the +// reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13); +// thus log(1+r) can be approximated by a short polynomial: +// +// log(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5 +// +// +// Step 3. Reconstruction +// ---------------------- +// +// This step computes the desired result of log(X+E): +// +// log(X+E) = log( 2^N * (S_hi + S_lo) ) +// = N*log(2) + log( S_hi + S_lo ) +// = N*log(2) + log(1/G) + +// log(1 + C*(S_hi+S_lo) - 1 ) +// +// log(2), log(1/G_j) are stored as pairs of (single,double) numbers: +// log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are +// single-precision numbers and the low parts are double precision +// numbers. These have the property that +// +// N*log2_hi + SUM ( log1byGj_hi ) +// +// is computable exactly in double-extended precision (64 sig. bits). +// Finally +// +// Y_hi := N*log2_hi + SUM ( log1byGj_hi ) +// Y_lo := poly_hi + [ poly_lo + +// ( SUM ( log1byGj_lo ) + N*log2_lo ) ] +// set lsb(Y_lo) to be 1 +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif + +// P_7, P_6, P_5, P_4, P_3, P_2, and P_1 + +.align 64 +Constants_P: +ASM_TYPE_DIRECTIVE(Constants_P,@object) +data4 0xEFD62B15,0xE3936754,0x00003FFB,0x00000000 +data4 0xA5E56381,0x8003B271,0x0000BFFC,0x00000000 +data4 0x73282DB0,0x9249248C,0x00003FFC,0x00000000 +data4 0x47305052,0xAAAAAA9F,0x0000BFFC,0x00000000 +data4 0xCCD17FC9,0xCCCCCCCC,0x00003FFC,0x00000000 +data4 0x00067ED5,0x80000000,0x0000BFFD,0x00000000 +data4 0xAAAAAAAA,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0xFFFFFFFE,0xFFFFFFFF,0x0000BFFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_P) + +// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1 + +.align 64 +Constants_Q: +ASM_TYPE_DIRECTIVE(Constants_Q,@object) +data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 +data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 +data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 +data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 +data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Q) + +// Z1 - 16 bit fixed, G1 and H1 - IEEE single + +.align 64 +Constants_Z_G_H_h1: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h1,@object) +data4 0x00008000,0x3F800000,0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007879,0x3F70F0F0,0x3D785196,0x00000000,0x617D741C,0x3DA163A6 +data4 0x000071C8,0x3F638E38,0x3DF13843,0x00000000,0xCBD3D5BB,0x3E2C55E6 +data4 0x00006BCB,0x3F579430,0x3E2FF9A0,0x00000000,0xD86EA5E7,0xBE3EB0BF +data4 0x00006667,0x3F4CCCC8,0x3E647FD6,0x00000000,0x86B12760,0x3E2E6A8C +data4 0x00006187,0x3F430C30,0x3E8B3AE7,0x00000000,0x5C0739BA,0x3E47574C +data4 0x00005D18,0x3F3A2E88,0x3EA30C68,0x00000000,0x13E8AF2F,0x3E20E30F +data4 0x0000590C,0x3F321640,0x3EB9CEC8,0x00000000,0xF2C630BD,0xBE42885B +data4 0x00005556,0x3F2AAAA8,0x3ECF9927,0x00000000,0x97E577C6,0x3E497F34 +data4 0x000051EC,0x3F23D708,0x3EE47FC5,0x00000000,0xA6B0A5AB,0x3E3E6A6E +data4 0x00004EC5,0x3F1D89D8,0x3EF8947D,0x00000000,0xD328D9BE,0xBDF43E3C +data4 0x00004BDB,0x3F17B420,0x3F05F3A1,0x00000000,0x0ADB090A,0x3E4094C3 +data4 0x00004925,0x3F124920,0x3F0F4303,0x00000000,0xFC1FE510,0xBE28FBB2 +data4 0x0000469F,0x3F0D3DC8,0x3F183EBF,0x00000000,0x10FDE3FA,0x3E3A7895 +data4 0x00004445,0x3F088888,0x3F20EC80,0x00000000,0x7CC8C98F,0x3E508CE5 +data4 0x00004211,0x3F042108,0x3F29516A,0x00000000,0xA223106C,0xBE534874 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h1) + +// Z2 - 16 bit fixed, G2 and H2 - IEEE single + +.align 64 +Constants_Z_G_H_h2: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h2,@object) +data4 0x00008000,0x3F800000,0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007F81,0x3F7F00F8,0x3B7F875D,0x00000000,0x22C42273,0x3DB5A116 +data4 0x00007F02,0x3F7E03F8,0x3BFF015B,0x00000000,0x21F86ED3,0x3DE620CF +data4 0x00007E85,0x3F7D08E0,0x3C3EE393,0x00000000,0x484F34ED,0xBDAFA07E +data4 0x00007E08,0x3F7C0FC0,0x3C7E0586,0x00000000,0x3860BCF6,0xBDFE07F0 +data4 0x00007D8D,0x3F7B1880,0x3C9E75D2,0x00000000,0xA78093D6,0x3DEA370F +data4 0x00007D12,0x3F7A2328,0x3CBDC97A,0x00000000,0x72A753D0,0x3DFF5791 +data4 0x00007C98,0x3F792FB0,0x3CDCFE47,0x00000000,0xA7EF896B,0x3DFEBE6C +data4 0x00007C20,0x3F783E08,0x3CFC15D0,0x00000000,0x409ECB43,0x3E0CF156 +data4 0x00007BA8,0x3F774E38,0x3D0D874D,0x00000000,0xFFEF71DF,0xBE0B6F97 +data4 0x00007B31,0x3F766038,0x3D1CF49B,0x00000000,0x5D59EEE8,0xBE080483 +data4 0x00007ABB,0x3F757400,0x3D2C531D,0x00000000,0xA9192A74,0x3E1F91E9 +data4 0x00007A45,0x3F748988,0x3D3BA322,0x00000000,0xBF72A8CD,0xBE139A06 +data4 0x000079D1,0x3F73A0D0,0x3D4AE46F,0x00000000,0xF8FBA6CF,0x3E1D9202 +data4 0x0000795D,0x3F72B9D0,0x3D5A1756,0x00000000,0xBA796223,0xBE1DCCC4 +data4 0x000078EB,0x3F71D488,0x3D693B9D,0x00000000,0xB6B7C239,0xBE049391 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h2) + +// G3 and H3 - IEEE single and h3 -IEEE double + +.align 64 +Constants_Z_G_H_h3: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h3,@object) +data4 0x3F7FFC00,0x38800100,0x562224CD,0x3D355595 +data4 0x3F7FF400,0x39400480,0x06136FF6,0x3D8200A2 +data4 0x3F7FEC00,0x39A00640,0xE8DE9AF0,0x3DA4D68D +data4 0x3F7FE400,0x39E00C41,0xB10238DC,0xBD8B4291 +data4 0x3F7FDC00,0x3A100A21,0x3B1952CA,0xBD89CCB8 +data4 0x3F7FD400,0x3A300F22,0x1DC46826,0xBDB10707 +data4 0x3F7FCC08,0x3A4FF51C,0xF43307DB,0x3DB6FCB9 +data4 0x3F7FC408,0x3A6FFC1D,0x62DC7872,0xBD9B7C47 +data4 0x3F7FBC10,0x3A87F20B,0x3F89154A,0xBDC3725E +data4 0x3F7FB410,0x3A97F68B,0x62B9D392,0xBD93519D +data4 0x3F7FAC18,0x3AA7EB86,0x0F21BD9D,0x3DC18441 +data4 0x3F7FA420,0x3AB7E101,0x2245E0A6,0xBDA64B95 +data4 0x3F7F9C20,0x3AC7E701,0xAABB34B8,0x3DB4B0EC +data4 0x3F7F9428,0x3AD7DD7B,0x6DC40A7E,0x3D992337 +data4 0x3F7F8C30,0x3AE7D474,0x4F2083D3,0x3DC6E17B +data4 0x3F7F8438,0x3AF7CBED,0x811D4394,0x3DAE314B +data4 0x3F7F7C40,0x3B03E1F3,0xB08F2DB1,0xBDD46F21 +data4 0x3F7F7448,0x3B0BDE2F,0x6D34522B,0xBDDC30A4 +data4 0x3F7F6C50,0x3B13DAAA,0xB1F473DB,0x3DCB0070 +data4 0x3F7F6458,0x3B1BD766,0x6AD282FD,0xBDD65DDC +data4 0x3F7F5C68,0x3B23CC5C,0xF153761A,0xBDCDAB83 +data4 0x3F7F5470,0x3B2BC997,0x341D0F8F,0xBDDADA40 +data4 0x3F7F4C78,0x3B33C711,0xEBC394E8,0x3DCD1BD7 +data4 0x3F7F4488,0x3B3BBCC6,0x52E3E695,0xBDC3532B +data4 0x3F7F3C90,0x3B43BAC0,0xE846B3DE,0xBDA3961E +data4 0x3F7F34A0,0x3B4BB0F4,0x785778D4,0xBDDADF06 +data4 0x3F7F2CA8,0x3B53AF6D,0xE55CE212,0x3DCC3ED1 +data4 0x3F7F24B8,0x3B5BA620,0x9E382C15,0xBDBA3103 +data4 0x3F7F1CC8,0x3B639D12,0x5C5AF197,0x3D635A0B +data4 0x3F7F14D8,0x3B6B9444,0x71D34EFC,0xBDDCCB19 +data4 0x3F7F0CE0,0x3B7393BC,0x52CD7ADA,0x3DC74502 +data4 0x3F7F04F0,0x3B7B8B6D,0x7D7F2A42,0xBDB68F17 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h3) + +// +// Exponent Thresholds and Tiny Thresholds +// for 8, 11, 15, and 17 bit exponents +// +// Expo_Range Value +// +// 0 (8 bits) 2^(-126) +// 1 (11 bits) 2^(-1022) +// 2 (15 bits) 2^(-16382) +// 3 (17 bits) 2^(-16382) +// +// Tiny_Table +// ---------- +// Expo_Range Value +// +// 0 (8 bits) 2^(-16382) +// 1 (11 bits) 2^(-16382) +// 2 (15 bits) 2^(-16382) +// 3 (17 bits) 2^(-16382) +// + +.align 64 +Constants_Threshold: +ASM_TYPE_DIRECTIVE(Constants_Threshold,@object) +data4 0x00000000,0x80000000,0x00003F81,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00003C01,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Threshold) + +.align 64 +Constants_1_by_LN10: +ASM_TYPE_DIRECTIVE(Constants_1_by_LN10,@object) +data4 0x37287195,0xDE5BD8A9,0x00003FFD,0x00000000 +data4 0xACCF70C8,0xD56EAABE,0x00003FBD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_1_by_LN10) + +FR_Input_X = f8 +FR_Neg_One = f9 +FR_E = f33 +FR_Em1 = f34 +FR_Y_hi = f34 +// Shared with Em1 +FR_Y_lo = f35 +FR_Scale = f36 +FR_X_Prime = f37 +FR_Z = f38 +FR_S_hi = f38 +// Shared with Z +FR_W = f39 +FR_G = f40 +FR_wsq = f40 +// Shared with G +FR_H = f41 +FR_w4 = f41 +// Shared with H +FR_h = f42 +FR_w6 = f42 +// Shared with h +FR_G_tmp = f43 +FR_poly_lo = f43 +// Shared with G_tmp +FR_P8 = f43 +// Shared with G_tmp +FR_H_tmp = f44 +FR_poly_hi = f44 + // Shared with H_tmp +FR_P7 = f44 +// Shared with H_tmp +FR_h_tmp = f45 +FR_rsq = f45 +// Shared with h_tmp +FR_P6 = f45 +// Shared with h_tmp +FR_abs_W = f46 +FR_r = f46 +// Shared with abs_W +FR_AA = f47 +FR_log2_hi = f47 +// Shared with AA +FR_BB = f48 +FR_log2_lo = f48 +// Shared with BB +FR_S_lo = f49 +FR_two_negN = f50 +FR_float_N = f51 +FR_Q4 = f52 +FR_dummy = f52 +// Shared with Q4 +FR_P4 = f52 +// Shared with Q4 +FR_Threshold = f52 +// Shared with Q4 +FR_Q3 = f53 +FR_P3 = f53 +// Shared with Q3 +FR_Tiny = f53 +// Shared with Q3 +FR_Q2 = f54 +FR_P2 = f54 +// Shared with Q2 +FR_1LN10_hi = f54 +// Shared with Q2 +FR_Q1 = f55 +FR_P1 = f55 +// Shared with Q1 +FR_1LN10_lo = f55 +// Shared with Q1 +FR_P5 = f98 +FR_SCALE = f98 +FR_Output_X_tmp = f99 + +GR_Expo_Range = r32 +GR_Table_Base = r34 +GR_Table_Base1 = r35 +GR_Table_ptr = r36 +GR_Index2 = r37 +GR_signif = r38 +GR_X_0 = r39 +GR_X_1 = r40 +GR_X_2 = r41 +GR_Z_1 = r42 +GR_Z_2 = r43 +GR_N = r44 +GR_Bias = r45 +GR_M = r46 +GR_ScaleN = r47 +GR_Index3 = r48 +GR_Perturb = r49 +GR_Table_Scale = r50 + + +GR_SAVE_PFS = r51 +GR_SAVE_B0 = r52 +GR_SAVE_GP = r53 + +GR_Parameter_X = r54 +GR_Parameter_Y = r55 +GR_Parameter_RESULT = r56 + +GR_Parameter_TAG = r57 + + +.section .text +.proc log1p# +.global log1p# +.align 64 +log1p: +#ifdef _LIBC +.global __log1p +__log1p: +#endif + +{ .mfi +alloc r32 = ar.pfs,0,22,4,0 +(p0) fsub.s1 FR_Neg_One = f0,f1 +(p0) cmp.eq.unc p7, p0 = r0, r0 +} + +{ .mfi +(p0) cmp.ne.unc p14, p0 = r0, r0 +(p0) fnorm.s1 FR_X_Prime = FR_Input_X +(p0) cmp.eq.unc p15, p0 = r0, r0 ;; +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = FR_Input_X, 0x1E3 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p10, p0 = FR_Input_X, 0x1FF + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p9, p0 = FR_Input_X, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fadd FR_Em1 = f0,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fadd FR_E = f0,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p8, p0 = FR_Input_X, FR_Neg_One + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p13, p0 = FR_Input_X, FR_Neg_One + nop.i 999 +} + + +L(LOG_BEGIN): + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_Z = FR_X_Prime, FR_E + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl GR_Table_Scale = 0x0000000000000018 ;; +} + +{ .mmi + nop.m 999 +// +// Create E = 1 and Em1 = 0 +// Check for X == 0, meaning log(1+0) +// Check for X < -1, meaning log(negative) +// Check for X == -1, meaning log(0) +// Normalize x +// Identify NatVals, NaNs, Infs. +// Identify EM unsupporteds. +// Identify Negative values - us S1 so as +// not to raise denormal operand exception +// Set p15 to true for log1p +// Set p14 to false for log1p +// Set p7 true for log and log1p +// +(p0) addl GR_Table_Base = @ltoff(Constants_Z_G_H_h1#),gp + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmax.s1 FR_AA = FR_X_Prime, FR_E + nop.i 999 ;; +} + +{ .mfi + ld8 GR_Table_Base = [GR_Table_Base] +(p0) fmin.s1 FR_BB = FR_X_Prime, FR_E + nop.i 999 +} + +{ .mfb + nop.m 999 +(p0) fadd.s1 FR_W = FR_X_Prime, FR_Em1 +// +// Begin load of constants base +// FR_Z = Z = |x| + E +// FR_W = W = |x| + Em1 +// AA = fmax(|x|,E) +// BB = fmin(|x|,E) +// +(p6) br.cond.spnt L(LOG_64_special) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt L(LOG_64_unsupported) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.spnt L(LOG_64_negative) ;; +} + +{ .mib +(p0) getf.sig GR_signif = FR_Z + nop.i 999 +(p9) br.cond.spnt L(LOG_64_one) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(LOG_64_zero) ;; +} + +{ .mfi +(p0) getf.exp GR_N = FR_Z +// +// Raise possible denormal operand exception +// Create Bias +// +// This function computes ln( x + e ) +// Input FR 1: FR_X = FR_Input_X +// Input FR 2: FR_E = FR_E +// Input FR 3: FR_Em1 = FR_Em1 +// Input GR 1: GR_Expo_Range = GR_Expo_Range = 1 +// Output FR 4: FR_Y_hi +// Output FR 5: FR_Y_lo +// Output FR 6: FR_Scale +// Output PR 7: PR_Safe +// +(p0) fsub.s1 FR_S_lo = FR_AA, FR_Z +// +// signif = getf.sig(Z) +// abs_W = fabs(w) +// +(p0) extr.u GR_Table_ptr = GR_signif, 59, 4 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.se FR_S_hi = f1,FR_Z +(p0) extr.u GR_X_0 = GR_signif, 49, 15 +} + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base1 = @ltoff(Constants_Z_G_H_h2#),gp + nop.i 999 +} +;; + +{ .mlx + ld8 GR_Table_Base1 = [GR_Table_Base1] +(p0) movl GR_Bias = 0x000000000000FFFF ;; +} + +{ .mfi + nop.m 999 +(p0) fabs FR_abs_W = FR_W +(p0) pmpyshr2.u GR_Table_ptr = GR_Table_ptr,GR_Table_Scale,0 +} + +{ .mfi + nop.m 999 +// +// Branch out for special input values +// +(p0) fcmp.lt.unc.s0 p8, p0 = FR_Input_X, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// X_0 = extr.u(signif,49,15) +// Index1 = extr.u(signif,59,4) +// +(p0) fadd.s1 FR_S_lo = FR_S_lo, FR_BB + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Offset_to_Z1 = 24 * Index1 +// For performance, don't use result +// for 3 or 4 cycles. +// +(p0) add GR_Table_ptr = GR_Table_ptr, GR_Table_Base ;; +} +// +// Add Base to Offset for Z1 +// Create Bias + +{ .mmi +(p0) ld4 GR_Z_1 = [GR_Table_ptr],4 ;; +(p0) ldfs FR_G = [GR_Table_ptr],4 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfs FR_H = [GR_Table_ptr],8 ;; +(p0) ldfd FR_h = [GR_Table_ptr],0 +(p0) pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 +} +// +// Load Z_1 +// Get Base of Table2 +// + +{ .mfi +(p0) getf.exp GR_M = FR_abs_W + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +// +// M = getf.exp(abs_W) +// S_lo = AA - Z +// X_1 = pmpyshr2(X_0,Z_1,15) +// +(p0) sub GR_M = GR_M, GR_Bias ;; +} +// +// M = M - Bias +// Load G1 +// N = getf.exp(Z) +// + +{ .mii +(p0) cmp.gt.unc p11, p0 = -80, GR_M +(p0) cmp.gt.unc p12, p0 = -7, GR_M ;; +(p0) extr.u GR_Index2 = GR_X_1, 6, 4 ;; +} + +{ .mib + nop.m 999 +// +// if -80 > M, set p11 +// Index2 = extr.u(X_1,6,4) +// if -7 > M, set p12 +// Load H1 +// +(p0) pmpyshr2.u GR_Index2 = GR_Index2,GR_Table_Scale,0 +(p11) br.cond.spnt L(log1p_small) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p12) br.cond.spnt L(log1p_near) ;; +} + +{ .mii +(p0) sub GR_N = GR_N, GR_Bias +// +// poly_lo = r * poly_lo +// +(p0) add GR_Perturb = 0x1, r0 ;; +(p0) sub GR_ScaleN = GR_Bias, GR_N +} + +{ .mii +(p0) setf.sig FR_float_N = GR_N + nop.i 999 ;; +// +// Prepare Index2 - pmpyshr2.u(X_1,Z_2,15) +// Load h1 +// S_lo = S_lo + BB +// Branch for -80 > M +// +(p0) add GR_Index2 = GR_Index2, GR_Table_Base1 +} + +{ .mmi +(p0) setf.exp FR_two_negN = GR_ScaleN + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(Constants_Z_G_H_h3#),gp +};; + +// +// Index2 points to Z2 +// Branch for -7 > M +// + +{ .mmb +(p0) ld4 GR_Z_2 = [GR_Index2],4 + ld8 GR_Table_Base = [GR_Table_Base] + nop.b 999 ;; +} +(p0) nop.i 999 +// +// Load Z_2 +// N = N - Bias +// Tablebase points to Table3 +// + +{ .mmi +(p0) ldfs FR_G_tmp = [GR_Index2],4 ;; +// +// Load G_2 +// pmpyshr2 X_2= (X_1,Z_2,15) +// float_N = setf.sig(N) +// ScaleN = Bias - N +// +(p0) ldfs FR_H_tmp = [GR_Index2],8 + nop.i 999 ;; +} +// +// Load H_2 +// two_negN = setf.exp(scaleN) +// G = G_1 * G_2 +// + +{ .mfi +(p0) ldfd FR_h_tmp = [GR_Index2],0 + nop.f 999 +(p0) pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 ;; +} + +{ .mii + nop.m 999 +(p0) extr.u GR_Index3 = GR_X_2, 1, 5 ;; +// +// Load h_2 +// H = H_1 + H_2 +// h = h_1 + h_2 +// Index3 = extr.u(X_2,1,5) +// +(p0) shladd GR_Index3 = GR_Index3,4,GR_Table_Base +} + +{ .mmi + nop.m 999 + nop.m 999 +// +// float_N = fcvt.xf(float_N) +// load G3 +// +(p0) addl GR_Table_Base = @ltoff(Constants_Q#),gp ;; +} + +{ .mfi +ld8 GR_Table_Base = [GR_Table_Base] +nop.f 999 +nop.i 999 +} ;; + +{ .mfi +(p0) ldfe FR_log2_hi = [GR_Table_Base],16 +(p0) fmpy.s1 FR_S_lo = FR_S_lo, FR_two_negN + nop.i 999 ;; +} + +{ .mmf + nop.m 999 +// +// G = G3 * G +// Load h3 +// Load log2_hi +// H = H + H3 +// +(p0) ldfe FR_log2_lo = [GR_Table_Base],16 +(p0) fmpy.s1 FR_G = FR_G, FR_G_tmp ;; +} + +{ .mmf +(p0) ldfs FR_G_tmp = [GR_Index3],4 +// +// h = h + h3 +// r = G * S_hi + 1 +// Load log2_lo +// +(p0) ldfe FR_Q4 = [GR_Table_Base],16 +(p0) fadd.s1 FR_h = FR_h, FR_h_tmp ;; +} + +{ .mfi +(p0) ldfe FR_Q3 = [GR_Table_Base],16 +(p0) fadd.s1 FR_H = FR_H, FR_H_tmp + nop.i 999 ;; +} + +{ .mmf +(p0) ldfs FR_H_tmp = [GR_Index3],4 +(p0) ldfe FR_Q2 = [GR_Table_Base],16 +// +// Comput Index for Table3 +// S_lo = S_lo * two_negN +// +(p0) fcvt.xf FR_float_N = FR_float_N ;; +} +// +// If S_lo == 0, set p8 false +// Load H3 +// Load ptr to table of polynomial coeff. +// + +{ .mmf +(p0) ldfd FR_h_tmp = [GR_Index3],0 +(p0) ldfe FR_Q1 = [GR_Table_Base],0 +(p0) fcmp.eq.unc.s1 p0, p8 = FR_S_lo, f0 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_G = FR_G, FR_G_tmp + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_H = FR_H, FR_H_tmp + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fms.s1 FR_r = FR_G, FR_S_hi, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_h = FR_h, FR_h_tmp + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Load Q4 +// Load Q3 +// Load Q2 +// Load Q1 +// +(p8) fma.s1 FR_r = FR_G, FR_S_lo, FR_r + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// poly_lo = r * Q4 + Q3 +// rsq = r* r +// +(p0) fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// If (S_lo!=0) r = s_lo * G + r +// +(p0) fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 + nop.i 999 +} +// +// Create a 0x00000....01 +// poly_lo = poly_lo * rsq + h +// + +{ .mfi +(p0) setf.sig FR_dummy = GR_Perturb +(p0) fmpy.s1 FR_rsq = FR_r, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// h = N * log2_lo + h +// Y_hi = n * log2_hi + H +// +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// poly_lo = r * poly_o + Q2 +// poly_hi = Q1 * rsq + r +// +(p0) fmpy.s1 FR_poly_lo = FR_poly_lo, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_rsq, FR_h + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fadd.s1 FR_Y_lo = FR_poly_hi, FR_poly_lo +// +// Create the FR for a binary "or" +// Y_lo = poly_hi + poly_lo +// +// (p0) for FR_dummy = FR_Y_lo,FR_dummy ;; +// +// Turn the lsb of Y_lo ON +// +// (p0) fmerge.se FR_Y_lo = FR_Y_lo,FR_dummy ;; +// +// Merge the new lsb into Y_lo, for alone doesn't +// +(p0) br.cond.sptk L(LOG_main) ;; +} + + +L(log1p_near): + +{ .mmi + nop.m 999 + nop.m 999 +// /*******************************************************/ +// /*********** Branch log1p_near ************************/ +// /*******************************************************/ +(p0) addl GR_Table_Base = @ltoff(Constants_P#),gp ;; +} +// +// Load base address of poly. coeff. +// +{.mmi + nop.m 999 + ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; + +{ .mmb +(p0) add GR_Table_ptr = 0x40,GR_Table_Base +// +// Address tables with separate pointers +// +(p0) ldfe FR_P8 = [GR_Table_Base],16 + nop.b 999 ;; +} + +{ .mmb +(p0) ldfe FR_P4 = [GR_Table_ptr],16 +// +// Load P4 +// Load P8 +// +(p0) ldfe FR_P7 = [GR_Table_Base],16 + nop.b 999 ;; +} + +{ .mmf +(p0) ldfe FR_P3 = [GR_Table_ptr],16 +// +// Load P3 +// Load P7 +// +(p0) ldfe FR_P6 = [GR_Table_Base],16 +(p0) fmpy.s1 FR_wsq = FR_W, FR_W ;; +} + +{ .mfi +(p0) ldfe FR_P2 = [GR_Table_ptr],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_P4, FR_P3 + nop.i 999 +} +// +// Load P2 +// Load P6 +// Wsq = w * w +// Y_hi = p4 * w + p3 +// + +{ .mfi +(p0) ldfe FR_P5 = [GR_Table_Base],16 +(p0) fma.s1 FR_Y_lo = FR_W, FR_P8, FR_P7 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe FR_P1 = [GR_Table_ptr],16 +// +// Load P1 +// Load P5 +// Y_lo = p8 * w + P7 +// +(p0) fmpy.s1 FR_w4 = FR_wsq, FR_wsq + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_Y_hi, FR_P2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_lo = FR_W, FR_Y_lo, FR_P6 +(p0) add GR_Perturb = 0x1, r0 ;; +} + +{ .mfi + nop.m 999 +// +// w4 = w2 * w2 +// Y_hi = y_hi * w + p2 +// Y_lo = y_lo * w + p6 +// Create perturbation bit +// +(p0) fmpy.s1 FR_w6 = FR_w4, FR_wsq + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_Y_hi, FR_P1 + nop.i 999 +} +// +// Y_hi = y_hi * w + p1 +// w6 = w4 * w2 +// + +{ .mfi +(p0) setf.sig FR_Q4 = GR_Perturb +(p0) fma.s1 FR_Y_lo = FR_W, FR_Y_lo, FR_P5 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_wsq,FR_Y_hi, FR_W + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// Y_hi = y_hi * wsq + w +// Y_lo = y_lo * w + p5 +// +(p0) fmpy.s1 FR_Y_lo = FR_w6, FR_Y_lo +// +// Y_lo = y_lo * w6 +// +// (p0) for FR_dummy = FR_Y_lo,FR_dummy ;; +// +// Set lsb on: Taken out to improve performance +// +// (p0) fmerge.se FR_Y_lo = FR_Y_lo,FR_dummy ;; +// +// Make sure it's on in Y_lo also. Taken out to improve +// performance +// +(p0) br.cond.sptk L(LOG_main) ;; +} + + +L(log1p_small): + +{ .mmi + nop.m 999 + nop.m 999 +// /*******************************************************/ +// /*********** Branch log1p_small ***********************/ +// /*******************************************************/ +(p0) addl GR_Table_Base = @ltoff(Constants_Threshold#),gp +} + +{ .mfi + nop.m 999 +(p0) mov FR_Em1 = FR_W +(p0) cmp.eq.unc p7, p0 = r0, r0 ;; +} + +{ .mlx + ld8 GR_Table_Base = [GR_Table_Base] +(p0) movl GR_Expo_Range = 0x0000000000000002 ;; +} +// +// Set Safe to true +// Set Expo_Range = 0 for single +// Set Expo_Range = 2 for double +// Set Expo_Range = 4 for double-extended +// + +{ .mmi +(p0) shladd GR_Table_Base = GR_Expo_Range,4,GR_Table_Base ;; +(p0) ldfe FR_Threshold = [GR_Table_Base],16 + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl GR_Bias = 0x000000000000FF9B ;; +} + +{ .mfi +(p0) ldfe FR_Tiny = [GR_Table_Base],0 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.gt.unc.s1 p13, p12 = FR_abs_W, FR_Threshold + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fnmpy.s1 FR_Y_lo = FR_W, FR_W + nop.i 999 +} + +{ .mfi + nop.m 999 +(p13) fadd FR_SCALE = f0, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fsub.s1 FR_Y_lo = f0, FR_Tiny +(p12) cmp.ne.unc p7, p0 = r0, r0 +} + +{ .mfi +(p12) setf.exp FR_SCALE = GR_Bias + nop.f 999 + nop.i 999 ;; +} + +// +// Set p7 to SAFE = FALSE +// Set Scale = 2^-100 +// +{ .mfb + nop.m 999 +(p0) fma.d.s0 FR_Input_X = FR_Y_lo,FR_SCALE,FR_Y_hi +(p0) br.ret.sptk b0 +} +;; + +L(LOG_64_one): + +{ .mfb + nop.m 999 +(p0) fmpy.d.s0 FR_Input_X = FR_Input_X, f0 +(p0) br.ret.sptk b0 +} +;; + +// +// Raise divide by zero for +/-0 input. +// +L(LOG_64_zero): + +{ .mfi +(p0) mov GR_Parameter_TAG = 140 +// +// If we have log1p(0), return -Inf. +// +(p0) fsub.s0 FR_Output_X_tmp = f0, f1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p0) frcpa.s0 FR_Output_X_tmp, p8 = FR_Output_X_tmp, f0 +(p0) br.cond.sptk L(LOG_ERROR_Support) ;; +} + +L(LOG_64_special): + +{ .mfi + nop.m 999 +// +// Return -Inf or value from handler. +// +(p0) fclass.m.unc p7, p0 = FR_Input_X, 0x1E1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Check for Natval, QNan, SNaN, +Inf +// +(p7) fmpy.d.s0 f8 = FR_Input_X, f1 +// +// For SNaN raise invalid and return QNaN. +// For QNaN raise invalid and return QNaN. +// For +Inf return +Inf. +// +(p7) br.ret.sptk b0 +} +;; + +// +// For -Inf raise invalid and return QNaN. +// + +{ .mfb +(p0) mov GR_Parameter_TAG = 141 +(p0) fmpy.d.s0 FR_Output_X_tmp = FR_Input_X, f0 +(p0) br.cond.sptk L(LOG_ERROR_Support) ;; +} + +// +// Report that log1p(-Inf) computed +// + +L(LOG_64_unsupported): + +// +// Return generated NaN or other value . +// + +{ .mfb + nop.m 999 +(p0) fmpy.d.s0 FR_Input_X = FR_Input_X, f0 +(p0) br.ret.sptk b0 ;; +} + +L(LOG_64_negative): + +{ .mfi + nop.m 999 +// +// Deal with x < 0 in a special way +// +(p0) frcpa.s0 FR_Output_X_tmp, p8 = f0, f0 +// +// Deal with x < 0 in a special way - raise +// invalid and produce QNaN indefinite. +// +(p0) mov GR_Parameter_TAG = 141 +} + +.endp log1p# +ASM_SIZE_DIRECTIVE(log1p) + +.proc __libm_error_region +__libm_error_region: +L(LOG_ERROR_Support): +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] =FR_Input_X // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = FR_Output_X_tmp // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd FR_Input_X = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.proc __libm_LOG_main +__libm_LOG_main: +L(LOG_main): + +// +// kernel_log_64 computes ln(X + E) +// + +{ .mfi + nop.m 999 +(p7) fadd.d.s0 FR_Input_X = FR_Y_lo,FR_Y_hi + nop.i 999 +} + +{ .mmi + nop.m 999 + nop.m 999 +(p14) addl GR_Table_Base = @ltoff(Constants_1_by_LN10#),gp ;; +} + +{ .mmi + nop.m 999 +(p14) ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; + +{ .mmi +(p14) ldfe FR_1LN10_hi = [GR_Table_Base],16 ;; +(p14) ldfe FR_1LN10_lo = [GR_Table_Base] + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) fmpy.s1 FR_Output_X_tmp = FR_Y_lo,FR_1LN10_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) fma.s1 FR_Output_X_tmp = FR_Y_hi,FR_1LN10_lo,FR_Output_X_tmp + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p14) fma.d.s0 FR_Input_X = FR_Y_hi,FR_1LN10_hi,FR_Output_X_tmp +(p0) br.ret.sptk b0 ;; +} +.endp __libm_LOG_main +ASM_SIZE_DIRECTIVE(__libm_LOG_main) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_log1pf.S glibc-2.2.3/sysdeps/ia64/fpu/s_log1pf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_log1pf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_log1pf.S Mon Feb 19 00:58:28 2001 @@ -0,0 +1,1616 @@ +.file "log1pf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// Function: log1pf(x) = ln(x+1), for single precision values +// +// ********************************************************************* +// +// Accuracy: Very accurate for single precision values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9,f33-f55,f99 +// +// General Purpose Registers: +// r32-r53 +// r54-r57 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions cannot occur +// Underflow exceptions raised when appropriate for log1pf +// (Error Handling Routine called for underflow) +// Inexact raised when appropriate by algorithm +// +// log1pf(inf) = inf +// log1pf(-inf) = QNaN +// log1pf(+/-0) = +/-0 +// log1pf(-1) = -inf +// log1pf(SNaN) = QNaN +// log1pf(QNaN) = QNaN +// log1pf(EM_special Values) = QNaN +// +// ********************************************************************* +// +// Computation is based on the following kernel. +// +// ker_log_64( in_FR : X, +// in_FR : E, +// in_FR : Em1, +// in_GR : Expo_Range, +// out_FR : Y_hi, +// out_FR : Y_lo, +// out_FR : Scale, +// out_PR : Safe ) +// +// Overview +// +// The method consists of three cases. +// +// If |X+Em1| < 2^(-80) use case log1pf_small; +// elseif |X+Em1| < 2^(-7) use case log_near1; +// else use case log_regular; +// +// Case log1pf_small: +// +// log( 1 + (X+Em1) ) can be approximated by (X+Em1). +// +// Case log_near1: +// +// log( 1 + (X+Em1) ) can be approximated by a simple polynomial +// in W = X+Em1. This polynomial resembles the truncated Taylor +// series W - W^/2 + W^3/3 - ... +// +// Case log_regular: +// +// Here we use a table lookup method. The basic idea is that in +// order to compute log(Arg) for an argument Arg in [1,2), we +// construct a value G such that G*Arg is close to 1 and that +// log(1/G) is obtainable easily from a table of values calculated +// beforehand. Thus +// +// log(Arg) = log(1/G) + log(G*Arg) +// = log(1/G) + log(1 + (G*Arg - 1)) +// +// Because |G*Arg - 1| is small, the second term on the right hand +// side can be approximated by a short polynomial. We elaborate +// this method in four steps. +// +// Step 0: Initialization +// +// We need to calculate log( E + X ). Obtain N, S_hi, S_lo such that +// +// E + X = 2^N * ( S_hi + S_lo ) exactly +// +// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense +// that |S_lo| <= ulp(S_hi). +// +// Step 1: Argument Reduction +// +// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate +// +// G := G_1 * G_2 * G_3 +// r := (G * S_hi - 1) + G * S_lo +// +// These G_j's have the property that the product is exactly +// representable and that |r| < 2^(-12) as a result. +// +// Step 2: Approximation +// +// +// log(1 + r) is approximated by a short polynomial poly(r). +// +// Step 3: Reconstruction +// +// +// Finally, log( E + X ) is given by +// +// log( E + X ) = log( 2^N * (S_hi + S_lo) ) +// ~=~ N*log(2) + log(1/G) + log(1 + r) +// ~=~ N*log(2) + log(1/G) + poly(r). +// +// **** Algorithm **** +// +// Case log1pf_small: +// +// Although log(1 + (X+Em1)) is basically X+Em1, we would like to +// preserve the inexactness nature as well as consistent behavior +// under different rounding modes. Note that this case can only be +// taken if E is set to be 1.0. In this case, Em1 is zero, and that +// X can be very tiny and thus the final result can possibly underflow. +// Thus, we compare X against a threshold that is dependent on the +// input Expo_Range. If |X| is smaller than this threshold, we set +// SAFE to be FALSE. +// +// The result is returned as Y_hi, Y_lo, and in the case of SAFE +// is FALSE, an additional value Scale is also returned. +// +// W := X + Em1 +// Threshold := Threshold_Table( Expo_Range ) +// Tiny := Tiny_Table( Expo_Range ) +// +// If ( |W| > Threshold ) then +// Y_hi := W +// Y_lo := -W*W +// Else +// Y_hi := W +// Y_lo := -Tiny +// Scale := 2^(-100) +// Safe := FALSE +// EndIf +// +// +// One may think that Y_lo should be -W*W/2; however, it does not matter +// as Y_lo will be rounded off completely except for the correct effect in +// directed rounding. Clearly -W*W is simplier to compute. Moreover, +// because of the difference in exponent value, Y_hi + Y_lo or +// Y_hi + Scale*Y_lo is always inexact. +// +// Case log_near1: +// +// Here we compute a simple polynomial. To exploit parallelism, we split +// the polynomial into two portions. +// +// W := X + Em1 +// Wsq := W * W +// W4 := Wsq*Wsq +// W6 := W4*Wsq +// Y_hi := W + Wsq*(P_1 + W*(P_2 + W*(P_3 + W*P_4)) +// Y_lo := W6*(P_5 + W*(P_6 + W*(P_7 + W*P_8))) +// set lsb(Y_lo) to be 1 +// +// Case log_regular: +// +// We present the algorithm in four steps. +// +// Step 0. Initialization +// ---------------------- +// +// Z := X + E +// N := unbaised exponent of Z +// S_hi := 2^(-N) * Z +// S_lo := 2^(-N) * { (max(X,E)-Z) + min(X,E) } +// +// Note that S_lo is always 0 for the case E = 0. +// +// Step 1. Argument Reduction +// -------------------------- +// +// Let +// +// Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63 +// +// We obtain G_1, G_2, G_3 by the following steps. +// +// +// Define X_0 := 1.d_1 d_2 ... d_14. This is extracted +// from S_hi. +// +// Define A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated +// to lsb = 2^(-4). +// +// Define index_1 := [ d_1 d_2 d_3 d_4 ]. +// +// Fetch Z_1 := (1/A_1) rounded UP in fixed point with +// fixed point lsb = 2^(-15). +// Z_1 looks like z_0.z_1 z_2 ... z_15 +// Note that the fetching is done using index_1. +// A_1 is actually not needed in the implementation +// and is used here only to explain how is the value +// Z_1 defined. +// +// Fetch G_1 := (1/A_1) truncated to 21 sig. bits. +// floating pt. Again, fetching is done using index_1. A_1 +// explains how G_1 is defined. +// +// Calculate X_1 := X_0 * Z_1 truncated to lsb = 2^(-14) +// = 1.0 0 0 0 d_5 ... d_14 +// This is accomplised by integer multiplication. +// It is proved that X_1 indeed always begin +// with 1.0000 in fixed point. +// +// +// Define A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1 +// truncated to lsb = 2^(-8). Similar to A_1, +// A_2 is not needed in actual implementation. It +// helps explain how some of the values are defined. +// +// Define index_2 := [ d_5 d_6 d_7 d_8 ]. +// +// Fetch Z_2 := (1/A_2) rounded UP in fixed point with +// fixed point lsb = 2^(-15). Fetch done using index_2. +// Z_2 looks like z_0.z_1 z_2 ... z_15 +// +// Fetch G_2 := (1/A_2) truncated to 21 sig. bits. +// floating pt. +// +// Calculate X_2 := X_1 * Z_2 truncated to lsb = 2^(-14) +// = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14 +// This is accomplised by integer multiplication. +// It is proved that X_2 indeed always begin +// with 1.00000000 in fixed point. +// +// +// Define A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1. +// This is 2^(-14) + X_2 truncated to lsb = 2^(-13). +// +// Define index_3 := [ d_9 d_10 d_11 d_12 d_13 ]. +// +// Fetch G_3 := (1/A_3) truncated to 21 sig. bits. +// floating pt. Fetch is done using index_3. +// +// Compute G := G_1 * G_2 * G_3. +// +// This is done exactly since each of G_j only has 21 sig. bits. +// +// Compute +// +// r := (G*S_hi - 1) + G*S_lo using 2 FMA operations. +// +// thus, r approximates G*(S_hi+S_lo) - 1 to within a couple of +// rounding errors. +// +// +// Step 2. Approximation +// --------------------- +// +// This step computes an approximation to log( 1 + r ) where r is the +// reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13); +// thus log(1+r) can be approximated by a short polynomial: +// +// log(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5 +// +// +// Step 3. Reconstruction +// ---------------------- +// +// This step computes the desired result of log(X+E): +// +// log(X+E) = log( 2^N * (S_hi + S_lo) ) +// = N*log(2) + log( S_hi + S_lo ) +// = N*log(2) + log(1/G) + +// log(1 + C*(S_hi+S_lo) - 1 ) +// +// log(2), log(1/G_j) are stored as pairs of (single,double) numbers: +// log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are +// single-precision numbers and the low parts are double precision +// numbers. These have the property that +// +// N*log2_hi + SUM ( log1byGj_hi ) +// +// is computable exactly in double-extended precision (64 sig. bits). +// Finally +// +// Y_hi := N*log2_hi + SUM ( log1byGj_hi ) +// Y_lo := poly_hi + [ poly_lo + +// ( SUM ( log1byGj_lo ) + N*log2_lo ) ] +// set lsb(Y_lo) to be 1 +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif + +// P_7, P_6, P_5, P_4, P_3, P_2, and P_1 + +.align 64 +Constants_P: +ASM_TYPE_DIRECTIVE(Constants_P,@object) +data4 0xEFD62B15,0xE3936754,0x00003FFB,0x00000000 +data4 0xA5E56381,0x8003B271,0x0000BFFC,0x00000000 +data4 0x73282DB0,0x9249248C,0x00003FFC,0x00000000 +data4 0x47305052,0xAAAAAA9F,0x0000BFFC,0x00000000 +data4 0xCCD17FC9,0xCCCCCCCC,0x00003FFC,0x00000000 +data4 0x00067ED5,0x80000000,0x0000BFFD,0x00000000 +data4 0xAAAAAAAA,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0xFFFFFFFE,0xFFFFFFFF,0x0000BFFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_P) + +// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1 + +.align 64 +Constants_Q: +ASM_TYPE_DIRECTIVE(Constants_Q,@object) +data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 +data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 +data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 +data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 +data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Q) + +// Z1 - 16 bit fixed, G1 and H1 - IEEE single + +.align 64 +Constants_Z_G_H_h1: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h1,@object) +data4 0x00008000,0x3F800000,0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007879,0x3F70F0F0,0x3D785196,0x00000000,0x617D741C,0x3DA163A6 +data4 0x000071C8,0x3F638E38,0x3DF13843,0x00000000,0xCBD3D5BB,0x3E2C55E6 +data4 0x00006BCB,0x3F579430,0x3E2FF9A0,0x00000000,0xD86EA5E7,0xBE3EB0BF +data4 0x00006667,0x3F4CCCC8,0x3E647FD6,0x00000000,0x86B12760,0x3E2E6A8C +data4 0x00006187,0x3F430C30,0x3E8B3AE7,0x00000000,0x5C0739BA,0x3E47574C +data4 0x00005D18,0x3F3A2E88,0x3EA30C68,0x00000000,0x13E8AF2F,0x3E20E30F +data4 0x0000590C,0x3F321640,0x3EB9CEC8,0x00000000,0xF2C630BD,0xBE42885B +data4 0x00005556,0x3F2AAAA8,0x3ECF9927,0x00000000,0x97E577C6,0x3E497F34 +data4 0x000051EC,0x3F23D708,0x3EE47FC5,0x00000000,0xA6B0A5AB,0x3E3E6A6E +data4 0x00004EC5,0x3F1D89D8,0x3EF8947D,0x00000000,0xD328D9BE,0xBDF43E3C +data4 0x00004BDB,0x3F17B420,0x3F05F3A1,0x00000000,0x0ADB090A,0x3E4094C3 +data4 0x00004925,0x3F124920,0x3F0F4303,0x00000000,0xFC1FE510,0xBE28FBB2 +data4 0x0000469F,0x3F0D3DC8,0x3F183EBF,0x00000000,0x10FDE3FA,0x3E3A7895 +data4 0x00004445,0x3F088888,0x3F20EC80,0x00000000,0x7CC8C98F,0x3E508CE5 +data4 0x00004211,0x3F042108,0x3F29516A,0x00000000,0xA223106C,0xBE534874 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h1) + +// Z2 - 16 bit fixed, G2 and H2 - IEEE single + +.align 64 +Constants_Z_G_H_h2: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h2,@object) +data4 0x00008000,0x3F800000,0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007F81,0x3F7F00F8,0x3B7F875D,0x00000000,0x22C42273,0x3DB5A116 +data4 0x00007F02,0x3F7E03F8,0x3BFF015B,0x00000000,0x21F86ED3,0x3DE620CF +data4 0x00007E85,0x3F7D08E0,0x3C3EE393,0x00000000,0x484F34ED,0xBDAFA07E +data4 0x00007E08,0x3F7C0FC0,0x3C7E0586,0x00000000,0x3860BCF6,0xBDFE07F0 +data4 0x00007D8D,0x3F7B1880,0x3C9E75D2,0x00000000,0xA78093D6,0x3DEA370F +data4 0x00007D12,0x3F7A2328,0x3CBDC97A,0x00000000,0x72A753D0,0x3DFF5791 +data4 0x00007C98,0x3F792FB0,0x3CDCFE47,0x00000000,0xA7EF896B,0x3DFEBE6C +data4 0x00007C20,0x3F783E08,0x3CFC15D0,0x00000000,0x409ECB43,0x3E0CF156 +data4 0x00007BA8,0x3F774E38,0x3D0D874D,0x00000000,0xFFEF71DF,0xBE0B6F97 +data4 0x00007B31,0x3F766038,0x3D1CF49B,0x00000000,0x5D59EEE8,0xBE080483 +data4 0x00007ABB,0x3F757400,0x3D2C531D,0x00000000,0xA9192A74,0x3E1F91E9 +data4 0x00007A45,0x3F748988,0x3D3BA322,0x00000000,0xBF72A8CD,0xBE139A06 +data4 0x000079D1,0x3F73A0D0,0x3D4AE46F,0x00000000,0xF8FBA6CF,0x3E1D9202 +data4 0x0000795D,0x3F72B9D0,0x3D5A1756,0x00000000,0xBA796223,0xBE1DCCC4 +data4 0x000078EB,0x3F71D488,0x3D693B9D,0x00000000,0xB6B7C239,0xBE049391 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h2) + +// G3 and H3 - IEEE single and h3 -IEEE double + +.align 64 +Constants_Z_G_H_h3: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h3,@object) +data4 0x3F7FFC00,0x38800100,0x562224CD,0x3D355595 +data4 0x3F7FF400,0x39400480,0x06136FF6,0x3D8200A2 +data4 0x3F7FEC00,0x39A00640,0xE8DE9AF0,0x3DA4D68D +data4 0x3F7FE400,0x39E00C41,0xB10238DC,0xBD8B4291 +data4 0x3F7FDC00,0x3A100A21,0x3B1952CA,0xBD89CCB8 +data4 0x3F7FD400,0x3A300F22,0x1DC46826,0xBDB10707 +data4 0x3F7FCC08,0x3A4FF51C,0xF43307DB,0x3DB6FCB9 +data4 0x3F7FC408,0x3A6FFC1D,0x62DC7872,0xBD9B7C47 +data4 0x3F7FBC10,0x3A87F20B,0x3F89154A,0xBDC3725E +data4 0x3F7FB410,0x3A97F68B,0x62B9D392,0xBD93519D +data4 0x3F7FAC18,0x3AA7EB86,0x0F21BD9D,0x3DC18441 +data4 0x3F7FA420,0x3AB7E101,0x2245E0A6,0xBDA64B95 +data4 0x3F7F9C20,0x3AC7E701,0xAABB34B8,0x3DB4B0EC +data4 0x3F7F9428,0x3AD7DD7B,0x6DC40A7E,0x3D992337 +data4 0x3F7F8C30,0x3AE7D474,0x4F2083D3,0x3DC6E17B +data4 0x3F7F8438,0x3AF7CBED,0x811D4394,0x3DAE314B +data4 0x3F7F7C40,0x3B03E1F3,0xB08F2DB1,0xBDD46F21 +data4 0x3F7F7448,0x3B0BDE2F,0x6D34522B,0xBDDC30A4 +data4 0x3F7F6C50,0x3B13DAAA,0xB1F473DB,0x3DCB0070 +data4 0x3F7F6458,0x3B1BD766,0x6AD282FD,0xBDD65DDC +data4 0x3F7F5C68,0x3B23CC5C,0xF153761A,0xBDCDAB83 +data4 0x3F7F5470,0x3B2BC997,0x341D0F8F,0xBDDADA40 +data4 0x3F7F4C78,0x3B33C711,0xEBC394E8,0x3DCD1BD7 +data4 0x3F7F4488,0x3B3BBCC6,0x52E3E695,0xBDC3532B +data4 0x3F7F3C90,0x3B43BAC0,0xE846B3DE,0xBDA3961E +data4 0x3F7F34A0,0x3B4BB0F4,0x785778D4,0xBDDADF06 +data4 0x3F7F2CA8,0x3B53AF6D,0xE55CE212,0x3DCC3ED1 +data4 0x3F7F24B8,0x3B5BA620,0x9E382C15,0xBDBA3103 +data4 0x3F7F1CC8,0x3B639D12,0x5C5AF197,0x3D635A0B +data4 0x3F7F14D8,0x3B6B9444,0x71D34EFC,0xBDDCCB19 +data4 0x3F7F0CE0,0x3B7393BC,0x52CD7ADA,0x3DC74502 +data4 0x3F7F04F0,0x3B7B8B6D,0x7D7F2A42,0xBDB68F17 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h3) + +// +// Exponent Thresholds and Tiny Thresholds +// for 8, 11, 15, and 17 bit exponents +// +// Expo_Range Value +// +// 0 (8 bits) 2^(-126) +// 1 (11 bits) 2^(-1022) +// 2 (15 bits) 2^(-16382) +// 3 (17 bits) 2^(-16382) +// +// Tiny_Table +// ---------- +// Expo_Range Value +// +// 0 (8 bits) 2^(-16382) +// 1 (11 bits) 2^(-16382) +// 2 (15 bits) 2^(-16382) +// 3 (17 bits) 2^(-16382) +// + +.align 64 +Constants_Threshold: +ASM_TYPE_DIRECTIVE(Constants_Threshold,@object) +data4 0x00000000,0x80000000,0x00003F81,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00003C01,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Threshold) + +.align 64 +Constants_1_by_LN10: +ASM_TYPE_DIRECTIVE(Constants_1_by_LN10,@object) +data4 0x37287195,0xDE5BD8A9,0x00003FFD,0x00000000 +data4 0xACCF70C8,0xD56EAABE,0x00003FBD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_1_by_LN10) + +FR_Input_X = f8 +FR_Neg_One = f9 +FR_E = f33 +FR_Em1 = f34 +FR_Y_hi = f34 +// Shared with Em1 +FR_Y_lo = f35 +FR_Scale = f36 +FR_X_Prime = f37 +FR_Z = f38 +FR_S_hi = f38 +// Shared with Z +FR_W = f39 +FR_G = f40 +FR_wsq = f40 +// Shared with G +FR_H = f41 +FR_w4 = f41 +// Shared with H +FR_h = f42 +FR_w6 = f42 +// Shared with h +FR_G_tmp = f43 +FR_poly_lo = f43 +// Shared with G_tmp +FR_P8 = f43 +// Shared with G_tmp +FR_H_tmp = f44 +FR_poly_hi = f44 + // Shared with H_tmp +FR_P7 = f44 +// Shared with H_tmp +FR_h_tmp = f45 +FR_rsq = f45 +// Shared with h_tmp +FR_P6 = f45 +// Shared with h_tmp +FR_abs_W = f46 +FR_r = f46 +// Shared with abs_W +FR_AA = f47 +FR_log2_hi = f47 +// Shared with AA +FR_BB = f48 +FR_log2_lo = f48 +// Shared with BB +FR_S_lo = f49 +FR_two_negN = f50 +FR_float_N = f51 +FR_Q4 = f52 +FR_dummy = f52 +// Shared with Q4 +FR_P4 = f52 +// Shared with Q4 +FR_Threshold = f52 +// Shared with Q4 +FR_Q3 = f53 +FR_P3 = f53 +// Shared with Q3 +FR_Tiny = f53 +// Shared with Q3 +FR_Q2 = f54 +FR_P2 = f54 +// Shared with Q2 +FR_1LN10_hi = f54 +// Shared with Q2 +FR_Q1 = f55 +FR_P1 = f55 +// Shared with Q1 +FR_1LN10_lo = f55 +// Shared with Q1 +FR_P5 = f98 +FR_SCALE = f98 +FR_Output_X_tmp = f99 + +GR_Expo_Range = r32 +GR_Table_Base = r34 +GR_Table_Base1 = r35 +GR_Table_ptr = r36 +GR_Index2 = r37 +GR_signif = r38 +GR_X_0 = r39 +GR_X_1 = r40 +GR_X_2 = r41 +GR_Z_1 = r42 +GR_Z_2 = r43 +GR_N = r44 +GR_Bias = r45 +GR_M = r46 +GR_ScaleN = r47 +GR_Index3 = r48 +GR_Perturb = r49 +GR_Table_Scale = r50 + + +GR_SAVE_PFS = r51 +GR_SAVE_B0 = r52 +GR_SAVE_GP = r53 + +GR_Parameter_X = r54 +GR_Parameter_Y = r55 +GR_Parameter_RESULT = r56 + +GR_Parameter_TAG = r57 + + +.section .text +.proc log1pf# +.global log1pf# +.align 64 +log1pf: +#ifdef _LIBC +.global __log1pf +__log1pf: +#endif + +{ .mfi +alloc r32 = ar.pfs,0,22,4,0 +(p0) fsub.s1 FR_Neg_One = f0,f1 +(p0) cmp.eq.unc p7, p0 = r0, r0 +} + +{ .mfi +(p0) cmp.ne.unc p14, p0 = r0, r0 +(p0) fnorm.s1 FR_X_Prime = FR_Input_X +(p0) cmp.eq.unc p15, p0 = r0, r0 ;; +} + +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = FR_Input_X, 0x1E3 + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p10, p0 = FR_Input_X, 0x1FF + nop.i 999 +} +;; + +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p9, p0 = FR_Input_X, f0 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fadd FR_Em1 = f0,f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fadd FR_E = f0,f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p8, p0 = FR_Input_X, FR_Neg_One + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p13, p0 = FR_Input_X, FR_Neg_One + nop.i 999 +} + + +L(LOG_BEGIN): + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_Z = FR_X_Prime, FR_E + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl GR_Table_Scale = 0x0000000000000018 ;; +} + +{ .mmi + nop.m 999 +// +// Create E = 1 and Em1 = 0 +// Check for X == 0, meaning log(1+0) +// Check for X < -1, meaning log(negative) +// Check for X == -1, meaning log(0) +// Normalize x +// Identify NatVals, NaNs, Infs. +// Identify EM unsupporteds. +// Identify Negative values - us S1 so as +// not to raise denormal operand exception +// Set p15 to true for log1pf +// Set p14 to false for log1pf +// Set p7 true for log and log1pf +// +(p0) addl GR_Table_Base = @ltoff(Constants_Z_G_H_h1#),gp + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fmax.s1 FR_AA = FR_X_Prime, FR_E + nop.i 999 ;; +} + +{ .mfi + ld8 GR_Table_Base = [GR_Table_Base] +(p0) fmin.s1 FR_BB = FR_X_Prime, FR_E + nop.i 999 +} + +{ .mfb + nop.m 999 +(p0) fadd.s1 FR_W = FR_X_Prime, FR_Em1 +// +// Begin load of constants base +// FR_Z = Z = |x| + E +// FR_W = W = |x| + Em1 +// AA = fmax(|x|,E) +// BB = fmin(|x|,E) +// +(p6) br.cond.spnt L(LOG_64_special) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt L(LOG_64_unsupported) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.spnt L(LOG_64_negative) ;; +} + +{ .mib +(p0) getf.sig GR_signif = FR_Z + nop.i 999 +(p9) br.cond.spnt L(LOG_64_one) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(LOG_64_zero) ;; +} + +{ .mfi +(p0) getf.exp GR_N = FR_Z +// +// Raise possible denormal operand exception +// Create Bias +// +// This function computes ln( x + e ) +// Input FR 1: FR_X = FR_Input_X +// Input FR 2: FR_E = FR_E +// Input FR 3: FR_Em1 = FR_Em1 +// Input GR 1: GR_Expo_Range = GR_Expo_Range = 1 +// Output FR 4: FR_Y_hi +// Output FR 5: FR_Y_lo +// Output FR 6: FR_Scale +// Output PR 7: PR_Safe +// +(p0) fsub.s1 FR_S_lo = FR_AA, FR_Z +// +// signif = getf.sig(Z) +// abs_W = fabs(w) +// +(p0) extr.u GR_Table_ptr = GR_signif, 59, 4 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.se FR_S_hi = f1,FR_Z +(p0) extr.u GR_X_0 = GR_signif, 49, 15 +} + +{ .mmi + nop.m 999 +(p0) addl GR_Table_Base1 = @ltoff(Constants_Z_G_H_h2#),gp + nop.i 999 +} +;; + +{ .mlx + ld8 GR_Table_Base1 = [GR_Table_Base1] +(p0) movl GR_Bias = 0x000000000000FFFF ;; +} + +{ .mfi + nop.m 999 +(p0) fabs FR_abs_W = FR_W +(p0) pmpyshr2.u GR_Table_ptr = GR_Table_ptr,GR_Table_Scale,0 +} + +{ .mfi + nop.m 999 +// +// Branch out for special input values +// +(p0) fcmp.lt.unc.s0 p8, p0 = FR_Input_X, f0 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// X_0 = extr.u(signif,49,15) +// Index1 = extr.u(signif,59,4) +// +(p0) fadd.s1 FR_S_lo = FR_S_lo, FR_BB + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Offset_to_Z1 = 24 * Index1 +// For performance, don't use result +// for 3 or 4 cycles. +// +(p0) add GR_Table_ptr = GR_Table_ptr, GR_Table_Base ;; +} +// +// Add Base to Offset for Z1 +// Create Bias + +{ .mmi +(p0) ld4 GR_Z_1 = [GR_Table_ptr],4 ;; +(p0) ldfs FR_G = [GR_Table_ptr],4 + nop.i 999 ;; +} + +{ .mmi +(p0) ldfs FR_H = [GR_Table_ptr],8 ;; +(p0) ldfd FR_h = [GR_Table_ptr],0 +(p0) pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 +} +// +// Load Z_1 +// Get Base of Table2 +// + +{ .mfi +(p0) getf.exp GR_M = FR_abs_W + nop.f 999 + nop.i 999 ;; +} + +{ .mii + nop.m 999 + nop.i 999 ;; +// +// M = getf.exp(abs_W) +// S_lo = AA - Z +// X_1 = pmpyshr2(X_0,Z_1,15) +// +(p0) sub GR_M = GR_M, GR_Bias ;; +} +// +// M = M - Bias +// Load G1 +// N = getf.exp(Z) +// + +{ .mii +(p0) cmp.gt.unc p11, p0 = -80, GR_M +(p0) cmp.gt.unc p12, p0 = -7, GR_M ;; +(p0) extr.u GR_Index2 = GR_X_1, 6, 4 ;; +} + +{ .mib + nop.m 999 +// +// if -80 > M, set p11 +// Index2 = extr.u(X_1,6,4) +// if -7 > M, set p12 +// Load H1 +// +(p0) pmpyshr2.u GR_Index2 = GR_Index2,GR_Table_Scale,0 +(p11) br.cond.spnt L(log1pf_small) ;; +} + +{ .mib + nop.m 999 + nop.i 999 +(p12) br.cond.spnt L(log1pf_near) ;; +} + +{ .mii +(p0) sub GR_N = GR_N, GR_Bias +// +// poly_lo = r * poly_lo +// +(p0) add GR_Perturb = 0x1, r0 ;; +(p0) sub GR_ScaleN = GR_Bias, GR_N +} + +{ .mii +(p0) setf.sig FR_float_N = GR_N + nop.i 999 ;; +// +// Prepare Index2 - pmpyshr2.u(X_1,Z_2,15) +// Load h1 +// S_lo = S_lo + BB +// Branch for -80 > M +// +(p0) add GR_Index2 = GR_Index2, GR_Table_Base1 +} + +{ .mmi +(p0) setf.exp FR_two_negN = GR_ScaleN + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(Constants_Z_G_H_h3#),gp +};; + +// +// Index2 points to Z2 +// Branch for -7 > M +// + +{ .mmb +(p0) ld4 GR_Z_2 = [GR_Index2],4 + ld8 GR_Table_Base = [GR_Table_Base] + nop.b 999 ;; +} +(p0) nop.i 999 +// +// Load Z_2 +// N = N - Bias +// Tablebase points to Table3 +// + +{ .mmi +(p0) ldfs FR_G_tmp = [GR_Index2],4 ;; +// +// Load G_2 +// pmpyshr2 X_2= (X_1,Z_2,15) +// float_N = setf.sig(N) +// ScaleN = Bias - N +// +(p0) ldfs FR_H_tmp = [GR_Index2],8 + nop.i 999 ;; +} +// +// Load H_2 +// two_negN = setf.exp(scaleN) +// G = G_1 * G_2 +// + +{ .mfi +(p0) ldfd FR_h_tmp = [GR_Index2],0 + nop.f 999 +(p0) pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 ;; +} + +{ .mii + nop.m 999 +(p0) extr.u GR_Index3 = GR_X_2, 1, 5 ;; +// +// Load h_2 +// H = H_1 + H_2 +// h = h_1 + h_2 +// Index3 = extr.u(X_2,1,5) +// +(p0) shladd GR_Index3 = GR_Index3,4,GR_Table_Base +} + +{ .mmi + nop.m 999 + nop.m 999 +// +// float_N = fcvt.xf(float_N) +// load G3 +// +(p0) addl GR_Table_Base = @ltoff(Constants_Q#),gp ;; +} + +{ .mfi +ld8 GR_Table_Base = [GR_Table_Base] +nop.f 999 +nop.i 999 +} ;; + +{ .mfi +(p0) ldfe FR_log2_hi = [GR_Table_Base],16 +(p0) fmpy.s1 FR_S_lo = FR_S_lo, FR_two_negN + nop.i 999 ;; +} + +{ .mmf + nop.m 999 +// +// G = G3 * G +// Load h3 +// Load log2_hi +// H = H + H3 +// +(p0) ldfe FR_log2_lo = [GR_Table_Base],16 +(p0) fmpy.s1 FR_G = FR_G, FR_G_tmp ;; +} + +{ .mmf +(p0) ldfs FR_G_tmp = [GR_Index3],4 +// +// h = h + h3 +// r = G * S_hi + 1 +// Load log2_lo +// +(p0) ldfe FR_Q4 = [GR_Table_Base],16 +(p0) fadd.s1 FR_h = FR_h, FR_h_tmp ;; +} + +{ .mfi +(p0) ldfe FR_Q3 = [GR_Table_Base],16 +(p0) fadd.s1 FR_H = FR_H, FR_H_tmp + nop.i 999 ;; +} + +{ .mmf +(p0) ldfs FR_H_tmp = [GR_Index3],4 +(p0) ldfe FR_Q2 = [GR_Table_Base],16 +// +// Comput Index for Table3 +// S_lo = S_lo * two_negN +// +(p0) fcvt.xf FR_float_N = FR_float_N ;; +} +// +// If S_lo == 0, set p8 false +// Load H3 +// Load ptr to table of polynomial coeff. +// + +{ .mmf +(p0) ldfd FR_h_tmp = [GR_Index3],0 +(p0) ldfe FR_Q1 = [GR_Table_Base],0 +(p0) fcmp.eq.unc.s1 p0, p8 = FR_S_lo, f0 ;; +} + +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_G = FR_G, FR_G_tmp + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_H = FR_H, FR_H_tmp + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fms.s1 FR_r = FR_G, FR_S_hi, f1 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_h = FR_h, FR_h_tmp + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// Load Q4 +// Load Q3 +// Load Q2 +// Load Q1 +// +(p8) fma.s1 FR_r = FR_G, FR_S_lo, FR_r + nop.i 999 +} + +{ .mfi + nop.m 999 +// +// poly_lo = r * Q4 + Q3 +// rsq = r* r +// +(p0) fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// If (S_lo!=0) r = s_lo * G + r +// +(p0) fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 + nop.i 999 +} +// +// Create a 0x00000....01 +// poly_lo = poly_lo * rsq + h +// + +{ .mfi +(p0) setf.sig FR_dummy = GR_Perturb +(p0) fmpy.s1 FR_rsq = FR_r, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// h = N * log2_lo + h +// Y_hi = n * log2_hi + H +// +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// poly_lo = r * poly_o + Q2 +// poly_hi = Q1 * rsq + r +// +(p0) fmpy.s1 FR_poly_lo = FR_poly_lo, FR_r + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_rsq, FR_h + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fadd.s1 FR_Y_lo = FR_poly_hi, FR_poly_lo +// +// Create the FR for a binary "or" +// Y_lo = poly_hi + poly_lo +// +// (p0) for FR_dummy = FR_Y_lo,FR_dummy ;; +// +// Turn the lsb of Y_lo ON +// +// (p0) fmerge.se FR_Y_lo = FR_Y_lo,FR_dummy ;; +// +// Merge the new lsb into Y_lo, for alone doesn't +// +(p0) br.cond.sptk L(LOG_main) ;; +} + + +L(log1pf_near): + +{ .mmi + nop.m 999 + nop.m 999 +// /*******************************************************/ +// /*********** Branch log1pf_near ************************/ +// /*******************************************************/ +(p0) addl GR_Table_Base = @ltoff(Constants_P#),gp ;; +} +// +// Load base address of poly. coeff. +// +{.mmi + nop.m 999 + ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; + +{ .mmb +(p0) add GR_Table_ptr = 0x40,GR_Table_Base +// +// Address tables with separate pointers +// +(p0) ldfe FR_P8 = [GR_Table_Base],16 + nop.b 999 ;; +} + +{ .mmb +(p0) ldfe FR_P4 = [GR_Table_ptr],16 +// +// Load P4 +// Load P8 +// +(p0) ldfe FR_P7 = [GR_Table_Base],16 + nop.b 999 ;; +} + +{ .mmf +(p0) ldfe FR_P3 = [GR_Table_ptr],16 +// +// Load P3 +// Load P7 +// +(p0) ldfe FR_P6 = [GR_Table_Base],16 +(p0) fmpy.s1 FR_wsq = FR_W, FR_W ;; +} + +{ .mfi +(p0) ldfe FR_P2 = [GR_Table_ptr],16 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_P4, FR_P3 + nop.i 999 +} +// +// Load P2 +// Load P6 +// Wsq = w * w +// Y_hi = p4 * w + p3 +// + +{ .mfi +(p0) ldfe FR_P5 = [GR_Table_Base],16 +(p0) fma.s1 FR_Y_lo = FR_W, FR_P8, FR_P7 + nop.i 999 ;; +} + +{ .mfi +(p0) ldfe FR_P1 = [GR_Table_ptr],16 +// +// Load P1 +// Load P5 +// Y_lo = p8 * w + P7 +// +(p0) fmpy.s1 FR_w4 = FR_wsq, FR_wsq + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_Y_hi, FR_P2 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_lo = FR_W, FR_Y_lo, FR_P6 +(p0) add GR_Perturb = 0x1, r0 ;; +} + +{ .mfi + nop.m 999 +// +// w4 = w2 * w2 +// Y_hi = y_hi * w + p2 +// Y_lo = y_lo * w + p6 +// Create perturbation bit +// +(p0) fmpy.s1 FR_w6 = FR_w4, FR_wsq + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_Y_hi, FR_P1 + nop.i 999 +} +// +// Y_hi = y_hi * w + p1 +// w6 = w4 * w2 +// + +{ .mfi +(p0) setf.sig FR_Q4 = GR_Perturb +(p0) fma.s1 FR_Y_lo = FR_W, FR_Y_lo, FR_P5 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_wsq,FR_Y_hi, FR_W + nop.i 999 +} + +{ .mfb + nop.m 999 +// +// Y_hi = y_hi * wsq + w +// Y_lo = y_lo * w + p5 +// +(p0) fmpy.s1 FR_Y_lo = FR_w6, FR_Y_lo +// +// Y_lo = y_lo * w6 +// +// (p0) for FR_dummy = FR_Y_lo,FR_dummy ;; +// +// Set lsb on: Taken out to improve performance +// +// (p0) fmerge.se FR_Y_lo = FR_Y_lo,FR_dummy ;; +// +// Make sure it's on in Y_lo also. Taken out to improve +// performance +// +(p0) br.cond.sptk L(LOG_main) ;; +} + + +L(log1pf_small): + +{ .mmi + nop.m 999 + nop.m 999 +// /*******************************************************/ +// /*********** Branch log1pf_small ***********************/ +// /*******************************************************/ +(p0) addl GR_Table_Base = @ltoff(Constants_Threshold#),gp +} + +{ .mfi + nop.m 999 +(p0) mov FR_Em1 = FR_W +(p0) cmp.eq.unc p7, p0 = r0, r0 ;; +} + +{ .mlx + ld8 GR_Table_Base = [GR_Table_Base] +(p0) movl GR_Expo_Range = 0x0000000000000002 ;; +} +// +// Set Safe to true +// Set Expo_Range = 0 for single +// Set Expo_Range = 2 for double +// Set Expo_Range = 4 for double-extended +// + +{ .mmi +(p0) shladd GR_Table_Base = GR_Expo_Range,4,GR_Table_Base ;; +(p0) ldfe FR_Threshold = [GR_Table_Base],16 + nop.i 999 +} + +{ .mlx + nop.m 999 +(p0) movl GR_Bias = 0x000000000000FF9B ;; +} + +{ .mfi +(p0) ldfe FR_Tiny = [GR_Table_Base],0 + nop.f 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcmp.gt.unc.s1 p13, p12 = FR_abs_W, FR_Threshold + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p13) fnmpy.s1 FR_Y_lo = FR_W, FR_W + nop.i 999 +} + +{ .mfi + nop.m 999 +(p13) fadd FR_SCALE = f0, f1 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p12) fsub.s1 FR_Y_lo = f0, FR_Tiny +(p12) cmp.ne.unc p7, p0 = r0, r0 +} + +{ .mfi +(p12) setf.exp FR_SCALE = GR_Bias + nop.f 999 + nop.i 999 ;; +} + +// +// Set p7 to SAFE = FALSE +// Set Scale = 2^-100 +// +{ .mfb + nop.m 999 +(p0) fma.s.s0 FR_Input_X = FR_Y_lo,FR_SCALE,FR_Y_hi +(p0) br.ret.sptk b0 +} +;; + +L(LOG_64_one): + +{ .mfb + nop.m 999 +(p0) fmpy.s.s0 FR_Input_X = FR_Input_X, f0 +(p0) br.ret.sptk b0 +} +;; +// +// Raise divide by zero for +/-0 input. +// + +L(LOG_64_zero): + +{ .mfi +(p0) mov GR_Parameter_TAG = 142 +// +// If we have log1pf(0), return -Inf. +// +(p0) fsub.s0 FR_Output_X_tmp = f0, f1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p0) frcpa.s0 FR_Output_X_tmp, p8 = FR_Output_X_tmp, f0 +(p0) br.cond.sptk L(LOG_ERROR_Support) ;; +} + +L(LOG_64_special): + +{ .mfi + nop.m 999 +// +// Return -Inf or value from handler. +// +(p0) fclass.m.unc p7, p0 = FR_Input_X, 0x1E1 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +// +// Check for Natval, QNan, SNaN, +Inf +// +(p7) fmpy.s.s0 f8 = FR_Input_X, f1 +// +// For SNaN raise invalid and return QNaN. +// For QNaN raise invalid and return QNaN. +// For +Inf return +Inf. +// +(p7) br.ret.sptk b0 +} +;; + +// +// For -Inf raise invalid and return QNaN. +// + +{ .mfb +(p0) mov GR_Parameter_TAG = 143 +(p0) fmpy.s.s0 FR_Output_X_tmp = FR_Input_X, f0 +(p0) br.cond.sptk L(LOG_ERROR_Support) ;; +} + +// +// Report that log1pf(-Inf) computed +// + +L(LOG_64_unsupported): + +// +// Return generated NaN or other value . +// + +{ .mfb + nop.m 999 +(p0) fmpy.s.s0 FR_Input_X = FR_Input_X, f0 +(p0) br.ret.sptk b0 ;; +} + +L(LOG_64_negative): + +{ .mfi + nop.m 999 +// +// Deal with x < 0 in a special way +// +(p0) frcpa.s0 FR_Output_X_tmp, p8 = f0, f0 +// +// Deal with x < 0 in a special way - raise +// invalid and produce QNaN indefinite. +// +(p0) mov GR_Parameter_TAG = 143;; +} + +.endp log1pf# +ASM_SIZE_DIRECTIVE(log1pf) + +.proc __libm_error_region +__libm_error_region: +L(LOG_ERROR_Support): +.prologue + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfs [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfs [GR_Parameter_X] =FR_Input_X // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = FR_Output_X_tmp // STORE Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfs FR_Input_X = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.proc __libm_LOG_main +__libm_LOG_main: +L(LOG_main): + +// +// kernel_log_64 computes ln(X + E) +// + +{ .mfi + nop.m 999 +(p7) fadd.s.s0 FR_Input_X = FR_Y_lo,FR_Y_hi + nop.i 999 +} + +{ .mmi + nop.m 999 + nop.m 999 +(p14) addl GR_Table_Base = @ltoff(Constants_1_by_LN10#),gp ;; +} + +{ .mmi + nop.m 999 +(p14) ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; + +{ .mmi +(p14) ldfe FR_1LN10_hi = [GR_Table_Base],16 ;; +(p14) ldfe FR_1LN10_lo = [GR_Table_Base] + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) fmpy.s1 FR_Output_X_tmp = FR_Y_lo,FR_1LN10_hi + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p14) fma.s1 FR_Output_X_tmp = FR_Y_hi,FR_1LN10_lo,FR_Output_X_tmp + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p14) fma.s.s0 FR_Input_X = FR_Y_hi,FR_1LN10_hi,FR_Output_X_tmp +(p0) br.ret.sptk b0 ;; +} +.endp __libm_LOG_main +ASM_SIZE_DIRECTIVE(__libm_LOG_main) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_log1pl.S glibc-2.2.3/sysdeps/ia64/fpu/s_log1pl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_log1pl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_log1pl.S Mon Feb 19 00:58:39 2001 @@ -0,0 +1,1663 @@ +.file "log1pl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// 2/02/00 hand-optimized +// 4/04/00 Unwind support added +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// ********************************************************************* +// +// ********************************************************************* +// +// Function: Combined logl(x), log1pl(x), and log10l(x) where +// logl(x) = ln(x), for double-extended precision x values +// log1pl(x) = ln(x+1), for double-extended precision x values +// log10l(x) = log (x), for double-extended precision x values +// 10 +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9,f33-f55,f99 +// +// General Purpose Registers: +// r32-r53 +// r54-r57 (Used to pass arguments to error handling routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions cannot occur +// Underflow exceptions raised when appropriate for log1p +// (Error Handling Routine called for underflow) +// Inexact raised when appropriate by algorithm +// +// logl(inf) = inf +// logl(-inf) = QNaN +// logl(+/-0) = -inf +// logl(SNaN) = QNaN +// logl(QNaN) = QNaN +// logl(EM_special Values) = QNaN +// log1pl(inf) = inf +// log1pl(-inf) = QNaN +// log1pl(+/-0) = +/-0 +// log1pl(-1) = -inf +// log1pl(SNaN) = QNaN +// log1pl(QNaN) = QNaN +// log1pl(EM_special Values) = QNaN +// log10l(inf) = inf +// log10l(-inf) = QNaN +// log10l(+/-0) = -inf +// log10l(SNaN) = QNaN +// log10l(QNaN) = QNaN +// log10l(EM_special Values) = QNaN +// +// ********************************************************************* +// +// Computation is based on the following kernel. +// +// ker_log_64( in_FR : X, +// in_FR : E, +// in_FR : Em1, +// in_GR : Expo_Range, +// out_FR : Y_hi, +// out_FR : Y_lo, +// out_FR : Scale, +// out_PR : Safe ) +// +// Overview +// +// The method consists of three cases. +// +// If |X+Em1| < 2^(-80) use case log1pl_small; +// elseif |X+Em1| < 2^(-7) use case log_near1; +// else use case log_regular; +// +// Case log1pl_small: +// +// logl( 1 + (X+Em1) ) can be approximated by (X+Em1). +// +// Case log_near1: +// +// logl( 1 + (X+Em1) ) can be approximated by a simple polynomial +// in W = X+Em1. This polynomial resembles the truncated Taylor +// series W - W^/2 + W^3/3 - ... +// +// Case log_regular: +// +// Here we use a table lookup method. The basic idea is that in +// order to compute logl(Arg) for an argument Arg in [1,2), we +// construct a value G such that G*Arg is close to 1 and that +// logl(1/G) is obtainable easily from a table of values calculated +// beforehand. Thus +// +// logl(Arg) = logl(1/G) + logl(G*Arg) +// = logl(1/G) + logl(1 + (G*Arg - 1)) +// +// Because |G*Arg - 1| is small, the second term on the right hand +// side can be approximated by a short polynomial. We elaborate +// this method in four steps. +// +// Step 0: Initialization +// +// We need to calculate logl( E + X ). Obtain N, S_hi, S_lo such that +// +// E + X = 2^N * ( S_hi + S_lo ) exactly +// +// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense +// that |S_lo| <= ulp(S_hi). +// +// Step 1: Argument Reduction +// +// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate +// +// G := G_1 * G_2 * G_3 +// r := (G * S_hi - 1) + G * S_lo +// +// These G_j's have the property that the product is exactly +// representable and that |r| < 2^(-12) as a result. +// +// Step 2: Approximation +// +// +// logl(1 + r) is approximated by a short polynomial poly(r). +// +// Step 3: Reconstruction +// +// +// Finally, logl( E + X ) is given by +// +// logl( E + X ) = logl( 2^N * (S_hi + S_lo) ) +// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) +// ~=~ N*logl(2) + logl(1/G) + poly(r). +// +// **** Algorithm **** +// +// Case log1pl_small: +// +// Although logl(1 + (X+Em1)) is basically X+Em1, we would like to +// preserve the inexactness nature as well as consistent behavior +// under different rounding modes. Note that this case can only be +// taken if E is set to be 1.0. In this case, Em1 is zero, and that +// X can be very tiny and thus the final result can possibly underflow. +// Thus, we compare X against a threshold that is dependent on the +// input Expo_Range. If |X| is smaller than this threshold, we set +// SAFE to be FALSE. +// +// The result is returned as Y_hi, Y_lo, and in the case of SAFE +// is FALSE, an additional value Scale is also returned. +// +// W := X + Em1 +// Threshold := Threshold_Table( Expo_Range ) +// Tiny := Tiny_Table( Expo_Range ) +// +// If ( |W| > Threshold ) then +// Y_hi := W +// Y_lo := -W*W +// Else +// Y_hi := W +// Y_lo := -Tiny +// Scale := 2^(-100) +// Safe := FALSE +// EndIf +// +// +// One may think that Y_lo should be -W*W/2; however, it does not matter +// as Y_lo will be rounded off completely except for the correct effect in +// directed rounding. Clearly -W*W is simplier to compute. Moreover, +// because of the difference in exponent value, Y_hi + Y_lo or +// Y_hi + Scale*Y_lo is always inexact. +// +// Case log_near1: +// +// Here we compute a simple polynomial. To exploit parallelism, we split +// the polynomial into two portions. +// +// W := X + Em1 +// Wsq := W * W +// W4 := Wsq*Wsq +// W6 := W4*Wsq +// Y_hi := W + Wsq*(P_1 + W*(P_2 + W*(P_3 + W*P_4)) +// Y_lo := W6*(P_5 + W*(P_6 + W*(P_7 + W*P_8))) +// set lsb(Y_lo) to be 1 +// +// Case log_regular: +// +// We present the algorithm in four steps. +// +// Step 0. Initialization +// ---------------------- +// +// Z := X + E +// N := unbaised exponent of Z +// S_hi := 2^(-N) * Z +// S_lo := 2^(-N) * { (max(X,E)-Z) + min(X,E) } +// +// Note that S_lo is always 0 for the case E = 0. +// +// Step 1. Argument Reduction +// -------------------------- +// +// Let +// +// Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63 +// +// We obtain G_1, G_2, G_3 by the following steps. +// +// +// Define X_0 := 1.d_1 d_2 ... d_14. This is extracted +// from S_hi. +// +// Define A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated +// to lsb = 2^(-4). +// +// Define index_1 := [ d_1 d_2 d_3 d_4 ]. +// +// Fetch Z_1 := (1/A_1) rounded UP in fixed point with +// fixed point lsb = 2^(-15). +// Z_1 looks like z_0.z_1 z_2 ... z_15 +// Note that the fetching is done using index_1. +// A_1 is actually not needed in the implementation +// and is used here only to explain how is the value +// Z_1 defined. +// +// Fetch G_1 := (1/A_1) truncated to 21 sig. bits. +// floating pt. Again, fetching is done using index_1. A_1 +// explains how G_1 is defined. +// +// Calculate X_1 := X_0 * Z_1 truncated to lsb = 2^(-14) +// = 1.0 0 0 0 d_5 ... d_14 +// This is accomplised by integer multiplication. +// It is proved that X_1 indeed always begin +// with 1.0000 in fixed point. +// +// +// Define A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1 +// truncated to lsb = 2^(-8). Similar to A_1, +// A_2 is not needed in actual implementation. It +// helps explain how some of the values are defined. +// +// Define index_2 := [ d_5 d_6 d_7 d_8 ]. +// +// Fetch Z_2 := (1/A_2) rounded UP in fixed point with +// fixed point lsb = 2^(-15). Fetch done using index_2. +// Z_2 looks like z_0.z_1 z_2 ... z_15 +// +// Fetch G_2 := (1/A_2) truncated to 21 sig. bits. +// floating pt. +// +// Calculate X_2 := X_1 * Z_2 truncated to lsb = 2^(-14) +// = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14 +// This is accomplised by integer multiplication. +// It is proved that X_2 indeed always begin +// with 1.00000000 in fixed point. +// +// +// Define A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1. +// This is 2^(-14) + X_2 truncated to lsb = 2^(-13). +// +// Define index_3 := [ d_9 d_10 d_11 d_12 d_13 ]. +// +// Fetch G_3 := (1/A_3) truncated to 21 sig. bits. +// floating pt. Fetch is done using index_3. +// +// Compute G := G_1 * G_2 * G_3. +// +// This is done exactly since each of G_j only has 21 sig. bits. +// +// Compute +// +// r := (G*S_hi - 1) + G*S_lo using 2 FMA operations. +// +// thus, r approximates G*(S_hi+S_lo) - 1 to within a couple of +// rounding errors. +// +// +// Step 2. Approximation +// --------------------- +// +// This step computes an approximation to logl( 1 + r ) where r is the +// reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13); +// thus logl(1+r) can be approximated by a short polynomial: +// +// logl(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5 +// +// +// Step 3. Reconstruction +// ---------------------- +// +// This step computes the desired result of logl(X+E): +// +// logl(X+E) = logl( 2^N * (S_hi + S_lo) ) +// = N*logl(2) + logl( S_hi + S_lo ) +// = N*logl(2) + logl(1/G) + +// logl(1 + C*(S_hi+S_lo) - 1 ) +// +// logl(2), logl(1/G_j) are stored as pairs of (single,double) numbers: +// log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are +// single-precision numbers and the low parts are double precision +// numbers. These have the property that +// +// N*log2_hi + SUM ( log1byGj_hi ) +// +// is computable exactly in double-extended precision (64 sig. bits). +// Finally +// +// Y_hi := N*log2_hi + SUM ( log1byGj_hi ) +// Y_lo := poly_hi + [ poly_lo + +// ( SUM ( log1byGj_lo ) + N*log2_lo ) ] +// set lsb(Y_lo) to be 1 +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif + +// P_7, P_6, P_5, P_4, P_3, P_2, and P_1 + +.align 64 +Constants_P: +ASM_TYPE_DIRECTIVE(Constants_P,@object) +data4 0xEFD62B15,0xE3936754,0x00003FFB,0x00000000 +data4 0xA5E56381,0x8003B271,0x0000BFFC,0x00000000 +data4 0x73282DB0,0x9249248C,0x00003FFC,0x00000000 +data4 0x47305052,0xAAAAAA9F,0x0000BFFC,0x00000000 +data4 0xCCD17FC9,0xCCCCCCCC,0x00003FFC,0x00000000 +data4 0x00067ED5,0x80000000,0x0000BFFD,0x00000000 +data4 0xAAAAAAAA,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0xFFFFFFFE,0xFFFFFFFF,0x0000BFFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_P) + +// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1 + +.align 64 +Constants_Q: +ASM_TYPE_DIRECTIVE(Constants_Q,@object) +data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 +data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 +data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 +data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 +data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 +data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Q) + +// Z1 - 16 bit fixed, G1 and H1 - IEEE single + +.align 64 +Constants_Z_G_H_h1: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h1,@object) +data4 0x00008000,0x3F800000,0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007879,0x3F70F0F0,0x3D785196,0x00000000,0x617D741C,0x3DA163A6 +data4 0x000071C8,0x3F638E38,0x3DF13843,0x00000000,0xCBD3D5BB,0x3E2C55E6 +data4 0x00006BCB,0x3F579430,0x3E2FF9A0,0x00000000,0xD86EA5E7,0xBE3EB0BF +data4 0x00006667,0x3F4CCCC8,0x3E647FD6,0x00000000,0x86B12760,0x3E2E6A8C +data4 0x00006187,0x3F430C30,0x3E8B3AE7,0x00000000,0x5C0739BA,0x3E47574C +data4 0x00005D18,0x3F3A2E88,0x3EA30C68,0x00000000,0x13E8AF2F,0x3E20E30F +data4 0x0000590C,0x3F321640,0x3EB9CEC8,0x00000000,0xF2C630BD,0xBE42885B +data4 0x00005556,0x3F2AAAA8,0x3ECF9927,0x00000000,0x97E577C6,0x3E497F34 +data4 0x000051EC,0x3F23D708,0x3EE47FC5,0x00000000,0xA6B0A5AB,0x3E3E6A6E +data4 0x00004EC5,0x3F1D89D8,0x3EF8947D,0x00000000,0xD328D9BE,0xBDF43E3C +data4 0x00004BDB,0x3F17B420,0x3F05F3A1,0x00000000,0x0ADB090A,0x3E4094C3 +data4 0x00004925,0x3F124920,0x3F0F4303,0x00000000,0xFC1FE510,0xBE28FBB2 +data4 0x0000469F,0x3F0D3DC8,0x3F183EBF,0x00000000,0x10FDE3FA,0x3E3A7895 +data4 0x00004445,0x3F088888,0x3F20EC80,0x00000000,0x7CC8C98F,0x3E508CE5 +data4 0x00004211,0x3F042108,0x3F29516A,0x00000000,0xA223106C,0xBE534874 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h1) + +// Z2 - 16 bit fixed, G2 and H2 - IEEE single + +.align 64 +Constants_Z_G_H_h2: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h2,@object) +data4 0x00008000,0x3F800000,0x00000000,0x00000000,0x00000000,0x00000000 +data4 0x00007F81,0x3F7F00F8,0x3B7F875D,0x00000000,0x22C42273,0x3DB5A116 +data4 0x00007F02,0x3F7E03F8,0x3BFF015B,0x00000000,0x21F86ED3,0x3DE620CF +data4 0x00007E85,0x3F7D08E0,0x3C3EE393,0x00000000,0x484F34ED,0xBDAFA07E +data4 0x00007E08,0x3F7C0FC0,0x3C7E0586,0x00000000,0x3860BCF6,0xBDFE07F0 +data4 0x00007D8D,0x3F7B1880,0x3C9E75D2,0x00000000,0xA78093D6,0x3DEA370F +data4 0x00007D12,0x3F7A2328,0x3CBDC97A,0x00000000,0x72A753D0,0x3DFF5791 +data4 0x00007C98,0x3F792FB0,0x3CDCFE47,0x00000000,0xA7EF896B,0x3DFEBE6C +data4 0x00007C20,0x3F783E08,0x3CFC15D0,0x00000000,0x409ECB43,0x3E0CF156 +data4 0x00007BA8,0x3F774E38,0x3D0D874D,0x00000000,0xFFEF71DF,0xBE0B6F97 +data4 0x00007B31,0x3F766038,0x3D1CF49B,0x00000000,0x5D59EEE8,0xBE080483 +data4 0x00007ABB,0x3F757400,0x3D2C531D,0x00000000,0xA9192A74,0x3E1F91E9 +data4 0x00007A45,0x3F748988,0x3D3BA322,0x00000000,0xBF72A8CD,0xBE139A06 +data4 0x000079D1,0x3F73A0D0,0x3D4AE46F,0x00000000,0xF8FBA6CF,0x3E1D9202 +data4 0x0000795D,0x3F72B9D0,0x3D5A1756,0x00000000,0xBA796223,0xBE1DCCC4 +data4 0x000078EB,0x3F71D488,0x3D693B9D,0x00000000,0xB6B7C239,0xBE049391 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h2) + +// G3 and H3 - IEEE single and h3 -IEEE double + +.align 64 +Constants_Z_G_H_h3: +ASM_TYPE_DIRECTIVE(Constants_Z_G_H_h3,@object) +data4 0x3F7FFC00,0x38800100,0x562224CD,0x3D355595 +data4 0x3F7FF400,0x39400480,0x06136FF6,0x3D8200A2 +data4 0x3F7FEC00,0x39A00640,0xE8DE9AF0,0x3DA4D68D +data4 0x3F7FE400,0x39E00C41,0xB10238DC,0xBD8B4291 +data4 0x3F7FDC00,0x3A100A21,0x3B1952CA,0xBD89CCB8 +data4 0x3F7FD400,0x3A300F22,0x1DC46826,0xBDB10707 +data4 0x3F7FCC08,0x3A4FF51C,0xF43307DB,0x3DB6FCB9 +data4 0x3F7FC408,0x3A6FFC1D,0x62DC7872,0xBD9B7C47 +data4 0x3F7FBC10,0x3A87F20B,0x3F89154A,0xBDC3725E +data4 0x3F7FB410,0x3A97F68B,0x62B9D392,0xBD93519D +data4 0x3F7FAC18,0x3AA7EB86,0x0F21BD9D,0x3DC18441 +data4 0x3F7FA420,0x3AB7E101,0x2245E0A6,0xBDA64B95 +data4 0x3F7F9C20,0x3AC7E701,0xAABB34B8,0x3DB4B0EC +data4 0x3F7F9428,0x3AD7DD7B,0x6DC40A7E,0x3D992337 +data4 0x3F7F8C30,0x3AE7D474,0x4F2083D3,0x3DC6E17B +data4 0x3F7F8438,0x3AF7CBED,0x811D4394,0x3DAE314B +data4 0x3F7F7C40,0x3B03E1F3,0xB08F2DB1,0xBDD46F21 +data4 0x3F7F7448,0x3B0BDE2F,0x6D34522B,0xBDDC30A4 +data4 0x3F7F6C50,0x3B13DAAA,0xB1F473DB,0x3DCB0070 +data4 0x3F7F6458,0x3B1BD766,0x6AD282FD,0xBDD65DDC +data4 0x3F7F5C68,0x3B23CC5C,0xF153761A,0xBDCDAB83 +data4 0x3F7F5470,0x3B2BC997,0x341D0F8F,0xBDDADA40 +data4 0x3F7F4C78,0x3B33C711,0xEBC394E8,0x3DCD1BD7 +data4 0x3F7F4488,0x3B3BBCC6,0x52E3E695,0xBDC3532B +data4 0x3F7F3C90,0x3B43BAC0,0xE846B3DE,0xBDA3961E +data4 0x3F7F34A0,0x3B4BB0F4,0x785778D4,0xBDDADF06 +data4 0x3F7F2CA8,0x3B53AF6D,0xE55CE212,0x3DCC3ED1 +data4 0x3F7F24B8,0x3B5BA620,0x9E382C15,0xBDBA3103 +data4 0x3F7F1CC8,0x3B639D12,0x5C5AF197,0x3D635A0B +data4 0x3F7F14D8,0x3B6B9444,0x71D34EFC,0xBDDCCB19 +data4 0x3F7F0CE0,0x3B7393BC,0x52CD7ADA,0x3DC74502 +data4 0x3F7F04F0,0x3B7B8B6D,0x7D7F2A42,0xBDB68F17 +ASM_SIZE_DIRECTIVE(Constants_Z_G_H_h3) + +// +// Exponent Thresholds and Tiny Thresholds +// for 8, 11, 15, and 17 bit exponents +// +// Expo_Range Value +// +// 0 (8 bits) 2^(-126) +// 1 (11 bits) 2^(-1022) +// 2 (15 bits) 2^(-16382) +// 3 (17 bits) 2^(-16382) +// +// Tiny_Table +// ---------- +// Expo_Range Value +// +// 0 (8 bits) 2^(-16382) +// 1 (11 bits) 2^(-16382) +// 2 (15 bits) 2^(-16382) +// 3 (17 bits) 2^(-16382) +// + +.align 64 +Constants_Threshold: +ASM_TYPE_DIRECTIVE(Constants_Threshold,@object) +data4 0x00000000,0x80000000,0x00003F81,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00003C01,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +data4 0x00000000,0x80000000,0x00000001,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_Threshold) + +.align 64 +Constants_1_by_LN10: +ASM_TYPE_DIRECTIVE(Constants_1_by_LN10,@object) +data4 0x37287195,0xDE5BD8A9,0x00003FFD,0x00000000 +data4 0xACCF70C8,0xD56EAABE,0x00003FBB,0x00000000 +ASM_SIZE_DIRECTIVE(Constants_1_by_LN10) + +FR_Input_X = f8 +FR_Neg_One = f9 +FR_E = f33 +FR_Em1 = f34 +FR_Y_hi = f34 +// Shared with Em1 +FR_Y_lo = f35 +FR_Scale = f36 +FR_X_Prime = f37 +FR_Z = f38 +FR_S_hi = f38 +// Shared with Z +FR_W = f39 +FR_G = f40 +FR_wsq = f40 +// Shared with G +FR_H = f41 +FR_w4 = f41 +// Shared with H +FR_h = f42 +FR_w6 = f42 +// Shared with h +FR_G_tmp = f43 +FR_poly_lo = f43 +// Shared with G_tmp +FR_P8 = f43 +// Shared with G_tmp +FR_H_tmp = f44 +FR_poly_hi = f44 + // Shared with H_tmp +FR_P7 = f44 +// Shared with H_tmp +FR_h_tmp = f45 +FR_rsq = f45 +// Shared with h_tmp +FR_P6 = f45 +// Shared with h_tmp +FR_abs_W = f46 +FR_r = f46 +// Shared with abs_W +FR_AA = f47 +FR_log2_hi = f47 +// Shared with AA +FR_BB = f48 +FR_log2_lo = f48 +// Shared with BB +FR_S_lo = f49 +FR_two_negN = f50 +FR_float_N = f51 +FR_Q4 = f52 +FR_dummy = f52 +// Shared with Q4 +FR_P4 = f52 +// Shared with Q4 +FR_Threshold = f52 +// Shared with Q4 +FR_Q3 = f53 +FR_P3 = f53 +// Shared with Q3 +FR_Tiny = f53 +// Shared with Q3 +FR_Q2 = f54 +FR_P2 = f54 +// Shared with Q2 +FR_1LN10_hi = f54 +// Shared with Q2 +FR_Q1 = f55 +FR_P1 = f55 +// Shared with Q1 +FR_1LN10_lo = f55 +// Shared with Q1 +FR_P5 = f98 +FR_SCALE = f98 +FR_Output_X_tmp = f99 + +GR_Expo_Range = r32 +GR_Table_Base = r34 +GR_Table_Base1 = r35 +GR_Table_ptr = r36 +GR_Index2 = r37 +GR_signif = r38 +GR_X_0 = r39 +GR_X_1 = r40 +GR_X_2 = r41 +GR_Z_1 = r42 +GR_Z_2 = r43 +GR_N = r44 +GR_Bias = r45 +GR_M = r46 +GR_ScaleN = r47 +GR_Index3 = r48 +GR_Perturb = r49 +GR_Table_Scale = r50 + +// +// Added for unwind support +// + +GR_SAVE_PFS = r51 +GR_SAVE_B0 = r52 +GR_SAVE_GP = r53 +GR_Parameter_X = r54 +GR_Parameter_Y = r55 +GR_Parameter_RESULT = r56 +GR_Parameter_TAG = r57 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f99 + +.section .text +.proc logl# +.global logl# +.align 64 +logl: +#ifdef _LIBC +.global __ieee754_logl +__ieee754_logl: +#endif +{ .mfi +alloc r32 = ar.pfs,0,22,4,0 +(p0) fnorm.s1 FR_X_Prime = FR_Input_X +(p0) cmp.eq.unc p7, p0 = r0, r0 +} +{ .mfi +(p0) cmp.ne.unc p14, p0 = r0, r0 +(p0) fclass.m.unc p6, p0 = FR_Input_X, 0x1E3 +(p0) cmp.ne.unc p15, p0 = r0, r0 ;; +} +{ .mfi + nop.m 0 +(p0) fclass.nm.unc p10, p0 = FR_Input_X, 0x1FF + nop.i 0 +} +{ .mfi +nop.m 999 +(p0) fcmp.eq.unc.s1 p8, p0 = FR_Input_X, f0 + nop.i 0 +} +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p13, p0 = FR_Input_X, f0 + nop.i 0 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p9, p0 = FR_Input_X, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fsub.s1 FR_Em1 = f0,f1 + nop.i 999 +} +{ .mfb + nop.m 999 +(p0) fadd FR_E = f0,f0 +// +// Create E = 0 and Em1 = -1 +// Check for X == 1, meaning logl(1) +// Check for X < 0, meaning logl(negative) +// Check for X == 0, meaning logl(0) +// Identify NatVals, NaNs, Infs. +// Identify EM unsupporteds. +// Identify Negative values - us S1 so as +// not to raise denormal operand exception +// Set p15 to false for log +// Set p14 to false for log +// Set p7 true for log and log1p +// +(p0) br.cond.sptk L(LOGL_BEGIN) ;; +} + +.endp logl +ASM_SIZE_DIRECTIVE(logl) + +.section .text +.proc log10l# +.global log10l# +.align 64 +log10l: +#ifdef _LIBC +.global __ieee754_log10l +__ieee754_log10l: +#endif +{ .mfi +alloc r32 = ar.pfs,0,22,4,0 +(p0) fadd FR_E = f0,f0 + nop.i 0 +} +{ .mfi + nop.m 0 +(p0) fsub.s1 FR_Em1 = f0,f1 + nop.i 0 +} +{ .mfi +(p0) cmp.ne.unc p15, p0 = r0, r0 +(p0) fcmp.eq.unc.s1 p9, p0 = FR_Input_X, f1 + nop.i 0 +} +{ .mfi +(p0) cmp.eq.unc p14, p0 = r0, r0 +(p0) fcmp.lt.unc.s1 p13, p0 = FR_Input_X, f0 +(p0) cmp.ne.unc p7, p0 = r0, r0 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p8, p0 = FR_Input_X, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p10, p0 = FR_Input_X, 0x1FF + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fclass.m.unc p6, p0 = FR_Input_X, 0x1E3 + nop.i 999 +} +{ .mfb + nop.m 999 +(p0) fnorm.s1 FR_X_Prime = FR_Input_X +// +// Create E = 0 and Em1 = -1 +// Check for X == 1, meaning logl(1) +// Check for X < 0, meaning logl(negative) +// Check for X == 0, meaning logl(0) +// Identify NatVals, NaNs, Infs. +// Identify EM unsupporteds. +// Identify Negative values - us S1 so as +// Identify Negative values - us S1 so as +// not to raise denormal operand exception +// Set p15 to false for log10 +// Set p14 to true for log10 +// Set p7 to false for log10 +// +(p0) br.cond.sptk L(LOGL_BEGIN) ;; +} + +.endp log10l +ASM_SIZE_DIRECTIVE(log10l) + +.section .text +.proc log1pl# +.global log1pl# +.align 64 +log1pl: +#ifdef _LIBC +.global __log1pl +__log1pl: +#endif +{ .mfi +alloc r32 = ar.pfs,0,22,4,0 +(p0) fsub.s1 FR_Neg_One = f0,f1 +(p0) cmp.eq.unc p7, p0 = r0, r0 +} +{ .mfi +(p0) cmp.ne.unc p14, p0 = r0, r0 +(p0) fnorm.s1 FR_X_Prime = FR_Input_X +(p0) cmp.eq.unc p15, p0 = r0, r0 ;; +} +{ .mfi + nop.m 0 +(p0) fclass.m.unc p6, p0 = FR_Input_X, 0x1E3 + nop.i 0 +} +{ .mfi + nop.m 999 +(p0) fclass.nm.unc p10, p0 = FR_Input_X, 0x1FF + nop.i 0 +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p9, p0 = FR_Input_X, f0 + nop.i 0 +} +{ .mfi + nop.m 999 +(p0) fadd FR_Em1 = f0,f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd FR_E = f0,f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.eq.unc.s1 p8, p0 = FR_Input_X, FR_Neg_One + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.lt.unc.s1 p13, p0 = FR_Input_X, FR_Neg_One + nop.i 999 +} +L(LOGL_BEGIN): +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_Z = FR_X_Prime, FR_E + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_Table_Scale = 0x0000000000000018 ;; +} +{ .mmi + nop.m 999 + nop.m 999 +// +// Create E = 1 and Em1 = 0 +// Check for X == 0, meaning logl(1+0) +// Check for X < -1, meaning logl(negative) +// Check for X == -1, meaning logl(0) +// Normalize x +// Identify NatVals, NaNs, Infs. +// Identify EM unsupporteds. +// Identify Negative values - us S1 so as +// not to raise denormal operand exception +// Set p15 to true for log1p +// Set p14 to false for log1p +// Set p7 true for log and log1p +// +(p0) addl GR_Table_Base = @ltoff(Constants_Z_G_H_h1#),gp +} +{ .mfi + nop.m 999 +(p0) fmax.s1 FR_AA = FR_X_Prime, FR_E + nop.i 999 ;; +} +{ .mfi + ld8 GR_Table_Base = [GR_Table_Base] +(p0) fmin.s1 FR_BB = FR_X_Prime, FR_E + nop.i 999 +} +{ .mfb + nop.m 999 +(p0) fadd.s1 FR_W = FR_X_Prime, FR_Em1 +// +// Begin load of constants base +// FR_Z = Z = |x| + E +// FR_W = W = |x| + Em1 +// AA = fmax(|x|,E) +// BB = fmin(|x|,E) +// +(p6) br.cond.spnt L(LOGL_64_special) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p10) br.cond.spnt L(LOGL_64_unsupported) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p13) br.cond.spnt L(LOGL_64_negative) ;; +} +{ .mib +(p0) getf.sig GR_signif = FR_Z + nop.i 999 +(p9) br.cond.spnt L(LOGL_64_one) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.spnt L(LOGL_64_zero) ;; +} +{ .mfi +(p0) getf.exp GR_N = FR_Z +// +// Raise possible denormal operand exception +// Create Bias +// +// This function computes ln( x + e ) +// Input FR 1: FR_X = FR_Input_X +// Input FR 2: FR_E = FR_E +// Input FR 3: FR_Em1 = FR_Em1 +// Input GR 1: GR_Expo_Range = GR_Expo_Range = 1 +// Output FR 4: FR_Y_hi +// Output FR 5: FR_Y_lo +// Output FR 6: FR_Scale +// Output PR 7: PR_Safe +// +(p0) fsub.s1 FR_S_lo = FR_AA, FR_Z +// +// signif = getf.sig(Z) +// abs_W = fabs(w) +// +(p0) extr.u GR_Table_ptr = GR_signif, 59, 4 ;; +} +{ .mfi + nop.m 999 +(p0) fmerge.se FR_S_hi = f1,FR_Z +(p0) extr.u GR_X_0 = GR_signif, 49, 15 +} +{ .mmi + nop.m 999 + nop.m 999 +(p0) addl GR_Table_Base1 = @ltoff(Constants_Z_G_H_h2#),gp ;; +} +{ .mlx + ld8 GR_Table_Base1 = [GR_Table_Base1] +(p0) movl GR_Bias = 0x000000000000FFFF ;; +} +{ .mfi + nop.m 999 +(p0) fabs FR_abs_W = FR_W +(p0) pmpyshr2.u GR_Table_ptr = GR_Table_ptr,GR_Table_Scale,0 +} +{ .mfi + nop.m 999 +// +// Branch out for special input values +// +(p0) fcmp.lt.unc.s0 p8, p0 = FR_Input_X, f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// X_0 = extr.u(signif,49,15) +// Index1 = extr.u(signif,59,4) +// +(p0) fadd.s1 FR_S_lo = FR_S_lo, FR_BB + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +// +// Offset_to_Z1 = 24 * Index1 +// For performance, don't use result +// for 3 or 4 cycles. +// +(p0) add GR_Table_ptr = GR_Table_ptr, GR_Table_Base ;; +} +// +// Add Base to Offset for Z1 +// Create Bias +{ .mmi +(p0) ld4 GR_Z_1 = [GR_Table_ptr],4 ;; +(p0) ldfs FR_G = [GR_Table_ptr],4 + nop.i 999 ;; +} +{ .mmi +(p0) ldfs FR_H = [GR_Table_ptr],8 ;; +(p0) ldfd FR_h = [GR_Table_ptr],0 +(p0) pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 +} +// +// Load Z_1 +// Get Base of Table2 +// +{ .mfi +(p0) getf.exp GR_M = FR_abs_W + nop.f 999 + nop.i 999 ;; +} +{ .mii + nop.m 999 + nop.i 999 ;; +// +// M = getf.exp(abs_W) +// S_lo = AA - Z +// X_1 = pmpyshr2(X_0,Z_1,15) +// +(p0) sub GR_M = GR_M, GR_Bias ;; +} +// +// M = M - Bias +// Load G1 +// N = getf.exp(Z) +// +{ .mii +(p0) cmp.gt.unc p11, p0 = -80, GR_M +(p0) cmp.gt.unc p12, p0 = -7, GR_M ;; +(p0) extr.u GR_Index2 = GR_X_1, 6, 4 ;; +} +{ .mib + nop.m 999 +// +// if -80 > M, set p11 +// Index2 = extr.u(X_1,6,4) +// if -7 > M, set p12 +// Load H1 +// +(p0) pmpyshr2.u GR_Index2 = GR_Index2,GR_Table_Scale,0 +(p11) br.cond.spnt L(log1pl_small) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p12) br.cond.spnt L(log1pl_near) ;; +} +{ .mii +(p0) sub GR_N = GR_N, GR_Bias +// +// poly_lo = r * poly_lo +// +(p0) add GR_Perturb = 0x1, r0 ;; +(p0) sub GR_ScaleN = GR_Bias, GR_N +} +{ .mii +(p0) setf.sig FR_float_N = GR_N + nop.i 999 ;; +// +// Prepare Index2 - pmpyshr2.u(X_1,Z_2,15) +// Load h1 +// S_lo = S_lo + BB +// Branch for -80 > M +// +(p0) add GR_Index2 = GR_Index2, GR_Table_Base1 +} +{ .mmi +(p0) setf.exp FR_two_negN = GR_ScaleN + nop.m 999 +(p0) addl GR_Table_Base = @ltoff(Constants_Z_G_H_h3#),gp ;; +} +// +// Index2 points to Z2 +// Branch for -7 > M +// +{ .mmb +(p0) ld4 GR_Z_2 = [GR_Index2],4 +(p0) ld8 GR_Table_Base = [GR_Table_Base] + nop.b 999 ;; +} +(p0) nop.i 999 +// +// Load Z_2 +// N = N - Bias +// Tablebase points to Table3 +// +{ .mmi +(p0) ldfs FR_G_tmp = [GR_Index2],4 ;; +// +// Load G_2 +// pmpyshr2 X_2= (X_1,Z_2,15) +// float_N = setf.sig(N) +// ScaleN = Bias - N +// +(p0) ldfs FR_H_tmp = [GR_Index2],8 + nop.i 999 ;; +} +// +// Load H_2 +// two_negN = setf.exp(scaleN) +// G = G_1 * G_2 +// +{ .mfi +(p0) ldfd FR_h_tmp = [GR_Index2],0 + nop.f 999 +(p0) pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 ;; +} +{ .mii + nop.m 999 +(p0) extr.u GR_Index3 = GR_X_2, 1, 5 ;; +// +// Load h_2 +// H = H_1 + H_2 +// h = h_1 + h_2 +// Index3 = extr.u(X_2,1,5) +// +(p0) shladd GR_Index3 = GR_Index3,4,GR_Table_Base +} +{ .mmi + nop.m 999 + nop.m 999 +// +// float_N = fcvt.xf(float_N) +// load G3 +// +(p0) addl GR_Table_Base = @ltoff(Constants_Q#),gp ;; +} +{ .mmi + nop.m 999 + ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; + +{ .mfi +(p0) ldfe FR_log2_hi = [GR_Table_Base],16 +(p0) fmpy.s1 FR_S_lo = FR_S_lo, FR_two_negN + nop.i 999 ;; +} +{ .mmf + nop.m 999 +// +// G = G3 * G +// Load h3 +// Load log2_hi +// H = H + H3 +// +(p0) ldfe FR_log2_lo = [GR_Table_Base],16 +(p0) fmpy.s1 FR_G = FR_G, FR_G_tmp ;; +} +{ .mmf +(p0) ldfs FR_G_tmp = [GR_Index3],4 +// +// h = h + h3 +// r = G * S_hi + 1 +// Load log2_lo +// +(p0) ldfe FR_Q4 = [GR_Table_Base],16 +(p0) fadd.s1 FR_h = FR_h, FR_h_tmp ;; +} +{ .mfi +(p0) ldfe FR_Q3 = [GR_Table_Base],16 +(p0) fadd.s1 FR_H = FR_H, FR_H_tmp + nop.i 999 ;; +} +{ .mmf +(p0) ldfs FR_H_tmp = [GR_Index3],4 +(p0) ldfe FR_Q2 = [GR_Table_Base],16 +// +// Comput Index for Table3 +// S_lo = S_lo * two_negN +// +(p0) fcvt.xf FR_float_N = FR_float_N ;; +} +// +// If S_lo == 0, set p8 false +// Load H3 +// Load ptr to table of polynomial coeff. +// +{ .mmf +(p0) ldfd FR_h_tmp = [GR_Index3],0 +(p0) ldfe FR_Q1 = [GR_Table_Base],0 +(p0) fcmp.eq.unc.s1 p0, p8 = FR_S_lo, f0 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 FR_G = FR_G, FR_G_tmp + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_H = FR_H, FR_H_tmp + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fms.s1 FR_r = FR_G, FR_S_hi, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fadd.s1 FR_h = FR_h, FR_h_tmp + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Load Q4 +// Load Q3 +// Load Q2 +// Load Q1 +// +(p8) fma.s1 FR_r = FR_G, FR_S_lo, FR_r + nop.i 999 +} +{ .mfi + nop.m 999 +// +// poly_lo = r * Q4 + Q3 +// rsq = r* r +// +(p0) fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// If (S_lo!=0) r = s_lo * G + r +// +(p0) fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 + nop.i 999 +} +// +// Create a 0x00000....01 +// poly_lo = poly_lo * rsq + h +// +{ .mfi +(p0) setf.sig FR_dummy = GR_Perturb +(p0) fmpy.s1 FR_rsq = FR_r, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// h = N * log2_lo + h +// Y_hi = n * log2_hi + H +// +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// poly_lo = r * poly_o + Q2 +// poly_hi = Q1 * rsq + r +// +(p0) fmpy.s1 FR_poly_lo = FR_poly_lo, FR_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_poly_lo = FR_poly_lo, FR_rsq, FR_h + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p0) fadd.s1 FR_Y_lo = FR_poly_hi, FR_poly_lo +// +// Create the FR for a binary "or" +// Y_lo = poly_hi + poly_lo +// +// (p0) for FR_dummy = FR_Y_lo,FR_dummy ;; +// +// Turn the lsb of Y_lo ON +// +// (p0) fmerge.se FR_Y_lo = FR_Y_lo,FR_dummy ;; +// +// Merge the new lsb into Y_lo, for alone doesn't +// +(p0) br.cond.sptk LOGL_main ;; +} +L(log1pl_near): +{ .mmi + nop.m 999 + nop.m 999 +// /*******************************************************/ +// /*********** Branch log1pl_near ************************/ +// /*******************************************************/ +(p0) addl GR_Table_Base = @ltoff(Constants_P#),gp ;; +} +{ .mmi + nop.m 999 + ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; +// +// Load base address of poly. coeff. +// +{ .mmb +(p0) add GR_Table_ptr = 0x40,GR_Table_Base +// +// Address tables with separate pointers +// +(p0) ldfe FR_P8 = [GR_Table_Base],16 + nop.b 999 ;; +} +{ .mmb +(p0) ldfe FR_P4 = [GR_Table_ptr],16 +// +// Load P4 +// Load P8 +// +(p0) ldfe FR_P7 = [GR_Table_Base],16 + nop.b 999 ;; +} +{ .mmf +(p0) ldfe FR_P3 = [GR_Table_ptr],16 +// +// Load P3 +// Load P7 +// +(p0) ldfe FR_P6 = [GR_Table_Base],16 +(p0) fmpy.s1 FR_wsq = FR_W, FR_W ;; +} +{ .mfi +(p0) ldfe FR_P2 = [GR_Table_ptr],16 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_P4, FR_P3 + nop.i 999 +} +// +// Load P2 +// Load P6 +// Wsq = w * w +// Y_hi = p4 * w + p3 +// +{ .mfi +(p0) ldfe FR_P5 = [GR_Table_Base],16 +(p0) fma.s1 FR_Y_lo = FR_W, FR_P8, FR_P7 + nop.i 999 ;; +} +{ .mfi +(p0) ldfe FR_P1 = [GR_Table_ptr],16 +// +// Load P1 +// Load P5 +// Y_lo = p8 * w + P7 +// +(p0) fmpy.s1 FR_w4 = FR_wsq, FR_wsq + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_Y_hi, FR_P2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_lo = FR_W, FR_Y_lo, FR_P6 +(p0) add GR_Perturb = 0x1, r0 ;; +} +{ .mfi + nop.m 999 +// +// w4 = w2 * w2 +// Y_hi = y_hi * w + p2 +// Y_lo = y_lo * w + p6 +// Create perturbation bit +// +(p0) fmpy.s1 FR_w6 = FR_w4, FR_wsq + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W, FR_Y_hi, FR_P1 + nop.i 999 +} +// +// Y_hi = y_hi * w + p1 +// w6 = w4 * w2 +// +{ .mfi +(p0) setf.sig FR_Q4 = GR_Perturb +(p0) fma.s1 FR_Y_lo = FR_W, FR_Y_lo, FR_P5 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_dummy = FR_wsq,FR_Y_hi, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fma.s1 FR_Y_hi = FR_W,f1,f0 + nop.i 999 +};; +{ .mfb + nop.m 999 +// +// Y_hi = w +// Y_lo = y_lo * w + p5 +// +(p0) fma.s1 FR_Y_lo = FR_w6, FR_Y_lo,FR_dummy +// +// Y_lo = y_lo * w6 + y_high order part. +// +// performance +// +(p0) br.cond.sptk LOGL_main ;; +} +L(log1pl_small): +{ .mmi + nop.m 999 +// /*******************************************************/ +// /*********** Branch log1pl_small ***********************/ +// /*******************************************************/ +(p0) addl GR_Table_Base = @ltoff(Constants_Threshold#),gp +} +{ .mfi + nop.m 999 +(p0) mov FR_Em1 = FR_W +(p0) cmp.eq.unc p7, p0 = r0, r0 ;; +} +{ .mlx + ld8 GR_Table_Base = [GR_Table_Base] +(p0) movl GR_Expo_Range = 0x0000000000000004 ;; +} +// +// Set Safe to true +// Set Expo_Range = 0 for single +// Set Expo_Range = 2 for double +// Set Expo_Range = 4 for double-extended +// +{ .mmi +(p0) shladd GR_Table_Base = GR_Expo_Range,4,GR_Table_Base ;; +(p0) ldfe FR_Threshold = [GR_Table_Base],16 + nop.i 999 +} +{ .mlx + nop.m 999 +(p0) movl GR_Bias = 0x000000000000FF9B ;; +} +{ .mfi +(p0) ldfe FR_Tiny = [GR_Table_Base],0 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.gt.unc.s1 p13, p12 = FR_abs_W, FR_Threshold + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) fnmpy.s1 FR_Y_lo = FR_W, FR_W + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fadd FR_SCALE = f0, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fsub.s1 FR_Y_lo = f0, FR_Tiny +(p12) cmp.ne.unc p7, p0 = r0, r0 +} +{ .mfi +(p12) setf.exp FR_SCALE = GR_Bias + nop.f 999 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Set p7 to SAFE = FALSE +// Set Scale = 2^-100 +// +(p0) fma.s0 f8 = FR_Y_lo,FR_SCALE,FR_Y_hi +(p0) br.ret.sptk b0 ;; +} +L(LOGL_64_one): +{ .mfb + nop.m 999 +(p0) fmpy.s0 f8 = FR_Input_X, f0 +(p0) br.ret.sptk b0 ;; +} +// +// Raise divide by zero for +/-0 input. +// +L(LOGL_64_zero): +{ .mfi +(p0) mov GR_Parameter_TAG = 0 +// +// If we have logl(1), log10l(1) or log1pl(0), return 0. +// +(p0) fsub.s0 FR_Output_X_tmp = f0, f1 + nop.i 999 ;; +} +{ .mii +(p14) mov GR_Parameter_TAG = 6 + nop.i 999 ;; +(p15) mov GR_Parameter_TAG = 138 ;; +} +{ .mfb + nop.m 999 +(p0) frcpa.s0 FR_Output_X_tmp, p8 = FR_Output_X_tmp, f0 +(p0) br.cond.sptk __libm_error_region ;; +} +{ .mfb + nop.m 999 +// +// Report that logl(0) computed +// { .mfb +(p0) mov FR_Input_X = FR_Output_X_tmp +(p0) br.ret.sptk b0 ;; +} + +L(LOGL_64_special): +{ .mfi + nop.m 999 +// +// Return -Inf or value from handler. +// +(p0) fclass.m.unc p7, p0 = FR_Input_X, 0x1E1 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Check for Natval, QNan, SNaN, +Inf +// +(p7) fmpy.s0 f8 = FR_Input_X, f1 +// +// For SNaN raise invalid and return QNaN. +// For QNaN raise invalid and return QNaN. +// For +Inf return +Inf. +// +(p7) br.ret.sptk b0 ;; +} +// +// For -Inf raise invalid and return QNaN. +// +{ .mii +(p0) mov GR_Parameter_TAG = 1 + nop.i 999 ;; +(p14) mov GR_Parameter_TAG = 7 ;; +} +{ .mfi +(p15) mov GR_Parameter_TAG = 139 + nop.f 999 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p0) fmpy.s0 FR_Output_X_tmp = FR_Input_X, f0 +(p0) br.cond.sptk __libm_error_region ;; +} +// +// Report that logl(-Inf) computed +// Report that log10l(-Inf) computed +// Report that log1p(-Inf) computed +// +{ .mfb + nop.m 0 +(p0) mov FR_Input_X = FR_Output_X_tmp +(p0) br.ret.sptk b0 ;; +} +L(LOGL_64_unsupported): +{ .mfb + nop.m 999 +// +// Return generated NaN or other value . +// +(p0) fmpy.s0 f8 = FR_Input_X, f0 +(p0) br.ret.sptk b0 ;; +} +L(LOGL_64_negative): +{ .mfi + nop.m 999 +// +// Deal with x < 0 in a special way +// +(p0) frcpa.s0 FR_Output_X_tmp, p8 = f0, f0 +// +// Deal with x < 0 in a special way - raise +// invalid and produce QNaN indefinite. +// +(p0) mov GR_Parameter_TAG = 1 ;; +} +{ .mii +(p14) mov GR_Parameter_TAG = 7 + nop.i 999 ;; +(p15) mov GR_Parameter_TAG = 139 +} +.endp log1pl +ASM_SIZE_DIRECTIVE(log1pl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.proc LOGL_main +LOGL_main: +{ .mfi + nop.m 999 +// +// kernel_log_64 computes ln(X + E) +// +(p7) fadd.s0 FR_Input_X = FR_Y_lo,FR_Y_hi + nop.i 0 +} +{ .mmi + nop.m 999 + nop.m 999 +(p14) addl GR_Table_Base = @ltoff(Constants_1_by_LN10#),gp ;; +} +{ .mmi + nop.m 999 +(p14) ld8 GR_Table_Base = [GR_Table_Base] + nop.i 999 +};; + +{ .mmi +(p14) ldfe FR_1LN10_hi = [GR_Table_Base],16 ;; +(p14) ldfe FR_1LN10_lo = [GR_Table_Base] + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) fmpy.s1 FR_Output_X_tmp = FR_Y_lo,FR_1LN10_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) fma.s1 FR_Output_X_tmp = FR_Y_hi,FR_1LN10_lo,FR_Output_X_tmp + nop.i 999 ;; +} +{ .mfb + nop.m 999 +(p14) fma.s0 FR_Input_X = FR_Y_hi,FR_1LN10_hi,FR_Output_X_tmp +(p0) br.ret.sptk b0 ;; +} +.endp LOGL_main +ASM_SIZE_DIRECTIVE(LOGL_main) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_logb.S glibc-2.2.3/sysdeps/ia64/fpu/s_logb.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_logb.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_logb.S Mon Feb 19 00:58:55 2001 @@ -0,0 +1,314 @@ +.file "logb.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/16/00 Modified to conform to C9X +// 3/16/00 Improved speed +// 4/04/00 Unwind support added +// 5/30/00 Fixed bug when x double-extended denormal +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// API +//============================================================== +// double logb( double x); +// +// Overview of operation +//============================================================== +// The logb function extracts the exponent of x as an integer in +// floating-point format. +// logb computes log2 of x as a double +// +// logb is similar to ilogb but differs in the following ways: +// +-inf +// ilogb: returns INT_MAX +// logb: returns +inf +// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) +// ilogb: returns INT_MAX (7fffffff) +// logb: returns QNAN (quietized SNAN) +// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) +// ilogb: returns -INT_MAX (80000001) +// logb: returns -inf, raises the divide-by-zero exception, +// and calls libm_error_support to set domain error +// +// Registers used +//============================================================== +// general registers used: +// ar.pfs r32 +// r33 -> r37 +// r38 -> r41 used as parameters to error path +// +// predicate registers used: +// p6, p7, p8 +// floating-point registers used: +// f9, f10, f11 +// f8, input + +#include "libm_support.h" + +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_SAVE_PFS = r32 + +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 + +.align 32 +.global logb# + +.section .text +.proc logb# +.align 32 + + +logb: + +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 1 0 11 +// 0 b +{ .mfi + alloc r32=ar.pfs,1,5,4,0 +(p0) fclass.m.unc p8,p0 = f8, 0x0b + nop.i 999 +} +// X NORMAL +// r37 = exp(f8) - - 0xffff +// sig(f8) = r37 +// f8 = convert_to_fp (sig)) +{ .mfi +(p0) getf.exp r35 = f8 +(p0) fnorm f10=f8 + nop.i 999 ;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +{ .mmf +(p0) mov r33 = 0xffff +(p0) mov r34 = 0x1ffff +(p0) fclass.m.unc p6,p0 = f8, 0xe3 ;; +} + +{ .mfb +(p0) and r36 = r35, r34 +(p0) fclass.m.unc p7,p0 = f8, 0x07 +(p8) br.cond.spnt L(LOGB_DENORM) ;; +} + +{ .mib +(p0) sub r37 = r36, r33 + nop.i 999 +(p6) br.cond.spnt L(LOGB_NAN_INF) ;; +} + +{ .mib +(p0) setf.sig f9 = r37 + nop.i 999 +(p7) br.cond.spnt L(LOGB_ZERO) ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.xf f10 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm.d f8 = f10 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_DENORM): +// Form signexp of 2^64 in case need to scale denormal +// Check to see if double-extended denormal +{ .mfi +(p0) mov r38 = 0x1003f +(p0) fclass.m.unc p8,p0 = f10, 0x0b + nop.i 999 ;; +} + +// Form 2^64 in case need to scale denormal +{ .mfi +(p0) setf.exp f11 = r38 + nop.f 999 + nop.i 999 ;; +} + +// If double-extended denormal add 64 to exponent bias for scaling +// If double-extended denormal form x * 2^64 which is normal +{ .mfi +(p8) add r33 = 64, r33 +(p8) fmpy f10 = f10, f11 + nop.i 999 ;; +} + +// Logic is the same as normal path but use normalized input +{ .mmi +(p0) getf.exp r35 = f10 ;; + nop.m 999 + nop.i 999 ;; +} + +{ .mmi +(p0) and r36 = r35, r34 ;; +(p0) sub r37 = r36, r33 + nop.i 999 ;; +} + +{ .mmi +(p0) setf.sig f9 = r37 + nop.m 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.xf f10 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm.d f8 = f10 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_NAN_INF): + +// X NAN or INFINITY, return f8 * f8 +{ .mfb + nop.m 999 +(p0) fma.d f8= f8,f8,f0 +(p0) br.ret.sptk b0 ;; +} + +.endp logb# +ASM_SIZE_DIRECTIVE(logb) + +// Stack operations when calling error support. +// (1) (2) (3) (call) (4) +// sp -> + psp -> + psp -> + sp -> + +// | | | | +// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 +// | | | | +// | <-GR_Y Y2->| Y2 ->| <- GR_Y | +// | | | | +// | | <- GR_X X1 ->| | +// | | | | +// sp-64 -> + sp -> + sp -> + + +// save ar.pfs save b0 restore gp +// save gp restore ar.pfs + + + +.proc __libm_error_region +__libm_error_region: +L(LOGB_ZERO): +.prologue + +// f9 = |f8| +// f10 = -f9 = -|f8| +// f9 = 1.0/f10 = -1.0/-|f8| + +{ .mfi + mov r41 = 151 // Error code +(p0) fmerge.s f9 = f0,f8 + nop.i 999 +} +;; + + +{ .mfi + nop.m 999 + fmerge.ns f10 = f0,f9 + nop.i 999 +} +;; + +// (1) +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + frcpa f9,p6 = f1,f10 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; + + +// (2) +{ .mmi + stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; + +.body +// (3) +{ .mib + stfd [GR_Parameter_X] = f8 // STORE Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = f9 // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// (4) +{ .mmi + ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_logbf.S glibc-2.2.3/sysdeps/ia64/fpu/s_logbf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_logbf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_logbf.S Mon Feb 19 00:59:04 2001 @@ -0,0 +1,301 @@ +.file "logbf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/16/00 Modified to conform to C9X +// 3/16/00 Improved speed +// 4/04/00 Unwind support added +// 5/30/00 Fixed bug when x double-extended denormal +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// API +//============================================================== +// float logbf( float x); +// +// Overview of operation +//============================================================== +// The logbf function extracts the exponent of x as an integer in +// floating-point format. +// logbf computes log2 of x as a float + +// logbf is similar to ilogbf but differs in the following ways: +// +-inf +// ilogbf: returns INT_MAX +// logbf: returns +inf +// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) +// ilogbf: returns INT_MAX (7fffffff) +// logbf: returns QNAN (quietized SNAN) +// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) +// ilogbf: returns -INT_MAX (80000001) +// logbf: returns -inf, raises the divide-by-zero exception, +// and calls libm_error_support to set domain error +// +// Registers used +//============================================================== +// general registers used: +// ar.pfs r32 +// r33 -> r37 +// r38 -> r41 used as parameters to error path +// +// predicate registers used: +// p6, p7, p8 +// +// floating-point registers used: +// f9, f10, f11 +// f8, input + +#include "libm_support.h" + +GR_SAVE_B0 = r34 +// r40 is address of table of coefficients +GR_SAVE_PFS = r32 +GR_SAVE_GP = r35 + +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +GR_Parameter_TAG = r41 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f10 + + +.align 32 +.global logbf# + +.section .text +.proc logbf# +.align 32 + + +logbf: + +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 1 0 11 +// 0 b +{ .mfi + alloc r32=ar.pfs,1,5,4,0 +(p0) fclass.m.unc p8,p0 = f8, 0x0b + nop.i 999 +} +// X NORMAL +// r37 = exp(f8) - - 0xffff +// sig(f8) = r37 +// f8 = convert_to_fp (sig)) +{ .mfi +(p0) getf.exp r35 = f8 +(p0) fnorm f10=f8 + nop.i 999 ;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +{ .mmf +(p0) mov r33 = 0xffff +(p0) mov r34 = 0x1ffff +(p0) fclass.m.unc p6,p0 = f8, 0xe3 ;; +} + +{ .mfb +(p0) and r36 = r35, r34 +(p0) fclass.m.unc p7,p0 = f8, 0x07 +(p8) br.cond.spnt L(LOGB_DENORM) ;; +} + +{ .mib +(p0) sub r37 = r36, r33 + nop.i 999 +(p6) br.cond.spnt L(LOGB_NAN_INF) ;; +} + +{ .mib +(p0) setf.sig f9 = r37 + nop.i 999 +(p7) br.cond.spnt L(LOGB_ZERO) ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.xf f10 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm.s f8 = f10 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_DENORM): +// Form signexp of 2^64 in case need to scale denormal +// Check to see if double-extended denormal +{ .mfi +(p0) mov r38 = 0x1003f +(p0) fclass.m.unc p8,p0 = f10, 0x0b + nop.i 999 ;; +} + +// Form 2^64 in case need to scale denormal +{ .mfi +(p0) setf.exp f11 = r38 + nop.f 999 + nop.i 999 ;; +} + +// If double-extended denormal add 64 to exponent bias for scaling +// If double-extended denormal form x * 2^64 which is normal +{ .mfi +(p8) add r33 = 64, r33 +(p8) fmpy f10 = f10, f11 + nop.i 999 ;; +} + +// Logic is the same as normal path but use normalized input +{ .mmi +(p0) getf.exp r35 = f10 ;; + nop.m 999 + nop.i 999 ;; +} + +{ .mmi +(p0) and r36 = r35, r34 ;; +(p0) sub r37 = r36, r33 + nop.i 999 ;; +} + +{ .mmi +(p0) setf.sig f9 = r37 + nop.m 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.xf f10 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm.s f8 = f10 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_NAN_INF): + +// X NAN or INFINITY, return f8 * f8 +{ .mfb + nop.m 999 +(p0) fma.s f8= f8,f8,f0 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_ZERO): + +// X ZERO +// return -1.0/fabs(f8)=-inf, set divide-by-zero flag, call error support +{ .mfi + nop.m 999 +(p0) fmerge.s f9 = f0,f8 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fmerge.ns f10 = f0,f9 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) frcpa f10,p6 = f1,f10 + nop.i 999 ;; +} + +.endp logbf +ASM_SIZE_DIRECTIVE(logbf) + + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mii + add GR_Parameter_Y=-32,sp // Parameter 2 value +(p0) mov GR_Parameter_TAG = 152 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_logbl.S glibc-2.2.3/sysdeps/ia64/fpu/s_logbl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_logbl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_logbl.S Mon Feb 19 00:59:16 2001 @@ -0,0 +1,286 @@ +.file "logbl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 2/16/00 Modified to conform to C9X +// 3/16/00 Improved speed +// 4/04/00 Unwind support added +// 5/30/00 Fixed bug when x double-extended denormal +// 8/15/00 Bundle added after call to __libm_error_support to properly +// set [the previously overwritten] GR_Parameter_RESULT. +// +// API +//============================================================== +// long double logbl( long double x); +// +// Overview of operation +//============================================================== +// The logbl function extracts the exponent of x as an integer in +// floating-point format. +// logbl computes log2 of x as a long double +// +// logbl is similar to ilogbl but differs in the following ways: +// +-inf +// ilogbl: returns INT_MAX +// logbl: returns +inf +// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) +// ilogbl: returns INT_MAX (7fffffff) +// logbl: returns QNAN (quietized SNAN) +// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) +// ilogbl: returns -INT_MAX (80000001) +// logbl: returns -inf, raises the divide-by-zero exception, +// and calls libm_error_support to set domain error +// +// Registers used +//============================================================== +// general registers used: +// ar.pfs r32 +// r33 -> r37 +// r38 -> r41 used as parameters to error path +// +// predicate registers used: +// p6, p7, p8 +// +// floating-point registers used: +// f9, f10, f11 +// f8, input + +#include "libm_support.h" + +GR_SAVE_PFS = r32 +GR_SAVE_B0 = r34 +GR_SAVE_GP = r35 +GR_Parameter_X = r38 +GR_Parameter_Y = r39 +GR_Parameter_RESULT = r40 +GR_Parameter_TAG = r41 + +FR_X = f8 +FR_Y = f0 +FR_RESULT = f10 + +.align 32 +.global logbl# + +.section .text +.proc logbl# +.align 32 + + +logbl: + +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 1 0 11 +// 0 b +{ .mfi + alloc r32=ar.pfs,1,5,4,0 +(p0) fclass.m.unc p8,p0 = f8, 0x0b + nop.i 999 +} +// X NORMAL +// r37 = exp(f8) - - 0xffff +// sig(f8) = r37 +// f8 = convert_to_fp (sig)) +{ .mfi +(p0) getf.exp r35 = f8 +(p0) fnorm f10=f8 + nop.i 999 ;; +} + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 +// e 3 +{ .mmf +(p0) mov r33 = 0xffff +(p0) mov r34 = 0x1ffff +(p0) fclass.m.unc p6,p0 = f8, 0xe3 ;; +} + +{ .mfb +(p0) and r36 = r35, r34 +(p0) fclass.m.unc p7,p0 = f8, 0x07 +(p8) br.cond.spnt L(LOGB_DENORM) ;; +} + +{ .mib +(p0) sub r37 = r36, r33 + nop.i 999 +(p6) br.cond.spnt L(LOGB_NAN_INF) ;; +} + +{ .mib +(p0) setf.sig f9 = r37 + nop.i 999 +(p7) br.cond.spnt L(LOGB_ZERO) ;; +} +{ .mfi + nop.m 999 +(p0) fcvt.xf f10 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm f8 = f10 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_DENORM): +// Form signexp of 2^64 in case need to scale denormal +// Check to see if double-extended denormal +{ .mfi +(p0) mov r38 = 0x1003f +(p0) fclass.m.unc p8,p0 = f10, 0x0b + nop.i 999 ;; +} + +// Form 2^64 in case need to scale denormal +{ .mfi +(p0) setf.exp f11 = r38 + nop.f 999 + nop.i 999 ;; +} + +// If double-extended denormal add 64 to exponent bias for scaling +// If double-extended denormal form x * 2^64 which is normal +{ .mfi +(p8) add r33 = 64, r33 +(p8) fmpy f10 = f10, f11 + nop.i 999 ;; +} + +// Logic is the same as normal path but use normalized input +{ .mmi +(p0) getf.exp r35 = f10 ;; + nop.m 999 + nop.i 999 ;; +} + +{ .mmi +(p0) and r36 = r35, r34 ;; +(p0) sub r37 = r36, r33 + nop.i 999 ;; +} + +{ .mmi +(p0) setf.sig f9 = r37 + nop.m 999 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +(p0) fcvt.xf f10 = f9 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm f8 = f10 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_NAN_INF): + +// X NAN or INFINITY, return f8 * f8 +{ .mfb + nop.m 999 +(p0) fma f8= f8,f8,f0 +(p0) br.ret.sptk b0 ;; +} + +L(LOGB_ZERO): +{.mfi + nop.m 0 +(p0) frcpa.s0 f10,p6 = f1,f0 + nop.i 0 +};; +{.mfi + mov GR_Parameter_TAG = 150 +(p0) fms.s1 f10 = f0,f0,f10 + nop.i 0 +};; +// X ZERO +// return -1.0/fabs(f8)=-inf, set divide-by-zero flag, call error support +.endp logbl +ASM_SIZE_DIRECTIVE(logbl) + +.proc __libm_error_region +__libm_error_region: +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp // Parameter 2 value + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack + add GR_Parameter_X = 16,sp // Parameter 1 address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 // Parameter 3 address +} +{ .mib + stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# // Call error handling function +};; +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; +{ .mmi + ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack +.restore sp + add sp = 64,sp // Restore stack pointer + mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mib + mov gp = GR_SAVE_GP // Restore gp + mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs + br.ret.sptk b0 // Return +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_matherrf.c glibc-2.2.3/sysdeps/ia64/fpu/s_matherrf.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_matherrf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_matherrf.c Mon Feb 19 00:59:27 2001 @@ -0,0 +1,33 @@ +/* Derived from: */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "math.h" +#include "math_private.h" +#include "libm_support.h" + +#ifdef __STDC__ + int + weak_function + __matherrf(struct exceptionf *x) +#else + int + weak_function + __matherrf(x) + struct exceptionf *x; +#endif +{ + int n=0; + if(x->arg1!=x->arg1) return 0; + return n; +} +weak_alias (__matherrf, matherrf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_matherrl.c glibc-2.2.3/sysdeps/ia64/fpu/s_matherrl.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_matherrl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_matherrl.c Mon Feb 19 00:59:35 2001 @@ -0,0 +1,33 @@ +/* Derived from: */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "math.h" +#include "math_private.h" +#include "libm_support.h" + +#ifdef __STDC__ + int + weak_function + __matherrl(struct exceptionl *x) +#else + int + weak_function + __matherrl(x) + struct exceptionl *x; +#endif +{ + int n=0; + if(x->arg1!=x->arg1) return 0; + return n; +} +weak_alias (__matherrl, matherrl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_modf.S glibc-2.2.3/sysdeps/ia64/fpu/s_modf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_modf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_modf.S Mon Feb 19 00:59:46 2001 @@ -0,0 +1,272 @@ +.file "modf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00: Improved speed, corrected result for NaN input +// 12/22/00 Fixed so inexact flag is never set, and invalid is not set for +// qnans nor for inputs larger than 2^63. +// +// API +//============================================================== +// double modf(double x, double *iptr) +// break a floating point x number into fraction and an exponent +// +// input floating point f8, address in r33 +// output floating point f8 (x fraction), and *iptr (x integral part) +// +// OVERVIEW +//============================================================== +// +// NO FRACTIONAL PART: HUGE +// If +// for double-extended +// If the true exponent is greater than or equal 63 +// 1003e ==> 1003e -ffff = 3f = 63(dec) +// for double +// If the true exponent is greater than or equal 52 +// 10033 -ffff = 34 = 52(dec) +// for single +// If the true exponent is greater than or equal 23 +// 10016 -ffff = 17 = 23(dec) +// then +// we are already an integer (p9 true) + +// NO INTEGER PART: SMALL +// Is f8 exponent less than register bias (that is, is it +// less than 1). If it is, get the right sign of +// zero and store this in iptr. + +// CALCULATION: NOT HUGE, NOT SMALL +// To get the integer part +// Take the floating-point input and truncate +// then convert this integer to fp Call it MODF_INTEGER_PART + +// Subtract MODF_INTEGER_PART from MODF_NORM_F8 to get fraction part +// Then put fraction part in f8 +// put integer part MODF_INTEGER_PART into *iptr + +// Registers used +//============================================================== + +// predicate registers used: +// p6 - p13 + +// 0xFFFF 0x10033 +// -----------------------+-----------------+------------- +// SMALL | NORMAL | HUGE +// p11 --------------->|<----- p12 ----->| <-------------- p9 +// p10 --------------------------------->| +// p13 --------------------------------------------------->| +// + +#include "libm_support.h" + +// floating-point registers used: +MODF_NORM_F8 = f9 +MODF_FRACTION_PART = f10 +MODF_INTEGER_PART = f11 +MODF_INT_INTEGER_PART = f12 + + +// general registers used +modf_signexp = r14 +modf_GR_no_frac = r15 +modf_GR_FFFF = r16 +modf_17_ones = r17 +modf_exp = r18 +// r33 = iptr + + +.align 32 +.global modf# + +.section .text +.proc modf# +.align 32 + + +// Main path is p9, p11, p8 FALSE and p12 TRUE + +// Assume input is normalized and get signexp +// Normalize input just in case +// Form exponent bias +modf: +{ .mfi + getf.exp modf_signexp = f8 + fnorm MODF_NORM_F8 = f8 + addl modf_GR_FFFF = 0xffff, r0 +} +// Get integer part of input +// Form exponent mask +{ .mfi + nop.m 999 + fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = f8 + mov modf_17_ones = 0x1ffff ;; +} + +// Is x nan or inf? +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 = 0xe3 NAN_INF +// Form biased exponent where input only has an integer part +{ .mfi + nop.m 999 + fclass.m.unc p6,p13 = f8, 0xe3 + addl modf_GR_no_frac = 0x10033, r0 ;; +} + +// Mask to get exponent +// Is x unnorm? +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 1 0 11 = 0x0b UNORM +// Set p13 to indicate calculation path, else p6 if nan or inf +{ .mfi + and modf_exp = modf_17_ones, modf_signexp + fclass.m.unc p8,p0 = f8, 0x0b + nop.i 999 ;; +} + +// p11 <== SMALL, no integer part, fraction is everyting +// p9 <== HUGE, no fraction part, integer is everything +// p12 <== NORMAL, fraction part and integer part +{ .mii +(p13) cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF + nop.i 999 + nop.i 999 ;; +} + +// Is x inf? p6 if inf, p7 if nan +{ .mfb +(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac +(p6) fclass.m.unc p6,p7 = f8, 0x23 +(p8) br.cond.spnt L(MODF_DENORM) ;; +} + +L(MODF_COMMON): +// For HUGE set fraction to signed 0 +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8,f0 + nop.i 999 +} +// For HUGE set integer part to normalized input +{ .mfi + nop.m 999 +(p9) fnorm.d MODF_INTEGER_PART = MODF_NORM_F8 + nop.i 999 ;; +} + +// For SMALL set fraction to normalized input, integer part to signed 0 +{ .mfi + nop.m 999 +(p11) fmerge.s MODF_INTEGER_PART = f8,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fnorm.d f8 = MODF_NORM_F8 + nop.i 999 ;; +} + +// For NORMAL float the integer part +{ .mfi + nop.m 999 +(p12) fcvt.xf MODF_INTEGER_PART = MODF_INT_INTEGER_PART + nop.i 999 ;; +} + +// If x inf set integer part to INF, fraction to signed 0 +{ .mfi +(p6) stfd [r33] = MODF_NORM_F8 +(p6) fmerge.s f8 = f8,f0 + nop.i 999 ;; +} + +// If x nan set integer and fraction parts to NaN (quietized) +{ .mfi +(p7) stfd [r33] = MODF_NORM_F8 +(p7) fmerge.s f8 = MODF_NORM_F8, MODF_NORM_F8 + nop.i 999 ;; +} + +{ .mmi +(p9) stfd [r33] = MODF_INTEGER_PART + nop.m 999 + nop.i 999 ;; +} + +// For NORMAL compute fraction part +{ .mfi +(p11) stfd [r33] = MODF_INTEGER_PART +(p12) fms.d.s0 f8 = MODF_NORM_F8,f1, MODF_INTEGER_PART + nop.i 999 ;; +} + +// For NORMAL test if fraction part is zero; if so append correct sign +{ .mfi + nop.m 999 +(p12) fcmp.eq.unc p7,p0 = MODF_NORM_F8, MODF_INTEGER_PART + nop.i 999 ;; +} + +{ .mfi +(p12) stfd [r33] = MODF_INTEGER_PART + nop.f 999 + nop.i 999 ;; +} + +// For NORMAL if fraction part is zero append sign of input +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = MODF_NORM_F8, f0 + br.ret.sptk b0 ;; +} + +L(MODF_DENORM): +// If x unorm get signexp from normalized input +// If x unorm get integer part from normalized input +{ .mfi + getf.exp modf_signexp = MODF_NORM_F8 + fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = MODF_NORM_F8 + nop.i 999 ;; +} + +// If x unorm mask to get exponent +{ .mmi + and modf_exp = modf_17_ones, modf_signexp ;; + cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF + nop.i 999 ;; +} + +{ .mfb +(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac + nop.f 999 + br.cond.spnt L(MODF_COMMON) ;; +} + +.endp modf +ASM_SIZE_DIRECTIVE(modf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_modff.S glibc-2.2.3/sysdeps/ia64/fpu/s_modff.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_modff.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_modff.S Mon Feb 19 00:59:54 2001 @@ -0,0 +1,272 @@ +.file "modff.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00: Improved speed, corrected result for NaN input +// 12/22/00 Fixed so inexact flag is never set, and invalid is not set for +// qnans nor for inputs larger than 2^63. +// +// API +//============================================================== +// float modff(float x, float *iptr) +// break a floating point x number into fraction and an exponent +// +// input floating point f8, address in r33 +// output floating point f8 (x fraction), and *iptr (x integral part) +// +// OVERVIEW +//============================================================== + +// NO FRACTIONAL PART: HUGE +// If +// for double-extended +// If the true exponent is greater than or equal 63 +// 1003e ==> 1003e -ffff = 3f = 63(dec) +// for double +// If the true exponent is greater than or equal 52 +// 10033 -ffff = 34 = 52(dec) +// for single +// If the true exponent is greater than or equal 23 +// 10016 -ffff = 17 = 23(dec) +// then +// we are already an integer (p9 true) + +// NO INTEGER PART: SMALL +// Is f8 exponent less than register bias (that is, is it +// less than 1). If it is, get the right sign of +// zero and store this in iptr. + +// CALCULATION: NOT HUGE, NOT SMALL +// To get the integer part +// Take the floating-point input and truncate +// then convert this integer to fp Call it MODF_INTEGER_PART + +// Subtract MODF_INTEGER_PART from MODF_NORM_F8 to get fraction part +// Then put fraction part in f8 +// put integer part MODF_INTEGER_PART into *iptr + +// Registers used +//============================================================== + +// predicate registers used: +// p6 - p13 + +// 0xFFFF 0x10016 +// -----------------------+-----------------+------------- +// SMALL | NORMAL | HUGE +// p11 --------------->|<----- p12 ----->| <-------------- p9 +// p10 --------------------------------->| +// p13 --------------------------------------------------->| +// + +#include "libm_support.h" + +// floating-point registers used: +MODF_NORM_F8 = f9 +MODF_FRACTION_PART = f10 +MODF_INTEGER_PART = f11 +MODF_INT_INTEGER_PART = f12 + + +// general registers used +modf_signexp = r14 +modf_GR_no_frac = r15 +modf_GR_FFFF = r16 +modf_17_ones = r17 +modf_exp = r18 +// r33 = iptr + + +.align 32 +.global modff# + +.section .text +.proc modff# +.align 32 + + +// Main path is p9, p11, p8 FALSE and p12 TRUE + +// Assume input is normalized and get signexp +// Normalize input just in case +// Form exponent bias +modff: +{ .mfi + getf.exp modf_signexp = f8 + fnorm MODF_NORM_F8 = f8 + addl modf_GR_FFFF = 0xffff, r0 +} +// Get integer part of input +// Form exponent mask +{ .mfi + nop.m 999 + fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = f8 + mov modf_17_ones = 0x1ffff ;; +} + +// Is x nan or inf? +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 = 0xe3 NAN_INF +// Form biased exponent where input only has an integer part +{ .mfi + nop.m 999 + fclass.m.unc p6,p13 = f8, 0xe3 + addl modf_GR_no_frac = 0x10016, r0 ;; +} + +// Mask to get exponent +// Is x unnorm? +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 1 0 11 = 0x0b UNORM +// Set p13 to indicate calculation path, else p6 if nan or inf +{ .mfi + and modf_exp = modf_17_ones, modf_signexp + fclass.m.unc p8,p0 = f8, 0x0b + nop.i 999 ;; +} + +// p11 <== SMALL, no integer part, fraction is everyting +// p9 <== HUGE, no fraction part, integer is everything +// p12 <== NORMAL, fraction part and integer part +{ .mii +(p13) cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF + nop.i 999 + nop.i 999 ;; +} + +// Is x inf? p6 if inf, p7 if nan +{ .mfb +(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac +(p6) fclass.m.unc p6,p7 = f8, 0x23 +(p8) br.cond.spnt L(MODF_DENORM) ;; +} + +L(MODF_COMMON): +// For HUGE set fraction to signed 0 +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8,f0 + nop.i 999 +} +// For HUGE set integer part to normalized input +{ .mfi + nop.m 999 +(p9) fnorm.s MODF_INTEGER_PART = MODF_NORM_F8 + nop.i 999 ;; +} + +// For SMALL set fraction to normalized input, integer part to signed 0 +{ .mfi + nop.m 999 +(p11) fmerge.s MODF_INTEGER_PART = f8,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fnorm.s f8 = MODF_NORM_F8 + nop.i 999 ;; +} + +// For NORMAL float the integer part +{ .mfi + nop.m 999 +(p12) fcvt.xf MODF_INTEGER_PART = MODF_INT_INTEGER_PART + nop.i 999 ;; +} + +// If x inf set integer part to INF, fraction to signed 0 +{ .mfi +(p6) stfs [r33] = MODF_NORM_F8 +(p6) fmerge.s f8 = f8,f0 + nop.i 999 ;; +} + +// If x nan set integer and fraction parts to NaN (quietized) +{ .mfi +(p7) stfs [r33] = MODF_NORM_F8 +(p7) fmerge.s f8 = MODF_NORM_F8, MODF_NORM_F8 + nop.i 999 ;; +} + +{ .mmi +(p9) stfs [r33] = MODF_INTEGER_PART + nop.m 999 + nop.i 999 ;; +} + +// For NORMAL compute fraction part +{ .mfi +(p11) stfs [r33] = MODF_INTEGER_PART +(p12) fms.s.s0 f8 = MODF_NORM_F8,f1, MODF_INTEGER_PART + nop.i 999 ;; +} + +// For NORMAL test if fraction part is zero; if so append correct sign +{ .mfi + nop.m 999 +(p12) fcmp.eq.unc p7,p0 = MODF_NORM_F8, MODF_INTEGER_PART + nop.i 999 ;; +} + +{ .mfi +(p12) stfs [r33] = MODF_INTEGER_PART + nop.f 999 + nop.i 999 ;; +} + +// For NORMAL if fraction part is zero append sign of input +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = MODF_NORM_F8, f0 + br.ret.sptk b0 ;; +} + +L(MODF_DENORM): +// If x unorm get signexp from normalized input +// If x unorm get integer part from normalized input +{ .mfi + getf.exp modf_signexp = MODF_NORM_F8 + fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = MODF_NORM_F8 + nop.i 999 ;; +} + +// If x unorm mask to get exponent +{ .mmi + and modf_exp = modf_17_ones, modf_signexp ;; + cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF + nop.i 999 ;; +} + +{ .mfb +(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac + nop.f 999 + br.cond.spnt L(MODF_COMMON) ;; +} + +.endp modff +ASM_SIZE_DIRECTIVE(modff) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_modfl.S glibc-2.2.3/sysdeps/ia64/fpu/s_modfl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_modfl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_modfl.S Mon Feb 19 01:00:02 2001 @@ -0,0 +1,267 @@ +.file "modfl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00: Improved speed, corrected result for NaN input +// 5/30/00 Fixed bug for exponent 0x1003e +// 12/22/00 Fixed so inexact flag is never set, and invalid is not set for +// qnans nor for inputs larger than 2^63. +// +// API +//============================================================== +// long double modfl(long double x, long double *iptr) +// break a floating point x number into fraction and an exponent +// +// input floating point f8, address in r34 +// output floating point f8 (x fraction), and *iptr (x integral part) +// +// OVERVIEW +//============================================================== +// +// NO FRACTIONAL PART: HUGE +// If +// for double-extended +// If the true exponent is >= 63 +// 1003e ==> 1003e -ffff = 3f = 63(dec) +// then +// we are already an integer (p9 true) + +// NO INTEGER PART: SMALL +// Is f8 exponent less than register bias (that is, is it +// less than 1). If it is, get the right sign of +// zero and store this in iptr. + +// CALCULATION: NOT HUGE, NOT SMALL +// To get the integer part +// Take the floating-point input and truncate +// then convert this integer to fp Call it MODF_INTEGER_PART + +// Subtract MODF_INTEGER_PART from MODF_NORM_F8 to get fraction part +// Then put fraction part in f8 +// put integer part MODF_INTEGER_PART into *iptr + +// Registers used +//============================================================== + +// predicate registers used: +// p6 - p13 + +// 0xFFFF 0x1003e +// -----------------------+-----------------+------------- +// SMALL | NORMAL | HUGE +// p11 --------------->|<----- p12 ----->| <-------------- p9 +// p10 --------------------------------->| +// p13 --------------------------------------------------->| +// + +#include "libm_support.h" + +// floating-point registers used: +MODF_NORM_F8 = f9 +MODF_FRACTION_PART = f10 +MODF_INTEGER_PART = f11 +MODF_INT_INTEGER_PART = f12 + + +// general registers used +modf_signexp = r14 +modf_GR_no_frac = r15 +modf_GR_FFFF = r16 +modf_17_ones = r17 +modf_exp = r18 +// r34 = iptr + + +.align 32 +.global modfl# + +.section .text +.proc modfl# +.align 32 + + +// Main path is p9, p11, p8 FALSE and p12 TRUE + +// Assume input is normalized and get signexp +// Normalize input just in case +// Form exponent bias +modfl: +{ .mfi + getf.exp modf_signexp = f8 + fnorm MODF_NORM_F8 = f8 + addl modf_GR_FFFF = 0xffff, r0 +} +// Get integer part of input +// Form exponent mask +{ .mfi + nop.m 999 + fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = f8 + mov modf_17_ones = 0x1ffff ;; +} + +// Is x nan or inf? +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 0 11 = 0xe3 NAN_INF +// Form biased exponent where input only has an integer part +{ .mfi + nop.m 999 + fclass.m.unc p6,p13 = f8, 0xe3 + addl modf_GR_no_frac = 0x1003e, r0 ;; +} + +// Mask to get exponent +// Is x unnorm? +// qnan snan inf norm unorm 0 -+ +// 0 0 0 0 1 0 11 = 0x0b UNORM +// Set p13 to indicate calculation path, else p6 if nan or inf +{ .mfi + and modf_exp = modf_17_ones, modf_signexp + fclass.m.unc p8,p0 = f8, 0x0b + nop.i 999 ;; +} + +// p11 <== SMALL, no integer part, fraction is everyting +// p9 <== HUGE, no fraction part, integer is everything +// p12 <== NORMAL, fraction part and integer part +{ .mii +(p13) cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF + nop.i 999 + nop.i 999 ;; +} + +// Is x inf? p6 if inf, p7 if nan +{ .mfb +(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac +(p6) fclass.m.unc p6,p7 = f8, 0x23 +(p8) br.cond.spnt L(MODF_DENORM) ;; +} + +L(MODF_COMMON): +// For HUGE set fraction to signed 0 +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8,f0 + nop.i 999 +} +// For HUGE set integer part to normalized input +{ .mfi + nop.m 999 +(p9) fnorm MODF_INTEGER_PART = MODF_NORM_F8 + nop.i 999 ;; +} + +// For SMALL set fraction to normalized input, integer part to signed 0 +{ .mfi + nop.m 999 +(p11) fmerge.s MODF_INTEGER_PART = f8,f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fnorm f8 = MODF_NORM_F8 + nop.i 999 ;; +} + +// For NORMAL float the integer part +{ .mfi + nop.m 999 +(p12) fcvt.xf MODF_INTEGER_PART = MODF_INT_INTEGER_PART + nop.i 999 ;; +} + +// If x inf set integer part to INF, fraction to signed 0 +{ .mfi +(p6) stfe [r34] = MODF_NORM_F8 +(p6) fmerge.s f8 = f8,f0 + nop.i 999 ;; +} + +// If x nan set integer and fraction parts to NaN (quietized) +{ .mfi +(p7) stfe [r34] = MODF_NORM_F8 +(p7) fmerge.s f8 = MODF_NORM_F8, MODF_NORM_F8 + nop.i 999 ;; +} + +{ .mmi +(p9) stfe [r34] = MODF_INTEGER_PART + nop.m 999 + nop.i 999 ;; +} + +// For NORMAL compute fraction part +{ .mfi +(p11) stfe [r34] = MODF_INTEGER_PART +(p12) fms.s0 f8 = MODF_NORM_F8,f1, MODF_INTEGER_PART + nop.i 999 ;; +} + +// For NORMAL test if fraction part is zero; if so append correct sign +{ .mfi + nop.m 999 +(p12) fcmp.eq.unc p7,p0 = MODF_NORM_F8, MODF_INTEGER_PART + nop.i 999 ;; +} + +{ .mfi +(p12) stfe [r34] = MODF_INTEGER_PART + nop.f 999 + nop.i 999 ;; +} + +// For NORMAL if fraction part is zero append sign of input +{ .mfb + nop.m 999 +(p7) fmerge.s f8 = MODF_NORM_F8, f0 + br.ret.sptk b0 ;; +} + +L(MODF_DENORM): +// If x unorm get signexp from normalized input +// If x unorm get integer part from normalized input +{ .mfi + getf.exp modf_signexp = MODF_NORM_F8 + fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = MODF_NORM_F8 + nop.i 999 ;; +} + +// If x unorm mask to get exponent +{ .mmi + and modf_exp = modf_17_ones, modf_signexp ;; + cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF + nop.i 999 ;; +} + +{ .mfb +(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac + nop.f 999 + br.cond.spnt L(MODF_COMMON) ;; +} + +.endp modfl +ASM_SIZE_DIRECTIVE(modfl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_nearbyint.S glibc-2.2.3/sysdeps/ia64/fpu/s_nearbyint.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_nearbyint.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_nearbyint.S Mon Feb 19 01:00:13 2001 @@ -0,0 +1,221 @@ +.file "nearbyint.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 10/19/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Tom Rowan, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 10/19/2000: Created +// 2/08/01 Corrected behavior for all rounding modes. +//============================================================== +// +// API +//============================================================== +// double nearbyint(double x) + +#include "libm_support.h" + +// +// general registers used: +// + +nearbyint_GR_signexp = r14 +nearbyint_GR_exponent = r15 +nearbyint_GR_17ones = r16 +nearbyint_GR_10033 = r17 +nearbyint_GR_fpsr = r18 +nearbyint_GR_rcs0 = r19 +nearbyint_GR_rcs0_mask = r20 + + +// predicate registers used: +// p6-11 + +// floating-point registers used: + +NEARBYINT_NORM_f8 = f9 +NEARBYINT_FLOAT_INT_f8 = f10 +NEARBYINT_INT_f8 = f11 + +// Overview of operation +//============================================================== + +// double nearbyint(double x) +// Return an integer value (represented as a double) that is x rounded to integer in current +// rounding mode +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is >= 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is >= 10016 => 17(true) = 23(decimal) +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global nearbyint# + +.section .text +.proc nearbyint# +.align 32 + + +nearbyint: + +{ .mfi + mov nearbyint_GR_fpsr = ar40 // Read the fpsr--need to check rc.s0 + fcvt.fx.s1 NEARBYINT_INT_f8 = f8 + addl nearbyint_GR_10033 = 0x10033, r0 +} +{ .mfi + nop.m 999 + fnorm.s1 NEARBYINT_NORM_f8 = f8 + mov nearbyint_GR_17ones = 0x1FFFF +;; +} + +{ .mfi + nop.m 999 + fclass.m.unc p6,p0 = f8, 0xe7 + mov nearbyint_GR_rcs0_mask = 0x0c00 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm.d f8 = f8 +(p6) br.ret.spnt b0 // Exit if x nan, inf, zero +;; +} + +{ .mfi + nop.m 999 + fcvt.xf NEARBYINT_FLOAT_INT_f8 = NEARBYINT_INT_f8 + nop.i 999 +;; +} + +{ .mfi + getf.exp nearbyint_GR_signexp = NEARBYINT_NORM_f8 + fcmp.eq.s0 p8,p0 = f8,f0 // Dummy op to set denormal + nop.i 999 +;; +} + + +{ .mii + nop.m 999 + nop.i 999 + and nearbyint_GR_exponent = nearbyint_GR_signexp, nearbyint_GR_17ones +;; +} + +{ .mmi + cmp.ge.unc p7,p6 = nearbyint_GR_exponent, nearbyint_GR_10033 + and nearbyint_GR_rcs0 = nearbyint_GR_rcs0_mask, nearbyint_GR_fpsr + nop.i 999 +;; +} + +// Check to see if s0 rounding mode is round to nearest. If not then set s2 +// rounding mode to that of s0 and repeat conversions. +L(NEARBYINT_COMMON): +{ .mfb + cmp.ne p11,p0 = nearbyint_GR_rcs0, r0 +(p6) fclass.m.unc p9,p10 = NEARBYINT_FLOAT_INT_f8, 0x07 // Test for result=0 +(p11) br.cond.spnt L(NEARBYINT_NOT_ROUND_NEAREST) // Branch if not round to nearest +;; +} + +{ .mfi + nop.m 999 +(p7) fnorm.d.s0 f8 = f8 + nop.i 999 +;; +} + +// If result is zero, merge sign of input +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8, NEARBYINT_FLOAT_INT_f8 + nop.i 999 +} +{ .mfb + nop.m 999 +(p10) fnorm.d f8 = NEARBYINT_FLOAT_INT_f8 + br.ret.sptk b0 +;; +} + + +L(NEARBYINT_NOT_ROUND_NEAREST): +// Set rounding mode of s2 to that of s0 +{ .mfi + mov nearbyint_GR_rcs0 = r0 // Clear so we don't come back here + fsetc.s2 0x7f, 0x40 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.fx.s2 NEARBYINT_INT_f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 + fcvt.xf NEARBYINT_FLOAT_INT_f8 = NEARBYINT_INT_f8 + br.cond.sptk L(NEARBYINT_COMMON) +;; +} + + +.endp nearbyint +ASM_SIZE_DIRECTIVE(nearbyint) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_nearbyintf.S glibc-2.2.3/sysdeps/ia64/fpu/s_nearbyintf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_nearbyintf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_nearbyintf.S Mon Feb 19 01:00:30 2001 @@ -0,0 +1,221 @@ +.file "nearbyintf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 10/19/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Tom Rowan, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 10/19/2000: Created +// 2/08/01 Corrected behavior for all rounding modes. +//============================================================== +// +// API +//============================================================== +// float nearbyintf(float x) + +#include "libm_support.h" + +// +// general registers used: +// + +nearbyint_GR_signexp = r14 +nearbyint_GR_exponent = r15 +nearbyint_GR_17ones = r16 +nearbyint_GR_10033 = r17 +nearbyint_GR_fpsr = r18 +nearbyint_GR_rcs0 = r19 +nearbyint_GR_rcs0_mask = r20 + + +// predicate registers used: +// p6-11 + +// floating-point registers used: + +NEARBYINT_NORM_f8 = f9 +NEARBYINT_FLOAT_INT_f8 = f10 +NEARBYINT_INT_f8 = f11 + +// Overview of operation +//============================================================== + +// float nearbyintf(float x) +// Return an integer value (represented as a float) that is x rounded to integer in current +// rounding mode +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is >= 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is >= 10016 => 17(true) = 23(decimal) +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global nearbyintf# + +.section .text +.proc nearbyintf# +.align 32 + + +nearbyintf: + +{ .mfi + mov nearbyint_GR_fpsr = ar40 // Read the fpsr--need to check rc.s0 + fcvt.fx.s1 NEARBYINT_INT_f8 = f8 + addl nearbyint_GR_10033 = 0x10016, r0 +} +{ .mfi + nop.m 999 + fnorm.s1 NEARBYINT_NORM_f8 = f8 + mov nearbyint_GR_17ones = 0x1FFFF +;; +} + +{ .mfi + nop.m 999 + fclass.m.unc p6,p0 = f8, 0xe7 + mov nearbyint_GR_rcs0_mask = 0x0c00 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm.s f8 = f8 +(p6) br.ret.spnt b0 // Exit if x nan, inf, zero +;; +} + +{ .mfi + nop.m 999 + fcvt.xf NEARBYINT_FLOAT_INT_f8 = NEARBYINT_INT_f8 + nop.i 999 +;; +} + +{ .mfi + getf.exp nearbyint_GR_signexp = NEARBYINT_NORM_f8 + fcmp.eq.s0 p8,p0 = f8,f0 // Dummy op to set denormal + nop.i 999 +;; +} + + +{ .mii + nop.m 999 + nop.i 999 + and nearbyint_GR_exponent = nearbyint_GR_signexp, nearbyint_GR_17ones +;; +} + +{ .mmi + cmp.ge.unc p7,p6 = nearbyint_GR_exponent, nearbyint_GR_10033 + and nearbyint_GR_rcs0 = nearbyint_GR_rcs0_mask, nearbyint_GR_fpsr + nop.i 999 +;; +} + +// Check to see if s0 rounding mode is round to nearest. If not then set s2 +// rounding mode to that of s0 and repeat conversions. +L(NEARBYINT_COMMON): +{ .mfb + cmp.ne p11,p0 = nearbyint_GR_rcs0, r0 +(p6) fclass.m.unc p9,p10 = NEARBYINT_FLOAT_INT_f8, 0x07 // Test for result=0 +(p11) br.cond.spnt L(NEARBYINT_NOT_ROUND_NEAREST) // Branch if not round to nearest +;; +} + +{ .mfi + nop.m 999 +(p7) fnorm.s.s0 f8 = f8 + nop.i 999 +;; +} + +// If result is zero, merge sign of input +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8, NEARBYINT_FLOAT_INT_f8 + nop.i 999 +} +{ .mfb + nop.m 999 +(p10) fnorm.s f8 = NEARBYINT_FLOAT_INT_f8 + br.ret.sptk b0 +;; +} + + +L(NEARBYINT_NOT_ROUND_NEAREST): +// Set rounding mode of s2 to that of s0 +{ .mfi + mov nearbyint_GR_rcs0 = r0 // Clear so we don't come back here + fsetc.s2 0x7f, 0x40 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.fx.s2 NEARBYINT_INT_f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 + fcvt.xf NEARBYINT_FLOAT_INT_f8 = NEARBYINT_INT_f8 + br.cond.sptk L(NEARBYINT_COMMON) +;; +} + + +.endp nearbyintf +ASM_SIZE_DIRECTIVE(nearbyintf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_nearbyintl.S glibc-2.2.3/sysdeps/ia64/fpu/s_nearbyintl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_nearbyintl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_nearbyintl.S Mon Feb 19 01:00:41 2001 @@ -0,0 +1,218 @@ +.file "nearbyintl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 10/19/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Tom Rowan, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 10/19/2000: Created +// 2/08/01 Corrected behavior for all rounding modes. +//============================================================== +// +// API +//============================================================== +// long double nearbyintl(long double x) + +#include "libm_support.h" + +// +// general registers used: +// + +nearbyint_GR_signexp = r14 +nearbyint_GR_exponent = r15 +nearbyint_GR_17ones = r16 +nearbyint_GR_10033 = r17 +nearbyint_GR_fpsr = r18 +nearbyint_GR_rcs0 = r19 +nearbyint_GR_rcs0_mask = r20 + + +// predicate registers used: +// p6-11 + +// floating-point registers used: + +NEARBYINT_NORM_f8 = f9 +NEARBYINT_FLOAT_INT_f8 = f10 +NEARBYINT_INT_f8 = f11 +NEARBYINT_SIGNED_FLOAT_INT_f8 = f12 + +// Overview of operation +//============================================================== + +// long double nearbyintl(long double x) +// Return an integer value (represented as a long double) that is +// x rounded to integer in current rounding mode +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is >= 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is >= 10016 => 17(true) = 23(decimal) +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global nearbyintl# + +.section .text +.proc nearbyintl# +.align 32 + + +nearbyintl: + +{ .mfi + mov nearbyint_GR_fpsr = ar40 // Read the fpsr--need to check rc.s0 + fcvt.fx.s1 NEARBYINT_INT_f8 = f8 + addl nearbyint_GR_10033 = 0x1003e, r0 +} +{ .mfi + nop.m 999 + fnorm.s1 NEARBYINT_NORM_f8 = f8 + mov nearbyint_GR_17ones = 0x1FFFF +;; +} + +{ .mfi + nop.m 999 + fclass.m.unc p6,p0 = f8, 0xe7 + mov nearbyint_GR_rcs0_mask = 0x0c00 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm f8 = f8 +(p6) br.ret.spnt b0 // Exit if x nan, inf, zero +;; +} + +{ .mfi + nop.m 999 + fcvt.xf NEARBYINT_FLOAT_INT_f8 = NEARBYINT_INT_f8 + nop.i 999 +;; +} + +{ .mfi + getf.exp nearbyint_GR_signexp = NEARBYINT_NORM_f8 + fcmp.eq.s0 p8,p0 = f8,f0 // Dummy op to set denormal + nop.i 999 +;; +} + + +{ .mii + nop.m 999 + nop.i 999 + and nearbyint_GR_exponent = nearbyint_GR_signexp, nearbyint_GR_17ones +;; +} + +{ .mmi + cmp.ge.unc p7,p6 = nearbyint_GR_exponent, nearbyint_GR_10033 + and nearbyint_GR_rcs0 = nearbyint_GR_rcs0_mask, nearbyint_GR_fpsr + nop.i 999 +;; +} + +// Check to see if s0 rounding mode is round to nearest. If not then set s2 +// rounding mode to that of s0 and repeat conversions. +// Must merge the original sign for cases where the result is zero or the input +// is the largest that still has a fraction (0x1007dfffffffffff) +L(NEARBYINT_COMMON): +{ .mfb + cmp.ne p11,p0 = nearbyint_GR_rcs0, r0 +(p6) fmerge.s NEARBYINT_SIGNED_FLOAT_INT_f8 = f8, NEARBYINT_FLOAT_INT_f8 +(p11) br.cond.spnt L(NEARBYINT_NOT_ROUND_NEAREST) // Branch if not round to nearest +;; +} + +{ .mfi + nop.m 999 +(p7) fnorm.s0 f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm f8 = NEARBYINT_SIGNED_FLOAT_INT_f8 + br.ret.sptk b0 +;; +} + + +L(NEARBYINT_NOT_ROUND_NEAREST): +// Set rounding mode of s2 to that of s0 +{ .mfi + mov nearbyint_GR_rcs0 = r0 // Clear so we don't come back here + fsetc.s2 0x7f, 0x40 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.fx.s2 NEARBYINT_INT_f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 + fcvt.xf NEARBYINT_FLOAT_INT_f8 = NEARBYINT_INT_f8 + br.cond.sptk L(NEARBYINT_COMMON) +;; +} + + +.endp nearbyintl +ASM_SIZE_DIRECTIVE(nearbyintl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_rint.S glibc-2.2.3/sysdeps/ia64/fpu/s_rint.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_rint.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_rint.S Mon Feb 19 01:00:58 2001 @@ -0,0 +1,241 @@ +.file "rint.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 2/08/01 Corrected behavior for all rounding modes. +// +// API +//============================================================== +// double rint(double x) + +#include "libm_support.h" + +// +// general registers used: +// +rint_GR_FFFF = r14 +rint_GR_signexp = r15 +rint_GR_exponent = r16 +rint_GR_17ones = r17 +rint_GR_10033 = r18 +rint_GR_fpsr = r19 +rint_GR_rcs0 = r20 +rint_GR_rcs0_mask = r21 + + +// predicate registers used: +// p6-11 + +// floating-point registers used: + +RINT_NORM_f8 = f9 +RINT_FFFF = f10 +RINT_INEXACT = f11 +RINT_FLOAT_INT_f8 = f12 +RINT_INT_f8 = f13 + +// Overview of operation +//============================================================== + +// double rint(double x) +// Return an integer value (represented as a double) that is x rounded to integer in current +// rounding mode +// Inexact is set if x != rint(x) +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is >= 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is >= 10016 => 17(true) = 23(decimal) +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global rint# + +.section .text +.proc rint# +.align 32 + + +rint: +#ifdef _LIBC +.global __rint +.type __rint,@function +__rint: +#endif + +{ .mfi + mov rint_GR_fpsr = ar40 // Read the fpsr--need to check rc.s0 + fcvt.fx.s1 RINT_INT_f8 = f8 + addl rint_GR_10033 = 0x10033, r0 +} +{ .mfi + mov rint_GR_FFFF = -1 + fnorm.s1 RINT_NORM_f8 = f8 + mov rint_GR_17ones = 0x1FFFF +;; +} + +{ .mfi + setf.sig RINT_FFFF = rint_GR_FFFF + fclass.m.unc p6,p0 = f8, 0xe7 + mov rint_GR_rcs0_mask = 0x0c00 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm.d f8 = f8 +(p6) br.ret.spnt b0 // Exit if x nan, inf, zero +;; +} + +{ .mfi + nop.m 999 + fcvt.xf RINT_FLOAT_INT_f8 = RINT_INT_f8 + nop.i 999 +;; +} + +{ .mfi + getf.exp rint_GR_signexp = RINT_NORM_f8 + fcmp.eq.s0 p8,p0 = f8,f0 // Dummy op to set denormal + nop.i 999 +;; +} + + +{ .mii + nop.m 999 + nop.i 999 + and rint_GR_exponent = rint_GR_signexp, rint_GR_17ones +;; +} + +{ .mmi + cmp.ge.unc p7,p6 = rint_GR_exponent, rint_GR_10033 + and rint_GR_rcs0 = rint_GR_rcs0_mask, rint_GR_fpsr + nop.i 999 +;; +} + +// Check to see if s0 rounding mode is round to nearest. If not then set s2 +// rounding mode to that of s0 and repeat conversions. +L(RINT_COMMON): +{ .mfb + cmp.ne p11,p0 = rint_GR_rcs0, r0 +(p6) fclass.m.unc p9,p10 = RINT_FLOAT_INT_f8, 0x07 // Test for result=0 +(p11) br.cond.spnt L(RINT_NOT_ROUND_NEAREST) // Branch if not round to nearest +;; +} + +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc.s1 p0,p8 = RINT_FLOAT_INT_f8, RINT_NORM_f8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fnorm.d.s0 f8 = f8 + nop.i 999 +;; +} + +// If result is zero, merge sign of input +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8, RINT_FLOAT_INT_f8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fnorm.d f8 = RINT_FLOAT_INT_f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 +(p8) fmpy.s0 RINT_INEXACT = RINT_FFFF,RINT_FFFF // Dummy to set inexact + br.ret.sptk b0 +;; +} + +L(RINT_NOT_ROUND_NEAREST): +// Set rounding mode of s2 to that of s0 +{ .mfi + mov rint_GR_rcs0 = r0 // Clear so we don't come back here + fsetc.s2 0x7f, 0x40 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.fx.s2 RINT_INT_f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 + fcvt.xf RINT_FLOAT_INT_f8 = RINT_INT_f8 + br.cond.sptk L(RINT_COMMON) +;; +} + + +.endp rint +ASM_SIZE_DIRECTIVE(rint) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__rint) +#endif diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_rintf.S glibc-2.2.3/sysdeps/ia64/fpu/s_rintf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_rintf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_rintf.S Mon Feb 19 01:01:06 2001 @@ -0,0 +1,241 @@ +.file "rintf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 2/08/01 Corrected behavior for all rounding modes. +// +// API +//============================================================== +// float rintf(float x) + +#include "libm_support.h" + +// +// general registers used: +// +rint_GR_FFFF = r14 +rint_GR_signexp = r15 +rint_GR_exponent = r16 +rint_GR_17ones = r17 +rint_GR_10033 = r18 +rint_GR_fpsr = r19 +rint_GR_rcs0 = r20 +rint_GR_rcs0_mask = r21 + + +// predicate registers used: +// p6-11 + +// floating-point registers used: + +RINT_NORM_f8 = f9 +RINT_FFFF = f10 +RINT_INEXACT = f11 +RINT_FLOAT_INT_f8 = f12 +RINT_INT_f8 = f13 + +// Overview of operation +//============================================================== + +// float rintf(float x) +// Return an integer value (represented as a float) that is x rounded to integer in current +// rounding mode +// Inexact is set if x != rintf(x) +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is >= 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is >= 10016 => 17(true) = 23(decimal) +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global rintf# + +.section .text +.proc rintf# +.align 32 + + +rintf: +#ifdef _LIBC +.global __rintf +.type __rintf,@function +__rintf: +#endif + +{ .mfi + mov rint_GR_fpsr = ar40 // Read the fpsr--need to check rc.s0 + fcvt.fx.s1 RINT_INT_f8 = f8 + addl rint_GR_10033 = 0x10016, r0 +} +{ .mfi + mov rint_GR_FFFF = -1 + fnorm.s1 RINT_NORM_f8 = f8 + mov rint_GR_17ones = 0x1FFFF +;; +} + +{ .mfi + setf.sig RINT_FFFF = rint_GR_FFFF + fclass.m.unc p6,p0 = f8, 0xe7 + mov rint_GR_rcs0_mask = 0x0c00 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm.s f8 = f8 +(p6) br.ret.spnt b0 // Exit if x nan, inf, zero +;; +} + +{ .mfi + nop.m 999 + fcvt.xf RINT_FLOAT_INT_f8 = RINT_INT_f8 + nop.i 999 +;; +} + +{ .mfi + getf.exp rint_GR_signexp = RINT_NORM_f8 + fcmp.eq.s0 p8,p0 = f8,f0 // Dummy op to set denormal + nop.i 999 +;; +} + + +{ .mii + nop.m 999 + nop.i 999 + and rint_GR_exponent = rint_GR_signexp, rint_GR_17ones +;; +} + +{ .mmi + cmp.ge.unc p7,p6 = rint_GR_exponent, rint_GR_10033 + and rint_GR_rcs0 = rint_GR_rcs0_mask, rint_GR_fpsr + nop.i 999 +;; +} + +// Check to see if s0 rounding mode is round to nearest. If not then set s2 +// rounding mode to that of s0 and repeat conversions. +L(RINT_COMMON): +{ .mfb + cmp.ne p11,p0 = rint_GR_rcs0, r0 +(p6) fclass.m.unc p9,p10 = RINT_FLOAT_INT_f8, 0x07 // Test for result=0 +(p11) br.cond.spnt L(RINT_NOT_ROUND_NEAREST) // Branch if not round to nearest +;; +} + +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc.s1 p0,p8 = RINT_FLOAT_INT_f8, RINT_NORM_f8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fnorm.s.s0 f8 = f8 + nop.i 999 +;; +} + +// If result is zero, merge sign of input +{ .mfi + nop.m 999 +(p9) fmerge.s f8 = f8, RINT_FLOAT_INT_f8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p10) fnorm.s f8 = RINT_FLOAT_INT_f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 +(p8) fmpy.s0 RINT_INEXACT = RINT_FFFF,RINT_FFFF // Dummy to set inexact + br.ret.sptk b0 +;; +} + +L(RINT_NOT_ROUND_NEAREST): +// Set rounding mode of s2 to that of s0 +{ .mfi + mov rint_GR_rcs0 = r0 // Clear so we don't come back here + fsetc.s2 0x7f, 0x40 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.fx.s2 RINT_INT_f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 + fcvt.xf RINT_FLOAT_INT_f8 = RINT_INT_f8 + br.cond.sptk L(RINT_COMMON) +;; +} + + +.endp rintf +ASM_SIZE_DIRECTIVE(rintf) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__rintf) +#endif diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_rintl.S glibc-2.2.3/sysdeps/ia64/fpu/s_rintl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_rintl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_rintl.S Mon Feb 19 01:01:48 2001 @@ -0,0 +1,239 @@ +.file "rintl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 5/24/00 Fixed case of 2^63 - 1 + 0.5 (0x1007dffffffffffffffff) +// 2/08/01 Corrected behavior for all rounding modes. +// +// API +//============================================================== +// long double rintl(long double x) + +#include "libm_support.h" + +// +// general registers used: +// +rint_GR_FFFF = r14 +rint_GR_signexp = r15 +rint_GR_exponent = r16 +rint_GR_17ones = r17 +rint_GR_10033 = r18 +rint_GR_fpsr = r19 +rint_GR_rcs0 = r20 +rint_GR_rcs0_mask = r21 + + +// predicate registers used: +// p6-11 + +// floating-point registers used: + +RINT_NORM_f8 = f9 +RINT_FFFF = f10 +RINT_INEXACT = f11 +RINT_FLOAT_INT_f8 = f12 +RINT_INT_f8 = f13 +RINT_SIGNED_FLOAT_INT_f8 = f14 + +// Overview of operation +//============================================================== + +// long double rintl(long double x) +// Return an integer value (represented as a long double) that is x rounded to integer in current +// rounding mode +// Inexact is set if x != rintl(x) +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// Is the input an integer value already? + +// double_extended +// if the exponent is >= 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is >= 10016 => 17(true) = 23(decimal) +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// If x is NAN, ZERO, or INFINITY, then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global rintl# + +.section .text +.proc rintl# +.align 32 + + +rintl: +#ifdef _LIBC +.global __rintl +.type __rintl,@function +__rintl: +#endif + +{ .mfi + mov rint_GR_fpsr = ar40 // Read the fpsr--need to check rc.s0 + fcvt.fx.s1 RINT_INT_f8 = f8 + addl rint_GR_10033 = 0x1003e, r0 +} +{ .mfi + mov rint_GR_FFFF = -1 + fnorm.s1 RINT_NORM_f8 = f8 + mov rint_GR_17ones = 0x1FFFF +;; +} + +{ .mfi + setf.sig RINT_FFFF = rint_GR_FFFF + fclass.m.unc p6,p0 = f8, 0xe7 + mov rint_GR_rcs0_mask = 0x0c00 +;; +} + +{ .mfb + nop.m 999 +(p6) fnorm f8 = f8 +(p6) br.ret.spnt b0 // Exit if x nan, inf, zero +;; +} + +{ .mfi + nop.m 999 + fcvt.xf RINT_FLOAT_INT_f8 = RINT_INT_f8 + nop.i 999 +;; +} + +{ .mfi + getf.exp rint_GR_signexp = RINT_NORM_f8 + fcmp.eq.s0 p8,p0 = f8,f0 // Dummy op to set denormal + nop.i 999 +;; +} + + +{ .mii + nop.m 999 + nop.i 999 + and rint_GR_exponent = rint_GR_signexp, rint_GR_17ones +;; +} + +{ .mmi + cmp.ge.unc p7,p6 = rint_GR_exponent, rint_GR_10033 + and rint_GR_rcs0 = rint_GR_rcs0_mask, rint_GR_fpsr + nop.i 999 +;; +} + +// Check to see if s0 rounding mode is round to nearest. If not then set s2 +// rounding mode to that of s0 and repeat conversions. +// Must merge the original sign for cases where the result is zero or the input +// is the largest that still has a fraction (0x1007dfffffffffff) +L(RINT_COMMON): +{ .mfb + cmp.ne p11,p0 = rint_GR_rcs0, r0 +(p6) fmerge.s RINT_SIGNED_FLOAT_INT_f8 = f8, RINT_FLOAT_INT_f8 +(p11) br.cond.spnt L(RINT_NOT_ROUND_NEAREST) // Branch if not round to nearest +;; +} + +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc.s1 p0,p8 = RINT_FLOAT_INT_f8, RINT_NORM_f8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p7) fnorm.s0 f8 = f8 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 +(p6) fnorm f8 = RINT_SIGNED_FLOAT_INT_f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 +(p8) fmpy.s0 RINT_INEXACT = RINT_FFFF,RINT_FFFF // Dummy to set inexact + br.ret.sptk b0 +;; +} + +L(RINT_NOT_ROUND_NEAREST): +// Set rounding mode of s2 to that of s0 +{ .mfi + mov rint_GR_rcs0 = r0 // Clear so we don't come back here + fsetc.s2 0x7f, 0x40 + nop.i 999 +;; +} + +{ .mfi + nop.m 999 + fcvt.fx.s2 RINT_INT_f8 = f8 + nop.i 999 +;; +} + +{ .mfb + nop.m 999 + fcvt.xf RINT_FLOAT_INT_f8 = RINT_INT_f8 + br.cond.sptk L(RINT_COMMON) +;; +} + + +.endp rintl +ASM_SIZE_DIRECTIVE(rintl) +#ifdef _LIBC +ASM_SIZE_DIRECTIVE(__rintl) +#endif diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_round.S glibc-2.2.3/sysdeps/ia64/fpu/s_round.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_round.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_round.S Mon Feb 19 01:02:03 2001 @@ -0,0 +1,236 @@ +.file "round.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 10/25/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Tom Rowan, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 10/25/2000: Created +//============================================================== +// +// API +//============================================================== +// double round(double x) +// + +#include "libm_support.h" + +// general input registers: +// +round_GR_half = r14 +round_GR_big = r15 +round_GR_expmask = r16 +round_GR_signexp = r17 +round_GR_exp = r18 +round_GR_expdiff = r19 + +// predicate registers used: +// p6 - p10 + +// floating-point registers used: + +ROUND_NORM_f8 = f9 +ROUND_TRUNC_f8 = f10 +ROUND_RINT_f8 = f11 +ROUND_FLOAT_TRUNC_f8 = f12 +ROUND_FLOAT_RINT_f8 = f13 +ROUND_REMAINDER = f14 +ROUND_HALF = f15 + +// Overview of operation +//============================================================== + +// double round(double x) +// Return an integer value (represented as a double) that is x +// rounded to nearest integer, halfway cases rounded away from +// zero. +// if x>0 result = trunc(x+0.5) +// if x<0 result = trunc(x-0.5) +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// If x is NAN, ZERO, INFINITY, or >= 2^52 then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global round# + +.section .text +.proc round# +.align 32 + + +round: + +// Get exponent for +0.5 +// Truncate x to integer +{ .mfi + addl round_GR_half = 0x0fffe, r0 + fcvt.fx.trunc.s1 ROUND_TRUNC_f8 = f8 + nop.i 999 +} + +// Get signexp of x +// Normalize input +// Form exponent mask +{ .mfi + getf.exp round_GR_signexp = f8 + fnorm ROUND_NORM_f8 = f8 + addl round_GR_expmask = 0x1ffff, r0 ;; +} + +// Form +0.5 +// Round x to integer +{ .mfi + setf.exp ROUND_HALF = round_GR_half + fcvt.fx.s1 ROUND_RINT_f8 = f8 + nop.i 999 ;; +} +// Get exp of x +// Test for NAN, INF, ZERO +// Get exponent at which input has no fractional part +{ .mfi + and round_GR_exp = round_GR_expmask, round_GR_signexp + fclass.m p8,p9 = f8,0xe7 + addl round_GR_big = 0x10033, r0 ;; +} + +// Get exp-bigexp +// If exp is so big there is no fractional part, then turn on p8, off p9 +{ .mmi + sub round_GR_expdiff = round_GR_exp, round_GR_big ;; +#ifdef _LIBC +(p9) cmp.lt.or.andcm p8,p9 = r0, round_GR_expdiff +#else +(p9) cmp.ge.or.andcm p8,p9 = round_GR_expdiff, r0 +#endif + nop.i 999 ;; +} + +// Set p6 if x<0, else set p7 +{ .mfi + nop.m 999 +(p9) fcmp.lt.unc p6,p7 = f8,f0 + nop.i 999 +} + +// If NAN, INF, ZERO, or no fractional part, result is just normalized input +{ .mfi + nop.m 999 +(p8) fnorm.d.s0 f8 = f8 + nop.i 999 ;; +} + +// Float the truncated integer +{ .mfi + nop.m 999 +(p9) fcvt.xf ROUND_FLOAT_TRUNC_f8 = ROUND_TRUNC_f8 + nop.i 999 ;; +} + +// Float the rounded integer to get preliminary result +{ .mfi + nop.m 999 +(p9) fcvt.xf ROUND_FLOAT_RINT_f8 = ROUND_RINT_f8 + nop.i 999 ;; +} + +// If x<0 and the difference of the truncated input minus the input is 0.5 +// then result = truncated input - 1.0 +// Else if x>0 and the difference of the input minus truncated input is 0.5 +// then result = truncated input + 1.0 +// Else +// result = rounded input +// Endif +{ .mfi + nop.m 999 +(p6) fsub.s1 ROUND_REMAINDER = ROUND_FLOAT_TRUNC_f8, ROUND_NORM_f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fsub.s1 ROUND_REMAINDER = ROUND_NORM_f8, ROUND_FLOAT_TRUNC_f8 + nop.i 999 ;; +} + +// Assume preliminary result is rounded integer +{ .mfi + nop.m 999 +(p9) fnorm.d.s0 f8 = ROUND_FLOAT_RINT_f8 + nop.i 999 +} + +// If x<0, test if result=0 +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc p10,p0 = ROUND_FLOAT_RINT_f8,f0 + nop.i 999 ;; +} + +// If x<0 and result=0, set result=-0 +{ .mfi + nop.m 999 +(p10) fmerge.ns f8 = f1,f8 + nop.i 999 +} + +// If x<0, test if remainder=0.5 +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc p6,p0 = ROUND_REMAINDER, ROUND_HALF + nop.i 999 ;; +} + +// If x>0, test if remainder=0.5 +{ .mfi + nop.m 999 +(p7) fcmp.eq.unc p7,p0 = ROUND_REMAINDER, ROUND_HALF + nop.i 999 ;; +} + +// If x<0 and remainder=0.5, result=truncated-1.0 +// If x>0 and remainder=0.5, result=truncated+1.0 +// Exit +.pred.rel "mutex",p6,p7 +{ .mfi + nop.m 999 +(p6) fsub.d.s0 f8 = ROUND_FLOAT_TRUNC_f8,f1 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p7) fadd.d.s0 f8 = ROUND_FLOAT_TRUNC_f8,f1 + br.ret.sptk b0 ;; +} + +.endp round +ASM_SIZE_DIRECTIVE(round) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_roundf.S glibc-2.2.3/sysdeps/ia64/fpu/s_roundf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_roundf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_roundf.S Mon Feb 19 01:02:29 2001 @@ -0,0 +1,236 @@ +.file "roundf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 10/25/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Tom Rowan, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 10/25/2000: Created +//============================================================== +// +// API +//============================================================== +// float roundf(float x) +// + +#include "libm_support.h" + +// general input registers: +// +roundf_GR_half = r14 +roundf_GR_big = r15 +roundf_GR_expmask = r16 +roundf_GR_signexp = r17 +roundf_GR_exp = r18 +roundf_GR_expdiff = r19 + +// predicate registers used: +// p6 - p10 + +// floating-point registers used: + +ROUNDF_NORM_f8 = f9 +ROUNDF_TRUNC_f8 = f10 +ROUNDF_RINT_f8 = f11 +ROUNDF_FLOAT_TRUNC_f8 = f12 +ROUNDF_FLOAT_RINT_f8 = f13 +ROUNDF_REMAINDER = f14 +ROUNDF_HALF = f15 + +// Overview of operation +//============================================================== + +// float roundf(float x) +// Return an integer value (represented as a float) that is x +// rounded to nearest integer, halfway cases rounded away from +// zero. +// if x>0 result = trunc(x+0.5) +// if x<0 result = trunc(x-0.5) +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// If x is NAN, ZERO, INFINITY, or >= 2^23 then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global roundf# + +.section .text +.proc roundf# +.align 32 + + +roundf: + +// Get exponent for +0.5 +// Truncate x to integer +{ .mfi + addl roundf_GR_half = 0x0fffe, r0 + fcvt.fx.trunc.s1 ROUNDF_TRUNC_f8 = f8 + nop.i 999 +} + +// Get signexp of x +// Normalize input +// Form exponent mask +{ .mfi + getf.exp roundf_GR_signexp = f8 + fnorm ROUNDF_NORM_f8 = f8 + addl roundf_GR_expmask = 0x1ffff, r0 ;; +} + +// Form +0.5 +// Round x to integer +{ .mfi + setf.exp ROUNDF_HALF = roundf_GR_half + fcvt.fx.s1 ROUNDF_RINT_f8 = f8 + nop.i 999 ;; +} +// Get exp of x +// Test for NAN, INF, ZERO +// Get exponent at which input has no fractional part +{ .mfi + and roundf_GR_exp = roundf_GR_expmask, roundf_GR_signexp + fclass.m p8,p9 = f8,0xe7 + addl roundf_GR_big = 0x10016, r0 ;; +} + +// Get exp-bigexp +// If exp is so big there is no fractional part, then turn on p8, off p9 +{ .mmi + sub roundf_GR_expdiff = roundf_GR_exp, roundf_GR_big ;; +#ifdef _LIBC +(p9) cmp.lt.or.andcm p8,p9 = r0, roundf_GR_expdiff +#else +(p9) cmp.ge.or.andcm p8,p9 = roundf_GR_expdiff, r0 +#endif + nop.i 999 ;; +} + +// Set p6 if x<0, else set p7 +{ .mfi + nop.m 999 +(p9) fcmp.lt.unc p6,p7 = f8,f0 + nop.i 999 +} + +// If NAN, INF, ZERO, or no fractional part, result is just normalized input +{ .mfi + nop.m 999 +(p8) fnorm.s.s0 f8 = f8 + nop.i 999 ;; +} + +// Float the truncated integer +{ .mfi + nop.m 999 +(p9) fcvt.xf ROUNDF_FLOAT_TRUNC_f8 = ROUNDF_TRUNC_f8 + nop.i 999 ;; +} + +// Float the rounded integer to get preliminary result +{ .mfi + nop.m 999 +(p9) fcvt.xf ROUNDF_FLOAT_RINT_f8 = ROUNDF_RINT_f8 + nop.i 999 ;; +} + +// If x<0 and the difference of the truncated input minus the input is 0.5 +// then result = truncated input - 1.0 +// Else if x>0 and the difference of the input minus truncated input is 0.5 +// then result = truncated input + 1.0 +// Else +// result = rounded input +// Endif +{ .mfi + nop.m 999 +(p6) fsub.s1 ROUNDF_REMAINDER = ROUNDF_FLOAT_TRUNC_f8, ROUNDF_NORM_f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fsub.s1 ROUNDF_REMAINDER = ROUNDF_NORM_f8, ROUNDF_FLOAT_TRUNC_f8 + nop.i 999 ;; +} + +// Assume preliminary result is rounded integer +{ .mfi + nop.m 999 +(p9) fnorm.s.s0 f8 = ROUNDF_FLOAT_RINT_f8 + nop.i 999 +} + +// If x<0, test if result=0 +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc p10,p0 = ROUNDF_FLOAT_RINT_f8,f0 + nop.i 999 ;; +} + +// If x<0 and result=0, set result=-0 +{ .mfi + nop.m 999 +(p10) fmerge.ns f8 = f1,f8 + nop.i 999 +} + +// If x<0, test if remainder=0.5 +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc p6,p0 = ROUNDF_REMAINDER, ROUNDF_HALF + nop.i 999 ;; +} + +// If x>0, test if remainder=0.5 +{ .mfi + nop.m 999 +(p7) fcmp.eq.unc p7,p0 = ROUNDF_REMAINDER, ROUNDF_HALF + nop.i 999 ;; +} + +// If x<0 and remainder=0.5, result=truncated-1.0 +// If x>0 and remainder=0.5, result=truncated+1.0 +// Exit +.pred.rel "mutex",p6,p7 +{ .mfi + nop.m 999 +(p6) fsub.s.s0 f8 = ROUNDF_FLOAT_TRUNC_f8,f1 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p7) fadd.s.s0 f8 = ROUNDF_FLOAT_TRUNC_f8,f1 + br.ret.sptk b0 ;; +} + +.endp roundf +ASM_SIZE_DIRECTIVE(roundf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_roundl.S glibc-2.2.3/sysdeps/ia64/fpu/s_roundl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_roundl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_roundl.S Mon Feb 19 01:02:37 2001 @@ -0,0 +1,236 @@ +.file "roundl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 10/25/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Tom Rowan, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 10/25/2000: Created +//============================================================== +// +// API +//============================================================== +// long double roundl(long double x) +// + +#include "libm_support.h" + +// general input registers: +// +roundl_GR_half = r14 +roundl_GR_big = r15 +roundl_GR_expmask = r16 +roundl_GR_signexp = r17 +roundl_GR_exp = r18 +roundl_GR_expdiff = r19 + +// predicate registers used: +// p6 - p10 + +// floating-point registers used: + +ROUNDL_NORM_f8 = f9 +ROUNDL_TRUNC_f8 = f10 +ROUNDL_RINT_f8 = f11 +ROUNDL_FLOAT_TRUNC_f8 = f12 +ROUNDL_FLOAT_RINT_f8 = f13 +ROUNDL_REMAINDER = f14 +ROUNDL_HALF = f15 + +// Overview of operation +//============================================================== + +// long double roundl(long double x) +// Return an integer value (represented as a long double) that is x +// rounded to nearest integer, halfway cases rounded away from +// zero. +// if x>0 result = trunc(x+0.5) +// if x<0 result = trunc(x-0.5) +// ******************************************************************************* + +// Set denormal flag for denormal input and +// and take denormal fault if necessary. + +// If x is NAN, ZERO, INFINITY, or >= 2^63 then return + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 0xe7 + + +.align 32 +.global roundl# + +.section .text +.proc roundl# +.align 32 + + +roundl: + +// Get exponent for +0.5 +// Truncate x to integer +{ .mfi + addl roundl_GR_half = 0x0fffe, r0 + fcvt.fx.trunc.s1 ROUNDL_TRUNC_f8 = f8 + nop.i 999 +} + +// Get signexp of x +// Normalize input +// Form exponent mask +{ .mfi + getf.exp roundl_GR_signexp = f8 + fnorm ROUNDL_NORM_f8 = f8 + addl roundl_GR_expmask = 0x1ffff, r0 ;; +} + +// Form +0.5 +// Round x to integer +{ .mfi + setf.exp ROUNDL_HALF = roundl_GR_half + fcvt.fx.s1 ROUNDL_RINT_f8 = f8 + nop.i 999 ;; +} +// Get exp of x +// Test for NAN, INF, ZERO +// Get exponent at which input has no fractional part +{ .mfi + and roundl_GR_exp = roundl_GR_expmask, roundl_GR_signexp + fclass.m p8,p9 = f8,0xe7 + addl roundl_GR_big = 0x1003e, r0 ;; +} + +// Get exp-bigexp +// If exp is so big there is no fractional part, then turn on p8, off p9 +{ .mmi + sub roundl_GR_expdiff = roundl_GR_exp, roundl_GR_big ;; +#ifdef _LIBC +(p9) cmp.lt.or.andcm p8,p9 = r0, roundl_GR_expdiff +#else +(p9) cmp.ge.or.andcm p8,p9 = roundl_GR_expdiff, r0 +#endif + nop.i 999 ;; +} + +// Set p6 if x<0, else set p7 +{ .mfi + nop.m 999 +(p9) fcmp.lt.unc p6,p7 = f8,f0 + nop.i 999 +} + +// If NAN, INF, ZERO, or no fractional part, result is just normalized input +{ .mfi + nop.m 999 +(p8) fnorm.s0 f8 = f8 + nop.i 999 ;; +} + +// Float the truncated integer +{ .mfi + nop.m 999 +(p9) fcvt.xf ROUNDL_FLOAT_TRUNC_f8 = ROUNDL_TRUNC_f8 + nop.i 999 ;; +} + +// Float the rounded integer to get preliminary result +{ .mfi + nop.m 999 +(p9) fcvt.xf ROUNDL_FLOAT_RINT_f8 = ROUNDL_RINT_f8 + nop.i 999 ;; +} + +// If x<0 and the difference of the truncated input minus the input is 0.5 +// then result = truncated input - 1.0 +// Else if x>0 and the difference of the input minus truncated input is 0.5 +// then result = truncated input + 1.0 +// Else +// result = rounded input +// Endif +{ .mfi + nop.m 999 +(p6) fsub.s1 ROUNDL_REMAINDER = ROUNDL_FLOAT_TRUNC_f8, ROUNDL_NORM_f8 + nop.i 999 +} + +{ .mfi + nop.m 999 +(p7) fsub.s1 ROUNDL_REMAINDER = ROUNDL_NORM_f8, ROUNDL_FLOAT_TRUNC_f8 + nop.i 999 ;; +} + +// Assume preliminary result is rounded integer +{ .mfi + nop.m 999 +(p9) fnorm.s0 f8 = ROUNDL_FLOAT_RINT_f8 + nop.i 999 +} + +// If x<0, test if result=0 +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc p10,p0 = ROUNDL_FLOAT_RINT_f8,f0 + nop.i 999 ;; +} + +// If x<0 and result=0, set result=-0 +{ .mfi + nop.m 999 +(p10) fmerge.ns f8 = f1,f8 + nop.i 999 +} + +// If x<0, test if remainder=0.5 +{ .mfi + nop.m 999 +(p6) fcmp.eq.unc p6,p0 = ROUNDL_REMAINDER, ROUNDL_HALF + nop.i 999 ;; +} + +// If x>0, test if remainder=0.5 +{ .mfi + nop.m 999 +(p7) fcmp.eq.unc p7,p0 = ROUNDL_REMAINDER, ROUNDL_HALF + nop.i 999 ;; +} + +// If x<0 and remainder=0.5, result=truncated-1.0 +// If x>0 and remainder=0.5, result=truncated+1.0 +// Exit +.pred.rel "mutex",p6,p7 +{ .mfi + nop.m 999 +(p6) fsub.s0 f8 = ROUNDL_FLOAT_TRUNC_f8,f1 + nop.i 999 +} + +{ .mfb + nop.m 999 +(p7) fadd.s0 f8 = ROUNDL_FLOAT_TRUNC_f8,f1 + br.ret.sptk b0 ;; +} + +.endp roundl +ASM_SIZE_DIRECTIVE(roundl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_scalbn.S glibc-2.2.3/sysdeps/ia64/fpu/s_scalbn.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_scalbn.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_scalbn.S Mon Feb 19 01:02:48 2001 @@ -0,0 +1,366 @@ +.file "scalbn.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 Scalbn completely reworked and now standalone version +// +// API +//============================================================== +// double = scalbn (double x, int n) +// input floating point f8 and int n (r33) +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Big = f6 +FR_NBig = f7 +FR_Floating_X = f8 +FR_Result = f8 +FR_Result2 = f9 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_Two_N = f14 +FR_Two_to_Big = f15 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global scalbn + +.section .text +.proc scalbn +.align 32 + +scalbn: + +// +// Is x NAN, INF, ZERO, +-? +// Build the exponent Bias +// +{ .mfi + alloc r32=ar.pfs,1,2,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Bias = 0x0FFFF,r0 +} + +// +// Sign extend input +// Is N zero? +// Normalize x +// +{ .mfi + cmp.eq.unc p6,p0 = r33,r0 + fnorm.s1 FR_Norm_X = FR_Floating_X + sxt4 GR_N_as_int = r33 +} +;; + +// +// Normalize x +// Branch and return special values. +// Create -35000 +// Create 35000 +// +{ .mfi + addl GR_Big = 35000,r0 + nop.f 0 + add GR_N_Biased = GR_Bias,GR_N_as_int +} +{ .mfb + addl GR_NBig = -35000,r0 +(p7) fma.d.s0 FR_Result = FR_Floating_X,f1, f0 +(p7) br.ret.spnt b0 +};; + +// +// Build the exponent Bias +// Return x when N = 0 +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.f 0 + addl GR_Scratch1 = 0x063BF,r0 +} +{ .mfb + addl GR_Scratch = 0x019C3F,r0 +(p6) fma.d.s0 FR_Result = FR_Floating_X,f1, f0 +(p6) br.ret.spnt b0 +};; + +// +// Create 2*big +// Create 2**-big +// Is N > 35000 +// Is N < -35000 +// Raise Denormal operand flag with compare +// Main path, create 2**N +// +{ .mfi + setf.exp FR_NBig = GR_Scratch1 + nop.f 0 + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big +} +{ .mfi + setf.exp FR_Big = GR_Scratch + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig +};; + +// +// Adjust 2**N if N was very small or very large +// +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x00000000000303FF +};; + + +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x00000000000103FF +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.d.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.d.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.d.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 176, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 177, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(SCALBN_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(SCALBN_OVERFLOW) +(p9) br.cond.spnt L(SCALBN_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +.endp scalbn +ASM_SIZE_DIRECTIVE(scalbn) +.proc __libm_error_region +__libm_error_region: + +L(SCALBN_OVERFLOW): +L(SCALBN_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + st8 [GR_Parameter_Y] = GR_N_as_int,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfd [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfd [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfd FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(scalbn) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_scalbnf.S glibc-2.2.3/sysdeps/ia64/fpu/s_scalbnf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_scalbnf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_scalbnf.S Mon Feb 19 01:02:56 2001 @@ -0,0 +1,366 @@ +//.file "scalbnf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 scalbnf completely reworked and now standalone version +// +// API +//============================================================== +// float = scalbnf (float x, int n) +// input floating point f8 and int n (r33) +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Big = f6 +FR_NBig = f7 +FR_Floating_X = f8 +FR_Result = f8 +FR_Result2 = f9 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_Two_N = f14 +FR_Two_to_Big = f15 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global scalbnf + +.section .text +.proc scalbnf +.align 32 + +scalbnf: + +// +// Is x NAN, INF, ZERO, +-? +// Build the exponent Bias +// +{ .mfi + alloc r32=ar.pfs,1,2,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Bias = 0x0FFFF,r0 +} + +// +// Sign extend input +// Is N zero? +// Normalize x +// +{ .mfi + cmp.eq.unc p6,p0 = r33,r0 + fnorm.s1 FR_Norm_X = FR_Floating_X + sxt4 GR_N_as_int = r33 +} +;; + +// +// Normalize x +// Branch and return special values. +// Create -35000 +// Create 35000 +// +{ .mfi + addl GR_Big = 35000,r0 + nop.f 0 + add GR_N_Biased = GR_Bias,GR_N_as_int +} +{ .mfb + addl GR_NBig = -35000,r0 +(p7) fma.s.s0 FR_Result = FR_Floating_X,f1, f0 +(p7) br.ret.spnt b0 +};; + +// +// Build the exponent Bias +// Return x when N = 0 +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.f 0 + addl GR_Scratch1 = 0x063BF,r0 +} +{ .mfb + addl GR_Scratch = 0x019C3F,r0 +(p6) fma.s.s0 FR_Result = FR_Floating_X,f1, f0 +(p6) br.ret.spnt b0 +};; + +// +// Create 2*big +// Create 2**-big +// Is N > 35000 +// Is N < -35000 +// Raise Denormal operand flag with compare +// Main path, create 2**N +// +{ .mfi + setf.exp FR_NBig = GR_Scratch1 + nop.f 0 + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big +} +{ .mfi + setf.exp FR_Big = GR_Scratch + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig +};; + +// +// Adjust 2**N if N was very small or very large +// +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x000000000003007F +};; + + +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x000000000001007F +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 178, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 179, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(scalbnf_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(scalbnf_OVERFLOW) +(p9) br.cond.spnt L(scalbnf_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +.endp scalbnf +ASM_SIZE_DIRECTIVE(scalbnf) +.proc __libm_error_region +__libm_error_region: + +L(scalbnf_OVERFLOW): +L(scalbnf_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + st8 [GR_Parameter_Y] = GR_N_as_int,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfs [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfs [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfs FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_scalbnl.S glibc-2.2.3/sysdeps/ia64/fpu/s_scalbnl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_scalbnl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_scalbnl.S Mon Feb 19 01:03:04 2001 @@ -0,0 +1,366 @@ +//.file "scalbnl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00 Initial version +// 1/26/01 scalbnl completely reworked and now standalone version +// +// API +//============================================================== +// double-extended = scalbnl (double-extended x, int n) +// input floating point f8 and int n (r34) +// output floating point f8 +// +// Returns x* 2**n using an fma and detects overflow +// and underflow. +// +// + +#include "libm_support.h" + +FR_Big = f6 +FR_NBig = f7 +FR_Floating_X = f8 +FR_Result = f8 +FR_Result2 = f9 +FR_Result3 = f11 +FR_Norm_X = f12 +FR_Two_N = f14 +FR_Two_to_Big = f15 + +GR_N_Biased = r15 +GR_Big = r16 +GR_NBig = r17 +GR_Scratch = r18 +GR_Scratch1 = r19 +GR_Bias = r20 +GR_N_as_int = r21 + +GR_SAVE_B0 = r32 +GR_SAVE_GP = r33 +GR_SAVE_PFS = r34 +GR_Parameter_X = r35 +GR_Parameter_Y = r36 +GR_Parameter_RESULT = r37 +GR_Tag = r38 + +.align 32 +.global scalbnl + +.section .text +.proc scalbnl +.align 32 + +scalbnl: + +// +// Is x NAN, INF, ZERO, +-? +// Build the exponent Bias +// +{ .mfi + alloc r32=ar.pfs,2,1,4,0 + fclass.m.unc p7,p0 = FR_Floating_X, 0xe7 //@snan | @qnan | @inf | @zero + addl GR_Bias = 0x0FFFF,r0 +} + +// +// Sign extend input +// Is N zero? +// Normalize x +// +{ .mfi + cmp.eq.unc p6,p0 = r34,r0 + fnorm.s1 FR_Norm_X = FR_Floating_X + sxt4 GR_N_as_int = r34 +} +;; + +// +// Normalize x +// Branch and return special values. +// Create -35000 +// Create 35000 +// +{ .mfi + addl GR_Big = 35000,r0 + nop.f 0 + add GR_N_Biased = GR_Bias,GR_N_as_int +} +{ .mfb + addl GR_NBig = -35000,r0 +(p7) fma.s0 FR_Result = FR_Floating_X,f1, f0 +(p7) br.ret.spnt b0 +};; + +// +// Build the exponent Bias +// Return x when N = 0 +// +{ .mfi + setf.exp FR_Two_N = GR_N_Biased + nop.f 0 + addl GR_Scratch1 = 0x063BF,r0 +} +{ .mfb + addl GR_Scratch = 0x019C3F,r0 +(p6) fma.s0 FR_Result = FR_Floating_X,f1, f0 +(p6) br.ret.spnt b0 +};; + +// +// Create 2*big +// Create 2**-big +// Is N > 35000 +// Is N < -35000 +// Raise Denormal operand flag with compare +// Main path, create 2**N +// +{ .mfi + setf.exp FR_NBig = GR_Scratch1 + nop.f 0 + cmp.ge.unc p6, p0 = GR_N_as_int, GR_Big +} +{ .mfi + setf.exp FR_Big = GR_Scratch + fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 + cmp.le.unc p8, p0 = GR_N_as_int, GR_NBig +};; + +// +// Adjust 2**N if N was very small or very large +// +{ .mfi + nop.m 0 +(p6) fma.s1 FR_Two_N = FR_Big,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch = 0x0000000000033FFF +};; + + +{ .mfi + nop.m 0 +(p8) fma.s1 FR_Two_N = FR_NBig,f1,f0 + nop.i 0 +} +{ .mlx + nop.m 999 +(p0) movl GR_Scratch1= 0x0000000000013FFF +};; + +// Set up necessary status fields +// +// S0 user supplied status +// S2 user supplied status + WRE + TD (Overflows) +// S3 user supplied status + FZ + TD (Underflows) +// +{ .mfi + nop.m 999 +(p0) fsetc.s3 0x7F,0x41 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fsetc.s2 0x7F,0x42 + nop.i 999 +};; + +// +// Do final operation +// +{ .mfi + setf.exp FR_NBig = GR_Scratch + fma.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +} +{ .mfi + nop.m 999 + fma.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; +{ .mfi + setf.exp FR_Big = GR_Scratch1 + fma.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 + nop.i 999 +};; + +// Check for overflow or underflow. +// Restore s3 +// Restore s2 +// +{ .mfi + nop.m 0 + fsetc.s3 0x7F,0x40 + nop.i 999 +} +{ .mfi + nop.m 0 + fsetc.s2 0x7F,0x40 + nop.i 999 +};; + +// +// Is the result zero? +// +{ .mfi + nop.m 999 + fclass.m.unc p6, p0 = FR_Result3, 0x007 + nop.i 999 +} +{ .mfi + addl GR_Tag = 174, r0 + fcmp.ge.unc.s1 p7, p8 = FR_Result2 , FR_Big + nop.i 0 +};; + +// +// Detect masked underflow - Tiny + Inexact Only +// +{ .mfi + nop.m 999 +(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 + nop.i 999 +};; + +// +// Is result bigger the allowed range? +// Branch out for underflow +// +{ .mfb +(p6) addl GR_Tag = 175, r0 +(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig +(p6) br.cond.spnt L(scalbnl_UNDERFLOW) +};; + +// +// Branch out for overflow +// +{ .mbb + nop.m 0 +(p7) br.cond.spnt L(scalbnl_OVERFLOW) +(p9) br.cond.spnt L(scalbnl_OVERFLOW) +};; + +// +// Return from main path. +// +{ .mfb + nop.m 999 + nop.f 0 + br.ret.sptk b0;; +} + +.endp scalbnl +ASM_SIZE_DIRECTIVE(scalbnl) +.proc __libm_error_region +__libm_error_region: + +L(scalbnl_OVERFLOW): +L(scalbnl_UNDERFLOW): + +// +// Get stack address of N +// +.prologue +{ .mfi + add GR_Parameter_Y=-32,sp + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +// +// Adjust sp +// +{ .mfi +.fframe 64 + add sp=-64,sp + nop.f 0 + mov GR_SAVE_GP=gp +};; + +// +// Store N on stack in correct position +// Locate the address of x on stack +// +{ .mmi + st8 [GR_Parameter_Y] = GR_N_as_int,16 + add GR_Parameter_X = 16,sp +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +};; + +// +// Store x on the stack. +// Get address for result on stack. +// +.body +{ .mib + stfe [GR_Parameter_X] = FR_Norm_X + add GR_Parameter_RESULT = 0,GR_Parameter_Y + nop.b 0 +} +{ .mib + stfe [GR_Parameter_Y] = FR_Result + add GR_Parameter_Y = -16,GR_Parameter_Y + br.call.sptk b0=__libm_error_support# +};; + +// +// Get location of result on stack +// +{ .mmi + nop.m 0 + nop.m 0 + add GR_Parameter_RESULT = 48,sp +};; + +// +// Get the new result +// +{ .mmi + ldfe FR_Result = [GR_Parameter_RESULT] +.restore sp + add sp = 64,sp + mov b0 = GR_SAVE_B0 +};; + +// +// Restore gp, ar.pfs and return +// +{ .mib + mov gp = GR_SAVE_GP + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +};; + +.endp __libm_error_region +ASM_SIZE_DIRECTIVE(__libm_error_region) + +.type __libm_error_support#,@function +.global __libm_error_support# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_significand.S glibc-2.2.3/sysdeps/ia64/fpu/s_significand.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_significand.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_significand.S Mon Feb 19 01:03:19 2001 @@ -0,0 +1,147 @@ +.file "significand.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00 Unwind support added +// 5/31/00: Fixed bug when x a double-extended denormal +// +// API +//============================================================== +// double significand(double x) +// +// Overview of operation +//============================================================== +// If x = sig * 2**n with 1 <= sig < 2 +// significand returns sig +// +// predicate registers used: +// p6, p7 +// +// floating-point registers used: +// f8, f9, f10 + +#include "libm_support.h" + +.align 32 +.global significand# + +.section .text +.proc significand# +.align 32 + +significand: + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 + +// f10 gets f8(sign) with f1(exp,significand) +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8,f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnorm f9 = f8 + nop.i 999 ;; +} + +// Test for denormal input +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f8, 0x0b + nop.i 999 ;; +} + +// p6 = TRUE ==> x is not (nan,inf,0) +// return sign(f8) exp(f1) significand(f8) +// else x is (nan,inf,0) +// return sign(f8) exp(f8) significand(f8), normalized. +{ .mfi + nop.m 999 +(p0) fclass.m.unc p0,p6 = f8, 0xe7 + nop.i 999 ;; +} + +{ .mmb + nop.m 999 + nop.m 999 +(p7) br.cond.spnt L(SIGNIFICAND_DENORM) ;; // Branch if x denormal +} + +{ .mfi + nop.m 999 +(p6) fmerge.se f8 = f10,f8 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm.d f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +L(SIGNIFICAND_DENORM): +// Here if x denorm +{ .mfi + nop.m 999 +(p0) fmerge.se f8 = f10,f9 + nop.i 999 ;; +} + +// Check if fnorm(x) still denormal, means x double-extended denormal +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x0b + nop.i 999 ;; +} + +// This will be the final result unless x double-extended denormal +{ .mfi + nop.m 999 +(p0) fnorm.d f8 = f8 + nop.i 999 ;; +} + +// If x double-extended denorm, then significand ok, but must merge in +// correct signexp +{ .mfi + nop.m 999 +(p7) fmerge.se f8 = f10,f8 + nop.i 999 ;; +} + +// Final normalization if x double-extended denorm +{ .mfb + nop.m 999 +(p7) fnorm.d f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +.endp significand +ASM_SIZE_DIRECTIVE(significand) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_significandf.S glibc-2.2.3/sysdeps/ia64/fpu/s_significandf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_significandf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_significandf.S Mon Feb 19 01:03:26 2001 @@ -0,0 +1,146 @@ +.file "significandf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 2/03/00: Modified to improve speed +// 5/31/00: Fixed bug when x a double-extended denormal +// +// API +//============================================================== +// float significandf(float x) +// Overview of operation +//============================================================== +// If x = sig * 2**n with 1 <= sig < 2 +// significandf returns sig +// +// predicate registers used: +// p6, p7 +// +// floating-point registers used: +// f8, f9, f10 + +#include "libm_support.h" + +.align 32 +.global significandf# + +.section .text +.proc significandf# +.align 32 + +significandf: + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 + +// f10 gets f8(sign) with f1(exp,significand) +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8,f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnorm f9 = f8 + nop.i 999 ;; +} + +// Test for denormal input +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f8, 0x0b + nop.i 999 ;; +} + +// p6 = TRUE ==> x is not (nan,inf,0) +// return sign(f8) exp(f1) significand(f8) +// else x is (nan,inf,0) +// return sign(f8) exp(f8) significand(f8), normalized. +{ .mfi + nop.m 999 +(p0) fclass.m.unc p0,p6 = f8, 0xe7 + nop.i 999 ;; +} + +{ .mmb + nop.m 999 + nop.m 999 +(p7) br.cond.spnt L(SIGNIFICAND_DENORM) ;; // Branch if x denormal +} + +{ .mfi + nop.m 999 +(p6) fmerge.se f8 = f10,f8 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm.s f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +L(SIGNIFICAND_DENORM): +// Here if x denorm +{ .mfi + nop.m 999 +(p0) fmerge.se f8 = f10,f9 + nop.i 999 ;; +} + +// Check if fnorm(x) still denormal, means x double-extended denormal +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x0b + nop.i 999 ;; +} + +// This will be the final result unless x double-extended denormal +{ .mfi + nop.m 999 +(p0) fnorm.s f8 = f8 + nop.i 999 ;; +} + +// If x double-extended denorm, then significand ok, but must merge in +// correct signexp +{ .mfi + nop.m 999 +(p7) fmerge.se f8 = f10,f8 + nop.i 999 ;; +} + +// Final normalization if x double-extended denorm +{ .mfb + nop.m 999 +(p7) fnorm.s f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +.endp significandf +ASM_SIZE_DIRECTIVE(significandf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_significandl.S glibc-2.2.3/sysdeps/ia64/fpu/s_significandl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_significandl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_significandl.S Mon Feb 19 01:03:34 2001 @@ -0,0 +1,147 @@ +.file "significandl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 2/03/00: Modified to improve speed +// 5/31/00: Fixed bug when x a double-extended denormal +// +// API +//============================================================== +// long double significandl(long double x) +// +// Overview of operation +//============================================================== +// If x = sig * 2**n with 1 <= sig < 2 +// significandl returns sig +// +// predicate registers used: +// p6, p7 +// +// floating-point registers used: +// f8, f9, f10 + +#include "libm_support.h" + +.align 32 +.global significandl# + +.section .text +.proc significandl# +.align 32 + +significandl: + +// qnan snan inf norm unorm 0 -+ +// 1 1 1 0 0 1 11 + +// f10 gets f8(sign) with f1(exp,significand) +{ .mfi + nop.m 999 +(p0) fmerge.s f10 = f8,f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnorm f9 = f8 + nop.i 999 ;; +} + +// Test for denormal input +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f8, 0x0b + nop.i 999 ;; +} + +// p6 = TRUE ==> x is not (nan,inf,0) +// return sign(f8) exp(f1) significand(f8) +// else x is (nan,inf,0) +// return sign(f8) exp(f8) significand(f8), normalized. +{ .mfi + nop.m 999 +(p0) fclass.m.unc p0,p6 = f8, 0xe7 + nop.i 999 ;; +} + +{ .mmb + nop.m 999 + nop.m 999 +(p7) br.cond.spnt L(SIGNIFICAND_DENORM) ;; // Branch if x denormal +} + +{ .mfi + nop.m 999 +(p6) fmerge.se f8 = f10,f8 + nop.i 999 ;; +} + +{ .mfb + nop.m 999 +(p0) fnorm f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +L(SIGNIFICAND_DENORM): +// Here if x denorm +{ .mfi + nop.m 999 +(p0) fmerge.se f8 = f10,f9 + nop.i 999 ;; +} + +// Check if fnorm(x) still denormal, means x double-extended denormal +{ .mfi + nop.m 999 +(p0) fclass.m.unc p7,p0 = f9, 0x0b + nop.i 999 ;; +} + +// This will be the final result unless x double-extended denormal +{ .mfi + nop.m 999 +(p0) fnorm f8 = f8 + nop.i 999 ;; +} + +// If x double-extended denorm, then significand ok, but must merge in +// correct signexp +{ .mfi + nop.m 999 +(p7) fmerge.se f8 = f10,f8 + nop.i 999 ;; +} + +// Final normalization if x double-extended denorm +{ .mfb + nop.m 999 +(p7) fnorm f8 = f8 +(p0) br.ret.sptk b0 ;; +} + +.endp significandl +ASM_SIZE_DIRECTIVE(significandl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_sin.c glibc-2.2.3/sysdeps/ia64/fpu/s_sin.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_sin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_sin.c Mon Feb 19 01:03:41 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_sincos.c glibc-2.2.3/sysdeps/ia64/fpu/s_sincos.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_sincos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_sincos.c Mon Feb 19 01:03:50 2001 @@ -0,0 +1,9 @@ +#include + +void +__sincos (double x, double *s, double *c) +{ + *s = sin (x); + *c = cos (x); +} +weak_alias (__sincos, sincos) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_sincosf.c glibc-2.2.3/sysdeps/ia64/fpu/s_sincosf.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_sincosf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_sincosf.c Mon Feb 19 01:03:58 2001 @@ -0,0 +1,9 @@ +#include + +void +__sincosf (float x, float *s, float *c) +{ + *s = sinf (x); + *c = cosf (x); +} +weak_alias (__sincosf, sincosf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_sincosl.c glibc-2.2.3/sysdeps/ia64/fpu/s_sincosl.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_sincosl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_sincosl.c Mon Feb 19 01:04:06 2001 @@ -0,0 +1,9 @@ +#include + +void +__sincosl (long double x, long double *s, long double *c) +{ + *s = sinl (x); + *c = cosl (x); +} +weak_alias (__sincosl, sincosl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_sinf.c glibc-2.2.3/sysdeps/ia64/fpu/s_sinf.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_sinf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_sinf.c Mon Feb 19 01:04:13 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_sinl.c glibc-2.2.3/sysdeps/ia64/fpu/s_sinl.c --- glibc-2.2.2/sysdeps/ia64/fpu/s_sinl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_sinl.c Mon Feb 19 01:04:20 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_tan.S glibc-2.2.3/sysdeps/ia64/fpu/s_tan.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_tan.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_tan.S Mon Feb 19 01:04:29 2001 @@ -0,0 +1,757 @@ +.file "tan.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00 Unwind support added +// 12/27/00 Improved speed +// +// API +//============================================================== +// double tan( double x); +// +// Overview of operation +//============================================================== +// If the input value in radians is |x| >= 1.xxxxx 2^10 call the +// older slower version. +// +// The new algorithm is used when |x| <= 1.xxxxx 2^9. +// +// Represent the input X as Nfloat * pi/2 + r +// where r can be negative and |r| <= pi/4 +// +// tan_W = x * 2/pi +// Nfloat = round_int(tan_W) +// +// tan_r = x - Nfloat * (pi/2)_hi +// tan_r = tan_r - Nfloat * (pi/2)_lo +// +// We have two paths: p8, when Nfloat is even and p9. when Nfloat is odd. +// p8: tan(X) = tan(r) +// p9: tan(X) = -cot(r) +// +// Each is evaluated as a series. The p9 path requires 1/r. +// +// The coefficients used in the series are stored in a table as +// are the pi constants. +// +// Registers used +//============================================================== +// +// predicate registers used: +// p6-10 +// +// floating-point registers used: +// f10-15, f32-105 +// f8, input +// +// general registers used +// r14-18, r32-43 +// + +#include "libm_support.h" + +// Assembly macros +//============================================================== +TAN_INV_PI_BY_2_2TO64 = f10 +TAN_RSHF_2TO64 = f11 +TAN_2TOM64 = f12 +TAN_RSHF = f13 +TAN_W_2TO64_RSH = f14 +TAN_NFLOAT = f15 + +tan_Inv_Pi_by_2 = f32 +tan_Pi_by_2_hi = f33 +tan_Pi_by_2_lo = f34 + + +tan_P0 = f35 +tan_P1 = f36 +tan_P2 = f37 +tan_P3 = f38 +tan_P4 = f39 +tan_P5 = f40 +tan_P6 = f41 +tan_P7 = f42 +tan_P8 = f43 +tan_P9 = f44 +tan_P10 = f45 +tan_P11 = f46 +tan_P12 = f47 +tan_P13 = f48 +tan_P14 = f49 +tan_P15 = f50 + +tan_Q0 = f51 +tan_Q1 = f52 +tan_Q2 = f53 +tan_Q3 = f54 +tan_Q4 = f55 +tan_Q5 = f56 +tan_Q6 = f57 +tan_Q7 = f58 +tan_Q8 = f59 +tan_Q9 = f60 +tan_Q10 = f61 + +tan_r = f62 +tan_rsq = f63 +tan_rcube = f64 + +tan_v18 = f65 +tan_v16 = f66 +tan_v17 = f67 +tan_v12 = f68 +tan_v13 = f69 +tan_v7 = f70 +tan_v8 = f71 +tan_v4 = f72 +tan_v5 = f73 +tan_v15 = f74 +tan_v11 = f75 +tan_v14 = f76 +tan_v3 = f77 +tan_v6 = f78 +tan_v10 = f79 +tan_v2 = f80 +tan_v9 = f81 +tan_v1 = f82 +tan_int_Nfloat = f83 +tan_Nfloat = f84 + +tan_NORM_f8 = f85 +tan_W = f86 + +tan_y0 = f87 +tan_d = f88 +tan_y1 = f89 +tan_dsq = f90 +tan_y2 = f91 +tan_d4 = f92 +tan_inv_r = f93 + +tan_z1 = f94 +tan_z2 = f95 +tan_z3 = f96 +tan_z4 = f97 +tan_z5 = f98 +tan_z6 = f99 +tan_z7 = f100 +tan_z8 = f101 +tan_z9 = f102 +tan_z10 = f103 +tan_z11 = f104 +tan_z12 = f105 + + +///////////////////////////////////////////////////////////// + +tan_GR_sig_inv_pi_by_2 = r14 +tan_GR_rshf_2to64 = r15 +tan_GR_exp_2tom64 = r16 +tan_GR_n = r17 +tan_GR_rshf = r18 + +tan_AD = r33 +tan_GR_10009 = r34 +tan_GR_17_ones = r35 +tan_GR_N_odd_even = r36 +tan_GR_N = r37 +tan_signexp = r38 +tan_exp = r39 +tan_ADQ = r40 + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +double_tan_constants: +ASM_TYPE_DIRECTIVE(double_tan_constants,@object) +// data8 0xA2F9836E4E44152A, 0x00003FFE // 2/pi + data8 0xC90FDAA22168C234, 0x00003FFF // pi/2 hi + + data8 0xBEEA54580DDEA0E1 // P14 + data8 0x3ED3021ACE749A59 // P15 + data8 0xBEF312BD91DC8DA1 // P12 + data8 0x3EFAE9AFC14C5119 // P13 + data8 0x3F2F342BF411E769 // P8 + data8 0x3F1A60FC9F3B0227 // P9 + data8 0x3EFF246E78E5E45B // P10 + data8 0x3F01D9D2E782875C // P11 + data8 0x3F8226E34C4499B6 // P4 + data8 0x3F6D6D3F12C236AC // P5 + data8 0x3F57DA1146DCFD8B // P6 + data8 0x3F43576410FE3D75 // P7 + data8 0x3FD5555555555555 // P0 + data8 0x3FC11111111111C2 // P1 + data8 0x3FABA1BA1BA0E850 // P2 + data8 0x3F9664F4886725A7 // P3 +ASM_SIZE_DIRECTIVE(double_tan_constants) + +double_Q_tan_constants: +ASM_TYPE_DIRECTIVE(double_Q_tan_constants,@object) + data8 0xC4C6628B80DC1CD1, 0x00003FBF // pi/2 lo + data8 0x3E223A73BA576E48 // Q8 + data8 0x3DF54AD8D1F2CA43 // Q9 + data8 0x3EF66A8EE529A6AA // Q4 + data8 0x3EC2281050410EE6 // Q5 + data8 0x3E8D6BB992CC3CF5 // Q6 + data8 0x3E57F88DE34832E4 // Q7 + data8 0x3FD5555555555555 // Q0 + data8 0x3F96C16C16C16DB8 // Q1 + data8 0x3F61566ABBFFB489 // Q2 + data8 0x3F2BBD77945C1733 // Q3 + data8 0x3D927FB33E2B0E04 // Q10 +ASM_SIZE_DIRECTIVE(double_Q_tan_constants) + + + +.align 32 +.global tan# +#ifdef _LIBC +.global __tan# +#endif + +//////////////////////////////////////////////////////// + + + +.section .text +.proc tan# +#ifdef _LIBC +.proc __tan# +#endif +.align 32 +tan: +#ifdef _LIBC +__tan: +#endif +// The initial fnorm will take any unmasked faults and +// normalize any single/double unorms + +{ .mlx + alloc r32=ar.pfs,1,11,0,0 + movl tan_GR_sig_inv_pi_by_2 = 0xA2F9836E4E44152A // significand of 2/pi +} +{ .mlx + addl tan_AD = @ltoff(double_tan_constants), gp + movl tan_GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+63+1) +} +;; + +{ .mfi + ld8 tan_AD = [tan_AD] + fnorm tan_NORM_f8 = f8 + mov tan_GR_exp_2tom64 = 0xffff-64 // exponent of scaling factor 2^-64 +} +{ .mlx + nop.m 999 + movl tan_GR_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift +} +;; + + +// Form two constants we need +// 2/pi * 2^1 * 2^63, scaled by 2^64 since we just loaded the significand +// 1.1000...000 * 2^(63+63+1) to right shift int(W) into the significand +{ .mmi + setf.sig TAN_INV_PI_BY_2_2TO64 = tan_GR_sig_inv_pi_by_2 + setf.d TAN_RSHF_2TO64 = tan_GR_rshf_2to64 + mov tan_GR_17_ones = 0x1ffff ;; +} + + +// Form another constant +// 2^-64 for scaling Nfloat +// 1.1000...000 * 2^63, the right shift constant +{ .mmf + setf.exp TAN_2TOM64 = tan_GR_exp_2tom64 + adds tan_ADQ = double_Q_tan_constants - double_tan_constants, tan_AD + fclass.m.unc p6,p0 = f8, 0x07 // Test for x=0 +} +;; + + +// Form another constant +// 2^-64 for scaling Nfloat +// 1.1000...000 * 2^63, the right shift constant +{ .mmf + setf.d TAN_RSHF = tan_GR_rshf + ldfe tan_Pi_by_2_hi = [tan_AD],16 + fclass.m.unc p7,p0 = f8, 0x23 // Test for x=inf +} +;; + +{ .mfb + ldfe tan_Pi_by_2_lo = [tan_ADQ],16 + fclass.m.unc p8,p0 = f8, 0xc3 // Test for x=nan +(p6) br.ret.spnt b0 ;; // Exit for x=0 +} + +{ .mfi + ldfpd tan_P14,tan_P15 = [tan_AD],16 +(p7) frcpa.s0 f8,p9=f0,f0 // Set qnan indef if x=inf + mov tan_GR_10009 = 0x10009 +} +{ .mib + ldfpd tan_Q8,tan_Q9 = [tan_ADQ],16 + nop.i 999 +(p7) br.ret.spnt b0 ;; // Exit for x=inf +} + +{ .mfi + ldfpd tan_P12,tan_P13 = [tan_AD],16 +(p8) fma.d f8=f8,f1,f8 // Set qnan if x=nan + nop.i 999 +} +{ .mib + ldfpd tan_Q4,tan_Q5 = [tan_ADQ],16 + nop.i 999 +(p8) br.ret.spnt b0 ;; // Exit for x=nan +} + +{ .mmi + getf.exp tan_signexp = tan_NORM_f8 + ldfpd tan_P8,tan_P9 = [tan_AD],16 + nop.i 999 ;; +} + +// Multiply x by scaled 2/pi and add large const to shift integer part of W to +// rightmost bits of significand +{ .mfi + ldfpd tan_Q6,tan_Q7 = [tan_ADQ],16 + fma.s1 TAN_W_2TO64_RSH = tan_NORM_f8,TAN_INV_PI_BY_2_2TO64,TAN_RSHF_2TO64 + nop.i 999 ;; +} + +{ .mmi + ldfpd tan_P10,tan_P11 = [tan_AD],16 + nop.m 999 + and tan_exp = tan_GR_17_ones, tan_signexp ;; +} + + +// p7 is true if we must call DBX TAN +// p7 is true if f8 exp is > 0x10009 (which includes all ones +// NAN or inf) +{ .mmi + ldfpd tan_Q0,tan_Q1 = [tan_ADQ],16 + cmp.ge.unc p7,p0 = tan_exp,tan_GR_10009 + nop.i 999 ;; +} + + +{ .mmb + ldfpd tan_P4,tan_P5 = [tan_AD],16 + nop.m 999 +(p7) br.cond.spnt L(TAN_DBX) ;; +} + + +{ .mmi + ldfpd tan_Q2,tan_Q3 = [tan_ADQ],16 + nop.m 999 + nop.i 999 ;; +} + + + +// TAN_NFLOAT = Round_Int_Nearest(tan_W) +{ .mfi + ldfpd tan_P6,tan_P7 = [tan_AD],16 + fms.s1 TAN_NFLOAT = TAN_W_2TO64_RSH,TAN_2TOM64,TAN_RSHF + nop.i 999 ;; +} + + +{ .mfi + ldfd tan_Q10 = [tan_ADQ] + nop.f 999 + nop.i 999 ;; +} + + +{ .mfi + ldfpd tan_P0,tan_P1 = [tan_AD],16 + nop.f 999 + nop.i 999 ;; +} + + +{ .mfi + getf.sig tan_GR_n = TAN_W_2TO64_RSH + nop.f 999 + nop.i 999 ;; +} + +// tan_r = -tan_Nfloat * tan_Pi_by_2_hi + x +{ .mfi + ldfpd tan_P2,tan_P3 = [tan_AD] + fnma.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_hi, tan_NORM_f8 + nop.i 999 ;; +} + + +// p8 ==> even +// p9 ==> odd +{ .mmi + and tan_GR_N_odd_even = 0x1, tan_GR_n ;; + nop.m 999 + cmp.eq.unc p8,p9 = tan_GR_N_odd_even, r0 ;; +} + + +// tan_r = tan_r -tan_Nfloat * tan_Pi_by_2_lo +{ .mfi + nop.m 999 + fnma.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_lo, tan_r + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 tan_rsq = tan_r, tan_r, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) frcpa.s1 tan_y0, p10 = f1,tan_r + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v18 = tan_rsq, tan_P15, tan_P14 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v4 = tan_rsq, tan_P1, tan_P0 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v16 = tan_rsq, tan_P13, tan_P12 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v17 = tan_rsq, tan_rsq, f0 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v12 = tan_rsq, tan_P9, tan_P8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v13 = tan_rsq, tan_P11, tan_P10 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v7 = tan_rsq, tan_P5, tan_P4 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v8 = tan_rsq, tan_P7, tan_P6 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fnma.s1 tan_d = tan_r, tan_y0, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v5 = tan_rsq, tan_P3, tan_P2 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z11 = tan_rsq, tan_Q9, tan_Q8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z12 = tan_rsq, tan_rsq, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v15 = tan_v17, tan_v18, tan_v16 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z7 = tan_rsq, tan_Q5, tan_Q4 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v11 = tan_v17, tan_v13, tan_v12 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z8 = tan_rsq, tan_Q7, tan_Q6 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v14 = tan_v17, tan_v17, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z3 = tan_rsq, tan_Q1, tan_Q0 + nop.i 999 ;; +} + + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v3 = tan_v17, tan_v5, tan_v4 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v6 = tan_v17, tan_v8, tan_v7 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_y1 = tan_y0, tan_d, tan_y0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_dsq = tan_d, tan_d, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z10 = tan_z12, tan_Q10, tan_z11 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z9 = tan_z12, tan_z12,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z4 = tan_rsq, tan_Q3, tan_Q2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z6 = tan_z12, tan_z8, tan_z7 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v10 = tan_v14, tan_v15, tan_v11 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_y2 = tan_y1, tan_d, tan_y0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_d4 = tan_dsq, tan_dsq, tan_d + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v2 = tan_v14, tan_v6, tan_v3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v9 = tan_v14, tan_v14, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z2 = tan_z12, tan_z4, tan_z3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z5 = tan_z9, tan_z10, tan_z6 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_inv_r = tan_d4, tan_y2, tan_y0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_rcube = tan_rsq, tan_r, f0 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v1 = tan_v9, tan_v10, tan_v2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z1 = tan_z9, tan_z5, tan_z2 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.d.s0 f8 = tan_v1, tan_rcube, tan_r + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fms.d.s0 f8 = tan_r, tan_z1, tan_inv_r + br.ret.sptk b0 ;; +} +.endp tan# +ASM_SIZE_DIRECTIVE(tan) + + +.proc __libm_callout +__libm_callout: +L(TAN_DBX): +.prologue + +{ .mfi + nop.m 0 + fmerge.s f9 = f0,f0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mfb + nop.m 999 + nop.f 999 + br.call.sptk.many b0=__libm_tan# ;; +} + + +{ .mfi + mov gp = GR_SAVE_GP + fnorm.d f8 = f8 + mov b0 = GR_SAVE_B0 +} +;; + + +{ .mib + nop.m 999 + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +;; +} + + +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) + +.type __libm_tan#,@function +.global __libm_tan# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_tanf.S glibc-2.2.3/sysdeps/ia64/fpu/s_tanf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_tanf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_tanf.S Mon Feb 19 01:04:37 2001 @@ -0,0 +1,757 @@ +.file "tanf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// History +//============================================================== +// 2/02/00: Initial version +// 4/04/00 Unwind support added +// 12/27/00 Improved speed +// +// API +//============================================================== +// float tan( float x); +// +// Overview of operation +//============================================================== +// If the input value in radians is |x| >= 1.xxxxx 2^10 call the +// older slower version. +// +// The new algorithm is used when |x| <= 1.xxxxx 2^9. +// +// Represent the input X as Nfloat * pi/2 + r +// where r can be negative and |r| <= pi/4 +// +// tan_W = x * 2/pi +// Nfloat = round_int(tan_W) +// +// tan_r = x - Nfloat * (pi/2)_hi +// tan_r = tan_r - Nfloat * (pi/2)_lo +// +// We have two paths: p8, when Nfloat is even and p9. when Nfloat is odd. +// p8: tan(X) = tan(r) +// p9: tan(X) = -cot(r) +// +// Each is evaluated as a series. The p9 path requires 1/r. +// +// The coefficients used in the series are stored in a table as +// are the pi constants. +// +// Registers used +//============================================================== +// +// predicate registers used: +// p6-10 +// +// floating-point registers used: +// f10-15, f32-105 +// f8, input +// +// general registers used +// r14-18, r32-43 +// + +#include "libm_support.h" + +// Assembly macros +//============================================================== +TAN_INV_PI_BY_2_2TO64 = f10 +TAN_RSHF_2TO64 = f11 +TAN_2TOM64 = f12 +TAN_RSHF = f13 +TAN_W_2TO64_RSH = f14 +TAN_NFLOAT = f15 + +tan_Inv_Pi_by_2 = f32 +tan_Pi_by_2_hi = f33 +tan_Pi_by_2_lo = f34 + + +tan_P0 = f35 +tan_P1 = f36 +tan_P2 = f37 +tan_P3 = f38 +tan_P4 = f39 +tan_P5 = f40 +tan_P6 = f41 +tan_P7 = f42 +tan_P8 = f43 +tan_P9 = f44 +tan_P10 = f45 +tan_P11 = f46 +tan_P12 = f47 +tan_P13 = f48 +tan_P14 = f49 +tan_P15 = f50 + +tan_Q0 = f51 +tan_Q1 = f52 +tan_Q2 = f53 +tan_Q3 = f54 +tan_Q4 = f55 +tan_Q5 = f56 +tan_Q6 = f57 +tan_Q7 = f58 +tan_Q8 = f59 +tan_Q9 = f60 +tan_Q10 = f61 + +tan_r = f62 +tan_rsq = f63 +tan_rcube = f64 + +tan_v18 = f65 +tan_v16 = f66 +tan_v17 = f67 +tan_v12 = f68 +tan_v13 = f69 +tan_v7 = f70 +tan_v8 = f71 +tan_v4 = f72 +tan_v5 = f73 +tan_v15 = f74 +tan_v11 = f75 +tan_v14 = f76 +tan_v3 = f77 +tan_v6 = f78 +tan_v10 = f79 +tan_v2 = f80 +tan_v9 = f81 +tan_v1 = f82 +tan_int_Nfloat = f83 +tan_Nfloat = f84 + +tan_NORM_f8 = f85 +tan_W = f86 + +tan_y0 = f87 +tan_d = f88 +tan_y1 = f89 +tan_dsq = f90 +tan_y2 = f91 +tan_d4 = f92 +tan_inv_r = f93 + +tan_z1 = f94 +tan_z2 = f95 +tan_z3 = f96 +tan_z4 = f97 +tan_z5 = f98 +tan_z6 = f99 +tan_z7 = f100 +tan_z8 = f101 +tan_z9 = f102 +tan_z10 = f103 +tan_z11 = f104 +tan_z12 = f105 + + +///////////////////////////////////////////////////////////// + +tan_GR_sig_inv_pi_by_2 = r14 +tan_GR_rshf_2to64 = r15 +tan_GR_exp_2tom64 = r16 +tan_GR_n = r17 +tan_GR_rshf = r18 + +tan_AD = r33 +tan_GR_10009 = r34 +tan_GR_17_ones = r35 +tan_GR_N_odd_even = r36 +tan_GR_N = r37 +tan_signexp = r38 +tan_exp = r39 +tan_ADQ = r40 + +GR_SAVE_PFS = r41 +GR_SAVE_B0 = r42 +GR_SAVE_GP = r43 + + +#ifdef _LIBC +.rodata +#else +.data +#endif + +.align 16 + +double_tan_constants: +ASM_TYPE_DIRECTIVE(double_tan_constants,@object) +// data8 0xA2F9836E4E44152A, 0x00003FFE // 2/pi + data8 0xC90FDAA22168C234, 0x00003FFF // pi/2 hi + + data8 0xBEEA54580DDEA0E1 // P14 + data8 0x3ED3021ACE749A59 // P15 + data8 0xBEF312BD91DC8DA1 // P12 + data8 0x3EFAE9AFC14C5119 // P13 + data8 0x3F2F342BF411E769 // P8 + data8 0x3F1A60FC9F3B0227 // P9 + data8 0x3EFF246E78E5E45B // P10 + data8 0x3F01D9D2E782875C // P11 + data8 0x3F8226E34C4499B6 // P4 + data8 0x3F6D6D3F12C236AC // P5 + data8 0x3F57DA1146DCFD8B // P6 + data8 0x3F43576410FE3D75 // P7 + data8 0x3FD5555555555555 // P0 + data8 0x3FC11111111111C2 // P1 + data8 0x3FABA1BA1BA0E850 // P2 + data8 0x3F9664F4886725A7 // P3 +ASM_SIZE_DIRECTIVE(double_tan_constants) + +double_Q_tan_constants: +ASM_TYPE_DIRECTIVE(double_Q_tan_constants,@object) + data8 0xC4C6628B80DC1CD1, 0x00003FBF // pi/2 lo + data8 0x3E223A73BA576E48 // Q8 + data8 0x3DF54AD8D1F2CA43 // Q9 + data8 0x3EF66A8EE529A6AA // Q4 + data8 0x3EC2281050410EE6 // Q5 + data8 0x3E8D6BB992CC3CF5 // Q6 + data8 0x3E57F88DE34832E4 // Q7 + data8 0x3FD5555555555555 // Q0 + data8 0x3F96C16C16C16DB8 // Q1 + data8 0x3F61566ABBFFB489 // Q2 + data8 0x3F2BBD77945C1733 // Q3 + data8 0x3D927FB33E2B0E04 // Q10 +ASM_SIZE_DIRECTIVE(double_Q_tan_constants) + + + +.align 32 +.global tanf# +#ifdef _LIBC +.global __tanf# +#endif + +//////////////////////////////////////////////////////// + + + +.section .text +.proc tanf# +#ifdef _LIBC +.proc __tanf# +#endif +.align 32 +tanf: +#ifdef _LIBC +__tanf: +#endif +// The initial fnorm will take any unmasked faults and +// normalize any single/double unorms + +{ .mlx + alloc r32=ar.pfs,1,11,0,0 + movl tan_GR_sig_inv_pi_by_2 = 0xA2F9836E4E44152A // significand of 2/pi +} +{ .mlx + addl tan_AD = @ltoff(double_tan_constants), gp + movl tan_GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+63+1) +} +;; + +{ .mfi + ld8 tan_AD = [tan_AD] + fnorm tan_NORM_f8 = f8 + mov tan_GR_exp_2tom64 = 0xffff-64 // exponent of scaling factor 2^-64 +} +{ .mlx + nop.m 999 + movl tan_GR_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift +} +;; + + +// Form two constants we need +// 2/pi * 2^1 * 2^63, scaled by 2^64 since we just loaded the significand +// 1.1000...000 * 2^(63+63+1) to right shift int(W) into the significand +{ .mmi + setf.sig TAN_INV_PI_BY_2_2TO64 = tan_GR_sig_inv_pi_by_2 + setf.d TAN_RSHF_2TO64 = tan_GR_rshf_2to64 + mov tan_GR_17_ones = 0x1ffff ;; +} + + +// Form another constant +// 2^-64 for scaling Nfloat +// 1.1000...000 * 2^63, the right shift constant +{ .mmf + setf.exp TAN_2TOM64 = tan_GR_exp_2tom64 + adds tan_ADQ = double_Q_tan_constants - double_tan_constants, tan_AD + fclass.m.unc p6,p0 = f8, 0x07 // Test for x=0 +} +;; + + +// Form another constant +// 2^-64 for scaling Nfloat +// 1.1000...000 * 2^63, the right shift constant +{ .mmf + setf.d TAN_RSHF = tan_GR_rshf + ldfe tan_Pi_by_2_hi = [tan_AD],16 + fclass.m.unc p7,p0 = f8, 0x23 // Test for x=inf +} +;; + +{ .mfb + ldfe tan_Pi_by_2_lo = [tan_ADQ],16 + fclass.m.unc p8,p0 = f8, 0xc3 // Test for x=nan +(p6) br.ret.spnt b0 ;; // Exit for x=0 +} + +{ .mfi + ldfpd tan_P14,tan_P15 = [tan_AD],16 +(p7) frcpa.s0 f8,p9=f0,f0 // Set qnan indef if x=inf + mov tan_GR_10009 = 0x10009 +} +{ .mib + ldfpd tan_Q8,tan_Q9 = [tan_ADQ],16 + nop.i 999 +(p7) br.ret.spnt b0 ;; // Exit for x=inf +} + +{ .mfi + ldfpd tan_P12,tan_P13 = [tan_AD],16 +(p8) fma.s f8=f8,f1,f8 // Set qnan if x=nan + nop.i 999 +} +{ .mib + ldfpd tan_Q4,tan_Q5 = [tan_ADQ],16 + nop.i 999 +(p8) br.ret.spnt b0 ;; // Exit for x=nan +} + +{ .mmi + getf.exp tan_signexp = tan_NORM_f8 + ldfpd tan_P8,tan_P9 = [tan_AD],16 + nop.i 999 ;; +} + +// Multiply x by scaled 2/pi and add large const to shift integer part of W to +// rightmost bits of significand +{ .mfi + ldfpd tan_Q6,tan_Q7 = [tan_ADQ],16 + fma.s1 TAN_W_2TO64_RSH = tan_NORM_f8,TAN_INV_PI_BY_2_2TO64,TAN_RSHF_2TO64 + nop.i 999 ;; +} + +{ .mmi + ldfpd tan_P10,tan_P11 = [tan_AD],16 + nop.m 999 + and tan_exp = tan_GR_17_ones, tan_signexp ;; +} + + +// p7 is true if we must call DBX TAN +// p7 is true if f8 exp is > 0x10009 (which includes all ones +// NAN or inf) +{ .mmi + ldfpd tan_Q0,tan_Q1 = [tan_ADQ],16 + cmp.ge.unc p7,p0 = tan_exp,tan_GR_10009 + nop.i 999 ;; +} + + +{ .mmb + ldfpd tan_P4,tan_P5 = [tan_AD],16 + nop.m 999 +(p7) br.cond.spnt L(TAN_DBX) ;; +} + + +{ .mmi + ldfpd tan_Q2,tan_Q3 = [tan_ADQ],16 + nop.m 999 + nop.i 999 ;; +} + + + +// TAN_NFLOAT = Round_Int_Nearest(tan_W) +{ .mfi + ldfpd tan_P6,tan_P7 = [tan_AD],16 + fms.s1 TAN_NFLOAT = TAN_W_2TO64_RSH,TAN_2TOM64,TAN_RSHF + nop.i 999 ;; +} + + +{ .mfi + ldfd tan_Q10 = [tan_ADQ] + nop.f 999 + nop.i 999 ;; +} + + +{ .mfi + ldfpd tan_P0,tan_P1 = [tan_AD],16 + nop.f 999 + nop.i 999 ;; +} + + +{ .mfi + getf.sig tan_GR_n = TAN_W_2TO64_RSH + nop.f 999 + nop.i 999 ;; +} + +// tan_r = -tan_Nfloat * tan_Pi_by_2_hi + x +{ .mfi + ldfpd tan_P2,tan_P3 = [tan_AD] + fnma.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_hi, tan_NORM_f8 + nop.i 999 ;; +} + + +// p8 ==> even +// p9 ==> odd +{ .mmi + and tan_GR_N_odd_even = 0x1, tan_GR_n ;; + nop.m 999 + cmp.eq.unc p8,p9 = tan_GR_N_odd_even, r0 ;; +} + + +// tan_r = tan_r -tan_Nfloat * tan_Pi_by_2_lo +{ .mfi + nop.m 999 + fnma.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_lo, tan_r + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 + fma.s1 tan_rsq = tan_r, tan_r, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) frcpa.s1 tan_y0, p10 = f1,tan_r + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v18 = tan_rsq, tan_P15, tan_P14 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v4 = tan_rsq, tan_P1, tan_P0 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v16 = tan_rsq, tan_P13, tan_P12 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v17 = tan_rsq, tan_rsq, f0 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v12 = tan_rsq, tan_P9, tan_P8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v13 = tan_rsq, tan_P11, tan_P10 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v7 = tan_rsq, tan_P5, tan_P4 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v8 = tan_rsq, tan_P7, tan_P6 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fnma.s1 tan_d = tan_r, tan_y0, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v5 = tan_rsq, tan_P3, tan_P2 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z11 = tan_rsq, tan_Q9, tan_Q8 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z12 = tan_rsq, tan_rsq, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v15 = tan_v17, tan_v18, tan_v16 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z7 = tan_rsq, tan_Q5, tan_Q4 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v11 = tan_v17, tan_v13, tan_v12 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z8 = tan_rsq, tan_Q7, tan_Q6 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v14 = tan_v17, tan_v17, f0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z3 = tan_rsq, tan_Q1, tan_Q0 + nop.i 999 ;; +} + + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v3 = tan_v17, tan_v5, tan_v4 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v6 = tan_v17, tan_v8, tan_v7 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_y1 = tan_y0, tan_d, tan_y0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_dsq = tan_d, tan_d, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z10 = tan_z12, tan_Q10, tan_z11 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z9 = tan_z12, tan_z12,f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z4 = tan_rsq, tan_Q3, tan_Q2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z6 = tan_z12, tan_z8, tan_z7 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v10 = tan_v14, tan_v15, tan_v11 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_y2 = tan_y1, tan_d, tan_y0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_d4 = tan_dsq, tan_dsq, tan_d + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v2 = tan_v14, tan_v6, tan_v3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v9 = tan_v14, tan_v14, f0 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z2 = tan_z12, tan_z4, tan_z3 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z5 = tan_z9, tan_z10, tan_z6 + nop.i 999 ;; +} + + +{ .mfi + nop.m 999 +(p9) fma.s1 tan_inv_r = tan_d4, tan_y2, tan_y0 + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) fma.s1 tan_rcube = tan_rsq, tan_r, f0 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s1 tan_v1 = tan_v9, tan_v10, tan_v2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fma.s1 tan_z1 = tan_z9, tan_z5, tan_z2 + nop.i 999 ;; +} + + + +{ .mfi + nop.m 999 +(p8) fma.s.s0 f8 = tan_v1, tan_rcube, tan_r + nop.i 999 +} +{ .mfb + nop.m 999 +(p9) fms.s.s0 f8 = tan_r, tan_z1, tan_inv_r + br.ret.sptk b0 ;; +} +.endp tanf# +ASM_SIZE_DIRECTIVE(tanf#) + + +.proc __libm_callout +__libm_callout: +L(TAN_DBX): +.prologue + +{ .mfi + nop.m 0 + fmerge.s f9 = f0,f0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs +} +;; + +{ .mfi + mov GR_SAVE_GP=gp + nop.f 0 +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 +} + +.body +{ .mfb + nop.m 999 + nop.f 999 + br.call.sptk.many b0=__libm_tan# ;; +} + + +{ .mfi + mov gp = GR_SAVE_GP + fnorm.s f8 = f8 + mov b0 = GR_SAVE_B0 +} +;; + + +{ .mib + nop.m 999 + mov ar.pfs = GR_SAVE_PFS + br.ret.sptk b0 +;; +} + + +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) + +.type __libm_tan#,@function +.global __libm_tan# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_tanl.S glibc-2.2.3/sysdeps/ia64/fpu/s_tanl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_tanl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_tanl.S Mon Feb 19 01:04:50 2001 @@ -0,0 +1,3057 @@ +.file "tanl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, +// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +// ********************************************************************* +// +// History: +// +// 2/02/2000 (hand-optimized) +// 4/04/00 Unwind support added +// 12/28/00 Fixed false invalid flags +// +// ********************************************************************* +// +// Function: tanl(x) = tangent(x), for double-extended precision x values +// +// ********************************************************************* +// +// Resources Used: +// +// Floating-Point Registers: f8 (Input and Return Value) +// f9-f15 +// f32-f112 +// +// General Purpose Registers: +// r32-r48 +// r49-r50 (Used to pass arguments to pi_by_2 reduce routine) +// +// Predicate Registers: p6-p15 +// +// ********************************************************************* +// +// IEEE Special Conditions: +// +// Denormal fault raised on denormal inputs +// Overflow exceptions do not occur +// Underflow exceptions raised when appropriate for tan +// (No specialized error handling for this routine) +// Inexact raised when appropriate by algorithm +// +// tan(SNaN) = QNaN +// tan(QNaN) = QNaN +// tan(inf) = QNaN +// tan(+/-0) = +/-0 +// +// ********************************************************************* +// +// Mathematical Description +// +// We consider the computation of FPTANL of Arg. Now, given +// +// Arg = N pi/2 + alpha, |alpha| <= pi/4, +// +// basic mathematical relationship shows that +// +// tan( Arg ) = tan( alpha ) if N is even; +// = -cot( alpha ) otherwise. +// +// The value of alpha is obtained by argument reduction and +// represented by two working precision numbers r and c where +// +// alpha = r + c accurately. +// +// The reduction method is described in a previous write up. +// The argument reduction scheme identifies 4 cases. For Cases 2 +// and 4, because |alpha| is small, tan(r+c) and -cot(r+c) can be +// computed very easily by 2 or 3 terms of the Taylor series +// expansion as follows: +// +// Case 2: +// ------- +// +// tan(r + c) = r + c + r^3/3 ...accurately +// -cot(r + c) = -1/(r+c) + r/3 ...accurately +// +// Case 4: +// ------- +// +// tan(r + c) = r + c + r^3/3 + 2r^5/15 ...accurately +// -cot(r + c) = -1/(r+c) + r/3 + r^3/45 ...accurately +// +// +// The only cases left are Cases 1 and 3 of the argument reduction +// procedure. These two cases will be merged since after the +// argument is reduced in either cases, we have the reduced argument +// represented as r + c and that the magnitude |r + c| is not small +// enough to allow the usage of a very short approximation. +// +// The greatest challenge of this task is that the second terms of +// the Taylor series for tan(r) and -cot(r) +// +// r + r^3/3 + 2 r^5/15 + ... +// +// and +// +// -1/r + r/3 + r^3/45 + ... +// +// are not very small when |r| is close to pi/4 and the rounding +// errors will be a concern if simple polynomial accumulation is +// used. When |r| < 2^(-2), however, the second terms will be small +// enough (5 bits or so of right shift) that a normal Horner +// recurrence suffices. Hence there are two cases that we consider +// in the accurate computation of tan(r) and cot(r), |r| <= pi/4. +// +// Case small_r: |r| < 2^(-2) +// -------------------------- +// +// Since Arg = N pi/4 + r + c accurately, we have +// +// tan(Arg) = tan(r+c) for N even, +// = -cot(r+c) otherwise. +// +// Here for this case, both tan(r) and -cot(r) can be approximated +// by simple polynomials: +// +// tan(r) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 +// -cot(r) = -1/r + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 +// +// accurately. Since |r| is relatively small, tan(r+c) and +// -cot(r+c) can be accurately approximated by replacing r with +// r+c only in the first two terms of the corresponding polynomials. +// +// Note that P1_1 (and Q1_1 for that matter) approximates 1/3 to +// almost 64 sig. bits, thus +// +// P1_1 (r+c)^3 = P1_1 r^3 + c * r^2 accurately. +// +// Hence, +// +// tan(r+c) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 +// + c*(1 + r^2) +// +// -cot(r+c) = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 +// + Q1_1*c +// +// +// Case normal_r: 2^(-2) <= |r| <= pi/4 +// ------------------------------------ +// +// This case is more likely than the previous one if one considers +// r to be uniformly distributed in [-pi/4 pi/4]. +// +// The required calculation is either +// +// tan(r + c) = tan(r) + correction, or +// -cot(r + c) = -cot(r) + correction. +// +// Specifically, +// +// tan(r + c) = tan(r) + c tan'(r) + O(c^2) +// = tan(r) + c sec^2(r) + O(c^2) +// = tan(r) + c SEC_sq ...accurately +// as long as SEC_sq approximates sec^2(r) +// to, say, 5 bits or so. +// +// Similarly, +// +// -cot(r + c) = -cot(r) - c cot'(r) + O(c^2) +// = -cot(r) + c csc^2(r) + O(c^2) +// = -cot(r) + c CSC_sq ...accurately +// as long as CSC_sq approximates csc^2(r) +// to, say, 5 bits or so. +// +// We therefore concentrate on accurately calculating tan(r) and +// cot(r) for a working-precision number r, |r| <= pi/4 to within +// 0.1% or so. +// +// We will employ a table-driven approach. Let +// +// r = sgn_r * 2^k * 1.b_1 b_2 ... b_5 ... b_63 +// = sgn_r * ( B + x ) +// +// where +// +// B = 2^k * 1.b_1 b_2 ... b_5 1 +// x = |r| - B +// +// Now, +// tan(B) + tan(x) +// tan( B + x ) = ------------------------ +// 1 - tan(B)*tan(x) +// +// / \ +// | tan(B) + tan(x) | + +// = tan(B) + | ------------------------ - tan(B) | +// | 1 - tan(B)*tan(x) | +// \ / +// +// sec^2(B) * tan(x) +// = tan(B) + ------------------------ +// 1 - tan(B)*tan(x) +// +// (1/[sin(B)*cos(B)]) * tan(x) +// = tan(B) + -------------------------------- +// cot(B) - tan(x) +// +// +// Clearly, the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are +// calculated beforehand and stored in a table. Since +// +// |x| <= 2^k * 2^(-6) <= 2^(-7) (because k = -1, -2) +// +// a very short polynomial will be sufficient to approximate tan(x) +// accurately. The details involved in computing the last expression +// will be given in the next section on algorithm description. +// +// +// Now, we turn to the case where cot( B + x ) is needed. +// +// +// 1 - tan(B)*tan(x) +// cot( B + x ) = ------------------------ +// tan(B) + tan(x) +// +// / \ +// | 1 - tan(B)*tan(x) | + +// = cot(B) + | ----------------------- - cot(B) | +// | tan(B) + tan(x) | +// \ / +// +// [tan(B) + cot(B)] * tan(x) +// = cot(B) - ---------------------------- +// tan(B) + tan(x) +// +// (1/[sin(B)*cos(B)]) * tan(x) +// = cot(B) - -------------------------------- +// tan(B) + tan(x) +// +// +// Note that the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) that +// are needed are the same set of values needed in the previous +// case. +// +// Finally, we can put all the ingredients together as follows: +// +// Arg = N * pi/2 + r + c ...accurately +// +// tan(Arg) = tan(r) + correction if N is even; +// = -cot(r) + correction otherwise. +// +// For Cases 2 and 4, +// +// Case 2: +// tan(Arg) = tan(r + c) = r + c + r^3/3 N even +// = -cot(r + c) = -1/(r+c) + r/3 N odd +// Case 4: +// tan(Arg) = tan(r + c) = r + c + r^3/3 + 2r^5/15 N even +// = -cot(r + c) = -1/(r+c) + r/3 + r^3/45 N odd +// +// +// For Cases 1 and 3, +// +// Case small_r: |r| < 2^(-2) +// +// tan(Arg) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 +// + c*(1 + r^2) N even +// +// = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 +// + Q1_1*c N odd +// +// Case normal_r: 2^(-2) <= |r| <= pi/4 +// +// tan(Arg) = tan(r) + c * sec^2(r) N even +// = -cot(r) + c * csc^2(r) otherwise +// +// For N even, +// +// tan(Arg) = tan(r) + c*sec^2(r) +// = tan( sgn_r * (B+x) ) + c * sec^2(|r|) +// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(|r|) ) +// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(B) ) +// +// since B approximates |r| to 2^(-6) in relative accuracy. +// +// / (1/[sin(B)*cos(B)]) * tan(x) +// tan(Arg) = sgn_r * | tan(B) + -------------------------------- +// \ cot(B) - tan(x) +// \ +// + CORR | + +// / +// where +// +// CORR = sgn_r*c*tan(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). +// +// For N odd, +// +// tan(Arg) = -cot(r) + c*csc^2(r) +// = -cot( sgn_r * (B+x) ) + c * csc^2(|r|) +// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(|r|) ) +// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(B) ) +// +// since B approximates |r| to 2^(-6) in relative accuracy. +// +// / (1/[sin(B)*cos(B)]) * tan(x) +// tan(Arg) = sgn_r * | -cot(B) + -------------------------------- +// \ tan(B) + tan(x) +// \ +// + CORR | + +// / +// where +// +// CORR = sgn_r*c*cot(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). +// +// +// The actual algorithm prescribes how all the mathematical formulas +// are calculated. +// +// +// 2. Algorithmic Description +// ========================== +// +// 2.1 Computation for Cases 2 and 4. +// ---------------------------------- +// +// For Case 2, we use two-term polynomials. +// +// For N even, +// +// rsq := r * r +// Result := c + r * rsq * P1_1 +// Result := r + Result ...in user-defined rounding +// +// For N odd, +// S_hi := -frcpa(r) ...8 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits +// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) +// ...S_hi + S_lo is -1/(r+c) to extra precision +// S_lo := S_lo + Q1_1*r +// +// Result := S_hi + S_lo ...in user-defined rounding +// +// For Case 4, we use three-term polynomials +// +// For N even, +// +// rsq := r * r +// Result := c + r * rsq * (P1_1 + rsq * P1_2) +// Result := r + Result ...in user-defined rounding +// +// For N odd, +// S_hi := -frcpa(r) ...8 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits +// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) +// ...S_hi + S_lo is -1/(r+c) to extra precision +// rsq := r * r +// P := Q1_1 + rsq*Q1_2 +// S_lo := S_lo + r*P +// +// Result := S_hi + S_lo ...in user-defined rounding +// +// +// Note that the coefficients P1_1, P1_2, Q1_1, and Q1_2 are +// the same as those used in the small_r case of Cases 1 and 3 +// below. +// +// +// 2.2 Computation for Cases 1 and 3. +// ---------------------------------- +// This is further divided into the case of small_r, +// where |r| < 2^(-2), and the case of normal_r, where |r| lies between +// 2^(-2) and pi/4. +// +// Algorithm for the case of small_r +// --------------------------------- +// +// For N even, +// rsq := r * r +// Poly1 := rsq*(P1_1 + rsq*(P1_2 + rsq*P1_3)) +// r_to_the_8 := rsq * rsq +// r_to_the_8 := r_to_the_8 * r_to_the_8 +// Poly2 := P1_4 + rsq*(P1_5 + rsq*(P1_6 + ... rsq*P1_9)) +// CORR := c * ( 1 + rsq ) +// Poly := Poly1 + r_to_the_8*Poly2 +// Result := r*Poly + CORR +// Result := r + Result ...in user-defined rounding +// ...note that Poly1 and r_to_the_8 can be computed in parallel +// ...with Poly2 (Poly1 is intentionally set to be much +// ...shorter than Poly2 so that r_to_the_8 and CORR can be hidden) +// +// For N odd, +// S_hi := -frcpa(r) ...8 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits +// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits +// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) +// ...S_hi + S_lo is -1/(r+c) to extra precision +// S_lo := S_lo + Q1_1*c +// +// ...S_hi and S_lo are computed in parallel with +// ...the following +// rsq := r*r +// P := Q1_1 + rsq*(Q1_2 + rsq*(Q1_3 + ... + rsq*Q1_7)) +// +// Result := r*P + S_lo +// Result := S_hi + Result ...in user-defined rounding +// +// +// Algorithm for the case of normal_r +// ---------------------------------- +// +// Here, we first consider the computation of tan( r + c ). As +// presented in the previous section, +// +// tan( r + c ) = tan(r) + c * sec^2(r) +// = sgn_r * [ tan(B+x) + CORR ] +// CORR = sgn_r * c * tan(B) * 1/[sin(B)*cos(B)] +// +// because sec^2(r) = sec^(|r|), and B approximate |r| to 6.5 bits. +// +// tan( r + c ) = +// / (1/[sin(B)*cos(B)]) * tan(x) +// sgn_r * | tan(B) + -------------------------------- + +// \ cot(B) - tan(x) +// \ +// CORR | + +// / +// +// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are +// calculated beforehand and stored in a table. Specifically, +// the table values are +// +// tan(B) as T_hi + T_lo; +// cot(B) as C_hi + C_lo; +// 1/[sin(B)*cos(B)] as SC_inv +// +// T_hi, C_hi are in double-precision memory format; +// T_lo, C_lo are in single-precision memory format; +// SC_inv is in extended-precision memory format. +// +// The value of tan(x) will be approximated by a short polynomial of +// the form +// +// tan(x) as x + x * P, where +// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) +// +// Because |x| <= 2^(-7), cot(B) - x approximates cot(B) - tan(x) +// to a relative accuracy better than 2^(-20). Thus, a good +// initial guess of 1/( cot(B) - tan(x) ) to initiate the iterative +// division is: +// +// 1/(cot(B) - tan(x)) is approximately +// 1/(cot(B) - x) is +// tan(B)/(1 - x*tan(B)) is approximately +// T_hi / ( 1 - T_hi * x ) is approximately +// +// T_hi * [ 1 + (Thi * x) + (T_hi * x)^2 ] +// +// The calculation of tan(r+c) therefore proceed as follows: +// +// Tx := T_hi * x +// xsq := x * x +// +// V_hi := T_hi*(1 + Tx*(1 + Tx)) +// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) +// ...V_hi serves as an initial guess of 1/(cot(B) - tan(x)) +// ...good to about 20 bits of accuracy +// +// tanx := x + x*P +// D := C_hi - tanx +// ...D is a double precision denominator: cot(B) - tan(x) +// +// V_hi := V_hi + V_hi*(1 - V_hi*D) +// ....V_hi approximates 1/(cot(B)-tan(x)) to 40 bits +// +// V_lo := V_hi * ( [ (1 - V_hi*C_hi) + V_hi*tanx ] +// - V_hi*C_lo ) ...observe all order +// ...V_hi + V_lo approximates 1/(cot(B) - tan(x)) +// ...to extra accuracy +// +// ... SC_inv(B) * (x + x*P) +// ... tan(B) + ------------------------- + CORR +// ... cot(B) - (x + x*P) +// ... +// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// +// Sx := SC_inv * x +// CORR := sgn_r * c * SC_inv * T_hi +// +// ...put the ingredients together to compute +// ... SC_inv(B) * (x + x*P) +// ... tan(B) + ------------------------- + CORR +// ... cot(B) - (x + x*P) +// ... +// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// ... = T_hi + T_lo + CORR + +// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) +// +// CORR := CORR + T_lo +// tail := V_lo + P*(V_hi + V_lo) +// tail := Sx * tail + CORR +// tail := Sx * V_hi + tail +// T_hi := sgn_r * T_hi +// +// ...T_hi + sgn_r*tail now approximate +// ...sgn_r*(tan(B+x) + CORR) accurately +// +// Result := T_hi + sgn_r*tail ...in user-defined +// ...rounding control +// ...It is crucial that independent paths be fully +// ...exploited for performance's sake. +// +// +// Next, we consider the computation of -cot( r + c ). As +// presented in the previous section, +// +// -cot( r + c ) = -cot(r) + c * csc^2(r) +// = sgn_r * [ -cot(B+x) + CORR ] +// CORR = sgn_r * c * cot(B) * 1/[sin(B)*cos(B)] +// +// because csc^2(r) = csc^(|r|), and B approximate |r| to 6.5 bits. +// +// -cot( r + c ) = +// / (1/[sin(B)*cos(B)]) * tan(x) +// sgn_r * | -cot(B) + -------------------------------- + +// \ tan(B) + tan(x) +// \ +// CORR | + +// / +// +// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are +// calculated beforehand and stored in a table. Specifically, +// the table values are +// +// tan(B) as T_hi + T_lo; +// cot(B) as C_hi + C_lo; +// 1/[sin(B)*cos(B)] as SC_inv +// +// T_hi, C_hi are in double-precision memory format; +// T_lo, C_lo are in single-precision memory format; +// SC_inv is in extended-precision memory format. +// +// The value of tan(x) will be approximated by a short polynomial of +// the form +// +// tan(x) as x + x * P, where +// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) +// +// Because |x| <= 2^(-7), tan(B) + x approximates tan(B) + tan(x) +// to a relative accuracy better than 2^(-18). Thus, a good +// initial guess of 1/( tan(B) + tan(x) ) to initiate the iterative +// division is: +// +// 1/(tan(B) + tan(x)) is approximately +// 1/(tan(B) + x) is +// cot(B)/(1 + x*cot(B)) is approximately +// C_hi / ( 1 + C_hi * x ) is approximately +// +// C_hi * [ 1 - (C_hi * x) + (C_hi * x)^2 ] +// +// The calculation of -cot(r+c) therefore proceed as follows: +// +// Cx := C_hi * x +// xsq := x * x +// +// V_hi := C_hi*(1 - Cx*(1 - Cx)) +// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) +// ...V_hi serves as an initial guess of 1/(tan(B) + tan(x)) +// ...good to about 18 bits of accuracy +// +// tanx := x + x*P +// D := T_hi + tanx +// ...D is a double precision denominator: tan(B) + tan(x) +// +// V_hi := V_hi + V_hi*(1 - V_hi*D) +// ....V_hi approximates 1/(tan(B)+tan(x)) to 40 bits +// +// V_lo := V_hi * ( [ (1 - V_hi*T_hi) - V_hi*tanx ] +// - V_hi*T_lo ) ...observe all order +// ...V_hi + V_lo approximates 1/(tan(B) + tan(x)) +// ...to extra accuracy +// +// ... SC_inv(B) * (x + x*P) +// ... -cot(B) + ------------------------- + CORR +// ... tan(B) + (x + x*P) +// ... +// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// +// Sx := SC_inv * x +// CORR := sgn_r * c * SC_inv * C_hi +// +// ...put the ingredients together to compute +// ... SC_inv(B) * (x + x*P) +// ... -cot(B) + ------------------------- + CORR +// ... tan(B) + (x + x*P) +// ... +// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR +// ... +// ... =-C_hi - C_lo + CORR + +// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) +// +// CORR := CORR - C_lo +// tail := V_lo + P*(V_hi + V_lo) +// tail := Sx * tail + CORR +// tail := Sx * V_hi + tail +// C_hi := -sgn_r * C_hi +// +// ...C_hi + sgn_r*tail now approximates +// ...sgn_r*(-cot(B+x) + CORR) accurately +// +// Result := C_hi + sgn_r*tail in user-defined rounding control +// ...It is crucial that independent paths be fully +// ...exploited for performance's sake. +// +// 3. Implementation Notes +// ======================= +// +// Table entries T_hi, T_lo; C_hi, C_lo; SC_inv +// +// Recall that 2^(-2) <= |r| <= pi/4; +// +// r = sgn_r * 2^k * 1.b_1 b_2 ... b_63 +// +// and +// +// B = 2^k * 1.b_1 b_2 b_3 b_4 b_5 1 +// +// Thus, for k = -2, possible values of B are +// +// B = 2^(-2) * ( 1 + index/32 + 1/64 ), +// index ranges from 0 to 31 +// +// For k = -1, however, since |r| <= pi/4 = 0.78... +// possible values of B are +// +// B = 2^(-1) * ( 1 + index/32 + 1/64 ) +// index ranges from 0 to 19. +// +// + +#include "libm_support.h" + +#ifdef _LIBC +.rodata +#else +.data +#endif +.align 128 + +TANL_BASE_CONSTANTS: +ASM_TYPE_DIRECTIVE(TANL_BASE_CONSTANTS,@object) +data4 0x4B800000, 0xCB800000, 0x38800000, 0xB8800000 // two**24, -two**24 + // two**-14, -two**-14 +data4 0x4E44152A, 0xA2F9836E, 0x00003FFE, 0x00000000 // two_by_pi +data4 0xCE81B9F1, 0xC84D32B0, 0x00004016, 0x00000000 // P_0 +data4 0x2168C235, 0xC90FDAA2, 0x00003FFF, 0x00000000 // P_1 +data4 0xFC8F8CBB, 0xECE675D1, 0x0000BFBD, 0x00000000 // P_2 +data4 0xACC19C60, 0xB7ED8FBB, 0x0000BF7C, 0x00000000 // P_3 +data4 0x5F000000, 0xDF000000, 0x00000000, 0x00000000 // two_to_63, -two_to_63 +data4 0x6EC6B45A, 0xA397E504, 0x00003FE7, 0x00000000 // Inv_P_0 +data4 0xDBD171A1, 0x8D848E89, 0x0000BFBF, 0x00000000 // d_1 +data4 0x18A66F8E, 0xD5394C36, 0x0000BF7C, 0x00000000 // d_2 +data4 0x2168C234, 0xC90FDAA2, 0x00003FFE, 0x00000000 // PI_BY_4 +data4 0x2168C234, 0xC90FDAA2, 0x0000BFFE, 0x00000000 // MPI_BY_4 +data4 0x3E800000, 0xBE800000, 0x00000000, 0x00000000 // two**-2, -two**-2 +data4 0x2F000000, 0xAF000000, 0x00000000, 0x00000000 // two**-33, -two**-33 +data4 0xAAAAAABD, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // P1_1 +data4 0x88882E6A, 0x88888888, 0x00003FFC, 0x00000000 // P1_2 +data4 0x0F0177B6, 0xDD0DD0DD, 0x00003FFA, 0x00000000 // P1_3 +data4 0x646B8C6D, 0xB327A440, 0x00003FF9, 0x00000000 // P1_4 +data4 0x1D5F7D20, 0x91371B25, 0x00003FF8, 0x00000000 // P1_5 +data4 0x61C67914, 0xEB69A5F1, 0x00003FF6, 0x00000000 // P1_6 +data4 0x019318D2, 0xBEDD37BE, 0x00003FF5, 0x00000000 // P1_7 +data4 0x3C794015, 0x9979B146, 0x00003FF4, 0x00000000 // P1_8 +data4 0x8C6EB58A, 0x8EBD21A3, 0x00003FF3, 0x00000000 // P1_9 +data4 0xAAAAAAB4, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // Q1_1 +data4 0x0B5FC93E, 0xB60B60B6, 0x00003FF9, 0x00000000 // Q1_2 +data4 0x0C9BBFBF, 0x8AB355E0, 0x00003FF6, 0x00000000 // Q1_3 +data4 0xCBEE3D4C, 0xDDEBBC89, 0x00003FF2, 0x00000000 // Q1_4 +data4 0x5F80BBB6, 0xB3548A68, 0x00003FEF, 0x00000000 // Q1_5 +data4 0x4CED5BF1, 0x91362560, 0x00003FEC, 0x00000000 // Q1_6 +data4 0x8EE92A83, 0xF189D95A, 0x00003FE8, 0x00000000 // Q1_7 +data4 0xAAAB362F, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // P2_1 +data4 0xE97A6097, 0x88888886, 0x00003FFC, 0x00000000 // P2_2 +data4 0x25E716A1, 0xDD108EE0, 0x00003FFA, 0x00000000 // P2_3 +// +// Entries T_hi double-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// Entries T_lo single-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// +data4 0x62400794, 0x3FD09BC3, 0x23A05C32, 0x00000000 +data4 0xDFFBC074, 0x3FD124A9, 0x240078B2, 0x00000000 +data4 0x5BD4920F, 0x3FD1AE23, 0x23826B8E, 0x00000000 +data4 0x15E2701D, 0x3FD23835, 0x22D31154, 0x00000000 +data4 0x63739C2D, 0x3FD2C2E4, 0x2265C9E2, 0x00000000 +data4 0xAFEEA48B, 0x3FD34E36, 0x245C05EB, 0x00000000 +data4 0x7DBB35D1, 0x3FD3DA31, 0x24749F2D, 0x00000000 +data4 0x67321619, 0x3FD466DA, 0x2462CECE, 0x00000000 +data4 0x1F94A4D5, 0x3FD4F437, 0x246D0DF1, 0x00000000 +data4 0x740C3E6D, 0x3FD5824D, 0x240A85B5, 0x00000000 +data4 0x4CB1E73D, 0x3FD61123, 0x23F96E33, 0x00000000 +data4 0xAD9EA64B, 0x3FD6A0BE, 0x247C5393, 0x00000000 +data4 0xB804FD01, 0x3FD73125, 0x241F3B29, 0x00000000 +data4 0xAB53EE83, 0x3FD7C25E, 0x2479989B, 0x00000000 +data4 0xE6640EED, 0x3FD8546F, 0x23B343BC, 0x00000000 +data4 0xE8AF1892, 0x3FD8E75F, 0x241454D1, 0x00000000 +data4 0x53928BDA, 0x3FD97B35, 0x238613D9, 0x00000000 +data4 0xEB9DE4DE, 0x3FDA0FF6, 0x22859FA7, 0x00000000 +data4 0x99ECF92D, 0x3FDAA5AB, 0x237A6D06, 0x00000000 +data4 0x6D8F1796, 0x3FDB3C5A, 0x23952F6C, 0x00000000 +data4 0x9CFB8BE4, 0x3FDBD40A, 0x2280FC95, 0x00000000 +data4 0x87943100, 0x3FDC6CC3, 0x245D2EC0, 0x00000000 +data4 0xB736C500, 0x3FDD068C, 0x23C4AD7D, 0x00000000 +data4 0xE1DDBC31, 0x3FDDA16D, 0x23D076E6, 0x00000000 +data4 0xEB515A93, 0x3FDE3D6E, 0x244809A6, 0x00000000 +data4 0xE6E9E5F1, 0x3FDEDA97, 0x220856C8, 0x00000000 +data4 0x1963CE69, 0x3FDF78F1, 0x244BE993, 0x00000000 +data4 0x7D635BCE, 0x3FE00C41, 0x23D21799, 0x00000000 +data4 0x1C302CD3, 0x3FE05CAB, 0x248A1B1D, 0x00000000 +data4 0xDB6A1FA0, 0x3FE0ADB9, 0x23D53E33, 0x00000000 +data4 0x4A20BA81, 0x3FE0FF72, 0x24DB9ED5, 0x00000000 +data4 0x153FA6F5, 0x3FE151D9, 0x24E9E451, 0x00000000 +// +// Entries T_hi double-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// Entries T_lo single-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// +data4 0xBA1BE39E, 0x3FE1CEC4, 0x24B60F9E, 0x00000000 +data4 0x5ABD9B2D, 0x3FE277E4, 0x248C2474, 0x00000000 +data4 0x0272B110, 0x3FE32418, 0x247B8311, 0x00000000 +data4 0x890E2DF0, 0x3FE3D38B, 0x24C55751, 0x00000000 +data4 0x46236871, 0x3FE4866D, 0x24E5BC34, 0x00000000 +data4 0x45E044B0, 0x3FE53CEE, 0x24001BA4, 0x00000000 +data4 0x82EC06E4, 0x3FE5F742, 0x24B973DC, 0x00000000 +data4 0x25DF43F9, 0x3FE6B5A1, 0x24895440, 0x00000000 +data4 0xCAFD348C, 0x3FE77844, 0x240021CA, 0x00000000 +data4 0xCEED6B92, 0x3FE83F6B, 0x24C45372, 0x00000000 +data4 0xA34F3665, 0x3FE90B58, 0x240DAD33, 0x00000000 +data4 0x2C1E56B4, 0x3FE9DC52, 0x24F846CE, 0x00000000 +data4 0x27041578, 0x3FEAB2A4, 0x2323FB6E, 0x00000000 +data4 0x9DD8C373, 0x3FEB8E9F, 0x24B3090B, 0x00000000 +data4 0x65C9AA7B, 0x3FEC709B, 0x2449F611, 0x00000000 +data4 0xACCF8435, 0x3FED58F4, 0x23616A7E, 0x00000000 +data4 0x97635082, 0x3FEE480F, 0x24C2FEAE, 0x00000000 +data4 0xF0ACC544, 0x3FEF3E57, 0x242CE964, 0x00000000 +data4 0xF7E06E4B, 0x3FF01E20, 0x2480D3EE, 0x00000000 +data4 0x8A798A69, 0x3FF0A125, 0x24DB8967, 0x00000000 +// +// Entries C_hi double-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// Entries C_lo single-precision memory format +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// +data4 0xE63EFBD0, 0x400ED3E2, 0x259D94D4, 0x00000000 +data4 0xC515DAB5, 0x400DDDB4, 0x245F0537, 0x00000000 +data4 0xBE19A79F, 0x400CF57A, 0x25D4EA9F, 0x00000000 +data4 0xD15298ED, 0x400C1A06, 0x24AE40A0, 0x00000000 +data4 0x164B2708, 0x400B4A4C, 0x25A5AAB6, 0x00000000 +data4 0x5285B068, 0x400A855A, 0x25524F18, 0x00000000 +data4 0x3FFA549F, 0x4009CA5A, 0x24C999C0, 0x00000000 +data4 0x646AF623, 0x4009188A, 0x254FD801, 0x00000000 +data4 0x6084D0E7, 0x40086F3C, 0x2560F5FD, 0x00000000 +data4 0xA29A76EE, 0x4007CDD2, 0x255B9D19, 0x00000000 +data4 0x6C8ECA95, 0x400733BE, 0x25CB021B, 0x00000000 +data4 0x1F8DDC52, 0x4006A07E, 0x24AB4722, 0x00000000 +data4 0xC298AD58, 0x4006139B, 0x252764E2, 0x00000000 +data4 0xBAD7164B, 0x40058CAB, 0x24DAF5DB, 0x00000000 +data4 0xAE31A5D3, 0x40050B4B, 0x25EA20F4, 0x00000000 +data4 0x89F85A8A, 0x40048F21, 0x2583A3E8, 0x00000000 +data4 0xA862380D, 0x400417DA, 0x25DCC4CC, 0x00000000 +data4 0x1088FCFE, 0x4003A52B, 0x2430A492, 0x00000000 +data4 0xCD3527D5, 0x400336CC, 0x255F77CF, 0x00000000 +data4 0x5760766D, 0x4002CC7F, 0x25DA0BDA, 0x00000000 +data4 0x11CE02E3, 0x40026607, 0x256FF4A2, 0x00000000 +data4 0xD37BBE04, 0x4002032C, 0x25208AED, 0x00000000 +data4 0x7F050775, 0x4001A3BD, 0x24B72DD6, 0x00000000 +data4 0xA554848A, 0x40014789, 0x24AB4DAA, 0x00000000 +data4 0x323E81B7, 0x4000EE65, 0x2584C440, 0x00000000 +data4 0x21CF1293, 0x40009827, 0x25C9428D, 0x00000000 +data4 0x3D415EEB, 0x400044A9, 0x25DC8482, 0x00000000 +data4 0xBD72C577, 0x3FFFE78F, 0x257F5070, 0x00000000 +data4 0x75EFD28E, 0x3FFF4AC3, 0x23EBBF7A, 0x00000000 +data4 0x60B52DDE, 0x3FFEB2AF, 0x22EECA07, 0x00000000 +data4 0x35204180, 0x3FFE1F19, 0x24191079, 0x00000000 +data4 0x54F7E60A, 0x3FFD8FCA, 0x248D3058, 0x00000000 +// +// Entries C_hi double-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// Entries C_lo single-precision memory format +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// +data4 0x79F6FADE, 0x3FFCC06A, 0x239C7886, 0x00000000 +data4 0x891662A6, 0x3FFBB91F, 0x250BD191, 0x00000000 +data4 0x529F155D, 0x3FFABFB6, 0x256CC3E6, 0x00000000 +data4 0x2E964AE9, 0x3FF9D300, 0x250843E3, 0x00000000 +data4 0x89DCB383, 0x3FF8F1EF, 0x2277C87E, 0x00000000 +data4 0x7C87DBD6, 0x3FF81B93, 0x256DA6CF, 0x00000000 +data4 0x1042EDE4, 0x3FF74F14, 0x2573D28A, 0x00000000 +data4 0x1784B360, 0x3FF68BAF, 0x242E489A, 0x00000000 +data4 0x7C923C4C, 0x3FF5D0B5, 0x2532D940, 0x00000000 +data4 0xF418EF20, 0x3FF51D88, 0x253C7DD6, 0x00000000 +data4 0x02F88DAE, 0x3FF4719A, 0x23DB59BF, 0x00000000 +data4 0x49DA0788, 0x3FF3CC66, 0x252B4756, 0x00000000 +data4 0x0B980DB8, 0x3FF32D77, 0x23FE585F, 0x00000000 +data4 0xE56C987A, 0x3FF2945F, 0x25378A63, 0x00000000 +data4 0xB16523F6, 0x3FF200BD, 0x247BB2E0, 0x00000000 +data4 0x8CE27778, 0x3FF17235, 0x24446538, 0x00000000 +data4 0xFDEFE692, 0x3FF0E873, 0x2514638F, 0x00000000 +data4 0x33154062, 0x3FF0632C, 0x24A7FC27, 0x00000000 +data4 0xB3EF115F, 0x3FEFC42E, 0x248FD0FE, 0x00000000 +data4 0x135D26F6, 0x3FEEC9E8, 0x2385C719, 0x00000000 +// +// Entries SC_inv in Swapped IEEE format (extended) +// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) +// +data4 0x1BF30C9E, 0x839D6D4A, 0x00004001, 0x00000000 +data4 0x554B0EB0, 0x80092804, 0x00004001, 0x00000000 +data4 0xA1CF0DE9, 0xF959F94C, 0x00004000, 0x00000000 +data4 0x77378677, 0xF3086BA0, 0x00004000, 0x00000000 +data4 0xCCD4723C, 0xED154515, 0x00004000, 0x00000000 +data4 0x1C27CF25, 0xE7790944, 0x00004000, 0x00000000 +data4 0x8DDACB88, 0xE22D037D, 0x00004000, 0x00000000 +data4 0x89C73522, 0xDD2B2D8A, 0x00004000, 0x00000000 +data4 0xBB2C1171, 0xD86E1A23, 0x00004000, 0x00000000 +data4 0xDFF5E0F9, 0xD3F0E288, 0x00004000, 0x00000000 +data4 0x283BEBD5, 0xCFAF16B1, 0x00004000, 0x00000000 +data4 0x0D88DD53, 0xCBA4AFAA, 0x00004000, 0x00000000 +data4 0xCA67C43D, 0xC7CE03CC, 0x00004000, 0x00000000 +data4 0x0CA0DDB0, 0xC427BC82, 0x00004000, 0x00000000 +data4 0xF13D8CAB, 0xC0AECD57, 0x00004000, 0x00000000 +data4 0x71ECE6B1, 0xBD606C38, 0x00004000, 0x00000000 +data4 0xA44C4929, 0xBA3A0A96, 0x00004000, 0x00000000 +data4 0xE5CCCEC1, 0xB7394F6F, 0x00004000, 0x00000000 +data4 0x9637D8BC, 0xB45C1203, 0x00004000, 0x00000000 +data4 0x92CB051B, 0xB1A05528, 0x00004000, 0x00000000 +data4 0x6BA2FFD0, 0xAF04432B, 0x00004000, 0x00000000 +data4 0x7221235F, 0xAC862A23, 0x00004000, 0x00000000 +data4 0x5F00A9D1, 0xAA2478AF, 0x00004000, 0x00000000 +data4 0x81E082BF, 0xA7DDBB0C, 0x00004000, 0x00000000 +data4 0x45684FEE, 0xA5B0987D, 0x00004000, 0x00000000 +data4 0x627A8F53, 0xA39BD0F5, 0x00004000, 0x00000000 +data4 0x6EC5C8B0, 0xA19E3B03, 0x00004000, 0x00000000 +data4 0x91CD7C66, 0x9FB6C1F0, 0x00004000, 0x00000000 +data4 0x1FA3DF8A, 0x9DE46410, 0x00004000, 0x00000000 +data4 0xA8F6B888, 0x9C263139, 0x00004000, 0x00000000 +data4 0xC27B0450, 0x9A7B4968, 0x00004000, 0x00000000 +data4 0x5EE614EE, 0x98E2DB7E, 0x00004000, 0x00000000 +// +// Entries SC_inv in Swapped IEEE format (extended) +// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) +// +data4 0x13B2B5BA, 0x969F335C, 0x00004000, 0x00000000 +data4 0xD4C0F548, 0x93D446D9, 0x00004000, 0x00000000 +data4 0x61B798AF, 0x9147094F, 0x00004000, 0x00000000 +data4 0x758787AC, 0x8EF317CC, 0x00004000, 0x00000000 +data4 0xB99EEFDB, 0x8CD498B3, 0x00004000, 0x00000000 +data4 0xDFF8BC37, 0x8AE82A7D, 0x00004000, 0x00000000 +data4 0xE3C55D42, 0x892AD546, 0x00004000, 0x00000000 +data4 0xD15573C1, 0x8799FEA9, 0x00004000, 0x00000000 +data4 0x435A4B4C, 0x86335F88, 0x00004000, 0x00000000 +data4 0x3E93A87B, 0x84F4FB6E, 0x00004000, 0x00000000 +data4 0x80A382FB, 0x83DD1952, 0x00004000, 0x00000000 +data4 0xA4CB8C9E, 0x82EA3D7F, 0x00004000, 0x00000000 +data4 0x6861D0A8, 0x821B247C, 0x00004000, 0x00000000 +data4 0x63E8D244, 0x816EBED1, 0x00004000, 0x00000000 +data4 0x27E4CFC6, 0x80E42D91, 0x00004000, 0x00000000 +data4 0x28E64AFD, 0x807ABF8D, 0x00004000, 0x00000000 +data4 0x863B4FD8, 0x8031EF26, 0x00004000, 0x00000000 +data4 0xAE8C11FD, 0x800960AD, 0x00004000, 0x00000000 +data4 0x5FDBEC21, 0x8000E147, 0x00004000, 0x00000000 +data4 0xA07791FA, 0x80186650, 0x00004000, 0x00000000 +ASM_SIZE_DIRECTIVE(TANL_BASE_CONSTANTS) + +Arg = f8 +Result = f8 +fp_tmp = f9 +U_2 = f10 +rsq = f11 +C_hi = f12 +C_lo = f13 +T_hi = f14 +T_lo = f15 + +N_0 = f32 +d_1 = f33 +MPI_BY_4 = f34 +tail = f35 +tanx = f36 +Cx = f37 +Sx = f38 +sgn_r = f39 +CORR = f40 +P = f41 +D = f42 +ArgPrime = f43 +P_0 = f44 + +P2_1 = f45 +P2_2 = f46 +P2_3 = f47 + +P1_1 = f45 +P1_2 = f46 +P1_3 = f47 + +P1_4 = f48 +P1_5 = f49 +P1_6 = f50 +P1_7 = f51 +P1_8 = f52 +P1_9 = f53 + +TWO_TO_63 = f54 +NEGTWO_TO_63 = f55 +x = f56 +xsq = f57 +Tx = f58 +Tx1 = f59 +Set = f60 +poly1 = f61 +poly2 = f62 +Poly = f63 +Poly1 = f64 +Poly2 = f65 +r_to_the_8 = f66 +B = f67 +SC_inv = f68 +Pos_r = f69 +N_0_fix = f70 +PI_BY_4 = f71 +NEGTWO_TO_NEG2 = f72 +TWO_TO_24 = f73 +TWO_TO_NEG14 = f74 +TWO_TO_NEG33 = f75 +NEGTWO_TO_24 = f76 +NEGTWO_TO_NEG14 = f76 +NEGTWO_TO_NEG33 = f77 +two_by_PI = f78 +N = f79 +N_fix = f80 +P_1 = f81 +P_2 = f82 +P_3 = f83 +s_val = f84 +w = f85 +c = f86 +r = f87 +A = f89 +a = f90 +t = f91 +U_1 = f92 +d_2 = f93 +TWO_TO_NEG2 = f94 +Q1_1 = f95 +Q1_2 = f96 +Q1_3 = f97 +Q1_4 = f98 +Q1_5 = f99 +Q1_6 = f100 +Q1_7 = f101 +Q1_8 = f102 +S_hi = f103 +S_lo = f104 +V_hi = f105 +V_lo = f106 +U_hi = f107 +U_lo = f108 +U_hiabs = f109 +V_hiabs = f110 +V = f111 +Inv_P_0 = f112 + +GR_SAVE_B0 = r33 +GR_SAVE_GP = r34 +GR_SAVE_PFS = r35 +delta1 = r36 +table_ptr1 = r37 +table_ptr2 = r38 +i_0 = r39 +i_1 = r40 +N_fix_gr = r41 +N_inc = r42 +exp_Arg = r43 +exp_r = r44 +sig_r = r45 +lookup = r46 +table_offset = r47 +Create_B = r48 +gr_tmp = r49 + +.section .text +.global tanl +.proc tanl +tanl: +#ifdef _LIBC +.global __tanl +.proc __tanl +__tanl: +#endif +{ .mfi +alloc r32 = ar.pfs, 0,17,2,0 +(p0) fclass.m.unc p6,p0 = Arg, 0x1E7 + addl gr_tmp = -1,r0 +} +{ .mfi + nop.m 0 +(p0) fclass.nm.unc p7,p0 = Arg, 0x1FF + nop.i 0 +};; + +{ .mfi +(p0) addl table_ptr1 = @ltoff(TANL_BASE_CONSTANTS), gp + nop.f 999 + nop.i 0 +} +;; +{ .mmi +(p0) ld8 table_ptr1 = [table_ptr1] + setf.sig fp_tmp = gr_tmp // Make a constant so fmpy produces inexact + nop.i 999 +} +;; + +// +// Check for NatVals, Infs , NaNs, and Zeros +// Check for everything - if false, then must be pseudo-zero +// or pseudo-nan. +// Local table pointer +// +{ .mbb +(p0) add table_ptr2 = 96, table_ptr1 +(p6) br.cond.spnt L(TANL_SPECIAL) +(p7) br.cond.spnt L(TANL_SPECIAL) ;; +} +// +// Point to Inv_P_0 +// Branch out to deal with unsupporteds and special values. +// +{ .mmf +(p0) ldfs TWO_TO_24 = [table_ptr1],4 +(p0) ldfs TWO_TO_63 = [table_ptr2],4 +// +// Load -2**24, load -2**63. +// +(p0) fcmp.eq.s0 p0, p6 = Arg, f1 ;; +} +{ .mfi +(p0) ldfs NEGTWO_TO_63 = [table_ptr2],12 +(p0) fnorm.s1 Arg = Arg + nop.i 999 +} +// +// Load 2**24, Load 2**63. +// +{ .mmi +(p0) ldfs NEGTWO_TO_24 = [table_ptr1],12 ;; +// +// Do fcmp to generate Denormal exception +// - can't do FNORM (will generate Underflow when U is unmasked!) +// Normalize input argument. +// +(p0) ldfe two_by_PI = [table_ptr1],16 + nop.i 999 +} +{ .mmi +(p0) ldfe Inv_P_0 = [table_ptr2],16 ;; +(p0) ldfe d_1 = [table_ptr2],16 + nop.i 999 +} +// +// Decide about the paths to take: +// PR_1 and PR_3 set if -2**24 < Arg < 2**24 - CASE 1 OR 2 +// OTHERWISE - CASE 3 OR 4 +// Load inverse of P_0 . +// Set PR_6 if Arg <= -2**63 +// Are there any Infs, NaNs, or zeros? +// +{ .mmi +(p0) ldfe P_0 = [table_ptr1],16 ;; +(p0) ldfe d_2 = [table_ptr2],16 + nop.i 999 +} +// +// Set PR_8 if Arg <= -2**24 +// Set PR_6 if Arg >= 2**63 +// +{ .mmi +(p0) ldfe P_1 = [table_ptr1],16 ;; +(p0) ldfe PI_BY_4 = [table_ptr2],16 + nop.i 999 +} +// +// Set PR_8 if Arg >= 2**24 +// +{ .mmi +(p0) ldfe P_2 = [table_ptr1],16 ;; +(p0) ldfe MPI_BY_4 = [table_ptr2],16 + nop.i 999 +} +// +// Load P_2 and PI_BY_4 +// +{ .mfi +(p0) ldfe P_3 = [table_ptr1],16 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fcmp.le.unc.s1 p6,p7 = Arg,NEGTWO_TO_63 + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fcmp.le.unc.s1 p8,p9 = Arg,NEGTWO_TO_24 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p7) fcmp.ge.s1 p6,p0 = Arg,TWO_TO_63 + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fcmp.ge.s1 p8,p0 = Arg,TWO_TO_24 + nop.i 999 ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Load P_3 and -PI_BY_4 +// +(p6) br.cond.spnt L(TANL_ARG_TOO_LARGE) ;; +} +{ .mib + nop.m 999 + nop.i 999 +// +// Load 2**(-2). +// Load -2**(-2). +// Branch out if we have a special argument. +// Branch out if the magnitude of the input argument is too large +// - do this branch before the next. +// +(p8) br.cond.spnt L(TANL_LARGER_ARG) ;; +} +// +// Branch to Cases 3 or 4 if Arg <= -2**24 or Arg >= 2**24 +// +{ .mfi +(p0) ldfs TWO_TO_NEG2 = [table_ptr2],4 +// ARGUMENT REDUCTION CODE - CASE 1 and 2 +// Load 2**(-2). +// Load -2**(-2). +(p0) fmpy.s1 N = Arg,two_by_PI + nop.i 999 ;; +} +{ .mfi +(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr2],12 +// +// N = Arg * 2/pi +// +(p0) fcmp.lt.unc.s1 p8,p9= Arg,PI_BY_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// if Arg < pi/4, set PR_8. +// +(p8) fcmp.gt.s1 p8,p9= Arg,MPI_BY_4 + nop.i 999 ;; +} +// +// Case 1: Is |r| < 2**(-2). +// Arg is the same as r in this case. +// r = Arg +// c = 0 +// +{ .mfi +(p8) mov N_fix_gr = r0 +// +// if Arg > -pi/4, reset PR_8. +// Select the case when |Arg| < pi/4 - set PR[8] = true. +// Else Select the case when |Arg| >= pi/4 - set PR[9] = true. +// +(p0) fcvt.fx.s1 N_fix = N + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Grab the integer part of N . +// +(p8) mov r = Arg + nop.i 999 +} +{ .mfi + nop.m 999 +(p8) mov c = f0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p8) fcmp.lt.unc.s1 p10, p11 = Arg, TWO_TO_NEG2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fcmp.gt.s1 p10,p0 = Arg, NEGTWO_TO_NEG2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 2: Place integer part of N in GP register. +// +(p9) fcvt.xf N = N_fix + nop.i 999 ;; +} +{ .mib +(p9) getf.sig N_fix_gr = N_fix + nop.i 999 +// +// Case 2: Convert integer N_fix back to normalized floating-point value. +// +(p10) br.cond.spnt L(TANL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p8) br.cond.sptk L(TANL_NORMAL_R) ;; +} +// +// Case 1: PR_3 is only affected when PR_1 is set. +// +{ .mmi +(p9) ldfs TWO_TO_NEG33 = [table_ptr2], 4 ;; +// +// Case 2: Load 2**(-33). +// +(p9) ldfs NEGTWO_TO_NEG33 = [table_ptr2], 4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 2: Load -2**(-33). +// +(p9) fnma.s1 s_val = N, P_1, Arg + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fmpy.s1 w = N, P_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 2: w = N * P_2 +// Case 2: s_val = -N * P_1 + Arg +// +(p0) fcmp.lt.unc.s1 p9,p8 = s_val, TWO_TO_NEG33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Decide between case_1 and case_2 reduce: +// +(p9) fcmp.gt.s1 p9, p8 = s_val, NEGTWO_TO_NEG33 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 1_reduce: s <= -2**(-33) or s >= 2**(-33) +// Case 2_reduce: -2**(-33) < s < 2**(-33) +// +(p8) fsub.s1 r = s_val, w + nop.i 999 +} +{ .mfi + nop.m 999 +(p9) fmpy.s1 w = N, P_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fma.s1 U_1 = N, P_2, w + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Case 1_reduce: Is |r| < 2**(-2), if so set PR_10 +// else set PR_11. +// +(p8) fsub.s1 c = s_val, r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 1_reduce: r = s + w (change sign) +// Case 2_reduce: w = N * P_3 (change sign) +// +(p8) fcmp.lt.unc.s1 p10, p11 = r, TWO_TO_NEG2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p10) fcmp.gt.s1 p10, p11 = r, NEGTWO_TO_NEG2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fsub.s1 r = s_val, U_1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Case 1_reduce: c is complete here. +// c = c + w (w has not been negated.) +// Case 2_reduce: r is complete here - continue to calculate c . +// r = s - U_1 +// +(p9) fms.s1 U_2 = N, P_2, U_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 1_reduce: c = s - r +// Case 2_reduce: U_1 = N * P_2 + w +// +(p8) fsub.s1 c = c, w + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p9) fsub.s1 s_val = s_val, r + nop.i 999 +} +{ .mfb + nop.m 999 +// +// Case 2_reduce: +// U_2 = N * P_2 - U_1 +// Not needed until later. +// +(p9) fadd.s1 U_2 = U_2, w +// +// Case 2_reduce: +// s = s - r +// U_2 = U_2 + w +// +(p10) br.cond.spnt L(TANL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p11) br.cond.sptk L(TANL_NORMAL_R) ;; +} +{ .mii + nop.m 999 +// +// Case 2_reduce: +// c = c - U_2 +// c is complete here +// Argument reduction ends here. +// +(p9) extr.u i_1 = N_fix_gr, 0, 1 ;; +(p9) cmp.eq.unc p11, p12 = 0x0000,i_1 ;; +} +{ .mfi + nop.m 999 +// +// Is i_1 even or odd? +// if i_1 == 0, set p11, else set p12. +// +(p11) fmpy.s1 rsq = r, r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) frcpa.s1 S_hi,p0 = f1, r + nop.i 999 +} + + + +// +// Case 1: Branch to SMALL_R or NORMAL_R. +// Case 1 is done now. +// + +{ .mfi +(p9) addl table_ptr1 = @ltoff(TANL_BASE_CONSTANTS), gp +(p9) fsub.s1 c = s_val, U_1 + nop.i 999 ;; +} +;; + +{ .mmi +(p9) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +{ .mmi +(p9) add table_ptr1 = 224, table_ptr1 ;; +(p9) ldfe P1_1 = [table_ptr1],144 + nop.i 999 ;; +} +// +// Get [i_1] - lsb of N_fix_gr . +// Load P1_1 and point to Q1_1 . +// +{ .mfi +(p9) ldfe Q1_1 = [table_ptr1] , 0 +// +// N even: rsq = r * Z +// N odd: S_hi = frcpa(r) +// +(p12) fmerge.ns S_hi = S_hi, S_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Case 2_reduce: +// c = s - U_1 +// +(p9) fsub.s1 c = c, U_2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: Change sign of S_hi +// +(p11) fmpy.s1 rsq = rsq, P1_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: rsq = rsq * P1_1 +// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary +// +(p11) fma.s1 Result = r, rsq, c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result = c + r * rsq +// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result = Result + r +// N odd: poly1 = 1.0 + S_hi * r 32 bits partial +// +(p11) fadd.s0 Result = r, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result1 = Result + r +// N odd: S_hi = S_hi * poly1 + S_hi 32 bits +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 64 bits partial +// +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * poly + 1.0 64 bits +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 +// +(p12) fma.s1 poly1 = S_hi, c, poly1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * c + poly1 +// +(p12) fmpy.s1 S_lo = S_hi, poly1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: S_lo = S_hi * poly1 +// +(p12) fma.s1 S_lo = Q1_1, r, S_lo + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N odd: Result = S_hi + S_lo +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// N odd: S_lo = S_lo + Q1_1 * r +// +(p12) fadd.s0 Result = S_hi, S_lo +(p0) br.ret.sptk b0 ;; +} + + +L(TANL_LARGER_ARG): + +// +// ARGUMENT REDUCTION CODE - CASE 3 and 4 +// + +{ .mfi +(p0) addl table_ptr1 = @ltoff(TANL_BASE_CONSTANTS), gp +(p0) fmpy.s1 N_0 = Arg, Inv_P_0 + nop.i 999 +} +;; + +{ .mmi +(p0) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +// +// Adjust table_ptr1 to beginning of table. +// N_0 = Arg * Inv_P_0 +// +{ .mmi +(p0) add table_ptr1 = 8, table_ptr1 ;; +// +// Point to 2*-14 +// +(p0) ldfs TWO_TO_NEG14 = [table_ptr1], 4 + nop.i 999 ;; +} +// +// Load 2**(-14). +// +{ .mmi +(p0) ldfs NEGTWO_TO_NEG14 = [table_ptr1], 180 ;; +// +// N_0_fix = integer part of N_0 . +// Adjust table_ptr1 to beginning of table. +// +(p0) ldfs TWO_TO_NEG2 = [table_ptr1], 4 + nop.i 999 ;; +} +// +// Make N_0 the integer part. +// +{ .mfi +(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr1] +// +// Load -2**(-14). +// +(p0) fcvt.fx.s1 N_0_fix = N_0 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fcvt.xf N_0 = N_0_fix + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fnma.s1 ArgPrime = N_0, P_0, Arg + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 w = N_0, d_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// ArgPrime = -N_0 * P_0 + Arg +// w = N_0 * d_1 +// +(p0) fmpy.s1 N = ArgPrime, two_by_PI + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N = ArgPrime * 2/pi +// +(p0) fcvt.fx.s1 N_fix = N + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N_fix is the integer part. +// +(p0) fcvt.xf N = N_fix + nop.i 999 ;; +} +{ .mfi +(p0) getf.sig N_fix_gr = N_fix + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N is the integer part of the reduced-reduced argument. +// Put the integer in a GP register. +// +(p0) fnma.s1 s_val = N, P_1, ArgPrime + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fnma.s1 w = N, P_2, w + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// s_val = -N*P_1 + ArgPrime +// w = -N*P_2 + w +// +(p0) fcmp.lt.unc.s1 p11, p10 = s_val, TWO_TO_NEG14 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fcmp.gt.s1 p11, p10 = s_val, NEGTWO_TO_NEG14 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 3: r = s_val + w (Z complete) +// Case 4: U_hi = N_0 * d_1 +// +(p10) fmpy.s1 V_hi = N, P_2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fmpy.s1 U_hi = N_0, d_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 3: r = s_val + w (Z complete) +// Case 4: U_hi = N_0 * d_1 +// +(p11) fmpy.s1 V_hi = N, P_2 + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fmpy.s1 U_hi = N_0, d_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Decide between case 3 and 4: +// Case 3: s <= -2**(-14) or s >= 2**(-14) +// Case 4: -2**(-14) < s < 2**(-14) +// +(p10) fadd.s1 r = s_val, w + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fmpy.s1 w = N, P_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: We need abs of both U_hi and V_hi - dont +// worry about switched sign of V_hi . +// +(p11) fsub.s1 A = U_hi, V_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Case 4: A = U_hi + V_hi +// Note: Worry about switched sign of V_hi, so subtract instead of add. +// +(p11) fnma.s1 V_lo = N, P_2, V_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fms.s1 U_lo = N_0, d_1, U_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fabs V_hiabs = V_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Case 4: V_hi = N * P_2 +// w = N * P_3 +// Note the product does not include the (-) as in the writeup +// so (-) missing for V_hi and w . +(p10) fadd.s1 r = s_val, w + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 3: c = s_val - r +// Case 4: U_lo = N_0 * d_1 - U_hi +// +(p11) fabs U_hiabs = U_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fmpy.s1 w = N, P_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: Set P_12 if U_hiabs >= V_hiabs +// +(p11) fadd.s1 C_hi = s_val, A + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: C_hi = s_val + A +// +(p11) fadd.s1 t = U_lo, V_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 3: Is |r| < 2**(-2), if so set PR_7 +// else set PR_8. +// Case 3: If PR_7 is set, prepare to branch to Small_R. +// Case 3: If PR_8 is set, prepare to branch to Normal_R. +// +(p10) fsub.s1 c = s_val, r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 3: c = (s - r) + w (c complete) +// +(p11) fcmp.ge.unc.s1 p12, p13 = U_hiabs, V_hiabs + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fms.s1 w = N_0, d_2, w + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: V_hi = N * P_2 +// w = N * P_3 +// Note the product does not include the (-) as in the writeup +// so (-) missing for V_hi and w . +// +(p10) fcmp.lt.unc.s1 p14, p15 = r, TWO_TO_NEG2 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p14) fcmp.gt.s1 p14, p15 = r, NEGTWO_TO_NEG2 + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// Case 4: V_lo = -N * P_2 - V_hi (U_hi is in place of V_hi in writeup) +// Note: the (-) is still missing for V_hi . +// Case 4: w = w + N_0 * d_2 +// Note: the (-) is now incorporated in w . +// +(p10) fadd.s1 c = c, w +// +// Case 4: t = U_lo + V_lo +// Note: remember V_lo should be (-), subtract instead of add. NO +// +(p14) br.cond.spnt L(TANL_SMALL_R) ;; +} +{ .mib + nop.m 999 + nop.i 999 +(p15) br.cond.spnt L(TANL_NORMAL_R) ;; +} +{ .mfi + nop.m 999 +// +// Case 3: Vector off when |r| < 2**(-2). Recall that PR_3 will be true. +// The remaining stuff is for Case 4. +// +(p12) fsub.s1 a = U_hi, A +(p11) extr.u i_1 = N_fix_gr, 0, 1 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: C_lo = s_val - C_hi +// +(p11) fadd.s1 t = t, w + nop.i 999 +} +{ .mfi + nop.m 999 +(p13) fadd.s1 a = V_hi, A + nop.i 999 ;; +} + + + +// +// Case 4: a = U_hi - A +// a = V_hi - A (do an add to account for missing (-) on V_hi +// + +{ .mfi +(p11) addl table_ptr1 = @ltoff(TANL_BASE_CONSTANTS), gp +(p11) fsub.s1 C_lo = s_val, C_hi + nop.i 999 +} +;; + + + +// +// Case 4: a = (U_hi - A) + V_hi +// a = (V_hi - A) + U_hi +// In each case account for negative missing form V_hi . +// + + +{ .mmi +(p11) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +// +// Case 4: C_lo = (s_val - C_hi) + A +// +{ .mmi +(p11) add table_ptr1 = 224, table_ptr1 ;; +(p11) ldfe P1_1 = [table_ptr1], 16 + nop.i 999 ;; +} +{ .mfi +(p11) ldfe P1_2 = [table_ptr1], 128 +// +// Case 4: w = U_lo + V_lo + w +// +(p12) fsub.s1 a = a, V_hi + nop.i 999 ;; +} +// +// Case 4: r = C_hi + C_lo +// +{ .mfi +(p11) ldfe Q1_1 = [table_ptr1], 16 +(p11) fadd.s1 C_lo = C_lo, A + nop.i 999 ;; +} +// +// Case 4: c = C_hi - r +// Get [i_1] - lsb of N_fix_gr. +// +{ .mfi +(p11) ldfe Q1_2 = [table_ptr1], 16 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p13) fsub.s1 a = U_hi, a + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fadd.s1 t = t, a + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: t = t + a +// +(p11) fadd.s1 C_lo = C_lo, t + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// Case 4: C_lo = C_lo + t +// +(p11) fadd.s1 r = C_hi, C_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fsub.s1 c = C_hi, r + nop.i 999 +} +{ .mfi + nop.m 999 +// +// Case 4: c = c + C_lo finished. +// Is i_1 even or odd? +// if i_1 == 0, set PR_4, else set PR_5. +// +// r and c have been computed. +// We known whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +(p0) fmpy.s1 rsq = r, r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fadd.s1 c = c , C_lo +(p11) cmp.eq.unc p11, p12 = 0x0000, i_1 ;; +} +{ .mfi + nop.m 999 +(p12) frcpa.s1 S_hi, p0 = f1, r + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N odd: Change sign of S_hi +// +(p11) fma.s1 Result = rsq, P1_2, P1_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 P = rsq, Q1_2, Q1_1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N odd: Result = S_hi + S_lo (User supplied rounding mode for C1) +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: rsq = r * r +// N odd: S_hi = frcpa(r) +// +(p12) fmerge.ns S_hi = S_hi, S_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N even: rsq = rsq * P1_2 + P1_1 +// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary +// +(p11) fmpy.s1 Result = rsq, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r,f1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N even: Result = Result * rsq +// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary +// +(p11) fma.s1 Result = r, Result, c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N odd: S_hi = S_hi * poly1 + S_hi 32 bits +// +(p11) fadd.s0 Result= r, Result + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result = Result * r + c +// N odd: poly1 = 1.0 + S_hi * r 32 bits partial +// +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result1 = Result + r (Rounding mode S0) +// N odd: poly1 = S_hi * r + 1.0 64 bits partial +// +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * poly + S_hi 64 bits +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 +// +(p12) fma.s1 poly1 = S_hi, c, poly1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * c + poly1 +// +(p12) fmpy.s1 S_lo = S_hi, poly1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: S_lo = S_hi * poly1 +// +(p12) fma.s1 S_lo = P, r, S_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// N odd: S_lo = S_lo + r * P +// +(p12) fadd.s0 Result = S_hi, S_lo +(p0) br.ret.sptk b0 ;; +} + + +L(TANL_SMALL_R): +{ .mii + nop.m 999 +(p0) extr.u i_1 = N_fix_gr, 0, 1 ;; +(p0) cmp.eq.unc p11, p12 = 0x0000, i_1 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 rsq = r, r + nop.i 999 ;; +} +{ .mfi +(p0) addl table_ptr1 = @ltoff(TANL_BASE_CONSTANTS), gp +(p12) frcpa.s1 S_hi, p0 = f1, r + nop.i 999 +} +;; + + +{ .mmi +(p0) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + +// ***************************************************************** +// ***************************************************************** +// ***************************************************************** + + +{ .mmi +(p0) add table_ptr1 = 224, table_ptr1 ;; +(p0) ldfe P1_1 = [table_ptr1], 16 + nop.i 999 ;; +} +// r and c have been computed. +// We known whether this is the sine or cosine routine. +// Make sure ftz mode is set - should be automatic when using wre +// |r| < 2**(-2) +{ .mfi +(p0) ldfe P1_2 = [table_ptr1], 16 +(p11) fmpy.s1 r_to_the_8 = rsq, rsq + nop.i 999 ;; +} +// +// Set table_ptr1 to beginning of constant table. +// Get [i_1] - lsb of N_fix_gr. +// +{ .mfi +(p0) ldfe P1_3 = [table_ptr1], 96 +// +// N even: rsq = r * r +// N odd: S_hi = frcpa(r) +// +(p12) fmerge.ns S_hi = S_hi, S_hi + nop.i 999 ;; +} +// +// Is i_1 even or odd? +// if i_1 == 0, set PR_11. +// if i_1 != 0, set PR_12. +// +{ .mfi +(p11) ldfe P1_9 = [table_ptr1], -16 +// +// N even: Poly2 = P1_7 + Poly2 * rsq +// N odd: poly2 = Q1_5 + poly2 * rsq +// +(p11) fadd.s1 CORR = rsq, f1 + nop.i 999 ;; +} +{ .mmi +(p11) ldfe P1_8 = [table_ptr1], -16 ;; +// +// N even: Poly1 = P1_2 + P1_3 * rsq +// N odd: poly1 = 1.0 + S_hi * r +// 16 bits partial account for necessary (-1) +// +(p11) ldfe P1_7 = [table_ptr1], -16 + nop.i 999 ;; +} +// +// N even: Poly1 = P1_1 + Poly1 * rsq +// N odd: S_hi = S_hi + S_hi * poly1) 16 bits account for necessary +// +{ .mfi +(p11) ldfe P1_6 = [table_ptr1], -16 +// +// N even: Poly2 = P1_5 + Poly2 * rsq +// N odd: poly2 = Q1_3 + poly2 * rsq +// +(p11) fmpy.s1 r_to_the_8 = r_to_the_8, r_to_the_8 + nop.i 999 ;; +} +// +// N even: Poly1 = Poly1 * rsq +// N odd: poly1 = 1.0 + S_hi * r 32 bits partial +// +{ .mfi +(p11) ldfe P1_5 = [table_ptr1], -16 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} + +// +// N even: CORR = CORR * c +// N odd: S_hi = S_hi * poly1 + S_hi 32 bits +// + +// +// N even: Poly2 = P1_6 + Poly2 * rsq +// N odd: poly2 = Q1_4 + poly2 * rsq +// + +{ .mmf +(p11) ldfe P1_4 = [table_ptr1], -16 +(p0) addl table_ptr2 = @ltoff(TANL_BASE_CONSTANTS), gp +(p11) fmpy.s1 CORR = CORR, c +} +;; + + +{ .mmi +(p0) ld8 table_ptr2 = [table_ptr2] + nop.m 999 + nop.i 999 +} +;; + + +{ .mii +(p0) add table_ptr2 = 464, table_ptr2 + nop.i 999 ;; + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fma.s1 Poly1 = P1_3, rsq, P1_2 + nop.i 999 ;; +} +{ .mfi +(p0) ldfe Q1_7 = [table_ptr2], -16 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 ;; +} +{ .mfi +(p0) ldfe Q1_6 = [table_ptr2], -16 +(p11) fma.s1 Poly2 = P1_9, rsq, P1_8 + nop.i 999 ;; +} +{ .mmi +(p0) ldfe Q1_5 = [table_ptr2], -16 ;; +(p12) ldfe Q1_4 = [table_ptr2], -16 + nop.i 999 ;; +} +{ .mfi +(p12) ldfe Q1_3 = [table_ptr2], -16 +// +// N even: Poly2 = P1_8 + P1_9 * rsq +// N odd: poly2 = Q1_6 + Q1_7 * rsq +// +(p11) fma.s1 Poly1 = Poly1, rsq, P1_1 + nop.i 999 ;; +} +{ .mfi +(p12) ldfe Q1_2 = [table_ptr2], -16 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 ;; +} +{ .mfi +(p12) ldfe Q1_1 = [table_ptr2], -16 +(p11) fma.s1 Poly2 = Poly2, rsq, P1_7 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: CORR = rsq + 1 +// N even: r_to_the_8 = rsq * rsq +// +(p11) fmpy.s1 Poly1 = Poly1, rsq + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = Q1_7, rsq, Q1_6 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fma.s1 Poly2 = Poly2, rsq, P1_6 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_5 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p11) fma.s1 Poly2= Poly2, rsq, P1_5 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 S_hi = S_hi, poly1, S_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: r_to_the_8 = r_to_the_8 * r_to_the_8 +// N odd: poly1 = S_hi * r + 1.0 64 bits partial +// +(p11) fma.s1 Poly2 = Poly2, rsq, P1_4 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result = CORR + Poly * r +// N odd: P = Q1_1 + poly2 * rsq +// +(p12) fma.s1 poly1 = S_hi, r, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_3 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Poly2 = P1_4 + Poly2 * rsq +// N odd: poly2 = Q1_2 + poly2 * rsq +// +(p11) fma.s1 Poly = Poly2, r_to_the_8, Poly1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly1 = S_hi, c, poly1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fma.s1 poly2 = poly2, rsq, Q1_2 + nop.i 999 ;; +} + +{ .mfi + nop.m 999 +// +// N even: Poly = Poly1 + Poly2 * r_to_the_8 +// N odd: S_hi = S_hi * poly1 + S_hi 64 bits +// +(p11) fma.s1 Result = Poly, r, CORR + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result = r + Result (User supplied rounding mode) +// N odd: poly1 = S_hi * c + poly1 +// +(p12) fmpy.s1 S_lo = S_hi, poly1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fma.s1 P = poly2, rsq, Q1_1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: poly1 = S_hi * r + 1.0 +// +// +// N odd: S_lo = S_hi * poly1 +// +(p11) fadd.s0 Result = Result, r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: S_lo = Q1_1 * c + S_lo +// +(p12) fma.s1 S_lo = Q1_1, c, S_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: Result = S_lo + r * P +// +(p12) fma.s1 Result = P, r, S_lo + nop.i 999 ;; +} +{ .mfb + nop.m 999 +// +// N odd: Result = Result + S_hi (user supplied rounding mode) +// +(p12) fadd.s0 Result = Result, S_hi +(p0) br.ret.sptk b0 ;; +} + + +L(TANL_NORMAL_R): +{ .mfi +(p0) getf.sig sig_r = r +// ******************************************************************* +// ******************************************************************* +// ******************************************************************* +// +// r and c have been computed. +// Make sure ftz mode is set - should be automatic when using wre +// +// +// Get [i_1] - lsb of N_fix_gr alone. +// +(p0) fmerge.s Pos_r = f1, r +(p0) extr.u i_1 = N_fix_gr, 0, 1 ;; +} +{ .mfi + nop.m 999 +(p0) fmerge.s sgn_r = r, f1 +(p0) cmp.eq.unc p11, p12 = 0x0000, i_1 ;; +} +{ .mfi + nop.m 999 + nop.f 999 +(p0) extr.u lookup = sig_r, 58, 5 +} +{ .mlx + nop.m 999 +(p0) movl Create_B = 0x8200000000000000 ;; +} +{ .mfi +(p0) addl table_ptr1 = @ltoff(TANL_BASE_CONSTANTS), gp + nop.f 999 +(p0) dep Create_B = lookup, Create_B, 58, 5 +} +;; + + +// +// Get [i_1] - lsb of N_fix_gr alone. +// Pos_r = abs (r) +// + + +{ .mmi +(p0) ld8 table_ptr1 = [table_ptr1] + nop.m 999 + nop.i 999 +} +;; + + +{ .mmi + nop.m 999 +(p0) setf.sig B = Create_B +// +// Set table_ptr1 and table_ptr2 to base address of +// constant table. +// +(p0) add table_ptr1 = 480, table_ptr1 ;; +} +{ .mmb + nop.m 999 +// +// Is i_1 or i_0 == 0 ? +// Create the constant 1 00000 1000000000000000000000... +// +(p0) ldfe P2_1 = [table_ptr1], 16 + nop.b 999 +} +{ .mmi + nop.m 999 ;; +(p0) getf.exp exp_r = Pos_r + nop.i 999 +} +// +// Get r's exponent +// Get r's significand +// +{ .mmi +(p0) ldfe P2_2 = [table_ptr1], 16 ;; +// +// Get the 5 bits or r for the lookup. 1.xxxxx .... +// from sig_r. +// Grab lsb of exp of B +// +(p0) ldfe P2_3 = [table_ptr1], 16 + nop.i 999 ;; +} +{ .mii + nop.m 999 +(p0) andcm table_offset = 0x0001, exp_r ;; +(p0) shl table_offset = table_offset, 9 ;; +} +{ .mii + nop.m 999 +// +// Deposit 0 00000 1000000000000000000000... on +// 1 xxxxx yyyyyyyyyyyyyyyyyyyyyy..., +// getting rid of the ys. +// Is B = 2** -2 or B= 2** -1? If 2**-1, then +// we want an offset of 512 for table addressing. +// +(p0) shladd table_offset = lookup, 4, table_offset ;; +// +// B = ........ 1xxxxx 1000000000000000000... +// +(p0) add table_ptr1 = table_ptr1, table_offset ;; +} +{ .mmb + nop.m 999 +// +// B = ........ 1xxxxx 1000000000000000000... +// Convert B so it has the same exponent as Pos_r +// +(p0) ldfd T_hi = [table_ptr1], 8 + nop.b 999 ;; +} + + + +// +// x = |r| - B +// Load T_hi. +// Load C_hi. +// + +{ .mmf +(p0) addl table_ptr2 = @ltoff(TANL_BASE_CONSTANTS), gp +(p0) ldfs T_lo = [table_ptr1] +(p0) fmerge.se B = Pos_r, B +} +;; + + +{ .mmi +(p0) ld8 table_ptr2 = [table_ptr2] + nop.m 999 + nop.i 999 +} +;; + + +{ .mii +(p0) add table_ptr2 = 1360, table_ptr2 + nop.i 999 ;; +(p0) add table_ptr2 = table_ptr2, table_offset ;; +} +{ .mfi +(p0) ldfd C_hi = [table_ptr2], 8 +(p0) fsub.s1 x = Pos_r, B + nop.i 999 ;; +} +{ .mii +(p0) ldfs C_lo = [table_ptr2],255 + nop.i 999 ;; +// +// xsq = x * x +// N even: Tx = T_hi * x +// Load T_lo. +// Load C_lo - increment pointer to get SC_inv +// - cant get all the way, do an add later. +// +(p0) add table_ptr2 = 569, table_ptr2 ;; +} +// +// N even: Tx1 = Tx + 1 +// N odd: Cx1 = 1 - Cx +// +{ .mfi +(p0) ldfe SC_inv = [table_ptr2], 0 + nop.f 999 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 xsq = x, x + nop.i 999 +} +{ .mfi + nop.m 999 +(p11) fmpy.s1 Tx = T_hi, x + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fmpy.s1 Cx = C_hi, x + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: Cx = C_hi * x +// +(p0) fma.s1 P = P2_3, xsq, P2_2 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N even and odd: P = P2_3 + P2_2 * xsq +// +(p11) fadd.s1 Tx1 = Tx, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: D = C_hi - tanx +// N odd: D = T_hi + tanx +// +(p11) fmpy.s1 CORR = SC_inv, T_hi + nop.i 999 +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 Sx = SC_inv, x + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fmpy.s1 CORR = SC_inv, C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fsub.s1 V_hi = f1, Cx + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fma.s1 P = P, xsq, P2_1 + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N even and odd: P = P2_1 + P * xsq +// +(p11) fma.s1 V_hi = Tx, Tx1, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: Result = sgn_r * tail + T_hi (user rounding mode for C1) +// N odd: Result = sgn_r * tail + C_hi (user rounding mode for C1) +// +(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 CORR = CORR, c + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fnma.s1 V_hi = Cx,V_hi,f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: V_hi = Tx * Tx1 + 1 +// N odd: Cx1 = 1 - Cx * Cx1 +// +(p0) fmpy.s1 P = P, xsq + nop.i 999 +} +{ .mfi + nop.m 999 +// +// N even and odd: P = P * xsq +// +(p11) fmpy.s1 V_hi = V_hi, T_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: tail = P * tail + V_lo +// +(p11) fmpy.s1 T_hi = sgn_r, T_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p0) fmpy.s1 CORR = CORR, sgn_r + nop.i 999 ;; +} +{ .mfi + nop.m 999 +(p12) fmpy.s1 V_hi = V_hi,C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: V_hi = T_hi * V_hi +// N odd: V_hi = C_hi * V_hi +// +(p0) fma.s1 tanx = P, x, x + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fnmpy.s1 C_hi = sgn_r, C_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: V_lo = 1 - V_hi + C_hi +// N odd: V_lo = 1 - V_hi + T_hi +// +(p11) fadd.s1 CORR = CORR, T_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fsub.s1 CORR = CORR, C_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: tanx = x + x * P +// N even and odd: Sx = SC_inv * x +// +(p11) fsub.s1 D = C_hi, tanx + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fadd.s1 D = T_hi, tanx + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N odd: CORR = SC_inv * C_hi +// N even: CORR = SC_inv * T_hi +// +(p0) fnma.s1 D = V_hi, D, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: D = 1 - V_hi * D +// N even and odd: CORR = CORR * c +// +(p0) fma.s1 V_hi = V_hi, D, V_hi + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: V_hi = V_hi + V_hi * D +// N even and odd: CORR = sgn_r * CORR +// +(p11) fnma.s1 V_lo = V_hi, C_hi, f1 + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fnma.s1 V_lo = V_hi, T_hi, f1 + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: CORR = COOR + T_lo +// N odd: CORR = CORR - C_lo +// +(p11) fma.s1 V_lo = tanx, V_hi, V_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fnma.s1 V_lo = tanx, V_hi, V_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: V_lo = V_lo + V_hi * tanx +// N odd: V_lo = V_lo - V_hi * tanx +// +(p11) fnma.s1 V_lo = C_lo, V_hi, V_lo + nop.i 999 +} +{ .mfi + nop.m 999 +(p12) fnma.s1 V_lo = T_lo, V_hi, V_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: V_lo = V_lo - V_hi * C_lo +// N odd: V_lo = V_lo - V_hi * T_lo +// +(p0) fmpy.s1 V_lo = V_hi, V_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: V_lo = V_lo * V_hi +// +(p0) fadd.s1 tail = V_hi, V_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: tail = V_hi + V_lo +// +(p0) fma.s1 tail = tail, P, V_lo + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even: T_hi = sgn_r * T_hi +// N odd : C_hi = -sgn_r * C_hi +// +(p0) fma.s1 tail = tail, Sx, CORR + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even and odd: tail = Sx * tail + CORR +// +(p0) fma.s1 tail = V_hi, Sx, tail + nop.i 999 ;; +} +{ .mfi + nop.m 999 +// +// N even an odd: tail = Sx * V_hi + tail +// +(p11) fma.s0 Result = sgn_r, tail, T_hi + nop.i 999 +} +{ .mfb + nop.m 999 +(p12) fma.s0 Result = sgn_r, tail, C_hi +(p0) br.ret.sptk b0 ;; +} + +L(TANL_SPECIAL): +{ .mfb + nop.m 999 +(p0) fmpy.s0 Arg = Arg, f0 +(p0) br.ret.sptk b0 ;; +} +// +// Code for NaNs, Unsupporteds, Infs, or +/- zero ? +// Invalid raised for Infs and SNaNs. +// + +.endp tanl +ASM_SIZE_DIRECTIVE(tanl) + +// ******************************************************************* +// ******************************************************************* +// ******************************************************************* +// +// Special Code to handle very large argument case. +// Call int pi_by_2_reduce(&x,&r,&c) +// for |arguments| >= 2**63 +// (Arg or x) is in f8 +// Address to save r and c as double +// ******************************************************************* +// ******************************************************************* +// ******************************************************************* + +.proc __libm_callout +__libm_callout: +L(TANL_ARG_TOO_LARGE): +.prologue +{ .mfi + add r50=-32,sp // Parameter: r address + nop.f 0 +.save ar.pfs,GR_SAVE_PFS + mov GR_SAVE_PFS=ar.pfs // Save ar.pfs +} +{ .mfi +.fframe 64 + add sp=-64,sp // Create new stack + nop.f 0 + mov GR_SAVE_GP=gp // Save gp +};; +{ .mmi + stfe [r50] = f0,16 // Clear Parameter r on stack + add r49 = 16,sp // Parameter x address +.save b0, GR_SAVE_B0 + mov GR_SAVE_B0=b0 // Save b0 +};; +.body +{ .mib + stfe [r50] = f0,-16 // Clear Parameter c on stack + nop.i 0 + nop.b 0 +} +{ .mib + stfe [r49] = Arg // Store Parameter x on stack + nop.i 0 +(p0) br.call.sptk b0=__libm_pi_by_2_reduce# ;; +};; +// +// Load 2^-2 +// +{ .mmi +(p0) ldfe Arg =[r49],16 +// +// Call argument reduction +// +(p0) ldfs TWO_TO_NEG2 = [table_ptr2],4 +// Get Arg off stack +// Get r off stack - hi order part +// Get c off stack - lo order part +(p0) mov N_fix_gr = r8 ;; +} +{ .mmb +(p0) ldfe r =[r50],16 +(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr2],4 + nop.b 999 ;; +} +{ .mfi +(p0) ldfe c =[r50],-32 + nop.f 999 + nop.i 999 ;; +} +{ .mfi +.restore sp + add sp = 64,sp // Restore stack pointer +// +// Is |r| < 2**(-2) +// +(p0) fcmp.lt.unc.s1 p6, p0 = r, TWO_TO_NEG2 +mov b0 = GR_SAVE_B0 // Restore return address +};; +{ .mfi + mov gp = GR_SAVE_GP // Restore gp +(p6) fcmp.gt.unc.s1 p6, p0 = r, NEGTWO_TO_NEG2 + mov ar.pfs = GR_SAVE_PFS // Restore gp +};; +{ .mbb + nop.m 999 +(p6) br.cond.spnt L(TANL_SMALL_R) +(p0) br.cond.sptk L(TANL_NORMAL_R) ;; +} + +.endp __libm_callout +ASM_SIZE_DIRECTIVE(__libm_callout) + +.type __libm_pi_by_2_reduce#,@function +.global __libm_pi_by_2_reduce# diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_trunc.S glibc-2.2.3/sysdeps/ia64/fpu/s_trunc.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_trunc.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_trunc.S Mon Feb 19 01:05:01 2001 @@ -0,0 +1,188 @@ +.file "trunc.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 7/7/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +.align 32 +.global trunc# + +.section .text +.proc trunc# +.align 32 + +// History +//============================================================== +// 7/7/00: Created +//============================================================== + +// API +//============================================================== +// double trunc(double x) +//============================================================== + +#include "libm_support.h" + +// general input registers: +TRUNC_GR_FFFF = r14 +TRUNC_GR_signexp = r15 +TRUNC_GR_exponent = r16 +TRUNC_GR_expmask = r17 +TRUNC_GR_bigexp = r18 + +// floating-point registers: +// f8, f9, f11, f12 + +// predicate registers used: +// p6, p7, p8, p9, p10, p11 + +// Overview of operation +//============================================================== +// double trunc(double x) +// Return an integer value (represented as a double) less than or +// equal to x in magnitude. +// This is x rounded toward zero to an integral value. +//============================================================== + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +trunc: + +{ .mfi + getf.exp TRUNC_GR_signexp = f8 + fcvt.fx.trunc.s1 f9 = f8 + addl TRUNC_GR_bigexp = 0x10033, r0 +} +{ .mfi + mov TRUNC_GR_FFFF = 0x0FFFF + fnorm.d f11 = f8 + mov TRUNC_GR_expmask = 0x1FFFF +};; +// get the exponent of x +// convert x to integer in signficand of f9 +// Normalize x - this will raise invalid on SNaNs, the +// denormal operand flag - and possibly a spurious U flag +// get exponent only mask (will exclude sign bit) + +{ .mfi + nop.m 0 + fclass.m p7,p8 = f8, 0x0b + nop.i 0 +} +{ .mfi + nop.m 0 + fcmp.eq.unc.s1 p9,p0 = f8,f0 + nop.i 0 +};; +// fclass to set p7 if unnorm +{ .mmi + and TRUNC_GR_exponent = TRUNC_GR_signexp, TRUNC_GR_expmask ;; +(p8) cmp.ge.unc p10,p11 = TRUNC_GR_exponent, TRUNC_GR_bigexp +(p8) cmp.ne.unc p6,p0 = TRUNC_GR_exponent, TRUNC_GR_signexp +};; +// Get the exponent of x +// Test if exponent such that result already an integer +// Test if x < 0 +{ .mmi +(p9) cmp.eq.andcm p10,p11 = r0, r0 +(p6) cmp.lt.unc p6,p0 = TRUNC_GR_exponent, TRUNC_GR_FFFF + nop.i 0 +};; +// If -1 < x < 0, set p6, turn off p10 and p11, and set result to -0.0 +{ .mfb +(p6) cmp.eq.andcm p10,p11 = r0, r0 +(p6) fmerge.s f8 = f8, f0 + nop.b 0 +};; +// If not a unnorm, set p10 if x already is a big int, nan, or inf? +// If not a unnorm, set p10 if x already is a big int, nan, or inf? +.pred.rel "mutex",p10,p11 +{ .mfb + nop.m 0 +(p11) fcvt.xf f8 = f9 + nop.b 0 +} +{ .mfb + nop.m 0 +(p10) fma.d.s1 f8 = f11,f1,f0 +(p8) br.ret.sptk b0 +};; +// If not a unnorm and not an big int, nan,or +/-inf convert signficand +// back to f8. +// If not a unorm and a big int, nan, or +/-inf, return fnorm'd x +// If not a unorm, Return +// If unnorm, get the exponent again - perhaps it wasn't a denorm. +{ .mfb +(p7) getf.exp TRUNC_GR_signexp = f11 +(p7) fcvt.fx.trunc.s1 f12 = f11 + nop.b 0 +};; +{ .mfb + and TRUNC_GR_exponent = TRUNC_GR_signexp, TRUNC_GR_expmask + fcmp.lt.unc.s1 p9,p0 = f8,f0 + nop.b 0 +};; +{ .mfb + cmp.ge.unc p10,p11 = TRUNC_GR_exponent, TRUNC_GR_bigexp + nop.f 0 + nop.b 0 +};; +// If a unnorm, check to see if value is already a big int. +{ .mfb + nop.m 0 +(p11) fcvt.xf f8 = f12 + nop.b 0 +} +{ .mfi + nop.m 0 +(p10) fma.d.s1 f8 = f11,f1,f0 + nop.i 0 +};; +{ .mfb + nop.m 0 +(p9) fmerge.ns f8 = f1,f8 + br.ret.sptk b0 +};; +// If so return it. Otherwise, return (fcvt.xf(fcvt.fx.trunc(x))) +// Make sure the result is negative if it should be - that is +// negative(denormal) -> -0. +.endp trunc +ASM_SIZE_DIRECTIVE(trunc) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_truncf.S glibc-2.2.3/sysdeps/ia64/fpu/s_truncf.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_truncf.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_truncf.S Mon Feb 19 01:05:08 2001 @@ -0,0 +1,188 @@ +.file "truncf.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 7/7/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +.align 32 +.global truncf# + +.section .text +.proc truncf# +.align 32 + +// History +//============================================================== +// 7/7/00: Created +//============================================================== + +// API +//============================================================== +// float truncf(float x) +//============================================================== + +#include "libm_support.h" + +// general input registers: +TRUNC_GR_FFFF = r14 +TRUNC_GR_signexp = r15 +TRUNC_GR_exponent = r16 +TRUNC_GR_expmask = r17 +TRUNC_GR_bigexp = r18 + +// floating-point registers: +// f8, f9, f11, f12 + +// predicate registers used: +// p6, p7, p8, p9, p10, p11 + +// Overview of operation +//============================================================== +// float truncf(float x) +// Return an integer value (represented as a float) less than or +// equal to x in magnitude. +// This is x rounded toward zero to an integral value. +//============================================================== + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +truncf: + +{ .mfi + getf.exp TRUNC_GR_signexp = f8 + fcvt.fx.trunc.s1 f9 = f8 + addl TRUNC_GR_bigexp = 0x10016, r0 +} +{ .mfi + mov TRUNC_GR_FFFF = 0x0FFFF + fnorm.s f11 = f8 + mov TRUNC_GR_expmask = 0x1FFFF +};; +// get the exponent of x +// convert x to integer in signficand of f9 +// Normalize x - this will raise invalid on SNaNs, the +// denormal operand flag - and possibly a spurious U flag +// get exponent only mask (will exclude sign bit) + +{ .mfi + nop.m 0 + fclass.m p7,p8 = f8, 0x0b + nop.i 0 +} +{ .mfi + nop.m 0 + fcmp.eq.unc.s1 p9,p0 = f8,f0 + nop.i 0 +};; +// fclass to set p7 if unnorm +{ .mmi + and TRUNC_GR_exponent = TRUNC_GR_signexp, TRUNC_GR_expmask ;; +(p8) cmp.ge.unc p10,p11 = TRUNC_GR_exponent, TRUNC_GR_bigexp +(p8) cmp.ne.unc p6,p0 = TRUNC_GR_exponent, TRUNC_GR_signexp +};; +// Get the exponent of x +// Test if exponent such that result already an integer +// Test if x < 0 +{ .mmi +(p9) cmp.eq.andcm p10,p11 = r0, r0 +(p6) cmp.lt.unc p6,p0 = TRUNC_GR_exponent, TRUNC_GR_FFFF + nop.i 0 +};; +// If -1 < x < 0, set p6, turn off p10 and p11, and set result to -0.0 +{ .mfb +(p6) cmp.eq.andcm p10,p11 = r0, r0 +(p6) fmerge.s f8 = f8, f0 + nop.b 0 +};; +// If not a unnorm, set p10 if x already is a big int, nan, or inf? +// If not a unnorm, set p10 if x already is a big int, nan, or inf? +.pred.rel "mutex",p10,p11 +{ .mfb + nop.m 0 +(p11) fcvt.xf f8 = f9 + nop.b 0 +} +{ .mfb + nop.m 0 +(p10) fma.s.s1 f8 = f11,f1,f0 +(p8) br.ret.sptk b0 +};; +// If not a unnorm and not an big int, nan,or +/-inf convert signficand +// back to f8. +// If not a unorm and a big int, nan, or +/-inf, return fnorm'd x +// If not a unorm, Return +// If unnorm, get the exponent again - perhaps it wasn't a denorm. +{ .mfb +(p7) getf.exp TRUNC_GR_signexp = f11 +(p7) fcvt.fx.trunc.s1 f12 = f11 + nop.b 0 +};; +{ .mfb + and TRUNC_GR_exponent = TRUNC_GR_signexp, TRUNC_GR_expmask + fcmp.lt.unc.s1 p9,p0 = f8,f0 + nop.b 0 +};; +{ .mfb + cmp.ge.unc p10,p11 = TRUNC_GR_exponent, TRUNC_GR_bigexp + nop.f 0 + nop.b 0 +};; +// If a unnorm, check to see if value is already a big int. +{ .mfb + nop.m 0 +(p11) fcvt.xf f8 = f12 + nop.b 0 +} +{ .mfi + nop.m 0 +(p10) fma.s.s1 f8 = f11,f1,f0 + nop.i 0 +};; +{ .mfb + nop.m 0 +(p9) fmerge.ns f8 = f1,f8 + br.ret.sptk b0 +};; +// If so return it. Otherwise, return (fcvt.xf(fcvt.fx.trunc(x))) +// Make sure the result is negative if it should be - that is +// negative(denormal) -> -0. +.endp truncf +ASM_SIZE_DIRECTIVE(truncf) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/s_truncl.S glibc-2.2.3/sysdeps/ia64/fpu/s_truncl.S --- glibc-2.2.2/sysdeps/ia64/fpu/s_truncl.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/s_truncl.S Mon Feb 19 01:05:15 2001 @@ -0,0 +1,188 @@ +.file "truncl.s" + +// Copyright (c) 2000, 2001, Intel Corporation +// All rights reserved. +// +// Contributed 7/7/2000 by John Harrison, Cristina Iordache, Ted Kubaska, +// Bob Norin, Shane Story, and Ping Tak Peter Tang of the +// Computational Software Lab, Intel Corporation. +// +// WARRANTY DISCLAIMER +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Intel Corporation is the author of this code, and requests that all +// problem reports or change requests be submitted to it directly at +// http://developer.intel.com/opensource. +// +.align 32 +.global truncl# + +.section .text +.proc truncl# +.align 32 + +// History +//============================================================== +// 7/7/00: Created +//============================================================== + +// API +//============================================================== +// long double truncl(float x) +//============================================================== + +#include "libm_support.h" + +// general input registers: +TRUNC_GR_FFFF = r14 +TRUNC_GR_signexp = r15 +TRUNC_GR_exponent = r16 +TRUNC_GR_expmask = r17 +TRUNC_GR_bigexp = r18 + +// floating-point registers: +// f8, f9, f11, f12 + +// predicate registers used: +// p6, p7, p8, p9, p10, p11 + +// Overview of operation +//============================================================== +// long double truncl(long double x) +// Return an integer value (represented as a long double) less than or +// equal to x in magnitude. +// This is x rounded toward zero to an integral value. +//============================================================== + +// double_extended +// if the exponent is > 1003e => 3F(true) = 63(decimal) +// we have a significand of 64 bits 1.63-bits. +// If we multiply by 2^63, we no longer have a fractional part +// So input is an integer value already. + +// double +// if the exponent is >= 10033 => 34(true) = 52(decimal) +// 34 + 3ff = 433 +// we have a significand of 53 bits 1.52-bits. (implicit 1) +// If we multiply by 2^52, we no longer have a fractional part +// So input is an integer value already. + +// single +// if the exponent is > 10016 => 17(true) = 23(decimal) +// we have a significand of 24 bits 1.23-bits. (implicit 1) +// If we multiply by 2^23, we no longer have a fractional part +// So input is an integer value already. + +truncl: + +{ .mfi + getf.exp TRUNC_GR_signexp = f8 + fcvt.fx.trunc.s1 f9 = f8 + addl TRUNC_GR_bigexp = 0x1003e, r0 +} +{ .mfi + mov TRUNC_GR_FFFF = 0x0FFFF + fnorm f11 = f8 + mov TRUNC_GR_expmask = 0x1FFFF +};; +// get the exponent of x +// convert x to integer in signficand of f9 +// Normalize x - this will raise invalid on SNaNs, the +// denormal operand flag - and possibly a spurious U flag +// get exponent only mask (will exclude sign bit) + +{ .mfi + nop.m 0 + fclass.m p7,p8 = f8, 0x0b + nop.i 0 +} +{ .mfi + nop.m 0 + fcmp.eq.unc.s1 p9,p0 = f8,f0 + nop.i 0 +};; +// fclass to set p7 if unnorm +{ .mmi + and TRUNC_GR_exponent = TRUNC_GR_signexp, TRUNC_GR_expmask ;; +(p8) cmp.ge.unc p10,p11 = TRUNC_GR_exponent, TRUNC_GR_bigexp +(p8) cmp.ne.unc p6,p0 = TRUNC_GR_exponent, TRUNC_GR_signexp +};; +// Get the exponent of x +// Test if exponent such that result already an integer +// Test if x < 0 +{ .mmi +(p9) cmp.eq.andcm p10,p11 = r0, r0 +(p6) cmp.lt.unc p6,p0 = TRUNC_GR_exponent, TRUNC_GR_FFFF + nop.i 0 +};; +// If -1 < x < 0, set p6, turn off p10 and p11, and set result to -0.0 +{ .mfb +(p6) cmp.eq.andcm p10,p11 = r0, r0 +(p6) fmerge.s f8 = f8, f0 + nop.b 0 +};; +// If not a unnorm, set p10 if x already is a big int, nan, or inf? +// If not a unnorm, set p10 if x already is a big int, nan, or inf? +.pred.rel "mutex",p10,p11 +{ .mfb + nop.m 0 +(p11) fcvt.xf f8 = f9 + nop.b 0 +} +{ .mfb + nop.m 0 +(p10) fma.s1 f8 = f11,f1,f0 +(p8) br.ret.sptk b0 +};; +// If not a unnorm and not an big int, nan,or +/-inf convert signficand +// back to f8. +// If not a unorm and a big int, nan, or +/-inf, return fnorm'd x +// If not a unorm, Return +// If unnorm, get the exponent again - perhaps it wasn't a denorm. +{ .mfb +(p7) getf.exp TRUNC_GR_signexp = f11 +(p7) fcvt.fx.trunc.s1 f12 = f11 + nop.b 0 +};; +{ .mfb + and TRUNC_GR_exponent = TRUNC_GR_signexp, TRUNC_GR_expmask + fcmp.lt.unc.s1 p9,p0 = f8,f0 + nop.b 0 +};; +{ .mfb + cmp.ge.unc p10,p11 = TRUNC_GR_exponent, TRUNC_GR_bigexp + nop.f 0 + nop.b 0 +};; +// If a unnorm, check to see if value is already a big int. +{ .mfb + nop.m 0 +(p11) fcvt.xf f8 = f12 + nop.b 0 +} +{ .mfi + nop.m 0 +(p10) fma.s1 f8 = f11,f1,f0 + nop.i 0 +};; +{ .mfb + nop.m 0 +(p9) fmerge.ns f8 = f1,f8 + br.ret.sptk b0 +};; +// If so return it. Otherwise, return (fcvt.xf(fcvt.fx.trunc(x))) +// Make sure the result is negative if it should be - that is +// negative(denormal) -> -0. +.endp truncl +ASM_SIZE_DIRECTIVE(truncl) diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/sincos32.c glibc-2.2.3/sysdeps/ia64/fpu/sincos32.c --- glibc-2.2.2/sysdeps/ia64/fpu/sincos32.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/sincos32.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/slowexp.c glibc-2.2.3/sysdeps/ia64/fpu/slowexp.c --- glibc-2.2.2/sysdeps/ia64/fpu/slowexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/slowexp.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/slowpow.c glibc-2.2.3/sysdeps/ia64/fpu/slowpow.c --- glibc-2.2.2/sysdeps/ia64/fpu/slowpow.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/slowpow.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_acos.c glibc-2.2.3/sysdeps/ia64/fpu/w_acos.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_acos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_acos.c Mon Feb 19 01:05:22 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_acosf.c glibc-2.2.3/sysdeps/ia64/fpu/w_acosf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_acosf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_acosf.c Mon Feb 19 01:05:26 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_acosl.c glibc-2.2.3/sysdeps/ia64/fpu/w_acosl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_acosl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_acosl.c Mon Feb 19 01:05:30 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_asin.c glibc-2.2.3/sysdeps/ia64/fpu/w_asin.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_asin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_asin.c Mon Feb 19 01:05:34 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_asinf.c glibc-2.2.3/sysdeps/ia64/fpu/w_asinf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_asinf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_asinf.c Mon Feb 19 01:05:38 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_asinl.c glibc-2.2.3/sysdeps/ia64/fpu/w_asinl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_asinl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_asinl.c Mon Feb 19 01:05:43 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_atan2.c glibc-2.2.3/sysdeps/ia64/fpu/w_atan2.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_atan2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_atan2.c Mon Feb 19 01:05:48 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_atan2f.c glibc-2.2.3/sysdeps/ia64/fpu/w_atan2f.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_atan2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_atan2f.c Mon Feb 19 01:05:52 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_atan2l.c glibc-2.2.3/sysdeps/ia64/fpu/w_atan2l.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_atan2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_atan2l.c Mon Feb 19 01:05:57 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_cosh.c glibc-2.2.3/sysdeps/ia64/fpu/w_cosh.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_cosh.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_cosh.c Mon Feb 19 01:06:02 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_coshf.c glibc-2.2.3/sysdeps/ia64/fpu/w_coshf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_coshf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_coshf.c Mon Feb 19 01:06:06 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_coshl.c glibc-2.2.3/sysdeps/ia64/fpu/w_coshl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_coshl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_coshl.c Mon Feb 19 01:06:12 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_exp.c glibc-2.2.3/sysdeps/ia64/fpu/w_exp.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_exp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_exp.c Mon Feb 19 01:06:17 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_expf.c glibc-2.2.3/sysdeps/ia64/fpu/w_expf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_expf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_expf.c Mon Feb 19 01:06:22 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_fmod.c glibc-2.2.3/sysdeps/ia64/fpu/w_fmod.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_fmod.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_fmod.c Mon Feb 19 01:06:27 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_fmodf.c glibc-2.2.3/sysdeps/ia64/fpu/w_fmodf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_fmodf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_fmodf.c Mon Feb 19 01:06:31 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_fmodl.c glibc-2.2.3/sysdeps/ia64/fpu/w_fmodl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_fmodl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_fmodl.c Mon Feb 19 01:06:35 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_hypot.c glibc-2.2.3/sysdeps/ia64/fpu/w_hypot.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_hypot.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_hypot.c Mon Feb 19 01:06:39 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_hypotf.c glibc-2.2.3/sysdeps/ia64/fpu/w_hypotf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_hypotf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_hypotf.c Mon Feb 19 01:06:43 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_hypotl.c glibc-2.2.3/sysdeps/ia64/fpu/w_hypotl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_hypotl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_hypotl.c Mon Feb 19 01:06:48 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_log.c glibc-2.2.3/sysdeps/ia64/fpu/w_log.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_log.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_log.c Mon Feb 19 01:07:06 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_log10.c glibc-2.2.3/sysdeps/ia64/fpu/w_log10.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_log10.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_log10.c Mon Feb 19 01:06:52 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_log10f.c glibc-2.2.3/sysdeps/ia64/fpu/w_log10f.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_log10f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_log10f.c Mon Feb 19 01:06:57 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_log10l.c glibc-2.2.3/sysdeps/ia64/fpu/w_log10l.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_log10l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_log10l.c Mon Feb 19 01:07:02 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_logf.c glibc-2.2.3/sysdeps/ia64/fpu/w_logf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_logf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_logf.c Mon Feb 19 01:07:11 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_logl.c glibc-2.2.3/sysdeps/ia64/fpu/w_logl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_logl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_logl.c Mon Feb 19 01:07:15 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_pow.c glibc-2.2.3/sysdeps/ia64/fpu/w_pow.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_pow.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_pow.c Mon Feb 19 01:07:19 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_powf.c glibc-2.2.3/sysdeps/ia64/fpu/w_powf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_powf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_powf.c Mon Feb 19 01:07:23 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_powl.c glibc-2.2.3/sysdeps/ia64/fpu/w_powl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_powl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_powl.c Mon Feb 19 01:07:27 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_remainder.c glibc-2.2.3/sysdeps/ia64/fpu/w_remainder.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_remainder.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_remainder.c Mon Feb 19 01:07:31 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_remainderf.c glibc-2.2.3/sysdeps/ia64/fpu/w_remainderf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_remainderf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_remainderf.c Mon Feb 19 01:07:36 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_remainderl.c glibc-2.2.3/sysdeps/ia64/fpu/w_remainderl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_remainderl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_remainderl.c Mon Feb 19 01:07:40 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_scalb.c glibc-2.2.3/sysdeps/ia64/fpu/w_scalb.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_scalb.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_scalb.c Mon Feb 19 01:07:44 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_scalbf.c glibc-2.2.3/sysdeps/ia64/fpu/w_scalbf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_scalbf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_scalbf.c Mon Feb 19 01:07:48 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_scalbl.c glibc-2.2.3/sysdeps/ia64/fpu/w_scalbl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_scalbl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_scalbl.c Mon Feb 19 01:07:52 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_sqrt.c glibc-2.2.3/sysdeps/ia64/fpu/w_sqrt.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_sqrt.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_sqrt.c Mon Feb 19 01:07:56 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_sqrtf.c glibc-2.2.3/sysdeps/ia64/fpu/w_sqrtf.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_sqrtf.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_sqrtf.c Mon Feb 19 01:08:00 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/fpu/w_sqrtl.c glibc-2.2.3/sysdeps/ia64/fpu/w_sqrtl.c --- glibc-2.2.2/sysdeps/ia64/fpu/w_sqrtl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/fpu/w_sqrtl.c Mon Feb 19 01:08:04 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/ia64/hp-timing.c glibc-2.2.3/sysdeps/ia64/hp-timing.c --- glibc-2.2.2/sysdeps/ia64/hp-timing.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/hp-timing.c Mon Apr 23 22:16:07 2001 @@ -0,0 +1,24 @@ +/* Support for high precision, low overhead timing functions. IA-64 version. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + +/* We have to define the variable for the overhead. */ +hp_timing_t __libc_hp_timing_overhead; diff -durpNa glibc-2.2.2/sysdeps/ia64/hp-timing.h glibc-2.2.3/sysdeps/ia64/hp-timing.h --- glibc-2.2.2/sysdeps/ia64/hp-timing.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/hp-timing.h Mon Apr 23 22:16:21 2001 @@ -0,0 +1,155 @@ +/* High precision, low overhead timing functions. IA-64 version. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 _HP_TIMING_H +#define _HP_TIMING_H 1 + +#include +#include +#include +#include + +/* The macros defined here use the timestamp counter in IA-64. They + provide a very accurate way to measure the time with very little + overhead. The time values themself have no real meaning, only + differences are interesting. + + The list of macros we need includes the following: + + - HP_TIMING_AVAIL: test for availability. + + - HP_TIMING_INLINE: this macro is non-zero if the functionality is not + implemented using function calls but instead uses some inlined code + which might simply consist of a few assembler instructions. We have to + know this since we might want to use the macros here in places where we + cannot make function calls. + + - hp_timing_t: This is the type for variables used to store the time + values. + + - HP_TIMING_ZERO: clear `hp_timing_t' object. + + - HP_TIMING_NOW: place timestamp for current time in variable given as + parameter. + + - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the + HP_TIMING_DIFF macro. + + - HP_TIMING_DIFF: compute difference between two times and store it + in a third. Source and destination might overlap. + + - HP_TIMING_ACCUM: add time difference to another variable. This might + be a bit more complicated to implement for some platforms as the + operation should be thread-safe and 64bit arithmetic on 32bit platforms + is not. + + - HP_TIMING_ACCUM_NT: this is the variant for situations where we know + there are no threads involved. + + - HP_TIMING_PRINT: write decimal representation of the timing value into + the given string. This operation need not be inline even though + HP_TIMING_INLINE is specified. + +*/ + +/* We always assume having the timestamp register. */ +#define HP_TIMING_AVAIL (1) + +/* We indeed have inlined functions. */ +#define HP_TIMING_INLINE (1) + +/* We use 64bit values for the times. */ +typedef unsigned long int hp_timing_t; + +/* Internal variable used to store the overhead of the measurement + opcodes. */ +extern hp_timing_t __libc_hp_timing_overhead; + +/* Set timestamp value to zero. */ +#define HP_TIMING_ZERO(Var) (Var) = (0) + + +/* The Itanium/Merced has a bug where the ar.itc register value read + is not correct in some situations. The solution is to read again. + For now we always do this until we know how to recognize a fixed + processor implementation. */ +#define REPEAT_READ(val) __builtin_expect ((int) val == -1, 0) + +/* That's quite simple. Use the `rdtsc' instruction. Note that the value + might not be 100% accurate since there might be some more instructions + running in this moment. This could be changed by using a barrier like + 'cpuid' right before the `rdtsc' instruciton. But we are not interested + in accurate clock cycles here so we don't do this. */ +#define HP_TIMING_NOW(Var) \ + ({ unsigned long int __itc; \ + do \ + asm volatile ("mov %0=ar.itc" : "=r" (__itc) : : "memory"); \ + while (REPEAT_READ (__itc)); \ + Var = __itc; }) + +/* Use two 'ar.itc' instructions in a row to find out how long it takes. */ +#define HP_TIMING_DIFF_INIT() \ + do { \ + int __cnt = 5; \ + __libc_hp_timing_overhead = ~0ul; \ + do \ + { \ + hp_timing_t __t1, __t2; \ + HP_TIMING_NOW (__t1); \ + HP_TIMING_NOW (__t2); \ + if (__t2 - __t1 < __libc_hp_timing_overhead) \ + __libc_hp_timing_overhead = __t2 - __t1; \ + } \ + while (--__cnt > 0); \ + } while (0) + +/* It's simple arithmetic for us. */ +#define HP_TIMING_DIFF(Diff, Start, End) (Diff) = ((End) - (Start)) + +/* We have to jump through hoops to get this correctly implemented. */ +#define HP_TIMING_ACCUM(Sum, Diff) \ + do { \ + hp_timing_t __oldval; \ + hp_timing_t __diff = (Diff) - __libc_hp_timing_overhead; \ + hp_timing_t __newval; \ + do \ + { \ + __oldval = (Sum); \ + __newval = __oldval + __diff; \ + } \ + while (! __sync_bool_compare_and_swap (&Sum, __oldvar, __newval)); \ + } while (0) + +/* No threads, no extra work. */ +#define HP_TIMING_ACCUM_NT(Sum, Diff) (Sum) += (Diff) + +/* Print the time value. */ +#define HP_TIMING_PRINT(Buf, Len, Val) \ + do { \ + char __buf[20]; \ + char *__cp = _itoa_word (Val, __buf + sizeof (__buf), 10, 0); \ + int __len = (Len); \ + char *__dest = (Buf); \ + while (__len-- > 0 && __cp < __buf + sizeof (__buf)) \ + *__dest++ = *__cp++; \ + memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles"))); \ + } while (0) + +#endif /* hp-timing.h */ diff -durpNa glibc-2.2.2/sysdeps/ia64/htonl.S glibc-2.2.3/sysdeps/ia64/htonl.S --- glibc-2.2.2/sysdeps/ia64/htonl.S Fri Jun 30 10:44:46 2000 +++ glibc-2.2.3/sysdeps/ia64/htonl.S Thu Apr 12 14:02:08 2001 @@ -1,5 +1,5 @@ /* Change byte order in 32-bit value. ia64 version. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dan Pop @@ -20,14 +20,12 @@ #include -#undef ret ENTRY(htonl) - alloc ret0 = ar.pfs, 1, 0, 0, 0 - shl in0 = in0, 32 + shl ret0 = r32, 32 ;; - mux1 ret0 = in0, @rev - br.ret.sptk.many b0 + mux1 ret0 = ret0, @rev + ret END(htonl) weak_alias (htonl, ntohl) diff -durpNa glibc-2.2.2/sysdeps/ia64/htons.S glibc-2.2.3/sysdeps/ia64/htons.S --- glibc-2.2.2/sysdeps/ia64/htons.S Fri Jun 30 10:45:02 2000 +++ glibc-2.2.3/sysdeps/ia64/htons.S Thu Apr 12 14:02:08 2001 @@ -1,5 +1,5 @@ /* Change byte order in 16-bit value. ia64 version. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dan Pop @@ -20,14 +20,12 @@ #include -#undef ret ENTRY(htons) - alloc ret0 = ar.pfs, 1, 0, 0, 0 - shl in0 = in0, 48 + shl ret0 = r32, 48 ;; - mux1 ret0 = in0, @rev - br.ret.sptk.many b0 + mux1 ret0 = ret0, @rev + ret END(htons) weak_alias (htons, ntohs) diff -durpNa glibc-2.2.2/sysdeps/ia64/memccpy.S glibc-2.2.3/sysdeps/ia64/memccpy.S --- glibc-2.2.2/sysdeps/ia64/memccpy.S Thu Sep 14 12:24:26 2000 +++ glibc-2.2.3/sysdeps/ia64/memccpy.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the memccpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -37,7 +37,6 @@ #define OP_T_THRES 16 #define OPSIZ 8 -#define saved_pfs r14 #define saved_pr r17 #define saved_lc r18 #define dest r19 @@ -53,15 +52,19 @@ #define value r31 ENTRY(memccpy) - alloc saved_pfs = ar.pfs, 4, 40 - 4, 0, 40 + .prologue + alloc r2 = ar.pfs, 4, 40 - 4, 0, 40 #include "softpipe.h" .rotr r[MEMLAT + 3], tmp1[4], tmp2[4], val[4], tmp3[2], pos0[2] .rotp p[MEMLAT + 6 + 1] mov ret0 = r0 // return NULL if no match + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov dest = in0 // dest mov src = in1 // src extr.u char = in2, 0, 8 // char @@ -143,7 +146,6 @@ ENTRY(memccpy) .foundit: (p6) mov ret0 = dest .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -158,7 +160,6 @@ ENTRY(memccpy) shr.u value = value, 8 br.cloop.sptk .l5 ;; mov ret0 = dest - mov ar.pfs = saved_pfs mov pr = saved_pr, -1 mov ar.lc = saved_lc br.ret.sptk.many b0 diff -durpNa glibc-2.2.2/sysdeps/ia64/memchr.S glibc-2.2.3/sysdeps/ia64/memchr.S --- glibc-2.2.2/sysdeps/ia64/memchr.S Thu Sep 14 12:24:26 2000 +++ glibc-2.2.3/sysdeps/ia64/memchr.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard memchr() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -43,7 +43,6 @@ #include #undef ret -#define saved_pfs r14 #define saved_pr r15 #define saved_lc r16 #define chr r17 @@ -57,12 +56,16 @@ #define str in0 ENTRY(__memchr) - alloc saved_pfs = ar.pfs, 3, 0, 29, 32 + .prologue + alloc r2 = ar.pfs, 3, 0, 29, 32 #include "softpipe.h" .rotr value[MEMLAT+1], addr[MEMLAT+3], aux[2], poschr[2] .rotp p[MEMLAT+3] + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .save pr, saved_pr mov saved_pr = pr // save the predicates + .body mov ret0 = str and tmp = 7, str // tmp = str % 8 cmp.ne p7, p0 = r0, r0 // clear p7 @@ -118,7 +121,6 @@ ENTRY(__memchr) (p6) adds ret0 = -1, ret0 // if we got here from l1 or l3 (p7) add ret0 = addr[MEMLAT+2], poschr[1] // if we got here from l2 mov pr = saved_pr, -1 - mov ar.pfs = saved_pfs mov ar.lc = saved_lc br.ret.sptk.many b0 diff -durpNa glibc-2.2.2/sysdeps/ia64/memcmp.S glibc-2.2.3/sysdeps/ia64/memcmp.S --- glibc-2.2.2/sysdeps/ia64/memcmp.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/memcmp.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard memcmp() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -40,7 +40,6 @@ #define OPSIZ 8 #define MEMLAT 2 -#define saved_pfs r14 #define start r15 #define saved_pr r17 #define saved_lc r18 @@ -56,14 +55,18 @@ #define loopcnt r30 ENTRY(memcmp) - alloc saved_pfs = ar.pfs, 3, 37, 0, 40 + .prologue + alloc r2 = ar.pfs, 3, 37, 0, 40 .rotr r[MEMLAT + 2], q[MEMLAT + 5], tmp1[4], tmp2[4], val[2] .rotp p[MEMLAT + 4 + 1] mov ret0 = r0 // by default return value = 0 + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov dest = in0 // dest mov src = in1 // src mov len = in2 // len @@ -126,7 +129,6 @@ ENTRY(memcmp) cmp.ltu p6, p7 = value2, value1 ;; (p6) mov ret0 = -1 (p7) mov ret0 = 1 - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -154,7 +156,6 @@ ENTRY(memcmp) .done: (p6) sub ret0 = value2, value1 // don't execute it if falling thru .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 diff -durpNa glibc-2.2.2/sysdeps/ia64/memcpy.S glibc-2.2.3/sysdeps/ia64/memcpy.S --- glibc-2.2.2/sysdeps/ia64/memcpy.S Fri Jun 30 23:06:51 2000 +++ glibc-2.2.3/sysdeps/ia64/memcpy.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard memcpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -40,7 +40,6 @@ #define OP_T_THRES 16 #define OPSIZ 8 -#define saved_pfs r14 #define adest r15 #define saved_pr r17 #define saved_lc r18 @@ -70,13 +69,17 @@ br.cond.sptk .cpyfew ; /* deal with the remaining bytes */ ENTRY(memcpy) - alloc saved_pfs = ar.pfs, 3, 16 - 3, 0, 16 + .prologue + alloc r2 = ar.pfs, 3, 16 - 3, 0, 16 #include "softpipe.h" .rotr r[MEMLAT + 2], q[MEMLAT + 1] .rotp p[MEMLAT + 2] mov ret0 = in0 // return value = dest + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body or tmp3 = in0, in1 ;; // tmp3 = dest | src or tmp3 = tmp3, in2 // tmp3 = dest | src | len mov dest = in0 // dest @@ -112,7 +115,6 @@ ENTRY(memcpy) (p[MEMLAT]) st8 [adest] = q[MEMLAT], 16 br.ctop.dptk .l0 ;; - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -182,7 +184,6 @@ ENTRY(memcpy) st1 [dest] = value, 1 br.cloop.dptk .l4 ;; .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 diff -durpNa glibc-2.2.2/sysdeps/ia64/memmove.S glibc-2.2.3/sysdeps/ia64/memmove.S --- glibc-2.2.2/sysdeps/ia64/memmove.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/memmove.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard memmove() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -39,7 +39,6 @@ #define OP_T_THRES 16 #define OPSIZ 8 -#define saved_pfs r14 #define adest r15 #define saved_pr r17 #define saved_lc r18 @@ -69,13 +68,17 @@ br.cond.sptk .cpyfew ; /* deal with the remaining bytes */ ENTRY(memmove) - alloc saved_pfs = ar.pfs, 3, 29, 0, 32 + .prologue + alloc r2 = ar.pfs, 3, 29, 0, 32 #include "softpipe.h" .rotr r[MEMLAT + 2], q[MEMLAT + 1] .rotp p[MEMLAT + 2] mov ret0 = in0 // return value = dest + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body or tmp3 = in0, in1 ;; // tmp3 = dest | src or tmp3 = tmp3, in2 // tmp3 = dest | src | len mov dest = in0 // dest @@ -119,7 +122,6 @@ ENTRY(memmove) (p[MEMLAT]) st8 [adest] = q[MEMLAT], 16 br.ctop.dptk .l0 ;; - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -189,7 +191,6 @@ ENTRY(memmove) st1 [dest] = value, 1 br.cloop.dptk .l4 ;; .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 diff -durpNa glibc-2.2.2/sysdeps/ia64/memset.S glibc-2.2.3/sysdeps/ia64/memset.S --- glibc-2.2.2/sysdeps/ia64/memset.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/memset.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard memset() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -45,8 +45,11 @@ #define wordval loc6 ENTRY(memset) + .prologue alloc save_pfs = ar.pfs, 3, 7, 0, 0 + .save ar.lc, save_lc mov save_lc = ar.lc + .body mov ret0 = dest and tmp = 7, dest cmp.eq p6, p0 = cnt, r0 diff -durpNa glibc-2.2.2/sysdeps/ia64/stackinfo.h glibc-2.2.3/sysdeps/ia64/stackinfo.h --- glibc-2.2.2/sysdeps/ia64/stackinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ia64/stackinfo.h Tue Apr 10 13:51:30 2001 @@ -0,0 +1,29 @@ +/* Copyright (C) 2001 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. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On IA-64 the stack grows down. The register stack is of no concern + here. */ +#define _STACK_GROWS_DOWN 1 + +#endif /* stackinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/ia64/strcat.S glibc-2.2.3/sysdeps/ia64/strcat.S --- glibc-2.2.2/sysdeps/ia64/strcat.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/strcat.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* IA-64 assembly version of the standard strcat() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -37,14 +37,16 @@ #define src in1 #define dest in0 -#define save_pfs loc0 -#define save_b0 loc1 +#define save_b0 loc0 +#define save_pfs loc1 #define tmp loc2 #define rc ret0 ENTRY(strcat) + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) alloc save_pfs = ar.pfs, 2, 3, 2, 0 mov save_b0 = b0 + .body mov out0 = dest mov tmp = gp ;; br.call.sptk.many b0 = strlen# ;; // rc = strlen(dest); diff -durpNa glibc-2.2.2/sysdeps/ia64/strchr.S glibc-2.2.3/sysdeps/ia64/strchr.S --- glibc-2.2.2/sysdeps/ia64/strchr.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/strchr.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard strchr() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -33,7 +33,6 @@ #include #undef ret -#define saved_pfs r14 #define saved_lc r18 #define poschr r19 #define pos0 r20 @@ -47,8 +46,11 @@ #define chr in1 ENTRY(strchr) - alloc saved_pfs = ar.pfs, 2, 0, 0, 0 + .prologue + alloc r2 = ar.pfs, 2, 0, 0, 0 + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov ret0 = str and tmp = 7, str // tmp = str % 8 mux1 chrx8 = chr, @brcst @@ -94,12 +96,10 @@ ENTRY(strchr) adds ret0 = -15, ret0 ;; // should be -16, but we decrement .restore_and_exit: // ret0 in the next instruction adds ret0 = -1, ret0 // ret0 was pointing 1 char too far - mov ar.pfs = saved_pfs // restore the PFS mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 .notfound: mov ret0 = r0 // return NULL if null was found - mov ar.pfs = saved_pfs // first mov ar.lc = saved_lc br.ret.sptk.many b0 .recovery: diff -durpNa glibc-2.2.2/sysdeps/ia64/strcmp.S glibc-2.2.3/sysdeps/ia64/strcmp.S --- glibc-2.2.2/sysdeps/ia64/strcmp.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/strcmp.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard strcmp() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -33,13 +33,12 @@ #define s1 in0 #define s2 in1 -#define saved_pfs r14 #define val1 r15 #define val2 r16 ENTRY(strcmp) - alloc saved_pfs = ar.pfs, 2, 0, 0, 0 + alloc r2 = ar.pfs, 2, 0, 0, 0 .loop: ld1 val1 = [s1], 1 ld1 val2 = [s2], 1 @@ -50,6 +49,5 @@ ENTRY(strcmp) cmp.eq.and p6, p0 = val1, val2 (p6) br.cond.sptk .loop sub ret0 = val1, val2 - mov ar.pfs = saved_pfs br.ret.sptk.many b0 END(strcmp) diff -durpNa glibc-2.2.2/sysdeps/ia64/strcpy.S glibc-2.2.3/sysdeps/ia64/strcpy.S --- glibc-2.2.2/sysdeps/ia64/strcpy.S Sat Jan 6 20:35:39 2001 +++ glibc-2.2.3/sysdeps/ia64/strcpy.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard strcpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -34,7 +34,6 @@ #include #undef ret -#define saved_pfs r14 #define saved_lc r15 #define saved_pr r16 #define thresh r17 @@ -53,15 +52,19 @@ #define value r31 ENTRY(strcpy) - alloc saved_pfs = ar.pfs, 2, 0, 30, 32 + .prologue + alloc r2 = ar.pfs, 2, 0, 30, 32 #define MEMLAT 2 .rotr r[MEMLAT + 2] .rotp p[MEMLAT + 1] mov ret0 = in0 // return value = dest + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body sub tmp = r0, in0 ;; // tmp = -dest mov dest = in0 // dest mov src = in1 // src @@ -127,7 +130,6 @@ ENTRY(strcpy) st1 [dest] = c, 1 br.cloop.dptk .l4 ;; .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov ar.lc = saved_lc // restore the loop counter mov pr = saved_pr, -1 // restore the predicate registers br.ret.sptk.many b0 diff -durpNa glibc-2.2.2/sysdeps/ia64/strlen.S glibc-2.2.3/sysdeps/ia64/strlen.S --- glibc-2.2.2/sysdeps/ia64/strlen.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/strlen.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard strlen() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -36,7 +36,6 @@ #include #undef ret -#define saved_pfs r14 #define saved_lc r18 #define str r19 #define pos0 r20 @@ -48,8 +47,11 @@ #define len ret0 ENTRY(strlen) - alloc saved_pfs = ar.pfs, 1, 0, 0, 0 + .prologue + alloc r2 = ar.pfs, 1, 0, 0, 0 + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov str = in0 mov len = r0 // len = 0 and tmp = 7, in0 // tmp = str % 8 @@ -86,7 +88,6 @@ l2: ld8.s val2 = [str], 8 // don't bomb add len = len, tmp;; adds len = -16, len .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 .recovery: diff -durpNa glibc-2.2.2/sysdeps/ia64/strncmp.S glibc-2.2.3/sysdeps/ia64/strncmp.S --- glibc-2.2.2/sysdeps/ia64/strncmp.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/strncmp.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard strncmp() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -35,13 +35,12 @@ #define s2 in1 #define n in2 -#define saved_pfs r14 #define val1 r15 #define val2 r16 ENTRY(strncmp) - alloc saved_pfs = ar.pfs, 3, 0, 0, 0 + alloc r2 = ar.pfs, 3, 0, 0, 0 mov ret0 = r0 cmp.eq p6, p0 = r0, r0 // set p6 cmp.eq p7, p0 = n, r0 // return immediately if n == 0 @@ -58,6 +57,5 @@ ENTRY(strncmp) (p6) br.cond.sptk .loop sub ret0 = val1, val2 .restore_and_exit: - mov ar.pfs = saved_pfs br.ret.sptk.many b0 END(strncmp) diff -durpNa glibc-2.2.2/sysdeps/ia64/strncpy.S glibc-2.2.3/sysdeps/ia64/strncpy.S --- glibc-2.2.2/sysdeps/ia64/strncpy.S Sun May 21 14:56:19 2000 +++ glibc-2.2.3/sysdeps/ia64/strncpy.S Thu Apr 12 14:02:08 2001 @@ -1,6 +1,6 @@ /* Optimized version of the standard strncpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop . The GNU C Library is free software; you can redistribute it and/or @@ -33,8 +33,8 @@ #include #undef ret -#define saved_pfs loc0 -#define saved_b0 loc1 +#define saved_b0 loc0 +#define saved_pfs loc1 #define saved_pr loc2 #define saved_lc loc3 #define tmp loc4 @@ -47,10 +47,14 @@ #define rc ret0 ENTRY(strncpy) + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(3) alloc saved_pfs = ar.pfs, 3, 6, 3, 0 mov saved_b0 = b0 + .save pr, saved_pr mov saved_pr = pr + .save ar.lc, saved_lc mov saved_lc = ar.lc + .body cmp.gtu p6, p0 = 24, n (p6) br.cond.spnt .cpyfew mov out0 = src diff -durpNa glibc-2.2.2/sysdeps/ia64/sysdep.h glibc-2.2.3/sysdeps/ia64/sysdep.h --- glibc-2.2.2/sysdeps/ia64/sysdep.h Mon Jul 31 20:11:48 2000 +++ glibc-2.2.3/sysdeps/ia64/sysdep.h Mon Mar 26 20:53:20 2001 @@ -21,11 +21,39 @@ #ifdef __ASSEMBLER__ +/* Macros to help writing .prologue directives in assembly code. */ +#define ASM_UNW_PRLG_RP 0x8 +#define ASM_UNW_PRLG_PFS 0x4 +#define ASM_UNW_PRLG_PSP 0x2 +#define ASM_UNW_PRLG_PR 0x1 +#define ASM_UNW_PRLG_GRSAVE(ninputs) (32+(ninputs)) + +#define ENTRY(name) \ + .text; \ + .align 32; \ + .proc C_SYMBOL_NAME(name); \ + .global C_SYMBOL_NAME(name); \ + C_LABEL(name) \ + CALL_MCOUNT + +#define LOCAL_ENTRY(name) \ + .text; \ + .align 32; \ + .proc C_SYMBOL_NAME(name); \ + C_LABEL(name) \ + CALL_MCOUNT + #define LEAF(name) \ .text; \ .align 32; \ .proc C_SYMBOL_NAME(name); \ .global name; \ + C_LABEL(name) + +#define LOCAL_LEAF(name) \ + .text; \ + .align 32; \ + .proc C_SYMBOL_NAME(name); \ C_LABEL(name) /* Mark the end of function SYM. */ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/Dist glibc-2.2.3/sysdeps/ieee754/dbl-64/Dist --- glibc-2.2.2/sysdeps/ieee754/dbl-64/Dist Tue Jul 13 16:46:51 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/Dist Tue Mar 27 22:56:27 2001 @@ -1 +1,33 @@ +asincos.tbl +atnat.h +atnat2.h +branred.h +dla.h +doasin.h +dosincos.h +MathLib.h +mpa.h +mpa2.h +mpatan.h +mpexp.h +mplog.h +mpsqrt.h +mydefs.h +powtwo.tbl +root.tbl +sincos.tbl +sincos32.h t_exp2.h +uasncs.h +uatan.tbl +uexp.h +uexp.tbl +ulog.h +ulog.tbl +upow.h +upow.tbl +urem.h +uroot.h +usncs.h +utan.h +utan.tbl diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/MathLib.h glibc-2.2.3/sysdeps/ieee754/dbl-64/MathLib.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/MathLib.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/MathLib.h Sun Mar 11 21:24:33 2001 @@ -0,0 +1,102 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/********************************************************************/ +/* Ultimate math functions. Each function computes the exact */ +/* theoretical value of its argument rounded to nearest or even. */ +/* */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round nearest mode of IEEE 754 standard. */ +/********************************************************************/ + +#ifndef UMATH_LIB +#define UMATH_LIB +/********************************************************************/ +/* Function changes the precision mode to IEEE 754 double precision */ +/* and the rounding mode to nearest or even. */ +/* It returns the original status of these modes. */ +/* See further explanations of usage in DPChange.h */ +/********************************************************************/ +unsigned short Init_Lib(void); + +/********************************************************************/ +/* Function that changes the precision and rounding modes to the */ +/* specified by the argument received. See further explanations in */ +/* DPChange.h */ +/********************************************************************/ +void Exit_Lib(unsigned short); + + +/* The asin() function calculates the arc sine of its argument. */ +/* The function returns the arc sine in radians */ +/* (between -PI/2 and PI/2). */ +/* If the argument is greater than 1 or less than -1 it returns */ +/* a NaN. */ +double uasin(double ); + + +/* The acos() function calculates the arc cosine of its argument. */ +/* The function returns the arc cosine in radians */ +/* (between -PI/2 and PI/2). */ +/* If the argument is greater than 1 or less than -1 it returns */ +/* a NaN. */ +double uacos(double ); + +/* The atan() function calculates the arctanget of its argument. */ +/* The function returns the arc tangent in radians */ +/* (between -PI/2 and PI/2). */ +double uatan(double ); + + +/* The uatan2() function calculates the arc tangent of the two arguments x */ +/* and y (x is the right argument and y is the left one).The signs of both */ +/* arguments are used to determine the quadrant of the result. */ +/* The function returns the result in radians, which is between -PI and PI */ +double uatan2(double ,double ); + +/* Compute log(x). The base of log is e (natural logarithm) */ +double ulog(double ); + +/* Compute e raised to the power of argument x. */ +double uexp(double ); + +/* Compute sin(x). The argument x is assumed to be given in radians.*/ +double usin(double ); + +/* Compute cos(x). The argument x is assumed to be given in radians.*/ +double ucos(double ); + +/* Compute tan(x). The argument x is assumed to be given in radians.*/ +double utan(double ); + +/* Compute the square root of non-negative argument x. */ +/* If x is negative the returned value is NaN. */ +double usqrt(double ); + +/* Compute x raised to the power of y, where x is the left argument */ +/* and y is the right argument. The function returns a NaN if x<0. */ +/* If x equals zero it returns -inf */ +double upow(double , double ); + +/* Computing x mod y, where x is the left argument and y is the */ +/* right one. */ +double uremainder(double , double ); + + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/asincos.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/asincos.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/asincos.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/asincos.tbl Sun Mar 11 22:06:18 2001 @@ -0,0 +1,5149 @@ +/***************************************************************************/ +/* Table for arcsin() and arccos() FUNCTIONS */ +/***************************************************************************/ + +#ifdef BIG_ENDI +static const union {int4 i[5136];double x[2568];} asncs = { .i = { +/**/ 0x3FC04000, 0x00000000, +/**/ 0x3FF02169, 0x88994424, +/**/ 0x3FB0A6A2, 0xB799B115, +/**/ 0x3FC6EF15, 0xD57409A0, +/**/ 0x3FAA141E, 0xAF52EAA0, +/**/ 0x3FB75591, 0xABBBE261, +/**/ 0x3FA72B51, 0xD206D88F, +/**/ 0x3C96B595, 0x5BB33E7D, +/**/ 0x3FC04B41, 0xA03E2700, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF7E9677, 0x66BBDC7C, +/**/ 0x3FC0C000, 0x00000000, +/**/ 0x3FF02386, 0xF9E23A56, +/**/ 0x3FB1308C, 0x60FD0235, +/**/ 0x3FC7099F, 0x14D16B02, +/**/ 0x3FAAFED6, 0x27C01EE1, +/**/ 0x3FB79C6F, 0xDBCD5F98, +/**/ 0x3FA8144A, 0x4084DAAC, +/**/ 0xBC87C092, 0x38D8505E, +/**/ 0x3FC0CC55, 0x56C9F380, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF7C7906, 0x1DC5AA24, +/**/ 0x3FC14000, 0x00000000, +/**/ 0x3FF025B5, 0xB27141F6, +/**/ 0x3FB1BB18, 0x04CE7400, +/**/ 0x3FC72514, 0x72907342, +/**/ 0x3FABEC60, 0x0BF4222C, +/**/ 0x3FB7E610, 0x75B3736C, +/**/ 0x3FA9024C, 0x5199C343, +/**/ 0xBC8AE84C, 0x06B56F60, +/**/ 0x3FC14D7A, 0x3DEFA070, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF7A4A4D, 0x8EBE0A5C, +/**/ 0x3FC1C000, 0x00000000, +/**/ 0x3FF027F5, 0xC6DE8F57, +/**/ 0x3FB2464B, 0x345751E1, +/**/ 0x3FC74178, 0xCF026805, +/**/ 0x3FACDCD8, 0x40A9E0D6, +/**/ 0x3FB83282, 0xEB1D9C38, +/**/ 0x3FA9F590, 0xD7BE707B, +/**/ 0xBCAB9768, 0x03A2A6D6, +/**/ 0x3FC1CEB0, 0xE03B4870, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF780A39, 0x2170A943, +/**/ 0x3FC24000, 0x00000000, +/**/ 0x3FF02A47, 0x4C759796, +/**/ 0x3FB2D22B, 0x92771935, +/**/ 0x3FC75ECF, 0x26ABA06D, +/**/ 0x3FADD05B, 0x486A1932, +/**/ 0x3FB881D7, 0x5AF971D5, +/**/ 0x3FAAEE52, 0x831AEE0C, +/**/ 0x3CA13F57, 0xAD1B1BEF, +/**/ 0x3FC24FF9, 0xC8E09330, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF75B8B3, 0x8A68699B, +/**/ 0x3FC2C000, 0x00000000, +/**/ 0x3FF02CAA, 0x59374E09, +/**/ 0x3FB35EBE, 0xD44E8BEA, +/**/ 0x3FC77D1A, 0x92E4BE8A, +/**/ 0x3FAEC706, 0x4A6C34FD, +/**/ 0x3FB8D41E, 0x972F6E07, +/**/ 0x3FABECCD, 0xF9845F69, +/**/ 0x3C8BA1FA, 0x945C4185, +/**/ 0x3FC2D155, 0x83C058B0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF7355A6, 0xC8B1F774, +/**/ 0x3FC34000, 0x00000000, +/**/ 0x3FF02F1F, 0x03DC7745, +/**/ 0x3FB3EC0A, 0xC1EE9F61, +/**/ 0x3FC79C5E, 0x4A82E6D2, +/**/ 0x3FAFC0F7, 0x19B1EF72, +/**/ 0x3FB9296A, 0x2AA943E5, +/**/ 0x3FACF141, 0xEF8B9DE7, +/**/ 0xBC834081, 0x083C8716, +/**/ 0x3FC352C4, 0x9D6E5610, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF70E0FC, 0x2388BB30, +/**/ 0x3FC3C000, 0x00000000, +/**/ 0x3FF031A5, 0x63D81251, +/**/ 0x3FB47A15, 0x370B721F, +/**/ 0x3FC7BC9D, 0xA28731E5, +/**/ 0x3FB05F26, 0x1E305BE9, +/**/ 0x3FB981CC, 0x5FA50FBD, +/**/ 0x3FADFBEF, 0x42AC4083, +/**/ 0x3CA20ACB, 0xA8E107C7, +/**/ 0x3FC3D447, 0xA336F5E0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF6CB538, 0x4FDB5D5C, +/**/ 0x3FC44000, 0x00000000, +/**/ 0x3FF0343D, 0x9159D86F, +/**/ 0x3FB508E4, 0x23B3747C, +/**/ 0x3FC7DDDC, 0x0ED597CB, +/**/ 0x3FB0DF92, 0x79ADF104, +/**/ 0x3FB9DD58, 0x4658D945, +/**/ 0x3FAF0D19, 0x14ACA06B, +/**/ 0xBCA4E10D, 0xDF636EFE, +/**/ 0x3FC455DF, 0x23252C00, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF6784DD, 0x4C4F221A, +/**/ 0x3FC4C000, 0x00000000, +/**/ 0x3FF036E7, 0xA550D410, +/**/ 0x3FB5987D, 0x8D0AF1E7, +/**/ 0x3FC8001D, 0x22F39726, +/**/ 0x3FB161D0, 0xA1116D73, +/**/ 0x3FBA3C21, 0xBBEA1528, +/**/ 0x3FB01282, 0x74202FF6, +/**/ 0x3CAA0611, 0xD10866E2, +/**/ 0x3FC4D78B, 0xAC086560, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF6230B5, 0x5E57DF8A, +/**/ 0x3FC54000, 0x00000000, +/**/ 0x3FF039A3, 0xB96E0F8A, +/**/ 0x3FB628E7, 0x8E0C29F6, +/**/ 0x3FC82364, 0x92CEDE01, +/**/ 0x3FB1E5F0, 0xFB7B5D84, +/**/ 0x3FBA9E3D, 0x71BD08EE, +/**/ 0x3FB0A1FD, 0x5F7FFAB4, +/**/ 0xBC90F980, 0xEF04F6E7, +/**/ 0x3FC5594D, 0xCD7A8DC0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF59711A, 0x47C1D879, +/**/ 0x3FC5C000, 0x00000000, +/**/ 0x3FF03C71, 0xE8275C12, +/**/ 0x3FB6BA28, 0x584C2A23, +/**/ 0x3FC847B6, 0x338C3D4B, +/**/ 0x3FB26C04, 0x59A55DD8, +/**/ 0x3FBB03C0, 0xF5202D6A, +/**/ 0x3FB13522, 0x9C6466A4, +/**/ 0x3C983C9A, 0x2A268973, +/**/ 0x3FC5DB26, 0x17E62A20, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF4C70BE, 0xC51F7008, +/**/ 0x3FC64000, 0x00000000, +/**/ 0x3FF03F52, 0x4CBA31A9, +/**/ 0x3FB74C46, 0x34C49ADE, +/**/ 0x3FC86D15, 0xFC5F33CC, +/**/ 0x3FB2F41B, 0xFA419D7C, +/**/ 0x3FBB6CC2, 0xB757E82A, +/**/ 0x3FB1CC18, 0xDA4D5C39, +/**/ 0xBCA862D4, 0x2DFB224D, +/**/ 0x3FC65D15, 0x1C8C8AF0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0xBF25B668, 0xB9CADBBF, +/**/ 0x3FC6C000, 0x00000000, +/**/ 0x3FF04245, 0x032EA88F, +/**/ 0x3FB7DF47, 0x84A2B473, +/**/ 0x3FC89388, 0x076A60F5, +/**/ 0x3FB37E49, 0x8E8394C1, +/**/ 0x3FBBD95A, 0x160F3472, +/**/ 0x3FB26708, 0x39844810, +/**/ 0x3C994228, 0x698BC8EA, +/**/ 0x3FC6DF1B, 0x6D8C14A0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F422819, 0x754477AC, +/**/ 0x3FC74000, 0x00000000, +/**/ 0x3FF0454A, 0x285A8CEB, +/**/ 0x3FB87332, 0xC21B9224, +/**/ 0x3FC8BB10, 0x92A93402, +/**/ 0x3FB40A9F, 0x3ED3F586, +/**/ 0x3FBC499F, 0x643217C8, +/**/ 0x3FB3061A, 0x5D29A16B, +/**/ 0xBCA3B2DF, 0x3DF9F2D7, +/**/ 0x3FC76139, 0x9DE6A160, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F5528A1, 0x6A33AB4B, +/**/ 0x3FC7C000, 0x00000000, +/**/ 0x3FF04861, 0xD9E48D58, +/**/ 0x3FB9080E, 0x81461BF6, +/**/ 0x3FC8E3B4, 0x00E32FFA, +/**/ 0x3FB4992F, 0xAFB1F2A5, +/**/ 0x3FBCBDAB, 0xF33705D5, +/**/ 0x3FB3A97A, 0x7E23EE89, +/**/ 0x3C7AAD12, 0xCCE44C41, +/**/ 0x3FC7E370, 0x4187FAE0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F60C3B3, 0xC91AAF11, +/**/ 0x3FC84000, 0x00000000, +/**/ 0x3FF04B8C, 0x36478509, +/**/ 0x3FB99DE1, 0x70FAC1B4, +/**/ 0x3FC90D76, 0xDAA92166, +/**/ 0x3FB52A0E, 0x06C416A6, +/**/ 0x3FBD359A, 0x1CDCA344, +/**/ 0x3FB45155, 0x7EFD4CA0, +/**/ 0x3C396CA5, 0x35A8895D, +/**/ 0x3FC865BF, 0xED4C6EF0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F67186C, 0x8F0A11A4, +/**/ 0x3FC8C000, 0x00000000, +/**/ 0x3FF04EC9, 0x5CD5E248, +/**/ 0x3FBA34B2, 0x5BB94403, +/**/ 0x3FC9385D, 0xCF5CA73A, +/**/ 0x3FB5BD4D, 0xF01AFDBE, +/**/ 0x3FBDB185, 0x4D61A7A9, +/**/ 0x3FB4FDDA, 0x00BD47CF, +/**/ 0xBC9D1119, 0x727E8B64, +/**/ 0x3FC8E829, 0x37077E20, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F6D92B9, 0xABC490CB, +/**/ 0x3FC94000, 0x00000000, +/**/ 0x3FF05219, 0x6DBD2A10, +/**/ 0x3FBACC88, 0x2894CAA1, +/**/ 0x3FC9646D, 0xB6427516, +/**/ 0x3FB65303, 0xA3A864D7, +/**/ 0x3FBE318A, 0x0E3CF3D4, +/**/ 0x3FB5AF38, 0x78CDA678, +/**/ 0x3CA3841D, 0xDA9D51DF, +/**/ 0x3FC96AAC, 0xB58AA660, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F72196D, 0xBD2A1052, +/**/ 0x3FC9C000, 0x00000000, +/**/ 0x3FF0557C, 0x8A099990, +/**/ 0x3FBB6569, 0xDC268965, +/**/ 0x3FC991AB, 0x8F9FBA21, +/**/ 0x3FB6EB43, 0xEAED1E85, +/**/ 0x3FBEB5C6, 0x115C4C63, +/**/ 0x3FB665A3, 0x47F9AEFA, +/**/ 0xBCA1F8FD, 0x03AB3673, +/**/ 0x3FC9ED4B, 0x00AC4A60, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F757C8A, 0x0999905B, +/**/ 0x3FCA4000, 0x00000000, +/**/ 0x3FF058F2, 0xD3A9E674, +/**/ 0x3FBBFF5E, 0x99873832, +/**/ 0x3FC9C01C, 0x85E31CE9, +/**/ 0x3FB78624, 0x26E09FF2, +/**/ 0x3FBF3E58, 0x3CF0885C, +/**/ 0x3FB7214E, 0xD2986239, +/**/ 0x3C97E3E5, 0x3E594694, +/**/ 0x3FCA7004, 0xB14EB5D0, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F78F2D3, 0xA9E6746B, +/**/ 0x3FCAC000, 0x00000000, +/**/ 0x3FF05C7C, 0x6D731ECB, +/**/ 0x3FBC9A6D, 0xA34FA4B3, +/**/ 0x3FC9EFC5, 0xEED9C253, +/**/ 0x3FB823BA, 0x5614FAEB, +/**/ 0x3FBFCB60, 0xB7CE698F, +/**/ 0x3FB7E271, 0x99F3292F, +/**/ 0xBC9842C6, 0x068D709C, +/**/ 0x3FCAF2DA, 0x61674110, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F7C7C6D, 0x731ECAE2, +/**/ 0x3FCB4000, 0x00000000, +/**/ 0x3FF06019, 0x7B24A973, +/**/ 0x3FBD369E, 0x5CA0A798, +/**/ 0x3FCA20AD, 0x4CF0DB64, +/**/ 0x3FB8C41D, 0x1B1A3F31, +/**/ 0x3FC02E80, 0x7B35E049, +/**/ 0x3FB8A944, 0x56FB8A97, +/**/ 0xBCACBF9C, 0xD337B37C, +/**/ 0x3FCB75CC, 0xAC059370, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF7FE684, 0xDB568D78, +/**/ 0x3FCBC000, 0x00000000, +/**/ 0x3FF063CA, 0x216C6801, +/**/ 0x3FBDD3F8, 0x4A32C9FD, +/**/ 0x3FCA52D8, 0x50843BC9, +/**/ 0x3FB96763, 0xC324648A, +/**/ 0x3FC079AD, 0xE4407899, +/**/ 0x3FB97602, 0x1663A5DC, +/**/ 0xBCA3ADC3, 0xC637289D, +/**/ 0x3FCBF8DC, 0x2D5B06A0, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF7C35DE, 0x9397FEA6, +/**/ 0x3FCC4000, 0x00000000, +/**/ 0x3FF0678E, 0x85EAFB1F, +/**/ 0x3FBE7283, 0x136DEAC6, +/**/ 0x3FCA864C, 0xD93A817D, +/**/ 0x3FBA0DA6, 0x4CF7089B, +/**/ 0x3FC0C74A, 0xB3ABB322, +/**/ 0x3FBA48E8, 0x562E6E1E, +/**/ 0xBC951E3E, 0x7EB8FFF8, +/**/ 0x3FCC7C09, 0x82C22B80, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF78717A, 0x1504E0D3, +/**/ 0x3FCCC000, 0x00000000, +/**/ 0x3FF06B66, 0xCF382A59, +/**/ 0x3FBF1246, 0x838936FB, +/**/ 0x3FCABB10, 0xF76F5C94, +/**/ 0x3FBAB6FD, 0x701A77AE, +/**/ 0x3FC11769, 0xC26702C6, +/**/ 0x3FBB2237, 0x24CDF38E, +/**/ 0xBC8DB69A, 0xE28307A9, +/**/ 0x3FCCFF55, 0x4AC67190, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF749930, 0xC7D5A6B9, +/**/ 0x3FCD4000, 0x00000000, +/**/ 0x3FF06F53, 0x24E7707F, +/**/ 0x3FBFB34A, 0x8AB3CBB2, +/**/ 0x3FCAF12A, 0xEDAC8D74, +/**/ 0x3FBB6382, 0xA45DA614, +/**/ 0x3FC16A1E, 0xAD8E9F44, +/**/ 0x3FBC0231, 0x41E7749D, +/**/ 0x3C76CA27, 0x22DC16A2, +/**/ 0x3FCD82C0, 0x252BF240, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF70ACDB, 0x188F814B, +/**/ 0x3FCDC000, 0x00000000, +/**/ 0x3FF07353, 0xAF8CADA0, +/**/ 0x3FC02ACB, 0x9FA32DC9, +/**/ 0x3FCB28A1, 0x32323718, +/**/ 0x3FBC1350, 0x29A8F15E, +/**/ 0x3FC1BF7D, 0xDEB270E1, +/**/ 0x3FBCE91C, 0x40D67463, +/**/ 0x3CA6E976, 0x104BAA08, +/**/ 0x3FCE064A, 0xB2F76140, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF6958A0, 0xE6A4BFC9, +/**/ 0x3FCE4000, 0x00000000, +/**/ 0x3FF07768, 0x98C0FFD9, +/**/ 0x3FC07C9A, 0x6F7F1AF0, +/**/ 0x3FCB617A, 0x708F2AFB, +/**/ 0x3FBCC681, 0x1025B50C, +/**/ 0x3FC2179C, 0x9487453A, +/**/ 0x3FBDD740, 0xAD09B3AB, +/**/ 0xBC8D32DB, 0x189038C0, +/**/ 0x3FCE89F5, 0x96762300, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF612ECE, 0x7E004D50, +/**/ 0x3FCEC000, 0x00000000, +/**/ 0x3FF07B92, 0x0B27C417, +/**/ 0x3FC0CF15, 0xE821087A, +/**/ 0x3FCB9BBD, 0x8B49DC8C, +/**/ 0x3FBD7D31, 0x40BEF5C2, +/**/ 0x3FC27290, 0xEC080575, +/**/ 0x3FBECCEA, 0x3056A6A9, +/**/ 0x3C9DE506, 0x0C9B27A2, +/**/ 0x3FCF0DC1, 0x73468A50, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF51B7D3, 0x60EFA34D, +/**/ 0x3FCF4000, 0x00000000, +/**/ 0x3FF07FD0, 0x3273C018, +/**/ 0x3FC12242, 0x51B87F08, +/**/ 0x3FCBD771, 0x9D9AB2BC, +/**/ 0x3FBE377D, 0x85FFA125, +/**/ 0x3FC2D071, 0xEA0CFE55, +/**/ 0x3FBFCA67, 0xBB61DDD3, +/**/ 0xBCA25383, 0x88A645E7, +/**/ 0x3FCF91AE, 0xEE603F40, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF07E6C6, 0x1FF422B6, +/**/ 0x3FCFC000, 0x00000000, +/**/ 0x3FF08423, 0x3B6C76F2, +/**/ 0x3FC17624, 0x0A1DF897, +/**/ 0x3FCC149D, 0xFD38779D, +/**/ 0x3FBEF583, 0x95531ECD, +/**/ 0x3FC33157, 0x855FA966, +/**/ 0x3FC06805, 0xD81E6BAA, +/**/ 0x3C86827E, 0x1B47FAEC, +/**/ 0x3FD00ADF, 0x570E6798, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F508CED, 0xB1DBC656, +/**/ 0x3FD02000, 0x00000000, +/**/ 0x3FF0888B, 0x53F3A97B, +/**/ 0x3FC1CABF, 0x858525D6, +/**/ 0x3FCC534A, 0x3C37AF90, +/**/ 0x3FBFB762, 0x18AD312A, +/**/ 0x3FC3955A, 0xB151CAAD, +/**/ 0x3FC0EF16, 0x07ADE82D, +/**/ 0x3CAEEF44, 0xFCDE8746, +/**/ 0x3FD04CF8, 0xAD203480, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F6116A7, 0xE752F5A1, +/**/ 0x3FD06000, 0x00000000, +/**/ 0x3FF08D08, 0xAB0B03F8, +/**/ 0x3FC22019, 0x4F34EEE8, +/**/ 0x3FCC937E, 0x2AFDABDE, +/**/ 0x3FC03E9C, 0x5C4F35BA, +/**/ 0x3FC3FC95, 0x68DF21A6, +/**/ 0x3FC17A91, 0x53843C52, +/**/ 0xBC9D6F54, 0xC2BB835A, +/**/ 0x3FD08F23, 0xCE0162B8, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F6A1156, 0x1607EF23, +/**/ 0x3FD0A000, 0x00000000, +/**/ 0x3FF0919B, 0x70D9FA87, +/**/ 0x3FC27636, 0x0A456C09, +/**/ 0x3FCCD541, 0xDA483778, +/**/ 0x3FC0A394, 0x136D6630, +/**/ 0x3FC46722, 0xBA615E9C, +/**/ 0x3FC20AA6, 0xA2BC6F73, +/**/ 0x3CA9D006, 0x7F1D9D86, +/**/ 0x3FD0D161, 0x0F0C1EC8, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F719B70, 0xD9FA8688, +/**/ 0x3FD0E000, 0x00000000, +/**/ 0x3FF09643, 0xD6B3D5D1, +/**/ 0x3FC2CD1A, 0x72641546, +/**/ 0x3FCD189D, 0x9D4AC7EC, +/**/ 0x3FC10AA9, 0x149C2E66, +/**/ 0x3FC4D51E, 0xD3DE8741, +/**/ 0x3FC29F86, 0xF6DA4768, +/**/ 0x3CAEA900, 0x828C2A81, +/**/ 0x3FD113B0, 0xC65D88C8, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F7643D6, 0xB3D5D119, +/**/ 0x3FD12000, 0x00000000, +/**/ 0x3FF09B02, 0x0F1DF195, +/**/ 0x3FC324CB, 0x5C9E6B3F, +/**/ 0x3FCD5D9A, 0x0BE228B7, +/**/ 0x3FC173EC, 0xD29602B0, +/**/ 0x3FC546A7, 0x0FFA7799, +/**/ 0x3FC33965, 0x87BA569F, +/**/ 0xBCAE3258, 0x9956F2C3, +/**/ 0x3FD15613, 0x4ADA6FF0, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F7B020F, 0x1DF1952F, +/**/ 0x3FD16000, 0x00000000, +/**/ 0x3FF09FD6, 0x4DD62EB0, +/**/ 0x3FC37D4D, 0xB8335DE5, +/**/ 0x3FCDA440, 0x04DFA3F1, +/**/ 0x3FC1DF71, 0x55E59412, +/**/ 0x3FC5BBDA, 0x0394B72E, +/**/ 0x3FC3D877, 0xE1177398, +/**/ 0x3CA8AC88, 0x3B5720A7, +/**/ 0x3FD19888, 0xF43427A8, +/**/ 0x3FF08000, 0x00000000, +/**/ 0x3F7FD64D, 0xD62EAF85, +/**/ 0x3FD1A000, 0x00000000, +/**/ 0x3FF0A4C0, 0xC7D99A5F, +/**/ 0x3FC3D6A6, 0x8F6BB942, +/**/ 0x3FCDEC98, 0xB06CB8A9, +/**/ 0x3FC24D49, 0x432C74B1, +/**/ 0x3FC634D7, 0x8C1C6EC6, +/**/ 0x3FC47CF6, 0x01BF2560, +/**/ 0x3CA3EDE7, 0x476E25C7, +/**/ 0x3FD1DB12, 0x1AED7720, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0xBF7B3F38, 0x2665A126, +/**/ 0x3FD1E000, 0x00000000, +/**/ 0x3FF0A9C1, 0xB36B4C8B, +/**/ 0x3FC430DB, 0x0879E39B, +/**/ 0x3FCE36AD, 0x82887D8B, +/**/ 0x3FC2BD87, 0xE1B33C79, +/**/ 0x3FC6B1C0, 0xDEA4E95E, +/**/ 0x3FC5271A, 0x7C90504A, +/**/ 0x3CAAFAD9, 0x8A6EBD08, +/**/ 0x3FD21DAF, 0x185FA360, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0xBF763E4C, 0x94B3751C, +/**/ 0x3FD22000, 0x00000000, +/**/ 0x3FF0AED9, 0x481B7EED, +/**/ 0x3FC48BF0, 0x66613BB3, +/**/ 0x3FCE8288, 0x3D9FDD8F, +/**/ 0x3FC33041, 0x22470BF2, +/**/ 0x3FC732B8, 0x97C5B476, +/**/ 0x3FC5D722, 0x9B614F73, +/**/ 0x3CA96B82, 0x759745C8, +/**/ 0x3FD26060, 0x46BF95B8, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0xBF7126B7, 0xE48112DC, +/**/ 0x3FD26000, 0x00000000, +/**/ 0x3FF0B407, 0xBECEDF0E, +/**/ 0x3FC4E7EC, 0x09E5699A, +/**/ 0x3FCED032, 0xF541EC2D, +/**/ 0x3FC3A589, 0xA6688484, +/**/ 0x3FC7B7E2, 0xCC5228BD, +/**/ 0x3FC68D4E, 0x83ECAD1F, +/**/ 0x3CA98586, 0x7CB79363, +/**/ 0x3FD2A326, 0x01231EC8, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0xBF67F082, 0x6241E449, +/**/ 0x3FD2A000, 0x00000000, +/**/ 0x3FF0B94D, 0x51C61D1C, +/**/ 0x3FC544D3, 0x7281F837, +/**/ 0x3FCF1FB8, 0x10F19F89, +/**/ 0x3FC41D76, 0xC7D08A44, +/**/ 0x3FC84165, 0x1AF4E5E6, +/**/ 0x3FC749E1, 0x5EE5D838, +/**/ 0x3C8A2A36, 0xA1F9A890, +/**/ 0x3FD2E600, 0xA3865760, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0xBF5ACAB8, 0xE78B8E2F, +/**/ 0x3FD2E000, 0x00000000, +/**/ 0x3FF0BEAA, 0x3CA5B9C1, +/**/ 0x3FC5A2AC, 0x3F6A91D3, +/**/ 0x3FCF7122, 0x4F1650DB, +/**/ 0x3FC4981E, 0xA04F63E7, +/**/ 0x3FC8CF66, 0xBEBC9B64, +/**/ 0x3FC80D21, 0x81598BF7, +/**/ 0xBC984143, 0x8E0FD320, +/**/ 0x3FD328F0, 0x8AD12008, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0xBF355C35, 0xA463F3FD, +/**/ 0x3FD32000, 0x00000000, +/**/ 0x3FF0C41E, 0xBC7E151A, +/**/ 0x3FC6017C, 0x30943E19, +/**/ 0x3FCFC47C, 0xC80C760D, +/**/ 0x3FC51598, 0x120B129D, +/**/ 0x3FC96210, 0xA2A855B5, +/**/ 0x3FC8D758, 0x9880230D, +/**/ 0xBCA4D129, 0xBF178596, +/**/ 0x3FD36BF6, 0x14DCC050, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0x3F507AF1, 0xF854661E, +/**/ 0x3FD36000, 0x00000000, +/**/ 0x3FF0C9AB, 0x0FD3C135, +/**/ 0x3FC66149, 0x27C80482, +/**/ 0x3FD00CE9, 0x78AC0DDD, +/**/ 0x3FC595FA, 0xD02204B1, +/**/ 0x3FC9F98D, 0x7642750D, +/**/ 0x3FC9A8D3, 0xD82AC48A, +/**/ 0x3C977587, 0x289B3951, +/**/ 0x3FD3AF11, 0xA079A6D8, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0x3F63561F, 0xA7826A0D, +/**/ 0x3FD3A000, 0x00000000, +/**/ 0x3FF0CF4F, 0x76A81A69, +/**/ 0x3FC6C219, 0x29BF5ACD, +/**/ 0x3FD03898, 0x507D5DD4, +/**/ 0x3FC6195F, 0x67B79439, +/**/ 0x3FCA9609, 0xC35A709F, +/**/ 0x3FCA81E4, 0x2BF7455C, +/**/ 0x3CA03304, 0xF424551E, +/**/ 0x3FD3F243, 0x8D754B40, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0x3F6E9EED, 0x5034D2A8, +/**/ 0x3FD3E000, 0x00000000, +/**/ 0x3FF0D50C, 0x3282280D, +/**/ 0x3FC723F2, 0x5F4ACC23, +/**/ 0x3FD06551, 0x08771131, +/**/ 0x3FC69FDF, 0x4970163E, +/**/ 0x3FCB37B4, 0x04EE9A0A, +/**/ 0x3FCB62DE, 0x6B79BC18, +/**/ 0x3CAECF25, 0x02A2F456, +/**/ 0x3FD4358C, 0x3CA032E0, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0x3F750C32, 0x82280D28, +/**/ 0x3FD42000, 0x00000000, +/**/ 0x3FF0DAE1, 0x8677C82D, +/**/ 0x3FC786DB, 0x16834ABE, +/**/ 0x3FD09319, 0xF1631731, +/**/ 0x3FC72994, 0xD36297AF, +/**/ 0x3FCBDEBC, 0xBF583888, +/**/ 0x3FCC4C1B, 0x918E2AE6, +/**/ 0x3CA92F70, 0xF34A155C, +/**/ 0x3FD478EC, 0x0FD419C8, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0x3F7AE186, 0x77C82D53, +/**/ 0x3FD46000, 0x00000000, +/**/ 0x3FF0E0CF, 0xB73728F8, +/**/ 0x3FC7EAD9, 0xC406A36A, +/**/ 0x3FD0C1F9, 0x91BDA616, +/**/ 0x3FC7B69B, 0x5B86C42B, +/**/ 0x3FCC8B56, 0x99CD8C9F, +/**/ 0x3FCD3DF8, 0xF7084936, +/**/ 0xBC923B74, 0x54942387, +/**/ 0x3FD4BC63, 0x69FA40E8, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBF7F3048, 0xC8D707BB, +/**/ 0x3FD4A000, 0x00000000, +/**/ 0x3FF0E6D7, 0x0B1092B8, +/**/ 0x3FC84FF5, 0x043F9011, +/**/ 0x3FD0F1F6, 0xA7AFD6EB, +/**/ 0x3FC8470F, 0x3AA5D7B9, +/**/ 0x3FCD3DB6, 0x794E9CFD, +/**/ 0x3FCE38D8, 0x90FB69FD, +/**/ 0x3C9CFA2D, 0xC2327DC5, +/**/ 0x3FD4FFF2, 0xAF11E2C0, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBF7928F4, 0xEF6D4848, +/**/ 0x3FD4E000, 0x00000000, +/**/ 0x3FF0ECF7, 0xCA008550, +/**/ 0x3FC8B633, 0x9CB9ECA7, +/**/ 0x3FD12318, 0x2B20AC3D, +/**/ 0x3FC8DB0D, 0xD7D5E860, +/**/ 0x3FCDF613, 0x9D1315AF, +/**/ 0x3FCF3D21, 0x32D8BC6F, +/**/ 0x3C9C6A36, 0x92E48EEE, +/**/ 0x3FD5439A, 0x4436D008, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBF730835, 0xFF7AAF92, +/**/ 0x3FD52000, 0x00000000, +/**/ 0x3FF0F332, 0x3DBA2C62, +/**/ 0x3FC91D9C, 0x7D83983C, +/**/ 0x3FD15565, 0x4FDDA02E, +/**/ 0x3FC972B5, 0xB48747C7, +/**/ 0x3FCEB4A7, 0xBC9105F9, +/**/ 0x3FD0259F, 0x6A535ECF, +/**/ 0x3C87EB36, 0xF6EA55C1, +/**/ 0x3FD5875A, 0x8FA83538, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBF699B84, 0x8BA73C6A, +/**/ 0x3FD56000, 0x00000000, +/**/ 0x3FF0F986, 0xB1B22D42, +/**/ 0x3FC98636, 0xC29A92ED, +/**/ 0x3FD188E5, 0x87DBE62D, +/**/ 0x3FCA0E26, 0x792C37EB, +/**/ 0x3FCF79AF, 0x2735E8CD, +/**/ 0x3FD0B1D1, 0x6ECCD4C0, +/**/ 0x3C9502B5, 0xBEAE0510, +/**/ 0x3FD5CB33, 0xF8CF8AC0, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBF59E539, 0x374AF74C, +/**/ 0x3FD5A000, 0x00000000, +/**/ 0x3FF0FFF5, 0x7329D23A, +/**/ 0x3FC9F009, 0xB568F082, +/**/ 0x3FD1BDA0, 0x85939DB2, +/**/ 0x3FCAAD81, 0x0283B18A, +/**/ 0x3FD022B4, 0x72F69148, +/**/ 0x3FD14362, 0x39AD0B79, +/**/ 0xBCAD7968, 0x80828B86, +/**/ 0x3FD60F26, 0xE847B130, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBEE519AC, 0x5B8BC081, +/**/ 0x3FD5E000, 0x00000000, +/**/ 0x3FF1067E, 0xD13A9687, +/**/ 0x3FCA5B1C, 0xCE4F3F61, +/**/ 0x3FD1F39E, 0x3E764545, +/**/ 0x3FCB50E7, 0x6F90871B, +/**/ 0x3FD08C0B, 0x6F487F97, +/**/ 0x3FD1DA90, 0x67265C20, +/**/ 0x3CAE5B02, 0x995723AD, +/**/ 0x3FD65333, 0xC7E43AA0, +/**/ 0x3FF10000, 0x00000000, +/**/ 0x3F59FB44, 0xEA5A1D64, +/**/ 0x3FD62000, 0x00000000, +/**/ 0x3FF10D23, 0x1CE216D9, +/**/ 0x3FCAC777, 0xB63E0B53, +/**/ 0x3FD22AE6, 0xED81D055, +/**/ 0x3FCBF87D, 0x3046C5AC, +/**/ 0x3FD0F8FE, 0xFCB29FE4, +/**/ 0x3FD2779D, 0xC99A404E, +/**/ 0xBCA2AF1E, 0xC3202AE8, +/**/ 0x3FD6975B, 0x02B8E378, +/**/ 0x3FF10000, 0x00000000, +/**/ 0x3F6A4639, 0xC42DB2AB, +/**/ 0x3FD66000, 0x00000000, +/**/ 0x3FF113E2, 0xA90E6A24, +/**/ 0x3FCB3522, 0x485F2C6B, +/**/ 0x3FD26383, 0x15F1D6CC, +/**/ 0x3FCCA467, 0x14F9D555, +/**/ 0x3FD169B3, 0x245E397E, +/**/ 0x3FD31ACF, 0x99479CF7, +/**/ 0xBC730D3F, 0x8992C228, +/**/ 0x3FD6DB9D, 0x05213B28, +/**/ 0x3FF10000, 0x00000000, +/**/ 0x3F73E2A9, 0x0E6A2469, +/**/ 0x3FD6A000, 0x00000000, +/**/ 0x3FF11ABD, 0xCAAAE6D5, +/**/ 0x3FCBA424, 0x93CF9B23, +/**/ 0x3FD29D7B, 0x86106AD4, +/**/ 0x3FCD54CB, 0x5E96870B, +/**/ 0x3FD1DE4D, 0x9975D46D, +/**/ 0x3FD3C46E, 0xA709F8A4, +/**/ 0xBC9CB630, 0x457B6F5C, +/**/ 0x3FD71FFA, 0x3CC87FC8, +/**/ 0x3FF10000, 0x00000000, +/**/ 0x3F7ABDCA, 0xAAE6D53D, +/**/ 0x3FD6E000, 0x00000000, +/**/ 0x3FF121B4, 0xD8AD589E, +/**/ 0x3FCC1486, 0xDD6A8C89, +/**/ 0x3FD2D8D9, 0x5A283891, +/**/ 0x3FCE09D1, 0xCFB4F5A1, +/**/ 0x3FD256F5, 0xCF594BB6, +/**/ 0x3FD474C7, 0x92614C29, +/**/ 0xBC88FB31, 0x533051E9, +/**/ 0x3FD76473, 0x18B1AD28, +/**/ 0x3FF14000, 0x00000000, +/**/ 0xBF7E4B27, 0x52A761D6, +/**/ 0x3FD72000, 0x00000000, +/**/ 0x3FF128C8, 0x2C23AB4A, +/**/ 0x3FCC8651, 0xA1A6A356, +/**/ 0x3FD315A5, 0xFF99ABE3, +/**/ 0x3FCEC3A3, 0xBE8EE4C2, +/**/ 0x3FD2D3D5, 0x11207D5D, +/**/ 0x3FD52C2B, 0x02FE6DF8, +/**/ 0xBCA3F304, 0xFE4D8DF3, +/**/ 0x3FD7A908, 0x093FC1F0, +/**/ 0x3FF14000, 0x00000000, +/**/ 0xBF7737D3, 0xDC54B622, +/**/ 0x3FD76000, 0x00000000, +/**/ 0x3FF12FF8, 0x20420F33, +/**/ 0x3FCCF98D, 0x96860D89, +/**/ 0x3FD353EB, 0x3814F292, +/**/ 0x3FCF826C, 0x27E81BF7, +/**/ 0x3FD35516, 0x9A827352, +/**/ 0x3FD5EAED, 0xE614C6DF, +/**/ 0x3C80AEDB, 0x36C1700C, +/**/ 0x3FD7EDB9, 0x803E3C28, +/**/ 0x3FF14000, 0x00000000, +/**/ 0xBF7007DF, 0xBDF0CCC6, +/**/ 0x3FD7A000, 0x00000000, +/**/ 0x3FF13745, 0x12719C3A, +/**/ 0x3FCD6E43, 0xAD9A717F, +/**/ 0x3FD393B3, 0x1CFACD12, +/**/ 0x3FD0232B, 0xE17B8F05, +/**/ 0x3FD3DAE7, 0xB23873BC, +/**/ 0x3FD6B169, 0xAFB712E5, +/**/ 0x3C994C0C, 0x0BC74599, +/**/ 0x3FD83287, 0xF0E9CF80, +/**/ 0x3FF14000, 0x00000000, +/**/ 0xBF6175DB, 0x1CC78CA5, +/**/ 0x3FD7E000, 0x00000000, +/**/ 0x3FF13EAF, 0x625F7844, +/**/ 0x3FCDE47D, 0x161D9978, +/**/ 0x3FD3D508, 0x22E63DCA, +/**/ 0x3FD087CA, 0x8B2EC7EB, +/**/ 0x3FD46577, 0xC5F619C8, +/**/ 0x3FD77FFC, 0xA08A73DE, +/**/ 0x3CA1DBDE, 0x6E7B547F, +/**/ 0x3FD87773, 0xCFF956F8, +/**/ 0x3FF14000, 0x00000000, +/**/ 0xBF3509DA, 0x087BC752, +/**/ 0x3FD82000, 0x00000000, +/**/ 0x3FF14637, 0x720C869D, +/**/ 0x3FCE5C43, 0x3F1FD940, +/**/ 0x3FD417F5, 0x1D614654, +/**/ 0x3FD0EF2A, 0x472052ED, +/**/ 0x3FD4F4F8, 0x88116DA6, +/**/ 0x3FD8570A, 0x102117B6, +/**/ 0xBCAB6E89, 0x214A7328, +/**/ 0x3FD8BC7D, 0x93A70458, +/**/ 0x3FF14000, 0x00000000, +/**/ 0x3F58DDC8, 0x321A7479, +/**/ 0x3FD86000, 0x00000000, +/**/ 0x3FF14DDD, 0xA5DDA5C4, +/**/ 0x3FCED59F, 0xD9CD3739, +/**/ 0x3FD45C85, 0x42C70412, +/**/ 0x3FD15964, 0x49C983A8, +/**/ 0x3FD5899E, 0x0EF7ED0B, +/**/ 0x3FD936FA, 0xBC543499, +/**/ 0x3CAFF50D, 0x7B29F22E, +/**/ 0x3FD901A5, 0xB3B9CF50, +/**/ 0x3FF14000, 0x00000000, +/**/ 0x3F6BBB4B, 0xBB4B87E0, +/**/ 0x3FD8A000, 0x00000000, +/**/ 0x3FF155A2, 0x64AC8172, +/**/ 0x3FCF509C, 0xDBCA7047, +/**/ 0x3FD4A2C4, 0x3055A16F, +/**/ 0x3FD1C692, 0xD25160C7, +/**/ 0x3FD6239E, 0xF68F9906, +/**/ 0x3FDA203D, 0x1DFC2EE2, +/**/ 0x3CAD2019, 0x671EF39F, +/**/ 0x3FD946EC, 0xA98F2718, +/**/ 0x3FF14000, 0x00000000, +/**/ 0x3F75A264, 0xAC8171A9, +/**/ 0x3FD8E000, 0x00000000, +/**/ 0x3FF15D86, 0x17D8FF02, +/**/ 0x3FCFCD44, 0x81AAFD5E, +/**/ 0x3FD4EABD, 0xEE72B776, +/**/ 0x3FD236D1, 0x377F943F, +/**/ 0x3FD6C334, 0x83A56DB7, +/**/ 0x3FDB1345, 0xC36D6C50, +/**/ 0xBC7841E5, 0x761537BB, +/**/ 0x3FD98C52, 0xF024E808, +/**/ 0x3FF14000, 0x00000000, +/**/ 0x3F7D8617, 0xD8FF01DE, +/**/ 0x3FD92000, 0x00000000, +/**/ 0x3FF16589, 0x2B5B4A9A, +/**/ 0x3FD025D0, 0xA8C0A8C6, +/**/ 0x3FD5347E, 0xF524E4B6, +/**/ 0x3FD2AA3B, 0xF565EDBD, +/**/ 0x3FD7689A, 0xC98D2842, +/**/ 0x3FDC108F, 0xB128B4DD, +/**/ 0xBC8A5EEB, 0x4452A669, +/**/ 0x3FD9D1D9, 0x04239878, +/**/ 0x3FF18000, 0x00000000, +/**/ 0xBF7A76D4, 0xA4B56661, +/**/ 0x3FD96000, 0x00000000, +/**/ 0x3FF16DAC, 0x0DD68BC8, +/**/ 0x3FD065DF, 0x0EC54C3A, +/**/ 0x3FD58014, 0x30C58A12, +/**/ 0x3FD320F0, 0xBBCBCCEF, +/**/ 0x3FD81410, 0xD218F380, +/**/ 0x3FDD189C, 0xC9371D29, +/**/ 0x3C58C3C1, 0x1D6E6EC7, +/**/ 0x3FDA177F, 0x63E8EF18, +/**/ 0x3FF18000, 0x00000000, +/**/ 0xBF7253F2, 0x29743866, +/**/ 0x3FD9A000, 0x00000000, +/**/ 0x3FF175EF, 0x30AC48A8, +/**/ 0x3FD0A6D3, 0x037BA7C0, +/**/ 0x3FD5CD8B, 0x06EDCD18, +/**/ 0x3FD39B0E, 0x7D679188, +/**/ 0x3FD8C5D8, 0xC8128143, +/**/ 0x3FDE2BF6, 0x39B3613A, +/**/ 0xBC874080, 0xC70C9C76, +/**/ 0x3FDA5D46, 0x8F92A560, +/**/ 0x3FF18000, 0x00000000, +/**/ 0xBF64219E, 0xA76EB06E, +/**/ 0x3FD9E000, 0x00000000, +/**/ 0x3FF17E53, 0x08107EEF, +/**/ 0x3FD0E8B2, 0x40691386, +/**/ 0x3FD61CF1, 0x5BA2319A, +/**/ 0x3FD418B5, 0x7FF30656, +/**/ 0x3FD97E38, 0x24624146, +/**/ 0x3FDF4B2C, 0xF30D6589, +/**/ 0xBC8D4AD9, 0x74DD0C9B, +/**/ 0x3FDAA32F, 0x090998F8, +/**/ 0x3FF18000, 0x00000000, +/**/ 0xBF3ACF7E, 0xF81116BC, +/**/ 0x3FDA2000, 0x00000000, +/**/ 0x3FF186D8, 0x0B1E7A9D, +/**/ 0x3FD12B82, 0xA98356F0, +/**/ 0x3FD66E55, 0x96C051D8, +/**/ 0x3FD49A07, 0x6D28A49D, +/**/ 0x3FDA3D77, 0xDE14D616, +/**/ 0x3FE03B6D, 0x13502F53, +/**/ 0x3CA51700, 0x4AD59707, +/**/ 0x3FDAE939, 0x540D3F08, +/**/ 0x3FF18000, 0x00000000, +/**/ 0x3F5B602C, 0x79EA752F, +/**/ 0x3FDA6000, 0x00000000, +/**/ 0x3FF18F7E, 0xB3EE7285, +/**/ 0x3FD16F4A, 0x4EC4AF40, +/**/ 0x3FD6C1C6, 0xA9B275FD, +/**/ 0x3FD51F27, 0x64B886B9, +/**/ 0x3FDB03E4, 0x9D72A144, +/**/ 0x3FE0D7CF, 0xE7207DD5, +/**/ 0xBCAACE1E, 0x8E77D1B2, +/**/ 0x3FDB2F65, 0xF63F6C78, +/**/ 0x3FF18000, 0x00000000, +/**/ 0x3F6EFD67, 0xDCE509F5, +/**/ 0x3FDAA000, 0x00000000, +/**/ 0x3FF19847, 0x7FABF325, +/**/ 0x3FD1B40F, 0x6DD15EDB, +/**/ 0x3FD71754, 0x156D090D, +/**/ 0x3FD5A83A, 0x0F44EE42, +/**/ 0x3FDBD1CE, 0xF26149CC, +/**/ 0x3FE17B14, 0x9EBB7D53, +/**/ 0x3CA18867, 0x054C177A, +/**/ 0x3FDB75B5, 0x773075F8, +/**/ 0x3FF18000, 0x00000000, +/**/ 0x3F78477F, 0xABF3257B, +/**/ 0x3FDAE000, 0x00000000, +/**/ 0x3FF1A132, 0xEEAD20E6, +/**/ 0x3FD1F9D8, 0x73AFA8F4, +/**/ 0x3FD76F0D, 0xF0BA2B44, +/**/ 0x3FD63565, 0xB2776412, +/**/ 0x3FDCA78B, 0x8E4B8181, +/**/ 0x3FE22595, 0xDE92725A, +/**/ 0xBCABDA45, 0x225EE470, +/**/ 0x3FDBBC28, 0x606BABE0, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0xBF7ECD11, 0x52DF1A7E, +/**/ 0x3FDB2000, 0x00000000, +/**/ 0x3FF1AA41, 0x848ADB16, +/**/ 0x3FD240AB, 0xFE932ABB, +/**/ 0x3FD7C904, 0xEED7E85D, +/**/ 0x3FD6C6D2, 0x4640B1B3, +/**/ 0x3FDD8573, 0x81D01020, +/**/ 0x3FE2D7B3, 0x9938B939, +/**/ 0x3CA12ECB, 0x36D76E02, +/**/ 0x3FDC02BF, 0x3D843430, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0xBF75BE7B, 0x7524EA70, +/**/ 0x3FDB6000, 0x00000000, +/**/ 0x3FF1B373, 0xC839C9AC, +/**/ 0x3FD28890, 0xDFBC912D, +/**/ 0x3FD8254A, 0x666DE3CA, +/**/ 0x3FD75CA9, 0x8B57457C, +/**/ 0x3FDE6BE4, 0x7E7E55FE, +/**/ 0x3FE391D3, 0x68EC3777, +/**/ 0xBC9F7EFE, 0x4D8A80A5, +/**/ 0x3FDC497A, 0x9C2247A0, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0xBF69186F, 0x8C6CA8A7, +/**/ 0x3FDBA000, 0x00000000, +/**/ 0x3FF1BCCA, 0x44246029, +/**/ 0x3FD2D18E, 0x1D6EB966, +/**/ 0x3FD883F0, 0x58DF9E20, +/**/ 0x3FD7F717, 0x2308FF84, +/**/ 0x3FDF5B41, 0x1CEC1692, +/**/ 0x3FE45460, 0xEFAE7F7E, +/**/ 0xBCACA88A, 0xC247C281, +/**/ 0x3FDC905B, 0x0C10D428, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0xBF49ADDE, 0xDCFEB6F6, +/**/ 0x3FDBE000, 0x00000000, +/**/ 0x3FF1C645, 0x8645E0A6, +/**/ 0x3FD31BAA, 0xF4FA598C, +/**/ 0x3FD8E509, 0x7A00CDBD, +/**/ 0x3FD89648, 0xA876EFA4, +/**/ 0x3FE029F8, 0x93BB3BA0, +/**/ 0x3FE51FCE, 0x3E769492, +/**/ 0xBC63BD0A, 0xDAC78BA6, +/**/ 0x3FDCD761, 0x1F4B8A08, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0x3F591619, 0x178298DB, +/**/ 0x3FDC2000, 0x00000000, +/**/ 0x3FF1CFE6, 0x20466A93, +/**/ 0x3FD366EE, 0xDCE16113, +/**/ 0x3FD948A9, 0x3831A262, +/**/ 0x3FD93A6D, 0xCB5336B7, +/**/ 0x3FE0AB30, 0xF50362A5, +/**/ 0x3FE5F494, 0x440F45E4, +/**/ 0xBCA1B23F, 0x79A811B8, +/**/ 0x3FDD1E8D, 0x6A0D56C8, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0x3F6FCC40, 0x8CD52690, +/**/ 0x3FDC6000, 0x00000000, +/**/ 0x3FF1D9AC, 0xA798215A, +/**/ 0x3FD3B361, 0x87135170, +/**/ 0x3FD9AEE3, 0xC4E92F90, +/**/ 0x3FD9E3B8, 0x6C3B0A06, +/**/ 0x3FE13183, 0x439D6983, +/**/ 0x3FE6D333, 0x444347EE, +/**/ 0x3C9E6687, 0x141D7ADE, +/**/ 0x3FDD65E0, 0x82DF5278, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0x3F79ACA7, 0x98215A4D, +/**/ 0x3FDCA000, 0x00000000, +/**/ 0x3FF1E399, 0xB59577B1, +/**/ 0x3FD4010A, 0xE343E389, +/**/ 0x3FDA17CE, 0x1DB4A57B, +/**/ 0x3FDA925C, 0xBAC8CA27, +/**/ 0x3FE1BD2C, 0x29AC5009, +/**/ 0x3FE7BC33, 0x5806ABBE, +/**/ 0x3C89743A, 0xD953CBEA, +/**/ 0x3FDDAD5B, 0x02A82420, +/**/ 0x3FF20000, 0x00000000, +/**/ 0xBF7C664A, 0x6A884EAF, +/**/ 0x3FDCE000, 0x00000000, +/**/ 0x3FF1EDAD, 0xE7A0AD1E, +/**/ 0x3FD44FF3, 0x215D62D8, +/**/ 0x3FDA837E, 0x15B2742E, +/**/ 0x3FDB4691, 0x557C3A62, +/**/ 0x3FE24E6B, 0x9ABECCA0, +/**/ 0x3FE8B024, 0xF75D3619, +/**/ 0xBC60A42B, 0x953C1F21, +/**/ 0x3FDDF4FD, 0x84BBE168, +/**/ 0x3FF20000, 0x00000000, +/**/ 0xBF725218, 0x5F52E269, +/**/ 0x3FDD2000, 0x00000000, +/**/ 0x3FF1F7E9, 0xDF448BE1, +/**/ 0x3FD4A022, 0xB4103D45, +/**/ 0x3FDAF20A, 0x5F90F152, +/**/ 0x3FDC008F, 0x6B992E26, +/**/ 0x3FE2E585, 0x07C18F30, +/**/ 0x3FE9AFA1, 0x8DCE89C2, +/**/ 0xBC8B90A5, 0xE5B4E0DD, +/**/ 0x3FDE3CC8, 0xA6EC6EF0, +/**/ 0x3FF20000, 0x00000000, +/**/ 0xBF602C41, 0x76E83DEE, +/**/ 0x3FDD6000, 0x00000000, +/**/ 0x3FF2024E, 0x42567651, +/**/ 0x3FD4F1A2, 0x53815E48, +/**/ 0x3FDB638A, 0x98189F26, +/**/ 0x3FDCC092, 0xE11F7BB9, +/**/ 0x3FE382BF, 0x968E1C3C, +/**/ 0x3FEABB4C, 0x1A4C4551, +/**/ 0xBCAC384D, 0xC65EE1E9, +/**/ 0x3FDE84BD, 0x099A6620, +/**/ 0x3FF20000, 0x00000000, +/**/ 0x3F427212, 0xB3B2877E, +/**/ 0x3FDDA000, 0x00000000, +/**/ 0x3FF20CDB, 0xBB19D366, +/**/ 0x3FD5447B, 0x00190520, +/**/ 0x3FDBD817, 0x514AC3D7, +/**/ 0x3FDD86DA, 0x7501B24E, +/**/ 0x3FE42666, 0x5D5DCC91, +/**/ 0x3FEBD3D1, 0xDB834BBA, +/**/ 0xBCA62892, 0x64307FE4, +/**/ 0x3FDECCDB, 0x4FC685E0, +/**/ 0x3FF20000, 0x00000000, +/**/ 0x3F69B776, 0x33A6CD00, +/**/ 0x3FDDE000, 0x00000000, +/**/ 0x3FF21792, 0xF864EB38, +/**/ 0x3FD598B6, 0x0573E0CA, +/**/ 0x3FDC4FCA, 0x1E1D9C05, +/**/ 0x3FDE53A7, 0xE9C2FB44, +/**/ 0x3FE4D0C8, 0xA26E99AF, +/**/ 0x3FECF9EB, 0x09A8A359, +/**/ 0xBCADF861, 0xD9AFA9E0, +/**/ 0x3FDF1524, 0x1F23B3F8, +/**/ 0x3FF20000, 0x00000000, +/**/ 0x3F7792F8, 0x64EB3836, +/**/ 0x3FDE2000, 0x00000000, +/**/ 0x3FF22274, 0xADC744F8, +/**/ 0x3FD5EE5C, 0xFD785957, +/**/ 0x3FDCCABD, 0x9EE01B3A, +/**/ 0x3FDF2740, 0x30A7B7B5, +/**/ 0x3FE5823A, 0x202E0D0D, +/**/ 0x3FEE2E5B, 0x9EEBE829, +/**/ 0xBC93BB42, 0xE2EA9787, +/**/ 0x3FDF5D98, 0x202994B8, +/**/ 0x3FF24000, 0x00000000, +/**/ 0xBF7D8B52, 0x38BB0864, +/**/ 0x3FDE6000, 0x00000000, +/**/ 0x3FF22D81, 0x93B1990A, +/**/ 0x3FD64579, 0xD3920D0F, +/**/ 0x3FDD490D, 0x8E4FE1FE, +/**/ 0x3FE000F5, 0xCBD3ED59, +/**/ 0x3FE63B13, 0x4E45F774, +/**/ 0x3FEF71F4, 0x2FD578CE, +/**/ 0x3CA8AD1C, 0xC0E1AC47, +/**/ 0x3FDFA637, 0xFE27BF60, +/**/ 0x3FF24000, 0x00000000, +/**/ 0xBF727E6C, 0x4E66F5A1, +/**/ 0x3FDEA000, 0x00000000, +/**/ 0x3FF238BA, 0x679F6AE1, +/**/ 0x3FD69E16, 0xC815A8F5, +/**/ 0x3FDDCAD6, 0xCF6CD4C9, +/**/ 0x3FE071FA, 0xFD2ADE38, +/**/ 0x3FE6FBB1, 0xAFEE9630, +/**/ 0x3FF062C9, 0x6A7ACB82, +/**/ 0x3C7E3580, 0x35D3555B, +/**/ 0x3FDFEF04, 0x67599588, +/**/ 0x3FF24000, 0x00000000, +/**/ 0xBF5D1661, 0x82547B6F, +/**/ 0x3FDEE000, 0x00000000, +/**/ 0x3FF2441F, 0xEC425F4B, +/**/ 0x3FD6F83E, 0x73CF67B4, +/**/ 0x3FDE5037, 0x7C1691BA, +/**/ 0x3FE0E6D7, 0x7AF8190E, +/**/ 0x3FE7C478, 0x27F29078, +/**/ 0x3FF11512, 0x13B5FFDC, +/**/ 0x3C6CC7A1, 0x5FEBA301, +/**/ 0x3FE01BFF, 0x067D6224, +/**/ 0x3FF24000, 0x00000000, +/**/ 0x3F507FB1, 0x097D2BDC, +/**/ 0x3FDF2000, 0x00000000, +/**/ 0x3FF24FB2, 0xE9AF6533, +/**/ 0x3FD753FB, 0xCBBEA804, +/**/ 0x3FDED94E, 0xF480E731, +/**/ 0x3FE15FB5, 0x106D90C6, +/**/ 0x3FE895CF, 0x52DAD430, +/**/ 0x3FF1D052, 0x28FAAE13, +/**/ 0xBCA50976, 0xE849F35A, +/**/ 0x3FE04092, 0xD1AE3B48, +/**/ 0x3FF24000, 0x00000000, +/**/ 0x3F6F65D3, 0x5ECA665D, +/**/ 0x3FDF6000, 0x00000000, +/**/ 0x3FF25B74, 0x2D8DC7FA, +/**/ 0x3FD7B15A, 0x25013475, +/**/ 0x3FDF663D, 0xEF8D6387, +/**/ 0x3FE1DCBF, 0xA2DF4BFF, +/**/ 0x3FE97025, 0xE7C2E4E5, +/**/ 0x3FF29510, 0x1C2AE4AB, +/**/ 0x3CA4C8DC, 0xB02A3D13, +/**/ 0x3FE0653D, 0xF0FD9FD8, +/**/ 0x3FF24000, 0x00000000, +/**/ 0x3F7B742D, 0x8DC7FA40, +/**/ 0x3FDFA000, 0x00000000, +/**/ 0x3FF26764, 0x8B4843F2, +/**/ 0x3FD81065, 0x38F10257, +/**/ 0x3FDFF726, 0x8C1920B1, +/**/ 0x3FE25E25, 0x5148D4E4, +/**/ 0x3FEA53F1, 0x2061C3FE, +/**/ 0x3FF363DB, 0x5B9300E5, +/**/ 0xBCA47774, 0x624B8B97, +/**/ 0x3FE08A00, 0xC1CAE338, +/**/ 0x3FF28000, 0x00000000, +/**/ 0xBF789B74, 0xB7BC0E50, +/**/ 0x3FDFE000, 0x00000000, +/**/ 0x3FF27384, 0xDC4036F2, +/**/ 0x3FD87129, 0x29775C8F, +/**/ 0x3FE04616, 0x31A78776, +/**/ 0x3FE2E416, 0x95EE0C65, +/**/ 0x3FEB41AD, 0x28E05161, +/**/ 0x3FF43D4C, 0xFF1DF849, +/**/ 0x3CA5941C, 0xBABBA919, +/**/ 0x3FE0AEDB, 0xA3221C1C, +/**/ 0x3FF28000, 0x00000000, +/**/ 0xBF68F647, 0x7F921C27, +/**/ 0x3FE01000, 0x00000000, +/**/ 0x3FF27FD6, 0x00030888, +/**/ 0x3FD8D3B2, 0x8598A1B5, +/**/ 0x3FE092BA, 0x4E0BC755, +/**/ 0x3FE36EC6, 0x6A428EEC, +/**/ 0x3FEC39C0, 0x44F514C9, +/**/ 0x3FF52205, 0x18C4EF3A, +/**/ 0x4000C1D1, 0xA852F235, +/**/ 0x3CA78082, 0xD00F64B8, +/**/ 0x3FE0D3CE, 0xF5C846F8, +/**/ 0x3FF28000, 0x00000000, +/**/ 0xBF04FFFE, 0x7BBC39DF, +/**/ 0x3FE03000, 0x00000000, +/**/ 0x3FF28C58, 0xDC81E6D7, +/**/ 0x3FD9380E, 0x4E3BF356, +/**/ 0x3FE0E192, 0xFFC646A7, +/**/ 0x3FE3FE6A, 0x6D34756D, +/**/ 0x3FED3CEF, 0x139ABC91, +/**/ 0x3FF612B8, 0xF80111C0, +/**/ 0x4001A33C, 0x3467C688, +/**/ 0xBC8A9954, 0x34F59445, +/**/ 0x3FE0F8DB, 0x1C47D550, +/**/ 0x3FF28000, 0x00000000, +/**/ 0x3F68B1B9, 0x03CDAE3F, +/**/ 0x3FE05000, 0x00000000, +/**/ 0x3FF2990E, 0x5E4BF713, +/**/ 0x3FD99E49, 0xFB326E9E, +/**/ 0x3FE132B4, 0x8779391A, +/**/ 0x3FE4933B, 0x0C2FE325, +/**/ 0x3FEE4BB1, 0xAEAAE1D0, +/**/ 0x3FF71020, 0x1F4377BD, +/**/ 0x40029271, 0x1C886605, +/**/ 0xBCA33AB1, 0x7130CE99, +/**/ 0x3FE11E00, 0x7AFDAF10, +/**/ 0x3FF28000, 0x00000000, +/**/ 0x3F790E5E, 0x4BF712C7, +/**/ 0x3FE07000, 0x00000000, +/**/ 0x3FF2A5F7, 0x78CB1A3B, +/**/ 0x3FDA0673, 0x8081C5D1, +/**/ 0x3FE18634, 0x0D5E6499, +/**/ 0x3FE52D73, 0xAEDD6BE6, +/**/ 0x3FEF66A5, 0x1CF1AAA0, +/**/ 0x3FF81B02, 0x4834E5A9, +/**/ 0x40039066, 0xFCE48906, +/**/ 0xBCA34E4F, 0x6BFB4C85, +/**/ 0x3FE1433F, 0x7826AAD4, +/**/ 0x3FF2C000, 0x00000000, +/**/ 0xBF7A0887, 0x34E5C574, +/**/ 0x3FE09000, 0x00000000, +/**/ 0x3FF2B315, 0x268368DB, +/**/ 0x3FDA7099, 0x53F655B7, +/**/ 0x3FE1DC27, 0xAD9032EC, +/**/ 0x3FE5CD52, 0xE5F88E23, +/**/ 0x3FF04738, 0x0A68BDFC, +/**/ 0x3FF93435, 0x2F057820, +/**/ 0x40049E27, 0xDAE8A2FC, +/**/ 0x3C86832C, 0xFAA44565, +/**/ 0x3FE16898, 0x7BED8260, +/**/ 0x3FF2C000, 0x00000000, +/**/ 0xBF69D5B2, 0xF92E4A41, +/**/ 0x3FE0B000, 0x00000000, +/**/ 0x3FF2C068, 0x69558A9E, +/**/ 0x3FDADCCA, 0x73011B64, +/**/ 0x3FE234A6, 0x8511146A, +/**/ 0x3FE6731A, 0x9D6CBF3C, +/**/ 0x3FF0E1E1, 0xD575F00A, +/**/ 0x3FFA5C9D, 0xADEA17E7, +/**/ 0x4005BCD2, 0xD9123E7C, +/**/ 0xBCA23E4F, 0xCC2AE1E4, +/**/ 0x3FE18E0B, 0xF07948F0, +/**/ 0x3FF2C000, 0x00000000, +/**/ 0x3F1A1A55, 0x62A7614A, +/**/ 0x3FE0D000, 0x00000000, +/**/ 0x3FF2CDF2, 0x4AC410C6, +/**/ 0x3FDB4B16, 0x68E63D97, +/**/ 0x3FE28FC8, 0xBFA256B2, +/**/ 0x3FE71F10, 0x51FDF05A, +/**/ 0x3FF183AE, 0x0753C882, +/**/ 0x3FFB9530, 0xF1921090, +/**/ 0x4006ED9E, 0x14F942BC, +/**/ 0x3CA27879, 0x89C77FA3, +/**/ 0x3FE1B39A, 0x41FC691C, +/**/ 0x3FF2C000, 0x00000000, +/**/ 0x3F6BE495, 0x88218CD6, +/**/ 0x3FE0F000, 0x00000000, +/**/ 0x3FF2DBB3, 0xDC3BFD25, +/**/ 0x3FDBBB8D, 0x55413207, +/**/ 0x3FE2EDA7, 0xA6792BF1, +/**/ 0x3FE7D17D, 0x4AC4E230, +/**/ 0x3FF22D00, 0xAAE6CB05, +/**/ 0x3FFCDEF5, 0xC9028E71, +/**/ 0x400831D8, 0xB40C626C, +/**/ 0x3C953FEF, 0x9873F484, +/**/ 0x3FE1D943, 0xDEC430C0, +/**/ 0x3FF2C000, 0x00000000, +/**/ 0x3F7BB3DC, 0x3BFD24A1, +/**/ 0x3FE11000, 0x00000000, +/**/ 0x3FF2E9AE, 0x3760A19B, +/**/ 0x3FDC2E3F, 0xF2E3E2EB, +/**/ 0x3FE34E5D, 0xAFE1CD38, +/**/ 0x3FE88AAE, 0xD6CE0B26, +/**/ 0x3FF2DE44, 0x2C4B06C6, +/**/ 0x3FFE3B06, 0x138813D2, +/**/ 0x40098AED, 0x23FD5612, +/**/ 0xBC91EC19, 0xB7AF0E54, +/**/ 0x3FE1FF09, 0x3748F114, +/**/ 0x3FF30000, 0x00000000, +/**/ 0xBF7651C8, 0x9F5E657E, +/**/ 0x3FE13000, 0x00000000, +/**/ 0x3FF2F7E2, 0x7E5B072B, +/**/ 0x3FDCA33F, 0x9F169C4D, +/**/ 0x3FE3B206, 0x8FE1EB56, +/**/ 0x3FE94AF6, 0x8F30E1B7, +/**/ 0x3FF397E9, 0xCFCF9887, +/**/ 0x3FFFAA90, 0x4FB7F25F, +/**/ 0x400AFA63, 0x94745D90, +/**/ 0x3C96955C, 0x2A139390, +/**/ 0x3FE224EA, 0xBE3EBA20, +/**/ 0x3FF30000, 0x00000000, +/**/ 0xBF603B03, 0x49F1AA85, +/**/ 0x3FE15000, 0x00000000, +/**/ 0x3FF30651, 0xDC2D0E76, +/**/ 0x3FDD1A9E, 0x613EF408, +/**/ 0x3FE418BF, 0x49ED083D, +/**/ 0x3FEA12AA, 0x9DFD1E23, +/**/ 0x3FF45A6A, 0x32B75F76, +/**/ 0x4000976C, 0xA7673F47, +/**/ 0x400C81E4, 0xB046AC6A, +/**/ 0x3C879FF7, 0x7D1BEB80, +/**/ 0x3FE24AE8, 0xE8A6B8B0, +/**/ 0x3FF30000, 0x00000000, +/**/ 0x3F594770, 0xB439D90E, +/**/ 0x3FE17000, 0x00000000, +/**/ 0x3FF314FD, 0x85087ECD, +/**/ 0x3FDD946E, 0xF2F45390, +/**/ 0x3FE482A6, 0x43BEDA05, +/**/ 0x3FEAE226, 0x0A640DD7, +/**/ 0x3FF52645, 0xD6A3D695, +/**/ 0x4001649F, 0x08098FE0, +/**/ 0x400E233C, 0x9D2BADE7, +/**/ 0x3C9E948C, 0x4E5F8348, +/**/ 0x3FE27104, 0x2DE13E58, +/**/ 0x3FF30000, 0x00000000, +/**/ 0x3F74FD85, 0x087ECD1A, +/**/ 0x3FE19000, 0x00000000, +/**/ 0x3FF323E6, 0xB6AA3C67, +/**/ 0x3FDE10C4, 0xC8894828, +/**/ 0x3FE4EFDB, 0x59718389, +/**/ 0x3FEBB9C9, 0x0A8D7622, +/**/ 0x3FF5FC05, 0xB8A62B12, +/**/ 0x40023D9A, 0xE4296831, +/**/ 0x400FE05E, 0x49C0B830, +/**/ 0x3CA19107, 0xC1189DE8, +/**/ 0x3FE2973D, 0x07C07BCC, +/**/ 0x3FF34000, 0x00000000, +/**/ 0xBF7C1949, 0x55C3993D, +/**/ 0x3FE1B000, 0x00000000, +/**/ 0x3FF3330E, 0xB8B9E20B, +/**/ 0x3FDE8FB4, 0x1A11468B, +/**/ 0x3FE5607F, 0xF2E740E1, +/**/ 0x3FEC99F9, 0x5B91DB14, +/**/ 0x3FF6DC3B, 0xF50C5FAA, +/**/ 0x4003232A, 0x0CFAC1C7, +/**/ 0x4010DDB3, 0x894EFD30, +/**/ 0xBCA7760F, 0x3783D916, +/**/ 0x3FE2BD93, 0xF29BF5F0, +/**/ 0x3FF34000, 0x00000000, +/**/ 0xBF69E28E, 0x8C3BEA7F, +/**/ 0x3FE1D000, 0x00000000, +/**/ 0x3FF34276, 0xDD2DFE6D, +/**/ 0x3FDF1151, 0xECEB226B, +/**/ 0x3FE5D4B7, 0x1AA123CE, +/**/ 0x3FED8322, 0xA01F65F8, +/**/ 0x3FF7C784, 0x791CE583, +/**/ 0x40041625, 0xC15A6B9C, +/**/ 0x4011DB51, 0x64280FEB, +/**/ 0x3CA10463, 0x28CA6DBB, +/**/ 0x3FE2E409, 0x6D64BEAC, +/**/ 0x3FF34000, 0x00000000, +/**/ 0x3F43B6E9, 0x6FF364E1, +/**/ 0x3FE1F000, 0x00000000, +/**/ 0x3FF35220, 0x80B539C7, +/**/ 0x3FDF95B4, 0x1DD91A82, +/**/ 0x3FE64CA5, 0x961EA9CA, +/**/ 0x3FEE75B6, 0xC65B3B2F, +/**/ 0x3FF8BE85, 0xC412E59F, +/**/ 0x40051778, 0x02462A51, +/**/ 0x4012EA48, 0x109FC81B, +/**/ 0x3C959E4C, 0x9F70CA98, +/**/ 0x3FE30A9D, 0xF9BA7B3C, +/**/ 0x3FF34000, 0x00000000, +/**/ 0x3F722080, 0xB539C6A2, +/**/ 0x3FE21000, 0x00000000, +/**/ 0x3FF3620D, 0x0B24ACDA, +/**/ 0x3FE00E78, 0xB5D803B6, +/**/ 0x3FE6C871, 0xFFE457FB, +/**/ 0x3FEF722E, 0x759EF386, +/**/ 0x3FF9C1F1, 0xB8D0E874, +/**/ 0x4006281D, 0x080FB06E, +/**/ 0x40140BF2, 0xD1F69DF7, +/**/ 0xBC8489EA, 0xCBFAF37F, +/**/ 0x3FE33152, 0x1C0141BC, +/**/ 0x3FF38000, 0x00000000, +/**/ 0xBF7DF2F4, 0xDB532667, +/**/ 0x3FE23000, 0x00000000, +/**/ 0x3FF3723D, 0xEFEBB76D, +/**/ 0x3FE05390, 0xC153FC4C, +/**/ 0x3FE74844, 0xE34A2666, +/**/ 0x3FF03C84, 0xC260A400, +/**/ 0x3FFAD286, 0x81E70F01, +/**/ 0x40074924, 0xDBC4A78E, +/**/ 0x401541CB, 0x8BBCA2E0, +/**/ 0x3C9C7528, 0x7BEA8472, +/**/ 0x3FE35826, 0x5B7858F8, +/**/ 0x3FF38000, 0x00000000, +/**/ 0xBF6B8420, 0x28912510, +/**/ 0x3FE25000, 0x00000000, +/**/ 0x3FF382B4, 0xAE8DA9C7, +/**/ 0x3FE09A2E, 0x842CABB9, +/**/ 0x3FE7CC48, 0xDA356141, +/**/ 0x3FF0C567, 0xBCD4FDB8, +/**/ 0x3FFBF10F, 0x89B62C32, +/**/ 0x40087BB5, 0x18ADC4B9, +/**/ 0x40168D6D, 0xC516F6F1, +/**/ 0xBC933A6B, 0x2E37D6A3, +/**/ 0x3FE37F1B, 0x4251E5AC, +/**/ 0x3FF38000, 0x00000000, +/**/ 0x3F45A574, 0x6D4E3A7A, +/**/ 0x3FE27000, 0x00000000, +/**/ 0x3FF39372, 0xD3219A4C, +/**/ 0x3FE0E25E, 0xD4394437, +/**/ 0x3FE854AA, 0xACE4CC74, +/**/ 0x3FF15408, 0x0981EE13, +/**/ 0x3FFD1E66, 0x88AA5332, +/**/ 0x4009C10A, 0xDA3BD18F, +/**/ 0x4017F099, 0xFFE4AE21, +/**/ 0xBCAED56B, 0x7B588ABE, +/**/ 0x3FE3A631, 0x5DCB911C, +/**/ 0x3FF38000, 0x00000000, +/**/ 0x3F7372D3, 0x219A4BA9, +/**/ 0x3FE29000, 0x00000000, +/**/ 0x3FF3A479, 0xF6D8C6BC, +/**/ 0x3FE12C2F, 0x11197A32, +/**/ 0x3FE8E199, 0x73F949D5, +/**/ 0x3FF1E8B1, 0xEE7A481D, +/**/ 0x3FFE5B74, 0xABBE8828, +/**/ 0x400B1A7C, 0xDB3D83BC, +/**/ 0x40196D39, 0x6DC46100, +/**/ 0x3CA7798C, 0xACD8F69C, +/**/ 0x3FE3CD69, 0x3E4835E8, +/**/ 0x3FF3C000, 0x00000000, +/**/ 0xBF7B8609, 0x27394391, +/**/ 0x3FE2B000, 0x00000000, +/**/ 0x3FF3B5CB, 0xC08BE738, +/**/ 0x3FE177AD, 0x2B5CB6B7, +/**/ 0x3FE97346, 0xBCE90EB1, +/**/ 0x3FF283B6, 0x68EC7F04, +/**/ 0x3FFFA933, 0xD5B8ED04, +/**/ 0x400C897D, 0xCBCDFF9A, +/**/ 0x401B0562, 0x0E4ABF55, +/**/ 0x3C881FF6, 0x1EE42043, +/**/ 0x3FE3F4C3, 0x776AA08C, +/**/ 0x3FF3C000, 0x00000000, +/**/ 0xBF64687E, 0xE8319086, +/**/ 0x3FE2D000, 0x00000000, +/**/ 0x3FF3C769, 0xE54FE05E, +/**/ 0x3FE1C4E7, 0xAC1A81A0, +/**/ 0x3FEA09E6, 0xB10FA326, +/**/ 0x3FF3256B, 0x840F679B, +/**/ 0x40008457, 0xFEE9EF1A, +/**/ 0x400E0F9E, 0xE4146343, +/**/ 0x401CBB5B, 0x433496A9, +/**/ 0xBCA57A4C, 0x59F087C0, +/**/ 0x3FE41C40, 0xA03171A8, +/**/ 0x3FF3C000, 0x00000000, +/**/ 0x3F5DA795, 0x3F81773D, +/**/ 0x3FE2F000, 0x00000000, +/**/ 0x3FF3D956, 0x291249DC, +/**/ 0x3FE213ED, 0xBD044AC9, +/**/ 0x3FEAA5B0, 0x3F917FA8, +/**/ 0x3FF3CE2C, 0xB7380A79, +/**/ 0x40013D84, 0x576AFAE8, +/**/ 0x400FAE92, 0xBAAB74F3, +/**/ 0x401E91A2, 0xE9129E4A, +/**/ 0x3C905671, 0x0CEC83F7, +/**/ 0x3FE443E1, 0x53143194, +/**/ 0x3FF3C000, 0x00000000, +/**/ 0x3F795629, 0x1249DBC4, +/**/ 0x3FE31000, 0x00000000, +/**/ 0x3FF3EB92, 0x5F3E4715, +/**/ 0x3FE264CF, 0x30F965D1, +/**/ 0x3FEB46DD, 0x4A4F2FB2, +/**/ 0x3FF47E5B, 0x4BC2E94F, +/**/ 0x400200B9, 0x54F8F9EB, +/**/ 0x4010B418, 0x33305D9F, +/**/ 0x40204579, 0x826EF167, +/**/ 0xBC9737A0, 0xE06EBCAE, +/**/ 0x3FE46BA6, 0x2E21A53C, +/**/ 0x3FF40000, 0x00000000, +/**/ 0xBF746DA0, 0xC1B8EB04, +/**/ 0x3FE33000, 0x00000000, +/**/ 0x3FF3FE20, 0x6B6A38D5, +/**/ 0x3FE2B79C, 0x8D26C7A0, +/**/ 0x3FEBEDAA, 0xD62978F8, +/**/ 0x3FF5365E, 0xCB8CC6D1, +/**/ 0x4002CE9C, 0xD894AF54, +/**/ 0x40119F3B, 0x79F7C63E, +/**/ 0x40215524, 0x0C8E7B9E, +/**/ 0x3CA485D0, 0x13DC9A80, +/**/ 0x3FE4938F, 0xD31F754C, +/**/ 0x3FF40000, 0x00000000, +/**/ 0xBF3DF949, 0x5C72B1E7, +/**/ 0x3FE35000, 0x00000000, +/**/ 0x3FF41102, 0x420ED8E7, +/**/ 0x3FE30C67, 0x12BCE2B2, +/**/ 0x3FEC9A59, 0x3EDE345E, +/**/ 0x3FF5F6A5, 0x78CAB466, +/**/ 0x4003A7E1, 0x3EAD62EE, +/**/ 0x401299C8, 0x9CB9A228, +/**/ 0x40227974, 0x1BE749B0, +/**/ 0x3CAFE28F, 0xC6A9831F, +/**/ 0x3FE4BB9E, 0xE7AB3A40, +/**/ 0x3FF40000, 0x00000000, +/**/ 0x3F710242, 0x0ED8E776, +/**/ 0x3FE37000, 0x00000000, +/**/ 0x3FF42439, 0xE9485B43, +/**/ 0x3FE36340, 0xC946E033, +/**/ 0x3FED4D2C, 0x6ECC5A7E, +/**/ 0x3FF6BFA4, 0xD027255A, +/**/ 0x40048D46, 0x72504BE1, +/**/ 0x4013A4ED, 0x09445BD5, +/**/ 0x4023B435, 0x749E19F9, +/**/ 0xBC40E7E5, 0xEAAAF53E, +/**/ 0x3FE4E3D4, 0x155D0070, +/**/ 0x3FF44000, 0x00000000, +/**/ 0xBF7BC616, 0xB7A4BD36, +/**/ 0x3FE39000, 0x00000000, +/**/ 0x3FF437C9, 0x79A23C23, +/**/ 0x3FE3BC3C, 0x89AF6A9D, +/**/ 0x3FEE066C, 0x1AF553BA, +/**/ 0x3FF791DA, 0x1622569A, +/**/ 0x40057F9B, 0x1B18AE2B, +/**/ 0x4014C1F0, 0x88BFF240, +/**/ 0x40250761, 0x019A4522, +/**/ 0x3CA4C238, 0xFDFCCB13, +/**/ 0x3FE50C30, 0x09EB58F8, +/**/ 0x3FF44000, 0x00000000, +/**/ 0xBF606D0C, 0xBB87B9E1, +/**/ 0x3FE3B000, 0x00000000, +/**/ 0x3FF44BB3, 0x1EEE6F35, +/**/ 0x3FE4176E, 0x0A004D1D, +/**/ 0x3FEEC664, 0x0399FA54, +/**/ 0x3FF86DCA, 0xF0CFD106, +/**/ 0x40067FBD, 0xE8C80E97, +/**/ 0x4015F237, 0xD9CD2D79, +/**/ 0x40267521, 0xC8076345, +/**/ 0x3CAEC756, 0xB089F7AF, +/**/ 0x3FE534B3, 0x77510D94, +/**/ 0x3FF44000, 0x00000000, +/**/ 0x3F67663D, 0xDCDE698F, +/**/ 0x3FE3D000, 0x00000000, +/**/ 0x3FF45FF9, 0x1928B1BE, +/**/ 0x3FE474E9, 0xE9EB53E9, +/**/ 0x3FEF8D64, 0x39DB03B6, +/**/ 0x3FF95406, 0x0F298B87, +/**/ 0x40078E9E, 0xFFC72AB6, +/**/ 0x40173747, 0x941456E7, +/**/ 0x4027FFDA, 0x74A71E71, +/**/ 0xBCAEED93, 0xFE7483B3, +/**/ 0x3FE55D5F, 0x13F48EC0, +/**/ 0x3FF44000, 0x00000000, +/**/ 0x3F7FF919, 0x28B1BDFF, +/**/ 0x3FE3F000, 0x00000000, +/**/ 0x3FF4749D, 0xBD66D0C4, +/**/ 0x3FE4D4C5, 0xC02C2013, +/**/ 0x3FF02DE0, 0xB56768CC, +/**/ 0x3FFA4523, 0xDF53A7BD, +/**/ 0x4008AD41, 0x8A357386, +/**/ 0x401892C7, 0x5E392799, +/**/ 0x4029AA2B, 0x97746ACD, +/**/ 0x3C924F0A, 0xB4A71E44, +/**/ 0x3FE58633, 0x9AD13548, +/**/ 0x3FF48000, 0x00000000, +/**/ 0xBF66C485, 0x325E775E, +/**/ 0x3FE41000, 0x00000000, +/**/ 0x3FF489A3, 0x76D6C491, +/**/ 0x3FE53718, 0x28D40829, +/**/ 0x3FF098EA, 0x98450D83, +/**/ 0x3FFB41C7, 0x55526E3B, +/**/ 0x4009DCBD, 0x719F540E, +/**/ 0x401A0685, 0x805D08D1, +/**/ 0x402B76FA, 0xA5142633, +/**/ 0x3C2AD9A7, 0xF1FF56FC, +/**/ 0x3FE5AF31, 0xCBA27244, +/**/ 0x3FF48000, 0x00000000, +/**/ 0x3F6346ED, 0xAD892100, +/**/ 0x3FE43000, 0x00000000, +/**/ 0x3FF49F0C, 0xC7CB94CC, +/**/ 0x3FE59BF8, 0xD492AA1E, +/**/ 0x3FF107FF, 0x34D2CA82, +/**/ 0x3FFC4A9E, 0xC3DF9E51, +/**/ 0x400B1E41, 0x45F5874E, +/**/ 0x401B947A, 0xDEB92648, +/**/ 0x402D6979, 0xD903D532, +/**/ 0x3CA43231, 0x04C67F5E, +/**/ 0x3FE5D85A, 0x6B1109A4, +/**/ 0x3FF48000, 0x00000000, +/**/ 0x3F7F0CC7, 0xCB94CC1A, +/**/ 0x3FE45000, 0x00000000, +/**/ 0x3FF4B4DC, 0x4ADA0BF0, +/**/ 0x3FE60380, 0x990F861F, +/**/ 0x3FF17B50, 0xCBEC7542, +/**/ 0x3FFD6064, 0xC93CFE8F, +/**/ 0x400C7314, 0x56F36FE3, +/**/ 0x401D3ECF, 0x696E5374, +/**/ 0x402F8531, 0x1778AF1D, +/**/ 0x3C7A53BF, 0x31EBDA84, +/**/ 0x3FE601AE, 0x42E27660, +/**/ 0x3FF4C000, 0x00000000, +/**/ 0xBF66476A, 0x4BE81F81, +/**/ 0x3FE47000, 0x00000000, +/**/ 0x3FF4CB14, 0xB4065600, +/**/ 0x3FE66DC9, 0x826ADA4F, +/**/ 0x3FF1F314, 0xA3298D4D, +/**/ 0x3FFE83E1, 0x52191CB4, +/**/ 0x400DDC99, 0x05CA69AF, +/**/ 0x401F07DF, 0x1079C46A, +/**/ 0x4030E703, 0xF9440EB0, +/**/ 0x3CA495E1, 0x5817D0DD, +/**/ 0x3FE62B2E, 0x222A98A0, +/**/ 0x3FF4C000, 0x00000000, +/**/ 0x3F662968, 0x0CAC00D4, +/**/ 0x3FE49000, 0x00000000, +/**/ 0x3FF4E1B8, 0xD203BDC9, +/**/ 0x3FE6DAEE, 0xE5FE0976, +/**/ 0x3FF26F83, 0x3C44F71E, +/**/ 0x3FFFB5EA, 0xB4D92F91, +/**/ 0x400F5C4F, 0x55A779C8, +/**/ 0x4020791F, 0xA66A7536, +/**/ 0x40322428, 0x7DCE5D75, +/**/ 0x3CADE7E8, 0x964F770B, +/**/ 0x3FE654DA, 0xDD7FD12C, +/**/ 0x3FF50000, 0x00000000, +/**/ 0xBF7E472D, 0xFC42374B, +/**/ 0x3FE4B000, 0x00000000, +/**/ 0x3FF4F8CB, 0x8F87D541, +/**/ 0x3FE74B0D, 0x767620C4, +/**/ 0x3FF2F0D8, 0x9126F083, +/**/ 0x40007BB3, 0x73F08794, +/**/ 0x401079EB, 0xE1419117, +/**/ 0x40218062, 0xA917F81E, +/**/ 0x40337C6B, 0x48444DEE, +/**/ 0x3C907A41, 0xF4061E08, +/**/ 0x3FE67EB5, 0x4F31AF70, +/**/ 0x3FF50000, 0x00000000, +/**/ 0xBF5CD1C1, 0xE0AAFA85, +/**/ 0x3FE4D000, 0x00000000, +/**/ 0x3FF5104F, 0xF4B2718C, +/**/ 0x3FE7BE43, 0x59659939, +/**/ 0x3FF37754, 0x5502EAE6, +/**/ 0x400124A6, 0x6AE0AC51, +/**/ 0x4011527B, 0x33524D17, +/**/ 0x40229B46, 0x7FBF7A2D, +/**/ 0x4034F274, 0xAD716768, +/**/ 0xBC9C610F, 0x7C204EA8, +/**/ 0x3FE6A8BE, 0x57825A6C, +/**/ 0x3FF50000, 0x00000000, +/**/ 0x3F704FF4, 0xB2718C01, +/**/ 0x3FE4F000, 0x00000000, +/**/ 0x3FF52849, 0x288C017D, +/**/ 0x3FE834B0, 0x3E6D3F7F, +/**/ 0x3FF4033A, 0x3B0747CB, +/**/ 0x4001D652, 0xE946B196, +/**/ 0x401238CB, 0x3C2F8CB4, +/**/ 0x4023CB80, 0x53E520C1, +/**/ 0x40368938, 0x607BC0F6, +/**/ 0xBC84274C, 0xCC053597, +/**/ 0x3FE6D2F6, 0xDCE2DFB8, +/**/ 0x3FF54000, 0x00000000, +/**/ 0xBF77B6D7, 0x73FE8364, +/**/ 0x3FE51000, 0x00000000, +/**/ 0x3FF540BA, 0x729BE713, +/**/ 0x3FE8AE75, 0x781F49A2, +/**/ 0x3FF494D2, 0x432AC103, +/**/ 0x40029147, 0x9B0015B6, +/**/ 0x40132DE7, 0x156B74E9, +/**/ 0x402512F0, 0xE8362EC8, +/**/ 0x403843FE, 0xC8D2E0F8, +/**/ 0xBC8F55DB, 0xBB3ACC53, +/**/ 0x3FE6FD5F, 0xCC3296F0, +/**/ 0x3FF54000, 0x00000000, +/**/ 0x3F274E53, 0x7CE2565E, +/**/ 0x3FE53000, 0x00000000, +/**/ 0x3FF559A7, 0x3C98A101, +/**/ 0x3FE92BB6, 0x16C3163D, +/**/ 0x3FF52C69, 0x0DB2C44D, +/**/ 0x4003561E, 0x0F4546B8, +/**/ 0x401432F1, 0x7F099A82, +/**/ 0x402673A9, 0x831E227A, +/**/ 0x403A266F, 0xA02BBCD5, +/**/ 0x3CA279A8, 0xAEA9CB9D, +/**/ 0x3FE727FA, 0x1901CB44, +/**/ 0x3FF54000, 0x00000000, +/**/ 0x3F79A73C, 0x98A10084, +/**/ 0x3FE55000, 0x00000000, +/**/ 0x3FF57313, 0x1433B9BD, +/**/ 0x3FE9AC97, 0x0523E7B2, +/**/ 0x3FF5CA50, 0x361F7393, +/**/ 0x4004257B, 0xB0F40825, +/**/ 0x40154927, 0x46286025, +/**/ 0x4027EFF1, 0x781495B4, +/**/ 0x403C349E, 0x0A1139F1, +/**/ 0xBC5D2C66, 0x8B6015DA, +/**/ 0x3FE752C6, 0xBDD7E0E0, +/**/ 0x3FF58000, 0x00000000, +/**/ 0xBF69D9D7, 0x988C865F, +/**/ 0x3FE57000, 0x00000000, +/**/ 0x3FF58D01, 0xAD039E07, +/**/ 0x3FEA313F, 0x279933CD, +/**/ 0x3FF66EDE, 0xB63D93A6, +/**/ 0x40050012, 0xD836441A, +/**/ 0x401671E1, 0xF23D152C, +/**/ 0x40298A4C, 0x65D3A1DD, +/**/ 0x403E7316, 0x5EBDBF39, +/**/ 0xBCAE5B6C, 0x7AAA4996, +/**/ 0x3FE77DC6, 0xBC7D2FA0, +/**/ 0x3FF58000, 0x00000000, +/**/ 0x3F6A035A, 0x073C0E86, +/**/ 0x3FE59000, 0x00000000, +/**/ 0x3FF5A776, 0xE28DADB6, +/**/ 0x3FEAB9D7, 0x7D7BE2B5, +/**/ 0x3FF71A71, 0x5234C8A9, +/**/ 0x4005E6A3, 0xF873554C, +/**/ 0x4017AE9A, 0xC1F33F9B, +/**/ 0x402B4581, 0x4310046E, +/**/ 0x40407376, 0xF64B03E7, +/**/ 0xBCA3F39B, 0xB3AB0542, +/**/ 0x3FE7A8FB, 0x1E48D158, +/**/ 0x3FF5C000, 0x00000000, +/**/ 0xBF78891D, 0x725249CA, +/**/ 0x3FE5B000, 0x00000000, +/**/ 0x3FF5C276, 0xBA730F9B, +/**/ 0x3FEB468B, 0x454127C3, +/**/ 0x3FF7CD6B, 0x0E816ADB, +/**/ 0x4006D9FE, 0xEDDAC837, +/**/ 0x401900EE, 0x0209E3B7, +/**/ 0x402D24A2, 0x57489C7E, +/**/ 0x4041CAEA, 0x7F810E14, +/**/ 0xBC84F20E, 0x24F9675B, +/**/ 0x3FE7D464, 0xF472A690, +/**/ 0x3FF5C000, 0x00000000, +/**/ 0x3F43B5D3, 0x987CD623, +/**/ 0x3FE5D000, 0x00000000, +/**/ 0x3FF5DE05, 0x66C30CDC, +/**/ 0x3FEBD788, 0x23798D1A, +/**/ 0x3FF88835, 0xB0E567D8, +/**/ 0x4007DB04, 0x6E46660A, +/**/ 0x401A6A9E, 0xCA07CAA5, +/**/ 0x402F2B16, 0x41ECEF64, +/**/ 0x40434315, 0xC36F367B, +/**/ 0xBCA08CA1, 0x542594A6, +/**/ 0x3FE80005, 0x5869D9E8, +/**/ 0x3FF5C000, 0x00000000, +/**/ 0x3F7E0566, 0xC30CDBD9, +/**/ 0x3FE5F000, 0x00000000, +/**/ 0x3FF5FA27, 0x4875FA03, +/**/ 0x3FEC6CFE, 0x4CF96D63, +/**/ 0x3FF94B42, 0x4D7B8313, +/**/ 0x4008EAA7, 0xA1B04592, +/**/ 0x401BED9B, 0x2C5A9D87, +/**/ 0x4030AE51, 0x1BC92F68, +/**/ 0x4044DF8C, 0x685FBD64, +/**/ 0xBCAC07A8, 0x30FE6378, +/**/ 0x3FE82BDD, 0x6C30303C, +/**/ 0x3FF60000, 0x00000000, +/**/ 0xBF5762DE, 0x2817F40C, +/**/ 0x3FE61000, 0x00000000, +/**/ 0x3FF616E0, 0xF213FCD6, +/**/ 0x3FED0720, 0xB47784FF, +/**/ 0x3FFA1709, 0xE13C6707, +/**/ 0x400A09EF, 0xE70B2E72, +/**/ 0x401D8C00, 0xE976AAD9, +/**/ 0x4031DEBA, 0xD1AE1EA8, +/**/ 0x4046A453, 0x6424341F, +/**/ 0x3CA13E53, 0xA65D40B1, +/**/ 0x3FE857EE, 0x5ABA79E8, +/**/ 0x3FF60000, 0x00000000, +/**/ 0x3F76E0F2, 0x13FCD614, +/**/ 0x3FE63000, 0x00000000, +/**/ 0x3FF63437, 0x2A8B4ED8, +/**/ 0x3FEDA625, 0x3BF69915, +/**/ 0x3FFAEC0D, 0xFB6DF86F, +/**/ 0x400B39FA, 0xCAF2D64B, +/**/ 0x401F4822, 0xB7E2DC06, +/**/ 0x4033291B, 0xB12537E3, +/**/ 0x404895F0, 0xAF3EF0D1, +/**/ 0x3CAEA588, 0x71E7ED76, +/**/ 0x3FE88439, 0x5856807C, +/**/ 0x3FF64000, 0x00000000, +/**/ 0xBF6791AA, 0xE9624F1C, +/**/ 0x3FE65000, 0x00000000, +/**/ 0x3FF6522E, 0xF039F5E3, +/**/ 0x3FEE4A44, 0xEA588E54, +/**/ 0x3FFBCAD9, 0x77A3F8A4, +/**/ 0x400C7BFE, 0x3669F2F2, +/**/ 0x40209247, 0x1AEA54A4, +/**/ 0x4034900A, 0x6B866959, +/**/ 0x404AB97D, 0x620634CF, +/**/ 0x3C948649, 0xDA91B0FD, +/**/ 0x3FE8B0BF, 0xA316D3A0, +/**/ 0x3FF64000, 0x00000000, +/**/ 0x3F722EF0, 0x39F5E2AD, +/**/ 0x3FE67000, 0x00000000, +/**/ 0x3FF670CD, 0x7C2F4FC3, +/**/ 0x3FEEF3BC, 0x2583CF60, +/**/ 0x3FFCB401, 0x4A2E1684, +/**/ 0x400DD14A, 0xDCB9F8FB, +/**/ 0x40219209, 0x4E164373, +/**/ 0x40361669, 0x8FC171BC, +/**/ 0x404D14BA, 0xA46B7BE1, +/**/ 0xBCABAC31, 0xBBDFE65A, +/**/ 0x3FE8DD82, 0x8344E08C, +/**/ 0x3FF68000, 0x00000000, +/**/ 0xBF6E6507, 0xA1607A77, +/**/ 0x3FE69000, 0x00000000, +/**/ 0x3FF69018, 0x45AA3C85, +/**/ 0x3FEFA2CA, 0xF18FBD18, +/**/ 0x3FFDA825, 0x610C140E, +/**/ 0x400F3B4E, 0xF08895E1, +/**/ 0x4022A4E4, 0x272CD203, +/**/ 0x4037BF71, 0x60C4A0EE, +/**/ 0x404FAE29, 0xEC79351D, +/**/ 0x3C6BF5BB, 0x3E22FB0A, +/**/ 0x3FE90A83, 0x4BD9C858, +/**/ 0x3FF68000, 0x00000000, +/**/ 0x3F701845, 0xAA3C8533, +/**/ 0x3FE6B000, 0x00000000, +/**/ 0x3FF6B015, 0x05D92E4E, +/**/ 0x3FF02BDA, 0x9ABD20D8, +/**/ 0x3FFEA7F1, 0x9BC5CC13, +/**/ 0x40105DCC, 0x94AFB2BB, +/**/ 0x4023CC8C, 0xB382B54A, +/**/ 0x40398EBB, 0x19C28EAE, +/**/ 0x40514694, 0x8F7609B5, +/**/ 0x3C9CD223, 0xF66137E5, +/**/ 0x3FE937C3, 0x5AFE73AC, +/**/ 0x3FF6C000, 0x00000000, +/**/ 0xBF6FD5F4, 0x4DA36334, +/**/ 0x3FE6D000, 0x00000000, +/**/ 0x3FF6D0C9, 0xBBE1EF2B, +/**/ 0x3FF08961, 0x82FBDD29, +/**/ 0x3FFFB41E, 0xDCD403EC, +/**/ 0x401129EE, 0x121D0023, +/**/ 0x40250AE5, 0xB34159B2, +/**/ 0x403B884D, 0xDB5CEAC4, +/**/ 0x4052DD09, 0xA0B334B0, +/**/ 0xBC96BF1D, 0xD8F14BF9, +/**/ 0x3FE96544, 0x1A936D24, +/**/ 0x3FF6C000, 0x00000000, +/**/ 0x3F70C9BB, 0xE1EF2AEE, +/**/ 0x3FE6F000, 0x00000000, +/**/ 0x3FF6F23C, 0xB13786CF, +/**/ 0x3FF0EA20, 0x7B7FC134, +/**/ 0x400066BA, 0x1BD0D518, +/**/ 0x401202F9, 0x159EC945, +/**/ 0x40266205, 0x16FF868A, +/**/ 0x403DB0AD, 0x87398014, +/**/ 0x40549F33, 0x47D58711, +/**/ 0x3C8D858F, 0x54B11A28, +/**/ 0x3FE99307, 0x00C1184C, +/**/ 0x3FF70000, 0x00000000, +/**/ 0xBF6B869D, 0x90F2626A, +/**/ 0x3FE71000, 0x00000000, +/**/ 0x3FF71474, 0x7E455603, +/**/ 0x3FF14E40, 0x3A65655F, +/**/ 0x4000FA64, 0x1F4AA7A1, +/**/ 0x4012E9F0, 0xB946C70A, +/**/ 0x4027D43A, 0x3CC53936, +/**/ 0x40400675, 0xEE087279, +/**/ 0x40569278, 0x77313CEF, +/**/ 0xBCAB1BA1, 0x772D6E62, +/**/ 0x3FE9C10D, 0x9090E874, +/**/ 0x3FF70000, 0x00000000, +/**/ 0x3F74747E, 0x455602D3, +/**/ 0x3FE73000, 0x00000000, +/**/ 0x3FF73778, 0x0F773DEC, +/**/ 0x3FF1B5EC, 0x1288B243, +/**/ 0x40019581, 0x3A853FA5, +/**/ 0x4013DFF0, 0x6D2743E5, +/**/ 0x40296415, 0x09B4B924, +/**/ 0x4041515E, 0x19A59D1F, +/**/ 0x4058BD01, 0xF3E53877, +/**/ 0x3C962269, 0xFC348BAE, +/**/ 0x3FE9EF59, 0x5A90493C, +/**/ 0x3FF74000, 0x00000000, +/**/ 0xBF610FE1, 0x11842743, +/**/ 0x3FE75000, 0x00000000, +/**/ 0x3FF75B4E, 0xAAA78140, +/**/ 0x3FF22152, 0x28B49576, +/**/ 0x4002388E, 0x74D66746, +/**/ 0x4014E62E, 0xA43083A8, +/**/ 0x402B146E, 0x02885ED7, +/**/ 0x4042BC45, 0x29A3BC2C, +/**/ 0x405B25D8, 0xCDAFE7E5, +/**/ 0x3CA8862D, 0xF03F8A74, +/**/ 0x3FEA1DEB, 0xFD7DFBD8, +/**/ 0x3FF74000, 0x00000000, +/**/ 0x3F7B4EAA, 0xA7813FBA, +/**/ 0x3FE77000, 0x00000000, +/**/ 0x3FF77FFF, 0xF4FC0008, +/**/ 0x3FF290A3, 0xADE499E4, +/**/ 0x4002E412, 0xFF22FE11, +/**/ 0x4015FDFF, 0xD7A17943, +/**/ 0x402CE86F, 0x8AF79AEF, +/**/ 0x40444ACA, 0x6F8EDF86, +/**/ 0x405DD50A, 0x29CF9F92, +/**/ 0x3CA49DB0, 0xC5865233, +/**/ 0x3FEA4CC7, 0x2702BD90, +/**/ 0x3FF78000, 0x00000000, +/**/ 0xBE6607FF, 0xF08268E1, +/**/ 0x3FE79000, 0x00000000, +/**/ 0x3FF7A593, 0xF93D7FBC, +/**/ 0x3FF30415, 0x1F293A81, +/**/ 0x400398A1, 0x31649EA4, +/**/ 0x401728D9, 0xED75DA1E, +/**/ 0x402EE3A0, 0x7B1736CA, +/**/ 0x40460106, 0x036EC9D4, +/**/ 0x406069E8, 0xB3E5A09F, +/**/ 0xBCA79BBD, 0x4E8EB882, +/**/ 0x3FEA7BEC, 0x94762100, +/**/ 0x3FF7C000, 0x00000000, +/**/ 0xBF7A6C06, 0xC280445C, +/**/ 0x3FE7B000, 0x00000000, +/**/ 0x3FF7CC13, 0x2EB4E536, +/**/ 0x3FF37BDE, 0x8BD25D7D, +/**/ 0x400456D7, 0xA51DF797, +/**/ 0x40186858, 0x103AF33E, +/**/ 0x403084F8, 0x21121C2E, +/**/ 0x4047E39A, 0x9D7C6DE3, +/**/ 0x40621664, 0xEF4C9A12, +/**/ 0x3C804D2D, 0x39DB72FF, +/**/ 0x3FEAAB5E, 0x13B099B0, +/**/ 0x3FF7C000, 0x00000000, +/**/ 0x3F68265D, 0x69CA6C2F, +/**/ 0x3FE7D000, 0x00000000, +/**/ 0x3FF7F386, 0x809BA1CD, +/**/ 0x3FF3F83B, 0xE298B2EB, +/**/ 0x40051F62, 0x708A6ABE, +/**/ 0x4019BE3F, 0x090F77AB, +/**/ 0x4031AFE2, 0x6C13BF38, +/**/ 0x4049F7CA, 0x65FF02A8, +/**/ 0x4063F614, 0xDA840FE0, +/**/ 0xBCA7BDE9, 0xAB5D1A54, +/**/ 0x3FEADB1D, 0x83EBD320, +/**/ 0x3FF80000, 0x00000000, +/**/ 0xBF68F2FE, 0xC8BC6562, +/**/ 0x3FE7F000, 0x00000000, +/**/ 0x3FF81BF7, 0x562E1E24, +/**/ 0x3FF4796D, 0x469724DB, +/**/ 0x4005F2FC, 0x86E67917, +/**/ 0x401B2C82, 0x2F5AE582, +/**/ 0x4032F505, 0x65EE1919, +/**/ 0x404C438F, 0x4744D220, +/**/ 0x40661003, 0xD66309FD, +/**/ 0x3C8470C8, 0xFC828894, +/**/ 0x3FEB0B2C, 0xD6B287DC, +/**/ 0x3FF80000, 0x00000000, +/**/ 0x3F7BF756, 0x2E1E23E5, +/**/ 0x3FE81000, 0x00000000, +/**/ 0x3FF8456F, 0x9B70AB1D, +/**/ 0x3FF4FFB7, 0x6D01A674, +/**/ 0x4006D271, 0x42D7B667, +/**/ 0x401CB549, 0x05DD4055, +/**/ 0x40345723, 0xE490CA9B, +/**/ 0x404ECD17, 0x47C5589B, +/**/ 0x40686C46, 0x3D6DB036, +/**/ 0x4084044D, 0xECF23C2E, +/**/ 0xBC7F0990, 0x0D173A5F, +/**/ 0x3FEB3B8E, 0x10E12D3C, +/**/ 0x3FF84000, 0x00000000, +/**/ 0x3F55BE6D, 0xC2AC733C, +/**/ 0x3FE83000, 0x00000000, +/**/ 0x3FF86FF9, 0xCAB97B9D, +/**/ 0x3FF58B64, 0x04A71B42, +/**/ 0x4007BE9E, 0x20C0FB6E, +/**/ 0x401E5AF5, 0x9B426297, +/**/ 0x4035D958, 0x013C40EE, +/**/ 0x4050CEA9, 0x2215E48C, +/**/ 0x406B146B, 0xB8C0669A, +/**/ 0x40868C96, 0xFB8EB0FE, +/**/ 0x3CA55848, 0x1FCCBAD4, +/**/ 0x3FEB6C43, 0x4BB8EA98, +/**/ 0x3FF88000, 0x00000000, +/**/ 0xBF700635, 0x46846319, +/**/ 0x3FE85000, 0x00000000, +/**/ 0x3FF89BA0, 0xF71469BF, +/**/ 0x3FF61CC2, 0x28717EFA, +/**/ 0x4008B874, 0xAFB7BAF7, +/**/ 0x40201015, 0xEC7286DB, +/**/ 0x40377F1F, 0x8329A469, +/**/ 0x40525E49, 0x2927F0DD, +/**/ 0x406E135C, 0x5AE80CD9, +/**/ 0x40897364, 0x40DF64FD, +/**/ 0x3C89F53B, 0x1ED91B03, +/**/ 0x3FEB9D4E, 0xB6067ABC, +/**/ 0x3FF88000, 0x00000000, +/**/ 0x3F7BA0F7, 0x1469BF33, +/**/ 0x3FE87000, 0x00000000, +/**/ 0x3FF8C870, 0xD797DABF, +/**/ 0x3FF6B426, 0xDE42D55F, +/**/ 0x4009C0FC, 0xC0E06552, +/**/ 0x402103EC, 0xEB059907, +/**/ 0x40394C6A, 0x49A75AA7, +/**/ 0x40541A81, 0xB2A496D0, +/**/ 0x4070BAEE, 0x209CB693, +/**/ 0x408CC860, 0x285808C5, +/**/ 0xBCAE6D8C, 0x9B0DC6F3, +/**/ 0x3FEBCEB2, 0x955EC1C4, +/**/ 0x3FF8C000, 0x00000000, +/**/ 0x3F60E1AF, 0x2FB57EE7, +/**/ 0x3FE89000, 0x00000000, +/**/ 0x3FF8F675, 0xD3C502F4, +/**/ 0x3FF751ED, 0xA3BFB2E4, +/**/ 0x400AD956, 0xDE3987BC, +/**/ 0x40220AA0, 0xB30AAD0A, +/**/ 0x403B45AB, 0x16220014, +/**/ 0x40560929, 0xEC84429C, +/**/ 0x4072A569, 0x0D747939, +/**/ 0x40904F10, 0x5407F41E, +/**/ 0xBC675CEB, 0xFC269962, +/**/ 0x3FEC0071, 0x4773138C, +/**/ 0x3FF90000, 0x00000000, +/**/ 0xBF631458, 0x75FA1750, +/**/ 0x3FE8B000, 0x00000000, +/**/ 0x3FF925BD, 0x111125DF, +/**/ 0x3FF7F679, 0x0AD2B4C2, +/**/ 0x400C02BF, 0x1359A3C8, +/**/ 0x40232601, 0x88857C21, +/**/ 0x403D6FEB, 0x2515D90E, +/**/ 0x405830FA, 0xD421145E, +/**/ 0x4074D1D6, 0xFD789544, +/**/ 0x40928561, 0x4B30EBF1, +/**/ 0x3CA13E7B, 0x7876F9D2, +/**/ 0x3FEC328D, 0x437F5E74, +/**/ 0x3FF94000, 0x00000000, +/**/ 0xBF7A42EE, 0xEEDA20A4, +/**/ 0x3FE8D000, 0x00000000, +/**/ 0x3FF95654, 0x81B9477B, +/**/ 0x3FF8A233, 0x67F87779, +/**/ 0x400D3E90, 0x14665EA0, +/**/ 0x40245815, 0x5A415747, +/**/ 0x403FD0E1, 0x1D7511C0, +/**/ 0x405A99B6, 0x01EC30FB, +/**/ 0x40774A72, 0xDD7EE7A1, +/**/ 0x40951454, 0x5C2F1724, +/**/ 0x3C8185B3, 0x774A5205, +/**/ 0x3FEC6509, 0x1BD4AD0C, +/**/ 0x3FF94000, 0x00000000, +/**/ 0x3F765481, 0xB9477AC0, +/**/ 0x3FE8F000, 0x00000000, +/**/ 0x3FF9884A, 0xF50630B5, +/**/ 0x3FF9558F, 0x94B35A8D, +/**/ 0x400E8E46, 0xD1A32B1D, +/**/ 0x4025A31F, 0x0AEC68DB, +/**/ 0x40413785, 0xFD21A759, +/**/ 0x405D4C53, 0xF56DFCA6, +/**/ 0x407A1B45, 0xF89C0F5F, +/**/ 0x40980BB3, 0xC92C8CF3, +/**/ 0xBC8696E8, 0xFEB6A05E, +/**/ 0x3FEC97E7, 0x7F82B8CC, +/**/ 0x3FF98000, 0x00000000, +/**/ 0x3F6095EA, 0x0C6169C6, +/**/ 0x3FE91000, 0x00000000, +/**/ 0x3FF9BBB0, 0x292BC29F, +/**/ 0x3FFA1109, 0xC8E3D76B, +/**/ 0x400FF386, 0x8873C480, +/**/ 0x402709A6, 0xDE619C77, +/**/ 0x4042A8E9, 0x5A9417B9, +/**/ 0x4060299D, 0xBFE20B57, +/**/ 0x407D5283, 0xE1225431, +/**/ 0x409B7E74, 0xC225406C, +/**/ 0xBC879431, 0x74F396DB, +/**/ 0x3FECCB2B, 0x3C239888, +/**/ 0x3FF9C000, 0x00000000, +/**/ 0xBF513F5B, 0x50F5839F, +/**/ 0x3FE93000, 0x00000000, +/**/ 0x3FF9F094, 0xDEF4783D, +/**/ 0x3FFAD528, 0x8E300736, +/**/ 0x4010B80E, 0xB2D4D4EE, +/**/ 0x40288E84, 0x3F3D0057, +/**/ 0x404440D4, 0xD20263C0, +/**/ 0x4061DD42, 0x26E14927, +/**/ 0x4080807D, 0x5EF13D09, +/**/ 0x409F836C, 0xFE9E94BE, +/**/ 0xBC813C84, 0xE5FD9D2D, +/**/ 0x3FECFED7, 0x3FCCF104, +/**/ 0x3FFA0000, 0x00000000, +/**/ 0xBF6ED642, 0x170F854B, +/**/ 0x3FE95000, 0x00000000, +/**/ 0x3FFA270A, 0xEF70C9F9, +/**/ 0x3FFBA27D, 0xD12662D9, +/**/ 0x40118304, 0xE8433B59, +/**/ 0x402A34E9, 0x1B4DD8D9, +/**/ 0x4046041F, 0x58AA354C, +/**/ 0x4063C823, 0x87EB035B, +/**/ 0x40829D4E, 0x7F89A6B6, +/**/ 0x40A21B1A, 0xB4BED54D, +/**/ 0x3C855D66, 0xFD8283D4, +/**/ 0x3FED32EE, 0x9B2A7684, +/**/ 0x3FFA4000, 0x00000000, +/**/ 0xBF78F510, 0x8F3606B9, +/**/ 0x3FE97000, 0x00000000, +/**/ 0x3FFA5F25, 0x63EA127F, +/**/ 0x3FFC79A8, 0x1460C218, +/**/ 0x40125BC0, 0x3D14975C, +/**/ 0x402C006F, 0x2249DB66, +/**/ 0x4047F856, 0xED0AEFCD, +/**/ 0x4065F27F, 0x2E2028D0, +/**/ 0x40850B95, 0x6CE59595, +/**/ 0x40A4DC23, 0x18C497E2, +/**/ 0x3C8BDFAE, 0x76BA54CA, +/**/ 0x3FED6774, 0x83C60554, +/**/ 0x3FFA4000, 0x00000000, +/**/ 0x3F7F2563, 0xEA127F53, +/**/ 0x3FE99000, 0x00000000, +/**/ 0x3FFA98F8, 0x9061CEFE, +/**/ 0x3FFD5B53, 0xCAA1F466, +/**/ 0x40134379, 0xA92630E8, +/**/ 0x402DF527, 0x41E37357, +/**/ 0x404A23DF, 0xD7DE2305, +/**/ 0x406865FE, 0x1911C50F, +/**/ 0x4087D981, 0xD5CE543D, +/**/ 0x40A8192E, 0x2134A322, +/**/ 0xBC915CF9, 0x4FE6DAC8, +/**/ 0x3FED9C6C, 0x56821F74, +/**/ 0x3FFA8000, 0x00000000, +/**/ 0x3F78F890, 0x61CEFDBB, +/**/ 0x3FE9B000, 0x00000000, +/**/ 0x3FFAD49A, 0x30F0DACC, +/**/ 0x3FFE483C, 0xDDBFEE70, +/**/ 0x40143B8C, 0xC4418459, +/**/ 0x40300BD5, 0xE6E7E816, +/**/ 0x404C8E1A, 0x02EE200E, +/**/ 0x406B2DFC, 0x83038A03, +/**/ 0x408B1814, 0xD987E3D9, +/**/ 0x40ABEB1E, 0x8827CEFA, +/**/ 0x3CA8829A, 0xE22AFCE0, +/**/ 0x3FEDD1D9, 0x9A4C39D0, +/**/ 0x3FFAC000, 0x00000000, +/**/ 0x3F749A30, 0xF0DACB86, +/**/ 0x3FE9D000, 0x00000000, +/**/ 0x3FFB1221, 0x8A66E40D, +/**/ 0x3FFF4130, 0x692DC10A, +/**/ 0x4015457C, 0x64621A80, +/**/ 0x4031369A, 0xED2A1AB4, +/**/ 0x404F3F8D, 0xBC003A70, +/**/ 0x406E57E1, 0x462E99D6, +/**/ 0x408EDBC2, 0xC53F5717, +/**/ 0x40B0383D, 0x0A71E453, +/**/ 0x3C90AF9F, 0xBEDD86A9, +/**/ 0x3FEE07C0, 0x030CF708, +/**/ 0x3FFB0000, 0x00000000, +/**/ 0x3F72218A, 0x66E40CBE, +/**/ 0x3FE9F000, 0x00000000, +/**/ 0x3FFB51A7, 0x8E9927E5, +/**/ 0x40002387, 0x581637B3, +/**/ 0x401662F7, 0xF5B2C17E, +/**/ 0x40327DDB, 0x36EAC07E, +/**/ 0x40512110, 0xC70D9C43, +/**/ 0x4070F9C4, 0x88C52943, +/**/ 0x40919E9E, 0xB1AB4848, +/**/ 0x40B2E76B, 0xB1EC7695, +/**/ 0x3CAA2400, 0x5E9F6FD9, +/**/ 0x3FEE3E23, 0x74DD3C64, +/**/ 0x3FFB4000, 0x00000000, +/**/ 0x3F71A78E, 0x9927E571, +/**/ 0x3FEA1000, 0x00000000, +/**/ 0x3FFB9347, 0x04E0F95F, +/**/ 0x4000AD66, 0xAC8DC27B, +/**/ 0x401795E1, 0xAE05A580, +/**/ 0x4033E4FA, 0x299AA0A0, +/**/ 0x4052D0AD, 0xA33AB75C, +/**/ 0x407309E5, 0x39D64C89, +/**/ 0x40942D39, 0x154C34C4, +/**/ 0x40B61A59, 0x59D15B1D, +/**/ 0xBCAFC899, 0x114BE565, +/**/ 0x3FEE7508, 0x0787FD30, +/**/ 0x3FFB8000, 0x00000000, +/**/ 0x3F734704, 0xE0F95E8B, +/**/ 0x3FEA3000, 0x00000000, +/**/ 0x3FFBD71C, 0xB75F37A1, +/**/ 0x40013EBC, 0xFC9006E1, +/**/ 0x4018E055, 0xC48D2C09, +/**/ 0x40356FD7, 0xC2C8C9CD, +/**/ 0x4054B557, 0x6198B971, +/**/ 0x4075678C, 0x9680F9AF, +/**/ 0x40972BE5, 0x8AF946DD, +/**/ 0x40B9EDE4, 0xE1B531F9, +/**/ 0xBC447F69, 0xE4527544, +/**/ 0x3FEEAC72, 0x0A61AD1C, +/**/ 0x3FFBC000, 0x00000000, +/**/ 0x3F771CB7, 0x5F37A0DF, +/**/ 0x3FEA5000, 0x00000000, +/**/ 0x3FFC1D47, 0xA5B24F80, +/**/ 0x4001D81E, 0x7EB9F789, +/**/ 0x401A44B2, 0xDF42B6B7, +/**/ 0x403722E5, 0xB4766752, +/**/ 0x4056D6EE, 0xECFADFF0, +/**/ 0x40782028, 0x8B1EB8D5, +/**/ 0x409AB0E2, 0xCA840144, +/**/ 0x40BE8614, 0xE2126BBF, +/**/ 0xBC8D9A93, 0x2CC624E2, +/**/ 0x3FEEE466, 0x087F8D20, +/**/ 0x3FFC0000, 0x00000000, +/**/ 0x3F7D47A5, 0xB24F8064, +/**/ 0x3FEA7000, 0x00000000, +/**/ 0x3FFC65E9, 0x3DE98207, +/**/ 0x40027A2E, 0x811F641B, +/**/ 0x401BC5A3, 0xF223266D, +/**/ 0x40390340, 0xA6ECBE29, +/**/ 0x40593EB6, 0xC3D499AF, +/**/ 0x407B43D9, 0xAD8CC2F1, +/**/ 0x409ED77C, 0xA519B816, +/**/ 0x40C2080A, 0x5B3B703B, +/**/ 0x3C7B187D, 0xE993C3DD, +/**/ 0x3FEF1CE8, 0xCD5A7CE8, +/**/ 0x3FFC8000, 0x00000000, +/**/ 0xBF7A16C2, 0x167DF937, +/**/ 0x3FEA9000, 0x00000000, +/**/ 0x3FFCB125, 0x9CA2F05E, +/**/ 0x400325A1, 0x54FC4C95, +/**/ 0x401D662B, 0xD9C5FF75, +/**/ 0x403B16CE, 0x8E93577D, +/**/ 0x405BF79A, 0xE0E3029E, +/**/ 0x407EE612, 0x04BCDF91, +/**/ 0x40A1E0AC, 0x31EFE3F1, +/**/ 0x40C56267, 0x85DF051C, +/**/ 0xBCAD6122, 0x2D0BC06E, +/**/ 0x3FEF55FF, 0x69EAB2F0, +/**/ 0x3FFCC000, 0x00000000, +/**/ 0xBF6DB4C6, 0xBA1F43E4, +/**/ 0x3FEAB000, 0x00000000, +/**/ 0x3FFCFF23, 0xD56B9F55, +/**/ 0x4003DB3E, 0x86149A3B, +/**/ 0x401F29B3, 0x0B8D0DAD, +/**/ 0x403D6463, 0x40E9D1A7, +/**/ 0x405F0E89, 0x619D6679, +/**/ 0x40818F2E, 0x92CF3FBC, +/**/ 0x40A4CC10, 0x844E51BD, +/**/ 0x40C9762D, 0xF3A9EB60, +/**/ 0x3CA20E79, 0xEF4B1E02, +/**/ 0x3FEF8FAF, 0x3A4BC01C, +/**/ 0x3FFD0000, 0x00000000, +/**/ 0xBF2B8552, 0x8C156248, +/**/ 0x3FEAD000, 0x00000000, +/**/ 0x3FFD500E, 0x44AAD4F2, +/**/ 0x40049BE3, 0x6B85DB68, +/**/ 0x40208A0B, 0xE558F351, +/**/ 0x403FF3EC, 0xC1BCC632, +/**/ 0x40614970, 0x2A555E45, +/**/ 0x408404AE, 0xDD057F33, +/**/ 0x40A847D9, 0x22610A18, +/**/ 0x40CE7146, 0x3C7AA2B4, +/**/ 0xBC9571D0, 0x53CA14EC, +/**/ 0x3FEFC9FD, 0xEBFAA348, +/**/ 0x3FFD4000, 0x00000000, +/**/ 0x3F700E44, 0xAAD4F267, +/**/ 0x3FEAF000, 0x00000000, +/**/ 0x3FFDA412, 0xEC9EDC5A, +/**/ 0x40056886, 0x22B6D908, +/**/ 0x402194E0, 0xB605B3B4, +/**/ 0x40416754, 0x9338560C, +/**/ 0x40634B7B, 0x34B16169, +/**/ 0x4086E508, 0x3B1BAF9C, +/**/ 0x40AC7475, 0xFB9DFBF5, +/**/ 0x40D2473E, 0xF4B4BB01, +/**/ 0x3CA82B31, 0xE9F06EFC, +/**/ 0x3FF00278, 0xC2613F02, +/**/ 0x3FFDC000, 0x00000000, +/**/ 0xBF7BED13, 0x6123A5D1, +/**/ 0x3FEB1000, 0x00000000, +/**/ 0x3FFDFB63, 0xDF3AE0DB, +/**/ 0x40064239, 0x08AD38CF, +/**/ 0x4022B7DB, 0xAA166573, +/**/ 0x4042FFB4, 0x38210D3E, +/**/ 0x40659862, 0xFB634456, +/**/ 0x408A45B4, 0xEE8F3E34, +/**/ 0x40B0BD59, 0xD39A6C6F, +/**/ 0x40D60CCD, 0x2B4867E8, +/**/ 0xBCA6097F, 0x1CBB85B3, +/**/ 0x3FF02048, 0x3537E800, +/**/ 0x3FFE0000, 0x00000000, +/**/ 0xBF527083, 0x147C93ED, +/**/ 0x3FEB3000, 0x00000000, +/**/ 0x3FFE5637, 0xB70F5F72, +/**/ 0x40072A2E, 0xCA935102, +/**/ 0x4023F5DE, 0x43559218, +/**/ 0x4044C96E, 0xB4E19CA3, +/**/ 0x40683D62, 0x1272DDA3, +/**/ 0x408E4135, 0xC6BFAAED, +/**/ 0x40B3C717, 0x099FB249, +/**/ 0x40DABA6D, 0xD5294F7D, +/**/ 0x3CA488B1, 0xC91FFA21, +/**/ 0x3FF03E70, 0xB5B309E0, +/**/ 0x3FFE4000, 0x00000000, +/**/ 0x3F7637B7, 0x0F5F723E, +/**/ 0x3FEB5000, 0x00000000, +/**/ 0x3FFEB4CA, 0x21D4B842, +/**/ 0x400821BF, 0x2BE08FC5, +/**/ 0x40255238, 0x6A6A3BD0, +/**/ 0x4046CC00, 0xBAC907E2, +/**/ 0x406B4A78, 0x94202458, +/**/ 0x40917C35, 0xFE065CA6, +/**/ 0x40B77848, 0xE8D5B845, +/**/ 0x40E04820, 0x0CD72D76, +/**/ 0x3CA54B6E, 0x9CBE508B, +/**/ 0x3FF05CF5, 0xE41C2ACE, +/**/ 0x3FFEC000, 0x00000000, +/**/ 0xBF666BBC, 0x568F7C18, +/**/ 0x3FEB7000, 0x00000000, +/**/ 0x3FFF175C, 0x7FB6EB26, +/**/ 0x40092A6C, 0xA7BA9C35, +/**/ 0x4026D0BC, 0x80F5BA9F, +/**/ 0x40491048, 0x33BD74FB, +/**/ 0x406ED319, 0x61FCE21F, +/**/ 0x40944A2E, 0x60DF5AED, +/**/ 0x40BBFAFC, 0x1AC97175, +/**/ 0x40E3F145, 0xC3A8BC22, +/**/ 0xBC994B5D, 0xA70A42D9, +/**/ 0x3FF07BDB, 0x9F358760, +/**/ 0x3FFF0000, 0x00000000, +/**/ 0x3F775C7F, 0xB6EB2582, +/**/ 0x3FEB9000, 0x00000000, +/**/ 0x3FFF7E36, 0x9B29492C, +/**/ 0x400A45EB, 0x1C35AD8A, +/**/ 0x402875D7, 0xC8373BB1, +/**/ 0x404BA0D1, 0x885E6AE6, +/**/ 0x40717784, 0x0831631E, +/**/ 0x4097A441, 0x7F51DA78, +/**/ 0x40C0C2B2, 0x6D7642FB, +/**/ 0x40E89073, 0x594961FB, +/**/ 0xBCA5DECE, 0x96CDC181, +/**/ 0x3FF09B26, 0x0A46374E, +/**/ 0x3FFF8000, 0x00000000, +/**/ 0xBF3C964D, 0x6B6D3D05, +/**/ 0x3FEBB000, 0x00000000, +/**/ 0x3FFFE9A7, 0x7DD9B1CF, +/**/ 0x400B7627, 0xB9AE77AF, +/**/ 0x402A46B0, 0x3338306D, +/**/ 0x404E8A38, 0xA0CAACE9, +/**/ 0x4073DDBB, 0x864F53A2, +/**/ 0x409BAAF0, 0xD6C97F8D, +/**/ 0x40C42EEF, 0xDFAE5A98, +/**/ 0x40EE701A, 0xE19501DA, +/**/ 0x3C9CC4F4, 0xC7D3D675, +/**/ 0x3FF0BAD9, 0x93EC49AE, +/**/ 0x40000000, 0x00000000, +/**/ 0xBF765882, 0x264E310D, +/**/ 0x3FEBD000, 0x00000000, +/**/ 0x40002D03, 0x34302F3B, +/**/ 0x400CBD52, 0x7F5AAF0D, +/**/ 0x402C4949, 0x0C635C0A, +/**/ 0x4050EDD1, 0xB6BB1732, +/**/ 0x4076AE3D, 0x9691A9F4, +/**/ 0x40A043C7, 0x61482FC6, +/**/ 0x40C87037, 0xF81EB6E0, +/**/ 0x40F2FA30, 0xE84FE55E, +/**/ 0xBC9820F1, 0x228FC41D, +/**/ 0x3FF0DAFA, 0xFDD4AE68, +/**/ 0x40002000, 0x00000000, +/**/ 0x3F7A0668, 0x605E76B0, +/**/ 0x3FEBF000, 0x00000000, +/**/ 0x400067D9, 0xF9C947A3, +/**/ 0x400E1DE9, 0xA1722882, +/**/ 0x402E84B0, 0x41FE0247, +/**/ 0x4052D3AE, 0xDBD1D676, +/**/ 0x4079FF78, 0xE088BEF5, +/**/ 0x40A33780, 0x64D9A484, +/**/ 0x40CDC32D, 0x1974F9B5, +/**/ 0x40F7D295, 0xCE268611, +/**/ 0xBCA5A192, 0xD437D23F, +/**/ 0x3FF0FB8F, 0x657EFDCA, +/**/ 0x40006000, 0x00000000, +/**/ 0x3F6F67E7, 0x251E8CF3, +/**/ 0x3FEC1000, 0x00000000, +/**/ 0x4000A58D, 0xB1FFFA6D, +/**/ 0x400F9AC7, 0x4E7307C3, +/**/ 0x4030809B, 0x5EA15962, +/**/ 0x405501D0, 0x5418E1B6, +/**/ 0x407DED80, 0xB476D79F, +/**/ 0x40A6D2BF, 0x37F33D5F, +/**/ 0x40D23C31, 0xA43F6C6F, +/**/ 0x40FE1E46, 0xDB17BBAA, +/**/ 0xBCA7EB62, 0x41D8AD56, +/**/ 0x3FF11C9C, 0x4E3ADE0A, +/**/ 0x4000A000, 0x00000000, +/**/ 0x3F6636C7, 0xFFE9B457, +/**/ 0x3FEC3000, 0x00000000, +/**/ 0x4000E65A, 0x1D1BDCC6, +/**/ 0x40109B99, 0x3503CCCE, +/**/ 0x4031E45B, 0x7580EC24, +/**/ 0x405785CA, 0x1803E176, +/**/ 0x40814DDB, 0x8458A77D, +/**/ 0x40AB41D9, 0x6C115AB7, +/**/ 0x40D67DF0, 0xD7BCE584, +/**/ 0x41032EF5, 0xF5487646, +/**/ 0xBC9C4040, 0xF3631254, +/**/ 0x3FF13E27, 0xAC964DA8, +/**/ 0x4000E000, 0x00000000, +/**/ 0x3F696874, 0x6F731770, +/**/ 0x3FEC5000, 0x00000000, +/**/ 0x40012A82, 0x068FBCB4, +/**/ 0x40117B79, 0x7FE89A5F, +/**/ 0x40337376, 0xD37F3897, +/**/ 0x405A704E, 0xDF3B47A2, +/**/ 0x40841B83, 0xEB114449, +/**/ 0x40B05F75, 0x8D323120, +/**/ 0x40DBEFEC, 0x8AE65DDD, +/**/ 0x4108A2A2, 0xD1814341, +/**/ 0x3CA3E83D, 0xFB25EC76, +/**/ 0x3FF16037, 0xF37FFEDA, +/**/ 0x40012000, 0x00000000, +/**/ 0x3F75040D, 0x1F796787, +/**/ 0x3FEC7000, 0x00000000, +/**/ 0x40017250, 0x5F8F574B, +/**/ 0x40126F35, 0xB566493D, +/**/ 0x403534F5, 0x95186E3D, +/**/ 0x405DD60B, 0x947D5EA5, +/**/ 0x40877C77, 0x568C5D73, +/**/ 0x40B3CB66, 0xA26261F0, +/**/ 0x40E17B06, 0xBF32194D, +/**/ 0x410FE921, 0x11490E42, +/**/ 0xBCA34428, 0x5376CB61, +/**/ 0x3FF182D4, 0x236FE314, +/**/ 0x40018000, 0x00000000, +/**/ 0xBF7B5F40, 0xE15169A9, +/**/ 0x3FEC9000, 0x00000000, +/**/ 0x4001BE19, 0x91B4C8D8, +/**/ 0x4013795B, 0xBE69BAE6, +/**/ 0x40373151, 0xCD6F8B02, +/**/ 0x4060E864, 0xD86A7BFF, +/**/ 0x408B95CC, 0x515F5BD6, +/**/ 0x40B8180C, 0xD070B4A1, +/**/ 0x40E60D2C, 0xC9B24D80, +/**/ 0x4114DBF6, 0xAA392CAF, +/**/ 0xBCA89BD0, 0xF5844C55, +/**/ 0x3FF1A603, 0xDBFAF236, +/**/ 0x4001C000, 0x00000000, +/**/ 0xBF4E66E4, 0xB37285FC, +/**/ 0x3FECB000, 0x00000000, +/**/ 0x40020E3D, 0x1757F6B1, +/**/ 0x40149CE9, 0xAE890640, +/**/ 0x403972D4, 0xD6174F60, +/**/ 0x40634079, 0x8C82DF92, +/**/ 0x40904BE6, 0xACAB5569, +/**/ 0x40BD8A99, 0xB362E75A, +/**/ 0x40EC0ED7, 0x389374DC, +/**/ 0x411B8ADF, 0xCA5E9653, +/**/ 0xBC80CBC7, 0x4A1E3E49, +/**/ 0x3FF1C9CF, 0x704F5D26, +/**/ 0x40020000, 0x00000000, +/**/ 0x3F7C7A2E, 0xAFED62A2, +/**/ 0x3FECD000, 0x00000000, +/**/ 0x40026327, 0x6B3395AA, +/**/ 0x4015DD66, 0x33FB1467, +/**/ 0x403C0610, 0xDCF3437C, +/**/ 0x406607CE, 0xC9D7C47A, +/**/ 0x409360FB, 0xA330DC5C, +/**/ 0x40C240B4, 0x38A3194B, +/**/ 0x40F20437, 0xBAA6A879, +/**/ 0x41226106, 0x04D6F19C, +/**/ 0x3CABCCF5, 0x15E5252C, +/**/ 0x3FF1EE3F, 0xFF35681A, +/**/ 0x40026000, 0x00000000, +/**/ 0x3F593B59, 0x9CAD4CE9, +/**/ 0x3FECF000, 0x00000000, +/**/ 0x4002BD54, 0x664A8350, +/**/ 0x40173EFF, 0x945190A0, +/**/ 0x403EFA80, 0xC7CC5224, +/**/ 0x406958AA, 0x896F1658, +/**/ 0x40973450, 0x4FD54E04, +/**/ 0x40C6BF55, 0x4CD60C4A, +/**/ 0x40F75EBE, 0x3EFFD07C, +/**/ 0x4128D03C, 0x9E2E6981, +/**/ 0xBC987CEE, 0xC8A488FF, +/**/ 0x3FF2135F, 0x8F597306, +/**/ 0x4002C000, 0x00000000, +/**/ 0xBF555CCD, 0xABE583FE, +/**/ 0x3FED1000, 0x00000000, +/**/ 0x40031D52, 0x2A40EA5C, +/**/ 0x4018C6B3, 0x52B4947D, +/**/ 0x404131AE, 0x5D01146E, +/**/ 0x406D54FB, 0x0163E71C, +/**/ 0x409BFE8A, 0xEF3ED15B, +/**/ 0x40CC9C28, 0xA33A6B00, +/**/ 0x40FEA523, 0x1456E1A6, +/**/ 0x4130F60F, 0xFC8790DB, +/**/ 0x3CAC104F, 0x6FABCA41, +/**/ 0x3FF23939, 0x30D87C68, +/**/ 0x40032000, 0x00000000, +/**/ 0xBF556EAD, 0xF8AD1CF9, +/**/ 0x3FED3000, 0x00000000, +/**/ 0x400383C4, 0xC053C623, +/**/ 0x401A7A81, 0x6ADBFF2C, +/**/ 0x40432C5B, 0xE219A24E, +/**/ 0x40711484, 0x30F4B8D8, +/**/ 0x40A10659, 0xBC59423E, +/**/ 0x40D22C09, 0x3D537AE5, +/**/ 0x410454A2, 0xA4B7D930, +/**/ 0x41378151, 0xC151F3C3, +/**/ 0xBCA2F226, 0x779E9951, +/**/ 0x3FF25FD9, 0x254E3F9C, +/**/ 0x40038000, 0x00000000, +/**/ 0x3F5E2602, 0x9E311A8B, +/**/ 0x3FED5000, 0x00000000, +/**/ 0x4003F16A, 0xA2F65F8C, +/**/ 0x401C61AF, 0x36C0308E, +/**/ 0x40457C82, 0x5337FF7D, +/**/ 0x407407A3, 0x7FB84BA9, +/**/ 0x40A4E476, 0x4C74DEA7, +/**/ 0x40D75638, 0xDF1C2124, +/**/ 0x410B5320, 0xA2556E94, +/**/ 0x414087CD, 0x7D68ABBE, +/**/ 0xBCACD58C, 0x73A87AB9, +/**/ 0x3FF2874D, 0x10017B06, +/**/ 0x40040000, 0x00000000, +/**/ 0xBF7D2ABA, 0x1340E849, +/**/ 0x3FED7000, 0x00000000, +/**/ 0x40046722, 0x7BA9A810, +/**/ 0x401E851F, 0xCBC74735, +/**/ 0x40483596, 0xF3879985, +/**/ 0x4077AAEB, 0xCD297F00, +/**/ 0x40A9E3C8, 0x31669F50, +/**/ 0x40DE5420, 0xB7CBB664, +/**/ 0x41129F7B, 0xB75100A0, +/**/ 0x4147A1C1, 0x51D127BF, +/**/ 0x3CAC647E, 0x46D9C78F, +/**/ 0x3FF2AFA4, 0x304962AE, +/**/ 0x40046000, 0x00000000, +/**/ 0x3F6C89EE, 0xA6A041C9, +/**/ 0x3FED9000, 0x00000000, +/**/ 0x4004E5F2, 0x7A99A835, +/**/ 0x402077E5, 0x15B0232D, +/**/ 0x404B70C1, 0xEE468866, +/**/ 0x407C334A, 0x43A041C3, +/**/ 0x40B036D1, 0x53D2C164, +/**/ 0x40E3F7B1, 0x10CCEDBE, +/**/ 0x4119C160, 0xF6C2E560, +/**/ 0x415131DD, 0x6D21D20F, +/**/ 0x41878683, 0x2EC50766, +/**/ 0xBCA95596, 0xD1134ECC, +/**/ 0x3FF2D8EF, 0xA8F4B028, +/**/ 0x4004E000, 0x00000000, +/**/ 0x3F67C9EA, 0x66A0D2C7, +/**/ 0x3FEDB000, 0x00000000, +/**/ 0x40056F11, 0xD6373B90, +/**/ 0x4021D7AC, 0xC3747DF3, +/**/ 0x404F4EF3, 0x6A014D6F, +/**/ 0x4080F4C4, 0x505C454B, +/**/ 0x40B48D16, 0x214975C5, +/**/ 0x40EAACFD, 0xF57BFAC6, +/**/ 0x41222235, 0x5225A6ED, +/**/ 0x41598643, 0xACBA67AB, +/**/ 0x419267B9, 0xDE5D19B9, +/**/ 0xBCAEF63C, 0x42C92439, +/**/ 0x3FF30342, 0xD86BED76, +/**/ 0x40056000, 0x00000000, +/**/ 0x3F7E23AC, 0x6E771F48, +/**/ 0x3FEDD000, 0x00000000, +/**/ 0x400603F5, 0x3D2D8CF1, +/**/ 0x40236A84, 0xEF4A10FA, +/**/ 0x4051FDF3, 0x4EA265AF, +/**/ 0x408499B5, 0xD944F636, +/**/ 0x40BA64B8, 0x37F73BAC, +/**/ 0x40F21B9F, 0x259B27FC, +/**/ 0x412A0669, 0x265D5B9F, +/**/ 0x41635D8E, 0x3DC806E2, +/**/ 0x419D8657, 0x36AD8B00, +/**/ 0x3CA4CEEB, 0x3FFCDCA3, +/**/ 0x3FF32EB3, 0xC69D2D10, +/**/ 0x40060000, 0x00000000, +/**/ 0x3F5FA9E9, 0x6C678625, +/**/ 0x3FEDF000, 0x00000000, +/**/ 0x4006A65F, 0x5FCDF915, +/**/ 0x40253B6E, 0x68321BDA, +/**/ 0x4054D949, 0x706E8DA9, +/**/ 0x408950EF, 0x4A70D2D7, +/**/ 0x40C13319, 0x1F15E14E, +/**/ 0x40F907B1, 0x846A9BD5, +/**/ 0x4133139C, 0x17C39016, +/**/ 0x416E1DA3, 0xBC86F11B, +/**/ 0x41A8597F, 0xD9F86F3B, +/**/ 0x3C32D4F8, 0x7D0D5190, +/**/ 0x3FF35B5B, 0xAFA88354, +/**/ 0x4006A000, 0x00000000, +/**/ 0x3F697D7F, 0x37E455FD, +/**/ 0x3FEE1000, 0x00000000, +/**/ 0x40075877, 0x41D1DBF9, +/**/ 0x402758A8, 0xF5852184, +/**/ 0x405861EE, 0x65C0F467, +/**/ 0x408F83C0, 0xD2D91276, +/**/ 0x40C6CA7C, 0x43EC3B0E, +/**/ 0x4101A722, 0x718322C8, +/**/ 0x413CA4C6, 0x9533D806, +/**/ 0x417812B7, 0xE9899583, +/**/ 0x41B4B875, 0x85EE8B86, +/**/ 0xBC99DEFB, 0xD1AEEED1, +/**/ 0x3FF38957, 0xB510476E, +/**/ 0x40076000, 0x00000000, +/**/ 0xBF6E22F8, 0xB8901BF9, +/**/ 0x3FEE3000, 0x00000000, +/**/ 0x40081CE6, 0xE1C37E57, +/**/ 0x4029D4F3, 0xD3DC9910, +/**/ 0x405CD074, 0xE3095065, +/**/ 0x4093E764, 0xC5C38224, +/**/ 0x40CEC5AE, 0x3CAE1F31, +/**/ 0x41097A50, 0xC0645F38, +/**/ 0x41461866, 0xD8A7F25E, +/**/ 0x4183DAF5, 0x8C2F04A3, +/**/ 0x41C2450E, 0xA9143C1F, +/**/ 0x3C7D25BE, 0x9FD995BC, +/**/ 0x3FF3B8C9, 0xC35D33E6, +/**/ 0x40082000, 0x00000000, +/**/ 0xBF58C8F1, 0xE40D49E0, +/**/ 0x3FEE5000, 0x00000000, +/**/ 0x4008F706, 0x285640BB, +/**/ 0x402CC96B, 0x3B2B7CD1, +/**/ 0x40613ADF, 0xC5341328, +/**/ 0x4099908D, 0x16E928A9, +/**/ 0x40D53986, 0x7CC08A3C, +/**/ 0x4112DFC5, 0x31DD3E45, +/**/ 0x41519499, 0xE2A13787, +/**/ 0x4190F943, 0xF94424AD, +/**/ 0x41D0C6BC, 0xCDCD49BE, +/**/ 0xBC9E2458, 0x6D41701D, +/**/ 0x3FF3E9D9, 0xC088BD28, +/**/ 0x40090000, 0x00000000, +/**/ 0xBF71F3AF, 0x537E8A00, +/**/ 0x3FEE7000, 0x00000000, +/**/ 0x4009EB18, 0x6562D1E0, +/**/ 0x40302C31, 0x75651223, +/**/ 0x4064E431, 0x336E41C7, +/**/ 0x40A0BCA6, 0xA065DA69, +/**/ 0x40DE034D, 0x917AF357, +/**/ 0x411CD2C1, 0x4168FB0F, +/**/ 0x415CFEB6, 0x15BB794D, +/**/ 0x419E3EE1, 0x6EFFD5E5, +/**/ 0x41E024E7, 0x1ACB4D9C, +/**/ 0xBC9C29C8, 0xD93F153F, +/**/ 0x3FF41CB7, 0x2183E810, +/**/ 0x4009E000, 0x00000000, +/**/ 0x3F7630CA, 0xC5A3C038, +/**/ 0x3FEE9000, 0x00000000, +/**/ 0x400AFEA6, 0xA364196F, +/**/ 0x403258F3, 0x0B19A2EB, +/**/ 0x4069BDA5, 0x2520AC75, +/**/ 0x40A669BC, 0x8F67EDEA, +/**/ 0x40E5D78C, 0xC026C9F8, +/**/ 0x4126CCB4, 0x1E3B36C2, +/**/ 0x4168EDE4, 0xBF45C805, +/**/ 0x41AC2F6A, 0x8AC89E76, +/**/ 0x41F0675E, 0x4CA9EB55, +/**/ 0x42336AC1, 0x0D13E3DF, +/**/ 0x3C9B1D74, 0xF2DE93A6, +/**/ 0x3FF4519B, 0x155FB22E, +/**/ 0x400B0000, 0x00000000, +/**/ 0xBF4595C9, 0xBE690E67, +/**/ 0x3FEEB000, 0x00000000, +/**/ 0x400C3908, 0x4BD1C065, +/**/ 0x40350D88, 0x26C39FFD, +/**/ 0x4070296B, 0x69D3E79E, +/**/ 0x40AED279, 0xD7FEEA5D, +/**/ 0x40F072A8, 0xFD5BD547, +/**/ 0x4132CDB9, 0x4A08BB38, +/**/ 0x41768482, 0x536BED06, +/**/ 0x41BBE1FF, 0x2F10E88D, +/**/ 0x4201C966, 0xABDBBDAC, +/**/ 0x42471011, 0x02E62DDA, +/**/ 0xBCA0855D, 0x3E907E71, +/**/ 0x3FF488CB, 0x8FA73920, +/**/ 0x400C4000, 0x00000000, +/**/ 0xBF6BDED0, 0xB8FE6DDF, +/**/ 0x3FEED000, 0x00000000, +/**/ 0x400DA439, 0x12AAF9A9, +/**/ 0x40387D46, 0x62F25109, +/**/ 0x4074C339, 0x3F133A3F, +/**/ 0x40B5E143, 0x662036F9, +/**/ 0x40F9CF04, 0x74467831, +/**/ 0x41404E10, 0x576C6FA8, +/**/ 0x41859489, 0xFF4F8E88, +/**/ 0x41CD88D2, 0xB44962A9, +/**/ 0x4214D838, 0x97A288F3, +/**/ 0x425DE10B, 0x6CF738B3, +/**/ 0xBC8E9EA7, 0x5F7263CC, +/**/ 0x3FF4C29F, 0xAA786F36, +/**/ 0x400DA000, 0x00000000, +/**/ 0x3F60E44A, 0xABE6A2AD, +/**/ 0x3FEEF000, 0x00000000, +/**/ 0x400F4E35, 0xC169B52F, +/**/ 0x403CF773, 0x29E8699C, +/**/ 0x407B6D37, 0xFC1818D6, +/**/ 0x40C02655, 0x1386790A, +/**/ 0x41054A1F, 0x4FF79D1E, +/**/ 0x414E104A, 0x7DB0265A, +/**/ 0x41963C39, 0xE5C8114B, +/**/ 0x41E10156, 0xF52A87DB, +/**/ 0x422ADD76, 0x2E9E7ABE, +/**/ 0x427586AB, 0x6EC81361, +/**/ 0x3C935690, 0xE395EEA6, +/**/ 0x3FF4FF86, 0x2E5965A2, +/**/ 0x400F4000, 0x00000000, +/**/ 0x3F7C6B82, 0xD36A5E70 } }; + +#else +#ifdef LITTLE_ENDI +static const union {int4 i[5136];double x[2568];} asncs = { .i = { +/**/ 0x00000000, 0x3FC04000, +/**/ 0x88994424, 0x3FF02169, +/**/ 0xB799B115, 0x3FB0A6A2, +/**/ 0xD57409A0, 0x3FC6EF15, +/**/ 0xAF52EAA0, 0x3FAA141E, +/**/ 0xABBBE261, 0x3FB75591, +/**/ 0xD206D88F, 0x3FA72B51, +/**/ 0x5BB33E7D, 0x3C96B595, +/**/ 0xA03E2700, 0x3FC04B41, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x66BBDC7C, 0xBF7E9677, +/**/ 0x00000000, 0x3FC0C000, +/**/ 0xF9E23A56, 0x3FF02386, +/**/ 0x60FD0235, 0x3FB1308C, +/**/ 0x14D16B02, 0x3FC7099F, +/**/ 0x27C01EE1, 0x3FAAFED6, +/**/ 0xDBCD5F98, 0x3FB79C6F, +/**/ 0x4084DAAC, 0x3FA8144A, +/**/ 0x38D8505E, 0xBC87C092, +/**/ 0x56C9F380, 0x3FC0CC55, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x1DC5AA24, 0xBF7C7906, +/**/ 0x00000000, 0x3FC14000, +/**/ 0xB27141F6, 0x3FF025B5, +/**/ 0x04CE7400, 0x3FB1BB18, +/**/ 0x72907342, 0x3FC72514, +/**/ 0x0BF4222C, 0x3FABEC60, +/**/ 0x75B3736C, 0x3FB7E610, +/**/ 0x5199C343, 0x3FA9024C, +/**/ 0x06B56F60, 0xBC8AE84C, +/**/ 0x3DEFA070, 0x3FC14D7A, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x8EBE0A5C, 0xBF7A4A4D, +/**/ 0x00000000, 0x3FC1C000, +/**/ 0xC6DE8F57, 0x3FF027F5, +/**/ 0x345751E1, 0x3FB2464B, +/**/ 0xCF026805, 0x3FC74178, +/**/ 0x40A9E0D6, 0x3FACDCD8, +/**/ 0xEB1D9C38, 0x3FB83282, +/**/ 0xD7BE707B, 0x3FA9F590, +/**/ 0x03A2A6D6, 0xBCAB9768, +/**/ 0xE03B4870, 0x3FC1CEB0, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x2170A943, 0xBF780A39, +/**/ 0x00000000, 0x3FC24000, +/**/ 0x4C759796, 0x3FF02A47, +/**/ 0x92771935, 0x3FB2D22B, +/**/ 0x26ABA06D, 0x3FC75ECF, +/**/ 0x486A1932, 0x3FADD05B, +/**/ 0x5AF971D5, 0x3FB881D7, +/**/ 0x831AEE0C, 0x3FAAEE52, +/**/ 0xAD1B1BEF, 0x3CA13F57, +/**/ 0xC8E09330, 0x3FC24FF9, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x8A68699B, 0xBF75B8B3, +/**/ 0x00000000, 0x3FC2C000, +/**/ 0x59374E09, 0x3FF02CAA, +/**/ 0xD44E8BEA, 0x3FB35EBE, +/**/ 0x92E4BE8A, 0x3FC77D1A, +/**/ 0x4A6C34FD, 0x3FAEC706, +/**/ 0x972F6E07, 0x3FB8D41E, +/**/ 0xF9845F69, 0x3FABECCD, +/**/ 0x945C4185, 0x3C8BA1FA, +/**/ 0x83C058B0, 0x3FC2D155, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xC8B1F774, 0xBF7355A6, +/**/ 0x00000000, 0x3FC34000, +/**/ 0x03DC7745, 0x3FF02F1F, +/**/ 0xC1EE9F61, 0x3FB3EC0A, +/**/ 0x4A82E6D2, 0x3FC79C5E, +/**/ 0x19B1EF72, 0x3FAFC0F7, +/**/ 0x2AA943E5, 0x3FB9296A, +/**/ 0xEF8B9DE7, 0x3FACF141, +/**/ 0x083C8716, 0xBC834081, +/**/ 0x9D6E5610, 0x3FC352C4, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x2388BB30, 0xBF70E0FC, +/**/ 0x00000000, 0x3FC3C000, +/**/ 0x63D81251, 0x3FF031A5, +/**/ 0x370B721F, 0x3FB47A15, +/**/ 0xA28731E5, 0x3FC7BC9D, +/**/ 0x1E305BE9, 0x3FB05F26, +/**/ 0x5FA50FBD, 0x3FB981CC, +/**/ 0x42AC4083, 0x3FADFBEF, +/**/ 0xA8E107C7, 0x3CA20ACB, +/**/ 0xA336F5E0, 0x3FC3D447, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x4FDB5D5C, 0xBF6CB538, +/**/ 0x00000000, 0x3FC44000, +/**/ 0x9159D86F, 0x3FF0343D, +/**/ 0x23B3747C, 0x3FB508E4, +/**/ 0x0ED597CB, 0x3FC7DDDC, +/**/ 0x79ADF104, 0x3FB0DF92, +/**/ 0x4658D945, 0x3FB9DD58, +/**/ 0x14ACA06B, 0x3FAF0D19, +/**/ 0xDF636EFE, 0xBCA4E10D, +/**/ 0x23252C00, 0x3FC455DF, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x4C4F221A, 0xBF6784DD, +/**/ 0x00000000, 0x3FC4C000, +/**/ 0xA550D410, 0x3FF036E7, +/**/ 0x8D0AF1E7, 0x3FB5987D, +/**/ 0x22F39726, 0x3FC8001D, +/**/ 0xA1116D73, 0x3FB161D0, +/**/ 0xBBEA1528, 0x3FBA3C21, +/**/ 0x74202FF6, 0x3FB01282, +/**/ 0xD10866E2, 0x3CAA0611, +/**/ 0xAC086560, 0x3FC4D78B, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x5E57DF8A, 0xBF6230B5, +/**/ 0x00000000, 0x3FC54000, +/**/ 0xB96E0F8A, 0x3FF039A3, +/**/ 0x8E0C29F6, 0x3FB628E7, +/**/ 0x92CEDE01, 0x3FC82364, +/**/ 0xFB7B5D84, 0x3FB1E5F0, +/**/ 0x71BD08EE, 0x3FBA9E3D, +/**/ 0x5F7FFAB4, 0x3FB0A1FD, +/**/ 0xEF04F6E7, 0xBC90F980, +/**/ 0xCD7A8DC0, 0x3FC5594D, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x47C1D879, 0xBF59711A, +/**/ 0x00000000, 0x3FC5C000, +/**/ 0xE8275C12, 0x3FF03C71, +/**/ 0x584C2A23, 0x3FB6BA28, +/**/ 0x338C3D4B, 0x3FC847B6, +/**/ 0x59A55DD8, 0x3FB26C04, +/**/ 0xF5202D6A, 0x3FBB03C0, +/**/ 0x9C6466A4, 0x3FB13522, +/**/ 0x2A268973, 0x3C983C9A, +/**/ 0x17E62A20, 0x3FC5DB26, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xC51F7008, 0xBF4C70BE, +/**/ 0x00000000, 0x3FC64000, +/**/ 0x4CBA31A9, 0x3FF03F52, +/**/ 0x34C49ADE, 0x3FB74C46, +/**/ 0xFC5F33CC, 0x3FC86D15, +/**/ 0xFA419D7C, 0x3FB2F41B, +/**/ 0xB757E82A, 0x3FBB6CC2, +/**/ 0xDA4D5C39, 0x3FB1CC18, +/**/ 0x2DFB224D, 0xBCA862D4, +/**/ 0x1C8C8AF0, 0x3FC65D15, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xB9CADBBF, 0xBF25B668, +/**/ 0x00000000, 0x3FC6C000, +/**/ 0x032EA88F, 0x3FF04245, +/**/ 0x84A2B473, 0x3FB7DF47, +/**/ 0x076A60F5, 0x3FC89388, +/**/ 0x8E8394C1, 0x3FB37E49, +/**/ 0x160F3472, 0x3FBBD95A, +/**/ 0x39844810, 0x3FB26708, +/**/ 0x698BC8EA, 0x3C994228, +/**/ 0x6D8C14A0, 0x3FC6DF1B, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x754477AC, 0x3F422819, +/**/ 0x00000000, 0x3FC74000, +/**/ 0x285A8CEB, 0x3FF0454A, +/**/ 0xC21B9224, 0x3FB87332, +/**/ 0x92A93402, 0x3FC8BB10, +/**/ 0x3ED3F586, 0x3FB40A9F, +/**/ 0x643217C8, 0x3FBC499F, +/**/ 0x5D29A16B, 0x3FB3061A, +/**/ 0x3DF9F2D7, 0xBCA3B2DF, +/**/ 0x9DE6A160, 0x3FC76139, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x6A33AB4B, 0x3F5528A1, +/**/ 0x00000000, 0x3FC7C000, +/**/ 0xD9E48D58, 0x3FF04861, +/**/ 0x81461BF6, 0x3FB9080E, +/**/ 0x00E32FFA, 0x3FC8E3B4, +/**/ 0xAFB1F2A5, 0x3FB4992F, +/**/ 0xF33705D5, 0x3FBCBDAB, +/**/ 0x7E23EE89, 0x3FB3A97A, +/**/ 0xCCE44C41, 0x3C7AAD12, +/**/ 0x4187FAE0, 0x3FC7E370, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xC91AAF11, 0x3F60C3B3, +/**/ 0x00000000, 0x3FC84000, +/**/ 0x36478509, 0x3FF04B8C, +/**/ 0x70FAC1B4, 0x3FB99DE1, +/**/ 0xDAA92166, 0x3FC90D76, +/**/ 0x06C416A6, 0x3FB52A0E, +/**/ 0x1CDCA344, 0x3FBD359A, +/**/ 0x7EFD4CA0, 0x3FB45155, +/**/ 0x35A8895D, 0x3C396CA5, +/**/ 0xED4C6EF0, 0x3FC865BF, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x8F0A11A4, 0x3F67186C, +/**/ 0x00000000, 0x3FC8C000, +/**/ 0x5CD5E248, 0x3FF04EC9, +/**/ 0x5BB94403, 0x3FBA34B2, +/**/ 0xCF5CA73A, 0x3FC9385D, +/**/ 0xF01AFDBE, 0x3FB5BD4D, +/**/ 0x4D61A7A9, 0x3FBDB185, +/**/ 0x00BD47CF, 0x3FB4FDDA, +/**/ 0x727E8B64, 0xBC9D1119, +/**/ 0x37077E20, 0x3FC8E829, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xABC490CB, 0x3F6D92B9, +/**/ 0x00000000, 0x3FC94000, +/**/ 0x6DBD2A10, 0x3FF05219, +/**/ 0x2894CAA1, 0x3FBACC88, +/**/ 0xB6427516, 0x3FC9646D, +/**/ 0xA3A864D7, 0x3FB65303, +/**/ 0x0E3CF3D4, 0x3FBE318A, +/**/ 0x78CDA678, 0x3FB5AF38, +/**/ 0xDA9D51DF, 0x3CA3841D, +/**/ 0xB58AA660, 0x3FC96AAC, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xBD2A1052, 0x3F72196D, +/**/ 0x00000000, 0x3FC9C000, +/**/ 0x8A099990, 0x3FF0557C, +/**/ 0xDC268965, 0x3FBB6569, +/**/ 0x8F9FBA21, 0x3FC991AB, +/**/ 0xEAED1E85, 0x3FB6EB43, +/**/ 0x115C4C63, 0x3FBEB5C6, +/**/ 0x47F9AEFA, 0x3FB665A3, +/**/ 0x03AB3673, 0xBCA1F8FD, +/**/ 0x00AC4A60, 0x3FC9ED4B, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x0999905B, 0x3F757C8A, +/**/ 0x00000000, 0x3FCA4000, +/**/ 0xD3A9E674, 0x3FF058F2, +/**/ 0x99873832, 0x3FBBFF5E, +/**/ 0x85E31CE9, 0x3FC9C01C, +/**/ 0x26E09FF2, 0x3FB78624, +/**/ 0x3CF0885C, 0x3FBF3E58, +/**/ 0xD2986239, 0x3FB7214E, +/**/ 0x3E594694, 0x3C97E3E5, +/**/ 0xB14EB5D0, 0x3FCA7004, +/**/ 0x00000000, 0x3FF04000, +/**/ 0xA9E6746B, 0x3F78F2D3, +/**/ 0x00000000, 0x3FCAC000, +/**/ 0x6D731ECB, 0x3FF05C7C, +/**/ 0xA34FA4B3, 0x3FBC9A6D, +/**/ 0xEED9C253, 0x3FC9EFC5, +/**/ 0x5614FAEB, 0x3FB823BA, +/**/ 0xB7CE698F, 0x3FBFCB60, +/**/ 0x99F3292F, 0x3FB7E271, +/**/ 0x068D709C, 0xBC9842C6, +/**/ 0x61674110, 0x3FCAF2DA, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x731ECAE2, 0x3F7C7C6D, +/**/ 0x00000000, 0x3FCB4000, +/**/ 0x7B24A973, 0x3FF06019, +/**/ 0x5CA0A798, 0x3FBD369E, +/**/ 0x4CF0DB64, 0x3FCA20AD, +/**/ 0x1B1A3F31, 0x3FB8C41D, +/**/ 0x7B35E049, 0x3FC02E80, +/**/ 0x56FB8A97, 0x3FB8A944, +/**/ 0xD337B37C, 0xBCACBF9C, +/**/ 0xAC059370, 0x3FCB75CC, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xDB568D78, 0xBF7FE684, +/**/ 0x00000000, 0x3FCBC000, +/**/ 0x216C6801, 0x3FF063CA, +/**/ 0x4A32C9FD, 0x3FBDD3F8, +/**/ 0x50843BC9, 0x3FCA52D8, +/**/ 0xC324648A, 0x3FB96763, +/**/ 0xE4407899, 0x3FC079AD, +/**/ 0x1663A5DC, 0x3FB97602, +/**/ 0xC637289D, 0xBCA3ADC3, +/**/ 0x2D5B06A0, 0x3FCBF8DC, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x9397FEA6, 0xBF7C35DE, +/**/ 0x00000000, 0x3FCC4000, +/**/ 0x85EAFB1F, 0x3FF0678E, +/**/ 0x136DEAC6, 0x3FBE7283, +/**/ 0xD93A817D, 0x3FCA864C, +/**/ 0x4CF7089B, 0x3FBA0DA6, +/**/ 0xB3ABB322, 0x3FC0C74A, +/**/ 0x562E6E1E, 0x3FBA48E8, +/**/ 0x7EB8FFF8, 0xBC951E3E, +/**/ 0x82C22B80, 0x3FCC7C09, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x1504E0D3, 0xBF78717A, +/**/ 0x00000000, 0x3FCCC000, +/**/ 0xCF382A59, 0x3FF06B66, +/**/ 0x838936FB, 0x3FBF1246, +/**/ 0xF76F5C94, 0x3FCABB10, +/**/ 0x701A77AE, 0x3FBAB6FD, +/**/ 0xC26702C6, 0x3FC11769, +/**/ 0x24CDF38E, 0x3FBB2237, +/**/ 0xE28307A9, 0xBC8DB69A, +/**/ 0x4AC67190, 0x3FCCFF55, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xC7D5A6B9, 0xBF749930, +/**/ 0x00000000, 0x3FCD4000, +/**/ 0x24E7707F, 0x3FF06F53, +/**/ 0x8AB3CBB2, 0x3FBFB34A, +/**/ 0xEDAC8D74, 0x3FCAF12A, +/**/ 0xA45DA614, 0x3FBB6382, +/**/ 0xAD8E9F44, 0x3FC16A1E, +/**/ 0x41E7749D, 0x3FBC0231, +/**/ 0x22DC16A2, 0x3C76CA27, +/**/ 0x252BF240, 0x3FCD82C0, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x188F814B, 0xBF70ACDB, +/**/ 0x00000000, 0x3FCDC000, +/**/ 0xAF8CADA0, 0x3FF07353, +/**/ 0x9FA32DC9, 0x3FC02ACB, +/**/ 0x32323718, 0x3FCB28A1, +/**/ 0x29A8F15E, 0x3FBC1350, +/**/ 0xDEB270E1, 0x3FC1BF7D, +/**/ 0x40D67463, 0x3FBCE91C, +/**/ 0x104BAA08, 0x3CA6E976, +/**/ 0xB2F76140, 0x3FCE064A, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xE6A4BFC9, 0xBF6958A0, +/**/ 0x00000000, 0x3FCE4000, +/**/ 0x98C0FFD9, 0x3FF07768, +/**/ 0x6F7F1AF0, 0x3FC07C9A, +/**/ 0x708F2AFB, 0x3FCB617A, +/**/ 0x1025B50C, 0x3FBCC681, +/**/ 0x9487453A, 0x3FC2179C, +/**/ 0xAD09B3AB, 0x3FBDD740, +/**/ 0x189038C0, 0xBC8D32DB, +/**/ 0x96762300, 0x3FCE89F5, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x7E004D50, 0xBF612ECE, +/**/ 0x00000000, 0x3FCEC000, +/**/ 0x0B27C417, 0x3FF07B92, +/**/ 0xE821087A, 0x3FC0CF15, +/**/ 0x8B49DC8C, 0x3FCB9BBD, +/**/ 0x40BEF5C2, 0x3FBD7D31, +/**/ 0xEC080575, 0x3FC27290, +/**/ 0x3056A6A9, 0x3FBECCEA, +/**/ 0x0C9B27A2, 0x3C9DE506, +/**/ 0x73468A50, 0x3FCF0DC1, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x60EFA34D, 0xBF51B7D3, +/**/ 0x00000000, 0x3FCF4000, +/**/ 0x3273C018, 0x3FF07FD0, +/**/ 0x51B87F08, 0x3FC12242, +/**/ 0x9D9AB2BC, 0x3FCBD771, +/**/ 0x85FFA125, 0x3FBE377D, +/**/ 0xEA0CFE55, 0x3FC2D071, +/**/ 0xBB61DDD3, 0x3FBFCA67, +/**/ 0x88A645E7, 0xBCA25383, +/**/ 0xEE603F40, 0x3FCF91AE, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x1FF422B6, 0xBF07E6C6, +/**/ 0x00000000, 0x3FCFC000, +/**/ 0x3B6C76F2, 0x3FF08423, +/**/ 0x0A1DF897, 0x3FC17624, +/**/ 0xFD38779D, 0x3FCC149D, +/**/ 0x95531ECD, 0x3FBEF583, +/**/ 0x855FA966, 0x3FC33157, +/**/ 0xD81E6BAA, 0x3FC06805, +/**/ 0x1B47FAEC, 0x3C86827E, +/**/ 0x570E6798, 0x3FD00ADF, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xB1DBC656, 0x3F508CED, +/**/ 0x00000000, 0x3FD02000, +/**/ 0x53F3A97B, 0x3FF0888B, +/**/ 0x858525D6, 0x3FC1CABF, +/**/ 0x3C37AF90, 0x3FCC534A, +/**/ 0x18AD312A, 0x3FBFB762, +/**/ 0xB151CAAD, 0x3FC3955A, +/**/ 0x07ADE82D, 0x3FC0EF16, +/**/ 0xFCDE8746, 0x3CAEEF44, +/**/ 0xAD203480, 0x3FD04CF8, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xE752F5A1, 0x3F6116A7, +/**/ 0x00000000, 0x3FD06000, +/**/ 0xAB0B03F8, 0x3FF08D08, +/**/ 0x4F34EEE8, 0x3FC22019, +/**/ 0x2AFDABDE, 0x3FCC937E, +/**/ 0x5C4F35BA, 0x3FC03E9C, +/**/ 0x68DF21A6, 0x3FC3FC95, +/**/ 0x53843C52, 0x3FC17A91, +/**/ 0xC2BB835A, 0xBC9D6F54, +/**/ 0xCE0162B8, 0x3FD08F23, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x1607EF23, 0x3F6A1156, +/**/ 0x00000000, 0x3FD0A000, +/**/ 0x70D9FA87, 0x3FF0919B, +/**/ 0x0A456C09, 0x3FC27636, +/**/ 0xDA483778, 0x3FCCD541, +/**/ 0x136D6630, 0x3FC0A394, +/**/ 0xBA615E9C, 0x3FC46722, +/**/ 0xA2BC6F73, 0x3FC20AA6, +/**/ 0x7F1D9D86, 0x3CA9D006, +/**/ 0x0F0C1EC8, 0x3FD0D161, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xD9FA8688, 0x3F719B70, +/**/ 0x00000000, 0x3FD0E000, +/**/ 0xD6B3D5D1, 0x3FF09643, +/**/ 0x72641546, 0x3FC2CD1A, +/**/ 0x9D4AC7EC, 0x3FCD189D, +/**/ 0x149C2E66, 0x3FC10AA9, +/**/ 0xD3DE8741, 0x3FC4D51E, +/**/ 0xF6DA4768, 0x3FC29F86, +/**/ 0x828C2A81, 0x3CAEA900, +/**/ 0xC65D88C8, 0x3FD113B0, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xB3D5D119, 0x3F7643D6, +/**/ 0x00000000, 0x3FD12000, +/**/ 0x0F1DF195, 0x3FF09B02, +/**/ 0x5C9E6B3F, 0x3FC324CB, +/**/ 0x0BE228B7, 0x3FCD5D9A, +/**/ 0xD29602B0, 0x3FC173EC, +/**/ 0x0FFA7799, 0x3FC546A7, +/**/ 0x87BA569F, 0x3FC33965, +/**/ 0x9956F2C3, 0xBCAE3258, +/**/ 0x4ADA6FF0, 0x3FD15613, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x1DF1952F, 0x3F7B020F, +/**/ 0x00000000, 0x3FD16000, +/**/ 0x4DD62EB0, 0x3FF09FD6, +/**/ 0xB8335DE5, 0x3FC37D4D, +/**/ 0x04DFA3F1, 0x3FCDA440, +/**/ 0x55E59412, 0x3FC1DF71, +/**/ 0x0394B72E, 0x3FC5BBDA, +/**/ 0xE1177398, 0x3FC3D877, +/**/ 0x3B5720A7, 0x3CA8AC88, +/**/ 0xF43427A8, 0x3FD19888, +/**/ 0x00000000, 0x3FF08000, +/**/ 0xD62EAF85, 0x3F7FD64D, +/**/ 0x00000000, 0x3FD1A000, +/**/ 0xC7D99A5F, 0x3FF0A4C0, +/**/ 0x8F6BB942, 0x3FC3D6A6, +/**/ 0xB06CB8A9, 0x3FCDEC98, +/**/ 0x432C74B1, 0x3FC24D49, +/**/ 0x8C1C6EC6, 0x3FC634D7, +/**/ 0x01BF2560, 0x3FC47CF6, +/**/ 0x476E25C7, 0x3CA3EDE7, +/**/ 0x1AED7720, 0x3FD1DB12, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x2665A126, 0xBF7B3F38, +/**/ 0x00000000, 0x3FD1E000, +/**/ 0xB36B4C8B, 0x3FF0A9C1, +/**/ 0x0879E39B, 0x3FC430DB, +/**/ 0x82887D8B, 0x3FCE36AD, +/**/ 0xE1B33C79, 0x3FC2BD87, +/**/ 0xDEA4E95E, 0x3FC6B1C0, +/**/ 0x7C90504A, 0x3FC5271A, +/**/ 0x8A6EBD08, 0x3CAAFAD9, +/**/ 0x185FA360, 0x3FD21DAF, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x94B3751C, 0xBF763E4C, +/**/ 0x00000000, 0x3FD22000, +/**/ 0x481B7EED, 0x3FF0AED9, +/**/ 0x66613BB3, 0x3FC48BF0, +/**/ 0x3D9FDD8F, 0x3FCE8288, +/**/ 0x22470BF2, 0x3FC33041, +/**/ 0x97C5B476, 0x3FC732B8, +/**/ 0x9B614F73, 0x3FC5D722, +/**/ 0x759745C8, 0x3CA96B82, +/**/ 0x46BF95B8, 0x3FD26060, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0xE48112DC, 0xBF7126B7, +/**/ 0x00000000, 0x3FD26000, +/**/ 0xBECEDF0E, 0x3FF0B407, +/**/ 0x09E5699A, 0x3FC4E7EC, +/**/ 0xF541EC2D, 0x3FCED032, +/**/ 0xA6688484, 0x3FC3A589, +/**/ 0xCC5228BD, 0x3FC7B7E2, +/**/ 0x83ECAD1F, 0x3FC68D4E, +/**/ 0x7CB79363, 0x3CA98586, +/**/ 0x01231EC8, 0x3FD2A326, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x6241E449, 0xBF67F082, +/**/ 0x00000000, 0x3FD2A000, +/**/ 0x51C61D1C, 0x3FF0B94D, +/**/ 0x7281F837, 0x3FC544D3, +/**/ 0x10F19F89, 0x3FCF1FB8, +/**/ 0xC7D08A44, 0x3FC41D76, +/**/ 0x1AF4E5E6, 0x3FC84165, +/**/ 0x5EE5D838, 0x3FC749E1, +/**/ 0xA1F9A890, 0x3C8A2A36, +/**/ 0xA3865760, 0x3FD2E600, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0xE78B8E2F, 0xBF5ACAB8, +/**/ 0x00000000, 0x3FD2E000, +/**/ 0x3CA5B9C1, 0x3FF0BEAA, +/**/ 0x3F6A91D3, 0x3FC5A2AC, +/**/ 0x4F1650DB, 0x3FCF7122, +/**/ 0xA04F63E7, 0x3FC4981E, +/**/ 0xBEBC9B64, 0x3FC8CF66, +/**/ 0x81598BF7, 0x3FC80D21, +/**/ 0x8E0FD320, 0xBC984143, +/**/ 0x8AD12008, 0x3FD328F0, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0xA463F3FD, 0xBF355C35, +/**/ 0x00000000, 0x3FD32000, +/**/ 0xBC7E151A, 0x3FF0C41E, +/**/ 0x30943E19, 0x3FC6017C, +/**/ 0xC80C760D, 0x3FCFC47C, +/**/ 0x120B129D, 0x3FC51598, +/**/ 0xA2A855B5, 0x3FC96210, +/**/ 0x9880230D, 0x3FC8D758, +/**/ 0xBF178596, 0xBCA4D129, +/**/ 0x14DCC050, 0x3FD36BF6, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0xF854661E, 0x3F507AF1, +/**/ 0x00000000, 0x3FD36000, +/**/ 0x0FD3C135, 0x3FF0C9AB, +/**/ 0x27C80482, 0x3FC66149, +/**/ 0x78AC0DDD, 0x3FD00CE9, +/**/ 0xD02204B1, 0x3FC595FA, +/**/ 0x7642750D, 0x3FC9F98D, +/**/ 0xD82AC48A, 0x3FC9A8D3, +/**/ 0x289B3951, 0x3C977587, +/**/ 0xA079A6D8, 0x3FD3AF11, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0xA7826A0D, 0x3F63561F, +/**/ 0x00000000, 0x3FD3A000, +/**/ 0x76A81A69, 0x3FF0CF4F, +/**/ 0x29BF5ACD, 0x3FC6C219, +/**/ 0x507D5DD4, 0x3FD03898, +/**/ 0x67B79439, 0x3FC6195F, +/**/ 0xC35A709F, 0x3FCA9609, +/**/ 0x2BF7455C, 0x3FCA81E4, +/**/ 0xF424551E, 0x3CA03304, +/**/ 0x8D754B40, 0x3FD3F243, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x5034D2A8, 0x3F6E9EED, +/**/ 0x00000000, 0x3FD3E000, +/**/ 0x3282280D, 0x3FF0D50C, +/**/ 0x5F4ACC23, 0x3FC723F2, +/**/ 0x08771131, 0x3FD06551, +/**/ 0x4970163E, 0x3FC69FDF, +/**/ 0x04EE9A0A, 0x3FCB37B4, +/**/ 0x6B79BC18, 0x3FCB62DE, +/**/ 0x02A2F456, 0x3CAECF25, +/**/ 0x3CA032E0, 0x3FD4358C, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x82280D28, 0x3F750C32, +/**/ 0x00000000, 0x3FD42000, +/**/ 0x8677C82D, 0x3FF0DAE1, +/**/ 0x16834ABE, 0x3FC786DB, +/**/ 0xF1631731, 0x3FD09319, +/**/ 0xD36297AF, 0x3FC72994, +/**/ 0xBF583888, 0x3FCBDEBC, +/**/ 0x918E2AE6, 0x3FCC4C1B, +/**/ 0xF34A155C, 0x3CA92F70, +/**/ 0x0FD419C8, 0x3FD478EC, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x77C82D53, 0x3F7AE186, +/**/ 0x00000000, 0x3FD46000, +/**/ 0xB73728F8, 0x3FF0E0CF, +/**/ 0xC406A36A, 0x3FC7EAD9, +/**/ 0x91BDA616, 0x3FD0C1F9, +/**/ 0x5B86C42B, 0x3FC7B69B, +/**/ 0x99CD8C9F, 0x3FCC8B56, +/**/ 0xF7084936, 0x3FCD3DF8, +/**/ 0x54942387, 0xBC923B74, +/**/ 0x69FA40E8, 0x3FD4BC63, +/**/ 0x00000000, 0x3FF10000, +/**/ 0xC8D707BB, 0xBF7F3048, +/**/ 0x00000000, 0x3FD4A000, +/**/ 0x0B1092B8, 0x3FF0E6D7, +/**/ 0x043F9011, 0x3FC84FF5, +/**/ 0xA7AFD6EB, 0x3FD0F1F6, +/**/ 0x3AA5D7B9, 0x3FC8470F, +/**/ 0x794E9CFD, 0x3FCD3DB6, +/**/ 0x90FB69FD, 0x3FCE38D8, +/**/ 0xC2327DC5, 0x3C9CFA2D, +/**/ 0xAF11E2C0, 0x3FD4FFF2, +/**/ 0x00000000, 0x3FF10000, +/**/ 0xEF6D4848, 0xBF7928F4, +/**/ 0x00000000, 0x3FD4E000, +/**/ 0xCA008550, 0x3FF0ECF7, +/**/ 0x9CB9ECA7, 0x3FC8B633, +/**/ 0x2B20AC3D, 0x3FD12318, +/**/ 0xD7D5E860, 0x3FC8DB0D, +/**/ 0x9D1315AF, 0x3FCDF613, +/**/ 0x32D8BC6F, 0x3FCF3D21, +/**/ 0x92E48EEE, 0x3C9C6A36, +/**/ 0x4436D008, 0x3FD5439A, +/**/ 0x00000000, 0x3FF10000, +/**/ 0xFF7AAF92, 0xBF730835, +/**/ 0x00000000, 0x3FD52000, +/**/ 0x3DBA2C62, 0x3FF0F332, +/**/ 0x7D83983C, 0x3FC91D9C, +/**/ 0x4FDDA02E, 0x3FD15565, +/**/ 0xB48747C7, 0x3FC972B5, +/**/ 0xBC9105F9, 0x3FCEB4A7, +/**/ 0x6A535ECF, 0x3FD0259F, +/**/ 0xF6EA55C1, 0x3C87EB36, +/**/ 0x8FA83538, 0x3FD5875A, +/**/ 0x00000000, 0x3FF10000, +/**/ 0x8BA73C6A, 0xBF699B84, +/**/ 0x00000000, 0x3FD56000, +/**/ 0xB1B22D42, 0x3FF0F986, +/**/ 0xC29A92ED, 0x3FC98636, +/**/ 0x87DBE62D, 0x3FD188E5, +/**/ 0x792C37EB, 0x3FCA0E26, +/**/ 0x2735E8CD, 0x3FCF79AF, +/**/ 0x6ECCD4C0, 0x3FD0B1D1, +/**/ 0xBEAE0510, 0x3C9502B5, +/**/ 0xF8CF8AC0, 0x3FD5CB33, +/**/ 0x00000000, 0x3FF10000, +/**/ 0x374AF74C, 0xBF59E539, +/**/ 0x00000000, 0x3FD5A000, +/**/ 0x7329D23A, 0x3FF0FFF5, +/**/ 0xB568F082, 0x3FC9F009, +/**/ 0x85939DB2, 0x3FD1BDA0, +/**/ 0x0283B18A, 0x3FCAAD81, +/**/ 0x72F69148, 0x3FD022B4, +/**/ 0x39AD0B79, 0x3FD14362, +/**/ 0x80828B86, 0xBCAD7968, +/**/ 0xE847B130, 0x3FD60F26, +/**/ 0x00000000, 0x3FF10000, +/**/ 0x5B8BC081, 0xBEE519AC, +/**/ 0x00000000, 0x3FD5E000, +/**/ 0xD13A9687, 0x3FF1067E, +/**/ 0xCE4F3F61, 0x3FCA5B1C, +/**/ 0x3E764545, 0x3FD1F39E, +/**/ 0x6F90871B, 0x3FCB50E7, +/**/ 0x6F487F97, 0x3FD08C0B, +/**/ 0x67265C20, 0x3FD1DA90, +/**/ 0x995723AD, 0x3CAE5B02, +/**/ 0xC7E43AA0, 0x3FD65333, +/**/ 0x00000000, 0x3FF10000, +/**/ 0xEA5A1D64, 0x3F59FB44, +/**/ 0x00000000, 0x3FD62000, +/**/ 0x1CE216D9, 0x3FF10D23, +/**/ 0xB63E0B53, 0x3FCAC777, +/**/ 0xED81D055, 0x3FD22AE6, +/**/ 0x3046C5AC, 0x3FCBF87D, +/**/ 0xFCB29FE4, 0x3FD0F8FE, +/**/ 0xC99A404E, 0x3FD2779D, +/**/ 0xC3202AE8, 0xBCA2AF1E, +/**/ 0x02B8E378, 0x3FD6975B, +/**/ 0x00000000, 0x3FF10000, +/**/ 0xC42DB2AB, 0x3F6A4639, +/**/ 0x00000000, 0x3FD66000, +/**/ 0xA90E6A24, 0x3FF113E2, +/**/ 0x485F2C6B, 0x3FCB3522, +/**/ 0x15F1D6CC, 0x3FD26383, +/**/ 0x14F9D555, 0x3FCCA467, +/**/ 0x245E397E, 0x3FD169B3, +/**/ 0x99479CF7, 0x3FD31ACF, +/**/ 0x8992C228, 0xBC730D3F, +/**/ 0x05213B28, 0x3FD6DB9D, +/**/ 0x00000000, 0x3FF10000, +/**/ 0x0E6A2469, 0x3F73E2A9, +/**/ 0x00000000, 0x3FD6A000, +/**/ 0xCAAAE6D5, 0x3FF11ABD, +/**/ 0x93CF9B23, 0x3FCBA424, +/**/ 0x86106AD4, 0x3FD29D7B, +/**/ 0x5E96870B, 0x3FCD54CB, +/**/ 0x9975D46D, 0x3FD1DE4D, +/**/ 0xA709F8A4, 0x3FD3C46E, +/**/ 0x457B6F5C, 0xBC9CB630, +/**/ 0x3CC87FC8, 0x3FD71FFA, +/**/ 0x00000000, 0x3FF10000, +/**/ 0xAAE6D53D, 0x3F7ABDCA, +/**/ 0x00000000, 0x3FD6E000, +/**/ 0xD8AD589E, 0x3FF121B4, +/**/ 0xDD6A8C89, 0x3FCC1486, +/**/ 0x5A283891, 0x3FD2D8D9, +/**/ 0xCFB4F5A1, 0x3FCE09D1, +/**/ 0xCF594BB6, 0x3FD256F5, +/**/ 0x92614C29, 0x3FD474C7, +/**/ 0x533051E9, 0xBC88FB31, +/**/ 0x18B1AD28, 0x3FD76473, +/**/ 0x00000000, 0x3FF14000, +/**/ 0x52A761D6, 0xBF7E4B27, +/**/ 0x00000000, 0x3FD72000, +/**/ 0x2C23AB4A, 0x3FF128C8, +/**/ 0xA1A6A356, 0x3FCC8651, +/**/ 0xFF99ABE3, 0x3FD315A5, +/**/ 0xBE8EE4C2, 0x3FCEC3A3, +/**/ 0x11207D5D, 0x3FD2D3D5, +/**/ 0x02FE6DF8, 0x3FD52C2B, +/**/ 0xFE4D8DF3, 0xBCA3F304, +/**/ 0x093FC1F0, 0x3FD7A908, +/**/ 0x00000000, 0x3FF14000, +/**/ 0xDC54B622, 0xBF7737D3, +/**/ 0x00000000, 0x3FD76000, +/**/ 0x20420F33, 0x3FF12FF8, +/**/ 0x96860D89, 0x3FCCF98D, +/**/ 0x3814F292, 0x3FD353EB, +/**/ 0x27E81BF7, 0x3FCF826C, +/**/ 0x9A827352, 0x3FD35516, +/**/ 0xE614C6DF, 0x3FD5EAED, +/**/ 0x36C1700C, 0x3C80AEDB, +/**/ 0x803E3C28, 0x3FD7EDB9, +/**/ 0x00000000, 0x3FF14000, +/**/ 0xBDF0CCC6, 0xBF7007DF, +/**/ 0x00000000, 0x3FD7A000, +/**/ 0x12719C3A, 0x3FF13745, +/**/ 0xAD9A717F, 0x3FCD6E43, +/**/ 0x1CFACD12, 0x3FD393B3, +/**/ 0xE17B8F05, 0x3FD0232B, +/**/ 0xB23873BC, 0x3FD3DAE7, +/**/ 0xAFB712E5, 0x3FD6B169, +/**/ 0x0BC74599, 0x3C994C0C, +/**/ 0xF0E9CF80, 0x3FD83287, +/**/ 0x00000000, 0x3FF14000, +/**/ 0x1CC78CA5, 0xBF6175DB, +/**/ 0x00000000, 0x3FD7E000, +/**/ 0x625F7844, 0x3FF13EAF, +/**/ 0x161D9978, 0x3FCDE47D, +/**/ 0x22E63DCA, 0x3FD3D508, +/**/ 0x8B2EC7EB, 0x3FD087CA, +/**/ 0xC5F619C8, 0x3FD46577, +/**/ 0xA08A73DE, 0x3FD77FFC, +/**/ 0x6E7B547F, 0x3CA1DBDE, +/**/ 0xCFF956F8, 0x3FD87773, +/**/ 0x00000000, 0x3FF14000, +/**/ 0x087BC752, 0xBF3509DA, +/**/ 0x00000000, 0x3FD82000, +/**/ 0x720C869D, 0x3FF14637, +/**/ 0x3F1FD940, 0x3FCE5C43, +/**/ 0x1D614654, 0x3FD417F5, +/**/ 0x472052ED, 0x3FD0EF2A, +/**/ 0x88116DA6, 0x3FD4F4F8, +/**/ 0x102117B6, 0x3FD8570A, +/**/ 0x214A7328, 0xBCAB6E89, +/**/ 0x93A70458, 0x3FD8BC7D, +/**/ 0x00000000, 0x3FF14000, +/**/ 0x321A7479, 0x3F58DDC8, +/**/ 0x00000000, 0x3FD86000, +/**/ 0xA5DDA5C4, 0x3FF14DDD, +/**/ 0xD9CD3739, 0x3FCED59F, +/**/ 0x42C70412, 0x3FD45C85, +/**/ 0x49C983A8, 0x3FD15964, +/**/ 0x0EF7ED0B, 0x3FD5899E, +/**/ 0xBC543499, 0x3FD936FA, +/**/ 0x7B29F22E, 0x3CAFF50D, +/**/ 0xB3B9CF50, 0x3FD901A5, +/**/ 0x00000000, 0x3FF14000, +/**/ 0xBB4B87E0, 0x3F6BBB4B, +/**/ 0x00000000, 0x3FD8A000, +/**/ 0x64AC8172, 0x3FF155A2, +/**/ 0xDBCA7047, 0x3FCF509C, +/**/ 0x3055A16F, 0x3FD4A2C4, +/**/ 0xD25160C7, 0x3FD1C692, +/**/ 0xF68F9906, 0x3FD6239E, +/**/ 0x1DFC2EE2, 0x3FDA203D, +/**/ 0x671EF39F, 0x3CAD2019, +/**/ 0xA98F2718, 0x3FD946EC, +/**/ 0x00000000, 0x3FF14000, +/**/ 0xAC8171A9, 0x3F75A264, +/**/ 0x00000000, 0x3FD8E000, +/**/ 0x17D8FF02, 0x3FF15D86, +/**/ 0x81AAFD5E, 0x3FCFCD44, +/**/ 0xEE72B776, 0x3FD4EABD, +/**/ 0x377F943F, 0x3FD236D1, +/**/ 0x83A56DB7, 0x3FD6C334, +/**/ 0xC36D6C50, 0x3FDB1345, +/**/ 0x761537BB, 0xBC7841E5, +/**/ 0xF024E808, 0x3FD98C52, +/**/ 0x00000000, 0x3FF14000, +/**/ 0xD8FF01DE, 0x3F7D8617, +/**/ 0x00000000, 0x3FD92000, +/**/ 0x2B5B4A9A, 0x3FF16589, +/**/ 0xA8C0A8C6, 0x3FD025D0, +/**/ 0xF524E4B6, 0x3FD5347E, +/**/ 0xF565EDBD, 0x3FD2AA3B, +/**/ 0xC98D2842, 0x3FD7689A, +/**/ 0xB128B4DD, 0x3FDC108F, +/**/ 0x4452A669, 0xBC8A5EEB, +/**/ 0x04239878, 0x3FD9D1D9, +/**/ 0x00000000, 0x3FF18000, +/**/ 0xA4B56661, 0xBF7A76D4, +/**/ 0x00000000, 0x3FD96000, +/**/ 0x0DD68BC8, 0x3FF16DAC, +/**/ 0x0EC54C3A, 0x3FD065DF, +/**/ 0x30C58A12, 0x3FD58014, +/**/ 0xBBCBCCEF, 0x3FD320F0, +/**/ 0xD218F380, 0x3FD81410, +/**/ 0xC9371D29, 0x3FDD189C, +/**/ 0x1D6E6EC7, 0x3C58C3C1, +/**/ 0x63E8EF18, 0x3FDA177F, +/**/ 0x00000000, 0x3FF18000, +/**/ 0x29743866, 0xBF7253F2, +/**/ 0x00000000, 0x3FD9A000, +/**/ 0x30AC48A8, 0x3FF175EF, +/**/ 0x037BA7C0, 0x3FD0A6D3, +/**/ 0x06EDCD18, 0x3FD5CD8B, +/**/ 0x7D679188, 0x3FD39B0E, +/**/ 0xC8128143, 0x3FD8C5D8, +/**/ 0x39B3613A, 0x3FDE2BF6, +/**/ 0xC70C9C76, 0xBC874080, +/**/ 0x8F92A560, 0x3FDA5D46, +/**/ 0x00000000, 0x3FF18000, +/**/ 0xA76EB06E, 0xBF64219E, +/**/ 0x00000000, 0x3FD9E000, +/**/ 0x08107EEF, 0x3FF17E53, +/**/ 0x40691386, 0x3FD0E8B2, +/**/ 0x5BA2319A, 0x3FD61CF1, +/**/ 0x7FF30656, 0x3FD418B5, +/**/ 0x24624146, 0x3FD97E38, +/**/ 0xF30D6589, 0x3FDF4B2C, +/**/ 0x74DD0C9B, 0xBC8D4AD9, +/**/ 0x090998F8, 0x3FDAA32F, +/**/ 0x00000000, 0x3FF18000, +/**/ 0xF81116BC, 0xBF3ACF7E, +/**/ 0x00000000, 0x3FDA2000, +/**/ 0x0B1E7A9D, 0x3FF186D8, +/**/ 0xA98356F0, 0x3FD12B82, +/**/ 0x96C051D8, 0x3FD66E55, +/**/ 0x6D28A49D, 0x3FD49A07, +/**/ 0xDE14D616, 0x3FDA3D77, +/**/ 0x13502F53, 0x3FE03B6D, +/**/ 0x4AD59707, 0x3CA51700, +/**/ 0x540D3F08, 0x3FDAE939, +/**/ 0x00000000, 0x3FF18000, +/**/ 0x79EA752F, 0x3F5B602C, +/**/ 0x00000000, 0x3FDA6000, +/**/ 0xB3EE7285, 0x3FF18F7E, +/**/ 0x4EC4AF40, 0x3FD16F4A, +/**/ 0xA9B275FD, 0x3FD6C1C6, +/**/ 0x64B886B9, 0x3FD51F27, +/**/ 0x9D72A144, 0x3FDB03E4, +/**/ 0xE7207DD5, 0x3FE0D7CF, +/**/ 0x8E77D1B2, 0xBCAACE1E, +/**/ 0xF63F6C78, 0x3FDB2F65, +/**/ 0x00000000, 0x3FF18000, +/**/ 0xDCE509F5, 0x3F6EFD67, +/**/ 0x00000000, 0x3FDAA000, +/**/ 0x7FABF325, 0x3FF19847, +/**/ 0x6DD15EDB, 0x3FD1B40F, +/**/ 0x156D090D, 0x3FD71754, +/**/ 0x0F44EE42, 0x3FD5A83A, +/**/ 0xF26149CC, 0x3FDBD1CE, +/**/ 0x9EBB7D53, 0x3FE17B14, +/**/ 0x054C177A, 0x3CA18867, +/**/ 0x773075F8, 0x3FDB75B5, +/**/ 0x00000000, 0x3FF18000, +/**/ 0xABF3257B, 0x3F78477F, +/**/ 0x00000000, 0x3FDAE000, +/**/ 0xEEAD20E6, 0x3FF1A132, +/**/ 0x73AFA8F4, 0x3FD1F9D8, +/**/ 0xF0BA2B44, 0x3FD76F0D, +/**/ 0xB2776412, 0x3FD63565, +/**/ 0x8E4B8181, 0x3FDCA78B, +/**/ 0xDE92725A, 0x3FE22595, +/**/ 0x225EE470, 0xBCABDA45, +/**/ 0x606BABE0, 0x3FDBBC28, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0x52DF1A7E, 0xBF7ECD11, +/**/ 0x00000000, 0x3FDB2000, +/**/ 0x848ADB16, 0x3FF1AA41, +/**/ 0xFE932ABB, 0x3FD240AB, +/**/ 0xEED7E85D, 0x3FD7C904, +/**/ 0x4640B1B3, 0x3FD6C6D2, +/**/ 0x81D01020, 0x3FDD8573, +/**/ 0x9938B939, 0x3FE2D7B3, +/**/ 0x36D76E02, 0x3CA12ECB, +/**/ 0x3D843430, 0x3FDC02BF, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0x7524EA70, 0xBF75BE7B, +/**/ 0x00000000, 0x3FDB6000, +/**/ 0xC839C9AC, 0x3FF1B373, +/**/ 0xDFBC912D, 0x3FD28890, +/**/ 0x666DE3CA, 0x3FD8254A, +/**/ 0x8B57457C, 0x3FD75CA9, +/**/ 0x7E7E55FE, 0x3FDE6BE4, +/**/ 0x68EC3777, 0x3FE391D3, +/**/ 0x4D8A80A5, 0xBC9F7EFE, +/**/ 0x9C2247A0, 0x3FDC497A, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0x8C6CA8A7, 0xBF69186F, +/**/ 0x00000000, 0x3FDBA000, +/**/ 0x44246029, 0x3FF1BCCA, +/**/ 0x1D6EB966, 0x3FD2D18E, +/**/ 0x58DF9E20, 0x3FD883F0, +/**/ 0x2308FF84, 0x3FD7F717, +/**/ 0x1CEC1692, 0x3FDF5B41, +/**/ 0xEFAE7F7E, 0x3FE45460, +/**/ 0xC247C281, 0xBCACA88A, +/**/ 0x0C10D428, 0x3FDC905B, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0xDCFEB6F6, 0xBF49ADDE, +/**/ 0x00000000, 0x3FDBE000, +/**/ 0x8645E0A6, 0x3FF1C645, +/**/ 0xF4FA598C, 0x3FD31BAA, +/**/ 0x7A00CDBD, 0x3FD8E509, +/**/ 0xA876EFA4, 0x3FD89648, +/**/ 0x93BB3BA0, 0x3FE029F8, +/**/ 0x3E769492, 0x3FE51FCE, +/**/ 0xDAC78BA6, 0xBC63BD0A, +/**/ 0x1F4B8A08, 0x3FDCD761, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0x178298DB, 0x3F591619, +/**/ 0x00000000, 0x3FDC2000, +/**/ 0x20466A93, 0x3FF1CFE6, +/**/ 0xDCE16113, 0x3FD366EE, +/**/ 0x3831A262, 0x3FD948A9, +/**/ 0xCB5336B7, 0x3FD93A6D, +/**/ 0xF50362A5, 0x3FE0AB30, +/**/ 0x440F45E4, 0x3FE5F494, +/**/ 0x79A811B8, 0xBCA1B23F, +/**/ 0x6A0D56C8, 0x3FDD1E8D, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0x8CD52690, 0x3F6FCC40, +/**/ 0x00000000, 0x3FDC6000, +/**/ 0xA798215A, 0x3FF1D9AC, +/**/ 0x87135170, 0x3FD3B361, +/**/ 0xC4E92F90, 0x3FD9AEE3, +/**/ 0x6C3B0A06, 0x3FD9E3B8, +/**/ 0x439D6983, 0x3FE13183, +/**/ 0x444347EE, 0x3FE6D333, +/**/ 0x141D7ADE, 0x3C9E6687, +/**/ 0x82DF5278, 0x3FDD65E0, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0x98215A4D, 0x3F79ACA7, +/**/ 0x00000000, 0x3FDCA000, +/**/ 0xB59577B1, 0x3FF1E399, +/**/ 0xE343E389, 0x3FD4010A, +/**/ 0x1DB4A57B, 0x3FDA17CE, +/**/ 0xBAC8CA27, 0x3FDA925C, +/**/ 0x29AC5009, 0x3FE1BD2C, +/**/ 0x5806ABBE, 0x3FE7BC33, +/**/ 0xD953CBEA, 0x3C89743A, +/**/ 0x02A82420, 0x3FDDAD5B, +/**/ 0x00000000, 0x3FF20000, +/**/ 0x6A884EAF, 0xBF7C664A, +/**/ 0x00000000, 0x3FDCE000, +/**/ 0xE7A0AD1E, 0x3FF1EDAD, +/**/ 0x215D62D8, 0x3FD44FF3, +/**/ 0x15B2742E, 0x3FDA837E, +/**/ 0x557C3A62, 0x3FDB4691, +/**/ 0x9ABECCA0, 0x3FE24E6B, +/**/ 0xF75D3619, 0x3FE8B024, +/**/ 0x953C1F21, 0xBC60A42B, +/**/ 0x84BBE168, 0x3FDDF4FD, +/**/ 0x00000000, 0x3FF20000, +/**/ 0x5F52E269, 0xBF725218, +/**/ 0x00000000, 0x3FDD2000, +/**/ 0xDF448BE1, 0x3FF1F7E9, +/**/ 0xB4103D45, 0x3FD4A022, +/**/ 0x5F90F152, 0x3FDAF20A, +/**/ 0x6B992E26, 0x3FDC008F, +/**/ 0x07C18F30, 0x3FE2E585, +/**/ 0x8DCE89C2, 0x3FE9AFA1, +/**/ 0xE5B4E0DD, 0xBC8B90A5, +/**/ 0xA6EC6EF0, 0x3FDE3CC8, +/**/ 0x00000000, 0x3FF20000, +/**/ 0x76E83DEE, 0xBF602C41, +/**/ 0x00000000, 0x3FDD6000, +/**/ 0x42567651, 0x3FF2024E, +/**/ 0x53815E48, 0x3FD4F1A2, +/**/ 0x98189F26, 0x3FDB638A, +/**/ 0xE11F7BB9, 0x3FDCC092, +/**/ 0x968E1C3C, 0x3FE382BF, +/**/ 0x1A4C4551, 0x3FEABB4C, +/**/ 0xC65EE1E9, 0xBCAC384D, +/**/ 0x099A6620, 0x3FDE84BD, +/**/ 0x00000000, 0x3FF20000, +/**/ 0xB3B2877E, 0x3F427212, +/**/ 0x00000000, 0x3FDDA000, +/**/ 0xBB19D366, 0x3FF20CDB, +/**/ 0x00190520, 0x3FD5447B, +/**/ 0x514AC3D7, 0x3FDBD817, +/**/ 0x7501B24E, 0x3FDD86DA, +/**/ 0x5D5DCC91, 0x3FE42666, +/**/ 0xDB834BBA, 0x3FEBD3D1, +/**/ 0x64307FE4, 0xBCA62892, +/**/ 0x4FC685E0, 0x3FDECCDB, +/**/ 0x00000000, 0x3FF20000, +/**/ 0x33A6CD00, 0x3F69B776, +/**/ 0x00000000, 0x3FDDE000, +/**/ 0xF864EB38, 0x3FF21792, +/**/ 0x0573E0CA, 0x3FD598B6, +/**/ 0x1E1D9C05, 0x3FDC4FCA, +/**/ 0xE9C2FB44, 0x3FDE53A7, +/**/ 0xA26E99AF, 0x3FE4D0C8, +/**/ 0x09A8A359, 0x3FECF9EB, +/**/ 0xD9AFA9E0, 0xBCADF861, +/**/ 0x1F23B3F8, 0x3FDF1524, +/**/ 0x00000000, 0x3FF20000, +/**/ 0x64EB3836, 0x3F7792F8, +/**/ 0x00000000, 0x3FDE2000, +/**/ 0xADC744F8, 0x3FF22274, +/**/ 0xFD785957, 0x3FD5EE5C, +/**/ 0x9EE01B3A, 0x3FDCCABD, +/**/ 0x30A7B7B5, 0x3FDF2740, +/**/ 0x202E0D0D, 0x3FE5823A, +/**/ 0x9EEBE829, 0x3FEE2E5B, +/**/ 0xE2EA9787, 0xBC93BB42, +/**/ 0x202994B8, 0x3FDF5D98, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x38BB0864, 0xBF7D8B52, +/**/ 0x00000000, 0x3FDE6000, +/**/ 0x93B1990A, 0x3FF22D81, +/**/ 0xD3920D0F, 0x3FD64579, +/**/ 0x8E4FE1FE, 0x3FDD490D, +/**/ 0xCBD3ED59, 0x3FE000F5, +/**/ 0x4E45F774, 0x3FE63B13, +/**/ 0x2FD578CE, 0x3FEF71F4, +/**/ 0xC0E1AC47, 0x3CA8AD1C, +/**/ 0xFE27BF60, 0x3FDFA637, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x4E66F5A1, 0xBF727E6C, +/**/ 0x00000000, 0x3FDEA000, +/**/ 0x679F6AE1, 0x3FF238BA, +/**/ 0xC815A8F5, 0x3FD69E16, +/**/ 0xCF6CD4C9, 0x3FDDCAD6, +/**/ 0xFD2ADE38, 0x3FE071FA, +/**/ 0xAFEE9630, 0x3FE6FBB1, +/**/ 0x6A7ACB82, 0x3FF062C9, +/**/ 0x35D3555B, 0x3C7E3580, +/**/ 0x67599588, 0x3FDFEF04, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x82547B6F, 0xBF5D1661, +/**/ 0x00000000, 0x3FDEE000, +/**/ 0xEC425F4B, 0x3FF2441F, +/**/ 0x73CF67B4, 0x3FD6F83E, +/**/ 0x7C1691BA, 0x3FDE5037, +/**/ 0x7AF8190E, 0x3FE0E6D7, +/**/ 0x27F29078, 0x3FE7C478, +/**/ 0x13B5FFDC, 0x3FF11512, +/**/ 0x5FEBA301, 0x3C6CC7A1, +/**/ 0x067D6224, 0x3FE01BFF, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x097D2BDC, 0x3F507FB1, +/**/ 0x00000000, 0x3FDF2000, +/**/ 0xE9AF6533, 0x3FF24FB2, +/**/ 0xCBBEA804, 0x3FD753FB, +/**/ 0xF480E731, 0x3FDED94E, +/**/ 0x106D90C6, 0x3FE15FB5, +/**/ 0x52DAD430, 0x3FE895CF, +/**/ 0x28FAAE13, 0x3FF1D052, +/**/ 0xE849F35A, 0xBCA50976, +/**/ 0xD1AE3B48, 0x3FE04092, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x5ECA665D, 0x3F6F65D3, +/**/ 0x00000000, 0x3FDF6000, +/**/ 0x2D8DC7FA, 0x3FF25B74, +/**/ 0x25013475, 0x3FD7B15A, +/**/ 0xEF8D6387, 0x3FDF663D, +/**/ 0xA2DF4BFF, 0x3FE1DCBF, +/**/ 0xE7C2E4E5, 0x3FE97025, +/**/ 0x1C2AE4AB, 0x3FF29510, +/**/ 0xB02A3D13, 0x3CA4C8DC, +/**/ 0xF0FD9FD8, 0x3FE0653D, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x8DC7FA40, 0x3F7B742D, +/**/ 0x00000000, 0x3FDFA000, +/**/ 0x8B4843F2, 0x3FF26764, +/**/ 0x38F10257, 0x3FD81065, +/**/ 0x8C1920B1, 0x3FDFF726, +/**/ 0x5148D4E4, 0x3FE25E25, +/**/ 0x2061C3FE, 0x3FEA53F1, +/**/ 0x5B9300E5, 0x3FF363DB, +/**/ 0x624B8B97, 0xBCA47774, +/**/ 0xC1CAE338, 0x3FE08A00, +/**/ 0x00000000, 0x3FF28000, +/**/ 0xB7BC0E50, 0xBF789B74, +/**/ 0x00000000, 0x3FDFE000, +/**/ 0xDC4036F2, 0x3FF27384, +/**/ 0x29775C8F, 0x3FD87129, +/**/ 0x31A78776, 0x3FE04616, +/**/ 0x95EE0C65, 0x3FE2E416, +/**/ 0x28E05161, 0x3FEB41AD, +/**/ 0xFF1DF849, 0x3FF43D4C, +/**/ 0xBABBA919, 0x3CA5941C, +/**/ 0xA3221C1C, 0x3FE0AEDB, +/**/ 0x00000000, 0x3FF28000, +/**/ 0x7F921C27, 0xBF68F647, +/**/ 0x00000000, 0x3FE01000, +/**/ 0x00030888, 0x3FF27FD6, +/**/ 0x8598A1B5, 0x3FD8D3B2, +/**/ 0x4E0BC755, 0x3FE092BA, +/**/ 0x6A428EEC, 0x3FE36EC6, +/**/ 0x44F514C9, 0x3FEC39C0, +/**/ 0x18C4EF3A, 0x3FF52205, +/**/ 0xA852F235, 0x4000C1D1, +/**/ 0xD00F64B8, 0x3CA78082, +/**/ 0xF5C846F8, 0x3FE0D3CE, +/**/ 0x00000000, 0x3FF28000, +/**/ 0x7BBC39DF, 0xBF04FFFE, +/**/ 0x00000000, 0x3FE03000, +/**/ 0xDC81E6D7, 0x3FF28C58, +/**/ 0x4E3BF356, 0x3FD9380E, +/**/ 0xFFC646A7, 0x3FE0E192, +/**/ 0x6D34756D, 0x3FE3FE6A, +/**/ 0x139ABC91, 0x3FED3CEF, +/**/ 0xF80111C0, 0x3FF612B8, +/**/ 0x3467C688, 0x4001A33C, +/**/ 0x34F59445, 0xBC8A9954, +/**/ 0x1C47D550, 0x3FE0F8DB, +/**/ 0x00000000, 0x3FF28000, +/**/ 0x03CDAE3F, 0x3F68B1B9, +/**/ 0x00000000, 0x3FE05000, +/**/ 0x5E4BF713, 0x3FF2990E, +/**/ 0xFB326E9E, 0x3FD99E49, +/**/ 0x8779391A, 0x3FE132B4, +/**/ 0x0C2FE325, 0x3FE4933B, +/**/ 0xAEAAE1D0, 0x3FEE4BB1, +/**/ 0x1F4377BD, 0x3FF71020, +/**/ 0x1C886605, 0x40029271, +/**/ 0x7130CE99, 0xBCA33AB1, +/**/ 0x7AFDAF10, 0x3FE11E00, +/**/ 0x00000000, 0x3FF28000, +/**/ 0x4BF712C7, 0x3F790E5E, +/**/ 0x00000000, 0x3FE07000, +/**/ 0x78CB1A3B, 0x3FF2A5F7, +/**/ 0x8081C5D1, 0x3FDA0673, +/**/ 0x0D5E6499, 0x3FE18634, +/**/ 0xAEDD6BE6, 0x3FE52D73, +/**/ 0x1CF1AAA0, 0x3FEF66A5, +/**/ 0x4834E5A9, 0x3FF81B02, +/**/ 0xFCE48906, 0x40039066, +/**/ 0x6BFB4C85, 0xBCA34E4F, +/**/ 0x7826AAD4, 0x3FE1433F, +/**/ 0x00000000, 0x3FF2C000, +/**/ 0x34E5C574, 0xBF7A0887, +/**/ 0x00000000, 0x3FE09000, +/**/ 0x268368DB, 0x3FF2B315, +/**/ 0x53F655B7, 0x3FDA7099, +/**/ 0xAD9032EC, 0x3FE1DC27, +/**/ 0xE5F88E23, 0x3FE5CD52, +/**/ 0x0A68BDFC, 0x3FF04738, +/**/ 0x2F057820, 0x3FF93435, +/**/ 0xDAE8A2FC, 0x40049E27, +/**/ 0xFAA44565, 0x3C86832C, +/**/ 0x7BED8260, 0x3FE16898, +/**/ 0x00000000, 0x3FF2C000, +/**/ 0xF92E4A41, 0xBF69D5B2, +/**/ 0x00000000, 0x3FE0B000, +/**/ 0x69558A9E, 0x3FF2C068, +/**/ 0x73011B64, 0x3FDADCCA, +/**/ 0x8511146A, 0x3FE234A6, +/**/ 0x9D6CBF3C, 0x3FE6731A, +/**/ 0xD575F00A, 0x3FF0E1E1, +/**/ 0xADEA17E7, 0x3FFA5C9D, +/**/ 0xD9123E7C, 0x4005BCD2, +/**/ 0xCC2AE1E4, 0xBCA23E4F, +/**/ 0xF07948F0, 0x3FE18E0B, +/**/ 0x00000000, 0x3FF2C000, +/**/ 0x62A7614A, 0x3F1A1A55, +/**/ 0x00000000, 0x3FE0D000, +/**/ 0x4AC410C6, 0x3FF2CDF2, +/**/ 0x68E63D97, 0x3FDB4B16, +/**/ 0xBFA256B2, 0x3FE28FC8, +/**/ 0x51FDF05A, 0x3FE71F10, +/**/ 0x0753C882, 0x3FF183AE, +/**/ 0xF1921090, 0x3FFB9530, +/**/ 0x14F942BC, 0x4006ED9E, +/**/ 0x89C77FA3, 0x3CA27879, +/**/ 0x41FC691C, 0x3FE1B39A, +/**/ 0x00000000, 0x3FF2C000, +/**/ 0x88218CD6, 0x3F6BE495, +/**/ 0x00000000, 0x3FE0F000, +/**/ 0xDC3BFD25, 0x3FF2DBB3, +/**/ 0x55413207, 0x3FDBBB8D, +/**/ 0xA6792BF1, 0x3FE2EDA7, +/**/ 0x4AC4E230, 0x3FE7D17D, +/**/ 0xAAE6CB05, 0x3FF22D00, +/**/ 0xC9028E71, 0x3FFCDEF5, +/**/ 0xB40C626C, 0x400831D8, +/**/ 0x9873F484, 0x3C953FEF, +/**/ 0xDEC430C0, 0x3FE1D943, +/**/ 0x00000000, 0x3FF2C000, +/**/ 0x3BFD24A1, 0x3F7BB3DC, +/**/ 0x00000000, 0x3FE11000, +/**/ 0x3760A19B, 0x3FF2E9AE, +/**/ 0xF2E3E2EB, 0x3FDC2E3F, +/**/ 0xAFE1CD38, 0x3FE34E5D, +/**/ 0xD6CE0B26, 0x3FE88AAE, +/**/ 0x2C4B06C6, 0x3FF2DE44, +/**/ 0x138813D2, 0x3FFE3B06, +/**/ 0x23FD5612, 0x40098AED, +/**/ 0xB7AF0E54, 0xBC91EC19, +/**/ 0x3748F114, 0x3FE1FF09, +/**/ 0x00000000, 0x3FF30000, +/**/ 0x9F5E657E, 0xBF7651C8, +/**/ 0x00000000, 0x3FE13000, +/**/ 0x7E5B072B, 0x3FF2F7E2, +/**/ 0x9F169C4D, 0x3FDCA33F, +/**/ 0x8FE1EB56, 0x3FE3B206, +/**/ 0x8F30E1B7, 0x3FE94AF6, +/**/ 0xCFCF9887, 0x3FF397E9, +/**/ 0x4FB7F25F, 0x3FFFAA90, +/**/ 0x94745D90, 0x400AFA63, +/**/ 0x2A139390, 0x3C96955C, +/**/ 0xBE3EBA20, 0x3FE224EA, +/**/ 0x00000000, 0x3FF30000, +/**/ 0x49F1AA85, 0xBF603B03, +/**/ 0x00000000, 0x3FE15000, +/**/ 0xDC2D0E76, 0x3FF30651, +/**/ 0x613EF408, 0x3FDD1A9E, +/**/ 0x49ED083D, 0x3FE418BF, +/**/ 0x9DFD1E23, 0x3FEA12AA, +/**/ 0x32B75F76, 0x3FF45A6A, +/**/ 0xA7673F47, 0x4000976C, +/**/ 0xB046AC6A, 0x400C81E4, +/**/ 0x7D1BEB80, 0x3C879FF7, +/**/ 0xE8A6B8B0, 0x3FE24AE8, +/**/ 0x00000000, 0x3FF30000, +/**/ 0xB439D90E, 0x3F594770, +/**/ 0x00000000, 0x3FE17000, +/**/ 0x85087ECD, 0x3FF314FD, +/**/ 0xF2F45390, 0x3FDD946E, +/**/ 0x43BEDA05, 0x3FE482A6, +/**/ 0x0A640DD7, 0x3FEAE226, +/**/ 0xD6A3D695, 0x3FF52645, +/**/ 0x08098FE0, 0x4001649F, +/**/ 0x9D2BADE7, 0x400E233C, +/**/ 0x4E5F8348, 0x3C9E948C, +/**/ 0x2DE13E58, 0x3FE27104, +/**/ 0x00000000, 0x3FF30000, +/**/ 0x087ECD1A, 0x3F74FD85, +/**/ 0x00000000, 0x3FE19000, +/**/ 0xB6AA3C67, 0x3FF323E6, +/**/ 0xC8894828, 0x3FDE10C4, +/**/ 0x59718389, 0x3FE4EFDB, +/**/ 0x0A8D7622, 0x3FEBB9C9, +/**/ 0xB8A62B12, 0x3FF5FC05, +/**/ 0xE4296831, 0x40023D9A, +/**/ 0x49C0B830, 0x400FE05E, +/**/ 0xC1189DE8, 0x3CA19107, +/**/ 0x07C07BCC, 0x3FE2973D, +/**/ 0x00000000, 0x3FF34000, +/**/ 0x55C3993D, 0xBF7C1949, +/**/ 0x00000000, 0x3FE1B000, +/**/ 0xB8B9E20B, 0x3FF3330E, +/**/ 0x1A11468B, 0x3FDE8FB4, +/**/ 0xF2E740E1, 0x3FE5607F, +/**/ 0x5B91DB14, 0x3FEC99F9, +/**/ 0xF50C5FAA, 0x3FF6DC3B, +/**/ 0x0CFAC1C7, 0x4003232A, +/**/ 0x894EFD30, 0x4010DDB3, +/**/ 0x3783D916, 0xBCA7760F, +/**/ 0xF29BF5F0, 0x3FE2BD93, +/**/ 0x00000000, 0x3FF34000, +/**/ 0x8C3BEA7F, 0xBF69E28E, +/**/ 0x00000000, 0x3FE1D000, +/**/ 0xDD2DFE6D, 0x3FF34276, +/**/ 0xECEB226B, 0x3FDF1151, +/**/ 0x1AA123CE, 0x3FE5D4B7, +/**/ 0xA01F65F8, 0x3FED8322, +/**/ 0x791CE583, 0x3FF7C784, +/**/ 0xC15A6B9C, 0x40041625, +/**/ 0x64280FEB, 0x4011DB51, +/**/ 0x28CA6DBB, 0x3CA10463, +/**/ 0x6D64BEAC, 0x3FE2E409, +/**/ 0x00000000, 0x3FF34000, +/**/ 0x6FF364E1, 0x3F43B6E9, +/**/ 0x00000000, 0x3FE1F000, +/**/ 0x80B539C7, 0x3FF35220, +/**/ 0x1DD91A82, 0x3FDF95B4, +/**/ 0x961EA9CA, 0x3FE64CA5, +/**/ 0xC65B3B2F, 0x3FEE75B6, +/**/ 0xC412E59F, 0x3FF8BE85, +/**/ 0x02462A51, 0x40051778, +/**/ 0x109FC81B, 0x4012EA48, +/**/ 0x9F70CA98, 0x3C959E4C, +/**/ 0xF9BA7B3C, 0x3FE30A9D, +/**/ 0x00000000, 0x3FF34000, +/**/ 0xB539C6A2, 0x3F722080, +/**/ 0x00000000, 0x3FE21000, +/**/ 0x0B24ACDA, 0x3FF3620D, +/**/ 0xB5D803B6, 0x3FE00E78, +/**/ 0xFFE457FB, 0x3FE6C871, +/**/ 0x759EF386, 0x3FEF722E, +/**/ 0xB8D0E874, 0x3FF9C1F1, +/**/ 0x080FB06E, 0x4006281D, +/**/ 0xD1F69DF7, 0x40140BF2, +/**/ 0xCBFAF37F, 0xBC8489EA, +/**/ 0x1C0141BC, 0x3FE33152, +/**/ 0x00000000, 0x3FF38000, +/**/ 0xDB532667, 0xBF7DF2F4, +/**/ 0x00000000, 0x3FE23000, +/**/ 0xEFEBB76D, 0x3FF3723D, +/**/ 0xC153FC4C, 0x3FE05390, +/**/ 0xE34A2666, 0x3FE74844, +/**/ 0xC260A400, 0x3FF03C84, +/**/ 0x81E70F01, 0x3FFAD286, +/**/ 0xDBC4A78E, 0x40074924, +/**/ 0x8BBCA2E0, 0x401541CB, +/**/ 0x7BEA8472, 0x3C9C7528, +/**/ 0x5B7858F8, 0x3FE35826, +/**/ 0x00000000, 0x3FF38000, +/**/ 0x28912510, 0xBF6B8420, +/**/ 0x00000000, 0x3FE25000, +/**/ 0xAE8DA9C7, 0x3FF382B4, +/**/ 0x842CABB9, 0x3FE09A2E, +/**/ 0xDA356141, 0x3FE7CC48, +/**/ 0xBCD4FDB8, 0x3FF0C567, +/**/ 0x89B62C32, 0x3FFBF10F, +/**/ 0x18ADC4B9, 0x40087BB5, +/**/ 0xC516F6F1, 0x40168D6D, +/**/ 0x2E37D6A3, 0xBC933A6B, +/**/ 0x4251E5AC, 0x3FE37F1B, +/**/ 0x00000000, 0x3FF38000, +/**/ 0x6D4E3A7A, 0x3F45A574, +/**/ 0x00000000, 0x3FE27000, +/**/ 0xD3219A4C, 0x3FF39372, +/**/ 0xD4394437, 0x3FE0E25E, +/**/ 0xACE4CC74, 0x3FE854AA, +/**/ 0x0981EE13, 0x3FF15408, +/**/ 0x88AA5332, 0x3FFD1E66, +/**/ 0xDA3BD18F, 0x4009C10A, +/**/ 0xFFE4AE21, 0x4017F099, +/**/ 0x7B588ABE, 0xBCAED56B, +/**/ 0x5DCB911C, 0x3FE3A631, +/**/ 0x00000000, 0x3FF38000, +/**/ 0x219A4BA9, 0x3F7372D3, +/**/ 0x00000000, 0x3FE29000, +/**/ 0xF6D8C6BC, 0x3FF3A479, +/**/ 0x11197A32, 0x3FE12C2F, +/**/ 0x73F949D5, 0x3FE8E199, +/**/ 0xEE7A481D, 0x3FF1E8B1, +/**/ 0xABBE8828, 0x3FFE5B74, +/**/ 0xDB3D83BC, 0x400B1A7C, +/**/ 0x6DC46100, 0x40196D39, +/**/ 0xACD8F69C, 0x3CA7798C, +/**/ 0x3E4835E8, 0x3FE3CD69, +/**/ 0x00000000, 0x3FF3C000, +/**/ 0x27394391, 0xBF7B8609, +/**/ 0x00000000, 0x3FE2B000, +/**/ 0xC08BE738, 0x3FF3B5CB, +/**/ 0x2B5CB6B7, 0x3FE177AD, +/**/ 0xBCE90EB1, 0x3FE97346, +/**/ 0x68EC7F04, 0x3FF283B6, +/**/ 0xD5B8ED04, 0x3FFFA933, +/**/ 0xCBCDFF9A, 0x400C897D, +/**/ 0x0E4ABF55, 0x401B0562, +/**/ 0x1EE42043, 0x3C881FF6, +/**/ 0x776AA08C, 0x3FE3F4C3, +/**/ 0x00000000, 0x3FF3C000, +/**/ 0xE8319086, 0xBF64687E, +/**/ 0x00000000, 0x3FE2D000, +/**/ 0xE54FE05E, 0x3FF3C769, +/**/ 0xAC1A81A0, 0x3FE1C4E7, +/**/ 0xB10FA326, 0x3FEA09E6, +/**/ 0x840F679B, 0x3FF3256B, +/**/ 0xFEE9EF1A, 0x40008457, +/**/ 0xE4146343, 0x400E0F9E, +/**/ 0x433496A9, 0x401CBB5B, +/**/ 0x59F087C0, 0xBCA57A4C, +/**/ 0xA03171A8, 0x3FE41C40, +/**/ 0x00000000, 0x3FF3C000, +/**/ 0x3F81773D, 0x3F5DA795, +/**/ 0x00000000, 0x3FE2F000, +/**/ 0x291249DC, 0x3FF3D956, +/**/ 0xBD044AC9, 0x3FE213ED, +/**/ 0x3F917FA8, 0x3FEAA5B0, +/**/ 0xB7380A79, 0x3FF3CE2C, +/**/ 0x576AFAE8, 0x40013D84, +/**/ 0xBAAB74F3, 0x400FAE92, +/**/ 0xE9129E4A, 0x401E91A2, +/**/ 0x0CEC83F7, 0x3C905671, +/**/ 0x53143194, 0x3FE443E1, +/**/ 0x00000000, 0x3FF3C000, +/**/ 0x1249DBC4, 0x3F795629, +/**/ 0x00000000, 0x3FE31000, +/**/ 0x5F3E4715, 0x3FF3EB92, +/**/ 0x30F965D1, 0x3FE264CF, +/**/ 0x4A4F2FB2, 0x3FEB46DD, +/**/ 0x4BC2E94F, 0x3FF47E5B, +/**/ 0x54F8F9EB, 0x400200B9, +/**/ 0x33305D9F, 0x4010B418, +/**/ 0x826EF167, 0x40204579, +/**/ 0xE06EBCAE, 0xBC9737A0, +/**/ 0x2E21A53C, 0x3FE46BA6, +/**/ 0x00000000, 0x3FF40000, +/**/ 0xC1B8EB04, 0xBF746DA0, +/**/ 0x00000000, 0x3FE33000, +/**/ 0x6B6A38D5, 0x3FF3FE20, +/**/ 0x8D26C7A0, 0x3FE2B79C, +/**/ 0xD62978F8, 0x3FEBEDAA, +/**/ 0xCB8CC6D1, 0x3FF5365E, +/**/ 0xD894AF54, 0x4002CE9C, +/**/ 0x79F7C63E, 0x40119F3B, +/**/ 0x0C8E7B9E, 0x40215524, +/**/ 0x13DC9A80, 0x3CA485D0, +/**/ 0xD31F754C, 0x3FE4938F, +/**/ 0x00000000, 0x3FF40000, +/**/ 0x5C72B1E7, 0xBF3DF949, +/**/ 0x00000000, 0x3FE35000, +/**/ 0x420ED8E7, 0x3FF41102, +/**/ 0x12BCE2B2, 0x3FE30C67, +/**/ 0x3EDE345E, 0x3FEC9A59, +/**/ 0x78CAB466, 0x3FF5F6A5, +/**/ 0x3EAD62EE, 0x4003A7E1, +/**/ 0x9CB9A228, 0x401299C8, +/**/ 0x1BE749B0, 0x40227974, +/**/ 0xC6A9831F, 0x3CAFE28F, +/**/ 0xE7AB3A40, 0x3FE4BB9E, +/**/ 0x00000000, 0x3FF40000, +/**/ 0x0ED8E776, 0x3F710242, +/**/ 0x00000000, 0x3FE37000, +/**/ 0xE9485B43, 0x3FF42439, +/**/ 0xC946E033, 0x3FE36340, +/**/ 0x6ECC5A7E, 0x3FED4D2C, +/**/ 0xD027255A, 0x3FF6BFA4, +/**/ 0x72504BE1, 0x40048D46, +/**/ 0x09445BD5, 0x4013A4ED, +/**/ 0x749E19F9, 0x4023B435, +/**/ 0xEAAAF53E, 0xBC40E7E5, +/**/ 0x155D0070, 0x3FE4E3D4, +/**/ 0x00000000, 0x3FF44000, +/**/ 0xB7A4BD36, 0xBF7BC616, +/**/ 0x00000000, 0x3FE39000, +/**/ 0x79A23C23, 0x3FF437C9, +/**/ 0x89AF6A9D, 0x3FE3BC3C, +/**/ 0x1AF553BA, 0x3FEE066C, +/**/ 0x1622569A, 0x3FF791DA, +/**/ 0x1B18AE2B, 0x40057F9B, +/**/ 0x88BFF240, 0x4014C1F0, +/**/ 0x019A4522, 0x40250761, +/**/ 0xFDFCCB13, 0x3CA4C238, +/**/ 0x09EB58F8, 0x3FE50C30, +/**/ 0x00000000, 0x3FF44000, +/**/ 0xBB87B9E1, 0xBF606D0C, +/**/ 0x00000000, 0x3FE3B000, +/**/ 0x1EEE6F35, 0x3FF44BB3, +/**/ 0x0A004D1D, 0x3FE4176E, +/**/ 0x0399FA54, 0x3FEEC664, +/**/ 0xF0CFD106, 0x3FF86DCA, +/**/ 0xE8C80E97, 0x40067FBD, +/**/ 0xD9CD2D79, 0x4015F237, +/**/ 0xC8076345, 0x40267521, +/**/ 0xB089F7AF, 0x3CAEC756, +/**/ 0x77510D94, 0x3FE534B3, +/**/ 0x00000000, 0x3FF44000, +/**/ 0xDCDE698F, 0x3F67663D, +/**/ 0x00000000, 0x3FE3D000, +/**/ 0x1928B1BE, 0x3FF45FF9, +/**/ 0xE9EB53E9, 0x3FE474E9, +/**/ 0x39DB03B6, 0x3FEF8D64, +/**/ 0x0F298B87, 0x3FF95406, +/**/ 0xFFC72AB6, 0x40078E9E, +/**/ 0x941456E7, 0x40173747, +/**/ 0x74A71E71, 0x4027FFDA, +/**/ 0xFE7483B3, 0xBCAEED93, +/**/ 0x13F48EC0, 0x3FE55D5F, +/**/ 0x00000000, 0x3FF44000, +/**/ 0x28B1BDFF, 0x3F7FF919, +/**/ 0x00000000, 0x3FE3F000, +/**/ 0xBD66D0C4, 0x3FF4749D, +/**/ 0xC02C2013, 0x3FE4D4C5, +/**/ 0xB56768CC, 0x3FF02DE0, +/**/ 0xDF53A7BD, 0x3FFA4523, +/**/ 0x8A357386, 0x4008AD41, +/**/ 0x5E392799, 0x401892C7, +/**/ 0x97746ACD, 0x4029AA2B, +/**/ 0xB4A71E44, 0x3C924F0A, +/**/ 0x9AD13548, 0x3FE58633, +/**/ 0x00000000, 0x3FF48000, +/**/ 0x325E775E, 0xBF66C485, +/**/ 0x00000000, 0x3FE41000, +/**/ 0x76D6C491, 0x3FF489A3, +/**/ 0x28D40829, 0x3FE53718, +/**/ 0x98450D83, 0x3FF098EA, +/**/ 0x55526E3B, 0x3FFB41C7, +/**/ 0x719F540E, 0x4009DCBD, +/**/ 0x805D08D1, 0x401A0685, +/**/ 0xA5142633, 0x402B76FA, +/**/ 0xF1FF56FC, 0x3C2AD9A7, +/**/ 0xCBA27244, 0x3FE5AF31, +/**/ 0x00000000, 0x3FF48000, +/**/ 0xAD892100, 0x3F6346ED, +/**/ 0x00000000, 0x3FE43000, +/**/ 0xC7CB94CC, 0x3FF49F0C, +/**/ 0xD492AA1E, 0x3FE59BF8, +/**/ 0x34D2CA82, 0x3FF107FF, +/**/ 0xC3DF9E51, 0x3FFC4A9E, +/**/ 0x45F5874E, 0x400B1E41, +/**/ 0xDEB92648, 0x401B947A, +/**/ 0xD903D532, 0x402D6979, +/**/ 0x04C67F5E, 0x3CA43231, +/**/ 0x6B1109A4, 0x3FE5D85A, +/**/ 0x00000000, 0x3FF48000, +/**/ 0xCB94CC1A, 0x3F7F0CC7, +/**/ 0x00000000, 0x3FE45000, +/**/ 0x4ADA0BF0, 0x3FF4B4DC, +/**/ 0x990F861F, 0x3FE60380, +/**/ 0xCBEC7542, 0x3FF17B50, +/**/ 0xC93CFE8F, 0x3FFD6064, +/**/ 0x56F36FE3, 0x400C7314, +/**/ 0x696E5374, 0x401D3ECF, +/**/ 0x1778AF1D, 0x402F8531, +/**/ 0x31EBDA84, 0x3C7A53BF, +/**/ 0x42E27660, 0x3FE601AE, +/**/ 0x00000000, 0x3FF4C000, +/**/ 0x4BE81F81, 0xBF66476A, +/**/ 0x00000000, 0x3FE47000, +/**/ 0xB4065600, 0x3FF4CB14, +/**/ 0x826ADA4F, 0x3FE66DC9, +/**/ 0xA3298D4D, 0x3FF1F314, +/**/ 0x52191CB4, 0x3FFE83E1, +/**/ 0x05CA69AF, 0x400DDC99, +/**/ 0x1079C46A, 0x401F07DF, +/**/ 0xF9440EB0, 0x4030E703, +/**/ 0x5817D0DD, 0x3CA495E1, +/**/ 0x222A98A0, 0x3FE62B2E, +/**/ 0x00000000, 0x3FF4C000, +/**/ 0x0CAC00D4, 0x3F662968, +/**/ 0x00000000, 0x3FE49000, +/**/ 0xD203BDC9, 0x3FF4E1B8, +/**/ 0xE5FE0976, 0x3FE6DAEE, +/**/ 0x3C44F71E, 0x3FF26F83, +/**/ 0xB4D92F91, 0x3FFFB5EA, +/**/ 0x55A779C8, 0x400F5C4F, +/**/ 0xA66A7536, 0x4020791F, +/**/ 0x7DCE5D75, 0x40322428, +/**/ 0x964F770B, 0x3CADE7E8, +/**/ 0xDD7FD12C, 0x3FE654DA, +/**/ 0x00000000, 0x3FF50000, +/**/ 0xFC42374B, 0xBF7E472D, +/**/ 0x00000000, 0x3FE4B000, +/**/ 0x8F87D541, 0x3FF4F8CB, +/**/ 0x767620C4, 0x3FE74B0D, +/**/ 0x9126F083, 0x3FF2F0D8, +/**/ 0x73F08794, 0x40007BB3, +/**/ 0xE1419117, 0x401079EB, +/**/ 0xA917F81E, 0x40218062, +/**/ 0x48444DEE, 0x40337C6B, +/**/ 0xF4061E08, 0x3C907A41, +/**/ 0x4F31AF70, 0x3FE67EB5, +/**/ 0x00000000, 0x3FF50000, +/**/ 0xE0AAFA85, 0xBF5CD1C1, +/**/ 0x00000000, 0x3FE4D000, +/**/ 0xF4B2718C, 0x3FF5104F, +/**/ 0x59659939, 0x3FE7BE43, +/**/ 0x5502EAE6, 0x3FF37754, +/**/ 0x6AE0AC51, 0x400124A6, +/**/ 0x33524D17, 0x4011527B, +/**/ 0x7FBF7A2D, 0x40229B46, +/**/ 0xAD716768, 0x4034F274, +/**/ 0x7C204EA8, 0xBC9C610F, +/**/ 0x57825A6C, 0x3FE6A8BE, +/**/ 0x00000000, 0x3FF50000, +/**/ 0xB2718C01, 0x3F704FF4, +/**/ 0x00000000, 0x3FE4F000, +/**/ 0x288C017D, 0x3FF52849, +/**/ 0x3E6D3F7F, 0x3FE834B0, +/**/ 0x3B0747CB, 0x3FF4033A, +/**/ 0xE946B196, 0x4001D652, +/**/ 0x3C2F8CB4, 0x401238CB, +/**/ 0x53E520C1, 0x4023CB80, +/**/ 0x607BC0F6, 0x40368938, +/**/ 0xCC053597, 0xBC84274C, +/**/ 0xDCE2DFB8, 0x3FE6D2F6, +/**/ 0x00000000, 0x3FF54000, +/**/ 0x73FE8364, 0xBF77B6D7, +/**/ 0x00000000, 0x3FE51000, +/**/ 0x729BE713, 0x3FF540BA, +/**/ 0x781F49A2, 0x3FE8AE75, +/**/ 0x432AC103, 0x3FF494D2, +/**/ 0x9B0015B6, 0x40029147, +/**/ 0x156B74E9, 0x40132DE7, +/**/ 0xE8362EC8, 0x402512F0, +/**/ 0xC8D2E0F8, 0x403843FE, +/**/ 0xBB3ACC53, 0xBC8F55DB, +/**/ 0xCC3296F0, 0x3FE6FD5F, +/**/ 0x00000000, 0x3FF54000, +/**/ 0x7CE2565E, 0x3F274E53, +/**/ 0x00000000, 0x3FE53000, +/**/ 0x3C98A101, 0x3FF559A7, +/**/ 0x16C3163D, 0x3FE92BB6, +/**/ 0x0DB2C44D, 0x3FF52C69, +/**/ 0x0F4546B8, 0x4003561E, +/**/ 0x7F099A82, 0x401432F1, +/**/ 0x831E227A, 0x402673A9, +/**/ 0xA02BBCD5, 0x403A266F, +/**/ 0xAEA9CB9D, 0x3CA279A8, +/**/ 0x1901CB44, 0x3FE727FA, +/**/ 0x00000000, 0x3FF54000, +/**/ 0x98A10084, 0x3F79A73C, +/**/ 0x00000000, 0x3FE55000, +/**/ 0x1433B9BD, 0x3FF57313, +/**/ 0x0523E7B2, 0x3FE9AC97, +/**/ 0x361F7393, 0x3FF5CA50, +/**/ 0xB0F40825, 0x4004257B, +/**/ 0x46286025, 0x40154927, +/**/ 0x781495B4, 0x4027EFF1, +/**/ 0x0A1139F1, 0x403C349E, +/**/ 0x8B6015DA, 0xBC5D2C66, +/**/ 0xBDD7E0E0, 0x3FE752C6, +/**/ 0x00000000, 0x3FF58000, +/**/ 0x988C865F, 0xBF69D9D7, +/**/ 0x00000000, 0x3FE57000, +/**/ 0xAD039E07, 0x3FF58D01, +/**/ 0x279933CD, 0x3FEA313F, +/**/ 0xB63D93A6, 0x3FF66EDE, +/**/ 0xD836441A, 0x40050012, +/**/ 0xF23D152C, 0x401671E1, +/**/ 0x65D3A1DD, 0x40298A4C, +/**/ 0x5EBDBF39, 0x403E7316, +/**/ 0x7AAA4996, 0xBCAE5B6C, +/**/ 0xBC7D2FA0, 0x3FE77DC6, +/**/ 0x00000000, 0x3FF58000, +/**/ 0x073C0E86, 0x3F6A035A, +/**/ 0x00000000, 0x3FE59000, +/**/ 0xE28DADB6, 0x3FF5A776, +/**/ 0x7D7BE2B5, 0x3FEAB9D7, +/**/ 0x5234C8A9, 0x3FF71A71, +/**/ 0xF873554C, 0x4005E6A3, +/**/ 0xC1F33F9B, 0x4017AE9A, +/**/ 0x4310046E, 0x402B4581, +/**/ 0xF64B03E7, 0x40407376, +/**/ 0xB3AB0542, 0xBCA3F39B, +/**/ 0x1E48D158, 0x3FE7A8FB, +/**/ 0x00000000, 0x3FF5C000, +/**/ 0x725249CA, 0xBF78891D, +/**/ 0x00000000, 0x3FE5B000, +/**/ 0xBA730F9B, 0x3FF5C276, +/**/ 0x454127C3, 0x3FEB468B, +/**/ 0x0E816ADB, 0x3FF7CD6B, +/**/ 0xEDDAC837, 0x4006D9FE, +/**/ 0x0209E3B7, 0x401900EE, +/**/ 0x57489C7E, 0x402D24A2, +/**/ 0x7F810E14, 0x4041CAEA, +/**/ 0x24F9675B, 0xBC84F20E, +/**/ 0xF472A690, 0x3FE7D464, +/**/ 0x00000000, 0x3FF5C000, +/**/ 0x987CD623, 0x3F43B5D3, +/**/ 0x00000000, 0x3FE5D000, +/**/ 0x66C30CDC, 0x3FF5DE05, +/**/ 0x23798D1A, 0x3FEBD788, +/**/ 0xB0E567D8, 0x3FF88835, +/**/ 0x6E46660A, 0x4007DB04, +/**/ 0xCA07CAA5, 0x401A6A9E, +/**/ 0x41ECEF64, 0x402F2B16, +/**/ 0xC36F367B, 0x40434315, +/**/ 0x542594A6, 0xBCA08CA1, +/**/ 0x5869D9E8, 0x3FE80005, +/**/ 0x00000000, 0x3FF5C000, +/**/ 0xC30CDBD9, 0x3F7E0566, +/**/ 0x00000000, 0x3FE5F000, +/**/ 0x4875FA03, 0x3FF5FA27, +/**/ 0x4CF96D63, 0x3FEC6CFE, +/**/ 0x4D7B8313, 0x3FF94B42, +/**/ 0xA1B04592, 0x4008EAA7, +/**/ 0x2C5A9D87, 0x401BED9B, +/**/ 0x1BC92F68, 0x4030AE51, +/**/ 0x685FBD64, 0x4044DF8C, +/**/ 0x30FE6378, 0xBCAC07A8, +/**/ 0x6C30303C, 0x3FE82BDD, +/**/ 0x00000000, 0x3FF60000, +/**/ 0x2817F40C, 0xBF5762DE, +/**/ 0x00000000, 0x3FE61000, +/**/ 0xF213FCD6, 0x3FF616E0, +/**/ 0xB47784FF, 0x3FED0720, +/**/ 0xE13C6707, 0x3FFA1709, +/**/ 0xE70B2E72, 0x400A09EF, +/**/ 0xE976AAD9, 0x401D8C00, +/**/ 0xD1AE1EA8, 0x4031DEBA, +/**/ 0x6424341F, 0x4046A453, +/**/ 0xA65D40B1, 0x3CA13E53, +/**/ 0x5ABA79E8, 0x3FE857EE, +/**/ 0x00000000, 0x3FF60000, +/**/ 0x13FCD614, 0x3F76E0F2, +/**/ 0x00000000, 0x3FE63000, +/**/ 0x2A8B4ED8, 0x3FF63437, +/**/ 0x3BF69915, 0x3FEDA625, +/**/ 0xFB6DF86F, 0x3FFAEC0D, +/**/ 0xCAF2D64B, 0x400B39FA, +/**/ 0xB7E2DC06, 0x401F4822, +/**/ 0xB12537E3, 0x4033291B, +/**/ 0xAF3EF0D1, 0x404895F0, +/**/ 0x71E7ED76, 0x3CAEA588, +/**/ 0x5856807C, 0x3FE88439, +/**/ 0x00000000, 0x3FF64000, +/**/ 0xE9624F1C, 0xBF6791AA, +/**/ 0x00000000, 0x3FE65000, +/**/ 0xF039F5E3, 0x3FF6522E, +/**/ 0xEA588E54, 0x3FEE4A44, +/**/ 0x77A3F8A4, 0x3FFBCAD9, +/**/ 0x3669F2F2, 0x400C7BFE, +/**/ 0x1AEA54A4, 0x40209247, +/**/ 0x6B866959, 0x4034900A, +/**/ 0x620634CF, 0x404AB97D, +/**/ 0xDA91B0FD, 0x3C948649, +/**/ 0xA316D3A0, 0x3FE8B0BF, +/**/ 0x00000000, 0x3FF64000, +/**/ 0x39F5E2AD, 0x3F722EF0, +/**/ 0x00000000, 0x3FE67000, +/**/ 0x7C2F4FC3, 0x3FF670CD, +/**/ 0x2583CF60, 0x3FEEF3BC, +/**/ 0x4A2E1684, 0x3FFCB401, +/**/ 0xDCB9F8FB, 0x400DD14A, +/**/ 0x4E164373, 0x40219209, +/**/ 0x8FC171BC, 0x40361669, +/**/ 0xA46B7BE1, 0x404D14BA, +/**/ 0xBBDFE65A, 0xBCABAC31, +/**/ 0x8344E08C, 0x3FE8DD82, +/**/ 0x00000000, 0x3FF68000, +/**/ 0xA1607A77, 0xBF6E6507, +/**/ 0x00000000, 0x3FE69000, +/**/ 0x45AA3C85, 0x3FF69018, +/**/ 0xF18FBD18, 0x3FEFA2CA, +/**/ 0x610C140E, 0x3FFDA825, +/**/ 0xF08895E1, 0x400F3B4E, +/**/ 0x272CD203, 0x4022A4E4, +/**/ 0x60C4A0EE, 0x4037BF71, +/**/ 0xEC79351D, 0x404FAE29, +/**/ 0x3E22FB0A, 0x3C6BF5BB, +/**/ 0x4BD9C858, 0x3FE90A83, +/**/ 0x00000000, 0x3FF68000, +/**/ 0xAA3C8533, 0x3F701845, +/**/ 0x00000000, 0x3FE6B000, +/**/ 0x05D92E4E, 0x3FF6B015, +/**/ 0x9ABD20D8, 0x3FF02BDA, +/**/ 0x9BC5CC13, 0x3FFEA7F1, +/**/ 0x94AFB2BB, 0x40105DCC, +/**/ 0xB382B54A, 0x4023CC8C, +/**/ 0x19C28EAE, 0x40398EBB, +/**/ 0x8F7609B5, 0x40514694, +/**/ 0xF66137E5, 0x3C9CD223, +/**/ 0x5AFE73AC, 0x3FE937C3, +/**/ 0x00000000, 0x3FF6C000, +/**/ 0x4DA36334, 0xBF6FD5F4, +/**/ 0x00000000, 0x3FE6D000, +/**/ 0xBBE1EF2B, 0x3FF6D0C9, +/**/ 0x82FBDD29, 0x3FF08961, +/**/ 0xDCD403EC, 0x3FFFB41E, +/**/ 0x121D0023, 0x401129EE, +/**/ 0xB34159B2, 0x40250AE5, +/**/ 0xDB5CEAC4, 0x403B884D, +/**/ 0xA0B334B0, 0x4052DD09, +/**/ 0xD8F14BF9, 0xBC96BF1D, +/**/ 0x1A936D24, 0x3FE96544, +/**/ 0x00000000, 0x3FF6C000, +/**/ 0xE1EF2AEE, 0x3F70C9BB, +/**/ 0x00000000, 0x3FE6F000, +/**/ 0xB13786CF, 0x3FF6F23C, +/**/ 0x7B7FC134, 0x3FF0EA20, +/**/ 0x1BD0D518, 0x400066BA, +/**/ 0x159EC945, 0x401202F9, +/**/ 0x16FF868A, 0x40266205, +/**/ 0x87398014, 0x403DB0AD, +/**/ 0x47D58711, 0x40549F33, +/**/ 0x54B11A28, 0x3C8D858F, +/**/ 0x00C1184C, 0x3FE99307, +/**/ 0x00000000, 0x3FF70000, +/**/ 0x90F2626A, 0xBF6B869D, +/**/ 0x00000000, 0x3FE71000, +/**/ 0x7E455603, 0x3FF71474, +/**/ 0x3A65655F, 0x3FF14E40, +/**/ 0x1F4AA7A1, 0x4000FA64, +/**/ 0xB946C70A, 0x4012E9F0, +/**/ 0x3CC53936, 0x4027D43A, +/**/ 0xEE087279, 0x40400675, +/**/ 0x77313CEF, 0x40569278, +/**/ 0x772D6E62, 0xBCAB1BA1, +/**/ 0x9090E874, 0x3FE9C10D, +/**/ 0x00000000, 0x3FF70000, +/**/ 0x455602D3, 0x3F74747E, +/**/ 0x00000000, 0x3FE73000, +/**/ 0x0F773DEC, 0x3FF73778, +/**/ 0x1288B243, 0x3FF1B5EC, +/**/ 0x3A853FA5, 0x40019581, +/**/ 0x6D2743E5, 0x4013DFF0, +/**/ 0x09B4B924, 0x40296415, +/**/ 0x19A59D1F, 0x4041515E, +/**/ 0xF3E53877, 0x4058BD01, +/**/ 0xFC348BAE, 0x3C962269, +/**/ 0x5A90493C, 0x3FE9EF59, +/**/ 0x00000000, 0x3FF74000, +/**/ 0x11842743, 0xBF610FE1, +/**/ 0x00000000, 0x3FE75000, +/**/ 0xAAA78140, 0x3FF75B4E, +/**/ 0x28B49576, 0x3FF22152, +/**/ 0x74D66746, 0x4002388E, +/**/ 0xA43083A8, 0x4014E62E, +/**/ 0x02885ED7, 0x402B146E, +/**/ 0x29A3BC2C, 0x4042BC45, +/**/ 0xCDAFE7E5, 0x405B25D8, +/**/ 0xF03F8A74, 0x3CA8862D, +/**/ 0xFD7DFBD8, 0x3FEA1DEB, +/**/ 0x00000000, 0x3FF74000, +/**/ 0xA7813FBA, 0x3F7B4EAA, +/**/ 0x00000000, 0x3FE77000, +/**/ 0xF4FC0008, 0x3FF77FFF, +/**/ 0xADE499E4, 0x3FF290A3, +/**/ 0xFF22FE11, 0x4002E412, +/**/ 0xD7A17943, 0x4015FDFF, +/**/ 0x8AF79AEF, 0x402CE86F, +/**/ 0x6F8EDF86, 0x40444ACA, +/**/ 0x29CF9F92, 0x405DD50A, +/**/ 0xC5865233, 0x3CA49DB0, +/**/ 0x2702BD90, 0x3FEA4CC7, +/**/ 0x00000000, 0x3FF78000, +/**/ 0xF08268E1, 0xBE6607FF, +/**/ 0x00000000, 0x3FE79000, +/**/ 0xF93D7FBC, 0x3FF7A593, +/**/ 0x1F293A81, 0x3FF30415, +/**/ 0x31649EA4, 0x400398A1, +/**/ 0xED75DA1E, 0x401728D9, +/**/ 0x7B1736CA, 0x402EE3A0, +/**/ 0x036EC9D4, 0x40460106, +/**/ 0xB3E5A09F, 0x406069E8, +/**/ 0x4E8EB882, 0xBCA79BBD, +/**/ 0x94762100, 0x3FEA7BEC, +/**/ 0x00000000, 0x3FF7C000, +/**/ 0xC280445C, 0xBF7A6C06, +/**/ 0x00000000, 0x3FE7B000, +/**/ 0x2EB4E536, 0x3FF7CC13, +/**/ 0x8BD25D7D, 0x3FF37BDE, +/**/ 0xA51DF797, 0x400456D7, +/**/ 0x103AF33E, 0x40186858, +/**/ 0x21121C2E, 0x403084F8, +/**/ 0x9D7C6DE3, 0x4047E39A, +/**/ 0xEF4C9A12, 0x40621664, +/**/ 0x39DB72FF, 0x3C804D2D, +/**/ 0x13B099B0, 0x3FEAAB5E, +/**/ 0x00000000, 0x3FF7C000, +/**/ 0x69CA6C2F, 0x3F68265D, +/**/ 0x00000000, 0x3FE7D000, +/**/ 0x809BA1CD, 0x3FF7F386, +/**/ 0xE298B2EB, 0x3FF3F83B, +/**/ 0x708A6ABE, 0x40051F62, +/**/ 0x090F77AB, 0x4019BE3F, +/**/ 0x6C13BF38, 0x4031AFE2, +/**/ 0x65FF02A8, 0x4049F7CA, +/**/ 0xDA840FE0, 0x4063F614, +/**/ 0xAB5D1A54, 0xBCA7BDE9, +/**/ 0x83EBD320, 0x3FEADB1D, +/**/ 0x00000000, 0x3FF80000, +/**/ 0xC8BC6562, 0xBF68F2FE, +/**/ 0x00000000, 0x3FE7F000, +/**/ 0x562E1E24, 0x3FF81BF7, +/**/ 0x469724DB, 0x3FF4796D, +/**/ 0x86E67917, 0x4005F2FC, +/**/ 0x2F5AE582, 0x401B2C82, +/**/ 0x65EE1919, 0x4032F505, +/**/ 0x4744D220, 0x404C438F, +/**/ 0xD66309FD, 0x40661003, +/**/ 0xFC828894, 0x3C8470C8, +/**/ 0xD6B287DC, 0x3FEB0B2C, +/**/ 0x00000000, 0x3FF80000, +/**/ 0x2E1E23E5, 0x3F7BF756, +/**/ 0x00000000, 0x3FE81000, +/**/ 0x9B70AB1D, 0x3FF8456F, +/**/ 0x6D01A674, 0x3FF4FFB7, +/**/ 0x42D7B667, 0x4006D271, +/**/ 0x05DD4055, 0x401CB549, +/**/ 0xE490CA9B, 0x40345723, +/**/ 0x47C5589B, 0x404ECD17, +/**/ 0x3D6DB036, 0x40686C46, +/**/ 0xECF23C2E, 0x4084044D, +/**/ 0x0D173A5F, 0xBC7F0990, +/**/ 0x10E12D3C, 0x3FEB3B8E, +/**/ 0x00000000, 0x3FF84000, +/**/ 0xC2AC733C, 0x3F55BE6D, +/**/ 0x00000000, 0x3FE83000, +/**/ 0xCAB97B9D, 0x3FF86FF9, +/**/ 0x04A71B42, 0x3FF58B64, +/**/ 0x20C0FB6E, 0x4007BE9E, +/**/ 0x9B426297, 0x401E5AF5, +/**/ 0x013C40EE, 0x4035D958, +/**/ 0x2215E48C, 0x4050CEA9, +/**/ 0xB8C0669A, 0x406B146B, +/**/ 0xFB8EB0FE, 0x40868C96, +/**/ 0x1FCCBAD4, 0x3CA55848, +/**/ 0x4BB8EA98, 0x3FEB6C43, +/**/ 0x00000000, 0x3FF88000, +/**/ 0x46846319, 0xBF700635, +/**/ 0x00000000, 0x3FE85000, +/**/ 0xF71469BF, 0x3FF89BA0, +/**/ 0x28717EFA, 0x3FF61CC2, +/**/ 0xAFB7BAF7, 0x4008B874, +/**/ 0xEC7286DB, 0x40201015, +/**/ 0x8329A469, 0x40377F1F, +/**/ 0x2927F0DD, 0x40525E49, +/**/ 0x5AE80CD9, 0x406E135C, +/**/ 0x40DF64FD, 0x40897364, +/**/ 0x1ED91B03, 0x3C89F53B, +/**/ 0xB6067ABC, 0x3FEB9D4E, +/**/ 0x00000000, 0x3FF88000, +/**/ 0x1469BF33, 0x3F7BA0F7, +/**/ 0x00000000, 0x3FE87000, +/**/ 0xD797DABF, 0x3FF8C870, +/**/ 0xDE42D55F, 0x3FF6B426, +/**/ 0xC0E06552, 0x4009C0FC, +/**/ 0xEB059907, 0x402103EC, +/**/ 0x49A75AA7, 0x40394C6A, +/**/ 0xB2A496D0, 0x40541A81, +/**/ 0x209CB693, 0x4070BAEE, +/**/ 0x285808C5, 0x408CC860, +/**/ 0x9B0DC6F3, 0xBCAE6D8C, +/**/ 0x955EC1C4, 0x3FEBCEB2, +/**/ 0x00000000, 0x3FF8C000, +/**/ 0x2FB57EE7, 0x3F60E1AF, +/**/ 0x00000000, 0x3FE89000, +/**/ 0xD3C502F4, 0x3FF8F675, +/**/ 0xA3BFB2E4, 0x3FF751ED, +/**/ 0xDE3987BC, 0x400AD956, +/**/ 0xB30AAD0A, 0x40220AA0, +/**/ 0x16220014, 0x403B45AB, +/**/ 0xEC84429C, 0x40560929, +/**/ 0x0D747939, 0x4072A569, +/**/ 0x5407F41E, 0x40904F10, +/**/ 0xFC269962, 0xBC675CEB, +/**/ 0x4773138C, 0x3FEC0071, +/**/ 0x00000000, 0x3FF90000, +/**/ 0x75FA1750, 0xBF631458, +/**/ 0x00000000, 0x3FE8B000, +/**/ 0x111125DF, 0x3FF925BD, +/**/ 0x0AD2B4C2, 0x3FF7F679, +/**/ 0x1359A3C8, 0x400C02BF, +/**/ 0x88857C21, 0x40232601, +/**/ 0x2515D90E, 0x403D6FEB, +/**/ 0xD421145E, 0x405830FA, +/**/ 0xFD789544, 0x4074D1D6, +/**/ 0x4B30EBF1, 0x40928561, +/**/ 0x7876F9D2, 0x3CA13E7B, +/**/ 0x437F5E74, 0x3FEC328D, +/**/ 0x00000000, 0x3FF94000, +/**/ 0xEEDA20A4, 0xBF7A42EE, +/**/ 0x00000000, 0x3FE8D000, +/**/ 0x81B9477B, 0x3FF95654, +/**/ 0x67F87779, 0x3FF8A233, +/**/ 0x14665EA0, 0x400D3E90, +/**/ 0x5A415747, 0x40245815, +/**/ 0x1D7511C0, 0x403FD0E1, +/**/ 0x01EC30FB, 0x405A99B6, +/**/ 0xDD7EE7A1, 0x40774A72, +/**/ 0x5C2F1724, 0x40951454, +/**/ 0x774A5205, 0x3C8185B3, +/**/ 0x1BD4AD0C, 0x3FEC6509, +/**/ 0x00000000, 0x3FF94000, +/**/ 0xB9477AC0, 0x3F765481, +/**/ 0x00000000, 0x3FE8F000, +/**/ 0xF50630B5, 0x3FF9884A, +/**/ 0x94B35A8D, 0x3FF9558F, +/**/ 0xD1A32B1D, 0x400E8E46, +/**/ 0x0AEC68DB, 0x4025A31F, +/**/ 0xFD21A759, 0x40413785, +/**/ 0xF56DFCA6, 0x405D4C53, +/**/ 0xF89C0F5F, 0x407A1B45, +/**/ 0xC92C8CF3, 0x40980BB3, +/**/ 0xFEB6A05E, 0xBC8696E8, +/**/ 0x7F82B8CC, 0x3FEC97E7, +/**/ 0x00000000, 0x3FF98000, +/**/ 0x0C6169C6, 0x3F6095EA, +/**/ 0x00000000, 0x3FE91000, +/**/ 0x292BC29F, 0x3FF9BBB0, +/**/ 0xC8E3D76B, 0x3FFA1109, +/**/ 0x8873C480, 0x400FF386, +/**/ 0xDE619C77, 0x402709A6, +/**/ 0x5A9417B9, 0x4042A8E9, +/**/ 0xBFE20B57, 0x4060299D, +/**/ 0xE1225431, 0x407D5283, +/**/ 0xC225406C, 0x409B7E74, +/**/ 0x74F396DB, 0xBC879431, +/**/ 0x3C239888, 0x3FECCB2B, +/**/ 0x00000000, 0x3FF9C000, +/**/ 0x50F5839F, 0xBF513F5B, +/**/ 0x00000000, 0x3FE93000, +/**/ 0xDEF4783D, 0x3FF9F094, +/**/ 0x8E300736, 0x3FFAD528, +/**/ 0xB2D4D4EE, 0x4010B80E, +/**/ 0x3F3D0057, 0x40288E84, +/**/ 0xD20263C0, 0x404440D4, +/**/ 0x26E14927, 0x4061DD42, +/**/ 0x5EF13D09, 0x4080807D, +/**/ 0xFE9E94BE, 0x409F836C, +/**/ 0xE5FD9D2D, 0xBC813C84, +/**/ 0x3FCCF104, 0x3FECFED7, +/**/ 0x00000000, 0x3FFA0000, +/**/ 0x170F854B, 0xBF6ED642, +/**/ 0x00000000, 0x3FE95000, +/**/ 0xEF70C9F9, 0x3FFA270A, +/**/ 0xD12662D9, 0x3FFBA27D, +/**/ 0xE8433B59, 0x40118304, +/**/ 0x1B4DD8D9, 0x402A34E9, +/**/ 0x58AA354C, 0x4046041F, +/**/ 0x87EB035B, 0x4063C823, +/**/ 0x7F89A6B6, 0x40829D4E, +/**/ 0xB4BED54D, 0x40A21B1A, +/**/ 0xFD8283D4, 0x3C855D66, +/**/ 0x9B2A7684, 0x3FED32EE, +/**/ 0x00000000, 0x3FFA4000, +/**/ 0x8F3606B9, 0xBF78F510, +/**/ 0x00000000, 0x3FE97000, +/**/ 0x63EA127F, 0x3FFA5F25, +/**/ 0x1460C218, 0x3FFC79A8, +/**/ 0x3D14975C, 0x40125BC0, +/**/ 0x2249DB66, 0x402C006F, +/**/ 0xED0AEFCD, 0x4047F856, +/**/ 0x2E2028D0, 0x4065F27F, +/**/ 0x6CE59595, 0x40850B95, +/**/ 0x18C497E2, 0x40A4DC23, +/**/ 0x76BA54CA, 0x3C8BDFAE, +/**/ 0x83C60554, 0x3FED6774, +/**/ 0x00000000, 0x3FFA4000, +/**/ 0xEA127F53, 0x3F7F2563, +/**/ 0x00000000, 0x3FE99000, +/**/ 0x9061CEFE, 0x3FFA98F8, +/**/ 0xCAA1F466, 0x3FFD5B53, +/**/ 0xA92630E8, 0x40134379, +/**/ 0x41E37357, 0x402DF527, +/**/ 0xD7DE2305, 0x404A23DF, +/**/ 0x1911C50F, 0x406865FE, +/**/ 0xD5CE543D, 0x4087D981, +/**/ 0x2134A322, 0x40A8192E, +/**/ 0x4FE6DAC8, 0xBC915CF9, +/**/ 0x56821F74, 0x3FED9C6C, +/**/ 0x00000000, 0x3FFA8000, +/**/ 0x61CEFDBB, 0x3F78F890, +/**/ 0x00000000, 0x3FE9B000, +/**/ 0x30F0DACC, 0x3FFAD49A, +/**/ 0xDDBFEE70, 0x3FFE483C, +/**/ 0xC4418459, 0x40143B8C, +/**/ 0xE6E7E816, 0x40300BD5, +/**/ 0x02EE200E, 0x404C8E1A, +/**/ 0x83038A03, 0x406B2DFC, +/**/ 0xD987E3D9, 0x408B1814, +/**/ 0x8827CEFA, 0x40ABEB1E, +/**/ 0xE22AFCE0, 0x3CA8829A, +/**/ 0x9A4C39D0, 0x3FEDD1D9, +/**/ 0x00000000, 0x3FFAC000, +/**/ 0xF0DACB86, 0x3F749A30, +/**/ 0x00000000, 0x3FE9D000, +/**/ 0x8A66E40D, 0x3FFB1221, +/**/ 0x692DC10A, 0x3FFF4130, +/**/ 0x64621A80, 0x4015457C, +/**/ 0xED2A1AB4, 0x4031369A, +/**/ 0xBC003A70, 0x404F3F8D, +/**/ 0x462E99D6, 0x406E57E1, +/**/ 0xC53F5717, 0x408EDBC2, +/**/ 0x0A71E453, 0x40B0383D, +/**/ 0xBEDD86A9, 0x3C90AF9F, +/**/ 0x030CF708, 0x3FEE07C0, +/**/ 0x00000000, 0x3FFB0000, +/**/ 0x66E40CBE, 0x3F72218A, +/**/ 0x00000000, 0x3FE9F000, +/**/ 0x8E9927E5, 0x3FFB51A7, +/**/ 0x581637B3, 0x40002387, +/**/ 0xF5B2C17E, 0x401662F7, +/**/ 0x36EAC07E, 0x40327DDB, +/**/ 0xC70D9C43, 0x40512110, +/**/ 0x88C52943, 0x4070F9C4, +/**/ 0xB1AB4848, 0x40919E9E, +/**/ 0xB1EC7695, 0x40B2E76B, +/**/ 0x5E9F6FD9, 0x3CAA2400, +/**/ 0x74DD3C64, 0x3FEE3E23, +/**/ 0x00000000, 0x3FFB4000, +/**/ 0x9927E571, 0x3F71A78E, +/**/ 0x00000000, 0x3FEA1000, +/**/ 0x04E0F95F, 0x3FFB9347, +/**/ 0xAC8DC27B, 0x4000AD66, +/**/ 0xAE05A580, 0x401795E1, +/**/ 0x299AA0A0, 0x4033E4FA, +/**/ 0xA33AB75C, 0x4052D0AD, +/**/ 0x39D64C89, 0x407309E5, +/**/ 0x154C34C4, 0x40942D39, +/**/ 0x59D15B1D, 0x40B61A59, +/**/ 0x114BE565, 0xBCAFC899, +/**/ 0x0787FD30, 0x3FEE7508, +/**/ 0x00000000, 0x3FFB8000, +/**/ 0xE0F95E8B, 0x3F734704, +/**/ 0x00000000, 0x3FEA3000, +/**/ 0xB75F37A1, 0x3FFBD71C, +/**/ 0xFC9006E1, 0x40013EBC, +/**/ 0xC48D2C09, 0x4018E055, +/**/ 0xC2C8C9CD, 0x40356FD7, +/**/ 0x6198B971, 0x4054B557, +/**/ 0x9680F9AF, 0x4075678C, +/**/ 0x8AF946DD, 0x40972BE5, +/**/ 0xE1B531F9, 0x40B9EDE4, +/**/ 0xE4527544, 0xBC447F69, +/**/ 0x0A61AD1C, 0x3FEEAC72, +/**/ 0x00000000, 0x3FFBC000, +/**/ 0x5F37A0DF, 0x3F771CB7, +/**/ 0x00000000, 0x3FEA5000, +/**/ 0xA5B24F80, 0x3FFC1D47, +/**/ 0x7EB9F789, 0x4001D81E, +/**/ 0xDF42B6B7, 0x401A44B2, +/**/ 0xB4766752, 0x403722E5, +/**/ 0xECFADFF0, 0x4056D6EE, +/**/ 0x8B1EB8D5, 0x40782028, +/**/ 0xCA840144, 0x409AB0E2, +/**/ 0xE2126BBF, 0x40BE8614, +/**/ 0x2CC624E2, 0xBC8D9A93, +/**/ 0x087F8D20, 0x3FEEE466, +/**/ 0x00000000, 0x3FFC0000, +/**/ 0xB24F8064, 0x3F7D47A5, +/**/ 0x00000000, 0x3FEA7000, +/**/ 0x3DE98207, 0x3FFC65E9, +/**/ 0x811F641B, 0x40027A2E, +/**/ 0xF223266D, 0x401BC5A3, +/**/ 0xA6ECBE29, 0x40390340, +/**/ 0xC3D499AF, 0x40593EB6, +/**/ 0xAD8CC2F1, 0x407B43D9, +/**/ 0xA519B816, 0x409ED77C, +/**/ 0x5B3B703B, 0x40C2080A, +/**/ 0xE993C3DD, 0x3C7B187D, +/**/ 0xCD5A7CE8, 0x3FEF1CE8, +/**/ 0x00000000, 0x3FFC8000, +/**/ 0x167DF937, 0xBF7A16C2, +/**/ 0x00000000, 0x3FEA9000, +/**/ 0x9CA2F05E, 0x3FFCB125, +/**/ 0x54FC4C95, 0x400325A1, +/**/ 0xD9C5FF75, 0x401D662B, +/**/ 0x8E93577D, 0x403B16CE, +/**/ 0xE0E3029E, 0x405BF79A, +/**/ 0x04BCDF91, 0x407EE612, +/**/ 0x31EFE3F1, 0x40A1E0AC, +/**/ 0x85DF051C, 0x40C56267, +/**/ 0x2D0BC06E, 0xBCAD6122, +/**/ 0x69EAB2F0, 0x3FEF55FF, +/**/ 0x00000000, 0x3FFCC000, +/**/ 0xBA1F43E4, 0xBF6DB4C6, +/**/ 0x00000000, 0x3FEAB000, +/**/ 0xD56B9F55, 0x3FFCFF23, +/**/ 0x86149A3B, 0x4003DB3E, +/**/ 0x0B8D0DAD, 0x401F29B3, +/**/ 0x40E9D1A7, 0x403D6463, +/**/ 0x619D6679, 0x405F0E89, +/**/ 0x92CF3FBC, 0x40818F2E, +/**/ 0x844E51BD, 0x40A4CC10, +/**/ 0xF3A9EB60, 0x40C9762D, +/**/ 0xEF4B1E02, 0x3CA20E79, +/**/ 0x3A4BC01C, 0x3FEF8FAF, +/**/ 0x00000000, 0x3FFD0000, +/**/ 0x8C156248, 0xBF2B8552, +/**/ 0x00000000, 0x3FEAD000, +/**/ 0x44AAD4F2, 0x3FFD500E, +/**/ 0x6B85DB68, 0x40049BE3, +/**/ 0xE558F351, 0x40208A0B, +/**/ 0xC1BCC632, 0x403FF3EC, +/**/ 0x2A555E45, 0x40614970, +/**/ 0xDD057F33, 0x408404AE, +/**/ 0x22610A18, 0x40A847D9, +/**/ 0x3C7AA2B4, 0x40CE7146, +/**/ 0x53CA14EC, 0xBC9571D0, +/**/ 0xEBFAA348, 0x3FEFC9FD, +/**/ 0x00000000, 0x3FFD4000, +/**/ 0xAAD4F267, 0x3F700E44, +/**/ 0x00000000, 0x3FEAF000, +/**/ 0xEC9EDC5A, 0x3FFDA412, +/**/ 0x22B6D908, 0x40056886, +/**/ 0xB605B3B4, 0x402194E0, +/**/ 0x9338560C, 0x40416754, +/**/ 0x34B16169, 0x40634B7B, +/**/ 0x3B1BAF9C, 0x4086E508, +/**/ 0xFB9DFBF5, 0x40AC7475, +/**/ 0xF4B4BB01, 0x40D2473E, +/**/ 0xE9F06EFC, 0x3CA82B31, +/**/ 0xC2613F02, 0x3FF00278, +/**/ 0x00000000, 0x3FFDC000, +/**/ 0x6123A5D1, 0xBF7BED13, +/**/ 0x00000000, 0x3FEB1000, +/**/ 0xDF3AE0DB, 0x3FFDFB63, +/**/ 0x08AD38CF, 0x40064239, +/**/ 0xAA166573, 0x4022B7DB, +/**/ 0x38210D3E, 0x4042FFB4, +/**/ 0xFB634456, 0x40659862, +/**/ 0xEE8F3E34, 0x408A45B4, +/**/ 0xD39A6C6F, 0x40B0BD59, +/**/ 0x2B4867E8, 0x40D60CCD, +/**/ 0x1CBB85B3, 0xBCA6097F, +/**/ 0x3537E800, 0x3FF02048, +/**/ 0x00000000, 0x3FFE0000, +/**/ 0x147C93ED, 0xBF527083, +/**/ 0x00000000, 0x3FEB3000, +/**/ 0xB70F5F72, 0x3FFE5637, +/**/ 0xCA935102, 0x40072A2E, +/**/ 0x43559218, 0x4023F5DE, +/**/ 0xB4E19CA3, 0x4044C96E, +/**/ 0x1272DDA3, 0x40683D62, +/**/ 0xC6BFAAED, 0x408E4135, +/**/ 0x099FB249, 0x40B3C717, +/**/ 0xD5294F7D, 0x40DABA6D, +/**/ 0xC91FFA21, 0x3CA488B1, +/**/ 0xB5B309E0, 0x3FF03E70, +/**/ 0x00000000, 0x3FFE4000, +/**/ 0x0F5F723E, 0x3F7637B7, +/**/ 0x00000000, 0x3FEB5000, +/**/ 0x21D4B842, 0x3FFEB4CA, +/**/ 0x2BE08FC5, 0x400821BF, +/**/ 0x6A6A3BD0, 0x40255238, +/**/ 0xBAC907E2, 0x4046CC00, +/**/ 0x94202458, 0x406B4A78, +/**/ 0xFE065CA6, 0x40917C35, +/**/ 0xE8D5B845, 0x40B77848, +/**/ 0x0CD72D76, 0x40E04820, +/**/ 0x9CBE508B, 0x3CA54B6E, +/**/ 0xE41C2ACE, 0x3FF05CF5, +/**/ 0x00000000, 0x3FFEC000, +/**/ 0x568F7C18, 0xBF666BBC, +/**/ 0x00000000, 0x3FEB7000, +/**/ 0x7FB6EB26, 0x3FFF175C, +/**/ 0xA7BA9C35, 0x40092A6C, +/**/ 0x80F5BA9F, 0x4026D0BC, +/**/ 0x33BD74FB, 0x40491048, +/**/ 0x61FCE21F, 0x406ED319, +/**/ 0x60DF5AED, 0x40944A2E, +/**/ 0x1AC97175, 0x40BBFAFC, +/**/ 0xC3A8BC22, 0x40E3F145, +/**/ 0xA70A42D9, 0xBC994B5D, +/**/ 0x9F358760, 0x3FF07BDB, +/**/ 0x00000000, 0x3FFF0000, +/**/ 0xB6EB2582, 0x3F775C7F, +/**/ 0x00000000, 0x3FEB9000, +/**/ 0x9B29492C, 0x3FFF7E36, +/**/ 0x1C35AD8A, 0x400A45EB, +/**/ 0xC8373BB1, 0x402875D7, +/**/ 0x885E6AE6, 0x404BA0D1, +/**/ 0x0831631E, 0x40717784, +/**/ 0x7F51DA78, 0x4097A441, +/**/ 0x6D7642FB, 0x40C0C2B2, +/**/ 0x594961FB, 0x40E89073, +/**/ 0x96CDC181, 0xBCA5DECE, +/**/ 0x0A46374E, 0x3FF09B26, +/**/ 0x00000000, 0x3FFF8000, +/**/ 0x6B6D3D05, 0xBF3C964D, +/**/ 0x00000000, 0x3FEBB000, +/**/ 0x7DD9B1CF, 0x3FFFE9A7, +/**/ 0xB9AE77AF, 0x400B7627, +/**/ 0x3338306D, 0x402A46B0, +/**/ 0xA0CAACE9, 0x404E8A38, +/**/ 0x864F53A2, 0x4073DDBB, +/**/ 0xD6C97F8D, 0x409BAAF0, +/**/ 0xDFAE5A98, 0x40C42EEF, +/**/ 0xE19501DA, 0x40EE701A, +/**/ 0xC7D3D675, 0x3C9CC4F4, +/**/ 0x93EC49AE, 0x3FF0BAD9, +/**/ 0x00000000, 0x40000000, +/**/ 0x264E310D, 0xBF765882, +/**/ 0x00000000, 0x3FEBD000, +/**/ 0x34302F3B, 0x40002D03, +/**/ 0x7F5AAF0D, 0x400CBD52, +/**/ 0x0C635C0A, 0x402C4949, +/**/ 0xB6BB1732, 0x4050EDD1, +/**/ 0x9691A9F4, 0x4076AE3D, +/**/ 0x61482FC6, 0x40A043C7, +/**/ 0xF81EB6E0, 0x40C87037, +/**/ 0xE84FE55E, 0x40F2FA30, +/**/ 0x228FC41D, 0xBC9820F1, +/**/ 0xFDD4AE68, 0x3FF0DAFA, +/**/ 0x00000000, 0x40002000, +/**/ 0x605E76B0, 0x3F7A0668, +/**/ 0x00000000, 0x3FEBF000, +/**/ 0xF9C947A3, 0x400067D9, +/**/ 0xA1722882, 0x400E1DE9, +/**/ 0x41FE0247, 0x402E84B0, +/**/ 0xDBD1D676, 0x4052D3AE, +/**/ 0xE088BEF5, 0x4079FF78, +/**/ 0x64D9A484, 0x40A33780, +/**/ 0x1974F9B5, 0x40CDC32D, +/**/ 0xCE268611, 0x40F7D295, +/**/ 0xD437D23F, 0xBCA5A192, +/**/ 0x657EFDCA, 0x3FF0FB8F, +/**/ 0x00000000, 0x40006000, +/**/ 0x251E8CF3, 0x3F6F67E7, +/**/ 0x00000000, 0x3FEC1000, +/**/ 0xB1FFFA6D, 0x4000A58D, +/**/ 0x4E7307C3, 0x400F9AC7, +/**/ 0x5EA15962, 0x4030809B, +/**/ 0x5418E1B6, 0x405501D0, +/**/ 0xB476D79F, 0x407DED80, +/**/ 0x37F33D5F, 0x40A6D2BF, +/**/ 0xA43F6C6F, 0x40D23C31, +/**/ 0xDB17BBAA, 0x40FE1E46, +/**/ 0x41D8AD56, 0xBCA7EB62, +/**/ 0x4E3ADE0A, 0x3FF11C9C, +/**/ 0x00000000, 0x4000A000, +/**/ 0xFFE9B457, 0x3F6636C7, +/**/ 0x00000000, 0x3FEC3000, +/**/ 0x1D1BDCC6, 0x4000E65A, +/**/ 0x3503CCCE, 0x40109B99, +/**/ 0x7580EC24, 0x4031E45B, +/**/ 0x1803E176, 0x405785CA, +/**/ 0x8458A77D, 0x40814DDB, +/**/ 0x6C115AB7, 0x40AB41D9, +/**/ 0xD7BCE584, 0x40D67DF0, +/**/ 0xF5487646, 0x41032EF5, +/**/ 0xF3631254, 0xBC9C4040, +/**/ 0xAC964DA8, 0x3FF13E27, +/**/ 0x00000000, 0x4000E000, +/**/ 0x6F731770, 0x3F696874, +/**/ 0x00000000, 0x3FEC5000, +/**/ 0x068FBCB4, 0x40012A82, +/**/ 0x7FE89A5F, 0x40117B79, +/**/ 0xD37F3897, 0x40337376, +/**/ 0xDF3B47A2, 0x405A704E, +/**/ 0xEB114449, 0x40841B83, +/**/ 0x8D323120, 0x40B05F75, +/**/ 0x8AE65DDD, 0x40DBEFEC, +/**/ 0xD1814341, 0x4108A2A2, +/**/ 0xFB25EC76, 0x3CA3E83D, +/**/ 0xF37FFEDA, 0x3FF16037, +/**/ 0x00000000, 0x40012000, +/**/ 0x1F796787, 0x3F75040D, +/**/ 0x00000000, 0x3FEC7000, +/**/ 0x5F8F574B, 0x40017250, +/**/ 0xB566493D, 0x40126F35, +/**/ 0x95186E3D, 0x403534F5, +/**/ 0x947D5EA5, 0x405DD60B, +/**/ 0x568C5D73, 0x40877C77, +/**/ 0xA26261F0, 0x40B3CB66, +/**/ 0xBF32194D, 0x40E17B06, +/**/ 0x11490E42, 0x410FE921, +/**/ 0x5376CB61, 0xBCA34428, +/**/ 0x236FE314, 0x3FF182D4, +/**/ 0x00000000, 0x40018000, +/**/ 0xE15169A9, 0xBF7B5F40, +/**/ 0x00000000, 0x3FEC9000, +/**/ 0x91B4C8D8, 0x4001BE19, +/**/ 0xBE69BAE6, 0x4013795B, +/**/ 0xCD6F8B02, 0x40373151, +/**/ 0xD86A7BFF, 0x4060E864, +/**/ 0x515F5BD6, 0x408B95CC, +/**/ 0xD070B4A1, 0x40B8180C, +/**/ 0xC9B24D80, 0x40E60D2C, +/**/ 0xAA392CAF, 0x4114DBF6, +/**/ 0xF5844C55, 0xBCA89BD0, +/**/ 0xDBFAF236, 0x3FF1A603, +/**/ 0x00000000, 0x4001C000, +/**/ 0xB37285FC, 0xBF4E66E4, +/**/ 0x00000000, 0x3FECB000, +/**/ 0x1757F6B1, 0x40020E3D, +/**/ 0xAE890640, 0x40149CE9, +/**/ 0xD6174F60, 0x403972D4, +/**/ 0x8C82DF92, 0x40634079, +/**/ 0xACAB5569, 0x40904BE6, +/**/ 0xB362E75A, 0x40BD8A99, +/**/ 0x389374DC, 0x40EC0ED7, +/**/ 0xCA5E9653, 0x411B8ADF, +/**/ 0x4A1E3E49, 0xBC80CBC7, +/**/ 0x704F5D26, 0x3FF1C9CF, +/**/ 0x00000000, 0x40020000, +/**/ 0xAFED62A2, 0x3F7C7A2E, +/**/ 0x00000000, 0x3FECD000, +/**/ 0x6B3395AA, 0x40026327, +/**/ 0x33FB1467, 0x4015DD66, +/**/ 0xDCF3437C, 0x403C0610, +/**/ 0xC9D7C47A, 0x406607CE, +/**/ 0xA330DC5C, 0x409360FB, +/**/ 0x38A3194B, 0x40C240B4, +/**/ 0xBAA6A879, 0x40F20437, +/**/ 0x04D6F19C, 0x41226106, +/**/ 0x15E5252C, 0x3CABCCF5, +/**/ 0xFF35681A, 0x3FF1EE3F, +/**/ 0x00000000, 0x40026000, +/**/ 0x9CAD4CE9, 0x3F593B59, +/**/ 0x00000000, 0x3FECF000, +/**/ 0x664A8350, 0x4002BD54, +/**/ 0x945190A0, 0x40173EFF, +/**/ 0xC7CC5224, 0x403EFA80, +/**/ 0x896F1658, 0x406958AA, +/**/ 0x4FD54E04, 0x40973450, +/**/ 0x4CD60C4A, 0x40C6BF55, +/**/ 0x3EFFD07C, 0x40F75EBE, +/**/ 0x9E2E6981, 0x4128D03C, +/**/ 0xC8A488FF, 0xBC987CEE, +/**/ 0x8F597306, 0x3FF2135F, +/**/ 0x00000000, 0x4002C000, +/**/ 0xABE583FE, 0xBF555CCD, +/**/ 0x00000000, 0x3FED1000, +/**/ 0x2A40EA5C, 0x40031D52, +/**/ 0x52B4947D, 0x4018C6B3, +/**/ 0x5D01146E, 0x404131AE, +/**/ 0x0163E71C, 0x406D54FB, +/**/ 0xEF3ED15B, 0x409BFE8A, +/**/ 0xA33A6B00, 0x40CC9C28, +/**/ 0x1456E1A6, 0x40FEA523, +/**/ 0xFC8790DB, 0x4130F60F, +/**/ 0x6FABCA41, 0x3CAC104F, +/**/ 0x30D87C68, 0x3FF23939, +/**/ 0x00000000, 0x40032000, +/**/ 0xF8AD1CF9, 0xBF556EAD, +/**/ 0x00000000, 0x3FED3000, +/**/ 0xC053C623, 0x400383C4, +/**/ 0x6ADBFF2C, 0x401A7A81, +/**/ 0xE219A24E, 0x40432C5B, +/**/ 0x30F4B8D8, 0x40711484, +/**/ 0xBC59423E, 0x40A10659, +/**/ 0x3D537AE5, 0x40D22C09, +/**/ 0xA4B7D930, 0x410454A2, +/**/ 0xC151F3C3, 0x41378151, +/**/ 0x779E9951, 0xBCA2F226, +/**/ 0x254E3F9C, 0x3FF25FD9, +/**/ 0x00000000, 0x40038000, +/**/ 0x9E311A8B, 0x3F5E2602, +/**/ 0x00000000, 0x3FED5000, +/**/ 0xA2F65F8C, 0x4003F16A, +/**/ 0x36C0308E, 0x401C61AF, +/**/ 0x5337FF7D, 0x40457C82, +/**/ 0x7FB84BA9, 0x407407A3, +/**/ 0x4C74DEA7, 0x40A4E476, +/**/ 0xDF1C2124, 0x40D75638, +/**/ 0xA2556E94, 0x410B5320, +/**/ 0x7D68ABBE, 0x414087CD, +/**/ 0x73A87AB9, 0xBCACD58C, +/**/ 0x10017B06, 0x3FF2874D, +/**/ 0x00000000, 0x40040000, +/**/ 0x1340E849, 0xBF7D2ABA, +/**/ 0x00000000, 0x3FED7000, +/**/ 0x7BA9A810, 0x40046722, +/**/ 0xCBC74735, 0x401E851F, +/**/ 0xF3879985, 0x40483596, +/**/ 0xCD297F00, 0x4077AAEB, +/**/ 0x31669F50, 0x40A9E3C8, +/**/ 0xB7CBB664, 0x40DE5420, +/**/ 0xB75100A0, 0x41129F7B, +/**/ 0x51D127BF, 0x4147A1C1, +/**/ 0x46D9C78F, 0x3CAC647E, +/**/ 0x304962AE, 0x3FF2AFA4, +/**/ 0x00000000, 0x40046000, +/**/ 0xA6A041C9, 0x3F6C89EE, +/**/ 0x00000000, 0x3FED9000, +/**/ 0x7A99A835, 0x4004E5F2, +/**/ 0x15B0232D, 0x402077E5, +/**/ 0xEE468866, 0x404B70C1, +/**/ 0x43A041C3, 0x407C334A, +/**/ 0x53D2C164, 0x40B036D1, +/**/ 0x10CCEDBE, 0x40E3F7B1, +/**/ 0xF6C2E560, 0x4119C160, +/**/ 0x6D21D20F, 0x415131DD, +/**/ 0x2EC50766, 0x41878683, +/**/ 0xD1134ECC, 0xBCA95596, +/**/ 0xA8F4B028, 0x3FF2D8EF, +/**/ 0x00000000, 0x4004E000, +/**/ 0x66A0D2C7, 0x3F67C9EA, +/**/ 0x00000000, 0x3FEDB000, +/**/ 0xD6373B90, 0x40056F11, +/**/ 0xC3747DF3, 0x4021D7AC, +/**/ 0x6A014D6F, 0x404F4EF3, +/**/ 0x505C454B, 0x4080F4C4, +/**/ 0x214975C5, 0x40B48D16, +/**/ 0xF57BFAC6, 0x40EAACFD, +/**/ 0x5225A6ED, 0x41222235, +/**/ 0xACBA67AB, 0x41598643, +/**/ 0xDE5D19B9, 0x419267B9, +/**/ 0x42C92439, 0xBCAEF63C, +/**/ 0xD86BED76, 0x3FF30342, +/**/ 0x00000000, 0x40056000, +/**/ 0x6E771F48, 0x3F7E23AC, +/**/ 0x00000000, 0x3FEDD000, +/**/ 0x3D2D8CF1, 0x400603F5, +/**/ 0xEF4A10FA, 0x40236A84, +/**/ 0x4EA265AF, 0x4051FDF3, +/**/ 0xD944F636, 0x408499B5, +/**/ 0x37F73BAC, 0x40BA64B8, +/**/ 0x259B27FC, 0x40F21B9F, +/**/ 0x265D5B9F, 0x412A0669, +/**/ 0x3DC806E2, 0x41635D8E, +/**/ 0x36AD8B00, 0x419D8657, +/**/ 0x3FFCDCA3, 0x3CA4CEEB, +/**/ 0xC69D2D10, 0x3FF32EB3, +/**/ 0x00000000, 0x40060000, +/**/ 0x6C678625, 0x3F5FA9E9, +/**/ 0x00000000, 0x3FEDF000, +/**/ 0x5FCDF915, 0x4006A65F, +/**/ 0x68321BDA, 0x40253B6E, +/**/ 0x706E8DA9, 0x4054D949, +/**/ 0x4A70D2D7, 0x408950EF, +/**/ 0x1F15E14E, 0x40C13319, +/**/ 0x846A9BD5, 0x40F907B1, +/**/ 0x17C39016, 0x4133139C, +/**/ 0xBC86F11B, 0x416E1DA3, +/**/ 0xD9F86F3B, 0x41A8597F, +/**/ 0x7D0D5190, 0x3C32D4F8, +/**/ 0xAFA88354, 0x3FF35B5B, +/**/ 0x00000000, 0x4006A000, +/**/ 0x37E455FD, 0x3F697D7F, +/**/ 0x00000000, 0x3FEE1000, +/**/ 0x41D1DBF9, 0x40075877, +/**/ 0xF5852184, 0x402758A8, +/**/ 0x65C0F467, 0x405861EE, +/**/ 0xD2D91276, 0x408F83C0, +/**/ 0x43EC3B0E, 0x40C6CA7C, +/**/ 0x718322C8, 0x4101A722, +/**/ 0x9533D806, 0x413CA4C6, +/**/ 0xE9899583, 0x417812B7, +/**/ 0x85EE8B86, 0x41B4B875, +/**/ 0xD1AEEED1, 0xBC99DEFB, +/**/ 0xB510476E, 0x3FF38957, +/**/ 0x00000000, 0x40076000, +/**/ 0xB8901BF9, 0xBF6E22F8, +/**/ 0x00000000, 0x3FEE3000, +/**/ 0xE1C37E57, 0x40081CE6, +/**/ 0xD3DC9910, 0x4029D4F3, +/**/ 0xE3095065, 0x405CD074, +/**/ 0xC5C38224, 0x4093E764, +/**/ 0x3CAE1F31, 0x40CEC5AE, +/**/ 0xC0645F38, 0x41097A50, +/**/ 0xD8A7F25E, 0x41461866, +/**/ 0x8C2F04A3, 0x4183DAF5, +/**/ 0xA9143C1F, 0x41C2450E, +/**/ 0x9FD995BC, 0x3C7D25BE, +/**/ 0xC35D33E6, 0x3FF3B8C9, +/**/ 0x00000000, 0x40082000, +/**/ 0xE40D49E0, 0xBF58C8F1, +/**/ 0x00000000, 0x3FEE5000, +/**/ 0x285640BB, 0x4008F706, +/**/ 0x3B2B7CD1, 0x402CC96B, +/**/ 0xC5341328, 0x40613ADF, +/**/ 0x16E928A9, 0x4099908D, +/**/ 0x7CC08A3C, 0x40D53986, +/**/ 0x31DD3E45, 0x4112DFC5, +/**/ 0xE2A13787, 0x41519499, +/**/ 0xF94424AD, 0x4190F943, +/**/ 0xCDCD49BE, 0x41D0C6BC, +/**/ 0x6D41701D, 0xBC9E2458, +/**/ 0xC088BD28, 0x3FF3E9D9, +/**/ 0x00000000, 0x40090000, +/**/ 0x537E8A00, 0xBF71F3AF, +/**/ 0x00000000, 0x3FEE7000, +/**/ 0x6562D1E0, 0x4009EB18, +/**/ 0x75651223, 0x40302C31, +/**/ 0x336E41C7, 0x4064E431, +/**/ 0xA065DA69, 0x40A0BCA6, +/**/ 0x917AF357, 0x40DE034D, +/**/ 0x4168FB0F, 0x411CD2C1, +/**/ 0x15BB794D, 0x415CFEB6, +/**/ 0x6EFFD5E5, 0x419E3EE1, +/**/ 0x1ACB4D9C, 0x41E024E7, +/**/ 0xD93F153F, 0xBC9C29C8, +/**/ 0x2183E810, 0x3FF41CB7, +/**/ 0x00000000, 0x4009E000, +/**/ 0xC5A3C038, 0x3F7630CA, +/**/ 0x00000000, 0x3FEE9000, +/**/ 0xA364196F, 0x400AFEA6, +/**/ 0x0B19A2EB, 0x403258F3, +/**/ 0x2520AC75, 0x4069BDA5, +/**/ 0x8F67EDEA, 0x40A669BC, +/**/ 0xC026C9F8, 0x40E5D78C, +/**/ 0x1E3B36C2, 0x4126CCB4, +/**/ 0xBF45C805, 0x4168EDE4, +/**/ 0x8AC89E76, 0x41AC2F6A, +/**/ 0x4CA9EB55, 0x41F0675E, +/**/ 0x0D13E3DF, 0x42336AC1, +/**/ 0xF2DE93A6, 0x3C9B1D74, +/**/ 0x155FB22E, 0x3FF4519B, +/**/ 0x00000000, 0x400B0000, +/**/ 0xBE690E67, 0xBF4595C9, +/**/ 0x00000000, 0x3FEEB000, +/**/ 0x4BD1C065, 0x400C3908, +/**/ 0x26C39FFD, 0x40350D88, +/**/ 0x69D3E79E, 0x4070296B, +/**/ 0xD7FEEA5D, 0x40AED279, +/**/ 0xFD5BD547, 0x40F072A8, +/**/ 0x4A08BB38, 0x4132CDB9, +/**/ 0x536BED06, 0x41768482, +/**/ 0x2F10E88D, 0x41BBE1FF, +/**/ 0xABDBBDAC, 0x4201C966, +/**/ 0x02E62DDA, 0x42471011, +/**/ 0x3E907E71, 0xBCA0855D, +/**/ 0x8FA73920, 0x3FF488CB, +/**/ 0x00000000, 0x400C4000, +/**/ 0xB8FE6DDF, 0xBF6BDED0, +/**/ 0x00000000, 0x3FEED000, +/**/ 0x12AAF9A9, 0x400DA439, +/**/ 0x62F25109, 0x40387D46, +/**/ 0x3F133A3F, 0x4074C339, +/**/ 0x662036F9, 0x40B5E143, +/**/ 0x74467831, 0x40F9CF04, +/**/ 0x576C6FA8, 0x41404E10, +/**/ 0xFF4F8E88, 0x41859489, +/**/ 0xB44962A9, 0x41CD88D2, +/**/ 0x97A288F3, 0x4214D838, +/**/ 0x6CF738B3, 0x425DE10B, +/**/ 0x5F7263CC, 0xBC8E9EA7, +/**/ 0xAA786F36, 0x3FF4C29F, +/**/ 0x00000000, 0x400DA000, +/**/ 0xABE6A2AD, 0x3F60E44A, +/**/ 0x00000000, 0x3FEEF000, +/**/ 0xC169B52F, 0x400F4E35, +/**/ 0x29E8699C, 0x403CF773, +/**/ 0xFC1818D6, 0x407B6D37, +/**/ 0x1386790A, 0x40C02655, +/**/ 0x4FF79D1E, 0x41054A1F, +/**/ 0x7DB0265A, 0x414E104A, +/**/ 0xE5C8114B, 0x41963C39, +/**/ 0xF52A87DB, 0x41E10156, +/**/ 0x2E9E7ABE, 0x422ADD76, +/**/ 0x6EC81361, 0x427586AB, +/**/ 0xE395EEA6, 0x3C935690, +/**/ 0x2E5965A2, 0x3FF4FF86, +/**/ 0x00000000, 0x400F4000, +/**/ 0xD36A5E70, 0x3F7C6B82 } }; + +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/atnat.h glibc-2.2.3/sysdeps/ieee754/dbl-64/atnat.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/atnat.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/atnat.h Sun Mar 11 23:06:14 2001 @@ -0,0 +1,166 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: atnat.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ +#ifndef ATNAT_H +#define ATNAT_H + +#define M 4 + +#ifdef BIG_ENDI + static const number + /* polynomial I */ +/**/ d3 = {{0xbfd55555, 0x55555555} }, /* -0.333... */ +/**/ d5 = {{0x3fc99999, 0x999997fd} }, /* 0.199... */ +/**/ d7 = {{0xbfc24924, 0x923f7603} }, /* -0.142... */ +/**/ d9 = {{0x3fbc71c6, 0xe5129a3b} }, /* 0.111... */ +/**/ d11 = {{0xbfb74580, 0x22b13c25} }, /* -0.090... */ +/**/ d13 = {{0x3fb375f0, 0x8b31cbce} }, /* 0.076... */ + /* polynomial II */ +/**/ f3 = {{0xbfd55555, 0x55555555} }, /* -1/3 */ +/**/ ff3 = {{0xbc755555, 0x55555555} }, /* -1/3-f3 */ +/**/ f5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ +/**/ ff5 = {{0xbc699999, 0x9999999a} }, /* 1/5-f5 */ +/**/ f7 = {{0xbfc24924, 0x92492492} }, /* -1/7 */ +/**/ ff7 = {{0xbc624924, 0x92492492} }, /* -1/7-f7 */ +/**/ f9 = {{0x3fbc71c7, 0x1c71c71c} }, /* 1/9 */ +/**/ ff9 = {{0x3c5c71c7, 0x1c71c71c} }, /* 1/9-f9 */ +/**/ f11 = {{0xbfb745d1, 0x745d1746} }, /* -1/11 */ +/**/ f13 = {{0x3fb3b13b, 0x13b13b14} }, /* 1/13 */ +/**/ f15 = {{0xbfb11111, 0x11111111} }, /* -1/15 */ +/**/ f17 = {{0x3fae1e1e, 0x1e1e1e1e} }, /* 1/17 */ +/**/ f19 = {{0xbfaaf286, 0xbca1af28} }, /* -1/19 */ + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ a = {{0x3e4bb67a, 0x00000000} }, /* 1.290e-8 */ +/**/ b = {{0x3fb00000, 0x00000000} }, /* 1/16 */ +/**/ c = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ d = {{0x40300000, 0x00000000} }, /* 16 */ +/**/ e = {{0x43349ff2, 0x00000000} }, /* 5.805e15 */ +/**/ hpi = {{0x3ff921fb, 0x54442d18} }, /* pi/2 */ +/**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */ +/**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */ +/**/ u1 = {{0x3c2d3382, 0x00000000} }, /* 7.915e-19 */ +/**/ u21 = {{0x3c6dffc0, 0x00000000} }, /* 1.301e-17 */ +/**/ u22 = {{0x3c527bd0, 0x00000000} }, /* 4.008e-18 */ +/**/ u23 = {{0x3c3cd057, 0x00000000} }, /* 1.562e-18 */ +/**/ u24 = {{0x3c329cdf, 0x00000000} }, /* 1.009e-18 */ +/**/ u31 = {{0x3c3a1edf, 0x00000000} }, /* 1.416e-18 */ +/**/ u32 = {{0x3c33f0e1, 0x00000000} }, /* 1.081e-18 */ +/**/ u4 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ +/**/ u5 = {{0x3aaef2d1, 0x00000000} }, /* 5e-26 */ +/**/ u6 = {{0x3a98c56d, 0x00000000} }, /* 2.001e-26 */ +/**/ u7 = {{0x3a9375de, 0x00000000} }, /* 1.572e-26 */ +/**/ u8 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ +/**/ u9[M] ={{{0x38c1aa5b, 0x00000000} }, /* 2.658e-35 */ +/**/ {{0x35c1aa4d, 0x00000000} }, /* 9.443e-50 */ +/**/ {{0x32c1aa88, 0x00000000} }, /* 3.355e-64 */ +/**/ {{0x11c1aa56, 0x00000000} }},/* 3.818e-223 */ +/**/ two8 = {{0x40700000, 0x00000000} }, /* 2**8=256 */ +/**/ two52 = {{0x43300000, 0x00000000} }; /* 2**52 */ + +#else +#ifdef LITTLE_ENDI + static const number + /* polynomial I */ +/**/ d3 = {{0x55555555, 0xbfd55555} }, /* -0.333... */ +/**/ d5 = {{0x999997fd, 0x3fc99999} }, /* 0.199... */ +/**/ d7 = {{0x923f7603, 0xbfc24924} }, /* -0.142... */ +/**/ d9 = {{0xe5129a3b, 0x3fbc71c6} }, /* 0.111... */ +/**/ d11 = {{0x22b13c25, 0xbfb74580} }, /* -0.090... */ +/**/ d13 = {{0x8b31cbce, 0x3fb375f0} }, /* 0.076... */ + /* polynomial II */ +/**/ f3 = {{0x55555555, 0xbfd55555} }, /* -1/3 */ +/**/ ff3 = {{0x55555555, 0xbc755555} }, /* -1/3-f3 */ +/**/ f5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ +/**/ ff5 = {{0x9999999a, 0xbc699999} }, /* 1/5-f5 */ +/**/ f7 = {{0x92492492, 0xbfc24924} }, /* -1/7 */ +/**/ ff7 = {{0x92492492, 0xbc624924} }, /* -1/7-f7 */ +/**/ f9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */ +/**/ ff9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-f9 */ +/**/ f11 = {{0x745d1746, 0xbfb745d1} }, /* -1/11 */ +/**/ f13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */ +/**/ f15 = {{0x11111111, 0xbfb11111} }, /* -1/15 */ +/**/ f17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */ +/**/ f19 = {{0xbca1af28, 0xbfaaf286} }, /* -1/19 */ + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ a = {{0x00000000, 0x3e4bb67a} }, /* 1.290e-8 */ +/**/ b = {{0x00000000, 0x3fb00000} }, /* 1/16 */ +/**/ c = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ d = {{0x00000000, 0x40300000} }, /* 16 */ +/**/ e = {{0x00000000, 0x43349ff2} }, /* 5.805e15 */ +/**/ hpi = {{0x54442d18, 0x3ff921fb} }, /* pi/2 */ +/**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */ +/**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */ +/**/ u1 = {{0x00000000, 0x3c2d3382} }, /* 7.915e-19 */ +/**/ u21 = {{0x00000000, 0x3c6dffc0} }, /* 1.301e-17 */ +/**/ u22 = {{0x00000000, 0x3c527bd0} }, /* 4.008e-18 */ +/**/ u23 = {{0x00000000, 0x3c3cd057} }, /* 1.562e-18 */ +/**/ u24 = {{0x00000000, 0x3c329cdf} }, /* 1.009e-18 */ +/**/ u31 = {{0x00000000, 0x3c3a1edf} }, /* 1.416e-18 */ +/**/ u32 = {{0x00000000, 0x3c33f0e1} }, /* 1.081e-18 */ +/**/ u4 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ +/**/ u5 = {{0x00000000, 0x3aaef2d1} }, /* 5e-26 */ +/**/ u6 = {{0x00000000, 0x3a98c56d} }, /* 2.001e-26 */ +/**/ u7 = {{0x00000000, 0x3a9375de} }, /* 1.572e-26 */ +/**/ u8 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ +/**/ u9[M] ={{{0x00000000, 0x38c1aa5b} }, /* 2.658e-35 */ +/**/ {{0x00000000, 0x35c1aa4d} }, /* 9.443e-50 */ +/**/ {{0x00000000, 0x32c1aa88} }, /* 3.355e-64 */ +/**/ {{0x00000000, 0x11c1aa56} }},/* 3.818e-223 */ +/**/ two8 = {{0x00000000, 0x40700000} }, /* 2**8=256 */ +/**/ two52 = {{0x00000000, 0x43300000} }; /* 2**52 */ + +#endif +#endif + +#define ZERO zero.d +#define ONE one.d +#define A a.d +#define B b.d +#define C c.d +#define D d.d +#define E e.d +#define HPI hpi.d +#define MHPI mhpi.d +#define HPI1 hpi1.d +#define U1 u1.d +#define U21 u21.d +#define U22 u22.d +#define U23 u23.d +#define U24 u24.d +#define U31 u31.d +#define U32 u32.d +#define U4 u4.d +#define U5 u5.d +#define U6 u6.d +#define U7 u7.d +#define U8 u8.d +#define TWO8 two8.d +#define TWO52 two52.d + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/atnat2.h glibc-2.2.3/sysdeps/ieee754/dbl-64/atnat2.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/atnat2.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/atnat2.h Sun Mar 11 22:40:54 2001 @@ -0,0 +1,183 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: atnat2.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ + + + +#ifndef ATNAT2_H +#define ATNAT2_H + + +#define MM 5 +#ifdef BIG_ENDI + + static const number + /* polynomial I */ +/**/ d3 = {{0xbfd55555, 0x55555555} }, /* -0.333... */ +/**/ d5 = {{0x3fc99999, 0x999997fd} }, /* 0.199... */ +/**/ d7 = {{0xbfc24924, 0x923f7603} }, /* -0.142... */ +/**/ d9 = {{0x3fbc71c6, 0xe5129a3b} }, /* 0.111... */ +/**/ d11 = {{0xbfb74580, 0x22b13c25} }, /* -0.090... */ +/**/ d13 = {{0x3fb375f0, 0x8b31cbce} }, /* 0.076... */ + /* polynomial II */ +/**/ f3 = {{0xbfd55555, 0x55555555} }, /* -1/3 */ +/**/ ff3 = {{0xbc755555, 0x55555555} }, /* -1/3-f3 */ +/**/ f5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ +/**/ ff5 = {{0xbc699999, 0x9999999a} }, /* 1/5-f5 */ +/**/ f7 = {{0xbfc24924, 0x92492492} }, /* -1/7 */ +/**/ ff7 = {{0xbc624924, 0x92492492} }, /* -1/7-f7 */ +/**/ f9 = {{0x3fbc71c7, 0x1c71c71c} }, /* 1/9 */ +/**/ ff9 = {{0x3c5c71c7, 0x1c71c71c} }, /* 1/9-f9 */ +/**/ f11 = {{0xbfb745d1, 0x745d1746} }, /* -1/11 */ +/**/ f13 = {{0x3fb3b13b, 0x13b13b14} }, /* 1/13 */ +/**/ f15 = {{0xbfb11111, 0x11111111} }, /* -1/15 */ +/**/ f17 = {{0x3fae1e1e, 0x1e1e1e1e} }, /* 1/17 */ +/**/ f19 = {{0xbfaaf286, 0xbca1af28} }, /* -1/19 */ + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ mzero = {{0x80000000, 0x00000000} }, /* -0 */ +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ inv16 = {{0x3fb00000, 0x00000000} }, /* 1/16 */ +/**/ opi = {{0x400921fb, 0x54442d18} }, /* pi */ +/**/ opi1 = {{0x3ca1a626, 0x33145c07} }, /* pi-opi */ +/**/ mopi = {{0xc00921fb, 0x54442d18} }, /* -pi */ +/**/ hpi = {{0x3ff921fb, 0x54442d18} }, /* pi/2 */ +/**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */ +/**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */ +/**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */ +/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */ +/**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */ +/**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */ +/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */ +/**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */ +/**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */ +/**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ +/**/ u3 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ +/**/ u4 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ +/**/ u5 = {{0x3aaef2d1, 0x00000000} }, /* 5e-26 */ +/**/ u6 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ +/**/ u7 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ +/**/ u8 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ +/**/ u91 = {{0x3c6dffc0, 0x00000000} }, /* 1.301e-17 */ +/**/ u92 = {{0x3c527bd0, 0x00000000} }, /* 4.008e-18 */ +/**/ u93 = {{0x3c3cd057, 0x00000000} }, /* 1.562e-18 */ +/**/ u94 = {{0x3c329cdf, 0x00000000} }, /* 1.009e-18 */ +/**/ ua1 = {{0x3c3a1edf, 0x00000000} }, /* 1.416e-18 */ +/**/ ua2 = {{0x3c33f0e1, 0x00000000} }, /* 1.081e-18 */ +/**/ ub = {{0x3a98c56d, 0x00000000} }, /* 2.001e-26 */ +/**/ uc = {{0x3a9375de, 0x00000000} }, /* 1.572e-26 */ +/**/ ud[MM] ={{{0x38c6eddf, 0x00000000} }, /* 3.450e-35 */ +/**/ {{0x35c6ef60, 0x00000000} }, /* 1.226e-49 */ +/**/ {{0x32c6ed2f, 0x00000000} }, /* 4.354e-64 */ +/**/ {{0x23c6eee8, 0x00000000} }, /* 2.465e-136 */ +/**/ {{0x11c6ed16, 0x00000000} }},/* 4.955e-223 */ +/**/ ue = {{0x38900e9d, 0x00000000} }, /* 3.02e-36 */ +/**/ two8 = {{0x40700000, 0x00000000} }, /* 2**8=256 */ +/**/ two52 = {{0x43300000, 0x00000000} }, /* 2**52 */ +/**/ two500 = {{0x5f300000, 0x00000000} }, /* 2**500 */ +/**/ twom500 = {{0x20b00000, 0x00000000} }, /* 2**(-500) */ +/**/ twom1022 = {{0x00100000, 0x00000000} }; /* 2**(-1022) */ + +#else +#ifdef LITTLE_ENDI + + static const number + /* polynomial I */ +/**/ d3 = {{0x55555555, 0xbfd55555} }, /* -0.333... */ +/**/ d5 = {{0x999997fd, 0x3fc99999} }, /* 0.199... */ +/**/ d7 = {{0x923f7603, 0xbfc24924} }, /* -0.142... */ +/**/ d9 = {{0xe5129a3b, 0x3fbc71c6} }, /* 0.111... */ +/**/ d11 = {{0x22b13c25, 0xbfb74580} }, /* -0.090... */ +/**/ d13 = {{0x8b31cbce, 0x3fb375f0} }, /* 0.076... */ + /* polynomial II */ +/**/ f3 = {{0x55555555, 0xbfd55555} }, /* -1/3 */ +/**/ ff3 = {{0x55555555, 0xbc755555} }, /* -1/3-f3 */ +/**/ f5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ +/**/ ff5 = {{0x9999999a, 0xbc699999} }, /* 1/5-f5 */ +/**/ f7 = {{0x92492492, 0xbfc24924} }, /* -1/7 */ +/**/ ff7 = {{0x92492492, 0xbc624924} }, /* -1/7-f7 */ +/**/ f9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */ +/**/ ff9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-f9 */ +/**/ f11 = {{0x745d1746, 0xbfb745d1} }, /* -1/11 */ +/**/ f13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */ +/**/ f15 = {{0x11111111, 0xbfb11111} }, /* -1/15 */ +/**/ f17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */ +/**/ f19 = {{0xbca1af28, 0xbfaaf286} }, /* -1/19 */ + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ mzero = {{0x00000000, 0x80000000} }, /* -0 */ +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ inv16 = {{0x00000000, 0x3fb00000} }, /* 1/16 */ +/**/ opi = {{0x54442d18, 0x400921fb} }, /* pi */ +/**/ opi1 = {{0x33145c07, 0x3ca1a626} }, /* pi-opi */ +/**/ mopi = {{0x54442d18, 0xc00921fb} }, /* -pi */ +/**/ hpi = {{0x54442d18, 0x3ff921fb} }, /* pi/2 */ +/**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */ +/**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */ +/**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */ +/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */ +/**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */ +/**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */ +/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */ +/**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */ +/**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */ +/**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ +/**/ u3 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ +/**/ u4 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ +/**/ u5 = {{0x00000000, 0x3aaef2d1} }, /* 5e-26 */ +/**/ u6 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ +/**/ u7 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ +/**/ u8 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ +/**/ u91 = {{0x00000000, 0x3c6dffc0} }, /* 1.301e-17 */ +/**/ u92 = {{0x00000000, 0x3c527bd0} }, /* 4.008e-18 */ +/**/ u93 = {{0x00000000, 0x3c3cd057} }, /* 1.562e-18 */ +/**/ u94 = {{0x00000000, 0x3c329cdf} }, /* 1.009e-18 */ +/**/ ua1 = {{0x00000000, 0x3c3a1edf} }, /* 1.416e-18 */ +/**/ ua2 = {{0x00000000, 0x3c33f0e1} }, /* 1.081e-18 */ +/**/ ub = {{0x00000000, 0x3a98c56d} }, /* 2.001e-26 */ +/**/ uc = {{0x00000000, 0x3a9375de} }, /* 1.572e-26 */ +/**/ ud[MM] ={{{0x00000000, 0x38c6eddf} }, /* 3.450e-35 */ +/**/ {{0x00000000, 0x35c6ef60} }, /* 1.226e-49 */ +/**/ {{0x00000000, 0x32c6ed2f} }, /* 4.354e-64 */ +/**/ {{0x00000000, 0x23c6eee8} }, /* 2.465e-136 */ +/**/ {{0x00000000, 0x11c6ed16} }},/* 4.955e-223 */ +/**/ ue = {{0x00000000, 0x38900e9d} }, /* 3.02e-36 */ +/**/ two8 = {{0x00000000, 0x40700000} }, /* 2**8=256 */ +/**/ two52 = {{0x00000000, 0x43300000} }, /* 2**52 */ +/**/ two500 = {{0x00000000, 0x5f300000} }, /* 2**500 */ +/**/ twom500 = {{0x00000000, 0x20b00000} }, /* 2**(-500) */ +/**/ twom1022 = {{0x00000000, 0x00100000} }; /* 2**(-1022) */ + +#endif +#endif + +#define ZERO zero.d +#define MZERO mzero.d +#define ONE one.d +#define TWO8 two8.d +#define TWO52 two52.d +#define TWOM1022 twom1022.d + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/branred.c glibc-2.2.3/sysdeps/ieee754/dbl-64/branred.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/branred.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/branred.c Mon Mar 12 12:23:29 2001 @@ -0,0 +1,144 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/*******************************************************************/ +/* */ +/* MODULE_NAME: branred.c */ +/* */ +/* FUNCTIONS: branred */ +/* */ +/* FILES NEEDED: branred.h mydefs.h endian.h mpa.h */ +/* mha.c */ +/* */ +/* Routine branred() performs range reduction of a double number */ +/* x into Double length number a+aa,such that */ +/* x=n*pi/2+(a+aa), abs(a+aa)>20)&2047; + k = (k-450)/24; + if (k<0) + k=0; + gor.x = t576.x; + gor.i[HIGH_HALF] -= ((k*24)<<20); + for (i=0;i<6;i++) + { r[i] = x1*toverp[k+i]*gor.x; gor.x *= tm24.x; } + for (i=0;i<3;i++) { + s=(r[i]+big.x)-big.x; + sum+=s; + r[i]-=s; + } + t=0; + for (i=0;i<6;i++) + t+=r[5-i]; + bb=(((((r[0]-t)+r[1])+r[2])+r[3])+r[4])+r[5]; + s=(t+big.x)-big.x; + sum+=s; + t-=s; + b=t+bb; + bb=(t-b)+bb; + s=(sum+big1.x)-big1.x; + sum-=s; + b1=b; + bb1=bb; + sum1=sum; + sum=0; + + u.x = x2; + k = (u.i[HIGH_HALF]>>20)&2047; + k = (k-450)/24; + if (k<0) + k=0; + gor.x = t576.x; + gor.i[HIGH_HALF] -= ((k*24)<<20); + for (i=0;i<6;i++) + { r[i] = x2*toverp[k+i]*gor.x; gor.x *= tm24.x; } + for (i=0;i<3;i++) { + s=(r[i]+big.x)-big.x; + sum+=s; + r[i]-=s; + } + t=0; + for (i=0;i<6;i++) + t+=r[5-i]; + bb=(((((r[0]-t)+r[1])+r[2])+r[3])+r[4])+r[5]; + s=(t+big.x)-big.x; + sum+=s; + t-=s; + b=t+bb; + bb=(t-b)+bb; + s=(sum+big1.x)-big1.x; + sum-=s; + + b2=b; + bb2=bb; + sum2=sum; + + sum=sum1+sum2; + b=b1+b2; + bb = (ABS(b1)>ABS(b2))? (b1-b)+b2 : (b2-b)+b1; + if (b > 0.5) + {b-=1.0; sum+=1.0;} + else if (b < -0.5) + {b+=1.0; sum-=1.0;} + s=b+(bb+bb1+bb2); + t=((b-s)+bb)+(bb1+bb2); + b=s*split; + t1=b-(b-s); + t2=s-t1; + b=s*hp0.x; + bb=(((t1*mp1.x-b)+t1*mp2.x)+t2*mp1.x)+(t2*mp2.x+s*hp1.x+t*hp0.x); + s=b+bb; + t=(b-s)+bb; + *a=s; + *aa=t; + return ((int) sum)&3; /* return quater of unit circle */ +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/branred.h glibc-2.2.3/sysdeps/ieee754/dbl-64/branred.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/branred.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/branred.h Sun Mar 11 23:24:27 2001 @@ -0,0 +1,80 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: branred.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ + +#ifndef BRANRED_H +#define BRANRED_H + + +#ifdef BIG_ENDI +static const mynumber + +/**/ t576 = {{0x63f00000, 0x00000000}}, /* 2 ^ 576 */ +/**/ tm600 = {{0x1a700000, 0x00000000}}, /* 2 ^- 600 */ +/**/ tm24 = {{0x3e700000, 0x00000000}}, /* 2 ^- 24 */ +/**/ big = {{0x43380000, 0x00000000}}, /* 6755399441055744 */ +/**/ big1 = {{0x43580000, 0x00000000}}, /* 27021597764222976 */ +/**/ hp0 = {{0x3FF921FB, 0x54442D18}} ,/* 1.5707963267948966 */ +/**/ hp1 = {{0x3C91A626, 0x33145C07}} ,/* 6.123233995736766e-17 */ +/**/ mp1 = {{0x3FF921FB, 0x58000000}}, /* 1.5707963407039642 */ +/**/ mp2 = {{0xBE4DDE97, 0x40000000}}; /*-1.3909067675399456e-08 */ + +#else +#ifdef LITTLE_ENDI +static const mynumber + +/**/ t576 = {{0x00000000, 0x63f00000}}, /* 2 ^ 576 */ +/**/ tm600 = {{0x00000000, 0x1a700000}}, /* 2 ^- 600 */ +/**/ tm24 = {{0x00000000, 0x3e700000}}, /* 2 ^- 24 */ +/**/ big = {{0x00000000, 0x43380000}}, /* 6755399441055744 */ +/**/ big1 = {{0x00000000, 0x43580000}}, /* 27021597764222976 */ +/**/ hp0 = {{0x54442D18, 0x3FF921FB}}, /* 1.5707963267948966 */ +/**/ hp1 = {{0x33145C07, 0x3C91A626}}, /* 6.123233995736766e-17 */ +/**/ mp1 = {{0x58000000, 0x3FF921FB}}, /* 1.5707963407039642 */ +/**/ mp2 = {{0x40000000, 0xBE4DDE97}}; /*-1.3909067675399456e-08 */ + +#endif +#endif + +static const double toverp[75] = { /* 2/ PI base 24*/ + 10680707.0, 7228996.0, 1387004.0, 2578385.0, 16069853.0, + 12639074.0, 9804092.0, 4427841.0, 16666979.0, 11263675.0, + 12935607.0, 2387514.0, 4345298.0, 14681673.0, 3074569.0, + 13734428.0, 16653803.0, 1880361.0, 10960616.0, 8533493.0, + 3062596.0, 8710556.0, 7349940.0, 6258241.0, 3772886.0, + 3769171.0, 3798172.0, 8675211.0, 12450088.0, 3874808.0, + 9961438.0, 366607.0, 15675153.0, 9132554.0, 7151469.0, + 3571407.0, 2607881.0, 12013382.0, 4155038.0, 6285869.0, + 7677882.0, 13102053.0, 15825725.0, 473591.0, 9065106.0, + 15363067.0, 6271263.0, 9264392.0, 5636912.0, 4652155.0, + 7056368.0, 13614112.0, 10155062.0, 1944035.0, 9527646.0, + 15080200.0, 6658437.0, 6231200.0, 6832269.0, 16767104.0, + 5075751.0, 3212806.0, 1398474.0, 7579849.0, 6349435.0, + 12618859.0, 4703257.0, 12806093.0, 14477321.0, 2786137.0, + 12875403.0, 9837734.0, 14528324.0, 13719321.0, 343717.0 }; + +static const double split = 134217729.0; + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/dla.h glibc-2.2.3/sysdeps/ieee754/dbl-64/dla.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/dla.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/dla.h Sun Mar 11 15:32:47 2001 @@ -0,0 +1,173 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/***********************************************************************/ +/*MODULE_NAME: dla.h */ +/* */ +/* This file holds C language macros for 'Double Length Floating Point */ +/* Arithmetic'. The macros are based on the paper: */ +/* T.J.Dekker, "A floating-point Technique for extending the */ +/* Available Precision", Number. Math. 18, 224-242 (1971). */ +/* A Double-Length number is defined by a pair (r,s), of IEEE double */ +/* precision floating point numbers that satisfy, */ +/* */ +/* abs(s) <= abs(r+s)*2**(-53)/(1+2**(-53)). */ +/* */ +/* The computer arithmetic assumed is IEEE double precision in */ +/* round to nearest mode. All variables in the macros must be of type */ +/* IEEE double. */ +/***********************************************************************/ + +/* CN = 1+2**27 = '41a0000002000000' IEEE double format */ +#define CN 134217729.0 + + +/* Exact addition of two single-length floating point numbers, Dekker. */ +/* The macro produces a double-length number (z,zz) that satisfies */ +/* z+zz = x+y exactly. */ + +#define EADD(x,y,z,zz) \ + z=(x)+(y); zz=(ABS(x)>ABS(y)) ? (((x)-(z))+(y)) : (((y)-(z))+(x)); + + +/* Exact subtraction of two single-length floating point numbers, Dekker. */ +/* The macro produces a double-length number (z,zz) that satisfies */ +/* z+zz = x-y exactly. */ + +#define ESUB(x,y,z,zz) \ + z=(x)-(y); zz=(ABS(x)>ABS(y)) ? (((x)-(z))-(y)) : ((x)-((y)+(z))); + + +/* Exact multiplication of two single-length floating point numbers, */ +/* Veltkamp. The macro produces a double-length number (z,zz) that */ +/* satisfies z+zz = x*y exactly. p,hx,tx,hy,ty are temporary */ +/* storage variables of type double. */ + +#define EMULV(x,y,z,zz,p,hx,tx,hy,ty) \ + p=CN*(x); hx=((x)-p)+p; tx=(x)-hx; \ + p=CN*(y); hy=((y)-p)+p; ty=(y)-hy; \ + z=(x)*(y); zz=(((hx*hy-z)+hx*ty)+tx*hy)+tx*ty; + + +/* Exact multiplication of two single-length floating point numbers, Dekker. */ +/* The macro produces a nearly double-length number (z,zz) (see Dekker) */ +/* that satisfies z+zz = x*y exactly. p,hx,tx,hy,ty,q are temporary */ +/* storage variables of type double. */ + +#define MUL12(x,y,z,zz,p,hx,tx,hy,ty,q) \ + p=CN*(x); hx=((x)-p)+p; tx=(x)-hx; \ + p=CN*(y); hy=((y)-p)+p; ty=(y)-hy; \ + p=hx*hy; q=hx*ty+tx*hy; z=p+q; zz=((p-z)+q)+tx*ty; + + +/* Double-length addition, Dekker. The macro produces a double-length */ +/* number (z,zz) which satisfies approximately z+zz = x+xx + y+yy. */ +/* An error bound: (abs(x+xx)+abs(y+yy))*4.94e-32. (x,xx), (y,yy) */ +/* are assumed to be double-length numbers. r,s are temporary */ +/* storage variables of type double. */ + +#define ADD2(x,xx,y,yy,z,zz,r,s) \ + r=(x)+(y); s=(ABS(x)>ABS(y)) ? \ + (((((x)-r)+(y))+(yy))+(xx)) : \ + (((((y)-r)+(x))+(xx))+(yy)); \ + z=r+s; zz=(r-z)+s; + + +/* Double-length subtraction, Dekker. The macro produces a double-length */ +/* number (z,zz) which satisfies approximately z+zz = x+xx - (y+yy). */ +/* An error bound: (abs(x+xx)+abs(y+yy))*4.94e-32. (x,xx), (y,yy) */ +/* are assumed to be double-length numbers. r,s are temporary */ +/* storage variables of type double. */ + +#define SUB2(x,xx,y,yy,z,zz,r,s) \ + r=(x)-(y); s=(ABS(x)>ABS(y)) ? \ + (((((x)-r)-(y))-(yy))+(xx)) : \ + ((((x)-((y)+r))+(xx))-(yy)); \ + z=r+s; zz=(r-z)+s; + + +/* Double-length multiplication, Dekker. The macro produces a double-length */ +/* number (z,zz) which satisfies approximately z+zz = (x+xx)*(y+yy). */ +/* An error bound: abs((x+xx)*(y+yy))*1.24e-31. (x,xx), (y,yy) */ +/* are assumed to be double-length numbers. p,hx,tx,hy,ty,q,c,cc are */ +/* temporary storage variables of type double. */ + +#define MUL2(x,xx,y,yy,z,zz,p,hx,tx,hy,ty,q,c,cc) \ + MUL12(x,y,c,cc,p,hx,tx,hy,ty,q) \ + cc=((x)*(yy)+(xx)*(y))+cc; z=c+cc; zz=(c-z)+cc; + + +/* Double-length division, Dekker. The macro produces a double-length */ +/* number (z,zz) which satisfies approximately z+zz = (x+xx)/(y+yy). */ +/* An error bound: abs((x+xx)/(y+yy))*1.50e-31. (x,xx), (y,yy) */ +/* are assumed to be double-length numbers. p,hx,tx,hy,ty,q,c,cc,u,uu */ +/* are temporary storage variables of type double. */ + +#define DIV2(x,xx,y,yy,z,zz,p,hx,tx,hy,ty,q,c,cc,u,uu) \ + c=(x)/(y); MUL12(c,y,u,uu,p,hx,tx,hy,ty,q) \ + cc=(((((x)-u)-uu)+(xx))-c*(yy))/(y); z=c+cc; zz=(c-z)+cc; + + +/* Double-length addition, slower but more accurate than ADD2. */ +/* The macro produces a double-length */ +/* number (z,zz) which satisfies approximately z+zz = (x+xx)+(y+yy). */ +/* An error bound: abs(x+xx + y+yy)*1.50e-31. (x,xx), (y,yy) */ +/* are assumed to be double-length numbers. r,rr,s,ss,u,uu,w */ +/* are temporary storage variables of type double. */ + +#define ADD2A(x,xx,y,yy,z,zz,r,rr,s,ss,u,uu,w) \ + r=(x)+(y); \ + if (ABS(x)>ABS(y)) { rr=((x)-r)+(y); s=(rr+(yy))+(xx); } \ + else { rr=((y)-r)+(x); s=(rr+(xx))+(yy); } \ + if (rr!=0.0) { \ + z=r+s; zz=(r-z)+s; } \ + else { \ + ss=(ABS(xx)>ABS(yy)) ? (((xx)-s)+(yy)) : (((yy)-s)+(xx)); \ + u=r+s; \ + uu=(ABS(r)>ABS(s)) ? ((r-u)+s) : ((s-u)+r) ; \ + w=uu+ss; z=u+w; \ + zz=(ABS(u)>ABS(w)) ? ((u-z)+w) : ((w-z)+u) ; } + + +/* Double-length subtraction, slower but more accurate than SUB2. */ +/* The macro produces a double-length */ +/* number (z,zz) which satisfies approximately z+zz = (x+xx)-(y+yy). */ +/* An error bound: abs(x+xx - (y+yy))*1.50e-31. (x,xx), (y,yy) */ +/* are assumed to be double-length numbers. r,rr,s,ss,u,uu,w */ +/* are temporary storage variables of type double. */ + +#define SUB2A(x,xx,y,yy,z,zz,r,rr,s,ss,u,uu,w) \ + r=(x)-(y); \ + if (ABS(x)>ABS(y)) { rr=((x)-r)-(y); s=(rr-(yy))+(xx); } \ + else { rr=(x)-((y)+r); s=(rr+(xx))-(yy); } \ + if (rr!=0.0) { \ + z=r+s; zz=(r-z)+s; } \ + else { \ + ss=(ABS(xx)>ABS(yy)) ? (((xx)-s)-(yy)) : ((xx)-((yy)+s)); \ + u=r+s; \ + uu=(ABS(r)>ABS(s)) ? ((r-u)+s) : ((s-u)+r) ; \ + w=uu+ss; z=u+w; \ + zz=(ABS(u)>ABS(w)) ? ((u-z)+w) : ((w-z)+u) ; } + + + + + + + diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/doasin.c glibc-2.2.3/sysdeps/ieee754/dbl-64/doasin.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/doasin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/doasin.c Mon Mar 12 12:33:12 2001 @@ -0,0 +1,75 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/**********************************************************************/ +/* MODULE_NAME: doasin.c */ +/* */ +/* FUNCTION: doasin */ +/* */ +/* FILES NEEDED:endian.h mydefs.h dla.h doasin.h */ +/* mpa.c */ +/* */ +/* Compute arcsin(x,dx,v) of double-length number (x+dx) the result */ +/* stored in v where v= v[0]+v[1] =arcsin(x+dx) */ +/**********************************************************************/ + +#include "endian.h" +#include "mydefs.h" +#include "dla.h" + +/********************************************************************/ +/* Compute arcsin(x,dx,v) of double-length number (x+dx) the result */ +/* stored in v where v= v[0]+v[1] =arcsin(x+dx) */ +/********************************************************************/ +void __doasin(double x, double dx, double v[]) { + +#include "doasin.h" + + static const double + d5 = 0.22372159090911789889975459505194491E-01, + d6 = 0.17352764422456822913014975683014622E-01, + d7 = 0.13964843843786693521653681033981614E-01, + d8 = 0.11551791438485242609036067259086589E-01, + d9 = 0.97622386568166960207425666787248914E-02, + d10 = 0.83638737193775788576092749009744976E-02, + d11 = 0.79470250400727425881446981833568758E-02; + + double xx,p,pp,u,uu,r,s; + double hx,tx,hy,ty,tp,tq,tc,tcc; + + +/* Taylor series for arcsin for Double-Length numbers */ + xx = x*x+2.0*x*dx; + p = ((((((d11*xx+d10)*xx+d9)*xx+d8)*xx+d7)*xx+d6)*xx+d5)*xx; + pp = 0; + + MUL2(x,dx,x,dx,u,uu,tp,hx,tx,hy,ty,tq,tc,tcc); + ADD2(p,pp,c4.x,cc4.x,p,pp,r,s); + MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); + ADD2(p,pp,c3.x,cc3.x,p,pp,r,s); + MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); + ADD2(p,pp,c2.x,cc2.x,p,pp,r,s); + MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); + ADD2(p,pp,c1.x,cc1.x,p,pp,r,s); + MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); + MUL2(p,pp,x,dx,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); + ADD2(p,pp,x,dx,p,pp,r,s); + v[0]=p; + v[1]=pp; /* arcsin(x+dx)=v[0]+v[1] */ +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/doasin.h glibc-2.2.3/sysdeps/ieee754/dbl-64/doasin.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/doasin.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/doasin.h Sun Mar 11 23:26:13 2001 @@ -0,0 +1,62 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: doasin.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ + + + +#ifndef DOASIN_H +#define DOASIN_H + +#ifdef BIG_ENDI + + static const mynumber +/**/ c1 = {{0x3FC55555, 0x55555555}}, /* 0.16666666666666666 */ +/**/ cc1 = {{0x3C655555, 0x55775389}}, /* 9.2518585419753846e-18 */ +/**/ c2 = {{0x3FB33333, 0x33333333}}, /* 0.074999999999999997 */ +/**/ cc2 = {{0x3C499993, 0x63F1A115}}, /* 2.7755472886508899e-18 */ +/**/ c3 = {{0x3FA6DB6D, 0xB6DB6DB7}}, /* 0.044642857142857144 */ +/**/ cc3 = {{0xBC320FC0, 0x3D5CF0C5}}, /* -9.7911734574147224e-19 */ +/**/ c4 = {{0x3F9F1C71, 0xC71C71C5}}, /* 0.030381944444444437 */ +/**/ cc4 = {{0xBC02B240, 0xFF23ED1E}}; /* -1.2669108566898312e-19 */ + +#else +#ifdef LITTLE_ENDI + + static const mynumber +/**/ c1 = {{0x55555555, 0x3FC55555}}, /* 0.16666666666666666 */ +/**/ cc1 = {{0x55775389, 0x3C655555}}, /* 9.2518585419753846e-18 */ +/**/ c2 = {{0x33333333, 0x3FB33333}}, /* 0.074999999999999997 */ +/**/ cc2 = {{0x63F1A115, 0x3C499993}}, /* 2.7755472886508899e-18 */ +/**/ c3 = {{0xB6DB6DB7, 0x3FA6DB6D}}, /* 0.044642857142857144 */ +/**/ cc3 = {{0x3D5CF0C5, 0xBC320FC0}}, /* -9.7911734574147224e-19 */ +/**/ c4 = {{0xC71C71C5, 0x3F9F1C71}}, /* 0.030381944444444437 */ +/**/ cc4 = {{0xFF23ED1E, 0xBC02B240}}; /* -1.2669108566898312e-19 */ + + +#endif +#endif + + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/dosincos.c glibc-2.2.3/sysdeps/ieee754/dbl-64/dosincos.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/dosincos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/dosincos.c Mon Mar 12 12:06:08 2001 @@ -0,0 +1,187 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/********************************************************************/ +/* */ +/* MODULE_NAME: dosincos.c */ +/* */ +/* */ +/* FUNCTIONS: dubsin */ +/* dubcos */ +/* docos */ +/* FILES NEEDED: endian.h mydefs.h dla.h dosincos.h */ +/* sincos.tbl */ +/* */ +/* Routines compute sin() and cos() as Double-Length numbers */ +/********************************************************************/ + + + +#include "endian.h" +#include "mydefs.h" +#include "sincos.tbl" +#include "dla.h" +#include "dosincos.h" +/***********************************************************************/ +/* Routine receive Double-Length number (x+dx) and computing sin(x+dx) */ +/* as Double-Length number and store it at array v .It computes it by */ +/* arithmetic action on Double-Length numbers */ +/*(x+dx) between 0 and PI/4 */ +/***********************************************************************/ + +void __dubsin(double x, double dx, double v[]) { + double r,s,p,hx,tx,hy,ty,q,c,cc,d,dd,d2,dd2,e,ee, + sn,ssn,cs,ccs,ds,dss,dc,dcc; +#if 0 + double xx,y,yy,z,zz; +#endif + mynumber u; + int4 k; + + u.x=x+big.x; + k = u.i[LOW_HALF]<<2; + x=x-(u.x-big.x); + d=x+dx; + dd=(x-d)+dx; + /* sin(x+dx)=sin(Xi+t)=sin(Xi)*cos(t) + cos(Xi)sin(t) where t ->0 */ + MUL2(d,dd,d,dd,d2,dd2,p,hx,tx,hy,ty,q,c,cc); + sn=sincos.x[k]; /* */ + ssn=sincos.x[k+1]; /* sin(Xi) and cos(Xi) */ + cs=sincos.x[k+2]; /* */ + ccs=sincos.x[k+3]; /* */ + MUL2(d2,dd2,s7.x,ss7.x,ds,dss,p,hx,tx,hy,ty,q,c,cc); /* Taylor */ + ADD2(ds,dss,s5.x,ss5.x,ds,dss,r,s); + MUL2(d2,dd2,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); /* series */ + ADD2(ds,dss,s3.x,ss3.x,ds,dss,r,s); + MUL2(d2,dd2,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); /* for sin */ + MUL2(d,dd,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,d,dd,ds,dss,r,s); /* ds=sin(t) */ + + MUL2(d2,dd2,c8.x,cc8.x,dc,dcc,p,hx,tx,hy,ty,q,c,cc); ;/* Taylor */ + ADD2(dc,dcc,c6.x,cc6.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); /* series */ + ADD2(dc,dcc,c4.x,cc4.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); /* for cos */ + ADD2(dc,dcc,c2.x,cc2.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); /* dc=cos(t) */ + + MUL2(cs,ccs,ds,dss,e,ee,p,hx,tx,hy,ty,q,c,cc); + MUL2(dc,dcc,sn,ssn,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + SUB2(e,ee,dc,dcc,e,ee,r,s); + ADD2(e,ee,sn,ssn,e,ee,r,s); /* e+ee=sin(x+dx) */ + + v[0]=e; + v[1]=ee; +} +/**********************************************************************/ +/* Routine receive Double-Length number (x+dx) and computes cos(x+dx) */ +/* as Double-Length number and store it in array v .It computes it by */ +/* arithmetic action on Double-Length numbers */ +/*(x+dx) between 0 and PI/4 */ +/**********************************************************************/ + +void __dubcos(double x, double dx, double v[]) { + double r,s,p,hx,tx,hy,ty,q,c,cc,d,dd,d2,dd2,e,ee, + sn,ssn,cs,ccs,ds,dss,dc,dcc; +#if 0 + double xx,y,yy,z,zz; +#endif + mynumber u; + int4 k; + u.x=x+big.x; + k = u.i[LOW_HALF]<<2; + x=x-(u.x-big.x); + d=x+dx; + dd=(x-d)+dx; /* cos(x+dx)=cos(Xi+t)=cos(Xi)cos(t) - sin(Xi)sin(t) */ + MUL2(d,dd,d,dd,d2,dd2,p,hx,tx,hy,ty,q,c,cc); + sn=sincos.x[k]; /* */ + ssn=sincos.x[k+1]; /* sin(Xi) and cos(Xi) */ + cs=sincos.x[k+2]; /* */ + ccs=sincos.x[k+3]; /* */ + MUL2(d2,dd2,s7.x,ss7.x,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,s5.x,ss5.x,ds,dss,r,s); + MUL2(d2,dd2,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,s3.x,ss3.x,ds,dss,r,s); + MUL2(d2,dd2,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + MUL2(d,dd,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,d,dd,ds,dss,r,s); + + MUL2(d2,dd2,c8.x,cc8.x,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(dc,dcc,c6.x,cc6.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(dc,dcc,c4.x,cc4.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(dc,dcc,c2.x,cc2.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + + MUL2(cs,ccs,ds,dss,e,ee,p,hx,tx,hy,ty,q,c,cc); + MUL2(dc,dcc,sn,ssn,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + + MUL2(d2,dd2,s7.x,ss7.x,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,s5.x,ss5.x,ds,dss,r,s); + MUL2(d2,dd2,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,s3.x,ss3.x,ds,dss,r,s); + MUL2(d2,dd2,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + MUL2(d,dd,ds,dss,ds,dss,p,hx,tx,hy,ty,q,c,cc); + ADD2(ds,dss,d,dd,ds,dss,r,s); + MUL2(d2,dd2,c8.x,cc8.x,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(dc,dcc,c6.x,cc6.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(dc,dcc,c4.x,cc4.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(dc,dcc,c2.x,cc2.x,dc,dcc,r,s); + MUL2(d2,dd2,dc,dcc,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + MUL2(sn,ssn,ds,dss,e,ee,p,hx,tx,hy,ty,q,c,cc); + MUL2(dc,dcc,cs,ccs,dc,dcc,p,hx,tx,hy,ty,q,c,cc); + ADD2(e,ee,dc,dcc,e,ee,r,s); + SUB2(cs,ccs,e,ee,e,ee,r,s); + + v[0]=e; + v[1]=ee; +} +/**********************************************************************/ +/* Routine receive Double-Length number (x+dx) and computes cos(x+dx) */ +/* as Double-Length number and store it in array v */ +/**********************************************************************/ +void __docos(double x, double dx, double v[]) { + double y,yy,p,w[2]; + if (x>0) {y=x; yy=dx;} + else {y=-x; yy=-dx;} + if (y<0.5*hp0.x) /* y< PI/4 */ + {__dubcos(y,yy,w); v[0]=w[0]; v[1]=w[1];} + else if (y<1.5*hp0.x) { /* y< 3/4 * PI */ + p=hp0.x-y; /* p = PI/2 - y */ + yy=hp1.x-yy; + y=p+yy; + yy=(p-y)+yy; + if (y>0) {__dubsin(y,yy,w); v[0]=w[0]; v[1]=w[1];} + /* cos(x) = sin ( 90 - x ) */ + else {__dubsin(-y,-yy,w); v[0]=-w[0]; v[1]=-w[1]; + } + } + else { /* y>= 3/4 * PI */ + p=2.0*hp0.x-y; /* p = PI- y */ + yy=2.0*hp1.x-yy; + y=p+yy; + yy=(p-y)+yy; + __dubcos(y,yy,w); + v[0]=-w[0]; + v[1]=-w[1]; + } +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/dosincos.h glibc-2.2.3/sysdeps/ieee754/dbl-64/dosincos.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/dosincos.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/dosincos.h Sun Mar 11 23:36:24 2001 @@ -0,0 +1,79 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: dosincos.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ + + + +#ifndef DOSINCOS_H +#define DOSINCOS_H + + +#ifdef BIG_ENDI +static const mynumber +/**/ s3 = {{0xBFC55555, 0x55555555}},/* -0.16666666666666666 */ +/**/ ss3 = {{0xBC6553AA, 0xE77EE482}},/* -9.2490366677784492e-18 */ +/**/ s5 = {{0x3F811111, 0x11110F15}},/* 0.008333333333332452 */ +/**/ ss5 = {{0xBC21AC06, 0xDA488820}},/* -4.7899996586987931e-19 */ +/**/ s7 = {{0xBF2A019F, 0x5816C78D}},/* -0.00019841261022928957 */ +/**/ ss7 = {{0x3BCDCEC9, 0x6A18BF2A}},/* 1.2624077757871259e-20 */ +/**/ c2 = {{0x3FE00000, 0x00000000}},/* 0.5 */ +/**/ cc2 = {{0xBA282FD8, 0x00000000}},/* -1.5264073330037701e-28 */ +/**/ c4 = {{0xBFA55555, 0x55555555}},/* -0.041666666666666664 */ +/**/ cc4 = {{0xBC4554BC, 0x2FFF257E}},/* -2.312711276085743e-18 */ +/**/ c6 = {{0x3F56C16C, 0x16C16A96}},/* 0.0013888888888888055 */ +/**/ cc6 = {{0xBBD2E846, 0xE6346F14}},/* -1.6015133010194884e-20 */ +/**/ c8 = {{0xBEFA019F, 0x821D5987}},/* -2.480157866754367e-05 */ +/**/ cc8 = {{0x3B7AB71E, 0x72FFE5CC}},/* 3.5357416224857556e-22 */ + +/**/ big = {{0x42c80000, 0x00000000}}, /* 52776558133248 */ + +/**/ hp0 = {{0x3FF921FB, 0x54442D18}}, /* PI / 2 */ +/**/ hp1 = {{0x3C91A626, 0x33145C07}}; /* 6.123233995736766e-17 */ +#else +#ifdef LITTLE_ENDI +static const mynumber +/**/ s3 = {{0x55555555, 0xBFC55555}},/* -0.16666666666666666 */ +/**/ ss3 = {{0xE77EE482, 0xBC6553AA}},/* -9.2490366677784492e-18 */ +/**/ s5 = {{0x11110F15, 0x3F811111}},/* 0.008333333333332452 */ +/**/ ss5 = {{0xDA488820, 0xBC21AC06}},/* -4.7899996586987931e-19 */ +/**/ s7 = {{0x5816C78D, 0xBF2A019F}},/* -0.00019841261022928957 */ +/**/ ss7 = {{0x6A18BF2A, 0x3BCDCEC9}},/* 1.2624077757871259e-20 */ +/**/ c2 = {{0x00000000, 0x3FE00000}},/* 0.5 */ +/**/ cc2 = {{0x00000000, 0xBA282FD8}},/* -1.5264073330037701e-28 */ +/**/ c4 = {{0x55555555, 0xBFA55555}},/* -0.041666666666666664 */ +/**/ cc4 = {{0x2FFF257E, 0xBC4554BC}},/* -2.312711276085743e-18 */ +/**/ c6 = {{0x16C16A96, 0x3F56C16C}},/* 0.0013888888888888055 */ +/**/ cc6 = {{0xE6346F14, 0xBBD2E846}},/* -1.6015133010194884e-20 */ +/**/ c8 = {{0x821D5987, 0xBEFA019F}},/* -2.480157866754367e-05 */ +/**/ cc8 = {{0x72FFE5CC, 0x3B7AB71E}},/* 3.5357416224857556e-22 */ + +/**/ big = {{0x00000000, 0x42c80000}}, /* 52776558133248 */ + +/**/ hp0 = {{0x54442D18, 0x3FF921FB}}, /* PI / 2 */ +/**/ hp1 = {{0x33145C07, 0x3C91A626}}; /* 6.123233995736766e-17 */ +#endif +#endif + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_acos.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_acos.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_acos.c Tue Jul 13 16:48:05 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_acos.c Mon Mar 26 20:53:25 2001 @@ -1,144 +1 @@ -/* @(#)e_acos.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_acos.c,v 1.9 1995/05/12 04:57:13 jtc Exp $"; -#endif - -/* __ieee754_acos(x) - * Method : - * acos(x) = pi/2 - asin(x) - * acos(-x) = pi/2 + asin(x) - * For |x|<=0.5 - * acos(x) = pi/2 - (x + x*x^2*R(x^2)) (see asin.c) - * For x>0.5 - * acos(x) = pi/2 - (pi/2 - 2asin(sqrt((1-x)/2))) - * = 2asin(sqrt((1-x)/2)) - * = 2s + 2s*z*R(z) ...z=(1-x)/2, s=sqrt(z) - * = 2f + (2c + 2s*z*R(z)) - * where f=hi part of s, and c = (z-f*f)/(s+f) is the correction term - * for f so that f+c ~ sqrt(z). - * For x<-0.5 - * acos(x) = pi - 2asin(sqrt((1-|x|)/2)) - * = pi - 0.5*(s+s*z*R(z)), where z=(1-|x|)/2,s=sqrt(z) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - * Function needed: __ieee754_sqrt - */ - -#include "math.h" -#include "math_private.h" -#define one qS[0] - -#ifdef __STDC__ -static const double -#else -static double -#endif -pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */ -pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */ -pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */ -pS[] = {1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */ - -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */ - 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */ - -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */ - 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */ - 3.47933107596021167570e-05}, /* 0x3F023DE1, 0x0DFDF709 */ -qS[] ={1.0, -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */ - 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */ - -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */ - 7.70381505559019352791e-02}; /* 0x3FB3B8C5, 0xB12E9282 */ - -#ifdef __STDC__ - double __ieee754_acos(double x) -#else - double __ieee754_acos(x) - double x; -#endif -{ - double z,p,q,r,w,s,c,df,p1,p2,p3,q1,q2,z2,z4,z6; - int32_t hx,ix; - GET_HIGH_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x3ff00000) { /* |x| >= 1 */ - u_int32_t lx; - GET_LOW_WORD(lx,x); - if(((ix-0x3ff00000)|lx)==0) { /* |x|==1 */ - if(hx>0) return 0.0; /* acos(1) = 0 */ - else return pi+2.0*pio2_lo; /* acos(-1)= pi */ - } - return (x-x)/(x-x); /* acos(|x|>1) is NaN */ - } - if(ix<0x3fe00000) { /* |x| < 0.5 */ - if(ix<=0x3c600000) return pio2_hi+pio2_lo;/*if|x|<2**-57*/ - z = x*x; -#ifdef DO_NOT_USE_THIS - p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); - q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); -#else - p1 = z*pS[0]; z2=z*z; - p2 = pS[1]+z*pS[2]; z4=z2*z2; - p3 = pS[3]+z*pS[4]; z6=z4*z2; - q1 = one+z*qS[1]; - q2 = qS[2]+z*qS[3]; - p = p1 + z2*p2 + z4*p3 + z6*pS[5]; - q = q1 + z2*q2 + z4*qS[4]; -#endif - r = p/q; - return pio2_hi - (x - (pio2_lo-x*r)); - } else if (hx<0) { /* x < -0.5 */ - z = (one+x)*0.5; -#ifdef DO_NOT_USE_THIS - p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); - q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); -#else - p1 = z*pS[0]; z2=z*z; - p2 = pS[1]+z*pS[2]; z4=z2*z2; - p3 = pS[3]+z*pS[4]; z6=z4*z2; - q1 = one+z*qS[1]; - q2 = qS[2]+z*qS[3]; - p = p1 + z2*p2 + z4*p3 + z6*pS[5]; - q = q1 + z2*q2 + z4*qS[4]; -#endif - s = __ieee754_sqrt(z); - r = p/q; - w = r*s-pio2_lo; - return pi - 2.0*(s+w); - } else { /* x > 0.5 */ - z = (one-x)*0.5; - s = __ieee754_sqrt(z); - df = s; - SET_LOW_WORD(df,0); - c = (z-df*df)/(s+df); -#ifdef DO_NOT_USE_THIS - p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); - q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); -#else - p1 = z*pS[0]; z2=z*z; - p2 = pS[1]+z*pS[2]; z4=z2*z2; - p3 = pS[3]+z*pS[4]; z6=z4*z2; - q1 = one+z*qS[1]; - q2 = qS[2]+z*qS[3]; - p = p1 + z2*p2 + z4*p3 + z6*pS[5]; - q = q1 + z2*q2 + z4*qS[4]; -#endif - r = p/q; - w = r*s+c; - return 2.0*(df+w); - } -} +/* In e_asin.c */ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_asin.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_asin.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_asin.c Tue Jul 13 16:48:14 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_asin.c Mon Mar 26 20:53:25 2001 @@ -1,143 +1,635 @@ -/* @(#)e_asin.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. -*/ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_asin.c,v 1.9 1995/05/12 04:57:22 jtc Exp $"; -#endif - -/* __ieee754_asin(x) - * Method : - * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... - * we approximate asin(x) on [0,0.5] by - * asin(x) = x + x*x^2*R(x^2) - * where - * R(x^2) is a rational approximation of (asin(x)-x)/x^3 - * and its remez error is bounded by - * |(asin(x)-x)/x^3 - R(x^2)| < 2^(-58.75) + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * For x in [0.5,1] - * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) - * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; - * then for x>0.98 - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) - * For x<=0.98, let pio4_hi = pio2_hi/2, then - * f = hi part of s; - * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) - * and - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) - * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. + * This program 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 General Public License for more details. * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/******************************************************************/ +/* MODULE_NAME:uasncs.c */ +/* */ +/* FUNCTIONS: uasin */ +/* uacos */ +/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h usncs.h */ +/* doasin.c sincos32.c dosincos.c mpa.c */ +/* sincos.tbl asincos.tbl powtwo.tbl root.tbl */ +/* */ +/* Ultimate asin/acos routines. Given an IEEE double machine */ +/* number x, compute the correctly rounded value of */ +/* arcsin(x)or arccos(x) according to the function called. */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/******************************************************************/ +#include "endian.h" +#include "mydefs.h" +#include "asincos.tbl" +#include "root.tbl" +#include "powtwo.tbl" +#include "MathLib.h" +#include "uasncs.h" +void __doasin(double x, double dx, double w[]); +void __dubsin(double x, double dx, double v[]); +void __dubcos(double x, double dx, double v[]); +void __docos(double x, double dx, double v[]); +double __sin32(double x, double res, double res1); +double __cos32(double x, double res, double res1); -#include "math.h" -#include "math_private.h" -#define one qS[0] -#ifdef __STDC__ -static const double -#else -static double +/***************************************************************************/ +/* An ultimate asin routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of arcsin(x) */ +/***************************************************************************/ +double __ieee754_asin(double x){ + double x1,x2,xx,s1,s2,res1,p,t,res,r,cor,cc,y,c,z,w[2]; + mynumber u,v; + int4 k,m,n; +#if 0 + int4 nn; #endif -huge = 1.000e+300, -pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */ -pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */ -pio4_hi = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */ - /* coefficient for R(x^2) */ -pS[] = {1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */ - -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */ - 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */ - -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */ - 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */ - 3.47933107596021167570e-05}, /* 0x3F023DE1, 0x0DFDF709 */ -qS[] = {1.0, -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */ - 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */ - -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */ - 7.70381505559019352791e-02}; /* 0x3FB3B8C5, 0xB12E9282 */ -#ifdef __STDC__ - double __ieee754_asin(double x) -#else - double __ieee754_asin(x) - double x; -#endif + u.x = x; + m = u.i[HIGH_HALF]; + k = 0x7fffffff&m; /* no sign */ + + if (k < 0x3e500000) return x; /* for x->0 => sin(x)=x */ + /*----------------------2^-26 <= |x| < 2^ -3 -----------------*/ + else + if (k < 0x3fc00000) { + x2 = x*x; + t = (((((f6*x2 + f5)*x2 + f4)*x2 + f3)*x2 + f2)*x2 + f1)*(x2*x); + res = x+t; /* res=arcsin(x) according to Taylor series */ + cor = (x-res)+t; + if (res == res+1.025*cor) return res; + else { + x1 = x+big; + xx = x*x; + x1 -= big; + x2 = x - x1; + p = x1*x1*x1; + s1 = a1.x*p; + s2 = ((((((c7*xx + c6)*xx + c5)*xx + c4)*xx + c3)*xx + c2)*xx*xx*x + + ((a1.x+a2.x)*x2*x2+ 0.5*x1*x)*x2) + a2.x*p; + res1 = x+s1; + s2 = ((x-res1)+s1)+s2; + res = res1+s2; + cor = (res1-res)+s2; + if (res == res+1.00014*cor) return res; + else { + __doasin(x,0,w); + if (w[0]==(w[0]+1.00000001*w[1])) return w[0]; + else { + y=ABS(x); + res=ABS(w[0]); + res1=ABS(w[0]+1.1*w[1]); + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } + } + /*---------------------0.125 <= |x| < 0.5 -----------------------------*/ + else if (k < 0x3fe00000) { + if (k<0x3fd00000) n = 11*((k&0x000fffff)>>15); + else n = 11*((k&0x000fffff)>>14)+352; + if (m>0) xx = x - asncs.x[n]; + else xx = -x - asncs.x[n]; + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+xx*(asncs.x[n+5] + +xx*asncs.x[n+6]))))+asncs.x[n+7]; + t+=p; + res =asncs.x[n+8] +t; + cor = (asncs.x[n+8]-res)+t; + if (res == res+1.05*cor) return (m>0)?res:-res; + else { + r=asncs.x[n+8]+xx*asncs.x[n+9]; + t=((asncs.x[n+8]-r)+xx*asncs.x[n+9])+(p+xx*asncs.x[n+10]); + res = r+t; + cor = (r-res)+t; + if (res == res+1.0005*cor) return (m>0)?res:-res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __dubsin(res,z,w); + z=(w[0]-ABS(x))+w[1]; + if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); + else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); + else { + y=ABS(x); + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } + } /* else if (k < 0x3fe00000) */ + /*-------------------- 0.5 <= |x| < 0.75 -----------------------------*/ + else + if (k < 0x3fe80000) { + n = 1056+((k&0x000fe000)>>11)*3; + if (m>0) xx = x - asncs.x[n]; + else xx = -x - asncs.x[n]; + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+xx*(asncs.x[n+5] + +xx*(asncs.x[n+6]+xx*asncs.x[n+7])))))+asncs.x[n+8]; + t+=p; + res =asncs.x[n+9] +t; + cor = (asncs.x[n+9]-res)+t; + if (res == res+1.01*cor) return (m>0)?res:-res; + else { + r=asncs.x[n+9]+xx*asncs.x[n+10]; + t=((asncs.x[n+9]-r)+xx*asncs.x[n+10])+(p+xx*asncs.x[n+11]); + res = r+t; + cor = (r-res)+t; + if (res == res+1.0005*cor) return (m>0)?res:-res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __dubsin(res,z,w); + z=(w[0]-ABS(x))+w[1]; + if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); + else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); + else { + y=ABS(x); + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } + } /* else if (k < 0x3fe80000) */ + /*--------------------- 0.75 <= |x|< 0.921875 ----------------------*/ + else + if (k < 0x3fed8000) { + n = 992+((k&0x000fe000)>>13)*13; + if (m>0) xx = x - asncs.x[n]; + else xx = -x - asncs.x[n]; + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+xx*(asncs.x[n+5] + +xx*(asncs.x[n+6]+xx*(asncs.x[n+7]+xx*asncs.x[n+8]))))))+asncs.x[n+9]; + t+=p; + res =asncs.x[n+10] +t; + cor = (asncs.x[n+10]-res)+t; + if (res == res+1.01*cor) return (m>0)?res:-res; + else { + r=asncs.x[n+10]+xx*asncs.x[n+11]; + t=((asncs.x[n+10]-r)+xx*asncs.x[n+11])+(p+xx*asncs.x[n+12]); + res = r+t; + cor = (r-res)+t; + if (res == res+1.0008*cor) return (m>0)?res:-res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + y=hp0.x-res; + z=((hp0.x-y)-res)+(hp1.x-z); + __dubcos(y,z,w); + z=(w[0]-ABS(x))+w[1]; + if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); + else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); + else { + y=ABS(x); + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } + } /* else if (k < 0x3fed8000) */ + /*-------------------0.921875 <= |x| < 0.953125 ------------------------*/ + else + if (k < 0x3fee8000) { + n = 884+((k&0x000fe000)>>13)*14; + if (m>0) xx = x - asncs.x[n]; + else xx = -x - asncs.x[n]; + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*(asncs.x[n+6] + +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+ + xx*asncs.x[n+9])))))))+asncs.x[n+10]; + t+=p; + res =asncs.x[n+11] +t; + cor = (asncs.x[n+11]-res)+t; + if (res == res+1.01*cor) return (m>0)?res:-res; + else { + r=asncs.x[n+11]+xx*asncs.x[n+12]; + t=((asncs.x[n+11]-r)+xx*asncs.x[n+12])+(p+xx*asncs.x[n+13]); + res = r+t; + cor = (r-res)+t; + if (res == res+1.0007*cor) return (m>0)?res:-res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + y=(hp0.x-res)-z; + z=y+hp1.x; + y=(y-z)+hp1.x; + __dubcos(z,y,w); + z=(w[0]-ABS(x))+w[1]; + if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); + else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); + else { + y=ABS(x); + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } + } /* else if (k < 0x3fee8000) */ + + /*--------------------0.953125 <= |x| < 0.96875 ------------------------*/ + else + if (k < 0x3fef0000) { + n = 768+((k&0x000fe000)>>13)*15; + if (m>0) xx = x - asncs.x[n]; + else xx = -x - asncs.x[n]; + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*(asncs.x[n+6] + +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+ + xx*(asncs.x[n+9]+xx*asncs.x[n+10]))))))))+asncs.x[n+11]; + t+=p; + res =asncs.x[n+12] +t; + cor = (asncs.x[n+12]-res)+t; + if (res == res+1.01*cor) return (m>0)?res:-res; + else { + r=asncs.x[n+12]+xx*asncs.x[n+13]; + t=((asncs.x[n+12]-r)+xx*asncs.x[n+13])+(p+xx*asncs.x[n+14]); + res = r+t; + cor = (r-res)+t; + if (res == res+1.0007*cor) return (m>0)?res:-res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + y=(hp0.x-res)-z; + z=y+hp1.x; + y=(y-z)+hp1.x; + __dubcos(z,y,w); + z=(w[0]-ABS(x))+w[1]; + if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); + else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); + else { + y=ABS(x); + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } + } /* else if (k < 0x3fef0000) */ + /*--------------------0.96875 <= |x| < 1 --------------------------------*/ + else + if (k<0x3ff00000) { + z = 0.5*((m>0)?(1.0-x):(1.0+x)); + v.x=z; + k=v.i[HIGH_HALF]; + t=inroot[(k&0x001fffff)>>14]*powtwo[511-(k>>21)]; + r=1.0-t*t*z; + t = t*(rt0+r*(rt1+r*(rt2+r*rt3))); + c=t*z; + t=c*(1.5-0.5*t*c); + y=(c+t24)-t24; + cc = (z-y*y)/(t+y); + p=(((((f6*z+f5)*z+f4)*z+f3)*z+f2)*z+f1)*z; + cor = (hp1.x - 2.0*cc)-2.0*(y+cc)*p; + res1 = hp0.x - 2.0*y; + res =res1 + cor; + if (res == res+1.003*((res1-res)+cor)) return (m>0)?res:-res; + else { + c=y+cc; + cc=(y-c)+cc; + __doasin(c,cc,w); + res1=hp0.x-2.0*w[0]; + cor=((hp0.x-res1)-2.0*w[0])+(hp1.x-2.0*w[1]); + res = res1+cor; + cor = (res1-res)+cor; + if (res==(res+1.0000001*cor)) return (m>0)?res:-res; + else { + y=ABS(x); + res1=res+1.1*cor; + return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); + } + } + } /* else if (k < 0x3ff00000) */ + /*---------------------------- |x|>=1 -------------------------------*/ + else if (k==0x3ff00000 && u.i[LOW_HALF]==0) return (m>0)?hp0.x:-hp0.x; + else + if (k>0x7ff00000 || (k == 0x7ff00000 && u.i[LOW_HALF] != 0)) return x; + else { + u.i[HIGH_HALF]=0x7ff00000; + v.i[HIGH_HALF]=0x7ff00000; + u.i[LOW_HALF]=0; + v.i[LOW_HALF]=0; + return u.x/v.x; /* NaN */ + } +} + +/*******************************************************************/ +/* */ +/* End of arcsine, below is arccosine */ +/* */ +/*******************************************************************/ + +double __ieee754_acos(double x) { - double t,w,p,q,c,r,s,p1,p2,p3,q1,q2,z2,z4,z6; - int32_t hx,ix; - GET_HIGH_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>= 0x3ff00000) { /* |x|>= 1 */ - u_int32_t lx; - GET_LOW_WORD(lx,x); - if(((ix-0x3ff00000)|lx)==0) - /* asin(1)=+-pi/2 with inexact */ - return x*pio2_hi+x*pio2_lo; - return (x-x)/(x-x); /* asin(|x|>1) is NaN */ - } else if (ix<0x3fe00000) { /* |x|<0.5 */ - if(ix<0x3e400000) { /* if |x| < 2**-27 */ - if(huge+x>one) return x;/* return x with inexact if x!=0*/ - } else { - t = x*x; -#ifdef DO_NOT_USE_THIS - p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); - q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); -#else - p1 = t*pS[0]; z2=t*t; - p2 = pS[1]+t*pS[2]; z4=z2*z2; - p3 = pS[3]+t*pS[4]; z6=z4*z2; - q1 = one+t*qS[1]; - q2 = qS[2]+t*qS[3]; - p = p1 + z2*p2 + z4*p3 + z6*pS[5]; - q = q1 + z2*q2 + z4*qS[4]; + double x1,x2,xx,s1,s2,res1,p,t,res,r,cor,cc,y,c,z,w[2],eps; +#if 0 + double fc; #endif - w = p/q; - return x+x*w; - } - } - /* 1> |x|>= 0.5 */ - w = one-fabs(x); - t = w*0.5; -#ifdef DO_NOT_USE_THIS - p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); - q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); -#else - p1 = t*pS[0]; z2=t*t; - p2 = pS[1]+t*pS[2]; z4=z2*z2; - p3 = pS[3]+t*pS[4]; z6=z4*z2; - q1 = one+t*qS[1]; - q2 = qS[2]+t*qS[3]; - p = p1 + z2*p2 + z4*p3 + z6*pS[5]; - q = q1 + z2*q2 + z4*qS[4]; + mynumber u,v; + int4 k,m,n; +#if 0 + int4 nn; #endif - s = __ieee754_sqrt(t); - if(ix>=0x3FEF3333) { /* if |x| > 0.975 */ - w = p/q; - t = pio2_hi-(2.0*(s+s*w)-pio2_lo); - } else { - w = s; - SET_LOW_WORD(w,0); - c = (t-w*w)/(s+w); - r = p/q; - p = 2.0*s*r-(pio2_lo-2.0*c); - q = pio4_hi-2.0*w; - t = pio4_hi-(p-q); + u.x = x; + m = u.i[HIGH_HALF]; + k = 0x7fffffff&m; + /*------------------- |x|<2.77556*10^-17 ----------------------*/ + if (k < 0x3c880000) return hp0.x; + + /*----------------- 2.77556*10^-17 <= |x| < 2^-3 --------------*/ + else + if (k < 0x3fc00000) { + x2 = x*x; + t = (((((f6*x2 + f5)*x2 + f4)*x2 + f3)*x2 + f2)*x2 + f1)*(x2*x); + r=hp0.x-x; + cor=(((hp0.x-r)-x)+hp1.x)-t; + res = r+cor; + cor = (r-res)+cor; + if (res == res+1.004*cor) return res; + else { + x1 = x+big; + xx = x*x; + x1 -= big; + x2 = x - x1; + p = x1*x1*x1; + s1 = a1.x*p; + s2 = ((((((c7*xx + c6)*xx + c5)*xx + c4)*xx + c3)*xx + c2)*xx*xx*x + + ((a1.x+a2.x)*x2*x2+ 0.5*x1*x)*x2) + a2.x*p; + res1 = x+s1; + s2 = ((x-res1)+s1)+s2; + r=hp0.x-res1; + cor=(((hp0.x-r)-res1)+hp1.x)-s2; + res = r+cor; + cor = (r-res)+cor; + if (res == res+1.00004*cor) return res; + else { + __doasin(x,0,w); + r=hp0.x-w[0]; + cor=((hp0.x-r)-w[0])+(hp1.x-w[1]); + res=r+cor; + cor=(r-res)+cor; + if (res ==(res +1.00000001*cor)) return res; + else { + res1=res+1.1*cor; + return __cos32(x,res,res1); } - if(hx>0) return t; else return -t; + } + } + } /* else if (k < 0x3fc00000) */ + /*---------------------- 0.125 <= |x| < 0.5 --------------------*/ + else + if (k < 0x3fe00000) { + if (k<0x3fd00000) n = 11*((k&0x000fffff)>>15); + else n = 11*((k&0x000fffff)>>14)+352; + if (m>0) xx = x - asncs.x[n]; + else xx = -x - asncs.x[n]; + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*asncs.x[n+6]))))+asncs.x[n+7]; + t+=p; + y = (m>0)?(hp0.x-asncs.x[n+8]):(hp0.x+asncs.x[n+8]); + t = (m>0)?(hp1.x-t):(hp1.x+t); + res = y+t; + if (res == res+1.02*((y-res)+t)) return res; + else { + r=asncs.x[n+8]+xx*asncs.x[n+9]; + t=((asncs.x[n+8]-r)+xx*asncs.x[n+9])+(p+xx*asncs.x[n+10]); + if (m>0) + {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; } + else + {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); } + res = p+t; + cor = (p-res)+t; + if (res == (res+1.0002*cor)) return res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __docos(res,z,w); + z=(w[0]-x)+w[1]; + if (z>1.0e-27) return max(res,res1); + else if (z<-1.0e-27) return min(res,res1); + else return __cos32(x,res,res1); + } + } + } /* else if (k < 0x3fe00000) */ + + /*--------------------------- 0.5 <= |x| < 0.75 ---------------------*/ + else + if (k < 0x3fe80000) { + n = 1056+((k&0x000fe000)>>11)*3; + if (m>0) {xx = x - asncs.x[n]; eps=1.04; } + else {xx = -x - asncs.x[n]; eps=1.02; } + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*(asncs.x[n+6]+ + xx*asncs.x[n+7])))))+asncs.x[n+8]; + t+=p; + y = (m>0)?(hp0.x-asncs.x[n+9]):(hp0.x+asncs.x[n+9]); + t = (m>0)?(hp1.x-t):(hp1.x+t); + res = y+t; + if (res == res+eps*((y-res)+t)) return res; + else { + r=asncs.x[n+9]+xx*asncs.x[n+10]; + t=((asncs.x[n+9]-r)+xx*asncs.x[n+10])+(p+xx*asncs.x[n+11]); + if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0004; } + else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0002; } + res = p+t; + cor = (p-res)+t; + if (res == (res+eps*cor)) return res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __docos(res,z,w); + z=(w[0]-x)+w[1]; + if (z>1.0e-27) return max(res,res1); + else if (z<-1.0e-27) return min(res,res1); + else return __cos32(x,res,res1); + } + } + } /* else if (k < 0x3fe80000) */ + +/*------------------------- 0.75 <= |x| < 0.921875 -------------*/ + else + if (k < 0x3fed8000) { + n = 992+((k&0x000fe000)>>13)*13; + if (m>0) {xx = x - asncs.x[n]; eps = 1.04; } + else {xx = -x - asncs.x[n]; eps = 1.01; } + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*(asncs.x[n+6]+xx*(asncs.x[n+7]+ + xx*asncs.x[n+8]))))))+asncs.x[n+9]; + t+=p; + y = (m>0)?(hp0.x-asncs.x[n+10]):(hp0.x+asncs.x[n+10]); + t = (m>0)?(hp1.x-t):(hp1.x+t); + res = y+t; + if (res == res+eps*((y-res)+t)) return res; + else { + r=asncs.x[n+10]+xx*asncs.x[n+11]; + t=((asncs.x[n+10]-r)+xx*asncs.x[n+11])+(p+xx*asncs.x[n+12]); + if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0032; } + else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0008; } + res = p+t; + cor = (p-res)+t; + if (res == (res+eps*cor)) return res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __docos(res,z,w); + z=(w[0]-x)+w[1]; + if (z>1.0e-27) return max(res,res1); + else if (z<-1.0e-27) return min(res,res1); + else return __cos32(x,res,res1); + } + } + } /* else if (k < 0x3fed8000) */ + +/*-------------------0.921875 <= |x| < 0.953125 ------------------*/ + else + if (k < 0x3fee8000) { + n = 884+((k&0x000fe000)>>13)*14; + if (m>0) {xx = x - asncs.x[n]; eps=1.04; } + else {xx = -x - asncs.x[n]; eps =1.005; } + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*(asncs.x[n+6] + +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+ + xx*asncs.x[n+9])))))))+asncs.x[n+10]; + t+=p; + y = (m>0)?(hp0.x-asncs.x[n+11]):(hp0.x+asncs.x[n+11]); + t = (m>0)?(hp1.x-t):(hp1.x+t); + res = y+t; + if (res == res+eps*((y-res)+t)) return res; + else { + r=asncs.x[n+11]+xx*asncs.x[n+12]; + t=((asncs.x[n+11]-r)+xx*asncs.x[n+12])+(p+xx*asncs.x[n+13]); + if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0030; } + else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0005; } + res = p+t; + cor = (p-res)+t; + if (res == (res+eps*cor)) return res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __docos(res,z,w); + z=(w[0]-x)+w[1]; + if (z>1.0e-27) return max(res,res1); + else if (z<-1.0e-27) return min(res,res1); + else return __cos32(x,res,res1); + } + } + } /* else if (k < 0x3fee8000) */ + + /*--------------------0.953125 <= |x| < 0.96875 ----------------*/ + else + if (k < 0x3fef0000) { + n = 768+((k&0x000fe000)>>13)*15; + if (m>0) {xx = x - asncs.x[n]; eps=1.04; } + else {xx = -x - asncs.x[n]; eps=1.005;} + t = asncs.x[n+1]*xx; + p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ + xx*(asncs.x[n+5]+xx*(asncs.x[n+6] + +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+xx*(asncs.x[n+9]+ + xx*asncs.x[n+10]))))))))+asncs.x[n+11]; + t+=p; + y = (m>0)?(hp0.x-asncs.x[n+12]):(hp0.x+asncs.x[n+12]); + t = (m>0)?(hp1.x-t):(hp1.x+t); + res = y+t; + if (res == res+eps*((y-res)+t)) return res; + else { + r=asncs.x[n+12]+xx*asncs.x[n+13]; + t=((asncs.x[n+12]-r)+xx*asncs.x[n+13])+(p+xx*asncs.x[n+14]); + if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0030; } + else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0005; } + res = p+t; + cor = (p-res)+t; + if (res == (res+eps*cor)) return res; + else { + res1=res+1.1*cor; + z=0.5*(res1-res); + __docos(res,z,w); + z=(w[0]-x)+w[1]; + if (z>1.0e-27) return max(res,res1); + else if (z<-1.0e-27) return min(res,res1); + else return __cos32(x,res,res1); + } + } + } /* else if (k < 0x3fef0000) */ + /*-----------------0.96875 <= |x| < 1 ---------------------------*/ + + else + if (k<0x3ff00000) { + z = 0.5*((m>0)?(1.0-x):(1.0+x)); + v.x=z; + k=v.i[HIGH_HALF]; + t=inroot[(k&0x001fffff)>>14]*powtwo[511-(k>>21)]; + r=1.0-t*t*z; + t = t*(rt0+r*(rt1+r*(rt2+r*rt3))); + c=t*z; + t=c*(1.5-0.5*t*c); + y = (t27*c+c)-t27*c; + cc = (z-y*y)/(t+y); + p=(((((f6*z+f5)*z+f4)*z+f3)*z+f2)*z+f1)*z; + if (m<0) { + cor = (hp1.x - cc)-(y+cc)*p; + res1 = hp0.x - y; + res =res1 + cor; + if (res == res+1.002*((res1-res)+cor)) return (res+res); + else { + c=y+cc; + cc=(y-c)+cc; + __doasin(c,cc,w); + res1=hp0.x-w[0]; + cor=((hp0.x-res1)-w[0])+(hp1.x-w[1]); + res = res1+cor; + cor = (res1-res)+cor; + if (res==(res+1.000001*cor)) return (res+res); + else { + res=res+res; + res1=res+1.2*cor; + return __cos32(x,res,res1); + } + } + } + else { + cor = cc+p*(y+cc); + res = y + cor; + if (res == res+1.03*((y-res)+cor)) return (res+res); + else { + c=y+cc; + cc=(y-c)+cc; + __doasin(c,cc,w); + res = w[0]; + cor=w[1]; + if (res==(res+1.000001*cor)) return (res+res); + else { + res=res+res; + res1=res+1.2*cor; + return __cos32(x,res,res1); + } + } + } + } /* else if (k < 0x3ff00000) */ + + /*---------------------------- |x|>=1 -----------------------*/ + else + if (k==0x3ff00000 && u.i[LOW_HALF]==0) return (m>0)?0:2.0*hp0.x; + else + if (k>0x7ff00000 || (k == 0x7ff00000 && u.i[LOW_HALF] != 0)) return x; + else { + u.i[HIGH_HALF]=0x7ff00000; + v.i[HIGH_HALF]=0x7ff00000; + u.i[LOW_HALF]=0; + v.i[LOW_HALF]=0; + return u.x/v.x; + } } diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_atan2.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_atan2.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_atan2.c Tue Jul 13 16:48:18 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_atan2.c Mon Mar 26 20:53:25 2001 @@ -1,130 +1,403 @@ -/* @(#)e_atan2.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_atan2.c,v 1.8 1995/05/10 20:44:51 jtc Exp $"; -#endif - -/* __ieee754_atan2(y,x) - * Method : - * 1. Reduce y to positive by atan2(y,x)=-atan2(-y,x). - * 2. Reduce x to positive by (if x and y are unexceptional): - * ARG (x+iy) = arctan(y/x) ... if x > 0, - * ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0, + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * Special cases: + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * ATAN2((anything), NaN ) is NaN; - * ATAN2(NAN , (anything) ) is NaN; - * ATAN2(+-0, +(anything but NaN)) is +-0 ; - * ATAN2(+-0, -(anything but NaN)) is +-pi ; - * ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2; - * ATAN2(+-(anything but INF and NaN), +INF) is +-0 ; - * ATAN2(+-(anything but INF and NaN), -INF) is +-pi; - * ATAN2(+-INF,+INF ) is +-pi/4 ; - * ATAN2(+-INF,-INF ) is +-3pi/4; - * ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2; + * This program 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 General Public License for more details. * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/************************************************************************/ +/* MODULE_NAME: atnat2.c */ +/* */ +/* FUNCTIONS: uatan2 */ +/* atan2Mp */ +/* signArctan2 */ +/* normalized */ +/* */ +/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h atnat2.h */ +/* mpatan.c mpatan2.c mpsqrt.c */ +/* uatan.tbl */ +/* */ +/* An ultimate atan2() routine. Given two IEEE double machine numbers y,*/ +/* x it computes the correctly rounded (to nearest) value of atan2(y,x).*/ +/* */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/************************************************************************/ -#include "math.h" -#include "math_private.h" +#include "dla.h" +#include "mpa.h" +#include "MathLib.h" +#include "uatan.tbl" +#include "atnat2.h" +/************************************************************************/ +/* An ultimate atan2 routine. Given two IEEE double machine numbers y,x */ +/* it computes the correctly rounded (to nearest) value of atan2(y,x). */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/************************************************************************/ +static double atan2Mp(double ,double ,const int[]); +static double signArctan2(double ,double); +static double normalized(double ,double,double ,double); +void __mpatan2(mp_no *,mp_no *,mp_no *,int); -#ifdef __STDC__ -static const double -#else -static double -#endif -tiny = 1.0e-300, -zero = 0.0, -pi_o_4 = 7.8539816339744827900E-01, /* 0x3FE921FB, 0x54442D18 */ -pi_o_2 = 1.5707963267948965580E+00, /* 0x3FF921FB, 0x54442D18 */ -pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */ -pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ +double __ieee754_atan2(double y,double x) { -#ifdef __STDC__ - double __ieee754_atan2(double y, double x) -#else - double __ieee754_atan2(y,x) - double y,x; + int i,de,ux,dx,uy,dy; +#if 0 + int p; +#endif + static const int pr[MM]={6,8,10,20,32}; + double ax,ay,u,du,u9,ua,v,vv,dv,t1,t2,t3,t4,t5,t6,t7,t8, + z,zz,cor,s1,ss1,s2,ss2; +#if 0 + double z1,z2; +#endif + number num; +#if 0 + mp_no mperr,mpt1,mpx,mpy,mpz,mpz1,mpz2; #endif -{ - double z; - int32_t k,m,hx,hy,ix,iy; - u_int32_t lx,ly; - EXTRACT_WORDS(hx,lx,x); - ix = hx&0x7fffffff; - EXTRACT_WORDS(hy,ly,y); - iy = hy&0x7fffffff; - if(((ix|((lx|-lx)>>31))>0x7ff00000)|| - ((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */ - return x+y; - if(((hx-0x3ff00000)|lx)==0) return __atan(y); /* x=1.0 */ - m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ + static const int ep= 59768832, /* 57*16**5 */ + em=-59768832; /* -57*16**5 */ - /* when y = 0 */ - if((iy|ly)==0) { - switch(m) { - case 0: - case 1: return y; /* atan(+-0,+anything)=+-0 */ - case 2: return pi+tiny;/* atan(+0,-anything) = pi */ - case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ - } - } - /* when x = 0 */ - if((ix|lx)==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* when x is INF */ - if(ix==0x7ff00000) { - if(iy==0x7ff00000) { - switch(m) { - case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */ - case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */ - case 2: return 3.0*pi_o_4+tiny;/*atan(+INF,-INF)*/ - case 3: return -3.0*pi_o_4-tiny;/*atan(-INF,-INF)*/ - } - } else { - switch(m) { - case 0: return zero ; /* atan(+...,+INF) */ - case 1: return -zero ; /* atan(-...,+INF) */ - case 2: return pi+tiny ; /* atan(+...,-INF) */ - case 3: return -pi-tiny ; /* atan(-...,-INF) */ - } - } - } - /* when y is INF */ - if(iy==0x7ff00000) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; + /* x=NaN or y=NaN */ + num.d = x; ux = num.i[HIGH_HALF]; dx = num.i[LOW_HALF]; + if ((ux&0x7ff00000) ==0x7ff00000) { + if (((ux&0x000fffff)|dx)!=0x00000000) return x+x; } + num.d = y; uy = num.i[HIGH_HALF]; dy = num.i[LOW_HALF]; + if ((uy&0x7ff00000) ==0x7ff00000) { + if (((uy&0x000fffff)|dy)!=0x00000000) return y+y; } - /* compute y/x */ - k = (iy-ix)>>20; - if(k > 60) z=pi_o_2+0.5*pi_lo; /* |y/x| > 2**60 */ - else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */ - else z=__atan(fabs(y/x)); /* safe to do y/x */ - switch (m) { - case 0: return z ; /* atan(+,+) */ - case 1: { - u_int32_t zh; - GET_HIGH_WORD(zh,z); - SET_HIGH_WORD(z,zh ^ 0x80000000); - } - return z ; /* atan(-,+) */ - case 2: return pi-(z-pi_lo);/* atan(+,-) */ - default: /* case 3 */ - return (z-pi_lo)-pi;/* atan(-,-) */ - } + /* y=+-0 */ + if (uy==0x00000000) { + if (dy==0x00000000) { + if ((ux&0x80000000)==0x00000000) return ZERO; + else return opi.d; } } + else if (uy==0x80000000) { + if (dy==0x00000000) { + if ((ux&0x80000000)==0x00000000) return MZERO; + else return mopi.d;} } + + /* x=+-0 */ + if (x==ZERO) { + if ((uy&0x80000000)==0x00000000) return hpi.d; + else return mhpi.d; } + + /* x=+-INF */ + if (ux==0x7ff00000) { + if (dx==0x00000000) { + if (uy==0x7ff00000) { + if (dy==0x00000000) return qpi.d; } + else if (uy==0xfff00000) { + if (dy==0x00000000) return mqpi.d; } + else { + if ((uy&0x80000000)==0x00000000) return ZERO; + else return MZERO; } + } + } + else if (ux==0xfff00000) { + if (dx==0x00000000) { + if (uy==0x7ff00000) { + if (dy==0x00000000) return tqpi.d; } + else if (uy==0xfff00000) { + if (dy==0x00000000) return mtqpi.d; } + else { + if ((uy&0x80000000)==0x00000000) return opi.d; + else return mopi.d; } + } + } + + /* y=+-INF */ + if (uy==0x7ff00000) { + if (dy==0x00000000) return hpi.d; } + else if (uy==0xfff00000) { + if (dy==0x00000000) return mhpi.d; } + + /* either x/y or y/x is very close to zero */ + ax = (x=ep) { return ((y>ZERO) ? hpi.d : mhpi.d); } + else if (de<=em) { + if (x>ZERO) { + if ((z=ay/ax)ZERO) ? opi.d : mopi.d); } } + + /* if either x or y is extremely close to zero, scale abs(x), abs(y). */ + if (axZERO) { + + /* (i) x>0, abs(y)< abs(x): atan(ay/ax) */ + if (ay0, abs(x)<=abs(y): pi/2-atan(ax/ay) */ + else { + if (u= 1/2 */ + if ((z=t1+(zz-ua)) == t1+(zz+ua)) return signArctan2(y,z); + + t1=u-hij[i][0].d; + EADD(t1,du,v,vv) + s1=v*(hij[i][11].d+v*(hij[i][12].d+v*(hij[i][13].d+ + v*(hij[i][14].d+v* hij[i][15].d)))); + ADD2(hij[i][9].d,hij[i][10].d,s1,ZERO,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][7].d,hij[i][8].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][5].d,hij[i][6].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][3].d,hij[i][4].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][1].d,hij[i][2].d,s1,ss1,s2,ss2,t1,t2) + SUB2(hpi.d,hpi1.d,s2,ss2,s1,ss1,t1,t2) + if ((z=s1+(ss1-uc.d)) == s1+(ss1+uc.d)) return signArctan2(y,z); + return atan2Mp(x,y,pr); + } + } + } + else { + + /* (iii) x<0, abs(x)< abs(y): pi/2+atan(ax/ay) */ + if (ax= 1/2 */ + if ((z=t1+(zz-ua)) == t1+(zz+ua)) return signArctan2(y,z); + + t1=u-hij[i][0].d; + EADD(t1,du,v,vv) + s1=v*(hij[i][11].d+v*(hij[i][12].d+v*(hij[i][13].d+ + v*(hij[i][14].d+v* hij[i][15].d)))); + ADD2(hij[i][9].d,hij[i][10].d,s1,ZERO,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][7].d,hij[i][8].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][5].d,hij[i][6].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][3].d,hij[i][4].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][1].d,hij[i][2].d,s1,ss1,s2,ss2,t1,t2) + ADD2(hpi.d,hpi1.d,s2,ss2,s1,ss1,t1,t2) + if ((z=s1+(ss1-uc.d)) == s1+(ss1+uc.d)) return signArctan2(y,z); + return atan2Mp(x,y,pr); + } + } + + /* (iv) x<0, abs(y)<=abs(x): pi-atan(ax/ay) */ + else { + if (u= 1/2 */ + if ((z=t1+(zz-ua)) == t1+(zz+ua)) return signArctan2(y,z); + + t1=u-hij[i][0].d; + EADD(t1,du,v,vv) + s1=v*(hij[i][11].d+v*(hij[i][12].d+v*(hij[i][13].d+ + v*(hij[i][14].d+v* hij[i][15].d)))); + ADD2(hij[i][9].d,hij[i][10].d,s1,ZERO,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][7].d,hij[i][8].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][5].d,hij[i][6].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][3].d,hij[i][4].d,s1,ss1,s2,ss2,t1,t2) + MUL2(v,vv,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][1].d,hij[i][2].d,s1,ss1,s2,ss2,t1,t2) + SUB2(opi.d,opi1.d,s2,ss2,s1,ss1,t1,t2) + if ((z=s1+(ss1-uc.d)) == s1+(ss1+uc.d)) return signArctan2(y,z); + return atan2Mp(x,y,pr); + } + } + } +} + /* Treat the Denormalized case */ +static double normalized(double ax,double ay,double y, double z) + { int p; + mp_no mpx,mpy,mpz,mperr,mpz2,mpt1; + p=6; + __dbl_mp(ax,&mpx,p); __dbl_mp(ay,&mpy,p); __dvd(&mpy,&mpx,&mpz,p); + __dbl_mp(ue.d,&mpt1,p); __mul(&mpz,&mpt1,&mperr,p); + __sub(&mpz,&mperr,&mpz2,p); __mp_dbl(&mpz2,&z,p); + return signArctan2(y,z); +} + /* Fix the sign and return after stage 1 or stage 2 */ +static double signArctan2(double y,double z) +{ + return ((y +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/***************************************************************************/ +/* MODULE_NAME:uexp.c */ +/* */ +/* FUNCTION:uexp */ +/* exp1 */ +/* */ +/* FILES NEEDED:dla.h endian.h mpa.h mydefs.h uexp.h */ +/* mpa.c mpexp.x slowexp.c */ +/* */ +/* An ultimate exp routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of e^x */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/***************************************************************************/ - 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. +#include "endian.h" +#include "uexp.h" +#include "mydefs.h" +#include "MathLib.h" +#include "uexp.tbl" +double __slowexp(double); - 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. +/***************************************************************************/ +/* An ultimate exp routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of e^x */ +/***************************************************************************/ +double __ieee754_exp(double x) { + double bexp, t, eps, del, base, y, al, bet, res, rem, cor; + mynumber junk1, junk2, binexp = {{0,0}}; +#if 0 + int4 k; +#endif + int4 i,j,m,n,ex; - 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. */ + junk1.x = x; + m = junk1.i[HIGH_HALF]; + n = m&hugeint; -/* How this works: - The basic design here is from - Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical - Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., - 17 (1), March 1991, pp. 26-45. + if (n > smallint && n < bigint) { - The input value, x, is written as + y = x*log2e.x + three51.x; + bexp = y - three51.x; /* multiply the result by 2**bexp */ - x = n * ln(2)_0 + t/512 + delta[t] + x + n * ln(2)_1 + junk1.x = y; - where: - - n is an integer, 1024 >= n >= -1075; - - ln(2)_0 is the first 43 bits of ln(2), and ln(2)_1 is the remainder, so - that |ln(2)_1| < 2^-32; - - t is an integer, 177 >= t >= -177 - - delta is based on a table entry, delta[t] < 2^-28 - - x is whatever is left, |x| < 2^-10 + eps = bexp*ln_two2.x; /* x = bexp*ln(2) + t - eps */ + t = x - bexp*ln_two1.x; - Then e^x is approximated as + y = t + three33.x; + base = y - three33.x; /* t rounded to a multiple of 2**-18 */ + junk2.x = y; + del = (t - base) - eps; /* x = bexp*ln(2) + base + del */ + eps = del + del*del*(p3.x*del + p2.x); - e^x = 2^n_1 ( 2^n_0 e^(t/512 + delta[t]) - + ( 2^n_0 e^(t/512 + delta[t]) - * ( p(x + n * ln(2)_1) - - n*ln(2)_1 - - n*ln(2)_1 * p(x + n * ln(2)_1) ) ) ) + binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+1023)<<20; - where - - p(x) is a polynomial approximating e(x)-1; - - e^(t/512 + delta[t]) is obtained from a table; - - n_1 + n_0 = n, so that |n_0| < DBL_MIN_EXP-1. + i = ((junk2.i[LOW_HALF]>>8)&0xfffffffe)+356; + j = (junk2.i[LOW_HALF]&511)<<1; - If it happens that n_1 == 0 (this is the usual case), that multiplication - is omitted. - */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include + al = coar.x[i]*fine.x[j]; + bet =(coar.x[i]*fine.x[j+1] + coar.x[i+1]*fine.x[j]) + coar.x[i+1]*fine.x[j+1]; -extern const float __exp_deltatable[178]; -extern const double __exp_atable[355] /* __attribute__((mode(DF))) */; + rem=(bet + bet*eps)+al*eps; + res = al + rem; + cor = (al - res) + rem; + if (res == (res+cor*err_0)) return res*binexp.x; + else return __slowexp(x); /*if error is over bound */ + } -static const volatile double TWO1023 = 8.988465674311579539e+307; -static const volatile double TWOM1000 = 9.3326361850321887899e-302; + if (n <= smallint) return 1.0; -double -__ieee754_exp (double x) -{ - static const double himark = 709.7827128933840868; - static const double lomark = -745.1332191019412221; - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - static const double THREEp42 = 13194139533312.0; - static const double THREEp51 = 6755399441055744.0; - /* 1/ln(2). */ - static const double M_1_LN2 = 1.442695040888963387; - /* ln(2), part 1 */ - static const double M_LN2_0 = .6931471805598903302; - /* ln(2), part 2 */ - static const double M_LN2_1 = 5.497923018708371155e-14; + if (n >= badint) { + if (n > infint) return(zero/zero); /* x is NaN, return invalid */ + if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) ); + /* x is finite, cause either overflow or underflow */ + if (junk1.i[LOW_HALF] != 0) return (zero/zero); /* x is NaN */ + return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */ + } - int tval, unsafe, n_i; - double x22, n, t, dely, result; - union ieee754_double ex2_u, scale_u; - fenv_t oldenv; + y = x*log2e.x + three51.x; + bexp = y - three51.x; + junk1.x = y; + eps = bexp*ln_two2.x; + t = x - bexp*ln_two1.x; + y = t + three33.x; + base = y - three33.x; + junk2.x = y; + del = (t - base) - eps; + eps = del + del*del*(p3.x*del + p2.x); + i = ((junk2.i[LOW_HALF]>>8)&0xfffffffe)+356; + j = (junk2.i[LOW_HALF]&511)<<1; + al = coar.x[i]*fine.x[j]; + bet =(coar.x[i]*fine.x[j+1] + coar.x[i+1]*fine.x[j]) + coar.x[i+1]*fine.x[j+1]; + rem=(bet + bet*eps)+al*eps; + res = al + rem; + cor = (al - res) + rem; + if (m>>31) { + ex=junk1.i[LOW_HALF]; + if (res < 1.0) {res+=res; cor+=cor; ex-=1;} + if (ex >=-1022) { + binexp.i[HIGH_HALF] = (1023+ex)<<20; + if (res == (res+cor*err_0)) return res*binexp.x; + else return __slowexp(x); /*if error is over bound */ + } + ex = -(1022+ex); + binexp.i[HIGH_HALF] = (1023-ex)<<20; + res*=binexp.x; + cor*=binexp.x; + eps=1.0000000001+err_0*binexp.x; + t=1.0+res; + y = ((1.0-t)+res)+cor; + res=t+y; + cor = (t-res)+y; + if (res == (res + eps*cor)) + { binexp.i[HIGH_HALF] = 0x00100000; + return (res-1.0)*binexp.x; + } + else return __slowexp(x); /* if error is over bound */ + } + else { + binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+767)<<20; + if (res == (res+cor*err_0)) return res*binexp.x*t256.x; + else return __slowexp(x); + } +} - feholdexcept (&oldenv); -#ifdef FE_TONEAREST - fesetround (FE_TONEAREST); +/************************************************************************/ +/* Compute e^(x+xx)(Double-Length number) .The routine also receive */ +/* bound of error of previous calculation .If after computing exp */ +/* error bigger than allows routine return non positive number */ +/*else return e^(x + xx) (always positive ) */ +/************************************************************************/ + +double __exp1(double x, double xx, double error) { + double bexp, t, eps, del, base, y, al, bet, res, rem, cor; + mynumber junk1, junk2, binexp = {{0,0}}; +#if 0 + int4 k; #endif + int4 i,j,m,n,ex; - /* Calculate n. */ - n = x * M_1_LN2 + THREEp51; - n -= THREEp51; - x = x - n*M_LN2_0; + junk1.x = x; + m = junk1.i[HIGH_HALF]; + n = m&hugeint; /* no sign */ - /* Calculate t/512. */ - t = x + THREEp42; - t -= THREEp42; - x -= t; + if (n > smallint && n < bigint) { + y = x*log2e.x + three51.x; + bexp = y - three51.x; /* multiply the result by 2**bexp */ - /* Compute tval = t. */ - tval = (int) (t * 512.0); + junk1.x = y; - if (t >= 0) - x -= __exp_deltatable[tval]; - else - x += __exp_deltatable[-tval]; + eps = bexp*ln_two2.x; /* x = bexp*ln(2) + t - eps */ + t = x - bexp*ln_two1.x; - /* Now, the variable x contains x + n*ln(2)_1. */ - dely = n*M_LN2_1; + y = t + three33.x; + base = y - three33.x; /* t rounded to a multiple of 2**-18 */ + junk2.x = y; + del = (t - base) + (xx-eps); /* x = bexp*ln(2) + base + del */ + eps = del + del*del*(p3.x*del + p2.x); - /* Compute ex2 = 2^n_0 e^(t/512+delta[t]). */ - ex2_u.d = __exp_atable[tval+177]; - n_i = (int)n; - /* 'unsafe' is 1 iff n_1 != 0. */ - unsafe = abs(n_i) >= -DBL_MIN_EXP - 1; - ex2_u.ieee.exponent += n_i >> unsafe; + binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+1023)<<20; - /* Compute scale = 2^n_1. */ - scale_u.d = 1.0; - scale_u.ieee.exponent += n_i - (n_i >> unsafe); + i = ((junk2.i[LOW_HALF]>>8)&0xfffffffe)+356; + j = (junk2.i[LOW_HALF]&511)<<1; - /* Approximate e^x2 - 1, using a fourth-degree polynomial, - with maximum error in [-2^-10-2^-28,2^-10+2^-28] - less than 4.9e-19. */ - x22 = (((0.04166666898464281565 - * x + 0.1666666766008501610) - * x + 0.499999999999990008) - * x + 0.9999999999999976685) * x; - /* Allow for impact of dely. */ - x22 -= dely + dely*x22; + al = coar.x[i]*fine.x[j]; + bet =(coar.x[i]*fine.x[j+1] + coar.x[i+1]*fine.x[j]) + coar.x[i+1]*fine.x[j+1]; - /* Return result. */ - fesetenv (&oldenv); + rem=(bet + bet*eps)+al*eps; + res = al + rem; + cor = (al - res) + rem; + if (res == (res+cor*(1.0+error+err_1))) return res*binexp.x; + else return -10.0; + } - result = x22 * ex2_u.d + ex2_u.d; - if (!unsafe) - return result; - else - return result * scale_u.d; - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (__isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TWOM1000 * TWOM1000; + if (n <= smallint) return 1.0; /* if x->0 e^x=1 */ + + if (n >= badint) { + if (n > infint) return(zero/zero); /* x is NaN, return invalid */ + if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) ); + /* x is finite, cause either overflow or underflow */ + if (junk1.i[LOW_HALF] != 0) return (zero/zero); /* x is NaN */ + return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */ + } + + y = x*log2e.x + three51.x; + bexp = y - three51.x; + junk1.x = y; + eps = bexp*ln_two2.x; + t = x - bexp*ln_two1.x; + y = t + three33.x; + base = y - three33.x; + junk2.x = y; + del = (t - base) + (xx-eps); + eps = del + del*del*(p3.x*del + p2.x); + i = ((junk2.i[LOW_HALF]>>8)&0xfffffffe)+356; + j = (junk2.i[LOW_HALF]&511)<<1; + al = coar.x[i]*fine.x[j]; + bet =(coar.x[i]*fine.x[j+1] + coar.x[i+1]*fine.x[j]) + coar.x[i+1]*fine.x[j+1]; + rem=(bet + bet*eps)+al*eps; + res = al + rem; + cor = (al - res) + rem; + if (m>>31) { + ex=junk1.i[LOW_HALF]; + if (res < 1.0) {res+=res; cor+=cor; ex-=1;} + if (ex >=-1022) { + binexp.i[HIGH_HALF] = (1023+ex)<<20; + if (res == (res+cor*(1.0+error+err_1))) return res*binexp.x; + else return -10.0; } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO1023*x; + ex = -(1022+ex); + binexp.i[HIGH_HALF] = (1023-ex)<<20; + res*=binexp.x; + cor*=binexp.x; + eps=1.00000000001+(error+err_1)*binexp.x; + t=1.0+res; + y = ((1.0-t)+res)+cor; + res=t+y; + cor = (t-res)+y; + if (res == (res + eps*cor)) + {binexp.i[HIGH_HALF] = 0x00100000; return (res-1.0)*binexp.x;} + else return -10.0; + } + else { + binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+767)<<20; + if (res == (res+cor*(1.0+error+err_1))) + return res*binexp.x*t256.x; + else return -10.0; + } } diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_exp2.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_exp2.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_exp2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_exp2.c Sat Feb 17 08:48:54 2001 @@ -0,0 +1,130 @@ +/* Double-precision floating point 2^x. + Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Geoffrey Keating + + 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. */ + +/* The basic design here is from + Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical + Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., + 17 (1), March 1991, pp. 26-45. + It has been slightly modified to compute 2^x instead of e^x. + */ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include +#include +#include +#include +#include +#include +#include + +#include "t_exp2.h" + +static const volatile double TWO1023 = 8.988465674311579539e+307; +static const volatile double TWOM1000 = 9.3326361850321887899e-302; + +double +__ieee754_exp2 (double x) +{ + static const double himark = (double) DBL_MAX_EXP; + static const double lomark = (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1) - 1.0; + + /* Check for usual case. */ + if (isless (x, himark) && isgreater (x, lomark)) + { + static const double THREEp42 = 13194139533312.0; + int tval, unsafe; + double rx, x22, result; + union ieee754_double ex2_u, scale_u; + fenv_t oldenv; + + feholdexcept (&oldenv); +#ifdef FE_TONEAREST + /* If we don't have this, it's too bad. */ + fesetround (FE_TONEAREST); +#endif + + /* 1. Argument reduction. + Choose integers ex, -256 <= t < 256, and some real + -1/1024 <= x1 <= 1024 so that + x = ex + t/512 + x1. + + First, calculate rx = ex + t/512. */ + rx = x + THREEp42; + rx -= THREEp42; + x -= rx; /* Compute x=x1. */ + /* Compute tval = (ex*512 + t)+256. + Now, t = (tval mod 512)-256 and ex=tval/512 [that's mod, NOT %; and + /-round-to-nearest not the usual c integer /]. */ + tval = (int) (rx * 512.0 + 256.0); + + /* 2. Adjust for accurate table entry. + Find e so that + x = ex + t/512 + e + x2 + where -1e6 < e < 1e6, and + (double)(2^(t/512+e)) + is accurate to one part in 2^-64. */ + + /* 'tval & 511' is the same as 'tval%512' except that it's always + positive. + Compute x = x2. */ + x -= exp2_deltatable[tval & 511]; + + /* 3. Compute ex2 = 2^(t/512+e+ex). */ + ex2_u.d = exp2_accuratetable[tval & 511]; + tval >>= 9; + unsafe = abs(tval) >= -DBL_MIN_EXP - 1; + ex2_u.ieee.exponent += tval >> unsafe; + scale_u.d = 1.0; + scale_u.ieee.exponent += tval - (tval >> unsafe); + + /* 4. Approximate 2^x2 - 1, using a fourth-degree polynomial, + with maximum error in [-2^-10-2^-30,2^-10+2^-30] + less than 10^-19. */ + + x22 = (((.0096181293647031180 + * x + .055504110254308625) + * x + .240226506959100583) + * x + .69314718055994495) * ex2_u.d; + + /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ + fesetenv (&oldenv); + + result = x22 * x + ex2_u.d; + + if (!unsafe) + return result; + else + return result * scale_u.d; + } + /* Exceptional cases: */ + else if (isless (x, himark)) + { + if (__isinf (x)) + /* e^-inf == 0, with no error. */ + return 0; + else + /* Underflow */ + return TWOM1000 * TWOM1000; + } + else + /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ + return TWO1023*x; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_gamma_r.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_gamma_r.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_gamma_r.c Fri Oct 22 14:58:13 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_gamma_r.c Mon Mar 26 20:53:25 2001 @@ -1,5 +1,5 @@ /* Implementation of gamma function according to ISO C. - Copyright (C) 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -46,8 +46,11 @@ __ieee754_gamma_r (double x, int *signga return (x - x) / (x - x); } if ((unsigned int) hx == 0xfff00000 && lx==0) - /* x == -Inf. According to ISO this is NaN. */ - return x - x; + { + /* x == -Inf. According to ISO this is NaN. */ + *signgamp = 0; + return x - x; + } /* XXX FIXME. */ return __ieee754_exp (__ieee754_lgamma_r (x, signgamp)); diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_lgamma_r.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_lgamma_r.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_lgamma_r.c Fri Oct 22 14:58:13 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_lgamma_r.c Mon Mar 26 20:53:25 2001 @@ -175,7 +175,7 @@ static double zero= 0.00000000000000000 GET_HIGH_WORD(ix,x); ix &= 0x7fffffff; - if(ix<0x3fd00000) return __kernel_sin(pi*x,zero,0); + if(ix<0x3fd00000) return sin(pi*x); y = -x; /* x is assume negative */ /* @@ -199,14 +199,14 @@ static double zero= 0.00000000000000000 } } switch (n) { - case 0: y = __kernel_sin(pi*y,zero,0); break; + case 0: y = sin(pi*y); break; case 1: - case 2: y = __kernel_cos(pi*(0.5-y),zero); break; + case 2: y = cos(pi*(0.5-y)); break; case 3: - case 4: y = __kernel_sin(pi*(one-y),zero,0); break; + case 4: y = sin(pi*(one-y)); break; case 5: - case 6: y = -__kernel_cos(pi*(y-1.5),zero); break; - default: y = __kernel_sin(pi*(y-2.0),zero,0); break; + case 6: y = -cos(pi*(y-1.5)); break; + default: y = sin(pi*(y-2.0)); break; } return -y; } diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_log.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_log.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_log.c Tue Jul 13 16:49:11 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_log.c Mon Mar 26 20:53:25 2001 @@ -1,165 +1,200 @@ -/* @(#)e_log.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. -*/ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_log.c,v 1.8 1995/05/10 20:45:49 jtc Exp $"; -#endif - -/* __ieee754_log(x) - * Return the logarithm of x - * - * Method : - * 1. Argument Reduction: find k and f such that - * x = 2^k * (1+f), - * where sqrt(2)/2 < 1+f < sqrt(2) . - * - * 2. Approximation of log(1+f). - * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s) - * = 2s + 2/3 s**3 + 2/5 s**5 + ....., - * = 2s + s*R - * We use a special Reme algorithm on [0,0.1716] to generate - * a polynomial of degree 14 to approximate R The maximum error - * of this polynomial approximation is bounded by 2**-58.45. In - * other words, - * 2 4 6 8 10 12 14 - * R(z) ~ Lg1*s +Lg2*s +Lg3*s +Lg4*s +Lg5*s +Lg6*s +Lg7*s - * (the values of Lg1 to Lg7 are listed in the program) - * and - * | 2 14 | -58.45 - * | Lg1*s +...+Lg7*s - R(z) | <= 2 - * | | - * Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2. - * In order to guarantee error in log below 1ulp, we compute log - * by - * log(1+f) = f - s*(f - R) (if f is not too large) - * log(1+f) = f - (hfsq - s*(hfsq+R)). (better accuracy) - * - * 3. Finally, log(x) = k*ln2 + log(1+f). - * = k*ln2_hi+(f-(hfsq-(s*(hfsq+R)+k*ln2_lo))) - * Here ln2 is split into two floating point number: - * ln2_hi + ln2_lo, - * where n*ln2_hi is always exact for |n| < 2000. + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * Special cases: - * log(x) is NaN with signal if x < 0 (including -INF) ; - * log(+INF) is +INF; log(0) is -INF with signal; - * log(NaN) is that NaN with no signal. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Accuracy: - * according to an error analysis, the error is always less than - * 1 ulp (unit in the last place). + * This program 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 General Public License for more details. * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/*********************************************************************/ +/* */ +/* MODULE_NAME:ulog.h */ +/* */ +/* FUNCTION:ulog */ +/* */ +/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h ulog.h */ +/* mpexp.c mplog.c mpa.c */ +/* ulog.tbl */ +/* */ +/* An ultimate log routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of log(x). */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/*********************************************************************/ -#include "math.h" -#include "math_private.h" -#define half Lg[8] -#define two Lg[9] -#ifdef __STDC__ -static const double -#else -static double -#endif -ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */ -ln2_lo = 1.90821492927058770002e-10, /* 3dea39ef 35793c76 */ -two54 = 1.80143985094819840000e+16, /* 43500000 00000000 */ - Lg[] = {0.0, - 6.666666666666735130e-01, /* 3FE55555 55555593 */ - 3.999999999940941908e-01, /* 3FD99999 9997FA04 */ - 2.857142874366239149e-01, /* 3FD24924 94229359 */ - 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */ - 1.818357216161805012e-01, /* 3FC74664 96CB03DE */ - 1.531383769920937332e-01, /* 3FC39A09 D078C69F */ - 1.479819860511658591e-01, /* 3FC2F112 DF3E5244 */ - 0.5, - 2.0}; -#ifdef __STDC__ -static const double zero = 0.0; -#else -static double zero = 0.0; -#endif -#ifdef __STDC__ - double __ieee754_log(double x) -#else - double __ieee754_log(x) - double x; -#endif -{ - double hfsq,f,s,z,R,w,dk,t11,t12,t21,t22,w2,zw2; -#ifdef DO_NOT_USE_THIS - double t1,t2; +#include "endian.h" +#include "dla.h" +#include "mpa.h" +#include "MathLib.h" +void __mplog(mp_no *, mp_no *, int); + +/*********************************************************************/ +/* An ultimate log routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of log(x). */ +/*********************************************************************/ +double __ieee754_log(double x) { +#define M 4 + static const int pr[M]={8,10,18,32}; + int i,j,n,ux,dx,p; +#if 0 + int k; #endif - int32_t k,hx,i,j; - u_int32_t lx; + double dbl_n,u,p0,q,r0,w,nln2a,luai,lubi,lvaj,lvbj, + sij,ssij,ttij,A,B,B0,y,y1,y2,polI,polII,sa,sb, + t1,t2,t3,t4,t5,t6,t7,t8,t,ra,rb,ww, + a0,aa0,s1,s2,ss2,s3,ss3,a1,aa1,a,aa,b,bb,c; + number num; + mp_no mpx,mpy,mpy1,mpy2,mperr; - EXTRACT_WORDS(hx,lx,x); +#include "ulog.tbl" +#include "ulog.h" - k=0; - if (hx < 0x00100000) { /* x < 2**-1022 */ - if (((hx&0x7fffffff)|lx)==0) - return -two54/(x-x); /* log(+-0)=-inf */ - if (hx<0) return (x-x)/(x-x); /* log(-#) = NaN */ - k -= 54; x *= two54; /* subnormal number, scale up x */ - GET_HIGH_WORD(hx,x); - } - if (hx >= 0x7ff00000) return x+x; - k += (hx>>20)-1023; - hx &= 0x000fffff; - i = (hx+0x95f64)&0x100000; - SET_HIGH_WORD(x,hx|(i^0x3ff00000)); /* normalize x or x/2 */ - k += (i>>20); - f = x-1.0; - if((0x000fffff&(2+hx))<3) { /* |f| < 2**-20 */ - if(f==zero) { - if(k==0) return zero; else {dk=(double)k; - return dk*ln2_hi+dk*ln2_lo;} - } - R = f*f*(half-0.33333333333333333*f); - if(k==0) return f-R; else {dk=(double)k; - return dk*ln2_hi-((R-dk*ln2_lo)-f);} - } - s = f/(two+f); - dk = (double)k; - z = s*s; - i = hx-0x6147a; - w = z*z; - j = 0x6b851-hx; -#ifdef DO_NOT_USE_THIS - t1= w*(Lg2+w*(Lg4+w*Lg6)); - t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7))); - R = t2+t1; -#else - t21 = Lg[5]+w*Lg[7]; w2=w*w; - t22 = Lg[1]+w*Lg[3]; zw2=z*w2; - t11 = Lg[4]+w*Lg[6]; - t12 = w*Lg[2]; - R = t12 + w2*t11 + z*t22 + zw2*t21; -#endif - i |= j; - if(i>0) { - hfsq=0.5*f*f; - if(k==0) return f-(hfsq-s*(hfsq+R)); else - return dk*ln2_hi-((hfsq-(s*(hfsq+R)+dk*ln2_lo))-f); - } else { - if(k==0) return f-s*(f-R); else - return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f); - } + /* Treating special values of x ( x<=0, x=INF, x=NaN etc.). */ + + num.d = x; ux = num.i[HIGH_HALF]; dx = num.i[LOW_HALF]; + n=0; + if (ux < 0x00100000) { + if (((ux & 0x7fffffff) | dx) == 0) return MHALF/ZERO; /* return -INF */ + if (ux < 0) return (x-x)/ZERO; /* return NaN */ + n -= 54; x *= two54.d; /* scale x */ + num.d = x; + } + if (ux >= 0x7ff00000) return x+x; /* INF or NaN */ + + /* Regular values of x */ + + w = x-ONE; + if (ABS(w) > U03) { goto case_03; } + + + /*--- Stage I, the case abs(x-1) < 0.03 */ + + t8 = MHALF*w; + EMULV(t8,w,a,aa,t1,t2,t3,t4,t5) + EADD(w,a,b,bb) + + /* Evaluate polynomial II */ + polII = (b0.d+w*(b1.d+w*(b2.d+w*(b3.d+w*(b4.d+ + w*(b5.d+w*(b6.d+w*(b7.d+w*b8.d))))))))*w*w*w; + c = (aa+bb)+polII; + + /* End stage I, case abs(x-1) < 0.03 */ + if ((y=b+(c+b*E2)) == b+(c-b*E2)) return y; + + /*--- Stage II, the case abs(x-1) < 0.03 */ + + a = d11.d+w*(d12.d+w*(d13.d+w*(d14.d+w*(d15.d+w*(d16.d+ + w*(d17.d+w*(d18.d+w*(d19.d+w*d20.d)))))))); + EMULV(w,a,s2,ss2,t1,t2,t3,t4,t5) + ADD2(d10.d,dd10.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d9.d,dd9.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d8.d,dd8.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d7.d,dd7.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d6.d,dd6.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d5.d,dd5.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d4.d,dd4.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d3.d,dd3.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(d2.d,dd2.d,s2,ss2,s3,ss3,t1,t2) + MUL2(w,ZERO,s3,ss3,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + MUL2(w,ZERO,s2,ss2,s3,ss3,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(w,ZERO, s3,ss3, b, bb,t1,t2) + + /* End stage II, case abs(x-1) < 0.03 */ + if ((y=b+(bb+b*E4)) == b+(bb-b*E4)) return y; + goto stage_n; + + /*--- Stage I, the case abs(x-1) > 0.03 */ + case_03: + + /* Find n,u such that x = u*2**n, 1/sqrt(2) < u < sqrt(2) */ + n += (num.i[HIGH_HALF] >> 20) - 1023; + num.i[HIGH_HALF] = (num.i[HIGH_HALF] & 0x000fffff) | 0x3ff00000; + if (num.d > SQRT_2) { num.d *= HALF; n++; } + u = num.d; dbl_n = (double) n; + + /* Find i such that ui=1+(i-75)/2**8 is closest to u (i= 0,1,2,...,181) */ + num.d += h1.d; + i = (num.i[HIGH_HALF] & 0x000fffff) >> 12; + + /* Find j such that vj=1+(j-180)/2**16 is closest to v=u/ui (j= 0,...,361) */ + num.d = u*Iu[i].d + h2.d; + j = (num.i[HIGH_HALF] & 0x000fffff) >> 4; + + /* Compute w=(u-ui*vj)/(ui*vj) */ + p0=(ONE+(i-75)*DEL_U)*(ONE+(j-180)*DEL_V); + q=u-p0; r0=Iu[i].d*Iv[j].d; w=q*r0; + + /* Evaluate polynomial I */ + polI = w+(a2.d+a3.d*w)*w*w; + + /* Add up everything */ + nln2a = dbl_n*LN2A; + luai = Lu[i][0].d; lubi = Lu[i][1].d; + lvaj = Lv[j][0].d; lvbj = Lv[j][1].d; + EADD(luai,lvaj,sij,ssij) + EADD(nln2a,sij,A ,ttij) + B0 = (((lubi+lvbj)+ssij)+ttij)+dbl_n*LN2B; + B = polI+B0; + + /* End stage I, case abs(x-1) >= 0.03 */ + if ((y=A+(B+E1)) == A+(B-E1)) return y; + + + /*--- Stage II, the case abs(x-1) > 0.03 */ + + /* Improve the accuracy of r0 */ + EMULV(p0,r0,sa,sb,t1,t2,t3,t4,t5) + t=r0*((ONE-sa)-sb); + EADD(r0,t,ra,rb) + + /* Compute w */ + MUL2(q,ZERO,ra,rb,w,ww,t1,t2,t3,t4,t5,t6,t7,t8) + + EADD(A,B0,a0,aa0) + + /* Evaluate polynomial III */ + s1 = (c3.d+(c4.d+c5.d*w)*w)*w; + EADD(c2.d,s1,s2,ss2) + MUL2(s2,ss2,w,ww,s3,ss3,t1,t2,t3,t4,t5,t6,t7,t8) + MUL2(s3,ss3,w,ww,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(s2,ss2,w,ww,s3,ss3,t1,t2) + ADD2(s3,ss3,a0,aa0,a1,aa1,t1,t2) + + /* End stage II, case abs(x-1) >= 0.03 */ + if ((y=a1+(aa1+E3)) == a1+(aa1-E3)) return y; + + + /* Final stages. Use multi-precision arithmetic. */ + stage_n: + + for (i=0; i 1) ** +INF is +INF - * 6. +-(|x| > 1) ** -INF is +0 - * 7. +-(|x| < 1) ** +INF is +0 - * 8. +-(|x| < 1) ** -INF is +INF - * 9. +-1 ** +-INF is NAN - * 10. +0 ** (+anything except 0, NAN) is +0 - * 11. -0 ** (+anything except 0, NAN, odd integer) is +0 - * 12. +0 ** (-anything except 0, NAN) is +INF - * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF - * 14. -0 ** (odd integer) = -( +0 ** (odd integer) ) - * 15. +INF ** (+anything except 0,NAN) is +INF - * 16. +INF ** (-anything except 0,NAN) is +0 - * 17. -INF ** (anything) = -0 ** (-anything) - * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) - * 19. (-anything except 0 and inf) ** (non-integer) is NAN + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Accuracy: - * pow(x,y) returns x**y nearly rounded. In particular - * pow(integer,integer) - * always returns the correct integer provided it is - * representable. + * This program 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 General Public License for more details. * - * Constants : - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/***************************************************************************/ +/* MODULE_NAME: upow.c */ +/* */ +/* FUNCTIONS: upow */ +/* power1 */ +/* log2 */ +/* log1 */ +/* checkint */ +/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h */ +/* halfulp.c mpexp.c mplog.c slowexp.c slowpow.c mpa.c */ +/* uexp.c upow.c */ +/* root.tbl uexp.tbl upow.tbl */ +/* An ultimate power routine. Given two IEEE double machine numbers y,x */ +/* it computes the correctly rounded (to nearest) value of x^y. */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/***************************************************************************/ +#include "endian.h" +#include "upow.h" +#include "dla.h" +#include "mydefs.h" +#include "MathLib.h" +#include "upow.tbl" -#include "math.h" -#include "math_private.h" -#define zero C[0] -#define one C[1] -#define two C[2] -#define two53 C[3] -#define huge C[4] -#define tiny C[5] -#define L1 C[6] -#define L2 C[7] -#define L3 C[8] -#define L4 C[9] -#define L5 C[10] -#define L6 C[11] -#define P1 C[12] -#define P2 C[13] -#define P3 C[14] -#define P4 C[15] -#define P5 C[16] -#define lg2 C[17] -#define lg2_h C[18] -#define lg2_l C[19] -#define ovt C[20] -#define cp C[21] -#define cp_h C[22] -#define cp_l C[23] -#define ivln2 C[24] -#define ivln2_h C[25] -#define ivln2_l C[26] -#ifdef __STDC__ -static const double -#else -static double -#endif -bp[] = {1.0, 1.5,}, -dp_h[] = { 0.0, 5.84962487220764160156e-01,}, /* 0x3FE2B803, 0x40000000 */ -dp_l[] = { 0.0, 1.35003920212974897128e-08,}, /* 0x3E4CFDEB, 0x43CFD006 */ -C[] = { -0.0, -1.0, -2.0, -9007199254740992.0 , -1.0e300, -1.0e-300, -5.99999999999994648725e-01 , -4.28571428578550184252e-01 , -3.33333329818377432918e-01 , -2.72728123808534006489e-01 , -2.30660745775561754067e-01 , -2.06975017800338417784e-01 , -1.66666666666666019037e-01 , --2.77777777770155933842e-03 , -6.61375632143793436117e-05 , --1.65339022054652515390e-06 , -4.13813679705723846039e-08 , -6.93147180559945286227e-01 , -6.93147182464599609375e-01 , --1.90465429995776804525e-09 , -8.0085662595372944372e-0017 , -9.61796693925975554329e-01 , -9.61796700954437255859e-01 , --7.02846165095275826516e-09 , -1.44269504088896338700e+00 , -1.44269502162933349609e+00 , -1.92596299112661746887e-08 }; +double __exp1(double x, double xx, double error); +static double log1(double x, double *delta, double *error); +static double log2(double x, double *delta, double *error); +double __slowpow(double x, double y,double z); +static double power1(double x, double y); +static int checkint(double x); -#ifdef __STDC__ - double __ieee754_pow(double x, double y) -#else - double __ieee754_pow(x,y) - double x, y; +/***************************************************************************/ +/* An ultimate power routine. Given two IEEE double machine numbers y,x */ +/* it computes the correctly rounded (to nearest) value of X^y. */ +/***************************************************************************/ +double __ieee754_pow(double x, double y) { + double z,a,aa,error, t,a1,a2,y1,y2; +#if 0 + double gor=1.0; #endif -{ - double z,ax,z_h,z_l,p_h,p_l; - double y1,t1,t2,r,s,t,u,v,w, t12,t14,r_1,r_2,r_3; - int32_t i,j,k,yisint,n; - int32_t hx,hy,ix,iy; - u_int32_t lx,ly; + mynumber u,v; + int k; + int4 qx,qy; + v.x=y; + u.x=x; + if (v.i[LOW_HALF] == 0) { /* of y */ + qx = u.i[HIGH_HALF]&0x7fffffff; + /* Checking if x is not too small to compute */ + if (((qx==0x7ff00000)&&(u.i[LOW_HALF]!=0))||(qx>0x7ff00000)) return NaNQ.x; + if (y == 1.0) return x; + if (y == 2.0) return x*x; + if (y == -1.0) return 1.0/x; + if (y == 0) return 1.0; + } + /* else */ + if(((u.i[HIGH_HALF]>0 && u.i[HIGH_HALF]<0x7ff00000)|| /* x>0 and not x->0 */ + (u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) && + /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */ + (v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */ + z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */ + t = y*134217729.0; + y1 = t - (t-y); + y2 = y - y1; + t = z*134217729.0; + a1 = t - (t-z); + a2 = (z - a1)+aa; + a = y1*a1; + aa = y2*a1 + y*a2; + a1 = a+aa; + a2 = (a-a1)+aa; + error = error*ABS(y); + t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */ + return (t>0)?t:power1(x,y); + } - EXTRACT_WORDS(hx,lx,x); - EXTRACT_WORDS(hy,ly,y); - ix = hx&0x7fffffff; iy = hy&0x7fffffff; + if (x == 0) { + if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0) + || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) + return y; + if (ABS(y) > 1.0e20) return (y>0)?0:INF.x; + k = checkint(y); + if (k == -1) + return y < 0 ? 1.0/x : x; + else + return y < 0 ? 1.0/ABS(x) : 0.0; /* return 0 */ + } + /* if x<0 */ + if (u.i[HIGH_HALF] < 0) { + k = checkint(y); + if (k==0) { + if ((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] == 0) { + if (x == -1.0) return 1.0; + else if (x > -1.0) return v.i[HIGH_HALF] < 0 ? INF.x : 0.0; + else return v.i[HIGH_HALF] < 0 ? 0.0 : INF.x; + } + else if (u.i[HIGH_HALF] == 0xfff00000 && u.i[LOW_HALF] == 0) + return y < 0 ? 0.0 : INF.x; + return NaNQ.x; /* y not integer and x<0 */ + } + else if (u.i[HIGH_HALF] == 0xfff00000 && u.i[LOW_HALF] == 0) + { + if (k < 0) + return y < 0 ? nZERO.x : nINF.x; + else + return y < 0 ? 0.0 : INF.x; + } + return (k==1)?__ieee754_pow(-x,y):-__ieee754_pow(-x,y); /* if y even or odd */ + } + /* x>0 */ + qx = u.i[HIGH_HALF]&0x7fffffff; /* no sign */ + qy = v.i[HIGH_HALF]&0x7fffffff; /* no sign */ - /* y==zero: x**0 = 1 */ - if((iy|ly)==0) return C[1]; + if (qx > 0x7ff00000 || (qx == 0x7ff00000 && u.i[LOW_HALF] != 0)) return NaNQ.x; + /* if 0 0x7ff00000 || (qy == 0x7ff00000 && v.i[LOW_HALF] != 0)) + return x == 1.0 ? 1.0 : NaNQ.x; + /* if y<2^-0x7fe */ - /* +-NaN return x+y */ - if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) || - iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) - return x+y; + if (qx == 0x7ff00000) /* x= 2^-0x3ff */ + {if (y == 0) return NaNQ.x; + return (y>0)?x:0; } - /* determine if y is an odd int when x < 0 - * yisint = 0 ... y is not an integer - * yisint = 1 ... y is an odd int - * yisint = 2 ... y is an even int - */ - yisint = 0; - if(hx<0) { - if(iy>=0x43400000) yisint = 2; /* even integer y */ - else if(iy>=0x3ff00000) { - k = (iy>>20)-0x3ff; /* exponent */ - if(k>20) { - j = ly>>(52-k); - if((u_int32_t)(j<<(52-k))==ly) yisint = 2-(j&1); - } else if(ly==0) { - j = iy>>(20-k); - if((int32_t)(j<<(20-k))==iy) yisint = 2-(j&1); - } - } - } + if (qy > 0x45f00000 && qy < 0x7ff00000) { + if (x == 1.0) return 1.0; + if (y>0) return (x>1.0)?INF.x:0; + if (y<0) return (x<1.0)?INF.x:0; + } - /* special value of y */ - if(ly==0) { - if (iy==0x7ff00000) { /* y is +-inf */ - if(((ix-0x3ff00000)|lx)==0) - return y - y; /* inf**+-1 is NaN */ - else if (ix >= 0x3ff00000)/* (|x|>1)**+-inf = inf,0 */ - return (hy>=0)? y: C[0]; - else /* (|x|<1)**-,+inf = inf,0 */ - return (hy<0)?-y: C[0]; - } - if(iy==0x3ff00000) { /* y is +-1 */ - if(hy<0) return C[1]/x; else return x; - } - if(hy==0x40000000) return x*x; /* y is 2 */ - if(hy==0x3fe00000) { /* y is 0.5 */ - if(hx>=0) /* x >= +0 */ - return __ieee754_sqrt(x); - } - } + if (x == 1.0) return 1.0; + if (y>0) return (x>1.0)?INF.x:0; + if (y<0) return (x<1.0)?INF.x:0; + return 0; /* unreachable, to make the compiler happy */ +} - ax = fabs(x); - /* special value of x */ - if(lx==0) { - if(ix==0x7ff00000||ix==0||ix==0x3ff00000){ - z = ax; /*x is +-0,+-inf,+-1*/ - if(hy<0) z = C[1]/z; /* z = (1/|x|) */ - if(hx<0) { - if(((ix-0x3ff00000)|yisint)==0) { - z = (z-z)/(z-z); /* (-1)**non-int is NaN */ - } else if(yisint==1) - z = -z; /* (x<0)**odd = -(|x|**odd) */ - } - return z; - } - } +/**************************************************************************/ +/* Computing x^y using more accurate but more slow log routine */ +/**************************************************************************/ +static double power1(double x, double y) { + double z,a,aa,error, t,a1,a2,y1,y2; + z = log2(x,&aa,&error); + t = y*134217729.0; + y1 = t - (t-y); + y2 = y - y1; + t = z*134217729.0; + a1 = t - (t-z); + a2 = z - a1; + a = y*z; + aa = ((y1*a1-a)+y1*a2+y2*a1)+y2*a2+aa*y; + a1 = a+aa; + a2 = (a-a1)+aa; + error = error*ABS(y); + t = __exp1(a1,a2,1.9e16*error); + return (t >= 0)?t:__slowpow(x,y,z); +} - /* (x<0)**(non-int) is NaN */ - if(((((u_int32_t)hx>>31)-1)|yisint)==0) return (x-x)/(x-x); +/****************************************************************************/ +/* Computing log(x) (x is left argument). The result is the returned double */ +/* + the parameter delta. */ +/* The result is bounded by error (rightmost argument) */ +/****************************************************************************/ +static double log1(double x, double *delta, double *error) { + int i,j,m; +#if 0 + int n; +#endif + double uu,vv,eps,nx,e,e1,e2,t,t1,t2,res,add=0; +#if 0 + double cor; +#endif + mynumber u,v; - /* |y| is huge */ - if(iy>0x41e00000) { /* if |y| > 2**31 */ - if(iy>0x43f00000){ /* if |y| > 2**64, must o/uflow */ - if(ix<=0x3fefffff) return (hy<0)? C[4]*C[4]:C[5]*C[5]; - if(ix>=0x3ff00000) return (hy>0)? C[4]*C[4]:C[5]*C[5]; - } - /* over/underflow if x is not close to one */ - if(ix<0x3fefffff) return (hy<0)? C[4]*C[4]:C[5]*C[5]; - if(ix>0x3ff00000) return (hy>0)? C[4]*C[4]:C[5]*C[5]; - /* now |1-x| is tiny <= 2**-20, suffice to compute - log(x) by x-x^2/2+x^3/3-x^4/4 */ - t = x-1; /* t has 20 trailing zeros */ - w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25)); - u = C[25]*t; /* ivln2_h has 21 sig. bits */ - v = t*C[26]-w*C[24]; - t1 = u+v; - SET_LOW_WORD(t1,0); - t2 = v-(t1-u); - } else { - double s2,s_h,s_l,t_h,t_l,s22,s24,s26,r1,r2,r3; - n = 0; - /* take care subnormal number */ - if(ix<0x00100000) - {ax *= C[3]; n -= 53; GET_HIGH_WORD(ix,ax); } - n += ((ix)>>20)-0x3ff; - j = ix&0x000fffff; - /* determine interval */ - ix = j|0x3ff00000; /* normalize ix */ - if(j<=0x3988E) k=0; /* |x|>1)|0x20000000)+0x00080000+(k<<18)); - t_l = ax - (t_h-bp[k]); - s_l = v*((u-s_h*t_h)-s_h*t_l); - /* compute log(ax) */ - s2 = s*s; -#ifdef DO_NOT_USE_THIS - r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6))))); -#else - r1 = C[10]+s2*C[11]; s22=s2*s2; - r2 = C[8]+s2*C[9]; s24=s22*s22; - r3 = C[6]+s2*C[7]; s26=s24*s22; - r = r3*s22 + r2*s24 + r1*s26; + if ((m&0x000fffff) < 0x0006a09e) + {u.i[HIGH_HALF] = (m&0x000fffff)|0x3ff00000; two52.i[LOW_HALF]=(m>>20); } + else + {u.i[HIGH_HALF] = (m&0x000fffff)|0x3fe00000; two52.i[LOW_HALF]=(m>>20)+1; } + + v.x = u.x + bigu.x; + uu = v.x - bigu.x; + i = (v.i[LOW_HALF]&0x000003ff)<<2; + if (two52.i[LOW_HALF] == 1023) /* nx = 0 */ + { + if (i > 1192 && i < 1208) /* |x-1| < 1.5*2**-10 */ + { + t = x - 1.0; + t1 = (t+5.0e6)-5.0e6; + t2 = t-t1; + e1 = t - 0.5*t1*t1; + e2 = t*t*t*(r3+t*(r4+t*(r5+t*(r6+t*(r7+t*r8)))))-0.5*t2*(t+t1); + res = e1+e2; + *error = 1.0e-21*ABS(t); + *delta = (e1-res)+e2; + return res; + } /* |x-1| < 1.5*2**-10 */ + else + { + v.x = u.x*(ui.x[i]+ui.x[i+1])+bigv.x; + vv = v.x-bigv.x; + j = v.i[LOW_HALF]&0x0007ffff; + j = j+j+j; + eps = u.x - uu*vv; + e1 = eps*ui.x[i]; + e2 = eps*(ui.x[i+1]+vj.x[j]*(ui.x[i]+ui.x[i+1])); + e = e1+e2; + e2 = ((e1-e)+e2); + t=ui.x[i+2]+vj.x[j+1]; + t1 = t+e; + t2 = (((t-t1)+e)+(ui.x[i+3]+vj.x[j+2]))+e2+e*e*(p2+e*(p3+e*p4)); + res=t1+t2; + *error = 1.0e-24; + *delta = (t1-res)+t2; + return res; + } + } /* nx = 0 */ + else /* nx != 0 */ + { + eps = u.x - uu; + nx = (two52.x - two52e.x)+add; + e1 = eps*ui.x[i]; + e2 = eps*ui.x[i+1]; + e=e1+e2; + e2 = (e1-e)+e2; + t=nx*ln2a.x+ui.x[i+2]; + t1=t+e; + t2=(((t-t1)+e)+nx*ln2b.x+ui.x[i+3]+e2)+e*e*(q2+e*(q3+e*(q4+e*(q5+e*q6)))); + res = t1+t2; + *error = 1.0e-21; + *delta = (t1-res)+t2; + return res; + } /* nx != 0 */ +} + +/****************************************************************************/ +/* More slow but more accurate routine of log */ +/* Computing log(x)(x is left argument).The result is return double + delta.*/ +/* The result is bounded by error (right argument) */ +/****************************************************************************/ +static double log2(double x, double *delta, double *error) { + int i,j,m; +#if 0 + int n; #endif - r += s_l*(s_h+s); - s2 = s_h*s_h; - t_h = 3.0+s2+r; - SET_LOW_WORD(t_h,0); - t_l = r-((t_h-3.0)-s2); - /* u+v = s*(1+...) */ - u = s_h*t_h; - v = s_l*t_h+t_l*s; - /* 2/(3log2)*(s+...) */ - p_h = u+v; - SET_LOW_WORD(p_h,0); - p_l = v-(p_h-u); - z_h = C[22]*p_h; /* cp_h+cp_l = 2/(3*log2) */ - z_l = C[23]*p_h+p_l*C[21]+dp_l[k]; - /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ - t = (double)n; - t1 = (((z_h+z_l)+dp_h[k])+t); - SET_LOW_WORD(t1,0); - t2 = z_l-(((t1-t)-dp_h[k])-z_h); - } + double uu,vv,eps,nx,e,e1,e2,t,t1,t2,res,add=0; +#if 0 + double cor; +#endif + double ou1,ou2,lu1,lu2,ov,lv1,lv2,a,a1,a2; + double y,yy,z,zz,j1,j2,j3,j4,j5,j6,j7,j8; + mynumber u,v; - s = C[1]; /* s (sign of result -ve**odd) = -1 else = 1 */ - if(((((u_int32_t)hx>>31)-1)|(yisint-1))==0) - s = -C[1];/* (-ve)**(odd int) */ + u.x = x; + m = u.i[HIGH_HALF]; + *error = 0; + *delta = 0; + add=0; + if (m<0x00100000) { /* x < 2^-1022 */ + x = x*t52.x; add = -52.0; u.x = x; m = u.i[HIGH_HALF]; } - /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ - y1 = y; - SET_LOW_WORD(y1,0); - p_l = (y-y1)*t1+y*t2; - p_h = y1*t1; - z = p_l+p_h; - EXTRACT_WORDS(j,i,z); - if (j>=0x40900000) { /* z >= 1024 */ - if(((j-0x40900000)|i)!=0) /* if z > 1024 */ - return s*C[4]*C[4]; /* overflow */ - else { - if(p_l+C[20]>z-p_h) return s*C[4]*C[4]; /* overflow */ - } - } else if((j&0x7fffffff)>=0x4090cc00 ) { /* z <= -1075 */ - if(((j-0xc090cc00)|i)!=0) /* z < -1075 */ - return s*C[5]*C[5]; /* underflow */ - else { - if(p_l<=z-p_h) return s*C[5]*C[5]; /* underflow */ - } - } - /* - * compute 2**(p_h+p_l) - */ - i = j&0x7fffffff; - k = (i>>20)-0x3ff; - n = 0; - if(i>0x3fe00000) { /* if |z| > 0.5, set n = [z+0.5] */ - n = j+(0x00100000>>(k+1)); - k = ((n&0x7fffffff)>>20)-0x3ff; /* new k for n */ - t = C[0]; - SET_HIGH_WORD(t,n&~(0x000fffff>>k)); - n = ((n&0x000fffff)|0x00100000)>>(20-k); - if(j<0) n = -n; - p_h -= t; - } - t = p_l+p_h; - SET_LOW_WORD(t,0); - u = t*C[18]; - v = (p_l-(t-p_h))*C[17]+t*C[19]; - z = u+v; - w = v-(z-u); - t = z*z; -#ifdef DO_NOT_USE_THIS - t1 = z - t*(C[12]+t*(C[13]+t*(C[14]+t*(C[15]+t*C[16])))); -#else - r_1 = C[15]+t*C[16]; t12 = t*t; - r_2 = C[13]+t*C[14]; t14 = t12*t12; - r_3 = t*C[12]; - t1 = z - r_3 - t12*r_2 - t14*r_1; + if ((m&0x000fffff) < 0x0006a09e) + {u.i[HIGH_HALF] = (m&0x000fffff)|0x3ff00000; two52.i[LOW_HALF]=(m>>20); } + else + {u.i[HIGH_HALF] = (m&0x000fffff)|0x3fe00000; two52.i[LOW_HALF]=(m>>20)+1; } + + v.x = u.x + bigu.x; + uu = v.x - bigu.x; + i = (v.i[LOW_HALF]&0x000003ff)<<2; + /*------------------------------------- |x-1| < 2**-11------------------------------- */ + if ((two52.i[LOW_HALF] == 1023) && (i == 1200)) + { + t = x - 1.0; + EMULV(t,s3,y,yy,j1,j2,j3,j4,j5); + ADD2(-0.5,0,y,yy,z,zz,j1,j2); + MUL2(t,0,z,zz,y,yy,j1,j2,j3,j4,j5,j6,j7,j8); + MUL2(t,0,y,yy,z,zz,j1,j2,j3,j4,j5,j6,j7,j8); + + e1 = t+z; + e2 = (((t-e1)+z)+zz)+t*t*t*(ss3+t*(s4+t*(s5+t*(s6+t*(s7+t*s8))))); + res = e1+e2; + *error = 1.0e-25*ABS(t); + *delta = (e1-res)+e2; + return res; + } + /*----------------------------- |x-1| > 2**-11 -------------------------- */ + else + { /*Computing log(x) according to log table */ + nx = (two52.x - two52e.x)+add; + ou1 = ui.x[i]; + ou2 = ui.x[i+1]; + lu1 = ui.x[i+2]; + lu2 = ui.x[i+3]; + v.x = u.x*(ou1+ou2)+bigv.x; + vv = v.x-bigv.x; + j = v.i[LOW_HALF]&0x0007ffff; + j = j+j+j; + eps = u.x - uu*vv; + ov = vj.x[j]; + lv1 = vj.x[j+1]; + lv2 = vj.x[j+2]; + a = (ou1+ou2)*(1.0+ov); + a1 = (a+1.0e10)-1.0e10; + a2 = a*(1.0-a1*uu*vv); + e1 = eps*a1; + e2 = eps*a2; + e = e1+e2; + e2 = (e1-e)+e2; + t=nx*ln2a.x+lu1+lv1; + t1 = t+e; + t2 = (((t-t1)+e)+(lu2+lv2+nx*ln2b.x+e2))+e*e*(p2+e*(p3+e*p4)); + res=t1+t2; + *error = 1.0e-27; + *delta = (t1-res)+t2; + return res; + } +} + +/**********************************************************************/ +/* Routine receives a double x and checks if it is an integer. If not */ +/* it returns 0, else it returns 1 if even or -1 if odd. */ +/**********************************************************************/ +static int checkint(double x) { + union {int4 i[2]; double x;} u; + int k,m,n; +#if 0 + int l; #endif - r = (z*t1)/(t1-C[2])-(w+z*w); - z = C[1]-(r-z); - GET_HIGH_WORD(j,z); - j += (n<<20); - if((j>>20)<=0) z = __scalbn(z,n); /* subnormal output */ - else SET_HIGH_WORD(z,j); - return s*z; + u.x = x; + m = u.i[HIGH_HALF]&0x7fffffff; /* no sign */ + if (m >= 0x7ff00000) return 0; /* x is +/-inf or NaN */ + if (m >= 0x43400000) return 1; /* |x| >= 2**53 */ + if (m < 0x40000000) return 0; /* |x| < 2, can not be 0 or 1 */ + n = u.i[LOW_HALF]; + k = (m>>20)-1023; /* 1 <= k <= 52 */ + if (k == 52) return (n&1)? -1:1; /* odd or even*/ + if (k>20) { + if (n<<(k-20)) return 0; /* if not integer */ + return (n<<(k-21))?-1:1; + } + if (n) return 0; /*if not integer*/ + if (k == 20) return (m&1)? -1:1; + if (m<<(k+12)) return 0; + return (m<<(k+11))?-1:1; } diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_remainder.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_remainder.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_remainder.c Tue Jul 13 16:49:29 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_remainder.c Mon Mar 26 20:53:25 2001 @@ -1,80 +1,119 @@ -/* @(#)e_remainder.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_remainder.c,v 1.8 1995/05/10 20:46:05 jtc Exp $"; -#endif - -/* __ieee754_remainder(x,p) - * Return : - * returns x REM p = x - [x/p]*p as if in infinite - * precise arithmetic, where [x/p] is the (infinite bit) - * integer nearest x/p (in half way case choose the even one). - * Method : - * Based on fmod() return x-[x/p]chopped*p exactlp. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/**************************************************************************/ +/* MODULE_NAME urem.c */ +/* */ +/* FUNCTION: uremainder */ +/* */ +/* An ultimate remainder routine. Given two IEEE double machine numbers x */ +/* ,y it computes the correctly rounded (to nearest) value of remainder */ +/* of dividing x by y. */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/* ************************************************************************/ -#include "math.h" -#include "math_private.h" +#include "endian.h" +#include "mydefs.h" +#include "urem.h" +#include "MathLib.h" -#ifdef __STDC__ -static const double zero = 0.0; -#else -static double zero = 0.0; +/**************************************************************************/ +/* An ultimate remainder routine. Given two IEEE double machine numbers x */ +/* ,y it computes the correctly rounded (to nearest) value of remainder */ +/**************************************************************************/ +double __ieee754_remainder(double x, double y) +{ + double z,d,xx; +#if 0 + double yy; #endif - - -#ifdef __STDC__ - double __ieee754_remainder(double x, double p) -#else - double __ieee754_remainder(x,p) - double x,p; + int4 kx,ky,n,nn,n1,m1,l; +#if 0 + int4 m; #endif -{ - int32_t hx,hp; - u_int32_t sx,lx,lp; - double p_half; - - EXTRACT_WORDS(hx,lx,x); - EXTRACT_WORDS(hp,lp,p); - sx = hx&0x80000000; - hp &= 0x7fffffff; - hx &= 0x7fffffff; - - /* purge off exception values */ - if((hp|lp)==0) return (x*p)/(x*p); /* p = 0 */ - if((hx>=0x7ff00000)|| /* x not finite */ - ((hp>=0x7ff00000)&& /* p is NaN */ - (((hp-0x7ff00000)|lp)!=0))) - return (x*p)/(x*p); - + mynumber u,t,w={{0,0}},v={{0,0}},ww={{0,0}},r; + u.x=x; + t.x=y; + kx=u.i[HIGH_HALF]&0x7fffffff; /* no sign for x*/ + t.i[HIGH_HALF]&=0x7fffffff; /*no sign for y */ + ky=t.i[HIGH_HALF]; + /*------ |x| < 2^1024 and 2^-970 < |y| < 2^1024 ------------------*/ + if (kx<0x7ff00000 && ky<0x7ff00000 && ky>=0x03500000) { + if (kx+0x001000000)?ZERO.x:nZERO.x); + else { + if (ABS(xx)>0.5*t.x) return (z>d)?xx-t.x:xx+t.x; + else return xx; + } + } /* (kx<(ky+0x01500000)) */ + else { + r.x=1.0/t.x; + n=t.i[HIGH_HALF]; + nn=(n&0x7ff00000)+0x01400000; + w.i[HIGH_HALF]=n; + ww.x=t.x-w.x; + l=(kx-nn)&0xfff00000; + n1=ww.i[HIGH_HALF]; + m1=r.i[HIGH_HALF]; + while (l>0) { + r.i[HIGH_HALF]=m1-l; + z=u.x*r.x; + w.i[HIGH_HALF]=n+l; + ww.i[HIGH_HALF]=(n1)?n1+l:n1; + d=(z+big.x)-big.x; + u.x=(u.x-d*w.x)-d*ww.x; + l=(u.i[HIGH_HALF]&0x7ff00000)-nn; + } + r.i[HIGH_HALF]=m1; + w.i[HIGH_HALF]=n; + ww.i[HIGH_HALF]=n1; + z=u.x*r.x; + d=(z+big.x)-big.x; + u.x=(u.x-d*w.x)-d*ww.x; + if (ABS(u.x)<0.5*t.x) return (u.x!=0)?u.x:((x>0)?ZERO.x:nZERO.x); + else + if (ABS(u.x)>0.5*t.x) return (d>z)?u.x+t.x:u.x-t.x; + else + {z=u.x/t.x; d=(z+big.x)-big.x; return ((u.x-d*w.x)-d*ww.x);} + } - if (hp<=0x7fdfffff) x = __ieee754_fmod(x,p+p); /* now x < 2p */ - if (((hx-hp)|(lx-lp))==0) return zero*x; - x = fabs(x); - p = fabs(p); - if (hp<0x00200000) { - if(x+x>p) { - x-=p; - if(x+x>=p) x -= p; - } - } else { - p_half = 0.5*p; - if(x>p_half) { - x-=p; - if(x>=p_half) x -= p; - } - } - GET_HIGH_WORD(hx,x); - SET_HIGH_WORD(x,hx^sx); - return x; + } /* (kx<0x7ff00000&&ky<0x7ff00000&&ky>=0x03500000) */ + else { + if (kx<0x7ff00000&&ky<0x7ff00000&&(ky>0||t.i[LOW_HALF]!=0)) { + y=ABS(y)*t128.x; + z=__ieee754_remainder(x,y)*t128.x; + z=__ieee754_remainder(z,y)*tm128.x; + return z; + } + else { /* if x is too big */ + if (kx == 0x7ff00000 && u.i[LOW_HALF] == 0 && y == 1.0) + return x / x; + if (kx>=0x7ff00000||(ky==0&&t.i[LOW_HALF]==0)||ky>0x7ff00000|| + (ky==0x7ff00000&&t.i[LOW_HALF]!=0)) + return (u.i[HIGH_HALF]&0x80000000)?nNAN.x:NAN.x; + else return x; + } + } } diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/e_sqrt.c glibc-2.2.3/sysdeps/ieee754/dbl-64/e_sqrt.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/e_sqrt.c Tue Jul 13 16:49:38 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/e_sqrt.c Wed Apr 25 14:51:03 2001 @@ -1,452 +1,89 @@ -/* @(#)e_sqrt.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_sqrt.c,v 1.8 1995/05/10 20:46:17 jtc Exp $"; -#endif - -/* __ieee754_sqrt(x) - * Return correctly rounded sqrt. - * ------------------------------------------ - * | Use the hardware sqrt if you have one | - * ------------------------------------------ - * Method: - * Bit by bit method using integer arithmetic. (Slow, but portable) - * 1. Normalization - * Scale x to y in [1,4) with even powers of 2: - * find an integer k such that 1 <= (y=x*2^(2k)) < 4, then - * sqrt(x) = 2^k * sqrt(y) - * 2. Bit by bit computation - * Let q = sqrt(y) truncated to i bit after binary point (q = 1), - * i 0 - * i+1 2 - * s = 2*q , and y = 2 * ( y - q ). (1) - * i i i i - * - * To compute q from q , one checks whether - * i+1 i - * - * -(i+1) 2 - * (q + 2 ) <= y. (2) - * i - * -(i+1) - * If (2) is false, then q = q ; otherwise q = q + 2 . - * i+1 i i+1 i - * - * With some algebraic manipulation, it is not difficult to see - * that (2) is equivalent to - * -(i+1) - * s + 2 <= y (3) - * i i - * - * The advantage of (3) is that s and y can be computed by - * i i - * the following recurrence formula: - * if (3) is false - * - * s = s , y = y ; (4) - * i+1 i i+1 i - * - * otherwise, - * -i -(i+1) - * s = s + 2 , y = y - s - 2 (5) - * i+1 i i+1 i i + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * One may easily use induction to prove (4) and (5). - * Note. Since the left hand side of (3) contain only i+2 bits, - * it does not necessary to do a full (53-bit) comparison - * in (3). - * 3. Final rounding - * After generating the 53 bits result, we compute one more bit. - * Together with the remainder, we can decide whether the - * result is exact, bigger than 1/2ulp, or less than 1/2ulp - * (it will never equal to 1/2ulp). - * The rounding mode can be detected by checking whether - * huge + tiny is equal to huge, and whether huge - tiny is - * equal to huge for some floating point number "huge" and "tiny". + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Special cases: - * sqrt(+-0) = +-0 ... exact - * sqrt(inf) = inf - * sqrt(-ve) = NaN ... with invalid signal - * sqrt(NaN) = NaN ... with invalid signal for signaling NaN + * This program 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 General Public License for more details. * - * Other methods : see the appended file at the end of the program below. - *--------------- + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/*********************************************************************/ +/* MODULE_NAME: uroot.c */ +/* */ +/* FUNCTION: usqrt */ +/* */ +/* FILES NEEDED: dla.h endian.h mydefs.h uroot.h */ +/* uroot.tbl */ +/* */ +/* An ultimate sqrt routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of square */ +/* root of x. */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/*********************************************************************/ -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ -static const double one = 1.0, tiny=1.0e-300; -#else -static double one = 1.0, tiny=1.0e-300; -#endif - -#ifdef __STDC__ - double __ieee754_sqrt(double x) -#else - double __ieee754_sqrt(x) - double x; -#endif -{ - double z; - int32_t sign = (int)0x80000000; - int32_t ix0,s0,q,m,t,i; - u_int32_t r,t1,s1,ix1,q1; - - EXTRACT_WORDS(ix0,ix1,x); - - /* take care of Inf and NaN */ - if((ix0&0x7ff00000)==0x7ff00000) { - return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf - sqrt(-inf)=sNaN */ - } - /* take care of zero */ - if(ix0<=0) { - if(((ix0&(~sign))|ix1)==0) return x;/* sqrt(+-0) = +-0 */ - else if(ix0<0) - return (x-x)/(x-x); /* sqrt(-ve) = sNaN */ - } - /* normalize x */ - m = (ix0>>20); - if(m==0) { /* subnormal x */ - while(ix0==0) { - m -= 21; - ix0 |= (ix1>>11); ix1 <<= 21; - } - for(i=0;(ix0&0x00100000)==0;i++) ix0<<=1; - m -= i-1; - ix0 |= (ix1>>(32-i)); - ix1 <<= i; - } - m -= 1023; /* unbias exponent */ - ix0 = (ix0&0x000fffff)|0x00100000; - if(m&1){ /* odd m, double x to make it even */ - ix0 += ix0 + ((ix1&sign)>>31); - ix1 += ix1; - } - m >>= 1; /* m = [m/2] */ - - /* generate sqrt(x) bit by bit */ - ix0 += ix0 + ((ix1&sign)>>31); - ix1 += ix1; - q = q1 = s0 = s1 = 0; /* [q,q1] = sqrt(x) */ - r = 0x00200000; /* r = moving bit from right to left */ - - while(r!=0) { - t = s0+r; - if(t<=ix0) { - s0 = t+r; - ix0 -= t; - q += r; - } - ix0 += ix0 + ((ix1&sign)>>31); - ix1 += ix1; - r>>=1; - } +#include "endian.h" +#include "mydefs.h" +#include "dla.h" +#include "MathLib.h" +#include "root.tbl" - r = sign; - while(r!=0) { - t1 = s1+r; - t = s0; - if((t>31); - ix1 += ix1; - r>>=1; - } +/*********************************************************************/ +/* An ultimate aqrt routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of square */ +/* root of x. */ +/*********************************************************************/ +double __ieee754_sqrt(double x) { +#include "uroot.h" + static const double + rt0 = 9.99999999859990725855365213134618E-01, + rt1 = 4.99999999495955425917856814202739E-01, + rt2 = 3.75017500867345182581453026130850E-01, + rt3 = 3.12523626554518656309172508769531E-01; + static const double big = 134217728.0, big1 = 134217729.0; + double y,t,del,res,res1,hy,z,zz,p,hx,tx,ty,s; + mynumber a,c={{0,0}}; + int4 k; - /* use floating add to find out rounding direction */ - if((ix0|ix1)!=0) { - z = one-tiny; /* trigger inexact flag */ - if (z>=one) { - z = one+tiny; - if (q1==(u_int32_t)0xffffffff) { q1=0; q += 1;} - else if (z>one) { - if (q1==(u_int32_t)0xfffffffe) q+=1; - q1+=2; - } else - q1 += (q1&1); - } - } - ix0 = (q>>1)+0x3fe00000; - ix1 = q1>>1; - if ((q&1)==1) ix1 |= sign; - ix0 += (m <<20); - INSERT_WORDS(z,ix0,ix1); - return z; + a.x=x; + k=a.i[HIGH_HALF]; + a.i[HIGH_HALF]=(k&0x001fffff)|0x3fe00000; + t=inroot[(k&0x001fffff)>>14]; + s=a.x; + /*----------------- 2^-1022 <= | x |< 2^1024 -----------------*/ + if (k>0x000fffff && k<0x7ff00000) { + y=1.0-t*(t*s); + t=t*(rt0+y*(rt1+y*(rt2+y*rt3))); + c.i[HIGH_HALF]=0x20000000+((k&0x7fe00000)>>1); + y=t*s; + hy=(y+big)-big; + del=0.5*t*((s-hy*hy)-(y-hy)*(y+hy)); + res=y+del; + if (res == (res+1.002*((y-res)+del))) return res*c.x; + else { + res1=res+1.5*((y-res)+del); + EMULV(res,res1,z,zz,p,hx,tx,hy,ty); /* (z+zz)=res*res1 */ + return ((((z-s)+zz)<0)?max(res,res1):min(res,res1))*c.x; + } + } + else { + if (k>0x7ff00000) /* x -> infinity */ + return (big1-big1)/(big-big); + if (k<0x00100000) { /* x -> -infinity */ + if (x==0) return x; + if (k<0) return (big1-big1)/(big-big); + else return tm256.x*__ieee754_sqrt(x*t512.x); + } + else return (a.i[LOW_HALF]==0)?x:(big1-big1)/(big-big); + } } - -/* -Other methods (use floating-point arithmetic) -------------- -(This is a copy of a drafted paper by Prof W. Kahan -and K.C. Ng, written in May, 1986) - - Two algorithms are given here to implement sqrt(x) - (IEEE double precision arithmetic) in software. - Both supply sqrt(x) correctly rounded. The first algorithm (in - Section A) uses newton iterations and involves four divisions. - The second one uses reciproot iterations to avoid division, but - requires more multiplications. Both algorithms need the ability - to chop results of arithmetic operations instead of round them, - and the INEXACT flag to indicate when an arithmetic operation - is executed exactly with no roundoff error, all part of the - standard (IEEE 754-1985). The ability to perform shift, add, - subtract and logical AND operations upon 32-bit words is needed - too, though not part of the standard. - -A. sqrt(x) by Newton Iteration - - (1) Initial approximation - - Let x0 and x1 be the leading and the trailing 32-bit words of - a floating point number x (in IEEE double format) respectively - - 1 11 52 ...widths - ------------------------------------------------------ - x: |s| e | f | - ------------------------------------------------------ - msb lsb msb lsb ...order - - - ------------------------ ------------------------ - x0: |s| e | f1 | x1: | f2 | - ------------------------ ------------------------ - - By performing shifts and subtracts on x0 and x1 (both regarded - as integers), we obtain an 8-bit approximation of sqrt(x) as - follows. - - k := (x0>>1) + 0x1ff80000; - y0 := k - T1[31&(k>>15)]. ... y ~ sqrt(x) to 8 bits - Here k is a 32-bit integer and T1[] is an integer array containing - correction terms. Now magically the floating value of y (y's - leading 32-bit word is y0, the value of its trailing word is 0) - approximates sqrt(x) to almost 8-bit. - - Value of T1: - static int T1[32]= { - 0, 1024, 3062, 5746, 9193, 13348, 18162, 23592, - 29598, 36145, 43202, 50740, 58733, 67158, 75992, 85215, - 83599, 71378, 60428, 50647, 41945, 34246, 27478, 21581, - 16499, 12183, 8588, 5674, 3403, 1742, 661, 130,}; - - (2) Iterative refinement - - Apply Heron's rule three times to y, we have y approximates - sqrt(x) to within 1 ulp (Unit in the Last Place): - - y := (y+x/y)/2 ... almost 17 sig. bits - y := (y+x/y)/2 ... almost 35 sig. bits - y := y-(y-x/y)/2 ... within 1 ulp - - - Remark 1. - Another way to improve y to within 1 ulp is: - - y := (y+x/y) ... almost 17 sig. bits to 2*sqrt(x) - y := y - 0x00100006 ... almost 18 sig. bits to sqrt(x) - - 2 - (x-y )*y - y := y + 2* ---------- ...within 1 ulp - 2 - 3y + x - - - This formula has one division fewer than the one above; however, - it requires more multiplications and additions. Also x must be - scaled in advance to avoid spurious overflow in evaluating the - expression 3y*y+x. Hence it is not recommended uless division - is slow. If division is very slow, then one should use the - reciproot algorithm given in section B. - - (3) Final adjustment - - By twiddling y's last bit it is possible to force y to be - correctly rounded according to the prevailing rounding mode - as follows. Let r and i be copies of the rounding mode and - inexact flag before entering the square root program. Also we - use the expression y+-ulp for the next representable floating - numbers (up and down) of y. Note that y+-ulp = either fixed - point y+-1, or multiply y by nextafter(1,+-inf) in chopped - mode. - - I := FALSE; ... reset INEXACT flag I - R := RZ; ... set rounding mode to round-toward-zero - z := x/y; ... chopped quotient, possibly inexact - If(not I) then { ... if the quotient is exact - if(z=y) { - I := i; ... restore inexact flag - R := r; ... restore rounded mode - return sqrt(x):=y. - } else { - z := z - ulp; ... special rounding - } - } - i := TRUE; ... sqrt(x) is inexact - If (r=RN) then z=z+ulp ... rounded-to-nearest - If (r=RP) then { ... round-toward-+inf - y = y+ulp; z=z+ulp; - } - y := y+z; ... chopped sum - y0:=y0-0x00100000; ... y := y/2 is correctly rounded. - I := i; ... restore inexact flag - R := r; ... restore rounded mode - return sqrt(x):=y. - - (4) Special cases - - Square root of +inf, +-0, or NaN is itself; - Square root of a negative number is NaN with invalid signal. - - -B. sqrt(x) by Reciproot Iteration - - (1) Initial approximation - - Let x0 and x1 be the leading and the trailing 32-bit words of - a floating point number x (in IEEE double format) respectively - (see section A). By performing shifs and subtracts on x0 and y0, - we obtain a 7.8-bit approximation of 1/sqrt(x) as follows. - - k := 0x5fe80000 - (x0>>1); - y0:= k - T2[63&(k>>14)]. ... y ~ 1/sqrt(x) to 7.8 bits - - Here k is a 32-bit integer and T2[] is an integer array - containing correction terms. Now magically the floating - value of y (y's leading 32-bit word is y0, the value of - its trailing word y1 is set to zero) approximates 1/sqrt(x) - to almost 7.8-bit. - - Value of T2: - static int T2[64]= { - 0x1500, 0x2ef8, 0x4d67, 0x6b02, 0x87be, 0xa395, 0xbe7a, 0xd866, - 0xf14a, 0x1091b,0x11fcd,0x13552,0x14999,0x15c98,0x16e34,0x17e5f, - 0x18d03,0x19a01,0x1a545,0x1ae8a,0x1b5c4,0x1bb01,0x1bfde,0x1c28d, - 0x1c2de,0x1c0db,0x1ba73,0x1b11c,0x1a4b5,0x1953d,0x18266,0x16be0, - 0x1683e,0x179d8,0x18a4d,0x19992,0x1a789,0x1b445,0x1bf61,0x1c989, - 0x1d16d,0x1d77b,0x1dddf,0x1e2ad,0x1e5bf,0x1e6e8,0x1e654,0x1e3cd, - 0x1df2a,0x1d635,0x1cb16,0x1be2c,0x1ae4e,0x19bde,0x1868e,0x16e2e, - 0x1527f,0x1334a,0x11051,0xe951, 0xbe01, 0x8e0d, 0x5924, 0x1edd,}; - - (2) Iterative refinement - - Apply Reciproot iteration three times to y and multiply the - result by x to get an approximation z that matches sqrt(x) - to about 1 ulp. To be exact, we will have - -1ulp < sqrt(x)-z<1.0625ulp. - - ... set rounding mode to Round-to-nearest - y := y*(1.5-0.5*x*y*y) ... almost 15 sig. bits to 1/sqrt(x) - y := y*((1.5-2^-30)+0.5*x*y*y)... about 29 sig. bits to 1/sqrt(x) - ... special arrangement for better accuracy - z := x*y ... 29 bits to sqrt(x), with z*y<1 - z := z + 0.5*z*(1-z*y) ... about 1 ulp to sqrt(x) - - Remark 2. The constant 1.5-2^-30 is chosen to bias the error so that - (a) the term z*y in the final iteration is always less than 1; - (b) the error in the final result is biased upward so that - -1 ulp < sqrt(x) - z < 1.0625 ulp - instead of |sqrt(x)-z|<1.03125ulp. - - (3) Final adjustment - - By twiddling y's last bit it is possible to force y to be - correctly rounded according to the prevailing rounding mode - as follows. Let r and i be copies of the rounding mode and - inexact flag before entering the square root program. Also we - use the expression y+-ulp for the next representable floating - numbers (up and down) of y. Note that y+-ulp = either fixed - point y+-1, or multiply y by nextafter(1,+-inf) in chopped - mode. - - R := RZ; ... set rounding mode to round-toward-zero - switch(r) { - case RN: ... round-to-nearest - if(x<= z*(z-ulp)...chopped) z = z - ulp; else - if(x<= z*(z+ulp)...chopped) z = z; else z = z+ulp; - break; - case RZ:case RM: ... round-to-zero or round-to--inf - R:=RP; ... reset rounding mod to round-to-+inf - if(x=(z+ulp)*(z+ulp) ...rounded up) z = z+ulp; - break; - case RP: ... round-to-+inf - if(x>(z+ulp)*(z+ulp)...chopped) z = z+2*ulp; else - if(x>z*z ...chopped) z = z+ulp; - break; - } - - Remark 3. The above comparisons can be done in fixed point. For - example, to compare x and w=z*z chopped, it suffices to compare - x1 and w1 (the trailing parts of x and w), regarding them as - two's complement integers. - - ...Is z an exact square root? - To determine whether z is an exact square root of x, let z1 be the - trailing part of z, and also let x0 and x1 be the leading and - trailing parts of x. - - If ((z1&0x03ffffff)!=0) ... not exact if trailing 26 bits of z!=0 - I := 1; ... Raise Inexact flag: z is not exact - else { - j := 1 - [(x0>>20)&1] ... j = logb(x) mod 2 - k := z1 >> 26; ... get z's 25-th and 26-th - fraction bits - I := i or (k&j) or ((k&(j+j+1))!=(x1&3)); - } - R:= r ... restore rounded mode - return sqrt(x):=z. - - If multiplication is cheaper then the foregoing red tape, the - Inexact flag can be evaluated by - - I := i; - I := (z*z!=x) or I. - - Note that z*z can overwrite I; this value must be sensed if it is - True. - - Remark 4. If z*z = x exactly, then bit 25 to bit 0 of z1 must be - zero. - - -------------------- - z1: | f2 | - -------------------- - bit 31 bit 0 - - Further more, bit 27 and 26 of z1, bit 0 and 1 of x1, and the odd - or even of logb(x) have the following relations: - - ------------------------------------------------- - bit 27,26 of z1 bit 1,0 of x1 logb(x) - ------------------------------------------------- - 00 00 odd and even - 01 01 even - 10 10 odd - 10 00 even - 11 01 even - ------------------------------------------------- - - (4) Special cases (see (4) of Section A). - - */ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/halfulp.c glibc-2.2.3/sysdeps/ieee754/dbl-64/halfulp.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/halfulp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/halfulp.c Mon Mar 12 12:25:20 2001 @@ -0,0 +1,122 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* */ +/* MODULE_NAME:halfulp.c */ +/* */ +/* FUNCTIONS:halfulp */ +/* FILES NEEDED: mydefs.h dla.h endian.h */ +/* uroot.c */ +/* */ +/*Routine halfulp(double x, double y) computes x^y where result does */ +/*not need rounding. If the result is closer to 0 than can be */ +/*represented it returns 0. */ +/* In the following cases the function does not compute anything */ +/*and returns a negative number: */ +/*1. if the result needs rounding, */ +/*2. if y is outside the interval [0, 2^20-1], */ +/*3. if x can be represented by x=2**n for some integer n. */ +/************************************************************************/ + +#include "endian.h" +#include "mydefs.h" +#include "dla.h" + +double __ieee754_sqrt(double x); + +int4 tab54[32] = { + 262143, 11585, 1782, 511, 210, 107, 63, 42, + 30, 22, 17, 14, 12, 10, 9, 7, + 7, 6, 5, 5, 5, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 3, 3 }; + + +double __halfulp(double x, double y) +{ + mynumber v; + double z,u,uu,j1,j2,j3,j4,j5; + int4 k,l,m,n; + if (y <= 0) { /*if power is negative or zero */ + v.x = y; + if (v.i[LOW_HALF] != 0) return -10.0; + v.x = x; + if (v.i[LOW_HALF] != 0) return -10.0; + if ((v.i[HIGH_HALF]&0x000fffff) != 0) return -10; /* if x =2 ^ n */ + k = ((v.i[HIGH_HALF]&0x7fffffff)>>20)-1023; /* find this n */ + z = (double) k; + return (z*y == -1075.0)?0: -10.0; + } + /* if y > 0 */ + v.x = y; + if (v.i[LOW_HALF] != 0) return -10.0; + + v.x=x; + /* case where x = 2**n for some integer n */ + if (((v.i[HIGH_HALF]&0x000fffff)|v.i[LOW_HALF]) == 0) { + k=(v.i[HIGH_HALF]>>20)-1023; + return (((double) k)*y == -1075.0)?0:-10.0; + } + + v.x = y; + k = v.i[HIGH_HALF]; + m = k<<12; + l = 0; + while (m) + {m = m<<1; l++; } + n = (k&0x000fffff)|0x00100000; + n = n>>(20-l); /* n is the odd integer of y */ + k = ((k>>20) -1023)-l; /* y = n*2**k */ + if (k>5) return -10.0; + if (k>0) for (;k>0;k--) n *= 2; + if (n > 34) return -10.0; + k = -k; + if (k>5) return -10.0; + + /* now treat x */ + while (k>0) { + z = __ieee754_sqrt(x); + EMULV(z,z,u,uu,j1,j2,j3,j4,j5); + if (((u-x)+uu) != 0) break; + x = z; + k--; + } + if (k) return -10.0; + + /* it is impossible that n == 2, so the mantissa of x must be short */ + + v.x = x; + if (v.i[LOW_HALF]) return -10.0; + k = v.i[HIGH_HALF]; + m = k<<12; + l = 0; + while (m) {m = m<<1; l++; } + m = (k&0x000fffff)|0x00100000; + m = m>>(20-l); /* m is the odd integer of x */ + + /* now check whether the length of m**n is at most 54 bits */ + + if (m > tab54[n-3]) return -10.0; + + /* yes, it is - now compute x**n by simple multiplications */ + + u = x; + for (k=1;k 0.3, let qx = |x|/4 with - * the last 32 bits mask off, and if x > 0.78125, let qx = 0.28125. - * Then - * cos(x+y) = (1-qx) - ((x*x/2-qx) - (r-x*y)). - * Note that 1-qx and (x*x/2-qx) is EXACT here, and the - * magnitude of the latter is at least a quarter of x*x/2, - * thus, reducing the rounding error in the subtraction. - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ -static const double -#else -static double -#endif -C[] = { - 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ - 4.16666666666666019037e-02, /* 0x3FA55555, 0x5555554C */ - -1.38888888888741095749e-03, /* 0xBF56C16C, 0x16C15177 */ - 2.48015872894767294178e-05, /* 0x3EFA01A0, 0x19CB1590 */ - -2.75573143513906633035e-07, /* 0xBE927E4F, 0x809C52AD */ - 2.08757232129817482790e-09, /* 0x3E21EE9E, 0xBDB4B1C4 */ - -1.13596475577881948265e-11}; /* 0xBDA8FAE9, 0xBE8838D4 */ - -#ifdef __STDC__ - double __kernel_cos(double x, double y) -#else - double __kernel_cos(x, y) - double x,y; -#endif -{ - double a,hz,z,r,qx,r1,r2,r3,z1,z2,z3; - int32_t ix; - z = x*x; - GET_HIGH_WORD(ix,x); - ix &= 0x7fffffff; /* ix = |x|'s high word*/ - if(ix<0x3e400000) { /* if x < 2**27 */ - if(((int)x)==0) return C[0]; /* generate inexact */ - } -#ifdef DO_NOT_USE_THIS - r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6))))); -#else - r1=z*C[6];r1=r1+C[5];z1=z*z; - r2=z*C[4];r2=r2+C[3];z2=z1*z; - r3=z*C[2];r3=r3+C[1];z3=z2*z1; - r=z3*r1+z2*r2+z*r3; -#endif - if(ix < 0x3FD33333) /* if |x| < 0.3 */ - return C[0] - (0.5*z - (z*r - x*y)); - else { - if(ix > 0x3fe90000) { /* x > 0.78125 */ - qx = 0.28125; - } else { - INSERT_WORDS(qx,ix-0x00200000,0); /* x/4 */ - } - hz = 0.5*z-qx; - a = C[0]-qx; - return a - (hz - (z*r-x*y)); - } -} +/* Not needed anymore. */ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/k_sin.c glibc-2.2.3/sysdeps/ieee754/dbl-64/k_sin.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/k_sin.c Tue Jul 13 16:49:59 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/k_sin.c Mon Mar 26 20:53:25 2001 @@ -1,91 +1 @@ -/* @(#)k_sin.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. -*/ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_sin.c,v 1.8 1995/05/10 20:46:31 jtc Exp $"; -#endif - -/* __kernel_sin( x, y, iy) - * kernel sin function on [-pi/4, pi/4], pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input iy indicates whether y is 0. (if iy=0, y assume to be 0). - * - * Algorithm - * 1. Since sin(-x) = -sin(x), we need only to consider positive x. - * 2. if x < 2^-27 (hx<0x3e400000 0), return x with inexact if x!=0. - * 3. sin(x) is approximated by a polynomial of degree 13 on - * [0,pi/4] - * 3 13 - * sin(x) ~ x + S1*x + ... + S6*x - * where - * - * |sin(x) 2 4 6 8 10 12 | -58 - * |----- - (1+S1*x +S2*x +S3*x +S4*x +S5*x +S6*x )| <= 2 - * | x | - * - * 4. sin(x+y) = sin(x) + sin'(x')*y - * ~ sin(x) + (1-x*x/2)*y - * For better accuracy, let - * 3 2 2 2 2 - * r = x *(S2+x *(S3+x *(S4+x *(S5+x *S6)))) - * then 3 2 - * sin(x) = x + (S1*x + (x *(r-y/2)+y)) - */ - -#include "math.h" -#include "math_private.h" - -#ifdef __STDC__ -static const double -#else -static double -#endif -S[] = { - 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ - -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */ - 8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */ - -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */ - 2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */ - -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */ - 1.58969099521155010221e-10}; /* 0x3DE5D93A, 0x5ACFD57C */ - -#ifdef __STDC__ - double __kernel_sin(double x, double y, int iy) -#else - double __kernel_sin(x, y, iy) - double x,y; int iy; /* iy=0 if y is zero */ -#endif -{ - double z,r,v,z1,r1,r2; - int32_t ix; - GET_HIGH_WORD(ix,x); - ix &= 0x7fffffff; /* high word of x */ - if(ix<0x3e400000) /* |x| < 2**-27 */ - {if((int)x==0) return x;} /* generate inexact */ - z = x*x; - v = z*x; -#ifdef DO_NOT_USE_THIS - r = S2+z*(S3+z*(S4+z*(S5+z*S6))); - if(iy==0) return x+v*(S1+z*r); - else return x-((z*(half*y-v*r)-y)-v*S1); -#else - r1 = S[5]+z*S[6]; z1 = z*z*z; - r2 = S[3]+z*S[4]; - r = S[2] + z*r2 + z1*r1; - if(iy==0) return x+v*(S[1]+z*r); - else return x-((z*(S[0]*y-v*r)-y)-v*S[1]); -#endif -} +/* Not needed anymore. */ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpa.c glibc-2.2.3/sysdeps/ieee754/dbl-64/mpa.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpa.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpa.c Mon Mar 12 12:31:59 2001 @@ -0,0 +1,506 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: mpa.c */ +/* */ +/* FUNCTIONS: */ +/* mcr */ +/* acr */ +/* cr */ +/* cpy */ +/* cpymn */ +/* norm */ +/* denorm */ +/* mp_dbl */ +/* dbl_mp */ +/* add_magnitudes */ +/* sub_magnitudes */ +/* add */ +/* sub */ +/* mul */ +/* inv */ +/* dvd */ +/* */ +/* Arithmetic functions for multiple precision numbers. */ +/* Relative errors are bounded */ +/************************************************************************/ + + +#include "endian.h" +#include "mpa.h" +#include "mpa2.h" +/* mcr() compares the sizes of the mantissas of two multiple precision */ +/* numbers. Mantissas are compared regardless of the signs of the */ +/* numbers, even if x->d[0] or y->d[0] are zero. Exponents are also */ +/* disregarded. */ +static int mcr(const mp_no *x, const mp_no *y, int p) { + int i; + for (i=1; i<=p; i++) { + if (X[i] == Y[i]) continue; + else if (X[i] > Y[i]) return 1; + else return -1; } + return 0; +} + + + +/* acr() compares the absolute values of two multiple precision numbers */ +int __acr(const mp_no *x, const mp_no *y, int p) { + int i; + + if (X[0] == ZERO) { + if (Y[0] == ZERO) i= 0; + else i=-1; + } + else if (Y[0] == ZERO) i= 1; + else { + if (EX > EY) i= 1; + else if (EX < EY) i=-1; + else i= mcr(x,y,p); + } + + return i; +} + + +/* cr90 compares the values of two multiple precision numbers */ +int __cr(const mp_no *x, const mp_no *y, int p) { + int i; + + if (X[0] > Y[0]) i= 1; + else if (X[0] < Y[0]) i=-1; + else if (X[0] < ZERO ) i= __acr(y,x,p); + else i= __acr(x,y,p); + + return i; +} + + +/* Copy a multiple precision number. Set *y=*x. x=y is permissible. */ +void __cpy(const mp_no *x, mp_no *y, int p) { + int i; + + EY = EX; + for (i=0; i <= p; i++) Y[i] = X[i]; + + return; +} + + +/* Copy a multiple precision number x of precision m into a */ +/* multiple precision number y of precision n. In case n>m, */ +/* the digits of y beyond the m'th are set to zero. In case */ +/* n= 2**(-1022))) */ +static void norm(const mp_no *x, double *y, int p) +{ + #define R radixi.d + int i; +#if 0 + int k; +#endif + double a,c,u,v,z[5]; + if (p<5) { + if (p==1) c = X[1]; + else if (p==2) c = X[1] + R* X[2]; + else if (p==3) c = X[1] + R*(X[2] + R* X[3]); + else if (p==4) c =(X[1] + R* X[2]) + R*R*(X[3] + R*X[4]); + } + else { + for (a=ONE, z[1]=X[1]; z[1] < TWO23; ) + {a *= TWO; z[1] *= TWO; } + + for (i=2; i<5; i++) { + z[i] = X[i]*a; + u = (z[i] + CUTTER)-CUTTER; + if (u > z[i]) u -= RADIX; + z[i] -= u; + z[i-1] += u*RADIXI; + } + + u = (z[3] + TWO71) - TWO71; + if (u > z[3]) u -= TWO19; + v = z[3]-u; + + if (v == TWO18) { + if (z[4] == ZERO) { + for (i=5; i <= p; i++) { + if (X[i] == ZERO) continue; + else {z[3] += ONE; break; } + } + } + else z[3] += ONE; + } + + c = (z[1] + R *(z[2] + R * z[3]))/a; + } + + c *= X[0]; + + for (i=1; iEX; i--) c *= RADIXI; + + *y = c; + return; +#undef R +} + +/* Convert a multiple precision number *x into a double precision */ +/* number *y, denormalized case (|x| < 2**(-1022))) */ +static void denorm(const mp_no *x, double *y, int p) +{ + int i,k; + double c,u,z[5]; +#if 0 + double a,v; +#endif + +#define R radixi.d + if (EX<-44 || (EX==-44 && X[1] z[3]) u -= TWO5; + + if (u==z[3]) { + for (i=k+1; i <= p; i++) { + if (X[i] == ZERO) continue; + else {z[3] += ONE; break; } + } + } + + c = X[0]*((z[1] + R*(z[2] + R*z[3])) - TWO10); + + *y = c*TWOM1032; + return; + +#undef R +} + +/* Convert a multiple precision number *x into a double precision number *y. */ +/* The result is correctly rounded to the nearest/even. *x is left unchanged */ + +void __mp_dbl(const mp_no *x, double *y, int p) { +#if 0 + int i,k; + double a,c,u,v,z[5]; +#endif + + if (X[0] == ZERO) {*y = ZERO; return; } + + if (EX> -42) norm(x,y,p); + else if (EX==-42 && X[1]>=TWO10) norm(x,y,p); + else denorm(x,y,p); +} + + +/* dbl_mp() converts a double precision number x into a multiple precision */ +/* number *y. If the precision p is too small the result is truncated. x is */ +/* left unchanged. */ + +void __dbl_mp(double x, mp_no *y, int p) { + + int i,n; + double u; + + /* Sign */ + if (x == ZERO) {Y[0] = ZERO; return; } + else if (x > ZERO) Y[0] = ONE; + else {Y[0] = MONE; x=-x; } + + /* Exponent */ + for (EY=ONE; x >= RADIX; EY += ONE) x *= RADIXI; + for ( ; x < ONE; EY -= ONE) x *= RADIX; + + /* Digits */ + n=MIN(p,4); + for (i=1; i<=n; i++) { + u = (x + TWO52) - TWO52; + if (u>x) u -= ONE; + Y[i] = u; x -= u; x *= RADIX; } + for ( ; i<=p; i++) Y[i] = ZERO; + return; +} + + +/* add_magnitudes() adds the magnitudes of *x & *y assuming that */ +/* abs(*x) >= abs(*y) > 0. */ +/* The sign of the sum *z is undefined. x&y may overlap but not x&z or y&z. */ +/* No guard digit is used. The result equals the exact sum, truncated. */ +/* *x & *y are left unchanged. */ + +static void add_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) { + + int i,j,k; + + EZ = EX; + + i=p; j=p+ EY - EX; k=p+1; + + if (j<1) + {__cpy(x,z,p); return; } + else Z[k] = ZERO; + + for (; j>0; i--,j--) { + Z[k] += X[i] + Y[j]; + if (Z[k] >= RADIX) { + Z[k] -= RADIX; + Z[--k] = ONE; } + else + Z[--k] = ZERO; + } + + for (; i>0; i--) { + Z[k] += X[i]; + if (Z[k] >= RADIX) { + Z[k] -= RADIX; + Z[--k] = ONE; } + else + Z[--k] = ZERO; + } + + if (Z[1] == ZERO) { + for (i=1; i<=p; i++) Z[i] = Z[i+1]; } + else EZ += ONE; +} + + +/* sub_magnitudes() subtracts the magnitudes of *x & *y assuming that */ +/* abs(*x) > abs(*y) > 0. */ +/* The sign of the difference *z is undefined. x&y may overlap but not x&z */ +/* or y&z. One guard digit is used. The error is less than one ulp. */ +/* *x & *y are left unchanged. */ + +static void sub_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) { + + int i,j,k; + + EZ = EX; + + if (EX == EY) { + i=j=k=p; + Z[k] = Z[k+1] = ZERO; } + else { + j= EX - EY; + if (j > p) {__cpy(x,z,p); return; } + else { + i=p; j=p+1-j; k=p; + if (Y[j] > ZERO) { + Z[k+1] = RADIX - Y[j--]; + Z[k] = MONE; } + else { + Z[k+1] = ZERO; + Z[k] = ZERO; j--;} + } + } + + for (; j>0; i--,j--) { + Z[k] += (X[i] - Y[j]); + if (Z[k] < ZERO) { + Z[k] += RADIX; + Z[--k] = MONE; } + else + Z[--k] = ZERO; + } + + for (; i>0; i--) { + Z[k] += X[i]; + if (Z[k] < ZERO) { + Z[k] += RADIX; + Z[--k] = MONE; } + else + Z[--k] = ZERO; + } + + for (i=1; Z[i] == ZERO; i++) ; + EZ = EZ - i + 1; + for (k=1; i <= p+1; ) + Z[k++] = Z[i++]; + for (; k <= p; ) + Z[k++] = ZERO; + + return; +} + + +/* Add two multiple precision numbers. Set *z = *x + *y. x&y may overlap */ +/* but not x&z or y&z. One guard digit is used. The error is less than */ +/* one ulp. *x & *y are left unchanged. */ + +void __add(const mp_no *x, const mp_no *y, mp_no *z, int p) { + + int n; + + if (X[0] == ZERO) {__cpy(y,z,p); return; } + else if (Y[0] == ZERO) {__cpy(x,z,p); return; } + + if (X[0] == Y[0]) { + if (__acr(x,y,p) > 0) {add_magnitudes(x,y,z,p); Z[0] = X[0]; } + else {add_magnitudes(y,x,z,p); Z[0] = Y[0]; } + } + else { + if ((n=__acr(x,y,p)) == 1) {sub_magnitudes(x,y,z,p); Z[0] = X[0]; } + else if (n == -1) {sub_magnitudes(y,x,z,p); Z[0] = Y[0]; } + else Z[0] = ZERO; + } + return; +} + + +/* Subtract two multiple precision numbers. *z is set to *x - *y. x&y may */ +/* overlap but not x&z or y&z. One guard digit is used. The error is */ +/* less than one ulp. *x & *y are left unchanged. */ + +void __sub(const mp_no *x, const mp_no *y, mp_no *z, int p) { + + int n; + + if (X[0] == ZERO) {__cpy(y,z,p); Z[0] = -Z[0]; return; } + else if (Y[0] == ZERO) {__cpy(x,z,p); return; } + + if (X[0] != Y[0]) { + if (__acr(x,y,p) > 0) {add_magnitudes(x,y,z,p); Z[0] = X[0]; } + else {add_magnitudes(y,x,z,p); Z[0] = -Y[0]; } + } + else { + if ((n=__acr(x,y,p)) == 1) {sub_magnitudes(x,y,z,p); Z[0] = X[0]; } + else if (n == -1) {sub_magnitudes(y,x,z,p); Z[0] = -Y[0]; } + else Z[0] = ZERO; + } + return; +} + + +/* Multiply two multiple precision numbers. *z is set to *x * *y. x&y */ +/* may overlap but not x&z or y&z. In case p=1,2,3 the exact result is */ +/* truncated to p digits. In case p>3 the error is bounded by 1.001 ulp. */ +/* *x & *y are left unchanged. */ + +void __mul(const mp_no *x, const mp_no *y, mp_no *z, int p) { + + int i, i1, i2, j, k, k2; + double u; + + /* Is z=0? */ + if (X[0]*Y[0]==ZERO) + { Z[0]=ZERO; return; } + + /* Multiply, add and carry */ + k2 = (p<3) ? p+p : p+3; + Z[k2]=ZERO; + for (k=k2; k>1; ) { + if (k > p) {i1=k-p; i2=p+1; } + else {i1=1; i2=k; } + for (i=i1,j=i2-1; i Z[k]) u -= RADIX; + Z[k] -= u; + Z[--k] = u*RADIXI; + } + + /* Is there a carry beyond the most significant digit? */ + if (Z[1] == ZERO) { + for (i=1; i<=p; i++) Z[i]=Z[i+1]; + EZ = EX + EY - 1; } + else + EZ = EX + EY; + + Z[0] = X[0] * Y[0]; + return; +} + + +/* Invert a multiple precision number. Set *y = 1 / *x. */ +/* Relative error bound = 1.001*r**(1-p) for p=2, 1.063*r**(1-p) for p=3, */ +/* 2.001*r**(1-p) for p>3. */ +/* *x=0 is not permissible. *x is left unchanged. */ + +void __inv(const mp_no *x, mp_no *y, int p) { + int i; +#if 0 + int l; +#endif + double t; + mp_no z,w; + static const int np1[] = {0,0,0,0,1,2,2,2,2,3,3,3,3,3,3,3,3,3, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}; + const mp_no mptwo = {1,{1.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + + __cpy(x,&z,p); z.e=0; __mp_dbl(&z,&t,p); + t=ONE/t; __dbl_mp(t,y,p); EY -= EX; + + for (i=0; i3. *y=0 is not permissible. */ + +void __dvd(const mp_no *x, const mp_no *y, mp_no *z, int p) { + + mp_no w; + + if (X[0] == ZERO) Z[0] = ZERO; + else {__inv(y,&w,p); __mul(x,&w,z,p);} + return; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpa.h glibc-2.2.3/sysdeps/ieee754/dbl-64/mpa.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpa.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpa.h Mon Mar 12 12:02:45 2001 @@ -0,0 +1,78 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: mpa.h */ +/* */ +/* FUNCTIONS: */ +/* mcr */ +/* acr */ +/* cr */ +/* cpy */ +/* cpymn */ +/* mp_dbl */ +/* dbl_mp */ +/* add */ +/* sub */ +/* mul */ +/* inv */ +/* dvd */ +/* */ +/* Arithmetic functions for multiple precision numbers. */ +/* Common types and definition */ +/************************************************************************/ + + +typedef struct {/* This structure holds the details of a multi-precision */ + int e; /* floating point number, x: d[0] holds its sign (-1,0 or 1) */ + double d[40]; /* e holds its exponent (...,-2,-1,0,1,2,...) and */ +} mp_no; /* d[1]...d[p] hold its mantissa digits. The value of x is, */ + /* x = d[1]*r**(e-1) + d[2]*r**(e-2) + ... + d[p]*r**(e-p). */ + /* Here r = 2**24, 0 <= d[i] < r and 1 <= p <= 32. */ + /* p is a global variable. A multi-precision number is */ + /* always normalized. Namely, d[1] > 0. An exception is */ + /* a zero which is characterized by d[0] = 0. The terms */ + /* d[p+1], d[p+2], ... of a none zero number have no */ + /* significance and so are the terms e, d[1],d[2],... */ + /* of a zero. */ + +typedef union { int i[2]; double d; } number; + +#define X x->d +#define Y y->d +#define Z z->d +#define EX x->e +#define EY y->e +#define EZ z->e + +#define MAX(x,y) ((x) < (y) ? (y) : (x)) +#define MIN(x,y) ((x) < (y) ? (x) : (y)) +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +int __acr(const mp_no *, const mp_no *, int); +int __cr(const mp_no *, const mp_no *, int); +void __cpy(const mp_no *, mp_no *, int); +void __cpymn(const mp_no *, int, mp_no *, int); +void __mp_dbl(const mp_no *, double *, int); +void __dbl_mp(double, mp_no *, int); +void __add(const mp_no *, const mp_no *, mp_no *, int); +void __sub(const mp_no *, const mp_no *, mp_no *, int); +void __mul(const mp_no *, const mp_no *, mp_no *, int); +void __inv(const mp_no *, mp_no *, int); +void __dvd(const mp_no *, const mp_no *, mp_no *, int); diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpa2.h glibc-2.2.3/sysdeps/ieee754/dbl-64/mpa2.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpa2.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpa2.h Sun Mar 11 23:29:57 2001 @@ -0,0 +1,93 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/**************************************************************************/ +/* */ +/* MODULE_NAME:mpa2.h */ +/* */ +/* */ +/* variables prototype and definition according to type of processor */ +/* types definition */ +/**************************************************************************/ + +#ifndef MPA2_H +#define MPA2_H + + +#ifdef BIG_ENDI +static const number +/**/ radix = {{0x41700000, 0x00000000} }, /* 2**24 */ +/**/ radixi = {{0x3e700000, 0x00000000} }, /* 2**-24 */ +/**/ cutter = {{0x44b00000, 0x00000000} }, /* 2**76 */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ mone = {{0xbff00000, 0x00000000} }, /* -1 */ +/**/ two = {{0x40000000, 0x00000000} }, /* 2 */ +/**/ two5 = {{0x40400000, 0x00000000} }, /* 2**5 */ +/**/ two10 = {{0x40900000, 0x00000000} }, /* 2**10 */ +/**/ two18 = {{0x41100000, 0x00000000} }, /* 2**18 */ +/**/ two19 = {{0x41200000, 0x00000000} }, /* 2**19 */ +/**/ two23 = {{0x41600000, 0x00000000} }, /* 2**23 */ +/**/ two52 = {{0x43300000, 0x00000000} }, /* 2**52 */ +/**/ two57 = {{0x43800000, 0x00000000} }, /* 2**57 */ +/**/ two71 = {{0x44600000, 0x00000000} }, /* 2**71 */ +/**/ twom1032 = {{0x00000400, 0x00000000} }; /* 2**-1032 */ + +#else +#ifdef LITTLE_ENDI +static const number +/**/ radix = {{0x00000000, 0x41700000} }, /* 2**24 */ +/**/ radixi = {{0x00000000, 0x3e700000} }, /* 2**-24 */ +/**/ cutter = {{0x00000000, 0x44b00000} }, /* 2**76 */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ mone = {{0x00000000, 0xbff00000} }, /* -1 */ +/**/ two = {{0x00000000, 0x40000000} }, /* 2 */ +/**/ two5 = {{0x00000000, 0x40400000} }, /* 2**5 */ +/**/ two10 = {{0x00000000, 0x40900000} }, /* 2**10 */ +/**/ two18 = {{0x00000000, 0x41100000} }, /* 2**18 */ +/**/ two19 = {{0x00000000, 0x41200000} }, /* 2**19 */ +/**/ two23 = {{0x00000000, 0x41600000} }, /* 2**23 */ +/**/ two52 = {{0x00000000, 0x43300000} }, /* 2**52 */ +/**/ two57 = {{0x00000000, 0x43800000} }, /* 2**57 */ +/**/ two71 = {{0x00000000, 0x44600000} }, /* 2**71 */ +/**/ twom1032 = {{0x00000000, 0x00000400} }; /* 2**-1032 */ + +#endif +#endif + +#define RADIX radix.d +#define RADIXI radixi.d +#define CUTTER cutter.d +#define ZERO zero.d +#define ONE one.d +#define MONE mone.d +#define TWO two.d +#define TWO5 two5.d +#define TWO10 two10.d +#define TWO18 two18.d +#define TWO19 two19.d +#define TWO23 two23.d +#define TWO52 two52.d +#define TWO57 two57.d +#define TWO71 two71.d +#define TWOM1032 twom1032.d + + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpatan.c glibc-2.2.3/sysdeps/ieee754/dbl-64/mpatan.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpatan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpatan.c Mon Mar 12 12:25:43 2001 @@ -0,0 +1,101 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:mpatan.c */ +/* */ +/* FUNCTIONS:mpatan */ +/* */ +/* FILES NEEDED: mpa.h endian.h mpatan.h */ +/* mpa.c */ +/* */ +/* Multi-Precision Atan function subroutine, for precision p >= 4.*/ +/* The relative error of the result is bounded by 34.32*r**(1-p), */ +/* where r=2**24. */ +/******************************************************************/ + +#include "endian.h" +#include "mpa.h" +void __mpsqrt(mp_no *, mp_no *, int); + +void __mpatan(mp_no *x, mp_no *y, int p) { +#include "mpatan.h" + + int i,m,n; + double dx; + mp_no + mpone = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}, + mptwo = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}, + mptwoim1 = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + + mp_no mps,mpsm,mpt,mpt1,mpt2,mpt3; + + /* Choose m and initiate mpone, mptwo & mptwoim1 */ + if (EX>0) m=7; + else if (EX<0) m=0; + else { + __mp_dbl(x,&dx,p); dx=ABS(dx); + for (m=6; m>0; m--) + {if (dx>xm[m].d) break;} + } + mpone.e = mptwo.e = mptwoim1.e = 1; + mpone.d[0] = mpone.d[1] = mptwo.d[0] = mptwoim1.d[0] = ONE; + mptwo.d[1] = TWO; + + /* Reduce x m times */ + __mul(x,x,&mpsm,p); + if (m==0) __cpy(x,&mps,p); + else { + for (i=0; i1; i--) { + mptwoim1.d[1] -= TWO; + __dvd(&mpsm,&mptwoim1,&mpt1,p); + __mul(&mpsm,&mpt,&mpt2,p); + __sub(&mpt1,&mpt2,&mpt,p); + } + __mul(&mps,&mpt,&mpt1,p); + __sub(&mps,&mpt1,&mpt,p); + + /* Compute Atan(x) */ + mptwoim1.d[1] = twom[m].d; + __mul(&mptwoim1,&mpt,y,p); + + return; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpatan.h glibc-2.2.3/sysdeps/ieee754/dbl-64/mpatan.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpatan.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpatan.h Sun Mar 11 23:41:31 2001 @@ -0,0 +1,172 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:mpatan.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef MPATAN_H +#define MPATAN_H + +#ifdef BIG_ENDI + static const number + xm[8] = { /* x[m] */ +/**/ {{0x00000000, 0x00000000} }, /* 0.0 */ +/**/ {{0x3f8930be, 0x00000000} }, /* 0.0123 */ +/**/ {{0x3f991687, 0x00000000} }, /* 0.0245 */ +/**/ {{0x3fa923a2, 0x00000000} }, /* 0.0491 */ +/**/ {{0x3fb930be, 0x00000000} }, /* 0.0984 */ +/**/ {{0x3fc95810, 0x00000000} }, /* 0.198 */ +/**/ {{0x3fda7ef9, 0x00000000} }, /* 0.414 */ +/**/ {{0x3ff00000, 0x00000000} }, /* 1.0 */ + }; + static const number + twonm1[33] = { /* 2n-1 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x40260000, 0x00000000} }, /* 11 */ +/**/ {{0x402e0000, 0x00000000} }, /* 15 */ +/**/ {{0x40330000, 0x00000000} }, /* 19 */ +/**/ {{0x40350000, 0x00000000} }, /* 21 */ +/**/ {{0x40390000, 0x00000000} }, /* 25 */ +/**/ {{0x403d0000, 0x00000000} }, /* 29 */ +/**/ {{0x40408000, 0x00000000} }, /* 33 */ +/**/ {{0x40428000, 0x00000000} }, /* 37 */ +/**/ {{0x40448000, 0x00000000} }, /* 41 */ +/**/ {{0x40468000, 0x00000000} }, /* 45 */ +/**/ {{0x40488000, 0x00000000} }, /* 49 */ +/**/ {{0x404a8000, 0x00000000} }, /* 53 */ +/**/ {{0x404b8000, 0x00000000} }, /* 55 */ +/**/ {{0x404d8000, 0x00000000} }, /* 59 */ +/**/ {{0x404f8000, 0x00000000} }, /* 63 */ +/**/ {{0x4050c000, 0x00000000} }, /* 67 */ +/**/ {{0x4051c000, 0x00000000} }, /* 71 */ +/**/ {{0x4052c000, 0x00000000} }, /* 75 */ +/**/ {{0x4053c000, 0x00000000} }, /* 79 */ +/**/ {{0x4054c000, 0x00000000} }, /* 83 */ +/**/ {{0x40554000, 0x00000000} }, /* 85 */ +/**/ {{0x40564000, 0x00000000} }, /* 89 */ +/**/ {{0x40574000, 0x00000000} }, /* 93 */ +/**/ {{0x40584000, 0x00000000} }, /* 97 */ +/**/ {{0x40594000, 0x00000000} }, /* 101 */ +/**/ {{0x405a4000, 0x00000000} }, /* 105 */ +/**/ {{0x405b4000, 0x00000000} }, /* 109 */ +/**/ {{0x405c4000, 0x00000000} }, /* 113 */ +/**/ {{0x405d4000, 0x00000000} }, /* 117 */ + }; + + static const number + twom[8] = { /* 2**m */ +/**/ {{0x3ff00000, 0x00000000} }, /* 1.0 */ +/**/ {{0x40000000, 0x00000000} }, /* 2.0 */ +/**/ {{0x40100000, 0x00000000} }, /* 4.0 */ +/**/ {{0x40200000, 0x00000000} }, /* 8.0 */ +/**/ {{0x40300000, 0x00000000} }, /* 16.0 */ +/**/ {{0x40400000, 0x00000000} }, /* 32.0 */ +/**/ {{0x40500000, 0x00000000} }, /* 64.0 */ +/**/ {{0x40600000, 0x00000000} }, /* 128.0 */ + }; + + static const number +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ two = {{0x40000000, 0x00000000} }; /* 2 */ + +#else +#ifdef LITTLE_ENDI + + static const number + xm[8] = { /* x[m] */ +/**/ {{0x00000000, 0x00000000} }, /* 0.0 */ +/**/ {{0x00000000, 0x3f8930be} }, /* 0.0123 */ +/**/ {{0x00000000, 0x3f991687} }, /* 0.0245 */ +/**/ {{0x00000000, 0x3fa923a2} }, /* 0.0491 */ +/**/ {{0x00000000, 0x3fb930be} }, /* 0.0984 */ +/**/ {{0x00000000, 0x3fc95810} }, /* 0.198 */ +/**/ {{0x00000000, 0x3fda7ef9} }, /* 0.414 */ +/**/ {{0x00000000, 0x3ff00000} }, /* 1.0 */ + }; + static const number + twonm1[33] = { /* 2n-1 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x00000000} }, /* 0 */ +/**/ {{0x00000000, 0x40260000} }, /* 11 */ +/**/ {{0x00000000, 0x402e0000} }, /* 15 */ +/**/ {{0x00000000, 0x40330000} }, /* 19 */ +/**/ {{0x00000000, 0x40350000} }, /* 21 */ +/**/ {{0x00000000, 0x40390000} }, /* 25 */ +/**/ {{0x00000000, 0x403d0000} }, /* 29 */ +/**/ {{0x00000000, 0x40408000} }, /* 33 */ +/**/ {{0x00000000, 0x40428000} }, /* 37 */ +/**/ {{0x00000000, 0x40448000} }, /* 41 */ +/**/ {{0x00000000, 0x40468000} }, /* 45 */ +/**/ {{0x00000000, 0x40488000} }, /* 49 */ +/**/ {{0x00000000, 0x404a8000} }, /* 53 */ +/**/ {{0x00000000, 0x404b8000} }, /* 55 */ +/**/ {{0x00000000, 0x404d8000} }, /* 59 */ +/**/ {{0x00000000, 0x404f8000} }, /* 63 */ +/**/ {{0x00000000, 0x4050c000} }, /* 67 */ +/**/ {{0x00000000, 0x4051c000} }, /* 71 */ +/**/ {{0x00000000, 0x4052c000} }, /* 75 */ +/**/ {{0x00000000, 0x4053c000} }, /* 79 */ +/**/ {{0x00000000, 0x4054c000} }, /* 83 */ +/**/ {{0x00000000, 0x40554000} }, /* 85 */ +/**/ {{0x00000000, 0x40564000} }, /* 89 */ +/**/ {{0x00000000, 0x40574000} }, /* 93 */ +/**/ {{0x00000000, 0x40584000} }, /* 97 */ +/**/ {{0x00000000, 0x40594000} }, /* 101 */ +/**/ {{0x00000000, 0x405a4000} }, /* 105 */ +/**/ {{0x00000000, 0x405b4000} }, /* 109 */ +/**/ {{0x00000000, 0x405c4000} }, /* 113 */ +/**/ {{0x00000000, 0x405d4000} }, /* 117 */ + }; + + static const number + twom[8] = { /* 2**m */ +/**/ {{0x00000000, 0x3ff00000} }, /* 1.0 */ +/**/ {{0x00000000, 0x40000000} }, /* 2.0 */ +/**/ {{0x00000000, 0x40100000} }, /* 4.0 */ +/**/ {{0x00000000, 0x40200000} }, /* 8.0 */ +/**/ {{0x00000000, 0x40300000} }, /* 16.0 */ +/**/ {{0x00000000, 0x40400000} }, /* 32.0 */ +/**/ {{0x00000000, 0x40500000} }, /* 64.0 */ +/**/ {{0x00000000, 0x40600000} }, /* 128.0 */ + }; + + static const number +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ two = {{0x00000000, 0x40000000} }; /* 2 */ + +#endif +#endif + +#define ONE one.d +#define TWO two.d + + static const int + np[33] = { 0, 0, 0, 0, 6, 8,10,11,13,15,17,19,21,23,25,27,28, + 30,32,34,36,38,40,42,43,45,47,49,51,53,55,57,59}; + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpatan2.c glibc-2.2.3/sysdeps/ieee754/dbl-64/mpatan2.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpatan2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpatan2.c Mon Mar 12 12:07:32 2001 @@ -0,0 +1,69 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* MODULE_NAME: mpatan2.c */ +/* */ +/* FUNCTIONS:mpatan2 */ +/* */ +/* FILES NEEDED: mpa.h */ +/* mpa.c mpatan.c mpsqrt.c */ +/* */ +/* Multi-Precision Atan2(y,x) function subroutine, */ +/* for precision p >= 4. */ +/* y=0 is not permitted if x<=0. No error messages are given. */ +/* The relative error of the result is bounded by 44.84*r**(1-p) */ +/* if x <= 0, y != 0 and by 37.33*r**(1-p) if x>0. here r=2**24. */ +/* */ +/******************************************************************/ + + + +#include "mpa.h" + +void __mpsqrt(mp_no *, mp_no *, int); +void __mpatan(mp_no *, mp_no *, int); + +/* Multi-Precision Atan2(y,x) function subroutine, for p >= 4. */ +/* y=0 is not permitted if x<=0. No error messages are given. */ +void __mpatan2(mp_no *y, mp_no *x, mp_no *z, int p) { + + static const double ZERO = 0.0, ONE = 1.0; + + mp_no mpone = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + mp_no mpt1,mpt2,mpt3; + + + if (X[0] <= ZERO) { + mpone.e = 1; mpone.d[0] = mpone.d[1] = ONE; + __dvd(x,y,&mpt1,p); __mul(&mpt1,&mpt1,&mpt2,p); + if (mpt1.d[0] != ZERO) mpt1.d[0] = ONE; + __add(&mpt2,&mpone,&mpt3,p); __mpsqrt(&mpt3,&mpt2,p); + __add(&mpt1,&mpt2,&mpt3,p); mpt3.d[0]=Y[0]; + __mpatan(&mpt3,&mpt1,p); __add(&mpt1,&mpt1,z,p); + } + else + { __dvd(y,x,&mpt1,p); + __mpatan(&mpt1,z,p); + } + + return; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpexp.c glibc-2.2.3/sysdeps/ieee754/dbl-64/mpexp.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpexp.c Mon Mar 12 12:15:34 2001 @@ -0,0 +1,104 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/*************************************************************************/ +/* MODULE_NAME:mpexp.c */ +/* */ +/* FUNCTIONS: mpexp */ +/* */ +/* FILES NEEDED: mpa.h endian.h mpexp.h */ +/* mpa.c */ +/* */ +/* Multi-Precision exponential function subroutine */ +/* ( for p >= 4, 2**(-55) <= abs(x) <= 1024 ). */ +/*************************************************************************/ + +#include "endian.h" +#include "mpa.h" +#include "mpexp.h" + +/* Multi-Precision exponential function subroutine (for p >= 4, */ +/* 2**(-55) <= abs(x) <= 1024). */ +void __mpexp(mp_no *x, mp_no *y, int p) { + + int i,j,k,m,m1,m2,n; + double a,b; + static const int np[33] = {0,0,0,0,3,3,4,4,5,4,4,5,5,5,6,6,6,6,6,6, + 6,6,6,6,7,7,7,7,8,8,8,8,8}; + static const int m1p[33]= {0,0,0,0,17,23,23,28,27,38,42,39,43,47,43,47,50,54, + 57,60,64,67,71,74,68,71,74,77,70,73,76,78,81}; + static const int m1np[7][18] = { + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0,36,48,60,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0,24,32,40,48,56,64,72, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0,17,23,29,35,41,47,53,59,65, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0,23,28,33,38,42,47,52,57,62,66, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0,27, 0, 0,39,43,47,51,55,59,63}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43,47,50,54}}; + mp_no mpone = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + mp_no mpk = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + mp_no mps,mpak,mpt1,mpt2; + + /* Choose m,n and compute a=2**(-m) */ + n = np[p]; m1 = m1p[p]; a = twomm1[p].d; + for (i=0; iEX; i--) a *= RADIX; + b = X[1]*RADIXI; m2 = 24*EX; + for (; b0; i--,n--) { if (m1np[i][p]+m2>0) break; } + } + + /* Compute s=x*2**(-m). Put result in mps */ + __dbl_mp(a,&mpt1,p); + __mul(x,&mpt1,&mps,p); + + /* Evaluate the polynomial. Put result in mpt2 */ + mpone.e=1; mpone.d[0]=ONE; mpone.d[1]=ONE; + mpk.e = 1; mpk.d[0] = ONE; mpk.d[1]=nn[n].d; + __dvd(&mps,&mpk,&mpt1,p); + __add(&mpone,&mpt1,&mpak,p); + for (k=n-1; k>1; k--) { + __mul(&mps,&mpak,&mpt1,p); + mpk.d[1]=nn[k].d; + __dvd(&mpt1,&mpk,&mpt2,p); + __add(&mpone,&mpt2,&mpak,p); + } + __mul(&mps,&mpak,&mpt1,p); + __add(&mpone,&mpt1,&mpt2,p); + + /* Raise polynomial value to the power of 2**m. Put result in y */ + for (k=0,j=0; k= 4, */ +/* 2**(-1024) < x < 2**1024) and x is outside of the interval */ +/* [1-2**(-54),1+2**(-54)]. Upon entry, x should be set to the */ +/* multi-precision value of the input and y should be set into a multi- */ +/* precision value of an approximation of log(x) with relative error */ +/* bound of at most 2**(-52). The routine improves the accuracy of y. */ +/* */ +/************************************************************************/ +#include "endian.h" +#include "mpa.h" + +void __mpexp(mp_no *, mp_no *, int); + +void __mplog(mp_no *x, mp_no *y, int p) { +#include "mplog.h" + int i,m; +#if 0 + int j,k,m1,m2,n; + double a,b; +#endif + static const int mp[33] = {0,0,0,0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4}; + mp_no mpone = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + mp_no mpt1,mpt2; + + /* Choose m and initiate mpone */ + m = mp[p]; mpone.e = 1; mpone.d[0]=mpone.d[1]=ONE; + + /* Perform m newton iterations to solve for y: exp(y)-x=0. */ + /* The iterations formula is: y(n+1)=y(n)+(x*exp(-y(n))-1). */ + __cpy(y,&mpt1,p); + for (i=0; i= 4. */ +/* The relative error is bounded by 3.501*r**(1-p), where r=2**24. */ +/* */ +/****************************************************************************/ +#include "endian.h" +#include "mpa.h" + +/****************************************************************************/ +/* Multi-Precision square root function subroutine for precision p >= 4. */ +/* The relative error is bounded by 3.501*r**(1-p), where r=2**24. */ +/* Routine receives two pointers to Multi Precision numbers: */ +/* x (left argument) and y (next argument). Routine also receives precision */ +/* p as integer. Routine computes sqrt(*x) and stores result in *y */ +/****************************************************************************/ + +double fastiroot(double); + +void __mpsqrt(mp_no *x, mp_no *y, int p) { +#include "mpsqrt.h" + + int i,m,ex,ey; + double dx,dy; + mp_no + mphalf = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}, + mp3halfs = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, + 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}}; + mp_no mpxn,mpz,mpu,mpt1,mpt2; + + /* Prepare multi-precision 1/2 and 3/2 */ + mphalf.e =0; mphalf.d[0] =ONE; mphalf.d[1] =HALFRAD; + mp3halfs.e=1; mp3halfs.d[0]=ONE; mp3halfs.d[1]=ONE; mp3halfs.d[2]=HALFRAD; + + ex=EX; ey=EX/2; __cpy(x,&mpxn,p); mpxn.e -= (ey+ey); + __mp_dbl(&mpxn,&dx,p); dy=fastiroot(dx); __dbl_mp(dy,&mpu,p); + __mul(&mpxn,&mphalf,&mpz,p); + + m=mp[p]; + for (i=0; i>1; + z = ((c3*z + c2)*z + c1)*z + c0; /* 2**-7 */ + z = z*(1.5 - 0.5*y*z*z); /* 2**-14 */ + p.d = z*(1.5 - 0.5*y*z*z); /* 2**-28 */ + p.i[HIGH_HALF] -= n; + t = x*p.d; + return p.d*(1.5 - 0.5*p.d*t); +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mpsqrt.h glibc-2.2.3/sysdeps/ieee754/dbl-64/mpsqrt.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mpsqrt.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mpsqrt.h Sun Mar 11 23:44:57 2001 @@ -0,0 +1,50 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:mpatan.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef MPSQRT_H +#define MPSQRT_H + +#ifdef BIG_ENDI + static const number +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ halfrad = {{0x41600000, 0x00000000} }; /* 2**23 */ + +#else +#ifdef LITTLE_ENDI + static const number +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ halfrad = {{0x00000000, 0x41600000} }; /* 2**23 */ + +#endif +#endif + +#define ONE one.d +#define HALFRAD halfrad.d + + static const int mp[33] = {0,0,0,0,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4}; + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mptan.c glibc-2.2.3/sysdeps/ieee754/dbl-64/mptan.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mptan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mptan.c Mon Mar 12 12:23:29 2001 @@ -0,0 +1,59 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/**********************************************************************/ +/* MODULE_NAME:mptan.c */ +/* */ +/* FUNCTION: mptan */ +/* */ +/* FILES NEEDED: endian.h mpa.h */ +/* mpa.c sincos32.c branred.c */ +/* */ +/* Multi-Precision tan() function subroutine, for p=32. It is based */ +/* on the routines mpranred() and c32(). mpranred() performs range */ +/* reduction of a double number x into a multiple precision number */ +/* y, such that y=x-n*pi/2, abs(y)d[0] *= MONE; + } /* tan is negative in this area */ + else __dvd(&mps,&mpc,mpy,p); + + return; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/mydefs.h glibc-2.2.3/sysdeps/ieee754/dbl-64/mydefs.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/mydefs.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/mydefs.h Sun Mar 11 15:47:45 2001 @@ -0,0 +1,37 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:mydefs.h */ +/* */ +/* common data and definition */ +/******************************************************************/ + +#ifndef MY_H +#define MY_H + +typedef int int4; +typedef union {int4 i[2]; double x;} mynumber; + +#define ABS(x) (((x)>0)?(x):-(x)) +#define max(x,y) (((y)>(x))?(y):(x)) +#define min(x,y) (((y)<(x))?(y):(x)) + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/powtwo.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/powtwo.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/powtwo.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/powtwo.tbl Sun Mar 11 15:47:56 2001 @@ -0,0 +1,12 @@ +/****************************************************************/ +/* TABLES FOR THE upow() FUNCTION */ +/****************************************************************/ + + + +static const double powtwo[] = { 1.0, 2.0, 4.0, + 8.0, 16.0, 32.0, 64.0, 128.0, + 256.0, 512.0, 1024.0, 2048.0, 4096.0, + 8192.0, 16384.0, 32768.0, 65536.0, 131072.0, + 262144.0, 524288.0, 1048576.0, 2097152.0, 4194304.0, + 8388608.0, 16777216.0, 33554432.0, 67108864.0, 134217728.0 }; diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/root.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/root.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/root.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/root.tbl Sun Mar 11 15:48:17 2001 @@ -0,0 +1,38 @@ +/****************************************************************/ +/* TABLES FOR THE usqrt() FUNCTION */ +/****************************************************************/ + + +static const double inroot[128] = { + 1.40872145012100, 1.39792649065766, 1.38737595123859, 1.37706074531819, + 1.36697225234682, 1.35710228748795, 1.34744307370643, 1.33798721601135, + 1.32872767765984, 1.31965775814772, 1.31077107283046, 1.30206153403386, + 1.29352333352711, 1.28515092624400, 1.27693901514820, 1.26888253714903, + 1.26097664998256, 1.25321671998073, 1.24559831065844, 1.23811717205462, + 1.23076923076923, 1.22355058064300, 1.21645747403153, 1.20948631362953, + 1.20263364480453, 1.19589614840310, 1.18927063399547, 1.18275403352732, + 1.17634339535009, 1.17003587860341, 1.16382874792529, 1.15771936846787, + 1.15170520119791, 1.14578379846309, 1.13995279980655, 1.13420992801334, + 1.12855298537376, 1.12297985014975, 1.11748847323133, 1.11207687497107, + 1.10674314218572, 1.10148542531442, 1.09630193572405, 1.09119094315276, + 1.08615077328341, 1.08117980543918, 1.07627647039410, 1.07143924829188, + 1.06666666666667, 1.06195729855996, 1.05730976072814, 1.05272271193563, + 1.04819485132867, 1.04372491688551, 1.03931168393861, 1.03495396376504, + 1.03065060224133, 1.02640047855933, 1.02220250399990, 1.01805562076124, + 1.01395880083916, 1.00991104495649, 1.00591138153909, 1.00195886573624, + 0.99611649018350, 0.98848330114434, 0.98102294317595, 0.97372899112030, + 0.96659534932828, 0.95961623024651, 0.95278613468066, 0.94609983358253, + 0.93955235122353, 0.93313894963169, 0.92685511418159, 0.92069654023750, + 0.91465912076005, 0.90873893479530, 0.90293223677296, 0.89723544654727, + 0.89164514012056, 0.88615804099474, 0.88077101210109, 0.87548104826333, + 0.87028526915267, 0.86518091269740, 0.86016532891275, 0.85523597411976, + 0.85039040552437, 0.84562627613070, 0.84094132996422, 0.83633339758291, + 0.83180039185606, 0.82734030399203, 0.82295119979782, 0.81863121615464, + 0.81437855769486, 0.81019149366693, 0.80606835497581, 0.80200753138734, + 0.79800746888611, 0.79406666717674, 0.79018367731967, 0.78635709949278, + 0.78258558087123, 0.77886781361798, 0.77520253297841, 0.77158851547266, + 0.76802457717971, 0.76450957210799, 0.76104239064719, 0.75762195809661, + 0.75424723326565, 0.75091720714229, 0.74763090162560, 0.74438736831878, + 0.74118568737933, 0.73802496642311, 0.73490433947940, 0.73182296599416, + 0.72878002987884, 0.72577473860242, 0.72280632232420, 0.71987403306536, + 0.71697714391715, 0.71411494828392, 0.71128675915902, 0.70849190843208 }; diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/s_atan.c glibc-2.2.3/sysdeps/ieee754/dbl-64/s_atan.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/s_atan.c Tue Jul 13 16:51:18 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/s_atan.c Mon Mar 26 20:53:25 2001 @@ -1,163 +1,228 @@ -/* @(#)s_atan.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. -*/ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_atan.c,v 1.8 1995/05/10 20:46:45 jtc Exp $"; -#endif - -/* atan(x) - * Method - * 1. Reduce x to positive by atan(x) = -atan(-x). - * 2. According to the integer k=4t+0.25 chopped, t=x, the argument - * is further reduced to one of the following intervals and the - * arctangent of t is evaluated by the corresponding formula: + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * [0,7/16] atan(x) = t-t^3*(a1+t^2*(a2+...(a10+t^2*a11)...) - * [7/16,11/16] atan(x) = atan(1/2) + atan( (t-0.5)/(1+t/2) ) - * [11/16.19/16] atan(x) = atan( 1 ) + atan( (t-1)/(1+t) ) - * [19/16,39/16] atan(x) = atan(3/2) + atan( (t-1.5)/(1+1.5t) ) - * [39/16,INF] atan(x) = atan(INF) + atan( -1/t ) + * This program 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 General Public License for more details. * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/************************************************************************/ +/* MODULE_NAME: atnat.c */ +/* */ +/* FUNCTIONS: uatan */ +/* atanMp */ +/* signArctan */ +/* */ +/* */ +/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h atnat.h */ +/* mpatan.c mpatan2.c mpsqrt.c */ +/* uatan.tbl */ +/* */ +/* An ultimate atan() routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of atan(x). */ +/* */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/************************************************************************/ -#include "math.h" -#include "math_private.h" +#include "dla.h" +#include "mpa.h" +#include "MathLib.h" +#include "uatan.tbl" +#include "atnat.h" -#ifdef __STDC__ -static const double atanhi[] = { -#else -static double atanhi[] = { -#endif - 4.63647609000806093515e-01, /* atan(0.5)hi 0x3FDDAC67, 0x0561BB4F */ - 7.85398163397448278999e-01, /* atan(1.0)hi 0x3FE921FB, 0x54442D18 */ - 9.82793723247329054082e-01, /* atan(1.5)hi 0x3FEF730B, 0xD281F69B */ - 1.57079632679489655800e+00, /* atan(inf)hi 0x3FF921FB, 0x54442D18 */ -}; +void __mpatan(mp_no *,mp_no *,int); /* see definition in mpatan.c */ +static double atanMp(double,const int[]); +double __signArctan(double,double); +/* An ultimate atan() routine. Given an IEEE double machine number x, */ +/* routine computes the correctly rounded (to nearest) value of atan(x). */ +double atan(double x) { -#ifdef __STDC__ -static const double atanlo[] = { -#else -static double atanlo[] = { -#endif - 2.26987774529616870924e-17, /* atan(0.5)lo 0x3C7A2B7F, 0x222F65E2 */ - 3.06161699786838301793e-17, /* atan(1.0)lo 0x3C81A626, 0x33145C07 */ - 1.39033110312309984516e-17, /* atan(1.5)lo 0x3C700788, 0x7AF0CBBD */ - 6.12323399573676603587e-17, /* atan(inf)lo 0x3C91A626, 0x33145C07 */ -}; -#ifdef __STDC__ -static const double aT[] = { -#else -static double aT[] = { + double cor,s1,ss1,s2,ss2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,u,u2,u3, + v,vv,w,ww,y,yy,z,zz; +#if 0 + double y1,y2; #endif - 3.33333333333329318027e-01, /* 0x3FD55555, 0x5555550D */ - -1.99999999998764832476e-01, /* 0xBFC99999, 0x9998EBC4 */ - 1.42857142725034663711e-01, /* 0x3FC24924, 0x920083FF */ - -1.11111104054623557880e-01, /* 0xBFBC71C6, 0xFE231671 */ - 9.09088713343650656196e-02, /* 0x3FB745CD, 0xC54C206E */ - -7.69187620504482999495e-02, /* 0xBFB3B0F2, 0xAF749A6D */ - 6.66107313738753120669e-02, /* 0x3FB10D66, 0xA0D03D51 */ - -5.83357013379057348645e-02, /* 0xBFADDE2D, 0x52DEFD9A */ - 4.97687799461593236017e-02, /* 0x3FA97B4B, 0x24760DEB */ - -3.65315727442169155270e-02, /* 0xBFA2B444, 0x2C6A6C2F */ - 1.62858201153657823623e-02, /* 0x3F90AD3A, 0xE322DA11 */ -}; - -#ifdef __STDC__ - static const double -#else - static double + int i,ux,dx; +#if 0 + int p; #endif -one = 1.0, -huge = 1.0e300; - -#ifdef __STDC__ - double __atan(double x) -#else - double __atan(x) - double x; + static const int pr[M]={6,8,10,32}; + number num; +#if 0 + mp_no mpt1,mpx,mpy,mpy1,mpy2,mperr; #endif -{ - double w,s1,z,s,w2,w4,s11,s12,s13,s21,s22,s23; - int32_t ix,hx,id; - GET_HIGH_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x44100000) { /* if |x| >= 2^66 */ - u_int32_t low; - GET_LOW_WORD(low,x); - if(ix>0x7ff00000|| - (ix==0x7ff00000&&(low!=0))) - return x+x; /* NaN */ - if(hx>0) return atanhi[3]+atanlo[3]; - else return -atanhi[3]-atanlo[3]; - } if (ix < 0x3fdc0000) { /* |x| < 0.4375 */ - if (ix < 0x3e200000) { /* |x| < 2^-29 */ - if(huge+x>one) return x; /* raise inexact */ - } - id = -1; - } else { - x = fabs(x); - if (ix < 0x3ff30000) { /* |x| < 1.1875 */ - if (ix < 0x3fe60000) { /* 7/16 <=|x|<11/16 */ - id = 0; x = (2.0*x-one)/(2.0+x); - } else { /* 11/16<=|x|< 19/16 */ - id = 1; x = (x-one)/(x+one); - } - } else { - if (ix < 0x40038000) { /* |x| < 2.4375 */ - id = 2; x = (x-1.5)/(one+1.5*x); - } else { /* 2.4375 <= |x| < 2^66 */ - id = 3; x = -1.0/x; - } - }} - /* end of argument reduction */ - z = x*x; - w = z*z; - /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ -#ifdef DO_NOT_USE_THIS - s1 = z*(aT[0]+w*(aT[2]+w*(aT[4]+w*(aT[6]+w*(aT[8]+w*aT[10]))))); - s2 = w*(aT[1]+w*(aT[3]+w*(aT[5]+w*(aT[7]+w*aT[9])))); - if (id<0) return x - x*(s1+s2); - else { - z = atanhi[id] - ((x*(s1+s2) - atanlo[id]) - x); - return (hx<0)? -z:z; - } -#else - s11 = aT[8]+w*aT[10]; w2=w*w; - s12 = aT[4]+w*aT[6]; w4=w2*w2; - s13 = aT[0]+w*aT[2]; - s21 = aT[7]+w*aT[9]; - s22 = aT[3]+w*aT[5]; - s23 = w*aT[1]; - s1 = s13 + w2*s12 + w4*s11; - s = s23 + w2*s22 + w4*s21 + z*s1; - if (id<0) return x - x*(s); - else { - z = atanhi[id] - ((x*(s) - atanlo[id]) - x); - return (hx<0)? -z:z; - } -#endif + num.d = x; ux = num.i[HIGH_HALF]; dx = num.i[LOW_HALF]; + + /* x=NaN */ + if (((ux&0x7ff00000)==0x7ff00000) && (((ux&0x000fffff)|dx)!=0x00000000)) + return x+x; + + /* Regular values of x, including denormals +-0 and +-INF */ + u = (x= 1/2 */ + if ((y=t1+(yy-u3)) == t1+(yy+u3)) return __signArctan(x,y); + + DIV2(ONE,ZERO,u,ZERO,w,ww,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10) + t1=w-hij[i][0].d; + EADD(t1,ww,z,zz) + s1=z*(hij[i][11].d+z*(hij[i][12].d+z*(hij[i][13].d+ + z*(hij[i][14].d+z* hij[i][15].d)))); + ADD2(hij[i][9].d,hij[i][10].d,s1,ZERO,s2,ss2,t1,t2) + MUL2(z,zz,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][7].d,hij[i][8].d,s1,ss1,s2,ss2,t1,t2) + MUL2(z,zz,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][5].d,hij[i][6].d,s1,ss1,s2,ss2,t1,t2) + MUL2(z,zz,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][3].d,hij[i][4].d,s1,ss1,s2,ss2,t1,t2) + MUL2(z,zz,s2,ss2,s1,ss1,t1,t2,t3,t4,t5,t6,t7,t8) + ADD2(hij[i][1].d,hij[i][2].d,s1,ss1,s2,ss2,t1,t2) + SUB2(HPI,HPI1,s2,ss2,s1,ss1,t1,t2) + if ((y=s1+(ss1-U7)) == s1+(ss1+U7)) return __signArctan(x,y); + + return atanMp(x,pr); + } + else { + if (u= E */ + if (x>0) return HPI; + else return MHPI; } + } + } + } -weak_alias (__atan, atan) + + + /* Fix the sign of y and return */ +double __signArctan(double x,double y){ + + if (x=0x7ff00000) return x-x; - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2(x,y); - switch(n&3) { - case 0: return __kernel_cos(y[0],y[1]); - case 1: return -__kernel_sin(y[0],y[1],1); - case 2: return -__kernel_cos(y[0],y[1]); - default: - return __kernel_sin(y[0],y[1],1); - } - } -} -weak_alias (__cos, cos) -#ifdef NO_LONG_DOUBLE -strong_alias (__cos, __cosl) -weak_alias (__cos, cosl) -#endif +/* In s_sin.c. */ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/s_exp2.c glibc-2.2.3/sysdeps/ieee754/dbl-64/s_exp2.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/s_exp2.c Thu Jun 29 12:40:26 2000 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/s_exp2.c Wed Dec 31 16:00:00 1969 @@ -1,130 +0,0 @@ -/* Double-precision floating point 2^x. - Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - 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. */ - -/* The basic design here is from - Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical - Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., - 17 (1), March 1991, pp. 26-45. - It has been slightly modified to compute 2^x instead of e^x. - */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include - -#include "t_exp2.h" - -static const volatile double TWO1023 = 8.988465674311579539e+307; -static const volatile double TWOM1000 = 9.3326361850321887899e-302; - -double -__ieee754_exp2 (double x) -{ - static const double himark = (double) DBL_MAX_EXP; - static const double lomark = (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1) - 1.0; - - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - static const double THREEp42 = 13194139533312.0; - int tval, unsafe; - double rx, x22, result; - union ieee754_double ex2_u, scale_u; - fenv_t oldenv; - - feholdexcept (&oldenv); -#ifdef FE_TONEAREST - /* If we don't have this, it's too bad. */ - fesetround (FE_TONEAREST); -#endif - - /* 1. Argument reduction. - Choose integers ex, -256 <= t < 256, and some real - -1/1024 <= x1 <= 1024 so that - x = ex + t/512 + x1. - - First, calculate rx = ex + t/512. */ - rx = x + THREEp42; - rx -= THREEp42; - x -= rx; /* Compute x=x1. */ - /* Compute tval = (ex*512 + t)+256. - Now, t = (tval mod 512)-256 and ex=tval/512 [that's mod, NOT %; and - /-round-to-nearest not the usual c integer /]. */ - tval = (int) (rx * 512.0 + 256.0); - - /* 2. Adjust for accurate table entry. - Find e so that - x = ex + t/512 + e + x2 - where -1e6 < e < 1e6, and - (double)(2^(t/512+e)) - is accurate to one part in 2^-64. */ - - /* 'tval & 511' is the same as 'tval%512' except that it's always - positive. - Compute x = x2. */ - x -= exp2_deltatable[tval & 511]; - - /* 3. Compute ex2 = 2^(t/512+e+ex). */ - ex2_u.d = exp2_accuratetable[tval & 511]; - tval >>= 9; - unsafe = abs(tval) >= -DBL_MIN_EXP - 1; - ex2_u.ieee.exponent += tval >> unsafe; - scale_u.d = 1.0; - scale_u.ieee.exponent += tval - (tval >> unsafe); - - /* 4. Approximate 2^x2 - 1, using a fourth-degree polynomial, - with maximum error in [-2^-10-2^-30,2^-10+2^-30] - less than 10^-19. */ - - x22 = (((.0096181293647031180 - * x + .055504110254308625) - * x + .240226506959100583) - * x + .69314718055994495) * ex2_u.d; - - /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ - fesetenv (&oldenv); - - result = x22 * x + ex2_u.d; - - if (!unsafe) - return result; - else - return result * scale_u.d; - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (__isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TWOM1000 * TWOM1000; - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO1023*x; -} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/s_sin.c glibc-2.2.3/sysdeps/ieee754/dbl-64/s_sin.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/s_sin.c Tue Jul 13 16:53:59 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/s_sin.c Mon Mar 26 20:53:25 2001 @@ -1,87 +1,1127 @@ -/* @(#)s_sin.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_sin.c,v 1.7 1995/05/10 20:48:15 jtc Exp $"; -#endif - -/* sin(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sin ... sine function on [-pi/4,pi/4] - * __kernel_cos ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; + * This program 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 General Public License for more details. * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/****************************************************************************/ +/* */ +/* MODULE_NAME:usncs.c */ +/* */ +/* FUNCTIONS: usin */ +/* ucos */ +/* slow */ +/* slow1 */ +/* slow2 */ +/* sloww */ +/* sloww1 */ +/* sloww2 */ +/* bsloww */ +/* bsloww1 */ +/* bsloww2 */ +/* cslow2 */ +/* csloww */ +/* csloww1 */ +/* csloww2 */ +/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h usncs.h */ +/* branred.c sincos32.c dosincos.c mpa.c */ +/* sincos.tbl */ +/* */ +/* An ultimate sin and routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of sin(x) or cos(x) */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/****************************************************************************/ -#include "math.h" -#include "math_private.h" -#ifdef __STDC__ - double __sin(double x) -#else - double __sin(x) - double x; +#include "endian.h" +#include "mydefs.h" +#include "usncs.h" +#include "MathLib.h" +#include "sincos.tbl" + +static const double + sn3 = -1.66666666666664880952546298448555E-01, + sn5 = 8.33333214285722277379541354343671E-03, + cs2 = 4.99999999999999999999950396842453E-01, + cs4 = -4.16666666666664434524222570944589E-02, + cs6 = 1.38888874007937613028114285595617E-03; + +void __dubsin(double x, double dx, double w[]); +void __docos(double x, double dx, double w[]); +double __mpsin(double x, double dx); +double __mpcos(double x, double dx); +double __mpsin1(double x); +double __mpcos1(double x); +static double slow(double x); +static double slow1(double x); +static double slow2(double x); +static double sloww(double x, double dx, double orig); +static double sloww1(double x, double dx, double orig); +static double sloww2(double x, double dx, double orig, int n); +static double bsloww(double x, double dx, double orig, int n); +static double bsloww1(double x, double dx, double orig, int n); +static double bsloww2(double x, double dx, double orig, int n); +int __branred(double x, double *a, double *aa); +static double cslow2(double x); +static double csloww(double x, double dx, double orig); +static double csloww1(double x, double dx, double orig); +static double csloww2(double x, double dx, double orig, int n); +/*******************************************************************/ +/* An ultimate sin routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of sin(x) */ +/*******************************************************************/ +double __sin(double x){ + double xx,res,t,cor,y,s,c,sn,ssn,cs,ccs,xn,a,da,db,eps,xn1,xn2; +#if 0 + double w[2]; +#endif + mynumber u,v; + int4 k,m,n; +#if 0 + int4 nn; #endif -{ - double y[2],z=0.0; - int32_t n, ix; - /* High word of x. */ - GET_HIGH_WORD(ix,x); + u.x = x; + m = u.i[HIGH_HALF]; + k = 0x7fffffff&m; /* no sign */ + if (k < 0x3e500000) /* if x->0 =>sin(x)=x */ + return x; + /*---------------------------- 2^-26 < |x|< 0.25 ----------------------*/ + else if (k < 0x3fd00000){ + xx = x*x; + /*Taylor series */ + t = ((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*(xx*x); + res = x+t; + cor = (x-res)+t; + return (res == res + 1.07*cor)? res : slow(x); + } /* else if (k < 0x3fd00000) */ +/*---------------------------- 0.25<|x|< 0.855469---------------------- */ + else if (k < 0x3feb6000) { + u.x=(m>0)?big.x+x:big.x-x; + y=(m>0)?x-(u.x-big.x):x+(u.x-big.x); + xx=y*y; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=(m>0)?sincos.x[k]:-sincos.x[k]; + ssn=(m>0)?sincos.x[k+1]:-sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ssn+s*ccs-sn*c)+cs*s; + res=sn+cor; + cor=(sn-res)+cor; + return (res==res+1.025*cor)? res : slow1(x); + } /* else if (k < 0x3feb6000) */ - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3fe921fb) return __kernel_sin(x,z,0); +/*----------------------- 0.855469 <|x|<2.426265 ----------------------*/ + else if (k < 0x400368fd ) { - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7ff00000) return x-x; + y = (m>0)? hp0.x-x:hp0.x+x; + if (y>=0) { + u.x = big.x+y; + y = (y-(u.x-big.x))+hp1.x; + } + else { + u.x = big.x-y; + y = (-hp1.x) - (y+(u.x-big.x)); + } + xx=y*y; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ccs-s*ssn-cs*c)-sn*s; + res=cs+cor; + cor=(cs-res)+cor; + return (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x); + } /* else if (k < 0x400368fd) */ - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2(x,y); - switch(n&3) { - case 0: return __kernel_sin(y[0],y[1],1); - case 1: return __kernel_cos(y[0],y[1]); - case 2: return -__kernel_sin(y[0],y[1],1); - default: - return -__kernel_cos(y[0],y[1]); +/*-------------------------- 2.426265<|x|< 105414350 ----------------------*/ + else if (k < 0x419921FB ) { + t = (x*hpinv.x + toint.x); + xn = t - toint.x; + v.x = t; + y = (x - xn*mp1.x) - xn*mp2.x; + n =v.i[LOW_HALF]&3; + da = xn*mp3.x; + a=y-da; + da = (y-a)-da; + eps = ABS(x)*1.2e-30; + + switch (n) { /* quarter of unit circle */ + case 0: + case 2: + xx = a*a; + if (n) {a=-a;da=-da;} + if (xx < 0.01588) { + /*Taylor series */ + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*a - 0.5*da)*xx+da; + res = a+t; + cor = (a-res)+t; + cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; + return (res == res + cor)? res : sloww(a,da,x); } - } + else { + if (a>0) + {m=1;t=a;db=da;} + else + {m=0;t=-a;db=-da;} + u.x=big.x+t; + y=t-(u.x-big.x); + xx=y*y; + s = y + (db+y*xx*(sn3 +xx*sn5)); + c = y*db+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ssn+s*ccs-sn*c)+cs*s; + res=sn+cor; + cor=(sn-res)+cor; + cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; + return (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x); + } + break; + + case 1: + case 3: + if (a<0) + {a=-a;da=-da;} + u.x=big.x+a; + y=a-(u.x-big.x)+da; + xx=y*y; + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + cor=(ccs-s*ssn-cs*c)-sn*s; + res=cs+cor; + cor=(cs-res)+cor; + cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; + return (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n); + + break; + + } + + } /* else if (k < 0x419921FB ) */ + +/*---------------------105414350 <|x|< 281474976710656 --------------------*/ + else if (k < 0x42F00000 ) { + t = (x*hpinv.x + toint.x); + xn = t - toint.x; + v.x = t; + xn1 = (xn+8.0e22)-8.0e22; + xn2 = xn - xn1; + y = ((((x - xn1*mp1.x) - xn1*mp2.x)-xn2*mp1.x)-xn2*mp2.x); + n =v.i[LOW_HALF]&3; + da = xn1*pp3.x; + t=y-da; + da = (y-t)-da; + da = (da - xn2*pp3.x) -xn*pp4.x; + a = t+da; + da = (t-a)+da; + eps = 1.0e-24; + + switch (n) { + case 0: + case 2: + xx = a*a; + if (n) {a=-a;da=-da;} + if (xx < 0.01588) { + /* Taylor series */ + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*a - 0.5*da)*xx+da; + res = a+t; + cor = (a-res)+t; + cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; + return (res == res + cor)? res : bsloww(a,da,x,n); + } + else { + if (a>0) {m=1;t=a;db=da;} + else {m=0;t=-a;db=-da;} + u.x=big.x+t; + y=t-(u.x-big.x); + xx=y*y; + s = y + (db+y*xx*(sn3 +xx*sn5)); + c = y*db+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ssn+s*ccs-sn*c)+cs*s; + res=sn+cor; + cor=(sn-res)+cor; + cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; + return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n); + } + break; + + case 1: + case 3: + if (a<0) + {a=-a;da=-da;} + u.x=big.x+a; + y=a-(u.x-big.x)+da; + xx=y*y; + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + cor=(ccs-s*ssn-cs*c)-sn*s; + res=cs+cor; + cor=(cs-res)+cor; + cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; + return (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n); + + break; + + } + + } /* else if (k < 0x42F00000 ) */ + +/* -----------------281474976710656 <|x| <2^1024----------------------------*/ + else if (k < 0x7ff00000) { + + n = __branred(x,&a,&da); + switch (n) { + case 0: + if (a*a < 0.01588) return bsloww(a,da,x,n); + else return bsloww1(a,da,x,n); + break; + case 2: + if (a*a < 0.01588) return bsloww(-a,-da,x,n); + else return bsloww1(-a,-da,x,n); + break; + + case 1: + case 3: + return bsloww2(a,da,x,n); + break; + } + + } /* else if (k < 0x7ff00000 ) */ + +/*--------------------- |x| > 2^1024 ----------------------------------*/ + else return x / x; + return 0; /* unreachable */ +} + + +/*******************************************************************/ +/* An ultimate cos routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of cos(x) */ +/*******************************************************************/ + +double __cos(double x) +{ + double y,xx,res,t,cor,s,c,sn,ssn,cs,ccs,xn,a,da,db,eps,xn1,xn2; + mynumber u,v; + int4 k,m,n; + + u.x = x; + m = u.i[HIGH_HALF]; + k = 0x7fffffff&m; + + if (k < 0x3e400000 ) return 1.0; /* |x|<2^-27 => cos(x)=1 */ + + else if (k < 0x3feb6000 ) {/* 2^-27 < |x| < 0.855469 */ + y=ABS(x); + u.x = big.x+y; + y = y-(u.x-big.x); + xx=y*y; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ccs-s*ssn-cs*c)-sn*s; + res=cs+cor; + cor=(cs-res)+cor; + return (res==res+1.020*cor)? res : cslow2(x); + +} /* else if (k < 0x3feb6000) */ + + else if (k < 0x400368fd ) {/* 0.855469 <|x|<2.426265 */; + y=hp0.x-ABS(x); + a=y+hp1.x; + da=(y-a)+hp1.x; + xx=a*a; + if (xx < 0.01588) { + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*a - 0.5*da)*xx+da; + res = a+t; + cor = (a-res)+t; + cor = (cor>0)? 1.02*cor+1.0e-31 : 1.02*cor -1.0e-31; + return (res == res + cor)? res : csloww(a,da,x); + } + else { + if (a>0) {m=1;t=a;db=da;} + else {m=0;t=-a;db=-da;} + u.x=big.x+t; + y=t-(u.x-big.x); + xx=y*y; + s = y + (db+y*xx*(sn3 +xx*sn5)); + c = y*db+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ssn+s*ccs-sn*c)+cs*s; + res=sn+cor; + cor=(sn-res)+cor; + cor = (cor>0)? 1.035*cor+1.0e-31 : 1.035*cor-1.0e-31; + return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x); +} + +} /* else if (k < 0x400368fd) */ + + + else if (k < 0x419921FB ) {/* 2.426265<|x|< 105414350 */ + t = (x*hpinv.x + toint.x); + xn = t - toint.x; + v.x = t; + y = (x - xn*mp1.x) - xn*mp2.x; + n =v.i[LOW_HALF]&3; + da = xn*mp3.x; + a=y-da; + da = (y-a)-da; + eps = ABS(x)*1.2e-30; + + switch (n) { + case 1: + case 3: + xx = a*a; + if (n == 1) {a=-a;da=-da;} + if (xx < 0.01588) { + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*a - 0.5*da)*xx+da; + res = a+t; + cor = (a-res)+t; + cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; + return (res == res + cor)? res : csloww(a,da,x); + } + else { + if (a>0) {m=1;t=a;db=da;} + else {m=0;t=-a;db=-da;} + u.x=big.x+t; + y=t-(u.x-big.x); + xx=y*y; + s = y + (db+y*xx*(sn3 +xx*sn5)); + c = y*db+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ssn+s*ccs-sn*c)+cs*s; + res=sn+cor; + cor=(sn-res)+cor; + cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; + return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x); + } + break; + + case 0: + case 2: + if (a<0) {a=-a;da=-da;} + u.x=big.x+a; + y=a-(u.x-big.x)+da; + xx=y*y; + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + cor=(ccs-s*ssn-cs*c)-sn*s; + res=cs+cor; + cor=(cs-res)+cor; + cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; + return (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n); + + break; + + } + + } /* else if (k < 0x419921FB ) */ + + + else if (k < 0x42F00000 ) { + t = (x*hpinv.x + toint.x); + xn = t - toint.x; + v.x = t; + xn1 = (xn+8.0e22)-8.0e22; + xn2 = xn - xn1; + y = ((((x - xn1*mp1.x) - xn1*mp2.x)-xn2*mp1.x)-xn2*mp2.x); + n =v.i[LOW_HALF]&3; + da = xn1*pp3.x; + t=y-da; + da = (y-t)-da; + da = (da - xn2*pp3.x) -xn*pp4.x; + a = t+da; + da = (t-a)+da; + eps = 1.0e-24; + + switch (n) { + case 1: + case 3: + xx = a*a; + if (n==1) {a=-a;da=-da;} + if (xx < 0.01588) { + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*a - 0.5*da)*xx+da; + res = a+t; + cor = (a-res)+t; + cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; + return (res == res + cor)? res : bsloww(a,da,x,n); + } + else { + if (a>0) {m=1;t=a;db=da;} + else {m=0;t=-a;db=-da;} + u.x=big.x+t; + y=t-(u.x-big.x); + xx=y*y; + s = y + (db+y*xx*(sn3 +xx*sn5)); + c = y*db+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + cor=(ssn+s*ccs-sn*c)+cs*s; + res=sn+cor; + cor=(sn-res)+cor; + cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; + return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n); + } + break; + + case 0: + case 2: + if (a<0) {a=-a;da=-da;} + u.x=big.x+a; + y=a-(u.x-big.x)+da; + xx=y*y; + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + s = y + y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + cor=(ccs-s*ssn-cs*c)-sn*s; + res=cs+cor; + cor=(cs-res)+cor; + cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; + return (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n); + break; + + } + + } /* else if (k < 0x42F00000 ) */ + + else if (k < 0x7ff00000) {/* 281474976710656 <|x| <2^1024 */ + + n = __branred(x,&a,&da); + switch (n) { + case 1: + if (a*a < 0.01588) return bsloww(-a,-da,x,n); + else return bsloww1(-a,-da,x,n); + break; + case 3: + if (a*a < 0.01588) return bsloww(a,da,x,n); + else return bsloww1(a,da,x,n); + break; + + case 0: + case 2: + return bsloww2(a,da,x,n); + break; + } + + } /* else if (k < 0x7ff00000 ) */ + + + + + else return x / x; /* |x| > 2^1024 */ + return 0; + +} + +/************************************************************************/ +/* Routine compute sin(x) for 2^-26 < |x|< 0.25 by Taylor with more */ +/* precision and if still doesn't accurate enough by mpsin or dubsin */ +/************************************************************************/ + +static double slow(double x) { +static const double th2_36 = 206158430208.0; /* 1.5*2**37 */ + double y,x1,x2,xx,r,t,res,cor,w[2]; + x1=(x+th2_36)-th2_36; + y = aa.x*x1*x1*x1; + r=x+y; + x2=x-x1; + xx=x*x; + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + bb.x)*xx + 3.0*aa.x*x1*x2)*x +aa.x*x2*x2*x2; + t=((x-r)+y)+t; + res=r+t; + cor = (r-res)+t; + if (res == res + 1.0007*cor) return res; + else { + __dubsin(ABS(x),0,w); + if (w[0] == w[0]+1.000000001*w[1]) return (x>0)?w[0]:-w[0]; + else return (x>0)?__mpsin(x,0):-__mpsin(-x,0); + } +} +/*******************************************************************************/ +/* Routine compute sin(x) for 0.25<|x|< 0.855469 by sincos.tbl and Taylor */ +/* and if result still doesn't accurate enough by mpsin or dubsin */ +/*******************************************************************************/ + +static double slow1(double x) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,c1,c2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; /* Data */ + ssn=sincos.x[k+1]; /* from */ + cs=sincos.x[k+2]; /* tables */ + ccs=sincos.x[k+3]; /* sincos.tbl */ + y1 = (y+t22)-t22; + y2 = y - y1; + c1 = (cs+t22)-t22; + c2=(cs-c1)+ccs; + cor=(ssn+s*ccs+cs*s+c2*y+c1*y2)-sn*c; + y=sn+c1*y1; + cor = cor+((sn-y)+c1*y1); + res=y+cor; + cor=(y-res)+cor; + if (res == res+1.0005*cor) return (x>0)?res:-res; + else { + __dubsin(ABS(x),0,w); + if (w[0] == w[0]+1.000000005*w[1]) return (x>0)?w[0]:-w[0]; + else return (x>0)?__mpsin(x,0):-__mpsin(-x,0); + } +} +/**************************************************************************/ +/* Routine compute sin(x) for 0.855469 <|x|<2.426265 by sincos.tbl */ +/* and if result still doesn't accurate enough by mpsin or dubsin */ +/**************************************************************************/ +static double slow2(double x) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res,del; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + y = hp0.x-y; + if (y>=0) { + u.x = big.x+y; + y = y-(u.x-big.x); + del = hp1.x; + } + else { + u.x = big.x-y; + y = -(y+(u.x-big.x)); + del = -hp1.x; + } + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = y*del+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + y1 = (y+t22)-t22; + y2 = (y - y1)+del; + e1 = (sn+t22)-t22; + e2=(sn-e1)+ssn; + cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; + y=cs-e1*y1; + cor = cor+((cs-y)-e1*y1); + res=y+cor; + cor=(y-res)+cor; + if (res == res+1.0005*cor) return (x>0)?res:-res; + else { + y=ABS(x)-hp0.x; + y1=y-hp1.x; + y2=(y-y1)-hp1.x; + __docos(y1,y2,w); + if (w[0] == w[0]+1.000000005*w[1]) return (x>0)?w[0]:-w[0]; + else return (x>0)?__mpsin(x,0):-__mpsin(-x,0); + } +} +/***************************************************************************/ +/* Routine compute sin(x+dx) (Double-Length number) where x is small enough*/ +/* to use Taylor series around zero and (x+dx) */ +/* in first or third quarter of unit circle.Routine receive also */ +/* (right argument) the original value of x for computing error of */ +/* result.And if result not accurate enough routine calls mpsin1 or dubsin */ +/***************************************************************************/ + +static double sloww(double x,double dx, double orig) { + static const double th2_36 = 206158430208.0; /* 1.5*2**37 */ + double y,x1,x2,xx,r,t,res,cor,w[2],a,da,xn; + union {int4 i[2]; double x;} v; + int4 n; + x1=(x+th2_36)-th2_36; + y = aa.x*x1*x1*x1; + r=x+y; + x2=(x-x1)+dx; + xx=x*x; + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + bb.x)*xx + 3.0*aa.x*x1*x2)*x +aa.x*x2*x2*x2+dx; + t=((x-r)+y)+t; + res=r+t; + cor = (r-res)+t; + cor = (cor>0)? 1.0005*cor+ABS(orig)*3.1e-30 : 1.0005*cor-ABS(orig)*3.1e-30; + if (res == res + cor) return res; + else { + (x>0)? __dubsin(x,dx,w) : __dubsin(-x,-dx,w); + cor = (w[1]>0)? 1.000000001*w[1] + ABS(orig)*1.1e-30 : 1.000000001*w[1] - ABS(orig)*1.1e-30; + if (w[0] == w[0]+cor) return (x>0)?w[0]:-w[0]; + else { + t = (orig*hpinv.x + toint.x); + xn = t - toint.x; + v.x = t; + y = (orig - xn*mp1.x) - xn*mp2.x; + n =v.i[LOW_HALF]&3; + da = xn*pp3.x; + t=y-da; + da = (y-t)-da; + y = xn*pp4.x; + a = t - y; + da = ((t-a)-y)+da; + if (n&2) {a=-a; da=-da;} + (a>0)? __dubsin(a,da,w) : __dubsin(-a,-da,w); + cor = (w[1]>0)? 1.000000001*w[1] + ABS(orig)*1.1e-40 : 1.000000001*w[1] - ABS(orig)*1.1e-40; + if (w[0] == w[0]+cor) return (a>0)?w[0]:-w[0]; + else return __mpsin1(orig); + } + } +} +/***************************************************************************/ +/* Routine compute sin(x+dx) (Double-Length number) where x in first or */ +/* third quarter of unit circle.Routine receive also (right argument) the */ +/* original value of x for computing error of result.And if result not */ +/* accurate enough routine calls mpsin1 or dubsin */ +/***************************************************************************/ + +static double sloww1(double x, double dx, double orig) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,c1,c2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + dx=(x>0)?dx:-dx; + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + y1 = (y+t22)-t22; + y2 = (y - y1)+dx; + c1 = (cs+t22)-t22; + c2=(cs-c1)+ccs; + cor=(ssn+s*ccs+cs*s+c2*y+c1*y2-sn*y*dx)-sn*c; + y=sn+c1*y1; + cor = cor+((sn-y)+c1*y1); + res=y+cor; + cor=(y-res)+cor; + cor = (cor>0)? 1.0005*cor+3.1e-30*ABS(orig) : 1.0005*cor-3.1e-30*ABS(orig); + if (res == res + cor) return (x>0)?res:-res; + else { + __dubsin(ABS(x),dx,w); + cor = (w[1]>0)? 1.000000005*w[1]+1.1e-30*ABS(orig) : 1.000000005*w[1]-1.1e-30*ABS(orig); + if (w[0] == w[0]+cor) return (x>0)?w[0]:-w[0]; + else return __mpsin1(orig); + } +} +/***************************************************************************/ +/* Routine compute sin(x+dx) (Double-Length number) where x in second or */ +/* fourth quarter of unit circle.Routine receive also the original value */ +/* and quarter(n= 1or 3)of x for computing error of result.And if result not*/ +/* accurate enough routine calls mpsin1 or dubsin */ +/***************************************************************************/ + +static double sloww2(double x, double dx, double orig, int n) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + dx=(x>0)?dx:-dx; + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = y*dx+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + + y1 = (y+t22)-t22; + y2 = (y - y1)+dx; + e1 = (sn+t22)-t22; + e2=(sn-e1)+ssn; + cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; + y=cs-e1*y1; + cor = cor+((cs-y)-e1*y1); + res=y+cor; + cor=(y-res)+cor; + cor = (cor>0)? 1.0005*cor+3.1e-30*ABS(orig) : 1.0005*cor-3.1e-30*ABS(orig); + if (res == res + cor) return (n&2)?-res:res; + else { + __docos(ABS(x),dx,w); + cor = (w[1]>0)? 1.000000005*w[1]+1.1e-30*ABS(orig) : 1.000000005*w[1]-1.1e-30*ABS(orig); + if (w[0] == w[0]+cor) return (n&2)?-w[0]:w[0]; + else return __mpsin1(orig); + } +} +/***************************************************************************/ +/* Routine compute sin(x+dx) or cos(x+dx) (Double-Length number) where x */ +/* is small enough to use Taylor series around zero and (x+dx) */ +/* in first or third quarter of unit circle.Routine receive also */ +/* (right argument) the original value of x for computing error of */ +/* result.And if result not accurate enough routine calls other routines */ +/***************************************************************************/ + +static double bsloww(double x,double dx, double orig,int n) { + static const double th2_36 = 206158430208.0; /* 1.5*2**37 */ + double y,x1,x2,xx,r,t,res,cor,w[2]; +#if 0 + double a,da,xn; + union {int4 i[2]; double x;} v; +#endif + x1=(x+th2_36)-th2_36; + y = aa.x*x1*x1*x1; + r=x+y; + x2=(x-x1)+dx; + xx=x*x; + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + bb.x)*xx + 3.0*aa.x*x1*x2)*x +aa.x*x2*x2*x2+dx; + t=((x-r)+y)+t; + res=r+t; + cor = (r-res)+t; + cor = (cor>0)? 1.0005*cor+1.1e-24 : 1.0005*cor-1.1e-24; + if (res == res + cor) return res; + else { + (x>0)? __dubsin(x,dx,w) : __dubsin(-x,-dx,w); + cor = (w[1]>0)? 1.000000001*w[1] + 1.1e-24 : 1.000000001*w[1] - 1.1e-24; + if (w[0] == w[0]+cor) return (x>0)?w[0]:-w[0]; + else return (n&1)?__mpcos1(orig):__mpsin1(orig); + } +} + +/***************************************************************************/ +/* Routine compute sin(x+dx) or cos(x+dx) (Double-Length number) where x */ +/* in first or third quarter of unit circle.Routine receive also */ +/* (right argument) the original value of x for computing error of result.*/ +/* And if result not accurate enough routine calls other routines */ +/***************************************************************************/ + +static double bsloww1(double x, double dx, double orig,int n) { +mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,c1,c2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + dx=(x>0)?dx:-dx; + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + y1 = (y+t22)-t22; + y2 = (y - y1)+dx; + c1 = (cs+t22)-t22; + c2=(cs-c1)+ccs; + cor=(ssn+s*ccs+cs*s+c2*y+c1*y2-sn*y*dx)-sn*c; + y=sn+c1*y1; + cor = cor+((sn-y)+c1*y1); + res=y+cor; + cor=(y-res)+cor; + cor = (cor>0)? 1.0005*cor+1.1e-24 : 1.0005*cor-1.1e-24; + if (res == res + cor) return (x>0)?res:-res; + else { + __dubsin(ABS(x),dx,w); + cor = (w[1]>0)? 1.000000005*w[1]+1.1e-24: 1.000000005*w[1]-1.1e-24; + if (w[0] == w[0]+cor) return (x>0)?w[0]:-w[0]; + else return (n&1)?__mpcos1(orig):__mpsin1(orig); + } +} + +/***************************************************************************/ +/* Routine compute sin(x+dx) or cos(x+dx) (Double-Length number) where x */ +/* in second or fourth quarter of unit circle.Routine receive also the */ +/* original value and quarter(n= 1or 3)of x for computing error of result. */ +/* And if result not accurate enough routine calls other routines */ +/***************************************************************************/ + +static double bsloww2(double x, double dx, double orig, int n) { +mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + dx=(x>0)?dx:-dx; + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = y*dx+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + + y1 = (y+t22)-t22; + y2 = (y - y1)+dx; + e1 = (sn+t22)-t22; + e2=(sn-e1)+ssn; + cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; + y=cs-e1*y1; + cor = cor+((cs-y)-e1*y1); + res=y+cor; + cor=(y-res)+cor; + cor = (cor>0)? 1.0005*cor+1.1e-24 : 1.0005*cor-1.1e-24; + if (res == res + cor) return (n&2)?-res:res; + else { + __docos(ABS(x),dx,w); + cor = (w[1]>0)? 1.000000005*w[1]+1.1e-24 : 1.000000005*w[1]-1.1e-24; + if (w[0] == w[0]+cor) return (n&2)?-w[0]:w[0]; + else return (n&1)?__mpsin1(orig):__mpcos1(orig); + } +} + +/************************************************************************/ +/* Routine compute cos(x) for 2^-27 < |x|< 0.25 by Taylor with more */ +/* precision and if still doesn't accurate enough by mpcos or docos */ +/************************************************************************/ + +static double cslow2(double x) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x = big.x+y; + y = y-(u.x-big.x); + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + y1 = (y+t22)-t22; + y2 = y - y1; + e1 = (sn+t22)-t22; + e2=(sn-e1)+ssn; + cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; + y=cs-e1*y1; + cor = cor+((cs-y)-e1*y1); + res=y+cor; + cor=(y-res)+cor; + if (res == res+1.0005*cor) + return res; + else { + y=ABS(x); + __docos(y,0,w); + if (w[0] == w[0]+1.000000005*w[1]) return w[0]; + else return __mpcos(x,0); + } +} + +/***************************************************************************/ +/* Routine compute cos(x+dx) (Double-Length number) where x is small enough*/ +/* to use Taylor series around zero and (x+dx) .Routine receive also */ +/* (right argument) the original value of x for computing error of */ +/* result.And if result not accurate enough routine calls other routines */ +/***************************************************************************/ + + +static double csloww(double x,double dx, double orig) { + static const double th2_36 = 206158430208.0; /* 1.5*2**37 */ + double y,x1,x2,xx,r,t,res,cor,w[2],a,da,xn; + union {int4 i[2]; double x;} v; + int4 n; + x1=(x+th2_36)-th2_36; + y = aa.x*x1*x1*x1; + r=x+y; + x2=(x-x1)+dx; + xx=x*x; + /* Taylor series */ + t = (((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + bb.x)*xx + 3.0*aa.x*x1*x2)*x +aa.x*x2*x2*x2+dx; + t=((x-r)+y)+t; + res=r+t; + cor = (r-res)+t; + cor = (cor>0)? 1.0005*cor+ABS(orig)*3.1e-30 : 1.0005*cor-ABS(orig)*3.1e-30; + if (res == res + cor) return res; + else { + (x>0)? __dubsin(x,dx,w) : __dubsin(-x,-dx,w); + cor = (w[1]>0)? 1.000000001*w[1] + ABS(orig)*1.1e-30 : 1.000000001*w[1] - ABS(orig)*1.1e-30; + if (w[0] == w[0]+cor) return (x>0)?w[0]:-w[0]; + else { + t = (orig*hpinv.x + toint.x); + xn = t - toint.x; + v.x = t; + y = (orig - xn*mp1.x) - xn*mp2.x; + n =v.i[LOW_HALF]&3; + da = xn*pp3.x; + t=y-da; + da = (y-t)-da; + y = xn*pp4.x; + a = t - y; + da = ((t-a)-y)+da; + if (n==1) {a=-a; da=-da;} + (a>0)? __dubsin(a,da,w) : __dubsin(-a,-da,w); + cor = (w[1]>0)? 1.000000001*w[1] + ABS(orig)*1.1e-40 : 1.000000001*w[1] - ABS(orig)*1.1e-40; + if (w[0] == w[0]+cor) return (a>0)?w[0]:-w[0]; + else return __mpcos1(orig); + } + } } + +/***************************************************************************/ +/* Routine compute sin(x+dx) (Double-Length number) where x in first or */ +/* third quarter of unit circle.Routine receive also (right argument) the */ +/* original value of x for computing error of result.And if result not */ +/* accurate enough routine calls other routines */ +/***************************************************************************/ + +static double csloww1(double x, double dx, double orig) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,c1,c2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + dx=(x>0)?dx:-dx; + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + y1 = (y+t22)-t22; + y2 = (y - y1)+dx; + c1 = (cs+t22)-t22; + c2=(cs-c1)+ccs; + cor=(ssn+s*ccs+cs*s+c2*y+c1*y2-sn*y*dx)-sn*c; + y=sn+c1*y1; + cor = cor+((sn-y)+c1*y1); + res=y+cor; + cor=(y-res)+cor; + cor = (cor>0)? 1.0005*cor+3.1e-30*ABS(orig) : 1.0005*cor-3.1e-30*ABS(orig); + if (res == res + cor) return (x>0)?res:-res; + else { + __dubsin(ABS(x),dx,w); + cor = (w[1]>0)? 1.000000005*w[1]+1.1e-30*ABS(orig) : 1.000000005*w[1]-1.1e-30*ABS(orig); + if (w[0] == w[0]+cor) return (x>0)?w[0]:-w[0]; + else return __mpcos1(orig); + } +} + + +/***************************************************************************/ +/* Routine compute sin(x+dx) (Double-Length number) where x in second or */ +/* fourth quarter of unit circle.Routine receive also the original value */ +/* and quarter(n= 1or 3)of x for computing error of result.And if result not*/ +/* accurate enough routine calls other routines */ +/***************************************************************************/ + +static double csloww2(double x, double dx, double orig, int n) { + mynumber u; + double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res; + static const double t22 = 6291456.0; + int4 k; + y=ABS(x); + u.x=big.x+y; + y=y-(u.x-big.x); + dx=(x>0)?dx:-dx; + xx=y*y; + s = y*xx*(sn3 +xx*sn5); + c = y*dx+xx*(cs2 +xx*(cs4 + xx*cs6)); + k=u.i[LOW_HALF]<<2; + sn=sincos.x[k]; + ssn=sincos.x[k+1]; + cs=sincos.x[k+2]; + ccs=sincos.x[k+3]; + + y1 = (y+t22)-t22; + y2 = (y - y1)+dx; + e1 = (sn+t22)-t22; + e2=(sn-e1)+ssn; + cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; + y=cs-e1*y1; + cor = cor+((cs-y)-e1*y1); + res=y+cor; + cor=(y-res)+cor; + cor = (cor>0)? 1.0005*cor+3.1e-30*ABS(orig) : 1.0005*cor-3.1e-30*ABS(orig); + if (res == res + cor) return (n)?-res:res; + else { + __docos(ABS(x),dx,w); + cor = (w[1]>0)? 1.000000005*w[1]+1.1e-30*ABS(orig) : 1.000000005*w[1]-1.1e-30*ABS(orig); + if (w[0] == w[0]+cor) return (n)?-w[0]:w[0]; + else return __mpcos1(orig); + } +} + +weak_alias (__cos, cos) weak_alias (__sin, sin) + #ifdef NO_LONG_DOUBLE strong_alias (__sin, __sinl) weak_alias (__sin, sinl) +strong_alias (__cos, __cosl) +weak_alias (__cos, cosl) #endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/s_sincos.c glibc-2.2.3/sysdeps/ieee754/dbl-64/s_sincos.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/s_sincos.c Tue Jul 13 16:54:04 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/s_sincos.c Mon Mar 26 20:53:25 2001 @@ -1,5 +1,5 @@ /* Compute sine and cosine of argument. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -33,42 +33,15 @@ __sincos (double x, double *sinx, double /* |x| ~< pi/4 */ ix &= 0x7fffffff; - if (ix <= 0x3fe921fb) - { - *sinx = __kernel_sin (x, 0.0, 0); - *cosx = __kernel_cos (x, 0.0); - } - else if (ix>=0x7ff00000) + if (ix>=0x7ff00000) { /* sin(Inf or NaN) is NaN */ *sinx = *cosx = x - x; } else { - /* Argument reduction needed. */ - double y[2]; - int n; - - n = __ieee754_rem_pio2 (x, y); - switch (n & 3) - { - case 0: - *sinx = __kernel_sin (y[0], y[1], 1); - *cosx = __kernel_cos (y[0], y[1]); - break; - case 1: - *sinx = __kernel_cos (y[0], y[1]); - *cosx = -__kernel_sin (y[0], y[1], 1); - break; - case 2: - *sinx = -__kernel_sin (y[0], y[1], 1); - *cosx = -__kernel_cos (y[0], y[1]); - break; - default: - *sinx = -__kernel_cos (y[0], y[1]); - *cosx = __kernel_sin (y[0], y[1], 1); - break; - } + *sinx = sin (x); + *cosx = cos (x); } } weak_alias (__sincos, sincos) diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/s_tan.c glibc-2.2.3/sysdeps/ieee754/dbl-64/s_tan.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/s_tan.c Tue Jul 13 16:54:08 1999 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/s_tan.c Mon Mar 26 20:53:25 2001 @@ -1,81 +1,483 @@ -/* @(#)s_tan.c 5.1 93/09/24 */ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_tan.c,v 1.7 1995/05/10 20:48:18 jtc Exp $"; -#endif - -/* tan(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tan ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; + * This program 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 General Public License for more details. * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/*********************************************************************/ +/* MODULE_NAME: utan.c */ +/* */ +/* FUNCTIONS: utan */ +/* tanMp */ +/* */ +/* FILES NEEDED:dla.h endian.h mpa.h mydefs.h utan.h */ +/* branred.c sincos32.c mptan.c */ +/* utan.tbl */ +/* */ +/* An ultimate tan routine. Given an IEEE double machine number x */ +/* it computes the correctly rounded (to nearest) value of tan(x). */ +/* Assumption: Machine arithmetic operations are performed in */ +/* round to nearest mode of IEEE 754 standard. */ +/* */ +/*********************************************************************/ +#include "endian.h" +#include "dla.h" +#include "mpa.h" +#include "MathLib.h" +static double tanMp(double); +void __mptan(double, mp_no *, int); -#include "math.h" -#include "math_private.h" +double tan(double x) { +#include "utan.h" +#include "utan.tbl" -#ifdef __STDC__ - double __tan(double x) -#else - double __tan(x) - double x; + int ux,i,n; + double a,da,a2,b,db,c,dc,c1,cc1,c2,cc2,c3,cc3,fi,ffi,gi,pz,s,sy, + t,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,w,x2,xn,xx2,y,ya,yya,z0,z,zz,z2,zz2; + int p; + number num,v; + mp_no mpa,mpt1,mpt2; +#if 0 + mp_no mpy; #endif -{ - double y[2],z=0.0; - int32_t n, ix; - /* High word of x. */ - GET_HIGH_WORD(ix,x); + int __branred(double, double *, double *); + int __mpranred(double, mp_no *, int); - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3fe921fb) return __kernel_tan(x,z,1); + /* x=+-INF, x=NaN */ + num.d = x; ux = num.i[HIGH_HALF]; + if ((ux&0x7ff00000)==0x7ff00000) return x-x; - /* tan(Inf or NaN) is NaN */ - else if (ix>=0x7ff00000) return x-x; /* NaN */ + w=(x1.0;a-=2.0) { + mpk.d[1]=a*(a-1.0); + __mul(&gor,&mpk,&mpt1,p); + __cpy(&mpt1,&gor,p); + __mul(&x2,&sum,&mpt1,p); + __sub(&gor,&mpt1,&sum,p); + } + __mul(x,&sum,y,p); +} + +/**********************************************************************/ +/* Compute Multi-Precision cos() function for given p. Receive Multi */ +/* Precision number x and result stored at y */ +/**********************************************************************/ +static void cc32(mp_no *x, mp_no *y, int p) { + int i; + double a; +#if 0 + double b; + static const mp_no mpone = {1,{1.0,1.0}}; +#endif + mp_no mpt1,x2,gor,sum ,mpk={1,{1.0}}; +#if 0 + mp_no mpt2; +#endif + for (i=1;i<=p;i++) mpk.d[i]=0; + + __mul(x,x,&x2,p); + mpk.d[1]=27.0; + __mul(&oofac27,&mpk,&gor,p); + __cpy(&gor,&sum,p); + for (a=26.0;a>2.0;a-=2.0) { + mpk.d[1]=a*(a-1.0); + __mul(&gor,&mpk,&mpt1,p); + __cpy(&mpt1,&gor,p); + __mul(&x2,&sum,&mpt1,p); + __sub(&gor,&mpt1,&sum,p); + } + __mul(&x2,&sum,y,p); +} + +/***************************************************************************/ +/* c32() computes both sin(x), cos(x) as Multi precision numbers */ +/***************************************************************************/ +void __c32(mp_no *x, mp_no *y, mp_no *z, int p) { + static const mp_no mpt={1,{1.0,2.0}}, one={1,{1.0,1.0}}; + mp_no u,t,t1,t2,c,s; + int i; + __cpy(x,&u,p); + u.e=u.e-1; + cc32(&u,&c,p); + ss32(&u,&s,p); + for (i=0;i<24;i++) { + __mul(&c,&s,&t,p); + __sub(&s,&t,&t1,p); + __add(&t1,&t1,&s,p); + __sub(&mpt,&c,&t1,p); + __mul(&t1,&c,&t2,p); + __add(&t2,&t2,&c,p); + } + __sub(&one,&c,y,p); + __cpy(&s,z,p); +} + +/************************************************************************/ +/*Routine receive double x and two double results of sin(x) and return */ +/*result which is more accurate */ +/*Computing sin(x) with multi precision routine c32 */ +/************************************************************************/ +double __sin32(double x, double res, double res1) { + int p; + mp_no a,b,c; + p=32; + __dbl_mp(res,&a,p); + __dbl_mp(0.5*(res1-res),&b,p); + __add(&a,&b,&c,p); + if (x>0.8) + { __sub(&hp,&c,&a,p); + __c32(&a,&b,&c,p); + } + else __c32(&c,&a,&b,p); /* b=sin(0.5*(res+res1)) */ + __dbl_mp(x,&c,p); /* c = x */ + __sub(&b,&c,&a,p); + /* if a>0 return min(res,res1), otherwise return max(res,res1) */ + if (a.d[0]>0) return (resres1)?res:res1; +} + +/************************************************************************/ +/*Routine receive double x and two double results of cos(x) and return */ +/*result which is more accurate */ +/*Computing cos(x) with multi precision routine c32 */ +/************************************************************************/ +double __cos32(double x, double res, double res1) { + int p; + mp_no a,b,c; + p=32; + __dbl_mp(res,&a,p); + __dbl_mp(0.5*(res1-res),&b,p); + __add(&a,&b,&c,p); + if (x>2.4) + { __sub(&pi,&c,&a,p); + __c32(&a,&b,&c,p); + b.d[0]=-b.d[0]; + } + else if (x>0.8) + { __sub(&hp,&c,&a,p); + __c32(&a,&c,&b,p); + } + else __c32(&c,&b,&a,p); /* b=cos(0.5*(res+res1)) */ + __dbl_mp(x,&c,p); /* c = x */ + __sub(&b,&c,&a,p); + /* if a>0 return max(res,res1), otherwise return min(res,res1) */ + if (a.d[0]>0) return (res>res1)?res:res1; + else return (res0.8) { __sub(&hp,&c,&a,p); __c32(&a,&b,&c,p); } + else __c32(&c,&a,&b,p); /* b = sin(x+dx) */ + __mp_dbl(&b,&y,p); + return y; +} + +/*******************************************************************/ +/* Compute cos()of double-length number (x+dx) as Multi Precision */ +/* number and return result as double */ +/*******************************************************************/ +double __mpcos(double x, double dx) { + int p; + double y; + mp_no a,b,c; + p=32; + __dbl_mp(x,&a,p); + __dbl_mp(dx,&b,p); + __add(&a,&b,&c,p); + if (x>0.8) + { __sub(&hp,&c,&b,p); + __c32(&b,&a,&c,p); + } + else __c32(&c,&a,&b,p); /* a = cos(x+dx) */ + __mp_dbl(&a,&y,p); + return y; +} + +/******************************************************************/ +/* mpranred() performs range reduction of a double number x into */ +/* multi precision number y, such that y=x-n*pi/2, abs(y)= 8388608.0) + { t +=1.0; + __sub(&c,&one,&b,p); + __mul(&b,&hp,y,p); + } + else __mul(&c,&hp,y,p); + n = (int) t; + if (x < 0) { y->d[0] = - y->d[0]; n = -n; } + return (n&3); + } +} + +/*******************************************************************/ +/* Multi-Precision sin() function subroutine, for p=32. It is */ +/* based on the routines mpranred() and c32(). */ +/*******************************************************************/ +double __mpsin1(double x) +{ + int p; + int n; + mp_no u,s,c; + double y; + p=32; + n=__mpranred(x,&u,p); /* n is 0, 1, 2 or 3 */ + __c32(&u,&c,&s,p); + switch (n) { /* in which quarter of unit circle y is*/ + case 0: + __mp_dbl(&s,&y,p); + return y; + break; + + case 2: + __mp_dbl(&s,&y,p); + return -y; + break; + + case 1: + __mp_dbl(&c,&y,p); + return y; + break; + + case 3: + __mp_dbl(&c,&y,p); + return -y; + break; + + } + return 0; /* unreachable, to make the compiler happy */ +} + +/*****************************************************************/ +/* Multi-Precision cos() function subroutine, for p=32. It is */ +/* based on the routines mpranred() and c32(). */ +/*****************************************************************/ + +double __mpcos1(double x) +{ + int p; + int n; + mp_no u,s,c; + double y; + + p=32; + n=__mpranred(x,&u,p); /* n is 0, 1, 2 or 3 */ + __c32(&u,&c,&s,p); + switch (n) { /* in what quarter of unit circle y is*/ + + case 0: + __mp_dbl(&c,&y,p); + return y; + break; + + case 2: + __mp_dbl(&c,&y,p); + return -y; + break; + + case 1: + __mp_dbl(&s,&y,p); + return -y; + break; + + case 3: + __mp_dbl(&s,&y,p); + return y; + break; + + } + return 0; /* unreachable, to make the compiler happy */ +} +/******************************************************************/ diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/sincos32.h glibc-2.2.3/sysdeps/ieee754/dbl-64/sincos32.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/sincos32.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/sincos32.h Sun Mar 11 23:47:02 2001 @@ -0,0 +1,81 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:sincos32.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef SINCOS32_H +#define SINCCOS32_H + +#ifdef BIG_ENDI +static const number +/**/ hpinv = {{0x3FE45F30, 0x6DC9C883}}, /* 0.63661977236758138 */ +/**/ toint = {{0x43380000, 0x00000000}}; /* 6755399441055744 */ + +#else +#ifdef LITTLE_ENDI +static const number +/**/ hpinv = {{0x6DC9C883, 0x3FE45F30}}, /* 0.63661977236758138 */ +/**/ toint = {{0x00000000, 0x43380000}}; /* 6755399441055744 */ + +#endif +#endif + +static const mp_no + oofac27 = {-3,{1.0,7.0,4631664.0,12006312.0,13118056.0,6538613.0,646354.0, + 8508025.0,9131256.0,7548776.0,2529842.0,8864927.0,660489.0,15595125.0,12777885.0, + 11618489.0,13348664.0,5486686.0,514518.0,11275535.0,4727621.0,3575562.0, + 13579710.0,5829745.0,7531862.0,9507898.0,6915060.0,4079264.0,1907586.0, + 6078398.0,13789314.0,5504104.0,14136.0}}, + pi = {1,{1.0,3.0, + 2375530.0,8947107.0,578323.0,1673774.0,225395.0,4498441.0,3678761.0, + 10432976.0,536314.0,10021966.0,7113029.0,2630118.0,3723283.0,7847508.0, + 6737716.0,15273068.0,12626985.0,12044668.0,5299519.0,8705461.0,11880201.0, + 1544726.0,14014857.0,7994139.0,13709579.0,10918111.0,11906095.0,16610011.0, + 13638367.0,12040417.0,11529578.0,2522774.0}}, + hp = {1,{1.0, 1.0, + 9576373.0,4473553.0,8677769.0,9225495.0,112697.0,10637828.0, + 10227988.0,13605096.0,268157.0,5010983.0,3556514.0,9703667.0, + 1861641.0,12312362.0,3368858.0,7636534.0,6313492.0,14410942.0, + 2649759.0,12741338.0,14328708.0,9160971.0,7007428.0,12385677.0, + 15243397.0,13847663.0,14341655.0,16693613.0,15207791.0,14408816.0, + 14153397.0,1261387.0,6110792.0,2291862.0,4181138.0,5295267.0}}; + +static const double toverp[75] = { + 10680707.0, 7228996.0, 1387004.0, 2578385.0, 16069853.0, + 12639074.0, 9804092.0, 4427841.0, 16666979.0, 11263675.0, + 12935607.0, 2387514.0, 4345298.0, 14681673.0, 3074569.0, + 13734428.0, 16653803.0, 1880361.0, 10960616.0, 8533493.0, + 3062596.0, 8710556.0, 7349940.0, 6258241.0, 3772886.0, + 3769171.0, 3798172.0, 8675211.0, 12450088.0, 3874808.0, + 9961438.0, 366607.0, 15675153.0, 9132554.0, 7151469.0, + 3571407.0, 2607881.0, 12013382.0, 4155038.0, 6285869.0, + 7677882.0, 13102053.0, 15825725.0, 473591.0, 9065106.0, + 15363067.0, 6271263.0, 9264392.0, 5636912.0, 4652155.0, + 7056368.0, 13614112.0, 10155062.0, 1944035.0, 9527646.0, + 15080200.0, 6658437.0, 6231200.0, 6832269.0, 16767104.0, + 5075751.0, 3212806.0, 1398474.0, 7579849.0, 6349435.0, + 12618859.0, 4703257.0, 12806093.0, 14477321.0, 2786137.0, + 12875403.0, 9837734.0, 14528324.0, 13719321.0, 343717.0 }; + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/slowexp.c glibc-2.2.3/sysdeps/ieee754/dbl-64/slowexp.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/slowexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/slowexp.c Mon Mar 12 12:23:29 2001 @@ -0,0 +1,65 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/**************************************************************************/ +/* MODULE_NAME:slowexp.c */ +/* */ +/* FUNCTION:slowexp */ +/* */ +/* FILES NEEDED:mpa.h */ +/* mpa.c mpexp.c */ +/* */ +/*Converting from double precision to Multi-precision and calculating */ +/* e^x */ +/**************************************************************************/ +#include "mpa.h" + +void __mpexp(mp_no *x, mp_no *y, int p); + +/*Converting from double precision to Multi-precision and calculating e^x */ +double __slowexp(double x) { + double w,z,res,eps=3.0e-26; +#if 0 + double y; +#endif + int p; +#if 0 + int orig,i; +#endif + mp_no mpx, mpy, mpz,mpw,mpeps,mpcor; + + p=6; + __dbl_mp(x,&mpx,p); /* Convert a double precision number x */ + /* into a multiple precision number mpx with prec. p. */ + __mpexp(&mpx, &mpy, p); /* Multi-Precision exponential function */ + __dbl_mp(eps,&mpeps,p); + __mul(&mpeps,&mpy,&mpcor,p); + __add(&mpy,&mpcor,&mpw,p); + __sub(&mpy,&mpcor,&mpz,p); + __mp_dbl(&mpw, &w, p); + __mp_dbl(&mpz, &z, p); + if (w == z) return w; + else { /* if calculating is not exactly */ + p = 32; + __dbl_mp(x,&mpx,p); + __mpexp(&mpx, &mpy, p); + __mp_dbl(&mpy, &res, p); + return res; + } +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/slowpow.c glibc-2.2.3/sysdeps/ieee754/dbl-64/slowpow.c --- glibc-2.2.2/sysdeps/ieee754/dbl-64/slowpow.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/slowpow.c Mon Mar 12 17:37:15 2001 @@ -0,0 +1,73 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/*************************************************************************/ +/* MODULE_NAME:slowpow.c */ +/* */ +/* FUNCTION:slowpow */ +/* */ +/*FILES NEEDED:mpa.h */ +/* mpa.c mpexp.c mplog.c halfulp.c */ +/* */ +/* Given two IEEE double machine numbers y,x , routine computes the */ +/* correctly rounded (to nearest) value of x^y. Result calculated by */ +/* multiplication (in halfulp.c) or if result isn't accurate enough */ +/* then routine converts x and y into multi-precision doubles and */ +/* calls to mpexp routine */ +/*************************************************************************/ + +#include "mpa.h" + +void __mpexp(mp_no *x, mp_no *y, int p); +void __mplog(mp_no *x, mp_no *y, int p); +double ulog(double); +double __halfulp(double x,double y); + +double __slowpow(double x, double y, double z) { + double res,res1; + mp_no mpx, mpy, mpz,mpw,mpp,mpr,mpr1; + static const mp_no eps = {-3,{1.0,4.0}}; + int p; + + res = __halfulp(x,y); /* halfulp() returns -10 or x^y */ + if (res >= 0) return res; /* if result was really computed by halfulp */ + /* else, if result was not really computed by halfulp */ + p = 10; /* p=precision */ + __dbl_mp(x,&mpx,p); + __dbl_mp(y,&mpy,p); + __dbl_mp(z,&mpz,p); + __mplog(&mpx, &mpz, p); /* log(x) = z */ + __mul(&mpy,&mpz,&mpw,p); /* y * z =w */ + __mpexp(&mpw, &mpp, p); /* e^w =pp */ + __add(&mpp,&eps,&mpr,p); /* pp+eps =r */ + __mp_dbl(&mpr, &res, p); + __sub(&mpp,&eps,&mpr1,p); /* pp -eps =r1 */ + __mp_dbl(&mpr1, &res1, p); /* converting into double precision */ + if (res == res1) return res; + + p = 32; /* if we get here result wasn't calculated exactly, continue */ + __dbl_mp(x,&mpx,p); /* for more exact calculation */ + __dbl_mp(y,&mpy,p); + __dbl_mp(z,&mpz,p); + __mplog(&mpx, &mpz, p); /* log(c)=z */ + __mul(&mpy,&mpz,&mpw,p); /* y*z =w */ + __mpexp(&mpw, &mpp, p); /* e^w=pp */ + __mp_dbl(&mpp, &res, p); /* converting into double precision */ + return res; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/uasncs.h glibc-2.2.3/sysdeps/ieee754/dbl-64/uasncs.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/uasncs.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/uasncs.h Sun Mar 11 21:59:51 2001 @@ -0,0 +1,69 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:uasncs.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef UANSNCS_H +#define UANSNCS_H + +#ifdef BIG_ENDI + static const mynumber +/**/ a1 = {{0x3FC55580, 0x00000000 }}, /* 0.1666717529296875 */ +/**/ a2 = {{0xBED55555, 0x55552330 }}, /* -5.0862630208224597e-06 */ +/**/ hp0 = {{0x3FF921FB, 0x54442D18 }}, /* 1.5707963267948966 */ +/**/ hp1 = {{0x3C91A626, 0x33145C07 }}; /* 6.123233995736766e-17 */ + +#else +#ifdef LITTLE_ENDI + static const mynumber +/**/ a1 = {{0x00000000, 0x3FC55580 }}, /* 0.1666717529296875 */ +/**/ a2 = {{0x55552330, 0xBED55555 }}, /* -5.0862630208224597e-06 */ +/**/ hp0 = {{0x54442D18, 0x3FF921FB }}, /* 1.5707963267948966 */ +/**/ hp1 = {{0x33145C07, 0x3C91A626 }}; /* 6.123233995736766e-17 */ + +#endif +#endif + +static const double + f1 = 1.66666666666664110590506577996662E-01, + f2 = 7.50000000026122686814431784722623E-02, + f3 = 4.46428561421059750978517350006940E-02, + f4 = 3.03821268582119319911193410625235E-02, + f5 = 2.23551211026525610742786300334557E-02, + f6 = 1.81382903404565056280372531963613E-02; +static const double + c2 = 0.74999999999985410757087492918602258E-01, + c3 = 0.44642857150311968932423372477866076E-01, + c4 = 0.30381942574778615766200591683810471E-01, + c5 = 0.22372413472984868331447708777000650E-01, + c6 = 0.17333630246451830686009693735025490E-01, + c7 = 0.14710362893628210269950864741085777E-01; + +static const double big = 103079215104.0, t24 = 16777216.0, t27 = 134217728.0; +static const double + rt0 = 9.99999999859990725855365213134618E-01, + rt1 = 4.99999999495955425917856814202739E-01, + rt2 = 3.75017500867345182581453026130850E-01, + rt3 = 3.12523626554518656309172508769531E-01; +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/uatan.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/uatan.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/uatan.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/uatan.tbl Sun Mar 11 22:32:34 2001 @@ -0,0 +1,11115 @@ +/****************************************************************/ +/* TABLES FOR THE uatan() FUNCTION */ +/****************************************************************/ + +#include "endian.h" + +#ifdef BIG_ENDI + + static const number + cij[241][7] = { /* x0,cij for (1/16,1) */ +/**/ {{{0X3FB04006, 0X65E0244E} }, +/**/ {{0X3FB03A73, 0X7B53DD20} }, +/**/ {{0X3FEFDF1F, 0XCF5CFB72} }, +/**/ {{0XBFB01EB3, 0XCE2AE4C2} }, +/**/ {{0XBFD4D29E, 0XDD58A40D} }, +/**/ {{0X3FAFDA4A, 0XD907A18A} }, +/**/ {{0X3FC814DF, 0X4DF65B18} } }, +/**/ {{{0X3FB0FFFD, 0XB9B88CD8} }, +/**/ {{0X3FB0F99C, 0X63645300} }, +/**/ {{0X3FEFDC08, 0XA3DED30F} }, +/**/ {{0XBFB0D9DC, 0X669C1AED} }, +/**/ {{0XBFD4C669, 0XF7138DE2} }, +/**/ {{0X3FB0A12F, 0X29D085A7} }, +/**/ {{0X3FC7F0EE, 0XCFD48D20} } }, +/**/ {{{0X3FB1FFF1, 0X5A73D4F1} }, +/**/ {{0X3FB1F85F, 0X2BEE2040} }, +/**/ {{0X3FEFD7B3, 0X42B56D31} }, +/**/ {{0XBFB1D2B7, 0XB69DEA40} }, +/**/ {{0XBFD4B552, 0X3922ECC9} }, +/**/ {{0X3FB18F93, 0X522B1A04} }, +/**/ {{0X3FC7BEAD, 0X5660F061} } }, +/**/ {{{0X3FB2FFFD, 0XB2524AA2} }, +/**/ {{0X3FB2F716, 0XE71790A0} }, +/**/ {{0X3FEFD31F, 0X53B496A4} }, +/**/ {{0XBFB2CAD8, 0X4AAB7374} }, +/**/ {{0XBFD4A34B, 0X58DD2FB2} }, +/**/ {{0X3FB27C0A, 0XD0CECC18} }, +/**/ {{0X3FC789D2, 0X5D2743D7} } }, +/**/ {{{0X3FB3FFFE, 0X0573F3AC} }, +/**/ {{0X3FB3F59D, 0X1702F6A0} }, +/**/ {{0X3FEFCE4D, 0XB071ACC2} }, +/**/ {{0XBFB3C20F, 0X64DB3686} }, +/**/ {{0XBFD49059, 0XEB3BFE93} }, +/**/ {{0X3FB36659, 0XCAF74FED} }, +/**/ {{0X3FC75269, 0X1C011FB0} } }, +/**/ {{{0X3FB4FFEF, 0X894384D6} }, +/**/ {{0X3FB4F3ED, 0X0CE204C0} }, +/**/ {{0X3FEFC93E, 0XA8EA5A01} }, +/**/ {{0XBFB4B84F, 0X7B5457C9} }, +/**/ {{0XBFD47C80, 0X7401F2F9} }, +/**/ {{0X3FB44E64, 0XB4F67209} }, +/**/ {{0X3FC7187D, 0X4C540B77} } }, +/**/ {{{0X3FB5FFF8, 0XDF406528} }, +/**/ {{0X3FB5F22B, 0X3C73D820} }, +/**/ {{0X3FEFC3F1, 0XB1F60F13} }, +/**/ {{0XBFB5ADB2, 0XCB7FA73B} }, +/**/ {{0XBFD467BE, 0X2B1EB555} }, +/**/ {{0X3FB53435, 0X99EDC463} }, +/**/ {{0X3FC6DC1B, 0X238F5059} } }, +/**/ {{{0X3FB7000F, 0X8C4F0D56} }, +/**/ {{0X3FB6F04B, 0X495A2FA0} }, +/**/ {{0X3FEFBE67, 0X340DCE97} }, +/**/ {{0XBFB6A224, 0X4D98E1AD} }, +/**/ {{0XBFD45216, 0X14064DF1} }, +/**/ {{0X3FB617AA, 0X2BA78A66} }, +/**/ {{0X3FC69D4F, 0X50A3D7AC} } }, +/**/ {{{0X3FB8000F, 0XBB4057CF} }, +/**/ {{0X3FB7EE27, 0XBE2CD3A0} }, +/**/ {{0X3FEFB8A0, 0X39EC9246} }, +/**/ {{0XBFB79577, 0X31D9C773} }, +/**/ {{0XBFD43B8D, 0XB6DC7D72} }, +/**/ {{0X3FB6F88A, 0XD69547DF} }, +/**/ {{0X3FC65C26, 0XF633CE8C} } }, +/**/ {{{0X3FB8FFF2, 0X39CF2B7F} }, +/**/ {{0X3FB8EBB7, 0X9F979E80} }, +/**/ {{0X3FEFB29D, 0X435506E1} }, +/**/ {{0XBFB8879A, 0X69B9CDB5} }, +/**/ {{0XBFD42428, 0X85FEAFA9} }, +/**/ {{0X3FB7D6BA, 0XB6191A0E} }, +/**/ {{0X3FC618AF, 0XA7CB8BB5} } }, +/**/ {{{0X3FB9FFF9, 0X6E2F0772} }, +/**/ {{0X3FB9E93A, 0XD32A9480} }, +/**/ {{0X3FEFAC5D, 0X04A3EC40} }, +/**/ {{0XBFB978C2, 0X53F6EA97} }, +/**/ {{0XBFD40BE3, 0X089C36F6} }, +/**/ {{0X3FB8B25C, 0X885AEB77} }, +/**/ {{0X3FC5D2F7, 0X63CADCE1} } }, +/**/ {{{0X3FBB0002, 0X6316B097} }, +/**/ {{0X3FBAE68C, 0XCE24CC00} }, +/**/ {{0X3FEFA5E0, 0X938C5C66} }, +/**/ {{0XBFBA68C3, 0X76F14E4B} }, +/**/ {{0XBFD3F2C3, 0X1696CD7C} }, +/**/ {{0X3FB98B3B, 0X722A2CB4} }, +/**/ {{0X3FC58B0C, 0X9067AD62} } }, +/**/ {{{0X3FBC0008, 0X604F58B1} }, +/**/ {{0X3FBBE3A7, 0X05650780} }, +/**/ {{0X3FEF9F28, 0X5A7A2773} }, +/**/ {{0XBFBB578F, 0X3D5AC0A4} }, +/**/ {{0XBFD3D8CB, 0XF767119F} }, +/**/ {{0X3FBA613D, 0XC7E31B88} }, +/**/ {{0X3FC540FD, 0XF5594565} } }, +/**/ {{{0X3FBD0002, 0X6CCA4EBA} }, +/**/ {{0X3FBCE07E, 0XC1298A80} }, +/**/ {{0X3FEF9834, 0XE8D36C4A} }, +/**/ {{0XBFBC4513, 0X5BCAC5FE} }, +/**/ {{0XBFD3BE01, 0X8B5236F1} }, +/**/ {{0X3FBB3447, 0X2E991970} }, +/**/ {{0X3FC4F4DA, 0XB8ADB373} } }, +/**/ {{{0X3FBDFFF4, 0XB2B47FCA} }, +/**/ {{0X3FBDDD16, 0X4A051D80} }, +/**/ {{0X3FEF9106, 0X78DCC895} }, +/**/ {{0XBFBD3149, 0XF0966844} }, +/**/ {{0XBFD3A266, 0X744F9A5F} }, +/**/ {{0X3FBC0446, 0XEDB7F27A} }, +/**/ {{0X3FC4A6B2, 0X583F9ECA} } }, +/**/ {{{0X3FBF000A, 0XA9A05BE0} }, +/**/ {{0X3FBED996, 0XA3BDA540} }, +/**/ {{0X3FEF899C, 0X1B8BA97F} }, +/**/ {{0XBFBE1C51, 0X2287A677} }, +/**/ {{0XBFD385F8, 0XEDC130BB} }, +/**/ {{0X3FBCD14B, 0XF306FF50} }, +/**/ {{0X3FC45694, 0XA667A72B} } }, +/**/ {{{0X3FBFFFFA, 0XBA8F63DE} }, +/**/ {{0X3FBFD5B5, 0X69FE4780} }, +/**/ {{0X3FEF81F8, 0X4863DC7D} }, +/**/ {{0XBFBF05DB, 0XD1518706} }, +/**/ {{0XBFD368C4, 0X4687A69C} }, +/**/ {{0X3FBD9B08, 0X1B3868DA} }, +/**/ {{0X3FC40491, 0XC345ADFC} } }, +/**/ {{{0X3FC07FFA, 0X6ECCADA8} }, +/**/ {{0X3FC068D0, 0X0A396400} }, +/**/ {{0X3FEF7A19, 0XF1FCFC6B} }, +/**/ {{0XBFBFEE0C, 0X861DF0DF} }, +/**/ {{0XBFD34AC6, 0X5A586C0C} }, +/**/ {{0X3FBE618F, 0X189D637A} }, +/**/ {{0X3FC3B0BA, 0X195779D4} } }, +/**/ {{{0X3FC10003, 0X33432713} }, +/**/ {{0X3FC0E6B0, 0XF203D1A0} }, +/**/ {{0X3FEF7200, 0XFE0EB463} }, +/**/ {{0XBFC06A72, 0XE15CB19A} }, +/**/ {{0XBFD32C00, 0XB8DB761E} }, +/**/ {{0X3FBF24D8, 0XA11F5E3E} }, +/**/ {{0X3FC35B1E, 0X569E85DD} } }, +/**/ {{{0X3FC17FFC, 0XDA1C4811} }, +/**/ {{0X3FC16462, 0X29EBDA00} }, +/**/ {{0X3FEF69AF, 0X7D558737} }, +/**/ {{0XBFC0DD17, 0X0B33969B} }, +/**/ {{0XBFD30C7D, 0X33AC50D1} }, +/**/ {{0X3FBFE4AA, 0X9BE43F0F} }, +/**/ {{0X3FC303CF, 0X692539CB} } }, +/**/ {{{0X3FC1FFFF, 0X3CCA418D} }, +/**/ {{0X3FC1E1FA, 0X3B978EA0} }, +/**/ {{0X3FEF6124, 0X45D421A9} }, +/**/ {{0XBFC14F03, 0XACAC8AA8} }, +/**/ {{0XBFD2EC39, 0X62E675A3} }, +/**/ {{0X3FC0508C, 0X2FA6B426} }, +/**/ {{0X3FC2AADE, 0X780A6467} } }, +/**/ {{{0X3FC27FF7, 0XD9C78922} }, +/**/ {{0X3FC25F66, 0X1B91E640} }, +/**/ {{0X3FEF5860, 0XF52E192C} }, +/**/ {{0XBFC1C023, 0XE5DE2394} }, +/**/ {{0XBFD2CB3D, 0X6BEE0ABD} }, +/**/ {{0X3FC0ACFB, 0X5E075C1A} }, +/**/ {{0X3FC2505C, 0XDFFE453A} } }, +/**/ {{{0X3FC2FFF7, 0XA1FC1AAA} }, +/**/ {{0X3FC2DCB5, 0X83257C40} }, +/**/ {{0X3FEF4F64, 0XC719B6FB} }, +/**/ {{0XBFC23082, 0X61514083} }, +/**/ {{0XBFD2A988, 0X7F7B72D5} }, +/**/ {{0X3FC107A7, 0X7C887402} }, +/**/ {{0X3FC1F45C, 0X2C3CD6D1} } }, +/**/ {{{0X3FC38005, 0X9D78E15E} }, +/**/ {{0X3FC359EE, 0X6AC98EE0} }, +/**/ {{0X3FEF462F, 0X944CEC16} }, +/**/ {{0XBFC2A020, 0XD85B87A9} }, +/**/ {{0XBFD2871C, 0X2E4AB369} }, +/**/ {{0X3FC1608D, 0XC31A65D9} }, +/**/ {{0X3FC196EE, 0X130BBE50} } }, +/**/ {{{0X3FC40004, 0X9F431B1A} }, +/**/ {{0X3FC3D6F3, 0X6BD65360} }, +/**/ {{0X3FEF3CC3, 0XDD99B68A} }, +/**/ {{0XBFC30EE1, 0XB3DD00ED} }, +/**/ {{0XBFD26403, 0XF8482664} }, +/**/ {{0X3FC1B792, 0XFE136626} }, +/**/ {{0X3FC13824, 0X6EAC7440} } }, +/**/ {{{0X3FC48004, 0XE01D95A1} }, +/**/ {{0X3FC453D3, 0X86F00CC0} }, +/**/ {{0X3FEF3320, 0XE3970539} }, +/**/ {{0XBFC37CCF, 0X0A5279AA} }, +/**/ {{0XBFD2403F, 0X3B151D5D} }, +/**/ {{0X3FC20CBB, 0XE331C9E6} }, +/**/ {{0X3FC0D811, 0X39E3F097} } }, +/**/ {{{0X3FC4FFF7, 0XAA9382DD} }, +/**/ {{0X3FC4D07F, 0X8C590A80} }, +/**/ {{0X3FEF2948, 0X34DF28E0} }, +/**/ {{0XBFC3E9D8, 0X5B43915C} }, +/**/ {{0XBFD21BD5, 0XEB8845A2} }, +/**/ {{0X3FC25FF8, 0XAC6AC8AD} }, +/**/ {{0X3FC076C6, 0X88ED96CA} } }, +/**/ {{{0X3FC58006, 0X352408BE} }, +/**/ {{0X3FC54D1E, 0XC39A73E0} }, +/**/ {{0X3FEF1F37, 0X09AE009C} }, +/**/ {{0XBFC4561C, 0XB9BE8550} }, +/**/ {{0XBFD1F6C0, 0X0053F52E} }, +/**/ {{0X3FC2B15D, 0XEF783BE9} }, +/**/ {{0X3FC01456, 0X8615239B} } }, +/**/ {{{0X3FC5FFFF, 0X2B193F81} }, +/**/ {{0X3FC5C980, 0X4F73E000} }, +/**/ {{0X3FEF14F1, 0XAE110E29} }, +/**/ {{0XBFC4C16E, 0X9098B3D2} }, +/**/ {{0XBFD1D10F, 0X8F058241} }, +/**/ {{0X3FC300C6, 0XA14FA897} }, +/**/ {{0X3FBF61A6, 0XD56607C0} } }, +/**/ {{{0X3FC68008, 0X4460E6E1} }, +/**/ {{0X3FC645C8, 0X04A55E20} }, +/**/ {{0X3FEF0A75, 0X8FA36EC5} }, +/**/ {{0XBFC52BE9, 0XD62FA883} }, +/**/ {{0XBFD1AABD, 0X69A74048} }, +/**/ {{0X3FC34E45, 0X1679EB02} }, +/**/ {{0X3FBE989E, 0XF7C14C3D} } }, +/**/ {{{0X3FC6FFFB, 0X9E99A846} }, +/**/ {{0X3FC6C1D0, 0X4B35FD40} }, +/**/ {{0X3FEEFFC6, 0X3EF8EF95} }, +/**/ {{0XBFC5956B, 0X76A2FE63} }, +/**/ {{0XBFD183D8, 0XDDC78DDF} }, +/**/ {{0X3FC399BD, 0XAC606D66} }, +/**/ {{0X3FBDCDBA, 0X070D286A} } }, +/**/ {{{0X3FC78008, 0X0FFCD490} }, +/**/ {{0X3FC73DC5, 0XB55758E0} }, +/**/ {{0X3FEEF4E0, 0X457E2065} }, +/**/ {{0XBFC5FE16, 0X7D6FF9BC} }, +/**/ {{0XBFD15C57, 0X9FADD384} }, +/**/ {{0X3FC3E347, 0X73E52D32} }, +/**/ {{0X3FBD011C, 0X9A65AE4B} } }, +/**/ {{{0X3FC80006, 0X148E79C1} }, +/**/ {{0X3FC7B981, 0X2B7F8CA0} }, +/**/ {{0X3FEEE9C7, 0X701687ED} }, +/**/ {{0XBFC665C7, 0X0E1EF36D} }, +/**/ {{0XBFD13449, 0XCCBCBDAB} }, +/**/ {{0X3FC42AC7, 0X5C71B3E8} }, +/**/ {{0X3FBC32EB, 0X3E81980E} } }, +/**/ {{{0X3FC88006, 0X0F487C17} }, +/**/ {{0X3FC83511, 0XBC0E3640} }, +/**/ {{0X3FEEDE7A, 0XD2D55329} }, +/**/ {{0XBFC6CC87, 0X37E644BA} }, +/**/ {{0XBFD10BAE, 0X60597557} }, +/**/ {{0X3FC47043, 0X13E26FBE} }, +/**/ {{0X3FBB634A, 0X6FB18BF4} } }, +/**/ {{{0X3FC90004, 0XD3518D76} }, +/**/ {{0X3FC8B073, 0X8874C100} }, +/**/ {{0X3FEED2FB, 0X2ED6673B} }, +/**/ {{0XBFC73251, 0X2A6EBAC3} }, +/**/ {{0XBFD0E28A, 0X6924232F} }, +/**/ {{0X3FC4B3B5, 0X73BCC03F} }, +/**/ {{0X3FBA925E, 0X8C72507F} } }, +/**/ {{{0X3FC97FFF, 0XD2F20D5C} }, +/**/ {{0X3FC92BA3, 0X51AF5920} }, +/**/ {{0X3FEEC749, 0X3D32449F} }, +/**/ {{0XBFC7971F, 0XC308255F} }, +/**/ {{0XBFD0B8E2, 0XD572D28F} }, +/**/ {{0X3FC4F51A, 0X337448FE} }, +/**/ {{0X3FB9C04B, 0XCFCBC620} } }, +/**/ {{{0X3FCA0005, 0XBF80F060} }, +/**/ {{0X3FC9A6AE, 0X6E9E8960} }, +/**/ {{0X3FEEBB64, 0X1EF200E7} }, +/**/ {{0XBFC7FAFB, 0X6E96E5C1} }, +/**/ {{0XBFD08EB6, 0XEC6AD647} }, +/**/ {{0X3FC53475, 0XF53D0BA6} }, +/**/ {{0X3FB8ED36, 0X4433C20E} } }, +/**/ {{{0X3FCA7FF7, 0XDEECA8E4} }, +/**/ {{0X3FCA2176, 0X948578E0} }, +/**/ {{0X3FEEAF4F, 0X328FF98B} }, +/**/ {{0XBFC85DC9, 0X58149B1C} }, +/**/ {{0XBFD06414, 0XF933A1AB} }, +/**/ {{0X3FC571B7, 0X60C45A8F} }, +/**/ {{0X3FB81941, 0XBE58C308} } }, +/**/ {{{0X3FCAFFFF, 0X7DEFD553} }, +/**/ {{0X3FCA9C22, 0X9EBA6B80} }, +/**/ {{0X3FEEA307, 0X10A85E10} }, +/**/ {{0XBFC8BFA6, 0X7F9DEA61} }, +/**/ {{0XBFD038F3, 0X5A474E8F} }, +/**/ {{0X3FC5ACF0, 0X30C225D2} }, +/**/ {{0X3FB74491, 0XD062812F} } }, +/**/ {{{0X3FCB7FFE, 0X669932A5} }, +/**/ {{0X3FCB1694, 0XCFF6DFE0} }, +/**/ {{0X3FEE968F, 0X1921D387} }, +/**/ {{0XBFC92078, 0XE075D95A} }, +/**/ {{0XBFD00D60, 0X526793C4} }, +/**/ {{0X3FC5E610, 0X73842A52} }, +/**/ {{0X3FB66F49, 0XC5331D5A} } }, +/**/ {{{0X3FCBFFF9, 0XB44759F3} }, +/**/ {{0X3FCB90D1, 0X5073A2A0} }, +/**/ {{0X3FEE89E7, 0X56598313} }, +/**/ {{0XBFC98041, 0XCFB9203D} }, +/**/ {{0XBFCFC2BC, 0XBED91B37} }, +/**/ {{0X3FC61D19, 0X6D4FC2FC} }, +/**/ {{0X3FB5998C, 0X9411537E} } }, +/**/ {{{0X3FCC8007, 0X5568F3EC} }, +/**/ {{0X3FCC0AEC, 0X4A31DBE0} }, +/**/ {{0X3FEE7D0E, 0X18F270A8} }, +/**/ {{0XBFC9DF0E, 0XF522B132} }, +/**/ {{0XBFCF69D4, 0X2179C242} }, +/**/ {{0X3FC65213, 0X36646FCD} }, +/**/ {{0X3FB4C37C, 0XDC699095} } }, +/**/ {{{0X3FCCFFF8, 0X601A799F} }, +/**/ {{0X3FCC84B8, 0X49DB66A0} }, +/**/ {{0X3FEE7008, 0XA0EE780E} }, +/**/ {{0XBFCA3CBB, 0X3A403934} }, +/**/ {{0XBFCF102F, 0XD490BE32} }, +/**/ {{0X3FC684EA, 0X037D4137} }, +/**/ {{0X3FB3ED3C, 0XD9EC855A} } }, +/**/ {{{0X3FCD7FF9, 0X7BBF1497} }, +/**/ {{0X3FCCFE5F, 0X1E008CE0} }, +/**/ {{0X3FEE62D2, 0XF04615C7} }, +/**/ {{0XBFCA9965, 0X15AADE2C} }, +/**/ {{0XBFCEB5B9, 0X0B44B682} }, +/**/ {{0X3FC6B5AF, 0X92EC8D57} }, +/**/ {{0X3FB316EE, 0X60D831AE} } }, +/**/ {{{0X3FCE0008, 0X40209B20} }, +/**/ {{0X3FCD77DD, 0XB145A760} }, +/**/ {{0X3FEE556D, 0XBE1DFDF1} }, +/**/ {{0XBFCAF508, 0X2186AF0F} }, +/**/ {{0XBFCE5A79, 0X9420489D} }, +/**/ {{0X3FC6E462, 0X454FEB2C} }, +/**/ {{0X3FB240B2, 0XD2945A8C} } }, +/**/ {{{0X3FCE8000, 0XC0AE943C} }, +/**/ {{0X3FCDF111, 0X3CA10100} }, +/**/ {{0X3FEE47DD, 0X59E7308B} }, +/**/ {{0XBFCB4F88, 0X9439F69F} }, +/**/ {{0XBFCDFE93, 0X798DE600} }, +/**/ {{0X3FC710F5, 0X8F267389} }, +/**/ {{0X3FB16AAB, 0X1A8A373E} } }, +/**/ {{{0X3FCF0003, 0X6D532803} }, +/**/ {{0X3FCE6A17, 0XCB4E5C80} }, +/**/ {{0X3FEE3A1E, 0XE3D0F6C2} }, +/**/ {{0XBFCBA8FB, 0X6E31F768} }, +/**/ {{0XBFCDA1F7, 0XE6A382E3} }, +/**/ {{0X3FC73B75, 0XB36AC4C0} }, +/**/ {{0X3FB094F7, 0XA3470B0A} } }, +/**/ {{{0X3FCF7FFA, 0X48B8AFC3} }, +/**/ {{0X3FCEE2DB, 0XE1654560} }, +/**/ {{0X3FEE2C35, 0X43F2AB37} }, +/**/ {{0XBFCC014F, 0X598207D6} }, +/**/ {{0XBFCD44BF, 0X1EFE809A} }, +/**/ {{0X3FC763DC, 0X698A561E} }, +/**/ {{0X3FAF7F70, 0XA7CF78A3} } }, +/**/ {{{0X3FD00002, 0XEB334FAE} }, +/**/ {{0X3FCF5B7B, 0X77AB25E0} }, +/**/ {{0X3FEE1E1D, 0X78A5C127} }, +/**/ {{0XBFCC5898, 0XC555D571} }, +/**/ {{0XBFCCE6D9, 0XB706CF86} }, +/**/ {{0X3FC78A35, 0X0823F643} }, +/**/ {{0X3FADD619, 0X0B9118E8} } }, +/**/ {{{0X3FD03FFC, 0XA8AF86FE} }, +/**/ {{0X3FCFD3CB, 0XB53A0C00} }, +/**/ {{0X3FEE0FDC, 0XFDCBAC8B} }, +/**/ {{0XBFCCAEB7, 0X6C3246FF} }, +/**/ {{0XBFCC8870, 0XD6E19AD3} }, +/**/ {{0X3FC7AE73, 0XD2C48E91} }, +/**/ {{0X3FAC2E26, 0X0510FDB0} } }, +/**/ {{{0X3FD07FFC, 0XD38984B7} }, +/**/ {{0X3FD025F7, 0X5732D4A0} }, +/**/ {{0X3FEE0170, 0X49C17AB3} }, +/**/ {{0XBFCD03C2, 0X9AFE5028} }, +/**/ {{0XBFCC2971, 0X9A2C1833} }, +/**/ {{0X3FC7D0A5, 0X69041DCF} }, +/**/ {{0X3FAA87D3, 0XF497C653} } }, +/**/ {{{0X3FD0BFFF, 0X1ED2ADD7} }, +/**/ {{0X3FD061ED, 0XCD7F7420} }, +/**/ {{0X3FEDF2D8, 0XDA96B750} }, +/**/ {{0XBFCD57B2, 0XC777881E} }, +/**/ {{0XBFCBC9EA, 0X8692B503} }, +/**/ {{0X3FC7F0C9, 0X42ABF9E7} }, +/**/ {{0X3FA8E35E, 0X04B42BB4} } }, +/**/ {{{0X3FD10003, 0XA8515CDA} }, +/**/ {{0X3FD09DC9, 0X027416A0} }, +/**/ {{0X3FEDE417, 0X34899950} }, +/**/ {{0XBFCDAA86, 0X7983EDE4} }, +/**/ {{0XBFCB69E3, 0X999706B6} }, +/**/ {{0X3FC80EE1, 0XB0F126DB} }, +/**/ {{0X3FA740FE, 0X17EE9BAB} } }, +/**/ {{{0X3FD14001, 0XF3AF9CC5} }, +/**/ {{0X3FD0D980, 0XB6E1ABA0} }, +/**/ {{0X3FEDD52D, 0XE0412681} }, +/**/ {{0XBFCDFC31, 0X6863B28B} }, +/**/ {{0XBFCB0971, 0XC55B8D5A} }, +/**/ {{0X3FC82AED, 0XA6731AAC} }, +/**/ {{0X3FA5A0EC, 0XC73BD8F0} } }, +/**/ {{{0X3FD18003, 0XB6122509} }, +/**/ {{0X3FD1151D, 0XAA1E67A0} }, +/**/ {{0X3FEDC61B, 0X2E0C1F32} }, +/**/ {{0XBFCE4CBE, 0XB9BA6B7E} }, +/**/ {{0XBFCAA88E, 0X90C2431C} }, +/**/ {{0X3FC844F4, 0X8BCBDA5E} }, +/**/ {{0X3FA40361, 0X50E585FF} } }, +/**/ {{{0X3FD1BFFF, 0XA6A2A153} }, +/**/ {{0X3FD15096, 0XE7A18DC0} }, +/**/ {{0X3FEDB6E1, 0XE1218F3F} }, +/**/ {{0XBFCE9C21, 0X9621D6A2} }, +/**/ {{0XBFCA4750, 0X22627B04} }, +/**/ {{0X3FC85CF5, 0XFF8B908E} }, +/**/ {{0X3FA26891, 0X9833C0D6} } }, +/**/ {{{0X3FD1FFFD, 0X2D345AAF} }, +/**/ {{0X3FD18BF3, 0X053BF760} }, +/**/ {{0X3FEDA780, 0XCC3ACB29} }, +/**/ {{0XBFCEEA62, 0X2AA756AE} }, +/**/ {{0XBFC9E5B3, 0X47ED9793} }, +/**/ {{0X3FC872F8, 0X87AB542A} }, +/**/ {{0X3FA0D0B2, 0X158E9E9A} } }, +/**/ {{{0X3FD23FFC, 0XF14CF05A} }, +/**/ {{0X3FD1C732, 0X4D568460} }, +/**/ {{0X3FED97F8, 0X55F32D3D} }, +/**/ {{0XBFCF3780, 0X21D457C8} }, +/**/ {{0XBFC983BE, 0XF065B845} }, +/**/ {{0X3FC886FF, 0XFBA70CD8} }, +/**/ {{0X3F9E77EB, 0XAEB85CCC} } }, +/**/ {{{0X3FD27FFE, 0X0BAE6FC9} }, +/**/ {{0X3FD20253, 0X9A27C160} }, +/**/ {{0X3FED8849, 0X4619176E} }, +/**/ {{0XBFCF8379, 0X5C0AC9EC} }, +/**/ {{0XBFC9217C, 0X5E645195} }, +/**/ {{0X3FC8990F, 0XF4264515} }, +/**/ {{0X3F9B551C, 0XE6B92E65} } }, +/**/ {{{0X3FD2C001, 0XA297A7DE} }, +/**/ {{0X3FD23D57, 0XACB927C0} }, +/**/ {{0X3FED7873, 0XE4958FB6} }, +/**/ {{0XBFCFCE4E, 0X43572249} }, +/**/ {{0XBFC8BEF1, 0X9F3560F3} }, +/**/ {{0X3FC8A92C, 0XDF7F0E5B} }, +/**/ {{0X3F983958, 0X116F3B19} } }, +/**/ {{{0X3FD2FFFE, 0X7267616A} }, +/**/ {{0X3FD27835, 0XB2F378C0} }, +/**/ {{0X3FED687B, 0X13906586} }, +/**/ {{0XBFD00BF9, 0XAFDA1A0F} }, +/**/ {{0XBFC85C34, 0XC197AD7D} }, +/**/ {{0X3FC8B759, 0X1E99F0A7} }, +/**/ {{0X3F9524FA, 0X6525C365} } }, +/**/ {{{0X3FD33FFE, 0X48153B20} }, +/**/ {{0X3FD2B2F6, 0X6A2FDCC0} }, +/**/ {{0X3FED585C, 0XF827FBE4} }, +/**/ {{0XBFD03039, 0XB45A6918} }, +/**/ {{0XBFC7F93E, 0X5DFC3F72} }, +/**/ {{0X3FC8C39B, 0XC5210022} }, +/**/ {{0X3F92185E, 0X168FB62E} } }, +/**/ {{{0X3FD38003, 0X8122579A} }, +/**/ {{0X3FD2ED9B, 0XAF6EC1E0} }, +/**/ {{0X3FED4819, 0X872F20D3} }, +/**/ {{0XBFD053E8, 0X1F4C1031} }, +/**/ {{0XBFC79612, 0X621FFD79} }, +/**/ {{0X3FC8CDF9, 0XDB9D9DFC} }, +/**/ {{0X3F8E27B4, 0X80C6852F} } }, +/**/ {{{0X3FD3C003, 0X3EF39141} }, +/**/ {{0X3FD3281B, 0X4668C700} }, +/**/ {{0X3FED37B4, 0X18590D1A} }, +/**/ {{0XBFD076FE, 0XA3EF2560} }, +/**/ {{0XBFC732C9, 0X3033287A} }, +/**/ {{0X3FC8D676, 0XCA2E5458} }, +/**/ {{0X3F882F85, 0XD80944B1} } }, +/**/ {{{0X3FD40001, 0X63FA0E31} }, +/**/ {{0X3FD36278, 0X7B565000} }, +/**/ {{0X3FED272C, 0X47A813DA} }, +/**/ {{0XBFD0997F, 0X493B9D88} }, +/**/ {{0XBFC6CF64, 0X3DA9FE3C} }, +/**/ {{0X3FC8DD18, 0XC1CD3331} }, +/**/ {{0X3F8248D1, 0XF70F6E07} } }, +/**/ {{{0X3FD44003, 0X74071092} }, +/**/ {{0X3FD39CB8, 0X0F0A4000} }, +/**/ {{0X3FED1681, 0X3BA47A6B} }, +/**/ {{0XBFD0BB6C, 0XD8788947} }, +/**/ {{0XBFC66BE2, 0X589596A6} }, +/**/ {{0X3FC8E1E5, 0XC9B3EC1E} }, +/**/ {{0X3F78E868, 0XD20FAB86} } }, +/**/ {{{0X3FD48000, 0XC880F200} }, +/**/ {{0X3FD3D6D1, 0XDEFFB460} }, +/**/ {{0X3FED05B5, 0XCADC576C} }, +/**/ {{0XBFD0DCC2, 0XA1D352C2} }, +/**/ {{0XBFC60858, 0X3D7D2574} }, +/**/ {{0X3FC8E4E3, 0X03208BC0} }, +/**/ {{0X3F6AC909, 0X6379E732} } }, +/**/ {{{0X3FD4C000, 0X4D97D2CB} }, +/**/ {{0X3FD410CB, 0XF3A2E220} }, +/**/ {{0X3FECF4C8, 0XBB7ED511} }, +/**/ {{0XBFD0FD84, 0X37766A49} }, +/**/ {{0XBFC5A4C2, 0X5AABC13C} }, +/**/ {{0X3FC8E616, 0XC80DAC4B} }, +/**/ {{0X3F4038AA, 0XB04695C2} } }, +/**/ {{{0X3FD4FFFD, 0X9397539F} }, +/**/ {{0X3FD44AA2, 0X06A7DEC0} }, +/**/ {{0X3FECE3BB, 0XCF479DDE} }, +/**/ {{0XBFD11DAF, 0X4D122984} }, +/**/ {{0XBFC5412E, 0XB1024DF0} }, +/**/ {{0X3FC8E587, 0X1B2C560D} }, +/**/ {{0XBF625DA8, 0X951C088D} } }, +/**/ {{{0X3FD53FFF, 0XF304715F} }, +/**/ {{0X3FD4845A, 0X791F3900} }, +/**/ {{0X3FECD28D, 0XA45E0FD8} }, +/**/ {{0XBFD13D47, 0X8D61F221} }, +/**/ {{0XBFC4DD98, 0XD3E9BB99} }, +/**/ {{0X3FC8E33A, 0X0F181507} }, +/**/ {{0XBF743C33, 0XD08BD25C} } }, +/**/ {{{0X3FD58002, 0XE88EA386} }, +/**/ {{0X3FD4BDF0, 0XF575D6C0} }, +/**/ {{0X3FECC140, 0X02035609} }, +/**/ {{0XBFD15C4A, 0XB808071E} }, +/**/ {{0XBFC47A0E, 0XB2945FCF} }, +/**/ {{0X3FC8DF35, 0XFC056447} }, +/**/ {{0XBF7F2011, 0XB00A45CD} } }, +/**/ {{{0X3FD5BFFD, 0X70F4D590} }, +/**/ {{0X3FD4F75D, 0X284D7AE0} }, +/**/ {{0X3FECAFD5, 0XF2DE98B6} }, +/**/ {{0XBFD17AB4, 0XA2B42F42} }, +/**/ {{0XBFC416A5, 0X1C285A92} }, +/**/ {{0X3FC8D982, 0X511D6C5A} }, +/**/ {{0XBF84ECC1, 0X77008605} } }, +/**/ {{{0X3FD5FFFD, 0XB70D6E53} }, +/**/ {{0X3FD530AB, 0X8E2FF500} }, +/**/ {{0X3FEC9E4C, 0X32D2429D} }, +/**/ {{0XBFD1988C, 0X35190681} }, +/**/ {{0XBFC3B34C, 0XBF748319} }, +/**/ {{0X3FC8D224, 0X98D3A613} }, +/**/ {{0XBF8A33D4, 0XAA295F9F} } }, +/**/ {{{0X3FD63FFC, 0X5C7399E2} }, +/**/ {{0X3FD569D5, 0X4F022E80} }, +/**/ {{0X3FEC8CA5, 0X58DD180F} }, +/**/ {{0XBFD1B5CE, 0X1D701DE4} }, +/**/ {{0XBFC35017, 0XA7806A5A} }, +/**/ {{0X3FC8C924, 0X56C01CF9} }, +/**/ {{0XBF8F64D9, 0X942059E1} } }, +/**/ {{{0X3FD67FFD, 0X9A1AC7D2} }, +/**/ {{0X3FD5A2DD, 0XF50031E0} }, +/**/ {{0X3FEC7AE0, 0XCEFF6DEB} }, +/**/ {{0XBFD1D27C, 0X7C8C245B} }, +/**/ {{0XBFC2ED05, 0XC6AA933F} }, +/**/ {{0X3FC8BE87, 0XDDC5CF1F} }, +/**/ {{0XBF923FB6, 0XD594386F} } }, +/**/ {{{0X3FD6BFFD, 0X6F7B9353} }, +/**/ {{0X3FD5DBC1, 0XB4E066C0} }, +/**/ {{0X3FEC6900, 0X456B591A} }, +/**/ {{0XBFD1EE95, 0XC2D6D0AA} }, +/**/ {{0XBFC28A23, 0XB11086F7} }, +/**/ {{0X3FC8B256, 0XDDE22D5A} }, +/**/ {{0XBF94C19A, 0X489D85A4} } }, +/**/ {{{0X3FD6FFFB, 0XF02A83E4} }, +/**/ {{0X3FD61480, 0X6A237DC0} }, +/**/ {{0X3FEC5704, 0X4CC81773} }, +/**/ {{0XBFD20A1A, 0X4B9029CA} }, +/**/ {{0XBFC22777, 0X89F5FB1C} }, +/**/ {{0X3FC8A498, 0X9B09E911} }, +/**/ {{0XBF9737EC, 0X130D419A} } }, +/**/ {{{0X3FD73FFE, 0X128C213A} }, +/**/ {{0X3FD64D1E, 0X42499480} }, +/**/ {{0X3FEC44EC, 0X129C0D30} }, +/**/ {{0XBFD2250C, 0X83787259} }, +/**/ {{0XBFC1C4FF, 0XD55BE4FC} }, +/**/ {{0X3FC89553, 0X36B2D603} }, +/**/ {{0XBF99A284, 0X2E43DF46} } }, +/**/ {{{0X3FD77FFB, 0XEA0CDC7A} }, +/**/ {{0X3FD68594, 0X05B0E220} }, +/**/ {{0X3FEC32BA, 0X687132C0} }, +/**/ {{0XBFD23F69, 0X7273497E} }, +/**/ {{0XBFC162CE, 0XCD39B037} }, +/**/ {{0X3FC8848F, 0XFA930AAF} }, +/**/ {{0XBF9C013D, 0XA4554412} } }, +/**/ {{{0X3FD7C003, 0XF18EDAB8} }, +/**/ {{0X3FD6BDEE, 0X4127BEE0} }, +/**/ {{0X3FEC206B, 0XC01607BD} }, +/**/ {{0XBFD25937, 0X5FEE2F42} }, +/**/ {{0XBFC100D4, 0X307761E1} }, +/**/ {{0X3FC87252, 0X5DFEC556} }, +/**/ {{0XBF9E53F6, 0X7958F973} } }, +/**/ {{{0X3FD7FFFD, 0X41F35C4C} }, +/**/ {{0X3FD6F616, 0XDA6607A0} }, +/**/ {{0X3FEC0E07, 0XCDDC8437} }, +/**/ {{0XBFD2726C, 0XBFB4DAEA} }, +/**/ {{0XBFC09F3B, 0XE0DB1472} }, +/**/ {{0X3FC85EA9, 0X2A95AA1B} }, +/**/ {{0XBFA04D47, 0XD872CFA2} } }, +/**/ {{{0X3FD84003, 0X26C7C46B} }, +/**/ {{0X3FD72E25, 0X96B8BE00} }, +/**/ {{0X3FEBFB87, 0X4CDEDF38} }, +/**/ {{0XBFD28B14, 0XD09404F3} }, +/**/ {{0XBFC03DE1, 0XE7FB61F2} }, +/**/ {{0X3FC84993, 0XACB33BE9} }, +/**/ {{0XBFA16A76, 0X9B1DE607} } }, +/**/ {{{0X3FD88003, 0XCA90B179} }, +/**/ {{0X3FD7660A, 0XA104A220} }, +/**/ {{0X3FEBE8EF, 0XF236E2F6} }, +/**/ {{0XBFD2A329, 0X19A94DDF} }, +/**/ {{0XBFBFB9CE, 0X0856A081} }, +/**/ {{0X3FC8331F, 0X33F70280} }, +/**/ {{0XBFA2817A, 0XF01308CC} } }, +/**/ {{{0X3FD8C003, 0XE9692FD5} }, +/**/ {{0X3FD79DC9, 0XF0B2CB00} }, +/**/ {{0X3FEBD640, 0XF2966495} }, +/**/ {{0XBFD2BAAB, 0XFD6EC2EA} }, +/**/ {{0XBFBEF892, 0XE08E9C2D} }, +/**/ {{0X3FC81B52, 0X031873E3} }, +/**/ {{0XBFA39249, 0XAC12113D} } }, +/**/ {{{0X3FD8FFFE, 0X35BE5C5F} }, +/**/ {{0X3FD7D55E, 0XBDCCDFC0} }, +/**/ {{0X3FEBC37C, 0X6EABCF77} }, +/**/ {{0XBFD2D19C, 0X2D74F445} }, +/**/ {{0XBFBE382C, 0XE63F2CDB} }, +/**/ {{0X3FC80236, 0X0E6FE2AE} }, +/**/ {{0XBFA49CD9, 0X0E66AB41} } }, +/**/ {{{0X3FD94002, 0XAA8974CD} }, +/**/ {{0X3FD80CD6, 0XB8AFD880} }, +/**/ {{0X3FEBB09E, 0X4468CCBA} }, +/**/ {{0XBFD2E7FF, 0XEC84E686} }, +/**/ {{0XBFBD7876, 0X88C659E8} }, +/**/ {{0X3FC7E7CC, 0XC2F15460} }, +/**/ {{0XBFA5A120, 0XB410D3ED} } }, +/**/ {{{0X3FD98002, 0XE08EFDEA} }, +/**/ {{0X3FD84425, 0X34856920} }, +/**/ {{0X3FEB9DAB, 0X3F290478} }, +/**/ {{0XBFD2FDD2, 0XBB81EDEF} }, +/**/ {{0XBFBCB9A5, 0X31E68398} }, +/**/ {{0X3FC7CC23, 0XC2DBB11B} }, +/**/ {{0XBFA69F19, 0X98467E78} } }, +/**/ {{{0X3FD9C002, 0X75294B6B} }, +/**/ {{0X3FD87B4D, 0X299F6200} }, +/**/ {{0X3FEB8AA2, 0XDE96CF1F} }, +/**/ {{0XBFD31316, 0X8C4D45D2} }, +/**/ {{0XBFBBFBB7, 0XEDCE4DBA} }, +/**/ {{0X3FC7AF41, 0X8907FEC9} }, +/**/ {{0XBFA796BE, 0X07419F55} } }, +/**/ {{{0X3FDA0002, 0XF3E490EC} }, +/**/ {{0X3FD8B24F, 0XC21A4500} }, +/**/ {{0X3FEB7785, 0X3B5EF7DD} }, +/**/ {{0XBFD327CC, 0X8EAE70CD} }, +/**/ {{0XBFBB3EB3, 0XD49E40DA} }, +/**/ {{0X3FC7912D, 0X4D93F7EA} }, +/**/ {{0XBFA88809, 0X9E21606A} } }, +/**/ {{{0X3FDA3FFF, 0X458461B6} }, +/**/ {{0X3FD8E928, 0X7754D2C0} }, +/**/ {{0X3FEB6454, 0X6A0DAF0E} }, +/**/ {{0XBFD33BF3, 0XDC2A9A3F} }, +/**/ {{0XBFBA82B1, 0X4917D003} }, +/**/ {{0X3FC771F1, 0X7C7566CF} }, +/**/ {{0XBFA972F9, 0X3D700DD8} } }, +/**/ {{{0X3FDA8002, 0X87E12AAE} }, +/**/ {{0X3FD91FE0, 0XA5DFD000} }, +/**/ {{0X3FEB510D, 0XA0D82E05} }, +/**/ {{0XBFD34F90, 0XA76AD312} }, +/**/ {{0XBFB9C798, 0XDEEC35AD} }, +/**/ {{0X3FC75190, 0X8A0EF43E} }, +/**/ {{0XBFAA578B, 0X0872EFC8} } }, +/**/ {{{0X3FDAC001, 0X49A86C84} }, +/**/ {{0X3FD9566E, 0X5C4516E0} }, +/**/ {{0X3FEB3DB4, 0XDD03F6B6} }, +/**/ {{0XBFD362A0, 0X291C1F82} }, +/**/ {{0XBFB90D95, 0X03F6DF60} }, +/**/ {{0X3FC73018, 0X25091E92} }, +/**/ {{0XBFAB35BE, 0X577A022B} } }, +/**/ {{{0X3FDAFFFF, 0X2F4CC2E1} }, +/**/ {{0X3FD98CD4, 0X94226540} }, +/**/ {{0X3FEB2A49, 0X9297200A} }, +/**/ {{0XBFD37524, 0X5153FD01} }, +/**/ {{0XBFB854A3, 0XAE3DE27E} }, +/**/ {{0X3FC70D8E, 0X7EB3F331} }, +/**/ {{0XBFAC0D93, 0XB6AD570E} } }, +/**/ {{{0X3FDB4000, 0XC2F3711E} }, +/**/ {{0X3FD9C317, 0X01CDC4C0} }, +/**/ {{0X3FEB16CA, 0XEA63781B} }, +/**/ {{0XBFD3871F, 0X3665B649} }, +/**/ {{0XBFB79CC0, 0X3F70FBC6} }, +/**/ {{0X3FC6E9F9, 0X061DFC2E} }, +/**/ {{0XBFACDF0C, 0XD837F9C3} } }, +/**/ {{{0X3FDB8000, 0XA777E180} }, +/**/ {{0X3FD9F930, 0XF3748F20} }, +/**/ {{0X3FEB033B, 0X0FB0162A} }, +/**/ {{0XBFD39890, 0X25978CAB} }, +/**/ {{0XBFB6E602, 0X5C765AAB} }, +/**/ {{0X3FC6C562, 0X9C16D678} }, +/**/ {{0XBFADAA2C, 0X92A16EBF} } }, +/**/ {{{0X3FDBBFFD, 0X087E14ED} }, +/**/ {{0X3FDA2F20, 0XBF0DDB00} }, +/**/ {{0X3FEAEF9B, 0X1CCE6E94} }, +/**/ {{0XBFD3A977, 0X8B73E3C3} }, +/**/ {{0XBFB63077, 0X09EFD1CC} }, +/**/ {{0X3FC69FD4, 0X58408D3A} }, +/**/ {{0XBFAE6EF6, 0XD2E48013} } }, +/**/ {{{0X3FDC0000, 0XF0086783} }, +/**/ {{0X3FDA64EF, 0X8D448080} }, +/**/ {{0X3FEADBE8, 0X35990B5A} }, +/**/ {{0XBFD3B9D9, 0X27241B86} }, +/**/ {{0XBFB57C06, 0XC20E4001} }, +/**/ {{0X3FC6794F, 0X90E6C8AB} }, +/**/ {{0XBFAF2D70, 0X9A630A27} } }, +/**/ {{{0X3FDC4001, 0X863E58F8} }, +/**/ {{0X3FDA9A94, 0X1C3A1BA0} }, +/**/ {{0X3FEAC826, 0X35ED7DD2} }, +/**/ {{0XBFD3C9B3, 0X0C075B50} }, +/**/ {{0XBFB4C8D7, 0XA429793C} }, +/**/ {{0X3FC651E2, 0X95903C22} }, +/**/ {{0XBFAFE59F, 0XF0F8B649} } }, +/**/ {{{0X3FDC7FFC, 0X6C62C3BF} }, +/**/ {{0X3FDAD00C, 0X580A5840} }, +/**/ {{0X3FEAB456, 0X62D1D808} }, +/**/ {{0XBFD3D905, 0XACBB06EC} }, +/**/ {{0XBFB416F7, 0X421E42DC} }, +/**/ {{0X3FC62996, 0XE5608EFD} }, +/**/ {{0XBFB04BC5, 0XF14B649A} } }, +/**/ {{{0X3FDCC002, 0X34B2A209} }, +/**/ {{0X3FDB0565, 0XF68F3B40} }, +/**/ {{0X3FEAA074, 0X1E3DC946} }, +/**/ {{0XBFD3E7D5, 0XE2DB674E} }, +/**/ {{0XBFB3663E, 0XA4833FFE} }, +/**/ {{0X3FC60069, 0XC4F0392B} }, +/**/ {{0XBFB0A19E, 0X38B10201} } }, +/**/ {{{0X3FDCFFFC, 0XAAC5F9F9} }, +/**/ {{0X3FDB3A8E, 0X59C45CC0} }, +/**/ {{0X3FEA8C86, 0XD2389C24} }, +/**/ {{0XBFD3F61F, 0X8362B2CB} }, +/**/ {{0XBFB2B6F1, 0XC6C746A6} }, +/**/ {{0X3FC5D671, 0X426D2946} }, +/**/ {{0XBFB0F45D, 0X4981CE75} } }, +/**/ {{{0X3FDD4004, 0X0D800C64} }, +/**/ {{0X3FDB6F99, 0X88AF6580} }, +/**/ {{0X3FEA7887, 0X7498CED2} }, +/**/ {{0XBFD403E8, 0XEF8975C0} }, +/**/ {{0XBFB208D4, 0XBEA81E2B} }, +/**/ {{0X3FC5ABA5, 0X283FFA4E} }, +/**/ {{0XBFB14408, 0X11705130} } }, +/**/ {{{0X3FDD7FFE, 0XB0E64500} }, +/**/ {{0X3FDBA472, 0X2324E140} }, +/**/ {{0X3FEA647E, 0X8C5AD680} }, +/**/ {{0XBFD4112D, 0XA03F042D} }, +/**/ {{0XBFB15C33, 0X9580389C} }, +/**/ {{0X3FC5801E, 0X49D9889E} }, +/**/ {{0XBFB190A3, 0XEF96554F} } }, +/**/ {{{0X3FDDBFFE, 0X2DFCF4EB} }, +/**/ {{0X3FDBD926, 0X9F1D27A0} }, +/**/ {{0X3FEA5067, 0X1AC286CA} }, +/**/ {{0XBFD41DF2, 0X590A4DE1} }, +/**/ {{0XBFB0B0E4, 0X8BD1EFA5} }, +/**/ {{0X3FC553D8, 0X702506D0} }, +/**/ {{0XBFB1DA36, 0XADA415A6} } }, +/**/ {{{0X3FDDFFFD, 0X8A34BBC2} }, +/**/ {{0X3FDC0DB2, 0XC4F7A2C0} }, +/**/ {{0X3FEA3C43, 0X2EF70BB3} }, +/**/ {{0XBFD42A37, 0X16EE647C} }, +/**/ {{0XBFB006FA, 0XDB6270BB} }, +/**/ {{0X3FC526DE, 0X86F08DE6} }, +/**/ {{0XBFB220C6, 0X7E5061FB} } }, +/**/ {{{0X3FDE3FFD, 0XD26415C0} }, +/**/ {{0X3FDC4217, 0X58282940} }, +/**/ {{0X3FEA2812, 0XF391DDCB} }, +/**/ {{0XBFD435FD, 0X18EDDF0A} }, +/**/ {{0XBFAEBCF2, 0X88A589AF} }, +/**/ {{0X3FC4F937, 0X4CF96163} }, +/**/ {{0XBFB26459, 0XF6A18481} } }, +/**/ {{{0X3FDE7FFF, 0X37F72672} }, +/**/ {{0X3FDC7654, 0X67AA3DC0} }, +/**/ {{0X3FEA13D6, 0XD6CE86B3} }, +/**/ {{0XBFD44145, 0X74037E91} }, +/**/ {{0XBFAD6EC9, 0X3B2CC445} }, +/**/ {{0X3FC4CAEA, 0X0564F101} }, +/**/ {{0XBFB2A4F8, 0X0C49CD64} } }, +/**/ {{{0X3FDEBFFD, 0XA11BC00F} }, +/**/ {{0X3FDCAA66, 0X85E23660} }, +/**/ {{0X3FE9FF90, 0XA25C2396} }, +/**/ {{0XBFD44C10, 0X8A64724F} }, +/**/ {{0XBFAC2399, 0X2F871E82} }, +/**/ {{0X3FC49C01, 0X0AFBFB85} }, +/**/ {{0XBFB2E2A8, 0X0F0FF3FE} } }, +/**/ {{{0X3FDEFFFF, 0X3313756D} }, +/**/ {{0X3FDCDE52, 0X9D30CC20} }, +/**/ {{0X3FE9EB3E, 0XDFF9491F} }, +/**/ {{0XBFD45660, 0X7E6ABAAE} }, +/**/ {{0XBFAADB4C, 0X3E8AA98D} }, +/**/ {{0X3FC46C7F, 0X25D8FF7D} }, +/**/ {{0XBFB31D71, 0XA71D448D} } }, +/**/ {{{0X3FDF4001, 0X914B856E} }, +/**/ {{0X3FDD1216, 0XAAC1BB20} }, +/**/ {{0X3FE9D6E2, 0XC9BC4315} }, +/**/ {{0XBFD46036, 0X004E7E91} }, +/**/ {{0XBFA995F7, 0XFB901F89} }, +/**/ {{0X3FC43C6D, 0X3F5BE04A} }, +/**/ {{0XBFB3555C, 0XCE8ABF92} } }, +/**/ {{{0X3FDF8003, 0XCD144428} }, +/**/ {{0X3FDD45B1, 0XD93E9640} }, +/**/ {{0X3FE9C27D, 0X256FDFEB} }, +/**/ {{0XBFD46992, 0X09F7C145} }, +/**/ {{0XBFA853A9, 0XED521174} }, +/**/ {{0X3FC40BD3, 0X2B27751F} }, +/**/ {{0XBFB38A71, 0XCFA5C5F2} } }, +/**/ {{{0X3FDFC002, 0X00545BD9} }, +/**/ {{0X3FDD7920, 0XF536D960} }, +/**/ {{0X3FE9AE0F, 0XAAE99EA5} }, +/**/ {{0XBFD47275, 0X38DD66F4} }, +/**/ {{0XBFA7147D, 0XB5484F74} }, +/**/ {{0X3FC3DABA, 0XF8EFC373} }, +/**/ {{0XBFB3BCB9, 0X3EA6B864} } }, +/**/ {{{0X3FDFFFFB, 0XDA6F2AA8} }, +/**/ {{0X3FDDAC63, 0XB420FAA0} }, +/**/ {{0X3FE9999A, 0XED4D0CAB} }, +/**/ {{0XBFD47AE0, 0XBFCC6072} }, +/**/ {{0XBFA5D87C, 0X25BF7A4A} }, +/**/ {{0X3FC3A92B, 0XF5999EE5} }, +/**/ {{0XBFB3EC3B, 0XF7F09D08} } }, +/**/ {{{0X3FE01FFF, 0XA65118C8} }, +/**/ {{0X3FDDDF85, 0X2BF70C00} }, +/**/ {{0X3FE9851A, 0XECD72AE5} }, +/**/ {{0XBFD482D7, 0X8F5794C5} }, +/**/ {{0XBFA49F68, 0X2E4A020B} }, +/**/ {{0X3FC37722, 0X25A156DA} }, +/**/ {{0XBFB41903, 0X19F58064} } }, +/**/ {{{0X3FE04001, 0X9C0B0556} }, +/**/ {{0X3FDE127D, 0XFA2BA200} }, +/**/ {{0X3FE97093, 0X08C17A55} }, +/**/ {{0XBFD48A59, 0X957A7EFD} }, +/**/ {{0XBFA36976, 0X2648F2BB} }, +/**/ {{0X3FC344AB, 0X592569B1} }, +/**/ {{0XBFB44318, 0X03752DDB} } }, +/**/ {{{0X3FE05FFF, 0XC24501DB} }, +/**/ {{0X3FDE4547, 0XA495BCC0} }, +/**/ {{0X3FE95C06, 0X4F225B79} }, +/**/ {{0XBFD49167, 0X2163F5B8} }, +/**/ {{0XBFA236D3, 0X4B79B89F} }, +/**/ {{0X3FC311D4, 0XB530B7BE} }, +/**/ {{0XBFB46A84, 0X4D931476} } }, +/**/ {{{0X3FE07FFE, 0X865125FC} }, +/**/ {{0X3FDE77E9, 0X2A5FAD60} }, +/**/ {{0X3FE94772, 0X5C13B0EA} }, +/**/ {{0XBFD49802, 0X6F33ABCA} }, +/**/ {{0XBFA1075A, 0XDE947C6B} }, +/**/ {{0X3FC2DE9D, 0XD8D5E01B} }, +/**/ {{0XBFB48F51, 0XCA17CA60} } }, +/**/ {{{0X3FE0A002, 0X107EAC25} }, +/**/ {{0X3FDEAA69, 0X08243180} }, +/**/ {{0X3FE932D4, 0XF339824B} }, +/**/ {{0XBFD49E2D, 0X7145F475} }, +/**/ {{0XBF9FB5D8, 0X00571424} }, +/**/ {{0X3FC2AB06, 0X85D1CF84} }, +/**/ {{0XBFB4B18A, 0X7DBBBABE} } }, +/**/ {{{0X3FE0BFFF, 0X7376E5D4} }, +/**/ {{0X3FDEDCB5, 0XF79FF560} }, +/**/ {{0X3FE91E35, 0X8EE1B492} }, +/**/ {{0XBFD4A3E7, 0X49498453} }, +/**/ {{0XBF9D63E4, 0XBE685C6F} }, +/**/ {{0X3FC27726, 0XC4B1F032} }, +/**/ {{0XBFB4D138, 0X9E6ECC3A} } }, +/**/ {{{0X3FE0DFFE, 0X1715EE2E} }, +/**/ {{0X3FDF0EDB, 0X9BE1BB80} }, +/**/ {{0X3FE9098F, 0XD993BD60} }, +/**/ {{0XBFD4A932, 0X9B84E907} }, +/**/ {{0XBF9B185A, 0XE07DBA5E} }, +/**/ {{0X3FC242F8, 0XF2D7A804} }, +/**/ {{0XBFB4EE66, 0X8DDAA340} } }, +/**/ {{{0X3FE10001, 0X7F3D776C} }, +/**/ {{0X3FDF40DF, 0X6119E100} }, +/**/ {{0X3FE8F4E1, 0XFB44BCFB} }, +/**/ {{0XBFD4AE11, 0X16E3467E} }, +/**/ {{0XBF98D304, 0XCF368422} }, +/**/ {{0X3FC20E7D, 0X736708AE} }, +/**/ {{0XBFB5091E, 0XD7B3658D} } }, +/**/ {{{0X3FE11FFE, 0XFD8C7B65} }, +/**/ {{0X3FDF72B0, 0X8FD21560} }, +/**/ {{0X3FE8E033, 0X4770FB0A} }, +/**/ {{0XBFD4B282, 0X5C0F6783} }, +/**/ {{0XBF9694AC, 0X7FFE0364} }, +/**/ {{0X3FC1D9CB, 0XE529BF4C} }, +/**/ {{0XBFB5216C, 0X2C73E5F0} } }, +/**/ {{{0X3FE14000, 0XAFA3EE71} }, +/**/ {{0X3FDFA45E, 0XE3324D60} }, +/**/ {{0X3FE8CB7D, 0X9FF684DF} }, +/**/ {{0XBFD4B689, 0X17ADD34D} }, +/**/ {{0XBF945CA3, 0X67276E70} }, +/**/ {{0X3FC1A4D9, 0XA1FBF3B1} }, +/**/ {{0XBFB53759, 0X5FBA2374} } }, +/**/ {{{0X3FE15FFF, 0X73336187} }, +/**/ {{0X3FDFD5DF, 0X3DE48D00} }, +/**/ {{0X3FE8B6C6, 0X0CBE3546} }, +/**/ {{0XBFD4BA25, 0X9B291BCB} }, +/**/ {{0XBF922B6F, 0X5FB712CC} }, +/**/ {{0X3FC16FB8, 0X55E28B0B} }, +/**/ {{0XBFB54AF1, 0X633F423C} } }, +/**/ {{{0X3FE17FFF, 0X6C447B82} }, +/**/ {{0X3FE0039C, 0X0208ECC0} }, +/**/ {{0X3FE8A20A, 0X48F15926} }, +/**/ {{0XBFD4BD59, 0XA5808AC3} }, +/**/ {{0XBF9000CD, 0X5EEF6F2A} }, +/**/ {{0X3FC13A66, 0XEBE54AA7} }, +/**/ {{0XBFB55C3F, 0X45420CE4} } }, +/**/ {{{0X3FE19FFF, 0XAE932B61} }, +/**/ {{0X3FE01C33, 0XE0091BC0} }, +/**/ {{0X3FE88D4B, 0X55664E00} }, +/**/ {{0XBFD4C026, 0X579F5ABB} }, +/**/ {{0XBF8BB9A6, 0X8797C32A} }, +/**/ {{0X3FC104EC, 0X95D4F64E} }, +/**/ {{0XBFB56B4E, 0X2BBC325E} } }, +/**/ {{{0X3FE1BFFF, 0XBA12AE50} }, +/**/ {{0X3FE034B6, 0XD3ABA020} }, +/**/ {{0X3FE87889, 0XEBDCCF04} }, +/**/ {{0XBFD4C28C, 0XE6D463C1} }, +/**/ {{0XBF877F1C, 0XB36211FC} }, +/**/ {{0X3FC0CF4F, 0XB90B11E7} }, +/**/ {{0XBFB57829, 0X52DCBE1A} } }, +/**/ {{{0X3FE1E001, 0X4B459E41} }, +/**/ {{0X3FE04D26, 0X2DC05800} }, +/**/ {{0X3FE863C5, 0X51625B6A} }, +/**/ {{0XBFD4C48E, 0XAFFDD399} }, +/**/ {{0XBF8351CB, 0X603059CA} }, +/**/ {{0X3FC09992, 0XDE65D0D9} }, +/**/ {{0XBFB582DC, 0X087BB367} } }, +/**/ {{{0X3FE20000, 0X32306F33} }, +/**/ {{0X3FE0657E, 0XBAFB6CE0} }, +/**/ {{0X3FE84F00, 0XA1E2EEC3} }, +/**/ {{0XBFD4C62C, 0XB79EC8C6} }, +/**/ {{0XBF7E6488, 0XD95DE8D1} }, +/**/ {{0X3FC063C2, 0X661DF241} }, +/**/ {{0XBFB58B71, 0XAAA63BAD} } }, +/**/ {{{0X3FE22000, 0XD30A486C} }, +/**/ {{0X3FE07DC3, 0XD2165080} }, +/**/ {{0X3FE83A39, 0X66B3E5BF} }, +/**/ {{0XBFD4C768, 0X7DE04DEE} }, +/**/ {{0XBF763FF7, 0X800F052F} }, +/**/ {{0X3FC02DDC, 0X28F35EDD} }, +/**/ {{0XBFB591F5, 0XA351CF91} } }, +/**/ {{{0X3FE23FFE, 0X215E03FC} }, +/**/ {{0X3FE095F1, 0X9F380A00} }, +/**/ {{0X3FE82573, 0X48BE5F3F} }, +/**/ {{0XBFD4C843, 0X1B793F77} }, +/**/ {{0XBF6C6E63, 0X625993B8} }, +/**/ {{0X3FBFEFDB, 0X8C5E4B3B} }, +/**/ {{0XBFB59673, 0X66FE9CA7} } }, +/**/ {{{0X3FE26000, 0X6833D65D} }, +/**/ {{0X3FE0AE0E, 0X6496A8C0} }, +/**/ {{0X3FE810A9, 0X45B44AA3} }, +/**/ {{0XBFD4C8BE, 0X055B407A} }, +/**/ {{0XBF5920A7, 0XAE83F0A4} }, +/**/ {{0X3FBF83DC, 0X860A6A5E} }, +/**/ {{0XBFB598F6, 0X70D98EE7} } }, +/**/ {{{0X3FE28000, 0XE82D4D50} }, +/**/ {{0X3FE0C615, 0X095F5300} }, +/**/ {{0X3FE7FBE0, 0X1E9337B7} }, +/**/ {{0XBFD4C8DA, 0X573C6F6A} }, +/**/ {{0X3F38B6C7, 0XC50F565D} }, +/**/ {{0X3FBF17DB, 0XC9C4B6CA} }, +/**/ {{0XBFB5998A, 0X45D6DAE0} } }, +/**/ {{{0X3FE29FFF, 0X203B6A0B} }, +/**/ {{0X3FE0DE05, 0X30852720} }, +/**/ {{0X3FE7E718, 0X8520538D} }, +/**/ {{0XBFD4C899, 0X668C6963} }, +/**/ {{0X3F6286EC, 0XBECA8AB0} }, +/**/ {{0X3FBEABE4, 0X9B6AC5BD} }, +/**/ {{0XBFB5983A, 0X575A9684} } }, +/**/ {{{0X3FE2C001, 0XE91A9D93} }, +/**/ {{0X3FE0F5E3, 0XF7817A20} }, +/**/ {{0X3FE7D24E, 0X63A45D97} }, +/**/ {{0XBFD4C7FC, 0X5F83C46D} }, +/**/ {{0X3F70E199, 0X5D9C800A} }, +/**/ {{0X3FBE3FE9, 0X3721A8E0} }, +/**/ {{0XBFB59512, 0X377DA840} } }, +/**/ {{{0X3FE2DFFF, 0XC6FB4948} }, +/**/ {{0X3FE10DAA, 0X4CE36040} }, +/**/ {{0X3FE7BD88, 0X3E39011F} }, +/**/ {{0XBFD4C704, 0XB5EAE11F} }, +/**/ {{0X3F786398, 0X192C622B} }, +/**/ {{0X3FBDD412, 0XB62BA357} }, +/**/ {{0XBFB5901D, 0X5F0E020E} } }, +/**/ {{{0X3FE2FFFF, 0X39CB4EED} }, +/**/ {{0X3FE1255D, 0X0970AD60} }, +/**/ {{0X3FE7A8C2, 0X365B7A9B} }, +/**/ {{0XBFD4C5B3, 0X8925F532} }, +/**/ {{0X3F7FCB03, 0X785E3070} }, +/**/ {{0X3FBD6854, 0X0EEDF3B3} }, +/**/ {{0XBFB58967, 0X479C252A} } }, +/**/ {{{0X3FE31FFE, 0X002E31CB} }, +/**/ {{0X3FE13CFA, 0X81FD3780} }, +/**/ {{0X3FE793FE, 0X1BBE9667} }, +/**/ {{0XBFD4C40A, 0X3046F4C7} }, +/**/ {{0X3F838BAE, 0X8F5E6BF1} }, +/**/ {{0X3FBCFCBD, 0X83775C98} }, +/**/ {{0XBFB580FB, 0X62E887AB} } }, +/**/ {{{0X3FE34000, 0XEDC7BFFD} }, +/**/ {{0X3FE15486, 0X44D05200} }, +/**/ {{0X3FE77F39, 0X244A1DA5} }, +/**/ {{0XBFD4C209, 0X9FB764C1} }, +/**/ {{0X3F8724E2, 0X851B0BE5} }, +/**/ {{0X3FBC9147, 0X507C76E0} }, +/**/ {{0XBFB576E5, 0X19C7F0AB} } }, +/**/ {{{0X3FE36001, 0XCE042830} }, +/**/ {{0X3FE16BFB, 0XC1656AE0} }, +/**/ {{0X3FE76A77, 0XAD3B2B77} }, +/**/ {{0XBFD4BFB3, 0X74AAC296} }, +/**/ {{0X3F8AB070, 0X05B229C2} }, +/**/ {{0X3FBC260E, 0X87DCA54B} }, +/**/ {{0XBFB56B2F, 0XC90DF763} } }, +/**/ {{{0X3FE37FFE, 0X89B8FC54} }, +/**/ {{0X3FE18359, 0X77D0BA80} }, +/**/ {{0X3FE755BB, 0X660CAA3D} }, +/**/ {{0XBFD4BD09, 0X308BB975} }, +/**/ {{0X3F8E2E26, 0XFE0A1240} }, +/**/ {{0X3FBBBB22, 0X18790F26} }, +/**/ {{0XBFB55DE6, 0XC094F3DA} } }, +/**/ {{{0X3FE3A001, 0X9B4DA842} }, +/**/ {{0X3FE19AA7, 0X100CD140} }, +/**/ {{0X3FE740FD, 0XD801F889} }, +/**/ {{0XBFD4BA0B, 0X2C32C656} }, +/**/ {{0X3F90CF99, 0X8ECA44A2} }, +/**/ {{0X3FBB5066, 0XC9863443} }, +/**/ {{0XBFB54F15, 0X406672B5} } }, +/**/ {{{0X3FE3C000, 0XCE6B63E8} }, +/**/ {{0X3FE1B1DD, 0X1D0B0AE0} }, +/**/ {{0X3FE72C45, 0XF28670E6} }, +/**/ {{0XBFD4B6BB, 0X92422E2E} }, +/**/ {{0X3F928141, 0XA0D32146} }, +/**/ {{0X3FBAE606, 0X37452321} }, +/**/ {{0XBFB53EC6, 0X77D91F56} } }, +/**/ {{{0X3FE3DFFF, 0X114A2607} }, +/**/ {{0X3FE1C8FD, 0XC6FF6F20} }, +/**/ {{0X3FE71792, 0X206847A7} }, +/**/ {{0XBFD4B31B, 0X669BD306} }, +/**/ {{0X3F942C3A, 0X04FFD28A} }, +/**/ {{0X3FBA7BFD, 0XE7FC0825} }, +/**/ {{0XBFB52D05, 0X82F471BA} } }, +/**/ {{{0X3FE3FFFF, 0XC1DA9B7D} }, +/**/ {{0X3FE1E00B, 0X7F2E8840} }, +/**/ {{0X3FE702E0, 0X84371133} }, +/**/ {{0XBFD4AF2B, 0X8012FBE4} }, +/**/ {{0X3F95D0B4, 0XBFC47F4B} }, +/**/ {{0X3FBA1249, 0XD80AB6C5} }, +/**/ {{0XBFB519DD, 0X69A4108D} } }, +/**/ {{{0X3FE41FFE, 0XE11D9C33} }, +/**/ {{0X3FE1F703, 0X67C3EC20} }, +/**/ {{0X3FE6EE34, 0X026A76A0} }, +/**/ {{0XBFD4AAED, 0X96514B12} }, +/**/ {{0X3F976E83, 0X07BA2905} }, +/**/ {{0X3FB9A8FE, 0X261A1221} }, +/**/ {{0XBFB50559, 0X1D552BA0} } }, +/**/ {{{0X3FE43FFF, 0XFA174676} }, +/**/ {{0X3FE20DE8, 0X0FAFF860} }, +/**/ {{0X3FE6D98A, 0X9EA6D162} }, +/**/ {{0XBFD4A662, 0X6B927B3B} }, +/**/ {{0X3F9905D8, 0XF84ADBB0} }, +/**/ {{0X3FB94015, 0XDD484DB5} }, +/**/ {{0XBFB4EF83, 0X783EEF44} } }, +/**/ {{{0X3FE45FFF, 0X0D457FA4} }, +/**/ {{0X3FE224B6, 0X9F675300} }, +/**/ {{0X3FE6C4E7, 0X3A093351} }, +/**/ {{0XBFD4A18B, 0XCBF2BFF8} }, +/**/ {{0X3F9A968A, 0X84BB8C16} }, +/**/ {{0X3FB8D7A4, 0X93FBB975} }, +/**/ {{0XBFB4D867, 0X3B37E4FB} } }, +/**/ {{{0X3FE47FFE, 0X8F910E57} }, +/**/ {{0X3FE23B70, 0XDD92B840} }, +/**/ {{0X3FE6B048, 0X89B04359} }, +/**/ {{0XBFD49C6A, 0X974B07FF} }, +/**/ {{0X3F9C20BE, 0X25F20251} }, +/**/ {{0X3FB86FA8, 0X82E9673D} }, +/**/ {{0XBFB4C00F, 0X0D12F550} } }, +/**/ {{{0X3FE4A001, 0X7323FC6B} }, +/**/ {{0X3FE25218, 0XE34E3420} }, +/**/ {{0X3FE69BAC, 0XF277FE27} }, +/**/ {{0XBFD496FF, 0X7F856ABA} }, +/**/ {{0X3F9DA49E, 0X9928150C} }, +/**/ {{0X3FB8081E, 0X3EB66A26} }, +/**/ {{0XBFB4A685, 0X78AB06C5} } }, +/**/ {{{0X3FE4C000, 0XB1BF0500} }, +/**/ {{0X3FE268A9, 0XBD8B2C80} }, +/**/ {{0X3FE68719, 0X42ABBD42} }, +/**/ {{0XBFD4914C, 0XEC74E64A} }, +/**/ {{0X3F9F21DE, 0XD0C3EEEC} }, +/**/ {{0X3FB7A122, 0X5B30AA05} }, +/**/ {{0XBFB48BD4, 0XEC53EF43} } }, +/**/ {{{0X3FE4E001, 0X1D07207B} }, +/**/ {{0X3FE27F26, 0XDA64F7A0} }, +/**/ {{0X3FE6728A, 0XA7CFBEB2} }, +/**/ {{0XBFD48B53, 0X3FCBB247} }, +/**/ {{0X3FA04C60, 0XA7354A41} }, +/**/ {{0X3FB73AAA, 0XEFF6F27A} }, +/**/ {{0XBFB47007, 0XB81A6BB2} } }, +/**/ {{{0X3FE4FFFE, 0X5F36EB46} }, +/**/ {{0X3FE2958D, 0X35DDD180} }, +/**/ {{0X3FE65E04, 0X307B6AF3} }, +/**/ {{0XBFD48514, 0X828BB6E6} }, +/**/ {{0X3FA1048E, 0X48993ED9} }, +/**/ {{0X3FB6D4CB, 0X468D7C59} }, +/**/ {{0XBFB45328, 0X0D484989} } }, +/**/ {{{0X3FE52001, 0X2AFDF759} }, +/**/ {{0X3FE2ABE2, 0XEB1C3280} }, +/**/ {{0X3FE64980, 0X8DC5DAAD} }, +/**/ {{0XBFD47E90, 0X2C11E3B7} }, +/**/ {{0X3FA1B9AE, 0X88E1B343} }, +/**/ {{0X3FB66F6C, 0XFF4501BF} }, +/**/ {{0XBFB4353F, 0XFCD6B8DE} } }, +/**/ {{{0X3FE54001, 0XDFDB2423} }, +/**/ {{0X3FE2C222, 0XAB0402C0} }, +/**/ {{0X3FE63504, 0XE7E657FB} }, +/**/ {{0XBFD477C8, 0XEEE53FA9} }, +/**/ {{0X3FA26B9A, 0X696CD845} }, +/**/ {{0X3FB60AAD, 0X6A3AA6EF} }, +/**/ {{0XBFB41659, 0X7704E1F4} } }, +/**/ {{{0X3FE55FFE, 0X72D2A74F} }, +/**/ {{0X3FE2D84B, 0X16BE7240} }, +/**/ {{0X3FE62092, 0XCE54AEDE} }, +/**/ {{0XBFD470C0, 0X7B764156} }, +/**/ {{0X3FA31A4C, 0X4D9ABEE7} }, +/**/ {{0X3FB5A697, 0XA899A63D} }, +/**/ {{0XBFB3F67E, 0X49FA7FB1} } }, +/**/ {{{0X3FE58000, 0XEE716C33} }, +/**/ {{0X3FE2EE63, 0X284F3FE0} }, +/**/ {{0X3FE60C24, 0X181C5720} }, +/**/ {{0XBFD46975, 0XC383B0C1} }, +/**/ {{0X3FA3C5FF, 0XC40A1A5A} }, +/**/ {{0X3FB54311, 0X0B7B3B72} }, +/**/ {{0XBFB3D5B8, 0X21700401} } }, +/**/ {{{0X3FE59FFF, 0X9825CD2A} }, +/**/ {{0X3FE30464, 0X2DEFCF40} }, +/**/ {{0X3FE5F7BF, 0X3C14A317} }, +/**/ {{0XBFD461EC, 0X227A4CDE} }, +/**/ {{0X3FA46E85, 0X6DA8D837} }, +/**/ {{0X3FB4E03C, 0X6162F4C8} }, +/**/ {{0XBFB3B410, 0X857F5976} } }, +/**/ {{{0X3FE5BFFD, 0XFE2A42CD} }, +/**/ {{0X3FE31A50, 0XA5110DC0} }, +/**/ {{0X3FE5E362, 0X33CF1268} }, +/**/ {{0XBFD45A23, 0XF68B7DBC} }, +/**/ {{0X3FA513F5, 0XDE40F0E9} }, +/**/ {{0X3FB47E12, 0XDE05901E} }, +/**/ {{0XBFB39190, 0XDA5CABB5} } }, +/**/ {{{0X3FE5E000, 0X57330799} }, +/**/ {{0X3FE3302B, 0X75253480} }, +/**/ {{0X3FE5CF0A, 0X901DA45A} }, +/**/ {{0XBFD4521D, 0X552754CF} }, +/**/ {{0X3FA5B66B, 0XBBF000BB} }, +/**/ {{0X3FB41C8B, 0XD2BAF7B2} }, +/**/ {{0XBFB36E42, 0X5F53241A} } }, +/**/ {{{0X3FE60001, 0X4D6055DA} }, +/**/ {{0X3FE345F0, 0XFF2EDA60} }, +/**/ {{0X3FE5BABB, 0XF2EA5900} }, +/**/ {{0XBFD449DA, 0XB2008754} }, +/**/ {{0X3FA655D1, 0X18F56FBB} }, +/**/ {{0X3FB3BBBB, 0X89A0C1B2} }, +/**/ {{0XBFB34A2E, 0X2E8D60FC} } }, +/**/ {{{0X3FE62001, 0X2C3809CB} }, +/**/ {{0X3FE35BA1, 0X812D5040} }, +/**/ {{0X3FE5A676, 0X671E49E9} }, +/**/ {{0XBFD4415D, 0X230E6216} }, +/**/ {{0X3FA6F22D, 0X6B05C7F7} }, +/**/ {{0X3FB35BA4, 0XCFE6B72B} }, +/**/ {{0XBFB3255D, 0X3C3BFA3B} } }, +/**/ {{{0X3FE64000, 0X87B47ECC} }, +/**/ {{0X3FE3713D, 0X69715580} }, +/**/ {{0X3FE59239, 0XC8FB0E69} }, +/**/ {{0XBFD438A5, 0XA5BD1F6E} }, +/**/ {{0X3FA78B89, 0X7F9B13CF} }, +/**/ {{0X3FB2FC49, 0X74F57C8F} }, +/**/ {{0XBFB2FFD8, 0X566CAACA} } }, +/**/ {{{0X3FE66000, 0XA746397F} }, +/**/ {{0X3FE386C5, 0X9D968940} }, +/**/ {{0X3FE57E05, 0X83073C58} }, +/**/ {{0XBFD42FB4, 0XFE3D0083} }, +/**/ {{0X3FA821F1, 0X4B9E1EEB} }, +/**/ {{0X3FB29DA9, 0X1952EE82} }, +/**/ {{0XBFB2D9A8, 0X245866A8} } }, +/**/ {{{0X3FE68000, 0XE4E3094B} }, +/**/ {{0X3FE39C39, 0XB5FE3900} }, +/**/ {{0X3FE569DA, 0X36DD131E} }, +/**/ {{0XBFD4268C, 0X74778FE0} }, +/**/ {{0X3FA8B567, 0X9AB0310F} }, +/**/ {{0X3FB23FC8, 0XF2E43205} }, +/**/ {{0XBFB2B2D5, 0X26483573} } }, +/**/ {{{0X3FE6A001, 0XE2E37787} }, +/**/ {{0X3FE3B19A, 0X27D52620} }, +/**/ {{0X3FE555B7, 0XB5D865CD} }, +/**/ {{0XBFD41D2C, 0XF1600CD3} }, +/**/ {{0X3FA945F5, 0X4B79E859} }, +/**/ {{0X3FB1E2AA, 0X46A0B02D} }, +/**/ {{0XBFB28B67, 0XB508A35B} } }, +/**/ {{{0X3FE6BFFE, 0X0DF4BBFB} }, +/**/ {{0X3FE3C6E3, 0X46F2B6E0} }, +/**/ {{0X3FE541A1, 0XB658AFBE} }, +/**/ {{0XBFD41399, 0X388DA137} }, +/**/ {{0X3FA9D387, 0XE5B3C2BA} }, +/**/ {{0X3FB18660, 0X173397F9} }, +/**/ {{0XBFB26368, 0X01DB4945} } }, +/**/ {{{0X3FE6DFFF, 0XEA406CEA} }, +/**/ {{0X3FE3DC1C, 0X1BB3D400} }, +/**/ {{0X3FE52D91, 0XD33FFE8E} }, +/**/ {{0XBFD409CF, 0X36BCFFE9} }, +/**/ {{0X3FAA5E54, 0X174405AF} }, +/**/ {{0X3FB12ACE, 0XDC041806} }, +/**/ {{0XBFB23ADE, 0X160D6557} } }, +/**/ {{{0X3FE70000, 0XED01EA65} }, +/**/ {{0X3FE3F140, 0X54E51400} }, +/**/ {{0X3FE5198C, 0X5C8B9119} }, +/**/ {{0XBFD3FFD1, 0XF2EA4FF7} }, +/**/ {{0X3FAAE643, 0X308C81CD} }, +/**/ {{0X3FB0D00C, 0X1960AAF7} }, +/**/ {{0XBFB211D1, 0XD2F50D25} } }, +/**/ {{{0X3FE72002, 0X00D515EB} }, +/**/ {{0X3FE40650, 0X983BB3E0} }, +/**/ {{0X3FE50590, 0XF2175C71} }, +/**/ {{0XBFD3F5A2, 0X361BB15C} }, +/**/ {{0X3FAB6B5F, 0X9B536AFC} }, +/**/ {{0X3FB07617, 0XA731624D} }, +/**/ {{0XBFB1E84A, 0XF1A8C054} } }, +/**/ {{{0X3FE74001, 0X1323DE6D} }, +/**/ {{0X3FE41B4B, 0X9483E720} }, +/**/ {{0X3FE4F1A1, 0X1027BA01} }, +/**/ {{0XBFD3EB41, 0XBB978C8F} }, +/**/ {{0X3FABEDA7, 0X7765626A} }, +/**/ {{0X3FB01CF9, 0X97F58C8A} }, +/**/ {{0XBFB1BE51, 0X03074348} } }, +/**/ {{{0X3FE75FFF, 0X25CAB4CA} }, +/**/ {{0X3FE43032, 0X0001D5C0} }, +/**/ {{0X3FE4DDBC, 0X4573FB6C} }, +/**/ {{0XBFD3E0B1, 0X41F21D2A} }, +/**/ {{0X3FAC6D25, 0XD1BDA00F} }, +/**/ {{0X3FAF8962, 0X5935EE68} }, +/**/ {{0XBFB193EB, 0X6F8E0689} } }, +/**/ {{{0X3FE77FFE, 0X90921F76} }, +/**/ {{0X3FE44505, 0X6CC6AF00} }, +/**/ {{0X3FE4C9E1, 0X4CFFBDAE} }, +/**/ {{0XBFD3D5F1, 0X0B247EC4} }, +/**/ {{0X3FACE9EA, 0X943F4516} }, +/**/ {{0X3FAEDA73, 0XF24A8AF1} }, +/**/ {{0XBFB16921, 0X776AAC42} } }, +/**/ {{{0X3FE79FFE, 0X47B2F83B} }, +/**/ {{0X3FE459C5, 0X35C19F20} }, +/**/ {{0X3FE4B610, 0XFC8F20BD} }, +/**/ {{0XBFD3CB02, 0X73DF2A0D} }, +/**/ {{0X3FAD63F8, 0X23C5D6DE} }, +/**/ {{0X3FAE2D31, 0X9C5116AB} }, +/**/ {{0XBFB13DFA, 0X326E2972} } }, +/**/ {{{0X3FE7BFFF, 0X2F1E79A9} }, +/**/ {{0X3FE46E71, 0XF84DF5C0} }, +/**/ {{0X3FE4A24A, 0XF586B1BD} }, +/**/ {{0XBFD3BFE6, 0X2EF81E5B} }, +/**/ {{0X3FADDB58, 0X738896F0} }, +/**/ {{0X3FAD819A, 0X2515DE78} }, +/**/ {{0XBFB1127C, 0X9026FDD0} } }, +/**/ {{{0X3FE7E001, 0X973C8D05} }, +/**/ {{0X3FE4830B, 0XF0FB9580} }, +/**/ {{0X3FE48E8F, 0X3466B08E} }, +/**/ {{0XBFD3B49D, 0X1C53A01A} }, +/**/ {{0X3FAE5013, 0X25103EED} }, +/**/ {{0X3FACD7AF, 0X5290F4AF} }, +/**/ {{0XBFB0E6AF, 0X57EF003B} } }, +/**/ {{{0X3FE7FFFF, 0X69EFC092} }, +/**/ {{0X3FE4978F, 0X431C3800} }, +/**/ {{0X3FE47AE1, 0XA3E1064A} }, +/**/ {{0XBFD3A92A, 0X666C50C4} }, +/**/ {{0X3FAEC219, 0X4098A4BE} }, +/**/ {{0X3FAC2F94, 0X2EEE57E0} }, +/**/ {{0XBFB0BA99, 0X290D5730} } }, +/**/ {{{0X3FE82001, 0XC52B5232} }, +/**/ {{0X3FE4AC01, 0XD2B83340} }, +/**/ {{0X3FE4673C, 0XD31B7CF5} }, +/**/ {{0XBFD39D8B, 0XC67D05F0} }, +/**/ {{0X3FAF3192, 0X2A81B5D5} }, +/**/ {{0X3FAB891B, 0X8AA20E90} }, +/**/ {{0XBFB08E40, 0X7ADCEFD6} } }, +/**/ {{{0X3FE84000, 0XBD4D4E3F} }, +/**/ {{0X3FE4C05E, 0X9B1DBC60} }, +/**/ {{0X3FE453A5, 0XC8D629F7} }, +/**/ {{0XBFD391C5, 0X13E9EF47} }, +/**/ {{0X3FAF9E69, 0X17383D6B} }, +/**/ {{0X3FAAE471, 0X278E21B9} }, +/**/ {{0XBFB061AB, 0X9CF54D10} } }, +/**/ {{{0X3FE86001, 0X8C869CBD} }, +/**/ {{0X3FE4D4A8, 0XFD2285A0} }, +/**/ {{0X3FE44019, 0X79B82471} }, +/**/ {{0XBFD385D5, 0X5C3E2929} }, +/**/ {{0X3FB0045B, 0X7B2C8FF2} }, +/**/ {{0X3FAA417C, 0X39D7CA4F} }, +/**/ {{0XBFB034E0, 0XB767B7D4} } }, +/**/ {{{0X3FE87FFE, 0XB5DB3710} }, +/**/ {{0X3FE4E8DD, 0X8B93BCA0} }, +/**/ {{0X3FE42C9B, 0X66C6E6BF} }, +/**/ {{0XBFD379BF, 0XA32EE2A1} }, +/**/ {{0X3FB03838, 0X6187FE0F} }, +/**/ {{0X3FA9A05A, 0X8B3A0B33} }, +/**/ {{0XBFB007E5, 0XCAEE03A9} } }, +/**/ {{{0X3FE8A000, 0X863C77E3} }, +/**/ {{0X3FE4FD01, 0X8FCD1E80} }, +/**/ {{0X3FE41926, 0XA8A8093F} }, +/**/ {{0XBFD36D81, 0XB5EE344D} }, +/**/ {{0X3FB06ADC, 0X2841F292} }, +/**/ {{0X3FA900E4, 0X2484560B} }, +/**/ {{0XBFAFB581, 0X62792F0A} } }, +/**/ {{{0X3FE8BFFF, 0X0ED982AF} }, +/**/ {{0X3FE51110, 0X16E28AC0} }, +/**/ {{0X3FE405C0, 0X389112EE} }, +/**/ {{0XBFD3611F, 0X89D38DC7} }, +/**/ {{0X3FB09C3D, 0XB450B9F7} }, +/**/ {{0X3FA86342, 0X312D0C4A} }, +/**/ {{0XBFAF5AEE, 0X3A6CA012} } }, +/**/ {{{0X3FE8E000, 0X02C3AEAE} }, +/**/ {{0X3FE5250C, 0XC0AB0A40} }, +/**/ {{0X3FE3F264, 0XC65593C5} }, +/**/ {{0XBFD35497, 0XD82BE900} }, +/**/ {{0X3FB0CC69, 0X68546D39} }, +/**/ {{0X3FA7C759, 0XDB8499FD} }, +/**/ {{0XBFAF001D, 0X36A32337} } }, +/**/ {{{0X3FE90000, 0XECBFA97B} }, +/**/ {{0X3FE538F6, 0X0E8D4EE0} }, +/**/ {{0X3FE3DF15, 0XF4119333} }, +/**/ {{0XBFD347EC, 0X7D2149F4} }, +/**/ {{0X3FB0FB5E, 0XFA921D3C} }, +/**/ {{0X3FA72D38, 0X69693E89} }, +/**/ {{0XBFAEA519, 0X23A0F5F3} } }, +/**/ {{{0X3FE91FFF, 0XD251C01C} }, +/**/ {{0X3FE54CCA, 0XD3F3BD20} }, +/**/ {{0X3FE3CBD5, 0X1554DD15} }, +/**/ {{0XBFD33B1F, 0X2BC94245} }, +/**/ {{0X3FB1291F, 0X2FC4C3F6} }, +/**/ {{0X3FA694E8, 0X1B7A765C} }, +/**/ {{0XBFAE49EC, 0X826E86F6} } }, +/**/ {{{0X3FE94001, 0XD90AF4E6} }, +/**/ {{0X3FE5608E, 0X4D4EC640} }, +/**/ {{0X3FE3B89F, 0X3445EF72} }, +/**/ {{0XBFD32E2E, 0XB7BBD79A} }, +/**/ {{0X3FB155B4, 0XE401D071} }, +/**/ {{0X3FA5FE51, 0X3A256F1C} }, +/**/ {{0XBFADEEA1, 0X890FF662} } }, +/**/ {{{0X3FE96001, 0X04FD6C17} }, +/**/ {{0X3FE5743C, 0XD5673C20} }, +/**/ {{0X3FE3A578, 0X09EBC6E2} }, +/**/ {{0XBFD3211E, 0X6DA5039C} }, +/**/ {{0X3FB1811B, 0X4E62286B} }, +/**/ {{0X3FA56990, 0X71BECE9D} }, +/**/ {{0XBFAD9342, 0X23911641} } }, +/**/ {{{0X3FE98000, 0X2D214B82} }, +/**/ {{0X3FE587D8, 0X3B0D6120} }, +/**/ {{0X3FE3925E, 0X01EAAC3E} }, +/**/ {{0XBFD313EE, 0X08425504} }, +/**/ {{0X3FB1AB5A, 0X02BDB571} }, +/**/ {{0X3FA4D698, 0X9EBD70B8} }, +/**/ {{0XBFAD37D7, 0XF482965A} } }, +/**/ {{{0X3FE99FFD, 0XEB980651} }, +/**/ {{0X3FE59B5F, 0XB16BA7A0} }, +/**/ {{0X3FE37F52, 0X10B1AB7A} }, +/**/ {{0XBFD3069E, 0XF993D676} }, +/**/ {{0X3FB1D472, 0XCDED25A8} }, +/**/ {{0X3FA44570, 0X2D0ABD9A} }, +/**/ {{0XBFACDC6C, 0X56221AA1} } }, +/**/ {{{0X3FE9BFFF, 0XE5504053} }, +/**/ {{0X3FE5AED6, 0XB55DE6A0} }, +/**/ {{0X3FE36C50, 0XFA91C51E} }, +/**/ {{0XBFD2F92F, 0XBE311E56} }, +/**/ {{0X3FB1FC70, 0X5BE3AF05} }, +/**/ {{0X3FA3B5FD, 0XACD5CDC7} }, +/**/ {{0XBFAC8108, 0X5ADBB9B8} } }, +/**/ {{{0X3FE9E001, 0X6E60A234} }, +/**/ {{0X3FE5C23A, 0X79ACD480} }, +/**/ {{0X3FE3595D, 0XA5FAB2EA} }, +/**/ {{0XBFD2EBA3, 0X1DDECEEA} }, +/**/ {{0X3FB22350, 0X35736518} }, +/**/ {{0X3FA32856, 0X22F9FD28} }, +/**/ {{0XBFAC25B4, 0XCE8B2259} } }, +/**/ {{{0X3FE9FFFF, 0XB685741B} }, +/**/ {{0X3FE5D589, 0X5AD40460} }, +/**/ {{0X3FE34679, 0XD832B8D3} }, +/**/ {{0XBFD2DDFB, 0X230EDA41} }, +/**/ {{0X3FB24912, 0XB23C0BA2} }, +/**/ {{0X3FA29C85, 0X4C4E86DA} }, +/**/ {{0XBFABCA7A, 0X37002A55} } }, +/**/ {{{0X3FEA2001, 0X9D59B943} }, +/**/ {{0X3FE5E8C7, 0X8C187EA0} }, +/**/ {{0X3FE333A1, 0X9EDE2183} }, +/**/ {{0XBFD2D035, 0XB0043779} }, +/**/ {{0X3FB26DC3, 0X7AB9110C} }, +/**/ {{0X3FA2126C, 0X959CFC0E} }, +/**/ {{0XBFAB6F60, 0XD556233E} } }, +/**/ {{{0X3FEA3FFF, 0XBE9E153F} }, +/**/ {{0X3FE5FBF0, 0XA9C08AE0} }, +/**/ {{0X3FE320D9, 0X6F7861AA} }, +/**/ {{0XBFD2C256, 0XC2200F18} }, +/**/ {{0X3FB2915D, 0XA6795293} }, +/**/ {{0X3FA18A2B, 0X256A8FDE} }, +/**/ {{0XBFAB1470, 0XA67A4E89} } }, +/**/ {{{0X3FEA5FFE, 0X7A23A1CE} }, +/**/ {{0X3FE60F07, 0X63200600} }, +/**/ {{0X3FE30E1E, 0XD13D395E} }, +/**/ {{0XBFD2B45D, 0X44403932} }, +/**/ {{0X3FB2B3E9, 0XC967F013} }, +/**/ {{0X3FA103AD, 0X35D002B8} }, +/**/ {{0XBFAAB9B1, 0X6496A8F1} } }, +/**/ {{{0X3FEA8001, 0X57F250B8} }, +/**/ {{0X3FE6220D, 0XDD6453A0} }, +/**/ {{0X3FE2FB6F, 0XCFFFCC1E} }, +/**/ {{0XBFD2A648, 0X6F8D8291} }, +/**/ {{0X3FB2D56F, 0X03654CC3} }, +/**/ {{0X3FA07EE3, 0X4BB6E7A6} }, +/**/ {{0XBFAA5F2A, 0X87992F03} } }, +/**/ {{{0X3FEAA000, 0XDD839D49} }, +/**/ {{0X3FE634FF, 0XB412C9A0} }, +/**/ {{0X3FE2E8D0, 0XE2D59E01} }, +/**/ {{0XBFD2981C, 0X5467CFDD} }, +/**/ {{0X3FB2F5E8, 0XFF1FADB5} }, +/**/ {{0X3F9FF7D6, 0XA3BA803C} }, +/**/ {{0XBFAA04E3, 0X46AF8DB7} } }, +/**/ {{{0X3FEAC000, 0X770DF220} }, +/**/ {{0X3FE647DE, 0XFEF70020} }, +/**/ {{0X3FE2D640, 0X220AFF7F} }, +/**/ {{0XBFD289D8, 0X36F9E74F} }, +/**/ {{0X3FB3155E, 0XE509140A} }, +/**/ {{0X3F9EF56B, 0X61AB0B7F} }, +/**/ {{0XBFA9AAE2, 0X98CE391F} } }, +/**/ {{{0X3FEAE001, 0X125BBE48} }, +/**/ {{0X3FE65AAC, 0X57A24D20} }, +/**/ {{0X3FE2C3BD, 0X1BFB3559} }, +/**/ {{0XBFD27B7C, 0X6DDE55DD} }, +/**/ {{0X3FB333D5, 0X15C4C270} }, +/**/ {{0X3F9DF67A, 0X9BAC4ECF} }, +/**/ {{0XBFA9512F, 0X363A972B} } }, +/**/ {{{0X3FEAFFFE, 0X7C321839} }, +/**/ {{0X3FE66D65, 0X569B83C0} }, +/**/ {{0X3FE2B14A, 0X53FBF8D9} }, +/**/ {{0XBFD26D0B, 0X9CFA03CE} }, +/**/ {{0X3FB3514B, 0X2CAA2E0C} }, +/**/ {{0X3F9CFB22, 0X4597BE9A} }, +/**/ {{0XBFA8F7CF, 0X99110022} } }, +/**/ {{{0X3FEB1FFE, 0X75486924} }, +/**/ {{0X3FE6800D, 0X68CEFB40} }, +/**/ {{0X3FE29EE4, 0X8E6AA814} }, +/**/ {{0XBFD25E83, 0XE8AFA7EB} }, +/**/ {{0X3FB36DC9, 0XFB0E8AC8} }, +/**/ {{0X3F9C0331, 0XAD5D66CA} }, +/**/ {{0XBFA89EC9, 0XFEDB1E8B} } }, +/**/ {{{0X3FEB4001, 0X5FB8DEB8} }, +/**/ {{0X3FE692A4, 0XD137C500} }, +/**/ {{0X3FE28C8B, 0XABFF668E} }, +/**/ {{0XBFD24FE5, 0XD8E71E0A} }, +/**/ {{0X3FB38955, 0X1297317A} }, +/**/ {{0X3F9B0EA3, 0X1D844655} }, +/**/ {{0XBFA84624, 0X6914067D} } }, +/**/ {{{0X3FEB6000, 0X386C27B9} }, +/**/ {{0X3FE6A527, 0X8CDF6FC0} }, +/**/ {{0X3FE27A43, 0XC5758DB8} }, +/**/ {{0XBFD24135, 0X59CADCE0} }, +/**/ {{0X3FB3A3E9, 0XEE34AE91} }, +/**/ {{0X3F9A1DA8, 0X1C5FFF05} }, +/**/ {{0XBFA7EDE4, 0X9EC8AAC6} } }, +/**/ {{{0X3FEB8000, 0XD1EFDDB3} }, +/**/ {{0X3FE6B799, 0X0ACCB660} }, +/**/ {{0X3FE26809, 0X9983AAB2} }, +/**/ {{0XBFD23270, 0X76047E08} }, +/**/ {{0X3FB3BD90, 0XF132139B} }, +/**/ {{0X3F993010, 0X58DEB3E1} }, +/**/ {{0XBFA79610, 0X2D194CE9} } }, +/**/ {{{0X3FEB9FFE, 0X42CC4047} }, +/**/ {{0X3FE6C9F6, 0X86445E60} }, +/**/ {{0X3FE255E0, 0X069F871F} }, +/**/ {{0XBFD2239A, 0X25461639} }, +/**/ {{0X3FB3D649, 0XA926C127} }, +/**/ {{0X3F9845FB, 0XC5A21F70} }, +/**/ {{0XBFA73EAC, 0X68E20BE6} } }, +/**/ {{{0X3FEBC001, 0X951AEAAD} }, +/**/ {{0X3FE6DC45, 0X3C4E45A0} }, +/**/ {{0X3FE243C1, 0XFF6573B0} }, +/**/ {{0XBFD214AE, 0XE38FA7E7} }, +/**/ {{0X3FB3EE1E, 0X5EA1330F} }, +/**/ {{0X3F975F24, 0X2BCCE6DF} }, +/**/ {{0XBFA6E7BE, 0X6F3902C5} } }, +/**/ {{{0X3FEBDFFE, 0X6616FE11} }, +/**/ {{0X3FE6EE7E, 0X27106FE0} }, +/**/ {{0X3FE231B6, 0X97B587F0} }, +/**/ {{0XBFD205B5, 0X240FEF32} }, +/**/ {{0X3FB40509, 0X44EB818C} }, +/**/ {{0X3F967BDE, 0X108160F9} }, +/**/ {{0XBFA6914B, 0X271D18AD} } }, +/**/ {{{0X3FEBFFFF, 0X54511C72} }, +/**/ {{0X3FE700A7, 0X643BBB40} }, +/**/ {{0X3FE21FB7, 0XE1823C8B} }, +/**/ {{0XBFD1F6A8, 0X9A854F7A} }, +/**/ {{0X3FB41B15, 0X71F04837} }, +/**/ {{0X3F959BD8, 0XBBD10F7C} }, +/**/ {{0XBFA63B57, 0X41F03711} } }, +/**/ {{{0X3FEC2000, 0XC537593E} }, +/**/ {{0X3FE712BE, 0XF36D6400} }, +/**/ {{0X3FE20DC7, 0XF754B2D5} }, +/**/ {{0XBFD1E78B, 0X9D24DBED} }, +/**/ {{0X3FB43043, 0X94F485E0} }, +/**/ {{0X3F94BF29, 0X122A6884} }, +/**/ {{0XBFA5E5E7, 0X3D2AA4E9} } }, +/**/ {{{0X3FEC4000, 0XDDD35719} }, +/**/ {{0X3FE724C3, 0XD7FA3000} }, +/**/ {{0X3FE1FBE7, 0XF2A8B1BF} }, +/**/ {{0XBFD1D85F, 0XB25DDDF6} }, +/**/ {{0X3FB44495, 0XD2E3B20F} }, +/**/ {{0X3F93E5D6, 0X7FCC1B30} }, +/**/ {{0XBFA590FF, 0X62D0D00F} } }, +/**/ {{{0X3FEC6000, 0X402375B6} }, +/**/ {{0X3FE736B6, 0X7DFF3720} }, +/**/ {{0X3FE1EA17, 0X86C92387} }, +/**/ {{0XBFD1C925, 0X31DDFC58} }, +/**/ {{0X3FB4580F, 0XF8B6CBC2} }, +/**/ {{0X3F930FD7, 0X00CE998E} }, +/**/ {{0XBFA53CA3, 0XCB299E5F} } }, +/**/ {{{0X3FEC7FFF, 0X19904FE4} }, +/**/ {{0X3FE74897, 0X0F395860} }, +/**/ {{0X3FE1D856, 0XA825BA33} }, +/**/ {{0XBFD1B9DC, 0XA75E0FC5} }, +/**/ {{0X3FB46AB5, 0X79F8FD7D} }, +/**/ {{0X3F923D23, 0XA5A90AFE} }, +/**/ {{0XBFA4E8D8, 0X5D2F574B} } }, +/**/ {{{0X3FEC9FFE, 0XF9E2409D} }, +/**/ {{0X3FE75A66, 0X79E7F1C0} }, +/**/ {{0X3FE1C6A4, 0X8740D2E9} }, +/**/ {{0XBFD1AA85, 0XF198392C} }, +/**/ {{0X3FB47C8A, 0X808C583A} }, +/**/ {{0X3F916DAC, 0X857F2526} }, +/**/ {{0XBFA495A0, 0XD0477576} } }, +/**/ {{{0X3FECC001, 0XE038EF72} }, +/**/ {{0X3FE76C25, 0XE6815140} }, +/**/ {{0X3FE1B500, 0X19BDADF8} }, +/**/ {{0XBFD19B20, 0XB4A469AE} }, +/**/ {{0X3FB48D93, 0X42387EA2} }, +/**/ {{0X3F90A15F, 0X7305BAF5} }, +/**/ {{0XBFA44300, 0XACAE4E17} } }, +/**/ {{{0X3FECDFFE, 0XEB72037F} }, +/**/ {{0X3FE77DD0, 0X7A7A4AA0} }, +/**/ {{0X3FE1A36E, 0X4F1F6702} }, +/**/ {{0XBFD18BB1, 0XD0992CF8} }, +/**/ {{0X3FB49DCE, 0X5AA4990D} }, +/**/ {{0X3F8FB0DD, 0X63759665} }, +/**/ {{0XBFA3F0FB, 0X4D2F0C0F} } }, +/**/ {{{0X3FECFFFF, 0XEA4839ED} }, +/**/ {{0X3FE78F6B, 0XB17088C0} }, +/**/ {{0X3FE191E9, 0XCF32122F} }, +/**/ {{0XBFD17C35, 0X220400AC} }, +/**/ {{0X3FB4AD44, 0X0A159641} }, +/**/ {{0X3F8E252C, 0X80894CA9} }, +/**/ {{0XBFA39F93, 0XDF89C265} } }, +/**/ {{{0X3FED1FFD, 0XEC3EC8B2} }, +/**/ {{0X3FE7A0F3, 0XC8C6C880} }, +/**/ {{0X3FE18076, 0X729F01D6} }, +/**/ {{0XBFD16CAE, 0X98515540} }, +/**/ {{0X3FB4BBF4, 0X1B0933FF} }, +/**/ {{0X3F8C9FF5, 0XE09A60CD} }, +/**/ {{0XBFA34ECD, 0X662A5704} } }, +/**/ {{{0X3FED3FFF, 0X7084EDD4} }, +/**/ {{0X3FE7B26C, 0X5F02F220} }, +/**/ {{0X3FE16F10, 0XB9973206} }, +/**/ {{0XBFD15D1B, 0X9E1E0A54} }, +/**/ {{0X3FB4C9E4, 0XAC2C9A30} }, +/**/ {{0X3F8B20DD, 0XEFCE76CC} }, +/**/ {{0XBFA2FEAA, 0XB888BC37} } }, +/**/ {{{0X3FED5FFE, 0X8D728E7C} }, +/**/ {{0X3FE7C3D2, 0X488D7E80} }, +/**/ {{0X3FE15DBB, 0XE622A5A7} }, +/**/ {{0XBFD14D7F, 0XA305CEB2} }, +/**/ {{0X3FB4D716, 0X417BF1C7} }, +/**/ {{0X3F89A81E, 0XE19FE239} }, +/**/ {{0XBFA2AF2E, 0X84DDAD07} } }, +/**/ {{{0X3FED7FFF, 0X70AA3B03} }, +/**/ {{0X3FE7D527, 0XDB239580} }, +/**/ {{0X3FE14C75, 0XBE4FEA01} }, +/**/ {{0XBFD13DD9, 0X2AD706AA} }, +/**/ {{0X3FB4E38D, 0XB49D32AA} }, +/**/ {{0X3F88357A, 0X37DF2B6D} }, +/**/ {{0XBFA2605B, 0X507CD77B} } }, +/**/ {{{0X3FED9FFF, 0X1434FBA3} }, +/**/ {{0X3FE7E66B, 0X82C8A720} }, +/**/ {{0X3FE13B3F, 0XED9B7FED} }, +/**/ {{0XBFD12E2A, 0X3AC9D646} }, +/**/ {{0X3FB4EF4C, 0XE7B01CF5} }, +/**/ {{0X3F86C905, 0XD25FD52D} }, +/**/ {{0XBFA21233, 0X798666EF} } }, +/**/ {{{0X3FEDBFFE, 0XA8C8DE8C} }, +/**/ {{0X3FE7F79D, 0XF4A0A520} }, +/**/ {{0X3FE12A19, 0XD7FC2119} }, +/**/ {{0XBFD11E72, 0XC6BE19DF} }, +/**/ {{0X3FB4FA57, 0X634E1B91} }, +/**/ {{0X3F8562A6, 0X47F96DF5} }, +/**/ {{0XBFA1C4B9, 0X373AF599} } }, +/**/ {{{0X3FEDE000, 0X26573DF5} }, +/**/ {{0X3FE808C0, 0X4DBCB960} }, +/**/ {{0X3FE11902, 0X7903E4B9} }, +/**/ {{0XBFD10EB2, 0X5CDFED06} }, +/**/ {{0X3FB504B0, 0XCCA681FA} }, +/**/ {{0X3F840238, 0X6F3CDE09} }, +/**/ {{0XBFA177EE, 0X9BA8FA6A} } }, +/**/ {{{0X3FEDFFFE, 0X35009B66} }, +/**/ {{0X3FE819CF, 0XC2CB5340} }, +/**/ {{0X3FE107FC, 0XB1C942B5} }, +/**/ {{0XBFD0FEEC, 0X230D7D92} }, +/**/ {{0X3FB50E5A, 0X75C5B4F1} }, +/**/ {{0X3F82A7E8, 0XE3C139D8} }, +/**/ {{0XBFA12BD5, 0X93FA642B} } }, +/**/ {{{0X3FEE2000, 0X492D4C68} }, +/**/ {{0X3FE82AD0, 0X5CCB8680} }, +/**/ {{0X3FE0F704, 0X928E55DF} }, +/**/ {{0XBFD0EF1C, 0XEE0B0721} }, +/**/ {{0X3FB51759, 0X937BFB74} }, +/**/ {{0X3F815359, 0X2BC9FDDB} }, +/**/ {{0XBFA0E06F, 0XEA1D1824} } }, +/**/ {{{0X3FEE4000, 0X9412BB65} }, +/**/ {{0X3FE83BBF, 0X14001A60} }, +/**/ {{0X3FE0E61D, 0X37F485DA} }, +/**/ {{0XBFD0DF48, 0X1B2BD37D} }, +/**/ {{0X3FB51FAF, 0X64024D14} }, +/**/ {{0X3F8004B9, 0X9B849698} }, +/**/ {{0XBFA095BF, 0X450A2434} } }, +/**/ {{{0X3FEE5FFF, 0X4758EF2F} }, +/**/ {{0X3FE84C9C, 0X1531C180} }, +/**/ {{0X3FE0D546, 0X8B7FECE7} }, +/**/ {{0XBFD0CF6E, 0X105BFE1E} }, +/**/ {{0X3FB5275E, 0XF9C5E03A} }, +/**/ {{0X3F7D77F2, 0X17AA1137} }, +/**/ {{0XBFA04BC5, 0X2A6891E1} } }, +/**/ {{{0X3FEE8000, 0X380F819F} }, +/**/ {{0X3FE85D69, 0X74CCC060} }, +/**/ {{0X3FE0C47E, 0X8F1DA5B5} }, +/**/ {{0XBFD0BF8D, 0X62AD700F} }, +/**/ {{0X3FB52E6C, 0X1F3FBC2B} }, +/**/ {{0X3F7AF1C3, 0XEE24AD7D} }, +/**/ {{0XBFA00282, 0XFECE26C9} } }, +/**/ {{{0X3FEEA000, 0XA6D8CB7B} }, +/**/ {{0X3FE86E25, 0XD00E3A60} }, +/**/ {{0X3FE0B3C6, 0XBA314D62} }, +/**/ {{0XBFD0AFA7, 0XE7CB2D84} }, +/**/ {{0X3FB534D9, 0X08E9071F} }, +/**/ {{0X3F787704, 0X4CE5E5C9} }, +/**/ {{0XBF9F73F4, 0X0EB7C9D5} } }, +/**/ {{{0X3FEEC000, 0X5A13BA60} }, +/**/ {{0X3FE87ED1, 0X19B163E0} }, +/**/ {{0X3FE0A31F, 0X2EBB7AD7} }, +/**/ {{0XBFD09FBE, 0X33A3FCE1} }, +/**/ {{0X3FB53AA8, 0X89D9AF5D} }, +/**/ {{0X3F760799, 0XF7F7040B} }, +/**/ {{0XBF9EE456, 0XD3F0B3FB} } }, +/**/ {{{0X3FEEDFFF, 0X58F8DD18} }, +/**/ {{0X3FE88F6B, 0X6681CA80} }, +/**/ {{0X3FE09287, 0XEC4360B3} }, +/**/ {{0XBFD08FD0, 0XB7CE07E5} }, +/**/ {{0X3FB53FDD, 0X7BDEDD3F} }, +/**/ {{0X3F73A366, 0X70C52E66} }, +/**/ {{0XBF9E5630, 0X5DCA7315} } }, +/**/ {{{0X3FEEFFFF, 0XBE033400} }, +/**/ {{0X3FE89FF5, 0XDD4D7960} }, +/**/ {{0X3FE081FF, 0XDFFE15BD} }, +/**/ {{0XBFD07FDE, 0XDAE56C0F} }, +/**/ {{0X3FB5447A, 0XF84D6F5D} }, +/**/ {{0X3F714A24, 0X7982941E} }, +/**/ {{0XBF9DC982, 0X81E68835} } }, +/**/ {{{0X3FEF2001, 0XE6B5125D} }, +/**/ {{0X3FE8B070, 0XBBE88160} }, +/**/ {{0X3FE07186, 0XDF7122E2} }, +/**/ {{0XBFD06FE8, 0XDE905325} }, +/**/ {{0X3FB54883, 0XB5DEEC7A} }, +/**/ {{0X3F6DF762, 0XB4A186D5} }, +/**/ {{0XBF9D3E4E, 0XDE20F495} } }, +/**/ {{{0X3FEF3FFD, 0XF770E0DB} }, +/**/ {{0X3FE8C0D8, 0X09E96380} }, +/**/ {{0X3FE06120, 0XF5A576A9} }, +/**/ {{0XBFD05FF3, 0X1D2912FF} }, +/**/ {{0X3FB54BF9, 0X8CD1001F} }, +/**/ {{0X3F6970FC, 0X6E90DC16} }, +/**/ {{0XBF9CB496, 0XD8EB587E} } }, +/**/ {{{0X3FEF5FFE, 0X4E16DA33} }, +/**/ {{0X3FE8D131, 0X29BCCDC0} }, +/**/ {{0X3FE050C8, 0XD33BA4E9} }, +/**/ {{0XBFD04FF8, 0XD74C83D2} }, +/**/ {{0X3FB54EE0, 0X592BB252} }, +/**/ {{0X3F64FF61, 0X7193EEB5} }, +/**/ {{0XBF9C2C5B, 0XA459AC86} } }, +/**/ {{{0X3FEF8000, 0X4576FF2E} }, +/**/ {{0X3FE8E17A, 0XCCE443A0} }, +/**/ {{0X3FE0407F, 0XD8A97B6C} }, +/**/ {{0XBFD03FFB, 0XC91B3E55} }, +/**/ {{0X3FB5513A, 0X5F3357F7} }, +/**/ {{0X3F60A2BA, 0X14C92B53} }, +/**/ {{0XBF9BA59E, 0X3E70DF71} } }, +/**/ {{{0X3FEF9FFF, 0X39B6A330} }, +/**/ {{0X3FE8F1B2, 0XA7F515A0} }, +/**/ {{0X3FE03048, 0X63064158} }, +/**/ {{0XBFD02FFE, 0XACBAADA8} }, +/**/ {{0X3FB55309, 0XF27448C0} }, +/**/ {{0X3F58B6D6, 0X4850006B} }, +/**/ {{0XBF9B205F, 0X742323DF} } }, +/**/ {{{0X3FEFC001, 0XAA76C0B9} }, +/**/ {{0X3FE901DC, 0X15D66D80} }, +/**/ {{0X3FE0201F, 0X28D9B4AA} }, +/**/ {{0XBFD01FFE, 0XA98D4C38} }, +/**/ {{0X3FB55452, 0X089780F8} }, +/**/ {{0X3F5050B5, 0X7F35C5BB} }, +/**/ {{0XBF9A9C9F, 0XE19247AF} } }, +/**/ {{{0X3FEFDFFE, 0X39A592CA} }, +/**/ {{0X3FE911F2, 0X6D88A780} }, +/**/ {{0X3FE01008, 0XE40C6538} }, +/**/ {{0XBFD01000, 0XD31688DE} }, +/**/ {{0X3FB55514, 0XE32F1816} }, +/**/ {{0X3F402A15, 0X4E1628D2} }, +/**/ {{0XBF9A1A5F, 0XF4FAF5A0} } }, +/**/ {{{0X3FEFF801, 0X8E92D1B0} }, +/**/ {{0X3FE91DFB, 0X9BB4BF00} }, +/**/ {{0X3FE003FF, 0XB884C5A9} }, +/**/ {{0XBFD003FF, 0X3876A954} }, +/**/ {{0X3FB55551, 0X5539DDFB} }, +/**/ {{0X3F2007E7, 0X7B95E6C2} }, +/**/ {{0XBF99B9A7, 0X18A3BA58} } }, + }; + + static const number + hij[241][16] = { /* x0,hij for (1/16,1) */ +/**/ {{{0x3fb04000, 0x00000000} }, +/**/ {{0x3fb03a6d, 0x1c06693d} }, +/**/ {{0xbc428a02, 0xd4e7f128} }, +/**/ {{0x3fefdf1f, 0xe92592ae} }, +/**/ {{0x3c88bfc0, 0xb5490162} }, +/**/ {{0xbfb01ead, 0x8f7e4151} }, +/**/ {{0xbc5395e8, 0x0b64d205} }, +/**/ {{0xbfd4d29f, 0x433dd49b} }, +/**/ {{0xbc75b19d, 0x4aa42633} }, +/**/ {{0x3fafda41, 0xce35961d} }, +/**/ {{0x3c4e6a5f, 0x425d7696} }, +/**/ {{0x3fc814dd, 0x6c1bb5e2} }, +/**/ {{0xbfaf4cb7, 0x2b33739f} }, +/**/ {{0xbfc048b2, 0xc267d8ec} }, +/**/ {{0x3fae9649, 0xe8ababc6} }, +/**/ {{0x3fb78293, 0xfe802692} } }, +/**/ {{{0x3fb10000, 0x00000000} }, +/**/ {{0x3fb0f99e, 0xa71d52a7} }, +/**/ {{0xbc22069f, 0xeec3624f} }, +/**/ {{0x3fefdc08, 0x9a49d2a9} }, +/**/ {{0x3c7780f7, 0x68b2ce25} }, +/**/ {{0xbfb0d9de, 0x9da73e1d} }, +/**/ {{0x3c4ebf46, 0xa1a487bf} }, +/**/ {{0xbfd4c669, 0xd13ea108} }, +/**/ {{0x3c7354bc, 0xebb4528c} }, +/**/ {{0x3fb0a137, 0x789374c1} }, +/**/ {{0xbc56c223, 0xc3f2c5c2} }, +/**/ {{0x3fc7f0e7, 0x79c60cda} }, +/**/ {{0xbfb05062, 0xcdcc7b81} }, +/**/ {{0xbfc019e4, 0xc5266783} }, +/**/ {{0x3fafd0b2, 0xf2540289} }, +/**/ {{0x3fb71107, 0xf6d3cd8a} } }, +/**/ {{{0x3fb20000, 0x00000000} }, +/**/ {{0x3fb1f86d, 0xbf082d59} }, +/**/ {{0xbc4095dc, 0x7732ef81} }, +/**/ {{0x3fefd7b3, 0x01722b81} }, +/**/ {{0xbc5e618c, 0x8a212e02} }, +/**/ {{0xbfb1d2c5, 0xee4e9cfa} }, +/**/ {{0x3c426273, 0x29abece0} }, +/**/ {{0xbfd4b551, 0x37eb7f46} }, +/**/ {{0x3c73b360, 0x01d8bf12} }, +/**/ {{0x3fb18fa7, 0x6adb6a7c} }, +/**/ {{0xbc5c00d8, 0x398999ad} }, +/**/ {{0x3fc7bea5, 0xf4a7cff3} }, +/**/ {{0xbfb13008, 0x61f84829} }, +/**/ {{0xbfbfb14f, 0xa8e135a1} }, +/**/ {{0x3fb0b532, 0x4324f177} }, +/**/ {{0x3fb6734a, 0x3498dd9d} } }, +/**/ {{{0x3fb30000, 0x00000000} }, +/**/ {{0x3fb2f719, 0x318a4a9a} }, +/**/ {{0x3c03fd17, 0x79b9801f} }, +/**/ {{0x3fefd31f, 0x48e238fe} }, +/**/ {{0xbc876a7a, 0xd8c45327} }, +/**/ {{0xbfb2cada, 0x852096e2} }, +/**/ {{0x3c460860, 0x11efd787} }, +/**/ {{0xbfd4a34b, 0x2e476a39} }, +/**/ {{0x3c7254f2, 0xeb11ee51} }, +/**/ {{0x3fb27c13, 0xc54ae225} }, +/**/ {{0x3c513096, 0x4ae66f0c} }, +/**/ {{0x3fc789ca, 0xef0d59d0} }, +/**/ {{0xbfb20c06, 0x6d9aaa8c} }, +/**/ {{0xbfbf2885, 0x846ba912} }, +/**/ {{0x3fb17c5f, 0xc697ef5e} }, +/**/ {{0x3fb5ce93, 0xcad31e6e} } }, +/**/ {{{0x3fb40000, 0x00000000} }, +/**/ {{0x3fb3f59f, 0x0e7c559d} }, +/**/ {{0x3c5ac4ce, 0x285df847} }, +/**/ {{0x3fefce4d, 0xa6ab93e9} }, +/**/ {{0xbc6be46b, 0x18a97736} }, +/**/ {{0xbfb3c211, 0x4d22b635} }, +/**/ {{0x3c42033c, 0x6950679f} }, +/**/ {{0xbfd49059, 0xc4d74033} }, +/**/ {{0x3c57dd7c, 0xd7e376aa} }, +/**/ {{0x3fb36662, 0xc0896a7c} }, +/**/ {{0xbc36cf6a, 0xd79232cf} }, +/**/ {{0x3fc75261, 0xa13a97a2} }, +/**/ {{0xbfb2e431, 0x5fdd1509} }, +/**/ {{0xbfbe9999, 0x6e52db32} }, +/**/ {{0x3fb23da4, 0xb0a71e9f} }, +/**/ {{0x3fb52335, 0xe3bc8178} } }, +/**/ {{{0x3fb50000, 0x00000000} }, +/**/ {{0x3fb4f3fd, 0x677292fb} }, +/**/ {{0x3c4008d3, 0x6264979e} }, +/**/ {{0x3fefc93e, 0x53a1ee0d} }, +/**/ {{0xbc64421a, 0x20fd2bdf} }, +/**/ {{0xbfb4b85f, 0x4aba88e3} }, +/**/ {{0x3c54f184, 0x3c9d1e89} }, +/**/ {{0xbfd47c7f, 0x25ae4668} }, +/**/ {{0xbc7d7581, 0x816630d1} }, +/**/ {{0x3fb44e7b, 0x07f85056} }, +/**/ {{0x3c56d63c, 0x910bdf4f} }, +/**/ {{0x3fc71875, 0xc439029c} }, +/**/ {{0xbfb3b85e, 0xf2bcfa10} }, +/**/ {{0xbfbe04bb, 0x9707b205} }, +/**/ {{0x3fb2f8c6, 0x95e3e0cc} }, +/**/ {{0x3fb47184, 0x8093431b} } }, +/**/ {{{0x3fb60000, 0x00000000} }, +/**/ {{0x3fb5f232, 0x4fd2d7b2} }, +/**/ {{0x3c58a8da, 0x4401318e} }, +/**/ {{0x3fefc3f1, 0x8b549418} }, +/**/ {{0x3c34d896, 0x836f8130} }, +/**/ {{0xbfb5adb9, 0x9cdd92e7} }, +/**/ {{0x3c4d4161, 0xeb397cc3} }, +/**/ {{0xbfd467bd, 0x93f8f1dc} }, +/**/ {{0xbc609d7b, 0xffc760ad} }, +/**/ {{0x3fb53443, 0xbea6b2fe} }, +/**/ {{0x3c5eb03c, 0x4b24f5db} }, +/**/ {{0x3fc6dc13, 0x8de3d005} }, +/**/ {{0xbfb48866, 0x37d2d99d} }, +/**/ {{0xbfbd6a1d, 0xf6663fcb} }, +/**/ {{0x3fb3ad8e, 0x0adff464} }, +/**/ {{0x3fb3b9d6, 0x4159c223} } }, +/**/ {{{0x3fb70000, 0x00000000} }, +/**/ {{0x3fb6f03b, 0xdcea4b0d} }, +/**/ {{0xbc33f00e, 0x512fa17d} }, +/**/ {{0x3fefbe67, 0x8c07a436} }, +/**/ {{0xbc84baaa, 0x46250d6f} }, +/**/ {{0xbfb6a215, 0x7e3ba4c7} }, +/**/ {{0xbc3504e7, 0x54503f8d} }, +/**/ {{0xbfd45217, 0x6b82d03a} }, +/**/ {{0x3c7d1f0d, 0xbebdd1db} }, +/**/ {{0x3fb617a4, 0x841d5604} }, +/**/ {{0xbc47168b, 0x6681c436} }, +/**/ {{0x3fc69d47, 0xaccec6ce} }, +/**/ {{0xbfb5541f, 0xa4715800} }, +/**/ {{0xbfbcc9f4, 0x335a1c1b} }, +/**/ {{0x3fb45bc6, 0xbac0061f} }, +/**/ {{0x3fb2fc84, 0x2b3853b6} } }, +/**/ {{{0x3fb80000, 0x00000000} }, +/**/ {{0x3fb7ee18, 0x2602f10f} }, +/**/ {{0xbc5cfb65, 0x4c0c3d98} }, +/**/ {{0x3fefb8a0, 0x96acfacc} }, +/**/ {{0xbc82962e, 0x18495af3} }, +/**/ {{0xbfb79568, 0x46635c89} }, +/**/ {{0x3c5ac468, 0xa6bfd498} }, +/**/ {{0xbfd43b8f, 0x2037b997} }, +/**/ {{0xbc72ad53, 0xe2f12373} }, +/**/ {{0x3fb6f885, 0x7900c4ee} }, +/**/ {{0x3c53145d, 0x0aef1f9d} }, +/**/ {{0x3fc65c1f, 0x4409ba0e} }, +/**/ {{0xbfb61b65, 0x1d176e0c} }, +/**/ {{0xbfbc2473, 0x8ad65152} }, +/**/ {{0x3fb5033f, 0x7bc246c1} }, +/**/ {{0x3fb239e9, 0x6db30b46} } }, +/**/ {{{0x3fb90000, 0x00000000} }, +/**/ {{0x3fb8ebc5, 0x4478fb28} }, +/**/ {{0x3c473288, 0x0cad24cc} }, +/**/ {{0x3fefb29c, 0xeedcd6d7} }, +/**/ {{0x3c8efa9e, 0x23ea50f0} }, +/**/ {{0xbfb887a7, 0x6ae09982} }, +/**/ {{0x3c5b2275, 0x53801511} }, +/**/ {{0xbfd42427, 0x3da0757c} }, +/**/ {{0xbc7199e5, 0x311c7ac8} }, +/**/ {{0x3fb7d6cf, 0x4388717b} }, +/**/ {{0xbc5c4eb2, 0x3dd070b4} }, +/**/ {{0x3fc618a7, 0xe6c2b5f3} }, +/**/ {{0xbfb6de12, 0x00313569} }, +/**/ {{0xbfbb79d2, 0xb6316619} }, +/**/ {{0x3fb5a3ca, 0x61af5c21} }, +/**/ {{0x3fb17263, 0x26e60289} } }, +/**/ {{{0x3fba0000, 0x00000000} }, +/**/ {{0x3fb9e941, 0x53cfdcf1} }, +/**/ {{0x3c5a332e, 0x1d69c47e} }, +/**/ {{0x3fefac5c, 0xdace3776} }, +/**/ {{0xbc8c9a78, 0x1ad91ab5} }, +/**/ {{0xbfb978c8, 0x8054ad75} }, +/**/ {{0xbc5e35b8, 0x8ed66c17} }, +/**/ {{0xbfd40be2, 0x665afed1} }, +/**/ {{0x3c62eeef, 0x08ef10fb} }, +/**/ {{0x3fb8b26b, 0x13c989d2} }, +/**/ {{0x3c329f11, 0xbfeab3ba} }, +/**/ {{0x3fc5d2ef, 0x93c8f97c} }, +/**/ {{0xbfb79c03, 0x30234881} }, +/**/ {{0xbfbaca49, 0xd0f650c8} }, +/**/ {{0x3fb63d3c, 0xce2dcccc} }, +/**/ {{0x3fb0a650, 0x26fb0af2} } }, +/**/ {{{0x3fbb0000, 0x00000000} }, +/**/ {{0x3fbae68a, 0x71c722b8} }, +/**/ {{0x3c4c014e, 0x6910b9db} }, +/**/ {{0x3fefa5e0, 0xa34ef42b} }, +/**/ {{0xbc836583, 0xeb56d5b9} }, +/**/ {{0xbfba68c1, 0x3b881779} }, +/**/ {{0xbc473a0d, 0x13a09314} }, +/**/ {{0xbfd3f2c3, 0x538e939c} }, +/**/ {{0xbc68ed49, 0xee53e648} }, +/**/ {{0x3fb98b42, 0xa7d45973} }, +/**/ {{0xbc523943, 0x461ca7c4} }, +/**/ {{0x3fc58b04, 0xb0f2e2bb} }, +/**/ {{0xbfb85517, 0x1c9d23dc} }, +/**/ {{0xbfba1612, 0x3e3b5a66} }, +/**/ {{0x3fb6cf6f, 0x7ef1d0b9} }, +/**/ {{0x3fafac21, 0x6617b315} } }, +/**/ {{{0x3fbc0000, 0x00000000} }, +/**/ {{0x3fbbe39e, 0xbe6f07c3} }, +/**/ {{0x3c5f7b8f, 0x29a05987} }, +/**/ {{0x3fef9f28, 0x93bb9192} }, +/**/ {{0x3c78260b, 0x7cd1bdab} }, +/**/ {{0xbfbb5787, 0x72759741} }, +/**/ {{0x3c52f93f, 0xa6767247} }, +/**/ {{0xbfd3d8cc, 0xd45bbe91} }, +/**/ {{0x3c664839, 0x2edc0762} }, +/**/ {{0x3fba6140, 0x4fa31d26} }, +/**/ {{0x3c400647, 0x97891510} }, +/**/ {{0x3fc540f6, 0x0668fd66} }, +/**/ {{0xbfb9092d, 0xcb2f6e8f} }, +/**/ {{0xbfb95d66, 0x8d902073} }, +/**/ {{0x3fb75a3e, 0x99c53d16} }, +/**/ {{0x3fae040c, 0x8f475e61} } }, +/**/ {{{0x3fbd0000, 0x00000000} }, +/**/ {{0x3fbce07c, 0x5c3cca32} }, +/**/ {{0x3c4138e6, 0x425918a7} }, +/**/ {{0x3fef9834, 0xf9f6d421} }, +/**/ {{0x3c6f3089, 0x8c22a239} }, +/**/ {{0xbfbc4511, 0x1d4e69a5} }, +/**/ {{0x3c254c0f, 0xd2083ce8} }, +/**/ {{0xbfd3be01, 0xcd488978} }, +/**/ {{0x3c5612db, 0x6362ec0f} }, +/**/ {{0x3fbb344e, 0xf0d94873} }, +/**/ {{0xbc182beb, 0xfdf7db72} }, +/**/ {{0x3fc4f4d2, 0xb9d86c04} }, +/**/ {{0xbfb9b828, 0xdf238807} }, +/**/ {{0xbfb8a082, 0x5f93ffd6} }, +/**/ {{0x3fb7dd89, 0xb6650b0c} }, +/**/ {{0x3fac5526, 0xb62676ef} } }, +/**/ {{{0x3fbe0000, 0x00000000} }, +/**/ {{0x3fbddd21, 0x701eba6e} }, +/**/ {{0x3c594eff, 0xcd76fe58} }, +/**/ {{0x3fef9106, 0x266112ba} }, +/**/ {{0x3c74c302, 0x6b7e18b1} }, +/**/ {{0xbfbd3154, 0x5777816c} }, +/**/ {{0x3c5dc7e4, 0x1f9dbddd} }, +/**/ {{0xbfd3a265, 0x37a90881} }, +/**/ {{0xbc75bd61, 0xeb7ba840} }, +/**/ {{0x3fbc045a, 0x0a52514b} }, +/**/ {{0xbc35ca88, 0xcff49a99} }, +/**/ {{0x3fc4a6aa, 0x498eeb56} }, +/**/ {{0xbfba61eb, 0xa09232cf} }, +/**/ {{0xbfb7dfa2, 0x4a464027} }, +/**/ {{0x3fb85933, 0xe633c053} }, +/**/ {{0x3faaa036, 0x3f920107} } }, +/**/ {{{0x3fbf0000, 0x00000000} }, +/**/ {{0x3fbed98c, 0x2190043b} }, +/**/ {{0xbc23a598, 0x592c7b13} }, +/**/ {{0x3fef899c, 0x6bcf4ad8} }, +/**/ {{0x3c55fd73, 0x912c09b0} }, +/**/ {{0xbfbe1c47, 0x607f91a0} }, +/**/ {{0x3c576677, 0x5b5db022} }, +/**/ {{0xbfd385fa, 0x21046f5f} }, +/**/ {{0x3c7f01c3, 0x4487f4b8} }, +/**/ {{0x3fbcd14d, 0xb77f2d51} }, +/**/ {{0x3c57a86d, 0x30a2ccfe} }, +/**/ {{0x3fc4568c, 0x8782b530} }, +/**/ {{0xbfbb065b, 0x02b7ad2d} }, +/**/ {{0xbfb71b03, 0xbd215555} }, +/**/ {{0x3fb8cd23, 0xb9c1c1de} }, +/**/ {{0x3fa8e602, 0x8dbfa69b} } }, +/**/ {{{0x3fc00000, 0x00000000} }, +/**/ {{0x3fbfd5ba, 0x9aac2f6e} }, +/**/ {{0xbc4cd376, 0x86760c17} }, +/**/ {{0x3fef81f8, 0x1f81f820} }, +/**/ {{0xbc8f81f8, 0x1f81f820} }, +/**/ {{0xbfbf05e0, 0x9d0dc11b} }, +/**/ {{0xbc35a199, 0x1d821725} }, +/**/ {{0xbfd368c3, 0xaa76e1d7} }, +/**/ {{0xbc672d4c, 0xc796f8cd} }, +/**/ {{0x3fbd9b16, 0xb391c2e3} }, +/**/ {{0x3c58051b, 0x8086c51d} }, +/**/ {{0x3fc40489, 0x94488c86} }, +/**/ {{0xbfbba55d, 0xa98401c8} }, +/**/ {{0xbfb652e4, 0xe5127e64} }, +/**/ {{0x3fb93943, 0x442e53ae} }, +/**/ {{0x3fa72753, 0x86286f75} } }, +/**/ {{{0x3fc08000, 0x00000000} }, +/**/ {{0x3fc068d5, 0x84212b3e} }, +/**/ {{0xbc69e2d2, 0x83019bfd} }, +/**/ {{0x3fef7a19, 0x991bb133} }, +/**/ {{0x3c7a956a, 0x66627723} }, +/**/ {{0xbfbfee16, 0x97c8e137} }, +/**/ {{0x3c4d9399, 0x66dbe7af} }, +/**/ {{0xbfd34ac5, 0x0810323a} }, +/**/ {{0x3c6a1a57, 0x6bc6c512} }, +/**/ {{0x3fbe61a2, 0x5c75a6f9} }, +/**/ {{0xbc492b99, 0xd75c8f85} }, +/**/ {{0x3fc3b0b1, 0xd9fa3f20} }, +/**/ {{0xbfbc3edb, 0xee66d309} }, +/**/ {{0xbfb58784, 0x905eeb33} }, +/**/ {{0x3fb99d80, 0x1c65bb14} }, +/**/ {{0x3fa564f1, 0x18a09884} } }, +/**/ {{{0x3fc10000, 0x00000000} }, +/**/ {{0x3fc0e6ad, 0xccf40882} }, +/**/ {{0xbc6d71a3, 0x1bb98d0d} }, +/**/ {{0x3fef7201, 0x32978bad} }, +/**/ {{0x3c816476, 0x599381e9} }, +/**/ {{0xbfc06a70, 0x011b81fd} }, +/**/ {{0xbc422f5d, 0x9ba697ca} }, +/**/ {{0xbfd32c01, 0x802fc0a5} }, +/**/ {{0x3c7d8e47, 0x08a20868} }, +/**/ {{0x3fbf24de, 0xb59597fe} }, +/**/ {{0xbc43288f, 0x410d31eb} }, +/**/ {{0x3fc35b16, 0x070feb24} }, +/**/ {{0xbfbcd2bf, 0xe4565b78} }, +/**/ {{0xbfb4b922, 0x128768c6} }, +/**/ {{0x3fb9f9cb, 0x5c42a097} }, +/**/ {{0x3fa39fa2, 0xc7f97f2e} } }, +/**/ {{{0x3fc18000, 0x00000000} }, +/**/ {{0x3fc16465, 0x41060850} }, +/**/ {{0x3c66bcee, 0x8ae7ea92} }, +/**/ {{0x3fef69af, 0x483f492b} }, +/**/ {{0xbc6e3280, 0x57db963e} }, +/**/ {{0xbfc0dd19, 0xdacaa844} }, +/**/ {{0xbc6133c7, 0xad7fc21e} }, +/**/ {{0xbfd30c7c, 0x6addaea8} }, +/**/ {{0xbc71443d, 0x89161c76} }, +/**/ {{0x3fbfe4ba, 0x6a6d3cd2} }, +/**/ {{0x3c50d4b8, 0x423ee67a} }, +/**/ {{0x3fc303c7, 0x092e569a} }, +/**/ {{0xbfbd60f5, 0x5b11d3b6} }, +/**/ {{0xbfb3e7fd, 0x283b5c55} }, +/**/ {{0x3fba4e19, 0x9d9a6ab7} }, +/**/ {{0x3fa1d82f, 0x3487cc29} } }, +/**/ {{{0x3fc20000, 0x00000000} }, +/**/ {{0x3fc1e1fa, 0xfb043727} }, +/**/ {{0xbc4b4859, 0x14dacf8c} }, +/**/ {{0x3fef6124, 0x38a14f5e} }, +/**/ {{0x3c798e9e, 0x001f6124} }, +/**/ {{0xbfc14f04, 0x59d3fb7c} }, +/**/ {{0x3c531efa, 0x4cc99cb2} }, +/**/ {{0xbfd2ec39, 0x31219b34} }, +/**/ {{0xbc618697, 0x6e004611} }, +/**/ {{0x3fc05092, 0x68736312} }, +/**/ {{0x3c67aad4, 0x8a06e4b5} }, +/**/ {{0x3fc2aad6, 0x07eca5ec} }, +/**/ {{0xbfbde969, 0xe19fe31c} }, +/**/ {{0xbfb31455, 0xdb6b9127} }, +/**/ {{0x3fba9a62, 0xf53dd9ee} }, +/**/ {{0x3fa00f5b, 0xa8e4ede0} } }, +/**/ {{{0x3fc28000, 0x00000000} }, +/**/ {{0x3fc25f6e, 0x171a535c} }, +/**/ {{0x3c67c6d7, 0xbde1a310} }, +/**/ {{0x3fef5860, 0x64866d22} }, +/**/ {{0x3c88c6ff, 0xd1f6326c} }, +/**/ {{0xbfc1c02b, 0x13c11396} }, +/**/ {{0xbc51b469, 0xffeb1a0f} }, +/**/ {{0xbfd2cb3b, 0x4c571b0f} }, +/**/ {{0x3c6e4f76, 0x2fb0b163} }, +/**/ {{0x3fc0ad06, 0xf5c213ab} }, +/**/ {{0x3c625bf2, 0xabea9e66} }, +/**/ {{0x3fc25054, 0x5f93bbb2} }, +/**/ {{0xbfbe6c0c, 0xc80a32c8} }, +/**/ {{0xbfb23e6c, 0x678d0d1e} }, +/**/ {{0x3fbadea2, 0xebf8ae4b} }, +/**/ {{0x3f9c8bd7, 0x527f133b} } }, +/**/ {{{0x3fc30000, 0x00000000} }, +/**/ {{0x3fc2dcbd, 0xb2fba1ff} }, +/**/ {{0x3c58f287, 0x05561534} }, +/**/ {{0x3fef4f64, 0x2ee76e94} }, +/**/ {{0x3c80ec89, 0xc6da5865} }, +/**/ {{0xbfc23089, 0xb322f867} }, +/**/ {{0x3c4c2b54, 0x5fcd0d6f} }, +/**/ {{0xbfd2a986, 0x45802261} }, +/**/ {{0xbc79a132, 0x5ae78b8a} }, +/**/ {{0x3fc107b3, 0x35a9d974} }, +/**/ {{0x3c5ef22d, 0xb725e335} }, +/**/ {{0x3fc1f453, 0x9bd98832} }, +/**/ {{0xbfbee8cf, 0x2057aad4} }, +/**/ {{0xbfb16681, 0x1e1bc3a1} }, +/**/ {{0x3fbb1ad8, 0x759c8f58} }, +/**/ {{0x3f98f941, 0x0b15b4aa} } }, +/**/ {{{0x3fc38000, 0x00000000} }, +/**/ {{0x3fc359e8, 0xedeb99a4} }, +/**/ {{0xbc6a5fd7, 0x4e4604c6} }, +/**/ {{0x3fef462f, 0xfce28238} }, +/**/ {{0x3c83dc01, 0xd90595d1} }, +/**/ {{0xbfc2a01b, 0xf7edfa6d} }, +/**/ {{0xbc6b11fb, 0x4a3b5c9a} }, +/**/ {{0xbfd2871d, 0xb4959402} }, +/**/ {{0xbc4a3702, 0x2fcf7ea3} }, +/**/ {{0x3fc1608f, 0xd8d7fe8c} }, +/**/ {{0x3c61ac60, 0xf8f1d41c} }, +/**/ {{0x3fc196e5, 0x729a89ca} }, +/**/ {{0xbfbf5fa3, 0xbec74f31} }, +/**/ {{0xbfb08cd4, 0x4b6c9767} }, +/**/ {{0x3fbb4f05, 0xe624ce15} }, +/**/ {{0x3f956871, 0xddb2020c} } }, +/**/ {{{0x3fc40000, 0x00000000} }, +/**/ {{0x3fc3d6ee, 0xe8c6626c} }, +/**/ {{0x3c661a3b, 0x0ce9281b} }, +/**/ {{0x3fef3cc4, 0x35b0713c} }, +/**/ {{0x3c81d0a7, 0xe69ea094} }, +/**/ {{0xbfc30edd, 0xb7d169f0} }, +/**/ {{0x3c6b3394, 0xae999b97} }, +/**/ {{0xbfd26405, 0x3fd62b3c} }, +/**/ {{0x3c73e339, 0xc0736df9} }, +/**/ {{0x3fc1b795, 0xe8e57ee3} }, +/**/ {{0xbc6130dc, 0x0a42c7f6} }, +/**/ {{0x3fc1381b, 0xbe93b8e5} }, +/**/ {{0xbfbfd07f, 0x394e1bf7} }, +/**/ {{0xbfaf634c, 0x37bb5315} }, +/**/ {{0x3fbb7b30, 0xe501e57b} }, +/**/ {{0x3f91dae1, 0x20503792} } }, +/**/ {{{0x3fc48000, 0x00000000} }, +/**/ {{0x3fc453ce, 0xc6092a9e} }, +/**/ {{0x3c61f653, 0xb3a5a78b} }, +/**/ {{0x3fef3321, 0x4299ace8} }, +/**/ {{0xbc87414c, 0x3a742b30} }, +/**/ {{0xbfc37cca, 0xde8b2323} }, +/**/ {{0x3c649378, 0x7b50aedf} }, +/**/ {{0xbfd24040, 0x9b13f4d0} }, +/**/ {{0x3c7e271f, 0xb7dc85c0} }, +/**/ {{0x3fc20cbe, 0xc9024068} }, +/**/ {{0x3c50921f, 0x88ef3da7} }, +/**/ {{0x3fc0d808, 0x7a1f1270} }, +/**/ {{0xbfc01dab, 0xf32d5436} }, +/**/ {{0xbfadaa6d, 0x02e6f09c} }, +/**/ {{0x3fbb9f62, 0x5e9cd766} }, +/**/ {{0x3f8ca3fe, 0xab964c04} } }, +/**/ {{{0x3fc50000, 0x00000000} }, +/**/ {{0x3fc4d087, 0xa9da4f17} }, +/**/ {{0x3c61f323, 0xf1adf158} }, +/**/ {{0x3fef2947, 0x8eeb3352} }, +/**/ {{0x3c871eb0, 0x8799a164} }, +/**/ {{0xbfc3e9df, 0x6e36e75c} }, +/**/ {{0x3c541555, 0x4e37666f} }, +/**/ {{0xbfd21bd3, 0x87008bd0} }, +/**/ {{0xbc609e14, 0xc24ff75f} }, +/**/ {{0x3fc26004, 0x36860504} }, +/**/ {{0xbc58f8ca, 0x1ebc8c40} }, +/**/ {{0x3fc076bd, 0xb9f4ead3} }, +/**/ {{0xbfc05012, 0xed70ddd5} }, +/**/ {{0xbfabef8a, 0x33e194b1} }, +/**/ {{0x3fbbbba6, 0x7423a91f} }, +/**/ {{0x3f859e6a, 0xdd99da12} } }, +/**/ {{{0x3fc58000, 0x00000000} }, +/**/ {{0x3fc54d18, 0xba11570a} }, +/**/ {{0x3c618282, 0xf2884073} }, +/**/ {{0x3fef1f37, 0x87eb4d7d} }, +/**/ {{0x3c8476f0, 0xedda13e6} }, +/**/ {{0xbfc45617, 0x7f997c7c} }, +/**/ {{0xbc46bf5b, 0x6423ceda} }, +/**/ {{0xbfd1f6c1, 0xd0784ec7} }, +/**/ {{0xbc74ec12, 0xd106a8e0} }, +/**/ {{0x3fc2b160, 0x4967338d} }, +/**/ {{0x3c5309c0, 0x61339c25} }, +/**/ {{0x3fc0144d, 0xa7f42962} }, +/**/ {{0xbfc07f71, 0x73dbaeec} }, +/**/ {{0xbfaa3322, 0x2aeda9a4} }, +/**/ {{0x3fbbd00c, 0x69b152b3} }, +/**/ {{0x3f7d4f90, 0x4c782821} } }, +/**/ {{{0x3fc60000, 0x00000000} }, +/**/ {{0x3fc5c981, 0x1e3ec26a} }, +/**/ {{0xbc5054ab, 0x2c010f3d} }, +/**/ {{0x3fef14f1, 0x9cce28eb} }, +/**/ {{0xbc8b7c25, 0x2708cd6e} }, +/**/ {{0xbfc4c16f, 0x42678d07} }, +/**/ {{0x3c5f55ba, 0xc1560017} }, +/**/ {{0xbfd1d10f, 0x4fccc153} }, +/**/ {{0x3c529588, 0x1bcc361d} }, +/**/ {{0x3fc300cd, 0x74979f8c} }, +/**/ {{0xbc6b1da5, 0x0bc1e891} }, +/**/ {{0x3fbf6194, 0xfbe70208} }, +/**/ {{0xbfc0abc5, 0x4b1c266f} }, +/**/ {{0xbfa875b2, 0x3b74e858} }, +/**/ {{0x3fbbdca6, 0x92e46f11} }, +/**/ {{0x3f6f0b17, 0x9de94aef} } }, +/**/ {{{0x3fc68000, 0x00000000} }, +/**/ {{0x3fc645bf, 0xffb3aa74} }, +/**/ {{0xbc3f536b, 0x677c2cb4} }, +/**/ {{0x3fef0a76, 0x3eaa4ed6} }, +/**/ {{0x3c888c52, 0x0b06c761} }, +/**/ {{0xbfc52be2, 0xfd884489} }, +/**/ {{0x3c67ec59, 0xbe5c728a} }, +/**/ {{0xbfd1aabf, 0xe80e4e0a} }, +/**/ {{0xbc71320e, 0xe90c909e} }, +/**/ {{0x3fc34e46, 0x864781ca} }, +/**/ {{0x3c42fcb3, 0x126138ee} }, +/**/ {{0x3fbe988d, 0x013b5d4f} }, +/**/ {{0xbfc0d50d, 0x122409a2} }, +/**/ {{0xbfa6b7b6, 0x7bb562c1} }, +/**/ {{0x3fbbe18a, 0x3df8dee8} }, +/**/ {{0x3f3e4009, 0x8809e1ef} } }, +/**/ {{{0x3fc70000, 0x00000000} }, +/**/ {{0x3fc6c1d4, 0x898933d9} }, +/**/ {{0xbc52954a, 0x7603c427} }, +/**/ {{0x3feeffc5, 0xe06cfb34} }, +/**/ {{0xbc85c037, 0x379877c2} }, +/**/ {{0xbfc5956f, 0x0f53a52c} }, +/**/ {{0x3c4d46a2, 0xe566376c} }, +/**/ {{0xbfd183d7, 0x86559c11} }, +/**/ {{0x3c7d2520, 0x64734c7f} }, +/**/ {{0x3fc399c6, 0xa80eddd5} }, +/**/ {{0x3c616c26, 0x40fbef6f} }, +/**/ {{0x3fbdcda7, 0xf4b571a7} }, +/**/ {{0xbfc0fb48, 0x3fd42996} }, +/**/ {{0xbfa4f9a9, 0x95c85118} }, +/**/ {{0x3fbbdecf, 0x9d795df4} }, +/**/ {{0xbf672003, 0xb85bf719} } }, +/**/ {{{0x3fc78000, 0x00000000} }, +/**/ {{0x3fc73dbd, 0xe8a7d202} }, +/**/ {{0xbc55ad0f, 0x6d4a665d} }, +/**/ {{0x3feef4e0, 0xf6ce5590} }, +/**/ {{0xbc833df6, 0x556900ef} }, +/**/ {{0xbfc5fe0f, 0xedcc9488} }, +/**/ {{0x3c5078de, 0xd2b9e35c} }, +/**/ {{0xbfd15c5a, 0x210cab36} }, +/**/ {{0x3c67fa93, 0xf55e532a} }, +/**/ {{0x3fc3e349, 0x5efd9a41} }, +/**/ {{0xbc6cf709, 0xc8573a12} }, +/**/ {{0x3fbd010a, 0x6c903aef} }, +/**/ {{0xbfc11e77, 0x20571328} }, +/**/ {{0xbfa33c04, 0x9a1875dd} }, +/**/ {{0x3fbbd491, 0xb09ec0ce} }, +/**/ {{0xbf78d197, 0x35537a65} } }, +/**/ {{{0x3fc80000, 0x00000000} }, +/**/ {{0x3fc7b97b, 0x4bce5b02} }, +/**/ {{0x3c5347b0, 0xb4f881ca} }, +/**/ {{0x3feee9c7, 0xf8458e02} }, +/**/ {{0xbc616380, 0x7ba71fe1} }, +/**/ {{0xbfc665c2, 0x26d69eeb} }, +/**/ {{0xbc572a33, 0xfdb5eea8} }, +/**/ {{0xbfd1344b, 0xb737e8f3} }, +/**/ {{0xbc757b70, 0x62badf41} }, +/**/ {{0x3fc42aca, 0x8b929b0b} }, +/**/ {{0x3c43cdb5, 0x7a8b7d91} }, +/**/ {{0x3fbc32d8, 0xf683981c} }, +/**/ {{0xbfc13e9a, 0xd22d5ecc} }, +/**/ {{0xbfa17f3e, 0xd35c8c33} }, +/**/ {{0x3fbbc2ee, 0x2a73307e} }, +/**/ {{0xbf82ee04, 0x2bddc834} } }, +/**/ {{{0x3fc88000, 0x00000000} }, +/**/ {{0x3fc8350b, 0xe398ebc8} }, +/**/ {{0xbc55a913, 0x32b9c90d} }, +/**/ {{0x3feede7b, 0x5cfce04c} }, +/**/ {{0x3c8507c2, 0x3b51a72f} }, +/**/ {{0xbfc6cc82, 0x6067718b} }, +/**/ {{0x3c6d00ca, 0xdbfc430f} }, +/**/ {{0xbfd10bb0, 0x4fbf6fe8} }, +/**/ {{0x3c321748, 0x53749c72} }, +/**/ {{0x3fc47046, 0x699a36ad} }, +/**/ {{0xbc63924c, 0x3994d40c} }, +/**/ {{0x3fbb6338, 0x0dfb7483} }, +/**/ {{0xbfc15bb5, 0x42ee5820} }, +/**/ {{0xbf9f879b, 0x385194fc} }, +/**/ {{0x3fbbaa05, 0x57d040e9} }, +/**/ {{0xbf895566, 0xada71ca0} } }, +/**/ {{{0x3fc90000, 0x00000000} }, +/**/ {{0x3fc8b06e, 0xe2879c29} }, +/**/ {{0xbc6118cd, 0x30308c4f} }, +/**/ {{0x3feed2fb, 0x9ec57f51} }, +/**/ {{0xbc83fdc5, 0xc0d106ba} }, +/**/ {{0xbfc7324d, 0x58b40d27} }, +/**/ {{0x3c68e240, 0xfc062163} }, +/**/ {{0xbfd0e28b, 0xf8b8a2bf} }, +/**/ {{0xbc7b8d8a, 0x64c55b39} }, +/**/ {{0x3fc4b3b9, 0x8ff46730} }, +/**/ {{0xbc5af146, 0x988563da} }, +/**/ {{0x3fba924c, 0x1277a10d} }, +/**/ {{0xbfc175c9, 0x2bbfd54d} }, +/**/ {{0xbf9c1448, 0x6c522340} }, +/**/ {{0x3fbb89fa, 0x044f2f6b} }, +/**/ {{0xbf8f9cc7, 0xaaecc742} } }, +/**/ {{{0x3fc98000, 0x00000000} }, +/**/ {{0x3fc92ba3, 0x7d050272} }, +/**/ {{0xbc60d3de, 0xd0ff4764} }, +/**/ {{0x3feec749, 0x390b6afe} }, +/**/ {{0xbc5c3d17, 0x4e3659ca} }, +/**/ {{0xbfc7971f, 0xe659b3de} }, +/**/ {{0x3c4cab11, 0x373f554d} }, +/**/ {{0xbfd0b8e2, 0xc6b052a4} }, +/**/ {{0x3c7da014, 0x6f3b74bc} }, +/**/ {{0x3fc4f520, 0xf0432146} }, +/**/ {{0xbc6769ad, 0xa8027290} }, +/**/ {{0x3fb9c039, 0x3e17b570} }, +/**/ {{0xbfc18cda, 0x0d8833a4} }, +/**/ {{0xbf98a567, 0x4627d340} }, +/**/ {{0x3fbb62f1, 0x5e42eff7} }, +/**/ {{0xbf92e10a, 0x7ee3bed3} } }, +/**/ {{{0x3fca0000, 0x00000000} }, +/**/ {{0x3fc9a6a8, 0xe96c8626} }, +/**/ {{0x3c4cf601, 0xe7b4348e} }, +/**/ {{0x3feebb64, 0xa8c932d7} }, +/**/ {{0x3c20538d, 0x79aae302} }, +/**/ {{0xbfc7faf6, 0xf88295fe} }, +/**/ {{0xbc687a81, 0x932909e9} }, +/**/ {{0xbfd08eb8, 0xd3f5a07b} }, +/**/ {{0xbc620a05, 0xfb7d6aaa} }, +/**/ {{0x3fc53479, 0xd6814372} }, +/**/ {{0xbc53c682, 0x0a0c6620} }, +/**/ {{0x3fb8ed23, 0x9c562d77} }, +/**/ {{0xbfc1a0ec, 0x2cdd89fd} }, +/**/ {{0xbf953bd4, 0xfec9df82} }, +/**/ {{0x3fbb3512, 0xd9d3f0f6} }, +/**/ {{0xbf95e1ab, 0x4534ccf5} } }, +/**/ {{{0x3fca8000, 0x00000000} }, +/**/ {{0x3fca217e, 0x601081a6} }, +/**/ {{0xbc60def8, 0xa60af374} }, +/**/ {{0x3feeaf4e, 0x6c7ba732} }, +/**/ {{0x3c89fa72, 0xe91fffe1} }, +/**/ {{0xbfc85dcf, 0x970642c3} }, +/**/ {{0xbc5732c2, 0x5b7f0ad0} }, +/**/ {{0xbfd06412, 0x3fe5c74d} }, +/**/ {{0xbc7d0053, 0x4a82f9b1} }, +/**/ {{0x3fc571c1, 0xe882973d} }, +/**/ {{0x3c59d9a3, 0x9090f12c} }, +/**/ {{0x3fb8192f, 0x00f5d0e0} }, +/**/ {{0xbfc1b204, 0x8db53983} }, +/**/ {{0xbf91d869, 0xbdd7b47e} }, +/**/ {{0x3fbb0088, 0x1355a903} }, +/**/ {{0xbf98cf57, 0x724a2ad9} } }, +/**/ {{{0x3fcb0000, 0x00000000} }, +/**/ {{0x3fca9c23, 0x1b403279} }, +/**/ {{0x3c60e8bb, 0xe89cca85} }, +/**/ {{0x3feea307, 0x04157b4f} }, +/**/ {{0x3c8ad743, 0xfd8bf1f0} }, +/**/ {{0xbfc8bfa6, 0xe285e2fd} }, +/**/ {{0xbc6ce765, 0x9c834c8f} }, +/**/ {{0xbfd038f3, 0x2e38fd26} }, +/**/ {{0x3c6a42ec, 0xef212a80} }, +/**/ {{0x3fc5acf7, 0x255d65d5} }, +/**/ {{0xbc619fba, 0xbe486771} }, +/**/ {{0x3fb7447e, 0xff244e15} }, +/**/ {{0xbfc1c028, 0xeed71b69} }, +/**/ {{0xbf8cf7f0, 0xaceecf68} }, +/**/ {{0x3fbac57c, 0xb0ee161b} }, +/**/ {{0xbf9ba92d, 0xefc8f53e} } }, +/**/ {{{0x3fcb8000, 0x00000000} }, +/**/ {{0x3fcb1696, 0x574d780c} }, +/**/ {{0xbc585ab8, 0xfc15a673} }, +/**/ {{0x3fee968e, 0xf0f2da5a} }, +/**/ {{0xbc6fffe1, 0x69710f0d} }, +/**/ {{0xbfc9207a, 0x148444b5} }, +/**/ {{0xbc66661a, 0x1802fa91} }, +/**/ {{0xbfd00d5f, 0xc65096ca} }, +/**/ {{0x3c7f2a2e, 0x8920e744} }, +/**/ {{0x3fc5e617, 0xe4be288d} }, +/**/ {{0x3c67fa48, 0x99be934f} }, +/**/ {{0x3fb66f36, 0xe0d4c87a} }, +/**/ {{0xbfc1cb5f, 0xc5179ce8} }, +/**/ {{0xbf864e9c, 0x1011bb6c} }, +/**/ {{0x3fba841e, 0x43a75476} }, +/**/ {{0xbf9e6e5b, 0x845fc859} } }, +/**/ {{{0x3fcc0000, 0x00000000} }, +/**/ {{0x3fcb90d7, 0x529260a2} }, +/**/ {{0x3c217b10, 0xd2e0e5ab} }, +/**/ {{0x3fee89e6, 0xb5ccf172} }, +/**/ {{0x3c820357, 0x153be26a} }, +/**/ {{0xbfc98046, 0x7f79bfd6} }, +/**/ {{0xbc0799ee, 0xf5d60955} }, +/**/ {{0xbfcfc2b8, 0x650d32f4} }, +/**/ {{0xbc6b59de, 0x4d01b49e} }, +/**/ {{0x3fc61d22, 0xd625e475} }, +/**/ {{0xbc68013f, 0xe23c6105} }, +/**/ {{0x3fb59979, 0x9e54f300} }, +/**/ {{0xbfc1d3b0, 0x365c2b85} }, +/**/ {{0xbf7f6cc9, 0x0afb6b97} }, +/**/ {{0x3fba3c9c, 0x28035c12} }, +/**/ {{0xbfa08f0d, 0x8331488a} } }, +/**/ {{{0x3fcc8000, 0x00000000} }, +/**/ {{0x3fcc0ae5, 0x4d768467} }, +/**/ {{0xbc604cdb, 0xf55f26dc} }, +/**/ {{0x3fee7d0e, 0xd6ad70cb} }, +/**/ {{0x3c8e6761, 0xee20d17d} }, +/**/ {{0xbfc9df09, 0x8ee3fcf8} }, +/**/ {{0x3c62daa3, 0xed723e81} }, +/**/ {{0xbfcf69d9, 0x3efdc9b4} }, +/**/ {{0x3c6c7b6f, 0x85a20110} }, +/**/ {{0x3fc65217, 0x0013c661} }, +/**/ {{0xbc678a0c, 0xab1387be} }, +/**/ {{0x3fb4c369, 0xd61f268e} }, +/**/ {{0xbfc1d922, 0x146d6110} }, +/**/ {{0xbf726199, 0xc0b0ed0a} }, +/**/ {{0x3fb9ef27, 0x6629c856} }, +/**/ {{0xbfa1dbda, 0xc1ea955d} } }, +/**/ {{{0x3fcd0000, 0x00000000} }, +/**/ {{0x3fcc84bf, 0x8a742e6e} }, +/**/ {{0xbc595bdd, 0x0682ea26} }, +/**/ {{0x3fee7007, 0xd8e205ea} }, +/**/ {{0x3c816199, 0x7b2991c1} }, +/**/ {{0xbfca3cc0, 0xc751a854} }, +/**/ {{0xbc66a2fd, 0x4efbc78c} }, +/**/ {{0xbfcf102a, 0x76f43baa} }, +/**/ {{0x3c6cfc38, 0x38d996b1} }, +/**/ {{0x3fc684f3, 0xbf1a9ad6} }, +/**/ {{0x3c52eaf7, 0x7c3b6690} }, +/**/ {{0x3fb3ed29, 0xc4ebba84} }, +/**/ {{0xbfc1dbbd, 0xd79a6a53} }, +/**/ {{0xbf55fa5b, 0xfd09510e} }, +/**/ {{0x3fb99bf2, 0x91c74d50} }, +/**/ {{0xbfa31d41, 0x3002c38b} } }, +/**/ {{{0x3fcd8000, 0x00000000} }, +/**/ {{0x3fccfe65, 0x4e1d5395} }, +/**/ {{0x3c647b9a, 0x3f71eafb} }, +/**/ {{0x3fee62d2, 0x42efd10e} }, +/**/ {{0x3c850a65, 0xa021973e} }, +/**/ {{0xbfca9969, 0xc66a1be4} }, +/**/ {{0x3c326164, 0x3753f036} }, +/**/ {{0xbfceb5b4, 0x6b550477} }, +/**/ {{0xbc64cacb, 0xa3ef610f} }, +/**/ {{0x3fc6b5b8, 0xc4e2c295} }, +/**/ {{0x3c66b228, 0x98b2ac7f} }, +/**/ {{0x3fb316db, 0x3e03bb80} }, +/**/ {{0xbfc1db8c, 0x99312ba1} }, +/**/ {{0x3f5ce5b0, 0x8536556f} }, +/**/ {{0x3fb94331, 0xa9b62abf} }, +/**/ {{0xbfa452f3, 0xb36f42fc} } }, +/**/ {{{0x3fce0000, 0x00000000} }, +/**/ {{0x3fcd77d5, 0xdf205736} }, +/**/ {{0x3c6c648d, 0x1534597e} }, +/**/ {{0x3fee556e, 0x9c86d7c6} }, +/**/ {{0xbc830c25, 0x34c9abfd} }, +/**/ {{0xbfcaf502, 0x42f10c89} }, +/**/ {{0xbc411261, 0xf8576d95} }, +/**/ {{0xbfce5a7f, 0x7b1596d9} }, +/**/ {{0x3c574baa, 0x78f7ae18} }, +/**/ {{0x3fc6e466, 0x171949b1} }, +/**/ {{0xbc6ff86b, 0x52f9c399} }, +/**/ {{0x3fb2409f, 0xa3d6f244} }, +/**/ {{0xbfc1d898, 0x0dceacbf} }, +/**/ {{0x3f73c3b6, 0xdc715080} }, +/**/ {{0x3fb8e519, 0xf78687ab} }, +/**/ {{0xbfa57cac, 0x6b1251ec} } }, +/**/ {{{0x3fce8000, 0x00000000} }, +/**/ {{0x3fcdf110, 0x864c9d9e} }, +/**/ {{0xbc35818b, 0x53bf4781} }, +/**/ {{0x3fee47dd, 0x6e7576a6} }, +/**/ {{0x3c89d322, 0x24b84595} }, +/**/ {{0xbfcb4f88, 0x0cc64717} }, +/**/ {{0xbc624035, 0x44bb97a3} }, +/**/ {{0xbfcdfe94, 0x046e8a3b} }, +/**/ {{0xbc6078ee, 0xd278da00} }, +/**/ {{0x3fc710fc, 0x0e4ccbb7} }, +/**/ {{0xbc58c89c, 0x1da51f71} }, +/**/ {{0x3fb16a97, 0xe0d7022a} }, +/**/ {{0xbfc1d2ea, 0x7f8b58f8} }, +/**/ {{0x3f800ed5, 0xaf259d18} }, +/**/ {{0x3fb881e1, 0xeefd29c7} }, +/**/ {{0xbfa69a2c, 0xae6aa0c1} } }, +/**/ {{{0x3fcf0000, 0x00000000} }, +/**/ {{0x3fce6a14, 0x8e96ec4d} }, +/**/ {{0x3c6866b2, 0x2029f765} }, +/**/ {{0x3fee3a1f, 0x429bd423} }, +/**/ {{0xbc86174a, 0x48961291} }, +/**/ {{0xbfcba8f9, 0x0ce18ad9} }, +/**/ {{0x3c62e3e9, 0xb50eb15d} }, +/**/ {{0xbfcda1fa, 0x63927806} }, +/**/ {{0xbbed7b15, 0x8073bacf} }, +/**/ {{0x3fc73b7b, 0x54b8d3bb} }, +/**/ {{0x3c602afb, 0x74869c1c} }, +/**/ {{0x3fb094e4, 0x60993bd6} }, +/**/ {{0xbfc1ca8e, 0xc806a157} }, +/**/ {{0x3f862263, 0xa854d278} }, +/**/ {{0x3fb819c1, 0x0d9e7452} }, +/**/ {{0xbfa7ab3d, 0x08743869} } }, +/**/ {{{0x3fcf8000, 0x00000000} }, +/**/ {{0x3fcee2e1, 0x451d980d} }, +/**/ {{0xbc59a770, 0x8c46ba91} }, +/**/ {{0x3fee2c34, 0xa3df5666} }, +/**/ {{0xbc8ef949, 0x19a92865} }, +/**/ {{0xbfcc0153, 0x454a9009} }, +/**/ {{0x3c5572bf, 0xda1123ca} }, +/**/ {{0xbfcd44ba, 0xf169cd42} }, +/**/ {{0xbc6db0f2, 0xf1052e0a} }, +/**/ {{0x3fc763e4, 0xe5006ad1} }, +/**/ {{0x3c66e21a, 0x3e902796} }, +/**/ {{0x3faf7f4a, 0x12812c7d} }, +/**/ {{0xbfc1bf90, 0x4a558d9d} }, +/**/ {{0x3f8c1b52, 0x2be7fbfd} }, +/**/ {{0x3fb7acef, 0xba5b0263} }, +/**/ {{0xbfa8afad, 0x2dddf4e5} } }, +/**/ {{{0x3fd00000, 0x00000000} }, +/**/ {{0x3fcf5b75, 0xf92c80dd} }, +/**/ {{0x3c68ab6e, 0x3cf7afbd} }, +/**/ {{0x3fee1e1e, 0x1e1e1e1e} }, +/**/ {{0x3c6e1e1e, 0x1e1e1e1e} }, +/**/ {{0xbfcc5894, 0xd10d4986} }, +/**/ {{0x3c5f00e2, 0xc4a6886a} }, +/**/ {{0xbfcce6de, 0x0253d27e} }, +/**/ {{0xbc65d764, 0x3c5fce89} }, +/**/ {{0x3fc78a3a, 0x08d88b02} }, +/**/ {{0x3c4fc5d6, 0x32bd57e4} }, +/**/ {{0x3fadd5f2, 0x6a622b44} }, +/**/ {{0xbfc1b1fa, 0xecd7c4e0} }, +/**/ {{0x3f90fc3e, 0x1fc8b549} }, +/**/ {{0x3fb73ba7, 0x25728acf} }, +/**/ {{0xbfa9a753, 0xeeba051f} } }, +/**/ {{{0x3fd04000, 0x00000000} }, +/**/ {{0x3fcfd3d1, 0xfc40dbe4} }, +/**/ {{0x3c437146, 0xf3a1c5ea} }, +/**/ {{0x3fee0fdc, 0x3e228818} }, +/**/ {{0xbc62e075, 0x8c042ef5} }, +/**/ {{0xbfccaebb, 0xe42a71b9} }, +/**/ {{0xbc69fa0a, 0x8025fd1d} }, +/**/ {{0xbfcc886b, 0xe4ed28e5} }, +/**/ {{0xbc59ccc3, 0x7604b95a} }, +/**/ {{0x3fc7ae7c, 0x57a32fb9} }, +/**/ {{0x3c67393b, 0xe36848c2} }, +/**/ {{0x3fac2dff, 0x5a1b7b6f} }, +/**/ {{0xbfc1a1db, 0x12f690d4} }, +/**/ {{0x3f93dc65, 0xa575dc1d} }, +/**/ {{0x3fb6c621, 0x28a107f6} }, +/**/ {{0xbfaa920f, 0x23d2c35f} } }, +/**/ {{{0x3fd08000, 0x00000000} }, +/**/ {{0x3fd025fa, 0x510665b6} }, +/**/ {{0xbc7672df, 0x6832fa48} }, +/**/ {{0x3fee016f, 0x9196b776} }, +/**/ {{0x3c81da3a, 0xb14efc08} }, +/**/ {{0xbfcd03c6, 0xcb847375} }, +/**/ {{0xbc6819f2, 0xfc4c6f52} }, +/**/ {{0xbfcc296c, 0xe0dbf8a5} }, +/**/ {{0xbc55cc84, 0x27fb1c17} }, +/**/ {{0x3fc7d0ad, 0xb4fbbf40} }, +/**/ {{0x3c6378b3, 0x41b71641} }, +/**/ {{0x3faa87ad, 0x440404cd} }, +/**/ {{0xbfc18f3d, 0x96d156a8} }, +/**/ {{0x3f96ad9b, 0x9ef40490} }, +/**/ {{0x3fb64c98, 0x27a95e14} }, +/**/ {{0xbfab6fc3, 0x97cfdce0} } }, +/**/ {{{0x3fd0c000, 0x00000000} }, +/**/ {{0x3fd061ee, 0xa03d6291} }, +/**/ {{0xbc45f760, 0xdb154301} }, +/**/ {{0x3fedf2d8, 0xa6f82a61} }, +/**/ {{0xbc6cedbb, 0x560866af} }, +/**/ {{0xbfcd57b3, 0xecc8c02c} }, +/**/ {{0x3c641512, 0x85b9541c} }, +/**/ {{0xbfcbc9e9, 0x35a209c0} }, +/**/ {{0x3c65bfd8, 0x4914a5d1} }, +/**/ {{0x3fc7f0d0, 0x4f358b07} }, +/**/ {{0xbc60dc70, 0x3f47a5cc} }, +/**/ {{0x3fa8e337, 0x50af01c1} }, +/**/ {{0xbfc17a2f, 0xc2daf61b} }, +/**/ {{0x3f996f63, 0x57b649f0} }, +/**/ {{0x3fb5cf46, 0xf14fef28} }, +/**/ {{0xbfac405c, 0xec5a22c2} } }, +/**/ {{{0x3fd10000, 0x00000000} }, +/**/ {{0x3fd09dc5, 0x97d86362} }, +/**/ {{0x3c762e47, 0x390cb865} }, +/**/ {{0x3fede418, 0x0d8b5ae6} }, +/**/ {{0x3c719298, 0x23f66cf0} }, +/**/ {{0xbfcdaa81, 0xc655a596} }, +/**/ {{0x3c666d0d, 0x6a90480b} }, +/**/ {{0xbfcb69e9, 0x1974fd6c} }, +/**/ {{0xbc68e199, 0xec28723f} }, +/**/ {{0x3fc80ee6, 0x9dcd2641} }, +/**/ {{0x3c37ccfe, 0x45b4bb82} }, +/**/ {{0x3fa740d7, 0x64b143be} }, +/**/ {{0xbfc162bf, 0x4b6b7330} }, +/**/ {{0x3f9c2147, 0x7a20d203} }, +/**/ {{0x3fb54e68, 0xa0d6b625} }, +/**/ {{0xbfad03cd, 0x7b6e81ad} } }, +/**/ {{{0x3fd14000, 0x00000000} }, +/**/ {{0x3fd0d97e, 0xe509acb3} }, +/**/ {{0x3c747c31, 0x7bd5a3eb} }, +/**/ {{0x3fedd52e, 0x554f6dcf} }, +/**/ {{0xbc75c686, 0xddcd060b} }, +/**/ {{0xbfcdfc2e, 0xef1cb578} }, +/**/ {{0xbc46ae20, 0xd1677d50} }, +/**/ {{0xbfcb0974, 0xb81cdb34} }, +/**/ {{0x3c36ed8e, 0xda61c86c} }, +/**/ {{0x3fc82af3, 0x5fcd53c1} }, +/**/ {{0xbc424fe5, 0x57b559e7} }, +/**/ {{0x3fa5a0c6, 0x17013aef} }, +/**/ {{0xbfc148fa, 0x484940dd} }, +/**/ {{0x3f9ec2da, 0x1737ca6d} }, +/**/ {{0x3fb4ca38, 0x800ba495} }, +/**/ {{0xbfadba0e, 0x35128042} } }, +/**/ {{{0x3fd18000, 0x00000000} }, +/**/ {{0x3fd1151a, 0x362431ca} }, +/**/ {{0xbc74dc8d, 0xc9077b9f} }, +/**/ {{0x3fedc61c, 0x0ef1f116} }, +/**/ {{0xbc8fe39f, 0x2d41c166} }, +/**/ {{0xbfce4cba, 0x1681d2c9} }, +/**/ {{0x3c340fb4, 0x369a3c18} }, +/**/ {{0xbfcaa894, 0x31d921e2} }, +/**/ {{0x3c6bf59e, 0x64c48da4} }, +/**/ {{0x3fc844f9, 0x9a284cea} }, +/**/ {{0xbc563be0, 0x629cfeb8} }, +/**/ {{0x3fa4033a, 0xa7f26285} }, +/**/ {{0xbfc12cef, 0x2e2d72ea} }, +/**/ {{0x3fa0a9da, 0x554d151d} }, +/**/ {{0x3fb442f1, 0xe9f9174f} }, +/**/ {{0xbfae631e, 0x799e467c} } }, +/**/ {{{0x3fd1c000, 0x00000000} }, +/**/ {{0x3fd15097, 0x3a9ce547} }, +/**/ {{0xbc7796ba, 0x7f9ca328} }, +/**/ {{0x3fedb6e1, 0xcbc2abaa} }, +/**/ {{0xbc823b7a, 0xc39a4e7c} }, +/**/ {{0xbfce9c22, 0x0436f806} }, +/**/ {{0xbc64a5ec, 0x885803cb} }, +/**/ {{0xbfca474f, 0x9a4c8963} }, +/**/ {{0x3c671cf3, 0x6793b663} }, +/**/ {{0x3fc85cfc, 0x9606243b} }, +/**/ {{0x3c5fd2b2, 0x1dcd45ed} }, +/**/ {{0x3fa2686a, 0xf8cc655f} }, +/**/ {{0xbfc10eac, 0xc8460b94} }, +/**/ {{0x3fa1e9bc, 0x0d6eb5ba} }, +/**/ {{0x3fb3b8d0, 0x2e4749c2} }, +/**/ {{0xbfaeff03, 0xf0d19201} } }, +/**/ {{{0x3fd20000, 0x00000000} }, +/**/ {{0x3fd18bf5, 0xa30bf178} }, +/**/ {{0x3c630ca4, 0x748b1bf9} }, +/**/ {{0x3feda780, 0x1da7801e} }, +/**/ {{0xbc861ff8, 0x961ff896} }, +/**/ {{0xbfceea65, 0x9814cb11} }, +/**/ {{0xbc5f9845, 0x34cb01ca} }, +/**/ {{0xbfc9e5ae, 0xf76f9fa1} }, +/**/ {{0x3c688b7a, 0xa3ee6a86} }, +/**/ {{0x3fc872ff, 0xdf090624} }, +/**/ {{0x3c31016f, 0x6fbad4bb} }, +/**/ {{0x3fa0d08b, 0x83fe02bc} }, +/**/ {{0xbfc0ee42, 0x31b98637} }, +/**/ {{0x3fa320e6, 0x5b309f28} }, +/**/ {{0x3fb32c0e, 0x755cbc43} }, +/**/ {{0xbfaf8dca, 0x5dea1ddb} } }, +/**/ {{{0x3fd24000, 0x00000000} }, +/**/ {{0x3fd1c735, 0x212dd884} }, +/**/ {{0xbc67d9ac, 0x78cb2f2e} }, +/**/ {{0x3fed97f7, 0x971063d2} }, +/**/ {{0x3c67a20b, 0xc8b326b7} }, +/**/ {{0xbfcf3783, 0xc9f01359} }, +/**/ {{0x3c4a8b96, 0xd0a651ad} }, +/**/ {{0xbfc983ba, 0x408a6757} }, +/**/ {{0x3c6dfff9, 0xe6424f06} }, +/**/ {{0x3fc88707, 0x41881aad} }, +/**/ {{0xbc63baf9, 0x2204fd29} }, +/**/ {{0x3f9e779e, 0xabd6e10d} }, +/**/ {{0xbfc0cbbe, 0xcf2eab41} }, +/**/ {{0x3fa44f31, 0x1659f377} }, +/**/ {{0x3fb29ce7, 0xa54a8a94} }, +/**/ {{0xbfb007c1, 0xb87973d7} } }, +/**/ {{{0x3fd28000, 0x00000000} }, +/**/ {{0x3fd20255, 0x67e47c96} }, +/**/ {{0xbc618323, 0x28f4290e} }, +/**/ {{0x3fed8848, 0xcaeb6c2a} }, +/**/ {{0x3c81e70d, 0xa08296a2} }, +/**/ {{0xbfcf837b, 0xa96c2792} }, +/**/ {{0xbc6ab5ce, 0xc6884369} }, +/**/ {{0xbfc92179, 0x5d351cdb} }, +/**/ {{0x3c617000, 0x68719d81} }, +/**/ {{0x3fc89916, 0xc8c1ca07} }, +/**/ {{0xbc6a3339, 0x18b0f81b} }, +/**/ {{0x3f9b54d0, 0x0caf6121} }, +/**/ {{0xbfc0a732, 0x485ba392} }, +/**/ {{0x3fa57477, 0xc250c31e} }, +/**/ {{0x3fb20b96, 0x4790b4a8} }, +/**/ {{0xbfb04223, 0x4ac23178} } }, +/**/ {{{0x3fd2c000, 0x00000000} }, +/**/ {{0x3fd23d56, 0x2b381042} }, +/**/ {{0xbc5c5317, 0x16200088} }, +/**/ {{0x3fed7874, 0x4c98f347} }, +/**/ {{0xbc8a7dac, 0x9a72647e} }, +/**/ {{0xbfcfce4c, 0x5dca68a2} }, +/**/ {{0x3c6433de, 0x8fb9ffdd} }, +/**/ {{0xbfc8bef4, 0x246041ce} }, +/**/ {{0xbc66c620, 0x1fb39160} }, +/**/ {{0x3fc8a932, 0xbd062535} }, +/**/ {{0xbc6e24c7, 0xfbc3a86c} }, +/**/ {{0x3f98390b, 0x64d0109d} }, +/**/ {{0xbfc080ac, 0x819f2998} }, +/**/ {{0x3fa69099, 0x8784ffb8} }, +/**/ {{0x3fb17854, 0x6fc55e9b} }, +/**/ {{0xbfb07618, 0x5f970a81} } }, +/**/ {{{0x3fd30000, 0x00000000} }, +/**/ {{0x3fd27837, 0x2057ef46} }, +/**/ {{0xbc7077cd, 0xd36dfc81} }, +/**/ {{0x3fed687a, 0xafdfd5ba} }, +/**/ {{0xbc782e68, 0xe19d8d3d} }, +/**/ {{0xbfd00bfa, 0x92db6fdb} }, +/**/ {{0x3c7854cd, 0xc0af523f} }, +/**/ {{0xbfc85c32, 0x5b640da2} }, +/**/ {{0x3c5d5bdd, 0x5e6f23d6} }, +/**/ {{0x3fc8b75f, 0xa1da32d2} }, +/**/ {{0x3c2788df, 0x29860bfe} }, +/**/ {{0x3f9524ad, 0xee810d60} }, +/**/ {{0xbfc0583d, 0x95a69dea} }, +/**/ {{0x3fa7a379, 0x2b4d3dec} }, +/**/ {{0x3fb0e35b, 0xa3290dfe} }, +/**/ {{0xbfb0a3b2, 0x19e12287} } }, +/**/ {{{0x3fd34000, 0x00000000} }, +/**/ {{0x3fd2b2f7, 0xfd9b5fe2} }, +/**/ {{0x3c2423cf, 0xc1c2d443} }, +/**/ {{0x3fed585c, 0x88e1caa2} }, +/**/ {{0xbc2c8af2, 0x01239e18} }, +/**/ {{0xbfd0303a, 0xab890af7} }, +/**/ {{0x3c7d42bf, 0x726290e6} }, +/**/ {{0xbfc7f93b, 0xb5175de0} }, +/**/ {{0x3c5d5d4b, 0xe0ddc367} }, +/**/ {{0x3fc8c3a2, 0x3414de7c} }, +/**/ {{0x3c5ade9b, 0xba92bfce} }, +/**/ {{0x3f921811, 0xda70853d} }, +/**/ {{0xbfc02df5, 0xcf23aaf0} }, +/**/ {{0x3fa8acfd, 0x06445ff8} }, +/**/ {{0x3fb04ce4, 0xc130eba4} }, +/**/ {{0xbfb0cb04, 0x29de3135} } }, +/**/ {{{0x3fd38000, 0x00000000} }, +/**/ {{0x3fd2ed98, 0x7a823cfe} }, +/**/ {{0x3c6b9125, 0x8ea012ca} }, +/**/ {{0x3fed481a, 0x6c0fd782} }, +/**/ {{0x3c82dda4, 0x85ff74ea} }, +/**/ {{0xbfd053e6, 0x2f5c1e18} }, +/**/ {{0xbc679cf2, 0x8ec637b8} }, +/**/ {{0xbfc79617, 0xd0ee3e3b} }, +/**/ {{0xbc4e91e0, 0x732049a6} }, +/**/ {{0x3fc8cdff, 0x67f6478d} }, +/**/ {{0xbc5cb659, 0xf5079e63} }, +/**/ {{0x3f8e271c, 0x8e8ef686} }, +/**/ {{0xbfc001e5, 0xa2940881} }, +/**/ {{0x3fa9ad0e, 0xf937caae} }, +/**/ {{0x3faf6a4f, 0xda1e257f} }, +/**/ {{0xbfb0ec24, 0xb07d42be} } }, +/**/ {{{0x3fd3c000, 0x00000000} }, +/**/ {{0x3fd32818, 0x4fb58952} }, +/**/ {{0xbc7a95f0, 0xa9939f2f} }, +/**/ {{0x3fed37b4, 0xee1ee130} }, +/**/ {{0x3c747541, 0x6fbb1f2d} }, +/**/ {{0xbfd076fc, 0xe022dd0d} }, +/**/ {{0x3c6d8659, 0x5534523a} }, +/**/ {{0xbfc732ce, 0x3a201d6b} }, +/**/ {{0xbc56a551, 0xc98a3a62} }, +/**/ {{0x3fc8d67c, 0x673a29b8} }, +/**/ {{0xbc54ae9d, 0xff95efe6} }, +/**/ {{0x3f882eee, 0x74ce6814} }, +/**/ {{0xbfbfa83b, 0x503ba8f4} }, +/**/ {{0x3faaa39c, 0x60b63f75} }, +/**/ {{0x3fae38b8, 0xf07ff274} }, +/**/ {{0xbfb1072c, 0x2200fe4d} } }, +/**/ {{{0x3fd40000, 0x00000000} }, +/**/ {{0x3fd36277, 0x3707ebcc} }, +/**/ {{0xbc6963a5, 0x44b672d8} }, +/**/ {{0x3fed272c, 0xa3fc5b1a} }, +/**/ {{0x3c8ae01d, 0x272ca3fc} }, +/**/ {{0xbfd0997e, 0x8aec9d8e} }, +/**/ {{0x3c74aeda, 0x72595f36} }, +/**/ {{0xbfc6cf66, 0x66d5c0ff} }, +/**/ {{0x3c410e2a, 0x3ca66cc1} }, +/**/ {{0x3fc8dd1e, 0x8f2617b5} }, +/**/ {{0xbc6d173e, 0x4facfb67} }, +/**/ {{0x3f82483b, 0x33966883} }, +/**/ {{0xbfbf495d, 0x2b05b16b} }, +/**/ {{0x3fab9096, 0x074fdeaf} }, +/**/ {{0x3fad0571, 0x9c4605c9} }, +/**/ {{0xbfb11c35, 0x280318fd} } }, +/**/ {{{0x3fd44000, 0x00000000} }, +/**/ {{0x3fd39cb4, 0xeb76157c} }, +/**/ {{0xbc72f4da, 0x5a214713} }, +/**/ {{0x3fed1682, 0x22c31625} }, +/**/ {{0x3c8ac111, 0xd5e51b41} }, +/**/ {{0xbfd0bb6b, 0x07e9a89a} }, +/**/ {{0x3c76fb53, 0x7faa1dda} }, +/**/ {{0xbfc66be7, 0xb75f0772} }, +/**/ {{0xbc69a77d, 0xee6d618b} }, +/**/ {{0x3fc8e1eb, 0x6e943d69} }, +/**/ {{0xbc6982c4, 0xc5ec9ebe} }, +/**/ {{0x3f78e73c, 0x9c2d3c0c} }, +/**/ {{0xbfbee752, 0x7059f387} }, +/**/ {{0x3fac73f0, 0x16982f58} }, +/**/ {{0x3fabd0e4, 0xc146b407} }, +/**/ {{0xbfb12b5c, 0x82f43254} } }, +/**/ {{{0x3fd48000, 0x00000000} }, +/**/ {{0x3fd3d6d1, 0x29271134} }, +/**/ {{0x3c7137ca, 0x41cc958a} }, +/**/ {{0x3fed05b5, 0xffb0304c} }, +/**/ {{0xbc8fc921, 0x33e896e5} }, +/**/ {{0xbfd0dcc2, 0x3a49e254} }, +/**/ {{0x3c704578, 0x925cb599} }, +/**/ {{0xbfc60859, 0x75708502} }, +/**/ {{0xbc5f88bc, 0x9feebe6c} }, +/**/ {{0x3fc8e4e8, 0xc3fb5c1c} }, +/**/ {{0x3c6de114, 0xd6b77a05} }, +/**/ {{0x3f6ac6b3, 0xdbc6c857} }, +/**/ {{0xbfbe823c, 0xdeabd793} }, +/**/ {{0x3fad4da2, 0x06fb52a7} }, +/**/ {{0x3faa9b7b, 0x2bea698c} }, +/**/ {{0xbfb134c0, 0xeb32d745} } }, +/**/ {{{0x3fd4c000, 0x00000000} }, +/**/ {{0x3fd410cb, 0xad6c7d33} }, +/**/ {{0xbc7b0c8b, 0xae13b512} }, +/**/ {{0x3fecf4c8, 0xd0182625} }, +/**/ {{0x3c8e6308, 0xf4103798} }, +/**/ {{0xbfd0fd84, 0x101a5438} }, +/**/ {{0x3c425fcd, 0x7d2e3e34} }, +/**/ {{0xbfc5a4c2, 0xd36904f6} }, +/**/ {{0x3c5d3583, 0x54f27bb6} }, +/**/ {{0x3fc8e61c, 0x7b74b00c} }, +/**/ {{0x3c32f7ad, 0xefe568b6} }, +/**/ {{0x3f402f60, 0xaa3667f2} }, +/**/ {{0xbfbe1a3e, 0x4c9859c0} }, +/**/ {{0x3fae1da6, 0x8e77c589} }, +/**/ {{0x3fa9659b, 0x6ed5823e} }, +/**/ {{0xbfb13882, 0xf1d3d420} } }, +/**/ {{{0x3fd50000, 0x00000000} }, +/**/ {{0x3fd44aa4, 0x36c2af0a} }, +/**/ {{0xbc75d5e4, 0x3c55b3ba} }, +/**/ {{0x3fece3bb, 0x295c0773} }, +/**/ {{0xbc826fd5, 0x91851b41} }, +/**/ {{0xbfd11db0, 0x8221a582} }, +/**/ {{0x3c7e9654, 0xa9f31d11} }, +/**/ {{0xbfc5412a, 0xeb9ef661} }, +/**/ {{0x3c573faf, 0x5e60433c} }, +/**/ {{0x3fc8e58c, 0xacc06b3a} }, +/**/ {{0xbc5dba9a, 0x64dd81ed} }, +/**/ {{0xbf625ff7, 0xcfe3f01e} }, +/**/ {{0xbfbdaf78, 0x9dae4b1c} }, +/**/ {{0x3faee3fb, 0x8e4e3e16} }, +/**/ {{0x3fa82fa9, 0xc2c60fed} }, +/**/ {{0xbfb136c4, 0xe13555d9} } }, +/**/ {{{0x3fd54000, 0x00000000} }, +/**/ {{0x3fd4845a, 0x84d0c21b} }, +/**/ {{0x3c71e28a, 0x7563c6a6} }, +/**/ {{0x3fecd28d, 0xa0decfad} }, +/**/ {{0xbc72b2c8, 0x49610c12} }, +/**/ {{0xbfd13d47, 0x93bb8da8} }, +/**/ {{0x3c5df07a, 0x1b48d912} }, +/**/ {{0xbfc4dd98, 0xbfb5c8b7} }, +/**/ {{0x3c58a9ff, 0x39a108d7} }, +/**/ {{0x3fc8e33f, 0x99496dc4} }, +/**/ {{0x3c380d8b, 0x19d3995c} }, +/**/ {{0xbf743d59, 0xba1bc2d2} }, +/**/ {{0xbfbd420d, 0xb77862a1} }, +/**/ {{0x3fafa0a1, 0xffb9511c} }, +/**/ {{0x3fa6fa07, 0xe8a86cad} }, +/**/ {{0xbfb12faa, 0x9d75a109} } }, +/**/ {{{0x3fd58000, 0x00000000} }, +/**/ {{0x3fd4bdee, 0x586890e7} }, +/**/ {{0xbc6e4dc7, 0x7c22a757} }, +/**/ {{0x3fecc140, 0xcbfae3a7} }, +/**/ {{0xbc41045d, 0xd8b6f9b9} }, +/**/ {{0xbfd15c49, 0x52b34cdc} }, +/**/ {{0x3c729992, 0x2daa60ac} }, +/**/ {{0xbfc47a13, 0x37fb39ef} }, +/**/ {{0x3c5cb3b2, 0x3482d371} }, +/**/ {{0x3fc8df3b, 0xaa28e022} }, +/**/ {{0xbc61a8ab, 0x969a5447} }, +/**/ {{0xbf7f2135, 0xc651ecb4} }, +/**/ {{0xbfbcd21f, 0x76cc63f7} }, +/**/ {{0x3fb029ce, 0xefdf4de1} }, +/**/ {{0x3fa5c515, 0x0de3bf96} }, +/**/ {{0xbfb12359, 0x84e55ab4} } }, +/**/ {{{0x3fd5c000, 0x00000000} }, +/**/ {{0x3fd4f75f, 0x73869979} }, +/**/ {{0xbc595a1c, 0xf7ff1108} }, +/**/ {{0x3fecafd5, 0x3ff7b52c} }, +/**/ {{0x3c86e099, 0x684b6314} }, +/**/ {{0xbfd17ab5, 0xd71d366e} }, +/**/ {{0x3c602f2c, 0xae2f7b71} }, +/**/ {{0xbfc416a1, 0x22cc956f} }, +/**/ {{0x3c61d29e, 0xe98c24c1} }, +/**/ {{0x3fc8d987, 0x6e2a4f9f} }, +/**/ {{0xbc60de73, 0x4a6a7880} }, +/**/ {{0xbf84ed52, 0x909e42ec} }, +/**/ {{0xbfbc5fcf, 0xa56263a8} }, +/**/ {{0x3fb07e7b, 0x0d159803} }, +/**/ {{0x3fa4912d, 0xb2ddf20b} }, +/**/ {{0xbfb111f8, 0x508c8585} } }, +/**/ {{{0x3fd60000, 0x00000000} }, +/**/ {{0x3fd530ad, 0x9951cd4a} }, +/**/ {{0xbc625664, 0x80884082} }, +/**/ {{0x3fec9e4b, 0x91ff8d87} }, +/**/ {{0xbc7723ff, 0x1b0da370} }, +/**/ {{0xbfd1988d, 0x432f5908} }, +/**/ {{0x3c7d065e, 0xf8714cda} }, +/**/ {{0xbfc3b349, 0x3403e07c} }, +/**/ {{0x3c6b571d, 0x2717fbb0} }, +/**/ {{0x3fc8d229, 0x97d0e938} }, +/**/ {{0x3c66b228, 0xb08a0625} }, +/**/ {{0xbf8a3464, 0xc2fe9cde} }, +/**/ {{0xbfbbeb3f, 0xefb6f244} }, +/**/ {{0x3fb0ce5a, 0x39e67c0b} }, +/**/ {{0x3fa35eab, 0x93b4fb73} }, +/**/ {{0xbfb0fbae, 0xf4d86f78} } }, +/**/ {{{0x3fd64000, 0x00000000} }, +/**/ {{0x3fd569d8, 0x8e1b4cd8} }, +/**/ {{0xbc6fec61, 0xe713cfe2} }, +/**/ {{0x3fec8ca4, 0x57157fc9} }, +/**/ {{0x3c70da14, 0x515734ba} }, +/**/ {{0xbfd1b5cf, 0xc3195094} }, +/**/ {{0x3c740cce, 0xa9537e45} }, +/**/ {{0xbfc35012, 0x046cee83} }, +/**/ {{0xbc651b6c, 0xe446fd10} }, +/**/ {{0x3fc8c928, 0xfb5e6a95} }, +/**/ {{0x3c656cd2, 0x82469bf3} }, +/**/ {{0xbf8f6568, 0xa4afbb1b} }, +/**/ {{0xbfbb7491, 0xdb3aba50} }, +/**/ {{0x3fb11972, 0xb9fd56ec} }, +/**/ {{0x3fa22de5, 0x9329e15e} }, +/**/ {{0xbfb0e0a6, 0x8287d93d} } }, +/**/ {{{0x3fd68000, 0x00000000} }, +/**/ {{0x3fd5a2e0, 0x175e0f4e} }, +/**/ {{0x3c713b7a, 0x8f82e457} }, +/**/ {{0x3fec7ae0, 0x240b83ae} }, +/**/ {{0xbc885b56, 0x10d398ed} }, +/**/ {{0xbfd1d27d, 0x8cdb4db0} }, +/**/ {{0x3c11d95f, 0x2db0447f} }, +/**/ {{0xbfc2ed02, 0x11425541} }, +/**/ {{0xbc11d124, 0x6b2cbaa3} }, +/**/ {{0x3fc8be8c, 0x8cdc5c4d} }, +/**/ {{0xbc542511, 0x794444b0} }, +/**/ {{0xbf923ffd, 0xd25a5415} }, +/**/ {{0xbfbafbe6, 0xbcd1df44} }, +/**/ {{0x3fb15fcc, 0x26bdf05c} }, +/**/ {{0x3fa0ff2f, 0xa7b853e6} }, +/**/ {{0xbfb0c109, 0x07e9a35f} } }, +/**/ {{{0x3fd6c000, 0x00000000} }, +/**/ {{0x3fd5dbc3, 0xfbbe768d} }, +/**/ {{0x3c6ea0ec, 0x1b76f7da} }, +/**/ {{0x3fec68ff, 0x8d78b9ce} }, +/**/ {{0xbc83ab41, 0x4cb5a0c3} }, +/**/ {{0xbfd1ee96, 0xe01c5e6e} }, +/**/ {{0x3c73922c, 0xfb76d8dd} }, +/**/ {{0xbfc28a1f, 0xbbb23677} }, +/**/ {{0x3c6e592a, 0x288601f2} }, +/**/ {{0x3fc8b25b, 0x5e282403} }, +/**/ {{0xbbef7d58, 0x707e09fa} }, +/**/ {{0xbf94c1e0, 0xb65add31} }, +/**/ {{0xbfba815f, 0xafa52f1b} }, +/**/ {{0x3fb1a16f, 0x63712acc} }, +/**/ {{0x3f9fa5b5, 0x95a8d3ad} }, +/**/ {{0xbfb09d01, 0x72814750} } }, +/**/ {{{0x3fd70000, 0x00000000} }, +/**/ {{0x3fd61484, 0x0309cfe2} }, +/**/ {{0xbc7a7257, 0x15711f00} }, +/**/ {{0x3fec5703, 0x27afd9eb} }, +/**/ {{0x3c63c2ab, 0xb32c1d72} }, +/**/ {{0xbfd20a1c, 0x06000419} }, +/**/ {{0xbc7b5fe7, 0xf51a3a28} }, +/**/ {{0xbfc22771, 0x486ad2c8} }, +/**/ {{0xbc499ab5, 0xf84a7eae} }, +/**/ {{0x3fc8a49c, 0x9d027817} }, +/**/ {{0xbc53fcab, 0x2e376ecc} }, +/**/ {{0xbf973831, 0xeaabcb23} }, +/**/ {{0xbfba051d, 0x8c46fbce} }, +/**/ {{0x3fb1de66, 0x9132e9cc} }, +/**/ {{0x3f9d5269, 0xd48d5d65} }, +/**/ {{0xbfb074bb, 0x712354a4} } }, +/**/ {{{0x3fd74000, 0x00000000} }, +/**/ {{0x3fd64d1f, 0xf635c1c6} }, +/**/ {{0xbc7fa403, 0xe7c0fdbe} }, +/**/ {{0x3fec44eb, 0x86b5cbf8} }, +/**/ {{0xbc6a4101, 0xbc5b562d} }, +/**/ {{0xbfd2250d, 0x50fb21ad} }, +/**/ {{0xbc750066, 0xa39bdc1a} }, +/**/ {{0xbfc1c4fc, 0xdf2ed728} }, +/**/ {{0x3c6a87bb, 0x006772e9} }, +/**/ {{0x3fc89557, 0x9122b9b7} }, +/**/ {{0xbc05454e, 0x45b04f75} }, +/**/ {{0xbf99a2c9, 0x6c7888f1} }, +/**/ {{0xbfb98740, 0xe02d36ad} }, +/**/ {{0x3fb216bd, 0x02a99665} }, +/**/ {{0x3f9b0511, 0xb73aeccb} }, +/**/ {{0xbfb04863, 0x569b1738} } }, +/**/ {{{0x3fd78000, 0x00000000} }, +/**/ {{0x3fd68597, 0x9f5fa6fe} }, +/**/ {{0xbc425781, 0x4d1ada9c} }, +/**/ {{0x3fec32b9, 0x3e386c7f} }, +/**/ {{0x3c756033, 0x8cbaa5bf} }, +/**/ {{0xbfd23f6b, 0x1ca84e79} }, +/**/ {{0x3c604cc0, 0xf123d574} }, +/**/ {{0xbfc162c8, 0x8a715435} }, +/**/ {{0x3c5cf6db, 0x454fb8fd} }, +/**/ {{0x3fc88493, 0x9a4eb534} }, +/**/ {{0xbc668a5c, 0x42b959b0} }, +/**/ {{0xbf9c0182, 0x42580bb5} }, +/**/ {{0xbfb907e9, 0xe5822d56} }, +/**/ {{0x3fb24a7f, 0x2f8f8273} }, +/**/ {{0x3f98be3c, 0xa3527f46} }, +/**/ {{0xbfb01825, 0xfce97270} } }, +/**/ {{{0x3fd7c000, 0x00000000} }, +/**/ {{0x3fd6bdea, 0xc9cbd76d} }, +/**/ {{0xbc5a5c56, 0x3e6de828} }, +/**/ {{0x3fec206c, 0xe1857d04} }, +/**/ {{0xbc80439f, 0xf5c83872} }, +/**/ {{0xbfd25935, 0xcd9b9870} }, +/**/ {{0x3c6aaf98, 0xf1ec7306} }, +/**/ {{0xbfc100da, 0x36f94d02} }, +/**/ {{0xbc6e72ca, 0xd96d84ff} }, +/**/ {{0x3fc87258, 0x2e774351} }, +/**/ {{0x3c6c50a2, 0xb8860ef0} }, +/**/ {{0xbf9e543a, 0x741ef0ec} }, +/**/ {{0xbfb88738, 0x7b4d0ec2} }, +/**/ {{0x3fb279ba, 0xa8164103} }, +/**/ {{0x3f967e73, 0xa7f1ae35} }, +/**/ {{0xbfafc861, 0x5257c3de} } }, +/**/ {{{0x3fd80000, 0x00000000} }, +/**/ {{0x3fd6f619, 0x41e4def1} }, +/**/ {{0xbc7c63aa, 0xe6f6e918} }, +/**/ {{0x3fec0e07, 0x0381c0e0} }, +/**/ {{0x3c8c0e07, 0x0381c0e0} }, +/**/ {{0xbfd2726d, 0xd135c174} }, +/**/ {{0xbc2d352d, 0xe0951cf8} }, +/**/ {{0xbfc09f37, 0xb38cc8cf} }, +/**/ {{0xbc69db81, 0xae75327f} }, +/**/ {{0x3fc85eac, 0xd7da413c} }, +/**/ {{0x3c5b1a89, 0x6ebae2bc} }, +/**/ {{0xbfa04d69, 0x80fcc815} }, +/**/ {{0xbfb8054c, 0x1df326f9} }, +/**/ {{0x3fb2a47e, 0x082bda60} }, +/**/ {{0x3f944639, 0x7091d5a4} }, +/**/ {{0xbfaf5961, 0xe072e48c} } }, +/**/ {{{0x3fd84000, 0x00000000} }, +/**/ {{0x3fd72e22, 0xd53aa2aa} }, +/**/ {{0xbc7d9c93, 0x4e79f27c} }, +/**/ {{0x3febfb88, 0x36a04729} }, +/**/ {{0xbc872745, 0x9ac2ea21} }, +/**/ {{0xbfd28b13, 0x9d7702cf} }, +/**/ {{0x3c7819b9, 0x4be8bff6} }, +/**/ {{0xbfc03de6, 0xb0a35176} }, +/**/ {{0x3c5dbfb0, 0xc83347af} }, +/**/ {{0x3fc84999, 0x332a4f86} }, +/**/ {{0x3c5d304e, 0x0a22d12d} }, +/**/ {{0xbfa16a97, 0xed6b2d30} }, +/**/ {{0xbfb78243, 0xe0128950} }, +/**/ {{0x3fb2cad8, 0xeaa98f57} }, +/**/ {{0x3f92160a, 0x3bb39c5b} }, +/**/ {{0xbfaee3a9, 0x3804caa3} } }, +/**/ {{{0x3fd88000, 0x00000000} }, +/**/ {{0x3fd76607, 0x52817502} }, +/**/ {{0xbc4dd117, 0x91cc7600} }, +/**/ {{0x3febe8f1, 0x0cd9e1fe} }, +/**/ {{0xbc7a9688, 0xa21e102a} }, +/**/ {{0xbfd2a327, 0xb0d161e9} }, +/**/ {{0xbc60a2a9, 0x14b44140} }, +/**/ {{0xbfbfb9d9, 0x803f8d3b} }, +/**/ {{0x3c5e5779, 0x2a5c4097} }, +/**/ {{0x3fc83324, 0xedbcc363} }, +/**/ {{0x3c651fbc, 0xa0442744} }, +/**/ {{0xbfa2819b, 0xe91477c3} }, +/**/ {{0xbfb6fe3e, 0x63b6abf0} }, +/**/ {{0x3fb2ecdb, 0xdc73a89a} }, +/**/ {{0x3f8fdcb7, 0xaa755298} }, +/**/ {{0xbfae6793, 0x237c2f3d} } }, +/**/ {{{0x3fd8c000, 0x00000000} }, +/**/ {{0x3fd79dc6, 0x899118d1} }, +/**/ {{0x3c2b7413, 0xa0ef606d} }, +/**/ {{0x3febd642, 0x17a4cbc3} }, +/**/ {{0xbc55ee5d, 0x3200a548} }, +/**/ {{0xbfd2baaa, 0x91faa133} }, +/**/ {{0xbc6bd391, 0xfaf41548} }, +/**/ {{0xbfbef89e, 0xaa22d832} }, +/**/ {{0x3c413b3b, 0xc874fdb9} }, +/**/ {{0x3fc81b57, 0xc3be300a} }, +/**/ {{0x3c6baf9b, 0xc01a615f} }, +/**/ {{0xbfa3926a, 0x4a872ec7} }, +/**/ {{0xbfb67959, 0xd3e743cd} }, +/**/ {{0x3fb30a98, 0x4f919505} }, +/**/ {{0x3f8b9f3b, 0x28b78b08} }, +/**/ {{0xbfade57b, 0x71e33e9d} } }, +/**/ {{{0x3fd90000, 0x00000000} }, +/**/ {{0x3fd7d560, 0x4b63b3f7} }, +/**/ {{0x3c769c88, 0x5c2b249a} }, +/**/ {{0x3febc37b, 0xe7ec7a8d} }, +/**/ {{0xbc6f1246, 0x2b0e2727} }, +/**/ {{0xbfd2d19c, 0xcfbdd7fa} }, +/**/ {{0x3c7d0b11, 0x5e00c582} }, +/**/ {{0xbfbe3827, 0x86f8309b} }, +/**/ {{0x3c5d64e9, 0xfa6c56a7} }, +/**/ {{0x3fc80239, 0x7e6de8de} }, +/**/ {{0x3c68d62f, 0x7776e849} }, +/**/ {{0xbfa49cf9, 0x4f6d8017} }, +/**/ {{0xbfb5f3b3, 0xde917e27} }, +/**/ {{0x3fb32420, 0x8e455cc2} }, +/**/ {{0x3f877470, 0xb9fc88fe} }, +/**/ {{0xbfad5dbd, 0xc6b10536} } }, +/**/ {{{0x3fd94000, 0x00000000} }, +/**/ {{0x3fd80cd4, 0x6a14b1d1} }, +/**/ {{0xbc7e79f9, 0x9684fa19} }, +/**/ {{0x3febb09f, 0x0e09a222} }, +/**/ {{0x3c85748e, 0x7e047edd} }, +/**/ {{0xbfd2e7ff, 0x00ccbbc8} }, +/**/ {{0xbc78eb0a, 0x96875561} }, +/**/ {{0xbfbd787e, 0x804ecc06} }, +/**/ {{0xbc27263b, 0x2e4351f8} }, +/**/ {{0x3fc7e7d1, 0xf260d7b4} }, +/**/ {{0xbc430525, 0x8ed258e3} }, +/**/ {{0xbfa5a140, 0x968d3d02} }, +/**/ {{0xbfb56d69, 0xaecb845e} }, +/**/ {{0x3fb33987, 0xae292f95} }, +/**/ {{0x3f835d1d, 0x48e09ecd} }, +/**/ {{0xbfacd0b5, 0x6b6f9aca} } }, +/**/ {{{0x3fd98000, 0x00000000} }, +/**/ {{0x3fd84422, 0xb8df95d7} }, +/**/ {{0x3c7d76a0, 0x299b41b6} }, +/**/ {{0x3feb9dac, 0x19ba64d6} }, +/**/ {{0xbc4f643a, 0xa13ee09f} }, +/**/ {{0xbfd2fdd1, 0xc390a5c9} }, +/**/ {{0x3c575152, 0xaa856fcc} }, +/**/ {{0xbfbcb9ad, 0xc0e99751} }, +/**/ {{0x3c4e2d44, 0x1347a357} }, +/**/ {{0x3fc7cc28, 0xfdcbfd40} }, +/**/ {{0x3c60dc32, 0xe516db08} }, +/**/ {{0xbfa69f39, 0x19851d86} }, +/**/ {{0xbfb4e697, 0xe772087d} }, +/**/ {{0x3fb34ae1, 0x835992de} }, +/**/ {{0x3f7eb3f1, 0xe5326389} }, +/**/ {{0xbfac3ebd, 0x234575e8} } }, +/**/ {{{0x3fd9c000, 0x00000000} }, +/**/ {{0x3fd87b4b, 0x0c1ebedc} }, +/**/ {{0xbc76dcfa, 0xa2fa470f} }, +/**/ {{0x3feb8aa3, 0x9a1ab378} }, +/**/ {{0x3c8efdb0, 0xb797ab93} }, +/**/ {{0xbfd31315, 0xbdfb5e5a} }, +/**/ {{0x3c5813a8, 0x862f0c0d} }, +/**/ {{0xbfbbfbbf, 0x3478f169} }, +/**/ {{0xbc51e810, 0xd9e52582} }, +/**/ {{0x3fc7af46, 0x86d6ec76} }, +/**/ {{0xbc6336de, 0x3c13b159} }, +/**/ {{0xbfa796dd, 0x264b8050} }, +/**/ {{0xbfb45f5a, 0x9e1f6bef} }, +/**/ {{0x3fb35842, 0x93b26fc1} }, +/**/ {{0x3f76d75e, 0x39bc3abf} }, +/**/ {{0xbfaba82f, 0x006e38b2} } }, +/**/ {{{0x3fda0000, 0x00000000} }, +/**/ {{0x3fd8b24d, 0x394a1b25} }, +/**/ {{0x3c7b6d0b, 0xa3748fa8} }, +/**/ {{0x3feb7786, 0x1d9cdc98} }, +/**/ {{0xbc62e22c, 0x345bd7a8} }, +/**/ {{0xbfd327cb, 0x9d57b8f5} }, +/**/ {{0xbc135343, 0x753cc4f1} }, +/**/ {{0xbfbb3ebc, 0x8761b154} }, +/**/ {{0x3c5abeec, 0x8c168fdd} }, +/**/ {{0x3fc79132, 0x79f68c54} }, +/**/ {{0xbc658ab9, 0xd8d15eda} }, +/**/ {{0xbfa88828, 0x5872d73c} }, +/**/ {{0xbfb3d7cd, 0x567be750} }, +/**/ {{0x3fb361c0, 0x0a24fc71} }, +/**/ {{0x3f6e4b7a, 0x46aa98b6} }, +/**/ {{0xbfab0d64, 0x3bad3a76} } }, +/**/ {{{0x3fda4000, 0x00000000} }, +/**/ {{0x3fd8e929, 0x16f5cde8} }, +/**/ {{0x3c74c0a7, 0xe12bfafb} }, +/**/ {{0x3feb6454, 0x32024b37} }, +/**/ {{0xbc7987f7, 0x69cc9b53} }, +/**/ {{0xbfd33bf4, 0x161a0a40} }, +/**/ {{0x3c7a2321, 0x83ff46db} }, +/**/ {{0xbfba82af, 0x26913418} }, +/**/ {{0x3c3c4c62, 0x10a559fe} }, +/**/ {{0x3fc771f4, 0xc8506679} }, +/**/ {{0xbc54aaed, 0x63c7ccc3} }, +/**/ {{0xbfa97317, 0x9237e7ff} }, +/**/ {{0xbfb3500a, 0xfde5f112} }, +/**/ {{0x3fb3676f, 0xaa2c3459} }, +/**/ {{0x3f5e80cd, 0x04721907} }, +/**/ {{0xbfaa6eb5, 0x0dc212a5} } }, +/**/ {{{0x3fda8000, 0x00000000} }, +/**/ {{0x3fd91fde, 0x7cd0c662} }, +/**/ {{0x3c710741, 0x88054b53} }, +/**/ {{0x3feb510e, 0x6454751c} }, +/**/ {{0xbc199bfd, 0x7e0f2dca} }, +/**/ {{0xbfd34f8f, 0xe3b081f4} }, +/**/ {{0x3c7d7209, 0x3e2c0515} }, +/**/ {{0xbfb9c7a0, 0x3f5e2d2f} }, +/**/ {{0xbc20b02e, 0xea3bd312} }, +/**/ {{0x3fc75195, 0x6626c39a} }, +/**/ {{0x3c6f30d2, 0xb4219a8a} }, +/**/ {{0xbfaa57a8, 0xf55dfea5} }, +/**/ {{0xbfb2c82d, 0xe771fa17} }, +/**/ {{0x3fb36967, 0xc3654ab4} }, +/**/ {{0x3f11f322, 0xa23eb6eb} }, +/**/ {{0xbfa9cc78, 0x8ae579b1} } }, +/**/ {{{0x3fdac000, 0x00000000} }, +/**/ {{0x3fd9566d, 0x43a34907} }, +/**/ {{0x3c69b015, 0x37e0af2b} }, +/**/ {{0x3feb3db5, 0x40ddf8d3} }, +/**/ {{0xbc616f46, 0x793c10b8} }, +/**/ {{0xbfd3629f, 0xc8537217} }, +/**/ {{0x3c505738, 0x38143614} }, +/**/ {{0xbfb90d98, 0xbf75f20a} }, +/**/ {{0x3c4dc715, 0x6b842647} }, +/**/ {{0x3fc7301c, 0x494dd1e6} }, +/**/ {{0x3c5ec3d6, 0xf49f85b4} }, +/**/ {{0xbfab35db, 0xdbdd23b1} }, +/**/ {{0xbfb2404f, 0xc8407216} }, +/**/ {{0x3fb367bf, 0x255139f9} }, +/**/ {{0xbf5b8a0d, 0x65acd6da} }, +/**/ {{0xbfa92704, 0x8052f51d} } }, +/**/ {{{0x3fdb0000, 0x00000000} }, +/**/ {{0x3fd98cd5, 0x454d6b18} }, +/**/ {{0x3c79e6c9, 0x88fd0a77} }, +/**/ {{0x3feb2a49, 0x5323eb6a} }, +/**/ {{0xbc572202, 0x70cc9678} }, +/**/ {{0xbfd37524, 0x8cd58cc4} }, +/**/ {{0x3c6978a3, 0xda42aa4e} }, +/**/ {{0xbfb854a1, 0x54d5f784} }, +/**/ {{0xbc5e9a15, 0xb33b3d0d} }, +/**/ {{0x3fc70d91, 0x67aa0c46} }, +/**/ {{0xbc6aa72f, 0xa4ac9df8} }, +/**/ {{0xbfac0db0, 0xd0665a46} }, +/**/ {{0xbfb1b889, 0xb428e30d} }, +/**/ {{0x3fb3628d, 0x134448b0} }, +/**/ {{0xbf6bbbc1, 0x67619c9c} }, +/**/ {{0xbfa87ead, 0x53e1f653} } }, +/**/ {{{0x3fdb4000, 0x00000000} }, +/**/ {{0x3fd9c316, 0x5cc58107} }, +/**/ {{0x3c4b6696, 0x02250cfb} }, +/**/ {{0x3feb16cb, 0x25df55f4} }, +/**/ {{0xbc653abc, 0xf48e26bc} }, +/**/ {{0xbfd3871f, 0x00742189} }, +/**/ {{0xbc725ae2, 0xc05df451} }, +/**/ {{0xbfb79cc2, 0x6dd13675} }, +/**/ {{0x3be1d4e0, 0x991905e4} }, +/**/ {{0x3fc6e9fc, 0xb5b8147e} }, +/**/ {{0x3c46463b, 0xa57d4eca} }, +/**/ {{0xbfacdf29, 0x86c1db89} }, +/**/ {{0xbfb130f4, 0x1ab8d1c4} }, +/**/ {{0x3fb359e9, 0x38881228} }, +/**/ {{0xbf74a987, 0x53bec2ff} }, +/**/ {{0xbfa7d3c5, 0xe5af58b6} } }, +/**/ {{{0x3fdb8000, 0x00000000} }, +/**/ {{0x3fd9f930, 0x66168002} }, +/**/ {{0xbc7c8270, 0x47c9439a} }, +/**/ {{0x3feb033b, 0x42f6e2c9} }, +/**/ {{0xbc6eb80c, 0xc48702a7} }, +/**/ {{0xbfd3988f, 0xf8a76337} }, +/**/ {{0xbc636968, 0x5b1bb38a} }, +/**/ {{0xbfb6e604, 0x39212b04} }, +/**/ {{0xbc3c2e20, 0xba255e71} }, +/**/ {{0x3fc6c566, 0x251e2d41} }, +/**/ {{0x3c230ab3, 0x47236369} }, +/**/ {{0xbfadaa48, 0xd40b3417} }, +/**/ {{0xbfb0a9a6, 0xc484f2cc} }, +/**/ {{0x3fb34deb, 0x9cb4573e} }, +/**/ {{0xbf7b44ca, 0x1def6f17} }, +/**/ {{0xbfa7269f, 0x73d683b8} } }, +/**/ {{{0x3fdbc000, 0x00000000} }, +/**/ {{0x3fda2f23, 0x3e5e530b} }, +/**/ {{0x3c5814d5, 0xf797086b} }, +/**/ {{0x3feaef9a, 0x3378ba79} }, +/**/ {{0x3c7da16a, 0x4476e241} }, +/**/ {{0xbfd3a978, 0x50f2beab} }, +/**/ {{0x3c7b7e7f, 0xad5a31ea} }, +/**/ {{0xbfb6306e, 0xa602212f} }, +/**/ {{0xbc31ec15, 0x9ec38d55} }, +/**/ {{0x3fc69fd5, 0xa3477c6a} }, +/**/ {{0x3c571f2f, 0xb2996038} }, +/**/ {{0xbfae6f12, 0xa6cf162d} }, +/**/ {{0xbfb022b8, 0xd0cb2655} }, +/**/ {{0x3fb33eac, 0x9842912f} }, +/**/ {{0xbf80d789, 0x4919e78d} }, +/**/ {{0xbfa67789, 0x8037e242} } }, +/**/ {{{0x3fdc0000, 0x00000000} }, +/**/ {{0x3fda64ee, 0xc3cc23fd} }, +/**/ {{0xbc724dec, 0x1b50b7ff} }, +/**/ {{0x3feadbe8, 0x7f94905e} }, +/**/ {{0x3c2adbe8, 0x7f94905e} }, +/**/ {{0xbfd3b9d8, 0xeab54af9} }, +/**/ {{0x3c75b97d, 0x54fd0941} }, +/**/ {{0xbfb57c09, 0x645a7f9e} }, +/**/ {{0xbc5e79f6, 0x09320811} }, +/**/ {{0x3fc67953, 0x180938f2} }, +/**/ {{0x3c6246f2, 0xe7aee726} }, +/**/ {{0xbfaf2d8b, 0xff0ea012} }, +/**/ {{0xbfaf3881, 0x66c7250c} }, +/**/ {{0x3fb32c44, 0xc95ff694} }, +/**/ {{0xbf83f3f0, 0x25d7ff49} }, +/**/ {{0xbfa5c6d1, 0xb848e1d1} } }, +/**/ {{{0x3fdc4000, 0x00000000} }, +/**/ {{0x3fda9a92, 0xd59e98cf} }, +/**/ {{0x3c42e42d, 0xff75d817} }, +/**/ {{0x3feac826, 0xae95dea9} }, +/**/ {{0xbc534eec, 0x633dec57} }, +/**/ {{0xbfd3c9b2, 0xacfa5b18} }, +/**/ {{0x3c7a7e0c, 0x6c4d8d27} }, +/**/ {{0xbfb4c8db, 0xe4ecc0f6} }, +/**/ {{0xbc534990, 0xc0c32772} }, +/**/ {{0x3fc651e6, 0x6451e377} }, +/**/ {{0xbc6ea814, 0x2a9bb1f1} }, +/**/ {{0xbfafe5ba, 0xe62bc1b2} }, +/**/ {{0xbfae2ca8, 0x65fe3642} }, +/**/ {{0x3fb316cd, 0x09015968} }, +/**/ {{0xbf86f764, 0x3ce97a26} }, +/**/ {{0xbfa514c3, 0xdee8421b} } }, +/**/ {{{0x3fdc8000, 0x00000000} }, +/**/ {{0x3fdad00f, 0x5422058b} }, +/**/ {{0x3c7fc4c3, 0x3891d2e8} }, +/**/ {{0x3feab455, 0x46de51cf} }, +/**/ {{0xbc5b834a, 0xdbc38cc9} }, +/**/ {{0xbfd3d906, 0x844a38eb} }, +/**/ {{0x3c6198e5, 0xbc44eee8} }, +/**/ {{0xbfb416ed, 0x5993cade} }, +/**/ {{0xbc235ccb, 0xfa289b6c} }, +/**/ {{0x3fc62997, 0x60e2a3af} }, +/**/ {{0xbc69a660, 0xcf7bda0e} }, +/**/ {{0xbfb04bd3, 0x33612b72} }, +/**/ {{0xbfad2210, 0xcf62bcd9} }, +/**/ {{0x3fb2fe5e, 0x603bfc37} }, +/**/ {{0xbf89e1ba, 0xa9bce7ec} }, +/**/ {{0xbfa461a9, 0xb83029d5} } }, +/**/ {{{0x3fdcc000, 0x00000000} }, +/**/ {{0x3fdb0564, 0x20ae9344} }, +/**/ {{0xbc793139, 0x46363455} }, +/**/ {{0x3feaa074, 0xcde0631f} }, +/**/ {{0x3c84b49a, 0x143fe6d4} }, +/**/ {{0xbfd3e7d5, 0x627b115b} }, +/**/ {{0x3c77a502, 0x332989c0} }, +/**/ {{0xbfb36644, 0xb589513f} }, +/**/ {{0x3c3abdc9, 0x105eec96} }, +/**/ {{0x3fc6006d, 0xdd12e0be} }, +/**/ {{0xbc4f0281, 0x5d67cb35} }, +/**/ {{0xbfb0a1ab, 0x4238ba83} }, +/**/ {{0xbfac18e3, 0x73889526} }, +/**/ {{0x3fb2e311, 0xfde6351a} }, +/**/ {{0xbf8cb2d2, 0xc256833f} }, +/**/ {{0xbfa3adca, 0xf73e36f0} } }, +/**/ {{{0x3fdd0000, 0x00000000} }, +/**/ {{0x3fdb3a91, 0x1da65c6c} }, +/**/ {{0x3c7ae187, 0xb1ca5040} }, +/**/ {{0x3fea8c85, 0xc81a2254} }, +/**/ {{0xbc83c191, 0x8d67728b} }, +/**/ {{0xbfd3f620, 0x3e8218e0} }, +/**/ {{0xbc72bf32, 0x52bd43ef} }, +/**/ {{0xbfb2b6e8, 0xadb5f398} }, +/**/ {{0x3c340287, 0x6b74d451} }, +/**/ {{0x3fc5d671, 0x9d9e25fc} }, +/**/ {{0x3c639669, 0x518d7a71} }, +/**/ {{0xbfb0f46a, 0x19cc29a0} }, +/**/ {{0xbfab1147, 0xc1a69750} }, +/**/ {{0x3fb2c501, 0x2c826e6b} }, +/**/ {{0xbf8f6a95, 0xcbc1b186} }, +/**/ {{0xbfa2f96d, 0x2de89811} } }, +/**/ {{{0x3fdd4000, 0x00000000} }, +/**/ {{0x3fdb6f96, 0x2e737efc} }, +/**/ {{0xbc5ca534, 0x64981e71} }, +/**/ {{0x3fea7888, 0xb9102ddc} }, +/**/ {{0xbc7791b2, 0x3c46d7d5} }, +/**/ {{0xbfd403e8, 0x1444efb5} }, +/**/ {{0xbc6047c5, 0x4f3d22a6} }, +/**/ {{0xbfb208df, 0xb90ac1cc} }, +/**/ {{0x3c4078b1, 0x2d2115d8} }, +/**/ {{0x3fc5abaa, 0x5b7c61a2} }, +/**/ {{0x3c3eef6a, 0x2bd2d19a} }, +/**/ {{0xbfb14414, 0xa8850e1a} }, +/**/ {{0xbfaa0b63, 0xc6580343} }, +/**/ {{0x3fb2a445, 0x4876cfdf} }, +/**/ {{0xbf91047b, 0x562d0829} }, +/**/ {{0xbfa244d3, 0xbe562a83} } }, +/**/ {{{0x3fdd8000, 0x00000000} }, +/**/ {{0x3fdba473, 0x378624a5} }, +/**/ {{0x3c7519a1, 0xb46e4aff} }, +/**/ {{0x3fea647e, 0x2348d9a3} }, +/**/ {{0xbc84f6c2, 0x9156e59f} }, +/**/ {{0xbfd4112d, 0xe46b4c91} }, +/**/ {{0xbc78c11d, 0x110fe0b7} }, +/**/ {{0xbfb15c30, 0x10e3d572} }, +/**/ {{0x3c53b45b, 0x4427c00b} }, +/**/ {{0x3fc5801f, 0xc2c486ae} }, +/**/ {{0xbc49bb5e, 0xc20ced8b} }, +/**/ {{0xbfb190b0, 0x4cddef65} }, +/**/ {{0xbfa9075c, 0x2ae4bcd0} }, +/**/ {{0x3fb280f7, 0xb69396b9} }, +/**/ {{0xbf9246f8, 0xce179ccb} }, +/**/ {{0xbfa1903f, 0xce6e9b2b} } }, +/**/ {{{0x3fddc000, 0x00000000} }, +/**/ {{0x3fdbd928, 0x1e528192} }, +/**/ {{0xbc74b154, 0x39af6b66} }, +/**/ {{0x3fea5066, 0x88478403} }, +/**/ {{0xbc85c7e8, 0xbe71620f} }, +/**/ {{0xbfd41df2, 0xb430f4ac} }, +/**/ {{0xbc55db82, 0xe79c7595} }, +/**/ {{0xbfb0b0df, 0xb173ac76} }, +/**/ {{0x3c57f440, 0xe4738d25} }, +/**/ {{0x3fc553d9, 0x7199976b} }, +/**/ {{0x3c54990c, 0x2a872a12} }, +/**/ {{0xbfb1da42, 0xd137dd01} }, +/**/ {{0xbfa80554, 0x350bfdb5} }, +/**/ {{0x3fb25b31, 0xdae9e17f} }, +/**/ {{0xbf937cc5, 0xe9e265b4} }, +/**/ {{0xbfa0dbf0, 0x3d16a202} } }, +/**/ {{{0x3fde0000, 0x00000000} }, +/**/ {{0x3fdc0db4, 0xc94ec9f0} }, +/**/ {{0xbc7cc1ce, 0x70934c34} }, +/**/ {{0x3fea3c42, 0x68881898} }, +/**/ {{0x3c8f907f, 0xe5c3bd97} }, +/**/ {{0xbfd42a37, 0x8d38076d} }, +/**/ {{0xbc6b8354, 0x7e19d62d} }, +/**/ {{0xbfb006f4, 0x5a36f1bd} }, +/**/ {{0xbc41701e, 0xca398c09} }, +/**/ {{0x3fc526de, 0xf7221a2a} }, +/**/ {{0xbc211868, 0x8041247e} }, +/**/ {{0xbfb220d2, 0x67b0229a} }, +/**/ {{0xbfa7056d, 0xc74d0c66} }, +/**/ {{0x3fb2330d, 0x0ff472e2} }, +/**/ {{0xbf94a5e9, 0x9cb74216} }, +/**/ {{0xbfa02821, 0x992b9e1f} } }, +/**/ {{{0x3fde4000, 0x00000000} }, +/**/ {{0x3fdc4219, 0x1ff11eb7} }, +/**/ {{0xbc7b17df, 0x434b3eee} }, +/**/ {{0x3fea2812, 0x437ac09e} }, +/**/ {{0xbc540368, 0xf9618c21} }, +/**/ {{0xbfd435fd, 0x7d5ba406} }, +/**/ {{0x3c75605b, 0x5e0a732a} }, +/**/ {{0xbfaebce7, 0x1ce0c104} }, +/**/ {{0xbc446d02, 0xd4eb3297} }, +/**/ {{0x3fc4f937, 0xd289f60b} }, +/**/ {{0x3c5b88b7, 0xe736fa8b} }, +/**/ {{0xbfb26465, 0xa5f78db4} }, +/**/ {{0xbfa607c9, 0x61a972db} }, +/**/ {{0x3fb208a2, 0x9e13b088} }, +/**/ {{0xbf95c26f, 0x06c33653} }, +/**/ {{0xbf9eea1c, 0x346237b1} } }, +/**/ {{{0x3fde8000, 0x00000000} }, +/**/ {{0x3fdc7655, 0x0aad71f9} }, +/**/ {{0xbc774b8b, 0xff7043e4} }, +/**/ {{0x3fea13d6, 0x977fc070} }, +/**/ {{0xbc86c451, 0xd9440881} }, +/**/ {{0xbfd44145, 0x9682eee2} }, +/**/ {{0x3c74156f, 0xb13901b4} }, +/**/ {{0xbfad6ec5, 0x2b58de73} }, +/**/ {{0x3c2ced26, 0xdf653988} }, +/**/ {{0x3fc4caeb, 0x720eb232} }, +/**/ {{0x3c614246, 0x92f3f809} }, +/**/ {{0xbfb2a503, 0x812caa81} }, +/**/ {{0xbfa50c86, 0x22dc20a7} }, +/**/ {{0x3fb1dc0b, 0xb35de59d} }, +/**/ {{0xbf96d265, 0x4adc8c38} }, +/**/ {{0xbf9d85db, 0x35444e0c} } }, +/**/ {{{0x3fdec000, 0x00000000} }, +/**/ {{0x3fdcaa68, 0x72f3631b} }, +/**/ {{0x3c295067, 0x81636f48} }, +/**/ {{0x3fe9ff8f, 0xe1e381db} }, +/**/ {{0xbc6fffe6, 0x00701e1c} }, +/**/ {{0xbfd44c10, 0xee747cac} }, +/**/ {{0xbc7a7f22, 0xced401ad} }, +/**/ {{0xbfac238c, 0xf898de26} }, +/**/ {{0x3c1eb191, 0xdaa7d32f} }, +/**/ {{0x3fc49c01, 0x32160e42} }, +/**/ {{0x3c649f02, 0x03d0023c} }, +/**/ {{0xbfb2e2b3, 0x49ba4fb7} }, +/**/ {{0xbfa413c1, 0xca00d6c7} }, +/**/ {{0x3fb1ad61, 0x5bc495cf} }, +/**/ {{0xbf97d5df, 0x63d0ff69} }, +/**/ {{0xbf9c23eb, 0x27af7010} } }, +/**/ {{{0x3fdf0000, 0x00000000} }, +/**/ {{0x3fdcde53, 0x432c1351} }, +/**/ {{0xbc7a2cfa, 0x4418f1ad} }, +/**/ {{0x3fe9eb3e, 0x9edacacc} }, +/**/ {{0xbc8942c5, 0x87d23ca5} }, +/**/ {{0xbfd45660, 0x9eaa285d} }, +/**/ {{0x3c4fe8e6, 0x52cf85b4} }, +/**/ {{0xbfaadb48, 0x28319af3} }, +/**/ {{0xbc207b46, 0x31b456b0} }, +/**/ {{0x3fc46c80, 0x5c4ee7c2} }, +/**/ {{0x3c4bdfc1, 0xb4443c76} }, +/**/ {{0xbfb31d7c, 0xa73bc33f} }, +/**/ {{0xbfa31d98, 0xb8a731f5} }, +/**/ {{0x3fb17cbc, 0x798f7481} }, +/**/ {{0xbf98ccf3, 0xf977e9ca} }, +/**/ {{0xbf9ac4b2, 0x36ea1578} } }, +/**/ {{{0x3fdf4000, 0x00000000} }, +/**/ {{0x3fdd1215, 0x66b7f2ad} }, +/**/ {{0x3c7be678, 0x35886c30} }, +/**/ {{0x3fe9d6e3, 0x497f1fed} }, +/**/ {{0xbc8ec056, 0x9a35c454} }, +/**/ {{0xbfd46035, 0xc4255988} }, +/**/ {{0x3c7ddb7b, 0x7144427c} }, +/**/ {{0xbfa995ff, 0xe9b44acd} }, +/**/ {{0x3c3c9d56, 0xb529cf65} }, +/**/ {{0x3fc43c70, 0x26dc5cda} }, +/**/ {{0x3c6d6ee6, 0xfde6cd82} }, +/**/ {{0xbfb35567, 0x9467b39a} }, +/**/ {{0xbfa22a25, 0xf54ca1ba} }, +/**/ {{0x3fb14a35, 0xbe2d5d2d} }, +/**/ {{0xbf99b7bd, 0x35a34e74} }, +/**/ {{0xbf996891, 0xc4948489} } }, +/**/ {{{0x3fdf8000, 0x00000000} }, +/**/ {{0x3fdd45ae, 0xc9ec862b} }, +/**/ {{0x3c689421, 0x163ef92d} }, +/**/ {{0x3fe9c27e, 0x5bcb52c7} }, +/**/ {{0xbc892d91, 0xf148a350} }, +/**/ {{0xbfd46991, 0x7f43bff0} }, +/**/ {{0xbc738b23, 0x8da13c27} }, +/**/ {{0xbfa853bc, 0xf9f19dcd} }, +/**/ {{0x3c2ea7a9, 0x2433c5cf} }, +/**/ {{0x3fc40bd7, 0xb38b19e0} }, +/**/ {{0xbc5d466e, 0x1c2a2863} }, +/**/ {{0xbfb38a7c, 0x5b0333a7} }, +/**/ {{0xbfa13983, 0x2e3896d7} }, +/**/ {{0x3fb115e5, 0xa35b7545} }, +/**/ {{0xbf9a9658, 0x99098556} }, +/**/ {{0xbf980fe6, 0x693ac59e} } }, +/**/ {{{0x3fdfc000, 0x00000000} }, +/**/ {{0x3fdd791f, 0x5a1226f5} }, +/**/ {{0xbc64017e, 0xa5b64a76} }, +/**/ {{0x3fe9ae10, 0x4e983ae9} }, +/**/ {{0xbc8d45ed, 0x52b783d7} }, +/**/ {{0xbfd47274, 0xf394891f} }, +/**/ {{0xbc7cd478, 0x22e08713} }, +/**/ {{0xbfa71487, 0xa445379d} }, +/**/ {{0x3c1569aa, 0x831d87b7} }, +/**/ {{0x3fc3dabe, 0x0f10bc36} }, +/**/ {{0x3bd8df2b, 0x1cb9bbe6} }, +/**/ {{0xbfb3bcc3, 0x8fddd862} }, +/**/ {{0xbfa04bc8, 0xbcb632d9} }, +/**/ {{0x3fb0dfe4, 0x64a26d77} }, +/**/ {{0xbf9b68e6, 0xd04027d1} }, +/**/ {{0xbf96bb07, 0xf792c5d9} } }, +/**/ {{{0x3fe00000, 0x00000000} }, +/**/ {{0x3fddac67, 0x0561bb4f} }, +/**/ {{0x3c7a2b7f, 0x222f65e2} }, +/**/ {{0x3fe99999, 0x9999999a} }, +/**/ {{0xbc899999, 0x9999999a} }, +/**/ {{0xbfd47ae1, 0x47ae147b} }, +/**/ {{0x3c5eb851, 0xeb851eb8} }, +/**/ {{0xbfa5d867, 0xc3ece2a5} }, +/**/ {{0xbc3a485c, 0xd7b900af} }, +/**/ {{0x3fc3a92a, 0x30553261} }, +/**/ {{0x3c6f06f6, 0x94467382} }, +/**/ {{0xbfb3ec46, 0x0ed80a18} }, +/**/ {{0xbf9ec21b, 0x514d88d8} }, +/**/ {{0x3fb0a849, 0xf929a833} }, +/**/ {{0xbf9c2f8b, 0x88dfb80c} }, +/**/ {{0xbf956a49, 0x8245bf09} } }, +/**/ {{{0x3fe02000, 0x00000000} }, +/**/ {{0x3fdddf85, 0xbb026974} }, +/**/ {{0x3c643bbb, 0x0c0a1226} }, +/**/ {{0x3fe9851a, 0xb35b2797} }, +/**/ {{0x3c89cd14, 0x18a8fead} }, +/**/ {{0xbfd482d7, 0xa5042a2d} }, +/**/ {{0x3c0dbc04, 0xa8224d16} }, +/**/ {{0xbfa49f64, 0xc56ade02} }, +/**/ {{0x3c451e52, 0x47da7eea} }, +/**/ {{0x3fc37722, 0xf7c5fe7d} }, +/**/ {{0xbc5165be, 0xd22c4b5c} }, +/**/ {{0xbfb4190c, 0xf6f48c5d} }, +/**/ {{0xbf9cf2cf, 0x58d0c132} }, +/**/ {{0x3fb06f2e, 0x0ddfdd74} }, +/**/ {{0xbf9cea6d, 0x46e65336} }, +/**/ {{0xbf941df9, 0x6423af3b} } }, +/**/ {{{0x3fe04000, 0x00000000} }, +/**/ {{0x3fde127b, 0x6b0744b0} }, +/**/ {{0xbc52b098, 0x6398d4ab} }, +/**/ {{0x3fe97094, 0x113dcc5a} }, +/**/ {{0xbc842780, 0x4de8c575} }, +/**/ {{0xbfd48a59, 0x37beb8e5} }, +/**/ {{0xbc601dd2, 0x9dc7541e} }, +/**/ {{0xbfa36985, 0xa7f2a8fe} }, +/**/ {{0xbc45e414, 0x7437d42d} }, +/**/ {{0x3fc344af, 0x2eb33dd6} }, +/**/ {{0xbc6d66e9, 0xe3a3193c} }, +/**/ {{0xbfb44321, 0xa6763232} }, +/**/ {{0xbf9b29d6, 0x7217dfc9} }, +/**/ {{0x3fb034a7, 0xfff8a866} }, +/**/ {{0xbf9d99b5, 0x3a6e931d} }, +/**/ {{0xbf92d661, 0x4a9f7e19} } }, +/**/ {{{0x3fe06000, 0x00000000} }, +/**/ {{0x3fde4548, 0x066cf51a} }, +/**/ {{0x3c43a3aa, 0x12ce98f2} }, +/**/ {{0x3fe95c06, 0x2774fe53} }, +/**/ {{0x3c810dfd, 0x3b851412} }, +/**/ {{0xbfd49167, 0x2e911e43} }, +/**/ {{0xbc7f6506, 0x09466fcd} }, +/**/ {{0xbfa236d0, 0xfedfb0c1} }, +/**/ {{0xbc3f6870, 0x79cb63a9} }, +/**/ {{0x3fc311d5, 0x86b6561c} }, +/**/ {{0x3c561982, 0x9543fc9a} }, +/**/ {{0xbfb46a8d, 0xb70aa5a7} }, +/**/ {{0xbf996756, 0xf5ac1efc} }, +/**/ {{0x3faff19d, 0xaf7c84b3} }, +/**/ {{0xbf9e3d8f, 0x15ce96b8} }, +/**/ {{0xbf9193c6, 0x42726021} } }, +/**/ {{{0x3fe08000, 0x00000000} }, +/**/ {{0x3fde77eb, 0x7f175a34} }, +/**/ {{0x3c70e53d, 0xc1bf3435} }, +/**/ {{0x3fe94771, 0x69044ba4} }, +/**/ {{0xbc7d53e2, 0x92d5fbc1} }, +/**/ {{0xbfd49802, 0xba91fd89} }, +/**/ {{0x3c71963e, 0xc3c8c4f3} }, +/**/ {{0xbfa1074c, 0xf33546d5} }, +/**/ {{0x3c4bc296, 0xc71ad288} }, +/**/ {{0x3fc2de9c, 0x99222665} }, +/**/ {{0x3c6e4a10, 0x28dadb64} }, +/**/ {{0xbfb48f5a, 0xfa031cb1} }, +/**/ {{0xbf97ab74, 0xbc0c6420} }, +/**/ {{0x3faf7772, 0x876d0f75} }, +/**/ {{0xbf9ed628, 0xe431fc96} }, +/**/ {{0xbf905668, 0xc64515ec} } }, +/**/ {{{0x3fe0a000, 0x00000000} }, +/**/ {{0x3fdeaa65, 0xc7cf28c4} }, +/**/ {{0x3c62fb2c, 0xeca3bf05} }, +/**/ {{0x3fe932d6, 0x47bd0aaa} }, +/**/ {{0x3c6bdfec, 0x697b6e3c} }, +/**/ {{0xbfd49e2d, 0x0f13a7e8} }, +/**/ {{0x3c6198c5, 0x20412940} }, +/**/ {{0xbf9fb5fe, 0x8a4e92df} }, +/**/ {{0xbc3cbb58, 0x6309a51a} }, +/**/ {{0x3fc2ab0a, 0xe67c9829} }, +/**/ {{0xbc647643, 0x06a4c4ef} }, +/**/ {{0xbfb4b193, 0x749bc711} }, +/**/ {{0xbf95f651, 0x27bef265} }, +/**/ {{0x3faefafb, 0x28347ebf} }, +/**/ {{0xbf9f63b2, 0xe0c06e2f} }, +/**/ {{0xbf8e3d09, 0x9e7b9dd7} } }, +/**/ {{{0x3fe0c000, 0x00000000} }, +/**/ {{0x3fdedcb6, 0xd43f8435} }, +/**/ {{0xbc5fc976, 0x330884e4} }, +/**/ {{0x3fe91e35, 0x343c31e5} }, +/**/ {{0xbc8fd46f, 0x9bb96799} }, +/**/ {{0xbfd4a3e7, 0x617d19a1} }, +/**/ {{0xbc7d7303, 0xea58b250} }, +/**/ {{0xbf9d63da, 0x9b55d156} }, +/**/ {{0xbc14bf72, 0xd5b4cc6c} }, +/**/ {{0x3fc27726, 0xd6016a7c} }, +/**/ {{0x3c4eba22, 0x435ec4b4} }, +/**/ {{0xbfb4d141, 0x5c52b3c6} }, +/**/ {{0xbf94480b, 0x2fdd9fbd} }, +/**/ {{0x3fae7c63, 0x6d3af4b6} }, +/**/ {{0xbf9fe65f, 0x4e61315b} }, +/**/ {{0xbf8bd8a3, 0xcea37283} } }, +/**/ {{{0x3fe0e000, 0x00000000} }, +/**/ {{0x3fdf0ede, 0x98f393d0} }, +/**/ {{0xbc72f40a, 0x87cb1894} }, +/**/ {{0x3fe9098e, 0x9de85688} }, +/**/ {{0xbc7c2de1, 0xa3791e64} }, +/**/ {{0xbfd4a932, 0xe9238ed7} }, +/**/ {{0xbc67a1bb, 0x28864386} }, +/**/ {{0xbf9b1838, 0x001dec68} }, +/**/ {{0xbc33ee0e, 0x8f0ffbdd} }, +/**/ {{0x3fc242f6, 0xb52e1005} }, +/**/ {{0xbc5476eb, 0x371fd2c1} }, +/**/ {{0xbfb4ee6f, 0x134edf2d} }, +/**/ {{0xbf92a0bf, 0x6b13becc} }, +/**/ {{0x3fadfbd6, 0x650f859c} }, +/**/ {{0xbfa02f31, 0x281586f4} }, +/**/ {{0xbf898006, 0x7a73449e} } }, +/**/ {{{0x3fe10000, 0x00000000} }, +/**/ {{0x3fdf40dd, 0x0b541418} }, +/**/ {{0xbc6a3992, 0xdc382a23} }, +/**/ {{0x3fe8f4e2, 0xf2efd135} }, +/**/ {{0xbc74c3c0, 0xd4218911} }, +/**/ {{0xbfd4ae10, 0xdf24b2d1} }, +/**/ {{0x3c713b12, 0x79d0ac37} }, +/**/ {{0xbf98d31f, 0xd7365f3f} }, +/**/ {{0xbc18bf3b, 0x62531dc5} }, +/**/ {{0x3fc20e80, 0xb7567664} }, +/**/ {{0xbc54a699, 0xd450197f} }, +/**/ {{0xbfb50927, 0x24d80ddd} }, +/**/ {{0xbf910088, 0x1b0516ab} }, +/**/ {{0x3fad797e, 0x4a356567} }, +/**/ {{0xbfa065f8, 0xe14758ed} }, +/**/ {{0xbf87338f, 0x73d2f6bb} } }, +/**/ {{{0x3fe12000, 0x00000000} }, +/**/ {{0x3fdf72b2, 0x21a4e495} }, +/**/ {{0x3c5489c2, 0x0f7eb740} }, +/**/ {{0x3fe8e032, 0xa0470831} }, +/**/ {{0xbc8c154a, 0xe75570cd} }, +/**/ {{0xbfd4b282, 0x7e416c35} }, +/**/ {{0xbc7f1837, 0x60646afd} }, +/**/ {{0xbf96949a, 0x7a6bec27} }, +/**/ {{0x3c38238f, 0xe6b77ba9} }, +/**/ {{0x3fc1d9ca, 0xf5428c61} }, +/**/ {{0x3c6a968d, 0xcd7881aa} }, +/**/ {{0xbfb52174, 0x41e00b6e} }, +/**/ {{0xbf8ecefa, 0x702ad3de} }, +/**/ {{0x3facf584, 0x7c8ae0dc} }, +/**/ {{0xbfa097a2, 0x8aa44fa8} }, +/**/ {{0xbf84f394, 0x2ed63408} } }, +/**/ {{{0x3fe14000, 0x00000000} }, +/**/ {{0x3fdfa45d, 0xd3029259} }, +/**/ {{0xbc7ca563, 0xdc28d8b5} }, +/**/ {{0x3fe8cb7e, 0x11a6de80} }, +/**/ {{0x3c610be6, 0xac22b8f8} }, +/**/ {{0xbfd4b689, 0x02b9488a} }, +/**/ {{0x3c5ea0bd, 0xaf91d442} }, +/**/ {{0xbf945caf, 0x821fd17e} }, +/**/ {{0x3c38e464, 0x0e51a049} }, +/**/ {{0x3fc1a4db, 0x6cd45aad} }, +/**/ {{0x3c2288e0, 0xf4200d5e} }, +/**/ {{0xbfb53761, 0x3d9dd7c4} }, +/**/ {{0xbf8bab68, 0xfb107457} }, +/**/ {{0x3fac7011, 0x7b46ebd1} }, +/**/ {{0xbfa0c44a, 0x93134a8f} }, +/**/ {{0xbf82c061, 0xf1fa4589} } }, +/**/ {{{0x3fe16000, 0x00000000} }, +/**/ {{0x3fdfd5e0, 0x175fdf83} }, +/**/ {{0x3c63a87b, 0x1ec49b15} }, +/**/ {{0x3fe8b6c5, 0xb18b4749} }, +/**/ {{0xbc5fabb8, 0xb7d58c0a} }, +/**/ {{0xbfd4ba25, 0xaa26890c} }, +/**/ {{0x3c50e395, 0x0ef9b688} }, +/**/ {{0xbf922b65, 0xc8a9b4c0} }, +/**/ {{0x3c2835ee, 0xd319146f} }, +/**/ {{0x3fc16fb8, 0x00b681bd} }, +/**/ {{0x3c1df633, 0x279133b0} }, +/**/ {{0xbfb54af9, 0x0a3b410c} }, +/**/ {{0xbf889682, 0xebe14682} }, +/**/ {{0x3fabe94c, 0xdf89e086} }, +/**/ {{0xbfa0ec0e, 0x0e55a6f8} }, +/**/ {{0xbf809a3e, 0x08af68f3} } }, +/**/ {{{0x3fe18000, 0x00000000} }, +/**/ {{0x3fe0039c, 0x73c1a40c} }, +/**/ {{0xbc8b32c9, 0x49c9d593} }, +/**/ {{0x3fe8a209, 0xe931fcd3} }, +/**/ {{0x3c6cb8f0, 0x8e68c94c} }, +/**/ {{0xbfd4bd59, 0xb35ad2d8} }, +/**/ {{0xbc61ac1a, 0xcaa606b4} }, +/**/ {{0xbf9000c3, 0x6dc339ef} }, +/**/ {{0x3c2c62e2, 0xaeaeaa73} }, +/**/ {{0x3fc13a66, 0x7812ee2d} }, +/**/ {{0x3c6a8cc2, 0x948ffe5b} }, +/**/ {{0xbfb55c46, 0xb5955c9c} }, +/**/ {{0xbf85906b, 0x0fd2b503} }, +/**/ {{0x3fab615d, 0x577de2da} }, +/**/ {{0xbfa10f0a, 0xa34d31ec} }, +/**/ {{0xbf7d02cb, 0xefe48ad0} } }, +/**/ {{{0x3fe1a000, 0x00000000} }, +/**/ {{0x3fe01c34, 0x1e82422d} }, +/**/ {{0x3c83db44, 0xfcca90ee} }, +/**/ {{0x3fe88d4b, 0x20995a88} }, +/**/ {{0x3c802777, 0x1e42e681} }, +/**/ {{0xbfd4c026, 0x5e3c840f} }, +/**/ {{0x3c7d7c65, 0x3800420d} }, +/**/ {{0xbf8bb99b, 0xb3f88703} }, +/**/ {{0x3c1f62ec, 0x4bf63e82} }, +/**/ {{0x3fc104ec, 0x7e5193ee} }, +/**/ {{0xbc27771e, 0xbae4e07d} }, +/**/ {{0xbfb56b55, 0x66104515} }, +/**/ {{0xbf829940, 0x061a20d1} }, +/**/ {{0x3faad868, 0xa20334d9} }, +/**/ {{0xbfa12d5e, 0x7aba8ee6} }, +/**/ {{0xbf78ec1f, 0x69774b8d} } }, +/**/ {{{0x3fe1c000, 0x00000000} }, +/**/ {{0x3fe034b7, 0x09250488} }, +/**/ {{0x3c78f9b3, 0x8d855410} }, +/**/ {{0x3fe87889, 0xbe7f594b} }, +/**/ {{0xbc7530e1, 0xc826e7a3} }, +/**/ {{0xbfd4c28c, 0xeba4af80} }, +/**/ {{0x3c7104a9, 0xe6a95faa} }, +/**/ {{0xbf877f13, 0x846dba10} }, +/**/ {{0x3c2bc924, 0x4abd0010} }, +/**/ {{0x3fc0cf4f, 0xa2deff9f} }, +/**/ {{0xbc67d17e, 0xa013c015} }, +/**/ {{0xbfb57830, 0x577e7899} }, +/**/ {{0xbf7f6238, 0xb49ea16d} }, +/**/ {{0x3faa4e93, 0x8ae4a926} }, +/**/ {{0xbfa14728, 0x2e77f633} }, +/**/ {{0xbf74f0d3, 0xb81c893e} } }, +/**/ {{{0x3fe1e000, 0x00000000} }, +/**/ {{0x3fe04d25, 0x314342e6} }, +/**/ {{0xbc81c863, 0x6442c767} }, +/**/ {{0x3fe863c6, 0x2860ad7e} }, +/**/ {{0xbc81dcb2, 0x137a2d8f} }, +/**/ {{0xbfd4c48e, 0x9d3dc03a} }, +/**/ {{0xbc7d92af, 0x197b1db9} }, +/**/ {{0xbf8351f6, 0x5653b1a7} }, +/**/ {{0xbbe368b4, 0x2127dea7} }, +/**/ {{0x3fc09995, 0x58fa8ca4} }, +/**/ {{0xbc446391, 0x530429e5} }, +/**/ {{0xbfb582e2, 0xd81c26eb} }, +/**/ {{0xbf79b02d, 0x3e63c109} }, +/**/ {{0x3fa9c401, 0xe7904294} }, +/**/ {{0xbfa15c86, 0xb933b0f3} }, +/**/ {{0xbf711137, 0xd8d860e1} } }, +/**/ {{{0x3fe20000, 0x00000000} }, +/**/ {{0x3fe0657e, 0x94db30d0} }, +/**/ {{0xbc7d5b49, 0x5f6349e6} }, +/**/ {{0x3fe84f00, 0xc2780614} }, +/**/ {{0xbc7fe7b0, 0xff3d87fa} }, +/**/ {{0xbfd4c62c, 0xb562c625} }, +/**/ {{0x3c77b2c3, 0xa78e848c} }, +/**/ {{0xbf7e6495, 0xb3a4bcb7} }, +/**/ {{0x3c14eb89, 0xe3f2b0a5} }, +/**/ {{0x3fc063c2, 0xf78c0dc4} }, +/**/ {{0xbc6badf0, 0x7539dc13} }, +/**/ {{0xbfb58b78, 0x459eb443} }, +/**/ {{0xbf741c83, 0x1386e6b4} }, +/**/ {{0x3fa938d6, 0x944ff706} }, +/**/ {{0xbfa16d99, 0x66ad4037} }, +/**/ {{0xbf6a9b1a, 0x01fc736a} } }, +/**/ {{{0x3fe22000, 0x00000000} }, +/**/ {{0x3fe07dc3, 0x324e9b38} }, +/**/ {{0x3c7b70c9, 0xe04450ac} }, +/**/ {{0x3fe83a39, 0xefbd6bfe} }, +/**/ {{0xbc7b2885, 0x21f5de26} }, +/**/ {{0xbfd4c768, 0x76ff6c9e} }, +/**/ {{0x3c56a2c0, 0xdebc1603} }, +/**/ {{0xbf76402c, 0xd9cccfd7} }, +/**/ {{0xbc1b39c0, 0x4e9786c1} }, +/**/ {{0x3fc02ddd, 0xb900b57a} }, +/**/ {{0x3c45d916, 0xea88a215} }, +/**/ {{0xbfb591fc, 0x0a58ab40} }, +/**/ {{0xbf6d4eb0, 0x32a37ac9} }, +/**/ {{0x3fa8ad33, 0x71fe75f8} }, +/**/ {{0xbfa17a7f, 0xc477a855} }, +/**/ {{0xbf634c0e, 0x2b035011} } }, +/**/ {{{0x3fe24000, 0x00000000} }, +/**/ {{0x3fe095f3, 0x0861a590} }, +/**/ {{0xbc7121b2, 0x0a15a9f3} }, +/**/ {{0x3fe82572, 0x11e5c14d} }, +/**/ {{0xbc7df9fc, 0xacd80b09} }, +/**/ {{0xbfd4c843, 0x25709bff} }, +/**/ {{0x3c7a9ef6, 0x1790f484} }, +/**/ {{0xbf6c6d74, 0x8a0def34} }, +/**/ {{0xbc051e57, 0x2a8142d7} }, +/**/ {{0x3fbfefd5, 0x765e156b} }, +/**/ {{0xbc3e6048, 0xf0e29c9e} }, +/**/ {{0xbfb59679, 0x9a724e28} }, +/**/ {{0xbf62a185, 0xcf13e192} }, +/**/ {{0x3fa82139, 0x6433c13f} }, +/**/ {{0xbfa18359, 0x9342e95d} }, +/**/ {{0xbf586b34, 0x8f974107} } }, +/**/ {{{0x3fe26000, 0x00000000} }, +/**/ {{0x3fe0ae0e, 0x1639866c} }, +/**/ {{0x3c7075ab, 0xf2de445a} }, +/**/ {{0x3fe810a9, 0x89625f5d} }, +/**/ {{0xbc8e4bea, 0x0fcf7262} }, +/**/ {{0xbfd4c8be, 0x0465c69b} }, +/**/ {{0x3c462ef4, 0xd7f7f89c} }, +/**/ {{0xbf59210e, 0x4de612d5} }, +/**/ {{0xbbf43659, 0xba53898d} }, +/**/ {{0x3fbf83dd, 0xfe836c69} }, +/**/ {{0xbc36cb56, 0x27f5499a} }, +/**/ {{0xbfb598fc, 0x7136edda} }, +/**/ {{0xbf50634c, 0x00013fb7} }, +/**/ {{0x3fa79508, 0x4fe557c2} }, +/**/ {{0xbfa18846, 0xb8ae41dc} }, +/**/ {{0xbf455fce, 0xe36bd239} } }, +/**/ {{{0x3fe28000, 0x00000000} }, +/**/ {{0x3fe0c614, 0x5b5b43da} }, +/**/ {{0x3c5974fa, 0x13b5404f} }, +/**/ {{0x3fe7fbe0, 0xb560d35c} }, +/**/ {{0xbc84f066, 0xae5a0887} }, +/**/ {{0xbfd4c8da, 0x57c2e1cb} }, +/**/ {{0x3c73de0e, 0xe0a3774c} }, +/**/ {{0x3f38b341, 0x61c69f3c} }, +/**/ {{0x3bd7b2e2, 0x7b200371} }, +/**/ {{0x3fbf17de, 0xd351e8ed} }, +/**/ {{0x3c5bce38, 0x650c5a9c} }, +/**/ {{0xbfb59990, 0x0e77234c} }, +/**/ {{0x3f3006ef, 0x99f594ee} }, +/**/ {{0x3fa708bf, 0x1a75a6cc} }, +/**/ {{0xbfa18967, 0x31a471d5} }, +/**/ {{0x3f24cc7e, 0x59bf0521} } }, +/**/ {{{0x3fe2a000, 0x00000000} }, +/**/ {{0x3fe0de05, 0xd7aa6f7d} }, +/**/ {{0xbc783684, 0xb1c529ab} }, +/**/ {{0x3fe7e717, 0xf3cab884} }, +/**/ {{0x3c7e1b21, 0x3b1fa4c7} }, +/**/ {{0xbfd4c899, 0x63830b4b} }, +/**/ {{0xbc7b6e32, 0xae3ffeff} }, +/**/ {{0x3f628757, 0xfc06cc4f} }, +/**/ {{0xbbb4c155, 0x56f01f66} }, +/**/ {{0x3fbeabe1, 0x8424efd8} }, +/**/ {{0x3bdf5129, 0x6e5604ea} }, +/**/ {{0xbfb5983f, 0xf3ffff64} }, +/**/ {{0x3f57ec04, 0x1f564189} }, +/**/ {{0x3fa67c7b, 0xa92e6e68} }, +/**/ {{0xbfa186db, 0x0542d0ff} }, +/**/ {{0x3f4ee247, 0x11a37bde} } }, +/**/ {{{0x3fe2c000, 0x00000000} }, +/**/ {{0x3fe0f5e2, 0x8b67e295} }, +/**/ {{0x3be311b1, 0x7ec990d0} }, +/**/ {{0x3fe7d24f, 0xa145af59} }, +/**/ {{0xbc83c6d1, 0xabdb623b} }, +/**/ {{0xbfd4c7fc, 0x6b9bdb30} }, +/**/ {{0x3c7c2fae, 0xd3bbb84b} }, +/**/ {{0x3f70e125, 0xc729b366} }, +/**/ {{0x3c1291fb, 0x7a19993c} }, +/**/ {{0x3fbe3fef, 0x66cf0dd8} }, +/**/ {{0xbc5428b7, 0xcd5e7640} }, +/**/ {{0xbfb59517, 0xa3273c21} }, +/**/ {{0x3f65adcf, 0x36891acb} }, +/**/ {{0x3fa5f05a, 0xe121c017} }, +/**/ {{0xbfa180c2, 0x384bad65} }, +/**/ {{0x3f5bd6f1, 0xd31e02a7} } }, +/**/ {{{0x3fe2e000, 0x00000000} }, +/**/ {{0x3fe10daa, 0x77307a0d} }, +/**/ {{0x3c869c33, 0xd44c7b05} }, +/**/ {{0x3fe7bd88, 0x19337139} }, +/**/ {{0xbc7fd248, 0x00e777ef} }, +/**/ {{0xbfd4c704, 0xb3e16264} }, +/**/ {{0xbc7ed720, 0xd46ed4e3} }, +/**/ {{0x3f7863a5, 0x62c1daf7} }, +/**/ {{0x3c155e73, 0x30cc82d1} }, +/**/ {{0x3fbdd411, 0x97a241da} }, +/**/ {{0x3c27a15a, 0x9ac44edd} }, +/**/ {{0xbfb59022, 0x9a6c71a6} }, +/**/ {{0x3f6f285a, 0xb5534ebe} }, +/**/ {{0x3fa56478, 0xa76d3cf7} }, +/**/ {{0xbfa1773c, 0xc1240db6} }, +/**/ {{0x3f63e5a1, 0x3891a70c} } }, +/**/ {{{0x3fe30000, 0x00000000} }, +/**/ {{0x3fe1255d, 0x9bfbd2a9} }, +/**/ {{0xbc52bdae, 0xe1c0ee35} }, +/**/ {{0x3fe7a8c1, 0xb5b1ffa1} }, +/**/ {{0x3c873e4a, 0x4e005ea3} }, +/**/ {{0xbfd4c5b3, 0x7fead5b8} }, +/**/ {{0x3c77958e, 0x55abc25a} }, +/**/ {{0x3f7fcb31, 0x01e4c970} }, +/**/ {{0xbc1ad968, 0xc5337fda} }, +/**/ {{0x3fbd6850, 0xf983ecf1} }, +/**/ {{0xbc3e45e6, 0x02ed6910} }, +/**/ {{0xbfb5896c, 0x532f49b6} }, +/**/ {{0x3f7432e2, 0xeaefcf7f} }, +/**/ {{0x3fa4d8ef, 0xe1db38f0} }, +/**/ {{0xbfa16a6a, 0x7c5c9def} }, +/**/ {{0x3f69a742, 0x7b6fe5d0} } }, +/**/ {{{0x3fe32000, 0x00000000} }, +/**/ {{0x3fe13cfb, 0xfb1b056e} }, +/**/ {{0x3c83110e, 0x6fc3ed38} }, +/**/ {{0x3fe793fc, 0xcf9bee6c} }, +/**/ {{0xbc8dc7d2, 0xd8d91b6c} }, +/**/ {{0xbfd4c40a, 0x12f7e51f} }, +/**/ {{0x3c7d1e10, 0x0d5d686d} }, +/**/ {{0x3f838be8, 0x839d28fa} }, +/**/ {{0x3c13427a, 0x52131640} }, +/**/ {{0x3fbcfcb6, 0x360bfed5} }, +/**/ {{0xbc5e3cb4, 0xa36f599f} }, +/**/ {{0xbfb58100, 0x3f7aa463} }, +/**/ {{0x3f78b31e, 0xb76f2bc0} }, +/**/ {{0x3fa44dda, 0x77dd6b80} }, +/**/ {{0xbfa15a6b, 0x21c53ca9} }, +/**/ {{0x3f6f30a7, 0x6cd99ed4} } }, +/**/ {{{0x3fe34000, 0x00000000} }, +/**/ {{0x3fe15485, 0x9637646a} }, +/**/ {{0xbc84ba7c, 0x548bf3c3} }, +/**/ {{0x3fe77f39, 0xbe88c85e} }, +/**/ {{0xbc6a983f, 0x9b6750c8} }, +/**/ {{0xbfd4c209, 0xafd6bee5} }, +/**/ {{0x3c7d21ef, 0x5e73e93a} }, +/**/ {{0x3f8724c7, 0xfc556ca7} }, +/**/ {{0xbc23cef2, 0x42e5673e} }, +/**/ {{0x3fbc9149, 0xbdaef67d} }, +/**/ {{0xbc1e549c, 0x3f04fcdc} }, +/**/ {{0xbfb576e9, 0xc7e4996a} }, +/**/ {{0x3f7d14fc, 0xba6ceedb} }, +/**/ {{0x3fa3c351, 0x53dcdc4a} }, +/**/ {{0xbfa1475e, 0x3a0a53a1} }, +/**/ {{0x3f724116, 0x62102619} } }, +/**/ {{{0x3fe36000, 0x00000000} }, +/**/ {{0x3fe16bfa, 0x6f5137e1} }, +/**/ {{0x3c79606f, 0xe141bd35} }, +/**/ {{0x3fe76a78, 0xd8cd8d65} }, +/**/ {{0x3c854a99, 0xddf1f71f} }, +/**/ {{0xbfd4bfb3, 0x98cabe40} }, +/**/ {{0xbc61e24d, 0x9ef99598} }, +/**/ {{0x3f8ab03d, 0x388e6864} }, +/**/ {{0x3c210541, 0xc340d113} }, +/**/ {{0x3fbc2613, 0xc7f24ec4} }, +/**/ {{0x3c54042a, 0x0a59af31} }, +/**/ {{0xbfb56b34, 0x49833ac1} }, +/**/ {{0x3f80ac4f, 0x22f6cd28} }, +/**/ {{0x3fa3396c, 0x64dac153} }, +/**/ {{0xbfa13163, 0x14dadf32} }, +/**/ {{0x3f74ce20, 0x21aeee27} } }, +/**/ {{{0x3fe38000, 0x00000000} }, +/**/ {{0x3fe1835a, 0x88be7c13} }, +/**/ {{0x3c8c621c, 0xec00c301} }, +/**/ {{0x3fe755ba, 0x737d49ca} }, +/**/ {{0xbc8abaf3, 0xd4cb44c6} }, +/**/ {{0xbfd4bd09, 0x0f73c4b3} }, +/**/ {{0x3c3e9ebf, 0xa9936e0b} }, +/**/ {{0x3f8e2e4f, 0x8920477f} }, +/**/ {{0xbc0889e3, 0x0360e009} }, +/**/ {{0x3fbbbb1c, 0x53aaefa0} }, +/**/ {{0xbc5edb26, 0xa1007b7f} }, +/**/ {{0xbfb55deb, 0x13f5f619} }, +/**/ {{0x3f82bf14, 0xe675741e} }, +/**/ {{0x3fa2b042, 0xa05e0ebf} }, +/**/ {{0xbfa11898, 0xbf95c5c1} }, +/**/ {{0x3f773faf, 0xe421ee51} } }, +/**/ {{{0x3fe3a000, 0x00000000} }, +/**/ {{0x3fe19aa5, 0xe5299f9a} }, +/**/ {{0xbc8a606c, 0x2c58f835} }, +/**/ {{0x3fe740fe, 0xe269c5b3} }, +/**/ {{0x3c873eff, 0x4c82509c} }, +/**/ {{0xbfd4ba0b, 0x54b63d79} }, +/**/ {{0xbc51d68a, 0x75bceeff} }, +/**/ {{0x3f90cf83, 0x9d9b3eb0} }, +/**/ {{0xbc107399, 0x68a7ca2f} }, +/**/ {{0x3fbb506b, 0x27453d35} }, +/**/ {{0x3c326b36, 0x00bdfedd} }, +/**/ {{0xbfb54f19, 0x67836cef} }, +/**/ {{0x3f84c2e5, 0x567ed6e8} }, +/**/ {{0x3fa227ea, 0x04a983e8} }, +/**/ {{0xbfa0fd1d, 0xfc7ce22f} }, +/**/ {{0x3f79960c, 0x2ffea71d} } }, +/**/ {{{0x3fe3c000, 0x00000000} }, +/**/ {{0x3fe1b1dc, 0x87904285} }, +/**/ {{0xbc621e8c, 0x8aef8f29} }, +/**/ {{0x3fe72c46, 0x78244c5a} }, +/**/ {{0x3c888c36, 0xe664f3a2} }, +/**/ {{0xbfd4b6bb, 0xa8a3ca2f} }, +/**/ {{0xbc778793, 0x1e1f3e19} }, +/**/ {{0x3f928136, 0xc8a3d8bb} }, +/**/ {{0x3c3dc4d8, 0x140daf1c} }, +/**/ {{0x3fbae607, 0xd1165ef3} }, +/**/ {{0xbc5fbfaa, 0x6305876c} }, +/**/ {{0xbfb53eca, 0x734b94bd} }, +/**/ {{0x3f86b7d8, 0x7c458eb1} }, +/**/ {{0x3fa1a077, 0x9b360f57} }, +/**/ {{0xbfa0df11, 0x3a6beabd} }, +/**/ {{0x3f7bd182, 0xaf42dc87} } }, +/**/ {{{0x3fe3e000, 0x00000000} }, +/**/ {{0x3fe1c8fe, 0x7341f64f} }, +/**/ {{0x3c728bbc, 0x9d5e792a} }, +/**/ {{0x3fe71791, 0x85fe8a32} }, +/**/ {{0x3c8f15bd, 0xe8bbb0d0} }, +/**/ {{0xbfd4b31b, 0x4a6497be} }, +/**/ {{0x3c737223, 0x782968f7} }, +/**/ {{0x3f942c46, 0x5e0c3122} }, +/**/ {{0xbc33e26a, 0x86422b13} }, +/**/ {{0x3fba7bf9, 0xa7b659b8} }, +/**/ {{0xbc3cdf63, 0x25381986} }, +/**/ {{0xbfb52d09, 0x538deb45} }, +/**/ {{0x3f889e08, 0xa0c1f425} }, +/**/ {{0x3fa119ff, 0x7b6d72e6} }, +/**/ {{0xbfa0be90, 0x8d11287b} }, +/**/ {{0x3f7df267, 0xbce83ad4} } }, +/**/ {{{0x3fe40000, 0x00000000} }, +/**/ {{0x3fe1e00b, 0xabdefeb4} }, +/**/ {{0xbc5928df, 0x287a668f} }, +/**/ {{0x3fe702e0, 0x5c0b8170} }, +/**/ {{0x3c7702e0, 0x5c0b8170} }, +/**/ {{0xbfd4af2b, 0x78215a76} }, +/**/ {{0xbc581c2e, 0xab3a13d8} }, +/**/ {{0x3f95d0b7, 0xe9e4a9d0} }, +/**/ {{0xbc3aa02a, 0xebf91fc7} }, +/**/ {{0x3fba1247, 0xca629942} }, +/**/ {{0xbc46961a, 0xc245db83} }, +/**/ {{0xbfb519e1, 0x100385b4} }, +/**/ {{0x3f8a7592, 0x32616ed8} }, +/**/ {{0x3fa09494, 0xcda1223a} }, +/**/ {{0xbfa09bb9, 0xa5a5c251} }, +/**/ {{0x3f7ff915, 0xf489d8ba} } }, +/**/ {{{0x3fe42000, 0x00000000} }, +/**/ {{0x3fe1f704, 0x3557138a} }, +/**/ {{0x3c76c659, 0xf6d7dd47} }, +/**/ {{0x3fe6ee33, 0x4920943e} }, +/**/ {{0xbc62723e, 0x61a3a541} }, +/**/ {{0xbfd4aaed, 0x6eedf042} }, +/**/ {{0x3c5b337a, 0xe7561ed4} }, +/**/ {{0x3f976e91, 0x68796803} }, +/**/ {{0xbc0e806f, 0x44d1db93} }, +/**/ {{0x3fb9a8f9, 0x21688625} }, +/**/ {{0x3c540185, 0xb1ec0554} }, +/**/ {{0xbfb5055c, 0x9a4cbc61} }, +/**/ {{0x3f8c3e93, 0xab0be204} }, +/**/ {{0x3fa01049, 0xce3968a1} }, +/**/ {{0xbfa076a9, 0xcc2331ba} }, +/**/ {{0x3f80f2f6, 0xe220db7e} } }, +/**/ {{{0x3fe44000, 0x00000000} }, +/**/ {{0x3fe20de8, 0x13e823b2} }, +/**/ {{0xbc8791d7, 0x53ebb744} }, +/**/ {{0x3fe6d98a, 0x9ad6a3fd} }, +/**/ {{0xbc808110, 0xc4e69862} }, +/**/ {{0xbfd4a662, 0x6ab4a79d} }, +/**/ {{0x3c52ed25, 0x9fc1cc2b} }, +/**/ {{0x3f9905d9, 0x42e6dc28} }, +/**/ {{0xbc228c79, 0xe39b7707} }, +/**/ {{0x3fb94014, 0x5e97c6f4} }, +/**/ {{0xbc52b822, 0xf8779202} }, +/**/ {{0xbfb4ef86, 0xcc723054} }, +/**/ {{0x3f8df92d, 0x76852811} }, +/**/ {{0x3f9f1a5f, 0xa231ee3f} }, +/**/ {{0xbfa04f7d, 0xd8f34e77} }, +/**/ {{0x3f81dcaa, 0x80706a34} } }, +/**/ {{{0x3fe46000, 0x00000000} }, +/**/ {{0x3fe224b7, 0x4c1d192a} }, +/**/ {{0x3c8d6d3d, 0xf88a60c4} }, +/**/ {{0x3fe6c4e6, 0x9d8b44ec} }, +/**/ {{0xbc589d5c, 0x4ed04ec2} }, +/**/ {{0xbfd4a18b, 0xa6222a08} }, +/**/ {{0xbc66c919, 0xd3867dbd} }, +/**/ {{0x3f9a9696, 0x4bb5a8a0} }, +/**/ {{0x3c36698e, 0x927bb5bd} }, +/**/ {{0x3fb8d79f, 0xfdbbcc76} }, +/**/ {{0x3c2578bd, 0x4efb71a1} }, +/**/ {{0xbfb4d86a, 0x6778e363} }, +/**/ {{0x3f8fa581, 0xd930230d} }, +/**/ {{0x3f9e16ae, 0x8a6221aa} }, +/**/ {{0xbfa02652, 0x2f183972} }, +/**/ {{0x3f82b9db, 0x3e507f4f} } }, +/**/ {{{0x3fe48000, 0x00000000} }, +/**/ {{0x3fe23b71, 0xe2cc9e6a} }, +/**/ {{0x3c6c421c, 0x9f38224e} }, +/**/ {{0x3fe6b047, 0x9c620595} }, +/**/ {{0x3c8867df, 0x07d7f0c2} }, +/**/ {{0xbfd49c6a, 0x5a920887} }, +/**/ {{0xbc764547, 0x37bcc433} }, +/**/ {{0x3f9c20cf, 0xbb7e5931} }, +/**/ {{0xbc3d86f5, 0x4db6bef2} }, +/**/ {{0x3fb86fa2, 0x451c4a5d} }, +/**/ {{0xbc475142, 0x15afb52c} }, +/**/ {{0xbfb4c012, 0x120917da} }, +/**/ {{0x3f90a1da, 0x6b9c3fad} }, +/**/ {{0x3f9d159f, 0x708543e5} }, +/**/ {{0xbf9ff685, 0x6d929bce} }, +/**/ {{0x3f838ac0, 0xd0361a66} } }, +/**/ {{{0x3fe4a000, 0x00000000} }, +/**/ {{0x3fe25217, 0xdd17e501} }, +/**/ {{0x3c856aa8, 0x8c1b679c} }, +/**/ {{0x3fe69bad, 0xe145c95d} }, +/**/ {{0xbc873257, 0x5605046d} }, +/**/ {{0xbfd496ff, 0xbffbe8a8} }, +/**/ {{0x3c36a5c5, 0xc7b45e6f} }, +/**/ {{0x3f9da48d, 0x2d9556eb} }, +/**/ {{0x3c3ff0e8, 0x1871a19d} }, +/**/ {{0x3fb80821, 0x46043f42} }, +/**/ {{0x3c550eec, 0xe660cfa1} }, +/**/ {{0xbfb4a688, 0x5727a8cb} }, +/**/ {{0x3f9169f6, 0x0e13efbc} }, +/**/ {{0x3f9c174f, 0xb59149dd} }, +/**/ {{0xbf9f9cd5, 0xb10444dd} }, +/**/ {{0x3f844f95, 0x03e91dd9} } }, +/**/ {{{0x3fe4c000, 0x00000000} }, +/**/ {{0x3fe268a9, 0x40696da6} }, +/**/ {{0x3c5d1348, 0xa04c73cc} }, +/**/ {{0x3fe68719, 0xb4ea3592} }, +/**/ {{0xbc7ecf86, 0x088ed284} }, +/**/ {{0xbfd4914d, 0x0ce1507d} }, +/**/ {{0xbc6410ef, 0x4dff2946} }, +/**/ {{0x3f9f21d6, 0x9cbf7eb7} }, +/**/ {{0x3c39bc22, 0xeaaad7e2} }, +/**/ {{0x3fb7a122, 0xdd4f3070} }, +/**/ {{0x3c50d950, 0x1cfe44af} }, +/**/ {{0xbfb48bd7, 0xa50188df} }, +/**/ {{0x3f922b27, 0x71756204} }, +/**/ {{0x3f9b1bdb, 0x0810a33a} }, +/**/ {{0xbf9f3fca, 0xf1011313} }, +/**/ {{0x3f850893, 0x8fe0f49b} } }, +/**/ {{{0x3fe4e000, 0x00000000} }, +/**/ {{0x3fe27f26, 0x1273d1b3} }, +/**/ {{0x3c843bf3, 0x6151dd9f} }, +/**/ {{0x3fe6728b, 0x5ecd3069} }, +/**/ {{0x3c67417b, 0x539f23ff} }, +/**/ {{0xbfd48b53, 0x763c0fe8} }, +/**/ {{0xbc677a1a, 0x6027975c} }, +/**/ {{0x3fa04c5a, 0x2ff7dd6a} }, +/**/ {{0xbc40808e, 0x496202e8} }, +/**/ {{0x3fb73aac, 0xb3fc3f7c} }, +/**/ {{0x3c4b58cb, 0x86b114ff} }, +/**/ {{0xbfb4700a, 0x4bc91249} }, +/**/ {{0x3f92e582, 0xef2490f8} }, +/**/ {{0x3f9a235b, 0x6c875580} }, +/**/ {{0xbf9edf99, 0xe55cd596} }, +/**/ {{0x3f85b5f9, 0xe40c5a18} } }, +/**/ {{{0x3fe50000, 0x00000000} }, +/**/ {{0x3fe2958e, 0x59308e31} }, +/**/ {{0xbc709e73, 0xb0c6c087} }, +/**/ {{0x3fe65e03, 0x2538713c} }, +/**/ {{0xbc601392, 0x42c09163} }, +/**/ {{0xbfd48514, 0x2f6d4575} }, +/**/ {{0xbc356341, 0x4568af3f} }, +/**/ {{0x3fa10497, 0x9386fd1d} }, +/**/ {{0xbc4a756a, 0x230a452f} }, +/**/ {{0x3fb6d4c4, 0x3fc6c180} }, +/**/ {{0x3c5ab2b9, 0xdb3fe137} }, +/**/ {{0xbfb4532a, 0x7ca4cfd0} }, +/**/ {{0x3f93991d, 0x90eb1d30} }, +/**/ {{0x3f992de9, 0x46163051} }, +/**/ {{0xbf9e7c76, 0x2de874ff} }, +/**/ {{0x3f865806, 0xfc0c1cb2} } }, +/**/ {{{0x3fe52000, 0x00000000} }, +/**/ {{0x3fe2abe2, 0x1aded073} }, +/**/ {{0x3c8c28c0, 0x01ad022e} }, +/**/ {{0x3fe64981, 0x4d432177} }, +/**/ {{0x3c83f41b, 0x055e240c} }, +/**/ {{0xbfd47e90, 0x6a2cfd01} }, +/**/ {{0x3c628585, 0xf152d080} }, +/**/ {{0x3fa1b9a7, 0xfbe3ed9e} }, +/**/ {{0xbc18a085, 0xf259fe04} }, +/**/ {{0x3fb66f6e, 0xc3c40175} }, +/**/ {{0x3c41d80a, 0xb0fda762} }, +/**/ {{0xbfb43542, 0x48af643a} }, +/**/ {{0x3f94460d, 0x05ad7652} }, +/**/ {{0x3f983b9b, 0x5f55ab26} }, +/**/ {{0xbf9e1692, 0x4be18b23} }, +/**/ {{0x3f86eefb, 0x32e755a3} } }, +/**/ {{{0x3fe54000, 0x00000000} }, +/**/ {{0x3fe2c221, 0x5e024466} }, +/**/ {{0xbc44b810, 0xda3a4be1} }, +/**/ {{0x3fe63506, 0x1ad38da0} }, +/**/ {{0xbc67f12a, 0x94ec14b0} }, +/**/ {{0xbfd477c9, 0x567a6652} }, +/**/ {{0x3c7be71c, 0xbbb9df88} }, +/**/ {{0x3fa26b90, 0x1535acb9} }, +/**/ {{0xbc30ff6c, 0xff041454} }, +/**/ {{0x3fb60ab1, 0x5105d8fa} }, +/**/ {{0x3c535a89, 0x3f2d6492} }, +/**/ {{0xbfb4165b, 0xa0083319} }, +/**/ {{0x3f94ec67, 0x965eb0a7} }, +/**/ {{0x3f974c86, 0xf36231e5} }, +/**/ {{0xbf9dae1f, 0x9c25f4a4} }, +/**/ {{0x3f877b18, 0x183e42dc} } }, +/**/ {{{0x3fe56000, 0x00000000} }, +/**/ {{0x3fe2d84c, 0x2961e48c} }, +/**/ {{0xbc7f2542, 0x0a36e506} }, +/**/ {{0x3fe62091, 0xd0a0e5d4} }, +/**/ {{0x3c82a27d, 0xcccb008e} }, +/**/ {{0xbfd470c0, 0x228ca1b6} }, +/**/ {{0xbc788e9b, 0x32884415} }, +/**/ {{0x3fa31a54, 0xb365e4d9} }, +/**/ {{0x3c3e6e70, 0xda0f99ae} }, +/**/ {{0x3fb5a690, 0xc741ccb7} }, +/**/ {{0xbc383905, 0x6508ffe1} }, +/**/ {{0xbfb3f680, 0x50f46c17} }, +/**/ {{0x3f958c44, 0x1b344c30} }, +/**/ {{0x3f9660bf, 0xb713db8a} }, +/**/ {{0xbf9d434e, 0x5224992a} }, +/**/ {{0x3f87fca0, 0x46ffb16e} } }, +/**/ {{{0x3fe58000, 0x00000000} }, +/**/ {{0x3fe2ee62, 0x8406cbca} }, +/**/ {{0x3c8c5d5e, 0x9ff0cf8d} }, +/**/ {{0x3fe60c24, 0xb0350d38} }, +/**/ {{0x3c81ffe9, 0xf3db4fcb} }, +/**/ {{0xbfd46975, 0xfac420bd} }, +/**/ {{0x3c7e6994, 0x850528a0} }, +/**/ {{0x3fa3c5fa, 0xd098b4ee} }, +/**/ {{0x3c353c41, 0xaa6a6874} }, +/**/ {{0x3fb54311, 0xd57c5b53} }, +/**/ {{0x3c50d02e, 0x72d146e0} }, +/**/ {{0xbfb3d5ba, 0x071017e0} }, +/**/ {{0x3f9625b9, 0xf11b08a7} }, +/**/ {{0x3f957857, 0xe25bbc6f} }, +/**/ {{0xbf9cd64d, 0x7384981f} }, +/**/ {{0x3f8873d7, 0x3da3b8d5} } }, +/**/ {{{0x3fe5a000, 0x00000000} }, +/**/ {{0x3fe30464, 0x753b090b} }, +/**/ {{0xbc73e712, 0x61da18f3} }, +/**/ {{0x3fe5f7be, 0xf9ee77b6} }, +/**/ {{0x3c8949f7, 0x854f9928} }, +/**/ {{0xbfd461ec, 0x099c98f6} }, +/**/ {{0x3c5da491, 0x3eafe889} }, +/**/ {{0x3fa46e87, 0x8ba9e286} }, +/**/ {{0x3c42573a, 0x5377a1a9} }, +/**/ {{0x3fb4e038, 0xfab82ffb} }, +/**/ {{0xbc414e45, 0x402ef939} }, +/**/ {{0xbfb3b412, 0x4a8ec478} }, +/**/ {{0x3f96b8e0, 0xef6dba07} }, +/**/ {{0x3f949360, 0x39c13c6e} }, +/**/ {{0xbf9c674a, 0xd47bfddb} }, +/**/ {{0x3f88e101, 0x37ed6935} } }, +/**/ {{{0x3fe5c000, 0x00000000} }, +/**/ {{0x3fe31a52, 0x048874be} }, +/**/ {{0x3c840cab, 0x87a7ac24} }, +/**/ {{0x3fe5e360, 0xed021586} }, +/**/ {{0x3c86a444, 0xb32ab7e4} }, +/**/ {{0xbfd45a23, 0x779f86c4} }, +/**/ {{0xbc75b9dc, 0x6b782501} }, +/**/ {{0x3fa51400, 0x26af940c} }, +/**/ {{0x3c4f700e, 0xf9ce64e2} }, +/**/ {{0x3fb47e0a, 0x86a8eb42} }, +/**/ {{0xbc5a4df9, 0x36377584} }, +/**/ {{0xbfb39192, 0x7f8b6d42} }, +/**/ {{0x3f9745d1, 0x5deeeabc} }, +/**/ {{0x3f93b1e8, 0x17fa1033} }, +/**/ {{0xbf9bf673, 0x14cf2061} }, +/**/ {{0x3f894463, 0x0a340016} } }, +/**/ {{{0x3fe5e000, 0x00000000} }, +/**/ {{0x3fe3302b, 0x39b78856} }, +/**/ {{0x3c85dd2e, 0xd87ba82b} }, +/**/ {{0x3fe5cf0a, 0xc77d4bea} }, +/**/ {{0xbc8684ab, 0x0d42ab66} }, +/**/ {{0xbfd4521d, 0x6b573e11} }, +/**/ {{0xbc7601b9, 0xb90c9c27} }, +/**/ {{0x3fa5b66a, 0x0582aeaa} }, +/**/ {{0x3c281575, 0x8cc985ad} }, +/**/ {{0x3fb41c8a, 0x9a69373d} }, +/**/ {{0xbc33df07, 0x25ea8f67} }, +/**/ {{0xbfb36e43, 0xe5673a18} }, +/**/ {{0x3f97cca3, 0xeb05f3bc} }, +/**/ {{0x3f92d3fd, 0x7797abe9} }, +/**/ {{0xbf9b83f1, 0x9d71c254} }, +/**/ {{0x3f899e41, 0xfe333861} } }, +/**/ {{{0x3fe60000, 0x00000000} }, +/**/ {{0x3fe345f0, 0x1cce37bb} }, +/**/ {{0x3c810211, 0x37c71102} }, +/**/ {{0x3fe5babc, 0xc647fa91} }, +/**/ {{0x3c84339b, 0x8056eaf3} }, +/**/ {{0xbfd449db, 0x094286d0} }, +/**/ {{0x3c75e178, 0x512b1c7b} }, +/**/ {{0x3fa655ca, 0xac4cf102} }, +/**/ {{0xbc27a1e4, 0x61e8206a} }, +/**/ {{0x3fb3bbbd, 0x2933dd9c} }, +/**/ {{0xbc517633, 0xbd42c006} }, +/**/ {{0xbfb34a2f, 0x9636afc9} }, +/**/ {{0x3f984d71, 0xa2400f6f} }, +/**/ {{0x3f91f9ac, 0xfcc53cab} }, +/**/ {{0xbf9b0ff0, 0x9ec31ef1} }, +/**/ {{0x3f89eee3, 0xb1615b05} } }, +/**/ {{{0x3fe62000, 0x00000000} }, +/**/ {{0x3fe35ba0, 0xb60eccce} }, +/**/ {{0x3c8e3ba1, 0x9b9368b9} }, +/**/ {{0x3fe5a677, 0x25268d22} }, +/**/ {{0x3c7bc76e, 0xaf72cee6} }, +/**/ {{0xbfd4415d, 0x73c8c31c} }, +/**/ {{0xbc3e5b3c, 0xe00e5645} }, +/**/ {{0x3fa6f227, 0xbe1ce1b6} }, +/**/ {{0xbc04a922, 0xe699fcac} }, +/**/ {{0x3fb35ba5, 0xf91f9885} }, +/**/ {{0xbc43f8be, 0x418827b3} }, +/**/ {{0xbfb3255e, 0x863cebc9} }, +/**/ {{0x3f98c853, 0xe315ca66} }, +/**/ {{0x3f912301, 0xff116cac} }, +/**/ {{0xbf9a9a99, 0x0f5e09c2} }, +/**/ {{0x3f8a368d, 0xf4c8d587} } }, +/**/ {{{0x3fe64000, 0x00000000} }, +/**/ {{0x3fe3713d, 0x0df6c504} }, +/**/ {{0xbc54f789, 0xe031606d} }, +/**/ {{0x3fe5923a, 0x1ebc184f} }, +/**/ {{0x3c829fe8, 0xbe5956dd} }, +/**/ {{0xbfd438a5, 0xcb2e9cc9} }, +/**/ {{0xbc7c1839, 0x7d6ce3eb} }, +/**/ {{0x3fa78b86, 0xfb7fa678} }, +/**/ {{0x3befb53e, 0xd082025e} }, +/**/ {{0x3fb2fc48, 0xa3dd5905} }, +/**/ {{0x3c5fd567, 0x06b78682} }, +/**/ {{0xbfb2ffd9, 0x8374843c} }, +/**/ {{0x3f993d64, 0x57f51471} }, +/**/ {{0x3f905006, 0x933f6cc5} }, +/**/ {{0xbf9a2412, 0xab7658df} }, +/**/ {{0x3f8a7586, 0xae624ab4} } }, +/**/ {{{0x3fe66000, 0x00000000} }, +/**/ {{0x3fe386c5, 0x2d3db11f} }, +/**/ {{0xbc8b78e1, 0xcbebe6a0} }, +/**/ {{0x3fe57e05, 0xec8c8203} }, +/**/ {{0x3c8ea585, 0x5e7f92dc} }, +/**/ {{0xbfd42fb5, 0x2d8b381e} }, +/**/ {{0xbc63afe6, 0x5cff451e} }, +/**/ {{0x3fa821ee, 0x4120d643} }, +/**/ {{0xbc3e664f, 0xcbc4d2dc} }, +/**/ {{0x3fb29da8, 0x9778bfdb} }, +/**/ {{0x3c3760dd, 0x7c2057a5} }, +/**/ {{0xbfb2d9a9, 0x3525a55a} }, +/**/ {{0x3f99acbc, 0xed9015c8} }, +/**/ {{0x3f8f0187, 0x2a35e7d2} }, +/**/ {{0xbf99ac83, 0xf4bcdfc7} }, +/**/ {{0x3f8aac13, 0xbbeb4f11} } }, +/**/ {{{0x3fe68000, 0x00000000} }, +/**/ {{0x3fe39c39, 0x1cd4171a} }, +/**/ {{0xbc823043, 0x31d8bf46} }, +/**/ {{0x3fe569da, 0xc6feb417} }, +/**/ {{0x3c803ce5, 0x0625e450} }, +/**/ {{0xbfd4268c, 0xb6bde980} }, +/**/ {{0xbc6e8f76, 0xe8258561} }, +/**/ {{0x3fa8b563, 0x86705749} }, +/**/ {{0x3c418e14, 0xe6172281} }, +/**/ {{0x3fb23fc9, 0x171a8768} }, +/**/ {{0xbc562184, 0x3225d825} }, +/**/ {{0xbfb2b2d6, 0x1b8904fd} }, +/**/ {{0x3f9a1677, 0xca70ce88} }, +/**/ {{0x3f8d6a81, 0x62963581} }, +/**/ {{0xbf993412, 0x32c353bb} }, +/**/ {{0x3f8ada7a, 0xd7354ec0} } }, +/**/ {{{0x3fe6a000, 0x00000000} }, +/**/ {{0x3fe3b198, 0xe5e2564b} }, +/**/ {{0xbc72f922, 0x1f0752ac} }, +/**/ {{0x3fe555b8, 0xe55ed910} }, +/**/ {{0xbc5615bc, 0x656f2eb2} }, +/**/ {{0xbfd41d2d, 0x80646bca} }, +/**/ {{0xbc75d1d6, 0x1ff3506f} }, +/**/ {{0x3fa945ec, 0xdc4e5727} }, +/**/ {{0x3c213c8e, 0x18968922} }, +/**/ {{0x3fb1e2ad, 0x3bcc9fa4} }, +/**/ {{0x3c2b899c, 0x0a43c591} }, +/**/ {{0xbfb28b68, 0x8f774533} }, +/**/ {{0x3f9a7aaf, 0x46d16acc} }, +/**/ {{0x3f8bdb08, 0xde405cc6} }, +/**/ {{0xbf98bae1, 0x73d9884b} }, +/**/ {{0x3f8b0101, 0x7be7742a} } }, +/**/ {{{0x3fe6c000, 0x00000000} }, +/**/ {{0x3fe3c6e4, 0x91c78dc5} }, +/**/ {{0xbc8e1450, 0x94fd0ba7} }, +/**/ {{0x3fe541a0, 0x7de0a269} }, +/**/ {{0x3c8b9072, 0x163b639c} }, +/**/ {{0xbfd41398, 0xa1d194fc} }, +/**/ {{0xbc7ef191, 0x8629402d} }, +/**/ {{0x3fa9d390, 0x6bbd69eb} }, +/**/ {{0x3c488aec, 0xd2c4a6a5} }, +/**/ {{0x3fb18657, 0xf53fbee6} }, +/**/ {{0x3c54e6aa, 0x0104d1dd} }, +/**/ {{0xbfb26368, 0xc2245ee6} }, +/**/ {{0x3f9ad97d, 0xe4b91b16} }, +/**/ {{0x3f8a5328, 0x74b192c7} }, +/**/ {{0xbf984114, 0x8e5d8b31} }, +/**/ {{0x3f8b1fec, 0xceadce82} } }, +/**/ {{{0x3fe6e000, 0x00000000} }, +/**/ {{0x3fe3dc1c, 0x2a188504} }, +/**/ {{0x3c82ce63, 0x70f4e971} }, +/**/ {{0x3fe52d91, 0xc5a197ed} }, +/**/ {{0xbc804b92, 0x1baab820} }, +/**/ {{0xbfd409cf, 0x300486f8} }, +/**/ {{0xbc6d3bb8, 0xae804189} }, +/**/ {{0x3faa5e54, 0x749adab8} }, +/**/ {{0x3c20b0d5, 0xc631cfd3} }, +/**/ {{0x3fb12acc, 0x0a922c54} }, +/**/ {{0x3c521a06, 0x7cbc4417} }, +/**/ {{0xbfb23ade, 0xbce6ae05} }, +/**/ {{0x3f9b32fe, 0x485d279b} }, +/**/ {{0x3f88d2e8, 0xd9b56b96} }, +/**/ {{0xbf97c6cd, 0x227841f4} }, +/**/ {{0x3f8b3781, 0x85cf6ba0} } }, +/**/ {{{0x3fe70000, 0x00000000} }, +/**/ {{0x3fe3f13f, 0xb89e96f4} }, +/**/ {{0x3c7ecf8b, 0x492644f0} }, +/**/ {{0x3fe5198c, 0xf0ab6f99} }, +/**/ {{0x3c71b875, 0x5e1ffaba} }, +/**/ {{0xbfd3ffd2, 0x3da059f4} }, +/**/ {{0x3c5bba8e, 0x77eee53d} }, +/**/ {{0x3faae63f, 0x4c5d36dc} }, +/**/ {{0xbc4e6e4e, 0x2a3994d6} }, +/**/ {{0x3fb0d00c, 0x1b178ada} }, +/**/ {{0x3c4b94c3, 0xb3e710cc} }, +/**/ {{0xbfb211d2, 0x61093929} }, +/**/ {{0x3f9b874b, 0x30c5dd59} }, +/**/ {{0x3f875a50, 0xb0b899ed} }, +/**/ {{0xbf974c2b, 0x9c404912} }, +/**/ {{0x3f8b4803, 0xd3249a4d} } }, +/**/ {{{0x3fe72000, 0x00000000} }, +/**/ {{0x3fe4064f, 0x47569f49} }, +/**/ {{0xbc8aad88, 0xf91bf2b2} }, +/**/ {{0x3fe50592, 0x31f66da7} }, +/**/ {{0xbc8837f1, 0x134b7507} }, +/**/ {{0xbfd3f5a2, 0xdae43e4d} }, +/**/ {{0xbc7f29b0, 0xdc59e382} }, +/**/ {{0x3fab6b57, 0x5cd91a8c} }, +/**/ {{0xbc225bf7, 0xd6ab0dfc} }, +/**/ {{0x3fb0761a, 0x9f216d7a} }, +/**/ {{0x3c577818, 0xe546203e} }, +/**/ {{0xbfb1e84b, 0x67a8cf31} }, +/**/ {{0x3f9bd67f, 0x70b6dd6f} }, +/**/ {{0x3f85e964, 0x9ff677e5} }, +/**/ {{0xbf96d14f, 0x363cf426} }, +/**/ {{0x3f8b51b7, 0x4f6617de} } }, +/**/ {{{0x3fe74000, 0x00000000} }, +/**/ {{0x3fe41b4a, 0xe06fea41} }, +/**/ {{0x3c63d60a, 0x53277652} }, +/**/ {{0x3fe4f1a1, 0xbb6bcc2c} }, +/**/ {{0x3c5c8d69, 0x7c81f558} }, +/**/ {{0xbfd3eb42, 0x15a41364} }, +/**/ {{0x3c728a9c, 0x617c316a} }, +/**/ {{0x3fabeda3, 0x230c44b8} }, +/**/ {{0x3c41fa15, 0x50d9e9da} }, +/**/ {{0x3fb01cf9, 0xe8c87fc3} }, +/**/ {{0x3c410990, 0xa175df34} }, +/**/ {{0xbfb1be51, 0x619b963c} }, +/**/ {{0x3f9c20b5, 0xe7da421c} }, +/**/ {{0x3f848027, 0x637b86b0} }, +/**/ {{0xbf965655, 0xfc436ff1} }, +/**/ {{0x3f8b54de, 0xe6cd859f} } }, +/**/ {{{0x3fe76000, 0x00000000} }, +/**/ {{0x3fe43032, 0x8e4b26d6} }, +/**/ {{0xbc813159, 0x1070b99f} }, +/**/ {{0x3fe4ddbb, 0xbde829f5} }, +/**/ {{0xbc735ff2, 0xb6d17615} }, +/**/ {{0xbfd3e0b0, 0xf941711a} }, +/**/ {{0x3c7d3454, 0xe9027227} }, +/**/ {{0x3fac6d29, 0x2deef5c2} }, +/**/ {{0x3c476533, 0x0ba13bb6} }, +/**/ {{0x3faf8958, 0x496c1e5e} }, +/**/ {{0x3c49ebf2, 0xe1abdf2f} }, +/**/ {{0xbfb193eb, 0xb762a82c} }, +/**/ {{0x3f9c6609, 0x7c2df93f} }, +/**/ {{0x3f831e99, 0xdff7724a} }, +/**/ {{0xbf95db5c, 0xcea82a5a} }, +/**/ {{0x3f8b51bc, 0xc6ff27bb} } }, +/**/ {{{0x3fe78000, 0x00000000} }, +/**/ {{0x3fe44506, 0x5b795b56} }, +/**/ {{0xbc7f76d0, 0x163f79c8} }, +/**/ {{0x3fe4c9e0, 0x693e0015} }, +/**/ {{0xbc7b0fcb, 0x60fff59b} }, +/**/ {{0xbfd3d5f0, 0x8ea521a8} }, +/**/ {{0x3c561573, 0xb5bcc402} }, +/**/ {{0x3face9f0, 0x1d4b9b62} }, +/**/ {{0x3c481226, 0xf2c93cfb} }, +/**/ {{0x3faeda66, 0xb5db8847} }, +/**/ {{0xbc44ec99, 0x3a386670} }, +/**/ {{0xbfb16921, 0xa92559e3} }, +/**/ {{0x3f9ca695, 0x13b2a17d} }, +/**/ {{0x3f81c4bb, 0x355982b3} }, +/**/ {{0xbf95607f, 0x65bec936} }, +/**/ {{0x3f8b4892, 0x4e349f67} } }, +/**/ {{{0x3fe7a000, 0x00000000} }, +/**/ {{0x3fe459c6, 0x52badc7f} }, +/**/ {{0x3c819969, 0x8e8e135c} }, +/**/ {{0x3fe4b60f, 0xec381dcb} }, +/**/ {{0xbc6b9874, 0x4724e4f2} }, +/**/ {{0xbfd3cb01, 0xdc390960} }, +/**/ {{0xbc7243b1, 0x7ba1320c} }, +/**/ {{0x3fad63fe, 0xa09cca72} }, +/**/ {{0x3c48308c, 0xe5ab8d04} }, +/**/ {{0x3fae2d22, 0xdf2eb652} }, +/**/ {{0xbc4988a3, 0x4eb29ad3} }, +/**/ {{0xbfb13dfa, 0x4eb5cb96} }, +/**/ {{0x3f9ce273, 0x8e5b2657} }, +/**/ {{0x3f807288, 0xd132be74} }, +/**/ {{0xbf94e5d8, 0x55a31e9e} }, +/**/ {{0x3f8b399f, 0xfba00cb2} } }, +/**/ {{{0x3fe7c000, 0x00000000} }, +/**/ {{0x3fe46e72, 0x7efe4716} }, +/**/ {{0xbc639b9b, 0x1b844cc9} }, +/**/ {{0x3fe4a24a, 0x749c2a47} }, +/**/ {{0xbc8f9d05, 0x82d8a2e5} }, +/**/ {{0xbfd3bfe5, 0xe5e27a03} }, +/**/ {{0xbc5047da, 0xb30f6d58} }, +/**/ {{0x3faddb5b, 0x75f185ec} }, +/**/ {{0x3c43b680, 0x23d5084a} }, +/**/ {{0x3fad8190, 0x479061d2} }, +/**/ {{0xbbf4565c, 0x602d3547} }, +/**/ {{0xbfb1127c, 0x979e619e} }, +/**/ {{0x3f9d19bf, 0xc03c4720} }, +/**/ {{0x3f7e4ffd, 0x01b2b45f} }, +/**/ {{0xbf946b81, 0x1245b0bb} }, +/**/ {{0x3f8b2525, 0x60fec8ec} } }, +/**/ {{{0x3fe7e000, 0x00000000} }, +/**/ {{0x3fe4830a, 0xeb5f7bfe} }, +/**/ {{0xbc5a2656, 0x66764a73} }, +/**/ {{0x3fe48e90, 0x2f2d2be4} }, +/**/ {{0x3c810a8e, 0x969bba3b} }, +/**/ {{0xbfd3b49d, 0xacfcef4d} }, +/**/ {{0xbc6a4f98, 0xb7a61548} }, +/**/ {{0x3fae500d, 0x68d7d101} }, +/**/ {{0xbc305c3e, 0x04860c21} }, +/**/ {{0x3facd7b2, 0x2c98ea9c} }, +/**/ {{0x3c48692b, 0xd46adca0} }, +/**/ {{0xbfb0e6af, 0x4b37c6a5} }, +/**/ {{0x3f9d4c94, 0x6bfb2662} }, +/**/ {{0x3f7bca2d, 0x0692cc75} }, +/**/ {{0xbf93f191, 0xf3b69312} }, +/**/ {{0x3f8b0b61, 0x1552b8ee} } }, +/**/ {{{0x3fe80000, 0x00000000} }, +/**/ {{0x3fe4978f, 0xa3269ee1} }, +/**/ {{0x3c72419a, 0x87f2a458} }, +/**/ {{0x3fe47ae1, 0x47ae147b} }, +/**/ {{0xbc6eb851, 0xeb851eb8} }, +/**/ {{0xbfd3a92a, 0x30553261} }, +/**/ {{0xbc7f06f6, 0x94467382} }, +/**/ {{0x3faec21b, 0x514d88d8} }, +/**/ {{0x3c3cd061, 0xf45873a6} }, +/**/ {{0x3fac2f8b, 0x88dfb80c} }, +/**/ {{0xbc14fcbc, 0x53add20b} }, +/**/ {{0xbfb0ba99, 0x08c71945} }, +/**/ {{0x3f9d7b0c, 0x3d79f13f} }, +/**/ {{0x3f795393, 0x357dfc67} }, +/**/ {{0xbf937822, 0x3aa97829} }, +/**/ {{0x3f8aec90, 0xa8b90db0} } }, +/**/ {{{0x3fe82000, 0x00000000} }, +/**/ {{0x3fe4ac00, 0xb1c71762} }, +/**/ {{0x3c8b20e7, 0x2382b900} }, +/**/ {{0x3fe4673d, 0xe8e45252} }, +/**/ {{0x3c57d208, 0x67458f9c} }, +/**/ {{0xbfd39d8c, 0x6c24e1b3} }, +/**/ {{0xbc7830c5, 0x973c6d15} }, +/**/ {{0x3faf318c, 0x12b78147} }, +/**/ {{0xbc4fa440, 0xd318184c} }, +/**/ {{0x3fab891f, 0x158b44e7} }, +/**/ {{0x3c4d5f9f, 0x45d7f1f3} }, +/**/ {{0xbfb08e40, 0x47a3e8ba} }, +/**/ {{0x3f9da541, 0xc4c1a21a} }, +/**/ {{0x3f76ec1e, 0x3c0d1d71} }, +/**/ {{0xbf92ff48, 0x152e0bfc} }, +/**/ {{0x3f8ac8f0, 0x9955298f} } }, +/**/ {{{0x3fe84000, 0x00000000} }, +/**/ {{0x3fe4c05e, 0x22de94e5} }, +/**/ {{0xbc8c0ac1, 0xf09f2edf} }, +/**/ {{0x3fe453a6, 0x3c9a6560} }, +/**/ {{0x3c77a95f, 0x828bba02} }, +/**/ {{0xbfd391c5, 0x5a0e5b1c} }, +/**/ {{0x3c7d553d, 0xcd3f76d2} }, +/**/ {{0x3faf9e66, 0x9adede86} }, +/**/ {{0xbc225e54, 0xd6d2bac0} }, +/**/ {{0x3faae46f, 0x4bdf89d7} }, +/**/ {{0x3c39c98c, 0x2b25b8d9} }, +/**/ {{0xbfb061ab, 0x5765a5c1} }, +/**/ {{0x3f9dcb4f, 0x7127d649} }, +/**/ {{0x3f7493ba, 0x13002646} }, +/**/ {{0xbf928718, 0xa397d1a6} }, +/**/ {{0x3f8aa0bc, 0x494648b5} } }, +/**/ {{{0x3fe86000, 0x00000000} }, +/**/ {{0x3fe4d4a8, 0x023414e8} }, +/**/ {{0x3c6e3a89, 0x1daa88b0} }, +/**/ {{0x3fe4401a, 0x6ba2786e} }, +/**/ {{0xbc4b8213, 0xe3b5f317} }, +/**/ {{0xbfd385d5, 0xf11905c0} }, +/**/ {{0xbc72a1e9, 0xa2f42dd1} }, +/**/ {{0x3fb00458, 0xf07a526f} }, +/**/ {{0xbc14f965, 0xac5fd817} }, +/**/ {{0x3faa417e, 0x66ca7da2} }, +/**/ {{0x3c4b1e1a, 0xa050b433} }, +/**/ {{0xbfb034e0, 0x60182e4f} }, +/**/ {{0x3f9ded4f, 0x8cafa41b} }, +/**/ {{0x3f724a50, 0x1fa4f037} }, +/**/ {{0xbf920fa7, 0xfd90e915} }, +/**/ {{0x3f8a742d, 0xf59e7acf} } }, +/**/ {{{0x3fe88000, 0x00000000} }, +/**/ {{0x3fe4e8de, 0x5bb6ec04} }, +/**/ {{0x3c84a33d, 0xbeb3796c} }, +/**/ {{0x3fe42c9a, 0x9dd8fdc1} }, +/**/ {{0x3c5192da, 0xaf80050b} }, +/**/ {{0xbfd379bf, 0x25adf97f} }, +/**/ {{0xbc774019, 0x20cd3651} }, +/**/ {{0x3fb0383a, 0x724dbb01} }, +/**/ {{0x3c5c4e67, 0xeb93e538} }, +/**/ {{0x3fa9a04e, 0x646e65df} }, +/**/ {{0x3c21a7cb, 0x894a6b77} }, +/**/ {{0xbfb007e5, 0x62771c79} }, +/**/ {{0x3f9e0b5c, 0x37a45544} }, +/**/ {{0x3f700fc7, 0x54993092} }, +/**/ {{0xbf919909, 0x37534c25} }, +/**/ {{0x3f8a437e, 0xae51732a} } }, +/**/ {{{0x3fe8a000, 0x00000000} }, +/**/ {{0x3fe4fd01, 0x3b7dd17e} }, +/**/ {{0x3c7d513f, 0x3e7c24b5} }, +/**/ {{0x3fe41926, 0xfa274ef1} }, +/**/ {{0x3c8ad830, 0x4d72ecb3} }, +/**/ {{0xbfd36d81, 0xe995018a} }, +/**/ {{0x3c7e7ec5, 0x6fd6094d} }, +/**/ {{0x3fb06adb, 0x567bb975} }, +/**/ {{0x3c5212c1, 0xf0d7364f} }, +/**/ {{0x3fa900e1, 0x07a9b624} }, +/**/ {{0xbc4e5b5b, 0xc16bcc85} }, +/**/ {{0xbfafb580, 0x705f052b} }, +/**/ {{0x3f9e258f, 0x646ce12e} }, +/**/ {{0x3f6bc808, 0xa3c63841} }, +/**/ {{0xbf91234e, 0x67043d41} }, +/**/ {{0x3f8a0ee6, 0x4f11b221} } }, +/**/ {{{0x3fe8c000, 0x00000000} }, +/**/ {{0x3fe51110, 0xadc5ed81} }, +/**/ {{0x3c723dcd, 0x6832a63e} }, +/**/ {{0x3fe405bf, 0xa6864f90} }, +/**/ {{0xbc7419c5, 0x662cd5df} }, +/**/ {{0xbfd3611f, 0x2bf1f7e4} }, +/**/ {{0xbc6e94dd, 0x65483b78} }, +/**/ {{0x3fb09c3f, 0x23e21be9} }, +/**/ {{0x3c22db63, 0xcaca858d} }, +/**/ {{0x3fa86337, 0xd99c3f1d} }, +/**/ {{0x3c034382, 0xdc0a6dfc} }, +/**/ {{0xbfaf5aed, 0x284f8093} }, +/**/ {{0x3f9e3c02, 0xd396fb43} }, +/**/ {{0x3f678dd3, 0x08b96150} }, +/**/ {{0xbf90ae88, 0xaa2dcc3a} }, +/**/ {{0x3f89d69b, 0x79128ee7} } }, +/**/ {{{0x3fe8e000, 0x00000000} }, +/**/ {{0x3fe5250c, 0xbef1e9fb} }, +/**/ {{0xbc5539b7, 0xa3228870} }, +/**/ {{0x3fe3f264, 0xc8011245} }, +/**/ {{0xbc6641f1, 0x44cc720b} }, +/**/ {{0xbfd35497, 0xd942778a} }, +/**/ {{0x3c750a5a, 0x9bd7dbd6} }, +/**/ {{0x3fb0cc69, 0x6438739e} }, +/**/ {{0x3bf5d933, 0x435f798d} }, +/**/ {{0x3fa7c754, 0x2b29722f} }, +/**/ {{0xbbe736fe, 0x5b3af27b} }, +/**/ {{0xbfaf001c, 0x059a3c24} }, +/**/ {{0x3f9e4ed0, 0x101882b0} }, +/**/ {{0x3f6370ae, 0x88dc4269} }, +/**/ {{0xbf903ac8, 0x2b5280b6} }, +/**/ {{0x3f899ad3, 0x8da5b2ad} } }, +/**/ {{{0x3fe90000, 0x00000000} }, +/**/ {{0x3fe538f5, 0x7b89061f} }, +/**/ {{0xbc81bb74, 0xabda520c} }, +/**/ {{0x3fe3df16, 0x82b78014} }, +/**/ {{0xbc7074be, 0xa43ff610} }, +/**/ {{0xbfd347ec, 0xdb5be2e4} }, +/**/ {{0x3c7848c8, 0x8a0e9303} }, +/**/ {{0x3fb0fb5d, 0xa3a11be4} }, +/**/ {{0x3c3d68f2, 0x09dd0d69} }, +/**/ {{0x3fa72d37, 0x16778170} }, +/**/ {{0xbc4ea85d, 0x2200d1d4} }, +/**/ {{0xbfaea517, 0xd4cdbd49} }, +/**/ {{0x3f9e5e10, 0x6bc61b6f} }, +/**/ {{0x3f5ee0af, 0xd0517524} }, +/**/ {{0xbf8f9038, 0x4f2ec799} }, +/**/ {{0x3f895bc2, 0xa9aaa5bb} } }, +/**/ {{{0x3fe92000, 0x00000000} }, +/**/ {{0x3fe54cca, 0xf0362c8f} }, +/**/ {{0x3c88a324, 0x7f8f43c1} }, +/**/ {{0x3fe3cbd4, 0xf9e1016e} }, +/**/ {{0xbc88dea6, 0x431b67e7} }, +/**/ {{0xbfd33b1f, 0x1969bc63} }, +/**/ {{0x3c6ef16e, 0x5f3d8fd8} }, +/**/ {{0x3fb1291f, 0x703d3bf6} }, +/**/ {{0xbc566e82, 0xb04e0672} }, +/**/ {{0x3fa694e1, 0x806b26f2} }, +/**/ {{0x3c302819, 0xafcee740} }, +/**/ {{0xbfae49eb, 0x16dcee96} }, +/**/ {{0x3f9e69dc, 0xfbfdb35f} }, +/**/ {{0x3f571910, 0x70c48510} }, +/**/ {{0xbf8ead25, 0xe90198c8} }, +/**/ {{0x3f89199b, 0xa1c723cb} } }, +/**/ {{{0x3fe94000, 0x00000000} }, +/**/ {{0x3fe5608d, 0x29c70c34} }, +/**/ {{0x3c89939c, 0xf0de8088} }, +/**/ {{0x3fe3b8a0, 0x4fcf28c3} }, +/**/ {{0xbc469c2b, 0xcb80013c} }, +/**/ {{0xbfd32e2f, 0x77ec4ef9} }, +/**/ {{0x3c7f9d06, 0xc61f7341} }, +/**/ {{0x3fb155b2, 0x59c3bcdf} }, +/**/ {{0xbc2d692e, 0x3583c01b} }, +/**/ {{0x3fa5fe54, 0x1a1fe15d} }, +/**/ {{0x3c430dc5, 0x5d9bad81} }, +/**/ {{0xbfadeea0, 0x01d944a8} }, +/**/ {{0x3f9e724e, 0x9683b244} }, +/**/ {{0x3f4f13d4, 0x491379ef} }, +/**/ {{0xbf8dcc74, 0x0b7cf74b} }, +/**/ {{0x3f88d48f, 0xff5f0625} } }, +/**/ {{{0x3fe96000, 0x00000000} }, +/**/ {{0x3fe5743c, 0x352b33ba} }, +/**/ {{0xbc8ea00d, 0x34c87ea6} }, +/**/ {{0x3fe3a578, 0xa5f05e48} }, +/**/ {{0xbc8ba1ec, 0x00e4639b} }, +/**/ {{0xbfd3211e, 0xd8b7a43f} }, +/**/ {{0xbc6d4b54, 0x676e23a8} }, +/**/ {{0x3fb18119, 0xf11b2c2d} }, +/**/ {{0x3c34855b, 0x3a3bf5fa} }, +/**/ {{0x3fa5698f, 0x625c76bf} }, +/**/ {{0xbc2f758a, 0xbedb0264} }, +/**/ {{0xbfad9340, 0x81b60103} }, +/**/ {{0x3f9e777d, 0xce91900f} }, +/**/ {{0x3f406543, 0x34fddb2f} }, +/**/ {{0xbf8cee3b, 0xe6077f81} }, +/**/ {{0x3f888ccf, 0xfe42afde} } }, +/**/ {{{0x3fe98000, 0x00000000} }, +/**/ {{0x3fe587d8, 0x1f732fbb} }, +/**/ {{0xbc75e5c9, 0xd8c5a950} }, +/**/ {{0x3fe3925e, 0x1cd28c98} }, +/**/ {{0x3c8c8443, 0x1ffec6da} }, +/**/ {{0xbfd313ee, 0x1af2c622} }, +/**/ {{0x3c0a0e9b, 0xbc3f7ac8} }, +/**/ {{0x3fb1ab59, 0xc7f683c3} }, +/**/ {{0x3c5eaf17, 0x12c04500} }, +/**/ {{0x3fa4d693, 0xa7039179} }, +/**/ {{0xbc4c8d74, 0xa4ce58a2} }, +/**/ {{0xbfad37d6, 0x391400b3} }, +/**/ {{0x3f9e7982, 0xf2148a36} }, +/**/ {{0x3f112956, 0xb6df63ca} }, +/**/ {{0xbf8c1294, 0xfbd0f7ee} }, +/**/ {{0x3f88428a, 0x8b0b0a0e} } }, +/**/ {{{0x3fe9a000, 0x00000000} }, +/**/ {{0x3fe59b60, 0xf5cfab9e} }, +/**/ {{0xbc81b04c, 0x41026bc5} }, +/**/ {{0x3fe37f50, 0xd425cdfc} }, +/**/ {{0x3c865633, 0x518aef64} }, +/**/ {{0xbfd3069e, 0x1b1749db} }, +/**/ {{0xbc311c20, 0xa119d9bc} }, +/**/ {{0x3fb1d475, 0x7074cee3} }, +/**/ {{0xbc5102e0, 0x4ff61e2c} }, +/**/ {{0x3fa44561, 0x06804def} }, +/**/ {{0x3c4e829f, 0xc3865804} }, +/**/ {{0xbfacdc6a, 0x82158836} }, +/**/ {{0x3f9e7876, 0x071b2eec} }, +/**/ {{0xbf375b85, 0xf17c4beb} }, +/**/ {{0xbf8b3995, 0x2fa03971} }, +/**/ {{0x3f87f5ed, 0x421a433b} } }, +/**/ {{{0x3fe9c000, 0x00000000} }, +/**/ {{0x3fe5aed6, 0xc5909517} }, +/**/ {{0x3c87312f, 0x714a9436} }, +/**/ {{0x3fe36c50, 0xeabf19f5} }, +/**/ {{0x3c70d1dc, 0x52485cca} }, +/**/ {{0xbfd2f92f, 0xb2f12226} }, +/**/ {{0x3c5400ba, 0x3e5d3d61} }, +/**/ {{0x3fb1fc70, 0x7cc3a41b} }, +/**/ {{0x3c4b58e7, 0x8819ff5b} }, +/**/ {{0x3fa3b5f7, 0x712e9269} }, +/**/ {{0xbc4e436a, 0x7879d8ab} }, +/**/ {{0xbfac8106, 0x6f398221} }, +/**/ {{0x3f9e746e, 0xc97073c7} }, +/**/ {{0xbf4914de, 0xecfc2d6a} }, +/**/ {{0xbf8a6350, 0xcfa74bd5} }, +/**/ {{0x3f87a724, 0x6f38ad9e} } }, +/**/ {{{0x3fe9e000, 0x00000000} }, +/**/ {{0x3fe5c239, 0x9c244261} }, +/**/ {{0xbc831bd4, 0xe9e56b35} }, +/**/ {{0x3fe3595e, 0x7e9af2dc} }, +/**/ {{0x3c81ef2d, 0x9dc90e6a} }, +/**/ {{0xbfd2eba3, 0xb99eb689} }, +/**/ {{0xbc7b12ef, 0x6a2f2701} }, +/**/ {{0x3fb2234e, 0x7ec46b9b} }, +/**/ {{0x3c59f30c, 0x8d415d66} }, +/**/ {{0x3fa32856, 0xaabf0d26} }, +/**/ {{0xbc122571, 0x3f33d7ea} }, +/**/ {{0xbfac25b2, 0xcc3da9ce} }, +/**/ {{0x3f9e6d84, 0xa8630cad} }, +/**/ {{0xbf5308c5, 0xbeba707a} }, +/**/ {{0xbf898fda, 0xa1585fd1} }, +/**/ {{0x3f87565b, 0x0dc54356} } }, +/**/ {{{0x3fea0000, 0x00000000} }, +/**/ {{0x3fe5d589, 0x87169b18} }, +/**/ {{0x3c60028e, 0x4bc5e7ca} }, +/**/ {{0x3fe34679, 0xace01346} }, +/**/ {{0x3c8e6b38, 0x04d19e6b} }, +/**/ {{0xbfd2ddfb, 0x03913da2} }, +/**/ {{0xbc763ec8, 0x9a19adbd} }, +/**/ {{0x3fb24913, 0x07b46905} }, +/**/ {{0xbc4e7be8, 0xd6f0307f} }, +/**/ {{0x3fa29c7e, 0x4b96b773} }, +/**/ {{0xbc24c2cd, 0x9182d783} }, +/**/ {{0xbfabca78, 0x1f071f44} }, +/**/ {{0x3f9e63ce, 0xc4b7b7c4} }, +/**/ {{0xbf59529a, 0x125f35b0} }, +/**/ {{0xbf88bf43, 0xed369b2b} }, +/**/ {{0x3f8703ba, 0xc97185cd} } }, +/**/ {{{0x3fea2000, 0x00000000} }, +/**/ {{0x3fe5e8c6, 0x941043d0} }, +/**/ {{0xbc70bf75, 0xbe451e70} }, +/**/ {{0x3fe333a2, 0x91e21aec} }, +/**/ {{0x3c7ae035, 0x7acfc84f} }, +/**/ {{0xbfd2d036, 0x628d5861} }, +/**/ {{0x3c67c5fb, 0xe463d006} }, +/**/ {{0x3fb26dc1, 0xa7d77fb2} }, +/**/ {{0xbc5432bd, 0xc47ba861} }, +/**/ {{0x3fa2126d, 0xc229bece} }, +/**/ {{0xbc4be1bf, 0x1da8ed9e} }, +/**/ {{0xbfab6f5e, 0xa890e568} }, +/**/ {{0x3f9e5763, 0xeec5339a} }, +/**/ {{0xbf5f68a6, 0x5274aa52} }, +/**/ {{0xbf87f19c, 0x8a9df558} }, +/**/ {{0x3f86af6b, 0xff809dc5} } }, +/**/ {{{0x3fea4000, 0x00000000} }, +/**/ {{0x3fe5fbf0, 0xd0d5cc4a} }, +/**/ {{0xbc5b4cfd, 0x000b7158} }, +/**/ {{0x3fe320d9, 0x49243ad8} }, +/**/ {{0xbc8ce5e0, 0x433f7be5} }, +/**/ {{0xbfd2c256, 0xa5abec2f} }, +/**/ {{0xbc68785b, 0x04494dc1} }, +/**/ {{0x3fb2915d, 0xee25a81c} }, +/**/ {{0x3c3e7045, 0x68b37e8b} }, +/**/ {{0x3fa18a24, 0x5451b7d2} }, +/**/ {{0xbc3b2d29, 0x79d21dd5} }, +/**/ {{0xbfab146e, 0x65dfcf66} }, +/**/ {{0x3f9e485a, 0xa4b895b9} }, +/**/ {{0xbf62a5d4, 0x14770b65} }, +/**/ {{0xbf8726f2, 0xeb7dab0f} }, +/**/ {{0x3f865995, 0xc081d40d} } }, +/**/ {{{0x3fea6000, 0x00000000} }, +/**/ {{0x3fe60f08, 0x4b46e05f} }, +/**/ {{0xbc8dbb86, 0x99945193} }, +/**/ {{0x3fe30e1d, 0xed5be099} }, +/**/ {{0x3c6c6e78, 0x373fae45} }, +/**/ {{0xbfd2b45c, 0x995b3a02} }, +/**/ {{0x3c7cb97b, 0xe7cea2ad} }, +/**/ {{0x3fb2b3eb, 0x67fb0cde} }, +/**/ {{0xbc402927, 0x4920d50b} }, +/**/ {{0x3fa103a1, 0x209f00e4} }, +/**/ {{0xbc36fb57, 0xecac275a} }, +/**/ {{0xbfaab9af, 0x10fb6629} }, +/**/ {{0x3f9e36c9, 0x1100b94a} }, +/**/ {{0xbf657e30, 0x58620e6c} }, +/**/ {{0xbf865f54, 0x2801158e} }, +/**/ {{0x3f86025d, 0xd27eaf07} } }, +/**/ {{{0x3fea8000, 0x00000000} }, +/**/ {{0x3fe6220d, 0x115d7b8e} }, +/**/ {{0xbc62b785, 0x350ee8c1} }, +/**/ {{0x3fe2fb70, 0x98736048} }, +/**/ {{0x3c87a751, 0x4df7c4fa} }, +/**/ {{0xbfd2a649, 0x07603054} }, +/**/ {{0x3c7c41eb, 0xf564247c} }, +/**/ {{0x3fb2d56d, 0xa0cac592} }, +/**/ {{0x3c333138, 0x4e757ddf} }, +/**/ {{0x3fa07ee3, 0x1fa53ce5} }, +/**/ {{0xbc41bd0c, 0x28113a76} }, +/**/ {{0xbfaa5f28, 0x21eb5271} }, +/**/ {{0x3f9e22c5, 0x08df7f4f} }, +/**/ {{0xbf683dca, 0x107b528f} }, +/**/ {{0xbf859acc, 0x0a22f693} }, +/**/ {{0x3f85a9e8, 0xb39536ba} } }, +/**/ {{{0x3feaa000, 0x00000000} }, +/**/ {{0x3fe634ff, 0x312d1f3b} }, +/**/ {{0x3c89d2f3, 0x15f2b598} }, +/**/ {{0x3fe2e8d1, 0x638c9d15} }, +/**/ {{0x3c831ae5, 0xfe1a437d} }, +/**/ {{0xbfd2981c, 0xb6d7f622} }, +/**/ {{0xbc53da87, 0x86e9fe4d} }, +/**/ {{0x3fb2f5e8, 0x21d425b2} }, +/**/ {{0xbc186482, 0xae2616cb} }, +/**/ {{0x3f9ff7d2, 0x4a85a0e4} }, +/**/ {{0xbc294288, 0xe2d9205b} }, +/**/ {{0xbfaa04e0, 0xcfb8dc09} }, +/**/ {{0x3f9e0c64, 0x0b1f9c73} }, +/**/ {{0xbf6ae504, 0xbd3845d8} }, +/**/ {{0xbf84d965, 0x19278cae} }, +/**/ {{0x3f855059, 0x9cf7183b} } }, +/**/ {{{0x3feac000, 0x00000000} }, +/**/ {{0x3fe647de, 0xb8e20b90} }, +/**/ {{0xbc5eca04, 0x023a51cf} }, +/**/ {{0x3fe2d640, 0x6703b033} }, +/**/ {{0x3c870ae6, 0x38039b02} }, +/**/ {{0xbfd289d8, 0x6c39acf5} }, +/**/ {{0xbc71f038, 0x0238a7ee} }, +/**/ {{0x3fb3155e, 0x71da955f} }, +/**/ {{0xbc5faa02, 0xd41f84df} }, +/**/ {{0x3f9ef563, 0xc3c69caa} }, +/**/ {{0x3c331d29, 0x75403dbd} }, +/**/ {{0xbfa9aae0, 0x1174124f} }, +/**/ {{0x3f9df3bb, 0x3eedb30b} }, +/**/ {{0xbf6d7445, 0x1c632765} }, +/**/ {{0xbf841b28, 0xa4fa03e7} }, +/**/ {{0x3f84f5d2, 0x8646990d} } }, +/**/ {{{0x3feae000, 0x00000000} }, +/**/ {{0x3fe65aab, 0xb6c07b03} }, +/**/ {{0xbc67939b, 0x3af32729} }, +/**/ {{0x3fe2c3bd, 0xba718de8} }, +/**/ {{0xbc82d2fc, 0xc4990a2b} }, +/**/ {{0xbfd27b7c, 0xe9586818} }, +/**/ {{0x3c780d5e, 0x880839ca} }, +/**/ {{0x3fb333d4, 0x14dfe9e3} }, +/**/ {{0x3c536469, 0xbce74cae} }, +/**/ {{0x3f9df677, 0xc77983b8} }, +/**/ {{0x3c373272, 0xb42f53aa} }, +/**/ {{0xbfa9512c, 0x9f3c360e} }, +/**/ {{0x3f9dd8df, 0x72d37b24} }, +/**/ {{0xbf6febf1, 0x02e417f5} }, +/**/ {{0xbf83601e, 0xd16a1579} }, +/**/ {{0x3f849a74, 0x294a83e4} } }, +/**/ {{{0x3feb0000, 0x00000000} }, +/**/ {{0x3fe66d66, 0x3923e087} }, +/**/ {{0xbc76ea6f, 0xebe8bbba} }, +/**/ {{0x3fe2b149, 0x74aea886} }, +/**/ {{0x3c868ffd, 0xa9d6d16a} }, +/**/ {{0xbfd26d0a, 0xed65571e} }, +/**/ {{0x3c6cf972, 0x476fb5f2} }, +/**/ {{0x3fb3514c, 0x8be1339f} }, +/**/ {{0x3c5c8c0f, 0x3f722216} }, +/**/ {{0x3f9cfb0b, 0x300f8f9b} }, +/**/ {{0xbc0edd81, 0x38d1c932} }, +/**/ {{0xbfa8f7cc, 0xf34b004f} }, +/**/ {{0x3f9dbbe5, 0x1bd3bde0} }, +/**/ {{0xbf712637, 0x9bf7dceb} }, +/**/ {{0xbf82a84e, 0xa146e5b2} }, +/**/ {{0x3f843e5e, 0x05f2718e} } }, +/**/ {{{0x3feb2000, 0x00000000} }, +/**/ {{0x3fe6800e, 0x4e7e2858} }, +/**/ {{0xbc58ea6a, 0x1b3e90f0} }, +/**/ {{0x3fe29ee3, 0xabd5912c} }, +/**/ {{0xbc61b3cd, 0xb17c28e3} }, +/**/ {{0xbfd25e83, 0x34f221eb} }, +/**/ {{0xbc74c483, 0xfa300585} }, +/**/ {{0x3fb36dcb, 0x5495f6e3} }, +/**/ {{0x3c59b55b, 0x311973fe} }, +/**/ {{0x3f9c031a, 0x9864d139} }, +/**/ {{0x3c28fdf3, 0xbd00e171} }, +/**/ {{0xbfa89ec7, 0x4b026585} }, +/**/ {{0x3f9d9ce0, 0x54a5ed3d} }, +/**/ {{0xbf724b13, 0xa8cb6dfc} }, +/**/ {{0xbf81f3be, 0x015469a9} }, +/**/ {{0x3f83e1ae, 0x66a50a89} } }, +/**/ {{{0x3feb4000, 0x00000000} }, +/**/ {{0x3fe692a4, 0x0556fb6a} }, +/**/ {{0x3c8d94b9, 0x5a8ea2cc} }, +/**/ {{0x3fe28c8c, 0x75459603} }, +/**/ {{0x3c8b1c3b, 0x2945fc08} }, +/**/ {{0xbfd24fe6, 0x79f37468} }, +/**/ {{0xbc4e3751, 0x0ec1ef94} }, +/**/ {{0x3fb38953, 0xe931c53b} }, +/**/ {{0xbc3b108d, 0x16d80688} }, +/**/ {{0x3f9b0ea2, 0x5e1b50b5} }, +/**/ {{0x3c0074c0, 0x63fd1067} }, +/**/ {{0xbfa84621, 0xa7fc7800} }, +/**/ {{0x3f9d7be4, 0xdd10256e} }, +/**/ {{0xbf7364c0, 0xc9592c5e} }, +/**/ {{0xbf814271, 0xd318d707} }, +/**/ {{0x3f838482, 0x64d217b8} } }, +/**/ {{{0x3feb6000, 0x00000000} }, +/**/ {{0x3fe6a527, 0x6c4b0576} }, +/**/ {{0xbc8f6b65, 0x9c46a69e} }, +/**/ {{0x3fe27a43, 0xe5a55de9} }, +/**/ {{0x3c66846e, 0xedc25d49} }, +/**/ {{0xbfd24135, 0x73c3b821} }, +/**/ {{0xbc79202a, 0x56ab5808} }, +/**/ {{0x3fb3a3e9, 0xc0282c84} }, +/**/ {{0x3c4057ca, 0x03d25dab} }, +/**/ {{0x3f9a1d9e, 0xa3eb854d} }, +/**/ {{0xbc3775ed, 0xf03e2fb1} }, +/**/ {{0xbfa7ede1, 0xd11d1043} }, +/**/ {{0x3f9d5906, 0x195e6961} }, +/**/ {{0xbf747373, 0x65130256} }, +/**/ {{0xbf80946d, 0xf77fd664} }, +/**/ {{0x3f8326f5, 0xedc272c2} } }, +/**/ {{{0x3feb8000, 0x00000000} }, +/**/ {{0x3fe6b798, 0x920b3d99} }, +/**/ {{0xbc8a8038, 0x6188c50e} }, +/**/ {{0x3fe2680a, 0x10e5813e} }, +/**/ {{0xbc8f5497, 0x2242a6bc} }, +/**/ {{0xbfd23270, 0xd725fa1c} }, +/**/ {{0x3c757282, 0x5c781b14} }, +/**/ {{0x3fb3bd90, 0x4bf2f124} }, +/**/ {{0x3c31ae9c, 0x6a14ed74} }, +/**/ {{0x3f99300b, 0x53ea1533} }, +/**/ {{0x3c2a8d88, 0x68f98d7e} }, +/**/ {{0xbfa7960d, 0x53a4e537} }, +/**/ {{0x3f9d3457, 0x11f5f086} }, +/**/ {{0xbf757760, 0x19baa1da} }, +/**/ {{0xbf7fd36a, 0xb2a2ca7e} }, +/**/ {{0x3f82c923, 0xc7a02081} } }, +/**/ {{{0x3feba000, 0x00000000} }, +/**/ {{0x3fe6c9f7, 0x855c3198} }, +/**/ {{0x3c7c09de, 0x29bd280d} }, +/**/ {{0x3fe255df, 0x0a431fbd} }, +/**/ {{0x3c8d9866, 0xf09a745d} }, +/**/ {{0xbfd22399, 0x5648fb1f} }, +/**/ {{0x3c412100, 0xb4df0b3e} }, +/**/ {{0x3fb3d64a, 0xfada8899} }, +/**/ {{0x3c3dd891, 0x659c4346} }, +/**/ {{0x3f9845e4, 0x21c2d0a1} }, +/**/ {{0x3c28c6b1, 0xf397827c} }, +/**/ {{0xbfa73ea9, 0x8445c1cc} }, +/**/ {{0x3f9d0dea, 0x730360f8} }, +/**/ {{0xbf7670bb, 0xac51ce30} }, +/**/ {{0xbf7e8493, 0xeef50deb} }, +/**/ {{0x3f826b25, 0x96b119a9} } }, +/**/ {{{0x3febc000, 0x00000000} }, +/**/ {{0x3fe6dc44, 0x551553af} }, +/**/ {{0xbc5bf886, 0x3573828e} }, +/**/ {{0x3fe243c2, 0xe44a7335} }, +/**/ {{0xbc667287, 0x65d1ffd7} }, +/**/ {{0xbfd214af, 0xa0ca68d3} }, +/**/ {{0xbc71296c, 0x88820895} }, +/**/ {{0x3fb3ee1d, 0x36c0c9a2} }, +/**/ {{0x3c540bf6, 0x831dfabe} }, +/**/ {{0x3f975f24, 0x8ce8de84} }, +/**/ {{0xbc125368, 0x43eb5853} }, +/**/ {{0xbfa6e7bb, 0x803788f8} }, +/**/ {{0x3f9ce5d2, 0x8c42d5f9} }, +/**/ {{0xbf775fba, 0xfaadb3ab} }, +/**/ {{0xbf7d3c59, 0xde4c28da} }, +/**/ {{0x3f820d13, 0xe2bf7ef5} } }, +/**/ {{{0x3febe000, 0x00000000} }, +/**/ {{0x3fe6ee7f, 0x10204aef} }, +/**/ {{0x3c8692ee, 0xa3066272} }, +/**/ {{0x3fe231b5, 0xb0d95ee5} }, +/**/ {{0x3c7aae7e, 0x1eb505b6} }, +/**/ {{0xbfd205b4, 0x63ba3e08} }, +/**/ {{0x3c71c6d1, 0xb975517d} }, +/**/ {{0x3fb4050a, 0x64edc729} }, +/**/ {{0x3c4960ed, 0x715db809} }, +/**/ {{0x3f967bc7, 0xe2bc143b} }, +/**/ {{0xbc2cbf17, 0xf0823143} }, +/**/ {{0xbfa69148, 0x2e4dbc47} }, +/**/ {{0x3f9cbc21, 0x50e0982e} }, +/**/ {{0xbf784492, 0xedaa432a} }, +/**/ {{0xbf7bfabd, 0x0b4850f3} }, +/**/ {{0x3f81af06, 0x1caa2f2c} } }, +/**/ {{{0x3fec0000, 0x00000000} }, +/**/ {{0x3fe700a7, 0xc5784634} }, +/**/ {{0xbc78c34d, 0x25aadef6} }, +/**/ {{0x3fe21fb7, 0x8121fb78} }, +/**/ {{0x3c621fb7, 0x8121fb78} }, +/**/ {{0xbfd1f6a8, 0x499e4889} }, +/**/ {{0xbc60e934, 0x6d4e0249} }, +/**/ {{0x3fb41b15, 0xe5decb17} }, +/**/ {{0x3c5194f4, 0xab3541e6} }, +/**/ {{0x3f959bc9, 0x40a374b5} }, +/**/ {{0xbc39dc6e, 0x54be0e10} }, +/**/ {{0xbfa63b54, 0x400d3c9a} }, +/**/ {{0x3f9c90e8, 0x57717232} }, +/**/ {{0xbf791f78, 0x6bfa704e} }, +/**/ {{0xbf7abfbc, 0x643da6dd} }, +/**/ {{0x3f815112, 0xa418ed31} } }, +/**/ {{{0x3fec2000, 0x00000000} }, +/**/ {{0x3fe712be, 0x84295198} }, +/**/ {{0x3c85cd90, 0x337d8881} }, +/**/ {{0x3fe20dc8, 0x65ad1f5b} }, +/**/ {{0xbc88102a, 0xd7b50d48} }, +/**/ {{0xbfd1e78b, 0xfa75d2f4} }, +/**/ {{0x3c723734, 0x619624d2} }, +/**/ {{0x3fb43043, 0x1517663e} }, +/**/ {{0xbc4af8a4, 0xe5e1ddf1} }, +/**/ {{0x3f94bf23, 0x961cd605} }, +/**/ {{0xbc26e86e, 0x5ca14507} }, +/**/ {{0xbfa5e5e4, 0x32c1ffd7} }, +/**/ {{0x3f9c6438, 0xda0191cd} }, +/**/ {{0xbf79f0a0, 0x4d921d2b} }, +/**/ {{0xbf798b55, 0x4e35d54e} }, +/**/ {{0x3f80f34e, 0xcd4f7bfd} } }, +/**/ {{{0x3fec4000, 0x00000000} }, +/**/ {{0x3fe724c3, 0x5b4fae7b} }, +/**/ {{0x3c5948b3, 0x2db3499b} }, +/**/ {{0x3fe1fbe8, 0x6e5ce35d} }, +/**/ {{0x3c8101d1, 0x561e27a3} }, +/**/ {{0xbfd1d860, 0x1bbd70f4} }, +/**/ {{0xbc7b4c97, 0xfa32c4d1} }, +/**/ {{0x3fb44495, 0x48f48a77} }, +/**/ {{0xbc2ccfed, 0xb47fdf89} }, +/**/ {{0x3f93e5d1, 0xa6c1af2c} }, +/**/ {{0xbc14af58, 0xc3b5a19b} }, +/**/ {{0xbfa590fc, 0x5094795f} }, +/**/ {{0x3f9c3623, 0xb638ebc2} }, +/**/ {{0xbf7ab83f, 0x4fa66d0e} }, +/**/ {{0xbf785d83, 0xb787e297} }, +/**/ {{0x3f8095ce, 0xe71b4cea} } }, +/**/ {{{0x3fec6000, 0x00000000} }, +/**/ {{0x3fe736b6, 0x5a172dff} }, +/**/ {{0x3c7775fd, 0x06a892d1} }, +/**/ {{0x3fe1ea17, 0xaa6f2377} }, +/**/ {{0xbc8395a8, 0xcb44ec07} }, +/**/ {{0xbfd1c925, 0x5072ec76} }, +/**/ {{0xbc6e11b3, 0xf650d5de} }, +/**/ {{0x3fb4580f, 0xd281a42b} }, +/**/ {{0xbc55bbce, 0xf63226cb} }, +/**/ {{0x3f930fce, 0x0c411254} }, +/**/ {{0x3c3a4412, 0xc9852726} }, +/**/ {{0xbfa53ca0, 0xb19e766e} }, +/**/ {{0x3f9c06b9, 0x6d941dd5} }, +/**/ {{0xbf7b768a, 0x094128b2} }, +/**/ {{0xbf773642, 0x2a047c42} }, +/**/ {{0x3f8038a6, 0x40d7925f} } }, +/**/ {{{0x3fec8000, 0x00000000} }, +/**/ {{0x3fe74897, 0x8fba8e0f} }, +/**/ {{0x3c47b2a6, 0x165884a1} }, +/**/ {{0x3fe1d856, 0x287ffb8a} }, +/**/ {{0xbc658a1f, 0xfee27a9d} }, +/**/ {{0xbfd1b9dc, 0x39195240} }, +/**/ {{0x3c604646, 0x551dc6bf} }, +/**/ {{0x3fb46ab5, 0xfd4fa866} }, +/**/ {{0x3c5f62a7, 0xc2febe43} }, +/**/ {{0x3f923d13, 0x384eda2c} }, +/**/ {{0x3c3b9a7c, 0x1dfd9f34} }, +/**/ {{0xbfa4e8d5, 0x3cff324c} }, +/**/ {{0x3f9bd60a, 0x25b0d0ad} }, +/**/ {{0xbf7c2bb4, 0xe063d1e6} }, +/**/ {{0xbf761589, 0xdcb54dd5} }, +/**/ {{0x3f7fb7ce, 0x61077b85} } }, +/**/ {{{0x3feca000, 0x00000000} }, +/**/ {{0x3fe75a67, 0x0b82d8d8} }, +/**/ {{0x3c8ee4ac, 0x4c729087} }, +/**/ {{0x3fe1c6a3, 0xf68c4011} }, +/**/ {{0xbc8e54e4, 0x32671c29} }, +/**/ {{0xbfd1aa85, 0x73bd1c8f} }, +/**/ {{0x3c7525ad, 0x41d7bd80} }, +/**/ {{0x3fb47c8b, 0x0f4e0cc0} }, +/**/ {{0x3c2efdd1, 0xd854875c} }, +/**/ {{0x3f916d9b, 0x7688134d} }, +/**/ {{0xbc1abef6, 0x42a6f922} }, +/**/ {{0xbfa4959d, 0xa9ee694e} }, +/**/ {{0x3f9ba425, 0xa8aca118} }, +/**/ {{0xbf7cd7f3, 0xffb6fa1f} }, +/**/ {{0xbf74fb52, 0xc52e395a} }, +/**/ {{0x3f7eff46, 0x31d14661} } }, +/**/ {{{0x3fecc000, 0x00000000} }, +/**/ {{0x3fe76c24, 0xdcc6c6c0} }, +/**/ {{0x3c819525, 0x51adc83d} }, +/**/ {{0x3fe1b501, 0x21f3f28c} }, +/**/ {{0xbc45712f, 0x5f1d67b6} }, +/**/ {{0xbfd19b21, 0x9bf87a43} }, +/**/ {{0xbc64520a, 0xb2071e48} }, +/**/ {{0x3fb48d92, 0x48a59e43} }, +/**/ {{0x3c5f8e56, 0x42014b8b} }, +/**/ {{0x3f90a160, 0xee4caccb} }, +/**/ {{0x3c2bd92b, 0x7b6daa67} }, +/**/ {{0xbfa442fd, 0x80ce3489} }, +/**/ {{0x3f9b711b, 0x65959e45} }, +/**/ {{0xbf7d7b7b, 0x4cc2673a} }, +/**/ {{0xbf73e793, 0xa86f8a8e} }, +/**/ {{0x3f7e47d4, 0xdf91602d} } }, +/**/ {{{0x3fece000, 0x00000000} }, +/**/ {{0x3fe77dd1, 0x12ea22c7} }, +/**/ {{0x3c873260, 0x8fc10d3d} }, +/**/ {{0x3fe1a36d, 0xb77cb1a2} }, +/**/ {{0xbc42c20d, 0x6e625be9} }, +/**/ {{0xbfd18bb1, 0x4af7b13c} }, +/**/ {{0xbc68446b, 0xbc063e5a} }, +/**/ {{0x3fb49dce, 0xe3952cbb} }, +/**/ {{0x3c588e60, 0x58cf9123} }, +/**/ {{0x3f8fb0bb, 0x491cfa44} }, +/**/ {{0x3c1534fc, 0x0e3f2a43} }, +/**/ {{0xbfa3f0f8, 0x1c3b7aca} }, +/**/ {{0x3f9b3cfa, 0x70eb708a} }, +/**/ {{0xbf7e167e, 0x5eaa8b7f} }, +/**/ {{0xbf72da42, 0x2b587c04} }, +/**/ {{0x3f7d9199, 0x882fa65b} } }, +/**/ {{{0x3fed0000, 0x00000000} }, +/**/ {{0x3fe78f6b, 0xbd5d315e} }, +/**/ {{0x3c8406a0, 0x89803740} }, +/**/ {{0x3fe191e9, 0xc35424ca} }, +/**/ {{0xbc8fa3c1, 0xf4be863f} }, +/**/ {{0xbfd17c35, 0x177d9a85} }, +/**/ {{0xbc717b81, 0x6a99d546} }, +/**/ {{0x3fb4ad44, 0x144fffae} }, +/**/ {{0x3c3538b3, 0xdccca2a3} }, +/**/ {{0x3f8e2516, 0xfb2b5523} }, +/**/ {{0x3c0f7c11, 0x60181bd9} }, +/**/ {{0xbfa39f90, 0xaa1cc641} }, +/**/ {{0x3f9b07d1, 0x85304289} }, +/**/ {{0xbf7ea930, 0x756fd193} }, +/**/ {{0xbf71d352, 0xe2a9a0de} }, +/**/ {{0x3f7cdcb1, 0x886fc912} } }, +/**/ {{{0x3fed2000, 0x00000000} }, +/**/ {{0x3fe7a0f4, 0xeb9c19a2} }, +/**/ {{0x3c613c67, 0xcd815f57} }, +/**/ {{0x3fe18075, 0x5112636f} }, +/**/ {{0x3c80a172, 0x7a335b20} }, +/**/ {{0xbfd16cad, 0x95e83705} }, +/**/ {{0x3c62a94b, 0x7b21d5e1} }, +/**/ {{0x3fb4bbf5, 0x08de0a7c} }, +/**/ {{0x3c3570d0, 0x057457a0} }, +/**/ {{0x3f8c9fc8, 0x7d750fdf} }, +/**/ {{0x3c2900a7, 0xfe4cff3c} }, +/**/ {{0xbfa34eca, 0x2caf50ea} }, +/**/ {{0x3f9ad1af, 0x03888c77} }, +/**/ {{0xbf7f33c4, 0x71ac3a86} }, +/**/ {{0xbf70d2b9, 0x6296fd58} }, +/**/ {{0x3f7c2938, 0x886d16b8} } }, +/**/ {{{0x3fed4000, 0x00000000} }, +/**/ {{0x3fe7b26c, 0xad2e50fe} }, +/**/ {{0xbc8ce80d, 0xf30411fb} }, +/**/ {{0x3fe16f10, 0x6bbc577a} }, +/**/ {{0xbc7d0db6, 0xbd8abf47} }, +/**/ {{0xbfd15d1b, 0x58355b5f} }, +/**/ {{0xbc5b5457, 0xbcc70038} }, +/**/ {{0x3fb4c9e4, 0xe8fdd51d} }, +/**/ {{0x3c462959, 0x28ac9383} }, +/**/ {{0x3f8b20c3, 0x2029f143} }, +/**/ {{0xbc2f8a44, 0x2b420400} }, +/**/ {{0xbfa2fea7, 0x7b921c49} }, +/**/ {{0x3f9a9aa0, 0xf468e79e} }, +/**/ {{0xbf7fb66c, 0xcccbcb4f} }, +/**/ {{0xbf6fb0d0, 0x9bd39a5f} }, +/**/ {{0x3f7b7748, 0x8813998f} } }, +/**/ {{{0x3fed6000, 0x00000000} }, +/**/ {{0x3fe7c3d3, 0x11a6092b} }, +/**/ {{0x3c8bb3cb, 0x2d303288} }, +/**/ {{0x3fe15dbb, 0x1dc61b17} }, +/**/ {{0xbc8f0487, 0xbb77dc56} }, +/**/ {{0xbfd14d7e, 0xee0771ca} }, +/**/ {{0x3c72d38b, 0xdc2fcbd0} }, +/**/ {{0x3fb4d716, 0xd6080f0e} }, +/**/ {{0xbc5cb5bc, 0xa9fbc2c3} }, +/**/ {{0x3f89a7f9, 0xfc42e02f} }, +/**/ {{0xbc201eec, 0x857be8a4} }, +/**/ {{0xbfa2af2b, 0x44ceebb3} }, +/**/ {{0x3f9a62b5, 0x08511639} }, +/**/ {{0xbf8018ad, 0xc8de23de} }, +/**/ {{0xbf6dc8a2, 0xc964501a} }, +/**/ {{0x3f7ac6f9, 0xeb913697} } }, +/**/ {{{0x3fed8000, 0x00000000} }, +/**/ {{0x3fe7d528, 0x289fa093} }, +/**/ {{0x3c856082, 0x1e2f3aa9} }, +/**/ {{0x3fe14c75, 0x711551bb} }, +/**/ {{0xbc80c88e, 0x71970f2c} }, +/**/ {{0xbfd13dd8, 0xe4aa5095} }, +/**/ {{0x3c66dd31, 0xb4b7ae12} }, +/**/ {{0x3fb4e38d, 0xead4c211} }, +/**/ {{0x3c513fb0, 0xe392a31e} }, +/**/ {{0x3f88355f, 0xf6b74576} }, +/**/ {{0x3ba8cb44, 0xf3561ab7} }, +/**/ {{0xbfa26058, 0x0de0faaa} }, +/**/ {{0x3f9a29f8, 0x989371f0} }, +/**/ {{0xbf805261, 0x2b085d9a} }, +/**/ {{0xbf6beccb, 0x2511c555} }, +/**/ {{0x3f7a1863, 0x87b9d333} } }, +/**/ {{{0x3feda000, 0x00000000} }, +/**/ {{0x3fe7e66c, 0x01c114fe} }, +/**/ {{0xbc8c82b8, 0x8b760b8d} }, +/**/ {{0x3fe13b3f, 0x6f037c44} }, +/**/ {{0xbc635393, 0x8562c8c0} }, +/**/ {{0xbfd12e29, 0xc7182435} }, +/**/ {{0xbc73da80, 0x0d0fda95} }, +/**/ {{0x3fb4ef4d, 0x3ba21a8b} }, +/**/ {{0xbc17c450, 0x9aa41146} }, +/**/ {{0x3f86c8e7, 0xc39dff46} }, +/**/ {{0x3c1ddd70, 0x800ba9ae} }, +/**/ {{0xbfa21230, 0x34b94b56} }, +/**/ {{0x3f99f078, 0xa827f95a} }, +/**/ {{0xbf808869, 0x19caa997} }, +/**/ {{0xbf6a1d29, 0xf8c46d26} }, +/**/ {{0x3f796b9a, 0xae59da17} } }, +/**/ {{{0x3fedc000, 0x00000000} }, +/**/ {{0x3fe7f79e, 0xacb97898} }, +/**/ {{0x3c8fd5ca, 0x80ead221} }, +/**/ {{0x3fe12a19, 0x20604825} }, +/**/ {{0xbc5cc7d6, 0xa18970f8} }, +/**/ {{0xbfd11e72, 0x1dfe6ba4} }, +/**/ {{0x3c706717, 0x9d653d1c} }, +/**/ {{0x3fb4fa57, 0xd5fcbb3b} }, +/**/ {{0x3c1922c8, 0x5f50bc06} }, +/**/ {{0x3f856283, 0xe93a179f} }, +/**/ {{0xbc01c2ec, 0x5ea7135a} }, +/**/ {{0xbfa1c4b5, 0xf0c06b4f} }, +/**/ {{0x3f99b641, 0xe48a3b04} }, +/**/ {{0xbf80badd, 0xe1280a21} }, +/**/ {{0xbf68599e, 0x1be3c5dd} }, +/**/ {{0x3f78c0b3, 0x3a72c8e6} } }, +/**/ {{{0x3fede000, 0x00000000} }, +/**/ {{0x3fe808c0, 0x3940694b} }, +/**/ {{0xbc800f32, 0x7715f6a5} }, +/**/ {{0x3fe11902, 0x8d73d98e} }, +/**/ {{0x3c71d158, 0x30f8e290} }, +/**/ {{0xbfd10eb2, 0x6fc305eb} }, +/**/ {{0xbc7fd2e3, 0x3858c4b7} }, +/**/ {{0x3fb504b0, 0xc0a99255} }, +/**/ {{0x3c55c054, 0x142e134f} }, +/**/ {{0x3f840226, 0xc2f371cf} }, +/**/ {{0xbbfc85b0, 0xfc7d6225} }, +/**/ {{0xbfa177eb, 0x53d58f53} }, +/**/ {{0x3f997b60, 0xa6a1627d} }, +/**/ {{0xbf80e9d7, 0x89757c78} }, +/**/ {{0xbf66a205, 0x0d433cd6} }, +/**/ {{0x3f7817bf, 0x9c5dbd9f} } }, +/**/ {{{0x3fee0000, 0x00000000} }, +/**/ {{0x3fe819d0, 0xb7158a4d} }, +/**/ {{0xbc7bf762, 0x29d3b917} }, +/**/ {{0x3fe107fb, 0xbe011080} }, +/**/ {{0xbc8107fb, 0xbe011080} }, +/**/ {{0xbfd0feeb, 0x40894fcd} }, +/**/ {{0x3c76fbb9, 0xc155af9a} }, +/**/ {{0x3fb50e5a, 0xfb9125f7} }, +/**/ {{0x3c357762, 0x2f3313b0} }, +/**/ {{0x3f82a7c2, 0x843ba55a} }, +/**/ {{0x3c1f4994, 0x3fc197b7} }, +/**/ {{0xbfa12bd2, 0x4b4ae875} }, +/**/ {{0x3f993fe0, 0xf3b1b1ee} }, +/**/ {{0xbf81156d, 0xd4c2083b} }, +/**/ {{0xbf64f63b, 0x0c35aa9c} }, +/**/ {{0x3f7770d0, 0xe5d0462f} } }, +/**/ {{{0x3fee2000, 0x00000000} }, +/**/ {{0x3fe82ad0, 0x36000005} }, +/**/ {{0x3c74592f, 0xce924d24} }, +/**/ {{0x3fe0f704, 0xb947c8b7} }, +/**/ {{0x3c436cd7, 0x48a651b3} }, +/**/ {{0xbfd0ef1d, 0x1237505b} }, +/**/ {{0x3c69239b, 0x1b86b9d1} }, +/**/ {{0x3fb51759, 0x7fac4e21} }, +/**/ {{0xbc42a8cc, 0xbfce0e36} }, +/**/ {{0x3f815349, 0x3b5f3edd} }, +/**/ {{0xbc25e1f1, 0x88c702d9} }, +/**/ {{0xbfa0e06c, 0xa0df17a9} }, +/**/ {{0x3f9903ce, 0x7e56b8b1} }, +/**/ {{0xbf813db8, 0x3c701e30} }, +/**/ {{0xbf63561b, 0x30c99e47} }, +/**/ {{0x3f76cbf6, 0xd5bffce0} } }, +/**/ {{{0x3fee4000, 0x00000000} }, +/**/ {{0x3fe83bbe, 0xc5cdee22} }, +/**/ {{0x3c631071, 0x04ffc6c3} }, +/**/ {{0x3fe0e61d, 0x86071468} }, +/**/ {{0xbc70ccc4, 0x59be09c9} }, +/**/ {{0xbfd0df48, 0x647af38b} }, +/**/ {{0x3c7dd47c, 0x427c295b} }, +/**/ {{0x3fb51faf, 0x3ef25277} }, +/**/ {{0x3bdf056a, 0xa81026a7} }, +/**/ {{0x3f8004ac, 0xd443a18b} }, +/**/ {{0x3c027610, 0x8178f329} }, +/**/ {{0xbfa095bb, 0xfbb3a658} }, +/**/ {{0x3f98c734, 0xa7859d46} }, +/**/ {{0xbf8162cd, 0xeefe9a81} }, +/**/ {{0xbf61c17f, 0x8330eac0} }, +/**/ {{0x3f76293f, 0xe421c20a} } }, +/**/ {{{0x3fee6000, 0x00000000} }, +/**/ {{0x3fe84c9c, 0x7653f7eb} }, +/**/ {{0xbc383611, 0xfe0a3e8f} }, +/**/ {{0x3fe0d546, 0x2a7f71b5} }, +/**/ {{0x3c757061, 0x596848c6} }, +/**/ {{0xbfd0cf6d, 0xb4cf51a6} }, +/**/ {{0x3c4c99ab, 0x5b18bb8c} }, +/**/ {{0x3fb5275f, 0x24486227} }, +/**/ {{0x3c5b4a59, 0xbb1f4f56} }, +/**/ {{0x3f7d77be, 0x36238bb2} }, +/**/ {{0x3c1ddbd1, 0xcaec6ba2} }, +/**/ {{0xbfa04bc1, 0xe1406cd0} }, +/**/ {{0x3f988a1e, 0x7f96d6ca} }, +/**/ {{0xbf8184c5, 0xcdffc380} }, +/**/ {{0xbf603841, 0x12561f8b} }, +/**/ {{0x3f7588b9, 0x4d81a668} } }, +/**/ {{{0x3fee8000, 0x00000000} }, +/**/ {{0x3fe85d69, 0x576cc2c5} }, +/**/ {{0x3c66b66e, 0x7fc8b8c3} }, +/**/ {{0x3fe0c47e, 0xac74fadc} }, +/**/ {{0xbc8035f8, 0x77bb1887} }, +/**/ {{0xbfd0bf8d, 0x7e8202a9} }, +/**/ {{0x3c798048, 0x1f4d2357} }, +/**/ {{0x3fb52e6c, 0x13725c73} }, +/**/ {{0xbc34c3af, 0xf5b19ded} }, +/**/ {{0x3f7af1a3, 0x7d9c2711} }, +/**/ {{0x3bea7ec7, 0x1af1098d} }, +/**/ {{0xbfa0027f, 0xb643d11f} }, +/**/ {{0x3f984c96, 0xc756b7d7} }, +/**/ {{0xbf81a3b6, 0x6c3ca3ae} }, +/**/ {{0xbf5d7470, 0x13459246} }, +/**/ {{0x3f74ea6f, 0x1e70d9a4} } }, +/**/ {{{0x3feea000, 0x00000000} }, +/**/ {{0x3fe86e25, 0x78f87ae5} }, +/**/ {{0x3c8022b1, 0x375cfe34} }, +/**/ {{0x3fe0b3c7, 0x11319104} }, +/**/ {{0x3c8ac394, 0x25152519} }, +/**/ {{0xbfd0afa8, 0x3ab87c8a} }, +/**/ {{0x3c724f26, 0x27b31384} }, +/**/ {{0x3fb534d8, 0xe904e078} }, +/**/ {{0xbc55bfde, 0xf8948323} }, +/**/ {{0x3f7876ec, 0xa7bb2dfb} }, +/**/ {{0xbc197116, 0x8a87be50} }, +/**/ {{0xbf9f73ed, 0x7f5f95b4} }, +/**/ {{0x3f980ea7, 0xf11c3266} }, +/**/ {{0xbf81bfb6, 0x0c032389} }, +/**/ {{0xbf5a8e77, 0x8bf305a1} }, +/**/ {{0x3f744e6c, 0x3ec72e6d} } }, +/**/ {{{0x3feec000, 0x00000000} }, +/**/ {{0x3fe87ed0, 0xeadc5a2a} }, +/**/ {{0x3c70af5a, 0xd957f4bc} }, +/**/ {{0x3fe0a31f, 0x5d8701b3} }, +/**/ {{0xbc869b25, 0x263ce937} }, +/**/ {{0xbfd09fbe, 0x60757b83} }, +/**/ {{0x3c767aff, 0xa96db9ef} }, +/**/ {{0x3fb53aa8, 0x7a589afb} }, +/**/ {{0xbc4b7e8e, 0x0844ff86} }, +/**/ {{0x3f76077c, 0xacf1a65c} }, +/**/ {{0xbc19a3b2, 0xb13331a9} }, +/**/ {{0xbf9ee450, 0x472733eb} }, +/**/ {{0x3f97d05c, 0x21e541d7} }, +/**/ {{0xbf81d8da, 0x9d9d4dfc} }, +/**/ {{0xbf57be45, 0xd3ce1b4a} }, +/**/ {{0x3f73b4ba, 0x7cb60047} } }, +/**/ {{{0x3feee000, 0x00000000} }, +/**/ {{0x3fe88f6b, 0xbd023119} }, +/**/ {{0xbc532d1d, 0x25aba660} }, +/**/ {{0x3fe09287, 0x95d126c6} }, +/**/ {{0x3c85aad3, 0xeccc37a6} }, +/**/ {{0xbfd08fd0, 0x649e7367} }, +/**/ {{0x3c71e96c, 0xed21a127} }, +/**/ {{0x3fb53fdd, 0x957ec910} }, +/**/ {{0xbc339c23, 0xaf97a601} }, +/**/ {{0x3f73a336, 0x5a18e5a2} }, +/**/ {{0xbc1f7225, 0x477571de} }, +/**/ {{0xbf9e5629, 0xd4044135} }, +/**/ {{0x3f9791bd, 0x32786dc4} }, +/**/ {{0xbf81ef39, 0xbdf030c4} }, +/**/ {{0xbf550386, 0xe21b8bcb} }, +/**/ {{0x3f731d62, 0x97aa7fb2} } }, +/**/ {{{0x3fef0000, 0x00000000} }, +/**/ {{0x3fe89ff5, 0xff57f1f8} }, +/**/ {{0xbc855b9a, 0x5e177a1b} }, +/**/ {{0x3fe081ff, 0xbdf80108} }, +/**/ {{0x3c6ffbdf, 0x80108200} }, +/**/ {{0xbfd07fde, 0xba010928} }, +/**/ {{0x3c38d37f, 0x7bae0295} }, +/**/ {{0x3fb5447b, 0x0136e69f} }, +/**/ {{0x3c50316a, 0x0dda278d} }, +/**/ {{0x3f7149fc, 0x55103947} }, +/**/ {{0x3c176e96, 0x849e505f} }, +/**/ {{0xbf9dc97b, 0xfbe9a2ee} }, +/**/ {{0x3f9752d4, 0xb08adda9} }, +/**/ {{0xbf8202e8, 0xb540d106} }, +/**/ {{0xbf525de5, 0x859de3e9} }, +/**/ {{0x3f72886c, 0x4afd9f21} } }, +/**/ {{{0x3fef2000, 0x00000000} }, +/**/ {{0x3fe8b06f, 0xc1cf3dff} }, +/**/ {{0xbc80fb31, 0x2656db6d} }, +/**/ {{0x3fe07187, 0xd971cd38} }, +/**/ {{0x3c89baa4, 0x202c20ac} }, +/**/ {{0xbfd06fe9, 0xd15893ab} }, +/**/ {{0xbc7a864b, 0xdc0cb586} }, +/**/ {{0x3fb54883, 0x7ce57fed} }, +/**/ {{0xbc49498e, 0x294f4b18} }, +/**/ {{0x3f6df762, 0x426ebecc} }, +/**/ {{0xbc022f08, 0xf28644c0} }, +/**/ {{0xbf9d3e48, 0x5c564b44} }, +/**/ {{0x3f9713ab, 0xdfea7acf} }, +/**/ {{0xbf8213fc, 0x761db35c} }, +/**/ {{0xbf4f9a17, 0x10d60f49} }, +/**/ {{0x3f71f5de, 0x58700e9b} } }, +/**/ {{{0x3fef4000, 0x00000000} }, +/**/ {{0x3fe8c0d9, 0x145cf49d} }, +/**/ {{0x3c8bea40, 0x76dc4333} }, +/**/ {{0x3fe0611f, 0xeb45139a} }, +/**/ {{0x3c7e4998, 0x65aadb1f} }, +/**/ {{0xbfd05ff2, 0x1953a316} }, +/**/ {{0x3c759922, 0xa1b67b0f} }, +/**/ {{0x3fb54bf9, 0xc08c1d66} }, +/**/ {{0x3c5b9353, 0xd220330c} }, +/**/ {{0x3f69706e, 0x478cb604} }, +/**/ {{0xbbfdb6d3, 0xa22fd45a} }, +/**/ {{0xbf9cb490, 0x5c0d1d38} }, +/**/ {{0x3f96d44b, 0xbbaba2f2} }, +/**/ {{0xbf822289, 0x9c6b7de1} }, +/**/ {{0xbf4aa143, 0xa49803b6} }, +/**/ {{0x3f7165be, 0x9270e49e} } }, +/**/ {{{0x3fef6000, 0x00000000} }, +/**/ {{0x3fe8d132, 0x06f8c4cb} }, +/**/ {{0xbc7b018c, 0xbaa89a8b} }, +/**/ {{0x3fe050c7, 0xf60ab1f4} }, +/**/ {{0x3c63f8e2, 0xc6cf5796} }, +/**/ {{0xbfd04ff7, 0xfe998dc0} }, +/**/ {{0x3c77873c, 0x7dc56419} }, +/**/ {{0x3fb54ee0, 0x7cc24121} }, +/**/ {{0x3c313117, 0x8e5c84c5} }, +/**/ {{0x3f64fee1, 0x50066301} }, +/**/ {{0x3c043698, 0x017261a1} }, +/**/ {{0xbf9c2c55, 0x2cc5b4f1} }, +/**/ {{0x3f9694bc, 0xf759f369} }, +/**/ {{0xbf822ea4, 0x6c93426a} }, +/**/ {{0xbf45d0a1, 0x135d6c51} }, +/**/ {{0x3f70d811, 0xe62dc18f} } }, +/**/ {{{0x3fef8000, 0x00000000} }, +/**/ {{0x3fe8e17a, 0xa99cc05e} }, +/**/ {{0xbc7ec182, 0xab042f61} }, +/**/ {{0x3fe0407f, 0xfbefe001} }, +/**/ {{0x3c401ffe, 0xfbf80041} }, +/**/ {{0xbfd03ffb, 0xebd00209} }, +/**/ {{0xbc53ff3c, 0xb9004112} }, +/**/ {{0x3fb5513a, 0x5aaf6d91} }, +/**/ {{0x3c54a20d, 0xc0516ddb} }, +/**/ {{0x3f60a27f, 0xc6ac4038} }, +/**/ {{0x3bf06bee, 0x2a340912} }, +/**/ {{0xbf9ba597, 0xccd6032a} }, +/**/ {{0x3f965508, 0x002bb974} }, +/**/ {{0xbf823860, 0xd2d1068b} }, +/**/ {{0xbf41277e, 0x666265bc} }, +/**/ {{0x3f704cdc, 0x656b66ea} } }, +/**/ {{{0x3fefa000, 0x00000000} }, +/**/ {{0x3fe8f1b3, 0x0c44f167} }, +/**/ {{0x3c6dd1ca, 0xb93933fd} }, +/**/ {{0x3fe03047, 0xfeb82e4e} }, +/**/ {{0x3c69ee56, 0x5272e5ac} }, +/**/ {{0xbfd02ffe, 0x49a09c45} }, +/**/ {{0xbc700a59, 0xb26267bb} }, +/**/ {{0x3fb55309, 0xfc062d2f} }, +/**/ {{0x3c5dba48, 0xb11938e0} }, +/**/ {{0x3f58b61b, 0xe4f365be} }, +/**/ {{0x3bf8b585, 0xa79ad31a} }, +/**/ {{0xbf9b2059, 0x08d4ad17} }, +/**/ {{0x3f961534, 0xfe379940} }, +/**/ {{0xbf823fd2, 0x62a1270e} }, +/**/ {{0xbf394a53, 0x3f3a0aec} }, +/**/ {{0x3f6f8842, 0xa04bcae2} } }, +/**/ {{{0x3fefc000, 0x00000000} }, +/**/ {{0x3fe901db, 0x3eeef187} }, +/**/ {{0x3c868665, 0xe5603c8f} }, +/**/ {{0x3fe0201f, 0xffbf7f80} }, +/**/ {{0x3c20201f, 0xffbf7f80} }, +/**/ {{0xbfd01fff, 0x7ebe8004} }, +/**/ {{0xbc4213ff, 0xcf979001} }, +/**/ {{0x3fb55451, 0xfb0012db} }, +/**/ {{0xbc395606, 0xf73aa59f} }, +/**/ {{0x3f50509f, 0xfc757100} }, +/**/ {{0x3bebc7da, 0xfee554d0} }, +/**/ {{0xbf9a9c99, 0x7d3424d0} }, +/**/ {{0x3f95d54b, 0xd5ac0217} }, +/**/ {{0xbf82450c, 0x564b3c49} }, +/**/ {{0xbf3091df, 0xe6d3e986} }, +/**/ {{0x3f6e7bc6, 0x3bef5a22} } }, +/**/ {{{0x3fefe000, 0x00000000} }, +/**/ {{0x3fe911f3, 0x5199833b} }, +/**/ {{0x3c63ae8a, 0x0edbf522} }, +/**/ {{0x3fe01007, 0xfffbfbfe} }, +/**/ {{0x3ba01007, 0xfffbfbfe} }, +/**/ {{0xbfd00fff, 0xefebf400} }, +/**/ {{0xbc401209, 0xfff9f97d} }, +/**/ {{0x3fb55514, 0xea5aaaf6} }, +/**/ {{0xbc529baa, 0xb5b7b240} }, +/**/ {{0x3f402827, 0xffc7abc4} }, +/**/ {{0x3b5ba3d6, 0xbfee6ab3} }, +/**/ {{0xbf9a1a59, 0x97d67093} }, +/**/ {{0x3f959554, 0x28080aaf} }, +/**/ {{0xbf824821, 0x8e892ce2} }, +/**/ {{0xbf204877, 0xfe70a2a6} }, +/**/ {{0x3f6d7447, 0x0e8ddd67} } }, +/**/ {{{0x3feff800, 0x00000000} }, +/**/ {{0x3fe91dfa, 0xd439826e} }, +/**/ {{0xbc786a19, 0x6df48d55} }, +/**/ {{0x3fe00400, 0x7ffffbff} }, +/**/ {{0xbbeffffe, 0xffbff800} }, +/**/ {{0xbfd003ff, 0xffbfebfd} }, +/**/ {{0xbb600480, 0x9ffff9fe} }, +/**/ {{0x3fb55551, 0x53aa5aab} }, +/**/ {{0xbc542a4a, 0x9baaab5b} }, +/**/ {{0x3f200a02, 0x7fffc7eb} }, +/**/ {{0xbb7dfffe, 0x4770e940} }, +/**/ {{0xbf99b9a5, 0x9997d8d0} }, +/**/ {{0x3f956555, 0x50a80a03} }, +/**/ {{0xbf824914, 0x86456493} }, +/**/ {{0xbf001207, 0x7ffe7329} }, +/**/ {{0x3f6cb1ef, 0x1c63fe2a} } }, + }; + +#else +#ifdef LITTLE_ENDI + + static const number + cij[241][7] = { /* x0,cij for (1/16,1) */ +/**/ {{{0X65E0244E, 0X3FB04006} }, +/**/ {{0X7B53DD20, 0X3FB03A73} }, +/**/ {{0XCF5CFB72, 0X3FEFDF1F} }, +/**/ {{0XCE2AE4C2, 0XBFB01EB3} }, +/**/ {{0XDD58A40D, 0XBFD4D29E} }, +/**/ {{0XD907A18A, 0X3FAFDA4A} }, +/**/ {{0X4DF65B18, 0X3FC814DF} } }, +/**/ {{{0XB9B88CD8, 0X3FB0FFFD} }, +/**/ {{0X63645300, 0X3FB0F99C} }, +/**/ {{0XA3DED30F, 0X3FEFDC08} }, +/**/ {{0X669C1AED, 0XBFB0D9DC} }, +/**/ {{0XF7138DE2, 0XBFD4C669} }, +/**/ {{0X29D085A7, 0X3FB0A12F} }, +/**/ {{0XCFD48D20, 0X3FC7F0EE} } }, +/**/ {{{0X5A73D4F1, 0X3FB1FFF1} }, +/**/ {{0X2BEE2040, 0X3FB1F85F} }, +/**/ {{0X42B56D31, 0X3FEFD7B3} }, +/**/ {{0XB69DEA40, 0XBFB1D2B7} }, +/**/ {{0X3922ECC9, 0XBFD4B552} }, +/**/ {{0X522B1A04, 0X3FB18F93} }, +/**/ {{0X5660F061, 0X3FC7BEAD} } }, +/**/ {{{0XB2524AA2, 0X3FB2FFFD} }, +/**/ {{0XE71790A0, 0X3FB2F716} }, +/**/ {{0X53B496A4, 0X3FEFD31F} }, +/**/ {{0X4AAB7374, 0XBFB2CAD8} }, +/**/ {{0X58DD2FB2, 0XBFD4A34B} }, +/**/ {{0XD0CECC18, 0X3FB27C0A} }, +/**/ {{0X5D2743D7, 0X3FC789D2} } }, +/**/ {{{0X0573F3AC, 0X3FB3FFFE} }, +/**/ {{0X1702F6A0, 0X3FB3F59D} }, +/**/ {{0XB071ACC2, 0X3FEFCE4D} }, +/**/ {{0X64DB3686, 0XBFB3C20F} }, +/**/ {{0XEB3BFE93, 0XBFD49059} }, +/**/ {{0XCAF74FED, 0X3FB36659} }, +/**/ {{0X1C011FB0, 0X3FC75269} } }, +/**/ {{{0X894384D6, 0X3FB4FFEF} }, +/**/ {{0X0CE204C0, 0X3FB4F3ED} }, +/**/ {{0XA8EA5A01, 0X3FEFC93E} }, +/**/ {{0X7B5457C9, 0XBFB4B84F} }, +/**/ {{0X7401F2F9, 0XBFD47C80} }, +/**/ {{0XB4F67209, 0X3FB44E64} }, +/**/ {{0X4C540B77, 0X3FC7187D} } }, +/**/ {{{0XDF406528, 0X3FB5FFF8} }, +/**/ {{0X3C73D820, 0X3FB5F22B} }, +/**/ {{0XB1F60F13, 0X3FEFC3F1} }, +/**/ {{0XCB7FA73B, 0XBFB5ADB2} }, +/**/ {{0X2B1EB555, 0XBFD467BE} }, +/**/ {{0X99EDC463, 0X3FB53435} }, +/**/ {{0X238F5059, 0X3FC6DC1B} } }, +/**/ {{{0X8C4F0D56, 0X3FB7000F} }, +/**/ {{0X495A2FA0, 0X3FB6F04B} }, +/**/ {{0X340DCE97, 0X3FEFBE67} }, +/**/ {{0X4D98E1AD, 0XBFB6A224} }, +/**/ {{0X14064DF1, 0XBFD45216} }, +/**/ {{0X2BA78A66, 0X3FB617AA} }, +/**/ {{0X50A3D7AC, 0X3FC69D4F} } }, +/**/ {{{0XBB4057CF, 0X3FB8000F} }, +/**/ {{0XBE2CD3A0, 0X3FB7EE27} }, +/**/ {{0X39EC9246, 0X3FEFB8A0} }, +/**/ {{0X31D9C773, 0XBFB79577} }, +/**/ {{0XB6DC7D72, 0XBFD43B8D} }, +/**/ {{0XD69547DF, 0X3FB6F88A} }, +/**/ {{0XF633CE8C, 0X3FC65C26} } }, +/**/ {{{0X39CF2B7F, 0X3FB8FFF2} }, +/**/ {{0X9F979E80, 0X3FB8EBB7} }, +/**/ {{0X435506E1, 0X3FEFB29D} }, +/**/ {{0X69B9CDB5, 0XBFB8879A} }, +/**/ {{0X85FEAFA9, 0XBFD42428} }, +/**/ {{0XB6191A0E, 0X3FB7D6BA} }, +/**/ {{0XA7CB8BB5, 0X3FC618AF} } }, +/**/ {{{0X6E2F0772, 0X3FB9FFF9} }, +/**/ {{0XD32A9480, 0X3FB9E93A} }, +/**/ {{0X04A3EC40, 0X3FEFAC5D} }, +/**/ {{0X53F6EA97, 0XBFB978C2} }, +/**/ {{0X089C36F6, 0XBFD40BE3} }, +/**/ {{0X885AEB77, 0X3FB8B25C} }, +/**/ {{0X63CADCE1, 0X3FC5D2F7} } }, +/**/ {{{0X6316B097, 0X3FBB0002} }, +/**/ {{0XCE24CC00, 0X3FBAE68C} }, +/**/ {{0X938C5C66, 0X3FEFA5E0} }, +/**/ {{0X76F14E4B, 0XBFBA68C3} }, +/**/ {{0X1696CD7C, 0XBFD3F2C3} }, +/**/ {{0X722A2CB4, 0X3FB98B3B} }, +/**/ {{0X9067AD62, 0X3FC58B0C} } }, +/**/ {{{0X604F58B1, 0X3FBC0008} }, +/**/ {{0X05650780, 0X3FBBE3A7} }, +/**/ {{0X5A7A2773, 0X3FEF9F28} }, +/**/ {{0X3D5AC0A4, 0XBFBB578F} }, +/**/ {{0XF767119F, 0XBFD3D8CB} }, +/**/ {{0XC7E31B88, 0X3FBA613D} }, +/**/ {{0XF5594565, 0X3FC540FD} } }, +/**/ {{{0X6CCA4EBA, 0X3FBD0002} }, +/**/ {{0XC1298A80, 0X3FBCE07E} }, +/**/ {{0XE8D36C4A, 0X3FEF9834} }, +/**/ {{0X5BCAC5FE, 0XBFBC4513} }, +/**/ {{0X8B5236F1, 0XBFD3BE01} }, +/**/ {{0X2E991970, 0X3FBB3447} }, +/**/ {{0XB8ADB373, 0X3FC4F4DA} } }, +/**/ {{{0XB2B47FCA, 0X3FBDFFF4} }, +/**/ {{0X4A051D80, 0X3FBDDD16} }, +/**/ {{0X78DCC895, 0X3FEF9106} }, +/**/ {{0XF0966844, 0XBFBD3149} }, +/**/ {{0X744F9A5F, 0XBFD3A266} }, +/**/ {{0XEDB7F27A, 0X3FBC0446} }, +/**/ {{0X583F9ECA, 0X3FC4A6B2} } }, +/**/ {{{0XA9A05BE0, 0X3FBF000A} }, +/**/ {{0XA3BDA540, 0X3FBED996} }, +/**/ {{0X1B8BA97F, 0X3FEF899C} }, +/**/ {{0X2287A677, 0XBFBE1C51} }, +/**/ {{0XEDC130BB, 0XBFD385F8} }, +/**/ {{0XF306FF50, 0X3FBCD14B} }, +/**/ {{0XA667A72B, 0X3FC45694} } }, +/**/ {{{0XBA8F63DE, 0X3FBFFFFA} }, +/**/ {{0X69FE4780, 0X3FBFD5B5} }, +/**/ {{0X4863DC7D, 0X3FEF81F8} }, +/**/ {{0XD1518706, 0XBFBF05DB} }, +/**/ {{0X4687A69C, 0XBFD368C4} }, +/**/ {{0X1B3868DA, 0X3FBD9B08} }, +/**/ {{0XC345ADFC, 0X3FC40491} } }, +/**/ {{{0X6ECCADA8, 0X3FC07FFA} }, +/**/ {{0X0A396400, 0X3FC068D0} }, +/**/ {{0XF1FCFC6B, 0X3FEF7A19} }, +/**/ {{0X861DF0DF, 0XBFBFEE0C} }, +/**/ {{0X5A586C0C, 0XBFD34AC6} }, +/**/ {{0X189D637A, 0X3FBE618F} }, +/**/ {{0X195779D4, 0X3FC3B0BA} } }, +/**/ {{{0X33432713, 0X3FC10003} }, +/**/ {{0XF203D1A0, 0X3FC0E6B0} }, +/**/ {{0XFE0EB463, 0X3FEF7200} }, +/**/ {{0XE15CB19A, 0XBFC06A72} }, +/**/ {{0XB8DB761E, 0XBFD32C00} }, +/**/ {{0XA11F5E3E, 0X3FBF24D8} }, +/**/ {{0X569E85DD, 0X3FC35B1E} } }, +/**/ {{{0XDA1C4811, 0X3FC17FFC} }, +/**/ {{0X29EBDA00, 0X3FC16462} }, +/**/ {{0X7D558737, 0X3FEF69AF} }, +/**/ {{0X0B33969B, 0XBFC0DD17} }, +/**/ {{0X33AC50D1, 0XBFD30C7D} }, +/**/ {{0X9BE43F0F, 0X3FBFE4AA} }, +/**/ {{0X692539CB, 0X3FC303CF} } }, +/**/ {{{0X3CCA418D, 0X3FC1FFFF} }, +/**/ {{0X3B978EA0, 0X3FC1E1FA} }, +/**/ {{0X45D421A9, 0X3FEF6124} }, +/**/ {{0XACAC8AA8, 0XBFC14F03} }, +/**/ {{0X62E675A3, 0XBFD2EC39} }, +/**/ {{0X2FA6B426, 0X3FC0508C} }, +/**/ {{0X780A6467, 0X3FC2AADE} } }, +/**/ {{{0XD9C78922, 0X3FC27FF7} }, +/**/ {{0X1B91E640, 0X3FC25F66} }, +/**/ {{0XF52E192C, 0X3FEF5860} }, +/**/ {{0XE5DE2394, 0XBFC1C023} }, +/**/ {{0X6BEE0ABD, 0XBFD2CB3D} }, +/**/ {{0X5E075C1A, 0X3FC0ACFB} }, +/**/ {{0XDFFE453A, 0X3FC2505C} } }, +/**/ {{{0XA1FC1AAA, 0X3FC2FFF7} }, +/**/ {{0X83257C40, 0X3FC2DCB5} }, +/**/ {{0XC719B6FB, 0X3FEF4F64} }, +/**/ {{0X61514083, 0XBFC23082} }, +/**/ {{0X7F7B72D5, 0XBFD2A988} }, +/**/ {{0X7C887402, 0X3FC107A7} }, +/**/ {{0X2C3CD6D1, 0X3FC1F45C} } }, +/**/ {{{0X9D78E15E, 0X3FC38005} }, +/**/ {{0X6AC98EE0, 0X3FC359EE} }, +/**/ {{0X944CEC16, 0X3FEF462F} }, +/**/ {{0XD85B87A9, 0XBFC2A020} }, +/**/ {{0X2E4AB369, 0XBFD2871C} }, +/**/ {{0XC31A65D9, 0X3FC1608D} }, +/**/ {{0X130BBE50, 0X3FC196EE} } }, +/**/ {{{0X9F431B1A, 0X3FC40004} }, +/**/ {{0X6BD65360, 0X3FC3D6F3} }, +/**/ {{0XDD99B68A, 0X3FEF3CC3} }, +/**/ {{0XB3DD00ED, 0XBFC30EE1} }, +/**/ {{0XF8482664, 0XBFD26403} }, +/**/ {{0XFE136626, 0X3FC1B792} }, +/**/ {{0X6EAC7440, 0X3FC13824} } }, +/**/ {{{0XE01D95A1, 0X3FC48004} }, +/**/ {{0X86F00CC0, 0X3FC453D3} }, +/**/ {{0XE3970539, 0X3FEF3320} }, +/**/ {{0X0A5279AA, 0XBFC37CCF} }, +/**/ {{0X3B151D5D, 0XBFD2403F} }, +/**/ {{0XE331C9E6, 0X3FC20CBB} }, +/**/ {{0X39E3F097, 0X3FC0D811} } }, +/**/ {{{0XAA9382DD, 0X3FC4FFF7} }, +/**/ {{0X8C590A80, 0X3FC4D07F} }, +/**/ {{0X34DF28E0, 0X3FEF2948} }, +/**/ {{0X5B43915C, 0XBFC3E9D8} }, +/**/ {{0XEB8845A2, 0XBFD21BD5} }, +/**/ {{0XAC6AC8AD, 0X3FC25FF8} }, +/**/ {{0X88ED96CA, 0X3FC076C6} } }, +/**/ {{{0X352408BE, 0X3FC58006} }, +/**/ {{0XC39A73E0, 0X3FC54D1E} }, +/**/ {{0X09AE009C, 0X3FEF1F37} }, +/**/ {{0XB9BE8550, 0XBFC4561C} }, +/**/ {{0X0053F52E, 0XBFD1F6C0} }, +/**/ {{0XEF783BE9, 0X3FC2B15D} }, +/**/ {{0X8615239B, 0X3FC01456} } }, +/**/ {{{0X2B193F81, 0X3FC5FFFF} }, +/**/ {{0X4F73E000, 0X3FC5C980} }, +/**/ {{0XAE110E29, 0X3FEF14F1} }, +/**/ {{0X9098B3D2, 0XBFC4C16E} }, +/**/ {{0X8F058241, 0XBFD1D10F} }, +/**/ {{0XA14FA897, 0X3FC300C6} }, +/**/ {{0XD56607C0, 0X3FBF61A6} } }, +/**/ {{{0X4460E6E1, 0X3FC68008} }, +/**/ {{0X04A55E20, 0X3FC645C8} }, +/**/ {{0X8FA36EC5, 0X3FEF0A75} }, +/**/ {{0XD62FA883, 0XBFC52BE9} }, +/**/ {{0X69A74048, 0XBFD1AABD} }, +/**/ {{0X1679EB02, 0X3FC34E45} }, +/**/ {{0XF7C14C3D, 0X3FBE989E} } }, +/**/ {{{0X9E99A846, 0X3FC6FFFB} }, +/**/ {{0X4B35FD40, 0X3FC6C1D0} }, +/**/ {{0X3EF8EF95, 0X3FEEFFC6} }, +/**/ {{0X76A2FE63, 0XBFC5956B} }, +/**/ {{0XDDC78DDF, 0XBFD183D8} }, +/**/ {{0XAC606D66, 0X3FC399BD} }, +/**/ {{0X070D286A, 0X3FBDCDBA} } }, +/**/ {{{0X0FFCD490, 0X3FC78008} }, +/**/ {{0XB55758E0, 0X3FC73DC5} }, +/**/ {{0X457E2065, 0X3FEEF4E0} }, +/**/ {{0X7D6FF9BC, 0XBFC5FE16} }, +/**/ {{0X9FADD384, 0XBFD15C57} }, +/**/ {{0X73E52D32, 0X3FC3E347} }, +/**/ {{0X9A65AE4B, 0X3FBD011C} } }, +/**/ {{{0X148E79C1, 0X3FC80006} }, +/**/ {{0X2B7F8CA0, 0X3FC7B981} }, +/**/ {{0X701687ED, 0X3FEEE9C7} }, +/**/ {{0X0E1EF36D, 0XBFC665C7} }, +/**/ {{0XCCBCBDAB, 0XBFD13449} }, +/**/ {{0X5C71B3E8, 0X3FC42AC7} }, +/**/ {{0X3E81980E, 0X3FBC32EB} } }, +/**/ {{{0X0F487C17, 0X3FC88006} }, +/**/ {{0XBC0E3640, 0X3FC83511} }, +/**/ {{0XD2D55329, 0X3FEEDE7A} }, +/**/ {{0X37E644BA, 0XBFC6CC87} }, +/**/ {{0X60597557, 0XBFD10BAE} }, +/**/ {{0X13E26FBE, 0X3FC47043} }, +/**/ {{0X6FB18BF4, 0X3FBB634A} } }, +/**/ {{{0XD3518D76, 0X3FC90004} }, +/**/ {{0X8874C100, 0X3FC8B073} }, +/**/ {{0X2ED6673B, 0X3FEED2FB} }, +/**/ {{0X2A6EBAC3, 0XBFC73251} }, +/**/ {{0X6924232F, 0XBFD0E28A} }, +/**/ {{0X73BCC03F, 0X3FC4B3B5} }, +/**/ {{0X8C72507F, 0X3FBA925E} } }, +/**/ {{{0XD2F20D5C, 0X3FC97FFF} }, +/**/ {{0X51AF5920, 0X3FC92BA3} }, +/**/ {{0X3D32449F, 0X3FEEC749} }, +/**/ {{0XC308255F, 0XBFC7971F} }, +/**/ {{0XD572D28F, 0XBFD0B8E2} }, +/**/ {{0X337448FE, 0X3FC4F51A} }, +/**/ {{0XCFCBC620, 0X3FB9C04B} } }, +/**/ {{{0XBF80F060, 0X3FCA0005} }, +/**/ {{0X6E9E8960, 0X3FC9A6AE} }, +/**/ {{0X1EF200E7, 0X3FEEBB64} }, +/**/ {{0X6E96E5C1, 0XBFC7FAFB} }, +/**/ {{0XEC6AD647, 0XBFD08EB6} }, +/**/ {{0XF53D0BA6, 0X3FC53475} }, +/**/ {{0X4433C20E, 0X3FB8ED36} } }, +/**/ {{{0XDEECA8E4, 0X3FCA7FF7} }, +/**/ {{0X948578E0, 0X3FCA2176} }, +/**/ {{0X328FF98B, 0X3FEEAF4F} }, +/**/ {{0X58149B1C, 0XBFC85DC9} }, +/**/ {{0XF933A1AB, 0XBFD06414} }, +/**/ {{0X60C45A8F, 0X3FC571B7} }, +/**/ {{0XBE58C308, 0X3FB81941} } }, +/**/ {{{0X7DEFD553, 0X3FCAFFFF} }, +/**/ {{0X9EBA6B80, 0X3FCA9C22} }, +/**/ {{0X10A85E10, 0X3FEEA307} }, +/**/ {{0X7F9DEA61, 0XBFC8BFA6} }, +/**/ {{0X5A474E8F, 0XBFD038F3} }, +/**/ {{0X30C225D2, 0X3FC5ACF0} }, +/**/ {{0XD062812F, 0X3FB74491} } }, +/**/ {{{0X669932A5, 0X3FCB7FFE} }, +/**/ {{0XCFF6DFE0, 0X3FCB1694} }, +/**/ {{0X1921D387, 0X3FEE968F} }, +/**/ {{0XE075D95A, 0XBFC92078} }, +/**/ {{0X526793C4, 0XBFD00D60} }, +/**/ {{0X73842A52, 0X3FC5E610} }, +/**/ {{0XC5331D5A, 0X3FB66F49} } }, +/**/ {{{0XB44759F3, 0X3FCBFFF9} }, +/**/ {{0X5073A2A0, 0X3FCB90D1} }, +/**/ {{0X56598313, 0X3FEE89E7} }, +/**/ {{0XCFB9203D, 0XBFC98041} }, +/**/ {{0XBED91B37, 0XBFCFC2BC} }, +/**/ {{0X6D4FC2FC, 0X3FC61D19} }, +/**/ {{0X9411537E, 0X3FB5998C} } }, +/**/ {{{0X5568F3EC, 0X3FCC8007} }, +/**/ {{0X4A31DBE0, 0X3FCC0AEC} }, +/**/ {{0X18F270A8, 0X3FEE7D0E} }, +/**/ {{0XF522B132, 0XBFC9DF0E} }, +/**/ {{0X2179C242, 0XBFCF69D4} }, +/**/ {{0X36646FCD, 0X3FC65213} }, +/**/ {{0XDC699095, 0X3FB4C37C} } }, +/**/ {{{0X601A799F, 0X3FCCFFF8} }, +/**/ {{0X49DB66A0, 0X3FCC84B8} }, +/**/ {{0XA0EE780E, 0X3FEE7008} }, +/**/ {{0X3A403934, 0XBFCA3CBB} }, +/**/ {{0XD490BE32, 0XBFCF102F} }, +/**/ {{0X037D4137, 0X3FC684EA} }, +/**/ {{0XD9EC855A, 0X3FB3ED3C} } }, +/**/ {{{0X7BBF1497, 0X3FCD7FF9} }, +/**/ {{0X1E008CE0, 0X3FCCFE5F} }, +/**/ {{0XF04615C7, 0X3FEE62D2} }, +/**/ {{0X15AADE2C, 0XBFCA9965} }, +/**/ {{0X0B44B682, 0XBFCEB5B9} }, +/**/ {{0X92EC8D57, 0X3FC6B5AF} }, +/**/ {{0X60D831AE, 0X3FB316EE} } }, +/**/ {{{0X40209B20, 0X3FCE0008} }, +/**/ {{0XB145A760, 0X3FCD77DD} }, +/**/ {{0XBE1DFDF1, 0X3FEE556D} }, +/**/ {{0X2186AF0F, 0XBFCAF508} }, +/**/ {{0X9420489D, 0XBFCE5A79} }, +/**/ {{0X454FEB2C, 0X3FC6E462} }, +/**/ {{0XD2945A8C, 0X3FB240B2} } }, +/**/ {{{0XC0AE943C, 0X3FCE8000} }, +/**/ {{0X3CA10100, 0X3FCDF111} }, +/**/ {{0X59E7308B, 0X3FEE47DD} }, +/**/ {{0X9439F69F, 0XBFCB4F88} }, +/**/ {{0X798DE600, 0XBFCDFE93} }, +/**/ {{0X8F267389, 0X3FC710F5} }, +/**/ {{0X1A8A373E, 0X3FB16AAB} } }, +/**/ {{{0X6D532803, 0X3FCF0003} }, +/**/ {{0XCB4E5C80, 0X3FCE6A17} }, +/**/ {{0XE3D0F6C2, 0X3FEE3A1E} }, +/**/ {{0X6E31F768, 0XBFCBA8FB} }, +/**/ {{0XE6A382E3, 0XBFCDA1F7} }, +/**/ {{0XB36AC4C0, 0X3FC73B75} }, +/**/ {{0XA3470B0A, 0X3FB094F7} } }, +/**/ {{{0X48B8AFC3, 0X3FCF7FFA} }, +/**/ {{0XE1654560, 0X3FCEE2DB} }, +/**/ {{0X43F2AB37, 0X3FEE2C35} }, +/**/ {{0X598207D6, 0XBFCC014F} }, +/**/ {{0X1EFE809A, 0XBFCD44BF} }, +/**/ {{0X698A561E, 0X3FC763DC} }, +/**/ {{0XA7CF78A3, 0X3FAF7F70} } }, +/**/ {{{0XEB334FAE, 0X3FD00002} }, +/**/ {{0X77AB25E0, 0X3FCF5B7B} }, +/**/ {{0X78A5C127, 0X3FEE1E1D} }, +/**/ {{0XC555D571, 0XBFCC5898} }, +/**/ {{0XB706CF86, 0XBFCCE6D9} }, +/**/ {{0X0823F643, 0X3FC78A35} }, +/**/ {{0X0B9118E8, 0X3FADD619} } }, +/**/ {{{0XA8AF86FE, 0X3FD03FFC} }, +/**/ {{0XB53A0C00, 0X3FCFD3CB} }, +/**/ {{0XFDCBAC8B, 0X3FEE0FDC} }, +/**/ {{0X6C3246FF, 0XBFCCAEB7} }, +/**/ {{0XD6E19AD3, 0XBFCC8870} }, +/**/ {{0XD2C48E91, 0X3FC7AE73} }, +/**/ {{0X0510FDB0, 0X3FAC2E26} } }, +/**/ {{{0XD38984B7, 0X3FD07FFC} }, +/**/ {{0X5732D4A0, 0X3FD025F7} }, +/**/ {{0X49C17AB3, 0X3FEE0170} }, +/**/ {{0X9AFE5028, 0XBFCD03C2} }, +/**/ {{0X9A2C1833, 0XBFCC2971} }, +/**/ {{0X69041DCF, 0X3FC7D0A5} }, +/**/ {{0XF497C653, 0X3FAA87D3} } }, +/**/ {{{0X1ED2ADD7, 0X3FD0BFFF} }, +/**/ {{0XCD7F7420, 0X3FD061ED} }, +/**/ {{0XDA96B750, 0X3FEDF2D8} }, +/**/ {{0XC777881E, 0XBFCD57B2} }, +/**/ {{0X8692B503, 0XBFCBC9EA} }, +/**/ {{0X42ABF9E7, 0X3FC7F0C9} }, +/**/ {{0X04B42BB4, 0X3FA8E35E} } }, +/**/ {{{0XA8515CDA, 0X3FD10003} }, +/**/ {{0X027416A0, 0X3FD09DC9} }, +/**/ {{0X34899950, 0X3FEDE417} }, +/**/ {{0X7983EDE4, 0XBFCDAA86} }, +/**/ {{0X999706B6, 0XBFCB69E3} }, +/**/ {{0XB0F126DB, 0X3FC80EE1} }, +/**/ {{0X17EE9BAB, 0X3FA740FE} } }, +/**/ {{{0XF3AF9CC5, 0X3FD14001} }, +/**/ {{0XB6E1ABA0, 0X3FD0D980} }, +/**/ {{0XE0412681, 0X3FEDD52D} }, +/**/ {{0X6863B28B, 0XBFCDFC31} }, +/**/ {{0XC55B8D5A, 0XBFCB0971} }, +/**/ {{0XA6731AAC, 0X3FC82AED} }, +/**/ {{0XC73BD8F0, 0X3FA5A0EC} } }, +/**/ {{{0XB6122509, 0X3FD18003} }, +/**/ {{0XAA1E67A0, 0X3FD1151D} }, +/**/ {{0X2E0C1F32, 0X3FEDC61B} }, +/**/ {{0XB9BA6B7E, 0XBFCE4CBE} }, +/**/ {{0X90C2431C, 0XBFCAA88E} }, +/**/ {{0X8BCBDA5E, 0X3FC844F4} }, +/**/ {{0X50E585FF, 0X3FA40361} } }, +/**/ {{{0XA6A2A153, 0X3FD1BFFF} }, +/**/ {{0XE7A18DC0, 0X3FD15096} }, +/**/ {{0XE1218F3F, 0X3FEDB6E1} }, +/**/ {{0X9621D6A2, 0XBFCE9C21} }, +/**/ {{0X22627B04, 0XBFCA4750} }, +/**/ {{0XFF8B908E, 0X3FC85CF5} }, +/**/ {{0X9833C0D6, 0X3FA26891} } }, +/**/ {{{0X2D345AAF, 0X3FD1FFFD} }, +/**/ {{0X053BF760, 0X3FD18BF3} }, +/**/ {{0XCC3ACB29, 0X3FEDA780} }, +/**/ {{0X2AA756AE, 0XBFCEEA62} }, +/**/ {{0X47ED9793, 0XBFC9E5B3} }, +/**/ {{0X87AB542A, 0X3FC872F8} }, +/**/ {{0X158E9E9A, 0X3FA0D0B2} } }, +/**/ {{{0XF14CF05A, 0X3FD23FFC} }, +/**/ {{0X4D568460, 0X3FD1C732} }, +/**/ {{0X55F32D3D, 0X3FED97F8} }, +/**/ {{0X21D457C8, 0XBFCF3780} }, +/**/ {{0XF065B845, 0XBFC983BE} }, +/**/ {{0XFBA70CD8, 0X3FC886FF} }, +/**/ {{0XAEB85CCC, 0X3F9E77EB} } }, +/**/ {{{0X0BAE6FC9, 0X3FD27FFE} }, +/**/ {{0X9A27C160, 0X3FD20253} }, +/**/ {{0X4619176E, 0X3FED8849} }, +/**/ {{0X5C0AC9EC, 0XBFCF8379} }, +/**/ {{0X5E645195, 0XBFC9217C} }, +/**/ {{0XF4264515, 0X3FC8990F} }, +/**/ {{0XE6B92E65, 0X3F9B551C} } }, +/**/ {{{0XA297A7DE, 0X3FD2C001} }, +/**/ {{0XACB927C0, 0X3FD23D57} }, +/**/ {{0XE4958FB6, 0X3FED7873} }, +/**/ {{0X43572249, 0XBFCFCE4E} }, +/**/ {{0X9F3560F3, 0XBFC8BEF1} }, +/**/ {{0XDF7F0E5B, 0X3FC8A92C} }, +/**/ {{0X116F3B19, 0X3F983958} } }, +/**/ {{{0X7267616A, 0X3FD2FFFE} }, +/**/ {{0XB2F378C0, 0X3FD27835} }, +/**/ {{0X13906586, 0X3FED687B} }, +/**/ {{0XAFDA1A0F, 0XBFD00BF9} }, +/**/ {{0XC197AD7D, 0XBFC85C34} }, +/**/ {{0X1E99F0A7, 0X3FC8B759} }, +/**/ {{0X6525C365, 0X3F9524FA} } }, +/**/ {{{0X48153B20, 0X3FD33FFE} }, +/**/ {{0X6A2FDCC0, 0X3FD2B2F6} }, +/**/ {{0XF827FBE4, 0X3FED585C} }, +/**/ {{0XB45A6918, 0XBFD03039} }, +/**/ {{0X5DFC3F72, 0XBFC7F93E} }, +/**/ {{0XC5210022, 0X3FC8C39B} }, +/**/ {{0X168FB62E, 0X3F92185E} } }, +/**/ {{{0X8122579A, 0X3FD38003} }, +/**/ {{0XAF6EC1E0, 0X3FD2ED9B} }, +/**/ {{0X872F20D3, 0X3FED4819} }, +/**/ {{0X1F4C1031, 0XBFD053E8} }, +/**/ {{0X621FFD79, 0XBFC79612} }, +/**/ {{0XDB9D9DFC, 0X3FC8CDF9} }, +/**/ {{0X80C6852F, 0X3F8E27B4} } }, +/**/ {{{0X3EF39141, 0X3FD3C003} }, +/**/ {{0X4668C700, 0X3FD3281B} }, +/**/ {{0X18590D1A, 0X3FED37B4} }, +/**/ {{0XA3EF2560, 0XBFD076FE} }, +/**/ {{0X3033287A, 0XBFC732C9} }, +/**/ {{0XCA2E5458, 0X3FC8D676} }, +/**/ {{0XD80944B1, 0X3F882F85} } }, +/**/ {{{0X63FA0E31, 0X3FD40001} }, +/**/ {{0X7B565000, 0X3FD36278} }, +/**/ {{0X47A813DA, 0X3FED272C} }, +/**/ {{0X493B9D88, 0XBFD0997F} }, +/**/ {{0X3DA9FE3C, 0XBFC6CF64} }, +/**/ {{0XC1CD3331, 0X3FC8DD18} }, +/**/ {{0XF70F6E07, 0X3F8248D1} } }, +/**/ {{{0X74071092, 0X3FD44003} }, +/**/ {{0X0F0A4000, 0X3FD39CB8} }, +/**/ {{0X3BA47A6B, 0X3FED1681} }, +/**/ {{0XD8788947, 0XBFD0BB6C} }, +/**/ {{0X589596A6, 0XBFC66BE2} }, +/**/ {{0XC9B3EC1E, 0X3FC8E1E5} }, +/**/ {{0XD20FAB86, 0X3F78E868} } }, +/**/ {{{0XC880F200, 0X3FD48000} }, +/**/ {{0XDEFFB460, 0X3FD3D6D1} }, +/**/ {{0XCADC576C, 0X3FED05B5} }, +/**/ {{0XA1D352C2, 0XBFD0DCC2} }, +/**/ {{0X3D7D2574, 0XBFC60858} }, +/**/ {{0X03208BC0, 0X3FC8E4E3} }, +/**/ {{0X6379E732, 0X3F6AC909} } }, +/**/ {{{0X4D97D2CB, 0X3FD4C000} }, +/**/ {{0XF3A2E220, 0X3FD410CB} }, +/**/ {{0XBB7ED511, 0X3FECF4C8} }, +/**/ {{0X37766A49, 0XBFD0FD84} }, +/**/ {{0X5AABC13C, 0XBFC5A4C2} }, +/**/ {{0XC80DAC4B, 0X3FC8E616} }, +/**/ {{0XB04695C2, 0X3F4038AA} } }, +/**/ {{{0X9397539F, 0X3FD4FFFD} }, +/**/ {{0X06A7DEC0, 0X3FD44AA2} }, +/**/ {{0XCF479DDE, 0X3FECE3BB} }, +/**/ {{0X4D122984, 0XBFD11DAF} }, +/**/ {{0XB1024DF0, 0XBFC5412E} }, +/**/ {{0X1B2C560D, 0X3FC8E587} }, +/**/ {{0X951C088D, 0XBF625DA8} } }, +/**/ {{{0XF304715F, 0X3FD53FFF} }, +/**/ {{0X791F3900, 0X3FD4845A} }, +/**/ {{0XA45E0FD8, 0X3FECD28D} }, +/**/ {{0X8D61F221, 0XBFD13D47} }, +/**/ {{0XD3E9BB99, 0XBFC4DD98} }, +/**/ {{0X0F181507, 0X3FC8E33A} }, +/**/ {{0XD08BD25C, 0XBF743C33} } }, +/**/ {{{0XE88EA386, 0X3FD58002} }, +/**/ {{0XF575D6C0, 0X3FD4BDF0} }, +/**/ {{0X02035609, 0X3FECC140} }, +/**/ {{0XB808071E, 0XBFD15C4A} }, +/**/ {{0XB2945FCF, 0XBFC47A0E} }, +/**/ {{0XFC056447, 0X3FC8DF35} }, +/**/ {{0XB00A45CD, 0XBF7F2011} } }, +/**/ {{{0X70F4D590, 0X3FD5BFFD} }, +/**/ {{0X284D7AE0, 0X3FD4F75D} }, +/**/ {{0XF2DE98B6, 0X3FECAFD5} }, +/**/ {{0XA2B42F42, 0XBFD17AB4} }, +/**/ {{0X1C285A92, 0XBFC416A5} }, +/**/ {{0X511D6C5A, 0X3FC8D982} }, +/**/ {{0X77008605, 0XBF84ECC1} } }, +/**/ {{{0XB70D6E53, 0X3FD5FFFD} }, +/**/ {{0X8E2FF500, 0X3FD530AB} }, +/**/ {{0X32D2429D, 0X3FEC9E4C} }, +/**/ {{0X35190681, 0XBFD1988C} }, +/**/ {{0XBF748319, 0XBFC3B34C} }, +/**/ {{0X98D3A613, 0X3FC8D224} }, +/**/ {{0XAA295F9F, 0XBF8A33D4} } }, +/**/ {{{0X5C7399E2, 0X3FD63FFC} }, +/**/ {{0X4F022E80, 0X3FD569D5} }, +/**/ {{0X58DD180F, 0X3FEC8CA5} }, +/**/ {{0X1D701DE4, 0XBFD1B5CE} }, +/**/ {{0XA7806A5A, 0XBFC35017} }, +/**/ {{0X56C01CF9, 0X3FC8C924} }, +/**/ {{0X942059E1, 0XBF8F64D9} } }, +/**/ {{{0X9A1AC7D2, 0X3FD67FFD} }, +/**/ {{0XF50031E0, 0X3FD5A2DD} }, +/**/ {{0XCEFF6DEB, 0X3FEC7AE0} }, +/**/ {{0X7C8C245B, 0XBFD1D27C} }, +/**/ {{0XC6AA933F, 0XBFC2ED05} }, +/**/ {{0XDDC5CF1F, 0X3FC8BE87} }, +/**/ {{0XD594386F, 0XBF923FB6} } }, +/**/ {{{0X6F7B9353, 0X3FD6BFFD} }, +/**/ {{0XB4E066C0, 0X3FD5DBC1} }, +/**/ {{0X456B591A, 0X3FEC6900} }, +/**/ {{0XC2D6D0AA, 0XBFD1EE95} }, +/**/ {{0XB11086F7, 0XBFC28A23} }, +/**/ {{0XDDE22D5A, 0X3FC8B256} }, +/**/ {{0X489D85A4, 0XBF94C19A} } }, +/**/ {{{0XF02A83E4, 0X3FD6FFFB} }, +/**/ {{0X6A237DC0, 0X3FD61480} }, +/**/ {{0X4CC81773, 0X3FEC5704} }, +/**/ {{0X4B9029CA, 0XBFD20A1A} }, +/**/ {{0X89F5FB1C, 0XBFC22777} }, +/**/ {{0X9B09E911, 0X3FC8A498} }, +/**/ {{0X130D419A, 0XBF9737EC} } }, +/**/ {{{0X128C213A, 0X3FD73FFE} }, +/**/ {{0X42499480, 0X3FD64D1E} }, +/**/ {{0X129C0D30, 0X3FEC44EC} }, +/**/ {{0X83787259, 0XBFD2250C} }, +/**/ {{0XD55BE4FC, 0XBFC1C4FF} }, +/**/ {{0X36B2D603, 0X3FC89553} }, +/**/ {{0X2E43DF46, 0XBF99A284} } }, +/**/ {{{0XEA0CDC7A, 0X3FD77FFB} }, +/**/ {{0X05B0E220, 0X3FD68594} }, +/**/ {{0X687132C0, 0X3FEC32BA} }, +/**/ {{0X7273497E, 0XBFD23F69} }, +/**/ {{0XCD39B037, 0XBFC162CE} }, +/**/ {{0XFA930AAF, 0X3FC8848F} }, +/**/ {{0XA4554412, 0XBF9C013D} } }, +/**/ {{{0XF18EDAB8, 0X3FD7C003} }, +/**/ {{0X4127BEE0, 0X3FD6BDEE} }, +/**/ {{0XC01607BD, 0X3FEC206B} }, +/**/ {{0X5FEE2F42, 0XBFD25937} }, +/**/ {{0X307761E1, 0XBFC100D4} }, +/**/ {{0X5DFEC556, 0X3FC87252} }, +/**/ {{0X7958F973, 0XBF9E53F6} } }, +/**/ {{{0X41F35C4C, 0X3FD7FFFD} }, +/**/ {{0XDA6607A0, 0X3FD6F616} }, +/**/ {{0XCDDC8437, 0X3FEC0E07} }, +/**/ {{0XBFB4DAEA, 0XBFD2726C} }, +/**/ {{0XE0DB1472, 0XBFC09F3B} }, +/**/ {{0X2A95AA1B, 0X3FC85EA9} }, +/**/ {{0XD872CFA2, 0XBFA04D47} } }, +/**/ {{{0X26C7C46B, 0X3FD84003} }, +/**/ {{0X96B8BE00, 0X3FD72E25} }, +/**/ {{0X4CDEDF38, 0X3FEBFB87} }, +/**/ {{0XD09404F3, 0XBFD28B14} }, +/**/ {{0XE7FB61F2, 0XBFC03DE1} }, +/**/ {{0XACB33BE9, 0X3FC84993} }, +/**/ {{0X9B1DE607, 0XBFA16A76} } }, +/**/ {{{0XCA90B179, 0X3FD88003} }, +/**/ {{0XA104A220, 0X3FD7660A} }, +/**/ {{0XF236E2F6, 0X3FEBE8EF} }, +/**/ {{0X19A94DDF, 0XBFD2A329} }, +/**/ {{0X0856A081, 0XBFBFB9CE} }, +/**/ {{0X33F70280, 0X3FC8331F} }, +/**/ {{0XF01308CC, 0XBFA2817A} } }, +/**/ {{{0XE9692FD5, 0X3FD8C003} }, +/**/ {{0XF0B2CB00, 0X3FD79DC9} }, +/**/ {{0XF2966495, 0X3FEBD640} }, +/**/ {{0XFD6EC2EA, 0XBFD2BAAB} }, +/**/ {{0XE08E9C2D, 0XBFBEF892} }, +/**/ {{0X031873E3, 0X3FC81B52} }, +/**/ {{0XAC12113D, 0XBFA39249} } }, +/**/ {{{0X35BE5C5F, 0X3FD8FFFE} }, +/**/ {{0XBDCCDFC0, 0X3FD7D55E} }, +/**/ {{0X6EABCF77, 0X3FEBC37C} }, +/**/ {{0X2D74F445, 0XBFD2D19C} }, +/**/ {{0XE63F2CDB, 0XBFBE382C} }, +/**/ {{0X0E6FE2AE, 0X3FC80236} }, +/**/ {{0X0E66AB41, 0XBFA49CD9} } }, +/**/ {{{0XAA8974CD, 0X3FD94002} }, +/**/ {{0XB8AFD880, 0X3FD80CD6} }, +/**/ {{0X4468CCBA, 0X3FEBB09E} }, +/**/ {{0XEC84E686, 0XBFD2E7FF} }, +/**/ {{0X88C659E8, 0XBFBD7876} }, +/**/ {{0XC2F15460, 0X3FC7E7CC} }, +/**/ {{0XB410D3ED, 0XBFA5A120} } }, +/**/ {{{0XE08EFDEA, 0X3FD98002} }, +/**/ {{0X34856920, 0X3FD84425} }, +/**/ {{0X3F290478, 0X3FEB9DAB} }, +/**/ {{0XBB81EDEF, 0XBFD2FDD2} }, +/**/ {{0X31E68398, 0XBFBCB9A5} }, +/**/ {{0XC2DBB11B, 0X3FC7CC23} }, +/**/ {{0X98467E78, 0XBFA69F19} } }, +/**/ {{{0X75294B6B, 0X3FD9C002} }, +/**/ {{0X299F6200, 0X3FD87B4D} }, +/**/ {{0XDE96CF1F, 0X3FEB8AA2} }, +/**/ {{0X8C4D45D2, 0XBFD31316} }, +/**/ {{0XEDCE4DBA, 0XBFBBFBB7} }, +/**/ {{0X8907FEC9, 0X3FC7AF41} }, +/**/ {{0X07419F55, 0XBFA796BE} } }, +/**/ {{{0XF3E490EC, 0X3FDA0002} }, +/**/ {{0XC21A4500, 0X3FD8B24F} }, +/**/ {{0X3B5EF7DD, 0X3FEB7785} }, +/**/ {{0X8EAE70CD, 0XBFD327CC} }, +/**/ {{0XD49E40DA, 0XBFBB3EB3} }, +/**/ {{0X4D93F7EA, 0X3FC7912D} }, +/**/ {{0X9E21606A, 0XBFA88809} } }, +/**/ {{{0X458461B6, 0X3FDA3FFF} }, +/**/ {{0X7754D2C0, 0X3FD8E928} }, +/**/ {{0X6A0DAF0E, 0X3FEB6454} }, +/**/ {{0XDC2A9A3F, 0XBFD33BF3} }, +/**/ {{0X4917D003, 0XBFBA82B1} }, +/**/ {{0X7C7566CF, 0X3FC771F1} }, +/**/ {{0X3D700DD8, 0XBFA972F9} } }, +/**/ {{{0X87E12AAE, 0X3FDA8002} }, +/**/ {{0XA5DFD000, 0X3FD91FE0} }, +/**/ {{0XA0D82E05, 0X3FEB510D} }, +/**/ {{0XA76AD312, 0XBFD34F90} }, +/**/ {{0XDEEC35AD, 0XBFB9C798} }, +/**/ {{0X8A0EF43E, 0X3FC75190} }, +/**/ {{0X0872EFC8, 0XBFAA578B} } }, +/**/ {{{0X49A86C84, 0X3FDAC001} }, +/**/ {{0X5C4516E0, 0X3FD9566E} }, +/**/ {{0XDD03F6B6, 0X3FEB3DB4} }, +/**/ {{0X291C1F82, 0XBFD362A0} }, +/**/ {{0X03F6DF60, 0XBFB90D95} }, +/**/ {{0X25091E92, 0X3FC73018} }, +/**/ {{0X577A022B, 0XBFAB35BE} } }, +/**/ {{{0X2F4CC2E1, 0X3FDAFFFF} }, +/**/ {{0X94226540, 0X3FD98CD4} }, +/**/ {{0X9297200A, 0X3FEB2A49} }, +/**/ {{0X5153FD01, 0XBFD37524} }, +/**/ {{0XAE3DE27E, 0XBFB854A3} }, +/**/ {{0X7EB3F331, 0X3FC70D8E} }, +/**/ {{0XB6AD570E, 0XBFAC0D93} } }, +/**/ {{{0XC2F3711E, 0X3FDB4000} }, +/**/ {{0X01CDC4C0, 0X3FD9C317} }, +/**/ {{0XEA63781B, 0X3FEB16CA} }, +/**/ {{0X3665B649, 0XBFD3871F} }, +/**/ {{0X3F70FBC6, 0XBFB79CC0} }, +/**/ {{0X061DFC2E, 0X3FC6E9F9} }, +/**/ {{0XD837F9C3, 0XBFACDF0C} } }, +/**/ {{{0XA777E180, 0X3FDB8000} }, +/**/ {{0XF3748F20, 0X3FD9F930} }, +/**/ {{0X0FB0162A, 0X3FEB033B} }, +/**/ {{0X25978CAB, 0XBFD39890} }, +/**/ {{0X5C765AAB, 0XBFB6E602} }, +/**/ {{0X9C16D678, 0X3FC6C562} }, +/**/ {{0X92A16EBF, 0XBFADAA2C} } }, +/**/ {{{0X087E14ED, 0X3FDBBFFD} }, +/**/ {{0XBF0DDB00, 0X3FDA2F20} }, +/**/ {{0X1CCE6E94, 0X3FEAEF9B} }, +/**/ {{0X8B73E3C3, 0XBFD3A977} }, +/**/ {{0X09EFD1CC, 0XBFB63077} }, +/**/ {{0X58408D3A, 0X3FC69FD4} }, +/**/ {{0XD2E48013, 0XBFAE6EF6} } }, +/**/ {{{0XF0086783, 0X3FDC0000} }, +/**/ {{0X8D448080, 0X3FDA64EF} }, +/**/ {{0X35990B5A, 0X3FEADBE8} }, +/**/ {{0X27241B86, 0XBFD3B9D9} }, +/**/ {{0XC20E4001, 0XBFB57C06} }, +/**/ {{0X90E6C8AB, 0X3FC6794F} }, +/**/ {{0X9A630A27, 0XBFAF2D70} } }, +/**/ {{{0X863E58F8, 0X3FDC4001} }, +/**/ {{0X1C3A1BA0, 0X3FDA9A94} }, +/**/ {{0X35ED7DD2, 0X3FEAC826} }, +/**/ {{0X0C075B50, 0XBFD3C9B3} }, +/**/ {{0XA429793C, 0XBFB4C8D7} }, +/**/ {{0X95903C22, 0X3FC651E2} }, +/**/ {{0XF0F8B649, 0XBFAFE59F} } }, +/**/ {{{0X6C62C3BF, 0X3FDC7FFC} }, +/**/ {{0X580A5840, 0X3FDAD00C} }, +/**/ {{0X62D1D808, 0X3FEAB456} }, +/**/ {{0XACBB06EC, 0XBFD3D905} }, +/**/ {{0X421E42DC, 0XBFB416F7} }, +/**/ {{0XE5608EFD, 0X3FC62996} }, +/**/ {{0XF14B649A, 0XBFB04BC5} } }, +/**/ {{{0X34B2A209, 0X3FDCC002} }, +/**/ {{0XF68F3B40, 0X3FDB0565} }, +/**/ {{0X1E3DC946, 0X3FEAA074} }, +/**/ {{0XE2DB674E, 0XBFD3E7D5} }, +/**/ {{0XA4833FFE, 0XBFB3663E} }, +/**/ {{0XC4F0392B, 0X3FC60069} }, +/**/ {{0X38B10201, 0XBFB0A19E} } }, +/**/ {{{0XAAC5F9F9, 0X3FDCFFFC} }, +/**/ {{0X59C45CC0, 0X3FDB3A8E} }, +/**/ {{0XD2389C24, 0X3FEA8C86} }, +/**/ {{0X8362B2CB, 0XBFD3F61F} }, +/**/ {{0XC6C746A6, 0XBFB2B6F1} }, +/**/ {{0X426D2946, 0X3FC5D671} }, +/**/ {{0X4981CE75, 0XBFB0F45D} } }, +/**/ {{{0X0D800C64, 0X3FDD4004} }, +/**/ {{0X88AF6580, 0X3FDB6F99} }, +/**/ {{0X7498CED2, 0X3FEA7887} }, +/**/ {{0XEF8975C0, 0XBFD403E8} }, +/**/ {{0XBEA81E2B, 0XBFB208D4} }, +/**/ {{0X283FFA4E, 0X3FC5ABA5} }, +/**/ {{0X11705130, 0XBFB14408} } }, +/**/ {{{0XB0E64500, 0X3FDD7FFE} }, +/**/ {{0X2324E140, 0X3FDBA472} }, +/**/ {{0X8C5AD680, 0X3FEA647E} }, +/**/ {{0XA03F042D, 0XBFD4112D} }, +/**/ {{0X9580389C, 0XBFB15C33} }, +/**/ {{0X49D9889E, 0X3FC5801E} }, +/**/ {{0XEF96554F, 0XBFB190A3} } }, +/**/ {{{0X2DFCF4EB, 0X3FDDBFFE} }, +/**/ {{0X9F1D27A0, 0X3FDBD926} }, +/**/ {{0X1AC286CA, 0X3FEA5067} }, +/**/ {{0X590A4DE1, 0XBFD41DF2} }, +/**/ {{0X8BD1EFA5, 0XBFB0B0E4} }, +/**/ {{0X702506D0, 0X3FC553D8} }, +/**/ {{0XADA415A6, 0XBFB1DA36} } }, +/**/ {{{0X8A34BBC2, 0X3FDDFFFD} }, +/**/ {{0XC4F7A2C0, 0X3FDC0DB2} }, +/**/ {{0X2EF70BB3, 0X3FEA3C43} }, +/**/ {{0X16EE647C, 0XBFD42A37} }, +/**/ {{0XDB6270BB, 0XBFB006FA} }, +/**/ {{0X86F08DE6, 0X3FC526DE} }, +/**/ {{0X7E5061FB, 0XBFB220C6} } }, +/**/ {{{0XD26415C0, 0X3FDE3FFD} }, +/**/ {{0X58282940, 0X3FDC4217} }, +/**/ {{0XF391DDCB, 0X3FEA2812} }, +/**/ {{0X18EDDF0A, 0XBFD435FD} }, +/**/ {{0X88A589AF, 0XBFAEBCF2} }, +/**/ {{0X4CF96163, 0X3FC4F937} }, +/**/ {{0XF6A18481, 0XBFB26459} } }, +/**/ {{{0X37F72672, 0X3FDE7FFF} }, +/**/ {{0X67AA3DC0, 0X3FDC7654} }, +/**/ {{0XD6CE86B3, 0X3FEA13D6} }, +/**/ {{0X74037E91, 0XBFD44145} }, +/**/ {{0X3B2CC445, 0XBFAD6EC9} }, +/**/ {{0X0564F101, 0X3FC4CAEA} }, +/**/ {{0X0C49CD64, 0XBFB2A4F8} } }, +/**/ {{{0XA11BC00F, 0X3FDEBFFD} }, +/**/ {{0X85E23660, 0X3FDCAA66} }, +/**/ {{0XA25C2396, 0X3FE9FF90} }, +/**/ {{0X8A64724F, 0XBFD44C10} }, +/**/ {{0X2F871E82, 0XBFAC2399} }, +/**/ {{0X0AFBFB85, 0X3FC49C01} }, +/**/ {{0X0F0FF3FE, 0XBFB2E2A8} } }, +/**/ {{{0X3313756D, 0X3FDEFFFF} }, +/**/ {{0X9D30CC20, 0X3FDCDE52} }, +/**/ {{0XDFF9491F, 0X3FE9EB3E} }, +/**/ {{0X7E6ABAAE, 0XBFD45660} }, +/**/ {{0X3E8AA98D, 0XBFAADB4C} }, +/**/ {{0X25D8FF7D, 0X3FC46C7F} }, +/**/ {{0XA71D448D, 0XBFB31D71} } }, +/**/ {{{0X914B856E, 0X3FDF4001} }, +/**/ {{0XAAC1BB20, 0X3FDD1216} }, +/**/ {{0XC9BC4315, 0X3FE9D6E2} }, +/**/ {{0X004E7E91, 0XBFD46036} }, +/**/ {{0XFB901F89, 0XBFA995F7} }, +/**/ {{0X3F5BE04A, 0X3FC43C6D} }, +/**/ {{0XCE8ABF92, 0XBFB3555C} } }, +/**/ {{{0XCD144428, 0X3FDF8003} }, +/**/ {{0XD93E9640, 0X3FDD45B1} }, +/**/ {{0X256FDFEB, 0X3FE9C27D} }, +/**/ {{0X09F7C145, 0XBFD46992} }, +/**/ {{0XED521174, 0XBFA853A9} }, +/**/ {{0X2B27751F, 0X3FC40BD3} }, +/**/ {{0XCFA5C5F2, 0XBFB38A71} } }, +/**/ {{{0X00545BD9, 0X3FDFC002} }, +/**/ {{0XF536D960, 0X3FDD7920} }, +/**/ {{0XAAE99EA5, 0X3FE9AE0F} }, +/**/ {{0X38DD66F4, 0XBFD47275} }, +/**/ {{0XB5484F74, 0XBFA7147D} }, +/**/ {{0XF8EFC373, 0X3FC3DABA} }, +/**/ {{0X3EA6B864, 0XBFB3BCB9} } }, +/**/ {{{0XDA6F2AA8, 0X3FDFFFFB} }, +/**/ {{0XB420FAA0, 0X3FDDAC63} }, +/**/ {{0XED4D0CAB, 0X3FE9999A} }, +/**/ {{0XBFCC6072, 0XBFD47AE0} }, +/**/ {{0X25BF7A4A, 0XBFA5D87C} }, +/**/ {{0XF5999EE5, 0X3FC3A92B} }, +/**/ {{0XF7F09D08, 0XBFB3EC3B} } }, +/**/ {{{0XA65118C8, 0X3FE01FFF} }, +/**/ {{0X2BF70C00, 0X3FDDDF85} }, +/**/ {{0XECD72AE5, 0X3FE9851A} }, +/**/ {{0X8F5794C5, 0XBFD482D7} }, +/**/ {{0X2E4A020B, 0XBFA49F68} }, +/**/ {{0X25A156DA, 0X3FC37722} }, +/**/ {{0X19F58064, 0XBFB41903} } }, +/**/ {{{0X9C0B0556, 0X3FE04001} }, +/**/ {{0XFA2BA200, 0X3FDE127D} }, +/**/ {{0X08C17A55, 0X3FE97093} }, +/**/ {{0X957A7EFD, 0XBFD48A59} }, +/**/ {{0X2648F2BB, 0XBFA36976} }, +/**/ {{0X592569B1, 0X3FC344AB} }, +/**/ {{0X03752DDB, 0XBFB44318} } }, +/**/ {{{0XC24501DB, 0X3FE05FFF} }, +/**/ {{0XA495BCC0, 0X3FDE4547} }, +/**/ {{0X4F225B79, 0X3FE95C06} }, +/**/ {{0X2163F5B8, 0XBFD49167} }, +/**/ {{0X4B79B89F, 0XBFA236D3} }, +/**/ {{0XB530B7BE, 0X3FC311D4} }, +/**/ {{0X4D931476, 0XBFB46A84} } }, +/**/ {{{0X865125FC, 0X3FE07FFE} }, +/**/ {{0X2A5FAD60, 0X3FDE77E9} }, +/**/ {{0X5C13B0EA, 0X3FE94772} }, +/**/ {{0X6F33ABCA, 0XBFD49802} }, +/**/ {{0XDE947C6B, 0XBFA1075A} }, +/**/ {{0XD8D5E01B, 0X3FC2DE9D} }, +/**/ {{0XCA17CA60, 0XBFB48F51} } }, +/**/ {{{0X107EAC25, 0X3FE0A002} }, +/**/ {{0X08243180, 0X3FDEAA69} }, +/**/ {{0XF339824B, 0X3FE932D4} }, +/**/ {{0X7145F475, 0XBFD49E2D} }, +/**/ {{0X00571424, 0XBF9FB5D8} }, +/**/ {{0X85D1CF84, 0X3FC2AB06} }, +/**/ {{0X7DBBBABE, 0XBFB4B18A} } }, +/**/ {{{0X7376E5D4, 0X3FE0BFFF} }, +/**/ {{0XF79FF560, 0X3FDEDCB5} }, +/**/ {{0X8EE1B492, 0X3FE91E35} }, +/**/ {{0X49498453, 0XBFD4A3E7} }, +/**/ {{0XBE685C6F, 0XBF9D63E4} }, +/**/ {{0XC4B1F032, 0X3FC27726} }, +/**/ {{0X9E6ECC3A, 0XBFB4D138} } }, +/**/ {{{0X1715EE2E, 0X3FE0DFFE} }, +/**/ {{0X9BE1BB80, 0X3FDF0EDB} }, +/**/ {{0XD993BD60, 0X3FE9098F} }, +/**/ {{0X9B84E907, 0XBFD4A932} }, +/**/ {{0XE07DBA5E, 0XBF9B185A} }, +/**/ {{0XF2D7A804, 0X3FC242F8} }, +/**/ {{0X8DDAA340, 0XBFB4EE66} } }, +/**/ {{{0X7F3D776C, 0X3FE10001} }, +/**/ {{0X6119E100, 0X3FDF40DF} }, +/**/ {{0XFB44BCFB, 0X3FE8F4E1} }, +/**/ {{0X16E3467E, 0XBFD4AE11} }, +/**/ {{0XCF368422, 0XBF98D304} }, +/**/ {{0X736708AE, 0X3FC20E7D} }, +/**/ {{0XD7B3658D, 0XBFB5091E} } }, +/**/ {{{0XFD8C7B65, 0X3FE11FFE} }, +/**/ {{0X8FD21560, 0X3FDF72B0} }, +/**/ {{0X4770FB0A, 0X3FE8E033} }, +/**/ {{0X5C0F6783, 0XBFD4B282} }, +/**/ {{0X7FFE0364, 0XBF9694AC} }, +/**/ {{0XE529BF4C, 0X3FC1D9CB} }, +/**/ {{0X2C73E5F0, 0XBFB5216C} } }, +/**/ {{{0XAFA3EE71, 0X3FE14000} }, +/**/ {{0XE3324D60, 0X3FDFA45E} }, +/**/ {{0X9FF684DF, 0X3FE8CB7D} }, +/**/ {{0X17ADD34D, 0XBFD4B689} }, +/**/ {{0X67276E70, 0XBF945CA3} }, +/**/ {{0XA1FBF3B1, 0X3FC1A4D9} }, +/**/ {{0X5FBA2374, 0XBFB53759} } }, +/**/ {{{0X73336187, 0X3FE15FFF} }, +/**/ {{0X3DE48D00, 0X3FDFD5DF} }, +/**/ {{0X0CBE3546, 0X3FE8B6C6} }, +/**/ {{0X9B291BCB, 0XBFD4BA25} }, +/**/ {{0X5FB712CC, 0XBF922B6F} }, +/**/ {{0X55E28B0B, 0X3FC16FB8} }, +/**/ {{0X633F423C, 0XBFB54AF1} } }, +/**/ {{{0X6C447B82, 0X3FE17FFF} }, +/**/ {{0X0208ECC0, 0X3FE0039C} }, +/**/ {{0X48F15926, 0X3FE8A20A} }, +/**/ {{0XA5808AC3, 0XBFD4BD59} }, +/**/ {{0X5EEF6F2A, 0XBF9000CD} }, +/**/ {{0XEBE54AA7, 0X3FC13A66} }, +/**/ {{0X45420CE4, 0XBFB55C3F} } }, +/**/ {{{0XAE932B61, 0X3FE19FFF} }, +/**/ {{0XE0091BC0, 0X3FE01C33} }, +/**/ {{0X55664E00, 0X3FE88D4B} }, +/**/ {{0X579F5ABB, 0XBFD4C026} }, +/**/ {{0X8797C32A, 0XBF8BB9A6} }, +/**/ {{0X95D4F64E, 0X3FC104EC} }, +/**/ {{0X2BBC325E, 0XBFB56B4E} } }, +/**/ {{{0XBA12AE50, 0X3FE1BFFF} }, +/**/ {{0XD3ABA020, 0X3FE034B6} }, +/**/ {{0XEBDCCF04, 0X3FE87889} }, +/**/ {{0XE6D463C1, 0XBFD4C28C} }, +/**/ {{0XB36211FC, 0XBF877F1C} }, +/**/ {{0XB90B11E7, 0X3FC0CF4F} }, +/**/ {{0X52DCBE1A, 0XBFB57829} } }, +/**/ {{{0X4B459E41, 0X3FE1E001} }, +/**/ {{0X2DC05800, 0X3FE04D26} }, +/**/ {{0X51625B6A, 0X3FE863C5} }, +/**/ {{0XAFFDD399, 0XBFD4C48E} }, +/**/ {{0X603059CA, 0XBF8351CB} }, +/**/ {{0XDE65D0D9, 0X3FC09992} }, +/**/ {{0X087BB367, 0XBFB582DC} } }, +/**/ {{{0X32306F33, 0X3FE20000} }, +/**/ {{0XBAFB6CE0, 0X3FE0657E} }, +/**/ {{0XA1E2EEC3, 0X3FE84F00} }, +/**/ {{0XB79EC8C6, 0XBFD4C62C} }, +/**/ {{0XD95DE8D1, 0XBF7E6488} }, +/**/ {{0X661DF241, 0X3FC063C2} }, +/**/ {{0XAAA63BAD, 0XBFB58B71} } }, +/**/ {{{0XD30A486C, 0X3FE22000} }, +/**/ {{0XD2165080, 0X3FE07DC3} }, +/**/ {{0X66B3E5BF, 0X3FE83A39} }, +/**/ {{0X7DE04DEE, 0XBFD4C768} }, +/**/ {{0X800F052F, 0XBF763FF7} }, +/**/ {{0X28F35EDD, 0X3FC02DDC} }, +/**/ {{0XA351CF91, 0XBFB591F5} } }, +/**/ {{{0X215E03FC, 0X3FE23FFE} }, +/**/ {{0X9F380A00, 0X3FE095F1} }, +/**/ {{0X48BE5F3F, 0X3FE82573} }, +/**/ {{0X1B793F77, 0XBFD4C843} }, +/**/ {{0X625993B8, 0XBF6C6E63} }, +/**/ {{0X8C5E4B3B, 0X3FBFEFDB} }, +/**/ {{0X66FE9CA7, 0XBFB59673} } }, +/**/ {{{0X6833D65D, 0X3FE26000} }, +/**/ {{0X6496A8C0, 0X3FE0AE0E} }, +/**/ {{0X45B44AA3, 0X3FE810A9} }, +/**/ {{0X055B407A, 0XBFD4C8BE} }, +/**/ {{0XAE83F0A4, 0XBF5920A7} }, +/**/ {{0X860A6A5E, 0X3FBF83DC} }, +/**/ {{0X70D98EE7, 0XBFB598F6} } }, +/**/ {{{0XE82D4D50, 0X3FE28000} }, +/**/ {{0X095F5300, 0X3FE0C615} }, +/**/ {{0X1E9337B7, 0X3FE7FBE0} }, +/**/ {{0X573C6F6A, 0XBFD4C8DA} }, +/**/ {{0XC50F565D, 0X3F38B6C7} }, +/**/ {{0XC9C4B6CA, 0X3FBF17DB} }, +/**/ {{0X45D6DAE0, 0XBFB5998A} } }, +/**/ {{{0X203B6A0B, 0X3FE29FFF} }, +/**/ {{0X30852720, 0X3FE0DE05} }, +/**/ {{0X8520538D, 0X3FE7E718} }, +/**/ {{0X668C6963, 0XBFD4C899} }, +/**/ {{0XBECA8AB0, 0X3F6286EC} }, +/**/ {{0X9B6AC5BD, 0X3FBEABE4} }, +/**/ {{0X575A9684, 0XBFB5983A} } }, +/**/ {{{0XE91A9D93, 0X3FE2C001} }, +/**/ {{0XF7817A20, 0X3FE0F5E3} }, +/**/ {{0X63A45D97, 0X3FE7D24E} }, +/**/ {{0X5F83C46D, 0XBFD4C7FC} }, +/**/ {{0X5D9C800A, 0X3F70E199} }, +/**/ {{0X3721A8E0, 0X3FBE3FE9} }, +/**/ {{0X377DA840, 0XBFB59512} } }, +/**/ {{{0XC6FB4948, 0X3FE2DFFF} }, +/**/ {{0X4CE36040, 0X3FE10DAA} }, +/**/ {{0X3E39011F, 0X3FE7BD88} }, +/**/ {{0XB5EAE11F, 0XBFD4C704} }, +/**/ {{0X192C622B, 0X3F786398} }, +/**/ {{0XB62BA357, 0X3FBDD412} }, +/**/ {{0X5F0E020E, 0XBFB5901D} } }, +/**/ {{{0X39CB4EED, 0X3FE2FFFF} }, +/**/ {{0X0970AD60, 0X3FE1255D} }, +/**/ {{0X365B7A9B, 0X3FE7A8C2} }, +/**/ {{0X8925F532, 0XBFD4C5B3} }, +/**/ {{0X785E3070, 0X3F7FCB03} }, +/**/ {{0X0EEDF3B3, 0X3FBD6854} }, +/**/ {{0X479C252A, 0XBFB58967} } }, +/**/ {{{0X002E31CB, 0X3FE31FFE} }, +/**/ {{0X81FD3780, 0X3FE13CFA} }, +/**/ {{0X1BBE9667, 0X3FE793FE} }, +/**/ {{0X3046F4C7, 0XBFD4C40A} }, +/**/ {{0X8F5E6BF1, 0X3F838BAE} }, +/**/ {{0X83775C98, 0X3FBCFCBD} }, +/**/ {{0X62E887AB, 0XBFB580FB} } }, +/**/ {{{0XEDC7BFFD, 0X3FE34000} }, +/**/ {{0X44D05200, 0X3FE15486} }, +/**/ {{0X244A1DA5, 0X3FE77F39} }, +/**/ {{0X9FB764C1, 0XBFD4C209} }, +/**/ {{0X851B0BE5, 0X3F8724E2} }, +/**/ {{0X507C76E0, 0X3FBC9147} }, +/**/ {{0X19C7F0AB, 0XBFB576E5} } }, +/**/ {{{0XCE042830, 0X3FE36001} }, +/**/ {{0XC1656AE0, 0X3FE16BFB} }, +/**/ {{0XAD3B2B77, 0X3FE76A77} }, +/**/ {{0X74AAC296, 0XBFD4BFB3} }, +/**/ {{0X05B229C2, 0X3F8AB070} }, +/**/ {{0X87DCA54B, 0X3FBC260E} }, +/**/ {{0XC90DF763, 0XBFB56B2F} } }, +/**/ {{{0X89B8FC54, 0X3FE37FFE} }, +/**/ {{0X77D0BA80, 0X3FE18359} }, +/**/ {{0X660CAA3D, 0X3FE755BB} }, +/**/ {{0X308BB975, 0XBFD4BD09} }, +/**/ {{0XFE0A1240, 0X3F8E2E26} }, +/**/ {{0X18790F26, 0X3FBBBB22} }, +/**/ {{0XC094F3DA, 0XBFB55DE6} } }, +/**/ {{{0X9B4DA842, 0X3FE3A001} }, +/**/ {{0X100CD140, 0X3FE19AA7} }, +/**/ {{0XD801F889, 0X3FE740FD} }, +/**/ {{0X2C32C656, 0XBFD4BA0B} }, +/**/ {{0X8ECA44A2, 0X3F90CF99} }, +/**/ {{0XC9863443, 0X3FBB5066} }, +/**/ {{0X406672B5, 0XBFB54F15} } }, +/**/ {{{0XCE6B63E8, 0X3FE3C000} }, +/**/ {{0X1D0B0AE0, 0X3FE1B1DD} }, +/**/ {{0XF28670E6, 0X3FE72C45} }, +/**/ {{0X92422E2E, 0XBFD4B6BB} }, +/**/ {{0XA0D32146, 0X3F928141} }, +/**/ {{0X37452321, 0X3FBAE606} }, +/**/ {{0X77D91F56, 0XBFB53EC6} } }, +/**/ {{{0X114A2607, 0X3FE3DFFF} }, +/**/ {{0XC6FF6F20, 0X3FE1C8FD} }, +/**/ {{0X206847A7, 0X3FE71792} }, +/**/ {{0X669BD306, 0XBFD4B31B} }, +/**/ {{0X04FFD28A, 0X3F942C3A} }, +/**/ {{0XE7FC0825, 0X3FBA7BFD} }, +/**/ {{0X82F471BA, 0XBFB52D05} } }, +/**/ {{{0XC1DA9B7D, 0X3FE3FFFF} }, +/**/ {{0X7F2E8840, 0X3FE1E00B} }, +/**/ {{0X84371133, 0X3FE702E0} }, +/**/ {{0X8012FBE4, 0XBFD4AF2B} }, +/**/ {{0XBFC47F4B, 0X3F95D0B4} }, +/**/ {{0XD80AB6C5, 0X3FBA1249} }, +/**/ {{0X69A4108D, 0XBFB519DD} } }, +/**/ {{{0XE11D9C33, 0X3FE41FFE} }, +/**/ {{0X67C3EC20, 0X3FE1F703} }, +/**/ {{0X026A76A0, 0X3FE6EE34} }, +/**/ {{0X96514B12, 0XBFD4AAED} }, +/**/ {{0X07BA2905, 0X3F976E83} }, +/**/ {{0X261A1221, 0X3FB9A8FE} }, +/**/ {{0X1D552BA0, 0XBFB50559} } }, +/**/ {{{0XFA174676, 0X3FE43FFF} }, +/**/ {{0X0FAFF860, 0X3FE20DE8} }, +/**/ {{0X9EA6D162, 0X3FE6D98A} }, +/**/ {{0X6B927B3B, 0XBFD4A662} }, +/**/ {{0XF84ADBB0, 0X3F9905D8} }, +/**/ {{0XDD484DB5, 0X3FB94015} }, +/**/ {{0X783EEF44, 0XBFB4EF83} } }, +/**/ {{{0X0D457FA4, 0X3FE45FFF} }, +/**/ {{0X9F675300, 0X3FE224B6} }, +/**/ {{0X3A093351, 0X3FE6C4E7} }, +/**/ {{0XCBF2BFF8, 0XBFD4A18B} }, +/**/ {{0X84BB8C16, 0X3F9A968A} }, +/**/ {{0X93FBB975, 0X3FB8D7A4} }, +/**/ {{0X3B37E4FB, 0XBFB4D867} } }, +/**/ {{{0X8F910E57, 0X3FE47FFE} }, +/**/ {{0XDD92B840, 0X3FE23B70} }, +/**/ {{0X89B04359, 0X3FE6B048} }, +/**/ {{0X974B07FF, 0XBFD49C6A} }, +/**/ {{0X25F20251, 0X3F9C20BE} }, +/**/ {{0X82E9673D, 0X3FB86FA8} }, +/**/ {{0X0D12F550, 0XBFB4C00F} } }, +/**/ {{{0X7323FC6B, 0X3FE4A001} }, +/**/ {{0XE34E3420, 0X3FE25218} }, +/**/ {{0XF277FE27, 0X3FE69BAC} }, +/**/ {{0X7F856ABA, 0XBFD496FF} }, +/**/ {{0X9928150C, 0X3F9DA49E} }, +/**/ {{0X3EB66A26, 0X3FB8081E} }, +/**/ {{0X78AB06C5, 0XBFB4A685} } }, +/**/ {{{0XB1BF0500, 0X3FE4C000} }, +/**/ {{0XBD8B2C80, 0X3FE268A9} }, +/**/ {{0X42ABBD42, 0X3FE68719} }, +/**/ {{0XEC74E64A, 0XBFD4914C} }, +/**/ {{0XD0C3EEEC, 0X3F9F21DE} }, +/**/ {{0X5B30AA05, 0X3FB7A122} }, +/**/ {{0XEC53EF43, 0XBFB48BD4} } }, +/**/ {{{0X1D07207B, 0X3FE4E001} }, +/**/ {{0XDA64F7A0, 0X3FE27F26} }, +/**/ {{0XA7CFBEB2, 0X3FE6728A} }, +/**/ {{0X3FCBB247, 0XBFD48B53} }, +/**/ {{0XA7354A41, 0X3FA04C60} }, +/**/ {{0XEFF6F27A, 0X3FB73AAA} }, +/**/ {{0XB81A6BB2, 0XBFB47007} } }, +/**/ {{{0X5F36EB46, 0X3FE4FFFE} }, +/**/ {{0X35DDD180, 0X3FE2958D} }, +/**/ {{0X307B6AF3, 0X3FE65E04} }, +/**/ {{0X828BB6E6, 0XBFD48514} }, +/**/ {{0X48993ED9, 0X3FA1048E} }, +/**/ {{0X468D7C59, 0X3FB6D4CB} }, +/**/ {{0X0D484989, 0XBFB45328} } }, +/**/ {{{0X2AFDF759, 0X3FE52001} }, +/**/ {{0XEB1C3280, 0X3FE2ABE2} }, +/**/ {{0X8DC5DAAD, 0X3FE64980} }, +/**/ {{0X2C11E3B7, 0XBFD47E90} }, +/**/ {{0X88E1B343, 0X3FA1B9AE} }, +/**/ {{0XFF4501BF, 0X3FB66F6C} }, +/**/ {{0XFCD6B8DE, 0XBFB4353F} } }, +/**/ {{{0XDFDB2423, 0X3FE54001} }, +/**/ {{0XAB0402C0, 0X3FE2C222} }, +/**/ {{0XE7E657FB, 0X3FE63504} }, +/**/ {{0XEEE53FA9, 0XBFD477C8} }, +/**/ {{0X696CD845, 0X3FA26B9A} }, +/**/ {{0X6A3AA6EF, 0X3FB60AAD} }, +/**/ {{0X7704E1F4, 0XBFB41659} } }, +/**/ {{{0X72D2A74F, 0X3FE55FFE} }, +/**/ {{0X16BE7240, 0X3FE2D84B} }, +/**/ {{0XCE54AEDE, 0X3FE62092} }, +/**/ {{0X7B764156, 0XBFD470C0} }, +/**/ {{0X4D9ABEE7, 0X3FA31A4C} }, +/**/ {{0XA899A63D, 0X3FB5A697} }, +/**/ {{0X49FA7FB1, 0XBFB3F67E} } }, +/**/ {{{0XEE716C33, 0X3FE58000} }, +/**/ {{0X284F3FE0, 0X3FE2EE63} }, +/**/ {{0X181C5720, 0X3FE60C24} }, +/**/ {{0XC383B0C1, 0XBFD46975} }, +/**/ {{0XC40A1A5A, 0X3FA3C5FF} }, +/**/ {{0X0B7B3B72, 0X3FB54311} }, +/**/ {{0X21700401, 0XBFB3D5B8} } }, +/**/ {{{0X9825CD2A, 0X3FE59FFF} }, +/**/ {{0X2DEFCF40, 0X3FE30464} }, +/**/ {{0X3C14A317, 0X3FE5F7BF} }, +/**/ {{0X227A4CDE, 0XBFD461EC} }, +/**/ {{0X6DA8D837, 0X3FA46E85} }, +/**/ {{0X6162F4C8, 0X3FB4E03C} }, +/**/ {{0X857F5976, 0XBFB3B410} } }, +/**/ {{{0XFE2A42CD, 0X3FE5BFFD} }, +/**/ {{0XA5110DC0, 0X3FE31A50} }, +/**/ {{0X33CF1268, 0X3FE5E362} }, +/**/ {{0XF68B7DBC, 0XBFD45A23} }, +/**/ {{0XDE40F0E9, 0X3FA513F5} }, +/**/ {{0XDE05901E, 0X3FB47E12} }, +/**/ {{0XDA5CABB5, 0XBFB39190} } }, +/**/ {{{0X57330799, 0X3FE5E000} }, +/**/ {{0X75253480, 0X3FE3302B} }, +/**/ {{0X901DA45A, 0X3FE5CF0A} }, +/**/ {{0X552754CF, 0XBFD4521D} }, +/**/ {{0XBBF000BB, 0X3FA5B66B} }, +/**/ {{0XD2BAF7B2, 0X3FB41C8B} }, +/**/ {{0X5F53241A, 0XBFB36E42} } }, +/**/ {{{0X4D6055DA, 0X3FE60001} }, +/**/ {{0XFF2EDA60, 0X3FE345F0} }, +/**/ {{0XF2EA5900, 0X3FE5BABB} }, +/**/ {{0XB2008754, 0XBFD449DA} }, +/**/ {{0X18F56FBB, 0X3FA655D1} }, +/**/ {{0X89A0C1B2, 0X3FB3BBBB} }, +/**/ {{0X2E8D60FC, 0XBFB34A2E} } }, +/**/ {{{0X2C3809CB, 0X3FE62001} }, +/**/ {{0X812D5040, 0X3FE35BA1} }, +/**/ {{0X671E49E9, 0X3FE5A676} }, +/**/ {{0X230E6216, 0XBFD4415D} }, +/**/ {{0X6B05C7F7, 0X3FA6F22D} }, +/**/ {{0XCFE6B72B, 0X3FB35BA4} }, +/**/ {{0X3C3BFA3B, 0XBFB3255D} } }, +/**/ {{{0X87B47ECC, 0X3FE64000} }, +/**/ {{0X69715580, 0X3FE3713D} }, +/**/ {{0XC8FB0E69, 0X3FE59239} }, +/**/ {{0XA5BD1F6E, 0XBFD438A5} }, +/**/ {{0X7F9B13CF, 0X3FA78B89} }, +/**/ {{0X74F57C8F, 0X3FB2FC49} }, +/**/ {{0X566CAACA, 0XBFB2FFD8} } }, +/**/ {{{0XA746397F, 0X3FE66000} }, +/**/ {{0X9D968940, 0X3FE386C5} }, +/**/ {{0X83073C58, 0X3FE57E05} }, +/**/ {{0XFE3D0083, 0XBFD42FB4} }, +/**/ {{0X4B9E1EEB, 0X3FA821F1} }, +/**/ {{0X1952EE82, 0X3FB29DA9} }, +/**/ {{0X245866A8, 0XBFB2D9A8} } }, +/**/ {{{0XE4E3094B, 0X3FE68000} }, +/**/ {{0XB5FE3900, 0X3FE39C39} }, +/**/ {{0X36DD131E, 0X3FE569DA} }, +/**/ {{0X74778FE0, 0XBFD4268C} }, +/**/ {{0X9AB0310F, 0X3FA8B567} }, +/**/ {{0XF2E43205, 0X3FB23FC8} }, +/**/ {{0X26483573, 0XBFB2B2D5} } }, +/**/ {{{0XE2E37787, 0X3FE6A001} }, +/**/ {{0X27D52620, 0X3FE3B19A} }, +/**/ {{0XB5D865CD, 0X3FE555B7} }, +/**/ {{0XF1600CD3, 0XBFD41D2C} }, +/**/ {{0X4B79E859, 0X3FA945F5} }, +/**/ {{0X46A0B02D, 0X3FB1E2AA} }, +/**/ {{0XB508A35B, 0XBFB28B67} } }, +/**/ {{{0X0DF4BBFB, 0X3FE6BFFE} }, +/**/ {{0X46F2B6E0, 0X3FE3C6E3} }, +/**/ {{0XB658AFBE, 0X3FE541A1} }, +/**/ {{0X388DA137, 0XBFD41399} }, +/**/ {{0XE5B3C2BA, 0X3FA9D387} }, +/**/ {{0X173397F9, 0X3FB18660} }, +/**/ {{0X01DB4945, 0XBFB26368} } }, +/**/ {{{0XEA406CEA, 0X3FE6DFFF} }, +/**/ {{0X1BB3D400, 0X3FE3DC1C} }, +/**/ {{0XD33FFE8E, 0X3FE52D91} }, +/**/ {{0X36BCFFE9, 0XBFD409CF} }, +/**/ {{0X174405AF, 0X3FAA5E54} }, +/**/ {{0XDC041806, 0X3FB12ACE} }, +/**/ {{0X160D6557, 0XBFB23ADE} } }, +/**/ {{{0XED01EA65, 0X3FE70000} }, +/**/ {{0X54E51400, 0X3FE3F140} }, +/**/ {{0X5C8B9119, 0X3FE5198C} }, +/**/ {{0XF2EA4FF7, 0XBFD3FFD1} }, +/**/ {{0X308C81CD, 0X3FAAE643} }, +/**/ {{0X1960AAF7, 0X3FB0D00C} }, +/**/ {{0XD2F50D25, 0XBFB211D1} } }, +/**/ {{{0X00D515EB, 0X3FE72002} }, +/**/ {{0X983BB3E0, 0X3FE40650} }, +/**/ {{0XF2175C71, 0X3FE50590} }, +/**/ {{0X361BB15C, 0XBFD3F5A2} }, +/**/ {{0X9B536AFC, 0X3FAB6B5F} }, +/**/ {{0XA731624D, 0X3FB07617} }, +/**/ {{0XF1A8C054, 0XBFB1E84A} } }, +/**/ {{{0X1323DE6D, 0X3FE74001} }, +/**/ {{0X9483E720, 0X3FE41B4B} }, +/**/ {{0X1027BA01, 0X3FE4F1A1} }, +/**/ {{0XBB978C8F, 0XBFD3EB41} }, +/**/ {{0X7765626A, 0X3FABEDA7} }, +/**/ {{0X97F58C8A, 0X3FB01CF9} }, +/**/ {{0X03074348, 0XBFB1BE51} } }, +/**/ {{{0X25CAB4CA, 0X3FE75FFF} }, +/**/ {{0X0001D5C0, 0X3FE43032} }, +/**/ {{0X4573FB6C, 0X3FE4DDBC} }, +/**/ {{0X41F21D2A, 0XBFD3E0B1} }, +/**/ {{0XD1BDA00F, 0X3FAC6D25} }, +/**/ {{0X5935EE68, 0X3FAF8962} }, +/**/ {{0X6F8E0689, 0XBFB193EB} } }, +/**/ {{{0X90921F76, 0X3FE77FFE} }, +/**/ {{0X6CC6AF00, 0X3FE44505} }, +/**/ {{0X4CFFBDAE, 0X3FE4C9E1} }, +/**/ {{0X0B247EC4, 0XBFD3D5F1} }, +/**/ {{0X943F4516, 0X3FACE9EA} }, +/**/ {{0XF24A8AF1, 0X3FAEDA73} }, +/**/ {{0X776AAC42, 0XBFB16921} } }, +/**/ {{{0X47B2F83B, 0X3FE79FFE} }, +/**/ {{0X35C19F20, 0X3FE459C5} }, +/**/ {{0XFC8F20BD, 0X3FE4B610} }, +/**/ {{0X73DF2A0D, 0XBFD3CB02} }, +/**/ {{0X23C5D6DE, 0X3FAD63F8} }, +/**/ {{0X9C5116AB, 0X3FAE2D31} }, +/**/ {{0X326E2972, 0XBFB13DFA} } }, +/**/ {{{0X2F1E79A9, 0X3FE7BFFF} }, +/**/ {{0XF84DF5C0, 0X3FE46E71} }, +/**/ {{0XF586B1BD, 0X3FE4A24A} }, +/**/ {{0X2EF81E5B, 0XBFD3BFE6} }, +/**/ {{0X738896F0, 0X3FADDB58} }, +/**/ {{0X2515DE78, 0X3FAD819A} }, +/**/ {{0X9026FDD0, 0XBFB1127C} } }, +/**/ {{{0X973C8D05, 0X3FE7E001} }, +/**/ {{0XF0FB9580, 0X3FE4830B} }, +/**/ {{0X3466B08E, 0X3FE48E8F} }, +/**/ {{0X1C53A01A, 0XBFD3B49D} }, +/**/ {{0X25103EED, 0X3FAE5013} }, +/**/ {{0X5290F4AF, 0X3FACD7AF} }, +/**/ {{0X57EF003B, 0XBFB0E6AF} } }, +/**/ {{{0X69EFC092, 0X3FE7FFFF} }, +/**/ {{0X431C3800, 0X3FE4978F} }, +/**/ {{0XA3E1064A, 0X3FE47AE1} }, +/**/ {{0X666C50C4, 0XBFD3A92A} }, +/**/ {{0X4098A4BE, 0X3FAEC219} }, +/**/ {{0X2EEE57E0, 0X3FAC2F94} }, +/**/ {{0X290D5730, 0XBFB0BA99} } }, +/**/ {{{0XC52B5232, 0X3FE82001} }, +/**/ {{0XD2B83340, 0X3FE4AC01} }, +/**/ {{0XD31B7CF5, 0X3FE4673C} }, +/**/ {{0XC67D05F0, 0XBFD39D8B} }, +/**/ {{0X2A81B5D5, 0X3FAF3192} }, +/**/ {{0X8AA20E90, 0X3FAB891B} }, +/**/ {{0X7ADCEFD6, 0XBFB08E40} } }, +/**/ {{{0XBD4D4E3F, 0X3FE84000} }, +/**/ {{0X9B1DBC60, 0X3FE4C05E} }, +/**/ {{0XC8D629F7, 0X3FE453A5} }, +/**/ {{0X13E9EF47, 0XBFD391C5} }, +/**/ {{0X17383D6B, 0X3FAF9E69} }, +/**/ {{0X278E21B9, 0X3FAAE471} }, +/**/ {{0X9CF54D10, 0XBFB061AB} } }, +/**/ {{{0X8C869CBD, 0X3FE86001} }, +/**/ {{0XFD2285A0, 0X3FE4D4A8} }, +/**/ {{0X79B82471, 0X3FE44019} }, +/**/ {{0X5C3E2929, 0XBFD385D5} }, +/**/ {{0X7B2C8FF2, 0X3FB0045B} }, +/**/ {{0X39D7CA4F, 0X3FAA417C} }, +/**/ {{0XB767B7D4, 0XBFB034E0} } }, +/**/ {{{0XB5DB3710, 0X3FE87FFE} }, +/**/ {{0X8B93BCA0, 0X3FE4E8DD} }, +/**/ {{0X66C6E6BF, 0X3FE42C9B} }, +/**/ {{0XA32EE2A1, 0XBFD379BF} }, +/**/ {{0X6187FE0F, 0X3FB03838} }, +/**/ {{0X8B3A0B33, 0X3FA9A05A} }, +/**/ {{0XCAEE03A9, 0XBFB007E5} } }, +/**/ {{{0X863C77E3, 0X3FE8A000} }, +/**/ {{0X8FCD1E80, 0X3FE4FD01} }, +/**/ {{0XA8A8093F, 0X3FE41926} }, +/**/ {{0XB5EE344D, 0XBFD36D81} }, +/**/ {{0X2841F292, 0X3FB06ADC} }, +/**/ {{0X2484560B, 0X3FA900E4} }, +/**/ {{0X62792F0A, 0XBFAFB581} } }, +/**/ {{{0X0ED982AF, 0X3FE8BFFF} }, +/**/ {{0X16E28AC0, 0X3FE51110} }, +/**/ {{0X389112EE, 0X3FE405C0} }, +/**/ {{0X89D38DC7, 0XBFD3611F} }, +/**/ {{0XB450B9F7, 0X3FB09C3D} }, +/**/ {{0X312D0C4A, 0X3FA86342} }, +/**/ {{0X3A6CA012, 0XBFAF5AEE} } }, +/**/ {{{0X02C3AEAE, 0X3FE8E000} }, +/**/ {{0XC0AB0A40, 0X3FE5250C} }, +/**/ {{0XC65593C5, 0X3FE3F264} }, +/**/ {{0XD82BE900, 0XBFD35497} }, +/**/ {{0X68546D39, 0X3FB0CC69} }, +/**/ {{0XDB8499FD, 0X3FA7C759} }, +/**/ {{0X36A32337, 0XBFAF001D} } }, +/**/ {{{0XECBFA97B, 0X3FE90000} }, +/**/ {{0X0E8D4EE0, 0X3FE538F6} }, +/**/ {{0XF4119333, 0X3FE3DF15} }, +/**/ {{0X7D2149F4, 0XBFD347EC} }, +/**/ {{0XFA921D3C, 0X3FB0FB5E} }, +/**/ {{0X69693E89, 0X3FA72D38} }, +/**/ {{0X23A0F5F3, 0XBFAEA519} } }, +/**/ {{{0XD251C01C, 0X3FE91FFF} }, +/**/ {{0XD3F3BD20, 0X3FE54CCA} }, +/**/ {{0X1554DD15, 0X3FE3CBD5} }, +/**/ {{0X2BC94245, 0XBFD33B1F} }, +/**/ {{0X2FC4C3F6, 0X3FB1291F} }, +/**/ {{0X1B7A765C, 0X3FA694E8} }, +/**/ {{0X826E86F6, 0XBFAE49EC} } }, +/**/ {{{0XD90AF4E6, 0X3FE94001} }, +/**/ {{0X4D4EC640, 0X3FE5608E} }, +/**/ {{0X3445EF72, 0X3FE3B89F} }, +/**/ {{0XB7BBD79A, 0XBFD32E2E} }, +/**/ {{0XE401D071, 0X3FB155B4} }, +/**/ {{0X3A256F1C, 0X3FA5FE51} }, +/**/ {{0X890FF662, 0XBFADEEA1} } }, +/**/ {{{0X04FD6C17, 0X3FE96001} }, +/**/ {{0XD5673C20, 0X3FE5743C} }, +/**/ {{0X09EBC6E2, 0X3FE3A578} }, +/**/ {{0X6DA5039C, 0XBFD3211E} }, +/**/ {{0X4E62286B, 0X3FB1811B} }, +/**/ {{0X71BECE9D, 0X3FA56990} }, +/**/ {{0X23911641, 0XBFAD9342} } }, +/**/ {{{0X2D214B82, 0X3FE98000} }, +/**/ {{0X3B0D6120, 0X3FE587D8} }, +/**/ {{0X01EAAC3E, 0X3FE3925E} }, +/**/ {{0X08425504, 0XBFD313EE} }, +/**/ {{0X02BDB571, 0X3FB1AB5A} }, +/**/ {{0X9EBD70B8, 0X3FA4D698} }, +/**/ {{0XF482965A, 0XBFAD37D7} } }, +/**/ {{{0XEB980651, 0X3FE99FFD} }, +/**/ {{0XB16BA7A0, 0X3FE59B5F} }, +/**/ {{0X10B1AB7A, 0X3FE37F52} }, +/**/ {{0XF993D676, 0XBFD3069E} }, +/**/ {{0XCDED25A8, 0X3FB1D472} }, +/**/ {{0X2D0ABD9A, 0X3FA44570} }, +/**/ {{0X56221AA1, 0XBFACDC6C} } }, +/**/ {{{0XE5504053, 0X3FE9BFFF} }, +/**/ {{0XB55DE6A0, 0X3FE5AED6} }, +/**/ {{0XFA91C51E, 0X3FE36C50} }, +/**/ {{0XBE311E56, 0XBFD2F92F} }, +/**/ {{0X5BE3AF05, 0X3FB1FC70} }, +/**/ {{0XACD5CDC7, 0X3FA3B5FD} }, +/**/ {{0X5ADBB9B8, 0XBFAC8108} } }, +/**/ {{{0X6E60A234, 0X3FE9E001} }, +/**/ {{0X79ACD480, 0X3FE5C23A} }, +/**/ {{0XA5FAB2EA, 0X3FE3595D} }, +/**/ {{0X1DDECEEA, 0XBFD2EBA3} }, +/**/ {{0X35736518, 0X3FB22350} }, +/**/ {{0X22F9FD28, 0X3FA32856} }, +/**/ {{0XCE8B2259, 0XBFAC25B4} } }, +/**/ {{{0XB685741B, 0X3FE9FFFF} }, +/**/ {{0X5AD40460, 0X3FE5D589} }, +/**/ {{0XD832B8D3, 0X3FE34679} }, +/**/ {{0X230EDA41, 0XBFD2DDFB} }, +/**/ {{0XB23C0BA2, 0X3FB24912} }, +/**/ {{0X4C4E86DA, 0X3FA29C85} }, +/**/ {{0X37002A55, 0XBFABCA7A} } }, +/**/ {{{0X9D59B943, 0X3FEA2001} }, +/**/ {{0X8C187EA0, 0X3FE5E8C7} }, +/**/ {{0X9EDE2183, 0X3FE333A1} }, +/**/ {{0XB0043779, 0XBFD2D035} }, +/**/ {{0X7AB9110C, 0X3FB26DC3} }, +/**/ {{0X959CFC0E, 0X3FA2126C} }, +/**/ {{0XD556233E, 0XBFAB6F60} } }, +/**/ {{{0XBE9E153F, 0X3FEA3FFF} }, +/**/ {{0XA9C08AE0, 0X3FE5FBF0} }, +/**/ {{0X6F7861AA, 0X3FE320D9} }, +/**/ {{0XC2200F18, 0XBFD2C256} }, +/**/ {{0XA6795293, 0X3FB2915D} }, +/**/ {{0X256A8FDE, 0X3FA18A2B} }, +/**/ {{0XA67A4E89, 0XBFAB1470} } }, +/**/ {{{0X7A23A1CE, 0X3FEA5FFE} }, +/**/ {{0X63200600, 0X3FE60F07} }, +/**/ {{0XD13D395E, 0X3FE30E1E} }, +/**/ {{0X44403932, 0XBFD2B45D} }, +/**/ {{0XC967F013, 0X3FB2B3E9} }, +/**/ {{0X35D002B8, 0X3FA103AD} }, +/**/ {{0X6496A8F1, 0XBFAAB9B1} } }, +/**/ {{{0X57F250B8, 0X3FEA8001} }, +/**/ {{0XDD6453A0, 0X3FE6220D} }, +/**/ {{0XCFFFCC1E, 0X3FE2FB6F} }, +/**/ {{0X6F8D8291, 0XBFD2A648} }, +/**/ {{0X03654CC3, 0X3FB2D56F} }, +/**/ {{0X4BB6E7A6, 0X3FA07EE3} }, +/**/ {{0X87992F03, 0XBFAA5F2A} } }, +/**/ {{{0XDD839D49, 0X3FEAA000} }, +/**/ {{0XB412C9A0, 0X3FE634FF} }, +/**/ {{0XE2D59E01, 0X3FE2E8D0} }, +/**/ {{0X5467CFDD, 0XBFD2981C} }, +/**/ {{0XFF1FADB5, 0X3FB2F5E8} }, +/**/ {{0XA3BA803C, 0X3F9FF7D6} }, +/**/ {{0X46AF8DB7, 0XBFAA04E3} } }, +/**/ {{{0X770DF220, 0X3FEAC000} }, +/**/ {{0XFEF70020, 0X3FE647DE} }, +/**/ {{0X220AFF7F, 0X3FE2D640} }, +/**/ {{0X36F9E74F, 0XBFD289D8} }, +/**/ {{0XE509140A, 0X3FB3155E} }, +/**/ {{0X61AB0B7F, 0X3F9EF56B} }, +/**/ {{0X98CE391F, 0XBFA9AAE2} } }, +/**/ {{{0X125BBE48, 0X3FEAE001} }, +/**/ {{0X57A24D20, 0X3FE65AAC} }, +/**/ {{0X1BFB3559, 0X3FE2C3BD} }, +/**/ {{0X6DDE55DD, 0XBFD27B7C} }, +/**/ {{0X15C4C270, 0X3FB333D5} }, +/**/ {{0X9BAC4ECF, 0X3F9DF67A} }, +/**/ {{0X363A972B, 0XBFA9512F} } }, +/**/ {{{0X7C321839, 0X3FEAFFFE} }, +/**/ {{0X569B83C0, 0X3FE66D65} }, +/**/ {{0X53FBF8D9, 0X3FE2B14A} }, +/**/ {{0X9CFA03CE, 0XBFD26D0B} }, +/**/ {{0X2CAA2E0C, 0X3FB3514B} }, +/**/ {{0X4597BE9A, 0X3F9CFB22} }, +/**/ {{0X99110022, 0XBFA8F7CF} } }, +/**/ {{{0X75486924, 0X3FEB1FFE} }, +/**/ {{0X68CEFB40, 0X3FE6800D} }, +/**/ {{0X8E6AA814, 0X3FE29EE4} }, +/**/ {{0XE8AFA7EB, 0XBFD25E83} }, +/**/ {{0XFB0E8AC8, 0X3FB36DC9} }, +/**/ {{0XAD5D66CA, 0X3F9C0331} }, +/**/ {{0XFEDB1E8B, 0XBFA89EC9} } }, +/**/ {{{0X5FB8DEB8, 0X3FEB4001} }, +/**/ {{0XD137C500, 0X3FE692A4} }, +/**/ {{0XABFF668E, 0X3FE28C8B} }, +/**/ {{0XD8E71E0A, 0XBFD24FE5} }, +/**/ {{0X1297317A, 0X3FB38955} }, +/**/ {{0X1D844655, 0X3F9B0EA3} }, +/**/ {{0X6914067D, 0XBFA84624} } }, +/**/ {{{0X386C27B9, 0X3FEB6000} }, +/**/ {{0X8CDF6FC0, 0X3FE6A527} }, +/**/ {{0XC5758DB8, 0X3FE27A43} }, +/**/ {{0X59CADCE0, 0XBFD24135} }, +/**/ {{0XEE34AE91, 0X3FB3A3E9} }, +/**/ {{0X1C5FFF05, 0X3F9A1DA8} }, +/**/ {{0X9EC8AAC6, 0XBFA7EDE4} } }, +/**/ {{{0XD1EFDDB3, 0X3FEB8000} }, +/**/ {{0X0ACCB660, 0X3FE6B799} }, +/**/ {{0X9983AAB2, 0X3FE26809} }, +/**/ {{0X76047E08, 0XBFD23270} }, +/**/ {{0XF132139B, 0X3FB3BD90} }, +/**/ {{0X58DEB3E1, 0X3F993010} }, +/**/ {{0X2D194CE9, 0XBFA79610} } }, +/**/ {{{0X42CC4047, 0X3FEB9FFE} }, +/**/ {{0X86445E60, 0X3FE6C9F6} }, +/**/ {{0X069F871F, 0X3FE255E0} }, +/**/ {{0X25461639, 0XBFD2239A} }, +/**/ {{0XA926C127, 0X3FB3D649} }, +/**/ {{0XC5A21F70, 0X3F9845FB} }, +/**/ {{0X68E20BE6, 0XBFA73EAC} } }, +/**/ {{{0X951AEAAD, 0X3FEBC001} }, +/**/ {{0X3C4E45A0, 0X3FE6DC45} }, +/**/ {{0XFF6573B0, 0X3FE243C1} }, +/**/ {{0XE38FA7E7, 0XBFD214AE} }, +/**/ {{0X5EA1330F, 0X3FB3EE1E} }, +/**/ {{0X2BCCE6DF, 0X3F975F24} }, +/**/ {{0X6F3902C5, 0XBFA6E7BE} } }, +/**/ {{{0X6616FE11, 0X3FEBDFFE} }, +/**/ {{0X27106FE0, 0X3FE6EE7E} }, +/**/ {{0X97B587F0, 0X3FE231B6} }, +/**/ {{0X240FEF32, 0XBFD205B5} }, +/**/ {{0X44EB818C, 0X3FB40509} }, +/**/ {{0X108160F9, 0X3F967BDE} }, +/**/ {{0X271D18AD, 0XBFA6914B} } }, +/**/ {{{0X54511C72, 0X3FEBFFFF} }, +/**/ {{0X643BBB40, 0X3FE700A7} }, +/**/ {{0XE1823C8B, 0X3FE21FB7} }, +/**/ {{0X9A854F7A, 0XBFD1F6A8} }, +/**/ {{0X71F04837, 0X3FB41B15} }, +/**/ {{0XBBD10F7C, 0X3F959BD8} }, +/**/ {{0X41F03711, 0XBFA63B57} } }, +/**/ {{{0XC537593E, 0X3FEC2000} }, +/**/ {{0XF36D6400, 0X3FE712BE} }, +/**/ {{0XF754B2D5, 0X3FE20DC7} }, +/**/ {{0X9D24DBED, 0XBFD1E78B} }, +/**/ {{0X94F485E0, 0X3FB43043} }, +/**/ {{0X122A6884, 0X3F94BF29} }, +/**/ {{0X3D2AA4E9, 0XBFA5E5E7} } }, +/**/ {{{0XDDD35719, 0X3FEC4000} }, +/**/ {{0XD7FA3000, 0X3FE724C3} }, +/**/ {{0XF2A8B1BF, 0X3FE1FBE7} }, +/**/ {{0XB25DDDF6, 0XBFD1D85F} }, +/**/ {{0XD2E3B20F, 0X3FB44495} }, +/**/ {{0X7FCC1B30, 0X3F93E5D6} }, +/**/ {{0X62D0D00F, 0XBFA590FF} } }, +/**/ {{{0X402375B6, 0X3FEC6000} }, +/**/ {{0X7DFF3720, 0X3FE736B6} }, +/**/ {{0X86C92387, 0X3FE1EA17} }, +/**/ {{0X31DDFC58, 0XBFD1C925} }, +/**/ {{0XF8B6CBC2, 0X3FB4580F} }, +/**/ {{0X00CE998E, 0X3F930FD7} }, +/**/ {{0XCB299E5F, 0XBFA53CA3} } }, +/**/ {{{0X19904FE4, 0X3FEC7FFF} }, +/**/ {{0X0F395860, 0X3FE74897} }, +/**/ {{0XA825BA33, 0X3FE1D856} }, +/**/ {{0XA75E0FC5, 0XBFD1B9DC} }, +/**/ {{0X79F8FD7D, 0X3FB46AB5} }, +/**/ {{0XA5A90AFE, 0X3F923D23} }, +/**/ {{0X5D2F574B, 0XBFA4E8D8} } }, +/**/ {{{0XF9E2409D, 0X3FEC9FFE} }, +/**/ {{0X79E7F1C0, 0X3FE75A66} }, +/**/ {{0X8740D2E9, 0X3FE1C6A4} }, +/**/ {{0XF198392C, 0XBFD1AA85} }, +/**/ {{0X808C583A, 0X3FB47C8A} }, +/**/ {{0X857F2526, 0X3F916DAC} }, +/**/ {{0XD0477576, 0XBFA495A0} } }, +/**/ {{{0XE038EF72, 0X3FECC001} }, +/**/ {{0XE6815140, 0X3FE76C25} }, +/**/ {{0X19BDADF8, 0X3FE1B500} }, +/**/ {{0XB4A469AE, 0XBFD19B20} }, +/**/ {{0X42387EA2, 0X3FB48D93} }, +/**/ {{0X7305BAF5, 0X3F90A15F} }, +/**/ {{0XACAE4E17, 0XBFA44300} } }, +/**/ {{{0XEB72037F, 0X3FECDFFE} }, +/**/ {{0X7A7A4AA0, 0X3FE77DD0} }, +/**/ {{0X4F1F6702, 0X3FE1A36E} }, +/**/ {{0XD0992CF8, 0XBFD18BB1} }, +/**/ {{0X5AA4990D, 0X3FB49DCE} }, +/**/ {{0X63759665, 0X3F8FB0DD} }, +/**/ {{0X4D2F0C0F, 0XBFA3F0FB} } }, +/**/ {{{0XEA4839ED, 0X3FECFFFF} }, +/**/ {{0XB17088C0, 0X3FE78F6B} }, +/**/ {{0XCF32122F, 0X3FE191E9} }, +/**/ {{0X220400AC, 0XBFD17C35} }, +/**/ {{0X0A159641, 0X3FB4AD44} }, +/**/ {{0X80894CA9, 0X3F8E252C} }, +/**/ {{0XDF89C265, 0XBFA39F93} } }, +/**/ {{{0XEC3EC8B2, 0X3FED1FFD} }, +/**/ {{0XC8C6C880, 0X3FE7A0F3} }, +/**/ {{0X729F01D6, 0X3FE18076} }, +/**/ {{0X98515540, 0XBFD16CAE} }, +/**/ {{0X1B0933FF, 0X3FB4BBF4} }, +/**/ {{0XE09A60CD, 0X3F8C9FF5} }, +/**/ {{0X662A5704, 0XBFA34ECD} } }, +/**/ {{{0X7084EDD4, 0X3FED3FFF} }, +/**/ {{0X5F02F220, 0X3FE7B26C} }, +/**/ {{0XB9973206, 0X3FE16F10} }, +/**/ {{0X9E1E0A54, 0XBFD15D1B} }, +/**/ {{0XAC2C9A30, 0X3FB4C9E4} }, +/**/ {{0XEFCE76CC, 0X3F8B20DD} }, +/**/ {{0XB888BC37, 0XBFA2FEAA} } }, +/**/ {{{0X8D728E7C, 0X3FED5FFE} }, +/**/ {{0X488D7E80, 0X3FE7C3D2} }, +/**/ {{0XE622A5A7, 0X3FE15DBB} }, +/**/ {{0XA305CEB2, 0XBFD14D7F} }, +/**/ {{0X417BF1C7, 0X3FB4D716} }, +/**/ {{0XE19FE239, 0X3F89A81E} }, +/**/ {{0X84DDAD07, 0XBFA2AF2E} } }, +/**/ {{{0X70AA3B03, 0X3FED7FFF} }, +/**/ {{0XDB239580, 0X3FE7D527} }, +/**/ {{0XBE4FEA01, 0X3FE14C75} }, +/**/ {{0X2AD706AA, 0XBFD13DD9} }, +/**/ {{0XB49D32AA, 0X3FB4E38D} }, +/**/ {{0X37DF2B6D, 0X3F88357A} }, +/**/ {{0X507CD77B, 0XBFA2605B} } }, +/**/ {{{0X1434FBA3, 0X3FED9FFF} }, +/**/ {{0X82C8A720, 0X3FE7E66B} }, +/**/ {{0XED9B7FED, 0X3FE13B3F} }, +/**/ {{0X3AC9D646, 0XBFD12E2A} }, +/**/ {{0XE7B01CF5, 0X3FB4EF4C} }, +/**/ {{0XD25FD52D, 0X3F86C905} }, +/**/ {{0X798666EF, 0XBFA21233} } }, +/**/ {{{0XA8C8DE8C, 0X3FEDBFFE} }, +/**/ {{0XF4A0A520, 0X3FE7F79D} }, +/**/ {{0XD7FC2119, 0X3FE12A19} }, +/**/ {{0XC6BE19DF, 0XBFD11E72} }, +/**/ {{0X634E1B91, 0X3FB4FA57} }, +/**/ {{0X47F96DF5, 0X3F8562A6} }, +/**/ {{0X373AF599, 0XBFA1C4B9} } }, +/**/ {{{0X26573DF5, 0X3FEDE000} }, +/**/ {{0X4DBCB960, 0X3FE808C0} }, +/**/ {{0X7903E4B9, 0X3FE11902} }, +/**/ {{0X5CDFED06, 0XBFD10EB2} }, +/**/ {{0XCCA681FA, 0X3FB504B0} }, +/**/ {{0X6F3CDE09, 0X3F840238} }, +/**/ {{0X9BA8FA6A, 0XBFA177EE} } }, +/**/ {{{0X35009B66, 0X3FEDFFFE} }, +/**/ {{0XC2CB5340, 0X3FE819CF} }, +/**/ {{0XB1C942B5, 0X3FE107FC} }, +/**/ {{0X230D7D92, 0XBFD0FEEC} }, +/**/ {{0X75C5B4F1, 0X3FB50E5A} }, +/**/ {{0XE3C139D8, 0X3F82A7E8} }, +/**/ {{0X93FA642B, 0XBFA12BD5} } }, +/**/ {{{0X492D4C68, 0X3FEE2000} }, +/**/ {{0X5CCB8680, 0X3FE82AD0} }, +/**/ {{0X928E55DF, 0X3FE0F704} }, +/**/ {{0XEE0B0721, 0XBFD0EF1C} }, +/**/ {{0X937BFB74, 0X3FB51759} }, +/**/ {{0X2BC9FDDB, 0X3F815359} }, +/**/ {{0XEA1D1824, 0XBFA0E06F} } }, +/**/ {{{0X9412BB65, 0X3FEE4000} }, +/**/ {{0X14001A60, 0X3FE83BBF} }, +/**/ {{0X37F485DA, 0X3FE0E61D} }, +/**/ {{0X1B2BD37D, 0XBFD0DF48} }, +/**/ {{0X64024D14, 0X3FB51FAF} }, +/**/ {{0X9B849698, 0X3F8004B9} }, +/**/ {{0X450A2434, 0XBFA095BF} } }, +/**/ {{{0X4758EF2F, 0X3FEE5FFF} }, +/**/ {{0X1531C180, 0X3FE84C9C} }, +/**/ {{0X8B7FECE7, 0X3FE0D546} }, +/**/ {{0X105BFE1E, 0XBFD0CF6E} }, +/**/ {{0XF9C5E03A, 0X3FB5275E} }, +/**/ {{0X17AA1137, 0X3F7D77F2} }, +/**/ {{0X2A6891E1, 0XBFA04BC5} } }, +/**/ {{{0X380F819F, 0X3FEE8000} }, +/**/ {{0X74CCC060, 0X3FE85D69} }, +/**/ {{0X8F1DA5B5, 0X3FE0C47E} }, +/**/ {{0X62AD700F, 0XBFD0BF8D} }, +/**/ {{0X1F3FBC2B, 0X3FB52E6C} }, +/**/ {{0XEE24AD7D, 0X3F7AF1C3} }, +/**/ {{0XFECE26C9, 0XBFA00282} } }, +/**/ {{{0XA6D8CB7B, 0X3FEEA000} }, +/**/ {{0XD00E3A60, 0X3FE86E25} }, +/**/ {{0XBA314D62, 0X3FE0B3C6} }, +/**/ {{0XE7CB2D84, 0XBFD0AFA7} }, +/**/ {{0X08E9071F, 0X3FB534D9} }, +/**/ {{0X4CE5E5C9, 0X3F787704} }, +/**/ {{0X0EB7C9D5, 0XBF9F73F4} } }, +/**/ {{{0X5A13BA60, 0X3FEEC000} }, +/**/ {{0X19B163E0, 0X3FE87ED1} }, +/**/ {{0X2EBB7AD7, 0X3FE0A31F} }, +/**/ {{0X33A3FCE1, 0XBFD09FBE} }, +/**/ {{0X89D9AF5D, 0X3FB53AA8} }, +/**/ {{0XF7F7040B, 0X3F760799} }, +/**/ {{0XD3F0B3FB, 0XBF9EE456} } }, +/**/ {{{0X58F8DD18, 0X3FEEDFFF} }, +/**/ {{0X6681CA80, 0X3FE88F6B} }, +/**/ {{0XEC4360B3, 0X3FE09287} }, +/**/ {{0XB7CE07E5, 0XBFD08FD0} }, +/**/ {{0X7BDEDD3F, 0X3FB53FDD} }, +/**/ {{0X70C52E66, 0X3F73A366} }, +/**/ {{0X5DCA7315, 0XBF9E5630} } }, +/**/ {{{0XBE033400, 0X3FEEFFFF} }, +/**/ {{0XDD4D7960, 0X3FE89FF5} }, +/**/ {{0XDFFE15BD, 0X3FE081FF} }, +/**/ {{0XDAE56C0F, 0XBFD07FDE} }, +/**/ {{0XF84D6F5D, 0X3FB5447A} }, +/**/ {{0X7982941E, 0X3F714A24} }, +/**/ {{0X81E68835, 0XBF9DC982} } }, +/**/ {{{0XE6B5125D, 0X3FEF2001} }, +/**/ {{0XBBE88160, 0X3FE8B070} }, +/**/ {{0XDF7122E2, 0X3FE07186} }, +/**/ {{0XDE905325, 0XBFD06FE8} }, +/**/ {{0XB5DEEC7A, 0X3FB54883} }, +/**/ {{0XB4A186D5, 0X3F6DF762} }, +/**/ {{0XDE20F495, 0XBF9D3E4E} } }, +/**/ {{{0XF770E0DB, 0X3FEF3FFD} }, +/**/ {{0X09E96380, 0X3FE8C0D8} }, +/**/ {{0XF5A576A9, 0X3FE06120} }, +/**/ {{0X1D2912FF, 0XBFD05FF3} }, +/**/ {{0X8CD1001F, 0X3FB54BF9} }, +/**/ {{0X6E90DC16, 0X3F6970FC} }, +/**/ {{0XD8EB587E, 0XBF9CB496} } }, +/**/ {{{0X4E16DA33, 0X3FEF5FFE} }, +/**/ {{0X29BCCDC0, 0X3FE8D131} }, +/**/ {{0XD33BA4E9, 0X3FE050C8} }, +/**/ {{0XD74C83D2, 0XBFD04FF8} }, +/**/ {{0X592BB252, 0X3FB54EE0} }, +/**/ {{0X7193EEB5, 0X3F64FF61} }, +/**/ {{0XA459AC86, 0XBF9C2C5B} } }, +/**/ {{{0X4576FF2E, 0X3FEF8000} }, +/**/ {{0XCCE443A0, 0X3FE8E17A} }, +/**/ {{0XD8A97B6C, 0X3FE0407F} }, +/**/ {{0XC91B3E55, 0XBFD03FFB} }, +/**/ {{0X5F3357F7, 0X3FB5513A} }, +/**/ {{0X14C92B53, 0X3F60A2BA} }, +/**/ {{0X3E70DF71, 0XBF9BA59E} } }, +/**/ {{{0X39B6A330, 0X3FEF9FFF} }, +/**/ {{0XA7F515A0, 0X3FE8F1B2} }, +/**/ {{0X63064158, 0X3FE03048} }, +/**/ {{0XACBAADA8, 0XBFD02FFE} }, +/**/ {{0XF27448C0, 0X3FB55309} }, +/**/ {{0X4850006B, 0X3F58B6D6} }, +/**/ {{0X742323DF, 0XBF9B205F} } }, +/**/ {{{0XAA76C0B9, 0X3FEFC001} }, +/**/ {{0X15D66D80, 0X3FE901DC} }, +/**/ {{0X28D9B4AA, 0X3FE0201F} }, +/**/ {{0XA98D4C38, 0XBFD01FFE} }, +/**/ {{0X089780F8, 0X3FB55452} }, +/**/ {{0X7F35C5BB, 0X3F5050B5} }, +/**/ {{0XE19247AF, 0XBF9A9C9F} } }, +/**/ {{{0X39A592CA, 0X3FEFDFFE} }, +/**/ {{0X6D88A780, 0X3FE911F2} }, +/**/ {{0XE40C6538, 0X3FE01008} }, +/**/ {{0XD31688DE, 0XBFD01000} }, +/**/ {{0XE32F1816, 0X3FB55514} }, +/**/ {{0X4E1628D2, 0X3F402A15} }, +/**/ {{0XF4FAF5A0, 0XBF9A1A5F} } }, +/**/ {{{0X8E92D1B0, 0X3FEFF801} }, +/**/ {{0X9BB4BF00, 0X3FE91DFB} }, +/**/ {{0XB884C5A9, 0X3FE003FF} }, +/**/ {{0X3876A954, 0XBFD003FF} }, +/**/ {{0X5539DDFB, 0X3FB55551} }, +/**/ {{0X7B95E6C2, 0X3F2007E7} }, +/**/ {{0X18A3BA58, 0XBF99B9A7} } }, + }; + + static const number + hij[241][16] = { /* x0,hij for (1/16,1) */ +/**/ {{{0x00000000, 0x3fb04000} }, +/**/ {{0x1c06693d, 0x3fb03a6d} }, +/**/ {{0xd4e7f128, 0xbc428a02} }, +/**/ {{0xe92592ae, 0x3fefdf1f} }, +/**/ {{0xb5490162, 0x3c88bfc0} }, +/**/ {{0x8f7e4151, 0xbfb01ead} }, +/**/ {{0x0b64d205, 0xbc5395e8} }, +/**/ {{0x433dd49b, 0xbfd4d29f} }, +/**/ {{0x4aa42633, 0xbc75b19d} }, +/**/ {{0xce35961d, 0x3fafda41} }, +/**/ {{0x425d7696, 0x3c4e6a5f} }, +/**/ {{0x6c1bb5e2, 0x3fc814dd} }, +/**/ {{0x2b33739f, 0xbfaf4cb7} }, +/**/ {{0xc267d8ec, 0xbfc048b2} }, +/**/ {{0xe8ababc6, 0x3fae9649} }, +/**/ {{0xfe802692, 0x3fb78293} } }, +/**/ {{{0x00000000, 0x3fb10000} }, +/**/ {{0xa71d52a7, 0x3fb0f99e} }, +/**/ {{0xeec3624f, 0xbc22069f} }, +/**/ {{0x9a49d2a9, 0x3fefdc08} }, +/**/ {{0x68b2ce25, 0x3c7780f7} }, +/**/ {{0x9da73e1d, 0xbfb0d9de} }, +/**/ {{0xa1a487bf, 0x3c4ebf46} }, +/**/ {{0xd13ea108, 0xbfd4c669} }, +/**/ {{0xebb4528c, 0x3c7354bc} }, +/**/ {{0x789374c1, 0x3fb0a137} }, +/**/ {{0xc3f2c5c2, 0xbc56c223} }, +/**/ {{0x79c60cda, 0x3fc7f0e7} }, +/**/ {{0xcdcc7b81, 0xbfb05062} }, +/**/ {{0xc5266783, 0xbfc019e4} }, +/**/ {{0xf2540289, 0x3fafd0b2} }, +/**/ {{0xf6d3cd8a, 0x3fb71107} } }, +/**/ {{{0x00000000, 0x3fb20000} }, +/**/ {{0xbf082d59, 0x3fb1f86d} }, +/**/ {{0x7732ef81, 0xbc4095dc} }, +/**/ {{0x01722b81, 0x3fefd7b3} }, +/**/ {{0x8a212e02, 0xbc5e618c} }, +/**/ {{0xee4e9cfa, 0xbfb1d2c5} }, +/**/ {{0x29abece0, 0x3c426273} }, +/**/ {{0x37eb7f46, 0xbfd4b551} }, +/**/ {{0x01d8bf12, 0x3c73b360} }, +/**/ {{0x6adb6a7c, 0x3fb18fa7} }, +/**/ {{0x398999ad, 0xbc5c00d8} }, +/**/ {{0xf4a7cff3, 0x3fc7bea5} }, +/**/ {{0x61f84829, 0xbfb13008} }, +/**/ {{0xa8e135a1, 0xbfbfb14f} }, +/**/ {{0x4324f177, 0x3fb0b532} }, +/**/ {{0x3498dd9d, 0x3fb6734a} } }, +/**/ {{{0x00000000, 0x3fb30000} }, +/**/ {{0x318a4a9a, 0x3fb2f719} }, +/**/ {{0x79b9801f, 0x3c03fd17} }, +/**/ {{0x48e238fe, 0x3fefd31f} }, +/**/ {{0xd8c45327, 0xbc876a7a} }, +/**/ {{0x852096e2, 0xbfb2cada} }, +/**/ {{0x11efd787, 0x3c460860} }, +/**/ {{0x2e476a39, 0xbfd4a34b} }, +/**/ {{0xeb11ee51, 0x3c7254f2} }, +/**/ {{0xc54ae225, 0x3fb27c13} }, +/**/ {{0x4ae66f0c, 0x3c513096} }, +/**/ {{0xef0d59d0, 0x3fc789ca} }, +/**/ {{0x6d9aaa8c, 0xbfb20c06} }, +/**/ {{0x846ba912, 0xbfbf2885} }, +/**/ {{0xc697ef5e, 0x3fb17c5f} }, +/**/ {{0xcad31e6e, 0x3fb5ce93} } }, +/**/ {{{0x00000000, 0x3fb40000} }, +/**/ {{0x0e7c559d, 0x3fb3f59f} }, +/**/ {{0x285df847, 0x3c5ac4ce} }, +/**/ {{0xa6ab93e9, 0x3fefce4d} }, +/**/ {{0x18a97736, 0xbc6be46b} }, +/**/ {{0x4d22b635, 0xbfb3c211} }, +/**/ {{0x6950679f, 0x3c42033c} }, +/**/ {{0xc4d74033, 0xbfd49059} }, +/**/ {{0xd7e376aa, 0x3c57dd7c} }, +/**/ {{0xc0896a7c, 0x3fb36662} }, +/**/ {{0xd79232cf, 0xbc36cf6a} }, +/**/ {{0xa13a97a2, 0x3fc75261} }, +/**/ {{0x5fdd1509, 0xbfb2e431} }, +/**/ {{0x6e52db32, 0xbfbe9999} }, +/**/ {{0xb0a71e9f, 0x3fb23da4} }, +/**/ {{0xe3bc8178, 0x3fb52335} } }, +/**/ {{{0x00000000, 0x3fb50000} }, +/**/ {{0x677292fb, 0x3fb4f3fd} }, +/**/ {{0x6264979e, 0x3c4008d3} }, +/**/ {{0x53a1ee0d, 0x3fefc93e} }, +/**/ {{0x20fd2bdf, 0xbc64421a} }, +/**/ {{0x4aba88e3, 0xbfb4b85f} }, +/**/ {{0x3c9d1e89, 0x3c54f184} }, +/**/ {{0x25ae4668, 0xbfd47c7f} }, +/**/ {{0x816630d1, 0xbc7d7581} }, +/**/ {{0x07f85056, 0x3fb44e7b} }, +/**/ {{0x910bdf4f, 0x3c56d63c} }, +/**/ {{0xc439029c, 0x3fc71875} }, +/**/ {{0xf2bcfa10, 0xbfb3b85e} }, +/**/ {{0x9707b205, 0xbfbe04bb} }, +/**/ {{0x95e3e0cc, 0x3fb2f8c6} }, +/**/ {{0x8093431b, 0x3fb47184} } }, +/**/ {{{0x00000000, 0x3fb60000} }, +/**/ {{0x4fd2d7b2, 0x3fb5f232} }, +/**/ {{0x4401318e, 0x3c58a8da} }, +/**/ {{0x8b549418, 0x3fefc3f1} }, +/**/ {{0x836f8130, 0x3c34d896} }, +/**/ {{0x9cdd92e7, 0xbfb5adb9} }, +/**/ {{0xeb397cc3, 0x3c4d4161} }, +/**/ {{0x93f8f1dc, 0xbfd467bd} }, +/**/ {{0xffc760ad, 0xbc609d7b} }, +/**/ {{0xbea6b2fe, 0x3fb53443} }, +/**/ {{0x4b24f5db, 0x3c5eb03c} }, +/**/ {{0x8de3d005, 0x3fc6dc13} }, +/**/ {{0x37d2d99d, 0xbfb48866} }, +/**/ {{0xf6663fcb, 0xbfbd6a1d} }, +/**/ {{0x0adff464, 0x3fb3ad8e} }, +/**/ {{0x4159c223, 0x3fb3b9d6} } }, +/**/ {{{0x00000000, 0x3fb70000} }, +/**/ {{0xdcea4b0d, 0x3fb6f03b} }, +/**/ {{0x512fa17d, 0xbc33f00e} }, +/**/ {{0x8c07a436, 0x3fefbe67} }, +/**/ {{0x46250d6f, 0xbc84baaa} }, +/**/ {{0x7e3ba4c7, 0xbfb6a215} }, +/**/ {{0x54503f8d, 0xbc3504e7} }, +/**/ {{0x6b82d03a, 0xbfd45217} }, +/**/ {{0xbebdd1db, 0x3c7d1f0d} }, +/**/ {{0x841d5604, 0x3fb617a4} }, +/**/ {{0x6681c436, 0xbc47168b} }, +/**/ {{0xaccec6ce, 0x3fc69d47} }, +/**/ {{0xa4715800, 0xbfb5541f} }, +/**/ {{0x335a1c1b, 0xbfbcc9f4} }, +/**/ {{0xbac0061f, 0x3fb45bc6} }, +/**/ {{0x2b3853b6, 0x3fb2fc84} } }, +/**/ {{{0x00000000, 0x3fb80000} }, +/**/ {{0x2602f10f, 0x3fb7ee18} }, +/**/ {{0x4c0c3d98, 0xbc5cfb65} }, +/**/ {{0x96acfacc, 0x3fefb8a0} }, +/**/ {{0x18495af3, 0xbc82962e} }, +/**/ {{0x46635c89, 0xbfb79568} }, +/**/ {{0xa6bfd498, 0x3c5ac468} }, +/**/ {{0x2037b997, 0xbfd43b8f} }, +/**/ {{0xe2f12373, 0xbc72ad53} }, +/**/ {{0x7900c4ee, 0x3fb6f885} }, +/**/ {{0x0aef1f9d, 0x3c53145d} }, +/**/ {{0x4409ba0e, 0x3fc65c1f} }, +/**/ {{0x1d176e0c, 0xbfb61b65} }, +/**/ {{0x8ad65152, 0xbfbc2473} }, +/**/ {{0x7bc246c1, 0x3fb5033f} }, +/**/ {{0x6db30b46, 0x3fb239e9} } }, +/**/ {{{0x00000000, 0x3fb90000} }, +/**/ {{0x4478fb28, 0x3fb8ebc5} }, +/**/ {{0x0cad24cc, 0x3c473288} }, +/**/ {{0xeedcd6d7, 0x3fefb29c} }, +/**/ {{0x23ea50f0, 0x3c8efa9e} }, +/**/ {{0x6ae09982, 0xbfb887a7} }, +/**/ {{0x53801511, 0x3c5b2275} }, +/**/ {{0x3da0757c, 0xbfd42427} }, +/**/ {{0x311c7ac8, 0xbc7199e5} }, +/**/ {{0x4388717b, 0x3fb7d6cf} }, +/**/ {{0x3dd070b4, 0xbc5c4eb2} }, +/**/ {{0xe6c2b5f3, 0x3fc618a7} }, +/**/ {{0x00313569, 0xbfb6de12} }, +/**/ {{0xb6316619, 0xbfbb79d2} }, +/**/ {{0x61af5c21, 0x3fb5a3ca} }, +/**/ {{0x26e60289, 0x3fb17263} } }, +/**/ {{{0x00000000, 0x3fba0000} }, +/**/ {{0x53cfdcf1, 0x3fb9e941} }, +/**/ {{0x1d69c47e, 0x3c5a332e} }, +/**/ {{0xdace3776, 0x3fefac5c} }, +/**/ {{0x1ad91ab5, 0xbc8c9a78} }, +/**/ {{0x8054ad75, 0xbfb978c8} }, +/**/ {{0x8ed66c17, 0xbc5e35b8} }, +/**/ {{0x665afed1, 0xbfd40be2} }, +/**/ {{0x08ef10fb, 0x3c62eeef} }, +/**/ {{0x13c989d2, 0x3fb8b26b} }, +/**/ {{0xbfeab3ba, 0x3c329f11} }, +/**/ {{0x93c8f97c, 0x3fc5d2ef} }, +/**/ {{0x30234881, 0xbfb79c03} }, +/**/ {{0xd0f650c8, 0xbfbaca49} }, +/**/ {{0xce2dcccc, 0x3fb63d3c} }, +/**/ {{0x26fb0af2, 0x3fb0a650} } }, +/**/ {{{0x00000000, 0x3fbb0000} }, +/**/ {{0x71c722b8, 0x3fbae68a} }, +/**/ {{0x6910b9db, 0x3c4c014e} }, +/**/ {{0xa34ef42b, 0x3fefa5e0} }, +/**/ {{0xeb56d5b9, 0xbc836583} }, +/**/ {{0x3b881779, 0xbfba68c1} }, +/**/ {{0x13a09314, 0xbc473a0d} }, +/**/ {{0x538e939c, 0xbfd3f2c3} }, +/**/ {{0xee53e648, 0xbc68ed49} }, +/**/ {{0xa7d45973, 0x3fb98b42} }, +/**/ {{0x461ca7c4, 0xbc523943} }, +/**/ {{0xb0f2e2bb, 0x3fc58b04} }, +/**/ {{0x1c9d23dc, 0xbfb85517} }, +/**/ {{0x3e3b5a66, 0xbfba1612} }, +/**/ {{0x7ef1d0b9, 0x3fb6cf6f} }, +/**/ {{0x6617b315, 0x3fafac21} } }, +/**/ {{{0x00000000, 0x3fbc0000} }, +/**/ {{0xbe6f07c3, 0x3fbbe39e} }, +/**/ {{0x29a05987, 0x3c5f7b8f} }, +/**/ {{0x93bb9192, 0x3fef9f28} }, +/**/ {{0x7cd1bdab, 0x3c78260b} }, +/**/ {{0x72759741, 0xbfbb5787} }, +/**/ {{0xa6767247, 0x3c52f93f} }, +/**/ {{0xd45bbe91, 0xbfd3d8cc} }, +/**/ {{0x2edc0762, 0x3c664839} }, +/**/ {{0x4fa31d26, 0x3fba6140} }, +/**/ {{0x97891510, 0x3c400647} }, +/**/ {{0x0668fd66, 0x3fc540f6} }, +/**/ {{0xcb2f6e8f, 0xbfb9092d} }, +/**/ {{0x8d902073, 0xbfb95d66} }, +/**/ {{0x99c53d16, 0x3fb75a3e} }, +/**/ {{0x8f475e61, 0x3fae040c} } }, +/**/ {{{0x00000000, 0x3fbd0000} }, +/**/ {{0x5c3cca32, 0x3fbce07c} }, +/**/ {{0x425918a7, 0x3c4138e6} }, +/**/ {{0xf9f6d421, 0x3fef9834} }, +/**/ {{0x8c22a239, 0x3c6f3089} }, +/**/ {{0x1d4e69a5, 0xbfbc4511} }, +/**/ {{0xd2083ce8, 0x3c254c0f} }, +/**/ {{0xcd488978, 0xbfd3be01} }, +/**/ {{0x6362ec0f, 0x3c5612db} }, +/**/ {{0xf0d94873, 0x3fbb344e} }, +/**/ {{0xfdf7db72, 0xbc182beb} }, +/**/ {{0xb9d86c04, 0x3fc4f4d2} }, +/**/ {{0xdf238807, 0xbfb9b828} }, +/**/ {{0x5f93ffd6, 0xbfb8a082} }, +/**/ {{0xb6650b0c, 0x3fb7dd89} }, +/**/ {{0xb62676ef, 0x3fac5526} } }, +/**/ {{{0x00000000, 0x3fbe0000} }, +/**/ {{0x701eba6e, 0x3fbddd21} }, +/**/ {{0xcd76fe58, 0x3c594eff} }, +/**/ {{0x266112ba, 0x3fef9106} }, +/**/ {{0x6b7e18b1, 0x3c74c302} }, +/**/ {{0x5777816c, 0xbfbd3154} }, +/**/ {{0x1f9dbddd, 0x3c5dc7e4} }, +/**/ {{0x37a90881, 0xbfd3a265} }, +/**/ {{0xeb7ba840, 0xbc75bd61} }, +/**/ {{0x0a52514b, 0x3fbc045a} }, +/**/ {{0xcff49a99, 0xbc35ca88} }, +/**/ {{0x498eeb56, 0x3fc4a6aa} }, +/**/ {{0xa09232cf, 0xbfba61eb} }, +/**/ {{0x4a464027, 0xbfb7dfa2} }, +/**/ {{0xe633c053, 0x3fb85933} }, +/**/ {{0x3f920107, 0x3faaa036} } }, +/**/ {{{0x00000000, 0x3fbf0000} }, +/**/ {{0x2190043b, 0x3fbed98c} }, +/**/ {{0x592c7b13, 0xbc23a598} }, +/**/ {{0x6bcf4ad8, 0x3fef899c} }, +/**/ {{0x912c09b0, 0x3c55fd73} }, +/**/ {{0x607f91a0, 0xbfbe1c47} }, +/**/ {{0x5b5db022, 0x3c576677} }, +/**/ {{0x21046f5f, 0xbfd385fa} }, +/**/ {{0x4487f4b8, 0x3c7f01c3} }, +/**/ {{0xb77f2d51, 0x3fbcd14d} }, +/**/ {{0x30a2ccfe, 0x3c57a86d} }, +/**/ {{0x8782b530, 0x3fc4568c} }, +/**/ {{0x02b7ad2d, 0xbfbb065b} }, +/**/ {{0xbd215555, 0xbfb71b03} }, +/**/ {{0xb9c1c1de, 0x3fb8cd23} }, +/**/ {{0x8dbfa69b, 0x3fa8e602} } }, +/**/ {{{0x00000000, 0x3fc00000} }, +/**/ {{0x9aac2f6e, 0x3fbfd5ba} }, +/**/ {{0x86760c17, 0xbc4cd376} }, +/**/ {{0x1f81f820, 0x3fef81f8} }, +/**/ {{0x1f81f820, 0xbc8f81f8} }, +/**/ {{0x9d0dc11b, 0xbfbf05e0} }, +/**/ {{0x1d821725, 0xbc35a199} }, +/**/ {{0xaa76e1d7, 0xbfd368c3} }, +/**/ {{0xc796f8cd, 0xbc672d4c} }, +/**/ {{0xb391c2e3, 0x3fbd9b16} }, +/**/ {{0x8086c51d, 0x3c58051b} }, +/**/ {{0x94488c86, 0x3fc40489} }, +/**/ {{0xa98401c8, 0xbfbba55d} }, +/**/ {{0xe5127e64, 0xbfb652e4} }, +/**/ {{0x442e53ae, 0x3fb93943} }, +/**/ {{0x86286f75, 0x3fa72753} } }, +/**/ {{{0x00000000, 0x3fc08000} }, +/**/ {{0x84212b3e, 0x3fc068d5} }, +/**/ {{0x83019bfd, 0xbc69e2d2} }, +/**/ {{0x991bb133, 0x3fef7a19} }, +/**/ {{0x66627723, 0x3c7a956a} }, +/**/ {{0x97c8e137, 0xbfbfee16} }, +/**/ {{0x66dbe7af, 0x3c4d9399} }, +/**/ {{0x0810323a, 0xbfd34ac5} }, +/**/ {{0x6bc6c512, 0x3c6a1a57} }, +/**/ {{0x5c75a6f9, 0x3fbe61a2} }, +/**/ {{0xd75c8f85, 0xbc492b99} }, +/**/ {{0xd9fa3f20, 0x3fc3b0b1} }, +/**/ {{0xee66d309, 0xbfbc3edb} }, +/**/ {{0x905eeb33, 0xbfb58784} }, +/**/ {{0x1c65bb14, 0x3fb99d80} }, +/**/ {{0x18a09884, 0x3fa564f1} } }, +/**/ {{{0x00000000, 0x3fc10000} }, +/**/ {{0xccf40882, 0x3fc0e6ad} }, +/**/ {{0x1bb98d0d, 0xbc6d71a3} }, +/**/ {{0x32978bad, 0x3fef7201} }, +/**/ {{0x599381e9, 0x3c816476} }, +/**/ {{0x011b81fd, 0xbfc06a70} }, +/**/ {{0x9ba697ca, 0xbc422f5d} }, +/**/ {{0x802fc0a5, 0xbfd32c01} }, +/**/ {{0x08a20868, 0x3c7d8e47} }, +/**/ {{0xb59597fe, 0x3fbf24de} }, +/**/ {{0x410d31eb, 0xbc43288f} }, +/**/ {{0x070feb24, 0x3fc35b16} }, +/**/ {{0xe4565b78, 0xbfbcd2bf} }, +/**/ {{0x128768c6, 0xbfb4b922} }, +/**/ {{0x5c42a097, 0x3fb9f9cb} }, +/**/ {{0xc7f97f2e, 0x3fa39fa2} } }, +/**/ {{{0x00000000, 0x3fc18000} }, +/**/ {{0x41060850, 0x3fc16465} }, +/**/ {{0x8ae7ea92, 0x3c66bcee} }, +/**/ {{0x483f492b, 0x3fef69af} }, +/**/ {{0x57db963e, 0xbc6e3280} }, +/**/ {{0xdacaa844, 0xbfc0dd19} }, +/**/ {{0xad7fc21e, 0xbc6133c7} }, +/**/ {{0x6addaea8, 0xbfd30c7c} }, +/**/ {{0x89161c76, 0xbc71443d} }, +/**/ {{0x6a6d3cd2, 0x3fbfe4ba} }, +/**/ {{0x423ee67a, 0x3c50d4b8} }, +/**/ {{0x092e569a, 0x3fc303c7} }, +/**/ {{0x5b11d3b6, 0xbfbd60f5} }, +/**/ {{0x283b5c55, 0xbfb3e7fd} }, +/**/ {{0x9d9a6ab7, 0x3fba4e19} }, +/**/ {{0x3487cc29, 0x3fa1d82f} } }, +/**/ {{{0x00000000, 0x3fc20000} }, +/**/ {{0xfb043727, 0x3fc1e1fa} }, +/**/ {{0x14dacf8c, 0xbc4b4859} }, +/**/ {{0x38a14f5e, 0x3fef6124} }, +/**/ {{0x001f6124, 0x3c798e9e} }, +/**/ {{0x59d3fb7c, 0xbfc14f04} }, +/**/ {{0x4cc99cb2, 0x3c531efa} }, +/**/ {{0x31219b34, 0xbfd2ec39} }, +/**/ {{0x6e004611, 0xbc618697} }, +/**/ {{0x68736312, 0x3fc05092} }, +/**/ {{0x8a06e4b5, 0x3c67aad4} }, +/**/ {{0x07eca5ec, 0x3fc2aad6} }, +/**/ {{0xe19fe31c, 0xbfbde969} }, +/**/ {{0xdb6b9127, 0xbfb31455} }, +/**/ {{0xf53dd9ee, 0x3fba9a62} }, +/**/ {{0xa8e4ede0, 0x3fa00f5b} } }, +/**/ {{{0x00000000, 0x3fc28000} }, +/**/ {{0x171a535c, 0x3fc25f6e} }, +/**/ {{0xbde1a310, 0x3c67c6d7} }, +/**/ {{0x64866d22, 0x3fef5860} }, +/**/ {{0xd1f6326c, 0x3c88c6ff} }, +/**/ {{0x13c11396, 0xbfc1c02b} }, +/**/ {{0xffeb1a0f, 0xbc51b469} }, +/**/ {{0x4c571b0f, 0xbfd2cb3b} }, +/**/ {{0x2fb0b163, 0x3c6e4f76} }, +/**/ {{0xf5c213ab, 0x3fc0ad06} }, +/**/ {{0xabea9e66, 0x3c625bf2} }, +/**/ {{0x5f93bbb2, 0x3fc25054} }, +/**/ {{0xc80a32c8, 0xbfbe6c0c} }, +/**/ {{0x678d0d1e, 0xbfb23e6c} }, +/**/ {{0xebf8ae4b, 0x3fbadea2} }, +/**/ {{0x527f133b, 0x3f9c8bd7} } }, +/**/ {{{0x00000000, 0x3fc30000} }, +/**/ {{0xb2fba1ff, 0x3fc2dcbd} }, +/**/ {{0x05561534, 0x3c58f287} }, +/**/ {{0x2ee76e94, 0x3fef4f64} }, +/**/ {{0xc6da5865, 0x3c80ec89} }, +/**/ {{0xb322f867, 0xbfc23089} }, +/**/ {{0x5fcd0d6f, 0x3c4c2b54} }, +/**/ {{0x45802261, 0xbfd2a986} }, +/**/ {{0x5ae78b8a, 0xbc79a132} }, +/**/ {{0x35a9d974, 0x3fc107b3} }, +/**/ {{0xb725e335, 0x3c5ef22d} }, +/**/ {{0x9bd98832, 0x3fc1f453} }, +/**/ {{0x2057aad4, 0xbfbee8cf} }, +/**/ {{0x1e1bc3a1, 0xbfb16681} }, +/**/ {{0x759c8f58, 0x3fbb1ad8} }, +/**/ {{0x0b15b4aa, 0x3f98f941} } }, +/**/ {{{0x00000000, 0x3fc38000} }, +/**/ {{0xedeb99a4, 0x3fc359e8} }, +/**/ {{0x4e4604c6, 0xbc6a5fd7} }, +/**/ {{0xfce28238, 0x3fef462f} }, +/**/ {{0xd90595d1, 0x3c83dc01} }, +/**/ {{0xf7edfa6d, 0xbfc2a01b} }, +/**/ {{0x4a3b5c9a, 0xbc6b11fb} }, +/**/ {{0xb4959402, 0xbfd2871d} }, +/**/ {{0x2fcf7ea3, 0xbc4a3702} }, +/**/ {{0xd8d7fe8c, 0x3fc1608f} }, +/**/ {{0xf8f1d41c, 0x3c61ac60} }, +/**/ {{0x729a89ca, 0x3fc196e5} }, +/**/ {{0xbec74f31, 0xbfbf5fa3} }, +/**/ {{0x4b6c9767, 0xbfb08cd4} }, +/**/ {{0xe624ce15, 0x3fbb4f05} }, +/**/ {{0xddb2020c, 0x3f956871} } }, +/**/ {{{0x00000000, 0x3fc40000} }, +/**/ {{0xe8c6626c, 0x3fc3d6ee} }, +/**/ {{0x0ce9281b, 0x3c661a3b} }, +/**/ {{0x35b0713c, 0x3fef3cc4} }, +/**/ {{0xe69ea094, 0x3c81d0a7} }, +/**/ {{0xb7d169f0, 0xbfc30edd} }, +/**/ {{0xae999b97, 0x3c6b3394} }, +/**/ {{0x3fd62b3c, 0xbfd26405} }, +/**/ {{0xc0736df9, 0x3c73e339} }, +/**/ {{0xe8e57ee3, 0x3fc1b795} }, +/**/ {{0x0a42c7f6, 0xbc6130dc} }, +/**/ {{0xbe93b8e5, 0x3fc1381b} }, +/**/ {{0x394e1bf7, 0xbfbfd07f} }, +/**/ {{0x37bb5315, 0xbfaf634c} }, +/**/ {{0xe501e57b, 0x3fbb7b30} }, +/**/ {{0x20503792, 0x3f91dae1} } }, +/**/ {{{0x00000000, 0x3fc48000} }, +/**/ {{0xc6092a9e, 0x3fc453ce} }, +/**/ {{0xb3a5a78b, 0x3c61f653} }, +/**/ {{0x4299ace8, 0x3fef3321} }, +/**/ {{0x3a742b30, 0xbc87414c} }, +/**/ {{0xde8b2323, 0xbfc37cca} }, +/**/ {{0x7b50aedf, 0x3c649378} }, +/**/ {{0x9b13f4d0, 0xbfd24040} }, +/**/ {{0xb7dc85c0, 0x3c7e271f} }, +/**/ {{0xc9024068, 0x3fc20cbe} }, +/**/ {{0x88ef3da7, 0x3c50921f} }, +/**/ {{0x7a1f1270, 0x3fc0d808} }, +/**/ {{0xf32d5436, 0xbfc01dab} }, +/**/ {{0x02e6f09c, 0xbfadaa6d} }, +/**/ {{0x5e9cd766, 0x3fbb9f62} }, +/**/ {{0xab964c04, 0x3f8ca3fe} } }, +/**/ {{{0x00000000, 0x3fc50000} }, +/**/ {{0xa9da4f17, 0x3fc4d087} }, +/**/ {{0xf1adf158, 0x3c61f323} }, +/**/ {{0x8eeb3352, 0x3fef2947} }, +/**/ {{0x8799a164, 0x3c871eb0} }, +/**/ {{0x6e36e75c, 0xbfc3e9df} }, +/**/ {{0x4e37666f, 0x3c541555} }, +/**/ {{0x87008bd0, 0xbfd21bd3} }, +/**/ {{0xc24ff75f, 0xbc609e14} }, +/**/ {{0x36860504, 0x3fc26004} }, +/**/ {{0x1ebc8c40, 0xbc58f8ca} }, +/**/ {{0xb9f4ead3, 0x3fc076bd} }, +/**/ {{0xed70ddd5, 0xbfc05012} }, +/**/ {{0x33e194b1, 0xbfabef8a} }, +/**/ {{0x7423a91f, 0x3fbbbba6} }, +/**/ {{0xdd99da12, 0x3f859e6a} } }, +/**/ {{{0x00000000, 0x3fc58000} }, +/**/ {{0xba11570a, 0x3fc54d18} }, +/**/ {{0xf2884073, 0x3c618282} }, +/**/ {{0x87eb4d7d, 0x3fef1f37} }, +/**/ {{0xedda13e6, 0x3c8476f0} }, +/**/ {{0x7f997c7c, 0xbfc45617} }, +/**/ {{0x6423ceda, 0xbc46bf5b} }, +/**/ {{0xd0784ec7, 0xbfd1f6c1} }, +/**/ {{0xd106a8e0, 0xbc74ec12} }, +/**/ {{0x4967338d, 0x3fc2b160} }, +/**/ {{0x61339c25, 0x3c5309c0} }, +/**/ {{0xa7f42962, 0x3fc0144d} }, +/**/ {{0x73dbaeec, 0xbfc07f71} }, +/**/ {{0x2aeda9a4, 0xbfaa3322} }, +/**/ {{0x69b152b3, 0x3fbbd00c} }, +/**/ {{0x4c782821, 0x3f7d4f90} } }, +/**/ {{{0x00000000, 0x3fc60000} }, +/**/ {{0x1e3ec26a, 0x3fc5c981} }, +/**/ {{0x2c010f3d, 0xbc5054ab} }, +/**/ {{0x9cce28eb, 0x3fef14f1} }, +/**/ {{0x2708cd6e, 0xbc8b7c25} }, +/**/ {{0x42678d07, 0xbfc4c16f} }, +/**/ {{0xc1560017, 0x3c5f55ba} }, +/**/ {{0x4fccc153, 0xbfd1d10f} }, +/**/ {{0x1bcc361d, 0x3c529588} }, +/**/ {{0x74979f8c, 0x3fc300cd} }, +/**/ {{0x0bc1e891, 0xbc6b1da5} }, +/**/ {{0xfbe70208, 0x3fbf6194} }, +/**/ {{0x4b1c266f, 0xbfc0abc5} }, +/**/ {{0x3b74e858, 0xbfa875b2} }, +/**/ {{0x92e46f11, 0x3fbbdca6} }, +/**/ {{0x9de94aef, 0x3f6f0b17} } }, +/**/ {{{0x00000000, 0x3fc68000} }, +/**/ {{0xffb3aa74, 0x3fc645bf} }, +/**/ {{0x677c2cb4, 0xbc3f536b} }, +/**/ {{0x3eaa4ed6, 0x3fef0a76} }, +/**/ {{0x0b06c761, 0x3c888c52} }, +/**/ {{0xfd884489, 0xbfc52be2} }, +/**/ {{0xbe5c728a, 0x3c67ec59} }, +/**/ {{0xe80e4e0a, 0xbfd1aabf} }, +/**/ {{0xe90c909e, 0xbc71320e} }, +/**/ {{0x864781ca, 0x3fc34e46} }, +/**/ {{0x126138ee, 0x3c42fcb3} }, +/**/ {{0x013b5d4f, 0x3fbe988d} }, +/**/ {{0x122409a2, 0xbfc0d50d} }, +/**/ {{0x7bb562c1, 0xbfa6b7b6} }, +/**/ {{0x3df8dee8, 0x3fbbe18a} }, +/**/ {{0x8809e1ef, 0x3f3e4009} } }, +/**/ {{{0x00000000, 0x3fc70000} }, +/**/ {{0x898933d9, 0x3fc6c1d4} }, +/**/ {{0x7603c427, 0xbc52954a} }, +/**/ {{0xe06cfb34, 0x3feeffc5} }, +/**/ {{0x379877c2, 0xbc85c037} }, +/**/ {{0x0f53a52c, 0xbfc5956f} }, +/**/ {{0xe566376c, 0x3c4d46a2} }, +/**/ {{0x86559c11, 0xbfd183d7} }, +/**/ {{0x64734c7f, 0x3c7d2520} }, +/**/ {{0xa80eddd5, 0x3fc399c6} }, +/**/ {{0x40fbef6f, 0x3c616c26} }, +/**/ {{0xf4b571a7, 0x3fbdcda7} }, +/**/ {{0x3fd42996, 0xbfc0fb48} }, +/**/ {{0x95c85118, 0xbfa4f9a9} }, +/**/ {{0x9d795df4, 0x3fbbdecf} }, +/**/ {{0xb85bf719, 0xbf672003} } }, +/**/ {{{0x00000000, 0x3fc78000} }, +/**/ {{0xe8a7d202, 0x3fc73dbd} }, +/**/ {{0x6d4a665d, 0xbc55ad0f} }, +/**/ {{0xf6ce5590, 0x3feef4e0} }, +/**/ {{0x556900ef, 0xbc833df6} }, +/**/ {{0xedcc9488, 0xbfc5fe0f} }, +/**/ {{0xd2b9e35c, 0x3c5078de} }, +/**/ {{0x210cab36, 0xbfd15c5a} }, +/**/ {{0xf55e532a, 0x3c67fa93} }, +/**/ {{0x5efd9a41, 0x3fc3e349} }, +/**/ {{0xc8573a12, 0xbc6cf709} }, +/**/ {{0x6c903aef, 0x3fbd010a} }, +/**/ {{0x20571328, 0xbfc11e77} }, +/**/ {{0x9a1875dd, 0xbfa33c04} }, +/**/ {{0xb09ec0ce, 0x3fbbd491} }, +/**/ {{0x35537a65, 0xbf78d197} } }, +/**/ {{{0x00000000, 0x3fc80000} }, +/**/ {{0x4bce5b02, 0x3fc7b97b} }, +/**/ {{0xb4f881ca, 0x3c5347b0} }, +/**/ {{0xf8458e02, 0x3feee9c7} }, +/**/ {{0x7ba71fe1, 0xbc616380} }, +/**/ {{0x26d69eeb, 0xbfc665c2} }, +/**/ {{0xfdb5eea8, 0xbc572a33} }, +/**/ {{0xb737e8f3, 0xbfd1344b} }, +/**/ {{0x62badf41, 0xbc757b70} }, +/**/ {{0x8b929b0b, 0x3fc42aca} }, +/**/ {{0x7a8b7d91, 0x3c43cdb5} }, +/**/ {{0xf683981c, 0x3fbc32d8} }, +/**/ {{0xd22d5ecc, 0xbfc13e9a} }, +/**/ {{0xd35c8c33, 0xbfa17f3e} }, +/**/ {{0x2a73307e, 0x3fbbc2ee} }, +/**/ {{0x2bddc834, 0xbf82ee04} } }, +/**/ {{{0x00000000, 0x3fc88000} }, +/**/ {{0xe398ebc8, 0x3fc8350b} }, +/**/ {{0x32b9c90d, 0xbc55a913} }, +/**/ {{0x5cfce04c, 0x3feede7b} }, +/**/ {{0x3b51a72f, 0x3c8507c2} }, +/**/ {{0x6067718b, 0xbfc6cc82} }, +/**/ {{0xdbfc430f, 0x3c6d00ca} }, +/**/ {{0x4fbf6fe8, 0xbfd10bb0} }, +/**/ {{0x53749c72, 0x3c321748} }, +/**/ {{0x699a36ad, 0x3fc47046} }, +/**/ {{0x3994d40c, 0xbc63924c} }, +/**/ {{0x0dfb7483, 0x3fbb6338} }, +/**/ {{0x42ee5820, 0xbfc15bb5} }, +/**/ {{0x385194fc, 0xbf9f879b} }, +/**/ {{0x57d040e9, 0x3fbbaa05} }, +/**/ {{0xada71ca0, 0xbf895566} } }, +/**/ {{{0x00000000, 0x3fc90000} }, +/**/ {{0xe2879c29, 0x3fc8b06e} }, +/**/ {{0x30308c4f, 0xbc6118cd} }, +/**/ {{0x9ec57f51, 0x3feed2fb} }, +/**/ {{0xc0d106ba, 0xbc83fdc5} }, +/**/ {{0x58b40d27, 0xbfc7324d} }, +/**/ {{0xfc062163, 0x3c68e240} }, +/**/ {{0xf8b8a2bf, 0xbfd0e28b} }, +/**/ {{0x64c55b39, 0xbc7b8d8a} }, +/**/ {{0x8ff46730, 0x3fc4b3b9} }, +/**/ {{0x988563da, 0xbc5af146} }, +/**/ {{0x1277a10d, 0x3fba924c} }, +/**/ {{0x2bbfd54d, 0xbfc175c9} }, +/**/ {{0x6c522340, 0xbf9c1448} }, +/**/ {{0x044f2f6b, 0x3fbb89fa} }, +/**/ {{0xaaecc742, 0xbf8f9cc7} } }, +/**/ {{{0x00000000, 0x3fc98000} }, +/**/ {{0x7d050272, 0x3fc92ba3} }, +/**/ {{0xd0ff4764, 0xbc60d3de} }, +/**/ {{0x390b6afe, 0x3feec749} }, +/**/ {{0x4e3659ca, 0xbc5c3d17} }, +/**/ {{0xe659b3de, 0xbfc7971f} }, +/**/ {{0x373f554d, 0x3c4cab11} }, +/**/ {{0xc6b052a4, 0xbfd0b8e2} }, +/**/ {{0x6f3b74bc, 0x3c7da014} }, +/**/ {{0xf0432146, 0x3fc4f520} }, +/**/ {{0xa8027290, 0xbc6769ad} }, +/**/ {{0x3e17b570, 0x3fb9c039} }, +/**/ {{0x0d8833a4, 0xbfc18cda} }, +/**/ {{0x4627d340, 0xbf98a567} }, +/**/ {{0x5e42eff7, 0x3fbb62f1} }, +/**/ {{0x7ee3bed3, 0xbf92e10a} } }, +/**/ {{{0x00000000, 0x3fca0000} }, +/**/ {{0xe96c8626, 0x3fc9a6a8} }, +/**/ {{0xe7b4348e, 0x3c4cf601} }, +/**/ {{0xa8c932d7, 0x3feebb64} }, +/**/ {{0x79aae302, 0x3c20538d} }, +/**/ {{0xf88295fe, 0xbfc7faf6} }, +/**/ {{0x932909e9, 0xbc687a81} }, +/**/ {{0xd3f5a07b, 0xbfd08eb8} }, +/**/ {{0xfb7d6aaa, 0xbc620a05} }, +/**/ {{0xd6814372, 0x3fc53479} }, +/**/ {{0x0a0c6620, 0xbc53c682} }, +/**/ {{0x9c562d77, 0x3fb8ed23} }, +/**/ {{0x2cdd89fd, 0xbfc1a0ec} }, +/**/ {{0xfec9df82, 0xbf953bd4} }, +/**/ {{0xd9d3f0f6, 0x3fbb3512} }, +/**/ {{0x4534ccf5, 0xbf95e1ab} } }, +/**/ {{{0x00000000, 0x3fca8000} }, +/**/ {{0x601081a6, 0x3fca217e} }, +/**/ {{0xa60af374, 0xbc60def8} }, +/**/ {{0x6c7ba732, 0x3feeaf4e} }, +/**/ {{0xe91fffe1, 0x3c89fa72} }, +/**/ {{0x970642c3, 0xbfc85dcf} }, +/**/ {{0x5b7f0ad0, 0xbc5732c2} }, +/**/ {{0x3fe5c74d, 0xbfd06412} }, +/**/ {{0x4a82f9b1, 0xbc7d0053} }, +/**/ {{0xe882973d, 0x3fc571c1} }, +/**/ {{0x9090f12c, 0x3c59d9a3} }, +/**/ {{0x00f5d0e0, 0x3fb8192f} }, +/**/ {{0x8db53983, 0xbfc1b204} }, +/**/ {{0xbdd7b47e, 0xbf91d869} }, +/**/ {{0x1355a903, 0x3fbb0088} }, +/**/ {{0x724a2ad9, 0xbf98cf57} } }, +/**/ {{{0x00000000, 0x3fcb0000} }, +/**/ {{0x1b403279, 0x3fca9c23} }, +/**/ {{0xe89cca85, 0x3c60e8bb} }, +/**/ {{0x04157b4f, 0x3feea307} }, +/**/ {{0xfd8bf1f0, 0x3c8ad743} }, +/**/ {{0xe285e2fd, 0xbfc8bfa6} }, +/**/ {{0x9c834c8f, 0xbc6ce765} }, +/**/ {{0x2e38fd26, 0xbfd038f3} }, +/**/ {{0xef212a80, 0x3c6a42ec} }, +/**/ {{0x255d65d5, 0x3fc5acf7} }, +/**/ {{0xbe486771, 0xbc619fba} }, +/**/ {{0xff244e15, 0x3fb7447e} }, +/**/ {{0xeed71b69, 0xbfc1c028} }, +/**/ {{0xaceecf68, 0xbf8cf7f0} }, +/**/ {{0xb0ee161b, 0x3fbac57c} }, +/**/ {{0xefc8f53e, 0xbf9ba92d} } }, +/**/ {{{0x00000000, 0x3fcb8000} }, +/**/ {{0x574d780c, 0x3fcb1696} }, +/**/ {{0xfc15a673, 0xbc585ab8} }, +/**/ {{0xf0f2da5a, 0x3fee968e} }, +/**/ {{0x69710f0d, 0xbc6fffe1} }, +/**/ {{0x148444b5, 0xbfc9207a} }, +/**/ {{0x1802fa91, 0xbc66661a} }, +/**/ {{0xc65096ca, 0xbfd00d5f} }, +/**/ {{0x8920e744, 0x3c7f2a2e} }, +/**/ {{0xe4be288d, 0x3fc5e617} }, +/**/ {{0x99be934f, 0x3c67fa48} }, +/**/ {{0xe0d4c87a, 0x3fb66f36} }, +/**/ {{0xc5179ce8, 0xbfc1cb5f} }, +/**/ {{0x1011bb6c, 0xbf864e9c} }, +/**/ {{0x43a75476, 0x3fba841e} }, +/**/ {{0x845fc859, 0xbf9e6e5b} } }, +/**/ {{{0x00000000, 0x3fcc0000} }, +/**/ {{0x529260a2, 0x3fcb90d7} }, +/**/ {{0xd2e0e5ab, 0x3c217b10} }, +/**/ {{0xb5ccf172, 0x3fee89e6} }, +/**/ {{0x153be26a, 0x3c820357} }, +/**/ {{0x7f79bfd6, 0xbfc98046} }, +/**/ {{0xf5d60955, 0xbc0799ee} }, +/**/ {{0x650d32f4, 0xbfcfc2b8} }, +/**/ {{0x4d01b49e, 0xbc6b59de} }, +/**/ {{0xd625e475, 0x3fc61d22} }, +/**/ {{0xe23c6105, 0xbc68013f} }, +/**/ {{0x9e54f300, 0x3fb59979} }, +/**/ {{0x365c2b85, 0xbfc1d3b0} }, +/**/ {{0x0afb6b97, 0xbf7f6cc9} }, +/**/ {{0x28035c12, 0x3fba3c9c} }, +/**/ {{0x8331488a, 0xbfa08f0d} } }, +/**/ {{{0x00000000, 0x3fcc8000} }, +/**/ {{0x4d768467, 0x3fcc0ae5} }, +/**/ {{0xf55f26dc, 0xbc604cdb} }, +/**/ {{0xd6ad70cb, 0x3fee7d0e} }, +/**/ {{0xee20d17d, 0x3c8e6761} }, +/**/ {{0x8ee3fcf8, 0xbfc9df09} }, +/**/ {{0xed723e81, 0x3c62daa3} }, +/**/ {{0x3efdc9b4, 0xbfcf69d9} }, +/**/ {{0x85a20110, 0x3c6c7b6f} }, +/**/ {{0x0013c661, 0x3fc65217} }, +/**/ {{0xab1387be, 0xbc678a0c} }, +/**/ {{0xd61f268e, 0x3fb4c369} }, +/**/ {{0x146d6110, 0xbfc1d922} }, +/**/ {{0xc0b0ed0a, 0xbf726199} }, +/**/ {{0x6629c856, 0x3fb9ef27} }, +/**/ {{0xc1ea955d, 0xbfa1dbda} } }, +/**/ {{{0x00000000, 0x3fcd0000} }, +/**/ {{0x8a742e6e, 0x3fcc84bf} }, +/**/ {{0x0682ea26, 0xbc595bdd} }, +/**/ {{0xd8e205ea, 0x3fee7007} }, +/**/ {{0x7b2991c1, 0x3c816199} }, +/**/ {{0xc751a854, 0xbfca3cc0} }, +/**/ {{0x4efbc78c, 0xbc66a2fd} }, +/**/ {{0x76f43baa, 0xbfcf102a} }, +/**/ {{0x38d996b1, 0x3c6cfc38} }, +/**/ {{0xbf1a9ad6, 0x3fc684f3} }, +/**/ {{0x7c3b6690, 0x3c52eaf7} }, +/**/ {{0xc4ebba84, 0x3fb3ed29} }, +/**/ {{0xd79a6a53, 0xbfc1dbbd} }, +/**/ {{0xfd09510e, 0xbf55fa5b} }, +/**/ {{0x91c74d50, 0x3fb99bf2} }, +/**/ {{0x3002c38b, 0xbfa31d41} } }, +/**/ {{{0x00000000, 0x3fcd8000} }, +/**/ {{0x4e1d5395, 0x3fccfe65} }, +/**/ {{0x3f71eafb, 0x3c647b9a} }, +/**/ {{0x42efd10e, 0x3fee62d2} }, +/**/ {{0xa021973e, 0x3c850a65} }, +/**/ {{0xc66a1be4, 0xbfca9969} }, +/**/ {{0x3753f036, 0x3c326164} }, +/**/ {{0x6b550477, 0xbfceb5b4} }, +/**/ {{0xa3ef610f, 0xbc64cacb} }, +/**/ {{0xc4e2c295, 0x3fc6b5b8} }, +/**/ {{0x98b2ac7f, 0x3c66b228} }, +/**/ {{0x3e03bb80, 0x3fb316db} }, +/**/ {{0x99312ba1, 0xbfc1db8c} }, +/**/ {{0x8536556f, 0x3f5ce5b0} }, +/**/ {{0xa9b62abf, 0x3fb94331} }, +/**/ {{0xb36f42fc, 0xbfa452f3} } }, +/**/ {{{0x00000000, 0x3fce0000} }, +/**/ {{0xdf205736, 0x3fcd77d5} }, +/**/ {{0x1534597e, 0x3c6c648d} }, +/**/ {{0x9c86d7c6, 0x3fee556e} }, +/**/ {{0x34c9abfd, 0xbc830c25} }, +/**/ {{0x42f10c89, 0xbfcaf502} }, +/**/ {{0xf8576d95, 0xbc411261} }, +/**/ {{0x7b1596d9, 0xbfce5a7f} }, +/**/ {{0x78f7ae18, 0x3c574baa} }, +/**/ {{0x171949b1, 0x3fc6e466} }, +/**/ {{0x52f9c399, 0xbc6ff86b} }, +/**/ {{0xa3d6f244, 0x3fb2409f} }, +/**/ {{0x0dceacbf, 0xbfc1d898} }, +/**/ {{0xdc715080, 0x3f73c3b6} }, +/**/ {{0xf78687ab, 0x3fb8e519} }, +/**/ {{0x6b1251ec, 0xbfa57cac} } }, +/**/ {{{0x00000000, 0x3fce8000} }, +/**/ {{0x864c9d9e, 0x3fcdf110} }, +/**/ {{0x53bf4781, 0xbc35818b} }, +/**/ {{0x6e7576a6, 0x3fee47dd} }, +/**/ {{0x24b84595, 0x3c89d322} }, +/**/ {{0x0cc64717, 0xbfcb4f88} }, +/**/ {{0x44bb97a3, 0xbc624035} }, +/**/ {{0x046e8a3b, 0xbfcdfe94} }, +/**/ {{0xd278da00, 0xbc6078ee} }, +/**/ {{0x0e4ccbb7, 0x3fc710fc} }, +/**/ {{0x1da51f71, 0xbc58c89c} }, +/**/ {{0xe0d7022a, 0x3fb16a97} }, +/**/ {{0x7f8b58f8, 0xbfc1d2ea} }, +/**/ {{0xaf259d18, 0x3f800ed5} }, +/**/ {{0xeefd29c7, 0x3fb881e1} }, +/**/ {{0xae6aa0c1, 0xbfa69a2c} } }, +/**/ {{{0x00000000, 0x3fcf0000} }, +/**/ {{0x8e96ec4d, 0x3fce6a14} }, +/**/ {{0x2029f765, 0x3c6866b2} }, +/**/ {{0x429bd423, 0x3fee3a1f} }, +/**/ {{0x48961291, 0xbc86174a} }, +/**/ {{0x0ce18ad9, 0xbfcba8f9} }, +/**/ {{0xb50eb15d, 0x3c62e3e9} }, +/**/ {{0x63927806, 0xbfcda1fa} }, +/**/ {{0x8073bacf, 0xbbed7b15} }, +/**/ {{0x54b8d3bb, 0x3fc73b7b} }, +/**/ {{0x74869c1c, 0x3c602afb} }, +/**/ {{0x60993bd6, 0x3fb094e4} }, +/**/ {{0xc806a157, 0xbfc1ca8e} }, +/**/ {{0xa854d278, 0x3f862263} }, +/**/ {{0x0d9e7452, 0x3fb819c1} }, +/**/ {{0x08743869, 0xbfa7ab3d} } }, +/**/ {{{0x00000000, 0x3fcf8000} }, +/**/ {{0x451d980d, 0x3fcee2e1} }, +/**/ {{0x8c46ba91, 0xbc59a770} }, +/**/ {{0xa3df5666, 0x3fee2c34} }, +/**/ {{0x19a92865, 0xbc8ef949} }, +/**/ {{0x454a9009, 0xbfcc0153} }, +/**/ {{0xda1123ca, 0x3c5572bf} }, +/**/ {{0xf169cd42, 0xbfcd44ba} }, +/**/ {{0xf1052e0a, 0xbc6db0f2} }, +/**/ {{0xe5006ad1, 0x3fc763e4} }, +/**/ {{0x3e902796, 0x3c66e21a} }, +/**/ {{0x12812c7d, 0x3faf7f4a} }, +/**/ {{0x4a558d9d, 0xbfc1bf90} }, +/**/ {{0x2be7fbfd, 0x3f8c1b52} }, +/**/ {{0xba5b0263, 0x3fb7acef} }, +/**/ {{0x2dddf4e5, 0xbfa8afad} } }, +/**/ {{{0x00000000, 0x3fd00000} }, +/**/ {{0xf92c80dd, 0x3fcf5b75} }, +/**/ {{0x3cf7afbd, 0x3c68ab6e} }, +/**/ {{0x1e1e1e1e, 0x3fee1e1e} }, +/**/ {{0x1e1e1e1e, 0x3c6e1e1e} }, +/**/ {{0xd10d4986, 0xbfcc5894} }, +/**/ {{0xc4a6886a, 0x3c5f00e2} }, +/**/ {{0x0253d27e, 0xbfcce6de} }, +/**/ {{0x3c5fce89, 0xbc65d764} }, +/**/ {{0x08d88b02, 0x3fc78a3a} }, +/**/ {{0x32bd57e4, 0x3c4fc5d6} }, +/**/ {{0x6a622b44, 0x3fadd5f2} }, +/**/ {{0xecd7c4e0, 0xbfc1b1fa} }, +/**/ {{0x1fc8b549, 0x3f90fc3e} }, +/**/ {{0x25728acf, 0x3fb73ba7} }, +/**/ {{0xeeba051f, 0xbfa9a753} } }, +/**/ {{{0x00000000, 0x3fd04000} }, +/**/ {{0xfc40dbe4, 0x3fcfd3d1} }, +/**/ {{0xf3a1c5ea, 0x3c437146} }, +/**/ {{0x3e228818, 0x3fee0fdc} }, +/**/ {{0x8c042ef5, 0xbc62e075} }, +/**/ {{0xe42a71b9, 0xbfccaebb} }, +/**/ {{0x8025fd1d, 0xbc69fa0a} }, +/**/ {{0xe4ed28e5, 0xbfcc886b} }, +/**/ {{0x7604b95a, 0xbc59ccc3} }, +/**/ {{0x57a32fb9, 0x3fc7ae7c} }, +/**/ {{0xe36848c2, 0x3c67393b} }, +/**/ {{0x5a1b7b6f, 0x3fac2dff} }, +/**/ {{0x12f690d4, 0xbfc1a1db} }, +/**/ {{0xa575dc1d, 0x3f93dc65} }, +/**/ {{0x28a107f6, 0x3fb6c621} }, +/**/ {{0x23d2c35f, 0xbfaa920f} } }, +/**/ {{{0x00000000, 0x3fd08000} }, +/**/ {{0x510665b6, 0x3fd025fa} }, +/**/ {{0x6832fa48, 0xbc7672df} }, +/**/ {{0x9196b776, 0x3fee016f} }, +/**/ {{0xb14efc08, 0x3c81da3a} }, +/**/ {{0xcb847375, 0xbfcd03c6} }, +/**/ {{0xfc4c6f52, 0xbc6819f2} }, +/**/ {{0xe0dbf8a5, 0xbfcc296c} }, +/**/ {{0x27fb1c17, 0xbc55cc84} }, +/**/ {{0xb4fbbf40, 0x3fc7d0ad} }, +/**/ {{0x41b71641, 0x3c6378b3} }, +/**/ {{0x440404cd, 0x3faa87ad} }, +/**/ {{0x96d156a8, 0xbfc18f3d} }, +/**/ {{0x9ef40490, 0x3f96ad9b} }, +/**/ {{0x27a95e14, 0x3fb64c98} }, +/**/ {{0x97cfdce0, 0xbfab6fc3} } }, +/**/ {{{0x00000000, 0x3fd0c000} }, +/**/ {{0xa03d6291, 0x3fd061ee} }, +/**/ {{0xdb154301, 0xbc45f760} }, +/**/ {{0xa6f82a61, 0x3fedf2d8} }, +/**/ {{0x560866af, 0xbc6cedbb} }, +/**/ {{0xecc8c02c, 0xbfcd57b3} }, +/**/ {{0x85b9541c, 0x3c641512} }, +/**/ {{0x35a209c0, 0xbfcbc9e9} }, +/**/ {{0x4914a5d1, 0x3c65bfd8} }, +/**/ {{0x4f358b07, 0x3fc7f0d0} }, +/**/ {{0x3f47a5cc, 0xbc60dc70} }, +/**/ {{0x50af01c1, 0x3fa8e337} }, +/**/ {{0xc2daf61b, 0xbfc17a2f} }, +/**/ {{0x57b649f0, 0x3f996f63} }, +/**/ {{0xf14fef28, 0x3fb5cf46} }, +/**/ {{0xec5a22c2, 0xbfac405c} } }, +/**/ {{{0x00000000, 0x3fd10000} }, +/**/ {{0x97d86362, 0x3fd09dc5} }, +/**/ {{0x390cb865, 0x3c762e47} }, +/**/ {{0x0d8b5ae6, 0x3fede418} }, +/**/ {{0x23f66cf0, 0x3c719298} }, +/**/ {{0xc655a596, 0xbfcdaa81} }, +/**/ {{0x6a90480b, 0x3c666d0d} }, +/**/ {{0x1974fd6c, 0xbfcb69e9} }, +/**/ {{0xec28723f, 0xbc68e199} }, +/**/ {{0x9dcd2641, 0x3fc80ee6} }, +/**/ {{0x45b4bb82, 0x3c37ccfe} }, +/**/ {{0x64b143be, 0x3fa740d7} }, +/**/ {{0x4b6b7330, 0xbfc162bf} }, +/**/ {{0x7a20d203, 0x3f9c2147} }, +/**/ {{0xa0d6b625, 0x3fb54e68} }, +/**/ {{0x7b6e81ad, 0xbfad03cd} } }, +/**/ {{{0x00000000, 0x3fd14000} }, +/**/ {{0xe509acb3, 0x3fd0d97e} }, +/**/ {{0x7bd5a3eb, 0x3c747c31} }, +/**/ {{0x554f6dcf, 0x3fedd52e} }, +/**/ {{0xddcd060b, 0xbc75c686} }, +/**/ {{0xef1cb578, 0xbfcdfc2e} }, +/**/ {{0xd1677d50, 0xbc46ae20} }, +/**/ {{0xb81cdb34, 0xbfcb0974} }, +/**/ {{0xda61c86c, 0x3c36ed8e} }, +/**/ {{0x5fcd53c1, 0x3fc82af3} }, +/**/ {{0x57b559e7, 0xbc424fe5} }, +/**/ {{0x17013aef, 0x3fa5a0c6} }, +/**/ {{0x484940dd, 0xbfc148fa} }, +/**/ {{0x1737ca6d, 0x3f9ec2da} }, +/**/ {{0x800ba495, 0x3fb4ca38} }, +/**/ {{0x35128042, 0xbfadba0e} } }, +/**/ {{{0x00000000, 0x3fd18000} }, +/**/ {{0x362431ca, 0x3fd1151a} }, +/**/ {{0xc9077b9f, 0xbc74dc8d} }, +/**/ {{0x0ef1f116, 0x3fedc61c} }, +/**/ {{0x2d41c166, 0xbc8fe39f} }, +/**/ {{0x1681d2c9, 0xbfce4cba} }, +/**/ {{0x369a3c18, 0x3c340fb4} }, +/**/ {{0x31d921e2, 0xbfcaa894} }, +/**/ {{0x64c48da4, 0x3c6bf59e} }, +/**/ {{0x9a284cea, 0x3fc844f9} }, +/**/ {{0x629cfeb8, 0xbc563be0} }, +/**/ {{0xa7f26285, 0x3fa4033a} }, +/**/ {{0x2e2d72ea, 0xbfc12cef} }, +/**/ {{0x554d151d, 0x3fa0a9da} }, +/**/ {{0xe9f9174f, 0x3fb442f1} }, +/**/ {{0x799e467c, 0xbfae631e} } }, +/**/ {{{0x00000000, 0x3fd1c000} }, +/**/ {{0x3a9ce547, 0x3fd15097} }, +/**/ {{0x7f9ca328, 0xbc7796ba} }, +/**/ {{0xcbc2abaa, 0x3fedb6e1} }, +/**/ {{0xc39a4e7c, 0xbc823b7a} }, +/**/ {{0x0436f806, 0xbfce9c22} }, +/**/ {{0x885803cb, 0xbc64a5ec} }, +/**/ {{0x9a4c8963, 0xbfca474f} }, +/**/ {{0x6793b663, 0x3c671cf3} }, +/**/ {{0x9606243b, 0x3fc85cfc} }, +/**/ {{0x1dcd45ed, 0x3c5fd2b2} }, +/**/ {{0xf8cc655f, 0x3fa2686a} }, +/**/ {{0xc8460b94, 0xbfc10eac} }, +/**/ {{0x0d6eb5ba, 0x3fa1e9bc} }, +/**/ {{0x2e4749c2, 0x3fb3b8d0} }, +/**/ {{0xf0d19201, 0xbfaeff03} } }, +/**/ {{{0x00000000, 0x3fd20000} }, +/**/ {{0xa30bf178, 0x3fd18bf5} }, +/**/ {{0x748b1bf9, 0x3c630ca4} }, +/**/ {{0x1da7801e, 0x3feda780} }, +/**/ {{0x961ff896, 0xbc861ff8} }, +/**/ {{0x9814cb11, 0xbfceea65} }, +/**/ {{0x34cb01ca, 0xbc5f9845} }, +/**/ {{0xf76f9fa1, 0xbfc9e5ae} }, +/**/ {{0xa3ee6a86, 0x3c688b7a} }, +/**/ {{0xdf090624, 0x3fc872ff} }, +/**/ {{0x6fbad4bb, 0x3c31016f} }, +/**/ {{0x83fe02bc, 0x3fa0d08b} }, +/**/ {{0x31b98637, 0xbfc0ee42} }, +/**/ {{0x5b309f28, 0x3fa320e6} }, +/**/ {{0x755cbc43, 0x3fb32c0e} }, +/**/ {{0x5dea1ddb, 0xbfaf8dca} } }, +/**/ {{{0x00000000, 0x3fd24000} }, +/**/ {{0x212dd884, 0x3fd1c735} }, +/**/ {{0x78cb2f2e, 0xbc67d9ac} }, +/**/ {{0x971063d2, 0x3fed97f7} }, +/**/ {{0xc8b326b7, 0x3c67a20b} }, +/**/ {{0xc9f01359, 0xbfcf3783} }, +/**/ {{0xd0a651ad, 0x3c4a8b96} }, +/**/ {{0x408a6757, 0xbfc983ba} }, +/**/ {{0xe6424f06, 0x3c6dfff9} }, +/**/ {{0x41881aad, 0x3fc88707} }, +/**/ {{0x2204fd29, 0xbc63baf9} }, +/**/ {{0xabd6e10d, 0x3f9e779e} }, +/**/ {{0xcf2eab41, 0xbfc0cbbe} }, +/**/ {{0x1659f377, 0x3fa44f31} }, +/**/ {{0xa54a8a94, 0x3fb29ce7} }, +/**/ {{0xb87973d7, 0xbfb007c1} } }, +/**/ {{{0x00000000, 0x3fd28000} }, +/**/ {{0x67e47c96, 0x3fd20255} }, +/**/ {{0x28f4290e, 0xbc618323} }, +/**/ {{0xcaeb6c2a, 0x3fed8848} }, +/**/ {{0xa08296a2, 0x3c81e70d} }, +/**/ {{0xa96c2792, 0xbfcf837b} }, +/**/ {{0xc6884369, 0xbc6ab5ce} }, +/**/ {{0x5d351cdb, 0xbfc92179} }, +/**/ {{0x68719d81, 0x3c617000} }, +/**/ {{0xc8c1ca07, 0x3fc89916} }, +/**/ {{0x18b0f81b, 0xbc6a3339} }, +/**/ {{0x0caf6121, 0x3f9b54d0} }, +/**/ {{0x485ba392, 0xbfc0a732} }, +/**/ {{0xc250c31e, 0x3fa57477} }, +/**/ {{0x4790b4a8, 0x3fb20b96} }, +/**/ {{0x4ac23178, 0xbfb04223} } }, +/**/ {{{0x00000000, 0x3fd2c000} }, +/**/ {{0x2b381042, 0x3fd23d56} }, +/**/ {{0x16200088, 0xbc5c5317} }, +/**/ {{0x4c98f347, 0x3fed7874} }, +/**/ {{0x9a72647e, 0xbc8a7dac} }, +/**/ {{0x5dca68a2, 0xbfcfce4c} }, +/**/ {{0x8fb9ffdd, 0x3c6433de} }, +/**/ {{0x246041ce, 0xbfc8bef4} }, +/**/ {{0x1fb39160, 0xbc66c620} }, +/**/ {{0xbd062535, 0x3fc8a932} }, +/**/ {{0xfbc3a86c, 0xbc6e24c7} }, +/**/ {{0x64d0109d, 0x3f98390b} }, +/**/ {{0x819f2998, 0xbfc080ac} }, +/**/ {{0x8784ffb8, 0x3fa69099} }, +/**/ {{0x6fc55e9b, 0x3fb17854} }, +/**/ {{0x5f970a81, 0xbfb07618} } }, +/**/ {{{0x00000000, 0x3fd30000} }, +/**/ {{0x2057ef46, 0x3fd27837} }, +/**/ {{0xd36dfc81, 0xbc7077cd} }, +/**/ {{0xafdfd5ba, 0x3fed687a} }, +/**/ {{0xe19d8d3d, 0xbc782e68} }, +/**/ {{0x92db6fdb, 0xbfd00bfa} }, +/**/ {{0xc0af523f, 0x3c7854cd} }, +/**/ {{0x5b640da2, 0xbfc85c32} }, +/**/ {{0x5e6f23d6, 0x3c5d5bdd} }, +/**/ {{0xa1da32d2, 0x3fc8b75f} }, +/**/ {{0x29860bfe, 0x3c2788df} }, +/**/ {{0xee810d60, 0x3f9524ad} }, +/**/ {{0x95a69dea, 0xbfc0583d} }, +/**/ {{0x2b4d3dec, 0x3fa7a379} }, +/**/ {{0xa3290dfe, 0x3fb0e35b} }, +/**/ {{0x19e12287, 0xbfb0a3b2} } }, +/**/ {{{0x00000000, 0x3fd34000} }, +/**/ {{0xfd9b5fe2, 0x3fd2b2f7} }, +/**/ {{0xc1c2d443, 0x3c2423cf} }, +/**/ {{0x88e1caa2, 0x3fed585c} }, +/**/ {{0x01239e18, 0xbc2c8af2} }, +/**/ {{0xab890af7, 0xbfd0303a} }, +/**/ {{0x726290e6, 0x3c7d42bf} }, +/**/ {{0xb5175de0, 0xbfc7f93b} }, +/**/ {{0xe0ddc367, 0x3c5d5d4b} }, +/**/ {{0x3414de7c, 0x3fc8c3a2} }, +/**/ {{0xba92bfce, 0x3c5ade9b} }, +/**/ {{0xda70853d, 0x3f921811} }, +/**/ {{0xcf23aaf0, 0xbfc02df5} }, +/**/ {{0x06445ff8, 0x3fa8acfd} }, +/**/ {{0xc130eba4, 0x3fb04ce4} }, +/**/ {{0x29de3135, 0xbfb0cb04} } }, +/**/ {{{0x00000000, 0x3fd38000} }, +/**/ {{0x7a823cfe, 0x3fd2ed98} }, +/**/ {{0x8ea012ca, 0x3c6b9125} }, +/**/ {{0x6c0fd782, 0x3fed481a} }, +/**/ {{0x85ff74ea, 0x3c82dda4} }, +/**/ {{0x2f5c1e18, 0xbfd053e6} }, +/**/ {{0x8ec637b8, 0xbc679cf2} }, +/**/ {{0xd0ee3e3b, 0xbfc79617} }, +/**/ {{0x732049a6, 0xbc4e91e0} }, +/**/ {{0x67f6478d, 0x3fc8cdff} }, +/**/ {{0xf5079e63, 0xbc5cb659} }, +/**/ {{0x8e8ef686, 0x3f8e271c} }, +/**/ {{0xa2940881, 0xbfc001e5} }, +/**/ {{0xf937caae, 0x3fa9ad0e} }, +/**/ {{0xda1e257f, 0x3faf6a4f} }, +/**/ {{0xb07d42be, 0xbfb0ec24} } }, +/**/ {{{0x00000000, 0x3fd3c000} }, +/**/ {{0x4fb58952, 0x3fd32818} }, +/**/ {{0xa9939f2f, 0xbc7a95f0} }, +/**/ {{0xee1ee130, 0x3fed37b4} }, +/**/ {{0x6fbb1f2d, 0x3c747541} }, +/**/ {{0xe022dd0d, 0xbfd076fc} }, +/**/ {{0x5534523a, 0x3c6d8659} }, +/**/ {{0x3a201d6b, 0xbfc732ce} }, +/**/ {{0xc98a3a62, 0xbc56a551} }, +/**/ {{0x673a29b8, 0x3fc8d67c} }, +/**/ {{0xff95efe6, 0xbc54ae9d} }, +/**/ {{0x74ce6814, 0x3f882eee} }, +/**/ {{0x503ba8f4, 0xbfbfa83b} }, +/**/ {{0x60b63f75, 0x3faaa39c} }, +/**/ {{0xf07ff274, 0x3fae38b8} }, +/**/ {{0x2200fe4d, 0xbfb1072c} } }, +/**/ {{{0x00000000, 0x3fd40000} }, +/**/ {{0x3707ebcc, 0x3fd36277} }, +/**/ {{0x44b672d8, 0xbc6963a5} }, +/**/ {{0xa3fc5b1a, 0x3fed272c} }, +/**/ {{0x272ca3fc, 0x3c8ae01d} }, +/**/ {{0x8aec9d8e, 0xbfd0997e} }, +/**/ {{0x72595f36, 0x3c74aeda} }, +/**/ {{0x66d5c0ff, 0xbfc6cf66} }, +/**/ {{0x3ca66cc1, 0x3c410e2a} }, +/**/ {{0x8f2617b5, 0x3fc8dd1e} }, +/**/ {{0x4facfb67, 0xbc6d173e} }, +/**/ {{0x33966883, 0x3f82483b} }, +/**/ {{0x2b05b16b, 0xbfbf495d} }, +/**/ {{0x074fdeaf, 0x3fab9096} }, +/**/ {{0x9c4605c9, 0x3fad0571} }, +/**/ {{0x280318fd, 0xbfb11c35} } }, +/**/ {{{0x00000000, 0x3fd44000} }, +/**/ {{0xeb76157c, 0x3fd39cb4} }, +/**/ {{0x5a214713, 0xbc72f4da} }, +/**/ {{0x22c31625, 0x3fed1682} }, +/**/ {{0xd5e51b41, 0x3c8ac111} }, +/**/ {{0x07e9a89a, 0xbfd0bb6b} }, +/**/ {{0x7faa1dda, 0x3c76fb53} }, +/**/ {{0xb75f0772, 0xbfc66be7} }, +/**/ {{0xee6d618b, 0xbc69a77d} }, +/**/ {{0x6e943d69, 0x3fc8e1eb} }, +/**/ {{0xc5ec9ebe, 0xbc6982c4} }, +/**/ {{0x9c2d3c0c, 0x3f78e73c} }, +/**/ {{0x7059f387, 0xbfbee752} }, +/**/ {{0x16982f58, 0x3fac73f0} }, +/**/ {{0xc146b407, 0x3fabd0e4} }, +/**/ {{0x82f43254, 0xbfb12b5c} } }, +/**/ {{{0x00000000, 0x3fd48000} }, +/**/ {{0x29271134, 0x3fd3d6d1} }, +/**/ {{0x41cc958a, 0x3c7137ca} }, +/**/ {{0xffb0304c, 0x3fed05b5} }, +/**/ {{0x33e896e5, 0xbc8fc921} }, +/**/ {{0x3a49e254, 0xbfd0dcc2} }, +/**/ {{0x925cb599, 0x3c704578} }, +/**/ {{0x75708502, 0xbfc60859} }, +/**/ {{0x9feebe6c, 0xbc5f88bc} }, +/**/ {{0xc3fb5c1c, 0x3fc8e4e8} }, +/**/ {{0xd6b77a05, 0x3c6de114} }, +/**/ {{0xdbc6c857, 0x3f6ac6b3} }, +/**/ {{0xdeabd793, 0xbfbe823c} }, +/**/ {{0x06fb52a7, 0x3fad4da2} }, +/**/ {{0x2bea698c, 0x3faa9b7b} }, +/**/ {{0xeb32d745, 0xbfb134c0} } }, +/**/ {{{0x00000000, 0x3fd4c000} }, +/**/ {{0xad6c7d33, 0x3fd410cb} }, +/**/ {{0xae13b512, 0xbc7b0c8b} }, +/**/ {{0xd0182625, 0x3fecf4c8} }, +/**/ {{0xf4103798, 0x3c8e6308} }, +/**/ {{0x101a5438, 0xbfd0fd84} }, +/**/ {{0x7d2e3e34, 0x3c425fcd} }, +/**/ {{0xd36904f6, 0xbfc5a4c2} }, +/**/ {{0x54f27bb6, 0x3c5d3583} }, +/**/ {{0x7b74b00c, 0x3fc8e61c} }, +/**/ {{0xefe568b6, 0x3c32f7ad} }, +/**/ {{0xaa3667f2, 0x3f402f60} }, +/**/ {{0x4c9859c0, 0xbfbe1a3e} }, +/**/ {{0x8e77c589, 0x3fae1da6} }, +/**/ {{0x6ed5823e, 0x3fa9659b} }, +/**/ {{0xf1d3d420, 0xbfb13882} } }, +/**/ {{{0x00000000, 0x3fd50000} }, +/**/ {{0x36c2af0a, 0x3fd44aa4} }, +/**/ {{0x3c55b3ba, 0xbc75d5e4} }, +/**/ {{0x295c0773, 0x3fece3bb} }, +/**/ {{0x91851b41, 0xbc826fd5} }, +/**/ {{0x8221a582, 0xbfd11db0} }, +/**/ {{0xa9f31d11, 0x3c7e9654} }, +/**/ {{0xeb9ef661, 0xbfc5412a} }, +/**/ {{0x5e60433c, 0x3c573faf} }, +/**/ {{0xacc06b3a, 0x3fc8e58c} }, +/**/ {{0x64dd81ed, 0xbc5dba9a} }, +/**/ {{0xcfe3f01e, 0xbf625ff7} }, +/**/ {{0x9dae4b1c, 0xbfbdaf78} }, +/**/ {{0x8e4e3e16, 0x3faee3fb} }, +/**/ {{0xc2c60fed, 0x3fa82fa9} }, +/**/ {{0xe13555d9, 0xbfb136c4} } }, +/**/ {{{0x00000000, 0x3fd54000} }, +/**/ {{0x84d0c21b, 0x3fd4845a} }, +/**/ {{0x7563c6a6, 0x3c71e28a} }, +/**/ {{0xa0decfad, 0x3fecd28d} }, +/**/ {{0x49610c12, 0xbc72b2c8} }, +/**/ {{0x93bb8da8, 0xbfd13d47} }, +/**/ {{0x1b48d912, 0x3c5df07a} }, +/**/ {{0xbfb5c8b7, 0xbfc4dd98} }, +/**/ {{0x39a108d7, 0x3c58a9ff} }, +/**/ {{0x99496dc4, 0x3fc8e33f} }, +/**/ {{0x19d3995c, 0x3c380d8b} }, +/**/ {{0xba1bc2d2, 0xbf743d59} }, +/**/ {{0xb77862a1, 0xbfbd420d} }, +/**/ {{0xffb9511c, 0x3fafa0a1} }, +/**/ {{0xe8a86cad, 0x3fa6fa07} }, +/**/ {{0x9d75a109, 0xbfb12faa} } }, +/**/ {{{0x00000000, 0x3fd58000} }, +/**/ {{0x586890e7, 0x3fd4bdee} }, +/**/ {{0x7c22a757, 0xbc6e4dc7} }, +/**/ {{0xcbfae3a7, 0x3fecc140} }, +/**/ {{0xd8b6f9b9, 0xbc41045d} }, +/**/ {{0x52b34cdc, 0xbfd15c49} }, +/**/ {{0x2daa60ac, 0x3c729992} }, +/**/ {{0x37fb39ef, 0xbfc47a13} }, +/**/ {{0x3482d371, 0x3c5cb3b2} }, +/**/ {{0xaa28e022, 0x3fc8df3b} }, +/**/ {{0x969a5447, 0xbc61a8ab} }, +/**/ {{0xc651ecb4, 0xbf7f2135} }, +/**/ {{0x76cc63f7, 0xbfbcd21f} }, +/**/ {{0xefdf4de1, 0x3fb029ce} }, +/**/ {{0x0de3bf96, 0x3fa5c515} }, +/**/ {{0x84e55ab4, 0xbfb12359} } }, +/**/ {{{0x00000000, 0x3fd5c000} }, +/**/ {{0x73869979, 0x3fd4f75f} }, +/**/ {{0xf7ff1108, 0xbc595a1c} }, +/**/ {{0x3ff7b52c, 0x3fecafd5} }, +/**/ {{0x684b6314, 0x3c86e099} }, +/**/ {{0xd71d366e, 0xbfd17ab5} }, +/**/ {{0xae2f7b71, 0x3c602f2c} }, +/**/ {{0x22cc956f, 0xbfc416a1} }, +/**/ {{0xe98c24c1, 0x3c61d29e} }, +/**/ {{0x6e2a4f9f, 0x3fc8d987} }, +/**/ {{0x4a6a7880, 0xbc60de73} }, +/**/ {{0x909e42ec, 0xbf84ed52} }, +/**/ {{0xa56263a8, 0xbfbc5fcf} }, +/**/ {{0x0d159803, 0x3fb07e7b} }, +/**/ {{0xb2ddf20b, 0x3fa4912d} }, +/**/ {{0x508c8585, 0xbfb111f8} } }, +/**/ {{{0x00000000, 0x3fd60000} }, +/**/ {{0x9951cd4a, 0x3fd530ad} }, +/**/ {{0x80884082, 0xbc625664} }, +/**/ {{0x91ff8d87, 0x3fec9e4b} }, +/**/ {{0x1b0da370, 0xbc7723ff} }, +/**/ {{0x432f5908, 0xbfd1988d} }, +/**/ {{0xf8714cda, 0x3c7d065e} }, +/**/ {{0x3403e07c, 0xbfc3b349} }, +/**/ {{0x2717fbb0, 0x3c6b571d} }, +/**/ {{0x97d0e938, 0x3fc8d229} }, +/**/ {{0xb08a0625, 0x3c66b228} }, +/**/ {{0xc2fe9cde, 0xbf8a3464} }, +/**/ {{0xefb6f244, 0xbfbbeb3f} }, +/**/ {{0x39e67c0b, 0x3fb0ce5a} }, +/**/ {{0x93b4fb73, 0x3fa35eab} }, +/**/ {{0xf4d86f78, 0xbfb0fbae} } }, +/**/ {{{0x00000000, 0x3fd64000} }, +/**/ {{0x8e1b4cd8, 0x3fd569d8} }, +/**/ {{0xe713cfe2, 0xbc6fec61} }, +/**/ {{0x57157fc9, 0x3fec8ca4} }, +/**/ {{0x515734ba, 0x3c70da14} }, +/**/ {{0xc3195094, 0xbfd1b5cf} }, +/**/ {{0xa9537e45, 0x3c740cce} }, +/**/ {{0x046cee83, 0xbfc35012} }, +/**/ {{0xe446fd10, 0xbc651b6c} }, +/**/ {{0xfb5e6a95, 0x3fc8c928} }, +/**/ {{0x82469bf3, 0x3c656cd2} }, +/**/ {{0xa4afbb1b, 0xbf8f6568} }, +/**/ {{0xdb3aba50, 0xbfbb7491} }, +/**/ {{0xb9fd56ec, 0x3fb11972} }, +/**/ {{0x9329e15e, 0x3fa22de5} }, +/**/ {{0x8287d93d, 0xbfb0e0a6} } }, +/**/ {{{0x00000000, 0x3fd68000} }, +/**/ {{0x175e0f4e, 0x3fd5a2e0} }, +/**/ {{0x8f82e457, 0x3c713b7a} }, +/**/ {{0x240b83ae, 0x3fec7ae0} }, +/**/ {{0x10d398ed, 0xbc885b56} }, +/**/ {{0x8cdb4db0, 0xbfd1d27d} }, +/**/ {{0x2db0447f, 0x3c11d95f} }, +/**/ {{0x11425541, 0xbfc2ed02} }, +/**/ {{0x6b2cbaa3, 0xbc11d124} }, +/**/ {{0x8cdc5c4d, 0x3fc8be8c} }, +/**/ {{0x794444b0, 0xbc542511} }, +/**/ {{0xd25a5415, 0xbf923ffd} }, +/**/ {{0xbcd1df44, 0xbfbafbe6} }, +/**/ {{0x26bdf05c, 0x3fb15fcc} }, +/**/ {{0xa7b853e6, 0x3fa0ff2f} }, +/**/ {{0x07e9a35f, 0xbfb0c109} } }, +/**/ {{{0x00000000, 0x3fd6c000} }, +/**/ {{0xfbbe768d, 0x3fd5dbc3} }, +/**/ {{0x1b76f7da, 0x3c6ea0ec} }, +/**/ {{0x8d78b9ce, 0x3fec68ff} }, +/**/ {{0x4cb5a0c3, 0xbc83ab41} }, +/**/ {{0xe01c5e6e, 0xbfd1ee96} }, +/**/ {{0xfb76d8dd, 0x3c73922c} }, +/**/ {{0xbbb23677, 0xbfc28a1f} }, +/**/ {{0x288601f2, 0x3c6e592a} }, +/**/ {{0x5e282403, 0x3fc8b25b} }, +/**/ {{0x707e09fa, 0xbbef7d58} }, +/**/ {{0xb65add31, 0xbf94c1e0} }, +/**/ {{0xafa52f1b, 0xbfba815f} }, +/**/ {{0x63712acc, 0x3fb1a16f} }, +/**/ {{0x95a8d3ad, 0x3f9fa5b5} }, +/**/ {{0x72814750, 0xbfb09d01} } }, +/**/ {{{0x00000000, 0x3fd70000} }, +/**/ {{0x0309cfe2, 0x3fd61484} }, +/**/ {{0x15711f00, 0xbc7a7257} }, +/**/ {{0x27afd9eb, 0x3fec5703} }, +/**/ {{0xb32c1d72, 0x3c63c2ab} }, +/**/ {{0x06000419, 0xbfd20a1c} }, +/**/ {{0xf51a3a28, 0xbc7b5fe7} }, +/**/ {{0x486ad2c8, 0xbfc22771} }, +/**/ {{0xf84a7eae, 0xbc499ab5} }, +/**/ {{0x9d027817, 0x3fc8a49c} }, +/**/ {{0x2e376ecc, 0xbc53fcab} }, +/**/ {{0xeaabcb23, 0xbf973831} }, +/**/ {{0x8c46fbce, 0xbfba051d} }, +/**/ {{0x9132e9cc, 0x3fb1de66} }, +/**/ {{0xd48d5d65, 0x3f9d5269} }, +/**/ {{0x712354a4, 0xbfb074bb} } }, +/**/ {{{0x00000000, 0x3fd74000} }, +/**/ {{0xf635c1c6, 0x3fd64d1f} }, +/**/ {{0xe7c0fdbe, 0xbc7fa403} }, +/**/ {{0x86b5cbf8, 0x3fec44eb} }, +/**/ {{0xbc5b562d, 0xbc6a4101} }, +/**/ {{0x50fb21ad, 0xbfd2250d} }, +/**/ {{0xa39bdc1a, 0xbc750066} }, +/**/ {{0xdf2ed728, 0xbfc1c4fc} }, +/**/ {{0x006772e9, 0x3c6a87bb} }, +/**/ {{0x9122b9b7, 0x3fc89557} }, +/**/ {{0x45b04f75, 0xbc05454e} }, +/**/ {{0x6c7888f1, 0xbf99a2c9} }, +/**/ {{0xe02d36ad, 0xbfb98740} }, +/**/ {{0x02a99665, 0x3fb216bd} }, +/**/ {{0xb73aeccb, 0x3f9b0511} }, +/**/ {{0x569b1738, 0xbfb04863} } }, +/**/ {{{0x00000000, 0x3fd78000} }, +/**/ {{0x9f5fa6fe, 0x3fd68597} }, +/**/ {{0x4d1ada9c, 0xbc425781} }, +/**/ {{0x3e386c7f, 0x3fec32b9} }, +/**/ {{0x8cbaa5bf, 0x3c756033} }, +/**/ {{0x1ca84e79, 0xbfd23f6b} }, +/**/ {{0xf123d574, 0x3c604cc0} }, +/**/ {{0x8a715435, 0xbfc162c8} }, +/**/ {{0x454fb8fd, 0x3c5cf6db} }, +/**/ {{0x9a4eb534, 0x3fc88493} }, +/**/ {{0x42b959b0, 0xbc668a5c} }, +/**/ {{0x42580bb5, 0xbf9c0182} }, +/**/ {{0xe5822d56, 0xbfb907e9} }, +/**/ {{0x2f8f8273, 0x3fb24a7f} }, +/**/ {{0xa3527f46, 0x3f98be3c} }, +/**/ {{0xfce97270, 0xbfb01825} } }, +/**/ {{{0x00000000, 0x3fd7c000} }, +/**/ {{0xc9cbd76d, 0x3fd6bdea} }, +/**/ {{0x3e6de828, 0xbc5a5c56} }, +/**/ {{0xe1857d04, 0x3fec206c} }, +/**/ {{0xf5c83872, 0xbc80439f} }, +/**/ {{0xcd9b9870, 0xbfd25935} }, +/**/ {{0xf1ec7306, 0x3c6aaf98} }, +/**/ {{0x36f94d02, 0xbfc100da} }, +/**/ {{0xd96d84ff, 0xbc6e72ca} }, +/**/ {{0x2e774351, 0x3fc87258} }, +/**/ {{0xb8860ef0, 0x3c6c50a2} }, +/**/ {{0x741ef0ec, 0xbf9e543a} }, +/**/ {{0x7b4d0ec2, 0xbfb88738} }, +/**/ {{0xa8164103, 0x3fb279ba} }, +/**/ {{0xa7f1ae35, 0x3f967e73} }, +/**/ {{0x5257c3de, 0xbfafc861} } }, +/**/ {{{0x00000000, 0x3fd80000} }, +/**/ {{0x41e4def1, 0x3fd6f619} }, +/**/ {{0xe6f6e918, 0xbc7c63aa} }, +/**/ {{0x0381c0e0, 0x3fec0e07} }, +/**/ {{0x0381c0e0, 0x3c8c0e07} }, +/**/ {{0xd135c174, 0xbfd2726d} }, +/**/ {{0xe0951cf8, 0xbc2d352d} }, +/**/ {{0xb38cc8cf, 0xbfc09f37} }, +/**/ {{0xae75327f, 0xbc69db81} }, +/**/ {{0xd7da413c, 0x3fc85eac} }, +/**/ {{0x6ebae2bc, 0x3c5b1a89} }, +/**/ {{0x80fcc815, 0xbfa04d69} }, +/**/ {{0x1df326f9, 0xbfb8054c} }, +/**/ {{0x082bda60, 0x3fb2a47e} }, +/**/ {{0x7091d5a4, 0x3f944639} }, +/**/ {{0xe072e48c, 0xbfaf5961} } }, +/**/ {{{0x00000000, 0x3fd84000} }, +/**/ {{0xd53aa2aa, 0x3fd72e22} }, +/**/ {{0x4e79f27c, 0xbc7d9c93} }, +/**/ {{0x36a04729, 0x3febfb88} }, +/**/ {{0x9ac2ea21, 0xbc872745} }, +/**/ {{0x9d7702cf, 0xbfd28b13} }, +/**/ {{0x4be8bff6, 0x3c7819b9} }, +/**/ {{0xb0a35176, 0xbfc03de6} }, +/**/ {{0xc83347af, 0x3c5dbfb0} }, +/**/ {{0x332a4f86, 0x3fc84999} }, +/**/ {{0x0a22d12d, 0x3c5d304e} }, +/**/ {{0xed6b2d30, 0xbfa16a97} }, +/**/ {{0xe0128950, 0xbfb78243} }, +/**/ {{0xeaa98f57, 0x3fb2cad8} }, +/**/ {{0x3bb39c5b, 0x3f92160a} }, +/**/ {{0x3804caa3, 0xbfaee3a9} } }, +/**/ {{{0x00000000, 0x3fd88000} }, +/**/ {{0x52817502, 0x3fd76607} }, +/**/ {{0x91cc7600, 0xbc4dd117} }, +/**/ {{0x0cd9e1fe, 0x3febe8f1} }, +/**/ {{0xa21e102a, 0xbc7a9688} }, +/**/ {{0xb0d161e9, 0xbfd2a327} }, +/**/ {{0x14b44140, 0xbc60a2a9} }, +/**/ {{0x803f8d3b, 0xbfbfb9d9} }, +/**/ {{0x2a5c4097, 0x3c5e5779} }, +/**/ {{0xedbcc363, 0x3fc83324} }, +/**/ {{0xa0442744, 0x3c651fbc} }, +/**/ {{0xe91477c3, 0xbfa2819b} }, +/**/ {{0x63b6abf0, 0xbfb6fe3e} }, +/**/ {{0xdc73a89a, 0x3fb2ecdb} }, +/**/ {{0xaa755298, 0x3f8fdcb7} }, +/**/ {{0x237c2f3d, 0xbfae6793} } }, +/**/ {{{0x00000000, 0x3fd8c000} }, +/**/ {{0x899118d1, 0x3fd79dc6} }, +/**/ {{0xa0ef606d, 0x3c2b7413} }, +/**/ {{0x17a4cbc3, 0x3febd642} }, +/**/ {{0x3200a548, 0xbc55ee5d} }, +/**/ {{0x91faa133, 0xbfd2baaa} }, +/**/ {{0xfaf41548, 0xbc6bd391} }, +/**/ {{0xaa22d832, 0xbfbef89e} }, +/**/ {{0xc874fdb9, 0x3c413b3b} }, +/**/ {{0xc3be300a, 0x3fc81b57} }, +/**/ {{0xc01a615f, 0x3c6baf9b} }, +/**/ {{0x4a872ec7, 0xbfa3926a} }, +/**/ {{0xd3e743cd, 0xbfb67959} }, +/**/ {{0x4f919505, 0x3fb30a98} }, +/**/ {{0x28b78b08, 0x3f8b9f3b} }, +/**/ {{0x71e33e9d, 0xbfade57b} } }, +/**/ {{{0x00000000, 0x3fd90000} }, +/**/ {{0x4b63b3f7, 0x3fd7d560} }, +/**/ {{0x5c2b249a, 0x3c769c88} }, +/**/ {{0xe7ec7a8d, 0x3febc37b} }, +/**/ {{0x2b0e2727, 0xbc6f1246} }, +/**/ {{0xcfbdd7fa, 0xbfd2d19c} }, +/**/ {{0x5e00c582, 0x3c7d0b11} }, +/**/ {{0x86f8309b, 0xbfbe3827} }, +/**/ {{0xfa6c56a7, 0x3c5d64e9} }, +/**/ {{0x7e6de8de, 0x3fc80239} }, +/**/ {{0x7776e849, 0x3c68d62f} }, +/**/ {{0x4f6d8017, 0xbfa49cf9} }, +/**/ {{0xde917e27, 0xbfb5f3b3} }, +/**/ {{0x8e455cc2, 0x3fb32420} }, +/**/ {{0xb9fc88fe, 0x3f877470} }, +/**/ {{0xc6b10536, 0xbfad5dbd} } }, +/**/ {{{0x00000000, 0x3fd94000} }, +/**/ {{0x6a14b1d1, 0x3fd80cd4} }, +/**/ {{0x9684fa19, 0xbc7e79f9} }, +/**/ {{0x0e09a222, 0x3febb09f} }, +/**/ {{0x7e047edd, 0x3c85748e} }, +/**/ {{0x00ccbbc8, 0xbfd2e7ff} }, +/**/ {{0x96875561, 0xbc78eb0a} }, +/**/ {{0x804ecc06, 0xbfbd787e} }, +/**/ {{0x2e4351f8, 0xbc27263b} }, +/**/ {{0xf260d7b4, 0x3fc7e7d1} }, +/**/ {{0x8ed258e3, 0xbc430525} }, +/**/ {{0x968d3d02, 0xbfa5a140} }, +/**/ {{0xaecb845e, 0xbfb56d69} }, +/**/ {{0xae292f95, 0x3fb33987} }, +/**/ {{0x48e09ecd, 0x3f835d1d} }, +/**/ {{0x6b6f9aca, 0xbfacd0b5} } }, +/**/ {{{0x00000000, 0x3fd98000} }, +/**/ {{0xb8df95d7, 0x3fd84422} }, +/**/ {{0x299b41b6, 0x3c7d76a0} }, +/**/ {{0x19ba64d6, 0x3feb9dac} }, +/**/ {{0xa13ee09f, 0xbc4f643a} }, +/**/ {{0xc390a5c9, 0xbfd2fdd1} }, +/**/ {{0xaa856fcc, 0x3c575152} }, +/**/ {{0xc0e99751, 0xbfbcb9ad} }, +/**/ {{0x1347a357, 0x3c4e2d44} }, +/**/ {{0xfdcbfd40, 0x3fc7cc28} }, +/**/ {{0xe516db08, 0x3c60dc32} }, +/**/ {{0x19851d86, 0xbfa69f39} }, +/**/ {{0xe772087d, 0xbfb4e697} }, +/**/ {{0x835992de, 0x3fb34ae1} }, +/**/ {{0xe5326389, 0x3f7eb3f1} }, +/**/ {{0x234575e8, 0xbfac3ebd} } }, +/**/ {{{0x00000000, 0x3fd9c000} }, +/**/ {{0x0c1ebedc, 0x3fd87b4b} }, +/**/ {{0xa2fa470f, 0xbc76dcfa} }, +/**/ {{0x9a1ab378, 0x3feb8aa3} }, +/**/ {{0xb797ab93, 0x3c8efdb0} }, +/**/ {{0xbdfb5e5a, 0xbfd31315} }, +/**/ {{0x862f0c0d, 0x3c5813a8} }, +/**/ {{0x3478f169, 0xbfbbfbbf} }, +/**/ {{0xd9e52582, 0xbc51e810} }, +/**/ {{0x86d6ec76, 0x3fc7af46} }, +/**/ {{0x3c13b159, 0xbc6336de} }, +/**/ {{0x264b8050, 0xbfa796dd} }, +/**/ {{0x9e1f6bef, 0xbfb45f5a} }, +/**/ {{0x93b26fc1, 0x3fb35842} }, +/**/ {{0x39bc3abf, 0x3f76d75e} }, +/**/ {{0x006e38b2, 0xbfaba82f} } }, +/**/ {{{0x00000000, 0x3fda0000} }, +/**/ {{0x394a1b25, 0x3fd8b24d} }, +/**/ {{0xa3748fa8, 0x3c7b6d0b} }, +/**/ {{0x1d9cdc98, 0x3feb7786} }, +/**/ {{0x345bd7a8, 0xbc62e22c} }, +/**/ {{0x9d57b8f5, 0xbfd327cb} }, +/**/ {{0x753cc4f1, 0xbc135343} }, +/**/ {{0x8761b154, 0xbfbb3ebc} }, +/**/ {{0x8c168fdd, 0x3c5abeec} }, +/**/ {{0x79f68c54, 0x3fc79132} }, +/**/ {{0xd8d15eda, 0xbc658ab9} }, +/**/ {{0x5872d73c, 0xbfa88828} }, +/**/ {{0x567be750, 0xbfb3d7cd} }, +/**/ {{0x0a24fc71, 0x3fb361c0} }, +/**/ {{0x46aa98b6, 0x3f6e4b7a} }, +/**/ {{0x3bad3a76, 0xbfab0d64} } }, +/**/ {{{0x00000000, 0x3fda4000} }, +/**/ {{0x16f5cde8, 0x3fd8e929} }, +/**/ {{0xe12bfafb, 0x3c74c0a7} }, +/**/ {{0x32024b37, 0x3feb6454} }, +/**/ {{0x69cc9b53, 0xbc7987f7} }, +/**/ {{0x161a0a40, 0xbfd33bf4} }, +/**/ {{0x83ff46db, 0x3c7a2321} }, +/**/ {{0x26913418, 0xbfba82af} }, +/**/ {{0x10a559fe, 0x3c3c4c62} }, +/**/ {{0xc8506679, 0x3fc771f4} }, +/**/ {{0x63c7ccc3, 0xbc54aaed} }, +/**/ {{0x9237e7ff, 0xbfa97317} }, +/**/ {{0xfde5f112, 0xbfb3500a} }, +/**/ {{0xaa2c3459, 0x3fb3676f} }, +/**/ {{0x04721907, 0x3f5e80cd} }, +/**/ {{0x0dc212a5, 0xbfaa6eb5} } }, +/**/ {{{0x00000000, 0x3fda8000} }, +/**/ {{0x7cd0c662, 0x3fd91fde} }, +/**/ {{0x88054b53, 0x3c710741} }, +/**/ {{0x6454751c, 0x3feb510e} }, +/**/ {{0x7e0f2dca, 0xbc199bfd} }, +/**/ {{0xe3b081f4, 0xbfd34f8f} }, +/**/ {{0x3e2c0515, 0x3c7d7209} }, +/**/ {{0x3f5e2d2f, 0xbfb9c7a0} }, +/**/ {{0xea3bd312, 0xbc20b02e} }, +/**/ {{0x6626c39a, 0x3fc75195} }, +/**/ {{0xb4219a8a, 0x3c6f30d2} }, +/**/ {{0xf55dfea5, 0xbfaa57a8} }, +/**/ {{0xe771fa17, 0xbfb2c82d} }, +/**/ {{0xc3654ab4, 0x3fb36967} }, +/**/ {{0xa23eb6eb, 0x3f11f322} }, +/**/ {{0x8ae579b1, 0xbfa9cc78} } }, +/**/ {{{0x00000000, 0x3fdac000} }, +/**/ {{0x43a34907, 0x3fd9566d} }, +/**/ {{0x37e0af2b, 0x3c69b015} }, +/**/ {{0x40ddf8d3, 0x3feb3db5} }, +/**/ {{0x793c10b8, 0xbc616f46} }, +/**/ {{0xc8537217, 0xbfd3629f} }, +/**/ {{0x38143614, 0x3c505738} }, +/**/ {{0xbf75f20a, 0xbfb90d98} }, +/**/ {{0x6b842647, 0x3c4dc715} }, +/**/ {{0x494dd1e6, 0x3fc7301c} }, +/**/ {{0xf49f85b4, 0x3c5ec3d6} }, +/**/ {{0xdbdd23b1, 0xbfab35db} }, +/**/ {{0xc8407216, 0xbfb2404f} }, +/**/ {{0x255139f9, 0x3fb367bf} }, +/**/ {{0x65acd6da, 0xbf5b8a0d} }, +/**/ {{0x8052f51d, 0xbfa92704} } }, +/**/ {{{0x00000000, 0x3fdb0000} }, +/**/ {{0x454d6b18, 0x3fd98cd5} }, +/**/ {{0x88fd0a77, 0x3c79e6c9} }, +/**/ {{0x5323eb6a, 0x3feb2a49} }, +/**/ {{0x70cc9678, 0xbc572202} }, +/**/ {{0x8cd58cc4, 0xbfd37524} }, +/**/ {{0xda42aa4e, 0x3c6978a3} }, +/**/ {{0x54d5f784, 0xbfb854a1} }, +/**/ {{0xb33b3d0d, 0xbc5e9a15} }, +/**/ {{0x67aa0c46, 0x3fc70d91} }, +/**/ {{0xa4ac9df8, 0xbc6aa72f} }, +/**/ {{0xd0665a46, 0xbfac0db0} }, +/**/ {{0xb428e30d, 0xbfb1b889} }, +/**/ {{0x134448b0, 0x3fb3628d} }, +/**/ {{0x67619c9c, 0xbf6bbbc1} }, +/**/ {{0x53e1f653, 0xbfa87ead} } }, +/**/ {{{0x00000000, 0x3fdb4000} }, +/**/ {{0x5cc58107, 0x3fd9c316} }, +/**/ {{0x02250cfb, 0x3c4b6696} }, +/**/ {{0x25df55f4, 0x3feb16cb} }, +/**/ {{0xf48e26bc, 0xbc653abc} }, +/**/ {{0x00742189, 0xbfd3871f} }, +/**/ {{0xc05df451, 0xbc725ae2} }, +/**/ {{0x6dd13675, 0xbfb79cc2} }, +/**/ {{0x991905e4, 0x3be1d4e0} }, +/**/ {{0xb5b8147e, 0x3fc6e9fc} }, +/**/ {{0xa57d4eca, 0x3c46463b} }, +/**/ {{0x86c1db89, 0xbfacdf29} }, +/**/ {{0x1ab8d1c4, 0xbfb130f4} }, +/**/ {{0x38881228, 0x3fb359e9} }, +/**/ {{0x53bec2ff, 0xbf74a987} }, +/**/ {{0xe5af58b6, 0xbfa7d3c5} } }, +/**/ {{{0x00000000, 0x3fdb8000} }, +/**/ {{0x66168002, 0x3fd9f930} }, +/**/ {{0x47c9439a, 0xbc7c8270} }, +/**/ {{0x42f6e2c9, 0x3feb033b} }, +/**/ {{0xc48702a7, 0xbc6eb80c} }, +/**/ {{0xf8a76337, 0xbfd3988f} }, +/**/ {{0x5b1bb38a, 0xbc636968} }, +/**/ {{0x39212b04, 0xbfb6e604} }, +/**/ {{0xba255e71, 0xbc3c2e20} }, +/**/ {{0x251e2d41, 0x3fc6c566} }, +/**/ {{0x47236369, 0x3c230ab3} }, +/**/ {{0xd40b3417, 0xbfadaa48} }, +/**/ {{0xc484f2cc, 0xbfb0a9a6} }, +/**/ {{0x9cb4573e, 0x3fb34deb} }, +/**/ {{0x1def6f17, 0xbf7b44ca} }, +/**/ {{0x73d683b8, 0xbfa7269f} } }, +/**/ {{{0x00000000, 0x3fdbc000} }, +/**/ {{0x3e5e530b, 0x3fda2f23} }, +/**/ {{0xf797086b, 0x3c5814d5} }, +/**/ {{0x3378ba79, 0x3feaef9a} }, +/**/ {{0x4476e241, 0x3c7da16a} }, +/**/ {{0x50f2beab, 0xbfd3a978} }, +/**/ {{0xad5a31ea, 0x3c7b7e7f} }, +/**/ {{0xa602212f, 0xbfb6306e} }, +/**/ {{0x9ec38d55, 0xbc31ec15} }, +/**/ {{0xa3477c6a, 0x3fc69fd5} }, +/**/ {{0xb2996038, 0x3c571f2f} }, +/**/ {{0xa6cf162d, 0xbfae6f12} }, +/**/ {{0xd0cb2655, 0xbfb022b8} }, +/**/ {{0x9842912f, 0x3fb33eac} }, +/**/ {{0x4919e78d, 0xbf80d789} }, +/**/ {{0x8037e242, 0xbfa67789} } }, +/**/ {{{0x00000000, 0x3fdc0000} }, +/**/ {{0xc3cc23fd, 0x3fda64ee} }, +/**/ {{0x1b50b7ff, 0xbc724dec} }, +/**/ {{0x7f94905e, 0x3feadbe8} }, +/**/ {{0x7f94905e, 0x3c2adbe8} }, +/**/ {{0xeab54af9, 0xbfd3b9d8} }, +/**/ {{0x54fd0941, 0x3c75b97d} }, +/**/ {{0x645a7f9e, 0xbfb57c09} }, +/**/ {{0x09320811, 0xbc5e79f6} }, +/**/ {{0x180938f2, 0x3fc67953} }, +/**/ {{0xe7aee726, 0x3c6246f2} }, +/**/ {{0xff0ea012, 0xbfaf2d8b} }, +/**/ {{0x66c7250c, 0xbfaf3881} }, +/**/ {{0xc95ff694, 0x3fb32c44} }, +/**/ {{0x25d7ff49, 0xbf83f3f0} }, +/**/ {{0xb848e1d1, 0xbfa5c6d1} } }, +/**/ {{{0x00000000, 0x3fdc4000} }, +/**/ {{0xd59e98cf, 0x3fda9a92} }, +/**/ {{0xff75d817, 0x3c42e42d} }, +/**/ {{0xae95dea9, 0x3feac826} }, +/**/ {{0x633dec57, 0xbc534eec} }, +/**/ {{0xacfa5b18, 0xbfd3c9b2} }, +/**/ {{0x6c4d8d27, 0x3c7a7e0c} }, +/**/ {{0xe4ecc0f6, 0xbfb4c8db} }, +/**/ {{0xc0c32772, 0xbc534990} }, +/**/ {{0x6451e377, 0x3fc651e6} }, +/**/ {{0x2a9bb1f1, 0xbc6ea814} }, +/**/ {{0xe62bc1b2, 0xbfafe5ba} }, +/**/ {{0x65fe3642, 0xbfae2ca8} }, +/**/ {{0x09015968, 0x3fb316cd} }, +/**/ {{0x3ce97a26, 0xbf86f764} }, +/**/ {{0xdee8421b, 0xbfa514c3} } }, +/**/ {{{0x00000000, 0x3fdc8000} }, +/**/ {{0x5422058b, 0x3fdad00f} }, +/**/ {{0x3891d2e8, 0x3c7fc4c3} }, +/**/ {{0x46de51cf, 0x3feab455} }, +/**/ {{0xdbc38cc9, 0xbc5b834a} }, +/**/ {{0x844a38eb, 0xbfd3d906} }, +/**/ {{0xbc44eee8, 0x3c6198e5} }, +/**/ {{0x5993cade, 0xbfb416ed} }, +/**/ {{0xfa289b6c, 0xbc235ccb} }, +/**/ {{0x60e2a3af, 0x3fc62997} }, +/**/ {{0xcf7bda0e, 0xbc69a660} }, +/**/ {{0x33612b72, 0xbfb04bd3} }, +/**/ {{0xcf62bcd9, 0xbfad2210} }, +/**/ {{0x603bfc37, 0x3fb2fe5e} }, +/**/ {{0xa9bce7ec, 0xbf89e1ba} }, +/**/ {{0xb83029d5, 0xbfa461a9} } }, +/**/ {{{0x00000000, 0x3fdcc000} }, +/**/ {{0x20ae9344, 0x3fdb0564} }, +/**/ {{0x46363455, 0xbc793139} }, +/**/ {{0xcde0631f, 0x3feaa074} }, +/**/ {{0x143fe6d4, 0x3c84b49a} }, +/**/ {{0x627b115b, 0xbfd3e7d5} }, +/**/ {{0x332989c0, 0x3c77a502} }, +/**/ {{0xb589513f, 0xbfb36644} }, +/**/ {{0x105eec96, 0x3c3abdc9} }, +/**/ {{0xdd12e0be, 0x3fc6006d} }, +/**/ {{0x5d67cb35, 0xbc4f0281} }, +/**/ {{0x4238ba83, 0xbfb0a1ab} }, +/**/ {{0x73889526, 0xbfac18e3} }, +/**/ {{0xfde6351a, 0x3fb2e311} }, +/**/ {{0xc256833f, 0xbf8cb2d2} }, +/**/ {{0xf73e36f0, 0xbfa3adca} } }, +/**/ {{{0x00000000, 0x3fdd0000} }, +/**/ {{0x1da65c6c, 0x3fdb3a91} }, +/**/ {{0xb1ca5040, 0x3c7ae187} }, +/**/ {{0xc81a2254, 0x3fea8c85} }, +/**/ {{0x8d67728b, 0xbc83c191} }, +/**/ {{0x3e8218e0, 0xbfd3f620} }, +/**/ {{0x52bd43ef, 0xbc72bf32} }, +/**/ {{0xadb5f398, 0xbfb2b6e8} }, +/**/ {{0x6b74d451, 0x3c340287} }, +/**/ {{0x9d9e25fc, 0x3fc5d671} }, +/**/ {{0x518d7a71, 0x3c639669} }, +/**/ {{0x19cc29a0, 0xbfb0f46a} }, +/**/ {{0xc1a69750, 0xbfab1147} }, +/**/ {{0x2c826e6b, 0x3fb2c501} }, +/**/ {{0xcbc1b186, 0xbf8f6a95} }, +/**/ {{0x2de89811, 0xbfa2f96d} } }, +/**/ {{{0x00000000, 0x3fdd4000} }, +/**/ {{0x2e737efc, 0x3fdb6f96} }, +/**/ {{0x64981e71, 0xbc5ca534} }, +/**/ {{0xb9102ddc, 0x3fea7888} }, +/**/ {{0x3c46d7d5, 0xbc7791b2} }, +/**/ {{0x1444efb5, 0xbfd403e8} }, +/**/ {{0x4f3d22a6, 0xbc6047c5} }, +/**/ {{0xb90ac1cc, 0xbfb208df} }, +/**/ {{0x2d2115d8, 0x3c4078b1} }, +/**/ {{0x5b7c61a2, 0x3fc5abaa} }, +/**/ {{0x2bd2d19a, 0x3c3eef6a} }, +/**/ {{0xa8850e1a, 0xbfb14414} }, +/**/ {{0xc6580343, 0xbfaa0b63} }, +/**/ {{0x4876cfdf, 0x3fb2a445} }, +/**/ {{0x562d0829, 0xbf91047b} }, +/**/ {{0xbe562a83, 0xbfa244d3} } }, +/**/ {{{0x00000000, 0x3fdd8000} }, +/**/ {{0x378624a5, 0x3fdba473} }, +/**/ {{0xb46e4aff, 0x3c7519a1} }, +/**/ {{0x2348d9a3, 0x3fea647e} }, +/**/ {{0x9156e59f, 0xbc84f6c2} }, +/**/ {{0xe46b4c91, 0xbfd4112d} }, +/**/ {{0x110fe0b7, 0xbc78c11d} }, +/**/ {{0x10e3d572, 0xbfb15c30} }, +/**/ {{0x4427c00b, 0x3c53b45b} }, +/**/ {{0xc2c486ae, 0x3fc5801f} }, +/**/ {{0xc20ced8b, 0xbc49bb5e} }, +/**/ {{0x4cddef65, 0xbfb190b0} }, +/**/ {{0x2ae4bcd0, 0xbfa9075c} }, +/**/ {{0xb69396b9, 0x3fb280f7} }, +/**/ {{0xce179ccb, 0xbf9246f8} }, +/**/ {{0xce6e9b2b, 0xbfa1903f} } }, +/**/ {{{0x00000000, 0x3fddc000} }, +/**/ {{0x1e528192, 0x3fdbd928} }, +/**/ {{0x39af6b66, 0xbc74b154} }, +/**/ {{0x88478403, 0x3fea5066} }, +/**/ {{0xbe71620f, 0xbc85c7e8} }, +/**/ {{0xb430f4ac, 0xbfd41df2} }, +/**/ {{0xe79c7595, 0xbc55db82} }, +/**/ {{0xb173ac76, 0xbfb0b0df} }, +/**/ {{0xe4738d25, 0x3c57f440} }, +/**/ {{0x7199976b, 0x3fc553d9} }, +/**/ {{0x2a872a12, 0x3c54990c} }, +/**/ {{0xd137dd01, 0xbfb1da42} }, +/**/ {{0x350bfdb5, 0xbfa80554} }, +/**/ {{0xdae9e17f, 0x3fb25b31} }, +/**/ {{0xe9e265b4, 0xbf937cc5} }, +/**/ {{0x3d16a202, 0xbfa0dbf0} } }, +/**/ {{{0x00000000, 0x3fde0000} }, +/**/ {{0xc94ec9f0, 0x3fdc0db4} }, +/**/ {{0x70934c34, 0xbc7cc1ce} }, +/**/ {{0x68881898, 0x3fea3c42} }, +/**/ {{0xe5c3bd97, 0x3c8f907f} }, +/**/ {{0x8d38076d, 0xbfd42a37} }, +/**/ {{0x7e19d62d, 0xbc6b8354} }, +/**/ {{0x5a36f1bd, 0xbfb006f4} }, +/**/ {{0xca398c09, 0xbc41701e} }, +/**/ {{0xf7221a2a, 0x3fc526de} }, +/**/ {{0x8041247e, 0xbc211868} }, +/**/ {{0x67b0229a, 0xbfb220d2} }, +/**/ {{0xc74d0c66, 0xbfa7056d} }, +/**/ {{0x0ff472e2, 0x3fb2330d} }, +/**/ {{0x9cb74216, 0xbf94a5e9} }, +/**/ {{0x992b9e1f, 0xbfa02821} } }, +/**/ {{{0x00000000, 0x3fde4000} }, +/**/ {{0x1ff11eb7, 0x3fdc4219} }, +/**/ {{0x434b3eee, 0xbc7b17df} }, +/**/ {{0x437ac09e, 0x3fea2812} }, +/**/ {{0xf9618c21, 0xbc540368} }, +/**/ {{0x7d5ba406, 0xbfd435fd} }, +/**/ {{0x5e0a732a, 0x3c75605b} }, +/**/ {{0x1ce0c104, 0xbfaebce7} }, +/**/ {{0xd4eb3297, 0xbc446d02} }, +/**/ {{0xd289f60b, 0x3fc4f937} }, +/**/ {{0xe736fa8b, 0x3c5b88b7} }, +/**/ {{0xa5f78db4, 0xbfb26465} }, +/**/ {{0x61a972db, 0xbfa607c9} }, +/**/ {{0x9e13b088, 0x3fb208a2} }, +/**/ {{0x06c33653, 0xbf95c26f} }, +/**/ {{0x346237b1, 0xbf9eea1c} } }, +/**/ {{{0x00000000, 0x3fde8000} }, +/**/ {{0x0aad71f9, 0x3fdc7655} }, +/**/ {{0xff7043e4, 0xbc774b8b} }, +/**/ {{0x977fc070, 0x3fea13d6} }, +/**/ {{0xd9440881, 0xbc86c451} }, +/**/ {{0x9682eee2, 0xbfd44145} }, +/**/ {{0xb13901b4, 0x3c74156f} }, +/**/ {{0x2b58de73, 0xbfad6ec5} }, +/**/ {{0xdf653988, 0x3c2ced26} }, +/**/ {{0x720eb232, 0x3fc4caeb} }, +/**/ {{0x92f3f809, 0x3c614246} }, +/**/ {{0x812caa81, 0xbfb2a503} }, +/**/ {{0x22dc20a7, 0xbfa50c86} }, +/**/ {{0xb35de59d, 0x3fb1dc0b} }, +/**/ {{0x4adc8c38, 0xbf96d265} }, +/**/ {{0x35444e0c, 0xbf9d85db} } }, +/**/ {{{0x00000000, 0x3fdec000} }, +/**/ {{0x72f3631b, 0x3fdcaa68} }, +/**/ {{0x81636f48, 0x3c295067} }, +/**/ {{0xe1e381db, 0x3fe9ff8f} }, +/**/ {{0x00701e1c, 0xbc6fffe6} }, +/**/ {{0xee747cac, 0xbfd44c10} }, +/**/ {{0xced401ad, 0xbc7a7f22} }, +/**/ {{0xf898de26, 0xbfac238c} }, +/**/ {{0xdaa7d32f, 0x3c1eb191} }, +/**/ {{0x32160e42, 0x3fc49c01} }, +/**/ {{0x03d0023c, 0x3c649f02} }, +/**/ {{0x49ba4fb7, 0xbfb2e2b3} }, +/**/ {{0xca00d6c7, 0xbfa413c1} }, +/**/ {{0x5bc495cf, 0x3fb1ad61} }, +/**/ {{0x63d0ff69, 0xbf97d5df} }, +/**/ {{0x27af7010, 0xbf9c23eb} } }, +/**/ {{{0x00000000, 0x3fdf0000} }, +/**/ {{0x432c1351, 0x3fdcde53} }, +/**/ {{0x4418f1ad, 0xbc7a2cfa} }, +/**/ {{0x9edacacc, 0x3fe9eb3e} }, +/**/ {{0x87d23ca5, 0xbc8942c5} }, +/**/ {{0x9eaa285d, 0xbfd45660} }, +/**/ {{0x52cf85b4, 0x3c4fe8e6} }, +/**/ {{0x28319af3, 0xbfaadb48} }, +/**/ {{0x31b456b0, 0xbc207b46} }, +/**/ {{0x5c4ee7c2, 0x3fc46c80} }, +/**/ {{0xb4443c76, 0x3c4bdfc1} }, +/**/ {{0xa73bc33f, 0xbfb31d7c} }, +/**/ {{0xb8a731f5, 0xbfa31d98} }, +/**/ {{0x798f7481, 0x3fb17cbc} }, +/**/ {{0xf977e9ca, 0xbf98ccf3} }, +/**/ {{0x36ea1578, 0xbf9ac4b2} } }, +/**/ {{{0x00000000, 0x3fdf4000} }, +/**/ {{0x66b7f2ad, 0x3fdd1215} }, +/**/ {{0x35886c30, 0x3c7be678} }, +/**/ {{0x497f1fed, 0x3fe9d6e3} }, +/**/ {{0x9a35c454, 0xbc8ec056} }, +/**/ {{0xc4255988, 0xbfd46035} }, +/**/ {{0x7144427c, 0x3c7ddb7b} }, +/**/ {{0xe9b44acd, 0xbfa995ff} }, +/**/ {{0xb529cf65, 0x3c3c9d56} }, +/**/ {{0x26dc5cda, 0x3fc43c70} }, +/**/ {{0xfde6cd82, 0x3c6d6ee6} }, +/**/ {{0x9467b39a, 0xbfb35567} }, +/**/ {{0xf54ca1ba, 0xbfa22a25} }, +/**/ {{0xbe2d5d2d, 0x3fb14a35} }, +/**/ {{0x35a34e74, 0xbf99b7bd} }, +/**/ {{0xc4948489, 0xbf996891} } }, +/**/ {{{0x00000000, 0x3fdf8000} }, +/**/ {{0xc9ec862b, 0x3fdd45ae} }, +/**/ {{0x163ef92d, 0x3c689421} }, +/**/ {{0x5bcb52c7, 0x3fe9c27e} }, +/**/ {{0xf148a350, 0xbc892d91} }, +/**/ {{0x7f43bff0, 0xbfd46991} }, +/**/ {{0x8da13c27, 0xbc738b23} }, +/**/ {{0xf9f19dcd, 0xbfa853bc} }, +/**/ {{0x2433c5cf, 0x3c2ea7a9} }, +/**/ {{0xb38b19e0, 0x3fc40bd7} }, +/**/ {{0x1c2a2863, 0xbc5d466e} }, +/**/ {{0x5b0333a7, 0xbfb38a7c} }, +/**/ {{0x2e3896d7, 0xbfa13983} }, +/**/ {{0xa35b7545, 0x3fb115e5} }, +/**/ {{0x99098556, 0xbf9a9658} }, +/**/ {{0x693ac59e, 0xbf980fe6} } }, +/**/ {{{0x00000000, 0x3fdfc000} }, +/**/ {{0x5a1226f5, 0x3fdd791f} }, +/**/ {{0xa5b64a76, 0xbc64017e} }, +/**/ {{0x4e983ae9, 0x3fe9ae10} }, +/**/ {{0x52b783d7, 0xbc8d45ed} }, +/**/ {{0xf394891f, 0xbfd47274} }, +/**/ {{0x22e08713, 0xbc7cd478} }, +/**/ {{0xa445379d, 0xbfa71487} }, +/**/ {{0x831d87b7, 0x3c1569aa} }, +/**/ {{0x0f10bc36, 0x3fc3dabe} }, +/**/ {{0x1cb9bbe6, 0x3bd8df2b} }, +/**/ {{0x8fddd862, 0xbfb3bcc3} }, +/**/ {{0xbcb632d9, 0xbfa04bc8} }, +/**/ {{0x64a26d77, 0x3fb0dfe4} }, +/**/ {{0xd04027d1, 0xbf9b68e6} }, +/**/ {{0xf792c5d9, 0xbf96bb07} } }, +/**/ {{{0x00000000, 0x3fe00000} }, +/**/ {{0x0561bb4f, 0x3fddac67} }, +/**/ {{0x222f65e2, 0x3c7a2b7f} }, +/**/ {{0x9999999a, 0x3fe99999} }, +/**/ {{0x9999999a, 0xbc899999} }, +/**/ {{0x47ae147b, 0xbfd47ae1} }, +/**/ {{0xeb851eb8, 0x3c5eb851} }, +/**/ {{0xc3ece2a5, 0xbfa5d867} }, +/**/ {{0xd7b900af, 0xbc3a485c} }, +/**/ {{0x30553261, 0x3fc3a92a} }, +/**/ {{0x94467382, 0x3c6f06f6} }, +/**/ {{0x0ed80a18, 0xbfb3ec46} }, +/**/ {{0x514d88d8, 0xbf9ec21b} }, +/**/ {{0xf929a833, 0x3fb0a849} }, +/**/ {{0x88dfb80c, 0xbf9c2f8b} }, +/**/ {{0x8245bf09, 0xbf956a49} } }, +/**/ {{{0x00000000, 0x3fe02000} }, +/**/ {{0xbb026974, 0x3fdddf85} }, +/**/ {{0x0c0a1226, 0x3c643bbb} }, +/**/ {{0xb35b2797, 0x3fe9851a} }, +/**/ {{0x18a8fead, 0x3c89cd14} }, +/**/ {{0xa5042a2d, 0xbfd482d7} }, +/**/ {{0xa8224d16, 0x3c0dbc04} }, +/**/ {{0xc56ade02, 0xbfa49f64} }, +/**/ {{0x47da7eea, 0x3c451e52} }, +/**/ {{0xf7c5fe7d, 0x3fc37722} }, +/**/ {{0xd22c4b5c, 0xbc5165be} }, +/**/ {{0xf6f48c5d, 0xbfb4190c} }, +/**/ {{0x58d0c132, 0xbf9cf2cf} }, +/**/ {{0x0ddfdd74, 0x3fb06f2e} }, +/**/ {{0x46e65336, 0xbf9cea6d} }, +/**/ {{0x6423af3b, 0xbf941df9} } }, +/**/ {{{0x00000000, 0x3fe04000} }, +/**/ {{0x6b0744b0, 0x3fde127b} }, +/**/ {{0x6398d4ab, 0xbc52b098} }, +/**/ {{0x113dcc5a, 0x3fe97094} }, +/**/ {{0x4de8c575, 0xbc842780} }, +/**/ {{0x37beb8e5, 0xbfd48a59} }, +/**/ {{0x9dc7541e, 0xbc601dd2} }, +/**/ {{0xa7f2a8fe, 0xbfa36985} }, +/**/ {{0x7437d42d, 0xbc45e414} }, +/**/ {{0x2eb33dd6, 0x3fc344af} }, +/**/ {{0xe3a3193c, 0xbc6d66e9} }, +/**/ {{0xa6763232, 0xbfb44321} }, +/**/ {{0x7217dfc9, 0xbf9b29d6} }, +/**/ {{0xfff8a866, 0x3fb034a7} }, +/**/ {{0x3a6e931d, 0xbf9d99b5} }, +/**/ {{0x4a9f7e19, 0xbf92d661} } }, +/**/ {{{0x00000000, 0x3fe06000} }, +/**/ {{0x066cf51a, 0x3fde4548} }, +/**/ {{0x12ce98f2, 0x3c43a3aa} }, +/**/ {{0x2774fe53, 0x3fe95c06} }, +/**/ {{0x3b851412, 0x3c810dfd} }, +/**/ {{0x2e911e43, 0xbfd49167} }, +/**/ {{0x09466fcd, 0xbc7f6506} }, +/**/ {{0xfedfb0c1, 0xbfa236d0} }, +/**/ {{0x79cb63a9, 0xbc3f6870} }, +/**/ {{0x86b6561c, 0x3fc311d5} }, +/**/ {{0x9543fc9a, 0x3c561982} }, +/**/ {{0xb70aa5a7, 0xbfb46a8d} }, +/**/ {{0xf5ac1efc, 0xbf996756} }, +/**/ {{0xaf7c84b3, 0x3faff19d} }, +/**/ {{0x15ce96b8, 0xbf9e3d8f} }, +/**/ {{0x42726021, 0xbf9193c6} } }, +/**/ {{{0x00000000, 0x3fe08000} }, +/**/ {{0x7f175a34, 0x3fde77eb} }, +/**/ {{0xc1bf3435, 0x3c70e53d} }, +/**/ {{0x69044ba4, 0x3fe94771} }, +/**/ {{0x92d5fbc1, 0xbc7d53e2} }, +/**/ {{0xba91fd89, 0xbfd49802} }, +/**/ {{0xc3c8c4f3, 0x3c71963e} }, +/**/ {{0xf33546d5, 0xbfa1074c} }, +/**/ {{0xc71ad288, 0x3c4bc296} }, +/**/ {{0x99222665, 0x3fc2de9c} }, +/**/ {{0x28dadb64, 0x3c6e4a10} }, +/**/ {{0xfa031cb1, 0xbfb48f5a} }, +/**/ {{0xbc0c6420, 0xbf97ab74} }, +/**/ {{0x876d0f75, 0x3faf7772} }, +/**/ {{0xe431fc96, 0xbf9ed628} }, +/**/ {{0xc64515ec, 0xbf905668} } }, +/**/ {{{0x00000000, 0x3fe0a000} }, +/**/ {{0xc7cf28c4, 0x3fdeaa65} }, +/**/ {{0xeca3bf05, 0x3c62fb2c} }, +/**/ {{0x47bd0aaa, 0x3fe932d6} }, +/**/ {{0x697b6e3c, 0x3c6bdfec} }, +/**/ {{0x0f13a7e8, 0xbfd49e2d} }, +/**/ {{0x20412940, 0x3c6198c5} }, +/**/ {{0x8a4e92df, 0xbf9fb5fe} }, +/**/ {{0x6309a51a, 0xbc3cbb58} }, +/**/ {{0xe67c9829, 0x3fc2ab0a} }, +/**/ {{0x06a4c4ef, 0xbc647643} }, +/**/ {{0x749bc711, 0xbfb4b193} }, +/**/ {{0x27bef265, 0xbf95f651} }, +/**/ {{0x28347ebf, 0x3faefafb} }, +/**/ {{0xe0c06e2f, 0xbf9f63b2} }, +/**/ {{0x9e7b9dd7, 0xbf8e3d09} } }, +/**/ {{{0x00000000, 0x3fe0c000} }, +/**/ {{0xd43f8435, 0x3fdedcb6} }, +/**/ {{0x330884e4, 0xbc5fc976} }, +/**/ {{0x343c31e5, 0x3fe91e35} }, +/**/ {{0x9bb96799, 0xbc8fd46f} }, +/**/ {{0x617d19a1, 0xbfd4a3e7} }, +/**/ {{0xea58b250, 0xbc7d7303} }, +/**/ {{0x9b55d156, 0xbf9d63da} }, +/**/ {{0xd5b4cc6c, 0xbc14bf72} }, +/**/ {{0xd6016a7c, 0x3fc27726} }, +/**/ {{0x435ec4b4, 0x3c4eba22} }, +/**/ {{0x5c52b3c6, 0xbfb4d141} }, +/**/ {{0x2fdd9fbd, 0xbf94480b} }, +/**/ {{0x6d3af4b6, 0x3fae7c63} }, +/**/ {{0x4e61315b, 0xbf9fe65f} }, +/**/ {{0xcea37283, 0xbf8bd8a3} } }, +/**/ {{{0x00000000, 0x3fe0e000} }, +/**/ {{0x98f393d0, 0x3fdf0ede} }, +/**/ {{0x87cb1894, 0xbc72f40a} }, +/**/ {{0x9de85688, 0x3fe9098e} }, +/**/ {{0xa3791e64, 0xbc7c2de1} }, +/**/ {{0xe9238ed7, 0xbfd4a932} }, +/**/ {{0x28864386, 0xbc67a1bb} }, +/**/ {{0x001dec68, 0xbf9b1838} }, +/**/ {{0x8f0ffbdd, 0xbc33ee0e} }, +/**/ {{0xb52e1005, 0x3fc242f6} }, +/**/ {{0x371fd2c1, 0xbc5476eb} }, +/**/ {{0x134edf2d, 0xbfb4ee6f} }, +/**/ {{0x6b13becc, 0xbf92a0bf} }, +/**/ {{0x650f859c, 0x3fadfbd6} }, +/**/ {{0x281586f4, 0xbfa02f31} }, +/**/ {{0x7a73449e, 0xbf898006} } }, +/**/ {{{0x00000000, 0x3fe10000} }, +/**/ {{0x0b541418, 0x3fdf40dd} }, +/**/ {{0xdc382a23, 0xbc6a3992} }, +/**/ {{0xf2efd135, 0x3fe8f4e2} }, +/**/ {{0xd4218911, 0xbc74c3c0} }, +/**/ {{0xdf24b2d1, 0xbfd4ae10} }, +/**/ {{0x79d0ac37, 0x3c713b12} }, +/**/ {{0xd7365f3f, 0xbf98d31f} }, +/**/ {{0x62531dc5, 0xbc18bf3b} }, +/**/ {{0xb7567664, 0x3fc20e80} }, +/**/ {{0xd450197f, 0xbc54a699} }, +/**/ {{0x24d80ddd, 0xbfb50927} }, +/**/ {{0x1b0516ab, 0xbf910088} }, +/**/ {{0x4a356567, 0x3fad797e} }, +/**/ {{0xe14758ed, 0xbfa065f8} }, +/**/ {{0x73d2f6bb, 0xbf87338f} } }, +/**/ {{{0x00000000, 0x3fe12000} }, +/**/ {{0x21a4e495, 0x3fdf72b2} }, +/**/ {{0x0f7eb740, 0x3c5489c2} }, +/**/ {{0xa0470831, 0x3fe8e032} }, +/**/ {{0xe75570cd, 0xbc8c154a} }, +/**/ {{0x7e416c35, 0xbfd4b282} }, +/**/ {{0x60646afd, 0xbc7f1837} }, +/**/ {{0x7a6bec27, 0xbf96949a} }, +/**/ {{0xe6b77ba9, 0x3c38238f} }, +/**/ {{0xf5428c61, 0x3fc1d9ca} }, +/**/ {{0xcd7881aa, 0x3c6a968d} }, +/**/ {{0x41e00b6e, 0xbfb52174} }, +/**/ {{0x702ad3de, 0xbf8ecefa} }, +/**/ {{0x7c8ae0dc, 0x3facf584} }, +/**/ {{0x8aa44fa8, 0xbfa097a2} }, +/**/ {{0x2ed63408, 0xbf84f394} } }, +/**/ {{{0x00000000, 0x3fe14000} }, +/**/ {{0xd3029259, 0x3fdfa45d} }, +/**/ {{0xdc28d8b5, 0xbc7ca563} }, +/**/ {{0x11a6de80, 0x3fe8cb7e} }, +/**/ {{0xac22b8f8, 0x3c610be6} }, +/**/ {{0x02b9488a, 0xbfd4b689} }, +/**/ {{0xaf91d442, 0x3c5ea0bd} }, +/**/ {{0x821fd17e, 0xbf945caf} }, +/**/ {{0x0e51a049, 0x3c38e464} }, +/**/ {{0x6cd45aad, 0x3fc1a4db} }, +/**/ {{0xf4200d5e, 0x3c2288e0} }, +/**/ {{0x3d9dd7c4, 0xbfb53761} }, +/**/ {{0xfb107457, 0xbf8bab68} }, +/**/ {{0x7b46ebd1, 0x3fac7011} }, +/**/ {{0x93134a8f, 0xbfa0c44a} }, +/**/ {{0xf1fa4589, 0xbf82c061} } }, +/**/ {{{0x00000000, 0x3fe16000} }, +/**/ {{0x175fdf83, 0x3fdfd5e0} }, +/**/ {{0x1ec49b15, 0x3c63a87b} }, +/**/ {{0xb18b4749, 0x3fe8b6c5} }, +/**/ {{0xb7d58c0a, 0xbc5fabb8} }, +/**/ {{0xaa26890c, 0xbfd4ba25} }, +/**/ {{0x0ef9b688, 0x3c50e395} }, +/**/ {{0xc8a9b4c0, 0xbf922b65} }, +/**/ {{0xd319146f, 0x3c2835ee} }, +/**/ {{0x00b681bd, 0x3fc16fb8} }, +/**/ {{0x279133b0, 0x3c1df633} }, +/**/ {{0x0a3b410c, 0xbfb54af9} }, +/**/ {{0xebe14682, 0xbf889682} }, +/**/ {{0xdf89e086, 0x3fabe94c} }, +/**/ {{0x0e55a6f8, 0xbfa0ec0e} }, +/**/ {{0x08af68f3, 0xbf809a3e} } }, +/**/ {{{0x00000000, 0x3fe18000} }, +/**/ {{0x73c1a40c, 0x3fe0039c} }, +/**/ {{0x49c9d593, 0xbc8b32c9} }, +/**/ {{0xe931fcd3, 0x3fe8a209} }, +/**/ {{0x8e68c94c, 0x3c6cb8f0} }, +/**/ {{0xb35ad2d8, 0xbfd4bd59} }, +/**/ {{0xcaa606b4, 0xbc61ac1a} }, +/**/ {{0x6dc339ef, 0xbf9000c3} }, +/**/ {{0xaeaeaa73, 0x3c2c62e2} }, +/**/ {{0x7812ee2d, 0x3fc13a66} }, +/**/ {{0x948ffe5b, 0x3c6a8cc2} }, +/**/ {{0xb5955c9c, 0xbfb55c46} }, +/**/ {{0x0fd2b503, 0xbf85906b} }, +/**/ {{0x577de2da, 0x3fab615d} }, +/**/ {{0xa34d31ec, 0xbfa10f0a} }, +/**/ {{0xefe48ad0, 0xbf7d02cb} } }, +/**/ {{{0x00000000, 0x3fe1a000} }, +/**/ {{0x1e82422d, 0x3fe01c34} }, +/**/ {{0xfcca90ee, 0x3c83db44} }, +/**/ {{0x20995a88, 0x3fe88d4b} }, +/**/ {{0x1e42e681, 0x3c802777} }, +/**/ {{0x5e3c840f, 0xbfd4c026} }, +/**/ {{0x3800420d, 0x3c7d7c65} }, +/**/ {{0xb3f88703, 0xbf8bb99b} }, +/**/ {{0x4bf63e82, 0x3c1f62ec} }, +/**/ {{0x7e5193ee, 0x3fc104ec} }, +/**/ {{0xbae4e07d, 0xbc27771e} }, +/**/ {{0x66104515, 0xbfb56b55} }, +/**/ {{0x061a20d1, 0xbf829940} }, +/**/ {{0xa20334d9, 0x3faad868} }, +/**/ {{0x7aba8ee6, 0xbfa12d5e} }, +/**/ {{0x69774b8d, 0xbf78ec1f} } }, +/**/ {{{0x00000000, 0x3fe1c000} }, +/**/ {{0x09250488, 0x3fe034b7} }, +/**/ {{0x8d855410, 0x3c78f9b3} }, +/**/ {{0xbe7f594b, 0x3fe87889} }, +/**/ {{0xc826e7a3, 0xbc7530e1} }, +/**/ {{0xeba4af80, 0xbfd4c28c} }, +/**/ {{0xe6a95faa, 0x3c7104a9} }, +/**/ {{0x846dba10, 0xbf877f13} }, +/**/ {{0x4abd0010, 0x3c2bc924} }, +/**/ {{0xa2deff9f, 0x3fc0cf4f} }, +/**/ {{0xa013c015, 0xbc67d17e} }, +/**/ {{0x577e7899, 0xbfb57830} }, +/**/ {{0xb49ea16d, 0xbf7f6238} }, +/**/ {{0x8ae4a926, 0x3faa4e93} }, +/**/ {{0x2e77f633, 0xbfa14728} }, +/**/ {{0xb81c893e, 0xbf74f0d3} } }, +/**/ {{{0x00000000, 0x3fe1e000} }, +/**/ {{0x314342e6, 0x3fe04d25} }, +/**/ {{0x6442c767, 0xbc81c863} }, +/**/ {{0x2860ad7e, 0x3fe863c6} }, +/**/ {{0x137a2d8f, 0xbc81dcb2} }, +/**/ {{0x9d3dc03a, 0xbfd4c48e} }, +/**/ {{0x197b1db9, 0xbc7d92af} }, +/**/ {{0x5653b1a7, 0xbf8351f6} }, +/**/ {{0x2127dea7, 0xbbe368b4} }, +/**/ {{0x58fa8ca4, 0x3fc09995} }, +/**/ {{0x530429e5, 0xbc446391} }, +/**/ {{0xd81c26eb, 0xbfb582e2} }, +/**/ {{0x3e63c109, 0xbf79b02d} }, +/**/ {{0xe7904294, 0x3fa9c401} }, +/**/ {{0xb933b0f3, 0xbfa15c86} }, +/**/ {{0xd8d860e1, 0xbf711137} } }, +/**/ {{{0x00000000, 0x3fe20000} }, +/**/ {{0x94db30d0, 0x3fe0657e} }, +/**/ {{0x5f6349e6, 0xbc7d5b49} }, +/**/ {{0xc2780614, 0x3fe84f00} }, +/**/ {{0xff3d87fa, 0xbc7fe7b0} }, +/**/ {{0xb562c625, 0xbfd4c62c} }, +/**/ {{0xa78e848c, 0x3c77b2c3} }, +/**/ {{0xb3a4bcb7, 0xbf7e6495} }, +/**/ {{0xe3f2b0a5, 0x3c14eb89} }, +/**/ {{0xf78c0dc4, 0x3fc063c2} }, +/**/ {{0x7539dc13, 0xbc6badf0} }, +/**/ {{0x459eb443, 0xbfb58b78} }, +/**/ {{0x1386e6b4, 0xbf741c83} }, +/**/ {{0x944ff706, 0x3fa938d6} }, +/**/ {{0x66ad4037, 0xbfa16d99} }, +/**/ {{0x01fc736a, 0xbf6a9b1a} } }, +/**/ {{{0x00000000, 0x3fe22000} }, +/**/ {{0x324e9b38, 0x3fe07dc3} }, +/**/ {{0xe04450ac, 0x3c7b70c9} }, +/**/ {{0xefbd6bfe, 0x3fe83a39} }, +/**/ {{0x21f5de26, 0xbc7b2885} }, +/**/ {{0x76ff6c9e, 0xbfd4c768} }, +/**/ {{0xdebc1603, 0x3c56a2c0} }, +/**/ {{0xd9cccfd7, 0xbf76402c} }, +/**/ {{0x4e9786c1, 0xbc1b39c0} }, +/**/ {{0xb900b57a, 0x3fc02ddd} }, +/**/ {{0xea88a215, 0x3c45d916} }, +/**/ {{0x0a58ab40, 0xbfb591fc} }, +/**/ {{0x32a37ac9, 0xbf6d4eb0} }, +/**/ {{0x71fe75f8, 0x3fa8ad33} }, +/**/ {{0xc477a855, 0xbfa17a7f} }, +/**/ {{0x2b035011, 0xbf634c0e} } }, +/**/ {{{0x00000000, 0x3fe24000} }, +/**/ {{0x0861a590, 0x3fe095f3} }, +/**/ {{0x0a15a9f3, 0xbc7121b2} }, +/**/ {{0x11e5c14d, 0x3fe82572} }, +/**/ {{0xacd80b09, 0xbc7df9fc} }, +/**/ {{0x25709bff, 0xbfd4c843} }, +/**/ {{0x1790f484, 0x3c7a9ef6} }, +/**/ {{0x8a0def34, 0xbf6c6d74} }, +/**/ {{0x2a8142d7, 0xbc051e57} }, +/**/ {{0x765e156b, 0x3fbfefd5} }, +/**/ {{0xf0e29c9e, 0xbc3e6048} }, +/**/ {{0x9a724e28, 0xbfb59679} }, +/**/ {{0xcf13e192, 0xbf62a185} }, +/**/ {{0x6433c13f, 0x3fa82139} }, +/**/ {{0x9342e95d, 0xbfa18359} }, +/**/ {{0x8f974107, 0xbf586b34} } }, +/**/ {{{0x00000000, 0x3fe26000} }, +/**/ {{0x1639866c, 0x3fe0ae0e} }, +/**/ {{0xf2de445a, 0x3c7075ab} }, +/**/ {{0x89625f5d, 0x3fe810a9} }, +/**/ {{0x0fcf7262, 0xbc8e4bea} }, +/**/ {{0x0465c69b, 0xbfd4c8be} }, +/**/ {{0xd7f7f89c, 0x3c462ef4} }, +/**/ {{0x4de612d5, 0xbf59210e} }, +/**/ {{0xba53898d, 0xbbf43659} }, +/**/ {{0xfe836c69, 0x3fbf83dd} }, +/**/ {{0x27f5499a, 0xbc36cb56} }, +/**/ {{0x7136edda, 0xbfb598fc} }, +/**/ {{0x00013fb7, 0xbf50634c} }, +/**/ {{0x4fe557c2, 0x3fa79508} }, +/**/ {{0xb8ae41dc, 0xbfa18846} }, +/**/ {{0xe36bd239, 0xbf455fce} } }, +/**/ {{{0x00000000, 0x3fe28000} }, +/**/ {{0x5b5b43da, 0x3fe0c614} }, +/**/ {{0x13b5404f, 0x3c5974fa} }, +/**/ {{0xb560d35c, 0x3fe7fbe0} }, +/**/ {{0xae5a0887, 0xbc84f066} }, +/**/ {{0x57c2e1cb, 0xbfd4c8da} }, +/**/ {{0xe0a3774c, 0x3c73de0e} }, +/**/ {{0x61c69f3c, 0x3f38b341} }, +/**/ {{0x7b200371, 0x3bd7b2e2} }, +/**/ {{0xd351e8ed, 0x3fbf17de} }, +/**/ {{0x650c5a9c, 0x3c5bce38} }, +/**/ {{0x0e77234c, 0xbfb59990} }, +/**/ {{0x99f594ee, 0x3f3006ef} }, +/**/ {{0x1a75a6cc, 0x3fa708bf} }, +/**/ {{0x31a471d5, 0xbfa18967} }, +/**/ {{0x59bf0521, 0x3f24cc7e} } }, +/**/ {{{0x00000000, 0x3fe2a000} }, +/**/ {{0xd7aa6f7d, 0x3fe0de05} }, +/**/ {{0xb1c529ab, 0xbc783684} }, +/**/ {{0xf3cab884, 0x3fe7e717} }, +/**/ {{0x3b1fa4c7, 0x3c7e1b21} }, +/**/ {{0x63830b4b, 0xbfd4c899} }, +/**/ {{0xae3ffeff, 0xbc7b6e32} }, +/**/ {{0xfc06cc4f, 0x3f628757} }, +/**/ {{0x56f01f66, 0xbbb4c155} }, +/**/ {{0x8424efd8, 0x3fbeabe1} }, +/**/ {{0x6e5604ea, 0x3bdf5129} }, +/**/ {{0xf3ffff64, 0xbfb5983f} }, +/**/ {{0x1f564189, 0x3f57ec04} }, +/**/ {{0xa92e6e68, 0x3fa67c7b} }, +/**/ {{0x0542d0ff, 0xbfa186db} }, +/**/ {{0x11a37bde, 0x3f4ee247} } }, +/**/ {{{0x00000000, 0x3fe2c000} }, +/**/ {{0x8b67e295, 0x3fe0f5e2} }, +/**/ {{0x7ec990d0, 0x3be311b1} }, +/**/ {{0xa145af59, 0x3fe7d24f} }, +/**/ {{0xabdb623b, 0xbc83c6d1} }, +/**/ {{0x6b9bdb30, 0xbfd4c7fc} }, +/**/ {{0xd3bbb84b, 0x3c7c2fae} }, +/**/ {{0xc729b366, 0x3f70e125} }, +/**/ {{0x7a19993c, 0x3c1291fb} }, +/**/ {{0x66cf0dd8, 0x3fbe3fef} }, +/**/ {{0xcd5e7640, 0xbc5428b7} }, +/**/ {{0xa3273c21, 0xbfb59517} }, +/**/ {{0x36891acb, 0x3f65adcf} }, +/**/ {{0xe121c017, 0x3fa5f05a} }, +/**/ {{0x384bad65, 0xbfa180c2} }, +/**/ {{0xd31e02a7, 0x3f5bd6f1} } }, +/**/ {{{0x00000000, 0x3fe2e000} }, +/**/ {{0x77307a0d, 0x3fe10daa} }, +/**/ {{0xd44c7b05, 0x3c869c33} }, +/**/ {{0x19337139, 0x3fe7bd88} }, +/**/ {{0x00e777ef, 0xbc7fd248} }, +/**/ {{0xb3e16264, 0xbfd4c704} }, +/**/ {{0xd46ed4e3, 0xbc7ed720} }, +/**/ {{0x62c1daf7, 0x3f7863a5} }, +/**/ {{0x30cc82d1, 0x3c155e73} }, +/**/ {{0x97a241da, 0x3fbdd411} }, +/**/ {{0x9ac44edd, 0x3c27a15a} }, +/**/ {{0x9a6c71a6, 0xbfb59022} }, +/**/ {{0xb5534ebe, 0x3f6f285a} }, +/**/ {{0xa76d3cf7, 0x3fa56478} }, +/**/ {{0xc1240db6, 0xbfa1773c} }, +/**/ {{0x3891a70c, 0x3f63e5a1} } }, +/**/ {{{0x00000000, 0x3fe30000} }, +/**/ {{0x9bfbd2a9, 0x3fe1255d} }, +/**/ {{0xe1c0ee35, 0xbc52bdae} }, +/**/ {{0xb5b1ffa1, 0x3fe7a8c1} }, +/**/ {{0x4e005ea3, 0x3c873e4a} }, +/**/ {{0x7fead5b8, 0xbfd4c5b3} }, +/**/ {{0x55abc25a, 0x3c77958e} }, +/**/ {{0x01e4c970, 0x3f7fcb31} }, +/**/ {{0xc5337fda, 0xbc1ad968} }, +/**/ {{0xf983ecf1, 0x3fbd6850} }, +/**/ {{0x02ed6910, 0xbc3e45e6} }, +/**/ {{0x532f49b6, 0xbfb5896c} }, +/**/ {{0xeaefcf7f, 0x3f7432e2} }, +/**/ {{0xe1db38f0, 0x3fa4d8ef} }, +/**/ {{0x7c5c9def, 0xbfa16a6a} }, +/**/ {{0x7b6fe5d0, 0x3f69a742} } }, +/**/ {{{0x00000000, 0x3fe32000} }, +/**/ {{0xfb1b056e, 0x3fe13cfb} }, +/**/ {{0x6fc3ed38, 0x3c83110e} }, +/**/ {{0xcf9bee6c, 0x3fe793fc} }, +/**/ {{0xd8d91b6c, 0xbc8dc7d2} }, +/**/ {{0x12f7e51f, 0xbfd4c40a} }, +/**/ {{0x0d5d686d, 0x3c7d1e10} }, +/**/ {{0x839d28fa, 0x3f838be8} }, +/**/ {{0x52131640, 0x3c13427a} }, +/**/ {{0x360bfed5, 0x3fbcfcb6} }, +/**/ {{0xa36f599f, 0xbc5e3cb4} }, +/**/ {{0x3f7aa463, 0xbfb58100} }, +/**/ {{0xb76f2bc0, 0x3f78b31e} }, +/**/ {{0x77dd6b80, 0x3fa44dda} }, +/**/ {{0x21c53ca9, 0xbfa15a6b} }, +/**/ {{0x6cd99ed4, 0x3f6f30a7} } }, +/**/ {{{0x00000000, 0x3fe34000} }, +/**/ {{0x9637646a, 0x3fe15485} }, +/**/ {{0x548bf3c3, 0xbc84ba7c} }, +/**/ {{0xbe88c85e, 0x3fe77f39} }, +/**/ {{0x9b6750c8, 0xbc6a983f} }, +/**/ {{0xafd6bee5, 0xbfd4c209} }, +/**/ {{0x5e73e93a, 0x3c7d21ef} }, +/**/ {{0xfc556ca7, 0x3f8724c7} }, +/**/ {{0x42e5673e, 0xbc23cef2} }, +/**/ {{0xbdaef67d, 0x3fbc9149} }, +/**/ {{0x3f04fcdc, 0xbc1e549c} }, +/**/ {{0xc7e4996a, 0xbfb576e9} }, +/**/ {{0xba6ceedb, 0x3f7d14fc} }, +/**/ {{0x53dcdc4a, 0x3fa3c351} }, +/**/ {{0x3a0a53a1, 0xbfa1475e} }, +/**/ {{0x62102619, 0x3f724116} } }, +/**/ {{{0x00000000, 0x3fe36000} }, +/**/ {{0x6f5137e1, 0x3fe16bfa} }, +/**/ {{0xe141bd35, 0x3c79606f} }, +/**/ {{0xd8cd8d65, 0x3fe76a78} }, +/**/ {{0xddf1f71f, 0x3c854a99} }, +/**/ {{0x98cabe40, 0xbfd4bfb3} }, +/**/ {{0x9ef99598, 0xbc61e24d} }, +/**/ {{0x388e6864, 0x3f8ab03d} }, +/**/ {{0xc340d113, 0x3c210541} }, +/**/ {{0xc7f24ec4, 0x3fbc2613} }, +/**/ {{0x0a59af31, 0x3c54042a} }, +/**/ {{0x49833ac1, 0xbfb56b34} }, +/**/ {{0x22f6cd28, 0x3f80ac4f} }, +/**/ {{0x64dac153, 0x3fa3396c} }, +/**/ {{0x14dadf32, 0xbfa13163} }, +/**/ {{0x21aeee27, 0x3f74ce20} } }, +/**/ {{{0x00000000, 0x3fe38000} }, +/**/ {{0x88be7c13, 0x3fe1835a} }, +/**/ {{0xec00c301, 0x3c8c621c} }, +/**/ {{0x737d49ca, 0x3fe755ba} }, +/**/ {{0xd4cb44c6, 0xbc8abaf3} }, +/**/ {{0x0f73c4b3, 0xbfd4bd09} }, +/**/ {{0xa9936e0b, 0x3c3e9ebf} }, +/**/ {{0x8920477f, 0x3f8e2e4f} }, +/**/ {{0x0360e009, 0xbc0889e3} }, +/**/ {{0x53aaefa0, 0x3fbbbb1c} }, +/**/ {{0xa1007b7f, 0xbc5edb26} }, +/**/ {{0x13f5f619, 0xbfb55deb} }, +/**/ {{0xe675741e, 0x3f82bf14} }, +/**/ {{0xa05e0ebf, 0x3fa2b042} }, +/**/ {{0xbf95c5c1, 0xbfa11898} }, +/**/ {{0xe421ee51, 0x3f773faf} } }, +/**/ {{{0x00000000, 0x3fe3a000} }, +/**/ {{0xe5299f9a, 0x3fe19aa5} }, +/**/ {{0x2c58f835, 0xbc8a606c} }, +/**/ {{0xe269c5b3, 0x3fe740fe} }, +/**/ {{0x4c82509c, 0x3c873eff} }, +/**/ {{0x54b63d79, 0xbfd4ba0b} }, +/**/ {{0x75bceeff, 0xbc51d68a} }, +/**/ {{0x9d9b3eb0, 0x3f90cf83} }, +/**/ {{0x68a7ca2f, 0xbc107399} }, +/**/ {{0x27453d35, 0x3fbb506b} }, +/**/ {{0x00bdfedd, 0x3c326b36} }, +/**/ {{0x67836cef, 0xbfb54f19} }, +/**/ {{0x567ed6e8, 0x3f84c2e5} }, +/**/ {{0x04a983e8, 0x3fa227ea} }, +/**/ {{0xfc7ce22f, 0xbfa0fd1d} }, +/**/ {{0x2ffea71d, 0x3f79960c} } }, +/**/ {{{0x00000000, 0x3fe3c000} }, +/**/ {{0x87904285, 0x3fe1b1dc} }, +/**/ {{0x8aef8f29, 0xbc621e8c} }, +/**/ {{0x78244c5a, 0x3fe72c46} }, +/**/ {{0xe664f3a2, 0x3c888c36} }, +/**/ {{0xa8a3ca2f, 0xbfd4b6bb} }, +/**/ {{0x1e1f3e19, 0xbc778793} }, +/**/ {{0xc8a3d8bb, 0x3f928136} }, +/**/ {{0x140daf1c, 0x3c3dc4d8} }, +/**/ {{0xd1165ef3, 0x3fbae607} }, +/**/ {{0x6305876c, 0xbc5fbfaa} }, +/**/ {{0x734b94bd, 0xbfb53eca} }, +/**/ {{0x7c458eb1, 0x3f86b7d8} }, +/**/ {{0x9b360f57, 0x3fa1a077} }, +/**/ {{0x3a6beabd, 0xbfa0df11} }, +/**/ {{0xaf42dc87, 0x3f7bd182} } }, +/**/ {{{0x00000000, 0x3fe3e000} }, +/**/ {{0x7341f64f, 0x3fe1c8fe} }, +/**/ {{0x9d5e792a, 0x3c728bbc} }, +/**/ {{0x85fe8a32, 0x3fe71791} }, +/**/ {{0xe8bbb0d0, 0x3c8f15bd} }, +/**/ {{0x4a6497be, 0xbfd4b31b} }, +/**/ {{0x782968f7, 0x3c737223} }, +/**/ {{0x5e0c3122, 0x3f942c46} }, +/**/ {{0x86422b13, 0xbc33e26a} }, +/**/ {{0xa7b659b8, 0x3fba7bf9} }, +/**/ {{0x25381986, 0xbc3cdf63} }, +/**/ {{0x538deb45, 0xbfb52d09} }, +/**/ {{0xa0c1f425, 0x3f889e08} }, +/**/ {{0x7b6d72e6, 0x3fa119ff} }, +/**/ {{0x8d11287b, 0xbfa0be90} }, +/**/ {{0xbce83ad4, 0x3f7df267} } }, +/**/ {{{0x00000000, 0x3fe40000} }, +/**/ {{0xabdefeb4, 0x3fe1e00b} }, +/**/ {{0x287a668f, 0xbc5928df} }, +/**/ {{0x5c0b8170, 0x3fe702e0} }, +/**/ {{0x5c0b8170, 0x3c7702e0} }, +/**/ {{0x78215a76, 0xbfd4af2b} }, +/**/ {{0xab3a13d8, 0xbc581c2e} }, +/**/ {{0xe9e4a9d0, 0x3f95d0b7} }, +/**/ {{0xebf91fc7, 0xbc3aa02a} }, +/**/ {{0xca629942, 0x3fba1247} }, +/**/ {{0xc245db83, 0xbc46961a} }, +/**/ {{0x100385b4, 0xbfb519e1} }, +/**/ {{0x32616ed8, 0x3f8a7592} }, +/**/ {{0xcda1223a, 0x3fa09494} }, +/**/ {{0xa5a5c251, 0xbfa09bb9} }, +/**/ {{0xf489d8ba, 0x3f7ff915} } }, +/**/ {{{0x00000000, 0x3fe42000} }, +/**/ {{0x3557138a, 0x3fe1f704} }, +/**/ {{0xf6d7dd47, 0x3c76c659} }, +/**/ {{0x4920943e, 0x3fe6ee33} }, +/**/ {{0x61a3a541, 0xbc62723e} }, +/**/ {{0x6eedf042, 0xbfd4aaed} }, +/**/ {{0xe7561ed4, 0x3c5b337a} }, +/**/ {{0x68796803, 0x3f976e91} }, +/**/ {{0x44d1db93, 0xbc0e806f} }, +/**/ {{0x21688625, 0x3fb9a8f9} }, +/**/ {{0xb1ec0554, 0x3c540185} }, +/**/ {{0x9a4cbc61, 0xbfb5055c} }, +/**/ {{0xab0be204, 0x3f8c3e93} }, +/**/ {{0xce3968a1, 0x3fa01049} }, +/**/ {{0xcc2331ba, 0xbfa076a9} }, +/**/ {{0xe220db7e, 0x3f80f2f6} } }, +/**/ {{{0x00000000, 0x3fe44000} }, +/**/ {{0x13e823b2, 0x3fe20de8} }, +/**/ {{0x53ebb744, 0xbc8791d7} }, +/**/ {{0x9ad6a3fd, 0x3fe6d98a} }, +/**/ {{0xc4e69862, 0xbc808110} }, +/**/ {{0x6ab4a79d, 0xbfd4a662} }, +/**/ {{0x9fc1cc2b, 0x3c52ed25} }, +/**/ {{0x42e6dc28, 0x3f9905d9} }, +/**/ {{0xe39b7707, 0xbc228c79} }, +/**/ {{0x5e97c6f4, 0x3fb94014} }, +/**/ {{0xf8779202, 0xbc52b822} }, +/**/ {{0xcc723054, 0xbfb4ef86} }, +/**/ {{0x76852811, 0x3f8df92d} }, +/**/ {{0xa231ee3f, 0x3f9f1a5f} }, +/**/ {{0xd8f34e77, 0xbfa04f7d} }, +/**/ {{0x80706a34, 0x3f81dcaa} } }, +/**/ {{{0x00000000, 0x3fe46000} }, +/**/ {{0x4c1d192a, 0x3fe224b7} }, +/**/ {{0xf88a60c4, 0x3c8d6d3d} }, +/**/ {{0x9d8b44ec, 0x3fe6c4e6} }, +/**/ {{0x4ed04ec2, 0xbc589d5c} }, +/**/ {{0xa6222a08, 0xbfd4a18b} }, +/**/ {{0xd3867dbd, 0xbc66c919} }, +/**/ {{0x4bb5a8a0, 0x3f9a9696} }, +/**/ {{0x927bb5bd, 0x3c36698e} }, +/**/ {{0xfdbbcc76, 0x3fb8d79f} }, +/**/ {{0x4efb71a1, 0x3c2578bd} }, +/**/ {{0x6778e363, 0xbfb4d86a} }, +/**/ {{0xd930230d, 0x3f8fa581} }, +/**/ {{0x8a6221aa, 0x3f9e16ae} }, +/**/ {{0x2f183972, 0xbfa02652} }, +/**/ {{0x3e507f4f, 0x3f82b9db} } }, +/**/ {{{0x00000000, 0x3fe48000} }, +/**/ {{0xe2cc9e6a, 0x3fe23b71} }, +/**/ {{0x9f38224e, 0x3c6c421c} }, +/**/ {{0x9c620595, 0x3fe6b047} }, +/**/ {{0x07d7f0c2, 0x3c8867df} }, +/**/ {{0x5a920887, 0xbfd49c6a} }, +/**/ {{0x37bcc433, 0xbc764547} }, +/**/ {{0xbb7e5931, 0x3f9c20cf} }, +/**/ {{0x4db6bef2, 0xbc3d86f5} }, +/**/ {{0x451c4a5d, 0x3fb86fa2} }, +/**/ {{0x15afb52c, 0xbc475142} }, +/**/ {{0x120917da, 0xbfb4c012} }, +/**/ {{0x6b9c3fad, 0x3f90a1da} }, +/**/ {{0x708543e5, 0x3f9d159f} }, +/**/ {{0x6d929bce, 0xbf9ff685} }, +/**/ {{0xd0361a66, 0x3f838ac0} } }, +/**/ {{{0x00000000, 0x3fe4a000} }, +/**/ {{0xdd17e501, 0x3fe25217} }, +/**/ {{0x8c1b679c, 0x3c856aa8} }, +/**/ {{0xe145c95d, 0x3fe69bad} }, +/**/ {{0x5605046d, 0xbc873257} }, +/**/ {{0xbffbe8a8, 0xbfd496ff} }, +/**/ {{0xc7b45e6f, 0x3c36a5c5} }, +/**/ {{0x2d9556eb, 0x3f9da48d} }, +/**/ {{0x1871a19d, 0x3c3ff0e8} }, +/**/ {{0x46043f42, 0x3fb80821} }, +/**/ {{0xe660cfa1, 0x3c550eec} }, +/**/ {{0x5727a8cb, 0xbfb4a688} }, +/**/ {{0x0e13efbc, 0x3f9169f6} }, +/**/ {{0xb59149dd, 0x3f9c174f} }, +/**/ {{0xb10444dd, 0xbf9f9cd5} }, +/**/ {{0x03e91dd9, 0x3f844f95} } }, +/**/ {{{0x00000000, 0x3fe4c000} }, +/**/ {{0x40696da6, 0x3fe268a9} }, +/**/ {{0xa04c73cc, 0x3c5d1348} }, +/**/ {{0xb4ea3592, 0x3fe68719} }, +/**/ {{0x088ed284, 0xbc7ecf86} }, +/**/ {{0x0ce1507d, 0xbfd4914d} }, +/**/ {{0x4dff2946, 0xbc6410ef} }, +/**/ {{0x9cbf7eb7, 0x3f9f21d6} }, +/**/ {{0xeaaad7e2, 0x3c39bc22} }, +/**/ {{0xdd4f3070, 0x3fb7a122} }, +/**/ {{0x1cfe44af, 0x3c50d950} }, +/**/ {{0xa50188df, 0xbfb48bd7} }, +/**/ {{0x71756204, 0x3f922b27} }, +/**/ {{0x0810a33a, 0x3f9b1bdb} }, +/**/ {{0xf1011313, 0xbf9f3fca} }, +/**/ {{0x8fe0f49b, 0x3f850893} } }, +/**/ {{{0x00000000, 0x3fe4e000} }, +/**/ {{0x1273d1b3, 0x3fe27f26} }, +/**/ {{0x6151dd9f, 0x3c843bf3} }, +/**/ {{0x5ecd3069, 0x3fe6728b} }, +/**/ {{0x539f23ff, 0x3c67417b} }, +/**/ {{0x763c0fe8, 0xbfd48b53} }, +/**/ {{0x6027975c, 0xbc677a1a} }, +/**/ {{0x2ff7dd6a, 0x3fa04c5a} }, +/**/ {{0x496202e8, 0xbc40808e} }, +/**/ {{0xb3fc3f7c, 0x3fb73aac} }, +/**/ {{0x86b114ff, 0x3c4b58cb} }, +/**/ {{0x4bc91249, 0xbfb4700a} }, +/**/ {{0xef2490f8, 0x3f92e582} }, +/**/ {{0x6c875580, 0x3f9a235b} }, +/**/ {{0xe55cd596, 0xbf9edf99} }, +/**/ {{0xe40c5a18, 0x3f85b5f9} } }, +/**/ {{{0x00000000, 0x3fe50000} }, +/**/ {{0x59308e31, 0x3fe2958e} }, +/**/ {{0xb0c6c087, 0xbc709e73} }, +/**/ {{0x2538713c, 0x3fe65e03} }, +/**/ {{0x42c09163, 0xbc601392} }, +/**/ {{0x2f6d4575, 0xbfd48514} }, +/**/ {{0x4568af3f, 0xbc356341} }, +/**/ {{0x9386fd1d, 0x3fa10497} }, +/**/ {{0x230a452f, 0xbc4a756a} }, +/**/ {{0x3fc6c180, 0x3fb6d4c4} }, +/**/ {{0xdb3fe137, 0x3c5ab2b9} }, +/**/ {{0x7ca4cfd0, 0xbfb4532a} }, +/**/ {{0x90eb1d30, 0x3f93991d} }, +/**/ {{0x46163051, 0x3f992de9} }, +/**/ {{0x2de874ff, 0xbf9e7c76} }, +/**/ {{0xfc0c1cb2, 0x3f865806} } }, +/**/ {{{0x00000000, 0x3fe52000} }, +/**/ {{0x1aded073, 0x3fe2abe2} }, +/**/ {{0x01ad022e, 0x3c8c28c0} }, +/**/ {{0x4d432177, 0x3fe64981} }, +/**/ {{0x055e240c, 0x3c83f41b} }, +/**/ {{0x6a2cfd01, 0xbfd47e90} }, +/**/ {{0xf152d080, 0x3c628585} }, +/**/ {{0xfbe3ed9e, 0x3fa1b9a7} }, +/**/ {{0xf259fe04, 0xbc18a085} }, +/**/ {{0xc3c40175, 0x3fb66f6e} }, +/**/ {{0xb0fda762, 0x3c41d80a} }, +/**/ {{0x48af643a, 0xbfb43542} }, +/**/ {{0x05ad7652, 0x3f94460d} }, +/**/ {{0x5f55ab26, 0x3f983b9b} }, +/**/ {{0x4be18b23, 0xbf9e1692} }, +/**/ {{0x32e755a3, 0x3f86eefb} } }, +/**/ {{{0x00000000, 0x3fe54000} }, +/**/ {{0x5e024466, 0x3fe2c221} }, +/**/ {{0xda3a4be1, 0xbc44b810} }, +/**/ {{0x1ad38da0, 0x3fe63506} }, +/**/ {{0x94ec14b0, 0xbc67f12a} }, +/**/ {{0x567a6652, 0xbfd477c9} }, +/**/ {{0xbbb9df88, 0x3c7be71c} }, +/**/ {{0x1535acb9, 0x3fa26b90} }, +/**/ {{0xff041454, 0xbc30ff6c} }, +/**/ {{0x5105d8fa, 0x3fb60ab1} }, +/**/ {{0x3f2d6492, 0x3c535a89} }, +/**/ {{0xa0083319, 0xbfb4165b} }, +/**/ {{0x965eb0a7, 0x3f94ec67} }, +/**/ {{0xf36231e5, 0x3f974c86} }, +/**/ {{0x9c25f4a4, 0xbf9dae1f} }, +/**/ {{0x183e42dc, 0x3f877b18} } }, +/**/ {{{0x00000000, 0x3fe56000} }, +/**/ {{0x2961e48c, 0x3fe2d84c} }, +/**/ {{0x0a36e506, 0xbc7f2542} }, +/**/ {{0xd0a0e5d4, 0x3fe62091} }, +/**/ {{0xcccb008e, 0x3c82a27d} }, +/**/ {{0x228ca1b6, 0xbfd470c0} }, +/**/ {{0x32884415, 0xbc788e9b} }, +/**/ {{0xb365e4d9, 0x3fa31a54} }, +/**/ {{0xda0f99ae, 0x3c3e6e70} }, +/**/ {{0xc741ccb7, 0x3fb5a690} }, +/**/ {{0x6508ffe1, 0xbc383905} }, +/**/ {{0x50f46c17, 0xbfb3f680} }, +/**/ {{0x1b344c30, 0x3f958c44} }, +/**/ {{0xb713db8a, 0x3f9660bf} }, +/**/ {{0x5224992a, 0xbf9d434e} }, +/**/ {{0x46ffb16e, 0x3f87fca0} } }, +/**/ {{{0x00000000, 0x3fe58000} }, +/**/ {{0x8406cbca, 0x3fe2ee62} }, +/**/ {{0x9ff0cf8d, 0x3c8c5d5e} }, +/**/ {{0xb0350d38, 0x3fe60c24} }, +/**/ {{0xf3db4fcb, 0x3c81ffe9} }, +/**/ {{0xfac420bd, 0xbfd46975} }, +/**/ {{0x850528a0, 0x3c7e6994} }, +/**/ {{0xd098b4ee, 0x3fa3c5fa} }, +/**/ {{0xaa6a6874, 0x3c353c41} }, +/**/ {{0xd57c5b53, 0x3fb54311} }, +/**/ {{0x72d146e0, 0x3c50d02e} }, +/**/ {{0x071017e0, 0xbfb3d5ba} }, +/**/ {{0xf11b08a7, 0x3f9625b9} }, +/**/ {{0xe25bbc6f, 0x3f957857} }, +/**/ {{0x7384981f, 0xbf9cd64d} }, +/**/ {{0x3da3b8d5, 0x3f8873d7} } }, +/**/ {{{0x00000000, 0x3fe5a000} }, +/**/ {{0x753b090b, 0x3fe30464} }, +/**/ {{0x61da18f3, 0xbc73e712} }, +/**/ {{0xf9ee77b6, 0x3fe5f7be} }, +/**/ {{0x854f9928, 0x3c8949f7} }, +/**/ {{0x099c98f6, 0xbfd461ec} }, +/**/ {{0x3eafe889, 0x3c5da491} }, +/**/ {{0x8ba9e286, 0x3fa46e87} }, +/**/ {{0x5377a1a9, 0x3c42573a} }, +/**/ {{0xfab82ffb, 0x3fb4e038} }, +/**/ {{0x402ef939, 0xbc414e45} }, +/**/ {{0x4a8ec478, 0xbfb3b412} }, +/**/ {{0xef6dba07, 0x3f96b8e0} }, +/**/ {{0x39c13c6e, 0x3f949360} }, +/**/ {{0xd47bfddb, 0xbf9c674a} }, +/**/ {{0x37ed6935, 0x3f88e101} } }, +/**/ {{{0x00000000, 0x3fe5c000} }, +/**/ {{0x048874be, 0x3fe31a52} }, +/**/ {{0x87a7ac24, 0x3c840cab} }, +/**/ {{0xed021586, 0x3fe5e360} }, +/**/ {{0xb32ab7e4, 0x3c86a444} }, +/**/ {{0x779f86c4, 0xbfd45a23} }, +/**/ {{0x6b782501, 0xbc75b9dc} }, +/**/ {{0x26af940c, 0x3fa51400} }, +/**/ {{0xf9ce64e2, 0x3c4f700e} }, +/**/ {{0x86a8eb42, 0x3fb47e0a} }, +/**/ {{0x36377584, 0xbc5a4df9} }, +/**/ {{0x7f8b6d42, 0xbfb39192} }, +/**/ {{0x5deeeabc, 0x3f9745d1} }, +/**/ {{0x17fa1033, 0x3f93b1e8} }, +/**/ {{0x14cf2061, 0xbf9bf673} }, +/**/ {{0x0a340016, 0x3f894463} } }, +/**/ {{{0x00000000, 0x3fe5e000} }, +/**/ {{0x39b78856, 0x3fe3302b} }, +/**/ {{0xd87ba82b, 0x3c85dd2e} }, +/**/ {{0xc77d4bea, 0x3fe5cf0a} }, +/**/ {{0x0d42ab66, 0xbc8684ab} }, +/**/ {{0x6b573e11, 0xbfd4521d} }, +/**/ {{0xb90c9c27, 0xbc7601b9} }, +/**/ {{0x0582aeaa, 0x3fa5b66a} }, +/**/ {{0x8cc985ad, 0x3c281575} }, +/**/ {{0x9a69373d, 0x3fb41c8a} }, +/**/ {{0x25ea8f67, 0xbc33df07} }, +/**/ {{0xe5673a18, 0xbfb36e43} }, +/**/ {{0xeb05f3bc, 0x3f97cca3} }, +/**/ {{0x7797abe9, 0x3f92d3fd} }, +/**/ {{0x9d71c254, 0xbf9b83f1} }, +/**/ {{0xfe333861, 0x3f899e41} } }, +/**/ {{{0x00000000, 0x3fe60000} }, +/**/ {{0x1cce37bb, 0x3fe345f0} }, +/**/ {{0x37c71102, 0x3c810211} }, +/**/ {{0xc647fa91, 0x3fe5babc} }, +/**/ {{0x8056eaf3, 0x3c84339b} }, +/**/ {{0x094286d0, 0xbfd449db} }, +/**/ {{0x512b1c7b, 0x3c75e178} }, +/**/ {{0xac4cf102, 0x3fa655ca} }, +/**/ {{0x61e8206a, 0xbc27a1e4} }, +/**/ {{0x2933dd9c, 0x3fb3bbbd} }, +/**/ {{0xbd42c006, 0xbc517633} }, +/**/ {{0x9636afc9, 0xbfb34a2f} }, +/**/ {{0xa2400f6f, 0x3f984d71} }, +/**/ {{0xfcc53cab, 0x3f91f9ac} }, +/**/ {{0x9ec31ef1, 0xbf9b0ff0} }, +/**/ {{0xb1615b05, 0x3f89eee3} } }, +/**/ {{{0x00000000, 0x3fe62000} }, +/**/ {{0xb60eccce, 0x3fe35ba0} }, +/**/ {{0x9b9368b9, 0x3c8e3ba1} }, +/**/ {{0x25268d22, 0x3fe5a677} }, +/**/ {{0xaf72cee6, 0x3c7bc76e} }, +/**/ {{0x73c8c31c, 0xbfd4415d} }, +/**/ {{0xe00e5645, 0xbc3e5b3c} }, +/**/ {{0xbe1ce1b6, 0x3fa6f227} }, +/**/ {{0xe699fcac, 0xbc04a922} }, +/**/ {{0xf91f9885, 0x3fb35ba5} }, +/**/ {{0x418827b3, 0xbc43f8be} }, +/**/ {{0x863cebc9, 0xbfb3255e} }, +/**/ {{0xe315ca66, 0x3f98c853} }, +/**/ {{0xff116cac, 0x3f912301} }, +/**/ {{0x0f5e09c2, 0xbf9a9a99} }, +/**/ {{0xf4c8d587, 0x3f8a368d} } }, +/**/ {{{0x00000000, 0x3fe64000} }, +/**/ {{0x0df6c504, 0x3fe3713d} }, +/**/ {{0xe031606d, 0xbc54f789} }, +/**/ {{0x1ebc184f, 0x3fe5923a} }, +/**/ {{0xbe5956dd, 0x3c829fe8} }, +/**/ {{0xcb2e9cc9, 0xbfd438a5} }, +/**/ {{0x7d6ce3eb, 0xbc7c1839} }, +/**/ {{0xfb7fa678, 0x3fa78b86} }, +/**/ {{0xd082025e, 0x3befb53e} }, +/**/ {{0xa3dd5905, 0x3fb2fc48} }, +/**/ {{0x06b78682, 0x3c5fd567} }, +/**/ {{0x8374843c, 0xbfb2ffd9} }, +/**/ {{0x57f51471, 0x3f993d64} }, +/**/ {{0x933f6cc5, 0x3f905006} }, +/**/ {{0xab7658df, 0xbf9a2412} }, +/**/ {{0xae624ab4, 0x3f8a7586} } }, +/**/ {{{0x00000000, 0x3fe66000} }, +/**/ {{0x2d3db11f, 0x3fe386c5} }, +/**/ {{0xcbebe6a0, 0xbc8b78e1} }, +/**/ {{0xec8c8203, 0x3fe57e05} }, +/**/ {{0x5e7f92dc, 0x3c8ea585} }, +/**/ {{0x2d8b381e, 0xbfd42fb5} }, +/**/ {{0x5cff451e, 0xbc63afe6} }, +/**/ {{0x4120d643, 0x3fa821ee} }, +/**/ {{0xcbc4d2dc, 0xbc3e664f} }, +/**/ {{0x9778bfdb, 0x3fb29da8} }, +/**/ {{0x7c2057a5, 0x3c3760dd} }, +/**/ {{0x3525a55a, 0xbfb2d9a9} }, +/**/ {{0xed9015c8, 0x3f99acbc} }, +/**/ {{0x2a35e7d2, 0x3f8f0187} }, +/**/ {{0xf4bcdfc7, 0xbf99ac83} }, +/**/ {{0xbbeb4f11, 0x3f8aac13} } }, +/**/ {{{0x00000000, 0x3fe68000} }, +/**/ {{0x1cd4171a, 0x3fe39c39} }, +/**/ {{0x31d8bf46, 0xbc823043} }, +/**/ {{0xc6feb417, 0x3fe569da} }, +/**/ {{0x0625e450, 0x3c803ce5} }, +/**/ {{0xb6bde980, 0xbfd4268c} }, +/**/ {{0xe8258561, 0xbc6e8f76} }, +/**/ {{0x86705749, 0x3fa8b563} }, +/**/ {{0xe6172281, 0x3c418e14} }, +/**/ {{0x171a8768, 0x3fb23fc9} }, +/**/ {{0x3225d825, 0xbc562184} }, +/**/ {{0x1b8904fd, 0xbfb2b2d6} }, +/**/ {{0xca70ce88, 0x3f9a1677} }, +/**/ {{0x62963581, 0x3f8d6a81} }, +/**/ {{0x32c353bb, 0xbf993412} }, +/**/ {{0xd7354ec0, 0x3f8ada7a} } }, +/**/ {{{0x00000000, 0x3fe6a000} }, +/**/ {{0xe5e2564b, 0x3fe3b198} }, +/**/ {{0x1f0752ac, 0xbc72f922} }, +/**/ {{0xe55ed910, 0x3fe555b8} }, +/**/ {{0x656f2eb2, 0xbc5615bc} }, +/**/ {{0x80646bca, 0xbfd41d2d} }, +/**/ {{0x1ff3506f, 0xbc75d1d6} }, +/**/ {{0xdc4e5727, 0x3fa945ec} }, +/**/ {{0x18968922, 0x3c213c8e} }, +/**/ {{0x3bcc9fa4, 0x3fb1e2ad} }, +/**/ {{0x0a43c591, 0x3c2b899c} }, +/**/ {{0x8f774533, 0xbfb28b68} }, +/**/ {{0x46d16acc, 0x3f9a7aaf} }, +/**/ {{0xde405cc6, 0x3f8bdb08} }, +/**/ {{0x73d9884b, 0xbf98bae1} }, +/**/ {{0x7be7742a, 0x3f8b0101} } }, +/**/ {{{0x00000000, 0x3fe6c000} }, +/**/ {{0x91c78dc5, 0x3fe3c6e4} }, +/**/ {{0x94fd0ba7, 0xbc8e1450} }, +/**/ {{0x7de0a269, 0x3fe541a0} }, +/**/ {{0x163b639c, 0x3c8b9072} }, +/**/ {{0xa1d194fc, 0xbfd41398} }, +/**/ {{0x8629402d, 0xbc7ef191} }, +/**/ {{0x6bbd69eb, 0x3fa9d390} }, +/**/ {{0xd2c4a6a5, 0x3c488aec} }, +/**/ {{0xf53fbee6, 0x3fb18657} }, +/**/ {{0x0104d1dd, 0x3c54e6aa} }, +/**/ {{0xc2245ee6, 0xbfb26368} }, +/**/ {{0xe4b91b16, 0x3f9ad97d} }, +/**/ {{0x74b192c7, 0x3f8a5328} }, +/**/ {{0x8e5d8b31, 0xbf984114} }, +/**/ {{0xceadce82, 0x3f8b1fec} } }, +/**/ {{{0x00000000, 0x3fe6e000} }, +/**/ {{0x2a188504, 0x3fe3dc1c} }, +/**/ {{0x70f4e971, 0x3c82ce63} }, +/**/ {{0xc5a197ed, 0x3fe52d91} }, +/**/ {{0x1baab820, 0xbc804b92} }, +/**/ {{0x300486f8, 0xbfd409cf} }, +/**/ {{0xae804189, 0xbc6d3bb8} }, +/**/ {{0x749adab8, 0x3faa5e54} }, +/**/ {{0xc631cfd3, 0x3c20b0d5} }, +/**/ {{0x0a922c54, 0x3fb12acc} }, +/**/ {{0x7cbc4417, 0x3c521a06} }, +/**/ {{0xbce6ae05, 0xbfb23ade} }, +/**/ {{0x485d279b, 0x3f9b32fe} }, +/**/ {{0xd9b56b96, 0x3f88d2e8} }, +/**/ {{0x227841f4, 0xbf97c6cd} }, +/**/ {{0x85cf6ba0, 0x3f8b3781} } }, +/**/ {{{0x00000000, 0x3fe70000} }, +/**/ {{0xb89e96f4, 0x3fe3f13f} }, +/**/ {{0x492644f0, 0x3c7ecf8b} }, +/**/ {{0xf0ab6f99, 0x3fe5198c} }, +/**/ {{0x5e1ffaba, 0x3c71b875} }, +/**/ {{0x3da059f4, 0xbfd3ffd2} }, +/**/ {{0x77eee53d, 0x3c5bba8e} }, +/**/ {{0x4c5d36dc, 0x3faae63f} }, +/**/ {{0x2a3994d6, 0xbc4e6e4e} }, +/**/ {{0x1b178ada, 0x3fb0d00c} }, +/**/ {{0xb3e710cc, 0x3c4b94c3} }, +/**/ {{0x61093929, 0xbfb211d2} }, +/**/ {{0x30c5dd59, 0x3f9b874b} }, +/**/ {{0xb0b899ed, 0x3f875a50} }, +/**/ {{0x9c404912, 0xbf974c2b} }, +/**/ {{0xd3249a4d, 0x3f8b4803} } }, +/**/ {{{0x00000000, 0x3fe72000} }, +/**/ {{0x47569f49, 0x3fe4064f} }, +/**/ {{0xf91bf2b2, 0xbc8aad88} }, +/**/ {{0x31f66da7, 0x3fe50592} }, +/**/ {{0x134b7507, 0xbc8837f1} }, +/**/ {{0xdae43e4d, 0xbfd3f5a2} }, +/**/ {{0xdc59e382, 0xbc7f29b0} }, +/**/ {{0x5cd91a8c, 0x3fab6b57} }, +/**/ {{0xd6ab0dfc, 0xbc225bf7} }, +/**/ {{0x9f216d7a, 0x3fb0761a} }, +/**/ {{0xe546203e, 0x3c577818} }, +/**/ {{0x67a8cf31, 0xbfb1e84b} }, +/**/ {{0x70b6dd6f, 0x3f9bd67f} }, +/**/ {{0x9ff677e5, 0x3f85e964} }, +/**/ {{0x363cf426, 0xbf96d14f} }, +/**/ {{0x4f6617de, 0x3f8b51b7} } }, +/**/ {{{0x00000000, 0x3fe74000} }, +/**/ {{0xe06fea41, 0x3fe41b4a} }, +/**/ {{0x53277652, 0x3c63d60a} }, +/**/ {{0xbb6bcc2c, 0x3fe4f1a1} }, +/**/ {{0x7c81f558, 0x3c5c8d69} }, +/**/ {{0x15a41364, 0xbfd3eb42} }, +/**/ {{0x617c316a, 0x3c728a9c} }, +/**/ {{0x230c44b8, 0x3fabeda3} }, +/**/ {{0x50d9e9da, 0x3c41fa15} }, +/**/ {{0xe8c87fc3, 0x3fb01cf9} }, +/**/ {{0xa175df34, 0x3c410990} }, +/**/ {{0x619b963c, 0xbfb1be51} }, +/**/ {{0xe7da421c, 0x3f9c20b5} }, +/**/ {{0x637b86b0, 0x3f848027} }, +/**/ {{0xfc436ff1, 0xbf965655} }, +/**/ {{0xe6cd859f, 0x3f8b54de} } }, +/**/ {{{0x00000000, 0x3fe76000} }, +/**/ {{0x8e4b26d6, 0x3fe43032} }, +/**/ {{0x1070b99f, 0xbc813159} }, +/**/ {{0xbde829f5, 0x3fe4ddbb} }, +/**/ {{0xb6d17615, 0xbc735ff2} }, +/**/ {{0xf941711a, 0xbfd3e0b0} }, +/**/ {{0xe9027227, 0x3c7d3454} }, +/**/ {{0x2deef5c2, 0x3fac6d29} }, +/**/ {{0x0ba13bb6, 0x3c476533} }, +/**/ {{0x496c1e5e, 0x3faf8958} }, +/**/ {{0xe1abdf2f, 0x3c49ebf2} }, +/**/ {{0xb762a82c, 0xbfb193eb} }, +/**/ {{0x7c2df93f, 0x3f9c6609} }, +/**/ {{0xdff7724a, 0x3f831e99} }, +/**/ {{0xcea82a5a, 0xbf95db5c} }, +/**/ {{0xc6ff27bb, 0x3f8b51bc} } }, +/**/ {{{0x00000000, 0x3fe78000} }, +/**/ {{0x5b795b56, 0x3fe44506} }, +/**/ {{0x163f79c8, 0xbc7f76d0} }, +/**/ {{0x693e0015, 0x3fe4c9e0} }, +/**/ {{0x60fff59b, 0xbc7b0fcb} }, +/**/ {{0x8ea521a8, 0xbfd3d5f0} }, +/**/ {{0xb5bcc402, 0x3c561573} }, +/**/ {{0x1d4b9b62, 0x3face9f0} }, +/**/ {{0xf2c93cfb, 0x3c481226} }, +/**/ {{0xb5db8847, 0x3faeda66} }, +/**/ {{0x3a386670, 0xbc44ec99} }, +/**/ {{0xa92559e3, 0xbfb16921} }, +/**/ {{0x13b2a17d, 0x3f9ca695} }, +/**/ {{0x355982b3, 0x3f81c4bb} }, +/**/ {{0x65bec936, 0xbf95607f} }, +/**/ {{0x4e349f67, 0x3f8b4892} } }, +/**/ {{{0x00000000, 0x3fe7a000} }, +/**/ {{0x52badc7f, 0x3fe459c6} }, +/**/ {{0x8e8e135c, 0x3c819969} }, +/**/ {{0xec381dcb, 0x3fe4b60f} }, +/**/ {{0x4724e4f2, 0xbc6b9874} }, +/**/ {{0xdc390960, 0xbfd3cb01} }, +/**/ {{0x7ba1320c, 0xbc7243b1} }, +/**/ {{0xa09cca72, 0x3fad63fe} }, +/**/ {{0xe5ab8d04, 0x3c48308c} }, +/**/ {{0xdf2eb652, 0x3fae2d22} }, +/**/ {{0x4eb29ad3, 0xbc4988a3} }, +/**/ {{0x4eb5cb96, 0xbfb13dfa} }, +/**/ {{0x8e5b2657, 0x3f9ce273} }, +/**/ {{0xd132be74, 0x3f807288} }, +/**/ {{0x55a31e9e, 0xbf94e5d8} }, +/**/ {{0xfba00cb2, 0x3f8b399f} } }, +/**/ {{{0x00000000, 0x3fe7c000} }, +/**/ {{0x7efe4716, 0x3fe46e72} }, +/**/ {{0x1b844cc9, 0xbc639b9b} }, +/**/ {{0x749c2a47, 0x3fe4a24a} }, +/**/ {{0x82d8a2e5, 0xbc8f9d05} }, +/**/ {{0xe5e27a03, 0xbfd3bfe5} }, +/**/ {{0xb30f6d58, 0xbc5047da} }, +/**/ {{0x75f185ec, 0x3faddb5b} }, +/**/ {{0x23d5084a, 0x3c43b680} }, +/**/ {{0x479061d2, 0x3fad8190} }, +/**/ {{0x602d3547, 0xbbf4565c} }, +/**/ {{0x979e619e, 0xbfb1127c} }, +/**/ {{0xc03c4720, 0x3f9d19bf} }, +/**/ {{0x01b2b45f, 0x3f7e4ffd} }, +/**/ {{0x1245b0bb, 0xbf946b81} }, +/**/ {{0x60fec8ec, 0x3f8b2525} } }, +/**/ {{{0x00000000, 0x3fe7e000} }, +/**/ {{0xeb5f7bfe, 0x3fe4830a} }, +/**/ {{0x66764a73, 0xbc5a2656} }, +/**/ {{0x2f2d2be4, 0x3fe48e90} }, +/**/ {{0x969bba3b, 0x3c810a8e} }, +/**/ {{0xacfcef4d, 0xbfd3b49d} }, +/**/ {{0xb7a61548, 0xbc6a4f98} }, +/**/ {{0x68d7d101, 0x3fae500d} }, +/**/ {{0x04860c21, 0xbc305c3e} }, +/**/ {{0x2c98ea9c, 0x3facd7b2} }, +/**/ {{0xd46adca0, 0x3c48692b} }, +/**/ {{0x4b37c6a5, 0xbfb0e6af} }, +/**/ {{0x6bfb2662, 0x3f9d4c94} }, +/**/ {{0x0692cc75, 0x3f7bca2d} }, +/**/ {{0xf3b69312, 0xbf93f191} }, +/**/ {{0x1552b8ee, 0x3f8b0b61} } }, +/**/ {{{0x00000000, 0x3fe80000} }, +/**/ {{0xa3269ee1, 0x3fe4978f} }, +/**/ {{0x87f2a458, 0x3c72419a} }, +/**/ {{0x47ae147b, 0x3fe47ae1} }, +/**/ {{0xeb851eb8, 0xbc6eb851} }, +/**/ {{0x30553261, 0xbfd3a92a} }, +/**/ {{0x94467382, 0xbc7f06f6} }, +/**/ {{0x514d88d8, 0x3faec21b} }, +/**/ {{0xf45873a6, 0x3c3cd061} }, +/**/ {{0x88dfb80c, 0x3fac2f8b} }, +/**/ {{0x53add20b, 0xbc14fcbc} }, +/**/ {{0x08c71945, 0xbfb0ba99} }, +/**/ {{0x3d79f13f, 0x3f9d7b0c} }, +/**/ {{0x357dfc67, 0x3f795393} }, +/**/ {{0x3aa97829, 0xbf937822} }, +/**/ {{0xa8b90db0, 0x3f8aec90} } }, +/**/ {{{0x00000000, 0x3fe82000} }, +/**/ {{0xb1c71762, 0x3fe4ac00} }, +/**/ {{0x2382b900, 0x3c8b20e7} }, +/**/ {{0xe8e45252, 0x3fe4673d} }, +/**/ {{0x67458f9c, 0x3c57d208} }, +/**/ {{0x6c24e1b3, 0xbfd39d8c} }, +/**/ {{0x973c6d15, 0xbc7830c5} }, +/**/ {{0x12b78147, 0x3faf318c} }, +/**/ {{0xd318184c, 0xbc4fa440} }, +/**/ {{0x158b44e7, 0x3fab891f} }, +/**/ {{0x45d7f1f3, 0x3c4d5f9f} }, +/**/ {{0x47a3e8ba, 0xbfb08e40} }, +/**/ {{0xc4c1a21a, 0x3f9da541} }, +/**/ {{0x3c0d1d71, 0x3f76ec1e} }, +/**/ {{0x152e0bfc, 0xbf92ff48} }, +/**/ {{0x9955298f, 0x3f8ac8f0} } }, +/**/ {{{0x00000000, 0x3fe84000} }, +/**/ {{0x22de94e5, 0x3fe4c05e} }, +/**/ {{0xf09f2edf, 0xbc8c0ac1} }, +/**/ {{0x3c9a6560, 0x3fe453a6} }, +/**/ {{0x828bba02, 0x3c77a95f} }, +/**/ {{0x5a0e5b1c, 0xbfd391c5} }, +/**/ {{0xcd3f76d2, 0x3c7d553d} }, +/**/ {{0x9adede86, 0x3faf9e66} }, +/**/ {{0xd6d2bac0, 0xbc225e54} }, +/**/ {{0x4bdf89d7, 0x3faae46f} }, +/**/ {{0x2b25b8d9, 0x3c39c98c} }, +/**/ {{0x5765a5c1, 0xbfb061ab} }, +/**/ {{0x7127d649, 0x3f9dcb4f} }, +/**/ {{0x13002646, 0x3f7493ba} }, +/**/ {{0xa397d1a6, 0xbf928718} }, +/**/ {{0x494648b5, 0x3f8aa0bc} } }, +/**/ {{{0x00000000, 0x3fe86000} }, +/**/ {{0x023414e8, 0x3fe4d4a8} }, +/**/ {{0x1daa88b0, 0x3c6e3a89} }, +/**/ {{0x6ba2786e, 0x3fe4401a} }, +/**/ {{0xe3b5f317, 0xbc4b8213} }, +/**/ {{0xf11905c0, 0xbfd385d5} }, +/**/ {{0xa2f42dd1, 0xbc72a1e9} }, +/**/ {{0xf07a526f, 0x3fb00458} }, +/**/ {{0xac5fd817, 0xbc14f965} }, +/**/ {{0x66ca7da2, 0x3faa417e} }, +/**/ {{0xa050b433, 0x3c4b1e1a} }, +/**/ {{0x60182e4f, 0xbfb034e0} }, +/**/ {{0x8cafa41b, 0x3f9ded4f} }, +/**/ {{0x1fa4f037, 0x3f724a50} }, +/**/ {{0xfd90e915, 0xbf920fa7} }, +/**/ {{0xf59e7acf, 0x3f8a742d} } }, +/**/ {{{0x00000000, 0x3fe88000} }, +/**/ {{0x5bb6ec04, 0x3fe4e8de} }, +/**/ {{0xbeb3796c, 0x3c84a33d} }, +/**/ {{0x9dd8fdc1, 0x3fe42c9a} }, +/**/ {{0xaf80050b, 0x3c5192da} }, +/**/ {{0x25adf97f, 0xbfd379bf} }, +/**/ {{0x20cd3651, 0xbc774019} }, +/**/ {{0x724dbb01, 0x3fb0383a} }, +/**/ {{0xeb93e538, 0x3c5c4e67} }, +/**/ {{0x646e65df, 0x3fa9a04e} }, +/**/ {{0x894a6b77, 0x3c21a7cb} }, +/**/ {{0x62771c79, 0xbfb007e5} }, +/**/ {{0x37a45544, 0x3f9e0b5c} }, +/**/ {{0x54993092, 0x3f700fc7} }, +/**/ {{0x37534c25, 0xbf919909} }, +/**/ {{0xae51732a, 0x3f8a437e} } }, +/**/ {{{0x00000000, 0x3fe8a000} }, +/**/ {{0x3b7dd17e, 0x3fe4fd01} }, +/**/ {{0x3e7c24b5, 0x3c7d513f} }, +/**/ {{0xfa274ef1, 0x3fe41926} }, +/**/ {{0x4d72ecb3, 0x3c8ad830} }, +/**/ {{0xe995018a, 0xbfd36d81} }, +/**/ {{0x6fd6094d, 0x3c7e7ec5} }, +/**/ {{0x567bb975, 0x3fb06adb} }, +/**/ {{0xf0d7364f, 0x3c5212c1} }, +/**/ {{0x07a9b624, 0x3fa900e1} }, +/**/ {{0xc16bcc85, 0xbc4e5b5b} }, +/**/ {{0x705f052b, 0xbfafb580} }, +/**/ {{0x646ce12e, 0x3f9e258f} }, +/**/ {{0xa3c63841, 0x3f6bc808} }, +/**/ {{0x67043d41, 0xbf91234e} }, +/**/ {{0x4f11b221, 0x3f8a0ee6} } }, +/**/ {{{0x00000000, 0x3fe8c000} }, +/**/ {{0xadc5ed81, 0x3fe51110} }, +/**/ {{0x6832a63e, 0x3c723dcd} }, +/**/ {{0xa6864f90, 0x3fe405bf} }, +/**/ {{0x662cd5df, 0xbc7419c5} }, +/**/ {{0x2bf1f7e4, 0xbfd3611f} }, +/**/ {{0x65483b78, 0xbc6e94dd} }, +/**/ {{0x23e21be9, 0x3fb09c3f} }, +/**/ {{0xcaca858d, 0x3c22db63} }, +/**/ {{0xd99c3f1d, 0x3fa86337} }, +/**/ {{0xdc0a6dfc, 0x3c034382} }, +/**/ {{0x284f8093, 0xbfaf5aed} }, +/**/ {{0xd396fb43, 0x3f9e3c02} }, +/**/ {{0x08b96150, 0x3f678dd3} }, +/**/ {{0xaa2dcc3a, 0xbf90ae88} }, +/**/ {{0x79128ee7, 0x3f89d69b} } }, +/**/ {{{0x00000000, 0x3fe8e000} }, +/**/ {{0xbef1e9fb, 0x3fe5250c} }, +/**/ {{0xa3228870, 0xbc5539b7} }, +/**/ {{0xc8011245, 0x3fe3f264} }, +/**/ {{0x44cc720b, 0xbc6641f1} }, +/**/ {{0xd942778a, 0xbfd35497} }, +/**/ {{0x9bd7dbd6, 0x3c750a5a} }, +/**/ {{0x6438739e, 0x3fb0cc69} }, +/**/ {{0x435f798d, 0x3bf5d933} }, +/**/ {{0x2b29722f, 0x3fa7c754} }, +/**/ {{0x5b3af27b, 0xbbe736fe} }, +/**/ {{0x059a3c24, 0xbfaf001c} }, +/**/ {{0x101882b0, 0x3f9e4ed0} }, +/**/ {{0x88dc4269, 0x3f6370ae} }, +/**/ {{0x2b5280b6, 0xbf903ac8} }, +/**/ {{0x8da5b2ad, 0x3f899ad3} } }, +/**/ {{{0x00000000, 0x3fe90000} }, +/**/ {{0x7b89061f, 0x3fe538f5} }, +/**/ {{0xabda520c, 0xbc81bb74} }, +/**/ {{0x82b78014, 0x3fe3df16} }, +/**/ {{0xa43ff610, 0xbc7074be} }, +/**/ {{0xdb5be2e4, 0xbfd347ec} }, +/**/ {{0x8a0e9303, 0x3c7848c8} }, +/**/ {{0xa3a11be4, 0x3fb0fb5d} }, +/**/ {{0x09dd0d69, 0x3c3d68f2} }, +/**/ {{0x16778170, 0x3fa72d37} }, +/**/ {{0x2200d1d4, 0xbc4ea85d} }, +/**/ {{0xd4cdbd49, 0xbfaea517} }, +/**/ {{0x6bc61b6f, 0x3f9e5e10} }, +/**/ {{0xd0517524, 0x3f5ee0af} }, +/**/ {{0x4f2ec799, 0xbf8f9038} }, +/**/ {{0xa9aaa5bb, 0x3f895bc2} } }, +/**/ {{{0x00000000, 0x3fe92000} }, +/**/ {{0xf0362c8f, 0x3fe54cca} }, +/**/ {{0x7f8f43c1, 0x3c88a324} }, +/**/ {{0xf9e1016e, 0x3fe3cbd4} }, +/**/ {{0x431b67e7, 0xbc88dea6} }, +/**/ {{0x1969bc63, 0xbfd33b1f} }, +/**/ {{0x5f3d8fd8, 0x3c6ef16e} }, +/**/ {{0x703d3bf6, 0x3fb1291f} }, +/**/ {{0xb04e0672, 0xbc566e82} }, +/**/ {{0x806b26f2, 0x3fa694e1} }, +/**/ {{0xafcee740, 0x3c302819} }, +/**/ {{0x16dcee96, 0xbfae49eb} }, +/**/ {{0xfbfdb35f, 0x3f9e69dc} }, +/**/ {{0x70c48510, 0x3f571910} }, +/**/ {{0xe90198c8, 0xbf8ead25} }, +/**/ {{0xa1c723cb, 0x3f89199b} } }, +/**/ {{{0x00000000, 0x3fe94000} }, +/**/ {{0x29c70c34, 0x3fe5608d} }, +/**/ {{0xf0de8088, 0x3c89939c} }, +/**/ {{0x4fcf28c3, 0x3fe3b8a0} }, +/**/ {{0xcb80013c, 0xbc469c2b} }, +/**/ {{0x77ec4ef9, 0xbfd32e2f} }, +/**/ {{0xc61f7341, 0x3c7f9d06} }, +/**/ {{0x59c3bcdf, 0x3fb155b2} }, +/**/ {{0x3583c01b, 0xbc2d692e} }, +/**/ {{0x1a1fe15d, 0x3fa5fe54} }, +/**/ {{0x5d9bad81, 0x3c430dc5} }, +/**/ {{0x01d944a8, 0xbfadeea0} }, +/**/ {{0x9683b244, 0x3f9e724e} }, +/**/ {{0x491379ef, 0x3f4f13d4} }, +/**/ {{0x0b7cf74b, 0xbf8dcc74} }, +/**/ {{0xff5f0625, 0x3f88d48f} } }, +/**/ {{{0x00000000, 0x3fe96000} }, +/**/ {{0x352b33ba, 0x3fe5743c} }, +/**/ {{0x34c87ea6, 0xbc8ea00d} }, +/**/ {{0xa5f05e48, 0x3fe3a578} }, +/**/ {{0x00e4639b, 0xbc8ba1ec} }, +/**/ {{0xd8b7a43f, 0xbfd3211e} }, +/**/ {{0x676e23a8, 0xbc6d4b54} }, +/**/ {{0xf11b2c2d, 0x3fb18119} }, +/**/ {{0x3a3bf5fa, 0x3c34855b} }, +/**/ {{0x625c76bf, 0x3fa5698f} }, +/**/ {{0xbedb0264, 0xbc2f758a} }, +/**/ {{0x81b60103, 0xbfad9340} }, +/**/ {{0xce91900f, 0x3f9e777d} }, +/**/ {{0x34fddb2f, 0x3f406543} }, +/**/ {{0xe6077f81, 0xbf8cee3b} }, +/**/ {{0xfe42afde, 0x3f888ccf} } }, +/**/ {{{0x00000000, 0x3fe98000} }, +/**/ {{0x1f732fbb, 0x3fe587d8} }, +/**/ {{0xd8c5a950, 0xbc75e5c9} }, +/**/ {{0x1cd28c98, 0x3fe3925e} }, +/**/ {{0x1ffec6da, 0x3c8c8443} }, +/**/ {{0x1af2c622, 0xbfd313ee} }, +/**/ {{0xbc3f7ac8, 0x3c0a0e9b} }, +/**/ {{0xc7f683c3, 0x3fb1ab59} }, +/**/ {{0x12c04500, 0x3c5eaf17} }, +/**/ {{0xa7039179, 0x3fa4d693} }, +/**/ {{0xa4ce58a2, 0xbc4c8d74} }, +/**/ {{0x391400b3, 0xbfad37d6} }, +/**/ {{0xf2148a36, 0x3f9e7982} }, +/**/ {{0xb6df63ca, 0x3f112956} }, +/**/ {{0xfbd0f7ee, 0xbf8c1294} }, +/**/ {{0x8b0b0a0e, 0x3f88428a} } }, +/**/ {{{0x00000000, 0x3fe9a000} }, +/**/ {{0xf5cfab9e, 0x3fe59b60} }, +/**/ {{0x41026bc5, 0xbc81b04c} }, +/**/ {{0xd425cdfc, 0x3fe37f50} }, +/**/ {{0x518aef64, 0x3c865633} }, +/**/ {{0x1b1749db, 0xbfd3069e} }, +/**/ {{0xa119d9bc, 0xbc311c20} }, +/**/ {{0x7074cee3, 0x3fb1d475} }, +/**/ {{0x4ff61e2c, 0xbc5102e0} }, +/**/ {{0x06804def, 0x3fa44561} }, +/**/ {{0xc3865804, 0x3c4e829f} }, +/**/ {{0x82158836, 0xbfacdc6a} }, +/**/ {{0x071b2eec, 0x3f9e7876} }, +/**/ {{0xf17c4beb, 0xbf375b85} }, +/**/ {{0x2fa03971, 0xbf8b3995} }, +/**/ {{0x421a433b, 0x3f87f5ed} } }, +/**/ {{{0x00000000, 0x3fe9c000} }, +/**/ {{0xc5909517, 0x3fe5aed6} }, +/**/ {{0x714a9436, 0x3c87312f} }, +/**/ {{0xeabf19f5, 0x3fe36c50} }, +/**/ {{0x52485cca, 0x3c70d1dc} }, +/**/ {{0xb2f12226, 0xbfd2f92f} }, +/**/ {{0x3e5d3d61, 0x3c5400ba} }, +/**/ {{0x7cc3a41b, 0x3fb1fc70} }, +/**/ {{0x8819ff5b, 0x3c4b58e7} }, +/**/ {{0x712e9269, 0x3fa3b5f7} }, +/**/ {{0x7879d8ab, 0xbc4e436a} }, +/**/ {{0x6f398221, 0xbfac8106} }, +/**/ {{0xc97073c7, 0x3f9e746e} }, +/**/ {{0xecfc2d6a, 0xbf4914de} }, +/**/ {{0xcfa74bd5, 0xbf8a6350} }, +/**/ {{0x6f38ad9e, 0x3f87a724} } }, +/**/ {{{0x00000000, 0x3fe9e000} }, +/**/ {{0x9c244261, 0x3fe5c239} }, +/**/ {{0xe9e56b35, 0xbc831bd4} }, +/**/ {{0x7e9af2dc, 0x3fe3595e} }, +/**/ {{0x9dc90e6a, 0x3c81ef2d} }, +/**/ {{0xb99eb689, 0xbfd2eba3} }, +/**/ {{0x6a2f2701, 0xbc7b12ef} }, +/**/ {{0x7ec46b9b, 0x3fb2234e} }, +/**/ {{0x8d415d66, 0x3c59f30c} }, +/**/ {{0xaabf0d26, 0x3fa32856} }, +/**/ {{0x3f33d7ea, 0xbc122571} }, +/**/ {{0xcc3da9ce, 0xbfac25b2} }, +/**/ {{0xa8630cad, 0x3f9e6d84} }, +/**/ {{0xbeba707a, 0xbf5308c5} }, +/**/ {{0xa1585fd1, 0xbf898fda} }, +/**/ {{0x0dc54356, 0x3f87565b} } }, +/**/ {{{0x00000000, 0x3fea0000} }, +/**/ {{0x87169b18, 0x3fe5d589} }, +/**/ {{0x4bc5e7ca, 0x3c60028e} }, +/**/ {{0xace01346, 0x3fe34679} }, +/**/ {{0x04d19e6b, 0x3c8e6b38} }, +/**/ {{0x03913da2, 0xbfd2ddfb} }, +/**/ {{0x9a19adbd, 0xbc763ec8} }, +/**/ {{0x07b46905, 0x3fb24913} }, +/**/ {{0xd6f0307f, 0xbc4e7be8} }, +/**/ {{0x4b96b773, 0x3fa29c7e} }, +/**/ {{0x9182d783, 0xbc24c2cd} }, +/**/ {{0x1f071f44, 0xbfabca78} }, +/**/ {{0xc4b7b7c4, 0x3f9e63ce} }, +/**/ {{0x125f35b0, 0xbf59529a} }, +/**/ {{0xed369b2b, 0xbf88bf43} }, +/**/ {{0xc97185cd, 0x3f8703ba} } }, +/**/ {{{0x00000000, 0x3fea2000} }, +/**/ {{0x941043d0, 0x3fe5e8c6} }, +/**/ {{0xbe451e70, 0xbc70bf75} }, +/**/ {{0x91e21aec, 0x3fe333a2} }, +/**/ {{0x7acfc84f, 0x3c7ae035} }, +/**/ {{0x628d5861, 0xbfd2d036} }, +/**/ {{0xe463d006, 0x3c67c5fb} }, +/**/ {{0xa7d77fb2, 0x3fb26dc1} }, +/**/ {{0xc47ba861, 0xbc5432bd} }, +/**/ {{0xc229bece, 0x3fa2126d} }, +/**/ {{0x1da8ed9e, 0xbc4be1bf} }, +/**/ {{0xa890e568, 0xbfab6f5e} }, +/**/ {{0xeec5339a, 0x3f9e5763} }, +/**/ {{0x5274aa52, 0xbf5f68a6} }, +/**/ {{0x8a9df558, 0xbf87f19c} }, +/**/ {{0xff809dc5, 0x3f86af6b} } }, +/**/ {{{0x00000000, 0x3fea4000} }, +/**/ {{0xd0d5cc4a, 0x3fe5fbf0} }, +/**/ {{0x000b7158, 0xbc5b4cfd} }, +/**/ {{0x49243ad8, 0x3fe320d9} }, +/**/ {{0x433f7be5, 0xbc8ce5e0} }, +/**/ {{0xa5abec2f, 0xbfd2c256} }, +/**/ {{0x04494dc1, 0xbc68785b} }, +/**/ {{0xee25a81c, 0x3fb2915d} }, +/**/ {{0x68b37e8b, 0x3c3e7045} }, +/**/ {{0x5451b7d2, 0x3fa18a24} }, +/**/ {{0x79d21dd5, 0xbc3b2d29} }, +/**/ {{0x65dfcf66, 0xbfab146e} }, +/**/ {{0xa4b895b9, 0x3f9e485a} }, +/**/ {{0x14770b65, 0xbf62a5d4} }, +/**/ {{0xeb7dab0f, 0xbf8726f2} }, +/**/ {{0xc081d40d, 0x3f865995} } }, +/**/ {{{0x00000000, 0x3fea6000} }, +/**/ {{0x4b46e05f, 0x3fe60f08} }, +/**/ {{0x99945193, 0xbc8dbb86} }, +/**/ {{0xed5be099, 0x3fe30e1d} }, +/**/ {{0x373fae45, 0x3c6c6e78} }, +/**/ {{0x995b3a02, 0xbfd2b45c} }, +/**/ {{0xe7cea2ad, 0x3c7cb97b} }, +/**/ {{0x67fb0cde, 0x3fb2b3eb} }, +/**/ {{0x4920d50b, 0xbc402927} }, +/**/ {{0x209f00e4, 0x3fa103a1} }, +/**/ {{0xecac275a, 0xbc36fb57} }, +/**/ {{0x10fb6629, 0xbfaab9af} }, +/**/ {{0x1100b94a, 0x3f9e36c9} }, +/**/ {{0x58620e6c, 0xbf657e30} }, +/**/ {{0x2801158e, 0xbf865f54} }, +/**/ {{0xd27eaf07, 0x3f86025d} } }, +/**/ {{{0x00000000, 0x3fea8000} }, +/**/ {{0x115d7b8e, 0x3fe6220d} }, +/**/ {{0x350ee8c1, 0xbc62b785} }, +/**/ {{0x98736048, 0x3fe2fb70} }, +/**/ {{0x4df7c4fa, 0x3c87a751} }, +/**/ {{0x07603054, 0xbfd2a649} }, +/**/ {{0xf564247c, 0x3c7c41eb} }, +/**/ {{0xa0cac592, 0x3fb2d56d} }, +/**/ {{0x4e757ddf, 0x3c333138} }, +/**/ {{0x1fa53ce5, 0x3fa07ee3} }, +/**/ {{0x28113a76, 0xbc41bd0c} }, +/**/ {{0x21eb5271, 0xbfaa5f28} }, +/**/ {{0x08df7f4f, 0x3f9e22c5} }, +/**/ {{0x107b528f, 0xbf683dca} }, +/**/ {{0x0a22f693, 0xbf859acc} }, +/**/ {{0xb39536ba, 0x3f85a9e8} } }, +/**/ {{{0x00000000, 0x3feaa000} }, +/**/ {{0x312d1f3b, 0x3fe634ff} }, +/**/ {{0x15f2b598, 0x3c89d2f3} }, +/**/ {{0x638c9d15, 0x3fe2e8d1} }, +/**/ {{0xfe1a437d, 0x3c831ae5} }, +/**/ {{0xb6d7f622, 0xbfd2981c} }, +/**/ {{0x86e9fe4d, 0xbc53da87} }, +/**/ {{0x21d425b2, 0x3fb2f5e8} }, +/**/ {{0xae2616cb, 0xbc186482} }, +/**/ {{0x4a85a0e4, 0x3f9ff7d2} }, +/**/ {{0xe2d9205b, 0xbc294288} }, +/**/ {{0xcfb8dc09, 0xbfaa04e0} }, +/**/ {{0x0b1f9c73, 0x3f9e0c64} }, +/**/ {{0xbd3845d8, 0xbf6ae504} }, +/**/ {{0x19278cae, 0xbf84d965} }, +/**/ {{0x9cf7183b, 0x3f855059} } }, +/**/ {{{0x00000000, 0x3feac000} }, +/**/ {{0xb8e20b90, 0x3fe647de} }, +/**/ {{0x023a51cf, 0xbc5eca04} }, +/**/ {{0x6703b033, 0x3fe2d640} }, +/**/ {{0x38039b02, 0x3c870ae6} }, +/**/ {{0x6c39acf5, 0xbfd289d8} }, +/**/ {{0x0238a7ee, 0xbc71f038} }, +/**/ {{0x71da955f, 0x3fb3155e} }, +/**/ {{0xd41f84df, 0xbc5faa02} }, +/**/ {{0xc3c69caa, 0x3f9ef563} }, +/**/ {{0x75403dbd, 0x3c331d29} }, +/**/ {{0x1174124f, 0xbfa9aae0} }, +/**/ {{0x3eedb30b, 0x3f9df3bb} }, +/**/ {{0x1c632765, 0xbf6d7445} }, +/**/ {{0xa4fa03e7, 0xbf841b28} }, +/**/ {{0x8646990d, 0x3f84f5d2} } }, +/**/ {{{0x00000000, 0x3feae000} }, +/**/ {{0xb6c07b03, 0x3fe65aab} }, +/**/ {{0x3af32729, 0xbc67939b} }, +/**/ {{0xba718de8, 0x3fe2c3bd} }, +/**/ {{0xc4990a2b, 0xbc82d2fc} }, +/**/ {{0xe9586818, 0xbfd27b7c} }, +/**/ {{0x880839ca, 0x3c780d5e} }, +/**/ {{0x14dfe9e3, 0x3fb333d4} }, +/**/ {{0xbce74cae, 0x3c536469} }, +/**/ {{0xc77983b8, 0x3f9df677} }, +/**/ {{0xb42f53aa, 0x3c373272} }, +/**/ {{0x9f3c360e, 0xbfa9512c} }, +/**/ {{0x72d37b24, 0x3f9dd8df} }, +/**/ {{0x02e417f5, 0xbf6febf1} }, +/**/ {{0xd16a1579, 0xbf83601e} }, +/**/ {{0x294a83e4, 0x3f849a74} } }, +/**/ {{{0x00000000, 0x3feb0000} }, +/**/ {{0x3923e087, 0x3fe66d66} }, +/**/ {{0xebe8bbba, 0xbc76ea6f} }, +/**/ {{0x74aea886, 0x3fe2b149} }, +/**/ {{0xa9d6d16a, 0x3c868ffd} }, +/**/ {{0xed65571e, 0xbfd26d0a} }, +/**/ {{0x476fb5f2, 0x3c6cf972} }, +/**/ {{0x8be1339f, 0x3fb3514c} }, +/**/ {{0x3f722216, 0x3c5c8c0f} }, +/**/ {{0x300f8f9b, 0x3f9cfb0b} }, +/**/ {{0x38d1c932, 0xbc0edd81} }, +/**/ {{0xf34b004f, 0xbfa8f7cc} }, +/**/ {{0x1bd3bde0, 0x3f9dbbe5} }, +/**/ {{0x9bf7dceb, 0xbf712637} }, +/**/ {{0xa146e5b2, 0xbf82a84e} }, +/**/ {{0x05f2718e, 0x3f843e5e} } }, +/**/ {{{0x00000000, 0x3feb2000} }, +/**/ {{0x4e7e2858, 0x3fe6800e} }, +/**/ {{0x1b3e90f0, 0xbc58ea6a} }, +/**/ {{0xabd5912c, 0x3fe29ee3} }, +/**/ {{0xb17c28e3, 0xbc61b3cd} }, +/**/ {{0x34f221eb, 0xbfd25e83} }, +/**/ {{0xfa300585, 0xbc74c483} }, +/**/ {{0x5495f6e3, 0x3fb36dcb} }, +/**/ {{0x311973fe, 0x3c59b55b} }, +/**/ {{0x9864d139, 0x3f9c031a} }, +/**/ {{0xbd00e171, 0x3c28fdf3} }, +/**/ {{0x4b026585, 0xbfa89ec7} }, +/**/ {{0x54a5ed3d, 0x3f9d9ce0} }, +/**/ {{0xa8cb6dfc, 0xbf724b13} }, +/**/ {{0x015469a9, 0xbf81f3be} }, +/**/ {{0x66a50a89, 0x3f83e1ae} } }, +/**/ {{{0x00000000, 0x3feb4000} }, +/**/ {{0x0556fb6a, 0x3fe692a4} }, +/**/ {{0x5a8ea2cc, 0x3c8d94b9} }, +/**/ {{0x75459603, 0x3fe28c8c} }, +/**/ {{0x2945fc08, 0x3c8b1c3b} }, +/**/ {{0x79f37468, 0xbfd24fe6} }, +/**/ {{0x0ec1ef94, 0xbc4e3751} }, +/**/ {{0xe931c53b, 0x3fb38953} }, +/**/ {{0x16d80688, 0xbc3b108d} }, +/**/ {{0x5e1b50b5, 0x3f9b0ea2} }, +/**/ {{0x63fd1067, 0x3c0074c0} }, +/**/ {{0xa7fc7800, 0xbfa84621} }, +/**/ {{0xdd10256e, 0x3f9d7be4} }, +/**/ {{0xc9592c5e, 0xbf7364c0} }, +/**/ {{0xd318d707, 0xbf814271} }, +/**/ {{0x64d217b8, 0x3f838482} } }, +/**/ {{{0x00000000, 0x3feb6000} }, +/**/ {{0x6c4b0576, 0x3fe6a527} }, +/**/ {{0x9c46a69e, 0xbc8f6b65} }, +/**/ {{0xe5a55de9, 0x3fe27a43} }, +/**/ {{0xedc25d49, 0x3c66846e} }, +/**/ {{0x73c3b821, 0xbfd24135} }, +/**/ {{0x56ab5808, 0xbc79202a} }, +/**/ {{0xc0282c84, 0x3fb3a3e9} }, +/**/ {{0x03d25dab, 0x3c4057ca} }, +/**/ {{0xa3eb854d, 0x3f9a1d9e} }, +/**/ {{0xf03e2fb1, 0xbc3775ed} }, +/**/ {{0xd11d1043, 0xbfa7ede1} }, +/**/ {{0x195e6961, 0x3f9d5906} }, +/**/ {{0x65130256, 0xbf747373} }, +/**/ {{0xf77fd664, 0xbf80946d} }, +/**/ {{0xedc272c2, 0x3f8326f5} } }, +/**/ {{{0x00000000, 0x3feb8000} }, +/**/ {{0x920b3d99, 0x3fe6b798} }, +/**/ {{0x6188c50e, 0xbc8a8038} }, +/**/ {{0x10e5813e, 0x3fe2680a} }, +/**/ {{0x2242a6bc, 0xbc8f5497} }, +/**/ {{0xd725fa1c, 0xbfd23270} }, +/**/ {{0x5c781b14, 0x3c757282} }, +/**/ {{0x4bf2f124, 0x3fb3bd90} }, +/**/ {{0x6a14ed74, 0x3c31ae9c} }, +/**/ {{0x53ea1533, 0x3f99300b} }, +/**/ {{0x68f98d7e, 0x3c2a8d88} }, +/**/ {{0x53a4e537, 0xbfa7960d} }, +/**/ {{0x11f5f086, 0x3f9d3457} }, +/**/ {{0x19baa1da, 0xbf757760} }, +/**/ {{0xb2a2ca7e, 0xbf7fd36a} }, +/**/ {{0xc7a02081, 0x3f82c923} } }, +/**/ {{{0x00000000, 0x3feba000} }, +/**/ {{0x855c3198, 0x3fe6c9f7} }, +/**/ {{0x29bd280d, 0x3c7c09de} }, +/**/ {{0x0a431fbd, 0x3fe255df} }, +/**/ {{0xf09a745d, 0x3c8d9866} }, +/**/ {{0x5648fb1f, 0xbfd22399} }, +/**/ {{0xb4df0b3e, 0x3c412100} }, +/**/ {{0xfada8899, 0x3fb3d64a} }, +/**/ {{0x659c4346, 0x3c3dd891} }, +/**/ {{0x21c2d0a1, 0x3f9845e4} }, +/**/ {{0xf397827c, 0x3c28c6b1} }, +/**/ {{0x8445c1cc, 0xbfa73ea9} }, +/**/ {{0x730360f8, 0x3f9d0dea} }, +/**/ {{0xac51ce30, 0xbf7670bb} }, +/**/ {{0xeef50deb, 0xbf7e8493} }, +/**/ {{0x96b119a9, 0x3f826b25} } }, +/**/ {{{0x00000000, 0x3febc000} }, +/**/ {{0x551553af, 0x3fe6dc44} }, +/**/ {{0x3573828e, 0xbc5bf886} }, +/**/ {{0xe44a7335, 0x3fe243c2} }, +/**/ {{0x65d1ffd7, 0xbc667287} }, +/**/ {{0xa0ca68d3, 0xbfd214af} }, +/**/ {{0x88820895, 0xbc71296c} }, +/**/ {{0x36c0c9a2, 0x3fb3ee1d} }, +/**/ {{0x831dfabe, 0x3c540bf6} }, +/**/ {{0x8ce8de84, 0x3f975f24} }, +/**/ {{0x43eb5853, 0xbc125368} }, +/**/ {{0x803788f8, 0xbfa6e7bb} }, +/**/ {{0x8c42d5f9, 0x3f9ce5d2} }, +/**/ {{0xfaadb3ab, 0xbf775fba} }, +/**/ {{0xde4c28da, 0xbf7d3c59} }, +/**/ {{0xe2bf7ef5, 0x3f820d13} } }, +/**/ {{{0x00000000, 0x3febe000} }, +/**/ {{0x10204aef, 0x3fe6ee7f} }, +/**/ {{0xa3066272, 0x3c8692ee} }, +/**/ {{0xb0d95ee5, 0x3fe231b5} }, +/**/ {{0x1eb505b6, 0x3c7aae7e} }, +/**/ {{0x63ba3e08, 0xbfd205b4} }, +/**/ {{0xb975517d, 0x3c71c6d1} }, +/**/ {{0x64edc729, 0x3fb4050a} }, +/**/ {{0x715db809, 0x3c4960ed} }, +/**/ {{0xe2bc143b, 0x3f967bc7} }, +/**/ {{0xf0823143, 0xbc2cbf17} }, +/**/ {{0x2e4dbc47, 0xbfa69148} }, +/**/ {{0x50e0982e, 0x3f9cbc21} }, +/**/ {{0xedaa432a, 0xbf784492} }, +/**/ {{0x0b4850f3, 0xbf7bfabd} }, +/**/ {{0x1caa2f2c, 0x3f81af06} } }, +/**/ {{{0x00000000, 0x3fec0000} }, +/**/ {{0xc5784634, 0x3fe700a7} }, +/**/ {{0x25aadef6, 0xbc78c34d} }, +/**/ {{0x8121fb78, 0x3fe21fb7} }, +/**/ {{0x8121fb78, 0x3c621fb7} }, +/**/ {{0x499e4889, 0xbfd1f6a8} }, +/**/ {{0x6d4e0249, 0xbc60e934} }, +/**/ {{0xe5decb17, 0x3fb41b15} }, +/**/ {{0xab3541e6, 0x3c5194f4} }, +/**/ {{0x40a374b5, 0x3f959bc9} }, +/**/ {{0x54be0e10, 0xbc39dc6e} }, +/**/ {{0x400d3c9a, 0xbfa63b54} }, +/**/ {{0x57717232, 0x3f9c90e8} }, +/**/ {{0x6bfa704e, 0xbf791f78} }, +/**/ {{0x643da6dd, 0xbf7abfbc} }, +/**/ {{0xa418ed31, 0x3f815112} } }, +/**/ {{{0x00000000, 0x3fec2000} }, +/**/ {{0x84295198, 0x3fe712be} }, +/**/ {{0x337d8881, 0x3c85cd90} }, +/**/ {{0x65ad1f5b, 0x3fe20dc8} }, +/**/ {{0xd7b50d48, 0xbc88102a} }, +/**/ {{0xfa75d2f4, 0xbfd1e78b} }, +/**/ {{0x619624d2, 0x3c723734} }, +/**/ {{0x1517663e, 0x3fb43043} }, +/**/ {{0xe5e1ddf1, 0xbc4af8a4} }, +/**/ {{0x961cd605, 0x3f94bf23} }, +/**/ {{0x5ca14507, 0xbc26e86e} }, +/**/ {{0x32c1ffd7, 0xbfa5e5e4} }, +/**/ {{0xda0191cd, 0x3f9c6438} }, +/**/ {{0x4d921d2b, 0xbf79f0a0} }, +/**/ {{0x4e35d54e, 0xbf798b55} }, +/**/ {{0xcd4f7bfd, 0x3f80f34e} } }, +/**/ {{{0x00000000, 0x3fec4000} }, +/**/ {{0x5b4fae7b, 0x3fe724c3} }, +/**/ {{0x2db3499b, 0x3c5948b3} }, +/**/ {{0x6e5ce35d, 0x3fe1fbe8} }, +/**/ {{0x561e27a3, 0x3c8101d1} }, +/**/ {{0x1bbd70f4, 0xbfd1d860} }, +/**/ {{0xfa32c4d1, 0xbc7b4c97} }, +/**/ {{0x48f48a77, 0x3fb44495} }, +/**/ {{0xb47fdf89, 0xbc2ccfed} }, +/**/ {{0xa6c1af2c, 0x3f93e5d1} }, +/**/ {{0xc3b5a19b, 0xbc14af58} }, +/**/ {{0x5094795f, 0xbfa590fc} }, +/**/ {{0xb638ebc2, 0x3f9c3623} }, +/**/ {{0x4fa66d0e, 0xbf7ab83f} }, +/**/ {{0xb787e297, 0xbf785d83} }, +/**/ {{0xe71b4cea, 0x3f8095ce} } }, +/**/ {{{0x00000000, 0x3fec6000} }, +/**/ {{0x5a172dff, 0x3fe736b6} }, +/**/ {{0x06a892d1, 0x3c7775fd} }, +/**/ {{0xaa6f2377, 0x3fe1ea17} }, +/**/ {{0xcb44ec07, 0xbc8395a8} }, +/**/ {{0x5072ec76, 0xbfd1c925} }, +/**/ {{0xf650d5de, 0xbc6e11b3} }, +/**/ {{0xd281a42b, 0x3fb4580f} }, +/**/ {{0xf63226cb, 0xbc55bbce} }, +/**/ {{0x0c411254, 0x3f930fce} }, +/**/ {{0xc9852726, 0x3c3a4412} }, +/**/ {{0xb19e766e, 0xbfa53ca0} }, +/**/ {{0x6d941dd5, 0x3f9c06b9} }, +/**/ {{0x094128b2, 0xbf7b768a} }, +/**/ {{0x2a047c42, 0xbf773642} }, +/**/ {{0x40d7925f, 0x3f8038a6} } }, +/**/ {{{0x00000000, 0x3fec8000} }, +/**/ {{0x8fba8e0f, 0x3fe74897} }, +/**/ {{0x165884a1, 0x3c47b2a6} }, +/**/ {{0x287ffb8a, 0x3fe1d856} }, +/**/ {{0xfee27a9d, 0xbc658a1f} }, +/**/ {{0x39195240, 0xbfd1b9dc} }, +/**/ {{0x551dc6bf, 0x3c604646} }, +/**/ {{0xfd4fa866, 0x3fb46ab5} }, +/**/ {{0xc2febe43, 0x3c5f62a7} }, +/**/ {{0x384eda2c, 0x3f923d13} }, +/**/ {{0x1dfd9f34, 0x3c3b9a7c} }, +/**/ {{0x3cff324c, 0xbfa4e8d5} }, +/**/ {{0x25b0d0ad, 0x3f9bd60a} }, +/**/ {{0xe063d1e6, 0xbf7c2bb4} }, +/**/ {{0xdcb54dd5, 0xbf761589} }, +/**/ {{0x61077b85, 0x3f7fb7ce} } }, +/**/ {{{0x00000000, 0x3feca000} }, +/**/ {{0x0b82d8d8, 0x3fe75a67} }, +/**/ {{0x4c729087, 0x3c8ee4ac} }, +/**/ {{0xf68c4011, 0x3fe1c6a3} }, +/**/ {{0x32671c29, 0xbc8e54e4} }, +/**/ {{0x73bd1c8f, 0xbfd1aa85} }, +/**/ {{0x41d7bd80, 0x3c7525ad} }, +/**/ {{0x0f4e0cc0, 0x3fb47c8b} }, +/**/ {{0xd854875c, 0x3c2efdd1} }, +/**/ {{0x7688134d, 0x3f916d9b} }, +/**/ {{0x42a6f922, 0xbc1abef6} }, +/**/ {{0xa9ee694e, 0xbfa4959d} }, +/**/ {{0xa8aca118, 0x3f9ba425} }, +/**/ {{0xffb6fa1f, 0xbf7cd7f3} }, +/**/ {{0xc52e395a, 0xbf74fb52} }, +/**/ {{0x31d14661, 0x3f7eff46} } }, +/**/ {{{0x00000000, 0x3fecc000} }, +/**/ {{0xdcc6c6c0, 0x3fe76c24} }, +/**/ {{0x51adc83d, 0x3c819525} }, +/**/ {{0x21f3f28c, 0x3fe1b501} }, +/**/ {{0x5f1d67b6, 0xbc45712f} }, +/**/ {{0x9bf87a43, 0xbfd19b21} }, +/**/ {{0xb2071e48, 0xbc64520a} }, +/**/ {{0x48a59e43, 0x3fb48d92} }, +/**/ {{0x42014b8b, 0x3c5f8e56} }, +/**/ {{0xee4caccb, 0x3f90a160} }, +/**/ {{0x7b6daa67, 0x3c2bd92b} }, +/**/ {{0x80ce3489, 0xbfa442fd} }, +/**/ {{0x65959e45, 0x3f9b711b} }, +/**/ {{0x4cc2673a, 0xbf7d7b7b} }, +/**/ {{0xa86f8a8e, 0xbf73e793} }, +/**/ {{0xdf91602d, 0x3f7e47d4} } }, +/**/ {{{0x00000000, 0x3fece000} }, +/**/ {{0x12ea22c7, 0x3fe77dd1} }, +/**/ {{0x8fc10d3d, 0x3c873260} }, +/**/ {{0xb77cb1a2, 0x3fe1a36d} }, +/**/ {{0x6e625be9, 0xbc42c20d} }, +/**/ {{0x4af7b13c, 0xbfd18bb1} }, +/**/ {{0xbc063e5a, 0xbc68446b} }, +/**/ {{0xe3952cbb, 0x3fb49dce} }, +/**/ {{0x58cf9123, 0x3c588e60} }, +/**/ {{0x491cfa44, 0x3f8fb0bb} }, +/**/ {{0x0e3f2a43, 0x3c1534fc} }, +/**/ {{0x1c3b7aca, 0xbfa3f0f8} }, +/**/ {{0x70eb708a, 0x3f9b3cfa} }, +/**/ {{0x5eaa8b7f, 0xbf7e167e} }, +/**/ {{0x2b587c04, 0xbf72da42} }, +/**/ {{0x882fa65b, 0x3f7d9199} } }, +/**/ {{{0x00000000, 0x3fed0000} }, +/**/ {{0xbd5d315e, 0x3fe78f6b} }, +/**/ {{0x89803740, 0x3c8406a0} }, +/**/ {{0xc35424ca, 0x3fe191e9} }, +/**/ {{0xf4be863f, 0xbc8fa3c1} }, +/**/ {{0x177d9a85, 0xbfd17c35} }, +/**/ {{0x6a99d546, 0xbc717b81} }, +/**/ {{0x144fffae, 0x3fb4ad44} }, +/**/ {{0xdccca2a3, 0x3c3538b3} }, +/**/ {{0xfb2b5523, 0x3f8e2516} }, +/**/ {{0x60181bd9, 0x3c0f7c11} }, +/**/ {{0xaa1cc641, 0xbfa39f90} }, +/**/ {{0x85304289, 0x3f9b07d1} }, +/**/ {{0x756fd193, 0xbf7ea930} }, +/**/ {{0xe2a9a0de, 0xbf71d352} }, +/**/ {{0x886fc912, 0x3f7cdcb1} } }, +/**/ {{{0x00000000, 0x3fed2000} }, +/**/ {{0xeb9c19a2, 0x3fe7a0f4} }, +/**/ {{0xcd815f57, 0x3c613c67} }, +/**/ {{0x5112636f, 0x3fe18075} }, +/**/ {{0x7a335b20, 0x3c80a172} }, +/**/ {{0x95e83705, 0xbfd16cad} }, +/**/ {{0x7b21d5e1, 0x3c62a94b} }, +/**/ {{0x08de0a7c, 0x3fb4bbf5} }, +/**/ {{0x057457a0, 0x3c3570d0} }, +/**/ {{0x7d750fdf, 0x3f8c9fc8} }, +/**/ {{0xfe4cff3c, 0x3c2900a7} }, +/**/ {{0x2caf50ea, 0xbfa34eca} }, +/**/ {{0x03888c77, 0x3f9ad1af} }, +/**/ {{0x71ac3a86, 0xbf7f33c4} }, +/**/ {{0x6296fd58, 0xbf70d2b9} }, +/**/ {{0x886d16b8, 0x3f7c2938} } }, +/**/ {{{0x00000000, 0x3fed4000} }, +/**/ {{0xad2e50fe, 0x3fe7b26c} }, +/**/ {{0xf30411fb, 0xbc8ce80d} }, +/**/ {{0x6bbc577a, 0x3fe16f10} }, +/**/ {{0xbd8abf47, 0xbc7d0db6} }, +/**/ {{0x58355b5f, 0xbfd15d1b} }, +/**/ {{0xbcc70038, 0xbc5b5457} }, +/**/ {{0xe8fdd51d, 0x3fb4c9e4} }, +/**/ {{0x28ac9383, 0x3c462959} }, +/**/ {{0x2029f143, 0x3f8b20c3} }, +/**/ {{0x2b420400, 0xbc2f8a44} }, +/**/ {{0x7b921c49, 0xbfa2fea7} }, +/**/ {{0xf468e79e, 0x3f9a9aa0} }, +/**/ {{0xcccbcb4f, 0xbf7fb66c} }, +/**/ {{0x9bd39a5f, 0xbf6fb0d0} }, +/**/ {{0x8813998f, 0x3f7b7748} } }, +/**/ {{{0x00000000, 0x3fed6000} }, +/**/ {{0x11a6092b, 0x3fe7c3d3} }, +/**/ {{0x2d303288, 0x3c8bb3cb} }, +/**/ {{0x1dc61b17, 0x3fe15dbb} }, +/**/ {{0xbb77dc56, 0xbc8f0487} }, +/**/ {{0xee0771ca, 0xbfd14d7e} }, +/**/ {{0xdc2fcbd0, 0x3c72d38b} }, +/**/ {{0xd6080f0e, 0x3fb4d716} }, +/**/ {{0xa9fbc2c3, 0xbc5cb5bc} }, +/**/ {{0xfc42e02f, 0x3f89a7f9} }, +/**/ {{0x857be8a4, 0xbc201eec} }, +/**/ {{0x44ceebb3, 0xbfa2af2b} }, +/**/ {{0x08511639, 0x3f9a62b5} }, +/**/ {{0xc8de23de, 0xbf8018ad} }, +/**/ {{0xc964501a, 0xbf6dc8a2} }, +/**/ {{0xeb913697, 0x3f7ac6f9} } }, +/**/ {{{0x00000000, 0x3fed8000} }, +/**/ {{0x289fa093, 0x3fe7d528} }, +/**/ {{0x1e2f3aa9, 0x3c856082} }, +/**/ {{0x711551bb, 0x3fe14c75} }, +/**/ {{0x71970f2c, 0xbc80c88e} }, +/**/ {{0xe4aa5095, 0xbfd13dd8} }, +/**/ {{0xb4b7ae12, 0x3c66dd31} }, +/**/ {{0xead4c211, 0x3fb4e38d} }, +/**/ {{0xe392a31e, 0x3c513fb0} }, +/**/ {{0xf6b74576, 0x3f88355f} }, +/**/ {{0xf3561ab7, 0x3ba8cb44} }, +/**/ {{0x0de0faaa, 0xbfa26058} }, +/**/ {{0x989371f0, 0x3f9a29f8} }, +/**/ {{0x2b085d9a, 0xbf805261} }, +/**/ {{0x2511c555, 0xbf6beccb} }, +/**/ {{0x87b9d333, 0x3f7a1863} } }, +/**/ {{{0x00000000, 0x3feda000} }, +/**/ {{0x01c114fe, 0x3fe7e66c} }, +/**/ {{0x8b760b8d, 0xbc8c82b8} }, +/**/ {{0x6f037c44, 0x3fe13b3f} }, +/**/ {{0x8562c8c0, 0xbc635393} }, +/**/ {{0xc7182435, 0xbfd12e29} }, +/**/ {{0x0d0fda95, 0xbc73da80} }, +/**/ {{0x3ba21a8b, 0x3fb4ef4d} }, +/**/ {{0x9aa41146, 0xbc17c450} }, +/**/ {{0xc39dff46, 0x3f86c8e7} }, +/**/ {{0x800ba9ae, 0x3c1ddd70} }, +/**/ {{0x34b94b56, 0xbfa21230} }, +/**/ {{0xa827f95a, 0x3f99f078} }, +/**/ {{0x19caa997, 0xbf808869} }, +/**/ {{0xf8c46d26, 0xbf6a1d29} }, +/**/ {{0xae59da17, 0x3f796b9a} } }, +/**/ {{{0x00000000, 0x3fedc000} }, +/**/ {{0xacb97898, 0x3fe7f79e} }, +/**/ {{0x80ead221, 0x3c8fd5ca} }, +/**/ {{0x20604825, 0x3fe12a19} }, +/**/ {{0xa18970f8, 0xbc5cc7d6} }, +/**/ {{0x1dfe6ba4, 0xbfd11e72} }, +/**/ {{0x9d653d1c, 0x3c706717} }, +/**/ {{0xd5fcbb3b, 0x3fb4fa57} }, +/**/ {{0x5f50bc06, 0x3c1922c8} }, +/**/ {{0xe93a179f, 0x3f856283} }, +/**/ {{0x5ea7135a, 0xbc01c2ec} }, +/**/ {{0xf0c06b4f, 0xbfa1c4b5} }, +/**/ {{0xe48a3b04, 0x3f99b641} }, +/**/ {{0xe1280a21, 0xbf80badd} }, +/**/ {{0x1be3c5dd, 0xbf68599e} }, +/**/ {{0x3a72c8e6, 0x3f78c0b3} } }, +/**/ {{{0x00000000, 0x3fede000} }, +/**/ {{0x3940694b, 0x3fe808c0} }, +/**/ {{0x7715f6a5, 0xbc800f32} }, +/**/ {{0x8d73d98e, 0x3fe11902} }, +/**/ {{0x30f8e290, 0x3c71d158} }, +/**/ {{0x6fc305eb, 0xbfd10eb2} }, +/**/ {{0x3858c4b7, 0xbc7fd2e3} }, +/**/ {{0xc0a99255, 0x3fb504b0} }, +/**/ {{0x142e134f, 0x3c55c054} }, +/**/ {{0xc2f371cf, 0x3f840226} }, +/**/ {{0xfc7d6225, 0xbbfc85b0} }, +/**/ {{0x53d58f53, 0xbfa177eb} }, +/**/ {{0xa6a1627d, 0x3f997b60} }, +/**/ {{0x89757c78, 0xbf80e9d7} }, +/**/ {{0x0d433cd6, 0xbf66a205} }, +/**/ {{0x9c5dbd9f, 0x3f7817bf} } }, +/**/ {{{0x00000000, 0x3fee0000} }, +/**/ {{0xb7158a4d, 0x3fe819d0} }, +/**/ {{0x29d3b917, 0xbc7bf762} }, +/**/ {{0xbe011080, 0x3fe107fb} }, +/**/ {{0xbe011080, 0xbc8107fb} }, +/**/ {{0x40894fcd, 0xbfd0feeb} }, +/**/ {{0xc155af9a, 0x3c76fbb9} }, +/**/ {{0xfb9125f7, 0x3fb50e5a} }, +/**/ {{0x2f3313b0, 0x3c357762} }, +/**/ {{0x843ba55a, 0x3f82a7c2} }, +/**/ {{0x3fc197b7, 0x3c1f4994} }, +/**/ {{0x4b4ae875, 0xbfa12bd2} }, +/**/ {{0xf3b1b1ee, 0x3f993fe0} }, +/**/ {{0xd4c2083b, 0xbf81156d} }, +/**/ {{0x0c35aa9c, 0xbf64f63b} }, +/**/ {{0xe5d0462f, 0x3f7770d0} } }, +/**/ {{{0x00000000, 0x3fee2000} }, +/**/ {{0x36000005, 0x3fe82ad0} }, +/**/ {{0xce924d24, 0x3c74592f} }, +/**/ {{0xb947c8b7, 0x3fe0f704} }, +/**/ {{0x48a651b3, 0x3c436cd7} }, +/**/ {{0x1237505b, 0xbfd0ef1d} }, +/**/ {{0x1b86b9d1, 0x3c69239b} }, +/**/ {{0x7fac4e21, 0x3fb51759} }, +/**/ {{0xbfce0e36, 0xbc42a8cc} }, +/**/ {{0x3b5f3edd, 0x3f815349} }, +/**/ {{0x88c702d9, 0xbc25e1f1} }, +/**/ {{0xa0df17a9, 0xbfa0e06c} }, +/**/ {{0x7e56b8b1, 0x3f9903ce} }, +/**/ {{0x3c701e30, 0xbf813db8} }, +/**/ {{0x30c99e47, 0xbf63561b} }, +/**/ {{0xd5bffce0, 0x3f76cbf6} } }, +/**/ {{{0x00000000, 0x3fee4000} }, +/**/ {{0xc5cdee22, 0x3fe83bbe} }, +/**/ {{0x04ffc6c3, 0x3c631071} }, +/**/ {{0x86071468, 0x3fe0e61d} }, +/**/ {{0x59be09c9, 0xbc70ccc4} }, +/**/ {{0x647af38b, 0xbfd0df48} }, +/**/ {{0x427c295b, 0x3c7dd47c} }, +/**/ {{0x3ef25277, 0x3fb51faf} }, +/**/ {{0xa81026a7, 0x3bdf056a} }, +/**/ {{0xd443a18b, 0x3f8004ac} }, +/**/ {{0x8178f329, 0x3c027610} }, +/**/ {{0xfbb3a658, 0xbfa095bb} }, +/**/ {{0xa7859d46, 0x3f98c734} }, +/**/ {{0xeefe9a81, 0xbf8162cd} }, +/**/ {{0x8330eac0, 0xbf61c17f} }, +/**/ {{0xe421c20a, 0x3f76293f} } }, +/**/ {{{0x00000000, 0x3fee6000} }, +/**/ {{0x7653f7eb, 0x3fe84c9c} }, +/**/ {{0xfe0a3e8f, 0xbc383611} }, +/**/ {{0x2a7f71b5, 0x3fe0d546} }, +/**/ {{0x596848c6, 0x3c757061} }, +/**/ {{0xb4cf51a6, 0xbfd0cf6d} }, +/**/ {{0x5b18bb8c, 0x3c4c99ab} }, +/**/ {{0x24486227, 0x3fb5275f} }, +/**/ {{0xbb1f4f56, 0x3c5b4a59} }, +/**/ {{0x36238bb2, 0x3f7d77be} }, +/**/ {{0xcaec6ba2, 0x3c1ddbd1} }, +/**/ {{0xe1406cd0, 0xbfa04bc1} }, +/**/ {{0x7f96d6ca, 0x3f988a1e} }, +/**/ {{0xcdffc380, 0xbf8184c5} }, +/**/ {{0x12561f8b, 0xbf603841} }, +/**/ {{0x4d81a668, 0x3f7588b9} } }, +/**/ {{{0x00000000, 0x3fee8000} }, +/**/ {{0x576cc2c5, 0x3fe85d69} }, +/**/ {{0x7fc8b8c3, 0x3c66b66e} }, +/**/ {{0xac74fadc, 0x3fe0c47e} }, +/**/ {{0x77bb1887, 0xbc8035f8} }, +/**/ {{0x7e8202a9, 0xbfd0bf8d} }, +/**/ {{0x1f4d2357, 0x3c798048} }, +/**/ {{0x13725c73, 0x3fb52e6c} }, +/**/ {{0xf5b19ded, 0xbc34c3af} }, +/**/ {{0x7d9c2711, 0x3f7af1a3} }, +/**/ {{0x1af1098d, 0x3bea7ec7} }, +/**/ {{0xb643d11f, 0xbfa0027f} }, +/**/ {{0xc756b7d7, 0x3f984c96} }, +/**/ {{0x6c3ca3ae, 0xbf81a3b6} }, +/**/ {{0x13459246, 0xbf5d7470} }, +/**/ {{0x1e70d9a4, 0x3f74ea6f} } }, +/**/ {{{0x00000000, 0x3feea000} }, +/**/ {{0x78f87ae5, 0x3fe86e25} }, +/**/ {{0x375cfe34, 0x3c8022b1} }, +/**/ {{0x11319104, 0x3fe0b3c7} }, +/**/ {{0x25152519, 0x3c8ac394} }, +/**/ {{0x3ab87c8a, 0xbfd0afa8} }, +/**/ {{0x27b31384, 0x3c724f26} }, +/**/ {{0xe904e078, 0x3fb534d8} }, +/**/ {{0xf8948323, 0xbc55bfde} }, +/**/ {{0xa7bb2dfb, 0x3f7876ec} }, +/**/ {{0x8a87be50, 0xbc197116} }, +/**/ {{0x7f5f95b4, 0xbf9f73ed} }, +/**/ {{0xf11c3266, 0x3f980ea7} }, +/**/ {{0x0c032389, 0xbf81bfb6} }, +/**/ {{0x8bf305a1, 0xbf5a8e77} }, +/**/ {{0x3ec72e6d, 0x3f744e6c} } }, +/**/ {{{0x00000000, 0x3feec000} }, +/**/ {{0xeadc5a2a, 0x3fe87ed0} }, +/**/ {{0xd957f4bc, 0x3c70af5a} }, +/**/ {{0x5d8701b3, 0x3fe0a31f} }, +/**/ {{0x263ce937, 0xbc869b25} }, +/**/ {{0x60757b83, 0xbfd09fbe} }, +/**/ {{0xa96db9ef, 0x3c767aff} }, +/**/ {{0x7a589afb, 0x3fb53aa8} }, +/**/ {{0x0844ff86, 0xbc4b7e8e} }, +/**/ {{0xacf1a65c, 0x3f76077c} }, +/**/ {{0xb13331a9, 0xbc19a3b2} }, +/**/ {{0x472733eb, 0xbf9ee450} }, +/**/ {{0x21e541d7, 0x3f97d05c} }, +/**/ {{0x9d9d4dfc, 0xbf81d8da} }, +/**/ {{0xd3ce1b4a, 0xbf57be45} }, +/**/ {{0x7cb60047, 0x3f73b4ba} } }, +/**/ {{{0x00000000, 0x3feee000} }, +/**/ {{0xbd023119, 0x3fe88f6b} }, +/**/ {{0x25aba660, 0xbc532d1d} }, +/**/ {{0x95d126c6, 0x3fe09287} }, +/**/ {{0xeccc37a6, 0x3c85aad3} }, +/**/ {{0x649e7367, 0xbfd08fd0} }, +/**/ {{0xed21a127, 0x3c71e96c} }, +/**/ {{0x957ec910, 0x3fb53fdd} }, +/**/ {{0xaf97a601, 0xbc339c23} }, +/**/ {{0x5a18e5a2, 0x3f73a336} }, +/**/ {{0x477571de, 0xbc1f7225} }, +/**/ {{0xd4044135, 0xbf9e5629} }, +/**/ {{0x32786dc4, 0x3f9791bd} }, +/**/ {{0xbdf030c4, 0xbf81ef39} }, +/**/ {{0xe21b8bcb, 0xbf550386} }, +/**/ {{0x97aa7fb2, 0x3f731d62} } }, +/**/ {{{0x00000000, 0x3fef0000} }, +/**/ {{0xff57f1f8, 0x3fe89ff5} }, +/**/ {{0x5e177a1b, 0xbc855b9a} }, +/**/ {{0xbdf80108, 0x3fe081ff} }, +/**/ {{0x80108200, 0x3c6ffbdf} }, +/**/ {{0xba010928, 0xbfd07fde} }, +/**/ {{0x7bae0295, 0x3c38d37f} }, +/**/ {{0x0136e69f, 0x3fb5447b} }, +/**/ {{0x0dda278d, 0x3c50316a} }, +/**/ {{0x55103947, 0x3f7149fc} }, +/**/ {{0x849e505f, 0x3c176e96} }, +/**/ {{0xfbe9a2ee, 0xbf9dc97b} }, +/**/ {{0xb08adda9, 0x3f9752d4} }, +/**/ {{0xb540d106, 0xbf8202e8} }, +/**/ {{0x859de3e9, 0xbf525de5} }, +/**/ {{0x4afd9f21, 0x3f72886c} } }, +/**/ {{{0x00000000, 0x3fef2000} }, +/**/ {{0xc1cf3dff, 0x3fe8b06f} }, +/**/ {{0x2656db6d, 0xbc80fb31} }, +/**/ {{0xd971cd38, 0x3fe07187} }, +/**/ {{0x202c20ac, 0x3c89baa4} }, +/**/ {{0xd15893ab, 0xbfd06fe9} }, +/**/ {{0xdc0cb586, 0xbc7a864b} }, +/**/ {{0x7ce57fed, 0x3fb54883} }, +/**/ {{0x294f4b18, 0xbc49498e} }, +/**/ {{0x426ebecc, 0x3f6df762} }, +/**/ {{0xf28644c0, 0xbc022f08} }, +/**/ {{0x5c564b44, 0xbf9d3e48} }, +/**/ {{0xdfea7acf, 0x3f9713ab} }, +/**/ {{0x761db35c, 0xbf8213fc} }, +/**/ {{0x10d60f49, 0xbf4f9a17} }, +/**/ {{0x58700e9b, 0x3f71f5de} } }, +/**/ {{{0x00000000, 0x3fef4000} }, +/**/ {{0x145cf49d, 0x3fe8c0d9} }, +/**/ {{0x76dc4333, 0x3c8bea40} }, +/**/ {{0xeb45139a, 0x3fe0611f} }, +/**/ {{0x65aadb1f, 0x3c7e4998} }, +/**/ {{0x1953a316, 0xbfd05ff2} }, +/**/ {{0xa1b67b0f, 0x3c759922} }, +/**/ {{0xc08c1d66, 0x3fb54bf9} }, +/**/ {{0xd220330c, 0x3c5b9353} }, +/**/ {{0x478cb604, 0x3f69706e} }, +/**/ {{0xa22fd45a, 0xbbfdb6d3} }, +/**/ {{0x5c0d1d38, 0xbf9cb490} }, +/**/ {{0xbbaba2f2, 0x3f96d44b} }, +/**/ {{0x9c6b7de1, 0xbf822289} }, +/**/ {{0xa49803b6, 0xbf4aa143} }, +/**/ {{0x9270e49e, 0x3f7165be} } }, +/**/ {{{0x00000000, 0x3fef6000} }, +/**/ {{0x06f8c4cb, 0x3fe8d132} }, +/**/ {{0xbaa89a8b, 0xbc7b018c} }, +/**/ {{0xf60ab1f4, 0x3fe050c7} }, +/**/ {{0xc6cf5796, 0x3c63f8e2} }, +/**/ {{0xfe998dc0, 0xbfd04ff7} }, +/**/ {{0x7dc56419, 0x3c77873c} }, +/**/ {{0x7cc24121, 0x3fb54ee0} }, +/**/ {{0x8e5c84c5, 0x3c313117} }, +/**/ {{0x50066301, 0x3f64fee1} }, +/**/ {{0x017261a1, 0x3c043698} }, +/**/ {{0x2cc5b4f1, 0xbf9c2c55} }, +/**/ {{0xf759f369, 0x3f9694bc} }, +/**/ {{0x6c93426a, 0xbf822ea4} }, +/**/ {{0x135d6c51, 0xbf45d0a1} }, +/**/ {{0xe62dc18f, 0x3f70d811} } }, +/**/ {{{0x00000000, 0x3fef8000} }, +/**/ {{0xa99cc05e, 0x3fe8e17a} }, +/**/ {{0xab042f61, 0xbc7ec182} }, +/**/ {{0xfbefe001, 0x3fe0407f} }, +/**/ {{0xfbf80041, 0x3c401ffe} }, +/**/ {{0xebd00209, 0xbfd03ffb} }, +/**/ {{0xb9004112, 0xbc53ff3c} }, +/**/ {{0x5aaf6d91, 0x3fb5513a} }, +/**/ {{0xc0516ddb, 0x3c54a20d} }, +/**/ {{0xc6ac4038, 0x3f60a27f} }, +/**/ {{0x2a340912, 0x3bf06bee} }, +/**/ {{0xccd6032a, 0xbf9ba597} }, +/**/ {{0x002bb974, 0x3f965508} }, +/**/ {{0xd2d1068b, 0xbf823860} }, +/**/ {{0x666265bc, 0xbf41277e} }, +/**/ {{0x656b66ea, 0x3f704cdc} } }, +/**/ {{{0x00000000, 0x3fefa000} }, +/**/ {{0x0c44f167, 0x3fe8f1b3} }, +/**/ {{0xb93933fd, 0x3c6dd1ca} }, +/**/ {{0xfeb82e4e, 0x3fe03047} }, +/**/ {{0x5272e5ac, 0x3c69ee56} }, +/**/ {{0x49a09c45, 0xbfd02ffe} }, +/**/ {{0xb26267bb, 0xbc700a59} }, +/**/ {{0xfc062d2f, 0x3fb55309} }, +/**/ {{0xb11938e0, 0x3c5dba48} }, +/**/ {{0xe4f365be, 0x3f58b61b} }, +/**/ {{0xa79ad31a, 0x3bf8b585} }, +/**/ {{0x08d4ad17, 0xbf9b2059} }, +/**/ {{0xfe379940, 0x3f961534} }, +/**/ {{0x62a1270e, 0xbf823fd2} }, +/**/ {{0x3f3a0aec, 0xbf394a53} }, +/**/ {{0xa04bcae2, 0x3f6f8842} } }, +/**/ {{{0x00000000, 0x3fefc000} }, +/**/ {{0x3eeef187, 0x3fe901db} }, +/**/ {{0xe5603c8f, 0x3c868665} }, +/**/ {{0xffbf7f80, 0x3fe0201f} }, +/**/ {{0xffbf7f80, 0x3c20201f} }, +/**/ {{0x7ebe8004, 0xbfd01fff} }, +/**/ {{0xcf979001, 0xbc4213ff} }, +/**/ {{0xfb0012db, 0x3fb55451} }, +/**/ {{0xf73aa59f, 0xbc395606} }, +/**/ {{0xfc757100, 0x3f50509f} }, +/**/ {{0xfee554d0, 0x3bebc7da} }, +/**/ {{0x7d3424d0, 0xbf9a9c99} }, +/**/ {{0xd5ac0217, 0x3f95d54b} }, +/**/ {{0x564b3c49, 0xbf82450c} }, +/**/ {{0xe6d3e986, 0xbf3091df} }, +/**/ {{0x3bef5a22, 0x3f6e7bc6} } }, +/**/ {{{0x00000000, 0x3fefe000} }, +/**/ {{0x5199833b, 0x3fe911f3} }, +/**/ {{0x0edbf522, 0x3c63ae8a} }, +/**/ {{0xfffbfbfe, 0x3fe01007} }, +/**/ {{0xfffbfbfe, 0x3ba01007} }, +/**/ {{0xefebf400, 0xbfd00fff} }, +/**/ {{0xfff9f97d, 0xbc401209} }, +/**/ {{0xea5aaaf6, 0x3fb55514} }, +/**/ {{0xb5b7b240, 0xbc529baa} }, +/**/ {{0xffc7abc4, 0x3f402827} }, +/**/ {{0xbfee6ab3, 0x3b5ba3d6} }, +/**/ {{0x97d67093, 0xbf9a1a59} }, +/**/ {{0x28080aaf, 0x3f959554} }, +/**/ {{0x8e892ce2, 0xbf824821} }, +/**/ {{0xfe70a2a6, 0xbf204877} }, +/**/ {{0x0e8ddd67, 0x3f6d7447} } }, +/**/ {{{0x00000000, 0x3feff800} }, +/**/ {{0xd439826e, 0x3fe91dfa} }, +/**/ {{0x6df48d55, 0xbc786a19} }, +/**/ {{0x7ffffbff, 0x3fe00400} }, +/**/ {{0xffbff800, 0xbbeffffe} }, +/**/ {{0xffbfebfd, 0xbfd003ff} }, +/**/ {{0x9ffff9fe, 0xbb600480} }, +/**/ {{0x53aa5aab, 0x3fb55551} }, +/**/ {{0x9baaab5b, 0xbc542a4a} }, +/**/ {{0x7fffc7eb, 0x3f200a02} }, +/**/ {{0x4770e940, 0xbb7dfffe} }, +/**/ {{0x9997d8d0, 0xbf99b9a5} }, +/**/ {{0x50a80a03, 0x3f956555} }, +/**/ {{0x86456493, 0xbf824914} }, +/**/ {{0x7ffe7329, 0xbf001207} }, +/**/ {{0x1c63fe2a, 0x3f6cb1ef} } }, + }; + +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/uexp.h glibc-2.2.3/sysdeps/ieee754/dbl-64/uexp.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/uexp.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/uexp.h Sun Mar 11 22:44:16 2001 @@ -0,0 +1,69 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:uexp.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef UEXP_H +#define UEXP_H + +#include "mydefs.h" + +const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300, +err_0 = 1.000014, err_1 = 0.000016; +const static int4 bigint = 0x40862002, + badint = 0x40876000,smallint = 0x3C8fffff; +const static int4 hugeint = 0x7FFFFFFF, infint = 0x7ff00000; + +#ifdef BIG_ENDI +const static mynumber inf = {{0x7FF00000, 0}}; /* inf */ +const static mynumber t256 = {{0x4ff00000, 0}}; /* 2^256 */ + +const static mynumber ln_two1 = {{0x3FE62E42, 0xFEFA3800}};/*0.69314718055989033 */ +const static mynumber ln_two2 = {{0x3D2EF357, 0x93C76730}};/*5.4979230187083712e-14*/ +const static mynumber log2e = {{0x3FF71547, 0x652B82FE}};/* 1.4426950408889634 */ + +const static mynumber p2 = {{0x3FE00000, 0x000004DC}};/* 0.50000000000013811 */ +const static mynumber p3 = {{0x3FC55555, 0x55555A0F}};/* 0.16666666666670024 */ + +const static mynumber three33 = {{0x42180000, 0}}; /* 25769803776 */ +const static mynumber three51 = {{0x43380000, 0}}; /* 6755399441055744 */ + +#else +#ifdef LITTLE_ENDI + const static mynumber inf = {{0, 0x7FF00000}}; /* inf */ + const static mynumber t256 = {{0, 0x4ff00000}}; /* 2^256 */ + + const static mynumber ln_two1 = {{0xFEFA3800, 0x3FE62E42}};/*0.69314718055989033 */ + const static mynumber ln_two2 = {{0x93C76730, 0x3D2EF357}};/*5.4979230187083712e-14*/ + const static mynumber log2e = {{0x652B82FE, 0x3FF71547}};/* 1.4426950408889634 */ + + const static mynumber p2 = {{0x000004DC, 0x3FE00000}};/* 0.50000000000013811 */ + const static mynumber p3 = {{0x55555A0F, 0x3FC55555}};/* 0.16666666666670024 */ + + const static mynumber three33 = {{0, 0x42180000}}; /* 25769803776 */ + const static mynumber three51 = {{0, 0x43380000}}; /* 6755399441055744 */ + +#endif +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/uexp.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/uexp.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/uexp.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/uexp.tbl Sun Mar 11 22:46:02 2001 @@ -0,0 +1,1767 @@ +/****************************************************************/ +/* TABLES FOR THE ulog() FUNCTION */ +/****************************************************************/ + +#ifdef BIG_ENDI + +static const union { + int i[1424]; + double x[712]; +} coar = { .i = { + 0x3FE69A59, 0xC8000000, 0x3DF22D4D, 0x6079C9F7, + 0x3FE6A5A9, 0xC8000000, 0x3E19882D, 0x25AF6823, + 0x3FE6B0FF, 0x74000000, 0xBE221476, 0x31DABF59, + 0x3FE6BC5A, 0xC8000000, 0x3E2312AC, 0x99A2DC0A, + 0x3FE6C7BB, 0xD0000000, 0xBE265926, 0xCE9F9355, + 0x3FE6D322, 0x84000000, 0x3E2F2C26, 0x2D298DED, + 0x3FE6DE8E, 0xF4000000, 0xBE2EC28E, 0x1E748D2F, + 0x3FE6EA01, 0x14000000, 0x3E2D8C6D, 0xC68CB7E5, + 0x3FE6F578, 0xF4000000, 0x3DEE1A9E, 0x419FE2F0, + 0x3FE700F6, 0x90000000, 0xBDFF1AFD, 0xDEAEAE34, + 0x3FE70C79, 0xEC000000, 0xBE0730FE, 0x558B7122, + 0x3FE71803, 0x0C000000, 0xBE25CB85, 0x2D280C3B, + 0x3FE72391, 0xF0000000, 0xBE06F2CE, 0x337B7B54, + 0x3FE72F26, 0x9C000000, 0x3E289BCA, 0x45C02B72, + 0x3FE73AC1, 0x18000000, 0xBE18DEA6, 0x5039F1CA, + 0x3FE74661, 0x60000000, 0xBE09D090, 0x86CE0538, + 0x3FE75207, 0x78000000, 0x3E290E79, 0xCFCE5DDB, + 0x3FE75DB3, 0x68000000, 0x3DD61DF0, 0xB249A17C, + 0x3FE76965, 0x2C000000, 0x3E2F22F7, 0xE13445F7, + 0x3FE7751C, 0xD0000000, 0xBE2CD454, 0x874E75CE, + 0x3FE780DA, 0x4C000000, 0xBE0159CE, 0xDF43E3BC, + 0x3FE78C9D, 0xA8000000, 0x3E279291, 0x699A1332, + 0x3FE79866, 0xEC000000, 0xBE2A0BCD, 0x2DD98C6C, + 0x3FE7A436, 0x10000000, 0x3E25F375, 0x15AC979E, + 0x3FE7B00B, 0x20000000, 0x3E26CCF5, 0x2FEAFCF6, + 0x3FE7BBE6, 0x1C000000, 0x3E27D4F4, 0x53ADAD67, + 0x3FE7C7C7, 0x08000000, 0x3E10EEC7, 0x7FBD9566, + 0x3FE7D3AD, 0xE4000000, 0x3E2837F0, 0x9A831D86, + 0x3FE7DF9A, 0xB8000000, 0xBE129BE0, 0x5CB4C35B, + 0x3FE7EB8D, 0x80000000, 0x3E23990A, 0x0234F04D, + 0x3FE7F786, 0x44000000, 0x3E2EB807, 0x64D5C842, + 0x3FE80385, 0x08000000, 0x3E0FC86F, 0x02B4E9E8, + 0x3FE80F89, 0xCC000000, 0xBDD7B5B3, 0x7B4274BF, + 0x3FE81B94, 0x94000000, 0xBE16888B, 0xB899B00F, + 0x3FE827A5, 0x60000000, 0x3E288971, 0x5E94D155, + 0x3FE833BC, 0x38000000, 0x3E2AEEB2, 0x099F3E5E, + 0x3FE83FD9, 0x20000000, 0xBE23B922, 0x3FF60B7C, + 0x3FE84BFC, 0x14000000, 0xBDF7D3B1, 0x2DBD8012, + 0x3FE85825, 0x1C000000, 0xBDF24BA3, 0xA8872BEB, + 0x3FE86454, 0x38000000, 0x3E2EFE04, 0x01AA18A7, + 0x3FE87089, 0x70000000, 0x3E21986C, 0x944496A2, + 0x3FE87CC4, 0xC4000000, 0x3E096A8B, 0xB71FFAFF, + 0x3FE88906, 0x38000000, 0xBE21CE0A, 0xBC4C7AC5, + 0x3FE8954D, 0xCC000000, 0xBE076F45, 0xBAC02491, + 0x3FE8A19B, 0x84000000, 0x3E2B4FA2, 0xD922B925, + 0x3FE8ADEF, 0x68000000, 0x3DF759DB, 0x641863AF, + 0x3FE8BA49, 0x78000000, 0xBE2DB97C, 0xC6AB5E04, + 0x3FE8C6A9, 0xB4000000, 0xBE25364C, 0xE2156713, + 0x3FE8D310, 0x20000000, 0x3E1BEB7C, 0x862BEFF7, + 0x3FE8DF7C, 0xC4000000, 0xBDF4DD0C, 0x1CEA33A5, + 0x3FE8EBEF, 0xA0000000, 0xBE2537DF, 0x51797D47, + 0x3FE8F868, 0xB4000000, 0x3E0FB1C4, 0xF0107B28, + 0x3FE904E8, 0x08000000, 0x3E0AD6A1, 0xE01B68BD, + 0x3FE9116D, 0x9C000000, 0x3E292117, 0x1F78D9D9, + 0x3FE91DF9, 0x78000000, 0xBE1D75DA, 0x4F50E5CF, + 0x3FE92A8B, 0x98000000, 0x3DE5102B, 0x74959E58, + 0x3FE93724, 0x04000000, 0xBE01CA50, 0xD2216C35, + 0x3FE943C2, 0xBC000000, 0x3E225BFD, 0xB0B05884, + 0x3FE95067, 0xC8000000, 0xBE0F2183, 0x60B7C5C1, + 0x3FE95D13, 0x24000000, 0x3E2FB47A, 0xB5860441, + 0x3FE969C4, 0xDC000000, 0xBE01FFD2, 0xE2D4059E, + 0x3FE9767C, 0xEC000000, 0xBDE9ED72, 0x12BB6A8D, + 0x3FE9833B, 0x58000000, 0x3E2B3815, 0x43BFFB24, + 0x3FE99000, 0x28000000, 0x3E03FA22, 0xEE9EAD1E, + 0x3FE99CCB, 0x5C000000, 0xBE213841, 0x377138F7, + 0x3FE9A99C, 0xF4000000, 0x3E178105, 0xDB636C94, + 0x3FE9B674, 0xF8000000, 0x3E1E5E7A, 0xF5720122, + 0x3FE9C353, 0x6C000000, 0xBE238BFF, 0xA2AC5AAE, + 0x3FE9D038, 0x4C000000, 0x3E270893, 0xF93BDBD8, + 0x3FE9DD23, 0xA4000000, 0x3DF40420, 0x354B86CF, + 0x3FE9EA15, 0x74000000, 0xBE2D76D3, 0x88CB06B7, + 0x3FE9F70D, 0xBC000000, 0xBE251639, 0x9ED0EC60, + 0x3FEA040C, 0x80000000, 0x3E1F06E9, 0xE2DDE506, + 0x3FEA1111, 0xC8000000, 0x3E014549, 0x8E6DB477, + 0x3FEA1E1D, 0x94000000, 0xBDF4BC17, 0xF8716509, + 0x3FEA2B2F, 0xE8000000, 0xBE2107DB, 0xDA723A49, + 0x3FEA3848, 0xC4000000, 0x3E1A932A, 0x986AA369, + 0x3FEA4568, 0x30000000, 0x3E198092, 0x41592CDB, + 0x3FEA528E, 0x30000000, 0xBE2E260F, 0x676BCAB8, + 0x3FEA5FBA, 0xC0000000, 0x3DE2E821, 0x2D5D5610, + 0x3FEA6CED, 0xE8000000, 0x3E2F7046, 0x7DA20167, + 0x3FEA7A27, 0xB0000000, 0xBE1D2832, 0xF9FAAD30, + 0x3FEA8768, 0x14000000, 0xBE23F788, 0x43FA6C45, + 0x3FEA94AF, 0x18000000, 0x3E011E27, 0xAA082732, + 0x3FEAA1FC, 0xC4000000, 0xBE20BACB, 0xC682F0BF, + 0x3FEAAF51, 0x18000000, 0xBE2DC7DD, 0x7BD08C78, + 0x3FEABCAC, 0x14000000, 0x3E2271A2, 0xA3B10F9A, + 0x3FEACA0D, 0xC4000000, 0xBE15449C, 0x7966F94C, + 0x3FEAD776, 0x24000000, 0x3DD06137, 0x6FD8F3EE, + 0x3FEAE4E5, 0x3C000000, 0xBE267CD1, 0x8C5A144A, + 0x3FEAF25B, 0x0C000000, 0xBE29E584, 0xB59DA94B, + 0x3FEAFFD7, 0x98000000, 0xBE23DFCF, 0x7B52192F, + 0x3FEB0D5A, 0xE4000000, 0xBE1CF2FE, 0x78A76B45, + 0x3FEB1AE4, 0xF4000000, 0xBE23A561, 0x7EC80FF6, + 0x3FEB2875, 0xC8000000, 0x3E22C4C9, 0x932EED68, + 0x3FEB360D, 0x68000000, 0x3E2B085C, 0xB5833C97, + 0x3FEB43AB, 0xD8000000, 0xBE01F093, 0x93B9319A, + 0x3FEB5151, 0x18000000, 0xBE254F01, 0xFABCE670, + 0x3FEB5EFD, 0x28000000, 0x3E2F24C2, 0x627ABFB0, + 0x3FEB6CB0, 0x14000000, 0x3E1F1EEC, 0xE6AC0B48, + 0x3FEB7A69, 0xDC000000, 0xBE1A8671, 0x127F9ABC, + 0x3FEB882A, 0x80000000, 0xBDCB0C28, 0xC87C73B3, + 0x3FEB95F2, 0x08000000, 0xBE22E8DD, 0x7F2B5A97, + 0x3FEBA3C0, 0x74000000, 0xBE1B3645, 0x2D22A9D5, + 0x3FEBB195, 0xC8000000, 0x3E0ADACA, 0x428F8B88, + 0x3FEBBF72, 0x0C000000, 0xBE2E9E07, 0xCDF9F681, + 0x3FEBCD55, 0x3C000000, 0xBE08A127, 0x7FA54ACF, + 0x3FEBDB3F, 0x60000000, 0x3E0E92CE, 0x8225B385, + 0x3FEBE930, 0x7C000000, 0x3DF38C2A, 0x7BB09485, + 0x3FEBF728, 0x94000000, 0xBE2DFD64, 0xF681FA5F, + 0x3FEC0527, 0xA4000000, 0x3E2E384D, 0xDCE88BD2, + 0x3FEC132D, 0xBC000000, 0xBE20F111, 0xFE46A893, + 0x3FEC213A, 0xD4000000, 0x3E193DA1, 0xB189BFDA, + 0x3FEC2F4E, 0xF8000000, 0xBE20E3A1, 0x0E39FB00, + 0x3FEC3D6A, 0x24000000, 0x3E1DB044, 0x30F0FAC5, + 0x3FEC4B8C, 0x64000000, 0xBE2BC12C, 0x97446B17, + 0x3FEC59B5, 0xB4000000, 0xBE282696, 0x963F4150, + 0x3FEC67E6, 0x18000000, 0x3E224D26, 0x3049824B, + 0x3FEC761D, 0x98000000, 0x3E2C5BA5, 0x87F84C7D, + 0x3FEC845C, 0x38000000, 0xBDE1D14D, 0xC4852339, + 0x3FEC92A1, 0xF8000000, 0xBE1A451E, 0x5588D9E1, + 0x3FECA0EE, 0xDC000000, 0xBE1D3B96, 0x68BFF457, + 0x3FECAF42, 0xE8000000, 0xBE18B670, 0x4DADF774, + 0x3FECBD9E, 0x20000000, 0xBE1A1548, 0x7FB1FC01, + 0x3FECCC00, 0x88000000, 0xBE273F2E, 0x78FC5AF0, + 0x3FECDA6A, 0x20000000, 0x3E1D218F, 0xA6F4A841, + 0x3FECE8DA, 0xF0000000, 0x3E2E0BA9, 0x4D002CA0, + 0x3FECF752, 0xFC000000, 0x3E20F4BB, 0x065EF979, + 0x3FED05D2, 0x48000000, 0xBE2ED3D5, 0x11793B33, + 0x3FED1458, 0xD0000000, 0x3E115E3C, 0x913341B3, + 0x3FED22E6, 0xA0000000, 0x3DE97C02, 0xB3546109, + 0x3FED317B, 0xB8000000, 0x3E087540, 0x1BF898EF, + 0x3FED4018, 0x1C000000, 0x3E209430, 0x346F9641, + 0x3FED4EBB, 0xD0000000, 0x3E2B6DF4, 0x88F4B20B, + 0x3FED5D66, 0xDC000000, 0xBE2EC68F, 0x0CB26035, + 0x3FED6C19, 0x38000000, 0x3E2CA2C8, 0x1F44D9C3, + 0x3FED7AD2, 0xF4000000, 0x3E10E6F4, 0x41704EE0, + 0x3FED8994, 0x0C000000, 0x3E2F9273, 0x25F8F0E2, + 0x3FED985C, 0x88000000, 0x3E2D041A, 0x318798DE, + 0x3FEDA72C, 0x6C000000, 0xBE005680, 0x9349CF58, + 0x3FEDB603, 0xB8000000, 0xBE10F665, 0xCF0C934D, + 0x3FEDC4E2, 0x70000000, 0x3E166124, 0x19461C64, + 0x3FEDD3C8, 0x9C000000, 0xBE1B2ED6, 0x405624C8, + 0x3FEDE2B6, 0x3C000000, 0xBE273A7F, 0x62171501, + 0x3FEDF1AB, 0x54000000, 0xBE26022B, 0xE36E1450, + 0x3FEE00A7, 0xE8000000, 0xBE1C341E, 0x2E07AE15, + 0x3FEE0FAB, 0xFC000000, 0xBDFC7EAE, 0x18D0E701, + 0x3FEE1EB7, 0x94000000, 0x3E06B34F, 0xECD1FF8B, + 0x3FEE2DCA, 0xB4000000, 0x3E1394A3, 0x6813A649, + 0x3FEE3CE5, 0x60000000, 0x3E045496, 0xC1754D14, + 0x3FEE4C07, 0x9C000000, 0xBE180FFF, 0xF5C6087C, + 0x3FEE5B31, 0x68000000, 0x3E22FBCD, 0xADD9A300, + 0x3FEE6A62, 0xCC000000, 0x3E2EC7C7, 0xAF0289E5, + 0x3FEE799B, 0xCC000000, 0x3E242182, 0x3FB3EDD4, + 0x3FEE88DC, 0x6C000000, 0xBE201304, 0x04E39885, + 0x3FEE9824, 0xAC000000, 0xBE20D352, 0xE6831D31, + 0x3FEEA774, 0x90000000, 0x3E1E032D, 0x618DFCEB, + 0x3FEEB6CC, 0x20000000, 0x3E1956A3, 0xF9BB457E, + 0x3FEEC62B, 0x60000000, 0xBE2A77E0, 0x50845DB2, + 0x3FEED592, 0x4C000000, 0x3E2714F7, 0x47C43858, + 0x3FEEE500, 0xF0000000, 0x3E2EED96, 0x71813A66, + 0x3FEEF477, 0x50000000, 0xBE04CDBE, 0x4FB4AA34, + 0x3FEF03F5, 0x6C000000, 0xBE2774A2, 0x86EB4FF5, + 0x3FEF137B, 0x48000000, 0xBE29DD95, 0xAD43B2D2, + 0x3FEF2308, 0xE8000000, 0xBE1CADB0, 0xAC16E506, + 0x3FEF329E, 0x50000000, 0x3E12AC33, 0x58745C7B, + 0x3FEF423B, 0x88000000, 0xBE248118, 0x6EC2D854, + 0x3FEF51E0, 0x8C000000, 0x3E26986B, 0x304ACE08, + 0x3FEF618D, 0x68000000, 0x3E126D81, 0x3B09354E, + 0x3FEF7142, 0x1C000000, 0x3DF06AAE, 0x773C23B3, + 0x3FEF80FE, 0xAC000000, 0xBDA105B6, 0xD82EF423, + 0x3FEF90C3, 0x1C000000, 0x3DECDEED, 0x465499B8, + 0x3FEFA08F, 0x70000000, 0x3E0AEFD4, 0xE2EF03AE, + 0x3FEFB063, 0xAC000000, 0x3E1BD4C0, 0x0567B2E7, + 0x3FEFC03F, 0xD4000000, 0x3E26AA22, 0x4F97FCBF, + 0x3FEFD023, 0xF0000000, 0xBE2F9420, 0x5E4E88D1, + 0x3FEFE00F, 0xFC000000, 0xBE254004, 0x438E52E2, + 0x3FEFF004, 0x00000000, 0xBE1552AA, 0xEEE93EFC, + 0x3FF00000, 0x00000000, 0x00000000, 0x00000000, + 0x3FF00802, 0x00000000, 0x3E155800, 0x4449F507, + 0x3FF01008, 0x04000000, 0xBE354AA8, 0x882D75D6, + 0x3FF01812, 0x08000000, 0x3E303610, 0x3740DE56, + 0x3FF02020, 0x14000000, 0x3E360044, 0x5B0C3264, + 0x3FF02832, 0x28000000, 0x3E3C4C26, 0x0197EDC3, + 0x3FF03048, 0x48000000, 0x3E0B103B, 0x5046CA09, + 0x3FF03862, 0x74000000, 0xBE34659C, 0xF9A62624, + 0x3FF04080, 0xAC000000, 0xBE254438, 0xDD0A8F37, + 0x3FF048A2, 0xF4000000, 0x3DF256C2, 0x97AFB6E2, + 0x3FF050C9, 0x50000000, 0xBE3085DF, 0x923D25E1, + 0x3FF058F3, 0xC0000000, 0xBE3F0A93, 0x5EA3B091, + 0x3FF06122, 0x44000000, 0xBE237DE4, 0x5D63534C, + 0x3FF06954, 0xE0000000, 0x3E301719, 0xFF0C58B7, + 0x3FF0718B, 0x98000000, 0x3E2E8410, 0x9DF7B665, + 0x3FF079C6, 0x6C000000, 0x3E349CB9, 0x3B127222, + 0x3FF08205, 0x60000000, 0x3DF127EC, 0x98E0BD08, + 0x3FF08A48, 0x74000000, 0xBE24C1B6, 0x706CC41F, + 0x3FF0928F, 0xA8000000, 0x3E334EF9, 0x093044EF, + 0x3FF09ADB, 0x04000000, 0xBE1304B1, 0x56BC6C83, + 0x3FF0A32A, 0x84000000, 0x3E2D383E, 0xB028B984, + 0x3FF0AB7E, 0x30000000, 0xBE315B1E, 0x64E7A202, + 0x3FF0B3D6, 0x04000000, 0xBE0AC1E6, 0xC678291E, + 0x3FF0BC32, 0x04000000, 0x3E3A0418, 0x2F12FFE2, + 0x3FF0C492, 0x38000000, 0xBE37D617, 0x43D6D302, + 0x3FF0CCF6, 0x98000000, 0x3E2133F2, 0x152CC8FA, + 0x3FF0D55F, 0x2C000000, 0x3E3CE5D1, 0xE966E6B7, + 0x3FF0DDCB, 0xF8000000, 0x3E1ABF24, 0x7BCACA64, + 0x3FF0E63C, 0xFC000000, 0xBE3854F6, 0x2E8CDBED, + 0x3FF0EEB2, 0x38000000, 0xBE3E6463, 0x0C32156B, + 0x3FF0F72B, 0xAC000000, 0x3E365671, 0xB69772CC, + 0x3FF0FFA9, 0x64000000, 0xBE383E9A, 0x02B1201A, + 0x3FF1082B, 0x58000000, 0xBE205962, 0x50549CC0, + 0x3FF110B1, 0x90000000, 0xBE376BFE, 0xFFDACA72, + 0x3FF1193C, 0x08000000, 0x3E3C1C59, 0x5C43E2F3, + 0x3FF121CA, 0xCC000000, 0xBE26D374, 0xF7067C8B, + 0x3FF12A5D, 0xD4000000, 0x3E343CCC, 0x4DDAFE1D, + 0x3FF132F5, 0x28000000, 0x3E3D5C16, 0x58EBCB7F, + 0x3FF13B90, 0xCC000000, 0xBE2B5D12, 0xB66E8B53, + 0x3FF14430, 0xBC000000, 0xBE24E919, 0xB326B482, + 0x3FF14CD4, 0xFC000000, 0x3E23139A, 0xC8AABD43, + 0x3FF1557D, 0x90000000, 0x3E30DD8B, 0x16743B55, + 0x3FF15E2A, 0x7C000000, 0xBE31D701, 0x35904C50, + 0x3FF166DB, 0xBC000000, 0x3E107F42, 0x30E0CA83, + 0x3FF16F91, 0x58000000, 0xBE24F1F2, 0xDA1B7123, + 0x3FF1784B, 0x50000000, 0xBE3ACAF2, 0x0DC79E23, + 0x3FF18109, 0xA4000000, 0xBE23DC79, 0x609374EE, + 0x3FF189CC, 0x58000000, 0x3E262CF7, 0x3A40C3B7, + 0x3FF19293, 0x70000000, 0x3E1D3833, 0x5A24F463, + 0x3FF19B5E, 0xEC000000, 0x3E2BA9AD, 0x8A2E4440, + 0x3FF1A42E, 0xD0000000, 0x3DFD8CBC, 0x61C41828, + 0x3FF1AD03, 0x1C000000, 0x3E1A65E6, 0x5A4DDF0D, + 0x3FF1B5DB, 0xD4000000, 0xBDE2FDBB, 0x9F828DB5, + 0x3FF1BEB8, 0xF8000000, 0x3E2F4EE8, 0xB79B700F, + 0x3FF1C79A, 0x8C000000, 0x3E3ACC35, 0x0DE1D7E8, + 0x3FF1D080, 0x94000000, 0x3E11729E, 0xFF9E20A0, + 0x3FF1D96B, 0x10000000, 0xBE300F18, 0x6C2EA70B, + 0x3FF1E25A, 0x00000000, 0x3DF32E02, 0xCE425A35, + 0x3FF1EB4D, 0x68000000, 0x3E3BDE56, 0x9A322D12, + 0x3FF1F445, 0x50000000, 0xBE3C3F0D, 0xBA737AEF, + 0x3FF1FD41, 0xB0000000, 0xBE0A2DD0, 0xC896DB7A, + 0x3FF20642, 0x90000000, 0x3E2577B0, 0xF8B782F6, + 0x3FF20F47, 0xF4000000, 0xBE2C6DA3, 0x73607FC8, + 0x3FF21851, 0xD8000000, 0x3E35F7D1, 0xC8917348, + 0x3FF22160, 0x44000000, 0x3E3B6F5C, 0xCF9CED69, + 0x3FF22A73, 0x3C000000, 0xBE39967E, 0x85775C2E, + 0x3FF2338A, 0xB8000000, 0x3E3B3213, 0x497226D4, + 0x3FF23CA6, 0xC4000000, 0x3E3E2710, 0x30733227, + 0x3FF245C7, 0x60000000, 0x3E33B8A9, 0xAF215A72, + 0x3FF24EEC, 0x90000000, 0xBE3F96B2, 0x1365623F, + 0x3FF25816, 0x50000000, 0xBE37324F, 0x27DEE202, + 0x3FF26144, 0xA4000000, 0x3E318CD5, 0x4E484D87, + 0x3FF26A77, 0x94000000, 0xBDE3FD37, 0xA94519E8, + 0x3FF273AF, 0x1C000000, 0x3E37132F, 0xEE788C29, + 0x3FF27CEB, 0x44000000, 0xBE03DDB7, 0xE842E5C0, + 0x3FF2862C, 0x08000000, 0x3E37A3FB, 0xE17C9693, + 0x3FF28F71, 0x70000000, 0x3E24EABF, 0xAEB3D9A0, + 0x3FF298BB, 0x7C000000, 0xBE13C7B6, 0x853B0733, + 0x3FF2A20A, 0x2C000000, 0x3E2D2C80, 0xC7B588B5, + 0x3FF2AB5D, 0x88000000, 0xBE35B750, 0x708F3912, + 0x3FF2B4B5, 0x8C000000, 0xBE291A70, 0xD5FD9130, + 0x3FF2BE12, 0x3C000000, 0x3E2EE937, 0x0CCF9F73, + 0x3FF2C773, 0xA0000000, 0xBE3C3F0C, 0xD42CF76C, + 0x3FF2D0D9, 0xB0000000, 0x3E35DD54, 0x60763D61, + 0x3FF2DA44, 0x78000000, 0x3E26C418, 0xE7D6AA3B, + 0x3FF2E3B3, 0xF8000000, 0xBE3605C6, 0x6FB9B7A8, + 0x3FF2ED28, 0x2C000000, 0x3E3763D4, 0x24DCDDF5, + 0x3FF2F6A1, 0x20000000, 0xBE1A411E, 0xA8EC1AA8, + 0x3FF3001E, 0xD0000000, 0xBE23FCA1, 0x1FE8546F, + 0x3FF309A1, 0x40000000, 0xBE29DF0D, 0x3AAEE75E, + 0x3FF31328, 0x70000000, 0x3E36A5D6, 0x3C2C4206, + 0x3FF31CB4, 0x68000000, 0x3E1B7A3E, 0xB4C979B0, + 0x3FF32645, 0x28000000, 0xBE36157D, 0x706CD593, + 0x3FF32FDA, 0xB0000000, 0xBE39F357, 0x8DA4C646, + 0x3FF33975, 0x04000000, 0xBE3E64DE, 0xD575FE6F, + 0x3FF34314, 0x24000000, 0x3E07F9E3, 0x44D008E0, + 0x3FF34CB8, 0x18000000, 0xBE2E94F9, 0x5A563E77, + 0x3FF35660, 0xDC000000, 0x3E314DC2, 0x2475EF19, + 0x3FF3600E, 0x78000000, 0x3E26D623, 0xA33AC606, + 0x3FF369C0, 0xEC000000, 0x3E170F86, 0xC05B3160, + 0x3FF37378, 0x3C000000, 0xBE38DDFE, 0xDB0AE31A, + 0x3FF37D34, 0x64000000, 0x3E3662A9, 0x5706B570, + 0x3FF386F5, 0x70000000, 0xBE1625E4, 0x6770731E, + 0x3FF390BB, 0x5C000000, 0xBE1678F1, 0x62971091, + 0x3FF39A86, 0x2C000000, 0xBE061F7C, 0xD045CB0C, + 0x3FF3A455, 0xE4000000, 0xBE35CF51, 0x568B1CA2, + 0x3FF3AE2A, 0x84000000, 0xBE378185, 0x7FB61F58, + 0x3FF3B804, 0x0C000000, 0x3E3F77F4, 0x4FA133AF, + 0x3FF3C1E2, 0x88000000, 0xBE22F96A, 0xB00B73FE, + 0x3FF3CBC5, 0xF0000000, 0x3E351A64, 0x1EB4CE2F, + 0x3FF3D5AE, 0x50000000, 0xBE3D3516, 0xD3755639, + 0x3FF3DF9B, 0xA0000000, 0x3E1CD938, 0x43E8C10E, + 0x3FF3E98D, 0xEC000000, 0xBE35EE23, 0x455C8842, + 0x3FF3F385, 0x30000000, 0xBE29B282, 0x96C9F4ED, + 0x3FF3FD81, 0x70000000, 0x3E24A40E, 0x3168CC0B, + 0x3FF40782, 0xB0000000, 0x3E3784BC, 0x86C72839, + 0x3FF41188, 0xF4000000, 0x3E061F19, 0x0785D847, + 0x3FF41B94, 0x3C000000, 0xBE27AEF2, 0xE654A9C9, + 0x3FF425A4, 0x88000000, 0x3E33DFC3, 0xF9E4C1BA, + 0x3FF42FB9, 0xE0000000, 0x3E2455A8, 0x593D0C75, + 0x3FF439D4, 0x44000000, 0xBDE41D4E, 0x238B65D1, + 0x3FF443F3, 0xB4000000, 0x3E3BE616, 0x454CBECB, + 0x3FF44E18, 0x38000000, 0x3E207B3C, 0x931C5332, + 0x3FF45841, 0xD0000000, 0xBE330846, 0x7615DCC9, + 0x3FF46270, 0x7C000000, 0xBE2A8A7B, 0xE497F84E, + 0x3FF46CA4, 0x40000000, 0x3E020B50, 0xF737AF78, + 0x3FF476DD, 0x20000000, 0x3E116B19, 0xE34AFBD3, + 0x3FF4811B, 0x20000000, 0xBE3E15A7, 0x841EDB52, + 0x3FF48B5E, 0x3C000000, 0x3E0F40C3, 0x33B3DE1E, + 0x3FF495A6, 0x7C000000, 0x3E33607F, 0x92EFEE02, + 0x3FF49FF3, 0xE4000000, 0xBE1A2DB5, 0x14F7E168, + 0x3FF4AA46, 0x70000000, 0x3E3F59EC, 0x3EBA1C94, + 0x3FF4B49E, 0x2C000000, 0xBE31A539, 0x8B9AE885, + 0x3FF4BEFB, 0x10000000, 0x3E2FAC0B, 0xF13C8C95, + 0x3FF4C95D, 0x28000000, 0xBE32C0BB, 0xF8B74775, + 0x3FF4D3C4, 0x70000000, 0xBE2FC24E, 0x4F9474BB, + 0x3FF4DE30, 0xEC000000, 0x3E008F30, 0x09DA911F, + 0x3FF4E8A2, 0xA0000000, 0x3E2994C1, 0xBAF8D98B, + 0x3FF4F319, 0x90000000, 0xBE17C38C, 0x18648D0A, + 0x3FF4FD95, 0xBC000000, 0xBE288852, 0xF22F8698, + 0x3FF50817, 0x28000000, 0xBE3C3EC3, 0x30A2C153, + 0x3FF5129D, 0xD4000000, 0xBE27B606, 0x968492AA, + 0x3FF51D29, 0xC4000000, 0x3E2E0396, 0x61101629, + 0x3FF527BA, 0xFC000000, 0x3E3E876F, 0xDAEEAB38, + 0x3FF53251, 0x80000000, 0x3E29F59E, 0xED945B30, + 0x3FF53CED, 0x50000000, 0x3E12D7DA, 0x0B4AE3F1, + 0x3FF5478E, 0x70000000, 0xBE2FAFB8, 0x5FB946D0, + 0x3FF55234, 0xE0000000, 0xBE18A8B3, 0x87D80C66, + 0x3FF55CE0, 0xA4000000, 0x3E28B18F, 0x764CF85C, + 0x3FF56791, 0xC0000000, 0x3E326017, 0x2BDBC6F4, + 0x3FF57248, 0x38000000, 0xBE229F98, 0x53D523FE, + 0x3FF57D04, 0x0C000000, 0xBE3BDD08, 0x4D9B8720, + 0x3FF587C5, 0x3C000000, 0x3E169EBC, 0x09D8749E, + 0x3FF5928B, 0xD0000000, 0x3E190C8C, 0x339C2080, + 0x3FF59D57, 0xC8000000, 0x3E310FA4, 0xDE75E9CA, + 0x3FF5A829, 0x28000000, 0x3E313D18, 0x1097F186, + 0x3FF5B2FF, 0xF4000000, 0xBE2BDE04, 0xD51C23F6, + 0x3FF5BDDC, 0x28000000, 0x3E3EE67E, 0x8938C386, + 0x3FF5C8BD, 0xD0000000, 0x3E0973B8, 0x47DF6575, + 0x3FF5D3A4, 0xE8000000, 0x3E24DF02, 0x1DB97781, + 0x3FF5DE91, 0x78000000, 0xBE3FBA00, 0xAC4AECDC, + 0x3FF5E983, 0x7C000000, 0xBE2F37AF, 0x939F646A, + 0x3FF5F47A, 0xFC000000, 0xBE396DEF, 0x58A6EEE9, + 0x3FF5FF77, 0xF8000000, 0xBE315248, 0xE3613C7B, + 0x3FF60A7A, 0x74000000, 0xBE26A9E2, 0xF1553706, + 0x3FF61582, 0x74000000, 0xBE3B6BF6, 0xAE4D7CB6, + 0x3FF6208F, 0xF8000000, 0xBE35775B, 0x9EB5EBA5, + 0x3FF62BA3, 0x04000000, 0xBE2A821B, 0xC1E43506, + 0x3FF636BB, 0x9C000000, 0xBE367CDA, 0x7B2D8CF4, + 0x3FF641D9, 0xC0000000, 0xBE13218B, 0x3E907A1D, + 0x3FF64CFD, 0x74000000, 0x3E3454EE, 0x7BF5DFE4, + 0x3FF65826, 0xC0000000, 0xBE3E960F, 0x6366C5FD, + 0x3FF66355, 0x9C000000, 0x3E2E378F, 0x8B43C17E, + 0x3FF66E8A, 0x14000000, 0x3E244BE0, 0xA4306535, + 0x3FF679C4, 0x28000000, 0xBDE4B6C1, 0x8DF63D6E, + 0x3FF68503, 0xD8000000, 0x3E3BA122, 0xE6A239CF, + 0x3FF69049, 0x2C000000, 0x3E27F286, 0x59FB5F30, + 0x3FF69B94, 0x24000000, 0xBE044041, 0x971D3970 } }; + +static const union { + int4 i[2048]; + double x[1024]; +} fine = { .i = { + 0x3FF00000, 0x00000000, 0x00000000, 0x00000000, + 0x3FF00004, 0x00000000, 0x3DA00001, 0x55556AAB, + 0x3FF00008, 0x00000000, 0x3DC00002, 0xAAAB0000, + 0x3FF0000C, 0x00000000, 0x3DD20004, 0x8000D800, + 0x3FF00010, 0x00000000, 0x3DE00005, 0x5556AAAB, + 0x3FF00014, 0x00000000, 0x3DE9000A, 0x6AADEC01, + 0x3FF00018, 0x00000000, 0x3DF20009, 0x00036001, + 0x3FF0001C, 0x00000000, 0x3DF8800E, 0x4AB0EB58, + 0x3FF00020, 0x00000000, 0x3E00000A, 0xAAB00002, + 0x3FF00024, 0x00000000, 0x3E04400F, 0x30088B04, + 0x3FF00028, 0x00000000, 0x3E090014, 0xD5625AB1, + 0x3FF0002C, 0x00000000, 0x3E0E401B, 0xBABDBB0A, + 0x3FF00030, 0x00000000, 0x3E120012, 0x000D8008, + 0x3FF00034, 0x00000000, 0x3E152016, 0xE2BD42E1, + 0x3FF00038, 0x00000000, 0x3E18801C, 0x956E5812, + 0x3FF0003C, 0x00000000, 0x3E1C2023, 0x2820F599, + 0x3FF00040, 0x00000000, 0x3E200015, 0x556AAABC, + 0x3FF00044, 0x00000000, 0x3E221019, 0x96C5DAD7, + 0x3FF00048, 0x00000000, 0x3E24401E, 0x60222C1F, + 0x3FF0004C, 0x00000000, 0x3E269023, 0xB97FC193, + 0x3FF00050, 0x00000000, 0x3E290029, 0xAADEC034, + 0x3FF00054, 0x00000000, 0x3E2B9030, 0x3C3F4F02, + 0x3FF00058, 0x00000000, 0x3E2E4037, 0x75A196FF, + 0x3FF0005C, 0x00000000, 0x3E30881F, 0xAF82E194, + 0x3FF00060, 0x00000000, 0x3E320024, 0x00360041, + 0x3FF00064, 0x00000000, 0x3E338828, 0xB0EA3F05, + 0x3FF00068, 0x00000000, 0x3E35202D, 0xC59FB661, + 0x3FF0006C, 0x00000000, 0x3E36C833, 0x42567FD5, + 0x3FF00070, 0x00000000, 0x3E388039, 0x2B0EB5E1, + 0x3FF00074, 0x00000000, 0x3E3A483F, 0x83C87407, + 0x3FF00078, 0x00000000, 0x3E3C2046, 0x5083D6C6, + 0x3FF0007C, 0x00000000, 0x3E3E084D, 0x9540FB9E, + 0x3FF00080, 0x04000000, 0xBE3FFFAA, 0xA9FFFEEF, + 0x3FF00084, 0x04000000, 0xBE3DF7A2, 0x693EF962, + 0x3FF00088, 0x04000000, 0xBE3BDF99, 0xA47BD339, + 0x3FF0008C, 0x04000000, 0xBE39B790, 0x57B66AF5, + 0x3FF00090, 0x04000000, 0xBE377F86, 0x7EEE9E14, + 0x3FF00094, 0x04000000, 0xBE35377C, 0x16244916, + 0x3FF00098, 0x04000000, 0xBE32DF71, 0x1957477B, + 0x3FF0009C, 0x04000000, 0xBE307765, 0x848773C2, + 0x3FF000A0, 0x04000000, 0xBE2BFEB2, 0xA7694ED3, + 0x3FF000A4, 0x04000000, 0xBE26EE99, 0x05BD75E2, + 0x3FF000A8, 0x04000000, 0xBE21BE7E, 0x1C0B0BB1, + 0x3FF000AC, 0x04000000, 0xBE18DCC3, 0xC4A37A79, + 0x3FF000B0, 0x04000000, 0xBE0BF911, 0x4244D60F, + 0x3FF000B4, 0x04000000, 0xBDE6E255, 0xEC91D848, + 0x3FF000B8, 0x04000000, 0x3E0107EB, 0xEC1B8F0C, + 0x3FF000BC, 0x04000000, 0x3E142439, 0x89BE52AA, + 0x3FF000C0, 0x04000000, 0x3E200240, 0x06C01033, + 0x3FF000C4, 0x04000000, 0x3E261264, 0xC8A9F760, + 0x3FF000C8, 0x04000000, 0x3E2C428B, 0x129D3FDE, + 0x3FF000CC, 0x04000000, 0x3E314959, 0x764D2658, + 0x3FF000D0, 0x04000000, 0x3E34816E, 0x2F50C16C, + 0x3FF000D4, 0x04000000, 0x3E37C983, 0xB859A4AB, + 0x3FF000D8, 0x04000000, 0x3E3B219A, 0x15680499, + 0x3FF000DC, 0x04000000, 0x3E3E89B1, 0x4A7C16B5, + 0x3FF000E0, 0x08000000, 0xBE3DFE36, 0xA469EE7E, + 0x3FF000E4, 0x08000000, 0xBE3A761D, 0xB349D37F, + 0x3FF000E8, 0x08000000, 0xBE36DE03, 0xDE235FCD, + 0x3FF000EC, 0x08000000, 0xBE3335E9, 0x20F659E6, + 0x3FF000F0, 0x08000000, 0xBE2EFB9A, 0xEF850E8F, + 0x3FF000F4, 0x08000000, 0xBE276B61, 0xBD0F58E2, + 0x3FF000F8, 0x08000000, 0xBE1F764D, 0x45163381, + 0x3FF000FC, 0x08000000, 0xBE0FABA6, 0x5FDF589A, + 0x3FF00100, 0x08000000, 0x3D8555AA, 0xABBBBE94, + 0x3FF00104, 0x08000000, 0x3E102B2C, 0xDABB690B, + 0x3FF00108, 0x08000000, 0x3E2045D9, 0x7820FBA0, + 0x3FF0010C, 0x08000000, 0x3E28961E, 0x92F54742, + 0x3FF00110, 0x08000000, 0x3E308332, 0xE2ED8E39, + 0x3FF00114, 0x08000000, 0x3E34CB57, 0x8C698119, + 0x3FF00118, 0x08000000, 0x3E39237D, 0x49EEC0C4, + 0x3FF0011C, 0x08000000, 0x3E3D8BA4, 0x1F7D92BC, + 0x3FF00120, 0x0C000000, 0xBE3DFC33, 0xEEE9C27D, + 0x3FF00124, 0x0C000000, 0xBE39740A, 0xDD46F763, + 0x3FF00128, 0x0C000000, 0xBE34DBE0, 0xA799C375, + 0x3FF0012C, 0x0C000000, 0xBE3033B5, 0x49E1DD2F, + 0x3FF00130, 0x0C000000, 0xBE26F711, 0x803DF41F, + 0x3FF00134, 0x0C000000, 0xBE1ACD6C, 0x19433A4C, + 0x3FF00138, 0x0C000000, 0xBDFDB2C1, 0x8770E36F, + 0x3FF0013C, 0x0C000000, 0x3E086820, 0x6B74A43E, + 0x3FF00140, 0x0C000000, 0x3E200A6A, 0xDEC0D058, + 0x3FF00144, 0x0C000000, 0x3E2A1AD0, 0x22BD7872, + 0x3FF00148, 0x0C000000, 0x3E32259B, 0xF769E132, + 0x3FF0014C, 0x0C000000, 0x3E374DD1, 0x2582289A, + 0x3FF00150, 0x0C000000, 0x3E3C8607, 0x9FA7E4F4, + 0x3FF00154, 0x10000000, 0xBE3E31C0, 0x9624963C, + 0x3FF00158, 0x10000000, 0xBE38D987, 0x77E2F472, + 0x3FF0015C, 0x10000000, 0xBE33714D, 0x0192E02C, + 0x3FF00160, 0x10000000, 0xBE2BF222, 0x5E6805CB, + 0x3FF00164, 0x10000000, 0xBE20E1A7, 0xF98C0A34, + 0x3FF00168, 0x10000000, 0xBE06C4AB, 0x32447238, + 0x3FF0016C, 0x10000000, 0x3E067D54, 0xC225D8C1, + 0x3FF00170, 0x10000000, 0x3E210FD8, 0x05C4630F, + 0x3FF00174, 0x10000000, 0x3E2CA05D, 0xBB206115, + 0x3FF00178, 0x10000000, 0x3E342873, 0x2C4F14A6, + 0x3FF0017C, 0x10000000, 0x3E3A10B8, 0xF31F3B5E, + 0x3FF00180, 0x14000000, 0xBE3FF6FF, 0xC9FEFCC9, + 0x3FF00184, 0x14000000, 0xBE39EEB7, 0x070B344A, + 0x3FF00188, 0x14000000, 0xBE33D66C, 0xC0050AA2, + 0x3FF0018C, 0x14000000, 0xBE2B5C41, 0xE1D83C97, + 0x3FF00190, 0x14000000, 0xBE1DD74E, 0x57003305, + 0x3FF00194, 0x14000000, 0xBDF2D84A, 0xA80727F1, + 0x3FF00198, 0x14000000, 0x3E14AB2F, 0x534C5401, + 0x3FF0019C, 0x14000000, 0x3E27263B, 0xD875DE83, + 0x3FF001A0, 0x14000000, 0x3E320B71, 0x9FB782CA, + 0x3FF001A4, 0x14000000, 0x3E3893C6, 0xF349371F, + 0x3FF001A8, 0x14000000, 0x3E3F2C1D, 0xEAF074C6, + 0x3FF001AC, 0x18000000, 0xBE3A2B89, 0x75525ABC, + 0x3FF001B0, 0x18000000, 0xBE33732F, 0x297ECCE2, + 0x3FF001B4, 0x18000000, 0xBE2955A6, 0x5B28EC49, + 0x3FF001B8, 0x18000000, 0xBE1749D5, 0xF64BA7FD, + 0x3FF001BC, 0x18000000, 0x3DF15E9E, 0xA8645141, + 0x3FF001C0, 0x18000000, 0x3E201C96, 0x1D6F0B37, + 0x3FF001C4, 0x18000000, 0x3E2E2D5B, 0xE6028E39, + 0x3FF001C8, 0x18000000, 0x3E362F12, 0x9B63FA1E, + 0x3FF001CC, 0x18000000, 0x3E3D5779, 0x0BE01026, + 0x3FF001D0, 0x1C000000, 0xBE3B701E, 0xB78A0445, + 0x3FF001D4, 0x1C000000, 0xBE3427B4, 0xAAD9CF9D, + 0x3FF001D8, 0x1C000000, 0xBE299E91, 0x941DBAB5, + 0x3FF001DC, 0x1C000000, 0xBE159B6C, 0x44A2DFDD, + 0x3FF001E0, 0x1C000000, 0x3E008CA4, 0x1EC8B89C, + 0x3FF001E4, 0x1C000000, 0x3E23340B, 0xF1EE0E9A, + 0x3FF001E8, 0x1C000000, 0x3E313279, 0x5231913C, + 0x3FF001EC, 0x1C000000, 0x3E38DAEE, 0x93892E68, + 0x3FF001F0, 0x20000000, 0xBE3F6C9A, 0x3F01A6A8, + 0x3FF001F4, 0x20000000, 0xBE37A421, 0x216E726C, + 0x3FF001F8, 0x20000000, 0xBE2F974C, 0x1F7970B9, + 0x3FF001FC, 0x20000000, 0xBE1F8CA4, 0x17AFEBC8, + 0x3FF00200, 0x20000000, 0x3DB55600, 0x04445B06, + 0x3FF00204, 0x20000000, 0x3E203BAE, 0x0C290A26, + 0x3FF00208, 0x20000000, 0x3E30365A, 0x104547BD, + 0x3FF0020C, 0x20000000, 0x3E385EDF, 0x22970DE3, + 0x3FF00210, 0x24000000, 0xBE3F6899, 0xBEF5A5F4, + 0x3FF00214, 0x24000000, 0xBE372010, 0x90605040, + 0x3FF00218, 0x24000000, 0xBE2D8F0A, 0x9B50D8EE, + 0x3FF0021C, 0x24000000, 0xBE197BDF, 0xCB35D444, + 0x3FF00220, 0x24000000, 0x3E00CCBC, 0x2188E3D5, + 0x3FF00224, 0x24000000, 0x3E254452, 0x36A79F6A, + 0x3FF00228, 0x24000000, 0x3E333ABC, 0xD69B2D28, + 0x3FF0022C, 0x24000000, 0x3E3BE352, 0xBA07BE5B, + 0x3FF00230, 0x28000000, 0xBE3B6415, 0x3665F227, + 0x3FF00234, 0x28000000, 0xBE329B7A, 0xF6AD58D5, + 0x3FF00238, 0x28000000, 0xBE2385BD, 0x059BD24A, + 0x3FF0023C, 0x28000000, 0xBDEB47FA, 0xD8E2B1B4, + 0x3FF00240, 0x28000000, 0x3E203CC2, 0x22CF60F6, + 0x3FF00244, 0x28000000, 0x3E312704, 0x39BEF87F, + 0x3FF00248, 0x28000000, 0x3E3A3FA9, 0xA63F5309, + 0x3FF0024C, 0x2C000000, 0xBE3C97AE, 0xA516AE5E, + 0x3FF00250, 0x2C000000, 0xBE335F04, 0xA442792A, + 0x3FF00254, 0x2C000000, 0xBE242CB0, 0xA686F3A2, + 0x3FF00258, 0x2C000000, 0xBDE7B535, 0xC3237903, + 0x3FF0025C, 0x2C000000, 0x3E21560E, 0x9E7A6CF7, + 0x3FF00260, 0x2C000000, 0x3E3223BA, 0xA8C01385, + 0x3FF00264, 0x2C000000, 0x3E3BAC70, 0x627012DF, + 0x3FF00268, 0x30000000, 0xBE3ABAD7, 0x7FB232EA, + 0x3FF0026C, 0x30000000, 0xBE31121C, 0xF9A6244B, + 0x3FF00270, 0x30000000, 0xBE1D6580, 0x1DAC9AE4, + 0x3FF00274, 0x30000000, 0x3E037AFA, 0xD7FB0AC3, + 0x3FF00278, 0x30000000, 0x3E289042, 0x633420EB, + 0x3FF0027C, 0x30000000, 0x3E3630E5, 0x8065842A, + 0x3FF00280, 0x34000000, 0xBE3FD653, 0xB49DA4FF, + 0x3FF00284, 0x34000000, 0xBE35CD8A, 0x696ECB76, + 0x3FF00288, 0x34000000, 0xBE27697D, 0x341A9D63, + 0x3FF0028C, 0x34000000, 0xBDF8BF04, 0x2788D238, + 0x3FF00290, 0x34000000, 0x3E2159C1, 0x42A03782, + 0x3FF00294, 0x34000000, 0x3E32F5B4, 0x154D4F89, + 0x3FF00298, 0x34000000, 0x3E3D4E8A, 0x1D7FB2C1, + 0x3FF0029C, 0x38000000, 0xBE38489D, 0x42181508, + 0x3FF002A0, 0x38000000, 0xBE2B9F84, 0x0AF2C28C, + 0x3FF002A4, 0x38000000, 0xBE0A3721, 0x451C5357, + 0x3FF002A8, 0x38000000, 0x3E1D47F1, 0x61A8605E, + 0x3FF002AC, 0x38000000, 0x3E31FADF, 0x81B02FCF, + 0x3FF002B0, 0x38000000, 0x3E3CB3C5, 0x572F674A, + 0x3FF002B4, 0x3C000000, 0xBE388352, 0x231795EA, + 0x3FF002B8, 0x3C000000, 0xBE2B54CD, 0xD248367A, + 0x3FF002BC, 0x3C000000, 0xBE060BC7, 0xB7ABD90D, + 0x3FF002C0, 0x3C000000, 0x3E206EEF, 0x6EE9F1EF, + 0x3FF002C4, 0x3C000000, 0x3E33406B, 0x261BF09E, + 0x3FF002C8, 0x3C000000, 0x3E3E5961, 0x59001C60, + 0x3FF002CC, 0x40000000, 0xBE367DA5, 0xABDDD232, + 0x3FF002D0, 0x40000000, 0xBE268953, 0xC8FA5113, + 0x3FF002D4, 0x40000000, 0x3D9152CC, 0x8B33A701, + 0x3FF002D8, 0x40000000, 0x3E26BAAC, 0x3E058570, + 0x3FF002DC, 0x40000000, 0x3E36C65A, 0x63236E71, + 0x3FF002E0, 0x44000000, 0xBE3DC09E, 0x7C7A795C, + 0x3FF002E4, 0x44000000, 0xBE323794, 0x7BD63D1D, + 0x3FF002E8, 0x44000000, 0xBE1A7A1E, 0x5BBC9105, + 0x3FF002EC, 0x44000000, 0x3E142A20, 0xD8EE2B1B, + 0x3FF002F0, 0x44000000, 0x3E30C39A, 0xEFAA8A8D, + 0x3FF002F4, 0x44000000, 0x3E3C8CB0, 0x995E96A2, + 0x3FF002F8, 0x48000000, 0xBE379A36, 0xC8A79469, + 0x3FF002FC, 0x48000000, 0xBE276236, 0x64CE7203, + 0x3FF00300, 0x48000000, 0x3DD200D8, 0x0819DA68, + 0x3FF00304, 0x48000000, 0x3E28A249, 0xE5E018D4, + 0x3FF00308, 0x48000000, 0x3E386A49, 0x8A087692, + 0x3FF0030C, 0x4C000000, 0xBE3B6C8E, 0xD695988B, + 0x3FF00310, 0x4C000000, 0xBE2E66C8, 0x55D2BCBA, + 0x3FF00314, 0x4C000000, 0xBE0751B3, 0x7790BA7A, + 0x3FF00318, 0x4C000000, 0x3E22DDF4, 0xC2A20261, + 0x3FF0031C, 0x4C000000, 0x3E35D82E, 0x49E0B0B5, + 0x3FF00320, 0x50000000, 0xBE3DAE9A, 0xB142422E, + 0x3FF00324, 0x50000000, 0xBE312560, 0x8C170FE6, + 0x3FF00328, 0x50000000, 0xBE12308D, 0x0A73BF77, + 0x3FF0032C, 0x50000000, 0x3E203A3A, 0x5E59CEFA, + 0x3FF00330, 0x50000000, 0x3E34D660, 0xCD4740BF, + 0x3FF00334, 0x54000000, 0xBE3E6058, 0x644D1883, + 0x3FF00338, 0x54000000, 0xBE31870E, 0x618F57B6, + 0x3FF0033C, 0x54000000, 0xBE127704, 0x99FABD0F, + 0x3FF00340, 0x54000000, 0x3E20B71E, 0xA1CB5ECF, + 0x3FF00344, 0x54000000, 0x3E3564E3, 0x089E93E1, + 0x3FF00348, 0x58000000, 0xBE3D81C5, 0xFB533142, + 0x3FF0034C, 0x58000000, 0xBE30586B, 0xB6EECE6C, + 0x3FF00350, 0x58000000, 0xBE08F871, 0x319B883E, + 0x3FF00354, 0x58000000, 0x3E2454A5, 0x75BF7503, + 0x3FF00358, 0x58000000, 0x3E3783B6, 0xF04B88C5, + 0x3FF0035C, 0x5C000000, 0xBE3B12E1, 0x81EF30A7, + 0x3FF00360, 0x5C000000, 0xBE2B32ED, 0x2F9F3657, + 0x3FF00364, 0x5C000000, 0xBDB0084D, 0x54DF31BC, + 0x3FF00368, 0x5C000000, 0x3E2B12D2, 0xC303B7B9, + 0x3FF0036C, 0x5C000000, 0x3E3B32DE, 0x78B56F97, + 0x3FF00370, 0x60000000, 0xBE3713A9, 0x03B9496C, + 0x3FF00374, 0x60000000, 0xBE22945A, 0x1F92E726, + 0x3FF00378, 0x60000000, 0x3E123D49, 0x621736DF, + 0x3FF0037C, 0x60000000, 0x3E3278D5, 0x3935580D, + 0x3FF00380, 0x64000000, 0xBE3F8DA4, 0x69B9F5FB, + 0x3FF00384, 0x64000000, 0xBE31841A, 0x8C473CC8, + 0x3FF00388, 0x64000000, 0xBE0B5469, 0x538CDE07, + 0x3FF0038C, 0x64000000, 0x3E257E07, 0x7F8F9D65, + 0x3FF00390, 0x64000000, 0x3E38F898, 0x3665E52B, + 0x3FF00394, 0x68000000, 0xBE38BDCF, 0xC29674BD, + 0x3FF00398, 0x68000000, 0xBE24C868, 0x4E58B4D9, + 0x3FF0039C, 0x68000000, 0x3E1015AC, 0x329466D7, + 0x3FF003A0, 0x68000000, 0x3E327F0D, 0xDCDECE44, + 0x3FF003A4, 0x6C000000, 0xBE3EF74B, 0xB27E5528, + 0x3FF003A8, 0x6C000000, 0xBE305DA1, 0x9D7167F2, + 0x3FF003AC, 0x6C000000, 0xBDFB3F3D, 0xFF980820, + 0x3FF003B0, 0x6C000000, 0x3E2A0B7B, 0x13D49789, + 0x3FF003B4, 0x6C000000, 0x3E3BCF72, 0xA43AE87C, + 0x3FF003B8, 0x70000000, 0xBE3556D4, 0x8D06BDC0, + 0x3FF003BC, 0x70000000, 0xBE19B460, 0x1766E54D, + 0x3FF003C0, 0x70000000, 0x3E211950, 0x7B85C8BA, + 0x3FF003C4, 0x70000000, 0x3E37966C, 0x41D00AED, + 0x3FF003C8, 0x74000000, 0xBE394FCB, 0xF5B15507, + 0x3FF003CC, 0x74000000, 0xBE244C00, 0xC98093C4, + 0x3FF003D0, 0x74000000, 0x3E144F3B, 0xE2907BDF, + 0x3FF003D4, 0x74000000, 0x3E345DA2, 0x267CD924, + 0x3FF003D8, 0x78000000, 0xBE3C4886, 0xD73526C0, + 0x3FF003DC, 0x78000000, 0xBE29BD57, 0xF8E1D62E, + 0x3FF003E0, 0x78000000, 0x3E04D995, 0xD65415E1, + 0x3FF003E4, 0x78000000, 0x3E322515, 0x527E1A58, + 0x3FF003E8, 0x7C000000, 0xBE3E4104, 0x31552BA5, + 0x3FF003EC, 0x7C000000, 0xBE2D2E33, 0x995CAB3B, + 0x3FF003F0, 0x7C000000, 0x3DF22D48, 0x473970DC, + 0x3FF003F4, 0x7C000000, 0x3E30ECC6, 0xC61195FC, + 0x3FF003F8, 0x80000000, 0xBE3F3943, 0x03D35C34, + 0x3FF003FC, 0x80000000, 0xBE2E9E91, 0xAA7483C7, + 0x3FF00400, 0x80000000, 0x3DE556AA, 0xBBBC71CE, + 0x3FF00404, 0x80000000, 0x3E30B4B7, 0x817613C1, + 0x3FF00408, 0x84000000, 0xBE3F3142, 0x4E70B0AC, + 0x3FF0040C, 0x84000000, 0xBE2E0E70, 0x2BAAD02F, + 0x3FF00410, 0x84000000, 0x3DF32D62, 0xF48F01F2, + 0x3FF00414, 0x84000000, 0x3E317CE8, 0x84EB5B98, + 0x3FF00418, 0x88000000, 0xBE3E2901, 0x10ED210B, + 0x3FF0041C, 0x88000000, 0xBE2B7DCD, 0x1C7F0051, + 0x3FF00420, 0x88000000, 0x3E05D9C0, 0x87AA2706, + 0x3FF00424, 0x88000000, 0x3E33455A, 0xD0B235B3, + 0x3FF00428, 0x8C000000, 0xBE3C207E, 0x4B07A510, + 0x3FF0042C, 0x8C000000, 0xBE26ECA6, 0x7C6E838B, + 0x3FF00430, 0x8C000000, 0x3E150F6F, 0xEC91A8D5, + 0x3FF00434, 0x8C000000, 0x3E360E0F, 0x650C6A83, + 0x3FF00438, 0x90000000, 0xBE3917B8, 0xFC7E3439, + 0x3FF0043C, 0x90000000, 0xBE205AFA, 0x4AF4C8B6, + 0x3FF00440, 0x90000000, 0x3E219985, 0xDC31D181, + 0x3FF00444, 0x90000000, 0x3E39D707, 0x423CC2BE, + 0x3FF00448, 0x94000000, 0xBE350EB0, 0x250DC5BF, + 0x3FF0044C, 0x94000000, 0xBE0F231A, 0x1E2CF893, + 0x3FF00450, 0x94000000, 0x3E2AABDB, 0xD42C92D4, + 0x3FF00454, 0x94000000, 0x3E3EA043, 0x6887075B, + 0x3FF00458, 0x98000000, 0xBE300562, 0xC472509B, + 0x3FF0045C, 0x98000000, 0x3DF64FB6, 0x72B572E0, + 0x3FF00460, 0x98000000, 0x3E32DF5D, 0xEF61155C, + 0x3FF00464, 0x9C000000, 0xBE3B963B, 0x27CFFE6A, + 0x3FF00468, 0x9C000000, 0xBE23F79F, 0xB4CD96FE, + 0x3FF0046C, 0x9C000000, 0x3E1EBA7F, 0x6E771F13, + 0x3FF00470, 0x9C000000, 0x3E396913, 0xFE3ED608, + 0x3FF00474, 0xA0000000, 0xBE34CC73, 0x6E82850F, + 0x3FF00478, 0xA0000000, 0xBE078FB3, 0x352966B7, + 0x3FF0047C, 0xA0000000, 0x3E2DF116, 0x33AFF8AE, + 0x3FF00480, 0xA4000000, 0xBE3F0CEE, 0xE909EADD, + 0x3FF00484, 0xA4000000, 0xBE2A04C8, 0xD6938597, + 0x3FF00488, 0xA4000000, 0x3E1460AA, 0x5C6654D8, + 0x3FF0048C, 0xA4000000, 0x3E3742BE, 0x22213ECF, + 0x3FF00490, 0xA8000000, 0xBE3682A9, 0xC631A356, + 0x3FF00494, 0xA8000000, 0xBE10E034, 0x7777B644, + 0x3FF00498, 0xA8000000, 0x3E2C4528, 0x3E3B0991, + 0x3FF0049C, 0xAC000000, 0xBE3F72C6, 0x0B3E269F, + 0x3FF004A0, 0xAC000000, 0xBE29F037, 0x31DF923B, + 0x3FF004A4, 0xAC000000, 0x3E164A4D, 0xE82713DE, + 0x3FF004A8, 0xAC000000, 0x3E382D47, 0x31AFAC4B, + 0x3FF004AC, 0xB0000000, 0xBE352800, 0x6DFCE978, + 0x3FF004B0, 0xB0000000, 0xBE036A1B, 0x07D68D27, + 0x3FF004B4, 0xB0000000, 0x3E305D7E, 0x5CB71F6F, + 0x3FF004B8, 0xB4000000, 0xBE3CC7BB, 0x30E5E990, + 0x3FF004BC, 0xB4000000, 0xBE23B9E0, 0x0BA17DEA, + 0x3FF004C0, 0xB4000000, 0x3E223BBF, 0xC3EF9BD8, + 0x3FF004C4, 0xB4000000, 0x3E3C28B4, 0x8A74ECC0, + 0x3FF004C8, 0xB8000000, 0xBE30BC72, 0x085831CA, + 0x3FF004CC, 0xB8000000, 0x3E037361, 0x6C8D1FC8, + 0x3FF004D0, 0xB8000000, 0x3E35A94F, 0x3033A0B8, + 0x3FF004D4, 0xBC000000, 0xBE370BC8, 0xFC7107DE, + 0x3FF004D8, 0xBC000000, 0xBE0D86E2, 0xA2D908DA, + 0x3FF004DC, 0xBC000000, 0x3E2F742A, 0x58ED155E, + 0x3FF004E0, 0xC0000000, 0xBE3CCAF4, 0x75FACDD0, + 0x3FF004E4, 0xC0000000, 0xBE227FF2, 0x6F5BE5D3, + 0x3FF004E8, 0xC0000000, 0x3E24B60D, 0xD6BCA827, + 0x3FF004EC, 0xC0000000, 0x3E3E060B, 0xF72B40D6, + 0x3FF004F0, 0xC4000000, 0xBE2C7DD4, 0x208BE3E3, + 0x3FF004F4, 0xC4000000, 0x3E163093, 0x642FDDB8, + 0x3FF004F8, 0xC4000000, 0x3E396738, 0xB72239A5, + 0x3FF004FC, 0xC8000000, 0xBE32ADAE, 0x7201ED9B, + 0x3FF00500, 0xC8000000, 0x3DF4D6F6, 0x1A0C05F3, + 0x3FF00504, 0xC8000000, 0x3E355892, 0x360B8346, + 0x3FF00508, 0xCC000000, 0xBE368C45, 0xF0C06435, + 0x3FF0050C, 0xCC000000, 0xBE0308C8, 0x760DA2F6, + 0x3FF00510, 0xCC000000, 0x3E31DA18, 0xE008D57B, + 0x3FF00514, 0xD0000000, 0xBE39DAB0, 0x205F82F4, + 0x3FF00518, 0xD0000000, 0xBE15FDD0, 0x2FE5E3E3, + 0x3FF0051C, 0xD0000000, 0x3E2DD79A, 0x42787241, + 0x3FF00520, 0xD4000000, 0xBE3C98EC, 0x94BD25F4, + 0x3FF00524, 0xD4000000, 0xBE201B42, 0x53C89D03, + 0x3FF00528, 0xD4000000, 0x3E291B5E, 0xCB901057, + 0x3FF0052C, 0xD8000000, 0xBE3EC6FA, 0xE1B6D837, + 0x3FF00530, 0xD8000000, 0xBE24173F, 0xF8BF49E7, + 0x3FF00534, 0xD8000000, 0x3E257F80, 0x339DDB57, + 0x3FF00538, 0xD8000000, 0x3E3F9B25, 0x64D62C5C, + 0x3FF0053C, 0xDC000000, 0xBE26F2E0, 0x2E913659, + 0x3FF00540, 0xDC000000, 0x3E2303FF, 0x52E7CB93, + 0x3FF00544, 0xDC000000, 0x3E3E8D74, 0xAB0CFEF5, + 0x3FF00548, 0xE0000000, 0xBE28AE22, 0x1CF7FDE6, + 0x3FF0054C, 0xE0000000, 0x3E21A8DD, 0x01B47B93, + 0x3FF00550, 0xE0000000, 0x3E3E0FF3, 0x5D1107E2, + 0x3FF00554, 0xE4000000, 0xBE294904, 0xEBAC99E1, + 0x3FF00558, 0xE4000000, 0x3E216E1A, 0x184B2814, + 0x3FF0055C, 0xE4000000, 0x3E3E22A1, 0xE706008B, + 0x3FF00560, 0xE8000000, 0xBE28C387, 0xC267616A, + 0x3FF00564, 0xE8000000, 0x3E2253B7, 0x6EF3B008, + 0x3FF00568, 0xE8000000, 0x3E3EC580, 0xB50FF371, + 0x3FF0056C, 0xEC000000, 0xBE271DA9, 0xC8E0096B, + 0x3FF00570, 0xEC000000, 0x3E2459B5, 0xDDF69498, + 0x3FF00574, 0xEC000000, 0x3E3FF890, 0x33533C31, + 0x3FF00578, 0xF0000000, 0xBE24576A, 0x26CDA497, + 0x3FF0057C, 0xF0000000, 0x3E278016, 0x3D9CF923, + 0x3FF00580, 0xF4000000, 0xBE3E442F, 0x320B787B, + 0x3FF00584, 0xF4000000, 0xBE2070C8, 0x03E6A36B, + 0x3FF00588, 0xF4000000, 0x3E2BC6D9, 0x6630A33F, + 0x3FF0058C, 0xF8000000, 0xBE3BF0BD, 0x0EE72CBF, + 0x3FF00590, 0xF8000000, 0xBE16D385, 0x0FC1A853, + 0x3FF00594, 0xF8000000, 0x3E309700, 0x17FDFD5D, + 0x3FF00598, 0xFC000000, 0xBE390D18, 0xF71A91AC, + 0x3FF0059C, 0xFC000000, 0xBE050963, 0x69C58B86, + 0x3FF005A0, 0xFC000000, 0x3E33DAC5, 0xB9A504CD, + 0x3FF005A5, 0x00000000, 0xBE359942, 0x7E800734, + 0x3FF005A9, 0x00000000, 0x3DF02BAE, 0xE59934CD, + 0x3FF005AD, 0x00000000, 0x3E37AEBE, 0x04333E0E, + 0x3FF005B1, 0x04000000, 0xBE319539, 0x38F19C2F, + 0x3FF005B5, 0x04000000, 0x3E14DB54, 0xEBB1C157, + 0x3FF005B9, 0x04000000, 0x3E3C12E9, 0x63CED05D, + 0x3FF005BD, 0x08000000, 0xBE2A01F9, 0x74921CAF, + 0x3FF005C1, 0x08000000, 0x3E23F645, 0xC94C85F2, + 0x3FF005C5, 0x0C000000, 0xBE3EF8B7, 0xBB61CBEE, + 0x3FF005C9, 0x0C000000, 0xBE1F7232, 0x597F2931, + 0x3FF005CD, 0x0C000000, 0x3E2E9F48, 0xAF5B7345, + 0x3FF005D1, 0x10000000, 0xBE397424, 0xED37CD5F, + 0x3FF005D5, 0x10000000, 0xBE013F43, 0x08775C6B, + 0x3FF005D9, 0x10000000, 0x3E35345A, 0x0029D3DB, + 0x3FF005DD, 0x14000000, 0xBE335F5D, 0xC58C1962, + 0x3FF005E1, 0x14000000, 0x3E1073C1, 0x47430E04, + 0x3FF005E5, 0x14000000, 0x3E3BA944, 0x4A41E248, + 0x3FF005E9, 0x18000000, 0xBE2974C3, 0xB06E888E, + 0x3FF005ED, 0x18000000, 0x3E25E3FB, 0xDCCD9333, + 0x3FF005F1, 0x1C000000, 0xBE3D519C, 0x5DE27951, + 0x3FF005F5, 0x1C000000, 0xBE1614C2, 0xE4464502, + 0x3FF005F9, 0x1C000000, 0x3E325740, 0xE0DAFE93, + 0x3FF005FD, 0x20000000, 0xBE35BC47, 0x8C1B4C10, + 0x3FF00601, 0x20000000, 0x3E0201B0, 0x20686CE9, + 0x3FF00605, 0x20000000, 0x3E3A4CB9, 0x95558B63, + 0x3FF00609, 0x24000000, 0xBE2B2D79, 0xA880A3EB, + 0x3FF0060D, 0x24000000, 0x3E252BA5, 0x9699EEB7, + 0x3FF00611, 0x28000000, 0xBE3D2D97, 0x880115E1, + 0x3FF00615, 0x28000000, 0xBE1383EF, 0x28A3D788, + 0x3FF00619, 0x28000000, 0x3E337BA6, 0x08D6DC23, + 0x3FF0061D, 0x2C000000, 0xBE3417B2, 0x0B001A08, + 0x3FF00621, 0x2C000000, 0x3E1193EF, 0xF94EB99A, + 0x3FF00625, 0x2C000000, 0x3E3CF1B0, 0x28D3BD3B, + 0x3FF00629, 0x30000000, 0xBE24E32B, 0x0EFCC982, + 0x3FF0062D, 0x30000000, 0x3E2C7655, 0xE2BDA47F, + 0x3FF00631, 0x34000000, 0xBE39080E, 0x689312F8, + 0x3FF00635, 0x34000000, 0xBDCDA0C8, 0xA9444DB4, + 0x3FF00639, 0x34000000, 0x3E38A191, 0x7B21FE23, + 0x3FF0063D, 0x38000000, 0xBE2CE32A, 0x7E67E1E1, + 0x3FF00641, 0x38000000, 0x3E251694, 0x875A71F0, + 0x3FF00645, 0x3C000000, 0xBE3C67CF, 0xF838F455, + 0x3FF00649, 0x3C000000, 0xBE0A571F, 0x77274052, + 0x3FF0064D, 0x3C000000, 0x3E35E20E, 0x63AAEFA8, + 0x3FF00651, 0x40000000, 0xBE30E0F8, 0xFC87DA70, + 0x3FF00655, 0x40000000, 0x3E20D80B, 0xE9089AFD, + 0x3FF00659, 0x44000000, 0xBE3E36F4, 0xC52F03BD, + 0x3FF0065D, 0x44000000, 0xBE1327A4, 0x9680E14E, + 0x3FF00661, 0x44000000, 0x3E34B328, 0xD732468D, + 0x3FF00665, 0x48000000, 0xBE31BFBE, 0xCAB5EF4A, + 0x3FF00669, 0x48000000, 0x3E1F757F, 0xE2A2FBE1, + 0x3FF0066D, 0x4C000000, 0xBE3E757A, 0xDAB014DA, + 0x3FF00671, 0x4C000000, 0xBE12E13D, 0x02FB3FBB, + 0x3FF00675, 0x4C000000, 0x3E3514E2, 0xCA7E298D, + 0x3FF00679, 0x50000000, 0xBE310DE4, 0xB4F78B94, + 0x3FF0067D, 0x50000000, 0x3E21BEB4, 0x89C35D05, + 0x3FF00681, 0x54000000, 0xBE3D2360, 0x43F4895C, + 0x3FF00685, 0x54000000, 0xBE08B0A2, 0x5BC49ADF, + 0x3FF00689, 0x54000000, 0x3E37073E, 0x32573159, + 0x3FF0068D, 0x58000000, 0xBE2D96D1, 0x8D0732D2, + 0x3FF00691, 0x58000000, 0x3E26E3ED, 0x9BF15E67, + 0x3FF00695, 0x5C000000, 0xBE3A40A3, 0x0C3250FB, + 0x3FF00699, 0x5C000000, 0x3DBCC9AE, 0xFD0AE214, + 0x3FF0069D, 0x5C000000, 0x3E3A8A3D, 0x038868A1, + 0x3FF006A1, 0x60000000, 0xBE25F092, 0x151D21CE, + 0x3FF006A5, 0x60000000, 0x3E2F2A6F, 0x11738C43, + 0x3FF006A9, 0x64000000, 0xBE35CD41, 0x3E9CE96D, + 0x3FF006AD, 0x64000000, 0x3E138132, 0x8DBC2918, + 0x3FF006B1, 0x64000000, 0x3E3F9DE1, 0x32DF4C13, + 0x3FF006B5, 0x68000000, 0xBE16520E, 0x3129E0B2, + 0x3FF006B9, 0x68000000, 0x3E35491E, 0x69F36A61, + 0x3FF006BD, 0x6C000000, 0xBE2F9271, 0xCCCABCD4, + 0x3FF006C1, 0x6C000000, 0x3E2668ED, 0x0D59B899, + 0x3FF006C5, 0x70000000, 0xBE39BDD3, 0x4AD435A0, + 0x3FF006C9, 0x70000000, 0x3DF5FE9A, 0x9191CABB, + 0x3FF006CD, 0x70000000, 0x3E3C8DAD, 0x6676850B, + 0x3FF006D1, 0x74000000, 0xBE206910, 0x1D74934A, + 0x3FF006D5, 0x74000000, 0x3E331949, 0x4D886478, + 0x3FF006D9, 0x78000000, 0xBE3188DE, 0x80BFBBC2, + 0x3FF006DD, 0x78000000, 0x3E23CA01, 0x14DE1719, + 0x3FF006E1, 0x7C000000, 0xBE3A9D19, 0x8CE98EC0, + 0x3FF006E5, 0x7C000000, 0x3DEE1A67, 0xA705A6E7, + 0x3FF006E9, 0x7C000000, 0x3E3C8EC6, 0xECD5F851, + 0x3FF006ED, 0x80000000, 0xBE1F0CF9, 0xE839CE4D, + 0x3FF006F1, 0x80000000, 0x3E33FAC3, 0x0C8CA46A, + 0x3FF006F5, 0x84000000, 0xBE303734, 0x7B5703D8, + 0x3FF006F9, 0x84000000, 0x3E274DB5, 0xE490A112, + 0x3FF006FD, 0x88000000, 0xBE386B0E, 0xA693A093, + 0x3FF00701, 0x88000000, 0x3E0C9875, 0xF0B73DAA, + 0x3FF00705, 0x88000000, 0x3E3FA133, 0x2449A944, + 0x3FF00709, 0x8C000000, 0xBE110285, 0xBFE66C14, + 0x3FF0070D, 0x8C000000, 0x3E37ED91, 0x054EDCBD, + 0x3FF00711, 0x90000000, 0xBE27A86A, 0xEFB65924, + 0x3FF00715, 0x90000000, 0x3E307A0B, 0x1C8A0CF1, + 0x3FF00719, 0x94000000, 0xBE3327AD, 0x397FB1D6, + 0x3FF0071D, 0x94000000, 0x3E228D43, 0x1412B9FB, + 0x3FF00721, 0x98000000, 0xBE3A3B08, 0x94D8FFB0, + 0x3FF00725, 0x98000000, 0x3E029AA3, 0x6ED80040, + 0x3FF00729, 0x98000000, 0x3E3EF1B8, 0x9627250A, + 0x3FF0072D, 0x9C000000, 0xBE117F70, 0x5FCB1B09, + 0x3FF00731, 0x9C000000, 0x3E385E96, 0x678F0789, + 0x3FF00735, 0xA0000000, 0xBE25A5DF, 0xCEA3485B, + 0x3FF00739, 0xA0000000, 0x3E320B90, 0xFF6D0303, + 0x3FF0073D, 0xA4000000, 0xBE3105E6, 0xE03334FF, + 0x3FF00741, 0xA4000000, 0x3E27F150, 0xFB9F056D, + 0x3FF00745, 0xA8000000, 0xBE36F8C0, 0xE28905F4, + 0x3FF00749, 0xA8000000, 0x3E189774, 0x0B1407AA, + 0x3FF0074D, 0xAC000000, 0xBE3CAB7D, 0xCE4493C4, + 0x3FF00751, 0xAC000000, 0x3DE265D5, 0xCB817D78, + 0x3FF00755, 0xAC000000, 0x3E3DE1E2, 0x7CA8B4E3, + 0x3FF00759, 0xB0000000, 0xBE12FD89, 0x7D730FC6, + 0x3FF0075D, 0xB0000000, 0x3E38AF60, 0x1E4D7759, + 0x3FF00761, 0xB4000000, 0xBE23A3AC, 0x0CAD84A2, + 0x3FF00765, 0xB4000000, 0x3E33BCFB, 0x36B866FD, + 0x3FF00769, 0xB8000000, 0xBE2D4858, 0x4D0667A1, + 0x3FF0076D, 0xB8000000, 0x3E2E1567, 0xCBF08E6A, + 0x3FF00771, 0xBC000000, 0xBE333664, 0x9FD34D05, + 0x3FF00775, 0xBC000000, 0x3E253114, 0x9837D6E0, + 0x3FF00779, 0xC0000000, 0xBE37887F, 0x5238327D, + 0x3FF0077D, 0xC0000000, 0x3E1999FA, 0x24C8DC90, + 0x3FF00781, 0xC4000000, 0xBE3B9A7C, 0x1DA2F8BE, + 0x3FF00785, 0xC4000000, 0x3E03A485, 0xEA50EE6A, + 0x3FF00789, 0xC8000000, 0xBE3F6C5A, 0xE204A449, + 0x3FF0078D, 0xC8000000, 0xBDF3D3EF, 0x78D5D0F3, + 0x3FF00791, 0xC8000000, 0x3E3D01E4, 0x80B1D66C, + 0x3FF00795, 0xCC000000, 0xBE12BBC1, 0xD5149796, + 0x3FF00799, 0xCC000000, 0x3E39B042, 0x2A8F92F0, + 0x3FF0079D, 0xD0000000, 0xBE1F820E, 0x6F386487, + 0x3FF007A1, 0xD0000000, 0x3E369EBE, 0x3BA3BCDA, + 0x3FF007A5, 0xD4000000, 0xBE25A3F0, 0x96320652, + 0x3FF007A9, 0xD4000000, 0x3E33CD58, 0xD3FD8FCA, + 0x3FF007AD, 0xD8000000, 0xBE2B069C, 0xC62D40B1, + 0x3FF007B1, 0xD8000000, 0x3E313C12, 0x13AC5766, + 0x3FF007B5, 0xDC000000, 0xBE2FE90B, 0x876F3A0B, + 0x3FF007B9, 0xDC000000, 0x3E2DD5D4, 0x357EDEB8, + 0x3FF007BD, 0xE0000000, 0xBE32259E, 0x4CEC957E, + 0x3FF007C1, 0xE0000000, 0x3E29B3C2, 0x128C86C6, + 0x3FF007C5, 0xE4000000, 0xBE341697, 0xDEA61608, + 0x3FF007C9, 0xE4000000, 0x3E2611ED, 0xFEA09E70, + 0x3FF007CD, 0xE8000000, 0xBE35C772, 0x58D49AE3, + 0x3FF007D1, 0xE8000000, 0x3E22F058, 0x39DA3D42, + 0x3FF007D5, 0xEC000000, 0xBE37382D, 0x9B689043, + 0x3FF007D9, 0xEC000000, 0x3E204F01, 0x04589AD6, + 0x3FF007DD, 0xF0000000, 0xBE3868C9, 0x86525259, + 0x3FF007E1, 0xF0000000, 0x3E1C5BD1, 0x3C761DAC, + 0x3FF007E5, 0xF4000000, 0xBE395945, 0xF9822D4C, + 0x3FF007E9, 0xF4000000, 0x3E191A1E, 0x8F4221F9, + 0x3FF007ED, 0xF8000000, 0xBE3A09A2, 0xD4E85D3A, + 0x3FF007F1, 0xF8000000, 0x3E16D8EA, 0x81547225, + 0x3FF007F5, 0xFC000000, 0xBE3A79DF, 0xF8750E3B, + 0x3FF007F9, 0xFC000000, 0x3E159835, 0x92EC7DE3, + 0x3FF007FE, 0x00000000, 0xBE3AA9FD, 0x44185C5D } }; + +#else +#ifdef LITTLE_ENDI + +static const union { + int i[1424]; + double x[712]; +} coar = { .i = { + 0xC8000000, 0x3FE69A59, 0x6079C9F7, 0x3DF22D4D, + 0xC8000000, 0x3FE6A5A9, 0x25AF6823, 0x3E19882D, + 0x74000000, 0x3FE6B0FF, 0x31DABF59, 0xBE221476, + 0xC8000000, 0x3FE6BC5A, 0x99A2DC0A, 0x3E2312AC, + 0xD0000000, 0x3FE6C7BB, 0xCE9F9355, 0xBE265926, + 0x84000000, 0x3FE6D322, 0x2D298DED, 0x3E2F2C26, + 0xF4000000, 0x3FE6DE8E, 0x1E748D2F, 0xBE2EC28E, + 0x14000000, 0x3FE6EA01, 0xC68CB7E5, 0x3E2D8C6D, + 0xF4000000, 0x3FE6F578, 0x419FE2F0, 0x3DEE1A9E, + 0x90000000, 0x3FE700F6, 0xDEAEAE34, 0xBDFF1AFD, + 0xEC000000, 0x3FE70C79, 0x558B7122, 0xBE0730FE, + 0x0C000000, 0x3FE71803, 0x2D280C3B, 0xBE25CB85, + 0xF0000000, 0x3FE72391, 0x337B7B54, 0xBE06F2CE, + 0x9C000000, 0x3FE72F26, 0x45C02B72, 0x3E289BCA, + 0x18000000, 0x3FE73AC1, 0x5039F1CA, 0xBE18DEA6, + 0x60000000, 0x3FE74661, 0x86CE0538, 0xBE09D090, + 0x78000000, 0x3FE75207, 0xCFCE5DDB, 0x3E290E79, + 0x68000000, 0x3FE75DB3, 0xB249A17C, 0x3DD61DF0, + 0x2C000000, 0x3FE76965, 0xE13445F7, 0x3E2F22F7, + 0xD0000000, 0x3FE7751C, 0x874E75CE, 0xBE2CD454, + 0x4C000000, 0x3FE780DA, 0xDF43E3BC, 0xBE0159CE, + 0xA8000000, 0x3FE78C9D, 0x699A1332, 0x3E279291, + 0xEC000000, 0x3FE79866, 0x2DD98C6C, 0xBE2A0BCD, + 0x10000000, 0x3FE7A436, 0x15AC979E, 0x3E25F375, + 0x20000000, 0x3FE7B00B, 0x2FEAFCF6, 0x3E26CCF5, + 0x1C000000, 0x3FE7BBE6, 0x53ADAD67, 0x3E27D4F4, + 0x08000000, 0x3FE7C7C7, 0x7FBD9566, 0x3E10EEC7, + 0xE4000000, 0x3FE7D3AD, 0x9A831D86, 0x3E2837F0, + 0xB8000000, 0x3FE7DF9A, 0x5CB4C35B, 0xBE129BE0, + 0x80000000, 0x3FE7EB8D, 0x0234F04D, 0x3E23990A, + 0x44000000, 0x3FE7F786, 0x64D5C842, 0x3E2EB807, + 0x08000000, 0x3FE80385, 0x02B4E9E8, 0x3E0FC86F, + 0xCC000000, 0x3FE80F89, 0x7B4274BF, 0xBDD7B5B3, + 0x94000000, 0x3FE81B94, 0xB899B00F, 0xBE16888B, + 0x60000000, 0x3FE827A5, 0x5E94D155, 0x3E288971, + 0x38000000, 0x3FE833BC, 0x099F3E5E, 0x3E2AEEB2, + 0x20000000, 0x3FE83FD9, 0x3FF60B7C, 0xBE23B922, + 0x14000000, 0x3FE84BFC, 0x2DBD8012, 0xBDF7D3B1, + 0x1C000000, 0x3FE85825, 0xA8872BEB, 0xBDF24BA3, + 0x38000000, 0x3FE86454, 0x01AA18A7, 0x3E2EFE04, + 0x70000000, 0x3FE87089, 0x944496A2, 0x3E21986C, + 0xC4000000, 0x3FE87CC4, 0xB71FFAFF, 0x3E096A8B, + 0x38000000, 0x3FE88906, 0xBC4C7AC5, 0xBE21CE0A, + 0xCC000000, 0x3FE8954D, 0xBAC02491, 0xBE076F45, + 0x84000000, 0x3FE8A19B, 0xD922B925, 0x3E2B4FA2, + 0x68000000, 0x3FE8ADEF, 0x641863AF, 0x3DF759DB, + 0x78000000, 0x3FE8BA49, 0xC6AB5E04, 0xBE2DB97C, + 0xB4000000, 0x3FE8C6A9, 0xE2156713, 0xBE25364C, + 0x20000000, 0x3FE8D310, 0x862BEFF7, 0x3E1BEB7C, + 0xC4000000, 0x3FE8DF7C, 0x1CEA33A5, 0xBDF4DD0C, + 0xA0000000, 0x3FE8EBEF, 0x51797D47, 0xBE2537DF, + 0xB4000000, 0x3FE8F868, 0xF0107B28, 0x3E0FB1C4, + 0x08000000, 0x3FE904E8, 0xE01B68BD, 0x3E0AD6A1, + 0x9C000000, 0x3FE9116D, 0x1F78D9D9, 0x3E292117, + 0x78000000, 0x3FE91DF9, 0x4F50E5CF, 0xBE1D75DA, + 0x98000000, 0x3FE92A8B, 0x74959E58, 0x3DE5102B, + 0x04000000, 0x3FE93724, 0xD2216C35, 0xBE01CA50, + 0xBC000000, 0x3FE943C2, 0xB0B05884, 0x3E225BFD, + 0xC8000000, 0x3FE95067, 0x60B7C5C1, 0xBE0F2183, + 0x24000000, 0x3FE95D13, 0xB5860441, 0x3E2FB47A, + 0xDC000000, 0x3FE969C4, 0xE2D4059E, 0xBE01FFD2, + 0xEC000000, 0x3FE9767C, 0x12BB6A8D, 0xBDE9ED72, + 0x58000000, 0x3FE9833B, 0x43BFFB24, 0x3E2B3815, + 0x28000000, 0x3FE99000, 0xEE9EAD1E, 0x3E03FA22, + 0x5C000000, 0x3FE99CCB, 0x377138F7, 0xBE213841, + 0xF4000000, 0x3FE9A99C, 0xDB636C94, 0x3E178105, + 0xF8000000, 0x3FE9B674, 0xF5720122, 0x3E1E5E7A, + 0x6C000000, 0x3FE9C353, 0xA2AC5AAE, 0xBE238BFF, + 0x4C000000, 0x3FE9D038, 0xF93BDBD8, 0x3E270893, + 0xA4000000, 0x3FE9DD23, 0x354B86CF, 0x3DF40420, + 0x74000000, 0x3FE9EA15, 0x88CB06B7, 0xBE2D76D3, + 0xBC000000, 0x3FE9F70D, 0x9ED0EC60, 0xBE251639, + 0x80000000, 0x3FEA040C, 0xE2DDE506, 0x3E1F06E9, + 0xC8000000, 0x3FEA1111, 0x8E6DB477, 0x3E014549, + 0x94000000, 0x3FEA1E1D, 0xF8716509, 0xBDF4BC17, + 0xE8000000, 0x3FEA2B2F, 0xDA723A49, 0xBE2107DB, + 0xC4000000, 0x3FEA3848, 0x986AA369, 0x3E1A932A, + 0x30000000, 0x3FEA4568, 0x41592CDB, 0x3E198092, + 0x30000000, 0x3FEA528E, 0x676BCAB8, 0xBE2E260F, + 0xC0000000, 0x3FEA5FBA, 0x2D5D5610, 0x3DE2E821, + 0xE8000000, 0x3FEA6CED, 0x7DA20167, 0x3E2F7046, + 0xB0000000, 0x3FEA7A27, 0xF9FAAD30, 0xBE1D2832, + 0x14000000, 0x3FEA8768, 0x43FA6C45, 0xBE23F788, + 0x18000000, 0x3FEA94AF, 0xAA082732, 0x3E011E27, + 0xC4000000, 0x3FEAA1FC, 0xC682F0BF, 0xBE20BACB, + 0x18000000, 0x3FEAAF51, 0x7BD08C78, 0xBE2DC7DD, + 0x14000000, 0x3FEABCAC, 0xA3B10F9A, 0x3E2271A2, + 0xC4000000, 0x3FEACA0D, 0x7966F94C, 0xBE15449C, + 0x24000000, 0x3FEAD776, 0x6FD8F3EE, 0x3DD06137, + 0x3C000000, 0x3FEAE4E5, 0x8C5A144A, 0xBE267CD1, + 0x0C000000, 0x3FEAF25B, 0xB59DA94B, 0xBE29E584, + 0x98000000, 0x3FEAFFD7, 0x7B52192F, 0xBE23DFCF, + 0xE4000000, 0x3FEB0D5A, 0x78A76B45, 0xBE1CF2FE, + 0xF4000000, 0x3FEB1AE4, 0x7EC80FF6, 0xBE23A561, + 0xC8000000, 0x3FEB2875, 0x932EED68, 0x3E22C4C9, + 0x68000000, 0x3FEB360D, 0xB5833C97, 0x3E2B085C, + 0xD8000000, 0x3FEB43AB, 0x93B9319A, 0xBE01F093, + 0x18000000, 0x3FEB5151, 0xFABCE670, 0xBE254F01, + 0x28000000, 0x3FEB5EFD, 0x627ABFB0, 0x3E2F24C2, + 0x14000000, 0x3FEB6CB0, 0xE6AC0B48, 0x3E1F1EEC, + 0xDC000000, 0x3FEB7A69, 0x127F9ABC, 0xBE1A8671, + 0x80000000, 0x3FEB882A, 0xC87C73B3, 0xBDCB0C28, + 0x08000000, 0x3FEB95F2, 0x7F2B5A97, 0xBE22E8DD, + 0x74000000, 0x3FEBA3C0, 0x2D22A9D5, 0xBE1B3645, + 0xC8000000, 0x3FEBB195, 0x428F8B88, 0x3E0ADACA, + 0x0C000000, 0x3FEBBF72, 0xCDF9F681, 0xBE2E9E07, + 0x3C000000, 0x3FEBCD55, 0x7FA54ACF, 0xBE08A127, + 0x60000000, 0x3FEBDB3F, 0x8225B385, 0x3E0E92CE, + 0x7C000000, 0x3FEBE930, 0x7BB09485, 0x3DF38C2A, + 0x94000000, 0x3FEBF728, 0xF681FA5F, 0xBE2DFD64, + 0xA4000000, 0x3FEC0527, 0xDCE88BD2, 0x3E2E384D, + 0xBC000000, 0x3FEC132D, 0xFE46A893, 0xBE20F111, + 0xD4000000, 0x3FEC213A, 0xB189BFDA, 0x3E193DA1, + 0xF8000000, 0x3FEC2F4E, 0x0E39FB00, 0xBE20E3A1, + 0x24000000, 0x3FEC3D6A, 0x30F0FAC5, 0x3E1DB044, + 0x64000000, 0x3FEC4B8C, 0x97446B17, 0xBE2BC12C, + 0xB4000000, 0x3FEC59B5, 0x963F4150, 0xBE282696, + 0x18000000, 0x3FEC67E6, 0x3049824B, 0x3E224D26, + 0x98000000, 0x3FEC761D, 0x87F84C7D, 0x3E2C5BA5, + 0x38000000, 0x3FEC845C, 0xC4852339, 0xBDE1D14D, + 0xF8000000, 0x3FEC92A1, 0x5588D9E1, 0xBE1A451E, + 0xDC000000, 0x3FECA0EE, 0x68BFF457, 0xBE1D3B96, + 0xE8000000, 0x3FECAF42, 0x4DADF774, 0xBE18B670, + 0x20000000, 0x3FECBD9E, 0x7FB1FC01, 0xBE1A1548, + 0x88000000, 0x3FECCC00, 0x78FC5AF0, 0xBE273F2E, + 0x20000000, 0x3FECDA6A, 0xA6F4A841, 0x3E1D218F, + 0xF0000000, 0x3FECE8DA, 0x4D002CA0, 0x3E2E0BA9, + 0xFC000000, 0x3FECF752, 0x065EF979, 0x3E20F4BB, + 0x48000000, 0x3FED05D2, 0x11793B33, 0xBE2ED3D5, + 0xD0000000, 0x3FED1458, 0x913341B3, 0x3E115E3C, + 0xA0000000, 0x3FED22E6, 0xB3546109, 0x3DE97C02, + 0xB8000000, 0x3FED317B, 0x1BF898EF, 0x3E087540, + 0x1C000000, 0x3FED4018, 0x346F9641, 0x3E209430, + 0xD0000000, 0x3FED4EBB, 0x88F4B20B, 0x3E2B6DF4, + 0xDC000000, 0x3FED5D66, 0x0CB26035, 0xBE2EC68F, + 0x38000000, 0x3FED6C19, 0x1F44D9C3, 0x3E2CA2C8, + 0xF4000000, 0x3FED7AD2, 0x41704EE0, 0x3E10E6F4, + 0x0C000000, 0x3FED8994, 0x25F8F0E2, 0x3E2F9273, + 0x88000000, 0x3FED985C, 0x318798DE, 0x3E2D041A, + 0x6C000000, 0x3FEDA72C, 0x9349CF58, 0xBE005680, + 0xB8000000, 0x3FEDB603, 0xCF0C934D, 0xBE10F665, + 0x70000000, 0x3FEDC4E2, 0x19461C64, 0x3E166124, + 0x9C000000, 0x3FEDD3C8, 0x405624C8, 0xBE1B2ED6, + 0x3C000000, 0x3FEDE2B6, 0x62171501, 0xBE273A7F, + 0x54000000, 0x3FEDF1AB, 0xE36E1450, 0xBE26022B, + 0xE8000000, 0x3FEE00A7, 0x2E07AE15, 0xBE1C341E, + 0xFC000000, 0x3FEE0FAB, 0x18D0E701, 0xBDFC7EAE, + 0x94000000, 0x3FEE1EB7, 0xECD1FF8B, 0x3E06B34F, + 0xB4000000, 0x3FEE2DCA, 0x6813A649, 0x3E1394A3, + 0x60000000, 0x3FEE3CE5, 0xC1754D14, 0x3E045496, + 0x9C000000, 0x3FEE4C07, 0xF5C6087C, 0xBE180FFF, + 0x68000000, 0x3FEE5B31, 0xADD9A300, 0x3E22FBCD, + 0xCC000000, 0x3FEE6A62, 0xAF0289E5, 0x3E2EC7C7, + 0xCC000000, 0x3FEE799B, 0x3FB3EDD4, 0x3E242182, + 0x6C000000, 0x3FEE88DC, 0x04E39885, 0xBE201304, + 0xAC000000, 0x3FEE9824, 0xE6831D31, 0xBE20D352, + 0x90000000, 0x3FEEA774, 0x618DFCEB, 0x3E1E032D, + 0x20000000, 0x3FEEB6CC, 0xF9BB457E, 0x3E1956A3, + 0x60000000, 0x3FEEC62B, 0x50845DB2, 0xBE2A77E0, + 0x4C000000, 0x3FEED592, 0x47C43858, 0x3E2714F7, + 0xF0000000, 0x3FEEE500, 0x71813A66, 0x3E2EED96, + 0x50000000, 0x3FEEF477, 0x4FB4AA34, 0xBE04CDBE, + 0x6C000000, 0x3FEF03F5, 0x86EB4FF5, 0xBE2774A2, + 0x48000000, 0x3FEF137B, 0xAD43B2D2, 0xBE29DD95, + 0xE8000000, 0x3FEF2308, 0xAC16E506, 0xBE1CADB0, + 0x50000000, 0x3FEF329E, 0x58745C7B, 0x3E12AC33, + 0x88000000, 0x3FEF423B, 0x6EC2D854, 0xBE248118, + 0x8C000000, 0x3FEF51E0, 0x304ACE08, 0x3E26986B, + 0x68000000, 0x3FEF618D, 0x3B09354E, 0x3E126D81, + 0x1C000000, 0x3FEF7142, 0x773C23B3, 0x3DF06AAE, + 0xAC000000, 0x3FEF80FE, 0xD82EF423, 0xBDA105B6, + 0x1C000000, 0x3FEF90C3, 0x465499B8, 0x3DECDEED, + 0x70000000, 0x3FEFA08F, 0xE2EF03AE, 0x3E0AEFD4, + 0xAC000000, 0x3FEFB063, 0x0567B2E7, 0x3E1BD4C0, + 0xD4000000, 0x3FEFC03F, 0x4F97FCBF, 0x3E26AA22, + 0xF0000000, 0x3FEFD023, 0x5E4E88D1, 0xBE2F9420, + 0xFC000000, 0x3FEFE00F, 0x438E52E2, 0xBE254004, + 0x00000000, 0x3FEFF004, 0xEEE93EFC, 0xBE1552AA, + 0x00000000, 0x3FF00000, 0x00000000, 0x00000000, + 0x00000000, 0x3FF00802, 0x4449F507, 0x3E155800, + 0x04000000, 0x3FF01008, 0x882D75D6, 0xBE354AA8, + 0x08000000, 0x3FF01812, 0x3740DE56, 0x3E303610, + 0x14000000, 0x3FF02020, 0x5B0C3264, 0x3E360044, + 0x28000000, 0x3FF02832, 0x0197EDC3, 0x3E3C4C26, + 0x48000000, 0x3FF03048, 0x5046CA09, 0x3E0B103B, + 0x74000000, 0x3FF03862, 0xF9A62624, 0xBE34659C, + 0xAC000000, 0x3FF04080, 0xDD0A8F37, 0xBE254438, + 0xF4000000, 0x3FF048A2, 0x97AFB6E2, 0x3DF256C2, + 0x50000000, 0x3FF050C9, 0x923D25E1, 0xBE3085DF, + 0xC0000000, 0x3FF058F3, 0x5EA3B091, 0xBE3F0A93, + 0x44000000, 0x3FF06122, 0x5D63534C, 0xBE237DE4, + 0xE0000000, 0x3FF06954, 0xFF0C58B7, 0x3E301719, + 0x98000000, 0x3FF0718B, 0x9DF7B665, 0x3E2E8410, + 0x6C000000, 0x3FF079C6, 0x3B127222, 0x3E349CB9, + 0x60000000, 0x3FF08205, 0x98E0BD08, 0x3DF127EC, + 0x74000000, 0x3FF08A48, 0x706CC41F, 0xBE24C1B6, + 0xA8000000, 0x3FF0928F, 0x093044EF, 0x3E334EF9, + 0x04000000, 0x3FF09ADB, 0x56BC6C83, 0xBE1304B1, + 0x84000000, 0x3FF0A32A, 0xB028B984, 0x3E2D383E, + 0x30000000, 0x3FF0AB7E, 0x64E7A202, 0xBE315B1E, + 0x04000000, 0x3FF0B3D6, 0xC678291E, 0xBE0AC1E6, + 0x04000000, 0x3FF0BC32, 0x2F12FFE2, 0x3E3A0418, + 0x38000000, 0x3FF0C492, 0x43D6D302, 0xBE37D617, + 0x98000000, 0x3FF0CCF6, 0x152CC8FA, 0x3E2133F2, + 0x2C000000, 0x3FF0D55F, 0xE966E6B7, 0x3E3CE5D1, + 0xF8000000, 0x3FF0DDCB, 0x7BCACA64, 0x3E1ABF24, + 0xFC000000, 0x3FF0E63C, 0x2E8CDBED, 0xBE3854F6, + 0x38000000, 0x3FF0EEB2, 0x0C32156B, 0xBE3E6463, + 0xAC000000, 0x3FF0F72B, 0xB69772CC, 0x3E365671, + 0x64000000, 0x3FF0FFA9, 0x02B1201A, 0xBE383E9A, + 0x58000000, 0x3FF1082B, 0x50549CC0, 0xBE205962, + 0x90000000, 0x3FF110B1, 0xFFDACA72, 0xBE376BFE, + 0x08000000, 0x3FF1193C, 0x5C43E2F3, 0x3E3C1C59, + 0xCC000000, 0x3FF121CA, 0xF7067C8B, 0xBE26D374, + 0xD4000000, 0x3FF12A5D, 0x4DDAFE1D, 0x3E343CCC, + 0x28000000, 0x3FF132F5, 0x58EBCB7F, 0x3E3D5C16, + 0xCC000000, 0x3FF13B90, 0xB66E8B53, 0xBE2B5D12, + 0xBC000000, 0x3FF14430, 0xB326B482, 0xBE24E919, + 0xFC000000, 0x3FF14CD4, 0xC8AABD43, 0x3E23139A, + 0x90000000, 0x3FF1557D, 0x16743B55, 0x3E30DD8B, + 0x7C000000, 0x3FF15E2A, 0x35904C50, 0xBE31D701, + 0xBC000000, 0x3FF166DB, 0x30E0CA83, 0x3E107F42, + 0x58000000, 0x3FF16F91, 0xDA1B7123, 0xBE24F1F2, + 0x50000000, 0x3FF1784B, 0x0DC79E23, 0xBE3ACAF2, + 0xA4000000, 0x3FF18109, 0x609374EE, 0xBE23DC79, + 0x58000000, 0x3FF189CC, 0x3A40C3B7, 0x3E262CF7, + 0x70000000, 0x3FF19293, 0x5A24F463, 0x3E1D3833, + 0xEC000000, 0x3FF19B5E, 0x8A2E4440, 0x3E2BA9AD, + 0xD0000000, 0x3FF1A42E, 0x61C41828, 0x3DFD8CBC, + 0x1C000000, 0x3FF1AD03, 0x5A4DDF0D, 0x3E1A65E6, + 0xD4000000, 0x3FF1B5DB, 0x9F828DB5, 0xBDE2FDBB, + 0xF8000000, 0x3FF1BEB8, 0xB79B700F, 0x3E2F4EE8, + 0x8C000000, 0x3FF1C79A, 0x0DE1D7E8, 0x3E3ACC35, + 0x94000000, 0x3FF1D080, 0xFF9E20A0, 0x3E11729E, + 0x10000000, 0x3FF1D96B, 0x6C2EA70B, 0xBE300F18, + 0x00000000, 0x3FF1E25A, 0xCE425A35, 0x3DF32E02, + 0x68000000, 0x3FF1EB4D, 0x9A322D12, 0x3E3BDE56, + 0x50000000, 0x3FF1F445, 0xBA737AEF, 0xBE3C3F0D, + 0xB0000000, 0x3FF1FD41, 0xC896DB7A, 0xBE0A2DD0, + 0x90000000, 0x3FF20642, 0xF8B782F6, 0x3E2577B0, + 0xF4000000, 0x3FF20F47, 0x73607FC8, 0xBE2C6DA3, + 0xD8000000, 0x3FF21851, 0xC8917348, 0x3E35F7D1, + 0x44000000, 0x3FF22160, 0xCF9CED69, 0x3E3B6F5C, + 0x3C000000, 0x3FF22A73, 0x85775C2E, 0xBE39967E, + 0xB8000000, 0x3FF2338A, 0x497226D4, 0x3E3B3213, + 0xC4000000, 0x3FF23CA6, 0x30733227, 0x3E3E2710, + 0x60000000, 0x3FF245C7, 0xAF215A72, 0x3E33B8A9, + 0x90000000, 0x3FF24EEC, 0x1365623F, 0xBE3F96B2, + 0x50000000, 0x3FF25816, 0x27DEE202, 0xBE37324F, + 0xA4000000, 0x3FF26144, 0x4E484D87, 0x3E318CD5, + 0x94000000, 0x3FF26A77, 0xA94519E8, 0xBDE3FD37, + 0x1C000000, 0x3FF273AF, 0xEE788C29, 0x3E37132F, + 0x44000000, 0x3FF27CEB, 0xE842E5C0, 0xBE03DDB7, + 0x08000000, 0x3FF2862C, 0xE17C9693, 0x3E37A3FB, + 0x70000000, 0x3FF28F71, 0xAEB3D9A0, 0x3E24EABF, + 0x7C000000, 0x3FF298BB, 0x853B0733, 0xBE13C7B6, + 0x2C000000, 0x3FF2A20A, 0xC7B588B5, 0x3E2D2C80, + 0x88000000, 0x3FF2AB5D, 0x708F3912, 0xBE35B750, + 0x8C000000, 0x3FF2B4B5, 0xD5FD9130, 0xBE291A70, + 0x3C000000, 0x3FF2BE12, 0x0CCF9F73, 0x3E2EE937, + 0xA0000000, 0x3FF2C773, 0xD42CF76C, 0xBE3C3F0C, + 0xB0000000, 0x3FF2D0D9, 0x60763D61, 0x3E35DD54, + 0x78000000, 0x3FF2DA44, 0xE7D6AA3B, 0x3E26C418, + 0xF8000000, 0x3FF2E3B3, 0x6FB9B7A8, 0xBE3605C6, + 0x2C000000, 0x3FF2ED28, 0x24DCDDF5, 0x3E3763D4, + 0x20000000, 0x3FF2F6A1, 0xA8EC1AA8, 0xBE1A411E, + 0xD0000000, 0x3FF3001E, 0x1FE8546F, 0xBE23FCA1, + 0x40000000, 0x3FF309A1, 0x3AAEE75E, 0xBE29DF0D, + 0x70000000, 0x3FF31328, 0x3C2C4206, 0x3E36A5D6, + 0x68000000, 0x3FF31CB4, 0xB4C979B0, 0x3E1B7A3E, + 0x28000000, 0x3FF32645, 0x706CD593, 0xBE36157D, + 0xB0000000, 0x3FF32FDA, 0x8DA4C646, 0xBE39F357, + 0x04000000, 0x3FF33975, 0xD575FE6F, 0xBE3E64DE, + 0x24000000, 0x3FF34314, 0x44D008E0, 0x3E07F9E3, + 0x18000000, 0x3FF34CB8, 0x5A563E77, 0xBE2E94F9, + 0xDC000000, 0x3FF35660, 0x2475EF19, 0x3E314DC2, + 0x78000000, 0x3FF3600E, 0xA33AC606, 0x3E26D623, + 0xEC000000, 0x3FF369C0, 0xC05B3160, 0x3E170F86, + 0x3C000000, 0x3FF37378, 0xDB0AE31A, 0xBE38DDFE, + 0x64000000, 0x3FF37D34, 0x5706B570, 0x3E3662A9, + 0x70000000, 0x3FF386F5, 0x6770731E, 0xBE1625E4, + 0x5C000000, 0x3FF390BB, 0x62971091, 0xBE1678F1, + 0x2C000000, 0x3FF39A86, 0xD045CB0C, 0xBE061F7C, + 0xE4000000, 0x3FF3A455, 0x568B1CA2, 0xBE35CF51, + 0x84000000, 0x3FF3AE2A, 0x7FB61F58, 0xBE378185, + 0x0C000000, 0x3FF3B804, 0x4FA133AF, 0x3E3F77F4, + 0x88000000, 0x3FF3C1E2, 0xB00B73FE, 0xBE22F96A, + 0xF0000000, 0x3FF3CBC5, 0x1EB4CE2F, 0x3E351A64, + 0x50000000, 0x3FF3D5AE, 0xD3755639, 0xBE3D3516, + 0xA0000000, 0x3FF3DF9B, 0x43E8C10E, 0x3E1CD938, + 0xEC000000, 0x3FF3E98D, 0x455C8842, 0xBE35EE23, + 0x30000000, 0x3FF3F385, 0x96C9F4ED, 0xBE29B282, + 0x70000000, 0x3FF3FD81, 0x3168CC0B, 0x3E24A40E, + 0xB0000000, 0x3FF40782, 0x86C72839, 0x3E3784BC, + 0xF4000000, 0x3FF41188, 0x0785D847, 0x3E061F19, + 0x3C000000, 0x3FF41B94, 0xE654A9C9, 0xBE27AEF2, + 0x88000000, 0x3FF425A4, 0xF9E4C1BA, 0x3E33DFC3, + 0xE0000000, 0x3FF42FB9, 0x593D0C75, 0x3E2455A8, + 0x44000000, 0x3FF439D4, 0x238B65D1, 0xBDE41D4E, + 0xB4000000, 0x3FF443F3, 0x454CBECB, 0x3E3BE616, + 0x38000000, 0x3FF44E18, 0x931C5332, 0x3E207B3C, + 0xD0000000, 0x3FF45841, 0x7615DCC9, 0xBE330846, + 0x7C000000, 0x3FF46270, 0xE497F84E, 0xBE2A8A7B, + 0x40000000, 0x3FF46CA4, 0xF737AF78, 0x3E020B50, + 0x20000000, 0x3FF476DD, 0xE34AFBD3, 0x3E116B19, + 0x20000000, 0x3FF4811B, 0x841EDB52, 0xBE3E15A7, + 0x3C000000, 0x3FF48B5E, 0x33B3DE1E, 0x3E0F40C3, + 0x7C000000, 0x3FF495A6, 0x92EFEE02, 0x3E33607F, + 0xE4000000, 0x3FF49FF3, 0x14F7E168, 0xBE1A2DB5, + 0x70000000, 0x3FF4AA46, 0x3EBA1C94, 0x3E3F59EC, + 0x2C000000, 0x3FF4B49E, 0x8B9AE885, 0xBE31A539, + 0x10000000, 0x3FF4BEFB, 0xF13C8C95, 0x3E2FAC0B, + 0x28000000, 0x3FF4C95D, 0xF8B74775, 0xBE32C0BB, + 0x70000000, 0x3FF4D3C4, 0x4F9474BB, 0xBE2FC24E, + 0xEC000000, 0x3FF4DE30, 0x09DA911F, 0x3E008F30, + 0xA0000000, 0x3FF4E8A2, 0xBAF8D98B, 0x3E2994C1, + 0x90000000, 0x3FF4F319, 0x18648D0A, 0xBE17C38C, + 0xBC000000, 0x3FF4FD95, 0xF22F8698, 0xBE288852, + 0x28000000, 0x3FF50817, 0x30A2C153, 0xBE3C3EC3, + 0xD4000000, 0x3FF5129D, 0x968492AA, 0xBE27B606, + 0xC4000000, 0x3FF51D29, 0x61101629, 0x3E2E0396, + 0xFC000000, 0x3FF527BA, 0xDAEEAB38, 0x3E3E876F, + 0x80000000, 0x3FF53251, 0xED945B30, 0x3E29F59E, + 0x50000000, 0x3FF53CED, 0x0B4AE3F1, 0x3E12D7DA, + 0x70000000, 0x3FF5478E, 0x5FB946D0, 0xBE2FAFB8, + 0xE0000000, 0x3FF55234, 0x87D80C66, 0xBE18A8B3, + 0xA4000000, 0x3FF55CE0, 0x764CF85C, 0x3E28B18F, + 0xC0000000, 0x3FF56791, 0x2BDBC6F4, 0x3E326017, + 0x38000000, 0x3FF57248, 0x53D523FE, 0xBE229F98, + 0x0C000000, 0x3FF57D04, 0x4D9B8720, 0xBE3BDD08, + 0x3C000000, 0x3FF587C5, 0x09D8749E, 0x3E169EBC, + 0xD0000000, 0x3FF5928B, 0x339C2080, 0x3E190C8C, + 0xC8000000, 0x3FF59D57, 0xDE75E9CA, 0x3E310FA4, + 0x28000000, 0x3FF5A829, 0x1097F186, 0x3E313D18, + 0xF4000000, 0x3FF5B2FF, 0xD51C23F6, 0xBE2BDE04, + 0x28000000, 0x3FF5BDDC, 0x8938C386, 0x3E3EE67E, + 0xD0000000, 0x3FF5C8BD, 0x47DF6575, 0x3E0973B8, + 0xE8000000, 0x3FF5D3A4, 0x1DB97781, 0x3E24DF02, + 0x78000000, 0x3FF5DE91, 0xAC4AECDC, 0xBE3FBA00, + 0x7C000000, 0x3FF5E983, 0x939F646A, 0xBE2F37AF, + 0xFC000000, 0x3FF5F47A, 0x58A6EEE9, 0xBE396DEF, + 0xF8000000, 0x3FF5FF77, 0xE3613C7B, 0xBE315248, + 0x74000000, 0x3FF60A7A, 0xF1553706, 0xBE26A9E2, + 0x74000000, 0x3FF61582, 0xAE4D7CB6, 0xBE3B6BF6, + 0xF8000000, 0x3FF6208F, 0x9EB5EBA5, 0xBE35775B, + 0x04000000, 0x3FF62BA3, 0xC1E43506, 0xBE2A821B, + 0x9C000000, 0x3FF636BB, 0x7B2D8CF4, 0xBE367CDA, + 0xC0000000, 0x3FF641D9, 0x3E907A1D, 0xBE13218B, + 0x74000000, 0x3FF64CFD, 0x7BF5DFE4, 0x3E3454EE, + 0xC0000000, 0x3FF65826, 0x6366C5FD, 0xBE3E960F, + 0x9C000000, 0x3FF66355, 0x8B43C17E, 0x3E2E378F, + 0x14000000, 0x3FF66E8A, 0xA4306535, 0x3E244BE0, + 0x28000000, 0x3FF679C4, 0x8DF63D6E, 0xBDE4B6C1, + 0xD8000000, 0x3FF68503, 0xE6A239CF, 0x3E3BA122, + 0x2C000000, 0x3FF69049, 0x59FB5F30, 0x3E27F286, + 0x24000000, 0x3FF69B94, 0x971D3970, 0xBE044041 } }; + +static const union { + int4 i[2048]; + double x[1024]; +} fine = { .i = { + 0x00000000, 0x3FF00000, 0x00000000, 0x00000000, + 0x00000000, 0x3FF00004, 0x55556AAB, 0x3DA00001, + 0x00000000, 0x3FF00008, 0xAAAB0000, 0x3DC00002, + 0x00000000, 0x3FF0000C, 0x8000D800, 0x3DD20004, + 0x00000000, 0x3FF00010, 0x5556AAAB, 0x3DE00005, + 0x00000000, 0x3FF00014, 0x6AADEC01, 0x3DE9000A, + 0x00000000, 0x3FF00018, 0x00036001, 0x3DF20009, + 0x00000000, 0x3FF0001C, 0x4AB0EB58, 0x3DF8800E, + 0x00000000, 0x3FF00020, 0xAAB00002, 0x3E00000A, + 0x00000000, 0x3FF00024, 0x30088B04, 0x3E04400F, + 0x00000000, 0x3FF00028, 0xD5625AB1, 0x3E090014, + 0x00000000, 0x3FF0002C, 0xBABDBB0A, 0x3E0E401B, + 0x00000000, 0x3FF00030, 0x000D8008, 0x3E120012, + 0x00000000, 0x3FF00034, 0xE2BD42E1, 0x3E152016, + 0x00000000, 0x3FF00038, 0x956E5812, 0x3E18801C, + 0x00000000, 0x3FF0003C, 0x2820F599, 0x3E1C2023, + 0x00000000, 0x3FF00040, 0x556AAABC, 0x3E200015, + 0x00000000, 0x3FF00044, 0x96C5DAD7, 0x3E221019, + 0x00000000, 0x3FF00048, 0x60222C1F, 0x3E24401E, + 0x00000000, 0x3FF0004C, 0xB97FC193, 0x3E269023, + 0x00000000, 0x3FF00050, 0xAADEC034, 0x3E290029, + 0x00000000, 0x3FF00054, 0x3C3F4F02, 0x3E2B9030, + 0x00000000, 0x3FF00058, 0x75A196FF, 0x3E2E4037, + 0x00000000, 0x3FF0005C, 0xAF82E194, 0x3E30881F, + 0x00000000, 0x3FF00060, 0x00360041, 0x3E320024, + 0x00000000, 0x3FF00064, 0xB0EA3F05, 0x3E338828, + 0x00000000, 0x3FF00068, 0xC59FB661, 0x3E35202D, + 0x00000000, 0x3FF0006C, 0x42567FD5, 0x3E36C833, + 0x00000000, 0x3FF00070, 0x2B0EB5E1, 0x3E388039, + 0x00000000, 0x3FF00074, 0x83C87407, 0x3E3A483F, + 0x00000000, 0x3FF00078, 0x5083D6C6, 0x3E3C2046, + 0x00000000, 0x3FF0007C, 0x9540FB9E, 0x3E3E084D, + 0x04000000, 0x3FF00080, 0xA9FFFEEF, 0xBE3FFFAA, + 0x04000000, 0x3FF00084, 0x693EF962, 0xBE3DF7A2, + 0x04000000, 0x3FF00088, 0xA47BD339, 0xBE3BDF99, + 0x04000000, 0x3FF0008C, 0x57B66AF5, 0xBE39B790, + 0x04000000, 0x3FF00090, 0x7EEE9E14, 0xBE377F86, + 0x04000000, 0x3FF00094, 0x16244916, 0xBE35377C, + 0x04000000, 0x3FF00098, 0x1957477B, 0xBE32DF71, + 0x04000000, 0x3FF0009C, 0x848773C2, 0xBE307765, + 0x04000000, 0x3FF000A0, 0xA7694ED3, 0xBE2BFEB2, + 0x04000000, 0x3FF000A4, 0x05BD75E2, 0xBE26EE99, + 0x04000000, 0x3FF000A8, 0x1C0B0BB1, 0xBE21BE7E, + 0x04000000, 0x3FF000AC, 0xC4A37A79, 0xBE18DCC3, + 0x04000000, 0x3FF000B0, 0x4244D60F, 0xBE0BF911, + 0x04000000, 0x3FF000B4, 0xEC91D848, 0xBDE6E255, + 0x04000000, 0x3FF000B8, 0xEC1B8F0C, 0x3E0107EB, + 0x04000000, 0x3FF000BC, 0x89BE52AA, 0x3E142439, + 0x04000000, 0x3FF000C0, 0x06C01033, 0x3E200240, + 0x04000000, 0x3FF000C4, 0xC8A9F760, 0x3E261264, + 0x04000000, 0x3FF000C8, 0x129D3FDE, 0x3E2C428B, + 0x04000000, 0x3FF000CC, 0x764D2658, 0x3E314959, + 0x04000000, 0x3FF000D0, 0x2F50C16C, 0x3E34816E, + 0x04000000, 0x3FF000D4, 0xB859A4AB, 0x3E37C983, + 0x04000000, 0x3FF000D8, 0x15680499, 0x3E3B219A, + 0x04000000, 0x3FF000DC, 0x4A7C16B5, 0x3E3E89B1, + 0x08000000, 0x3FF000E0, 0xA469EE7E, 0xBE3DFE36, + 0x08000000, 0x3FF000E4, 0xB349D37F, 0xBE3A761D, + 0x08000000, 0x3FF000E8, 0xDE235FCD, 0xBE36DE03, + 0x08000000, 0x3FF000EC, 0x20F659E6, 0xBE3335E9, + 0x08000000, 0x3FF000F0, 0xEF850E8F, 0xBE2EFB9A, + 0x08000000, 0x3FF000F4, 0xBD0F58E2, 0xBE276B61, + 0x08000000, 0x3FF000F8, 0x45163381, 0xBE1F764D, + 0x08000000, 0x3FF000FC, 0x5FDF589A, 0xBE0FABA6, + 0x08000000, 0x3FF00100, 0xABBBBE94, 0x3D8555AA, + 0x08000000, 0x3FF00104, 0xDABB690B, 0x3E102B2C, + 0x08000000, 0x3FF00108, 0x7820FBA0, 0x3E2045D9, + 0x08000000, 0x3FF0010C, 0x92F54742, 0x3E28961E, + 0x08000000, 0x3FF00110, 0xE2ED8E39, 0x3E308332, + 0x08000000, 0x3FF00114, 0x8C698119, 0x3E34CB57, + 0x08000000, 0x3FF00118, 0x49EEC0C4, 0x3E39237D, + 0x08000000, 0x3FF0011C, 0x1F7D92BC, 0x3E3D8BA4, + 0x0C000000, 0x3FF00120, 0xEEE9C27D, 0xBE3DFC33, + 0x0C000000, 0x3FF00124, 0xDD46F763, 0xBE39740A, + 0x0C000000, 0x3FF00128, 0xA799C375, 0xBE34DBE0, + 0x0C000000, 0x3FF0012C, 0x49E1DD2F, 0xBE3033B5, + 0x0C000000, 0x3FF00130, 0x803DF41F, 0xBE26F711, + 0x0C000000, 0x3FF00134, 0x19433A4C, 0xBE1ACD6C, + 0x0C000000, 0x3FF00138, 0x8770E36F, 0xBDFDB2C1, + 0x0C000000, 0x3FF0013C, 0x6B74A43E, 0x3E086820, + 0x0C000000, 0x3FF00140, 0xDEC0D058, 0x3E200A6A, + 0x0C000000, 0x3FF00144, 0x22BD7872, 0x3E2A1AD0, + 0x0C000000, 0x3FF00148, 0xF769E132, 0x3E32259B, + 0x0C000000, 0x3FF0014C, 0x2582289A, 0x3E374DD1, + 0x0C000000, 0x3FF00150, 0x9FA7E4F4, 0x3E3C8607, + 0x10000000, 0x3FF00154, 0x9624963C, 0xBE3E31C0, + 0x10000000, 0x3FF00158, 0x77E2F472, 0xBE38D987, + 0x10000000, 0x3FF0015C, 0x0192E02C, 0xBE33714D, + 0x10000000, 0x3FF00160, 0x5E6805CB, 0xBE2BF222, + 0x10000000, 0x3FF00164, 0xF98C0A34, 0xBE20E1A7, + 0x10000000, 0x3FF00168, 0x32447238, 0xBE06C4AB, + 0x10000000, 0x3FF0016C, 0xC225D8C1, 0x3E067D54, + 0x10000000, 0x3FF00170, 0x05C4630F, 0x3E210FD8, + 0x10000000, 0x3FF00174, 0xBB206115, 0x3E2CA05D, + 0x10000000, 0x3FF00178, 0x2C4F14A6, 0x3E342873, + 0x10000000, 0x3FF0017C, 0xF31F3B5E, 0x3E3A10B8, + 0x14000000, 0x3FF00180, 0xC9FEFCC9, 0xBE3FF6FF, + 0x14000000, 0x3FF00184, 0x070B344A, 0xBE39EEB7, + 0x14000000, 0x3FF00188, 0xC0050AA2, 0xBE33D66C, + 0x14000000, 0x3FF0018C, 0xE1D83C97, 0xBE2B5C41, + 0x14000000, 0x3FF00190, 0x57003305, 0xBE1DD74E, + 0x14000000, 0x3FF00194, 0xA80727F1, 0xBDF2D84A, + 0x14000000, 0x3FF00198, 0x534C5401, 0x3E14AB2F, + 0x14000000, 0x3FF0019C, 0xD875DE83, 0x3E27263B, + 0x14000000, 0x3FF001A0, 0x9FB782CA, 0x3E320B71, + 0x14000000, 0x3FF001A4, 0xF349371F, 0x3E3893C6, + 0x14000000, 0x3FF001A8, 0xEAF074C6, 0x3E3F2C1D, + 0x18000000, 0x3FF001AC, 0x75525ABC, 0xBE3A2B89, + 0x18000000, 0x3FF001B0, 0x297ECCE2, 0xBE33732F, + 0x18000000, 0x3FF001B4, 0x5B28EC49, 0xBE2955A6, + 0x18000000, 0x3FF001B8, 0xF64BA7FD, 0xBE1749D5, + 0x18000000, 0x3FF001BC, 0xA8645141, 0x3DF15E9E, + 0x18000000, 0x3FF001C0, 0x1D6F0B37, 0x3E201C96, + 0x18000000, 0x3FF001C4, 0xE6028E39, 0x3E2E2D5B, + 0x18000000, 0x3FF001C8, 0x9B63FA1E, 0x3E362F12, + 0x18000000, 0x3FF001CC, 0x0BE01026, 0x3E3D5779, + 0x1C000000, 0x3FF001D0, 0xB78A0445, 0xBE3B701E, + 0x1C000000, 0x3FF001D4, 0xAAD9CF9D, 0xBE3427B4, + 0x1C000000, 0x3FF001D8, 0x941DBAB5, 0xBE299E91, + 0x1C000000, 0x3FF001DC, 0x44A2DFDD, 0xBE159B6C, + 0x1C000000, 0x3FF001E0, 0x1EC8B89C, 0x3E008CA4, + 0x1C000000, 0x3FF001E4, 0xF1EE0E9A, 0x3E23340B, + 0x1C000000, 0x3FF001E8, 0x5231913C, 0x3E313279, + 0x1C000000, 0x3FF001EC, 0x93892E68, 0x3E38DAEE, + 0x20000000, 0x3FF001F0, 0x3F01A6A8, 0xBE3F6C9A, + 0x20000000, 0x3FF001F4, 0x216E726C, 0xBE37A421, + 0x20000000, 0x3FF001F8, 0x1F7970B9, 0xBE2F974C, + 0x20000000, 0x3FF001FC, 0x17AFEBC8, 0xBE1F8CA4, + 0x20000000, 0x3FF00200, 0x04445B06, 0x3DB55600, + 0x20000000, 0x3FF00204, 0x0C290A26, 0x3E203BAE, + 0x20000000, 0x3FF00208, 0x104547BD, 0x3E30365A, + 0x20000000, 0x3FF0020C, 0x22970DE3, 0x3E385EDF, + 0x24000000, 0x3FF00210, 0xBEF5A5F4, 0xBE3F6899, + 0x24000000, 0x3FF00214, 0x90605040, 0xBE372010, + 0x24000000, 0x3FF00218, 0x9B50D8EE, 0xBE2D8F0A, + 0x24000000, 0x3FF0021C, 0xCB35D444, 0xBE197BDF, + 0x24000000, 0x3FF00220, 0x2188E3D5, 0x3E00CCBC, + 0x24000000, 0x3FF00224, 0x36A79F6A, 0x3E254452, + 0x24000000, 0x3FF00228, 0xD69B2D28, 0x3E333ABC, + 0x24000000, 0x3FF0022C, 0xBA07BE5B, 0x3E3BE352, + 0x28000000, 0x3FF00230, 0x3665F227, 0xBE3B6415, + 0x28000000, 0x3FF00234, 0xF6AD58D5, 0xBE329B7A, + 0x28000000, 0x3FF00238, 0x059BD24A, 0xBE2385BD, + 0x28000000, 0x3FF0023C, 0xD8E2B1B4, 0xBDEB47FA, + 0x28000000, 0x3FF00240, 0x22CF60F6, 0x3E203CC2, + 0x28000000, 0x3FF00244, 0x39BEF87F, 0x3E312704, + 0x28000000, 0x3FF00248, 0xA63F5309, 0x3E3A3FA9, + 0x2C000000, 0x3FF0024C, 0xA516AE5E, 0xBE3C97AE, + 0x2C000000, 0x3FF00250, 0xA442792A, 0xBE335F04, + 0x2C000000, 0x3FF00254, 0xA686F3A2, 0xBE242CB0, + 0x2C000000, 0x3FF00258, 0xC3237903, 0xBDE7B535, + 0x2C000000, 0x3FF0025C, 0x9E7A6CF7, 0x3E21560E, + 0x2C000000, 0x3FF00260, 0xA8C01385, 0x3E3223BA, + 0x2C000000, 0x3FF00264, 0x627012DF, 0x3E3BAC70, + 0x30000000, 0x3FF00268, 0x7FB232EA, 0xBE3ABAD7, + 0x30000000, 0x3FF0026C, 0xF9A6244B, 0xBE31121C, + 0x30000000, 0x3FF00270, 0x1DAC9AE4, 0xBE1D6580, + 0x30000000, 0x3FF00274, 0xD7FB0AC3, 0x3E037AFA, + 0x30000000, 0x3FF00278, 0x633420EB, 0x3E289042, + 0x30000000, 0x3FF0027C, 0x8065842A, 0x3E3630E5, + 0x34000000, 0x3FF00280, 0xB49DA4FF, 0xBE3FD653, + 0x34000000, 0x3FF00284, 0x696ECB76, 0xBE35CD8A, + 0x34000000, 0x3FF00288, 0x341A9D63, 0xBE27697D, + 0x34000000, 0x3FF0028C, 0x2788D238, 0xBDF8BF04, + 0x34000000, 0x3FF00290, 0x42A03782, 0x3E2159C1, + 0x34000000, 0x3FF00294, 0x154D4F89, 0x3E32F5B4, + 0x34000000, 0x3FF00298, 0x1D7FB2C1, 0x3E3D4E8A, + 0x38000000, 0x3FF0029C, 0x42181508, 0xBE38489D, + 0x38000000, 0x3FF002A0, 0x0AF2C28C, 0xBE2B9F84, + 0x38000000, 0x3FF002A4, 0x451C5357, 0xBE0A3721, + 0x38000000, 0x3FF002A8, 0x61A8605E, 0x3E1D47F1, + 0x38000000, 0x3FF002AC, 0x81B02FCF, 0x3E31FADF, + 0x38000000, 0x3FF002B0, 0x572F674A, 0x3E3CB3C5, + 0x3C000000, 0x3FF002B4, 0x231795EA, 0xBE388352, + 0x3C000000, 0x3FF002B8, 0xD248367A, 0xBE2B54CD, + 0x3C000000, 0x3FF002BC, 0xB7ABD90D, 0xBE060BC7, + 0x3C000000, 0x3FF002C0, 0x6EE9F1EF, 0x3E206EEF, + 0x3C000000, 0x3FF002C4, 0x261BF09E, 0x3E33406B, + 0x3C000000, 0x3FF002C8, 0x59001C60, 0x3E3E5961, + 0x40000000, 0x3FF002CC, 0xABDDD232, 0xBE367DA5, + 0x40000000, 0x3FF002D0, 0xC8FA5113, 0xBE268953, + 0x40000000, 0x3FF002D4, 0x8B33A701, 0x3D9152CC, + 0x40000000, 0x3FF002D8, 0x3E058570, 0x3E26BAAC, + 0x40000000, 0x3FF002DC, 0x63236E71, 0x3E36C65A, + 0x44000000, 0x3FF002E0, 0x7C7A795C, 0xBE3DC09E, + 0x44000000, 0x3FF002E4, 0x7BD63D1D, 0xBE323794, + 0x44000000, 0x3FF002E8, 0x5BBC9105, 0xBE1A7A1E, + 0x44000000, 0x3FF002EC, 0xD8EE2B1B, 0x3E142A20, + 0x44000000, 0x3FF002F0, 0xEFAA8A8D, 0x3E30C39A, + 0x44000000, 0x3FF002F4, 0x995E96A2, 0x3E3C8CB0, + 0x48000000, 0x3FF002F8, 0xC8A79469, 0xBE379A36, + 0x48000000, 0x3FF002FC, 0x64CE7203, 0xBE276236, + 0x48000000, 0x3FF00300, 0x0819DA68, 0x3DD200D8, + 0x48000000, 0x3FF00304, 0xE5E018D4, 0x3E28A249, + 0x48000000, 0x3FF00308, 0x8A087692, 0x3E386A49, + 0x4C000000, 0x3FF0030C, 0xD695988B, 0xBE3B6C8E, + 0x4C000000, 0x3FF00310, 0x55D2BCBA, 0xBE2E66C8, + 0x4C000000, 0x3FF00314, 0x7790BA7A, 0xBE0751B3, + 0x4C000000, 0x3FF00318, 0xC2A20261, 0x3E22DDF4, + 0x4C000000, 0x3FF0031C, 0x49E0B0B5, 0x3E35D82E, + 0x50000000, 0x3FF00320, 0xB142422E, 0xBE3DAE9A, + 0x50000000, 0x3FF00324, 0x8C170FE6, 0xBE312560, + 0x50000000, 0x3FF00328, 0x0A73BF77, 0xBE12308D, + 0x50000000, 0x3FF0032C, 0x5E59CEFA, 0x3E203A3A, + 0x50000000, 0x3FF00330, 0xCD4740BF, 0x3E34D660, + 0x54000000, 0x3FF00334, 0x644D1883, 0xBE3E6058, + 0x54000000, 0x3FF00338, 0x618F57B6, 0xBE31870E, + 0x54000000, 0x3FF0033C, 0x99FABD0F, 0xBE127704, + 0x54000000, 0x3FF00340, 0xA1CB5ECF, 0x3E20B71E, + 0x54000000, 0x3FF00344, 0x089E93E1, 0x3E3564E3, + 0x58000000, 0x3FF00348, 0xFB533142, 0xBE3D81C5, + 0x58000000, 0x3FF0034C, 0xB6EECE6C, 0xBE30586B, + 0x58000000, 0x3FF00350, 0x319B883E, 0xBE08F871, + 0x58000000, 0x3FF00354, 0x75BF7503, 0x3E2454A5, + 0x58000000, 0x3FF00358, 0xF04B88C5, 0x3E3783B6, + 0x5C000000, 0x3FF0035C, 0x81EF30A7, 0xBE3B12E1, + 0x5C000000, 0x3FF00360, 0x2F9F3657, 0xBE2B32ED, + 0x5C000000, 0x3FF00364, 0x54DF31BC, 0xBDB0084D, + 0x5C000000, 0x3FF00368, 0xC303B7B9, 0x3E2B12D2, + 0x5C000000, 0x3FF0036C, 0x78B56F97, 0x3E3B32DE, + 0x60000000, 0x3FF00370, 0x03B9496C, 0xBE3713A9, + 0x60000000, 0x3FF00374, 0x1F92E726, 0xBE22945A, + 0x60000000, 0x3FF00378, 0x621736DF, 0x3E123D49, + 0x60000000, 0x3FF0037C, 0x3935580D, 0x3E3278D5, + 0x64000000, 0x3FF00380, 0x69B9F5FB, 0xBE3F8DA4, + 0x64000000, 0x3FF00384, 0x8C473CC8, 0xBE31841A, + 0x64000000, 0x3FF00388, 0x538CDE07, 0xBE0B5469, + 0x64000000, 0x3FF0038C, 0x7F8F9D65, 0x3E257E07, + 0x64000000, 0x3FF00390, 0x3665E52B, 0x3E38F898, + 0x68000000, 0x3FF00394, 0xC29674BD, 0xBE38BDCF, + 0x68000000, 0x3FF00398, 0x4E58B4D9, 0xBE24C868, + 0x68000000, 0x3FF0039C, 0x329466D7, 0x3E1015AC, + 0x68000000, 0x3FF003A0, 0xDCDECE44, 0x3E327F0D, + 0x6C000000, 0x3FF003A4, 0xB27E5528, 0xBE3EF74B, + 0x6C000000, 0x3FF003A8, 0x9D7167F2, 0xBE305DA1, + 0x6C000000, 0x3FF003AC, 0xFF980820, 0xBDFB3F3D, + 0x6C000000, 0x3FF003B0, 0x13D49789, 0x3E2A0B7B, + 0x6C000000, 0x3FF003B4, 0xA43AE87C, 0x3E3BCF72, + 0x70000000, 0x3FF003B8, 0x8D06BDC0, 0xBE3556D4, + 0x70000000, 0x3FF003BC, 0x1766E54D, 0xBE19B460, + 0x70000000, 0x3FF003C0, 0x7B85C8BA, 0x3E211950, + 0x70000000, 0x3FF003C4, 0x41D00AED, 0x3E37966C, + 0x74000000, 0x3FF003C8, 0xF5B15507, 0xBE394FCB, + 0x74000000, 0x3FF003CC, 0xC98093C4, 0xBE244C00, + 0x74000000, 0x3FF003D0, 0xE2907BDF, 0x3E144F3B, + 0x74000000, 0x3FF003D4, 0x267CD924, 0x3E345DA2, + 0x78000000, 0x3FF003D8, 0xD73526C0, 0xBE3C4886, + 0x78000000, 0x3FF003DC, 0xF8E1D62E, 0xBE29BD57, + 0x78000000, 0x3FF003E0, 0xD65415E1, 0x3E04D995, + 0x78000000, 0x3FF003E4, 0x527E1A58, 0x3E322515, + 0x7C000000, 0x3FF003E8, 0x31552BA5, 0xBE3E4104, + 0x7C000000, 0x3FF003EC, 0x995CAB3B, 0xBE2D2E33, + 0x7C000000, 0x3FF003F0, 0x473970DC, 0x3DF22D48, + 0x7C000000, 0x3FF003F4, 0xC61195FC, 0x3E30ECC6, + 0x80000000, 0x3FF003F8, 0x03D35C34, 0xBE3F3943, + 0x80000000, 0x3FF003FC, 0xAA7483C7, 0xBE2E9E91, + 0x80000000, 0x3FF00400, 0xBBBC71CE, 0x3DE556AA, + 0x80000000, 0x3FF00404, 0x817613C1, 0x3E30B4B7, + 0x84000000, 0x3FF00408, 0x4E70B0AC, 0xBE3F3142, + 0x84000000, 0x3FF0040C, 0x2BAAD02F, 0xBE2E0E70, + 0x84000000, 0x3FF00410, 0xF48F01F2, 0x3DF32D62, + 0x84000000, 0x3FF00414, 0x84EB5B98, 0x3E317CE8, + 0x88000000, 0x3FF00418, 0x10ED210B, 0xBE3E2901, + 0x88000000, 0x3FF0041C, 0x1C7F0051, 0xBE2B7DCD, + 0x88000000, 0x3FF00420, 0x87AA2706, 0x3E05D9C0, + 0x88000000, 0x3FF00424, 0xD0B235B3, 0x3E33455A, + 0x8C000000, 0x3FF00428, 0x4B07A510, 0xBE3C207E, + 0x8C000000, 0x3FF0042C, 0x7C6E838B, 0xBE26ECA6, + 0x8C000000, 0x3FF00430, 0xEC91A8D5, 0x3E150F6F, + 0x8C000000, 0x3FF00434, 0x650C6A83, 0x3E360E0F, + 0x90000000, 0x3FF00438, 0xFC7E3439, 0xBE3917B8, + 0x90000000, 0x3FF0043C, 0x4AF4C8B6, 0xBE205AFA, + 0x90000000, 0x3FF00440, 0xDC31D181, 0x3E219985, + 0x90000000, 0x3FF00444, 0x423CC2BE, 0x3E39D707, + 0x94000000, 0x3FF00448, 0x250DC5BF, 0xBE350EB0, + 0x94000000, 0x3FF0044C, 0x1E2CF893, 0xBE0F231A, + 0x94000000, 0x3FF00450, 0xD42C92D4, 0x3E2AABDB, + 0x94000000, 0x3FF00454, 0x6887075B, 0x3E3EA043, + 0x98000000, 0x3FF00458, 0xC472509B, 0xBE300562, + 0x98000000, 0x3FF0045C, 0x72B572E0, 0x3DF64FB6, + 0x98000000, 0x3FF00460, 0xEF61155C, 0x3E32DF5D, + 0x9C000000, 0x3FF00464, 0x27CFFE6A, 0xBE3B963B, + 0x9C000000, 0x3FF00468, 0xB4CD96FE, 0xBE23F79F, + 0x9C000000, 0x3FF0046C, 0x6E771F13, 0x3E1EBA7F, + 0x9C000000, 0x3FF00470, 0xFE3ED608, 0x3E396913, + 0xA0000000, 0x3FF00474, 0x6E82850F, 0xBE34CC73, + 0xA0000000, 0x3FF00478, 0x352966B7, 0xBE078FB3, + 0xA0000000, 0x3FF0047C, 0x33AFF8AE, 0x3E2DF116, + 0xA4000000, 0x3FF00480, 0xE909EADD, 0xBE3F0CEE, + 0xA4000000, 0x3FF00484, 0xD6938597, 0xBE2A04C8, + 0xA4000000, 0x3FF00488, 0x5C6654D8, 0x3E1460AA, + 0xA4000000, 0x3FF0048C, 0x22213ECF, 0x3E3742BE, + 0xA8000000, 0x3FF00490, 0xC631A356, 0xBE3682A9, + 0xA8000000, 0x3FF00494, 0x7777B644, 0xBE10E034, + 0xA8000000, 0x3FF00498, 0x3E3B0991, 0x3E2C4528, + 0xAC000000, 0x3FF0049C, 0x0B3E269F, 0xBE3F72C6, + 0xAC000000, 0x3FF004A0, 0x31DF923B, 0xBE29F037, + 0xAC000000, 0x3FF004A4, 0xE82713DE, 0x3E164A4D, + 0xAC000000, 0x3FF004A8, 0x31AFAC4B, 0x3E382D47, + 0xB0000000, 0x3FF004AC, 0x6DFCE978, 0xBE352800, + 0xB0000000, 0x3FF004B0, 0x07D68D27, 0xBE036A1B, + 0xB0000000, 0x3FF004B4, 0x5CB71F6F, 0x3E305D7E, + 0xB4000000, 0x3FF004B8, 0x30E5E990, 0xBE3CC7BB, + 0xB4000000, 0x3FF004BC, 0x0BA17DEA, 0xBE23B9E0, + 0xB4000000, 0x3FF004C0, 0xC3EF9BD8, 0x3E223BBF, + 0xB4000000, 0x3FF004C4, 0x8A74ECC0, 0x3E3C28B4, + 0xB8000000, 0x3FF004C8, 0x085831CA, 0xBE30BC72, + 0xB8000000, 0x3FF004CC, 0x6C8D1FC8, 0x3E037361, + 0xB8000000, 0x3FF004D0, 0x3033A0B8, 0x3E35A94F, + 0xBC000000, 0x3FF004D4, 0xFC7107DE, 0xBE370BC8, + 0xBC000000, 0x3FF004D8, 0xA2D908DA, 0xBE0D86E2, + 0xBC000000, 0x3FF004DC, 0x58ED155E, 0x3E2F742A, + 0xC0000000, 0x3FF004E0, 0x75FACDD0, 0xBE3CCAF4, + 0xC0000000, 0x3FF004E4, 0x6F5BE5D3, 0xBE227FF2, + 0xC0000000, 0x3FF004E8, 0xD6BCA827, 0x3E24B60D, + 0xC0000000, 0x3FF004EC, 0xF72B40D6, 0x3E3E060B, + 0xC4000000, 0x3FF004F0, 0x208BE3E3, 0xBE2C7DD4, + 0xC4000000, 0x3FF004F4, 0x642FDDB8, 0x3E163093, + 0xC4000000, 0x3FF004F8, 0xB72239A5, 0x3E396738, + 0xC8000000, 0x3FF004FC, 0x7201ED9B, 0xBE32ADAE, + 0xC8000000, 0x3FF00500, 0x1A0C05F3, 0x3DF4D6F6, + 0xC8000000, 0x3FF00504, 0x360B8346, 0x3E355892, + 0xCC000000, 0x3FF00508, 0xF0C06435, 0xBE368C45, + 0xCC000000, 0x3FF0050C, 0x760DA2F6, 0xBE0308C8, + 0xCC000000, 0x3FF00510, 0xE008D57B, 0x3E31DA18, + 0xD0000000, 0x3FF00514, 0x205F82F4, 0xBE39DAB0, + 0xD0000000, 0x3FF00518, 0x2FE5E3E3, 0xBE15FDD0, + 0xD0000000, 0x3FF0051C, 0x42787241, 0x3E2DD79A, + 0xD4000000, 0x3FF00520, 0x94BD25F4, 0xBE3C98EC, + 0xD4000000, 0x3FF00524, 0x53C89D03, 0xBE201B42, + 0xD4000000, 0x3FF00528, 0xCB901057, 0x3E291B5E, + 0xD8000000, 0x3FF0052C, 0xE1B6D837, 0xBE3EC6FA, + 0xD8000000, 0x3FF00530, 0xF8BF49E7, 0xBE24173F, + 0xD8000000, 0x3FF00534, 0x339DDB57, 0x3E257F80, + 0xD8000000, 0x3FF00538, 0x64D62C5C, 0x3E3F9B25, + 0xDC000000, 0x3FF0053C, 0x2E913659, 0xBE26F2E0, + 0xDC000000, 0x3FF00540, 0x52E7CB93, 0x3E2303FF, + 0xDC000000, 0x3FF00544, 0xAB0CFEF5, 0x3E3E8D74, + 0xE0000000, 0x3FF00548, 0x1CF7FDE6, 0xBE28AE22, + 0xE0000000, 0x3FF0054C, 0x01B47B93, 0x3E21A8DD, + 0xE0000000, 0x3FF00550, 0x5D1107E2, 0x3E3E0FF3, + 0xE4000000, 0x3FF00554, 0xEBAC99E1, 0xBE294904, + 0xE4000000, 0x3FF00558, 0x184B2814, 0x3E216E1A, + 0xE4000000, 0x3FF0055C, 0xE706008B, 0x3E3E22A1, + 0xE8000000, 0x3FF00560, 0xC267616A, 0xBE28C387, + 0xE8000000, 0x3FF00564, 0x6EF3B008, 0x3E2253B7, + 0xE8000000, 0x3FF00568, 0xB50FF371, 0x3E3EC580, + 0xEC000000, 0x3FF0056C, 0xC8E0096B, 0xBE271DA9, + 0xEC000000, 0x3FF00570, 0xDDF69498, 0x3E2459B5, + 0xEC000000, 0x3FF00574, 0x33533C31, 0x3E3FF890, + 0xF0000000, 0x3FF00578, 0x26CDA497, 0xBE24576A, + 0xF0000000, 0x3FF0057C, 0x3D9CF923, 0x3E278016, + 0xF4000000, 0x3FF00580, 0x320B787B, 0xBE3E442F, + 0xF4000000, 0x3FF00584, 0x03E6A36B, 0xBE2070C8, + 0xF4000000, 0x3FF00588, 0x6630A33F, 0x3E2BC6D9, + 0xF8000000, 0x3FF0058C, 0x0EE72CBF, 0xBE3BF0BD, + 0xF8000000, 0x3FF00590, 0x0FC1A853, 0xBE16D385, + 0xF8000000, 0x3FF00594, 0x17FDFD5D, 0x3E309700, + 0xFC000000, 0x3FF00598, 0xF71A91AC, 0xBE390D18, + 0xFC000000, 0x3FF0059C, 0x69C58B86, 0xBE050963, + 0xFC000000, 0x3FF005A0, 0xB9A504CD, 0x3E33DAC5, + 0x00000000, 0x3FF005A5, 0x7E800734, 0xBE359942, + 0x00000000, 0x3FF005A9, 0xE59934CD, 0x3DF02BAE, + 0x00000000, 0x3FF005AD, 0x04333E0E, 0x3E37AEBE, + 0x04000000, 0x3FF005B1, 0x38F19C2F, 0xBE319539, + 0x04000000, 0x3FF005B5, 0xEBB1C157, 0x3E14DB54, + 0x04000000, 0x3FF005B9, 0x63CED05D, 0x3E3C12E9, + 0x08000000, 0x3FF005BD, 0x74921CAF, 0xBE2A01F9, + 0x08000000, 0x3FF005C1, 0xC94C85F2, 0x3E23F645, + 0x0C000000, 0x3FF005C5, 0xBB61CBEE, 0xBE3EF8B7, + 0x0C000000, 0x3FF005C9, 0x597F2931, 0xBE1F7232, + 0x0C000000, 0x3FF005CD, 0xAF5B7345, 0x3E2E9F48, + 0x10000000, 0x3FF005D1, 0xED37CD5F, 0xBE397424, + 0x10000000, 0x3FF005D5, 0x08775C6B, 0xBE013F43, + 0x10000000, 0x3FF005D9, 0x0029D3DB, 0x3E35345A, + 0x14000000, 0x3FF005DD, 0xC58C1962, 0xBE335F5D, + 0x14000000, 0x3FF005E1, 0x47430E04, 0x3E1073C1, + 0x14000000, 0x3FF005E5, 0x4A41E248, 0x3E3BA944, + 0x18000000, 0x3FF005E9, 0xB06E888E, 0xBE2974C3, + 0x18000000, 0x3FF005ED, 0xDCCD9333, 0x3E25E3FB, + 0x1C000000, 0x3FF005F1, 0x5DE27951, 0xBE3D519C, + 0x1C000000, 0x3FF005F5, 0xE4464502, 0xBE1614C2, + 0x1C000000, 0x3FF005F9, 0xE0DAFE93, 0x3E325740, + 0x20000000, 0x3FF005FD, 0x8C1B4C10, 0xBE35BC47, + 0x20000000, 0x3FF00601, 0x20686CE9, 0x3E0201B0, + 0x20000000, 0x3FF00605, 0x95558B63, 0x3E3A4CB9, + 0x24000000, 0x3FF00609, 0xA880A3EB, 0xBE2B2D79, + 0x24000000, 0x3FF0060D, 0x9699EEB7, 0x3E252BA5, + 0x28000000, 0x3FF00611, 0x880115E1, 0xBE3D2D97, + 0x28000000, 0x3FF00615, 0x28A3D788, 0xBE1383EF, + 0x28000000, 0x3FF00619, 0x08D6DC23, 0x3E337BA6, + 0x2C000000, 0x3FF0061D, 0x0B001A08, 0xBE3417B2, + 0x2C000000, 0x3FF00621, 0xF94EB99A, 0x3E1193EF, + 0x2C000000, 0x3FF00625, 0x28D3BD3B, 0x3E3CF1B0, + 0x30000000, 0x3FF00629, 0x0EFCC982, 0xBE24E32B, + 0x30000000, 0x3FF0062D, 0xE2BDA47F, 0x3E2C7655, + 0x34000000, 0x3FF00631, 0x689312F8, 0xBE39080E, + 0x34000000, 0x3FF00635, 0xA9444DB4, 0xBDCDA0C8, + 0x34000000, 0x3FF00639, 0x7B21FE23, 0x3E38A191, + 0x38000000, 0x3FF0063D, 0x7E67E1E1, 0xBE2CE32A, + 0x38000000, 0x3FF00641, 0x875A71F0, 0x3E251694, + 0x3C000000, 0x3FF00645, 0xF838F455, 0xBE3C67CF, + 0x3C000000, 0x3FF00649, 0x77274052, 0xBE0A571F, + 0x3C000000, 0x3FF0064D, 0x63AAEFA8, 0x3E35E20E, + 0x40000000, 0x3FF00651, 0xFC87DA70, 0xBE30E0F8, + 0x40000000, 0x3FF00655, 0xE9089AFD, 0x3E20D80B, + 0x44000000, 0x3FF00659, 0xC52F03BD, 0xBE3E36F4, + 0x44000000, 0x3FF0065D, 0x9680E14E, 0xBE1327A4, + 0x44000000, 0x3FF00661, 0xD732468D, 0x3E34B328, + 0x48000000, 0x3FF00665, 0xCAB5EF4A, 0xBE31BFBE, + 0x48000000, 0x3FF00669, 0xE2A2FBE1, 0x3E1F757F, + 0x4C000000, 0x3FF0066D, 0xDAB014DA, 0xBE3E757A, + 0x4C000000, 0x3FF00671, 0x02FB3FBB, 0xBE12E13D, + 0x4C000000, 0x3FF00675, 0xCA7E298D, 0x3E3514E2, + 0x50000000, 0x3FF00679, 0xB4F78B94, 0xBE310DE4, + 0x50000000, 0x3FF0067D, 0x89C35D05, 0x3E21BEB4, + 0x54000000, 0x3FF00681, 0x43F4895C, 0xBE3D2360, + 0x54000000, 0x3FF00685, 0x5BC49ADF, 0xBE08B0A2, + 0x54000000, 0x3FF00689, 0x32573159, 0x3E37073E, + 0x58000000, 0x3FF0068D, 0x8D0732D2, 0xBE2D96D1, + 0x58000000, 0x3FF00691, 0x9BF15E67, 0x3E26E3ED, + 0x5C000000, 0x3FF00695, 0x0C3250FB, 0xBE3A40A3, + 0x5C000000, 0x3FF00699, 0xFD0AE214, 0x3DBCC9AE, + 0x5C000000, 0x3FF0069D, 0x038868A1, 0x3E3A8A3D, + 0x60000000, 0x3FF006A1, 0x151D21CE, 0xBE25F092, + 0x60000000, 0x3FF006A5, 0x11738C43, 0x3E2F2A6F, + 0x64000000, 0x3FF006A9, 0x3E9CE96D, 0xBE35CD41, + 0x64000000, 0x3FF006AD, 0x8DBC2918, 0x3E138132, + 0x64000000, 0x3FF006B1, 0x32DF4C13, 0x3E3F9DE1, + 0x68000000, 0x3FF006B5, 0x3129E0B2, 0xBE16520E, + 0x68000000, 0x3FF006B9, 0x69F36A61, 0x3E35491E, + 0x6C000000, 0x3FF006BD, 0xCCCABCD4, 0xBE2F9271, + 0x6C000000, 0x3FF006C1, 0x0D59B899, 0x3E2668ED, + 0x70000000, 0x3FF006C5, 0x4AD435A0, 0xBE39BDD3, + 0x70000000, 0x3FF006C9, 0x9191CABB, 0x3DF5FE9A, + 0x70000000, 0x3FF006CD, 0x6676850B, 0x3E3C8DAD, + 0x74000000, 0x3FF006D1, 0x1D74934A, 0xBE206910, + 0x74000000, 0x3FF006D5, 0x4D886478, 0x3E331949, + 0x78000000, 0x3FF006D9, 0x80BFBBC2, 0xBE3188DE, + 0x78000000, 0x3FF006DD, 0x14DE1719, 0x3E23CA01, + 0x7C000000, 0x3FF006E1, 0x8CE98EC0, 0xBE3A9D19, + 0x7C000000, 0x3FF006E5, 0xA705A6E7, 0x3DEE1A67, + 0x7C000000, 0x3FF006E9, 0xECD5F851, 0x3E3C8EC6, + 0x80000000, 0x3FF006ED, 0xE839CE4D, 0xBE1F0CF9, + 0x80000000, 0x3FF006F1, 0x0C8CA46A, 0x3E33FAC3, + 0x84000000, 0x3FF006F5, 0x7B5703D8, 0xBE303734, + 0x84000000, 0x3FF006F9, 0xE490A112, 0x3E274DB5, + 0x88000000, 0x3FF006FD, 0xA693A093, 0xBE386B0E, + 0x88000000, 0x3FF00701, 0xF0B73DAA, 0x3E0C9875, + 0x88000000, 0x3FF00705, 0x2449A944, 0x3E3FA133, + 0x8C000000, 0x3FF00709, 0xBFE66C14, 0xBE110285, + 0x8C000000, 0x3FF0070D, 0x054EDCBD, 0x3E37ED91, + 0x90000000, 0x3FF00711, 0xEFB65924, 0xBE27A86A, + 0x90000000, 0x3FF00715, 0x1C8A0CF1, 0x3E307A0B, + 0x94000000, 0x3FF00719, 0x397FB1D6, 0xBE3327AD, + 0x94000000, 0x3FF0071D, 0x1412B9FB, 0x3E228D43, + 0x98000000, 0x3FF00721, 0x94D8FFB0, 0xBE3A3B08, + 0x98000000, 0x3FF00725, 0x6ED80040, 0x3E029AA3, + 0x98000000, 0x3FF00729, 0x9627250A, 0x3E3EF1B8, + 0x9C000000, 0x3FF0072D, 0x5FCB1B09, 0xBE117F70, + 0x9C000000, 0x3FF00731, 0x678F0789, 0x3E385E96, + 0xA0000000, 0x3FF00735, 0xCEA3485B, 0xBE25A5DF, + 0xA0000000, 0x3FF00739, 0xFF6D0303, 0x3E320B90, + 0xA4000000, 0x3FF0073D, 0xE03334FF, 0xBE3105E6, + 0xA4000000, 0x3FF00741, 0xFB9F056D, 0x3E27F150, + 0xA8000000, 0x3FF00745, 0xE28905F4, 0xBE36F8C0, + 0xA8000000, 0x3FF00749, 0x0B1407AA, 0x3E189774, + 0xAC000000, 0x3FF0074D, 0xCE4493C4, 0xBE3CAB7D, + 0xAC000000, 0x3FF00751, 0xCB817D78, 0x3DE265D5, + 0xAC000000, 0x3FF00755, 0x7CA8B4E3, 0x3E3DE1E2, + 0xB0000000, 0x3FF00759, 0x7D730FC6, 0xBE12FD89, + 0xB0000000, 0x3FF0075D, 0x1E4D7759, 0x3E38AF60, + 0xB4000000, 0x3FF00761, 0x0CAD84A2, 0xBE23A3AC, + 0xB4000000, 0x3FF00765, 0x36B866FD, 0x3E33BCFB, + 0xB8000000, 0x3FF00769, 0x4D0667A1, 0xBE2D4858, + 0xB8000000, 0x3FF0076D, 0xCBF08E6A, 0x3E2E1567, + 0xBC000000, 0x3FF00771, 0x9FD34D05, 0xBE333664, + 0xBC000000, 0x3FF00775, 0x9837D6E0, 0x3E253114, + 0xC0000000, 0x3FF00779, 0x5238327D, 0xBE37887F, + 0xC0000000, 0x3FF0077D, 0x24C8DC90, 0x3E1999FA, + 0xC4000000, 0x3FF00781, 0x1DA2F8BE, 0xBE3B9A7C, + 0xC4000000, 0x3FF00785, 0xEA50EE6A, 0x3E03A485, + 0xC8000000, 0x3FF00789, 0xE204A449, 0xBE3F6C5A, + 0xC8000000, 0x3FF0078D, 0x78D5D0F3, 0xBDF3D3EF, + 0xC8000000, 0x3FF00791, 0x80B1D66C, 0x3E3D01E4, + 0xCC000000, 0x3FF00795, 0xD5149796, 0xBE12BBC1, + 0xCC000000, 0x3FF00799, 0x2A8F92F0, 0x3E39B042, + 0xD0000000, 0x3FF0079D, 0x6F386487, 0xBE1F820E, + 0xD0000000, 0x3FF007A1, 0x3BA3BCDA, 0x3E369EBE, + 0xD4000000, 0x3FF007A5, 0x96320652, 0xBE25A3F0, + 0xD4000000, 0x3FF007A9, 0xD3FD8FCA, 0x3E33CD58, + 0xD8000000, 0x3FF007AD, 0xC62D40B1, 0xBE2B069C, + 0xD8000000, 0x3FF007B1, 0x13AC5766, 0x3E313C12, + 0xDC000000, 0x3FF007B5, 0x876F3A0B, 0xBE2FE90B, + 0xDC000000, 0x3FF007B9, 0x357EDEB8, 0x3E2DD5D4, + 0xE0000000, 0x3FF007BD, 0x4CEC957E, 0xBE32259E, + 0xE0000000, 0x3FF007C1, 0x128C86C6, 0x3E29B3C2, + 0xE4000000, 0x3FF007C5, 0xDEA61608, 0xBE341697, + 0xE4000000, 0x3FF007C9, 0xFEA09E70, 0x3E2611ED, + 0xE8000000, 0x3FF007CD, 0x58D49AE3, 0xBE35C772, + 0xE8000000, 0x3FF007D1, 0x39DA3D42, 0x3E22F058, + 0xEC000000, 0x3FF007D5, 0x9B689043, 0xBE37382D, + 0xEC000000, 0x3FF007D9, 0x04589AD6, 0x3E204F01, + 0xF0000000, 0x3FF007DD, 0x86525259, 0xBE3868C9, + 0xF0000000, 0x3FF007E1, 0x3C761DAC, 0x3E1C5BD1, + 0xF4000000, 0x3FF007E5, 0xF9822D4C, 0xBE395945, + 0xF4000000, 0x3FF007E9, 0x8F4221F9, 0x3E191A1E, + 0xF8000000, 0x3FF007ED, 0xD4E85D3A, 0xBE3A09A2, + 0xF8000000, 0x3FF007F1, 0x81547225, 0x3E16D8EA, + 0xFC000000, 0x3FF007F5, 0xF8750E3B, 0xBE3A79DF, + 0xFC000000, 0x3FF007F9, 0x92EC7DE3, 0x3E159835, + 0x00000000, 0x3FF007FE, 0x44185C5D, 0xBE3AA9FD } }; + +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/ulog.h glibc-2.2.3/sysdeps/ieee754/dbl-64/ulog.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/ulog.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/ulog.h Sun Mar 11 22:55:40 2001 @@ -0,0 +1,199 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:ulog.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef ULOG_H +#define ULOG_H + +#ifdef BIG_ENDI + static const number + /* polynomial I */ +/**/ a2 = {{0xbfe00000, 0x0001aa8f} }, /* -0.500... */ +/**/ a3 = {{0x3fd55555, 0x55588d2e} }, /* 0.333... */ + /* polynomial II */ +/**/ b0 = {{0x3fd55555, 0x55555555} }, /* 0.333... */ +/**/ b1 = {{0xbfcfffff, 0xffffffbb} }, /* -0.249... */ +/**/ b2 = {{0x3fc99999, 0x9999992f} }, /* 0.199... */ +/**/ b3 = {{0xbfc55555, 0x556503fd} }, /* -0.166... */ +/**/ b4 = {{0x3fc24924, 0x925b3d62} }, /* 0.142... */ +/**/ b5 = {{0xbfbffffe, 0x160472fc} }, /* -0.124... */ +/**/ b6 = {{0x3fbc71c5, 0x25db58ac} }, /* 0.111... */ +/**/ b7 = {{0xbfb9a4ac, 0x11a2a61c} }, /* -0.100... */ +/**/ b8 = {{0x3fb75077, 0x0df2b591} }, /* 0.091... */ + /* polynomial III */ +#if 0 +/**/ c1 = {{0x3ff00000, 0x00000000} }, /* 1 */ +#endif +/**/ c2 = {{0xbfe00000, 0x00000000} }, /* -1/2 */ +/**/ c3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ +/**/ c4 = {{0xbfd00000, 0x00000000} }, /* -1/4 */ +/**/ c5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ + /* polynomial IV */ +/**/ d2 = {{0xbfe00000, 0x00000000} }, /* -1/2 */ +/**/ dd2 = {{0x00000000, 0x00000000} }, /* -1/2-d2 */ +/**/ d3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ +/**/ dd3 = {{0x3c755555, 0x55555555} }, /* 1/3-d3 */ +/**/ d4 = {{0xbfd00000, 0x00000000} }, /* -1/4 */ +/**/ dd4 = {{0x00000000, 0x00000000} }, /* -1/4-d4 */ +/**/ d5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ +/**/ dd5 = {{0xbc699999, 0x9999999a} }, /* 1/5-d5 */ +/**/ d6 = {{0xbfc55555, 0x55555555} }, /* -1/6 */ +/**/ dd6 = {{0xbc655555, 0x55555555} }, /* -1/6-d6 */ +/**/ d7 = {{0x3fc24924, 0x92492492} }, /* 1/7 */ +/**/ dd7 = {{0x3c624924, 0x92492492} }, /* 1/7-d7 */ +/**/ d8 = {{0xbfc00000, 0x00000000} }, /* -1/8 */ +/**/ dd8 = {{0x00000000, 0x00000000} }, /* -1/8-d8 */ +/**/ d9 = {{0x3fbc71c7, 0x1c71c71c} }, /* 1/9 */ +/**/ dd9 = {{0x3c5c71c7, 0x1c71c71c} }, /* 1/9-d9 */ +/**/ d10 = {{0xbfb99999, 0x9999999a} }, /* -1/10 */ +/**/ dd10 = {{0x3c599999, 0x9999999a} }, /* -1/10-d10 */ +/**/ d11 = {{0x3fb745d1, 0x745d1746} }, /* 1/11 */ +/**/ d12 = {{0xbfb55555, 0x55555555} }, /* -1/12 */ +/**/ d13 = {{0x3fb3b13b, 0x13b13b14} }, /* 1/13 */ +/**/ d14 = {{0xbfb24924, 0x92492492} }, /* -1/14 */ +/**/ d15 = {{0x3fb11111, 0x11111111} }, /* 1/15 */ +/**/ d16 = {{0xbfb00000, 0x00000000} }, /* -1/16 */ +/**/ d17 = {{0x3fae1e1e, 0x1e1e1e1e} }, /* 1/17 */ +/**/ d18 = {{0xbfac71c7, 0x1c71c71c} }, /* -1/18 */ +/**/ d19 = {{0x3faaf286, 0xbca1af28} }, /* 1/19 */ +/**/ d20 = {{0xbfa99999, 0x9999999a} }, /* -1/20 */ + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ half = {{0x3fe00000, 0x00000000} }, /* 1/2 */ +/**/ mhalf = {{0xbfe00000, 0x00000000} }, /* -1/2 */ +/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc} }, /* sqrt(2) */ +/**/ h1 = {{0x3fd2e000, 0x00000000} }, /* 151/2**9 */ +/**/ h2 = {{0x3f669000, 0x00000000} }, /* 361/2**17 */ +/**/ delu = {{0x3f700000, 0x00000000} }, /* 1/2**8 */ +/**/ delv = {{0x3ef00000, 0x00000000} }, /* 1/2**16 */ +/**/ ln2a = {{0x3fe62e42, 0xfefa3800} }, /* ln(2) 43 bits */ +/**/ ln2b = {{0x3d2ef357, 0x93c76730} }, /* ln(2)-ln2a */ +/**/ e1 = {{0x3bbcc868, 0x00000000} }, /* 6.095e-21 */ +/**/ e2 = {{0x3c1138ce, 0x00000000} }, /* 2.334e-19 */ +/**/ e3 = {{0x3aa1565d, 0x00000000} }, /* 2.801e-26 */ +/**/ e4 = {{0x39809d88, 0x00000000} }, /* 1.024e-31 */ +/**/ e[M] ={{{0x37da223a, 0x00000000} }, /* 1.2e-39 */ +/**/ {{0x35c851c4, 0x00000000} }, /* 1.3e-49 */ +/**/ {{0x2ab85e51, 0x00000000} }, /* 6.8e-103 */ +/**/ {{0x17383827, 0x00000000} }},/* 8.1e-197 */ +/**/ two54 = {{0x43500000, 0x00000000} }, /* 2**54 */ +/**/ u03 = {{0x3f9eb851, 0xeb851eb8} }; /* 0.03 */ + +#else +#ifdef LITTLE_ENDI + static const number + /* polynomial I */ +/**/ a2 = {{0x0001aa8f, 0xbfe00000} }, /* -0.500... */ +/**/ a3 = {{0x55588d2e, 0x3fd55555} }, /* 0.333... */ + /* polynomial II */ +/**/ b0 = {{0x55555555, 0x3fd55555} }, /* 0.333... */ +/**/ b1 = {{0xffffffbb, 0xbfcfffff} }, /* -0.249... */ +/**/ b2 = {{0x9999992f, 0x3fc99999} }, /* 0.199... */ +/**/ b3 = {{0x556503fd, 0xbfc55555} }, /* -0.166... */ +/**/ b4 = {{0x925b3d62, 0x3fc24924} }, /* 0.142... */ +/**/ b5 = {{0x160472fc, 0xbfbffffe} }, /* -0.124... */ +/**/ b6 = {{0x25db58ac, 0x3fbc71c5} }, /* 0.111... */ +/**/ b7 = {{0x11a2a61c, 0xbfb9a4ac} }, /* -0.100... */ +/**/ b8 = {{0x0df2b591, 0x3fb75077} }, /* 0.091... */ + /* polynomial III */ +#if 0 +/**/ c1 = {{0x00000000, 0x3ff00000} }, /* 1 */ +#endif +/**/ c2 = {{0x00000000, 0xbfe00000} }, /* -1/2 */ +/**/ c3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ +/**/ c4 = {{0x00000000, 0xbfd00000} }, /* -1/4 */ +/**/ c5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ + /* polynomial IV */ +/**/ d2 = {{0x00000000, 0xbfe00000} }, /* -1/2 */ +/**/ dd2 = {{0x00000000, 0x00000000} }, /* -1/2-d2 */ +/**/ d3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ +/**/ dd3 = {{0x55555555, 0x3c755555} }, /* 1/3-d3 */ +/**/ d4 = {{0x00000000, 0xbfd00000} }, /* -1/4 */ +/**/ dd4 = {{0x00000000, 0x00000000} }, /* -1/4-d4 */ +/**/ d5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ +/**/ dd5 = {{0x9999999a, 0xbc699999} }, /* 1/5-d5 */ +/**/ d6 = {{0x55555555, 0xbfc55555} }, /* -1/6 */ +/**/ dd6 = {{0x55555555, 0xbc655555} }, /* -1/6-d6 */ +/**/ d7 = {{0x92492492, 0x3fc24924} }, /* 1/7 */ +/**/ dd7 = {{0x92492492, 0x3c624924} }, /* 1/7-d7 */ +/**/ d8 = {{0x00000000, 0xbfc00000} }, /* -1/8 */ +/**/ dd8 = {{0x00000000, 0x00000000} }, /* -1/8-d8 */ +/**/ d9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */ +/**/ dd9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-d9 */ +/**/ d10 = {{0x9999999a, 0xbfb99999} }, /* -1/10 */ +/**/ dd10 = {{0x9999999a, 0x3c599999} }, /* -1/10-d10 */ +/**/ d11 = {{0x745d1746, 0x3fb745d1} }, /* 1/11 */ +/**/ d12 = {{0x55555555, 0xbfb55555} }, /* -1/12 */ +/**/ d13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */ +/**/ d14 = {{0x92492492, 0xbfb24924} }, /* -1/14 */ +/**/ d15 = {{0x11111111, 0x3fb11111} }, /* 1/15 */ +/**/ d16 = {{0x00000000, 0xbfb00000} }, /* -1/16 */ +/**/ d17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */ +/**/ d18 = {{0x1c71c71c, 0xbfac71c7} }, /* -1/18 */ +/**/ d19 = {{0xbca1af28, 0x3faaf286} }, /* 1/19 */ +/**/ d20 = {{0x9999999a, 0xbfa99999} }, /* -1/20 */ + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ half = {{0x00000000, 0x3fe00000} }, /* 1/2 */ +/**/ mhalf = {{0x00000000, 0xbfe00000} }, /* -1/2 */ +/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e} }, /* sqrt(2) */ +/**/ h1 = {{0x00000000, 0x3fd2e000} }, /* 151/2**9 */ +/**/ h2 = {{0x00000000, 0x3f669000} }, /* 361/2**17 */ +/**/ delu = {{0x00000000, 0x3f700000} }, /* 1/2**8 */ +/**/ delv = {{0x00000000, 0x3ef00000} }, /* 1/2**16 */ +/**/ ln2a = {{0xfefa3800, 0x3fe62e42} }, /* ln(2) 43 bits */ +/**/ ln2b = {{0x93c76730, 0x3d2ef357} }, /* ln(2)-ln2a */ +/**/ e1 = {{0x00000000, 0x3bbcc868} }, /* 6.095e-21 */ +/**/ e2 = {{0x00000000, 0x3c1138ce} }, /* 2.334e-19 */ +/**/ e3 = {{0x00000000, 0x3aa1565d} }, /* 2.801e-26 */ +/**/ e4 = {{0x00000000, 0x39809d88} }, /* 1.024e-31 */ +/**/ e[M] ={{{0x00000000, 0x37da223a} }, /* 1.2e-39 */ +/**/ {{0x00000000, 0x35c851c4} }, /* 1.3e-49 */ +/**/ {{0x00000000, 0x2ab85e51} }, /* 6.8e-103 */ +/**/ {{0x00000000, 0x17383827} }},/* 8.1e-197 */ +/**/ two54 = {{0x00000000, 0x43500000} }, /* 2**54 */ +/**/ u03 = {{0xeb851eb8, 0x3f9eb851} }; /* 0.03 */ + +#endif +#endif + +#define ZERO zero.d +#define ONE one.d +#define HALF half.d +#define MHALF mhalf.d +#define SQRT_2 sqrt_2.d +#define DEL_U delu.d +#define DEL_V delv.d +#define LN2A ln2a.d +#define LN2B ln2b.d +#define E1 e1.d +#define E2 e2.d +#define E3 e3.d +#define E4 e4.d +#define U03 u03.d + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/ulog.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/ulog.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/ulog.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/ulog.tbl Sun Mar 11 22:53:10 2001 @@ -0,0 +1,3307 @@ +/****************************************************************/ +/* TABLES FOR THE ulog() FUNCTION */ +/****************************************************************/ + +#ifdef BIG_ENDI + static const number + Iu[182] = { /* 1/ui */ +/**/ {{0x3ff6a13c, 0xd1537290} }, +/**/ {{0x3ff68168, 0x16816817} }, +/**/ {{0x3ff661ec, 0x6a5122f9} }, +/**/ {{0x3ff642c8, 0x590b2164} }, +/**/ {{0x3ff623fa, 0x77016240} }, +/**/ {{0x3ff60581, 0x60581606} }, +/**/ {{0x3ff5e75b, 0xb8d015e7} }, +/**/ {{0x3ff5c988, 0x2b931057} }, +/**/ {{0x3ff5ac05, 0x6b015ac0} }, +/**/ {{0x3ff58ed2, 0x308158ed} }, +/**/ {{0x3ff571ed, 0x3c506b3a} }, +/**/ {{0x3ff55555, 0x55555555} }, +/**/ {{0x3ff53909, 0x48f40feb} }, +/**/ {{0x3ff51d07, 0xeae2f815} }, +/**/ {{0x3ff50150, 0x15015015} }, +/**/ {{0x3ff4e5e0, 0xa72f0539} }, +/**/ {{0x3ff4cab8, 0x8725af6e} }, +/**/ {{0x3ff4afd6, 0xa052bf5b} }, +/**/ {{0x3ff49539, 0xe3b2d067} }, +/**/ {{0x3ff47ae1, 0x47ae147b} }, +/**/ {{0x3ff460cb, 0xc7f5cf9a} }, +/**/ {{0x3ff446f8, 0x6562d9fb} }, +/**/ {{0x3ff42d66, 0x25d51f87} }, +/**/ {{0x3ff41414, 0x14141414} }, +/**/ {{0x3ff3fb01, 0x3fb013fb} }, +/**/ {{0x3ff3e22c, 0xbce4a902} }, +/**/ {{0x3ff3c995, 0xa47babe7} }, +/**/ {{0x3ff3b13b, 0x13b13b14} }, +/**/ {{0x3ff3991c, 0x2c187f63} }, +/**/ {{0x3ff38138, 0x13813814} }, +/**/ {{0x3ff3698d, 0xf3de0748} }, +/**/ {{0x3ff3521c, 0xfb2b78c1} }, +/**/ {{0x3ff33ae4, 0x5b57bcb2} }, +/**/ {{0x3ff323e3, 0x4a2b10bf} }, +/**/ {{0x3ff30d19, 0x0130d190} }, +/**/ {{0x3ff2f684, 0xbda12f68} }, +/**/ {{0x3ff2e025, 0xc04b8097} }, +/**/ {{0x3ff2c9fb, 0x4d812ca0} }, +/**/ {{0x3ff2b404, 0xad012b40} }, +/**/ {{0x3ff29e41, 0x29e4129e} }, +/**/ {{0x3ff288b0, 0x1288b013} }, +/**/ {{0x3ff27350, 0xb8812735} }, +/**/ {{0x3ff25e22, 0x708092f1} }, +/**/ {{0x3ff24924, 0x92492492} }, +/**/ {{0x3ff23456, 0x789abcdf} }, +/**/ {{0x3ff21fb7, 0x8121fb78} }, +/**/ {{0x3ff20b47, 0x0c67c0d9} }, +/**/ {{0x3ff1f704, 0x7dc11f70} }, +/**/ {{0x3ff1e2ef, 0x3b3fb874} }, +/**/ {{0x3ff1cf06, 0xada2811d} }, +/**/ {{0x3ff1bb4a, 0x4046ed29} }, +/**/ {{0x3ff1a7b9, 0x611a7b96} }, +/**/ {{0x3ff19453, 0x808ca29c} }, +/**/ {{0x3ff18118, 0x11811812} }, +/**/ {{0x3ff16e06, 0x89427379} }, +/**/ {{0x3ff15b1e, 0x5f75270d} }, +/**/ {{0x3ff1485f, 0x0e0acd3b} }, +/**/ {{0x3ff135c8, 0x1135c811} }, +/**/ {{0x3ff12358, 0xe75d3033} }, +/**/ {{0x3ff11111, 0x11111111} }, +/**/ {{0x3ff0fef0, 0x10fef011} }, +/**/ {{0x3ff0ecf5, 0x6be69c90} }, +/**/ {{0x3ff0db20, 0xa88f4696} }, +/**/ {{0x3ff0c971, 0x4fbcda3b} }, +/**/ {{0x3ff0b7e6, 0xec259dc8} }, +/**/ {{0x3ff0a681, 0x0a6810a7} }, +/**/ {{0x3ff0953f, 0x39010954} }, +/**/ {{0x3ff08421, 0x08421084} }, +/**/ {{0x3ff07326, 0x0a47f7c6} }, +/**/ {{0x3ff0624d, 0xd2f1a9fc} }, +/**/ {{0x3ff05197, 0xf7d73404} }, +/**/ {{0x3ff04104, 0x10410410} }, +/**/ {{0x3ff03091, 0xb51f5e1a} }, +/**/ {{0x3ff02040, 0x81020408} }, +/**/ {{0x3ff01010, 0x10101010} }, +/**/ {{0x3ff00000, 0x00000000} }, +/**/ {{0x3fefe01f, 0xe01fe020} }, +/**/ {{0x3fefc07f, 0x01fc07f0} }, +/**/ {{0x3fefa11c, 0xaa01fa12} }, +/**/ {{0x3fef81f8, 0x1f81f820} }, +/**/ {{0x3fef6310, 0xaca0dbb5} }, +/**/ {{0x3fef4465, 0x9e4a4271} }, +/**/ {{0x3fef25f6, 0x44230ab5} }, +/**/ {{0x3fef07c1, 0xf07c1f08} }, +/**/ {{0x3feee9c7, 0xf8458e02} }, +/**/ {{0x3feecc07, 0xb301ecc0} }, +/**/ {{0x3feeae80, 0x7aba01eb} }, +/**/ {{0x3fee9131, 0xabf0b767} }, +/**/ {{0x3fee741a, 0xa59750e4} }, +/**/ {{0x3fee573a, 0xc901e574} }, +/**/ {{0x3fee3a91, 0x79dc1a73} }, +/**/ {{0x3fee1e1e, 0x1e1e1e1e} }, +/**/ {{0x3fee01e0, 0x1e01e01e} }, +/**/ {{0x3fede5d6, 0xe3f8868a} }, +/**/ {{0x3fedca01, 0xdca01dca} }, +/**/ {{0x3fedae60, 0x76b981db} }, +/**/ {{0x3fed92f2, 0x231e7f8a} }, +/**/ {{0x3fed77b6, 0x54b82c34} }, +/**/ {{0x3fed5cac, 0x807572b2} }, +/**/ {{0x3fed41d4, 0x1d41d41d} }, +/**/ {{0x3fed272c, 0xa3fc5b1a} }, +/**/ {{0x3fed0cb5, 0x8f6ec074} }, +/**/ {{0x3fecf26e, 0x5c44bfc6} }, +/**/ {{0x3fecd856, 0x89039b0b} }, +/**/ {{0x3fecbe6d, 0x9601cbe7} }, +/**/ {{0x3feca4b3, 0x055ee191} }, +/**/ {{0x3fec8b26, 0x5afb8a42} }, +/**/ {{0x3fec71c7, 0x1c71c71c} }, +/**/ {{0x3fec5894, 0xd10d4986} }, +/**/ {{0x3fec3f8f, 0x01c3f8f0} }, +/**/ {{0x3fec26b5, 0x392ea01c} }, +/**/ {{0x3fec0e07, 0x0381c0e0} }, +/**/ {{0x3febf583, 0xee868d8b} }, +/**/ {{0x3febdd2b, 0x899406f7} }, +/**/ {{0x3febc4fd, 0x65883e7b} }, +/**/ {{0x3febacf9, 0x14c1bad0} }, +/**/ {{0x3feb951e, 0x2b18ff23} }, +/**/ {{0x3feb7d6c, 0x3dda338b} }, +/**/ {{0x3feb65e2, 0xe3beee05} }, +/**/ {{0x3feb4e81, 0xb4e81b4f} }, +/**/ {{0x3feb3748, 0x4ad806ce} }, +/**/ {{0x3feb2036, 0x406c80d9} }, +/**/ {{0x3feb094b, 0x31d922a4} }, +/**/ {{0x3feaf286, 0xbca1af28} }, +/**/ {{0x3feadbe8, 0x7f94905e} }, +/**/ {{0x3feac570, 0x1ac5701b} }, +/**/ {{0x3feaaf1d, 0x2f87ebfd} }, +/**/ {{0x3fea98ef, 0x606a63be} }, +/**/ {{0x3fea82e6, 0x5130e159} }, +/**/ {{0x3fea6d01, 0xa6d01a6d} }, +/**/ {{0x3fea5741, 0x07688a4a} }, +/**/ {{0x3fea41a4, 0x1a41a41a} }, +/**/ {{0x3fea2c2a, 0x87c51ca0} }, +/**/ {{0x3fea16d3, 0xf97a4b02} }, +/**/ {{0x3fea01a0, 0x1a01a01a} }, +/**/ {{0x3fe9ec8e, 0x951033d9} }, +/**/ {{0x3fe9d79f, 0x176b682d} }, +/**/ {{0x3fe9c2d1, 0x4ee4a102} }, +/**/ {{0x3fe9ae24, 0xea5510da} }, +/**/ {{0x3fe99999, 0x9999999a} }, +/**/ {{0x3fe9852f, 0x0d8ec0ff} }, +/**/ {{0x3fe970e4, 0xf80cb872} }, +/**/ {{0x3fe95cbb, 0x0be377ae} }, +/**/ {{0x3fe948b0, 0xfcd6e9e0} }, +/**/ {{0x3fe934c6, 0x7f9b2ce6} }, +/**/ {{0x3fe920fb, 0x49d0e229} }, +/**/ {{0x3fe90d4f, 0x120190d5} }, +/**/ {{0x3fe8f9c1, 0x8f9c18fa} }, +/**/ {{0x3fe8e652, 0x7af1373f} }, +/**/ {{0x3fe8d301, 0x8d3018d3} }, +/**/ {{0x3fe8bfce, 0x8062ff3a} }, +/**/ {{0x3fe8acb9, 0x0f6bf3aa} }, +/**/ {{0x3fe899c0, 0xf601899c} }, +/**/ {{0x3fe886e5, 0xf0abb04a} }, +/**/ {{0x3fe87427, 0xbcc092b9} }, +/**/ {{0x3fe86186, 0x18618618} }, +/**/ {{0x3fe84f00, 0xc2780614} }, +/**/ {{0x3fe83c97, 0x7ab2bedd} }, +/**/ {{0x3fe82a4a, 0x0182a4a0} }, +/**/ {{0x3fe81818, 0x18181818} }, +/**/ {{0x3fe80601, 0x80601806} }, +/**/ {{0x3fe7f405, 0xfd017f40} }, +/**/ {{0x3fe7e225, 0x515a4f1d} }, +/**/ {{0x3fe7d05f, 0x417d05f4} }, +/**/ {{0x3fe7beb3, 0x922e017c} }, +/**/ {{0x3fe7ad22, 0x08e0ecc3} }, +/**/ {{0x3fe79baa, 0x6bb6398b} }, +/**/ {{0x3fe78a4c, 0x8178a4c8} }, +/**/ {{0x3fe77908, 0x119ac60d} }, +/**/ {{0x3fe767dc, 0xe434a9b1} }, +/**/ {{0x3fe756ca, 0xc201756d} }, +/**/ {{0x3fe745d1, 0x745d1746} }, +/**/ {{0x3fe734f0, 0xc541fe8d} }, +/**/ {{0x3fe72428, 0x7f46debc} }, +/**/ {{0x3fe71378, 0x6d9c7c09} }, +/**/ {{0x3fe702e0, 0x5c0b8170} }, +/**/ {{0x3fe6f260, 0x16f26017} }, +/**/ {{0x3fe6e1f7, 0x6b4337c7} }, +/**/ {{0x3fe6d1a6, 0x2681c861} }, +/**/ {{0x3fe6c16c, 0x16c16c17} }, +/**/ {{0x3fe6b149, 0x0aa31a3d} }, +/**/ {{0x3fe6a13c, 0xd1537290} }, + }; + + static const number + Iv[362] = { /* 1/vj */ +/**/ {{0x3ff00b47, 0xee93bfe3} }, +/**/ {{0x3ff00b37, 0xd80c106f} }, +/**/ {{0x3ff00b27, 0xc1a4a47a} }, +/**/ {{0x3ff00b17, 0xab5d7ba2} }, +/**/ {{0x3ff00b07, 0x95369587} }, +/**/ {{0x3ff00af7, 0x7f2ff1c6} }, +/**/ {{0x3ff00ae7, 0x69499000} }, +/**/ {{0x3ff00ad7, 0x53836fd3} }, +/**/ {{0x3ff00ac7, 0x3ddd90dd} }, +/**/ {{0x3ff00ab7, 0x2857f2bf} }, +/**/ {{0x3ff00aa7, 0x12f29517} }, +/**/ {{0x3ff00a96, 0xfdad7784} }, +/**/ {{0x3ff00a86, 0xe88899a5} }, +/**/ {{0x3ff00a76, 0xd383fb19} }, +/**/ {{0x3ff00a66, 0xbe9f9b7f} }, +/**/ {{0x3ff00a56, 0xa9db7a76} }, +/**/ {{0x3ff00a46, 0x9537979d} }, +/**/ {{0x3ff00a36, 0x80b3f293} }, +/**/ {{0x3ff00a26, 0x6c508af8} }, +/**/ {{0x3ff00a16, 0x580d606a} }, +/**/ {{0x3ff00a06, 0x43ea7288} }, +/**/ {{0x3ff009f6, 0x2fe7c0f1} }, +/**/ {{0x3ff009e6, 0x1c054b44} }, +/**/ {{0x3ff009d6, 0x08431122} }, +/**/ {{0x3ff009c5, 0xf4a11227} }, +/**/ {{0x3ff009b5, 0xe11f4df4} }, +/**/ {{0x3ff009a5, 0xcdbdc428} }, +/**/ {{0x3ff00995, 0xba7c7462} }, +/**/ {{0x3ff00985, 0xa75b5e40} }, +/**/ {{0x3ff00975, 0x945a8162} }, +/**/ {{0x3ff00965, 0x8179dd68} }, +/**/ {{0x3ff00955, 0x6eb971ef} }, +/**/ {{0x3ff00945, 0x5c193e98} }, +/**/ {{0x3ff00935, 0x49994301} }, +/**/ {{0x3ff00925, 0x37397eca} }, +/**/ {{0x3ff00915, 0x24f9f192} }, +/**/ {{0x3ff00905, 0x12da9af7} }, +/**/ {{0x3ff008f5, 0x00db7a99} }, +/**/ {{0x3ff008e4, 0xeefc9018} }, +/**/ {{0x3ff008d4, 0xdd3ddb12} }, +/**/ {{0x3ff008c4, 0xcb9f5b26} }, +/**/ {{0x3ff008b4, 0xba210ff4} }, +/**/ {{0x3ff008a4, 0xa8c2f91a} }, +/**/ {{0x3ff00894, 0x97851639} }, +/**/ {{0x3ff00884, 0x866766ef} }, +/**/ {{0x3ff00874, 0x7569eadb} }, +/**/ {{0x3ff00864, 0x648ca19d} }, +/**/ {{0x3ff00854, 0x53cf8ad3} }, +/**/ {{0x3ff00844, 0x4332a61e} }, +/**/ {{0x3ff00834, 0x32b5f31b} }, +/**/ {{0x3ff00824, 0x2259716c} }, +/**/ {{0x3ff00814, 0x121d20ad} }, +/**/ {{0x3ff00804, 0x02010080} }, +/**/ {{0x3ff007f3, 0xf2051083} }, +/**/ {{0x3ff007e3, 0xe2295056} }, +/**/ {{0x3ff007d3, 0xd26dbf97} }, +/**/ {{0x3ff007c3, 0xc2d25de5} }, +/**/ {{0x3ff007b3, 0xb3572ae2} }, +/**/ {{0x3ff007a3, 0xa3fc262a} }, +/**/ {{0x3ff00793, 0x94c14f5f} }, +/**/ {{0x3ff00783, 0x85a6a61e} }, +/**/ {{0x3ff00773, 0x76ac2a08} }, +/**/ {{0x3ff00763, 0x67d1dabb} }, +/**/ {{0x3ff00753, 0x5917b7d7} }, +/**/ {{0x3ff00743, 0x4a7dc0fb} }, +/**/ {{0x3ff00733, 0x3c03f5c7} }, +/**/ {{0x3ff00723, 0x2daa55da} }, +/**/ {{0x3ff00713, 0x1f70e0d3} }, +/**/ {{0x3ff00703, 0x11579652} }, +/**/ {{0x3ff006f3, 0x035e75f5} }, +/**/ {{0x3ff006e2, 0xf5857f5d} }, +/**/ {{0x3ff006d2, 0xe7ccb228} }, +/**/ {{0x3ff006c2, 0xda340df6} }, +/**/ {{0x3ff006b2, 0xccbb9266} }, +/**/ {{0x3ff006a2, 0xbf633f18} }, +/**/ {{0x3ff00692, 0xb22b13ab} }, +/**/ {{0x3ff00682, 0xa5130fbe} }, +/**/ {{0x3ff00672, 0x981b32f1} }, +/**/ {{0x3ff00662, 0x8b437ce4} }, +/**/ {{0x3ff00652, 0x7e8bed35} }, +/**/ {{0x3ff00642, 0x71f48383} }, +/**/ {{0x3ff00632, 0x657d3f70} }, +/**/ {{0x3ff00622, 0x59262098} }, +/**/ {{0x3ff00612, 0x4cef269e} }, +/**/ {{0x3ff00602, 0x40d8511e} }, +/**/ {{0x3ff005f2, 0x34e19fba} }, +/**/ {{0x3ff005e2, 0x290b1211} }, +/**/ {{0x3ff005d2, 0x1d54a7c1} }, +/**/ {{0x3ff005c2, 0x11be606b} }, +/**/ {{0x3ff005b2, 0x06483bad} }, +/**/ {{0x3ff005a1, 0xfaf23928} }, +/**/ {{0x3ff00591, 0xefbc587b} }, +/**/ {{0x3ff00581, 0xe4a69945} }, +/**/ {{0x3ff00571, 0xd9b0fb25} }, +/**/ {{0x3ff00561, 0xcedb7dbc} }, +/**/ {{0x3ff00551, 0xc42620a9} }, +/**/ {{0x3ff00541, 0xb990e38b} }, +/**/ {{0x3ff00531, 0xaf1bc601} }, +/**/ {{0x3ff00521, 0xa4c6c7ac} }, +/**/ {{0x3ff00511, 0x9a91e82a} }, +/**/ {{0x3ff00501, 0x907d271c} }, +/**/ {{0x3ff004f1, 0x86888421} }, +/**/ {{0x3ff004e1, 0x7cb3fed8} }, +/**/ {{0x3ff004d1, 0x72ff96e0} }, +/**/ {{0x3ff004c1, 0x696b4bdb} }, +/**/ {{0x3ff004b1, 0x5ff71d66} }, +/**/ {{0x3ff004a1, 0x56a30b21} }, +/**/ {{0x3ff00491, 0x4d6f14ad} }, +/**/ {{0x3ff00481, 0x445b39a8} }, +/**/ {{0x3ff00471, 0x3b6779b3} }, +/**/ {{0x3ff00461, 0x3293d46c} }, +/**/ {{0x3ff00451, 0x29e04974} }, +/**/ {{0x3ff00441, 0x214cd869} }, +/**/ {{0x3ff00431, 0x18d980ed} }, +/**/ {{0x3ff00421, 0x1086429d} }, +/**/ {{0x3ff00411, 0x08531d1a} }, +/**/ {{0x3ff00401, 0x00401004} }, +/**/ {{0x3ff003f0, 0xf84d1afa} }, +/**/ {{0x3ff003e0, 0xf07a3d9b} }, +/**/ {{0x3ff003d0, 0xe8c77787} }, +/**/ {{0x3ff003c0, 0xe134c85f} }, +/**/ {{0x3ff003b0, 0xd9c22fc1} }, +/**/ {{0x3ff003a0, 0xd26fad4d} }, +/**/ {{0x3ff00390, 0xcb3d40a3} }, +/**/ {{0x3ff00380, 0xc42ae963} }, +/**/ {{0x3ff00370, 0xbd38a72c} }, +/**/ {{0x3ff00360, 0xb666799e} }, +/**/ {{0x3ff00350, 0xafb46058} }, +/**/ {{0x3ff00340, 0xa9225afa} }, +/**/ {{0x3ff00330, 0xa2b06925} }, +/**/ {{0x3ff00320, 0x9c5e8a77} }, +/**/ {{0x3ff00310, 0x962cbe90} }, +/**/ {{0x3ff00300, 0x901b0511} }, +/**/ {{0x3ff002f0, 0x8a295d98} }, +/**/ {{0x3ff002e0, 0x8457c7c6} }, +/**/ {{0x3ff002d0, 0x7ea6433a} }, +/**/ {{0x3ff002c0, 0x7914cf94} }, +/**/ {{0x3ff002b0, 0x73a36c73} }, +/**/ {{0x3ff002a0, 0x6e521978} }, +/**/ {{0x3ff00290, 0x6920d642} }, +/**/ {{0x3ff00280, 0x640fa271} }, +/**/ {{0x3ff00270, 0x5f1e7da5} }, +/**/ {{0x3ff00260, 0x5a4d677d} }, +/**/ {{0x3ff00250, 0x559c5f9a} }, +/**/ {{0x3ff00240, 0x510b659a} }, +/**/ {{0x3ff00230, 0x4c9a791f} }, +/**/ {{0x3ff00220, 0x484999c6} }, +/**/ {{0x3ff00210, 0x4418c732} }, +/**/ {{0x3ff00200, 0x40080100} }, +/**/ {{0x3ff001f0, 0x3c1746d2} }, +/**/ {{0x3ff001e0, 0x38469846} }, +/**/ {{0x3ff001d0, 0x3495f4fd} }, +/**/ {{0x3ff001c0, 0x31055c96} }, +/**/ {{0x3ff001b0, 0x2d94ceb2} }, +/**/ {{0x3ff001a0, 0x2a444af0} }, +/**/ {{0x3ff00190, 0x2713d0ef} }, +/**/ {{0x3ff00180, 0x24036051} }, +/**/ {{0x3ff00170, 0x2112f8b4} }, +/**/ {{0x3ff00160, 0x1e4299b9} }, +/**/ {{0x3ff00150, 0x1b9242ff} }, +/**/ {{0x3ff00140, 0x1901f427} }, +/**/ {{0x3ff00130, 0x1691acd0} }, +/**/ {{0x3ff00120, 0x14416c9a} }, +/**/ {{0x3ff00110, 0x12113324} }, +/**/ {{0x3ff00100, 0x10010010} }, +/**/ {{0x3ff000f0, 0x0e10d2fc} }, +/**/ {{0x3ff000e0, 0x0c40ab89} }, +/**/ {{0x3ff000d0, 0x0a908957} }, +/**/ {{0x3ff000c0, 0x09006c05} }, +/**/ {{0x3ff000b0, 0x07905334} }, +/**/ {{0x3ff000a0, 0x06403e82} }, +/**/ {{0x3ff00090, 0x05102d92} }, +/**/ {{0x3ff00080, 0x04002001} }, +/**/ {{0x3ff00070, 0x03101571} }, +/**/ {{0x3ff00060, 0x02400d80} }, +/**/ {{0x3ff00050, 0x019007d0} }, +/**/ {{0x3ff00040, 0x01000400} }, +/**/ {{0x3ff00030, 0x009001b0} }, +/**/ {{0x3ff00020, 0x00400080} }, +/**/ {{0x3ff00010, 0x00100010} }, +/**/ {{0x3ff00000, 0x00000000} }, +/**/ {{0x3fefffe0, 0x001fffe0} }, +/**/ {{0x3fefffc0, 0x007fff00} }, +/**/ {{0x3fefffa0, 0x011ffca0} }, +/**/ {{0x3fefff80, 0x01fff800} }, +/**/ {{0x3fefff60, 0x031ff060} }, +/**/ {{0x3fefff40, 0x047fe501} }, +/**/ {{0x3fefff20, 0x061fd521} }, +/**/ {{0x3fefff00, 0x07ffc002} }, +/**/ {{0x3feffee0, 0x0a1fa4e3} }, +/**/ {{0x3feffec0, 0x0c7f8305} }, +/**/ {{0x3feffea0, 0x0f1f59a7} }, +/**/ {{0x3feffe80, 0x11ff280a} }, +/**/ {{0x3feffe60, 0x151eed6e} }, +/**/ {{0x3feffe40, 0x187ea913} }, +/**/ {{0x3feffe20, 0x1c1e5a39} }, +/**/ {{0x3feffe00, 0x1ffe0020} }, +/**/ {{0x3feffde0, 0x241d9a09} }, +/**/ {{0x3feffdc0, 0x287d2733} }, +/**/ {{0x3feffda0, 0x2d1ca6e0} }, +/**/ {{0x3feffd80, 0x31fc184e} }, +/**/ {{0x3feffd60, 0x371b7abf} }, +/**/ {{0x3feffd40, 0x3c7acd72} }, +/**/ {{0x3feffd20, 0x421a0fa9} }, +/**/ {{0x3feffd00, 0x47f940a2} }, +/**/ {{0x3feffce0, 0x4e185f9f} }, +/**/ {{0x3feffcc0, 0x54776bdf} }, +/**/ {{0x3feffca0, 0x5b1664a3} }, +/**/ {{0x3feffc80, 0x61f5492c} }, +/**/ {{0x3feffc60, 0x691418b9} }, +/**/ {{0x3feffc40, 0x7072d28b} }, +/**/ {{0x3feffc20, 0x781175e3} }, +/**/ {{0x3feffc00, 0x7ff00200} }, +/**/ {{0x3feffbe0, 0x880e7623} }, +/**/ {{0x3feffbc0, 0x906cd18c} }, +/**/ {{0x3feffba0, 0x990b137c} }, +/**/ {{0x3feffb80, 0xa1e93b34} }, +/**/ {{0x3feffb60, 0xab0747f3} }, +/**/ {{0x3feffb40, 0xb46538fa} }, +/**/ {{0x3feffb20, 0xbe030d89} }, +/**/ {{0x3feffb00, 0xc7e0c4e1} }, +/**/ {{0x3feffae0, 0xd1fe5e43} }, +/**/ {{0x3feffac0, 0xdc5bd8ee} }, +/**/ {{0x3feffaa0, 0xe6f93424} }, +/**/ {{0x3feffa80, 0xf1d66f25} }, +/**/ {{0x3feffa60, 0xfcf38931} }, +/**/ {{0x3feffa41, 0x08508189} }, +/**/ {{0x3feffa21, 0x13ed576d} }, +/**/ {{0x3feffa01, 0x1fca0a1e} }, +/**/ {{0x3feff9e1, 0x2be698dd} }, +/**/ {{0x3feff9c1, 0x384302e9} }, +/**/ {{0x3feff9a1, 0x44df4785} }, +/**/ {{0x3feff981, 0x51bb65ef} }, +/**/ {{0x3feff961, 0x5ed75d6a} }, +/**/ {{0x3feff941, 0x6c332d34} }, +/**/ {{0x3feff921, 0x79ced490} }, +/**/ {{0x3feff901, 0x87aa52be} }, +/**/ {{0x3feff8e1, 0x95c5a6fe} }, +/**/ {{0x3feff8c1, 0xa420d091} }, +/**/ {{0x3feff8a1, 0xb2bbceb7} }, +/**/ {{0x3feff881, 0xc196a0b2} }, +/**/ {{0x3feff861, 0xd0b145c2} }, +/**/ {{0x3feff841, 0xe00bbd28} }, +/**/ {{0x3feff821, 0xefa60624} }, +/**/ {{0x3feff801, 0xff801ff8} }, +/**/ {{0x3feff7e2, 0x0f9a09e3} }, +/**/ {{0x3feff7c2, 0x1ff3c328} }, +/**/ {{0x3feff7a2, 0x308d4b05} }, +/**/ {{0x3feff782, 0x4166a0bd} }, +/**/ {{0x3feff762, 0x527fc390} }, +/**/ {{0x3feff742, 0x63d8b2bf} }, +/**/ {{0x3feff722, 0x75716d8b} }, +/**/ {{0x3feff702, 0x8749f334} }, +/**/ {{0x3feff6e2, 0x996242fb} }, +/**/ {{0x3feff6c2, 0xabba5c21} }, +/**/ {{0x3feff6a2, 0xbe523de8} }, +/**/ {{0x3feff682, 0xd129e78f} }, +/**/ {{0x3feff662, 0xe4415858} }, +/**/ {{0x3feff642, 0xf7988f84} }, +/**/ {{0x3feff623, 0x0b2f8c54} }, +/**/ {{0x3feff603, 0x1f064e08} }, +/**/ {{0x3feff5e3, 0x331cd3e1} }, +/**/ {{0x3feff5c3, 0x47731d21} }, +/**/ {{0x3feff5a3, 0x5c092908} }, +/**/ {{0x3feff583, 0x70def6d7} }, +/**/ {{0x3feff563, 0x85f485d0} }, +/**/ {{0x3feff543, 0x9b49d532} }, +/**/ {{0x3feff523, 0xb0dee440} }, +/**/ {{0x3feff503, 0xc6b3b23b} }, +/**/ {{0x3feff4e3, 0xdcc83e62} }, +/**/ {{0x3feff4c3, 0xf31c87f8} }, +/**/ {{0x3feff4a4, 0x09b08e3d} }, +/**/ {{0x3feff484, 0x20845073} }, +/**/ {{0x3feff464, 0x3797cdda} }, +/**/ {{0x3feff444, 0x4eeb05b4} }, +/**/ {{0x3feff424, 0x667df741} }, +/**/ {{0x3feff404, 0x7e50a1c3} }, +/**/ {{0x3feff3e4, 0x9663047b} }, +/**/ {{0x3feff3c4, 0xaeb51eaa} }, +/**/ {{0x3feff3a4, 0xc746ef91} }, +/**/ {{0x3feff384, 0xe0187672} }, +/**/ {{0x3feff364, 0xf929b28d} }, +/**/ {{0x3feff345, 0x127aa323} }, +/**/ {{0x3feff325, 0x2c0b4776} }, +/**/ {{0x3feff305, 0x45db9ec7} }, +/**/ {{0x3feff2e5, 0x5feba858} }, +/**/ {{0x3feff2c5, 0x7a3b6369} }, +/**/ {{0x3feff2a5, 0x94cacf3b} }, +/**/ {{0x3feff285, 0xaf99eb11} }, +/**/ {{0x3feff265, 0xcaa8b62a} }, +/**/ {{0x3feff245, 0xe5f72fc9} }, +/**/ {{0x3feff226, 0x0185572f} }, +/**/ {{0x3feff206, 0x1d532b9d} }, +/**/ {{0x3feff1e6, 0x3960ac54} }, +/**/ {{0x3feff1c6, 0x55add896} }, +/**/ {{0x3feff1a6, 0x723aafa3} }, +/**/ {{0x3feff186, 0x8f0730be} }, +/**/ {{0x3feff166, 0xac135b27} }, +/**/ {{0x3feff146, 0xc95f2e21} }, +/**/ {{0x3feff126, 0xe6eaa8eb} }, +/**/ {{0x3feff107, 0x04b5cac9} }, +/**/ {{0x3feff0e7, 0x22c092fb} }, +/**/ {{0x3feff0c7, 0x410b00c2} }, +/**/ {{0x3feff0a7, 0x5f951360} }, +/**/ {{0x3feff087, 0x7e5eca16} }, +/**/ {{0x3feff067, 0x9d682426} }, +/**/ {{0x3feff047, 0xbcb120d2} }, +/**/ {{0x3feff027, 0xdc39bf5a} }, +/**/ {{0x3feff007, 0xfc01ff00} }, +/**/ {{0x3fefefe8, 0x1c09df07} }, +/**/ {{0x3fefefc8, 0x3c515eae} }, +/**/ {{0x3fefefa8, 0x5cd87d38} }, +/**/ {{0x3fefef88, 0x7d9f39e6} }, +/**/ {{0x3fefef68, 0x9ea593fa} }, +/**/ {{0x3fefef48, 0xbfeb8ab5} }, +/**/ {{0x3fefef28, 0xe1711d5a} }, +/**/ {{0x3fefef09, 0x03364b28} }, +/**/ {{0x3fefeee9, 0x253b1363} }, +/**/ {{0x3fefeec9, 0x477f754b} }, +/**/ {{0x3fefeea9, 0x6a037022} }, +/**/ {{0x3fefee89, 0x8cc7032a} }, +/**/ {{0x3fefee69, 0xafca2da5} }, +/**/ {{0x3fefee49, 0xd30ceed4} }, +/**/ {{0x3fefee29, 0xf68f45f8} }, +/**/ {{0x3fefee0a, 0x1a513254} }, +/**/ {{0x3fefedea, 0x3e52b329} }, +/**/ {{0x3fefedca, 0x6293c7b8} }, +/**/ {{0x3fefedaa, 0x87146f44} }, +/**/ {{0x3fefed8a, 0xabd4a90e} }, +/**/ {{0x3fefed6a, 0xd0d47458} }, +/**/ {{0x3fefed4a, 0xf613d064} }, +/**/ {{0x3fefed2b, 0x1b92bc73} }, +/**/ {{0x3fefed0b, 0x415137c7} }, +/**/ {{0x3fefeceb, 0x674f41a2} }, +/**/ {{0x3fefeccb, 0x8d8cd945} }, +/**/ {{0x3fefecab, 0xb409fdf3} }, +/**/ {{0x3fefec8b, 0xdac6aeed} }, +/**/ {{0x3fefec6c, 0x01c2eb76} }, +/**/ {{0x3fefec4c, 0x28feb2ce} }, +/**/ {{0x3fefec2c, 0x507a0437} }, +/**/ {{0x3fefec0c, 0x7834def5} }, +/**/ {{0x3fefebec, 0xa02f4247} }, +/**/ {{0x3fefebcc, 0xc8692d71} }, +/**/ {{0x3fefebac, 0xf0e29fb4} }, +/**/ {{0x3fefeb8d, 0x199b9852} }, +/**/ {{0x3fefeb6d, 0x4294168d} }, +/**/ {{0x3fefeb4d, 0x6bcc19a7} }, +/**/ {{0x3fefeb2d, 0x9543a0e2} }, +/**/ {{0x3fefeb0d, 0xbefaab7f} }, +/**/ {{0x3fefeaed, 0xe8f138c2} }, +/**/ {{0x3fefeace, 0x132747ea} }, +/**/ {{0x3fefeaae, 0x3d9cd83c} }, +/**/ {{0x3fefea8e, 0x6851e8f7} }, +/**/ {{0x3fefea6e, 0x93467960} }, +/**/ {{0x3fefea4e, 0xbe7a88b7} }, +/**/ {{0x3fefea2e, 0xe9ee163f} }, +/**/ {{0x3fefea0f, 0x15a12139} }, +/**/ {{0x3fefe9ef, 0x4193a8e8} }, +/**/ {{0x3fefe9cf, 0x6dc5ac8e} }, +/**/ {{0x3fefe9af, 0x9a372b6d} }, +/**/ {{0x3fefe98f, 0xc6e824c6} }, +/**/ {{0x3fefe96f, 0xf3d897dd} }, + }; + + static const number + Lu[182][2] = { /* log(ui) */ +/**/ {{{0xbfd63003, 0x0b3aac49} }, +/**/ {{0xbc6dc18c, 0xe51fff99} },}, +/**/ {{{0xbfd5d5bd, 0xdf595f30} }, +/**/ {{0x3c765411, 0x48cbb8a2} },}, +/**/ {{{0xbfd57bf7, 0x53c8d1fb} }, +/**/ {{0x3c60908d, 0x15f88b63} },}, +/**/ {{{0xbfd522ae, 0x0738a3d8} }, +/**/ {{0x3c68f7e9, 0xb38a6979} },}, +/**/ {{{0xbfd4c9e0, 0x9e172c3c} }, +/**/ {{0x3c512361, 0x5b147a5d} },}, +/**/ {{{0xbfd4718d, 0xc271c41b} }, +/**/ {{0xbc38fb4c, 0x14c56eef} },}, +/**/ {{{0xbfd419b4, 0x23d5e8c7} }, +/**/ {{0xbc60dbb2, 0x43827392} },}, +/**/ {{{0xbfd3c252, 0x77333184} }, +/**/ {{0x3c72ad27, 0xe50a8ec6} },}, +/**/ {{{0xbfd36b67, 0x76be1117} }, +/**/ {{0x3c5324f0, 0xe883858e} },}, +/**/ {{{0xbfd314f1, 0xe1d35ce4} }, +/**/ {{0x3c73d699, 0x09e5c3dc} },}, +/**/ {{{0xbfd2bef0, 0x7cdc9354} }, +/**/ {{0x3c782dad, 0x7fd86088} },}, +/**/ {{{0xbfd26962, 0x1134db92} }, +/**/ {{0xbc7e0efa, 0xdd9db02b} },}, +/**/ {{{0xbfd21445, 0x6d0eb8d4} }, +/**/ {{0xbc6f7ae9, 0x1aeba60a} },}, +/**/ {{{0xbfd1bf99, 0x635a6b95} }, +/**/ {{0x3c612aeb, 0x84249223} },}, +/**/ {{{0xbfd16b5c, 0xcbacfb73} }, +/**/ {{0xbc766fbd, 0x28b40935} },}, +/**/ {{{0xbfd1178e, 0x8227e47c} }, +/**/ {{0x3c60e63a, 0x5f01c691} },}, +/**/ {{{0xbfd0c42d, 0x676162e3} }, +/**/ {{0xbc5162c7, 0x9d5d11ee} },}, +/**/ {{{0xbfd07138, 0x604d5862} }, +/**/ {{0xbc7cdb16, 0xed4e9138} },}, +/**/ {{{0xbfd01eae, 0x5626c691} }, +/**/ {{0x3c418290, 0xbd2932e2} },}, +/**/ {{{0xbfcf991c, 0x6cb3b379} }, +/**/ {{0xbc6f6650, 0x66f980a2} },}, +/**/ {{{0xbfcef5ad, 0xe4dcffe6} }, +/**/ {{0x3c508ab2, 0xddc708a0} },}, +/**/ {{{0xbfce530e, 0xffe71012} }, +/**/ {{0xbc422760, 0x41f43042} },}, +/**/ {{{0xbfcdb13d, 0xb0d48940} }, +/**/ {{0xbc5aa11d, 0x49f96cb9} },}, +/**/ {{{0xbfcd1037, 0xf2655e7b} }, +/**/ {{0xbc660629, 0x242471a2} },}, +/**/ {{{0xbfcc6ffb, 0xc6f00f71} }, +/**/ {{0x3c68e58b, 0x2c57a4a5} },}, +/**/ {{{0xbfcbd087, 0x383bd8ad} }, +/**/ {{0xbc3dd355, 0xf6a516d7} },}, +/**/ {{{0xbfcb31d8, 0x575bce3d} }, +/**/ {{0x3c66353a, 0xb386a94d} },}, +/**/ {{{0xbfca93ed, 0x3c8ad9e3} }, +/**/ {{0xbc6bcafa, 0x9de97203} },}, +/**/ {{{0xbfc9f6c4, 0x07089664} }, +/**/ {{0xbc435a19, 0x605e67ef} },}, +/**/ {{{0xbfc95a5a, 0xdcf7017f} }, +/**/ {{0xbc5142c5, 0x07fb7a3d} },}, +/**/ {{{0xbfc8beaf, 0xeb38fe8c} }, +/**/ {{0xbc555aa8, 0xb6997a40} },}, +/**/ {{{0xbfc823c1, 0x6551a3c2} }, +/**/ {{0x3c61232c, 0xe70be781} },}, +/**/ {{{0xbfc7898d, 0x85444c73} }, +/**/ {{0xbc5ef8f6, 0xebcfb201} },}, +/**/ {{{0xbfc6f012, 0x8b756abc} }, +/**/ {{0x3c68de59, 0xc21e166c} },}, +/**/ {{{0xbfc6574e, 0xbe8c133a} }, +/**/ {{0x3c3d34f0, 0xf4621bed} },}, +/**/ {{{0xbfc5bf40, 0x6b543db2} }, +/**/ {{0x3c21f5b4, 0x4c0df7e7} },}, +/**/ {{{0xbfc527e5, 0xe4a1b58d} }, +/**/ {{0x3c271a96, 0x82395bfd} },}, +/**/ {{{0xbfc4913d, 0x8333b561} }, +/**/ {{0x3c50d560, 0x4930f135} },}, +/**/ {{{0xbfc3fb45, 0xa59928cc} }, +/**/ {{0x3c6d87e6, 0xa354d056} },}, +/**/ {{{0xbfc365fc, 0xb0159016} }, +/**/ {{0xbc57d411, 0xa5b944ad} },}, +/**/ {{{0xbfc2d161, 0x0c86813a} }, +/**/ {{0x3c5499a3, 0xf25af95f} },}, +/**/ {{{0xbfc23d71, 0x2a49c202} }, +/**/ {{0x3c66e381, 0x61051d69} },}, +/**/ {{{0xbfc1aa2b, 0x7e23f72a} }, +/**/ {{0x3c4c6ef1, 0xd9b2ef7e} },}, +/**/ {{{0xbfc1178e, 0x8227e47c} }, +/**/ {{0x3c50e63a, 0x5f01c691} },}, +/**/ {{{0xbfc08598, 0xb59e3a07} }, +/**/ {{0x3c6dd700, 0x9902bf32} },}, +/**/ {{{0xbfbfe891, 0x39dbd566} }, +/**/ {{0x3c5ac9f4, 0x215f9393} },}, +/**/ {{{0xbfbec739, 0x830a1120} }, +/**/ {{0x3c4a2bf9, 0x91780d3f} },}, +/**/ {{{0xbfbda727, 0x638446a2} }, +/**/ {{0xbc5401fa, 0x71733019} },}, +/**/ {{{0xbfbc8858, 0x01bc4b23} }, +/**/ {{0xbc5a38cb, 0x559a6706} },}, +/**/ {{{0xbfbb6ac8, 0x8dad5b1c} }, +/**/ {{0x3c40057e, 0xed1ca59f} },}, +/**/ {{{0xbfba4e76, 0x40b1bc38} }, +/**/ {{0x3c55b5ca, 0x203e4259} },}, +/**/ {{{0xbfb9335e, 0x5d594989} }, +/**/ {{0x3c5478a8, 0x5704ccb7} },}, +/**/ {{{0xbfb8197e, 0x2f40e3f0} }, +/**/ {{0xbc3b9f2d, 0xffbeed43} },}, +/**/ {{{0xbfb700d3, 0x0aeac0e1} }, +/**/ {{0x3c272566, 0x212cdd05} },}, +/**/ {{{0xbfb5e95a, 0x4d9791cb} }, +/**/ {{0xbc5f3874, 0x5c5c450a} },}, +/**/ {{{0xbfb4d311, 0x5d207eac} }, +/**/ {{0xbc5769f4, 0x2c7842cc} },}, +/**/ {{{0xbfb3bdf5, 0xa7d1ee64} }, +/**/ {{0xbc47a976, 0xd3b5b45f} },}, +/**/ {{{0xbfb2aa04, 0xa44717a5} }, +/**/ {{0x3c5d15d3, 0x8d2fa3f7} },}, +/**/ {{{0xbfb1973b, 0xd1465567} }, +/**/ {{0x3c475583, 0x67a6acf6} },}, +/**/ {{{0xbfb08598, 0xb59e3a07} }, +/**/ {{0x3c5dd700, 0x9902bf32} },}, +/**/ {{{0xbfaeea31, 0xc006b87c} }, +/**/ {{0x3c43e4fc, 0x93b7b66c} },}, +/**/ {{{0xbfaccb73, 0xcdddb2cc} }, +/**/ {{0x3c4e48fb, 0x0500efd4} },}, +/**/ {{{0xbfaaaef2, 0xd0fb10fc} }, +/**/ {{0xbc2a353b, 0xb42e0add} },}, +/**/ {{{0xbfa894aa, 0x149fb343} }, +/**/ {{0xbc3a8be9, 0x7660a23d} },}, +/**/ {{{0xbfa67c94, 0xf2d4bb58} }, +/**/ {{0xbc40413e, 0x6505e603} },}, +/**/ {{{0xbfa466ae, 0xd42de3ea} }, +/**/ {{0x3c4cdd6f, 0x7f4a137e} },}, +/**/ {{{0xbfa252f3, 0x2f8d183f} }, +/**/ {{0x3c4947f7, 0x92615916} },}, +/**/ {{{0xbfa0415d, 0x89e74444} }, +/**/ {{0xbc4c05cf, 0x1d753622} },}, +/**/ {{{0xbf9c63d2, 0xec14aaf2} }, +/**/ {{0x3c3ce030, 0xa686bd86} },}, +/**/ {{{0xbf984925, 0x28c8cabf} }, +/**/ {{0x3c3d192d, 0x0619fa67} },}, +/**/ {{{0xbf9432a9, 0x25980cc1} }, +/**/ {{0x3c38cdaf, 0x39004192} },}, +/**/ {{{0xbf902056, 0x58935847} }, +/**/ {{0xbc327c8e, 0x8416e71f} },}, +/**/ {{{0xbf882448, 0xa388a2aa} }, +/**/ {{0xbc104b16, 0x137f09a0} },}, +/**/ {{{0xbf801015, 0x7588de71} }, +/**/ {{0xbc146662, 0xd417ced0} },}, +/**/ {{{0xbf700805, 0x59588b35} }, +/**/ {{0xbc1f9663, 0x8cf63677} },}, +/**/ {{{0x00000000, 0x00000000} }, +/**/ {{0x00000000, 0x00000000} },}, +/**/ {{{0x3f6ff00a, 0xa2b10bc0} }, +/**/ {{0x3c02821a, 0xd5a6d353} },}, +/**/ {{{0x3f7fe02a, 0x6b106789} }, +/**/ {{0xbbce44b7, 0xe3711ebf} },}, +/**/ {{{0x3f87dc47, 0x5f810a77} }, +/**/ {{0xbc116d76, 0x87d3df21} },}, +/**/ {{{0x3f8fc0a8, 0xb0fc03e4} }, +/**/ {{0xbc183092, 0xc59642a1} },}, +/**/ {{{0x3f93cea4, 0x4346a575} }, +/**/ {{0xbc10cb5a, 0x902b3a1c} },}, +/**/ {{{0x3f97b91b, 0x07d5b11b} }, +/**/ {{0xbc35b602, 0xace3a510} },}, +/**/ {{{0x3f9b9fc0, 0x27af9198} }, +/**/ {{0xbbf0ae69, 0x229dc868} },}, +/**/ {{{0x3f9f829b, 0x0e783300} }, +/**/ {{0x3c333e3f, 0x04f1ef23} },}, +/**/ {{{0x3fa1b0d9, 0x8923d980} }, +/**/ {{0xbc3e9ae8, 0x89bac481} },}, +/**/ {{{0x3fa39e87, 0xb9febd60} }, +/**/ {{0xbc45bfa9, 0x37f551bb} },}, +/**/ {{{0x3fa58a5b, 0xafc8e4d5} }, +/**/ {{0xbc4ce55c, 0x2b4e2b72} },}, +/**/ {{{0x3fa77458, 0xf632dcfc} }, +/**/ {{0x3c418d3c, 0xa87b9296} },}, +/**/ {{{0x3fa95c83, 0x0ec8e3eb} }, +/**/ {{0x3c4f5a0e, 0x80520bf2} },}, +/**/ {{{0x3fab42dd, 0x711971bf} }, +/**/ {{0xbc3eb975, 0x9c130499} },}, +/**/ {{{0x3fad276b, 0x8adb0b52} }, +/**/ {{0x3c21e3c5, 0x3257fd47} },}, +/**/ {{{0x3faf0a30, 0xc01162a6} }, +/**/ {{0x3c485f32, 0x5c5bbacd} },}, +/**/ {{{0x3fb07598, 0x3598e471} }, +/**/ {{0x3c480da5, 0x333c45b8} },}, +/**/ {{{0x3fb16536, 0xeea37ae1} }, +/**/ {{0xbc379da3, 0xe8c22cda} },}, +/**/ {{{0x3fb253f6, 0x2f0a1417} }, +/**/ {{0xbc1c1259, 0x63fc4cfd} },}, +/**/ {{{0x3fb341d7, 0x961bd1d1} }, +/**/ {{0xbc5b599f, 0x227becbb} },}, +/**/ {{{0x3fb42edc, 0xbea646f0} }, +/**/ {{0x3c4ddd4f, 0x935996c9} },}, +/**/ {{{0x3fb51b07, 0x3f06183f} }, +/**/ {{0x3c5a49e3, 0x9a1a8be4} },}, +/**/ {{{0x3fb60658, 0xa93750c4} }, +/**/ {{0xbc538845, 0x8ec21b6a} },}, +/**/ {{{0x3fb6f0d2, 0x8ae56b4c} }, +/**/ {{0xbc5906d9, 0x9184b992} },}, +/**/ {{{0x3fb7da76, 0x6d7b12cd} }, +/**/ {{0xbc5eeedf, 0xcdd94131} },}, +/**/ {{{0x3fb8c345, 0xd6319b21} }, +/**/ {{0xbc24a697, 0xab3424a9} },}, +/**/ {{{0x3fb9ab42, 0x462033ad} }, +/**/ {{0xbc42099e, 0x1c184e8e} },}, +/**/ {{{0x3fba926d, 0x3a4ad563} }, +/**/ {{0x3c5942f4, 0x8aa70ea9} },}, +/**/ {{{0x3fbb78c8, 0x2bb0eda1} }, +/**/ {{0x3c20878c, 0xf0327e21} },}, +/**/ {{{0x3fbc5e54, 0x8f5bc743} }, +/**/ {{0x3c35d617, 0xef8161b1} },}, +/**/ {{{0x3fbd4313, 0xd66cb35d} }, +/**/ {{0x3c5790dd, 0x951d90fa} },}, +/**/ {{{0x3fbe2707, 0x6e2af2e6} }, +/**/ {{0xbc361578, 0x001e0162} },}, +/**/ {{{0x3fbf0a30, 0xc01162a6} }, +/**/ {{0x3c585f32, 0x5c5bbacd} },}, +/**/ {{{0x3fbfec91, 0x31dbeabb} }, +/**/ {{0xbc55746b, 0x9981b36c} },}, +/**/ {{{0x3fc06715, 0x12ca596e} }, +/**/ {{0x3c550c64, 0x7eb86499} },}, +/**/ {{{0x3fc0d77e, 0x7cd08e59} }, +/**/ {{0x3c69a5dc, 0x5e9030ac} },}, +/**/ {{{0x3fc14785, 0x846742ac} }, +/**/ {{0x3c6a2881, 0x3e3a7f07} },}, +/**/ {{{0x3fc1b72a, 0xd52f67a0} }, +/**/ {{0x3c548302, 0x3472cd74} },}, +/**/ {{{0x3fc2266f, 0x190a5acb} }, +/**/ {{0x3c6f547b, 0xf1809e88} },}, +/**/ {{{0x3fc29552, 0xf81ff523} }, +/**/ {{0x3c630177, 0x1c407dbf} },}, +/**/ {{{0x3fc303d7, 0x18e47fd3} }, +/**/ {{0xbc06b9c7, 0xd96091fa} },}, +/**/ {{{0x3fc371fc, 0x201e8f74} }, +/**/ {{0x3c5de6cb, 0x62af18a0} },}, +/**/ {{{0x3fc3dfc2, 0xb0ecc62a} }, +/**/ {{0xbc5ab3a8, 0xe7d81017} },}, +/**/ {{{0x3fc44d2b, 0x6ccb7d1e} }, +/**/ {{0x3c69f4f6, 0x543e1f88} },}, +/**/ {{{0x3fc4ba36, 0xf39a55e5} }, +/**/ {{0x3c668981, 0xbcc36756} },}, +/**/ {{{0x3fc526e5, 0xe3a1b438} }, +/**/ {{0xbc6746ff, 0x8a470d3a} },}, +/**/ {{{0x3fc59338, 0xd9982086} }, +/**/ {{0xbc565d22, 0xaa8ad7cf} },}, +/**/ {{{0x3fc5ff30, 0x70a793d4} }, +/**/ {{0xbc5bc60e, 0xfafc6f6e} },}, +/**/ {{{0x3fc66acd, 0x4272ad51} }, +/**/ {{0xbc50900e, 0x4e1ea8b2} },}, +/**/ {{{0x3fc6d60f, 0xe719d21d} }, +/**/ {{0xbc6caae2, 0x68ecd179} },}, +/**/ {{{0x3fc740f8, 0xf54037a5} }, +/**/ {{0xbc5b2640, 0x62a84cdb} },}, +/**/ {{{0x3fc7ab89, 0x0210d909} }, +/**/ {{0x3c4be36b, 0x2d6a0608} },}, +/**/ {{{0x3fc815c0, 0xa14357eb} }, +/**/ {{0xbc54be48, 0x073a0564} },}, +/**/ {{{0x3fc87fa0, 0x6520c911} }, +/**/ {{0xbc6bf7fd, 0xbfa08d9a} },}, +/**/ {{{0x3fc8e928, 0xde886d41} }, +/**/ {{0xbc6569d8, 0x51a56770} },}, +/**/ {{{0x3fc9525a, 0x9cf456b4} }, +/**/ {{0x3c6d904c, 0x1d4e2e26} },}, +/**/ {{{0x3fc9bb36, 0x2e7dfb83} }, +/**/ {{0x3c6575e3, 0x1f003e0c} },}, +/**/ {{{0x3fca23bc, 0x1fe2b563} }, +/**/ {{0x3c493711, 0xb07a998c} },}, +/**/ {{{0x3fca8bec, 0xfc882f19} }, +/**/ {{0xbc5e8c37, 0x918c39eb} },}, +/**/ {{{0x3fcaf3c9, 0x4e80bff3} }, +/**/ {{0xbc5398cf, 0xf3641985} },}, +/**/ {{{0x3fcb5b51, 0x9e8fb5a4} }, +/**/ {{0x3c6ba27f, 0xdc19e1a0} },}, +/**/ {{{0x3fcbc286, 0x742d8cd6} }, +/**/ {{0x3c54fce7, 0x44870f55} },}, +/**/ {{{0x3fcc2968, 0x558c18c1} }, +/**/ {{0xbc673dee, 0x38a3fb6b} },}, +/**/ {{{0x3fcc8ff7, 0xc79a9a22} }, +/**/ {{0xbc64f689, 0xf8434012} },}, +/**/ {{{0x3fccf635, 0x4e09c5dc} }, +/**/ {{0x3c6239a0, 0x7d55b695} },}, +/**/ {{{0x3fcd5c21, 0x6b4fbb91} }, +/**/ {{0x3c66e443, 0x597e4d40} },}, +/**/ {{{0x3fcdc1bc, 0xa0abec7d} }, +/**/ {{0x3c6834c5, 0x1998b6fc} },}, +/**/ {{{0x3fce2707, 0x6e2af2e6} }, +/**/ {{0xbc461578, 0x001e0162} },}, +/**/ {{{0x3fce8c02, 0x52aa5a60} }, +/**/ {{0xbc46e03a, 0x39bfc89b} },}, +/**/ {{{0x3fcef0ad, 0xcbdc5936} }, +/**/ {{0x3c648637, 0x950dc20d} },}, +/**/ {{{0x3fcf550a, 0x564b7b37} }, +/**/ {{0x3c2c5f6d, 0xfd018c37} },}, +/**/ {{{0x3fcfb918, 0x6d5e3e2b} }, +/**/ {{0xbc6caaae, 0x64f21acb} },}, +/**/ {{{0x3fd00e6c, 0x45ad501d} }, +/**/ {{0xbc6cb956, 0x8ff6fead} },}, +/**/ {{{0x3fd04025, 0x94b4d041} }, +/**/ {{0xbc628ec2, 0x17a5022d} },}, +/**/ {{{0x3fd071b8, 0x5fcd590d} }, +/**/ {{0x3c5d1707, 0xf97bde80} },}, +/**/ {{{0x3fd0a324, 0xe27390e3} }, +/**/ {{0x3c77dcfd, 0xe8061c03} },}, +/**/ {{{0x3fd0d46b, 0x579ab74b} }, +/**/ {{0x3c603ec8, 0x1c3cbd92} },}, +/**/ {{{0x3fd1058b, 0xf9ae4ad5} }, +/**/ {{0x3c589fa0, 0xab4cb31d} },}, +/**/ {{{0x3fd13687, 0x0293a8b0} }, +/**/ {{0x3c77b662, 0x98edd24a} },}, +/**/ {{{0x3fd1675c, 0xababa60e} }, +/**/ {{0x3c2ce63e, 0xab883717} },}, +/**/ {{{0x3fd1980d, 0x2dd4236f} }, +/**/ {{0x3c79d3d1, 0xb0e4d147} },}, +/**/ {{{0x3fd1c898, 0xc16999fb} }, +/**/ {{0xbc30e5c6, 0x2aff1c44} },}, +/**/ {{{0x3fd1f8ff, 0x9e48a2f3} }, +/**/ {{0xbc7c9fdf, 0x9a0c4b07} },}, +/**/ {{{0x3fd22941, 0xfbcf7966} }, +/**/ {{0xbc776f5e, 0xb09628af} },}, +/**/ {{{0x3fd25960, 0x10df763a} }, +/**/ {{0xbc50f76c, 0x57075e9e} },}, +/**/ {{{0x3fd2895a, 0x13de86a3} }, +/**/ {{0x3c77ad24, 0xc13f040e} },}, +/**/ {{{0x3fd2b930, 0x3ab89d25} }, +/**/ {{0xbc7896b5, 0xfd852ad4} },}, +/**/ {{{0x3fd2e8e2, 0xbae11d31} }, +/**/ {{0xbc78f4cd, 0xb95ebdf9} },}, +/**/ {{{0x3fd31871, 0xc9544185} }, +/**/ {{0xbc351acc, 0x4c09b379} },}, +/**/ {{{0x3fd347dd, 0x9a987d55} }, +/**/ {{0xbc64dd4c, 0x580919f8} },}, +/**/ {{{0x3fd37726, 0x62bfd85b} }, +/**/ {{0xbc4b5629, 0xd8117de7} },}, +/**/ {{{0x3fd3a64c, 0x556945ea} }, +/**/ {{0xbc6c6865, 0x1945f97c} },}, +/**/ {{{0x3fd3d54f, 0xa5c1f710} }, +/**/ {{0xbc7e3265, 0xc6a1c98d} },}, +/**/ {{{0x3fd40430, 0x8686a7e4} }, +/**/ {{0xbc70bcfb, 0x6082ce6d} },}, +/**/ {{{0x3fd432ef, 0x2a04e814} }, +/**/ {{0xbc729931, 0x715ac903} },}, +/**/ {{{0x3fd4618b, 0xc21c5ec2} }, +/**/ {{0x3c7f42de, 0xcdeccf1d} },}, +/**/ {{{0x3fd49006, 0x804009d1} }, +/**/ {{0xbc69ffc3, 0x41f177dc} },}, +/**/ {{{0x3fd4be5f, 0x957778a1} }, +/**/ {{0xbc6259b3, 0x5b04813d} },}, +/**/ {{{0x3fd4ec97, 0x3260026a} }, +/**/ {{0xbc742a87, 0xd977dc5e} },}, +/**/ {{{0x3fd51aad, 0x872df82d} }, +/**/ {{0x3c43927a, 0xc19f55e3} },}, +/**/ {{{0x3fd548a2, 0xc3add263} }, +/**/ {{0xbc6819cf, 0x7e308ddb} },}, +/**/ {{{0x3fd57677, 0x17455a6c} }, +/**/ {{0x3c7526ad, 0xb283660c} },}, +/**/ {{{0x3fd5a42a, 0xb0f4cfe2} }, +/**/ {{0xbc78ebcb, 0x7dee9a3d} },}, +/**/ {{{0x3fd5d1bd, 0xbf5809ca} }, +/**/ {{0x3c742363, 0x83dc7fe1} },}, +/**/ {{{0x3fd5ff30, 0x70a793d4} }, +/**/ {{0xbc6bc60e, 0xfafc6f6e} },}, +/**/ {{{0x3fd62c82, 0xf2b9c795} }, +/**/ {{0x3c67b7af, 0x915300e5} },}, + }; + + static const number + Lv[362][2] = { /* log(vj) */ + +/**/ {{{0xbf6687ec, 0xb72daabf} }, +/**/ {{0x3c052c69, 0x0f13318f} },}, +/**/ {{{0xbf6667d6, 0x3767104f} }, +/**/ {{0x3bd3efa3, 0xd27a7bac} },}, +/**/ {{{0xbf6647bf, 0xd7cd64fb} }, +/**/ {{0x3c09b725, 0x55a89c36} },}, +/**/ {{{0xbf6627a9, 0x9860683b} }, +/**/ {{0x3bcbae22, 0xfebc844a} },}, +/**/ {{{0xbf660793, 0x791fd98a} }, +/**/ {{0xbbfe34af, 0x78fa1cb5} },}, +/**/ {{{0xbf65e77d, 0x7a0b7863} }, +/**/ {{0xbc02f1b1, 0xea78fdd0} },}, +/**/ {{{0xbf65c767, 0x9b230442} }, +/**/ {{0x3bf70d8c, 0x2202b2ca} },}, +/**/ {{{0xbf65a751, 0xdc663ca2} }, +/**/ {{0xbbfdc63d, 0xc3444e64} },}, +/**/ {{{0xbf65873c, 0x3dd4e102} }, +/**/ {{0x3c021b11, 0x370d69c3} },}, +/**/ {{{0xbf656726, 0xbf6eb0de} }, +/**/ {{0xbbfb6da8, 0x154dd8d8} },}, +/**/ {{{0xbf654711, 0x61336bb6} }, +/**/ {{0xbc0b12d2, 0xdf9a4709} },}, +/**/ {{{0xbf6526fc, 0x2322d10a} }, +/**/ {{0x3bf997f2, 0x68d1274f} },}, +/**/ {{{0xbf6506e7, 0x053ca059} }, +/**/ {{0x3c0c2a1f, 0xe70c852a} },}, +/**/ {{{0xbf64e6d2, 0x07809924} }, +/**/ {{0x3c04cc9e, 0xa808538f} },}, +/**/ {{{0xbf64c6bd, 0x29ee7aed} }, +/**/ {{0x3befe68c, 0x7797a4bd} },}, +/**/ {{{0xbf64a6a8, 0x6c860537} }, +/**/ {{0x3c06794d, 0x9efaae3d} },}, +/**/ {{{0xbf648693, 0xcf46f784} }, +/**/ {{0xbbfed318, 0xb2ddd9d1} },}, +/**/ {{{0xbf64667f, 0x5231115a} }, +/**/ {{0x3c061f62, 0x4643624b} },}, +/**/ {{{0xbf64466a, 0xf544123c} }, +/**/ {{0x3c0666a0, 0x9387f11e} },}, +/**/ {{{0xbf642656, 0xb87fb9b0} }, +/**/ {{0x3c0043b2, 0x116ec598} },}, +/**/ {{{0xbf640642, 0x9be3c73c} }, +/**/ {{0xbbfbd84d, 0xd2de6e3e} },}, +/**/ {{{0xbf63e62e, 0x9f6ffa68} }, +/**/ {{0xbbe9149b, 0x433d8c65} },}, +/**/ {{{0xbf63c61a, 0xc32412bb} }, +/**/ {{0xbbf6b88d, 0x08e5a7bb} },}, +/**/ {{{0xbf63a607, 0x06ffcfbe} }, +/**/ {{0xbb9f3c7a, 0xccfac9e2} },}, +/**/ {{{0xbf6385f3, 0x6b02f0fa} }, +/**/ {{0x3bee405c, 0xbec6f6e4} },}, +/**/ {{{0xbf6365df, 0xef2d35f9} }, +/**/ {{0x3bf02993, 0xaf0c0b4c} },}, +/**/ {{{0xbf6345cc, 0x937e5e46} }, +/**/ {{0x3bf9be97, 0xaa64716f} },}, +/**/ {{{0xbf6325b9, 0x57f6296c} }, +/**/ {{0xbbfdeb4d, 0xa2e863ae} },}, +/**/ {{{0xbf6305a6, 0x3c9456f9} }, +/**/ {{0x3c0f3c7f, 0x636d2b2c} },}, +/**/ {{{0xbf62e593, 0x4158a678} }, +/**/ {{0x3c01a8df, 0xb166ca7f} },}, +/**/ {{{0xbf62c580, 0x6642d778} }, +/**/ {{0x3c020ff1, 0x53a2d534} },}, +/**/ {{{0xbf62a56d, 0xab52a987} }, +/**/ {{0xbbe8fef1, 0x0412f1e7} },}, +/**/ {{{0xbf62855b, 0x1087dc35} }, +/**/ {{0xbbfcd17e, 0x4b7ac6c6} },}, +/**/ {{{0xbf626548, 0x95e22f12} }, +/**/ {{0xbbfbfc21, 0x9a8127bf} },}, +/**/ {{{0xbf624536, 0x3b6161af} }, +/**/ {{0x3bd7eda1, 0x66d42390} },}, +/**/ {{{0xbf622524, 0x0105339d} }, +/**/ {{0xbbdf374e, 0x77fedcad} },}, +/**/ {{{0xbf620511, 0xe6cd646f} }, +/**/ {{0x3be1d1fb, 0x52d05dea} },}, +/**/ {{{0xbf61e4ff, 0xecb9b3b8} }, +/**/ {{0x3c02c2fc, 0xffd8e706} },}, +/**/ {{{0xbf61c4ee, 0x12c9e10b} }, +/**/ {{0xbc02b4f8, 0xf1d5cc2c} },}, +/**/ {{{0xbf61a4dc, 0x58fdabfe} }, +/**/ {{0xbc0618c3, 0x1315b191} },}, +/**/ {{{0xbf6184ca, 0xbf54d426} }, +/**/ {{0xbc01f8d5, 0xcb3cdab0} },}, +/**/ {{{0xbf6164b9, 0x45cf1919} }, +/**/ {{0xbc014ff7, 0xc025605a} },}, +/**/ {{{0xbf6144a7, 0xec6c3a6e} }, +/**/ {{0xbbff04ff, 0x87cb08cd} },}, +/**/ {{{0xbf612496, 0xb32bf7bd} }, +/**/ {{0x3bee89b4, 0xe6af1b84} },}, +/**/ {{{0xbf610485, 0x9a0e109e} }, +/**/ {{0x3c07e99e, 0x35a60879} },}, +/**/ {{{0xbf60e474, 0xa11244aa} }, +/**/ {{0x3c04b698, 0x20f2325a} },}, +/**/ {{{0xbf60c463, 0xc838537b} }, +/**/ {{0x3bc0657e, 0x3617200d} },}, +/**/ {{{0xbf60a453, 0x0f7ffcac} }, +/**/ {{0xbc008feb, 0xa5080961} },}, +/**/ {{{0xbf608442, 0x76e8ffd9} }, +/**/ {{0x3bd13002, 0xbb5e1df7} },}, +/**/ {{{0xbf606431, 0xfe731c9d} }, +/**/ {{0xbc0509f3, 0x6e2858c0} },}, +/**/ {{{0xbf604421, 0xa61e1296} }, +/**/ {{0xbc04b556, 0x5f5d9695} },}, +/**/ {{{0xbf602411, 0x6de9a162} }, +/**/ {{0x3c042b89, 0xe79a4e00} },}, +/**/ {{{0xbf600401, 0x55d5889e} }, +/**/ {{0x3be8f98e, 0x1113f403} },}, +/**/ {{{0xbf5fc7e2, 0xbbc30fd4} }, +/**/ {{0xbbfc709b, 0x93382bc9} },}, +/**/ {{{0xbf5f87c3, 0x0c1abdcd} }, +/**/ {{0xbbf2a90d, 0x76a55d1c} },}, +/**/ {{{0xbf5f47a3, 0x9cb19a68} }, +/**/ {{0x3be1b815, 0x76e7826b} },}, +/**/ {{{0xbf5f0784, 0x6d8724e7} }, +/**/ {{0xbbe72d46, 0x2b63756d} },}, +/**/ {{{0xbf5ec765, 0x7e9adc90} }, +/**/ {{0x3beb1a66, 0x73bb17c5} },}, +/**/ {{{0xbf5e8746, 0xcfec40a8} }, +/**/ {{0x3bf11af5, 0xb5e5a553} },}, +/**/ {{{0xbf5e4728, 0x617ad077} }, +/**/ {{0x3bfb2cad, 0xf57dd14f} },}, +/**/ {{{0xbf5e070a, 0x33460b45} }, +/**/ {{0xbbf8db75, 0x4902c8d5} },}, +/**/ {{{0xbf5dc6ec, 0x454d705f} }, +/**/ {{0x3bef5cc6, 0xe8a41057} },}, +/**/ {{{0xbf5d86ce, 0x97907f0f} }, +/**/ {{0x3bed8277, 0xdf8672ef} },}, +/**/ {{{0xbf5d46b1, 0x2a0eb6a3} }, +/**/ {{0xbbc2f9c2, 0x3717e5ee} },}, +/**/ {{{0xbf5d0693, 0xfcc7966b} }, +/**/ {{0x3bf4deed, 0xab4852c6} },}, +/**/ {{{0xbf5cc677, 0x0fba9db6} }, +/**/ {{0xbbf3a2b4, 0x9db2a368} },}, +/**/ {{{0xbf5c865a, 0x62e74bd8} }, +/**/ {{0xbbd2c51d, 0x58fa0c24} },}, +/**/ {{{0xbf5c463d, 0xf64d2024} }, +/**/ {{0x3bf838ca, 0xe3a09391} },}, +/**/ {{{0xbf5c0621, 0xc9eb99ee} }, +/**/ {{0xbbdc2a9e, 0x61b7de71} },}, +/**/ {{{0xbf5bc605, 0xddc2388e} }, +/**/ {{0xbbea9808, 0x4accb195} },}, +/**/ {{{0xbf5b85ea, 0x31d07b5c} }, +/**/ {{0xbbd811a2, 0x032e030b} },}, +/**/ {{{0xbf5b45ce, 0xc615e1b1} }, +/**/ {{0xbbfd5427, 0x821e0b81} },}, +/**/ {{{0xbf5b05b3, 0x9a91eaea} }, +/**/ {{0x3bfffeba, 0x2619306b} },}, +/**/ {{{0xbf5ac598, 0xaf441661} }, +/**/ {{0x3bd22824, 0x9eac7d15} },}, +/**/ {{{0xbf5a857e, 0x042be376} }, +/**/ {{0x3bc20736, 0x24893f0e} },}, +/**/ {{{0xbf5a4563, 0x9948d188} }, +/**/ {{0xbbf58ab4, 0x04d734cd} },}, +/**/ {{{0xbf5a0549, 0x6e9a5ff9} }, +/**/ {{0xbbf22673, 0x5723a6c3} },}, +/**/ {{{0xbf59c52f, 0x84200e2c} }, +/**/ {{0x3bfc81da, 0xa538e8e1} },}, +/**/ {{{0xbf598515, 0xd9d95b83} }, +/**/ {{0xbbfa1a37, 0x2a8e3feb} },}, +/**/ {{{0xbf5944fc, 0x6fc5c767} }, +/**/ {{0x3bf8e1ce, 0x385159f9} },}, +/**/ {{{0xbf5904e3, 0x45e4d13c} }, +/**/ {{0xbbfc4737, 0x1567c7a7} },}, +/**/ {{{0xbf58c4ca, 0x5c35f86e} }, +/**/ {{0x3bf41581, 0x23c9ae0c} },}, +/**/ {{{0xbf5884b1, 0xb2b8bc65} }, +/**/ {{0x3bf70c2c, 0x2b66cfb6} },}, +/**/ {{{0xbf584499, 0x496c9c8d} }, +/**/ {{0xbbdb9042, 0xe5a11e3e} },}, +/**/ {{{0xbf580481, 0x20511854} }, +/**/ {{0xbbf9cf9d, 0x61bcb040} },}, +/**/ {{{0xbf57c469, 0x3765af29} }, +/**/ {{0xbbf65ceb, 0xe26a419b} },}, +/**/ {{{0xbf578451, 0x8ea9e07c} }, +/**/ {{0xbbf1c2f5, 0xb70a4088} },}, +/**/ {{{0xbf57443a, 0x261d2bbf} }, +/**/ {{0xbbbc7b8f, 0x29704ba7} },}, +/**/ {{{0xbf570422, 0xfdbf1065} }, +/**/ {{0x3bca0a54, 0x433ccb3b} },}, +/**/ {{{0xbf56c40c, 0x158f0de3} }, +/**/ {{0x3bd9e257, 0x207cde2d} },}, +/**/ {{{0xbf5683f5, 0x6d8ca3af} }, +/**/ {{0xbbef17a4, 0xf7b51b49} },}, +/**/ {{{0xbf5643df, 0x05b75142} }, +/**/ {{0x3be28239, 0x9d345bf8} },}, +/**/ {{{0xbf5603c8, 0xde0e9614} }, +/**/ {{0xbbde6c21, 0x0918d1bf} },}, +/**/ {{{0xbf55c3b2, 0xf691f1a1} }, +/**/ {{0x3bd37d78, 0x377de4c8} },}, +/**/ {{{0xbf55839d, 0x4f40e365} }, +/**/ {{0x3bf52b7d, 0xbbf7c9d1} },}, +/**/ {{{0xbf554387, 0xe81aeadd} }, +/**/ {{0xbbf0be6a, 0x679c3d9a} },}, +/**/ {{{0xbf550372, 0xc11f878a} }, +/**/ {{0xbbdd9e20, 0xb6cdd88e} },}, +/**/ {{{0xbf54c35d, 0xda4e38ec} }, +/**/ {{0xbbe3b1e7, 0x09302da0} },}, +/**/ {{{0xbf548349, 0x33a67e86} }, +/**/ {{0x3be8cba8, 0x085b922d} },}, +/**/ {{{0xbf544334, 0xcd27d7db} }, +/**/ {{0xbba5f2c9, 0xf024ab43} },}, +/**/ {{{0xbf540320, 0xa6d1c471} }, +/**/ {{0xbbeb31f3, 0xf686cf3d} },}, +/**/ {{{0xbf53c30c, 0xc0a3c3cf} }, +/**/ {{0xbbf74ffe, 0xd4ad32f6} },}, +/**/ {{{0xbf5382f9, 0x1a9d557e} }, +/**/ {{0x3bd2e555, 0x4acb368f} },}, +/**/ {{{0xbf5342e5, 0xb4bdf907} }, +/**/ {{0x3be13442, 0x07812806} },}, +/**/ {{{0xbf5302d2, 0x8f052df6} }, +/**/ {{0x3bf5f429, 0x70b1e756} },}, +/**/ {{{0xbf52c2bf, 0xa97273d7} }, +/**/ {{0xbbf20aa3, 0x43a03fff} },}, +/**/ {{{0xbf5282ad, 0x04054a3a} }, +/**/ {{0xbbed4d57, 0x8bebd7ad} },}, +/**/ {{{0xbf52429a, 0x9ebd30ae} }, +/**/ {{0xbbff9529, 0x5a71c5a4} },}, +/**/ {{{0xbf520288, 0x7999a6c6} }, +/**/ {{0x3bfb055a, 0x54100f9e} },}, +/**/ {{{0xbf51c276, 0x949a2c12} }, +/**/ {{0xbbff6978, 0xa2e9f1b4} },}, +/**/ {{{0xbf518264, 0xefbe402a} }, +/**/ {{0x3bf01fb9, 0xbc188323} },}, +/**/ {{{0xbf514253, 0x8b0562a1} }, +/**/ {{0xbbf7c87c, 0x957bf23a} },}, +/**/ {{{0xbf510242, 0x666f1311} }, +/**/ {{0x3bdc2cb9, 0xc8be6880} },}, +/**/ {{{0xbf50c231, 0x81fad111} }, +/**/ {{0xbbf59fc1, 0x07ba000d} },}, +/**/ {{{0xbf508220, 0xdda81c3d} }, +/**/ {{0xbbf06a0a, 0xbf5c8a0b} },}, +/**/ {{{0xbf504210, 0x79767431} }, +/**/ {{0x3bf3a6cf, 0xa9a705bc} },}, +/**/ {{{0xbf500200, 0x55655889} }, +/**/ {{0xbbe9abe6, 0xbf0fa436} },}, +/**/ {{{0xbf4f83e0, 0xe2e891cc} }, +/**/ {{0x3be4aa59, 0x1b81bf62} },}, +/**/ {{{0xbf4f03c1, 0x9b4589ce} }, +/**/ {{0xbbe60518, 0x8a47f50a} },}, +/**/ {{{0xbf4e83a2, 0xd3e0985f} }, +/**/ {{0x3bed32d8, 0x5ef17e96} },}, +/**/ {{{0xbf4e0384, 0x8cb8bcc3} }, +/**/ {{0xbbeb7b30, 0xf09afa4d} },}, +/**/ {{{0xbf4d8366, 0xc5ccf647} }, +/**/ {{0xbbd527fc, 0xf586cec2} },}, +/**/ {{{0xbf4d0349, 0x7f1c4437} }, +/**/ {{0x3bc2bcf0, 0x4a686886} },}, +/**/ {{{0xbf4c832c, 0xb8a5a5e3} }, +/**/ {{0x3bc98f93, 0x721c2ebe} },}, +/**/ {{{0xbf4c0310, 0x72681a9e} }, +/**/ {{0xbbe20f00, 0xb5308d22} },}, +/**/ {{{0xbf4b82f4, 0xac62a1bf} }, +/**/ {{0xbbe1edd0, 0x9737b561} },}, +/**/ {{{0xbf4b02d9, 0x66943a9f} }, +/**/ {{0xbbcc950b, 0x23f894a1} },}, +/**/ {{{0xbf4a82be, 0xa0fbe49a} }, +/**/ {{0xbb81da04, 0x866bc982} },}, +/**/ {{{0xbf4a02a4, 0x5b989f0f} }, +/**/ {{0xbbd9114d, 0x9d76196e} },}, +/**/ {{{0xbf49828a, 0x96696961} }, +/**/ {{0x3bc10d20, 0xd3292fd6} },}, +/**/ {{{0xbf490271, 0x516d42f4} }, +/**/ {{0xbbee53a3, 0x2e9a5dd5} },}, +/**/ {{{0xbf488258, 0x8ca32b32} }, +/**/ {{0xbbc55af5, 0xd18f8004} },}, +/**/ {{{0xbf480240, 0x480a2185} }, +/**/ {{0xbbb32d23, 0xa9b0178a} },}, +/**/ {{{0xbf478228, 0x83a1255c} }, +/**/ {{0x3be84cc3, 0x8152093a} },}, +/**/ {{{0xbf470211, 0x3f673627} }, +/**/ {{0xbbd0055a, 0xf4881c71} },}, +/**/ {{{0xbf4681fa, 0x7b5b535c} }, +/**/ {{0x3bd2b73f, 0xb98336ea} },}, +/**/ {{{0xbf4601e4, 0x377c7c71} }, +/**/ {{0xbbcdcbed, 0x2ed05089} },}, +/**/ {{{0xbf4581ce, 0x73c9b0e1} }, +/**/ {{0xbbdda0c2, 0x61414697} },}, +/**/ {{{0xbf4501b9, 0x3041f02a} }, +/**/ {{0x3bee5d53, 0x22f8b33c} },}, +/**/ {{{0xbf4481a4, 0x6ce439ca} }, +/**/ {{0xbbe5512f, 0x9c25c999} },}, +/**/ {{{0xbf440190, 0x29af8d47} }, +/**/ {{0x3b7f48c2, 0xa4df0dfd} },}, +/**/ {{{0xbf43817c, 0x66a2ea26} }, +/**/ {{0x3bd157c0, 0x517febd8} },}, +/**/ {{{0xbf430169, 0x23bd4ff0} }, +/**/ {{0xbbe2e229, 0x0176d244} },}, +/**/ {{{0xbf428156, 0x60fdbe33} }, +/**/ {{0x3be64664, 0x175812b3} },}, +/**/ {{{0xbf420144, 0x1e63347c} }, +/**/ {{0xbbe39ab4, 0xd9355524} },}, +/**/ {{{0xbf418132, 0x5becb260} }, +/**/ {{0x3be74b27, 0xb6e1edc9} },}, +/**/ {{{0xbf410121, 0x19993772} }, +/**/ {{0xbbaa390b, 0x393ab56a} },}, +/**/ {{{0xbf408110, 0x5767c34c} }, +/**/ {{0x3bd128e6, 0xf8c7783b} },}, +/**/ {{{0xbf400100, 0x15575589} }, +/**/ {{0x3bec8863, 0xf23ef222} },}, +/**/ {{{0xbf3f01e0, 0xa6cddb8d} }, +/**/ {{0x3b8a9419, 0xcdd29c3f} },}, +/**/ {{{0xbf3e01c2, 0x232b174e} }, +/**/ {{0xbbc7cf55, 0xd5f5b191} },}, +/**/ {{{0xbf3d01a4, 0x9fc45d9e} }, +/**/ {{0x3bddc58f, 0xb5038e7e} },}, +/**/ {{{0xbf3c0188, 0x1c97adca} }, +/**/ {{0x3bc0238d, 0xbb933e41} },}, +/**/ {{{0xbf3b016c, 0x99a30728} }, +/**/ {{0xbbabde04, 0xc3c43664} },}, +/**/ {{{0xbf3a0152, 0x16e46913} }, +/**/ {{0x3bafe081, 0x5adc3673} },}, +/**/ {{{0xbf390138, 0x9459d2eb} }, +/**/ {{0xbbd949da, 0xc2a33d26} },}, +/**/ {{{0xbf380120, 0x12014418} }, +/**/ {{0xbbd3acbc, 0xf76e0326} },}, +/**/ {{{0xbf370108, 0x8fd8bc07} }, +/**/ {{0x3bdbde09, 0x4cd6ce34} },}, +/**/ {{{0xbf3600f2, 0x0dde3a29} }, +/**/ {{0xbbb0bc28, 0x05442a35} },}, +/**/ {{{0xbf3500dc, 0x8c0fbdf9} }, +/**/ {{0x3bd21c68, 0x0908cbf7} },}, +/**/ {{{0xbf3400c8, 0x0a6b46f4} }, +/**/ {{0xbbdbd35e, 0x0f107564} },}, +/**/ {{{0xbf3300b4, 0x88eed4a1} }, +/**/ {{0xbbc22067, 0x49a3dcb8} },}, +/**/ {{{0xbf3200a2, 0x0798668a} }, +/**/ {{0x3bcdb7f0, 0xe7c5d0e5} },}, +/**/ {{{0xbf310090, 0x8665fc3f} }, +/**/ {{0xbbd00add, 0xc7f9d69c} },}, +/**/ {{{0xbf300080, 0x05559559} }, +/**/ {{0x3bddd332, 0xa0e20e2f} },}, +/**/ {{{0xbf2e00e1, 0x08ca62e5} }, +/**/ {{0xbbb15ff9, 0x3a04bb77} },}, +/**/ {{{0xbf2c00c4, 0x0725a061} }, +/**/ {{0x3bc88ab0, 0xcc052f3e} },}, +/**/ {{{0xbf2a00a9, 0x05b8e275} }, +/**/ {{0xbbcbba1a, 0xf5f3cbcf} },}, +/**/ {{{0xbf280090, 0x04802882} }, +/**/ {{0x3bcec900, 0xa5bd7bd0} },}, +/**/ {{{0xbf260079, 0x037771ef} }, +/**/ {{0x3bb77ea0, 0x9b7b54fa} },}, +/**/ {{{0xbf240064, 0x029abe33} }, +/**/ {{0xbbc1bbf0, 0x3ae68d18} },}, +/**/ {{{0xbf220051, 0x01e60cd1} }, +/**/ {{0x3bb1dcd9, 0x2b45cfcd} },}, +/**/ {{{0xbf200040, 0x01555d56} }, +/**/ {{0x3bcddd88, 0x863f53f6} },}, +/**/ {{{0xbf1c0062, 0x01c95eb7} }, +/**/ {{0x3bbd88f7, 0xaa4dfd9a} },}, +/**/ {{{0xbf180048, 0x01200510} }, +/**/ {{0xbb984d46, 0x4f3db50b} },}, +/**/ {{{0xbf140032, 0x00a6ad1c} }, +/**/ {{0x3bb2e44b, 0x28ff1135} },}, +/**/ {{{0xbf100020, 0x00555655} }, +/**/ {{0xbbb62224, 0xccd5f17f} },}, +/**/ {{{0xbf080024, 0x004800a2} }, +/**/ {{0xbb484d09, 0x8d690542} },}, +/**/ {{{0xbf000010, 0x00155575} }, +/**/ {{0xbba56222, 0x37779c0a} },}, +/**/ {{{0xbef00008, 0x00055559} }, +/**/ {{0xbb955622, 0x22cccd5f} },}, +/**/ {{{0x00000000, 0x00000000} }, +/**/ {{0x00000000, 0x00000000} },}, +/**/ {{{0x3eeffff0, 0x000aaaa3} }, +/**/ {{0xbb8553bb, 0xbd110fec} },}, +/**/ {{{0x3effffe0, 0x002aaa6b} }, +/**/ {{0xbb953bbb, 0xe6661d42} },}, +/**/ {{{0x3f07ffdc, 0x0047ff5e} }, +/**/ {{0x3b484c90, 0x0d69020e} },}, +/**/ {{{0x3f0fffc0, 0x00aaa8ab} }, +/**/ {{0xbba3bbc1, 0x10fec82c} },}, +/**/ {{{0x3f13ffce, 0x00a6a83a} }, +/**/ {{0xbbb2e45f, 0x81546808} },}, +/**/ {{{0x3f17ffb8, 0x011ffaf0} }, +/**/ {{0x3b984c53, 0x4f3d9b6a} },}, +/**/ {{{0x3f1bff9e, 0x01c94bf5} }, +/**/ {{0xbbbd8990, 0xdaa368ee} },}, +/**/ {{{0x3f1fff80, 0x02aa9aab} }, +/**/ {{0x3b910e66, 0x78af0afc} },}, +/**/ {{{0x3f21ffaf, 0x01e5f330} }, +/**/ {{0xbbb1df8d, 0x26467402} },}, +/**/ {{{0x3f23ff9c, 0x029a9723} }, +/**/ {{0x3bc1b965, 0x303b23b1} },}, +/**/ {{{0x3f25ff87, 0x037738be} }, +/**/ {{0xbbb787a3, 0x53d3dc06} },}, +/**/ {{{0x3f27ff70, 0x047fd782} }, +/**/ {{0xbbced098, 0xa5c0aff0} },}, +/**/ {{{0x3f29ff57, 0x05b872e4} }, +/**/ {{0x3bcbadd4, 0x81c30d42} },}, +/**/ {{{0x3f2bff3c, 0x07250a51} }, +/**/ {{0xbbc89dd6, 0xd6bad8c1} },}, +/**/ {{{0x3f2dff1f, 0x08c99d24} }, +/**/ {{0x3bb12609, 0xaede8ad0} },}, +/**/ {{{0x3f2fff00, 0x0aaa2ab1} }, +/**/ {{0x3ba0bbc0, 0x4dc4e3dc} },}, +/**/ {{{0x3f30ff6f, 0x8665591f} }, +/**/ {{0xbbd013d3, 0x80357b54} },}, +/**/ {{{0x3f31ff5e, 0x07979982} }, +/**/ {{0xbbce0e70, 0x4817ebcd} },}, +/**/ {{{0x3f32ff4b, 0x88edd619} }, +/**/ {{0xbbd72b9e, 0xc582abc3} },}, +/**/ {{{0x3f33ff38, 0x0a6a0e74} }, +/**/ {{0x3bdb81fc, 0xb95bc1fe} },}, +/**/ {{{0x3f34ff23, 0x8c0e4220} }, +/**/ {{0x3bcaed12, 0x9b549aae} },}, +/**/ {{{0x3f35ff0e, 0x0ddc70a1} }, +/**/ {{0x3bacf6f3, 0xd97a3c05} },}, +/**/ {{{0x3f36fef7, 0x8fd69976} }, +/**/ {{0x3bab2dcf, 0x6f810a3c} },}, +/**/ {{{0x3f37fee0, 0x11febc18} }, +/**/ {{0x3bd2b9bc, 0xf5d3f323} },}, +/**/ {{{0x3f38fec7, 0x9456d7fb} }, +/**/ {{0xbbbfb258, 0x6eaa1d6a} },}, +/**/ {{{0x3f39feae, 0x16e0ec8b} }, +/**/ {{0xbbb6137a, 0xceeb34b1} },}, +/**/ {{{0x3f3afe93, 0x999ef930} }, +/**/ {{0xbbde70e0, 0xdc639b08} },}, +/**/ {{{0x3f3bfe78, 0x1c92fd4a} }, +/**/ {{0xbbc4ed10, 0x713cc126} },}, +/**/ {{{0x3f3cfe5b, 0x9fbef835} }, +/**/ {{0xbb873d63, 0xcc0e81bd} },}, +/**/ {{{0x3f3dfe3e, 0x2324e946} }, +/**/ {{0x3bc09164, 0x62dd5deb} },}, +/**/ {{{0x3f3efe1f, 0xa6c6cfcc} }, +/**/ {{0x3bdac2da, 0x3512d15c} },}, +/**/ {{{0x3f3ffe00, 0x2aa6ab11} }, +/**/ {{0x3b999e2b, 0x62cc632d} },}, +/**/ {{{0x3f407eef, 0xd7633d2c} }, +/**/ {{0xbbebc98b, 0x63ff6024} },}, +/**/ {{{0x3f40fedf, 0x19941e6e} }, +/**/ {{0xbbb194c2, 0xe0aa6338} },}, +/**/ {{{0x3f417ecd, 0xdbe6f8eb} }, +/**/ {{0x3be4241b, 0x57b0f571} },}, +/**/ {{{0x3f41febc, 0x1e5ccc3c} }, +/**/ {{0x3bdc657d, 0x895d3592} },}, +/**/ {{{0x3f427ea9, 0xe0f697f6} }, +/**/ {{0x3be35a5d, 0x1c0ec17c} },}, +/**/ {{{0x3f42fe97, 0x23b55bac} }, +/**/ {{0x3bd6cfb7, 0x3e538464} },}, +/**/ {{{0x3f437e83, 0xe69a16ed} }, +/**/ {{0x3bee96f7, 0x7cef2478} },}, +/**/ {{{0x3f43fe70, 0x29a5c947} }, +/**/ {{0xbbd4d578, 0xbf46e36a} },}, +/**/ {{{0x3f447e5b, 0xecd97242} }, +/**/ {{0xbbc9eb66, 0x3ff7dd44} },}, +/**/ {{{0x3f44fe47, 0x30361165} }, +/**/ {{0x3be400d7, 0x7e93f2fd} },}, +/**/ {{{0x3f457e31, 0xf3bca635} }, +/**/ {{0xbbe0e2a2, 0xd375017f} },}, +/**/ {{{0x3f45fe1c, 0x376e3031} }, +/**/ {{0xbbd524eb, 0x8a5ae7f6} },}, +/**/ {{{0x3f467e05, 0xfb4baed7} }, +/**/ {{0x3be204fb, 0x4e85c4e9} },}, +/**/ {{{0x3f46fdef, 0x3f5621a3} }, +/**/ {{0xbbdf09d7, 0x34886d52} },}, +/**/ {{{0x3f477dd8, 0x038e880b} }, +/**/ {{0xbbb8900e, 0x14e596a3} },}, +/**/ {{{0x3f47fdc0, 0x47f5e185} }, +/**/ {{0xbbebfa5c, 0x57d202d3} },}, +/**/ {{{0x3f487da8, 0x0c8d2d81} }, +/**/ {{0x3be2f6ae, 0xd68c0614} },}, +/**/ {{{0x3f48fd8f, 0x51556b70} }, +/**/ {{0xbbd0f4f2, 0xe08fd201} },}, +/**/ {{{0x3f497d76, 0x164f9abc} }, +/**/ {{0x3b5296b7, 0xa871af60} },}, +/**/ {{{0x3f49fd5c, 0x5b7cbace} }, +/**/ {{0x3beb6ed4, 0x9f17d42d} },}, +/**/ {{{0x3f4a7d42, 0x20ddcb0d} }, +/**/ {{0xbbcb1149, 0x67c30397} },}, +/**/ {{{0x3f4afd27, 0x6673cada} }, +/**/ {{0x3bd32225, 0x45da594f} },}, +/**/ {{{0x3f4b7d0c, 0x2c3fb996} }, +/**/ {{0xbbb68893, 0x208d4630} },}, +/**/ {{{0x3f4bfcf0, 0x7242969d} }, +/**/ {{0x3bc5db4d, 0x2b3efe1c} },}, +/**/ {{{0x3f4c7cd4, 0x387d6149} }, +/**/ {{0x3be46eff, 0xed57d98a} },}, +/**/ {{{0x3f4cfcb7, 0x7ef118f1} }, +/**/ {{0x3becc554, 0x06f300fb} },}, +/**/ {{{0x3f4d7c9a, 0x459ebce9} }, +/**/ {{0x3be1d251, 0x13638eb6} },}, +/**/ {{{0x3f4dfc7c, 0x8c874c82} }, +/**/ {{0xbbe863e9, 0xd57a176f} },}, +/**/ {{{0x3f4e7c5e, 0x53abc708} }, +/**/ {{0x3be2d95c, 0x9528e50d} },}, +/**/ {{{0x3f4efc3f, 0x9b0d2bc8} }, +/**/ {{0x3bd1e8e8, 0xa5f5b8b7} },}, +/**/ {{{0x3f4f7c20, 0x62ac7a09} }, +/**/ {{0x3b5c8123, 0x17802a46} },}, +/**/ {{{0x3f4ffc00, 0xaa8ab110} }, +/**/ {{0xbbe0fecb, 0xeb9b6cdb} },}, +/**/ {{{0x3f503df0, 0x3954680f} }, +/**/ {{0x3bdac89b, 0x1c693678} },}, +/**/ {{{0x3f507ddf, 0xdd83eb3a} }, +/**/ {{0xbbf638f6, 0x0a75ad5f} },}, +/**/ {{{0x3f50bdcf, 0x41d461a5} }, +/**/ {{0x3bfd4bc9, 0x45f05b10} },}, +/**/ {{{0x3f50fdbe, 0x66464aef} }, +/**/ {{0xbbbd0554, 0x6abbf59c} },}, +/**/ {{{0x3f513dad, 0x4ada26b1} }, +/**/ {{0x3be38c65, 0x6036fe6f} },}, +/**/ {{{0x3f517d9b, 0xef907485} }, +/**/ {{0x3bfdc8a1, 0xf158bbc3} },}, +/**/ {{{0x3f51bd8a, 0x5469b404} }, +/**/ {{0xbbdea231, 0x55632e3f} },}, +/**/ {{{0x3f51fd78, 0x796664c3} }, +/**/ {{0xbbe00849, 0x2edb73c2} },}, +/**/ {{{0x3f523d66, 0x5e870657} }, +/**/ {{0x3bfba943, 0x0789343e} },}, +/**/ {{{0x3f527d54, 0x03cc1855} }, +/**/ {{0x3bc5f644, 0xeafafc52} },}, +/**/ {{{0x3f52bd41, 0x69361a4e} }, +/**/ {{0xbbf2f743, 0xa4a6e79f} },}, +/**/ {{{0x3f52fd2e, 0x8ec58bd2} }, +/**/ {{0xbbd4f786, 0x5ceb1abf} },}, +/**/ {{{0x3f533d1b, 0x747aec71} }, +/**/ {{0xbbf369e3, 0x49dc497d} },}, +/**/ {{{0x3f537d08, 0x1a56bbb8} }, +/**/ {{0xbbfc5e6f, 0x3726b14a} },}, +/**/ {{{0x3f53bcf4, 0x80597933} }, +/**/ {{0xbbfe8b82, 0x808f75a7} },}, +/**/ {{{0x3f53fce0, 0xa683a46c} }, +/**/ {{0x3be02719, 0x9cd06ae6} },}, +/**/ {{{0x3f543ccc, 0x8cd5bced} }, +/**/ {{0x3bf9f98d, 0x758f80f8} },}, +/**/ {{{0x3f547cb8, 0x3350423e} }, +/**/ {{0xbbd79c3d, 0x48401f45} },}, +/**/ {{{0x3f54bca3, 0x99f3b3e4} }, +/**/ {{0xbbf422b8, 0x2fba8948} },}, +/**/ {{{0x3f54fc8e, 0xc0c09163} }, +/**/ {{0x3bf32cc1, 0xf4044be8} },}, +/**/ {{{0x3f553c79, 0xa7b75a40} }, +/**/ {{0xbbe72cac, 0xf2249008} },}, +/**/ {{{0x3f557c64, 0x4ed88dfb} }, +/**/ {{0xbbe7183c, 0x459a204f} },}, +/**/ {{{0x3f55bc4e, 0xb624ac14} }, +/**/ {{0x3bf8aa64, 0xba26d3d7} },}, +/**/ {{{0x3f55fc38, 0xdd9c340b} }, +/**/ {{0x3bdbb2ff, 0x45fa193c} },}, +/**/ {{{0x3f563c22, 0xc53fa55c} }, +/**/ {{0x3bd67249, 0x0484397b} },}, +/**/ {{{0x3f567c0c, 0x6d0f7f83} }, +/**/ {{0xbbd183d7, 0xf1e73188} },}, +/**/ {{{0x3f56bbf5, 0xd50c41fa} }, +/**/ {{0xbbef433d, 0x4ab68187} },}, +/**/ {{{0x3f56fbde, 0xfd366c39} }, +/**/ {{0x3be796b8, 0x66e09e58} },}, +/**/ {{{0x3f573bc7, 0xe58e7db8} }, +/**/ {{0x3bf65ec5, 0x81e6e7e6} },}, +/**/ {{{0x3f577bb0, 0x8e14f5ed} }, +/**/ {{0xbbdb944d, 0xa9463a9c} },}, +/**/ {{{0x3f57bb98, 0xf6ca544b} }, +/**/ {{0xbbc396ec, 0xc5eda344} },}, +/**/ {{{0x3f57fb81, 0x1faf1845} }, +/**/ {{0x3beb9e6d, 0xbb624f97} },}, +/**/ {{{0x3f583b69, 0x08c3c14d} }, +/**/ {{0xbbe6ee13, 0xe6295bf2} },}, +/**/ {{{0x3f587b50, 0xb208ced1} }, +/**/ {{0x3bfcf1a5, 0x6ca19875} },}, +/**/ {{{0x3f58bb38, 0x1b7ec041} }, +/**/ {{0x3bf2d181, 0x07b4fc7e} },}, +/**/ {{{0x3f58fb1f, 0x45261509} }, +/**/ {{0x3bc419c5, 0x21bad336} },}, +/**/ {{{0x3f593b06, 0x2eff4c94} }, +/**/ {{0xbbdc2a4c, 0x700b305b} },}, +/**/ {{{0x3f597aec, 0xd90ae64c} }, +/**/ {{0xbbfc53d3, 0xa23f359c} },}, +/**/ {{{0x3f59bad3, 0x43496198} }, +/**/ {{0x3bf0c270, 0xaed6b50f} },}, +/**/ {{{0x3f59fab9, 0x6dbb3de1} }, +/**/ {{0xbbf11464, 0x7a8be031} },}, +/**/ {{{0x3f5a3a9f, 0x5860fa8a} }, +/**/ {{0x3beae9e7, 0x470dbe32} },}, +/**/ {{{0x3f5a7a85, 0x033b16f8} }, +/**/ {{0x3bfc4721, 0xda1f8579} },}, +/**/ {{{0x3f5aba6a, 0x6e4a128e} }, +/**/ {{0xbbf41852, 0x029258ce} },}, +/**/ {{{0x3f5afa4f, 0x998e6cab} }, +/**/ {{0xbbf28584, 0x2eb18782} },}, +/**/ {{{0x3f5b3a34, 0x8508a4af} }, +/**/ {{0xbbea7970, 0x23241a2c} },}, +/**/ {{{0x3f5b7a19, 0x30b939f8} }, +/**/ {{0xbbf1d8db, 0x600551b6} },}, +/**/ {{{0x3f5bb9fd, 0x9ca0abe2} }, +/**/ {{0xbbeaa412, 0x8c26cc71} },}, +/**/ {{{0x3f5bf9e1, 0xc8bf79c8} }, +/**/ {{0xbbe7f81b, 0x30427cfc} },}, +/**/ {{{0x3f5c39c5, 0xb5162303} }, +/**/ {{0x3bd9ec5f, 0xd1f134e1} },}, +/**/ {{{0x3f5c79a9, 0x61a526eb} }, +/**/ {{0x3bff0cb0, 0x8980e47d} },}, +/**/ {{{0x3f5cb98c, 0xce6d04d7} }, +/**/ {{0x3bf35aca, 0xe84ca4e2} },}, +/**/ {{{0x3f5cf96f, 0xfb6e3c1b} }, +/**/ {{0x3bf9b1b8, 0x1b0bd69f} },}, +/**/ {{{0x3f5d3952, 0xe8a94c0b} }, +/**/ {{0x3be21310, 0x3ce51832} },}, +/**/ {{{0x3f5d7935, 0x961eb3f8} }, +/**/ {{0x3bf90786, 0x840c58ce} },}, +/**/ {{{0x3f5db918, 0x03cef334} }, +/**/ {{0xbbfe0048, 0xf2dfb3f4} },}, +/**/ {{{0x3f5df8fa, 0x31ba890b} }, +/**/ {{0x3bfcf652, 0x3e295bec} },}, +/**/ {{{0x3f5e38dc, 0x1fe1f4ce} }, +/**/ {{0xbbfc5ebe, 0x151c9300} },}, +/**/ {{{0x3f5e78bd, 0xce45b5c6} }, +/**/ {{0xbbef2cc4, 0x8a25b9c7} },}, +/**/ {{{0x3f5eb89f, 0x3ce64b3e} }, +/**/ {{0x3bfe6d27, 0xa6fea7bd} },}, +/**/ {{{0x3f5ef880, 0x6bc43481} }, +/**/ {{0xbbf68037, 0x914a6dab} },}, +/**/ {{{0x3f5f3861, 0x5adff0d4} }, +/**/ {{0xbbf1d2f3, 0xf909e0e6} },}, +/**/ {{{0x3f5f7842, 0x0a39ff7e} }, +/**/ {{0xbbf64661, 0xff1e1f71} },}, +/**/ {{{0x3f5fb822, 0x79d2dfc3} }, +/**/ {{0xbbd76ce8, 0x5a6f9e9a} },}, +/**/ {{{0x3f5ff802, 0xa9ab10e6} }, +/**/ {{0x3bfe29e3, 0xa153e3b2} },}, +/**/ {{{0x3f601bf1, 0x4ce18915} }, +/**/ {{0xbbe57c28, 0xa3a73044} },}, +/**/ {{{0x3f603be1, 0x250db166} }, +/**/ {{0x3c0fd271, 0xc1ad9590} },}, +/**/ {{{0x3f605bd0, 0xdd5a4107} }, +/**/ {{0x3bfe4b5d, 0xc424c676} },}, +/**/ {{{0x3f607bc0, 0x75c77796} }, +/**/ {{0xbc068804, 0xc0eff1ba} },}, +/**/ {{{0x3f609baf, 0xee5594b0} }, +/**/ {{0xbc0ff798, 0x51dbded5} },}, +/**/ {{{0x3f60bb9f, 0x4704d7f2} }, +/**/ {{0xbbf70ef4, 0x2d5aba70} },}, +/**/ {{{0x3f60db8e, 0x7fd580f9} }, +/**/ {{0xbbeccb65, 0x7ae804b5} },}, +/**/ {{{0x3f60fb7d, 0x98c7cf60} }, +/**/ {{0x3bfede2f, 0x1775134d} },}, +/**/ {{{0x3f611b6c, 0x91dc02c3} }, +/**/ {{0xbc04d41e, 0x91ca4a67} },}, +/**/ {{{0x3f613b5b, 0x6b125aba} }, +/**/ {{0x3bfe6d0c, 0x4a12201d} },}, +/**/ {{{0x3f615b4a, 0x246b16e0} }, +/**/ {{0x3bfe507d, 0x4d4238d3} },}, +/**/ {{{0x3f617b38, 0xbde676cd} }, +/**/ {{0x3bfe0272, 0x0640462a} },}, +/**/ {{{0x3f619b27, 0x3784ba19} }, +/**/ {{0x3bd94ab3, 0x02285659} },}, +/**/ {{{0x3f61bb15, 0x9146205b} }, +/**/ {{0xbbff1e2e, 0x1cc35b7b} },}, +/**/ {{{0x3f61db03, 0xcb2ae929} }, +/**/ {{0xbc03ee8e, 0x12f6bf8d} },}, +/**/ {{{0x3f61faf1, 0xe5335418} }, +/**/ {{0x3c0bae5f, 0x7b7d619b} },}, +/**/ {{{0x3f621adf, 0xdf5fa0bf} }, +/**/ {{0xbbf5546a, 0xb3b731b0} },}, +/**/ {{{0x3f623acd, 0xb9b00eb0} }, +/**/ {{0xbbafb2b0, 0x105fd253} },}, +/**/ {{{0x3f625abb, 0x7424dd7f} }, +/**/ {{0x3c011647, 0xca53444b} },}, +/**/ {{{0x3f627aa9, 0x0ebe4cbf} }, +/**/ {{0x3c01678f, 0x592f3be8} },}, +/**/ {{{0x3f629a96, 0x897c9c02} }, +/**/ {{0xbbef2b12, 0x4347451d} },}, +/**/ {{{0x3f62ba83, 0xe4600ad8} }, +/**/ {{0x3bfb5bb7, 0xb2a477bc} },}, +/**/ {{{0x3f62da71, 0x1f68d8d3} }, +/**/ {{0xbc0590e1, 0x7a5822e4} },}, +/**/ {{{0x3f62fa5e, 0x3a974581} }, +/**/ {{0xbbf0f2e5, 0x53123101} },}, +/**/ {{{0x3f631a4b, 0x35eb9072} }, +/**/ {{0xbc018db4, 0x0e3f5fde} },}, +/**/ {{{0x3f633a38, 0x1165f933} }, +/**/ {{0x3c0921d5, 0x8d0afb38} },}, +/**/ {{{0x3f635a24, 0xcd06bf53} }, +/**/ {{0x3c01f6ba, 0xb5791b80} },}, +/**/ {{{0x3f637a11, 0x68ce225e} }, +/**/ {{0x3bde2af8, 0xa1894236} },}, +/**/ {{{0x3f6399fd, 0xe4bc61e0} }, +/**/ {{0xbc062a48, 0xd0f06ff3} },}, +/**/ {{{0x3f63b9ea, 0x40d1bd63} }, +/**/ {{0x3bffc80c, 0x4b4f9c11} },}, +/**/ {{{0x3f63d9d6, 0x7d0e7473} }, +/**/ {{0x3c02219b, 0x6a92c891} },}, +/**/ {{{0x3f63f9c2, 0x9972c699} }, +/**/ {{0x3c0d3590, 0x790ade9e} },}, +/**/ {{{0x3f6419ae, 0x95fef35f} }, +/**/ {{0xbc01c279, 0x792a458c} },}, +/**/ {{{0x3f64399a, 0x72b33a4b} }, +/**/ {{0x3c02ce64, 0x327bffae} },}, +/**/ {{{0x3f645986, 0x2f8fdae7} }, +/**/ {{0xbc070aec, 0xd231155c} },}, +/**/ {{{0x3f647971, 0xcc9514b7} }, +/**/ {{0x3c0f373d, 0xe4bbf776} },}, +/**/ {{{0x3f64995d, 0x49c32744} }, +/**/ {{0xbbf6d7e5, 0xbf22b2a7} },}, +/**/ {{{0x3f64b948, 0xa71a5211} }, +/**/ {{0xbbedec69, 0x64fe2936} },}, +/**/ {{{0x3f64d933, 0xe49ad4a3} }, +/**/ {{0x3bf5fc4b, 0xabee4257} },}, +/**/ {{{0x3f64f91f, 0x0244ee7e} }, +/**/ {{0x3c0c6fe3, 0x3cd1474f} },}, +/**/ {{{0x3f65190a, 0x0018df26} }, +/**/ {{0xbc023957, 0xd11e7fa5} },}, +/**/ {{{0x3f6538f4, 0xde16e61b} }, +/**/ {{0x3c006c31, 0x55380346} },}, +/**/ {{{0x3f6558df, 0x9c3f42e1} }, +/**/ {{0xbc09b7d4, 0xc4a5134c} },}, +/**/ {{{0x3f6578ca, 0x3a9234f7} }, +/**/ {{0xbc0e3f10, 0x2772c19c} },}, +/**/ {{{0x3f6598b4, 0xb90ffbdd} }, +/**/ {{0x3be6f110, 0x5592b468} },}, +/**/ {{{0x3f65b89f, 0x17b8d714} }, +/**/ {{0xbc0a5fea, 0xb251ace2} },}, +/**/ {{{0x3f65d889, 0x568d0619} }, +/**/ {{0xbc0aacc9, 0x315da285} },}, +/**/ {{{0x3f65f873, 0x758cc86a} }, +/**/ {{0xbbeb0782, 0xba64d81a} },}, +/**/ {{{0x3f66185d, 0x74b85d85} }, +/**/ {{0xbc09b459, 0x8e1eb3fa} },}, +/**/ {{{0x3f663847, 0x541004e5} }, +/**/ {{0x3bce9c22, 0x1d86e863} },}, +/**/ {{{0x3f665831, 0x1393fe07} }, +/**/ {{0xbbfbeb77, 0xcf37ee90} },}, +/**/ {{{0x3f66781a, 0xb3448865} }, +/**/ {{0xbc02dc68, 0xc252e3c9} },}, +/**/ {{{0x3f669804, 0x3321e379} }, +/**/ {{0xbbe73a0b, 0xb40b3741} },}, + }; + +#else +#ifdef LITTLE_ENDI + static const number + Iu[182] = { /* 1/ui */ +/**/ {{0xd1537290, 0x3ff6a13c} }, +/**/ {{0x16816817, 0x3ff68168} }, +/**/ {{0x6a5122f9, 0x3ff661ec} }, +/**/ {{0x590b2164, 0x3ff642c8} }, +/**/ {{0x77016240, 0x3ff623fa} }, +/**/ {{0x60581606, 0x3ff60581} }, +/**/ {{0xb8d015e7, 0x3ff5e75b} }, +/**/ {{0x2b931057, 0x3ff5c988} }, +/**/ {{0x6b015ac0, 0x3ff5ac05} }, +/**/ {{0x308158ed, 0x3ff58ed2} }, +/**/ {{0x3c506b3a, 0x3ff571ed} }, +/**/ {{0x55555555, 0x3ff55555} }, +/**/ {{0x48f40feb, 0x3ff53909} }, +/**/ {{0xeae2f815, 0x3ff51d07} }, +/**/ {{0x15015015, 0x3ff50150} }, +/**/ {{0xa72f0539, 0x3ff4e5e0} }, +/**/ {{0x8725af6e, 0x3ff4cab8} }, +/**/ {{0xa052bf5b, 0x3ff4afd6} }, +/**/ {{0xe3b2d067, 0x3ff49539} }, +/**/ {{0x47ae147b, 0x3ff47ae1} }, +/**/ {{0xc7f5cf9a, 0x3ff460cb} }, +/**/ {{0x6562d9fb, 0x3ff446f8} }, +/**/ {{0x25d51f87, 0x3ff42d66} }, +/**/ {{0x14141414, 0x3ff41414} }, +/**/ {{0x3fb013fb, 0x3ff3fb01} }, +/**/ {{0xbce4a902, 0x3ff3e22c} }, +/**/ {{0xa47babe7, 0x3ff3c995} }, +/**/ {{0x13b13b14, 0x3ff3b13b} }, +/**/ {{0x2c187f63, 0x3ff3991c} }, +/**/ {{0x13813814, 0x3ff38138} }, +/**/ {{0xf3de0748, 0x3ff3698d} }, +/**/ {{0xfb2b78c1, 0x3ff3521c} }, +/**/ {{0x5b57bcb2, 0x3ff33ae4} }, +/**/ {{0x4a2b10bf, 0x3ff323e3} }, +/**/ {{0x0130d190, 0x3ff30d19} }, +/**/ {{0xbda12f68, 0x3ff2f684} }, +/**/ {{0xc04b8097, 0x3ff2e025} }, +/**/ {{0x4d812ca0, 0x3ff2c9fb} }, +/**/ {{0xad012b40, 0x3ff2b404} }, +/**/ {{0x29e4129e, 0x3ff29e41} }, +/**/ {{0x1288b013, 0x3ff288b0} }, +/**/ {{0xb8812735, 0x3ff27350} }, +/**/ {{0x708092f1, 0x3ff25e22} }, +/**/ {{0x92492492, 0x3ff24924} }, +/**/ {{0x789abcdf, 0x3ff23456} }, +/**/ {{0x8121fb78, 0x3ff21fb7} }, +/**/ {{0x0c67c0d9, 0x3ff20b47} }, +/**/ {{0x7dc11f70, 0x3ff1f704} }, +/**/ {{0x3b3fb874, 0x3ff1e2ef} }, +/**/ {{0xada2811d, 0x3ff1cf06} }, +/**/ {{0x4046ed29, 0x3ff1bb4a} }, +/**/ {{0x611a7b96, 0x3ff1a7b9} }, +/**/ {{0x808ca29c, 0x3ff19453} }, +/**/ {{0x11811812, 0x3ff18118} }, +/**/ {{0x89427379, 0x3ff16e06} }, +/**/ {{0x5f75270d, 0x3ff15b1e} }, +/**/ {{0x0e0acd3b, 0x3ff1485f} }, +/**/ {{0x1135c811, 0x3ff135c8} }, +/**/ {{0xe75d3033, 0x3ff12358} }, +/**/ {{0x11111111, 0x3ff11111} }, +/**/ {{0x10fef011, 0x3ff0fef0} }, +/**/ {{0x6be69c90, 0x3ff0ecf5} }, +/**/ {{0xa88f4696, 0x3ff0db20} }, +/**/ {{0x4fbcda3b, 0x3ff0c971} }, +/**/ {{0xec259dc8, 0x3ff0b7e6} }, +/**/ {{0x0a6810a7, 0x3ff0a681} }, +/**/ {{0x39010954, 0x3ff0953f} }, +/**/ {{0x08421084, 0x3ff08421} }, +/**/ {{0x0a47f7c6, 0x3ff07326} }, +/**/ {{0xd2f1a9fc, 0x3ff0624d} }, +/**/ {{0xf7d73404, 0x3ff05197} }, +/**/ {{0x10410410, 0x3ff04104} }, +/**/ {{0xb51f5e1a, 0x3ff03091} }, +/**/ {{0x81020408, 0x3ff02040} }, +/**/ {{0x10101010, 0x3ff01010} }, +/**/ {{0x00000000, 0x3ff00000} }, +/**/ {{0xe01fe020, 0x3fefe01f} }, +/**/ {{0x01fc07f0, 0x3fefc07f} }, +/**/ {{0xaa01fa12, 0x3fefa11c} }, +/**/ {{0x1f81f820, 0x3fef81f8} }, +/**/ {{0xaca0dbb5, 0x3fef6310} }, +/**/ {{0x9e4a4271, 0x3fef4465} }, +/**/ {{0x44230ab5, 0x3fef25f6} }, +/**/ {{0xf07c1f08, 0x3fef07c1} }, +/**/ {{0xf8458e02, 0x3feee9c7} }, +/**/ {{0xb301ecc0, 0x3feecc07} }, +/**/ {{0x7aba01eb, 0x3feeae80} }, +/**/ {{0xabf0b767, 0x3fee9131} }, +/**/ {{0xa59750e4, 0x3fee741a} }, +/**/ {{0xc901e574, 0x3fee573a} }, +/**/ {{0x79dc1a73, 0x3fee3a91} }, +/**/ {{0x1e1e1e1e, 0x3fee1e1e} }, +/**/ {{0x1e01e01e, 0x3fee01e0} }, +/**/ {{0xe3f8868a, 0x3fede5d6} }, +/**/ {{0xdca01dca, 0x3fedca01} }, +/**/ {{0x76b981db, 0x3fedae60} }, +/**/ {{0x231e7f8a, 0x3fed92f2} }, +/**/ {{0x54b82c34, 0x3fed77b6} }, +/**/ {{0x807572b2, 0x3fed5cac} }, +/**/ {{0x1d41d41d, 0x3fed41d4} }, +/**/ {{0xa3fc5b1a, 0x3fed272c} }, +/**/ {{0x8f6ec074, 0x3fed0cb5} }, +/**/ {{0x5c44bfc6, 0x3fecf26e} }, +/**/ {{0x89039b0b, 0x3fecd856} }, +/**/ {{0x9601cbe7, 0x3fecbe6d} }, +/**/ {{0x055ee191, 0x3feca4b3} }, +/**/ {{0x5afb8a42, 0x3fec8b26} }, +/**/ {{0x1c71c71c, 0x3fec71c7} }, +/**/ {{0xd10d4986, 0x3fec5894} }, +/**/ {{0x01c3f8f0, 0x3fec3f8f} }, +/**/ {{0x392ea01c, 0x3fec26b5} }, +/**/ {{0x0381c0e0, 0x3fec0e07} }, +/**/ {{0xee868d8b, 0x3febf583} }, +/**/ {{0x899406f7, 0x3febdd2b} }, +/**/ {{0x65883e7b, 0x3febc4fd} }, +/**/ {{0x14c1bad0, 0x3febacf9} }, +/**/ {{0x2b18ff23, 0x3feb951e} }, +/**/ {{0x3dda338b, 0x3feb7d6c} }, +/**/ {{0xe3beee05, 0x3feb65e2} }, +/**/ {{0xb4e81b4f, 0x3feb4e81} }, +/**/ {{0x4ad806ce, 0x3feb3748} }, +/**/ {{0x406c80d9, 0x3feb2036} }, +/**/ {{0x31d922a4, 0x3feb094b} }, +/**/ {{0xbca1af28, 0x3feaf286} }, +/**/ {{0x7f94905e, 0x3feadbe8} }, +/**/ {{0x1ac5701b, 0x3feac570} }, +/**/ {{0x2f87ebfd, 0x3feaaf1d} }, +/**/ {{0x606a63be, 0x3fea98ef} }, +/**/ {{0x5130e159, 0x3fea82e6} }, +/**/ {{0xa6d01a6d, 0x3fea6d01} }, +/**/ {{0x07688a4a, 0x3fea5741} }, +/**/ {{0x1a41a41a, 0x3fea41a4} }, +/**/ {{0x87c51ca0, 0x3fea2c2a} }, +/**/ {{0xf97a4b02, 0x3fea16d3} }, +/**/ {{0x1a01a01a, 0x3fea01a0} }, +/**/ {{0x951033d9, 0x3fe9ec8e} }, +/**/ {{0x176b682d, 0x3fe9d79f} }, +/**/ {{0x4ee4a102, 0x3fe9c2d1} }, +/**/ {{0xea5510da, 0x3fe9ae24} }, +/**/ {{0x9999999a, 0x3fe99999} }, +/**/ {{0x0d8ec0ff, 0x3fe9852f} }, +/**/ {{0xf80cb872, 0x3fe970e4} }, +/**/ {{0x0be377ae, 0x3fe95cbb} }, +/**/ {{0xfcd6e9e0, 0x3fe948b0} }, +/**/ {{0x7f9b2ce6, 0x3fe934c6} }, +/**/ {{0x49d0e229, 0x3fe920fb} }, +/**/ {{0x120190d5, 0x3fe90d4f} }, +/**/ {{0x8f9c18fa, 0x3fe8f9c1} }, +/**/ {{0x7af1373f, 0x3fe8e652} }, +/**/ {{0x8d3018d3, 0x3fe8d301} }, +/**/ {{0x8062ff3a, 0x3fe8bfce} }, +/**/ {{0x0f6bf3aa, 0x3fe8acb9} }, +/**/ {{0xf601899c, 0x3fe899c0} }, +/**/ {{0xf0abb04a, 0x3fe886e5} }, +/**/ {{0xbcc092b9, 0x3fe87427} }, +/**/ {{0x18618618, 0x3fe86186} }, +/**/ {{0xc2780614, 0x3fe84f00} }, +/**/ {{0x7ab2bedd, 0x3fe83c97} }, +/**/ {{0x0182a4a0, 0x3fe82a4a} }, +/**/ {{0x18181818, 0x3fe81818} }, +/**/ {{0x80601806, 0x3fe80601} }, +/**/ {{0xfd017f40, 0x3fe7f405} }, +/**/ {{0x515a4f1d, 0x3fe7e225} }, +/**/ {{0x417d05f4, 0x3fe7d05f} }, +/**/ {{0x922e017c, 0x3fe7beb3} }, +/**/ {{0x08e0ecc3, 0x3fe7ad22} }, +/**/ {{0x6bb6398b, 0x3fe79baa} }, +/**/ {{0x8178a4c8, 0x3fe78a4c} }, +/**/ {{0x119ac60d, 0x3fe77908} }, +/**/ {{0xe434a9b1, 0x3fe767dc} }, +/**/ {{0xc201756d, 0x3fe756ca} }, +/**/ {{0x745d1746, 0x3fe745d1} }, +/**/ {{0xc541fe8d, 0x3fe734f0} }, +/**/ {{0x7f46debc, 0x3fe72428} }, +/**/ {{0x6d9c7c09, 0x3fe71378} }, +/**/ {{0x5c0b8170, 0x3fe702e0} }, +/**/ {{0x16f26017, 0x3fe6f260} }, +/**/ {{0x6b4337c7, 0x3fe6e1f7} }, +/**/ {{0x2681c861, 0x3fe6d1a6} }, +/**/ {{0x16c16c17, 0x3fe6c16c} }, +/**/ {{0x0aa31a3d, 0x3fe6b149} }, +/**/ {{0xd1537290, 0x3fe6a13c} }, + }; + + static const number + Iv[362] = { /* 1/vj */ +/**/ {{0xee93bfe3, 0x3ff00b47} }, +/**/ {{0xd80c106f, 0x3ff00b37} }, +/**/ {{0xc1a4a47a, 0x3ff00b27} }, +/**/ {{0xab5d7ba2, 0x3ff00b17} }, +/**/ {{0x95369587, 0x3ff00b07} }, +/**/ {{0x7f2ff1c6, 0x3ff00af7} }, +/**/ {{0x69499000, 0x3ff00ae7} }, +/**/ {{0x53836fd3, 0x3ff00ad7} }, +/**/ {{0x3ddd90dd, 0x3ff00ac7} }, +/**/ {{0x2857f2bf, 0x3ff00ab7} }, +/**/ {{0x12f29517, 0x3ff00aa7} }, +/**/ {{0xfdad7784, 0x3ff00a96} }, +/**/ {{0xe88899a5, 0x3ff00a86} }, +/**/ {{0xd383fb19, 0x3ff00a76} }, +/**/ {{0xbe9f9b7f, 0x3ff00a66} }, +/**/ {{0xa9db7a76, 0x3ff00a56} }, +/**/ {{0x9537979d, 0x3ff00a46} }, +/**/ {{0x80b3f293, 0x3ff00a36} }, +/**/ {{0x6c508af8, 0x3ff00a26} }, +/**/ {{0x580d606a, 0x3ff00a16} }, +/**/ {{0x43ea7288, 0x3ff00a06} }, +/**/ {{0x2fe7c0f1, 0x3ff009f6} }, +/**/ {{0x1c054b44, 0x3ff009e6} }, +/**/ {{0x08431122, 0x3ff009d6} }, +/**/ {{0xf4a11227, 0x3ff009c5} }, +/**/ {{0xe11f4df4, 0x3ff009b5} }, +/**/ {{0xcdbdc428, 0x3ff009a5} }, +/**/ {{0xba7c7462, 0x3ff00995} }, +/**/ {{0xa75b5e40, 0x3ff00985} }, +/**/ {{0x945a8162, 0x3ff00975} }, +/**/ {{0x8179dd68, 0x3ff00965} }, +/**/ {{0x6eb971ef, 0x3ff00955} }, +/**/ {{0x5c193e98, 0x3ff00945} }, +/**/ {{0x49994301, 0x3ff00935} }, +/**/ {{0x37397eca, 0x3ff00925} }, +/**/ {{0x24f9f192, 0x3ff00915} }, +/**/ {{0x12da9af7, 0x3ff00905} }, +/**/ {{0x00db7a99, 0x3ff008f5} }, +/**/ {{0xeefc9018, 0x3ff008e4} }, +/**/ {{0xdd3ddb12, 0x3ff008d4} }, +/**/ {{0xcb9f5b26, 0x3ff008c4} }, +/**/ {{0xba210ff4, 0x3ff008b4} }, +/**/ {{0xa8c2f91a, 0x3ff008a4} }, +/**/ {{0x97851639, 0x3ff00894} }, +/**/ {{0x866766ef, 0x3ff00884} }, +/**/ {{0x7569eadb, 0x3ff00874} }, +/**/ {{0x648ca19d, 0x3ff00864} }, +/**/ {{0x53cf8ad3, 0x3ff00854} }, +/**/ {{0x4332a61e, 0x3ff00844} }, +/**/ {{0x32b5f31b, 0x3ff00834} }, +/**/ {{0x2259716c, 0x3ff00824} }, +/**/ {{0x121d20ad, 0x3ff00814} }, +/**/ {{0x02010080, 0x3ff00804} }, +/**/ {{0xf2051083, 0x3ff007f3} }, +/**/ {{0xe2295056, 0x3ff007e3} }, +/**/ {{0xd26dbf97, 0x3ff007d3} }, +/**/ {{0xc2d25de5, 0x3ff007c3} }, +/**/ {{0xb3572ae2, 0x3ff007b3} }, +/**/ {{0xa3fc262a, 0x3ff007a3} }, +/**/ {{0x94c14f5f, 0x3ff00793} }, +/**/ {{0x85a6a61e, 0x3ff00783} }, +/**/ {{0x76ac2a08, 0x3ff00773} }, +/**/ {{0x67d1dabb, 0x3ff00763} }, +/**/ {{0x5917b7d7, 0x3ff00753} }, +/**/ {{0x4a7dc0fb, 0x3ff00743} }, +/**/ {{0x3c03f5c7, 0x3ff00733} }, +/**/ {{0x2daa55da, 0x3ff00723} }, +/**/ {{0x1f70e0d3, 0x3ff00713} }, +/**/ {{0x11579652, 0x3ff00703} }, +/**/ {{0x035e75f5, 0x3ff006f3} }, +/**/ {{0xf5857f5d, 0x3ff006e2} }, +/**/ {{0xe7ccb228, 0x3ff006d2} }, +/**/ {{0xda340df6, 0x3ff006c2} }, +/**/ {{0xccbb9266, 0x3ff006b2} }, +/**/ {{0xbf633f18, 0x3ff006a2} }, +/**/ {{0xb22b13ab, 0x3ff00692} }, +/**/ {{0xa5130fbe, 0x3ff00682} }, +/**/ {{0x981b32f1, 0x3ff00672} }, +/**/ {{0x8b437ce4, 0x3ff00662} }, +/**/ {{0x7e8bed35, 0x3ff00652} }, +/**/ {{0x71f48383, 0x3ff00642} }, +/**/ {{0x657d3f70, 0x3ff00632} }, +/**/ {{0x59262098, 0x3ff00622} }, +/**/ {{0x4cef269e, 0x3ff00612} }, +/**/ {{0x40d8511e, 0x3ff00602} }, +/**/ {{0x34e19fba, 0x3ff005f2} }, +/**/ {{0x290b1211, 0x3ff005e2} }, +/**/ {{0x1d54a7c1, 0x3ff005d2} }, +/**/ {{0x11be606b, 0x3ff005c2} }, +/**/ {{0x06483bad, 0x3ff005b2} }, +/**/ {{0xfaf23928, 0x3ff005a1} }, +/**/ {{0xefbc587b, 0x3ff00591} }, +/**/ {{0xe4a69945, 0x3ff00581} }, +/**/ {{0xd9b0fb25, 0x3ff00571} }, +/**/ {{0xcedb7dbc, 0x3ff00561} }, +/**/ {{0xc42620a9, 0x3ff00551} }, +/**/ {{0xb990e38b, 0x3ff00541} }, +/**/ {{0xaf1bc601, 0x3ff00531} }, +/**/ {{0xa4c6c7ac, 0x3ff00521} }, +/**/ {{0x9a91e82a, 0x3ff00511} }, +/**/ {{0x907d271c, 0x3ff00501} }, +/**/ {{0x86888421, 0x3ff004f1} }, +/**/ {{0x7cb3fed8, 0x3ff004e1} }, +/**/ {{0x72ff96e0, 0x3ff004d1} }, +/**/ {{0x696b4bdb, 0x3ff004c1} }, +/**/ {{0x5ff71d66, 0x3ff004b1} }, +/**/ {{0x56a30b21, 0x3ff004a1} }, +/**/ {{0x4d6f14ad, 0x3ff00491} }, +/**/ {{0x445b39a8, 0x3ff00481} }, +/**/ {{0x3b6779b3, 0x3ff00471} }, +/**/ {{0x3293d46c, 0x3ff00461} }, +/**/ {{0x29e04974, 0x3ff00451} }, +/**/ {{0x214cd869, 0x3ff00441} }, +/**/ {{0x18d980ed, 0x3ff00431} }, +/**/ {{0x1086429d, 0x3ff00421} }, +/**/ {{0x08531d1a, 0x3ff00411} }, +/**/ {{0x00401004, 0x3ff00401} }, +/**/ {{0xf84d1afa, 0x3ff003f0} }, +/**/ {{0xf07a3d9b, 0x3ff003e0} }, +/**/ {{0xe8c77787, 0x3ff003d0} }, +/**/ {{0xe134c85f, 0x3ff003c0} }, +/**/ {{0xd9c22fc1, 0x3ff003b0} }, +/**/ {{0xd26fad4d, 0x3ff003a0} }, +/**/ {{0xcb3d40a3, 0x3ff00390} }, +/**/ {{0xc42ae963, 0x3ff00380} }, +/**/ {{0xbd38a72c, 0x3ff00370} }, +/**/ {{0xb666799e, 0x3ff00360} }, +/**/ {{0xafb46058, 0x3ff00350} }, +/**/ {{0xa9225afa, 0x3ff00340} }, +/**/ {{0xa2b06925, 0x3ff00330} }, +/**/ {{0x9c5e8a77, 0x3ff00320} }, +/**/ {{0x962cbe90, 0x3ff00310} }, +/**/ {{0x901b0511, 0x3ff00300} }, +/**/ {{0x8a295d98, 0x3ff002f0} }, +/**/ {{0x8457c7c6, 0x3ff002e0} }, +/**/ {{0x7ea6433a, 0x3ff002d0} }, +/**/ {{0x7914cf94, 0x3ff002c0} }, +/**/ {{0x73a36c73, 0x3ff002b0} }, +/**/ {{0x6e521978, 0x3ff002a0} }, +/**/ {{0x6920d642, 0x3ff00290} }, +/**/ {{0x640fa271, 0x3ff00280} }, +/**/ {{0x5f1e7da5, 0x3ff00270} }, +/**/ {{0x5a4d677d, 0x3ff00260} }, +/**/ {{0x559c5f9a, 0x3ff00250} }, +/**/ {{0x510b659a, 0x3ff00240} }, +/**/ {{0x4c9a791f, 0x3ff00230} }, +/**/ {{0x484999c6, 0x3ff00220} }, +/**/ {{0x4418c732, 0x3ff00210} }, +/**/ {{0x40080100, 0x3ff00200} }, +/**/ {{0x3c1746d2, 0x3ff001f0} }, +/**/ {{0x38469846, 0x3ff001e0} }, +/**/ {{0x3495f4fd, 0x3ff001d0} }, +/**/ {{0x31055c96, 0x3ff001c0} }, +/**/ {{0x2d94ceb2, 0x3ff001b0} }, +/**/ {{0x2a444af0, 0x3ff001a0} }, +/**/ {{0x2713d0ef, 0x3ff00190} }, +/**/ {{0x24036051, 0x3ff00180} }, +/**/ {{0x2112f8b4, 0x3ff00170} }, +/**/ {{0x1e4299b9, 0x3ff00160} }, +/**/ {{0x1b9242ff, 0x3ff00150} }, +/**/ {{0x1901f427, 0x3ff00140} }, +/**/ {{0x1691acd0, 0x3ff00130} }, +/**/ {{0x14416c9a, 0x3ff00120} }, +/**/ {{0x12113324, 0x3ff00110} }, +/**/ {{0x10010010, 0x3ff00100} }, +/**/ {{0x0e10d2fc, 0x3ff000f0} }, +/**/ {{0x0c40ab89, 0x3ff000e0} }, +/**/ {{0x0a908957, 0x3ff000d0} }, +/**/ {{0x09006c05, 0x3ff000c0} }, +/**/ {{0x07905334, 0x3ff000b0} }, +/**/ {{0x06403e82, 0x3ff000a0} }, +/**/ {{0x05102d92, 0x3ff00090} }, +/**/ {{0x04002001, 0x3ff00080} }, +/**/ {{0x03101571, 0x3ff00070} }, +/**/ {{0x02400d80, 0x3ff00060} }, +/**/ {{0x019007d0, 0x3ff00050} }, +/**/ {{0x01000400, 0x3ff00040} }, +/**/ {{0x009001b0, 0x3ff00030} }, +/**/ {{0x00400080, 0x3ff00020} }, +/**/ {{0x00100010, 0x3ff00010} }, +/**/ {{0x00000000, 0x3ff00000} }, +/**/ {{0x001fffe0, 0x3fefffe0} }, +/**/ {{0x007fff00, 0x3fefffc0} }, +/**/ {{0x011ffca0, 0x3fefffa0} }, +/**/ {{0x01fff800, 0x3fefff80} }, +/**/ {{0x031ff060, 0x3fefff60} }, +/**/ {{0x047fe501, 0x3fefff40} }, +/**/ {{0x061fd521, 0x3fefff20} }, +/**/ {{0x07ffc002, 0x3fefff00} }, +/**/ {{0x0a1fa4e3, 0x3feffee0} }, +/**/ {{0x0c7f8305, 0x3feffec0} }, +/**/ {{0x0f1f59a7, 0x3feffea0} }, +/**/ {{0x11ff280a, 0x3feffe80} }, +/**/ {{0x151eed6e, 0x3feffe60} }, +/**/ {{0x187ea913, 0x3feffe40} }, +/**/ {{0x1c1e5a39, 0x3feffe20} }, +/**/ {{0x1ffe0020, 0x3feffe00} }, +/**/ {{0x241d9a09, 0x3feffde0} }, +/**/ {{0x287d2733, 0x3feffdc0} }, +/**/ {{0x2d1ca6e0, 0x3feffda0} }, +/**/ {{0x31fc184e, 0x3feffd80} }, +/**/ {{0x371b7abf, 0x3feffd60} }, +/**/ {{0x3c7acd72, 0x3feffd40} }, +/**/ {{0x421a0fa9, 0x3feffd20} }, +/**/ {{0x47f940a2, 0x3feffd00} }, +/**/ {{0x4e185f9f, 0x3feffce0} }, +/**/ {{0x54776bdf, 0x3feffcc0} }, +/**/ {{0x5b1664a3, 0x3feffca0} }, +/**/ {{0x61f5492c, 0x3feffc80} }, +/**/ {{0x691418b9, 0x3feffc60} }, +/**/ {{0x7072d28b, 0x3feffc40} }, +/**/ {{0x781175e3, 0x3feffc20} }, +/**/ {{0x7ff00200, 0x3feffc00} }, +/**/ {{0x880e7623, 0x3feffbe0} }, +/**/ {{0x906cd18c, 0x3feffbc0} }, +/**/ {{0x990b137c, 0x3feffba0} }, +/**/ {{0xa1e93b34, 0x3feffb80} }, +/**/ {{0xab0747f3, 0x3feffb60} }, +/**/ {{0xb46538fa, 0x3feffb40} }, +/**/ {{0xbe030d89, 0x3feffb20} }, +/**/ {{0xc7e0c4e1, 0x3feffb00} }, +/**/ {{0xd1fe5e43, 0x3feffae0} }, +/**/ {{0xdc5bd8ee, 0x3feffac0} }, +/**/ {{0xe6f93424, 0x3feffaa0} }, +/**/ {{0xf1d66f25, 0x3feffa80} }, +/**/ {{0xfcf38931, 0x3feffa60} }, +/**/ {{0x08508189, 0x3feffa41} }, +/**/ {{0x13ed576d, 0x3feffa21} }, +/**/ {{0x1fca0a1e, 0x3feffa01} }, +/**/ {{0x2be698dd, 0x3feff9e1} }, +/**/ {{0x384302e9, 0x3feff9c1} }, +/**/ {{0x44df4785, 0x3feff9a1} }, +/**/ {{0x51bb65ef, 0x3feff981} }, +/**/ {{0x5ed75d6a, 0x3feff961} }, +/**/ {{0x6c332d34, 0x3feff941} }, +/**/ {{0x79ced490, 0x3feff921} }, +/**/ {{0x87aa52be, 0x3feff901} }, +/**/ {{0x95c5a6fe, 0x3feff8e1} }, +/**/ {{0xa420d091, 0x3feff8c1} }, +/**/ {{0xb2bbceb7, 0x3feff8a1} }, +/**/ {{0xc196a0b2, 0x3feff881} }, +/**/ {{0xd0b145c2, 0x3feff861} }, +/**/ {{0xe00bbd28, 0x3feff841} }, +/**/ {{0xefa60624, 0x3feff821} }, +/**/ {{0xff801ff8, 0x3feff801} }, +/**/ {{0x0f9a09e3, 0x3feff7e2} }, +/**/ {{0x1ff3c328, 0x3feff7c2} }, +/**/ {{0x308d4b05, 0x3feff7a2} }, +/**/ {{0x4166a0bd, 0x3feff782} }, +/**/ {{0x527fc390, 0x3feff762} }, +/**/ {{0x63d8b2bf, 0x3feff742} }, +/**/ {{0x75716d8b, 0x3feff722} }, +/**/ {{0x8749f334, 0x3feff702} }, +/**/ {{0x996242fb, 0x3feff6e2} }, +/**/ {{0xabba5c21, 0x3feff6c2} }, +/**/ {{0xbe523de8, 0x3feff6a2} }, +/**/ {{0xd129e78f, 0x3feff682} }, +/**/ {{0xe4415858, 0x3feff662} }, +/**/ {{0xf7988f84, 0x3feff642} }, +/**/ {{0x0b2f8c54, 0x3feff623} }, +/**/ {{0x1f064e08, 0x3feff603} }, +/**/ {{0x331cd3e1, 0x3feff5e3} }, +/**/ {{0x47731d21, 0x3feff5c3} }, +/**/ {{0x5c092908, 0x3feff5a3} }, +/**/ {{0x70def6d7, 0x3feff583} }, +/**/ {{0x85f485d0, 0x3feff563} }, +/**/ {{0x9b49d532, 0x3feff543} }, +/**/ {{0xb0dee440, 0x3feff523} }, +/**/ {{0xc6b3b23b, 0x3feff503} }, +/**/ {{0xdcc83e62, 0x3feff4e3} }, +/**/ {{0xf31c87f8, 0x3feff4c3} }, +/**/ {{0x09b08e3d, 0x3feff4a4} }, +/**/ {{0x20845073, 0x3feff484} }, +/**/ {{0x3797cdda, 0x3feff464} }, +/**/ {{0x4eeb05b4, 0x3feff444} }, +/**/ {{0x667df741, 0x3feff424} }, +/**/ {{0x7e50a1c3, 0x3feff404} }, +/**/ {{0x9663047b, 0x3feff3e4} }, +/**/ {{0xaeb51eaa, 0x3feff3c4} }, +/**/ {{0xc746ef91, 0x3feff3a4} }, +/**/ {{0xe0187672, 0x3feff384} }, +/**/ {{0xf929b28d, 0x3feff364} }, +/**/ {{0x127aa323, 0x3feff345} }, +/**/ {{0x2c0b4776, 0x3feff325} }, +/**/ {{0x45db9ec7, 0x3feff305} }, +/**/ {{0x5feba858, 0x3feff2e5} }, +/**/ {{0x7a3b6369, 0x3feff2c5} }, +/**/ {{0x94cacf3b, 0x3feff2a5} }, +/**/ {{0xaf99eb11, 0x3feff285} }, +/**/ {{0xcaa8b62a, 0x3feff265} }, +/**/ {{0xe5f72fc9, 0x3feff245} }, +/**/ {{0x0185572f, 0x3feff226} }, +/**/ {{0x1d532b9d, 0x3feff206} }, +/**/ {{0x3960ac54, 0x3feff1e6} }, +/**/ {{0x55add896, 0x3feff1c6} }, +/**/ {{0x723aafa3, 0x3feff1a6} }, +/**/ {{0x8f0730be, 0x3feff186} }, +/**/ {{0xac135b27, 0x3feff166} }, +/**/ {{0xc95f2e21, 0x3feff146} }, +/**/ {{0xe6eaa8eb, 0x3feff126} }, +/**/ {{0x04b5cac9, 0x3feff107} }, +/**/ {{0x22c092fb, 0x3feff0e7} }, +/**/ {{0x410b00c2, 0x3feff0c7} }, +/**/ {{0x5f951360, 0x3feff0a7} }, +/**/ {{0x7e5eca16, 0x3feff087} }, +/**/ {{0x9d682426, 0x3feff067} }, +/**/ {{0xbcb120d2, 0x3feff047} }, +/**/ {{0xdc39bf5a, 0x3feff027} }, +/**/ {{0xfc01ff00, 0x3feff007} }, +/**/ {{0x1c09df07, 0x3fefefe8} }, +/**/ {{0x3c515eae, 0x3fefefc8} }, +/**/ {{0x5cd87d38, 0x3fefefa8} }, +/**/ {{0x7d9f39e6, 0x3fefef88} }, +/**/ {{0x9ea593fa, 0x3fefef68} }, +/**/ {{0xbfeb8ab5, 0x3fefef48} }, +/**/ {{0xe1711d5a, 0x3fefef28} }, +/**/ {{0x03364b28, 0x3fefef09} }, +/**/ {{0x253b1363, 0x3fefeee9} }, +/**/ {{0x477f754b, 0x3fefeec9} }, +/**/ {{0x6a037022, 0x3fefeea9} }, +/**/ {{0x8cc7032a, 0x3fefee89} }, +/**/ {{0xafca2da5, 0x3fefee69} }, +/**/ {{0xd30ceed4, 0x3fefee49} }, +/**/ {{0xf68f45f8, 0x3fefee29} }, +/**/ {{0x1a513254, 0x3fefee0a} }, +/**/ {{0x3e52b329, 0x3fefedea} }, +/**/ {{0x6293c7b8, 0x3fefedca} }, +/**/ {{0x87146f44, 0x3fefedaa} }, +/**/ {{0xabd4a90e, 0x3fefed8a} }, +/**/ {{0xd0d47458, 0x3fefed6a} }, +/**/ {{0xf613d064, 0x3fefed4a} }, +/**/ {{0x1b92bc73, 0x3fefed2b} }, +/**/ {{0x415137c7, 0x3fefed0b} }, +/**/ {{0x674f41a2, 0x3fefeceb} }, +/**/ {{0x8d8cd945, 0x3fefeccb} }, +/**/ {{0xb409fdf3, 0x3fefecab} }, +/**/ {{0xdac6aeed, 0x3fefec8b} }, +/**/ {{0x01c2eb76, 0x3fefec6c} }, +/**/ {{0x28feb2ce, 0x3fefec4c} }, +/**/ {{0x507a0437, 0x3fefec2c} }, +/**/ {{0x7834def5, 0x3fefec0c} }, +/**/ {{0xa02f4247, 0x3fefebec} }, +/**/ {{0xc8692d71, 0x3fefebcc} }, +/**/ {{0xf0e29fb4, 0x3fefebac} }, +/**/ {{0x199b9852, 0x3fefeb8d} }, +/**/ {{0x4294168d, 0x3fefeb6d} }, +/**/ {{0x6bcc19a7, 0x3fefeb4d} }, +/**/ {{0x9543a0e2, 0x3fefeb2d} }, +/**/ {{0xbefaab7f, 0x3fefeb0d} }, +/**/ {{0xe8f138c2, 0x3fefeaed} }, +/**/ {{0x132747ea, 0x3fefeace} }, +/**/ {{0x3d9cd83c, 0x3fefeaae} }, +/**/ {{0x6851e8f7, 0x3fefea8e} }, +/**/ {{0x93467960, 0x3fefea6e} }, +/**/ {{0xbe7a88b7, 0x3fefea4e} }, +/**/ {{0xe9ee163f, 0x3fefea2e} }, +/**/ {{0x15a12139, 0x3fefea0f} }, +/**/ {{0x4193a8e8, 0x3fefe9ef} }, +/**/ {{0x6dc5ac8e, 0x3fefe9cf} }, +/**/ {{0x9a372b6d, 0x3fefe9af} }, +/**/ {{0xc6e824c6, 0x3fefe98f} }, +/**/ {{0xf3d897dd, 0x3fefe96f} }, + }; + + static const number + Lu[182][2] = { /* log(ui) */ +/**/ {{{0x0b3aac49, 0xbfd63003} }, +/**/ {{0xe51fff99, 0xbc6dc18c} },}, +/**/ {{{0xdf595f30, 0xbfd5d5bd} }, +/**/ {{0x48cbb8a2, 0x3c765411} },}, +/**/ {{{0x53c8d1fb, 0xbfd57bf7} }, +/**/ {{0x15f88b63, 0x3c60908d} },}, +/**/ {{{0x0738a3d8, 0xbfd522ae} }, +/**/ {{0xb38a6979, 0x3c68f7e9} },}, +/**/ {{{0x9e172c3c, 0xbfd4c9e0} }, +/**/ {{0x5b147a5d, 0x3c512361} },}, +/**/ {{{0xc271c41b, 0xbfd4718d} }, +/**/ {{0x14c56eef, 0xbc38fb4c} },}, +/**/ {{{0x23d5e8c7, 0xbfd419b4} }, +/**/ {{0x43827392, 0xbc60dbb2} },}, +/**/ {{{0x77333184, 0xbfd3c252} }, +/**/ {{0xe50a8ec6, 0x3c72ad27} },}, +/**/ {{{0x76be1117, 0xbfd36b67} }, +/**/ {{0xe883858e, 0x3c5324f0} },}, +/**/ {{{0xe1d35ce4, 0xbfd314f1} }, +/**/ {{0x09e5c3dc, 0x3c73d699} },}, +/**/ {{{0x7cdc9354, 0xbfd2bef0} }, +/**/ {{0x7fd86088, 0x3c782dad} },}, +/**/ {{{0x1134db92, 0xbfd26962} }, +/**/ {{0xdd9db02b, 0xbc7e0efa} },}, +/**/ {{{0x6d0eb8d4, 0xbfd21445} }, +/**/ {{0x1aeba60a, 0xbc6f7ae9} },}, +/**/ {{{0x635a6b95, 0xbfd1bf99} }, +/**/ {{0x84249223, 0x3c612aeb} },}, +/**/ {{{0xcbacfb73, 0xbfd16b5c} }, +/**/ {{0x28b40935, 0xbc766fbd} },}, +/**/ {{{0x8227e47c, 0xbfd1178e} }, +/**/ {{0x5f01c691, 0x3c60e63a} },}, +/**/ {{{0x676162e3, 0xbfd0c42d} }, +/**/ {{0x9d5d11ee, 0xbc5162c7} },}, +/**/ {{{0x604d5862, 0xbfd07138} }, +/**/ {{0xed4e9138, 0xbc7cdb16} },}, +/**/ {{{0x5626c691, 0xbfd01eae} }, +/**/ {{0xbd2932e2, 0x3c418290} },}, +/**/ {{{0x6cb3b379, 0xbfcf991c} }, +/**/ {{0x66f980a2, 0xbc6f6650} },}, +/**/ {{{0xe4dcffe6, 0xbfcef5ad} }, +/**/ {{0xddc708a0, 0x3c508ab2} },}, +/**/ {{{0xffe71012, 0xbfce530e} }, +/**/ {{0x41f43042, 0xbc422760} },}, +/**/ {{{0xb0d48940, 0xbfcdb13d} }, +/**/ {{0x49f96cb9, 0xbc5aa11d} },}, +/**/ {{{0xf2655e7b, 0xbfcd1037} }, +/**/ {{0x242471a2, 0xbc660629} },}, +/**/ {{{0xc6f00f71, 0xbfcc6ffb} }, +/**/ {{0x2c57a4a5, 0x3c68e58b} },}, +/**/ {{{0x383bd8ad, 0xbfcbd087} }, +/**/ {{0xf6a516d7, 0xbc3dd355} },}, +/**/ {{{0x575bce3d, 0xbfcb31d8} }, +/**/ {{0xb386a94d, 0x3c66353a} },}, +/**/ {{{0x3c8ad9e3, 0xbfca93ed} }, +/**/ {{0x9de97203, 0xbc6bcafa} },}, +/**/ {{{0x07089664, 0xbfc9f6c4} }, +/**/ {{0x605e67ef, 0xbc435a19} },}, +/**/ {{{0xdcf7017f, 0xbfc95a5a} }, +/**/ {{0x07fb7a3d, 0xbc5142c5} },}, +/**/ {{{0xeb38fe8c, 0xbfc8beaf} }, +/**/ {{0xb6997a40, 0xbc555aa8} },}, +/**/ {{{0x6551a3c2, 0xbfc823c1} }, +/**/ {{0xe70be781, 0x3c61232c} },}, +/**/ {{{0x85444c73, 0xbfc7898d} }, +/**/ {{0xebcfb201, 0xbc5ef8f6} },}, +/**/ {{{0x8b756abc, 0xbfc6f012} }, +/**/ {{0xc21e166c, 0x3c68de59} },}, +/**/ {{{0xbe8c133a, 0xbfc6574e} }, +/**/ {{0xf4621bed, 0x3c3d34f0} },}, +/**/ {{{0x6b543db2, 0xbfc5bf40} }, +/**/ {{0x4c0df7e7, 0x3c21f5b4} },}, +/**/ {{{0xe4a1b58d, 0xbfc527e5} }, +/**/ {{0x82395bfd, 0x3c271a96} },}, +/**/ {{{0x8333b561, 0xbfc4913d} }, +/**/ {{0x4930f135, 0x3c50d560} },}, +/**/ {{{0xa59928cc, 0xbfc3fb45} }, +/**/ {{0xa354d056, 0x3c6d87e6} },}, +/**/ {{{0xb0159016, 0xbfc365fc} }, +/**/ {{0xa5b944ad, 0xbc57d411} },}, +/**/ {{{0x0c86813a, 0xbfc2d161} }, +/**/ {{0xf25af95f, 0x3c5499a3} },}, +/**/ {{{0x2a49c202, 0xbfc23d71} }, +/**/ {{0x61051d69, 0x3c66e381} },}, +/**/ {{{0x7e23f72a, 0xbfc1aa2b} }, +/**/ {{0xd9b2ef7e, 0x3c4c6ef1} },}, +/**/ {{{0x8227e47c, 0xbfc1178e} }, +/**/ {{0x5f01c691, 0x3c50e63a} },}, +/**/ {{{0xb59e3a07, 0xbfc08598} }, +/**/ {{0x9902bf32, 0x3c6dd700} },}, +/**/ {{{0x39dbd566, 0xbfbfe891} }, +/**/ {{0x215f9393, 0x3c5ac9f4} },}, +/**/ {{{0x830a1120, 0xbfbec739} }, +/**/ {{0x91780d3f, 0x3c4a2bf9} },}, +/**/ {{{0x638446a2, 0xbfbda727} }, +/**/ {{0x71733019, 0xbc5401fa} },}, +/**/ {{{0x01bc4b23, 0xbfbc8858} }, +/**/ {{0x559a6706, 0xbc5a38cb} },}, +/**/ {{{0x8dad5b1c, 0xbfbb6ac8} }, +/**/ {{0xed1ca59f, 0x3c40057e} },}, +/**/ {{{0x40b1bc38, 0xbfba4e76} }, +/**/ {{0x203e4259, 0x3c55b5ca} },}, +/**/ {{{0x5d594989, 0xbfb9335e} }, +/**/ {{0x5704ccb7, 0x3c5478a8} },}, +/**/ {{{0x2f40e3f0, 0xbfb8197e} }, +/**/ {{0xffbeed43, 0xbc3b9f2d} },}, +/**/ {{{0x0aeac0e1, 0xbfb700d3} }, +/**/ {{0x212cdd05, 0x3c272566} },}, +/**/ {{{0x4d9791cb, 0xbfb5e95a} }, +/**/ {{0x5c5c450a, 0xbc5f3874} },}, +/**/ {{{0x5d207eac, 0xbfb4d311} }, +/**/ {{0x2c7842cc, 0xbc5769f4} },}, +/**/ {{{0xa7d1ee64, 0xbfb3bdf5} }, +/**/ {{0xd3b5b45f, 0xbc47a976} },}, +/**/ {{{0xa44717a5, 0xbfb2aa04} }, +/**/ {{0x8d2fa3f7, 0x3c5d15d3} },}, +/**/ {{{0xd1465567, 0xbfb1973b} }, +/**/ {{0x67a6acf6, 0x3c475583} },}, +/**/ {{{0xb59e3a07, 0xbfb08598} }, +/**/ {{0x9902bf32, 0x3c5dd700} },}, +/**/ {{{0xc006b87c, 0xbfaeea31} }, +/**/ {{0x93b7b66c, 0x3c43e4fc} },}, +/**/ {{{0xcdddb2cc, 0xbfaccb73} }, +/**/ {{0x0500efd4, 0x3c4e48fb} },}, +/**/ {{{0xd0fb10fc, 0xbfaaaef2} }, +/**/ {{0xb42e0add, 0xbc2a353b} },}, +/**/ {{{0x149fb343, 0xbfa894aa} }, +/**/ {{0x7660a23d, 0xbc3a8be9} },}, +/**/ {{{0xf2d4bb58, 0xbfa67c94} }, +/**/ {{0x6505e603, 0xbc40413e} },}, +/**/ {{{0xd42de3ea, 0xbfa466ae} }, +/**/ {{0x7f4a137e, 0x3c4cdd6f} },}, +/**/ {{{0x2f8d183f, 0xbfa252f3} }, +/**/ {{0x92615916, 0x3c4947f7} },}, +/**/ {{{0x89e74444, 0xbfa0415d} }, +/**/ {{0x1d753622, 0xbc4c05cf} },}, +/**/ {{{0xec14aaf2, 0xbf9c63d2} }, +/**/ {{0xa686bd86, 0x3c3ce030} },}, +/**/ {{{0x28c8cabf, 0xbf984925} }, +/**/ {{0x0619fa67, 0x3c3d192d} },}, +/**/ {{{0x25980cc1, 0xbf9432a9} }, +/**/ {{0x39004192, 0x3c38cdaf} },}, +/**/ {{{0x58935847, 0xbf902056} }, +/**/ {{0x8416e71f, 0xbc327c8e} },}, +/**/ {{{0xa388a2aa, 0xbf882448} }, +/**/ {{0x137f09a0, 0xbc104b16} },}, +/**/ {{{0x7588de71, 0xbf801015} }, +/**/ {{0xd417ced0, 0xbc146662} },}, +/**/ {{{0x59588b35, 0xbf700805} }, +/**/ {{0x8cf63677, 0xbc1f9663} },}, +/**/ {{{0x00000000, 0x00000000} }, +/**/ {{0x00000000, 0x00000000} },}, +/**/ {{{0xa2b10bc0, 0x3f6ff00a} }, +/**/ {{0xd5a6d353, 0x3c02821a} },}, +/**/ {{{0x6b106789, 0x3f7fe02a} }, +/**/ {{0xe3711ebf, 0xbbce44b7} },}, +/**/ {{{0x5f810a77, 0x3f87dc47} }, +/**/ {{0x87d3df21, 0xbc116d76} },}, +/**/ {{{0xb0fc03e4, 0x3f8fc0a8} }, +/**/ {{0xc59642a1, 0xbc183092} },}, +/**/ {{{0x4346a575, 0x3f93cea4} }, +/**/ {{0x902b3a1c, 0xbc10cb5a} },}, +/**/ {{{0x07d5b11b, 0x3f97b91b} }, +/**/ {{0xace3a510, 0xbc35b602} },}, +/**/ {{{0x27af9198, 0x3f9b9fc0} }, +/**/ {{0x229dc868, 0xbbf0ae69} },}, +/**/ {{{0x0e783300, 0x3f9f829b} }, +/**/ {{0x04f1ef23, 0x3c333e3f} },}, +/**/ {{{0x8923d980, 0x3fa1b0d9} }, +/**/ {{0x89bac481, 0xbc3e9ae8} },}, +/**/ {{{0xb9febd60, 0x3fa39e87} }, +/**/ {{0x37f551bb, 0xbc45bfa9} },}, +/**/ {{{0xafc8e4d5, 0x3fa58a5b} }, +/**/ {{0x2b4e2b72, 0xbc4ce55c} },}, +/**/ {{{0xf632dcfc, 0x3fa77458} }, +/**/ {{0xa87b9296, 0x3c418d3c} },}, +/**/ {{{0x0ec8e3eb, 0x3fa95c83} }, +/**/ {{0x80520bf2, 0x3c4f5a0e} },}, +/**/ {{{0x711971bf, 0x3fab42dd} }, +/**/ {{0x9c130499, 0xbc3eb975} },}, +/**/ {{{0x8adb0b52, 0x3fad276b} }, +/**/ {{0x3257fd47, 0x3c21e3c5} },}, +/**/ {{{0xc01162a6, 0x3faf0a30} }, +/**/ {{0x5c5bbacd, 0x3c485f32} },}, +/**/ {{{0x3598e471, 0x3fb07598} }, +/**/ {{0x333c45b8, 0x3c480da5} },}, +/**/ {{{0xeea37ae1, 0x3fb16536} }, +/**/ {{0xe8c22cda, 0xbc379da3} },}, +/**/ {{{0x2f0a1417, 0x3fb253f6} }, +/**/ {{0x63fc4cfd, 0xbc1c1259} },}, +/**/ {{{0x961bd1d1, 0x3fb341d7} }, +/**/ {{0x227becbb, 0xbc5b599f} },}, +/**/ {{{0xbea646f0, 0x3fb42edc} }, +/**/ {{0x935996c9, 0x3c4ddd4f} },}, +/**/ {{{0x3f06183f, 0x3fb51b07} }, +/**/ {{0x9a1a8be4, 0x3c5a49e3} },}, +/**/ {{{0xa93750c4, 0x3fb60658} }, +/**/ {{0x8ec21b6a, 0xbc538845} },}, +/**/ {{{0x8ae56b4c, 0x3fb6f0d2} }, +/**/ {{0x9184b992, 0xbc5906d9} },}, +/**/ {{{0x6d7b12cd, 0x3fb7da76} }, +/**/ {{0xcdd94131, 0xbc5eeedf} },}, +/**/ {{{0xd6319b21, 0x3fb8c345} }, +/**/ {{0xab3424a9, 0xbc24a697} },}, +/**/ {{{0x462033ad, 0x3fb9ab42} }, +/**/ {{0x1c184e8e, 0xbc42099e} },}, +/**/ {{{0x3a4ad563, 0x3fba926d} }, +/**/ {{0x8aa70ea9, 0x3c5942f4} },}, +/**/ {{{0x2bb0eda1, 0x3fbb78c8} }, +/**/ {{0xf0327e21, 0x3c20878c} },}, +/**/ {{{0x8f5bc743, 0x3fbc5e54} }, +/**/ {{0xef8161b1, 0x3c35d617} },}, +/**/ {{{0xd66cb35d, 0x3fbd4313} }, +/**/ {{0x951d90fa, 0x3c5790dd} },}, +/**/ {{{0x6e2af2e6, 0x3fbe2707} }, +/**/ {{0x001e0162, 0xbc361578} },}, +/**/ {{{0xc01162a6, 0x3fbf0a30} }, +/**/ {{0x5c5bbacd, 0x3c585f32} },}, +/**/ {{{0x31dbeabb, 0x3fbfec91} }, +/**/ {{0x9981b36c, 0xbc55746b} },}, +/**/ {{{0x12ca596e, 0x3fc06715} }, +/**/ {{0x7eb86499, 0x3c550c64} },}, +/**/ {{{0x7cd08e59, 0x3fc0d77e} }, +/**/ {{0x5e9030ac, 0x3c69a5dc} },}, +/**/ {{{0x846742ac, 0x3fc14785} }, +/**/ {{0x3e3a7f07, 0x3c6a2881} },}, +/**/ {{{0xd52f67a0, 0x3fc1b72a} }, +/**/ {{0x3472cd74, 0x3c548302} },}, +/**/ {{{0x190a5acb, 0x3fc2266f} }, +/**/ {{0xf1809e88, 0x3c6f547b} },}, +/**/ {{{0xf81ff523, 0x3fc29552} }, +/**/ {{0x1c407dbf, 0x3c630177} },}, +/**/ {{{0x18e47fd3, 0x3fc303d7} }, +/**/ {{0xd96091fa, 0xbc06b9c7} },}, +/**/ {{{0x201e8f74, 0x3fc371fc} }, +/**/ {{0x62af18a0, 0x3c5de6cb} },}, +/**/ {{{0xb0ecc62a, 0x3fc3dfc2} }, +/**/ {{0xe7d81017, 0xbc5ab3a8} },}, +/**/ {{{0x6ccb7d1e, 0x3fc44d2b} }, +/**/ {{0x543e1f88, 0x3c69f4f6} },}, +/**/ {{{0xf39a55e5, 0x3fc4ba36} }, +/**/ {{0xbcc36756, 0x3c668981} },}, +/**/ {{{0xe3a1b438, 0x3fc526e5} }, +/**/ {{0x8a470d3a, 0xbc6746ff} },}, +/**/ {{{0xd9982086, 0x3fc59338} }, +/**/ {{0xaa8ad7cf, 0xbc565d22} },}, +/**/ {{{0x70a793d4, 0x3fc5ff30} }, +/**/ {{0xfafc6f6e, 0xbc5bc60e} },}, +/**/ {{{0x4272ad51, 0x3fc66acd} }, +/**/ {{0x4e1ea8b2, 0xbc50900e} },}, +/**/ {{{0xe719d21d, 0x3fc6d60f} }, +/**/ {{0x68ecd179, 0xbc6caae2} },}, +/**/ {{{0xf54037a5, 0x3fc740f8} }, +/**/ {{0x62a84cdb, 0xbc5b2640} },}, +/**/ {{{0x0210d909, 0x3fc7ab89} }, +/**/ {{0x2d6a0608, 0x3c4be36b} },}, +/**/ {{{0xa14357eb, 0x3fc815c0} }, +/**/ {{0x073a0564, 0xbc54be48} },}, +/**/ {{{0x6520c911, 0x3fc87fa0} }, +/**/ {{0xbfa08d9a, 0xbc6bf7fd} },}, +/**/ {{{0xde886d41, 0x3fc8e928} }, +/**/ {{0x51a56770, 0xbc6569d8} },}, +/**/ {{{0x9cf456b4, 0x3fc9525a} }, +/**/ {{0x1d4e2e26, 0x3c6d904c} },}, +/**/ {{{0x2e7dfb83, 0x3fc9bb36} }, +/**/ {{0x1f003e0c, 0x3c6575e3} },}, +/**/ {{{0x1fe2b563, 0x3fca23bc} }, +/**/ {{0xb07a998c, 0x3c493711} },}, +/**/ {{{0xfc882f19, 0x3fca8bec} }, +/**/ {{0x918c39eb, 0xbc5e8c37} },}, +/**/ {{{0x4e80bff3, 0x3fcaf3c9} }, +/**/ {{0xf3641985, 0xbc5398cf} },}, +/**/ {{{0x9e8fb5a4, 0x3fcb5b51} }, +/**/ {{0xdc19e1a0, 0x3c6ba27f} },}, +/**/ {{{0x742d8cd6, 0x3fcbc286} }, +/**/ {{0x44870f55, 0x3c54fce7} },}, +/**/ {{{0x558c18c1, 0x3fcc2968} }, +/**/ {{0x38a3fb6b, 0xbc673dee} },}, +/**/ {{{0xc79a9a22, 0x3fcc8ff7} }, +/**/ {{0xf8434012, 0xbc64f689} },}, +/**/ {{{0x4e09c5dc, 0x3fccf635} }, +/**/ {{0x7d55b695, 0x3c6239a0} },}, +/**/ {{{0x6b4fbb91, 0x3fcd5c21} }, +/**/ {{0x597e4d40, 0x3c66e443} },}, +/**/ {{{0xa0abec7d, 0x3fcdc1bc} }, +/**/ {{0x1998b6fc, 0x3c6834c5} },}, +/**/ {{{0x6e2af2e6, 0x3fce2707} }, +/**/ {{0x001e0162, 0xbc461578} },}, +/**/ {{{0x52aa5a60, 0x3fce8c02} }, +/**/ {{0x39bfc89b, 0xbc46e03a} },}, +/**/ {{{0xcbdc5936, 0x3fcef0ad} }, +/**/ {{0x950dc20d, 0x3c648637} },}, +/**/ {{{0x564b7b37, 0x3fcf550a} }, +/**/ {{0xfd018c37, 0x3c2c5f6d} },}, +/**/ {{{0x6d5e3e2b, 0x3fcfb918} }, +/**/ {{0x64f21acb, 0xbc6caaae} },}, +/**/ {{{0x45ad501d, 0x3fd00e6c} }, +/**/ {{0x8ff6fead, 0xbc6cb956} },}, +/**/ {{{0x94b4d041, 0x3fd04025} }, +/**/ {{0x17a5022d, 0xbc628ec2} },}, +/**/ {{{0x5fcd590d, 0x3fd071b8} }, +/**/ {{0xf97bde80, 0x3c5d1707} },}, +/**/ {{{0xe27390e3, 0x3fd0a324} }, +/**/ {{0xe8061c03, 0x3c77dcfd} },}, +/**/ {{{0x579ab74b, 0x3fd0d46b} }, +/**/ {{0x1c3cbd92, 0x3c603ec8} },}, +/**/ {{{0xf9ae4ad5, 0x3fd1058b} }, +/**/ {{0xab4cb31d, 0x3c589fa0} },}, +/**/ {{{0x0293a8b0, 0x3fd13687} }, +/**/ {{0x98edd24a, 0x3c77b662} },}, +/**/ {{{0xababa60e, 0x3fd1675c} }, +/**/ {{0xab883717, 0x3c2ce63e} },}, +/**/ {{{0x2dd4236f, 0x3fd1980d} }, +/**/ {{0xb0e4d147, 0x3c79d3d1} },}, +/**/ {{{0xc16999fb, 0x3fd1c898} }, +/**/ {{0x2aff1c44, 0xbc30e5c6} },}, +/**/ {{{0x9e48a2f3, 0x3fd1f8ff} }, +/**/ {{0x9a0c4b07, 0xbc7c9fdf} },}, +/**/ {{{0xfbcf7966, 0x3fd22941} }, +/**/ {{0xb09628af, 0xbc776f5e} },}, +/**/ {{{0x10df763a, 0x3fd25960} }, +/**/ {{0x57075e9e, 0xbc50f76c} },}, +/**/ {{{0x13de86a3, 0x3fd2895a} }, +/**/ {{0xc13f040e, 0x3c77ad24} },}, +/**/ {{{0x3ab89d25, 0x3fd2b930} }, +/**/ {{0xfd852ad4, 0xbc7896b5} },}, +/**/ {{{0xbae11d31, 0x3fd2e8e2} }, +/**/ {{0xb95ebdf9, 0xbc78f4cd} },}, +/**/ {{{0xc9544185, 0x3fd31871} }, +/**/ {{0x4c09b379, 0xbc351acc} },}, +/**/ {{{0x9a987d55, 0x3fd347dd} }, +/**/ {{0x580919f8, 0xbc64dd4c} },}, +/**/ {{{0x62bfd85b, 0x3fd37726} }, +/**/ {{0xd8117de7, 0xbc4b5629} },}, +/**/ {{{0x556945ea, 0x3fd3a64c} }, +/**/ {{0x1945f97c, 0xbc6c6865} },}, +/**/ {{{0xa5c1f710, 0x3fd3d54f} }, +/**/ {{0xc6a1c98d, 0xbc7e3265} },}, +/**/ {{{0x8686a7e4, 0x3fd40430} }, +/**/ {{0x6082ce6d, 0xbc70bcfb} },}, +/**/ {{{0x2a04e814, 0x3fd432ef} }, +/**/ {{0x715ac903, 0xbc729931} },}, +/**/ {{{0xc21c5ec2, 0x3fd4618b} }, +/**/ {{0xcdeccf1d, 0x3c7f42de} },}, +/**/ {{{0x804009d1, 0x3fd49006} }, +/**/ {{0x41f177dc, 0xbc69ffc3} },}, +/**/ {{{0x957778a1, 0x3fd4be5f} }, +/**/ {{0x5b04813d, 0xbc6259b3} },}, +/**/ {{{0x3260026a, 0x3fd4ec97} }, +/**/ {{0xd977dc5e, 0xbc742a87} },}, +/**/ {{{0x872df82d, 0x3fd51aad} }, +/**/ {{0xc19f55e3, 0x3c43927a} },}, +/**/ {{{0xc3add263, 0x3fd548a2} }, +/**/ {{0x7e308ddb, 0xbc6819cf} },}, +/**/ {{{0x17455a6c, 0x3fd57677} }, +/**/ {{0xb283660c, 0x3c7526ad} },}, +/**/ {{{0xb0f4cfe2, 0x3fd5a42a} }, +/**/ {{0x7dee9a3d, 0xbc78ebcb} },}, +/**/ {{{0xbf5809ca, 0x3fd5d1bd} }, +/**/ {{0x83dc7fe1, 0x3c742363} },}, +/**/ {{{0x70a793d4, 0x3fd5ff30} }, +/**/ {{0xfafc6f6e, 0xbc6bc60e} },}, +/**/ {{{0xf2b9c795, 0x3fd62c82} }, +/**/ {{0x915300e5, 0x3c67b7af} },}, + }; + + static const number + Lv[362][2] = { /* log(vj) */ + +/**/ {{{0xb72daabf, 0xbf6687ec} }, +/**/ {{0x0f13318f, 0x3c052c69} },}, +/**/ {{{0x3767104f, 0xbf6667d6} }, +/**/ {{0xd27a7bac, 0x3bd3efa3} },}, +/**/ {{{0xd7cd64fb, 0xbf6647bf} }, +/**/ {{0x55a89c36, 0x3c09b725} },}, +/**/ {{{0x9860683b, 0xbf6627a9} }, +/**/ {{0xfebc844a, 0x3bcbae22} },}, +/**/ {{{0x791fd98a, 0xbf660793} }, +/**/ {{0x78fa1cb5, 0xbbfe34af} },}, +/**/ {{{0x7a0b7863, 0xbf65e77d} }, +/**/ {{0xea78fdd0, 0xbc02f1b1} },}, +/**/ {{{0x9b230442, 0xbf65c767} }, +/**/ {{0x2202b2ca, 0x3bf70d8c} },}, +/**/ {{{0xdc663ca2, 0xbf65a751} }, +/**/ {{0xc3444e64, 0xbbfdc63d} },}, +/**/ {{{0x3dd4e102, 0xbf65873c} }, +/**/ {{0x370d69c3, 0x3c021b11} },}, +/**/ {{{0xbf6eb0de, 0xbf656726} }, +/**/ {{0x154dd8d8, 0xbbfb6da8} },}, +/**/ {{{0x61336bb6, 0xbf654711} }, +/**/ {{0xdf9a4709, 0xbc0b12d2} },}, +/**/ {{{0x2322d10a, 0xbf6526fc} }, +/**/ {{0x68d1274f, 0x3bf997f2} },}, +/**/ {{{0x053ca059, 0xbf6506e7} }, +/**/ {{0xe70c852a, 0x3c0c2a1f} },}, +/**/ {{{0x07809924, 0xbf64e6d2} }, +/**/ {{0xa808538f, 0x3c04cc9e} },}, +/**/ {{{0x29ee7aed, 0xbf64c6bd} }, +/**/ {{0x7797a4bd, 0x3befe68c} },}, +/**/ {{{0x6c860537, 0xbf64a6a8} }, +/**/ {{0x9efaae3d, 0x3c06794d} },}, +/**/ {{{0xcf46f784, 0xbf648693} }, +/**/ {{0xb2ddd9d1, 0xbbfed318} },}, +/**/ {{{0x5231115a, 0xbf64667f} }, +/**/ {{0x4643624b, 0x3c061f62} },}, +/**/ {{{0xf544123c, 0xbf64466a} }, +/**/ {{0x9387f11e, 0x3c0666a0} },}, +/**/ {{{0xb87fb9b0, 0xbf642656} }, +/**/ {{0x116ec598, 0x3c0043b2} },}, +/**/ {{{0x9be3c73c, 0xbf640642} }, +/**/ {{0xd2de6e3e, 0xbbfbd84d} },}, +/**/ {{{0x9f6ffa68, 0xbf63e62e} }, +/**/ {{0x433d8c65, 0xbbe9149b} },}, +/**/ {{{0xc32412bb, 0xbf63c61a} }, +/**/ {{0x08e5a7bb, 0xbbf6b88d} },}, +/**/ {{{0x06ffcfbe, 0xbf63a607} }, +/**/ {{0xccfac9e2, 0xbb9f3c7a} },}, +/**/ {{{0x6b02f0fa, 0xbf6385f3} }, +/**/ {{0xbec6f6e4, 0x3bee405c} },}, +/**/ {{{0xef2d35f9, 0xbf6365df} }, +/**/ {{0xaf0c0b4c, 0x3bf02993} },}, +/**/ {{{0x937e5e46, 0xbf6345cc} }, +/**/ {{0xaa64716f, 0x3bf9be97} },}, +/**/ {{{0x57f6296c, 0xbf6325b9} }, +/**/ {{0xa2e863ae, 0xbbfdeb4d} },}, +/**/ {{{0x3c9456f9, 0xbf6305a6} }, +/**/ {{0x636d2b2c, 0x3c0f3c7f} },}, +/**/ {{{0x4158a678, 0xbf62e593} }, +/**/ {{0xb166ca7f, 0x3c01a8df} },}, +/**/ {{{0x6642d778, 0xbf62c580} }, +/**/ {{0x53a2d534, 0x3c020ff1} },}, +/**/ {{{0xab52a987, 0xbf62a56d} }, +/**/ {{0x0412f1e7, 0xbbe8fef1} },}, +/**/ {{{0x1087dc35, 0xbf62855b} }, +/**/ {{0x4b7ac6c6, 0xbbfcd17e} },}, +/**/ {{{0x95e22f12, 0xbf626548} }, +/**/ {{0x9a8127bf, 0xbbfbfc21} },}, +/**/ {{{0x3b6161af, 0xbf624536} }, +/**/ {{0x66d42390, 0x3bd7eda1} },}, +/**/ {{{0x0105339d, 0xbf622524} }, +/**/ {{0x77fedcad, 0xbbdf374e} },}, +/**/ {{{0xe6cd646f, 0xbf620511} }, +/**/ {{0x52d05dea, 0x3be1d1fb} },}, +/**/ {{{0xecb9b3b8, 0xbf61e4ff} }, +/**/ {{0xffd8e706, 0x3c02c2fc} },}, +/**/ {{{0x12c9e10b, 0xbf61c4ee} }, +/**/ {{0xf1d5cc2c, 0xbc02b4f8} },}, +/**/ {{{0x58fdabfe, 0xbf61a4dc} }, +/**/ {{0x1315b191, 0xbc0618c3} },}, +/**/ {{{0xbf54d426, 0xbf6184ca} }, +/**/ {{0xcb3cdab0, 0xbc01f8d5} },}, +/**/ {{{0x45cf1919, 0xbf6164b9} }, +/**/ {{0xc025605a, 0xbc014ff7} },}, +/**/ {{{0xec6c3a6e, 0xbf6144a7} }, +/**/ {{0x87cb08cd, 0xbbff04ff} },}, +/**/ {{{0xb32bf7bd, 0xbf612496} }, +/**/ {{0xe6af1b84, 0x3bee89b4} },}, +/**/ {{{0x9a0e109e, 0xbf610485} }, +/**/ {{0x35a60879, 0x3c07e99e} },}, +/**/ {{{0xa11244aa, 0xbf60e474} }, +/**/ {{0x20f2325a, 0x3c04b698} },}, +/**/ {{{0xc838537b, 0xbf60c463} }, +/**/ {{0x3617200d, 0x3bc0657e} },}, +/**/ {{{0x0f7ffcac, 0xbf60a453} }, +/**/ {{0xa5080961, 0xbc008feb} },}, +/**/ {{{0x76e8ffd9, 0xbf608442} }, +/**/ {{0xbb5e1df7, 0x3bd13002} },}, +/**/ {{{0xfe731c9d, 0xbf606431} }, +/**/ {{0x6e2858c0, 0xbc0509f3} },}, +/**/ {{{0xa61e1296, 0xbf604421} }, +/**/ {{0x5f5d9695, 0xbc04b556} },}, +/**/ {{{0x6de9a162, 0xbf602411} }, +/**/ {{0xe79a4e00, 0x3c042b89} },}, +/**/ {{{0x55d5889e, 0xbf600401} }, +/**/ {{0x1113f403, 0x3be8f98e} },}, +/**/ {{{0xbbc30fd4, 0xbf5fc7e2} }, +/**/ {{0x93382bc9, 0xbbfc709b} },}, +/**/ {{{0x0c1abdcd, 0xbf5f87c3} }, +/**/ {{0x76a55d1c, 0xbbf2a90d} },}, +/**/ {{{0x9cb19a68, 0xbf5f47a3} }, +/**/ {{0x76e7826b, 0x3be1b815} },}, +/**/ {{{0x6d8724e7, 0xbf5f0784} }, +/**/ {{0x2b63756d, 0xbbe72d46} },}, +/**/ {{{0x7e9adc90, 0xbf5ec765} }, +/**/ {{0x73bb17c5, 0x3beb1a66} },}, +/**/ {{{0xcfec40a8, 0xbf5e8746} }, +/**/ {{0xb5e5a553, 0x3bf11af5} },}, +/**/ {{{0x617ad077, 0xbf5e4728} }, +/**/ {{0xf57dd14f, 0x3bfb2cad} },}, +/**/ {{{0x33460b45, 0xbf5e070a} }, +/**/ {{0x4902c8d5, 0xbbf8db75} },}, +/**/ {{{0x454d705f, 0xbf5dc6ec} }, +/**/ {{0xe8a41057, 0x3bef5cc6} },}, +/**/ {{{0x97907f0f, 0xbf5d86ce} }, +/**/ {{0xdf8672ef, 0x3bed8277} },}, +/**/ {{{0x2a0eb6a3, 0xbf5d46b1} }, +/**/ {{0x3717e5ee, 0xbbc2f9c2} },}, +/**/ {{{0xfcc7966b, 0xbf5d0693} }, +/**/ {{0xab4852c6, 0x3bf4deed} },}, +/**/ {{{0x0fba9db6, 0xbf5cc677} }, +/**/ {{0x9db2a368, 0xbbf3a2b4} },}, +/**/ {{{0x62e74bd8, 0xbf5c865a} }, +/**/ {{0x58fa0c24, 0xbbd2c51d} },}, +/**/ {{{0xf64d2024, 0xbf5c463d} }, +/**/ {{0xe3a09391, 0x3bf838ca} },}, +/**/ {{{0xc9eb99ee, 0xbf5c0621} }, +/**/ {{0x61b7de71, 0xbbdc2a9e} },}, +/**/ {{{0xddc2388e, 0xbf5bc605} }, +/**/ {{0x4accb195, 0xbbea9808} },}, +/**/ {{{0x31d07b5c, 0xbf5b85ea} }, +/**/ {{0x032e030b, 0xbbd811a2} },}, +/**/ {{{0xc615e1b1, 0xbf5b45ce} }, +/**/ {{0x821e0b81, 0xbbfd5427} },}, +/**/ {{{0x9a91eaea, 0xbf5b05b3} }, +/**/ {{0x2619306b, 0x3bfffeba} },}, +/**/ {{{0xaf441661, 0xbf5ac598} }, +/**/ {{0x9eac7d15, 0x3bd22824} },}, +/**/ {{{0x042be376, 0xbf5a857e} }, +/**/ {{0x24893f0e, 0x3bc20736} },}, +/**/ {{{0x9948d188, 0xbf5a4563} }, +/**/ {{0x04d734cd, 0xbbf58ab4} },}, +/**/ {{{0x6e9a5ff9, 0xbf5a0549} }, +/**/ {{0x5723a6c3, 0xbbf22673} },}, +/**/ {{{0x84200e2c, 0xbf59c52f} }, +/**/ {{0xa538e8e1, 0x3bfc81da} },}, +/**/ {{{0xd9d95b83, 0xbf598515} }, +/**/ {{0x2a8e3feb, 0xbbfa1a37} },}, +/**/ {{{0x6fc5c767, 0xbf5944fc} }, +/**/ {{0x385159f9, 0x3bf8e1ce} },}, +/**/ {{{0x45e4d13c, 0xbf5904e3} }, +/**/ {{0x1567c7a7, 0xbbfc4737} },}, +/**/ {{{0x5c35f86e, 0xbf58c4ca} }, +/**/ {{0x23c9ae0c, 0x3bf41581} },}, +/**/ {{{0xb2b8bc65, 0xbf5884b1} }, +/**/ {{0x2b66cfb6, 0x3bf70c2c} },}, +/**/ {{{0x496c9c8d, 0xbf584499} }, +/**/ {{0xe5a11e3e, 0xbbdb9042} },}, +/**/ {{{0x20511854, 0xbf580481} }, +/**/ {{0x61bcb040, 0xbbf9cf9d} },}, +/**/ {{{0x3765af29, 0xbf57c469} }, +/**/ {{0xe26a419b, 0xbbf65ceb} },}, +/**/ {{{0x8ea9e07c, 0xbf578451} }, +/**/ {{0xb70a4088, 0xbbf1c2f5} },}, +/**/ {{{0x261d2bbf, 0xbf57443a} }, +/**/ {{0x29704ba7, 0xbbbc7b8f} },}, +/**/ {{{0xfdbf1065, 0xbf570422} }, +/**/ {{0x433ccb3b, 0x3bca0a54} },}, +/**/ {{{0x158f0de3, 0xbf56c40c} }, +/**/ {{0x207cde2d, 0x3bd9e257} },}, +/**/ {{{0x6d8ca3af, 0xbf5683f5} }, +/**/ {{0xf7b51b49, 0xbbef17a4} },}, +/**/ {{{0x05b75142, 0xbf5643df} }, +/**/ {{0x9d345bf8, 0x3be28239} },}, +/**/ {{{0xde0e9614, 0xbf5603c8} }, +/**/ {{0x0918d1bf, 0xbbde6c21} },}, +/**/ {{{0xf691f1a1, 0xbf55c3b2} }, +/**/ {{0x377de4c8, 0x3bd37d78} },}, +/**/ {{{0x4f40e365, 0xbf55839d} }, +/**/ {{0xbbf7c9d1, 0x3bf52b7d} },}, +/**/ {{{0xe81aeadd, 0xbf554387} }, +/**/ {{0x679c3d9a, 0xbbf0be6a} },}, +/**/ {{{0xc11f878a, 0xbf550372} }, +/**/ {{0xb6cdd88e, 0xbbdd9e20} },}, +/**/ {{{0xda4e38ec, 0xbf54c35d} }, +/**/ {{0x09302da0, 0xbbe3b1e7} },}, +/**/ {{{0x33a67e86, 0xbf548349} }, +/**/ {{0x085b922d, 0x3be8cba8} },}, +/**/ {{{0xcd27d7db, 0xbf544334} }, +/**/ {{0xf024ab43, 0xbba5f2c9} },}, +/**/ {{{0xa6d1c471, 0xbf540320} }, +/**/ {{0xf686cf3d, 0xbbeb31f3} },}, +/**/ {{{0xc0a3c3cf, 0xbf53c30c} }, +/**/ {{0xd4ad32f6, 0xbbf74ffe} },}, +/**/ {{{0x1a9d557e, 0xbf5382f9} }, +/**/ {{0x4acb368f, 0x3bd2e555} },}, +/**/ {{{0xb4bdf907, 0xbf5342e5} }, +/**/ {{0x07812806, 0x3be13442} },}, +/**/ {{{0x8f052df6, 0xbf5302d2} }, +/**/ {{0x70b1e756, 0x3bf5f429} },}, +/**/ {{{0xa97273d7, 0xbf52c2bf} }, +/**/ {{0x43a03fff, 0xbbf20aa3} },}, +/**/ {{{0x04054a3a, 0xbf5282ad} }, +/**/ {{0x8bebd7ad, 0xbbed4d57} },}, +/**/ {{{0x9ebd30ae, 0xbf52429a} }, +/**/ {{0x5a71c5a4, 0xbbff9529} },}, +/**/ {{{0x7999a6c6, 0xbf520288} }, +/**/ {{0x54100f9e, 0x3bfb055a} },}, +/**/ {{{0x949a2c12, 0xbf51c276} }, +/**/ {{0xa2e9f1b4, 0xbbff6978} },}, +/**/ {{{0xefbe402a, 0xbf518264} }, +/**/ {{0xbc188323, 0x3bf01fb9} },}, +/**/ {{{0x8b0562a1, 0xbf514253} }, +/**/ {{0x957bf23a, 0xbbf7c87c} },}, +/**/ {{{0x666f1311, 0xbf510242} }, +/**/ {{0xc8be6880, 0x3bdc2cb9} },}, +/**/ {{{0x81fad111, 0xbf50c231} }, +/**/ {{0x07ba000d, 0xbbf59fc1} },}, +/**/ {{{0xdda81c3d, 0xbf508220} }, +/**/ {{0xbf5c8a0b, 0xbbf06a0a} },}, +/**/ {{{0x79767431, 0xbf504210} }, +/**/ {{0xa9a705bc, 0x3bf3a6cf} },}, +/**/ {{{0x55655889, 0xbf500200} }, +/**/ {{0xbf0fa436, 0xbbe9abe6} },}, +/**/ {{{0xe2e891cc, 0xbf4f83e0} }, +/**/ {{0x1b81bf62, 0x3be4aa59} },}, +/**/ {{{0x9b4589ce, 0xbf4f03c1} }, +/**/ {{0x8a47f50a, 0xbbe60518} },}, +/**/ {{{0xd3e0985f, 0xbf4e83a2} }, +/**/ {{0x5ef17e96, 0x3bed32d8} },}, +/**/ {{{0x8cb8bcc3, 0xbf4e0384} }, +/**/ {{0xf09afa4d, 0xbbeb7b30} },}, +/**/ {{{0xc5ccf647, 0xbf4d8366} }, +/**/ {{0xf586cec2, 0xbbd527fc} },}, +/**/ {{{0x7f1c4437, 0xbf4d0349} }, +/**/ {{0x4a686886, 0x3bc2bcf0} },}, +/**/ {{{0xb8a5a5e3, 0xbf4c832c} }, +/**/ {{0x721c2ebe, 0x3bc98f93} },}, +/**/ {{{0x72681a9e, 0xbf4c0310} }, +/**/ {{0xb5308d22, 0xbbe20f00} },}, +/**/ {{{0xac62a1bf, 0xbf4b82f4} }, +/**/ {{0x9737b561, 0xbbe1edd0} },}, +/**/ {{{0x66943a9f, 0xbf4b02d9} }, +/**/ {{0x23f894a1, 0xbbcc950b} },}, +/**/ {{{0xa0fbe49a, 0xbf4a82be} }, +/**/ {{0x866bc982, 0xbb81da04} },}, +/**/ {{{0x5b989f0f, 0xbf4a02a4} }, +/**/ {{0x9d76196e, 0xbbd9114d} },}, +/**/ {{{0x96696961, 0xbf49828a} }, +/**/ {{0xd3292fd6, 0x3bc10d20} },}, +/**/ {{{0x516d42f4, 0xbf490271} }, +/**/ {{0x2e9a5dd5, 0xbbee53a3} },}, +/**/ {{{0x8ca32b32, 0xbf488258} }, +/**/ {{0xd18f8004, 0xbbc55af5} },}, +/**/ {{{0x480a2185, 0xbf480240} }, +/**/ {{0xa9b0178a, 0xbbb32d23} },}, +/**/ {{{0x83a1255c, 0xbf478228} }, +/**/ {{0x8152093a, 0x3be84cc3} },}, +/**/ {{{0x3f673627, 0xbf470211} }, +/**/ {{0xf4881c71, 0xbbd0055a} },}, +/**/ {{{0x7b5b535c, 0xbf4681fa} }, +/**/ {{0xb98336ea, 0x3bd2b73f} },}, +/**/ {{{0x377c7c71, 0xbf4601e4} }, +/**/ {{0x2ed05089, 0xbbcdcbed} },}, +/**/ {{{0x73c9b0e1, 0xbf4581ce} }, +/**/ {{0x61414697, 0xbbdda0c2} },}, +/**/ {{{0x3041f02a, 0xbf4501b9} }, +/**/ {{0x22f8b33c, 0x3bee5d53} },}, +/**/ {{{0x6ce439ca, 0xbf4481a4} }, +/**/ {{0x9c25c999, 0xbbe5512f} },}, +/**/ {{{0x29af8d47, 0xbf440190} }, +/**/ {{0xa4df0dfd, 0x3b7f48c2} },}, +/**/ {{{0x66a2ea26, 0xbf43817c} }, +/**/ {{0x517febd8, 0x3bd157c0} },}, +/**/ {{{0x23bd4ff0, 0xbf430169} }, +/**/ {{0x0176d244, 0xbbe2e229} },}, +/**/ {{{0x60fdbe33, 0xbf428156} }, +/**/ {{0x175812b3, 0x3be64664} },}, +/**/ {{{0x1e63347c, 0xbf420144} }, +/**/ {{0xd9355524, 0xbbe39ab4} },}, +/**/ {{{0x5becb260, 0xbf418132} }, +/**/ {{0xb6e1edc9, 0x3be74b27} },}, +/**/ {{{0x19993772, 0xbf410121} }, +/**/ {{0x393ab56a, 0xbbaa390b} },}, +/**/ {{{0x5767c34c, 0xbf408110} }, +/**/ {{0xf8c7783b, 0x3bd128e6} },}, +/**/ {{{0x15575589, 0xbf400100} }, +/**/ {{0xf23ef222, 0x3bec8863} },}, +/**/ {{{0xa6cddb8d, 0xbf3f01e0} }, +/**/ {{0xcdd29c3f, 0x3b8a9419} },}, +/**/ {{{0x232b174e, 0xbf3e01c2} }, +/**/ {{0xd5f5b191, 0xbbc7cf55} },}, +/**/ {{{0x9fc45d9e, 0xbf3d01a4} }, +/**/ {{0xb5038e7e, 0x3bddc58f} },}, +/**/ {{{0x1c97adca, 0xbf3c0188} }, +/**/ {{0xbb933e41, 0x3bc0238d} },}, +/**/ {{{0x99a30728, 0xbf3b016c} }, +/**/ {{0xc3c43664, 0xbbabde04} },}, +/**/ {{{0x16e46913, 0xbf3a0152} }, +/**/ {{0x5adc3673, 0x3bafe081} },}, +/**/ {{{0x9459d2eb, 0xbf390138} }, +/**/ {{0xc2a33d26, 0xbbd949da} },}, +/**/ {{{0x12014418, 0xbf380120} }, +/**/ {{0xf76e0326, 0xbbd3acbc} },}, +/**/ {{{0x8fd8bc07, 0xbf370108} }, +/**/ {{0x4cd6ce34, 0x3bdbde09} },}, +/**/ {{{0x0dde3a29, 0xbf3600f2} }, +/**/ {{0x05442a35, 0xbbb0bc28} },}, +/**/ {{{0x8c0fbdf9, 0xbf3500dc} }, +/**/ {{0x0908cbf7, 0x3bd21c68} },}, +/**/ {{{0x0a6b46f4, 0xbf3400c8} }, +/**/ {{0x0f107564, 0xbbdbd35e} },}, +/**/ {{{0x88eed4a1, 0xbf3300b4} }, +/**/ {{0x49a3dcb8, 0xbbc22067} },}, +/**/ {{{0x0798668a, 0xbf3200a2} }, +/**/ {{0xe7c5d0e5, 0x3bcdb7f0} },}, +/**/ {{{0x8665fc3f, 0xbf310090} }, +/**/ {{0xc7f9d69c, 0xbbd00add} },}, +/**/ {{{0x05559559, 0xbf300080} }, +/**/ {{0xa0e20e2f, 0x3bddd332} },}, +/**/ {{{0x08ca62e5, 0xbf2e00e1} }, +/**/ {{0x3a04bb77, 0xbbb15ff9} },}, +/**/ {{{0x0725a061, 0xbf2c00c4} }, +/**/ {{0xcc052f3e, 0x3bc88ab0} },}, +/**/ {{{0x05b8e275, 0xbf2a00a9} }, +/**/ {{0xf5f3cbcf, 0xbbcbba1a} },}, +/**/ {{{0x04802882, 0xbf280090} }, +/**/ {{0xa5bd7bd0, 0x3bcec900} },}, +/**/ {{{0x037771ef, 0xbf260079} }, +/**/ {{0x9b7b54fa, 0x3bb77ea0} },}, +/**/ {{{0x029abe33, 0xbf240064} }, +/**/ {{0x3ae68d18, 0xbbc1bbf0} },}, +/**/ {{{0x01e60cd1, 0xbf220051} }, +/**/ {{0x2b45cfcd, 0x3bb1dcd9} },}, +/**/ {{{0x01555d56, 0xbf200040} }, +/**/ {{0x863f53f6, 0x3bcddd88} },}, +/**/ {{{0x01c95eb7, 0xbf1c0062} }, +/**/ {{0xaa4dfd9a, 0x3bbd88f7} },}, +/**/ {{{0x01200510, 0xbf180048} }, +/**/ {{0x4f3db50b, 0xbb984d46} },}, +/**/ {{{0x00a6ad1c, 0xbf140032} }, +/**/ {{0x28ff1135, 0x3bb2e44b} },}, +/**/ {{{0x00555655, 0xbf100020} }, +/**/ {{0xccd5f17f, 0xbbb62224} },}, +/**/ {{{0x004800a2, 0xbf080024} }, +/**/ {{0x8d690542, 0xbb484d09} },}, +/**/ {{{0x00155575, 0xbf000010} }, +/**/ {{0x37779c0a, 0xbba56222} },}, +/**/ {{{0x00055559, 0xbef00008} }, +/**/ {{0x22cccd5f, 0xbb955622} },}, +/**/ {{{0x00000000, 0x00000000} }, +/**/ {{0x00000000, 0x00000000} },}, +/**/ {{{0x000aaaa3, 0x3eeffff0} }, +/**/ {{0xbd110fec, 0xbb8553bb} },}, +/**/ {{{0x002aaa6b, 0x3effffe0} }, +/**/ {{0xe6661d42, 0xbb953bbb} },}, +/**/ {{{0x0047ff5e, 0x3f07ffdc} }, +/**/ {{0x0d69020e, 0x3b484c90} },}, +/**/ {{{0x00aaa8ab, 0x3f0fffc0} }, +/**/ {{0x10fec82c, 0xbba3bbc1} },}, +/**/ {{{0x00a6a83a, 0x3f13ffce} }, +/**/ {{0x81546808, 0xbbb2e45f} },}, +/**/ {{{0x011ffaf0, 0x3f17ffb8} }, +/**/ {{0x4f3d9b6a, 0x3b984c53} },}, +/**/ {{{0x01c94bf5, 0x3f1bff9e} }, +/**/ {{0xdaa368ee, 0xbbbd8990} },}, +/**/ {{{0x02aa9aab, 0x3f1fff80} }, +/**/ {{0x78af0afc, 0x3b910e66} },}, +/**/ {{{0x01e5f330, 0x3f21ffaf} }, +/**/ {{0x26467402, 0xbbb1df8d} },}, +/**/ {{{0x029a9723, 0x3f23ff9c} }, +/**/ {{0x303b23b1, 0x3bc1b965} },}, +/**/ {{{0x037738be, 0x3f25ff87} }, +/**/ {{0x53d3dc06, 0xbbb787a3} },}, +/**/ {{{0x047fd782, 0x3f27ff70} }, +/**/ {{0xa5c0aff0, 0xbbced098} },}, +/**/ {{{0x05b872e4, 0x3f29ff57} }, +/**/ {{0x81c30d42, 0x3bcbadd4} },}, +/**/ {{{0x07250a51, 0x3f2bff3c} }, +/**/ {{0xd6bad8c1, 0xbbc89dd6} },}, +/**/ {{{0x08c99d24, 0x3f2dff1f} }, +/**/ {{0xaede8ad0, 0x3bb12609} },}, +/**/ {{{0x0aaa2ab1, 0x3f2fff00} }, +/**/ {{0x4dc4e3dc, 0x3ba0bbc0} },}, +/**/ {{{0x8665591f, 0x3f30ff6f} }, +/**/ {{0x80357b54, 0xbbd013d3} },}, +/**/ {{{0x07979982, 0x3f31ff5e} }, +/**/ {{0x4817ebcd, 0xbbce0e70} },}, +/**/ {{{0x88edd619, 0x3f32ff4b} }, +/**/ {{0xc582abc3, 0xbbd72b9e} },}, +/**/ {{{0x0a6a0e74, 0x3f33ff38} }, +/**/ {{0xb95bc1fe, 0x3bdb81fc} },}, +/**/ {{{0x8c0e4220, 0x3f34ff23} }, +/**/ {{0x9b549aae, 0x3bcaed12} },}, +/**/ {{{0x0ddc70a1, 0x3f35ff0e} }, +/**/ {{0xd97a3c05, 0x3bacf6f3} },}, +/**/ {{{0x8fd69976, 0x3f36fef7} }, +/**/ {{0x6f810a3c, 0x3bab2dcf} },}, +/**/ {{{0x11febc18, 0x3f37fee0} }, +/**/ {{0xf5d3f323, 0x3bd2b9bc} },}, +/**/ {{{0x9456d7fb, 0x3f38fec7} }, +/**/ {{0x6eaa1d6a, 0xbbbfb258} },}, +/**/ {{{0x16e0ec8b, 0x3f39feae} }, +/**/ {{0xceeb34b1, 0xbbb6137a} },}, +/**/ {{{0x999ef930, 0x3f3afe93} }, +/**/ {{0xdc639b08, 0xbbde70e0} },}, +/**/ {{{0x1c92fd4a, 0x3f3bfe78} }, +/**/ {{0x713cc126, 0xbbc4ed10} },}, +/**/ {{{0x9fbef835, 0x3f3cfe5b} }, +/**/ {{0xcc0e81bd, 0xbb873d63} },}, +/**/ {{{0x2324e946, 0x3f3dfe3e} }, +/**/ {{0x62dd5deb, 0x3bc09164} },}, +/**/ {{{0xa6c6cfcc, 0x3f3efe1f} }, +/**/ {{0x3512d15c, 0x3bdac2da} },}, +/**/ {{{0x2aa6ab11, 0x3f3ffe00} }, +/**/ {{0x62cc632d, 0x3b999e2b} },}, +/**/ {{{0xd7633d2c, 0x3f407eef} }, +/**/ {{0x63ff6024, 0xbbebc98b} },}, +/**/ {{{0x19941e6e, 0x3f40fedf} }, +/**/ {{0xe0aa6338, 0xbbb194c2} },}, +/**/ {{{0xdbe6f8eb, 0x3f417ecd} }, +/**/ {{0x57b0f571, 0x3be4241b} },}, +/**/ {{{0x1e5ccc3c, 0x3f41febc} }, +/**/ {{0x895d3592, 0x3bdc657d} },}, +/**/ {{{0xe0f697f6, 0x3f427ea9} }, +/**/ {{0x1c0ec17c, 0x3be35a5d} },}, +/**/ {{{0x23b55bac, 0x3f42fe97} }, +/**/ {{0x3e538464, 0x3bd6cfb7} },}, +/**/ {{{0xe69a16ed, 0x3f437e83} }, +/**/ {{0x7cef2478, 0x3bee96f7} },}, +/**/ {{{0x29a5c947, 0x3f43fe70} }, +/**/ {{0xbf46e36a, 0xbbd4d578} },}, +/**/ {{{0xecd97242, 0x3f447e5b} }, +/**/ {{0x3ff7dd44, 0xbbc9eb66} },}, +/**/ {{{0x30361165, 0x3f44fe47} }, +/**/ {{0x7e93f2fd, 0x3be400d7} },}, +/**/ {{{0xf3bca635, 0x3f457e31} }, +/**/ {{0xd375017f, 0xbbe0e2a2} },}, +/**/ {{{0x376e3031, 0x3f45fe1c} }, +/**/ {{0x8a5ae7f6, 0xbbd524eb} },}, +/**/ {{{0xfb4baed7, 0x3f467e05} }, +/**/ {{0x4e85c4e9, 0x3be204fb} },}, +/**/ {{{0x3f5621a3, 0x3f46fdef} }, +/**/ {{0x34886d52, 0xbbdf09d7} },}, +/**/ {{{0x038e880b, 0x3f477dd8} }, +/**/ {{0x14e596a3, 0xbbb8900e} },}, +/**/ {{{0x47f5e185, 0x3f47fdc0} }, +/**/ {{0x57d202d3, 0xbbebfa5c} },}, +/**/ {{{0x0c8d2d81, 0x3f487da8} }, +/**/ {{0xd68c0614, 0x3be2f6ae} },}, +/**/ {{{0x51556b70, 0x3f48fd8f} }, +/**/ {{0xe08fd201, 0xbbd0f4f2} },}, +/**/ {{{0x164f9abc, 0x3f497d76} }, +/**/ {{0xa871af60, 0x3b5296b7} },}, +/**/ {{{0x5b7cbace, 0x3f49fd5c} }, +/**/ {{0x9f17d42d, 0x3beb6ed4} },}, +/**/ {{{0x20ddcb0d, 0x3f4a7d42} }, +/**/ {{0x67c30397, 0xbbcb1149} },}, +/**/ {{{0x6673cada, 0x3f4afd27} }, +/**/ {{0x45da594f, 0x3bd32225} },}, +/**/ {{{0x2c3fb996, 0x3f4b7d0c} }, +/**/ {{0x208d4630, 0xbbb68893} },}, +/**/ {{{0x7242969d, 0x3f4bfcf0} }, +/**/ {{0x2b3efe1c, 0x3bc5db4d} },}, +/**/ {{{0x387d6149, 0x3f4c7cd4} }, +/**/ {{0xed57d98a, 0x3be46eff} },}, +/**/ {{{0x7ef118f1, 0x3f4cfcb7} }, +/**/ {{0x06f300fb, 0x3becc554} },}, +/**/ {{{0x459ebce9, 0x3f4d7c9a} }, +/**/ {{0x13638eb6, 0x3be1d251} },}, +/**/ {{{0x8c874c82, 0x3f4dfc7c} }, +/**/ {{0xd57a176f, 0xbbe863e9} },}, +/**/ {{{0x53abc708, 0x3f4e7c5e} }, +/**/ {{0x9528e50d, 0x3be2d95c} },}, +/**/ {{{0x9b0d2bc8, 0x3f4efc3f} }, +/**/ {{0xa5f5b8b7, 0x3bd1e8e8} },}, +/**/ {{{0x62ac7a09, 0x3f4f7c20} }, +/**/ {{0x17802a46, 0x3b5c8123} },}, +/**/ {{{0xaa8ab110, 0x3f4ffc00} }, +/**/ {{0xeb9b6cdb, 0xbbe0fecb} },}, +/**/ {{{0x3954680f, 0x3f503df0} }, +/**/ {{0x1c693678, 0x3bdac89b} },}, +/**/ {{{0xdd83eb3a, 0x3f507ddf} }, +/**/ {{0x0a75ad5f, 0xbbf638f6} },}, +/**/ {{{0x41d461a5, 0x3f50bdcf} }, +/**/ {{0x45f05b10, 0x3bfd4bc9} },}, +/**/ {{{0x66464aef, 0x3f50fdbe} }, +/**/ {{0x6abbf59c, 0xbbbd0554} },}, +/**/ {{{0x4ada26b1, 0x3f513dad} }, +/**/ {{0x6036fe6f, 0x3be38c65} },}, +/**/ {{{0xef907485, 0x3f517d9b} }, +/**/ {{0xf158bbc3, 0x3bfdc8a1} },}, +/**/ {{{0x5469b404, 0x3f51bd8a} }, +/**/ {{0x55632e3f, 0xbbdea231} },}, +/**/ {{{0x796664c3, 0x3f51fd78} }, +/**/ {{0x2edb73c2, 0xbbe00849} },}, +/**/ {{{0x5e870657, 0x3f523d66} }, +/**/ {{0x0789343e, 0x3bfba943} },}, +/**/ {{{0x03cc1855, 0x3f527d54} }, +/**/ {{0xeafafc52, 0x3bc5f644} },}, +/**/ {{{0x69361a4e, 0x3f52bd41} }, +/**/ {{0xa4a6e79f, 0xbbf2f743} },}, +/**/ {{{0x8ec58bd2, 0x3f52fd2e} }, +/**/ {{0x5ceb1abf, 0xbbd4f786} },}, +/**/ {{{0x747aec71, 0x3f533d1b} }, +/**/ {{0x49dc497d, 0xbbf369e3} },}, +/**/ {{{0x1a56bbb8, 0x3f537d08} }, +/**/ {{0x3726b14a, 0xbbfc5e6f} },}, +/**/ {{{0x80597933, 0x3f53bcf4} }, +/**/ {{0x808f75a7, 0xbbfe8b82} },}, +/**/ {{{0xa683a46c, 0x3f53fce0} }, +/**/ {{0x9cd06ae6, 0x3be02719} },}, +/**/ {{{0x8cd5bced, 0x3f543ccc} }, +/**/ {{0x758f80f8, 0x3bf9f98d} },}, +/**/ {{{0x3350423e, 0x3f547cb8} }, +/**/ {{0x48401f45, 0xbbd79c3d} },}, +/**/ {{{0x99f3b3e4, 0x3f54bca3} }, +/**/ {{0x2fba8948, 0xbbf422b8} },}, +/**/ {{{0xc0c09163, 0x3f54fc8e} }, +/**/ {{0xf4044be8, 0x3bf32cc1} },}, +/**/ {{{0xa7b75a40, 0x3f553c79} }, +/**/ {{0xf2249008, 0xbbe72cac} },}, +/**/ {{{0x4ed88dfb, 0x3f557c64} }, +/**/ {{0x459a204f, 0xbbe7183c} },}, +/**/ {{{0xb624ac14, 0x3f55bc4e} }, +/**/ {{0xba26d3d7, 0x3bf8aa64} },}, +/**/ {{{0xdd9c340b, 0x3f55fc38} }, +/**/ {{0x45fa193c, 0x3bdbb2ff} },}, +/**/ {{{0xc53fa55c, 0x3f563c22} }, +/**/ {{0x0484397b, 0x3bd67249} },}, +/**/ {{{0x6d0f7f83, 0x3f567c0c} }, +/**/ {{0xf1e73188, 0xbbd183d7} },}, +/**/ {{{0xd50c41fa, 0x3f56bbf5} }, +/**/ {{0x4ab68187, 0xbbef433d} },}, +/**/ {{{0xfd366c39, 0x3f56fbde} }, +/**/ {{0x66e09e58, 0x3be796b8} },}, +/**/ {{{0xe58e7db8, 0x3f573bc7} }, +/**/ {{0x81e6e7e6, 0x3bf65ec5} },}, +/**/ {{{0x8e14f5ed, 0x3f577bb0} }, +/**/ {{0xa9463a9c, 0xbbdb944d} },}, +/**/ {{{0xf6ca544b, 0x3f57bb98} }, +/**/ {{0xc5eda344, 0xbbc396ec} },}, +/**/ {{{0x1faf1845, 0x3f57fb81} }, +/**/ {{0xbb624f97, 0x3beb9e6d} },}, +/**/ {{{0x08c3c14d, 0x3f583b69} }, +/**/ {{0xe6295bf2, 0xbbe6ee13} },}, +/**/ {{{0xb208ced1, 0x3f587b50} }, +/**/ {{0x6ca19875, 0x3bfcf1a5} },}, +/**/ {{{0x1b7ec041, 0x3f58bb38} }, +/**/ {{0x07b4fc7e, 0x3bf2d181} },}, +/**/ {{{0x45261509, 0x3f58fb1f} }, +/**/ {{0x21bad336, 0x3bc419c5} },}, +/**/ {{{0x2eff4c94, 0x3f593b06} }, +/**/ {{0x700b305b, 0xbbdc2a4c} },}, +/**/ {{{0xd90ae64c, 0x3f597aec} }, +/**/ {{0xa23f359c, 0xbbfc53d3} },}, +/**/ {{{0x43496198, 0x3f59bad3} }, +/**/ {{0xaed6b50f, 0x3bf0c270} },}, +/**/ {{{0x6dbb3de1, 0x3f59fab9} }, +/**/ {{0x7a8be031, 0xbbf11464} },}, +/**/ {{{0x5860fa8a, 0x3f5a3a9f} }, +/**/ {{0x470dbe32, 0x3beae9e7} },}, +/**/ {{{0x033b16f8, 0x3f5a7a85} }, +/**/ {{0xda1f8579, 0x3bfc4721} },}, +/**/ {{{0x6e4a128e, 0x3f5aba6a} }, +/**/ {{0x029258ce, 0xbbf41852} },}, +/**/ {{{0x998e6cab, 0x3f5afa4f} }, +/**/ {{0x2eb18782, 0xbbf28584} },}, +/**/ {{{0x8508a4af, 0x3f5b3a34} }, +/**/ {{0x23241a2c, 0xbbea7970} },}, +/**/ {{{0x30b939f8, 0x3f5b7a19} }, +/**/ {{0x600551b6, 0xbbf1d8db} },}, +/**/ {{{0x9ca0abe2, 0x3f5bb9fd} }, +/**/ {{0x8c26cc71, 0xbbeaa412} },}, +/**/ {{{0xc8bf79c8, 0x3f5bf9e1} }, +/**/ {{0x30427cfc, 0xbbe7f81b} },}, +/**/ {{{0xb5162303, 0x3f5c39c5} }, +/**/ {{0xd1f134e1, 0x3bd9ec5f} },}, +/**/ {{{0x61a526eb, 0x3f5c79a9} }, +/**/ {{0x8980e47d, 0x3bff0cb0} },}, +/**/ {{{0xce6d04d7, 0x3f5cb98c} }, +/**/ {{0xe84ca4e2, 0x3bf35aca} },}, +/**/ {{{0xfb6e3c1b, 0x3f5cf96f} }, +/**/ {{0x1b0bd69f, 0x3bf9b1b8} },}, +/**/ {{{0xe8a94c0b, 0x3f5d3952} }, +/**/ {{0x3ce51832, 0x3be21310} },}, +/**/ {{{0x961eb3f8, 0x3f5d7935} }, +/**/ {{0x840c58ce, 0x3bf90786} },}, +/**/ {{{0x03cef334, 0x3f5db918} }, +/**/ {{0xf2dfb3f4, 0xbbfe0048} },}, +/**/ {{{0x31ba890b, 0x3f5df8fa} }, +/**/ {{0x3e295bec, 0x3bfcf652} },}, +/**/ {{{0x1fe1f4ce, 0x3f5e38dc} }, +/**/ {{0x151c9300, 0xbbfc5ebe} },}, +/**/ {{{0xce45b5c6, 0x3f5e78bd} }, +/**/ {{0x8a25b9c7, 0xbbef2cc4} },}, +/**/ {{{0x3ce64b3e, 0x3f5eb89f} }, +/**/ {{0xa6fea7bd, 0x3bfe6d27} },}, +/**/ {{{0x6bc43481, 0x3f5ef880} }, +/**/ {{0x914a6dab, 0xbbf68037} },}, +/**/ {{{0x5adff0d4, 0x3f5f3861} }, +/**/ {{0xf909e0e6, 0xbbf1d2f3} },}, +/**/ {{{0x0a39ff7e, 0x3f5f7842} }, +/**/ {{0xff1e1f71, 0xbbf64661} },}, +/**/ {{{0x79d2dfc3, 0x3f5fb822} }, +/**/ {{0x5a6f9e9a, 0xbbd76ce8} },}, +/**/ {{{0xa9ab10e6, 0x3f5ff802} }, +/**/ {{0xa153e3b2, 0x3bfe29e3} },}, +/**/ {{{0x4ce18915, 0x3f601bf1} }, +/**/ {{0xa3a73044, 0xbbe57c28} },}, +/**/ {{{0x250db166, 0x3f603be1} }, +/**/ {{0xc1ad9590, 0x3c0fd271} },}, +/**/ {{{0xdd5a4107, 0x3f605bd0} }, +/**/ {{0xc424c676, 0x3bfe4b5d} },}, +/**/ {{{0x75c77796, 0x3f607bc0} }, +/**/ {{0xc0eff1ba, 0xbc068804} },}, +/**/ {{{0xee5594b0, 0x3f609baf} }, +/**/ {{0x51dbded5, 0xbc0ff798} },}, +/**/ {{{0x4704d7f2, 0x3f60bb9f} }, +/**/ {{0x2d5aba70, 0xbbf70ef4} },}, +/**/ {{{0x7fd580f9, 0x3f60db8e} }, +/**/ {{0x7ae804b5, 0xbbeccb65} },}, +/**/ {{{0x98c7cf60, 0x3f60fb7d} }, +/**/ {{0x1775134d, 0x3bfede2f} },}, +/**/ {{{0x91dc02c3, 0x3f611b6c} }, +/**/ {{0x91ca4a67, 0xbc04d41e} },}, +/**/ {{{0x6b125aba, 0x3f613b5b} }, +/**/ {{0x4a12201d, 0x3bfe6d0c} },}, +/**/ {{{0x246b16e0, 0x3f615b4a} }, +/**/ {{0x4d4238d3, 0x3bfe507d} },}, +/**/ {{{0xbde676cd, 0x3f617b38} }, +/**/ {{0x0640462a, 0x3bfe0272} },}, +/**/ {{{0x3784ba19, 0x3f619b27} }, +/**/ {{0x02285659, 0x3bd94ab3} },}, +/**/ {{{0x9146205b, 0x3f61bb15} }, +/**/ {{0x1cc35b7b, 0xbbff1e2e} },}, +/**/ {{{0xcb2ae929, 0x3f61db03} }, +/**/ {{0x12f6bf8d, 0xbc03ee8e} },}, +/**/ {{{0xe5335418, 0x3f61faf1} }, +/**/ {{0x7b7d619b, 0x3c0bae5f} },}, +/**/ {{{0xdf5fa0bf, 0x3f621adf} }, +/**/ {{0xb3b731b0, 0xbbf5546a} },}, +/**/ {{{0xb9b00eb0, 0x3f623acd} }, +/**/ {{0x105fd253, 0xbbafb2b0} },}, +/**/ {{{0x7424dd7f, 0x3f625abb} }, +/**/ {{0xca53444b, 0x3c011647} },}, +/**/ {{{0x0ebe4cbf, 0x3f627aa9} }, +/**/ {{0x592f3be8, 0x3c01678f} },}, +/**/ {{{0x897c9c02, 0x3f629a96} }, +/**/ {{0x4347451d, 0xbbef2b12} },}, +/**/ {{{0xe4600ad8, 0x3f62ba83} }, +/**/ {{0xb2a477bc, 0x3bfb5bb7} },}, +/**/ {{{0x1f68d8d3, 0x3f62da71} }, +/**/ {{0x7a5822e4, 0xbc0590e1} },}, +/**/ {{{0x3a974581, 0x3f62fa5e} }, +/**/ {{0x53123101, 0xbbf0f2e5} },}, +/**/ {{{0x35eb9072, 0x3f631a4b} }, +/**/ {{0x0e3f5fde, 0xbc018db4} },}, +/**/ {{{0x1165f933, 0x3f633a38} }, +/**/ {{0x8d0afb38, 0x3c0921d5} },}, +/**/ {{{0xcd06bf53, 0x3f635a24} }, +/**/ {{0xb5791b80, 0x3c01f6ba} },}, +/**/ {{{0x68ce225e, 0x3f637a11} }, +/**/ {{0xa1894236, 0x3bde2af8} },}, +/**/ {{{0xe4bc61e0, 0x3f6399fd} }, +/**/ {{0xd0f06ff3, 0xbc062a48} },}, +/**/ {{{0x40d1bd63, 0x3f63b9ea} }, +/**/ {{0x4b4f9c11, 0x3bffc80c} },}, +/**/ {{{0x7d0e7473, 0x3f63d9d6} }, +/**/ {{0x6a92c891, 0x3c02219b} },}, +/**/ {{{0x9972c699, 0x3f63f9c2} }, +/**/ {{0x790ade9e, 0x3c0d3590} },}, +/**/ {{{0x95fef35f, 0x3f6419ae} }, +/**/ {{0x792a458c, 0xbc01c279} },}, +/**/ {{{0x72b33a4b, 0x3f64399a} }, +/**/ {{0x327bffae, 0x3c02ce64} },}, +/**/ {{{0x2f8fdae7, 0x3f645986} }, +/**/ {{0xd231155c, 0xbc070aec} },}, +/**/ {{{0xcc9514b7, 0x3f647971} }, +/**/ {{0xe4bbf776, 0x3c0f373d} },}, +/**/ {{{0x49c32744, 0x3f64995d} }, +/**/ {{0xbf22b2a7, 0xbbf6d7e5} },}, +/**/ {{{0xa71a5211, 0x3f64b948} }, +/**/ {{0x64fe2936, 0xbbedec69} },}, +/**/ {{{0xe49ad4a3, 0x3f64d933} }, +/**/ {{0xabee4257, 0x3bf5fc4b} },}, +/**/ {{{0x0244ee7e, 0x3f64f91f} }, +/**/ {{0x3cd1474f, 0x3c0c6fe3} },}, +/**/ {{{0x0018df26, 0x3f65190a} }, +/**/ {{0xd11e7fa5, 0xbc023957} },}, +/**/ {{{0xde16e61b, 0x3f6538f4} }, +/**/ {{0x55380346, 0x3c006c31} },}, +/**/ {{{0x9c3f42e1, 0x3f6558df} }, +/**/ {{0xc4a5134c, 0xbc09b7d4} },}, +/**/ {{{0x3a9234f7, 0x3f6578ca} }, +/**/ {{0x2772c19c, 0xbc0e3f10} },}, +/**/ {{{0xb90ffbdd, 0x3f6598b4} }, +/**/ {{0x5592b468, 0x3be6f110} },}, +/**/ {{{0x17b8d714, 0x3f65b89f} }, +/**/ {{0xb251ace2, 0xbc0a5fea} },}, +/**/ {{{0x568d0619, 0x3f65d889} }, +/**/ {{0x315da285, 0xbc0aacc9} },}, +/**/ {{{0x758cc86a, 0x3f65f873} }, +/**/ {{0xba64d81a, 0xbbeb0782} },}, +/**/ {{{0x74b85d85, 0x3f66185d} }, +/**/ {{0x8e1eb3fa, 0xbc09b459} },}, +/**/ {{{0x541004e5, 0x3f663847} }, +/**/ {{0x1d86e863, 0x3bce9c22} },}, +/**/ {{{0x1393fe07, 0x3f665831} }, +/**/ {{0xcf37ee90, 0xbbfbeb77} },}, +/**/ {{{0xb3448865, 0x3f66781a} }, +/**/ {{0xc252e3c9, 0xbc02dc68} },}, +/**/ {{{0x3321e379, 0x3f669804} }, +/**/ {{0xb40b3741, 0xbbe73a0b} },}, + }; + +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/upow.h glibc-2.2.3/sysdeps/ieee754/dbl-64/upow.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/upow.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/upow.h Mon Mar 12 18:04:29 2001 @@ -0,0 +1,86 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:upow.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef UPOW_H +#define UPOW_H + +#include "mydefs.h" + +#ifdef BIG_ENDI + const static mynumber +/**/ nZERO = {{0x80000000, 0}}, /* -0.0 */ +/**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */ +/**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */ +/**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */ +/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */ +/**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */ +/**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */ +/**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */ +/**/ bigv = {{0x4207ffff, 0xfff8016a}}, /* 1.5*2**33-1+362*2**-19 */ +/**/ t52 = {{0x43300000, 0x00000000}}, /* 2**52 */ +/**/ two52e = {{0x43300000, 0x000003ff}}; /* 2**52' */ + + mynumber +/**/ two52 = {{0x43300000, 0x00000000}}; /* 2**52 */ + +#else +#ifdef LITTLE_ENDI + const static mynumber +/**/ nZERO = {{0, 0x80000000}}, /* -0.0 */ +/**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */ +/**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */ +/**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */ +/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */ +/**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */ +/**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */ +/**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */ +/**/ bigv = {{0xfff8016a, 0x4207ffff}}, /* 1.5*2**33-1+362*2**-19 */ +/**/ t52 = {{0x00000000, 0x43300000}}, /* 2**52 */ +/**/ two52e = {{0x000003ff, 0x43300000}}; /* 2**52' */ + + mynumber +/**/ two52 = {{0x00000000, 0x43300000}}; /* 2**52 */ + +#endif +#endif + +const static double p2=-0.5, p3 = 3.3333333333333333333e-1, p4 = -0.25, + q2 = -0.5, q3 = 3.3333333333331404e-01, q4 = -2.4999999999996436e-01, + q5 = 2.0000010500004459e-01, q6 = -1.6666678916688004e-01, + r3 = 3.33333333333333333372884096563030E-01, + r4 = -2.50000000000000000213574153875908E-01, + r5 = 1.99999999999683593814072199830603E-01, + r6 = -1.66666666666065494878165510225378E-01, + r7 = 1.42857517857114380606360005067609E-01, + r8 = -1.25000449999974370683775964001702E-01, + s3 = 0.333251953125000000e0, + ss3 = 8.138020833333333333e-05, + s4 = -2.500000000000000000e-01, + s5 = 1.999999999999960937e-01, + s6 = -1.666666666666592447e-01, + s7 = 1.428571845238194705e-01, + s8 = -1.250000500000149097e-01; +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/upow.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/upow.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/upow.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/upow.tbl Sun Mar 11 22:59:39 2001 @@ -0,0 +1,10169 @@ +/****************************************************************/ +/* TABLES FOR THE upow() FUNCTION */ +/****************************************************************/ + + + +#ifdef BIG_ENDI +static const union {int4 i[5800]; double x[2900];} ui = { .i = { +/**/ 0x3FF6A000, 0x00000000, +/**/ 0x3F33CD15, 0x3729043E, +/**/ 0xBFD63003, 0x0B3AB000, +/**/ 0x3D2DB623, 0xE731AE00, +/**/ 0x3FF69800, 0x00000000, +/**/ 0x3F33F349, 0xCC7267D0, +/**/ 0xBFD61965, 0xCDB03000, +/**/ 0x3D2F08AD, 0x603C488E, +/**/ 0x3FF69000, 0x00000000, +/**/ 0x3F3473A8, 0x8D0BFD2E, +/**/ 0xBFD602D0, 0x8AF09000, +/**/ 0xBD1EBE91, 0x76DF3F65, +/**/ 0x3FF68800, 0x00000000, +/**/ 0x3F354DD2, 0x390B9ED0, +/**/ 0xBFD5EC43, 0x3D5C3000, +/**/ 0xBD36B71A, 0x1229D17F, +/**/ 0x3FF68000, 0x00000000, +/**/ 0x3F368168, 0x16816817, +/**/ 0xBFD5D5BD, 0xDF596000, +/**/ 0x3D0A0B2A, 0x08A465DC, +/**/ 0x3FF67800, 0x00000000, +/**/ 0x3F380E0B, 0xF08C7765, +/**/ 0xBFD5BF40, 0x6B544000, +/**/ 0x3D227023, 0xEB68981C, +/**/ 0x3FF67000, 0x00000000, +/**/ 0x3F39F360, 0x16719F36, +/**/ 0xBFD5A8CA, 0xDBBEE000, +/**/ 0x3CF7C79B, 0x0AF7ECF8, +/**/ 0x3FF66800, 0x00000000, +/**/ 0x3F3C3107, 0x5AB40167, +/**/ 0xBFD5925D, 0x2B113000, +/**/ 0x3D369BF5, 0xA7A56F34, +/**/ 0x3FF66000, 0x00000000, +/**/ 0x3F3EC6A5, 0x122F9016, +/**/ 0xBFD57BF7, 0x53C8D000, +/**/ 0xBD1FADED, 0xEE5D40EF, +/**/ 0x3FF65C00, 0x00000000, +/**/ 0xBF3E4C22, 0xECCA9097, +/**/ 0xBFD56599, 0x50695000, +/**/ 0xBD14C5FD, 0x2BADC774, +/**/ 0x3FF65400, 0x00000000, +/**/ 0xBF3B07AC, 0x4B55CC62, +/**/ 0xBFD54F43, 0x1B7BE000, +/**/ 0xBD1A8954, 0xC0910952, +/**/ 0x3FF64C00, 0x00000000, +/**/ 0xBF376C52, 0x32DA090E, +/**/ 0xBFD538F4, 0xAF8F7000, +/**/ 0xBD27EC02, 0xE45547CE, +/**/ 0x3FF64400, 0x00000000, +/**/ 0xBF337A6F, 0x4DE9BD38, +/**/ 0xBFD522AE, 0x0738A000, +/**/ 0xBD2EBE70, 0x8164C759, +/**/ 0x3FF63C00, 0x00000000, +/**/ 0xBF2E64BB, 0x923C708B, +/**/ 0xBFD50C6F, 0x1D11C000, +/**/ 0x3D3A0E6B, 0x7E827C2C, +/**/ 0x3FF63400, 0x00000000, +/**/ 0xBF2528EE, 0xA7E43FD4, +/**/ 0xBFD4F637, 0xEBBAA000, +/**/ 0x3D3FC158, 0xCB3124B9, +/**/ 0x3FF62C00, 0x00000000, +/**/ 0xBF168454, 0x86689DF7, +/**/ 0xBFD4E008, 0x6DD8C000, +/**/ 0x3D34D692, 0xA1E44788, +/**/ 0x3FF62400, 0x00000000, +/**/ 0xBED623FA, 0x77016240, +/**/ 0xBFD4C9E0, 0x9E173000, +/**/ 0x3D2E2089, 0x1B0AD8A4, +/**/ 0x3FF61C00, 0x00000000, +/**/ 0x3F151300, 0x58715130, +/**/ 0xBFD4B3C0, 0x77268000, +/**/ 0x3D165B46, 0x81052B9F, +/**/ 0x3FF61400, 0x00000000, +/**/ 0x3F266D06, 0x35D2754E, +/**/ 0xBFD49DA7, 0xF3BCC000, +/**/ 0xBD307B33, 0x4DAF4B9A, +/**/ 0x3FF60C00, 0x00000000, +/**/ 0x3F317C61, 0xDA197F23, +/**/ 0xBFD48797, 0x0E958000, +/**/ 0xBD3DC1B8, 0x465CF25F, +/**/ 0x3FF60400, 0x00000000, +/**/ 0x3F381605, 0x81605816, +/**/ 0xBFD4718D, 0xC271C000, +/**/ 0xBD306C18, 0xFB4C14C5, +/**/ 0x3FF5FC00, 0x00000000, +/**/ 0x3F3F0317, 0xB5C6F559, +/**/ 0xBFD45B8C, 0x0A17E000, +/**/ 0x3D0D9120, 0xE7D0A853, +/**/ 0x3FF5F800, 0x00000000, +/**/ 0xBF39BCBD, 0x6D2041E3, +/**/ 0xBFD44591, 0xE053A000, +/**/ 0x3D06E958, 0x92923D88, +/**/ 0x3FF5F000, 0x00000000, +/**/ 0xBF3229CF, 0x5604CC40, +/**/ 0xBFD42F9F, 0x3FF62000, +/**/ 0xBD390644, 0x0F7D3354, +/**/ 0x3FF5E800, 0x00000000, +/**/ 0xBF2488E5, 0xFD431489, +/**/ 0xBFD419B4, 0x23D5F000, +/**/ 0x3D3CE379, 0x226DE3EC, +/**/ 0x3FF5E000, 0x00000000, +/**/ 0xBF0067E7, 0x6424E9C9, +/**/ 0xBFD403D0, 0x86CEA000, +/**/ 0xBD3E6EF5, 0x74487308, +/**/ 0x3FF5D800, 0x00000000, +/**/ 0x3F19F0FB, 0x38A94D24, +/**/ 0xBFD3EDF4, 0x63C17000, +/**/ 0x3D3F067C, 0x297F2C3F, +/**/ 0x3FF5D000, 0x00000000, +/**/ 0x3F2EADD9, 0x23CAD2AA, +/**/ 0xBFD3D81F, 0xB5947000, +/**/ 0x3D222C7C, 0x2A9D37A4, +/**/ 0x3FF5C800, 0x00000000, +/**/ 0x3F3882B9, 0x31057262, +/**/ 0xBFD3C252, 0x77333000, +/**/ 0xBD183B54, 0xB606BD5C, +/**/ 0x3FF5C400, 0x00000000, +/**/ 0xBF3E00AE, 0x10FFA8F8, +/**/ 0xBFD3AC8C, 0xA38E6000, +/**/ 0x3D2D0BEF, 0xBC02BE4A, +/**/ 0x3FF5BC00, 0x00000000, +/**/ 0xBF34339B, 0x8056EAF3, +/**/ 0xBFD396CE, 0x359BC000, +/**/ 0x3D05839C, 0x5663663D, +/**/ 0x3FF5B400, 0x00000000, +/**/ 0xBF242CC1, 0xF31D7FD5, +/**/ 0xBFD38117, 0x28565000, +/**/ 0x3D2A71E4, 0x93A0702B, +/**/ 0x3FF5AC00, 0x00000000, +/**/ 0x3ED5AC05, 0x6B015AC0, +/**/ 0xBFD36B67, 0x76BE1000, +/**/ 0xBD116ECD, 0xB0F177C8, +/**/ 0x3FF5A400, 0x00000000, +/**/ 0x3F26268D, 0x5BA55E5A, +/**/ 0xBFD355BF, 0x1BD83000, +/**/ 0x3D2BA99B, 0x8964F0E8, +/**/ 0x3FF59C00, 0x00000000, +/**/ 0x3F361F12, 0x3CCAA376, +/**/ 0xBFD3401E, 0x12AED000, +/**/ 0x3D317C73, 0x556E291D, +/**/ 0x3FF59800, 0x00000000, +/**/ 0xBF3E863D, 0x62D32417, +/**/ 0xBFD32A84, 0x56512000, +/**/ 0xBD04F928, 0x139AF5D6, +/**/ 0x3FF59000, 0x00000000, +/**/ 0xBF32DCF7, 0xEA712DCF, +/**/ 0xBFD314F1, 0xE1D36000, +/**/ 0x3D28E27A, 0xD3213CB8, +/**/ 0x3FF58800, 0x00000000, +/**/ 0xBF1B95B2, 0xA0CC87E8, +/**/ 0xBFD2FF66, 0xB04EB000, +/**/ 0x3D38AED2, 0x541E6E2E, +/**/ 0x3FF58000, 0x00000000, +/**/ 0x3F158056, 0x01580560, +/**/ 0xBFD2E9E2, 0xBCE12000, +/**/ 0xBD24300C, 0x128D1DC2, +/**/ 0x3FF57800, 0x00000000, +/**/ 0x3F31F340, 0x15791F34, +/**/ 0xBFD2D466, 0x02ADD000, +/**/ 0x3D288D0D, 0xDCD54196, +/**/ 0x3FF57000, 0x00000000, +/**/ 0x3F3ED3C5, 0x06B39A23, +/**/ 0xBFD2BEF0, 0x7CDC9000, +/**/ 0xBD2A9CFA, 0x4A5004F4, +/**/ 0x3FF56C00, 0x00000000, +/**/ 0xBF33FEA9, 0x53FEA954, +/**/ 0xBFD2A982, 0x269A4000, +/**/ 0x3D22058E, 0x557285CF, +/**/ 0x3FF56400, 0x00000000, +/**/ 0xBF1A1160, 0xEB478503, +/**/ 0xBFD2941A, 0xFB187000, +/**/ 0x3D3210C2, 0xB730E28B, +/**/ 0x3FF55C00, 0x00000000, +/**/ 0x3F1D09AD, 0xE4A18B2E, +/**/ 0xBFD27EBA, 0xF58D9000, +/**/ 0x3D2B1988, 0x00B4BDA7, +/**/ 0x3FF55400, 0x00000000, +/**/ 0x3F355555, 0x55555555, +/**/ 0xBFD26962, 0x1134E000, +/**/ 0x3D31B61F, 0x10522625, +/**/ 0x3FF55000, 0x00000000, +/**/ 0xBF3C4BE6, 0xB319A21F, +/**/ 0xBFD25410, 0x494E5000, +/**/ 0xBD3B1D7A, 0xC0EF77F2, +/**/ 0x3FF54800, 0x00000000, +/**/ 0xBF2B4328, 0x8FA03FD5, +/**/ 0xBFD23EC5, 0x991EC000, +/**/ 0x3D36DBE4, 0x48A2E522, +/**/ 0x3FF54000, 0x00000000, +/**/ 0x3EF54015, 0x40154015, +/**/ 0xBFD22981, 0xFBEF8000, +/**/ 0x3D3A1421, 0x609580DA, +/**/ 0x3FF53800, 0x00000000, +/**/ 0x3F30948F, 0x40FEAC6F, +/**/ 0xBFD21445, 0x6D0EC000, +/**/ 0x3D3CAF04, 0x28B728A3, +/**/ 0x3FF53400, 0x00000000, +/**/ 0xBF3FE034, 0xFD04F7B8, +/**/ 0xBFD1FF0F, 0xE7CF4000, +/**/ 0xBD3E9D5B, 0x513FF0C1, +/**/ 0x3FF52C00, 0x00000000, +/**/ 0xBF300A95, 0x7FAB5403, +/**/ 0xBFD1E9E1, 0x6788A000, +/**/ 0x3D382EAE, 0xD3C8B65E, +/**/ 0x3FF52400, 0x00000000, +/**/ 0x3EB52401, 0x52401524, +/**/ 0xBFD1D4B9, 0xE796C000, +/**/ 0xBD222A66, 0x7C42E56D, +/**/ 0x3FF51C00, 0x00000000, +/**/ 0x3F307EAE, 0x2F8151D0, +/**/ 0xBFD1BF99, 0x635A7000, +/**/ 0x3D31AC89, 0x575C2125, +/**/ 0x3FF51800, 0x00000000, +/**/ 0xBF3ECE3F, 0xEAE9ECE4, +/**/ 0xBFD1AA7F, 0xD638D000, +/**/ 0xBD29F60A, 0x9616F7A0, +/**/ 0x3FF51000, 0x00000000, +/**/ 0xBF2BA3DD, 0xC7675243, +/**/ 0xBFD1956D, 0x3B9BC000, +/**/ 0xBD27D2F7, 0x3AD1AA14, +/**/ 0x3FF50800, 0x00000000, +/**/ 0x3F0B9AC8, 0x764E368D, +/**/ 0xBFD18061, 0x8EF19000, +/**/ 0x3D3482FF, 0xC86D38E5, +/**/ 0x3FF50000, 0x00000000, +/**/ 0x3F350150, 0x15015015, +/**/ 0xBFD16B5C, 0xCBAD0000, +/**/ 0x3D323299, 0x042D74BF, +/**/ 0x3FF4FC00, 0x00000000, +/**/ 0xBF392851, 0x4A683C50, +/**/ 0xBFD1565E, 0xED456000, +/**/ 0x3CEE75AD, 0xFB6ABA25, +/**/ 0x3FF4F400, 0x00000000, +/**/ 0xBF1C2748, 0xACD95EF0, +/**/ 0xBFD14167, 0xEF367000, +/**/ 0xBD3E0C07, 0x824DAAF5, +/**/ 0x3FF4EC00, 0x00000000, +/**/ 0x3F26B90D, 0x67A47465, +/**/ 0xBFD12C77, 0xCD007000, +/**/ 0xBD13B294, 0x8A11F797, +/**/ 0x3FF4E400, 0x00000000, +/**/ 0x3F3E0A72, 0xF0539783, +/**/ 0xBFD1178E, 0x8227E000, +/**/ 0xBD31EF78, 0xCE2D07F2, +/**/ 0x3FF4E000, 0x00000000, +/**/ 0xBF2E00A6, 0xF87FD642, +/**/ 0xBFD102AC, 0x0A35D000, +/**/ 0x3D2F1FBD, 0xDFDFD686, +/**/ 0x3FF4D800, 0x00000000, +/**/ 0x3F10EFB7, 0x0B12E3FD, +/**/ 0xBFD0EDD0, 0x60B78000, +/**/ 0xBD0019B5, 0x2D8435F5, +/**/ 0x3FF4D000, 0x00000000, +/**/ 0x3F37BEF1, 0x5CB4DBE5, +/**/ 0xBFD0D8FB, 0x813EB000, +/**/ 0xBD1EE8C8, 0x8753FA35, +/**/ 0x3FF4CC00, 0x00000000, +/**/ 0xBF34778D, 0xA50918B1, +/**/ 0xBFD0C42D, 0x67616000, +/**/ 0xBD27188B, 0x163CEAE9, +/**/ 0x3FF4C400, 0x00000000, +/**/ 0xBED9F4F7, 0xE37288EC, +/**/ 0xBFD0AF66, 0x0EB9E000, +/**/ 0xBD23C7C3, 0xF528D80A, +/**/ 0x3FF4BC00, 0x00000000, +/**/ 0x3F33EDDA, 0x68FE0E42, +/**/ 0xBFD09AA5, 0x72E6C000, +/**/ 0xBD3B50A1, 0xE1734342, +/**/ 0x3FF4B800, 0x00000000, +/**/ 0xBF3776C6, 0xB72E47D9, +/**/ 0xBFD085EB, 0x8F8AE000, +/**/ 0xBD3E5D51, 0x3F45FE7B, +/**/ 0x3FF4B000, 0x00000000, +/**/ 0xBF04AFD6, 0xA052BF5B, +/**/ 0xBFD07138, 0x604D6000, +/**/ 0x3D3E7632, 0x4E912B17, +/**/ 0x3FF4A800, 0x00000000, +/**/ 0x3F328FFA, 0xD5B5C015, +/**/ 0xBFD05C8B, 0xE0D96000, +/**/ 0xBD2AD0F1, 0xC77CCB58, +/**/ 0x3FF4A400, 0x00000000, +/**/ 0xBF380528, 0x9FEB5D80, +/**/ 0xBFD047E6, 0x0CDE8000, +/**/ 0xBD2DBDF1, 0x0D397F3C, +/**/ 0x3FF49C00, 0x00000000, +/**/ 0xBF02AD3E, 0x25FF5B21, +/**/ 0xBFD03346, 0xE0106000, +/**/ 0xBCF89FF8, 0xA966395C, +/**/ 0x3FF49400, 0x00000000, +/**/ 0x3F339E3B, 0x2D066EA2, +/**/ 0xBFD01EAE, 0x5626C000, +/**/ 0xBD3A43DC, 0xFADE85AE, +/**/ 0x3FF49000, 0x00000000, +/**/ 0xBF3629C1, 0xAFB2E932, +/**/ 0xBFD00A1C, 0x6ADDA000, +/**/ 0xBD31CD8D, 0x688B9E18, +/**/ 0x3FF48800, 0x00000000, +/**/ 0x3ED48805, 0x22014880, +/**/ 0xBFCFEB22, 0x33EA0000, +/**/ 0xBD2F3418, 0xDE00938B, +/**/ 0x3FF48000, 0x00000000, +/**/ 0x3F37119F, 0x3D324D89, +/**/ 0xBFCFC218, 0xBE620000, +/**/ 0xBD34BBA4, 0x6F1CF6A0, +/**/ 0x3FF47C00, 0x00000000, +/**/ 0xBF31EB85, 0x1EB851EC, +/**/ 0xBFCF991C, 0x6CB3C000, +/**/ 0x3D390D04, 0xCD7CC834, +/**/ 0x3FF47400, 0x00000000, +/**/ 0x3F1569C9, 0xAAFC7C01, +/**/ 0xBFCF702D, 0x36778000, +/**/ 0x3D108195, 0x16673E23, +/**/ 0x3FF46C00, 0x00000000, +/**/ 0x3F3CE345, 0x96066250, +/**/ 0xBFCF474B, 0x134E0000, +/**/ 0x3D3BAE49, 0xF1DF7B5E, +/**/ 0x3FF46800, 0x00000000, +/**/ 0xBF26A297, 0x1D02DE87, +/**/ 0xBFCF1E75, 0xFADFA000, +/**/ 0x3D20862B, 0x25D83F6D, +/**/ 0x3FF46000, 0x00000000, +/**/ 0x3F2978FE, 0xB9F34381, +/**/ 0xBFCEF5AD, 0xE4DD0000, +/**/ 0x3CCA2115, 0x65BB8E11, +/**/ 0x3FF45C00, 0x00000000, +/**/ 0xBF3AF398, 0xF6C71366, +/**/ 0xBFCECCF2, 0xC8FEA000, +/**/ 0x3D3BEC63, 0xA3E75640, +/**/ 0x3FF45400, 0x00000000, +/**/ 0xBF030E9C, 0x449AFF5D, +/**/ 0xBFCEA444, 0x9F04A000, +/**/ 0xBD35E916, 0x63732A36, +/**/ 0x3FF44C00, 0x00000000, +/**/ 0x3F367190, 0xF8B42EF3, +/**/ 0xBFCE7BA3, 0x5EB78000, +/**/ 0x3D0D5EEE, 0x23793649, +/**/ 0x3FF44800, 0x00000000, +/**/ 0xBF3079A9, 0xD260511C, +/**/ 0xBFCE530E, 0xFFE72000, +/**/ 0x3D3FDBDB, 0xB13F7C18, +/**/ 0x3FF44000, 0x00000000, +/**/ 0x3F21B87C, 0x0B644FBE, +/**/ 0xBFCE2A87, 0x7A6B2000, +/**/ 0xBD382381, 0x7787081A, +/**/ 0x3FF43C00, 0x00000000, +/**/ 0xBF3D8CF5, 0x411B2E25, +/**/ 0xBFCE020C, 0xC6236000, +/**/ 0x3D252B00, 0xADB91424, +/**/ 0x3FF43400, 0x00000000, +/**/ 0xBF0DAC08, 0xD6A60978, +/**/ 0xBFCDD99E, 0xDAF6E000, +/**/ 0x3D302EC6, 0x69C756EB, +/**/ 0x3FF42C00, 0x00000000, +/**/ 0x3F36625D, 0x51F86EFA, +/**/ 0xBFCDB13D, 0xB0D48000, +/**/ 0xBD32806A, 0x847527E6, +/**/ 0x3FF42800, 0x00000000, +/**/ 0xBF2E8B2D, 0xA8766564, +/**/ 0xBFCD88E9, 0x3FB30000, +/**/ 0x3D375F28, 0x0234BF51, +/**/ 0x3FF42000, 0x00000000, +/**/ 0x3F26A4CB, 0xCB2A247B, +/**/ 0xBFCD60A1, 0x7F904000, +/**/ 0x3D35D6E0, 0x6FC20D39, +/**/ 0x3FF41C00, 0x00000000, +/**/ 0xBF39D5E8, 0xC17DF552, +/**/ 0xBFCD3866, 0x68720000, +/**/ 0x3D373650, 0xB38932BC, +/**/ 0x3FF41400, 0x00000000, +/**/ 0x3EF41414, 0x14141414, +/**/ 0xBFCD1037, 0xF2656000, +/**/ 0x3D084A7E, 0x75B6F6E4, +/**/ 0x3FF40C00, 0x00000000, +/**/ 0x3F3C97A8, 0x43AE87FD, +/**/ 0xBFCCE816, 0x157F2000, +/**/ 0x3D29E0AB, 0xA2099515, +/**/ 0x3FF40800, 0x00000000, +/**/ 0xBF1F4BBC, 0x66A67E6F, +/**/ 0xBFCCC000, 0xC9DB4000, +/**/ 0x3D1D6D58, 0x5D57AFF9, +/**/ 0x3FF40000, 0x00000000, +/**/ 0x3F340140, 0x14014014, +/**/ 0xBFCC97F8, 0x079D4000, +/**/ 0xBD23B161, 0xA8C6E6C5, +/**/ 0x3FF3FC00, 0x00000000, +/**/ 0xBF2FD809, 0xFD809FD8, +/**/ 0xBFCC6FFB, 0xC6F00000, +/**/ 0xBD3EE138, 0xD3A69D43, +/**/ 0x3FF3F400, 0x00000000, +/**/ 0x3F28CA0E, 0x57EE89D2, +/**/ 0xBFCC480C, 0x0005C000, +/**/ 0xBD39A294, 0xD5E44E76, +/**/ 0x3FF3F000, 0x00000000, +/**/ 0xBF370BD5, 0xA50F9260, +/**/ 0xBFCC2028, 0xAB180000, +/**/ 0x3D292E0E, 0xE55C7AC6, +/**/ 0x3FF3E800, 0x00000000, +/**/ 0x3F1704AA, 0x75945FCE, +/**/ 0xBFCBF851, 0xC0676000, +/**/ 0x3D35420E, 0x4C0854AD, +/**/ 0x3FF3E400, 0x00000000, +/**/ 0xBF3D3431, 0xB56FD83C, +/**/ 0xBFCBD087, 0x383BE000, +/**/ 0x3D2D4BC4, 0x595412B6, +/**/ 0x3FF3DC00, 0x00000000, +/**/ 0x3EB3DC01, 0x3DC013DC, +/**/ 0xBFCBA8C9, 0x0AE4A000, +/**/ 0xBD3A32E7, 0xF44432DA, +/**/ 0x3FF3D400, 0x00000000, +/**/ 0x3F3D991A, 0xA75C5BBD, +/**/ 0xBFCB8117, 0x30B82000, +/**/ 0xBD1E9068, 0x3B9CD768, +/**/ 0x3FF3D000, 0x00000000, +/**/ 0xBF1292BA, 0x59C52F5D, +/**/ 0xBFCB5971, 0xA213A000, +/**/ 0xBD39B50E, 0x83AA91DF, +/**/ 0x3FF3C800, 0x00000000, +/**/ 0x3F395A47, 0xBABE7440, +/**/ 0xBFCB31D8, 0x575BC000, +/**/ 0xBD3C794E, 0x562A63CB, +/**/ 0x3FF3C400, 0x00000000, +/**/ 0xBF20D475, 0x58A0943A, +/**/ 0xBFCB0A4B, 0x48FC2000, +/**/ 0x3D22E72D, 0x5C3998ED, +/**/ 0x3FF3BC00, 0x00000000, +/**/ 0x3F360D92, 0x3295482C, +/**/ 0xBFCAE2CA, 0x6F672000, +/**/ 0xBD37A8D5, 0xAE54F550, +/**/ 0x3FF3B800, 0x00000000, +/**/ 0xBF267D12, 0xCAB48651, +/**/ 0xBFCABB55, 0xC316A000, +/**/ 0x3D38A65A, 0xCAF14CD8, +/**/ 0x3FF3B000, 0x00000000, +/**/ 0x3F33B13B, 0x13B13B14, +/**/ 0xBFCA93ED, 0x3C8AE000, +/**/ 0x3D287243, 0x50562169, +/**/ 0x3FF3AC00, 0x00000000, +/**/ 0xBF2A46AF, 0x2C8FD3BF, +/**/ 0xBFCA6C90, 0xD44B8000, +/**/ 0x3D3F63B7, 0xF037B0C6, +/**/ 0x3FF3A400, 0x00000000, +/**/ 0x3F324387, 0xAC822610, +/**/ 0xBFCA4540, 0x82E6A000, +/**/ 0xBD360A77, 0xC81F7171, +/**/ 0x3FF3A000, 0x00000000, +/**/ 0xBF2C34BB, 0xA1923DEE, +/**/ 0xBFCA1DFC, 0x40F1C000, +/**/ 0x3D301E0F, 0x004F3781, +/**/ 0x3FF39800, 0x00000000, +/**/ 0x3F31C2C1, 0x87F63372, +/**/ 0xBFC9F6C4, 0x0708A000, +/**/ 0x3D3337D9, 0x4BCD3F43, +/**/ 0x3FF39400, 0x00000000, +/**/ 0xBF2C4AA0, 0xE11BD52E, +/**/ 0xBFC9CF97, 0xCDCE0000, +/**/ 0xBD3D862F, 0x10C414E3, +/**/ 0x3FF38C00, 0x00000000, +/**/ 0x3F322D36, 0x6088DBF4, +/**/ 0xBFC9A877, 0x8DEBA000, +/**/ 0xBD3470FA, 0x3EFEC390, +/**/ 0x3FF38800, 0x00000000, +/**/ 0xBF2A8BBF, 0x503F774E, +/**/ 0xBFC98163, 0x4011A000, +/**/ 0xBD34EADD, 0x9E9045E2, +/**/ 0x3FF38000, 0x00000000, +/**/ 0x3F338138, 0x13813814, +/**/ 0xBFC95A5A, 0xDCF70000, +/**/ 0xBD07F228, 0x58A0FF6F, +/**/ 0x3FF37C00, 0x00000000, +/**/ 0xBF26FB6F, 0x1B177053, +/**/ 0xBFC9335E, 0x5D594000, +/**/ 0xBD33115C, 0x3ABD47DA, +/**/ 0x3FF37400, 0x00000000, +/**/ 0x3F35BD1C, 0x945EDC20, +/**/ 0xBFC90C6D, 0xB9FCC000, +/**/ 0x3D1935F5, 0x7718D7CA, +/**/ 0x3FF37000, 0x00000000, +/**/ 0xBF219D00, 0x4DBDCC60, +/**/ 0xBFC8E588, 0xEBAC2000, +/**/ 0xBD3B7D5C, 0xAB2D1140, +/**/ 0x3FF36800, 0x00000000, +/**/ 0x3F38DF3D, 0xE0747954, +/**/ 0xBFC8BEAF, 0xEB390000, +/**/ 0x3D073D54, 0xAAE92CD1, +/**/ 0x3FF36400, 0x00000000, +/**/ 0xBF14E775, 0xD9D3C49F, +/**/ 0xBFC897E2, 0xB17B2000, +/**/ 0x3D296B37, 0x380CBE9E, +/**/ 0x3FF35C00, 0x00000000, +/**/ 0x3F3CE5F9, 0xF2AF821E, +/**/ 0xBFC87121, 0x3750E000, +/**/ 0xBD3328EB, 0x42F9AF75, +/**/ 0x3FF35800, 0x00000000, +/**/ 0xBEE82DF0, 0xE34971F2, +/**/ 0xBFC84A6B, 0x759F6000, +/**/ 0x3D3DA280, 0x2ADF8609, +/**/ 0x3FF35400, 0x00000000, +/**/ 0xBF3E304D, 0x4873ECAE, +/**/ 0xBFC823C1, 0x6551A000, +/**/ 0xBD1E0DDB, 0x9A631E83, +/**/ 0x3FF34C00, 0x00000000, +/**/ 0x3F1264B6, 0x1FF659DB, +/**/ 0xBFC7FD22, 0xFF59A000, +/**/ 0x3D158BEB, 0xF457B7D2, +/**/ 0x3FF34800, 0x00000000, +/**/ 0xBF386531, 0xFECB9865, +/**/ 0xBFC7D690, 0x3CAF6000, +/**/ 0x3D24C06B, 0x17C301D7, +/**/ 0x3FF34000, 0x00000000, +/**/ 0x3F25A8C2, 0xEEDA65AE, +/**/ 0xBFC7B009, 0x16516000, +/**/ 0x3D3AE75F, 0xCB067E57, +/**/ 0x3FF33C00, 0x00000000, +/**/ 0xBF31BA4A, 0x8434E1F4, +/**/ 0xBFC7898D, 0x85444000, +/**/ 0xBD38E67B, 0xE3DBAF3F, +/**/ 0x3FF33400, 0x00000000, +/**/ 0x3F31EE97, 0xDBFC660A, +/**/ 0xBFC7631D, 0x82936000, +/**/ 0x3D25E77D, 0xC7C5F3E1, +/**/ 0x3FF33000, 0x00000000, +/**/ 0xBF246252, 0xBC40BFDA, +/**/ 0xBFC73CB9, 0x074FE000, +/**/ 0x3D3D66A9, 0x0D0005A6, +/**/ 0x3FF32800, 0x00000000, +/**/ 0x3F39E640, 0x13299E64, +/**/ 0xBFC71660, 0x0C914000, +/**/ 0xBCE51B15, 0x7CEC3838, +/**/ 0x3FF32400, 0x00000000, +/**/ 0xBEFCB5D4, 0xEF40991F, +/**/ 0xBFC6F012, 0x8B756000, +/**/ 0xBD357739, 0x0D31EF0F, +/**/ 0x3FF32000, 0x00000000, +/**/ 0xBF3D4632, 0xC823D892, +/**/ 0xBFC6C9D0, 0x7D204000, +/**/ 0x3CDC73FA, 0xFD9B2DCA, +/**/ 0x3FF31800, 0x00000000, +/**/ 0x3F1DD63A, 0x7AED804C, +/**/ 0xBFC6A399, 0xDABBE000, +/**/ 0x3D38F934, 0xE66A15A6, +/**/ 0x3FF31400, 0x00000000, +/**/ 0xBF339849, 0xE8C11E1A, +/**/ 0xBFC67D6E, 0x9D786000, +/**/ 0x3D311E88, 0x30A706D3, +/**/ 0x3FF30C00, 0x00000000, +/**/ 0x3F319013, 0x0D190131, +/**/ 0xBFC6574E, 0xBE8C2000, +/**/ 0x3D398C1D, 0x34F0F462, +/**/ 0x3FF30800, 0x00000000, +/**/ 0xBF222315, 0xB47A7FDA, +/**/ 0xBFC6313A, 0x37336000, +/**/ 0x3D144DF5, 0x4F21EA6D, +/**/ 0x3FF30000, 0x00000000, +/**/ 0x3F3C82AC, 0x40260390, +/**/ 0xBFC60B31, 0x00B0A000, +/**/ 0x3D371456, 0xC988F814, +/**/ 0x3FF2FC00, 0x00000000, +/**/ 0x3F026443, 0xA2430A62, +/**/ 0xBFC5E533, 0x144C2000, +/**/ 0x3D31CE0B, 0xF3B290EA, +/**/ 0x3FF2F800, 0x00000000, +/**/ 0xBF37B425, 0xED097B42, +/**/ 0xBFC5BF40, 0x6B544000, +/**/ 0x3D127023, 0xEB68981C, +/**/ 0x3FF2F000, 0x00000000, +/**/ 0x3F2D00E3, 0x4AE0553C, +/**/ 0xBFC59958, 0xFF1D6000, +/**/ 0x3D3A1D05, 0x9769CA05, +/**/ 0x3FF2EC00, 0x00000000, +/**/ 0xBF262BC0, 0x25D69D44, +/**/ 0xBFC5737C, 0xC9018000, +/**/ 0xBD39BAA7, 0xA6B887F6, +/**/ 0x3FF2E400, 0x00000000, +/**/ 0x3F3B88B5, 0xE3103D6B, +/**/ 0xBFC54DAB, 0xC2610000, +/**/ 0xBD2746FE, 0xE5C8D0D8, +/**/ 0x3FF2E000, 0x00000000, +/**/ 0x3F02E025, 0xC04B8097, +/**/ 0xBFC527E5, 0xE4A1C000, +/**/ 0x3D34E60B, 0x8D4B411D, +/**/ 0x3FF2DC00, 0x00000000, +/**/ 0xBF369C22, 0x2C305021, +/**/ 0xBFC5022B, 0x292F6000, +/**/ 0xBD348A05, 0xFF36A25B, +/**/ 0x3FF2D400, 0x00000000, +/**/ 0x3F30A012, 0xD50A012D, +/**/ 0xBFC4DC7B, 0x897BC000, +/**/ 0xBD0C79B6, 0x0AE1FF0F, +/**/ 0x3FF2D000, 0x00000000, +/**/ 0xBF1FBE29, 0xBC66484E, +/**/ 0xBFC4B6D6, 0xFEFE2000, +/**/ 0xBD1522EC, 0xF56E7952, +/**/ 0x3FF2C800, 0x00000000, +/**/ 0x3F3FB4D8, 0x12C9FB4E, +/**/ 0xBFC4913D, 0x8333C000, +/**/ 0x3D353E43, 0x558124C4, +/**/ 0x3FF2C400, 0x00000000, +/**/ 0x3F1E3432, 0x7004B11E, +/**/ 0xBFC46BAF, 0x0F9F6000, +/**/ 0x3D1249CD, 0x0790841A, +/**/ 0x3FF2C000, 0x00000000, +/**/ 0xBF30671A, 0x5C8EF02F, +/**/ 0xBFC4462B, 0x9DC9C000, +/**/ 0x3D384858, 0xA711B062, +/**/ 0x3FF2B800, 0x00000000, +/**/ 0x3F37D835, 0xD548D9AC, +/**/ 0xBFC420B3, 0x27410000, +/**/ 0x3D116282, 0xC85A0884, +/**/ 0x3FF2B400, 0x00000000, +/**/ 0x3ED2B404, 0xAD012B40, +/**/ 0xBFC3FB45, 0xA5992000, +/**/ 0xBD319713, 0xC0CAE559, +/**/ 0x3FF2B000, 0x00000000, +/**/ 0xBF370F78, 0x8E7302A1, +/**/ 0xBFC3D5E3, 0x126BC000, +/**/ 0xBD13FB2F, 0x85096C4B, +/**/ 0x3FF2A800, 0x00000000, +/**/ 0x3F31C92F, 0x3C1053F9, +/**/ 0xBFC3B08B, 0x67580000, +/**/ 0x3D3AADE8, 0xF29320FB, +/**/ 0x3FF2A400, 0x00000000, +/**/ 0xBF14AD94, 0x3DBE2E04, +/**/ 0xBFC38B3E, 0x9E028000, +/**/ 0x3D370EF0, 0x545C17F9, +/**/ 0x3FF2A000, 0x00000000, +/**/ 0xBF3BED61, 0xBED61BED, +/**/ 0xBFC365FC, 0xB015A000, +/**/ 0x3D3FD3A0, 0xAFB9691B, +/**/ 0x3FF29800, 0x00000000, +/**/ 0x3F2B061A, 0x26F004A6, +/**/ 0xBFC340C5, 0x97412000, +/**/ 0x3D37A3DC, 0xF7D9D386, +/**/ 0x3FF29400, 0x00000000, +/**/ 0xBF21B488, 0xFF6B646D, +/**/ 0xBFC31B99, 0x4D3A4000, +/**/ 0xBD3F098E, 0xE3A50810, +/**/ 0x3FF29000, 0x00000000, +/**/ 0xBF3F0582, 0x2CA5D5AC, +/**/ 0xBFC2F677, 0xCBBC0000, +/**/ 0xBD352B30, 0x2160F40D, +/**/ 0x3FF28800, 0x00000000, +/**/ 0x3F260251, 0x16025116, +/**/ 0xBFC2D161, 0x0C868000, +/**/ 0xBD039D6C, 0xCB81B4A1, +/**/ 0x3FF28400, 0x00000000, +/**/ 0xBF258CDF, 0x502065D2, +/**/ 0xBFC2AC55, 0x095F6000, +/**/ 0x3D1D3466, 0xD0C6C8A8, +/**/ 0x3FF27C00, 0x00000000, +/**/ 0x3F3FA38A, 0x1CE4D6F8, +/**/ 0xBFC28753, 0xBC11A000, +/**/ 0xBD37494E, 0x359302E6, +/**/ 0x3FF27800, 0x00000000, +/**/ 0x3F247DD5, 0xDCCA0781, +/**/ 0xBFC2625D, 0x1E6DE000, +/**/ 0x3CF52962, 0xF09E3D82, +/**/ 0x3FF27400, 0x00000000, +/**/ 0xBF25E8EF, 0xDB195E8F, +/**/ 0xBFC23D71, 0x2A49C000, +/**/ 0xBD100D23, 0x8FD3DF5C, +/**/ 0x3FF27000, 0x00000000, +/**/ 0xBF3FF6C8, 0xFFB647FE, +/**/ 0xBFC2188F, 0xD9808000, +/**/ 0x3D3B3A1E, 0x7F50C701, +/**/ 0x3FF26800, 0x00000000, +/**/ 0x3F266F9A, 0xC024D167, +/**/ 0xBFC1F3B9, 0x25F26000, +/**/ 0x3D15F74E, 0x9B083633, +/**/ 0x3FF26400, 0x00000000, +/**/ 0xBF22D1BD, 0xEABD0E14, +/**/ 0xBFC1CEED, 0x09854000, +/**/ 0x3D315C1C, 0x39192AF9, +/**/ 0x3FF26000, 0x00000000, +/**/ 0xBF3DD8F7, 0xF6D0EEC8, +/**/ 0xBFC1AA2B, 0x7E240000, +/**/ 0x3D31AC38, 0xDDE3B366, +/**/ 0x3FF25800, 0x00000000, +/**/ 0x3F2BCEB1, 0x2A241EF6, +/**/ 0xBFC18574, 0x7DBEC000, +/**/ 0xBD3E6744, 0x45BD9B49, +/**/ 0x3FF25400, 0x00000000, +/**/ 0xBF18A05B, 0xA21378D7, +/**/ 0xBFC160C8, 0x024B2000, +/**/ 0xBD2EC2D2, 0xA9009E3D, +/**/ 0x3FF25000, 0x00000000, +/**/ 0xBF3A076F, 0xD6CFA90C, +/**/ 0xBFC13C26, 0x05C3A000, +/**/ 0x3D2CF5FD, 0xD94F6509, +/**/ 0x3FF24800, 0x00000000, +/**/ 0x3F324924, 0x92492492, +/**/ 0xBFC1178E, 0x8227E000, +/**/ 0xBD21EF78, 0xCE2D07F2, +/**/ 0x3FF24400, 0x00000000, +/**/ 0xBEF3682B, 0x6151E899, +/**/ 0xBFC0F301, 0x717D0000, +/**/ 0x3D3E09B4, 0x41AE86C5, +/**/ 0x3FF24000, 0x00000000, +/**/ 0xBF34868E, 0x89FA4C67, +/**/ 0xBFC0CE7E, 0xCDCCC000, +/**/ 0xBD14652D, 0xABFF5447, +/**/ 0x3FF23800, 0x00000000, +/**/ 0x3F3858D8, 0x6B11F09F, +/**/ 0xBFC0AA06, 0x91268000, +/**/ 0x3D345519, 0xD7032129, +/**/ 0x3FF23400, 0x00000000, +/**/ 0x3F159E26, 0xAF37C049, +/**/ 0xBFC08598, 0xB59E4000, +/**/ 0x3D27E5DD, 0x7009902C, +/**/ 0x3FF23000, 0x00000000, +/**/ 0xBF2AB546, 0x2E076329, +/**/ 0xBFC06135, 0x354D4000, +/**/ 0xBD363046, 0x28340EE9, +/**/ 0x3FF22C00, 0x00000000, +/**/ 0xBF3FEDD5, 0xFEDD5FEE, +/**/ 0xBFC03CDC, 0x0A51E000, +/**/ 0xBD381A9C, 0xF169FC5C, +/**/ 0x3FF22400, 0x00000000, +/**/ 0x3F2B5B92, 0x009126D7, +/**/ 0xBFC0188D, 0x2ECF6000, +/**/ 0xBD03F965, 0x1CFF9DFE, +/**/ 0x3FF22000, 0x00000000, +/**/ 0xBF121FB7, 0x8121FB78, +/**/ 0xBFBFE891, 0x39DBC000, +/**/ 0xBD356594, 0xD82F7A82, +/**/ 0x3FF21C00, 0x00000000, +/**/ 0xBF368F22, 0x3A459635, +/**/ 0xBFBFA01C, 0x9DB58000, +/**/ 0x3D08F351, 0xFA48A730, +/**/ 0x3FF21400, 0x00000000, +/**/ 0x3F379804, 0x855E6012, +/**/ 0xBFBF57BC, 0x7D900000, +/**/ 0xBD176A6C, 0x9EA8B04E, +/**/ 0x3FF21000, 0x00000000, +/**/ 0x3F17B57C, 0x78CD7A37, +/**/ 0xBFBF0F70, 0xCDD98000, +/**/ 0xBD32E31F, 0x6C272C1E, +/**/ 0x3FF20C00, 0x00000000, +/**/ 0xBF271E73, 0x07E4EF15, +/**/ 0xBFBEC739, 0x830A0000, +/**/ 0xBD311FCB, 0xA80CDD10, +/**/ 0x3FF20800, 0x00000000, +/**/ 0xBF3CDDEC, 0x49392BA7, +/**/ 0xBFBE7F16, 0x91A34000, +/**/ 0x3D32C1C5, 0x9BC77BFA, +/**/ 0x3FF20000, 0x00000000, +/**/ 0x3F320120, 0x12012012, +/**/ 0xBFBE3707, 0xEE304000, +/**/ 0xBD20F684, 0xE6766ABD, +/**/ 0x3FF1FC00, 0x00000000, +/**/ 0x3EF0DC4F, 0xCE8AD1A2, +/**/ 0xBFBDEF0D, 0x8D468000, +/**/ 0x3D324750, 0x412E9A74, +/**/ 0x3FF1F800, 0x00000000, +/**/ 0xBF2F7047, 0xDC11F704, +/**/ 0xBFBDA727, 0x63844000, +/**/ 0xBD1A8940, 0x1FA71733, +/**/ 0x3FF1F000, 0x00000000, +/**/ 0x3F3FAF3F, 0x16B6419D, +/**/ 0xBFBD5F55, 0x65920000, +/**/ 0xBD30E239, 0xCC185469, +/**/ 0x3FF1EC00, 0x00000000, +/**/ 0x3F2E878F, 0xF70985E2, +/**/ 0xBFBD1797, 0x88218000, +/**/ 0xBD336433, 0xB5EFBEED, +/**/ 0x3FF1E800, 0x00000000, +/**/ 0xBEEF55E4, 0x94D7FDC3, +/**/ 0xBFBCCFED, 0xBFEE0000, +/**/ 0xBD33A823, 0x2FE71256, +/**/ 0x3FF1E400, 0x00000000, +/**/ 0xBF310C4C, 0x0478BBCF, +/**/ 0xBFBC8858, 0x01BC4000, +/**/ 0xBD2646D1, 0xC65AACD3, +/**/ 0x3FF1DC00, 0x00000000, +/**/ 0x3F3F0ECB, 0xCB840C49, +/**/ 0xBFBC40D6, 0x425A4000, +/**/ 0xBD3CB112, 0x1D1930DD, +/**/ 0x3FF1D800, 0x00000000, +/**/ 0x3F2EACE5, 0xC9579074, +/**/ 0xBFBBF968, 0x769FC000, +/**/ 0xBD24218C, 0x8D824283, +/**/ 0x3FF1D400, 0x00000000, +/**/ 0xBECABDFA, 0xFC60F0AE, +/**/ 0xBFBBB20E, 0x936D8000, +/**/ 0x3D368BA8, 0x35459B8E, +/**/ 0x3FF1D000, 0x00000000, +/**/ 0xBF2F2A4B, 0xAFDC61F3, +/**/ 0xBFBB6AC8, 0x8DAD4000, +/**/ 0xBD3B1BDF, 0xF50225C7, +/**/ 0x3FF1CC00, 0x00000000, +/**/ 0xBF3EC8AF, 0xAB802394, +/**/ 0xBFBB2396, 0x5A530000, +/**/ 0x3CEFF64E, 0xEA137079, +/**/ 0x3FF1C400, 0x00000000, +/**/ 0x3F322FC1, 0xCE058D9B, +/**/ 0xBFBADC77, 0xEE5B0000, +/**/ 0x3D3573B2, 0x09C31904, +/**/ 0x3FF1C000, 0x00000000, +/**/ 0x3F0AA04F, 0xE0EFA2CF, +/**/ 0xBFBA956D, 0x3ECAC000, +/**/ 0xBD3E6379, 0x4C02C4AF, +/**/ 0x3FF1BC00, 0x00000000, +/**/ 0xBF26B7F7, 0x225ADFDD, +/**/ 0xBFBA4E76, 0x40B1C000, +/**/ 0x3D0E42B6, 0xB94407C8, +/**/ 0x3FF1B800, 0x00000000, +/**/ 0xBF39E073, 0x217CD13A, +/**/ 0xBFBA0792, 0xE9278000, +/**/ 0x3D0A9CE6, 0xC9AD51BF, +/**/ 0x3FF1B000, 0x00000000, +/**/ 0x3F37C67F, 0x2BAE2B21, +/**/ 0xBFB9C0C3, 0x2D4D4000, +/**/ 0x3D3AB7C0, 0x9E838668, +/**/ 0x3FF1AC00, 0x00000000, +/**/ 0x3F23316E, 0xBD720DCF, +/**/ 0xBFB97A07, 0x024CC000, +/**/ 0x3CF8BCC1, 0x732093CE, +/**/ 0x3FF1A800, 0x00000000, +/**/ 0xBF11A7B9, 0x611A7B96, +/**/ 0xBFB9335E, 0x5D594000, +/**/ 0xBD23115C, 0x3ABD47DA, +/**/ 0x3FF1A400, 0x00000000, +/**/ 0xBF324195, 0xA1C1B8E7, +/**/ 0xBFB8ECC9, 0x33AEC000, +/**/ 0x3D222F39, 0xBE67F7AA, +/**/ 0x3FF1A000, 0x00000000, +/**/ 0xBF3FEE61, 0xFEE61FEE, +/**/ 0xBFB8A647, 0x7A91C000, +/**/ 0xBD3C28C0, 0xAF9BD6DF, +/**/ 0x3FF19800, 0x00000000, +/**/ 0x3F328F89, 0x362B721D, +/**/ 0xBFB85FD9, 0x27508000, +/**/ 0x3D35B818, 0x19970C1C, +/**/ 0x3FF19400, 0x00000000, +/**/ 0x3F14E023, 0x28A70119, +/**/ 0xBFB8197E, 0x2F410000, +/**/ 0x3D3C0FE4, 0x60D20041, +/**/ 0x3FF19000, 0x00000000, +/**/ 0xBF1FD419, 0x3E48FC6F, +/**/ 0xBFB7D336, 0x87C28000, +/**/ 0xBD33C88C, 0x3E706706, +/**/ 0x3FF18C00, 0x00000000, +/**/ 0xBF34F7C6, 0xFD42546B, +/**/ 0xBFB78D02, 0x263D8000, +/**/ 0xBD069B57, 0x94B69FB7, +/**/ 0x3FF18400, 0x00000000, +/**/ 0x3F3E2FA4, 0x01185E30, +/**/ 0xBFB746E1, 0x00228000, +/**/ 0x3D3126D1, 0x6E1E21D2, +/**/ 0x3FF18000, 0x00000000, +/**/ 0x3F318118, 0x11811812, +/**/ 0xBFB700D3, 0x0AEAC000, +/**/ 0xBCEC1E8D, 0xA99DED32, +/**/ 0x3FF17C00, 0x00000000, +/**/ 0x3F13F1CA, 0xFF2E2C43, +/**/ 0xBFB6BAD8, 0x3C188000, +/**/ 0xBD0DAF3C, 0xC08926AE, +/**/ 0x3FF17800, 0x00000000, +/**/ 0xBF1D79B9, 0x0A5EF9FF, +/**/ 0xBFB674F0, 0x89364000, +/**/ 0xBD3A7999, 0x4C9D3302, +/**/ 0x3FF17400, 0x00000000, +/**/ 0xBF338FAD, 0x1ECEA765, +/**/ 0xBFB62F1B, 0xE7D78000, +/**/ 0x3D217995, 0x7ED63C4E, +/**/ 0x3FF17000, 0x00000000, +/**/ 0xBF3F976B, 0xD8C8714B, +/**/ 0xBFB5E95A, 0x4D978000, +/**/ 0xBD31CB7C, 0xE1D17171, +/**/ 0x3FF16800, 0x00000000, +/**/ 0x3F348A33, 0xB08FA497, +/**/ 0xBFB5A3AB, 0xB01AC000, +/**/ 0xBD3E2574, 0x9E6AFA18, +/**/ 0x3FF16400, 0x00000000, +/**/ 0x3F21AA1F, 0x864022C9, +/**/ 0xBFB55E10, 0x050E0000, +/**/ 0xBD0C1D74, 0x0C53C72E, +/**/ 0x3FF16000, 0x00000000, +/**/ 0xBF05B7C9, 0xB487BCAD, +/**/ 0xBFB51887, 0x42260000, +/**/ 0xBD330A1D, 0x96258B3E, +/**/ 0x3FF15C00, 0x00000000, +/**/ 0xBF2C3411, 0x5B1E5F75, +/**/ 0xBFB4D311, 0x5D208000, +/**/ 0x3CF53A25, 0x82F4E1EF, +/**/ 0x3FF15800, 0x00000000, +/**/ 0xBF39543F, 0xEEA99544, +/**/ 0xBFB48DAE, 0x4BC30000, +/**/ 0xBD30185B, 0x208C200C, +/**/ 0x3FF15000, 0x00000000, +/**/ 0x3F3B9A3F, 0xDD5C8CB8, +/**/ 0xBFB4485E, 0x03DBC000, +/**/ 0xBD3FAD46, 0xE8D26AB7, +/**/ 0x3FF14C00, 0x00000000, +/**/ 0x3F30B155, 0xB19AE5C7, +/**/ 0xBFB40320, 0x7B414000, +/**/ 0xBD26FD84, 0xAA8157C0, +/**/ 0x3FF14800, 0x00000000, +/**/ 0x3F17C382, 0xB34EDA32, +/**/ 0xBFB3BDF5, 0xA7D20000, +/**/ 0x3D319BD0, 0xAD125895, +/**/ 0x3FF14400, 0x00000000, +/**/ 0xBF129CFF, 0xBAF129D0, +/**/ 0xBFB378DD, 0x7F748000, +/**/ 0xBD371411, 0x28F1FACA, +/**/ 0x3FF14000, 0x00000000, +/**/ 0xBF2E2E59, 0x771B7C7F, +/**/ 0xBFB333D7, 0xF8184000, +/**/ 0x3CE692B6, 0xA81B8848, +/**/ 0x3FF13C00, 0x00000000, +/**/ 0xBF395F06, 0x30FE1D9C, +/**/ 0xBFB2EEE5, 0x07B40000, +/**/ 0xBD08081E, 0xDD77C860, +/**/ 0x3FF13400, 0x00000000, +/**/ 0x3F3C8113, 0x5C81135D, +/**/ 0xBFB2AA04, 0xA4470000, +/**/ 0xBD37A48B, 0xA8B1CB41, +/**/ 0x3FF13000, 0x00000000, +/**/ 0x3F3288FF, 0xBB3B5DC0, +/**/ 0xBFB26536, 0xC3D8C000, +/**/ 0xBD0B4BAC, 0x097C5BA3, +/**/ 0x3FF12C00, 0x00000000, +/**/ 0x3F21713D, 0xB81577AE, +/**/ 0xBFB2207B, 0x5C784000, +/**/ 0xBD349D8C, 0xFC10C7BF, +/**/ 0x3FF12800, 0x00000000, +/**/ 0xBEEE05E5, 0xBAD6FC84, +/**/ 0xBFB1DBD2, 0x643D0000, +/**/ 0xBD390B24, 0xD977C494, +/**/ 0x3FF12400, 0x00000000, +/**/ 0xBF24E314, 0x59F992BF, +/**/ 0xBFB1973B, 0xD1464000, +/**/ 0xBD3566D1, 0x54F930B3, +/**/ 0x3FF12000, 0x00000000, +/**/ 0xBF33CB91, 0xC9F6E7A8, +/**/ 0xBFB152B7, 0x99BB4000, +/**/ 0x3D09BB29, 0x07030829, +/**/ 0x3FF11C00, 0x00000000, +/**/ 0xBF3CFE65, 0x8B7D9851, +/**/ 0xBFB10E45, 0xB3CB0000, +/**/ 0x3D37CF69, 0x284A3465, +/**/ 0x3FF11400, 0x00000000, +/**/ 0x3F39F5DB, 0x29605DF7, +/**/ 0xBFB0C9E6, 0x15AC4000, +/**/ 0xBD2C2DA8, 0x0974D976, +/**/ 0x3FF11000, 0x00000000, +/**/ 0x3F311111, 0x11111111, +/**/ 0xBFB08598, 0xB59E4000, +/**/ 0x3D17E5DD, 0x7009902C, +/**/ 0x3FF10C00, 0x00000000, +/**/ 0x3F20A63A, 0x12A5B1AE, +/**/ 0xBFB0415D, 0x89E74000, +/**/ 0xBD1111C0, 0x5CF1D753, +/**/ 0x3FF10800, 0x00000000, +/**/ 0xBED107FB, 0xBE011080, +/**/ 0xBFAFFA69, 0x11AB8000, +/**/ 0xBD23008C, 0x98381A8F, +/**/ 0x3FF10400, 0x00000000, +/**/ 0xBF216989, 0x6FEABBAE, +/**/ 0xBFAF723B, 0x51800000, +/**/ 0x3D3D6EB0, 0xDD5610D3, +/**/ 0x3FF10000, 0x00000000, +/**/ 0xBF30FEF0, 0x10FEF011, +/**/ 0xBFAEEA31, 0xC0068000, +/**/ 0xBD3C3DD8, 0x3606D891, +/**/ 0x3FF0FC00, 0x00000000, +/**/ 0xBF3922C0, 0x98CDDC74, +/**/ 0xBFAE624C, 0x4A0B8000, +/**/ 0x3D30F25C, 0x74676689, +/**/ 0x3FF0F400, 0x00000000, +/**/ 0x3F3EDFAB, 0x325A1A80, +/**/ 0xBFADDA8A, 0xDC680000, +/**/ 0x3D21B1AC, 0x64D9E42F, +/**/ 0x3FF0F000, 0x00000000, +/**/ 0x3F370834, 0xF27F9A57, +/**/ 0xBFAD52ED, 0x64060000, +/**/ 0x3D33C85D, 0x2A29BBD6, +/**/ 0x3FF0EC00, 0x00000000, +/**/ 0x3F2EAD7C, 0xD391FBC5, +/**/ 0xBFACCB73, 0xCDDD8000, +/**/ 0xBD3965C3, 0x6E09F5FE, +/**/ 0x3FF0E800, 0x00000000, +/**/ 0x3F1F2CA5, 0xE9479870, +/**/ 0xBFAC441E, 0x06F70000, +/**/ 0xBD354F1F, 0x49850D15, +/**/ 0x3FF0E400, 0x00000000, +/**/ 0x3ED95609, 0x80439019, +/**/ 0xBFABBCEB, 0xFC690000, +/**/ 0x3D17BF86, 0x8C317C2A, +/**/ 0x3FF0E000, 0x00000000, +/**/ 0xBF1B6B4D, 0xC6867596, +/**/ 0xBFAB35DD, 0x9B588000, +/**/ 0xBD3D5674, 0xD6CF558E, +/**/ 0x3FF0DC00, 0x00000000, +/**/ 0xBF2BEAEE, 0x172D4CE8, +/**/ 0xBFAAAEF2, 0xD0FB0000, +/**/ 0xBD20FC1A, 0x353BB42E, +/**/ 0x3FF0D800, 0x00000000, +/**/ 0xBF34EAB0, 0x479071A9, +/**/ 0xBFAA282B, 0x8A938000, +/**/ 0x3D2E8F59, 0x80EFC8E3, +/**/ 0x3FF0D400, 0x00000000, +/**/ 0xBF3BBA9C, 0xA61C62D3, +/**/ 0xBFA9A187, 0xB5740000, +/**/ 0x3D30C22E, 0x4EC4D90D, +/**/ 0x3FF0CC00, 0x00000000, +/**/ 0x3F3D9AA6, 0x77344011, +/**/ 0xBFA91B07, 0x3EFD8000, +/**/ 0x3D19D7C5, 0x3F76CA96, +/**/ 0x3FF0C800, 0x00000000, +/**/ 0x3F3714FB, 0xCDA3AC11, +/**/ 0xBFA894AA, 0x149F8000, +/**/ 0xBD39A19A, 0x8BE97661, +/**/ 0x3FF0C400, 0x00000000, +/**/ 0x3F30B446, 0x391F2E61, +/**/ 0xBFA80E70, 0x23D90000, +/**/ 0x3D399DC1, 0x6F28BF45, +/**/ 0x3FF0C000, 0x00000000, +/**/ 0x3F24F0D1, 0x682E11CD, +/**/ 0xBFA78859, 0x5A358000, +/**/ 0x3D108B0D, 0x083B3A4C, +/**/ 0x3FF0BC00, 0x00000000, +/**/ 0x3F118519, 0x5D5A36EA, +/**/ 0xBFA70265, 0xA5510000, +/**/ 0x3D2888DF, 0x11FD5CE7, +/**/ 0x3FF0B800, 0x00000000, +/**/ 0xBEF913DA, 0x62386CAB, +/**/ 0xBFA67C94, 0xF2D48000, +/**/ 0xBD3DAC20, 0x827CCA0C, +/**/ 0x3FF0B400, 0x00000000, +/**/ 0xBF1D7CFF, 0xBD31D7D0, +/**/ 0xBFA5F6E7, 0x30790000, +/**/ 0x3D20485A, 0x8012494C, +/**/ 0x3FF0B000, 0x00000000, +/**/ 0xBF2A11BA, 0x226951DC, +/**/ 0xBFA5715C, 0x4C040000, +/**/ 0x3D38888D, 0xDFC47628, +/**/ 0x3FF0AC00, 0x00000000, +/**/ 0xBF328E31, 0x7B2E9DD2, +/**/ 0xBFA4EBF4, 0x334A0000, +/**/ 0x3D2D9150, 0xF73BE773, +/**/ 0x3FF0A800, 0x00000000, +/**/ 0xBF37EF59, 0x7EF597EF, +/**/ 0xBFA466AE, 0xD42E0000, +/**/ 0x3D2C1673, 0x75BDFD28, +/**/ 0x3FF0A400, 0x00000000, +/**/ 0xBF3D2C71, 0x50D413C1, +/**/ 0xBFA3E18C, 0x1CA08000, +/**/ 0xBD3748ED, 0x3F6E378E, +/**/ 0x3FF09C00, 0x00000000, +/**/ 0x3F3DBA6A, 0xF836010A, +/**/ 0xBFA35C8B, 0xFAA10000, +/**/ 0xBD38357D, 0x5EF9EB35, +/**/ 0x3FF09800, 0x00000000, +/**/ 0x3F38C51F, 0x624D4AF5, +/**/ 0xBFA2D7AE, 0x5C3C8000, +/**/ 0x3D322939, 0x459DA66D, +/**/ 0x3FF09400, 0x00000000, +/**/ 0x3F33F390, 0x10953F39, +/**/ 0xBFA252F3, 0x2F8D0000, +/**/ 0xBD283E9A, 0xE021B67B, +/**/ 0x3FF09000, 0x00000000, +/**/ 0x3F2E8B42, 0x861539B9, +/**/ 0xBFA1CE5A, 0x62BC0000, +/**/ 0xBD3A9CC7, 0x8D8DF999, +/**/ 0x3FF08C00, 0x00000000, +/**/ 0x3F25766E, 0xACBC4021, +/**/ 0xBFA149E3, 0xE4008000, +/**/ 0x3D32B98A, 0x9A4168FD, +/**/ 0x3FF08800, 0x00000000, +/**/ 0x3F1950DB, 0x0F3DBD5A, +/**/ 0xBFA0C58F, 0xA19E0000, +/**/ 0x3D0559D1, 0x58B17913, +/**/ 0x3FF08400, 0x00000000, +/**/ 0x3F008421, 0x08421084, +/**/ 0xBFA0415D, 0x89E78000, +/**/ 0x3D3DDDC7, 0xF461C516, +/**/ 0x3FF08000, 0x00000000, +/**/ 0xBF007FDF, 0x0041FF7C, +/**/ 0xBF9F7A9B, 0x16780000, +/**/ 0xBD242AD9, 0x271BE7D7, +/**/ 0x3FF07C00, 0x00000000, +/**/ 0xBF183591, 0xC54798FB, +/**/ 0xBF9E72BF, 0x28140000, +/**/ 0x3D28D751, 0x49774D47, +/**/ 0x3FF07800, 0x00000000, +/**/ 0xBF23CFA1, 0x518F4EFD, +/**/ 0xBF9D6B27, 0x25980000, +/**/ 0x3D39FF7B, 0x50D1B838, +/**/ 0x3FF07400, 0x00000000, +/**/ 0xBF2B3EB7, 0x01073261, +/**/ 0xBF9C63D2, 0xEC150000, +/**/ 0x3D35439C, 0xE030A687, +/**/ 0x3FF07000, 0x00000000, +/**/ 0xBF31341F, 0xD6EAB025, +/**/ 0xBF9B5CC2, 0x58B70000, +/**/ 0xBD18E611, 0xB8AFBFE8, +/**/ 0x3FF06C00, 0x00000000, +/**/ 0xBF34A638, 0x6ED049E0, +/**/ 0xBF9A55F5, 0x48C60000, +/**/ 0x3D2DE070, 0x9F2D03C9, +/**/ 0x3FF06800, 0x00000000, +/**/ 0xBF37F5BF, 0xEF997F5C, +/**/ 0xBF994F6B, 0x99A20000, +/**/ 0xBD311D5E, 0xF96CF7F5, +/**/ 0x3FF06400, 0x00000000, +/**/ 0xBF3B22D0, 0xE5604189, +/**/ 0xBF984925, 0x28C90000, +/**/ 0x3D2AA0BA, 0x325A0C34, +/**/ 0x3FF06000, 0x00000000, +/**/ 0xBF3E2D85, 0xC1163FF0, +/**/ 0xBF974321, 0xD3D00000, +/**/ 0xBCFB4A69, 0x0FE94778, +/**/ 0x3FF05800, 0x00000000, +/**/ 0x3F3EEA07, 0x27586632, +/**/ 0xBF963D61, 0x78690000, +/**/ 0xBD07ABF3, 0x89596542, +/**/ 0x3FF05400, 0x00000000, +/**/ 0x3F3C23BB, 0x98E2A5E7, +/**/ 0xBF9537E3, 0xF45F0000, +/**/ 0xBD2AB259, 0xD2D7F253, +/**/ 0x3FF05000, 0x00000000, +/**/ 0x3F397F7D, 0x73404146, +/**/ 0xBF9432A9, 0x25980000, +/**/ 0xBD098139, 0x928637FE, +/**/ 0x3FF04C00, 0x00000000, +/**/ 0x3F36FD32, 0xB0C7B49A, +/**/ 0xBF932DB0, 0xEA130000, +/**/ 0xBD2710CB, 0x130895FC, +/**/ 0x3FF04800, 0x00000000, +/**/ 0x3F349CC1, 0x664C578A, +/**/ 0xBF9228FB, 0x1FEA0000, +/**/ 0xBD2713E3, 0x284991FE, +/**/ 0x3FF04400, 0x00000000, +/**/ 0x3F325E0F, 0xC2FCB1F4, +/**/ 0xBF912487, 0xA5500000, +/**/ 0xBD3FDBE5, 0xFED4B393, +/**/ 0x3FF04000, 0x00000000, +/**/ 0x3F304104, 0x10410410, +/**/ 0xBF902056, 0x58930000, +/**/ 0xBD3611D2, 0x7C8E8417, +/**/ 0x3FF03C00, 0x00000000, +/**/ 0x3F2C8B09, 0x6334030B, +/**/ 0xBF8E38CE, 0x30340000, +/**/ 0x3D39DE88, 0xA3DA281A, +/**/ 0x3FF03800, 0x00000000, +/**/ 0x3F28D6F0, 0x48FF7E3A, +/**/ 0xBF8C3173, 0x84C80000, +/**/ 0x3D341F33, 0xFCEFB9FE, +/**/ 0x3FF03400, 0x00000000, +/**/ 0x3F25658A, 0x0081A559, +/**/ 0xBF8A2A9C, 0x6C180000, +/**/ 0x3D3F73BC, 0x4D6D3472, +/**/ 0x3FF03000, 0x00000000, +/**/ 0x3F2236A3, 0xEBC349DE, +/**/ 0xBF882448, 0xA3880000, +/**/ 0xBD345544, 0x12C584E0, +/**/ 0x3FF02C00, 0x00000000, +/**/ 0x3F1E9417, 0x3FEFD386, +/**/ 0xBF861E77, 0xE8B60000, +/**/ 0x3D38073E, 0xEAF8EAF3, +/**/ 0x3FF02800, 0x00000000, +/**/ 0x3F193F1D, 0xCA7A317C, +/**/ 0xBF841929, 0xF9680000, +/**/ 0xBD1977C7, 0x55D01368, +/**/ 0x3FF02400, 0x00000000, +/**/ 0x3F146DF7, 0x6CB49652, +/**/ 0xBF82145E, 0x939E0000, +/**/ 0xBD3E3D12, 0x38C4EA00, +/**/ 0x3FF02000, 0x00000000, +/**/ 0x3F102040, 0x81020408, +/**/ 0xBF801015, 0x75880000, +/**/ 0xBD3BCE25, 0x1998B506, +/**/ 0x3FF01C00, 0x00000000, +/**/ 0x3F08AB2B, 0x8C355D63, +/**/ 0xBF7C189C, 0xBB100000, +/**/ 0x3D3D8055, 0x12588560, +/**/ 0x3FF01800, 0x00000000, +/**/ 0x3F021B28, 0xBD1BA97E, +/**/ 0xBF781212, 0x14580000, +/**/ 0xBD1AD503, 0x82973F27, +/**/ 0x3FF01400, 0x00000000, +/**/ 0x3EF91F67, 0x411155AB, +/**/ 0xBF740C8A, 0x74780000, +/**/ 0xBD1E3871, 0xDF070002, +/**/ 0x3FF01000, 0x00000000, +/**/ 0x3EF01010, 0x10101010, +/**/ 0xBF700805, 0x59580000, +/**/ 0xBD2166AF, 0xCB31C67B, +/**/ 0x3FF00C00, 0x00000000, +/**/ 0x3EE20D8A, 0x279DB649, +/**/ 0xBF680904, 0x82880000, +/**/ 0xBD285C06, 0x96A70C0C, +/**/ 0x3FF00800, 0x00000000, +/**/ 0x3ED00804, 0x02010080, +/**/ 0xBF600401, 0x55D80000, +/**/ 0x3D33BB10, 0xC7CC7089, +/**/ 0x3FF00400, 0x00000000, +/**/ 0x3EB00401, 0x00401004, +/**/ 0xBF500200, 0x55600000, +/**/ 0xBD356224, 0xCD5F35F8, +/**/ 0x3FF00000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x3FEFF800, 0x00000000, +/**/ 0x3EAFF801, 0xFF801FF8, +/**/ 0x3F4FFC00, 0xAA800000, +/**/ 0x3D35621F, 0x7809A0A3, +/**/ 0x3FEFF000, 0x00000000, +/**/ 0x3ECFF007, 0xFC01FF00, +/**/ 0x3F5FF802, 0xA9B00000, +/**/ 0xBD33BC66, 0x1D61C5EB, +/**/ 0x3FEFE800, 0x00000000, +/**/ 0x3EE1F28A, 0x186DADBE, +/**/ 0x3F67F704, 0x7D780000, +/**/ 0x3D283DA6, 0x89D68648, +/**/ 0x3FEFE000, 0x00000000, +/**/ 0x3EEFE01F, 0xE01FE020, +/**/ 0x3F6FF00A, 0xA2B00000, +/**/ 0x3D20BC04, 0xA086B56A, +/**/ 0x3FEFD800, 0x00000000, +/**/ 0x3EF8E0E6, 0xDF68BD14, +/**/ 0x3F73F38A, 0x60F00000, +/**/ 0x3D192256, 0x93C93749, +/**/ 0x3FEFD000, 0x00000000, +/**/ 0x3F01E528, 0x439A981C, +/**/ 0x3F77EE11, 0xEBD80000, +/**/ 0x3D0749D3, 0xC2D23A07, +/**/ 0x3FEFC800, 0x00000000, +/**/ 0x3F08556A, 0x8596391C, +/**/ 0x3F7BE79C, 0x70040000, +/**/ 0x3D38EC8F, 0x9A6C0404, +/**/ 0x3FEFC000, 0x00000000, +/**/ 0x3F0FC07F, 0x01FC07F0, +/**/ 0x3F7FE02A, 0x6B100000, +/**/ 0x3D19E23F, 0x0DDA40E4, +/**/ 0x3FEFB800, 0x00000000, +/**/ 0x3F1412D5, 0x9F5976B5, +/**/ 0x3F81EBDE, 0x2D1A0000, +/**/ 0xBD2A0683, 0xFF48DC36, +/**/ 0x3FEFB000, 0x00000000, +/**/ 0x3F18C21A, 0xBD271E34, +/**/ 0x3F83E729, 0x5D260000, +/**/ 0xBD2609C1, 0xFF29A114, +/**/ 0x3FEFA800, 0x00000000, +/**/ 0x3F1DEDB2, 0x5594A734, +/**/ 0x3F85E1F7, 0x03EC0000, +/**/ 0x3D37CA09, 0xF585DA1B, +/**/ 0x3FEFA000, 0x00000000, +/**/ 0x3F21CAA0, 0x1FA11CAA, +/**/ 0x3F87DC47, 0x5F820000, +/**/ 0xBD3EB124, 0x5B5DA1F5, +/**/ 0x3FEF9800, 0x00000000, +/**/ 0x3F24DC34, 0x55E8CB6B, +/**/ 0x3F89D61A, 0xADC60000, +/**/ 0x3D37B196, 0x327B4257, +/**/ 0x3FEF9000, 0x00000000, +/**/ 0x3F282B68, 0x13BAF1B2, +/**/ 0x3F8BCF71, 0x2C740000, +/**/ 0x3D1C25E0, 0x97BD9771, +/**/ 0x3FEF8800, 0x00000000, +/**/ 0x3F2BB80D, 0xCC420861, +/**/ 0x3F8DC84B, 0x19120000, +/**/ 0x3D1C0A54, 0x1E3A5B30, +/**/ 0x3FEF8000, 0x00000000, +/**/ 0x3F2F81F8, 0x1F81F820, +/**/ 0x3F8FC0A8, 0xB0FC0000, +/**/ 0x3CDF1E7C, 0xF6D3A69C, +/**/ 0x3FEF7800, 0x00000000, +/**/ 0x3F31C47C, 0xED1079FA, +/**/ 0x3F90DC45, 0x18B00000, +/**/ 0xBD29BC2F, 0x380313FC, +/**/ 0x3FEF7000, 0x00000000, +/**/ 0x3F33E672, 0xFA98528D, +/**/ 0x3F91D7F7, 0xEB9F0000, +/**/ 0xBD14193A, 0x83FCC7A6, +/**/ 0x3FEF6800, 0x00000000, +/**/ 0x3F3626C7, 0xCAFBD3D2, +/**/ 0x3F92D36C, 0xEFB50000, +/**/ 0x3D35F0BB, 0x341706C3, +/**/ 0x3FEF6000, 0x00000000, +/**/ 0x3F388565, 0x06DDABA6, +/**/ 0x3F93CEA4, 0x43470000, +/**/ 0xBD36A2C4, 0x32D6A40B, +/**/ 0x3FEF5800, 0x00000000, +/**/ 0x3F3B0234, 0x6CC4F5F5, +/**/ 0x3F94C99E, 0x04900000, +/**/ 0x3D1DECC6, 0x5DF5F4A5, +/**/ 0x3FEF5000, 0x00000000, +/**/ 0x3F3D9D1F, 0xD102728A, +/**/ 0x3F95C45A, 0x51B90000, +/**/ 0xBD263BB6, 0x216D87D8, +/**/ 0x3FEF5000, 0x00000000, +/**/ 0xBF3FA9EE, 0xE26A1DD4, +/**/ 0x3F96BED9, 0x48D20000, +/**/ 0xBD320BC4, 0x160A43F8, +/**/ 0x3FEF4800, 0x00000000, +/**/ 0xBF3CD30D, 0xADEC7540, +/**/ 0x3F97B91B, 0x07D60000, +/**/ 0xBD33B955, 0xB602ACE4, +/**/ 0x3FEF4000, 0x00000000, +/**/ 0xBF39DE52, 0x7C761DC6, +/**/ 0x3F98B31F, 0xACAA0000, +/**/ 0xBD33FC78, 0xA96E4964, +/**/ 0x3FEF3800, 0x00000000, +/**/ 0xBF36CBD3, 0x23989FF0, +/**/ 0x3F99ACE7, 0x551D0000, +/**/ 0xBD2D75D9, 0x7EC7C410, +/**/ 0x3FEF3000, 0x00000000, +/**/ 0xBF339BA5, 0x639F8B15, +/**/ 0x3F9AA672, 0x1EE80000, +/**/ 0x3D2AD4EB, 0x5C5AF494, +/**/ 0x3FEF2800, 0x00000000, +/**/ 0xBF304DDE, 0xE7AA579B, +/**/ 0x3F9B9FC0, 0x27B00000, +/**/ 0xBD3B9A01, 0x0AE6922A, +/**/ 0x3FEF2000, 0x00000000, +/**/ 0xBF29C52A, 0x8B8C46FD, +/**/ 0x3F9C98D1, 0x8D010000, +/**/ 0xBD2BF615, 0x0589DF0F, +/**/ 0x3FEF1800, 0x00000000, +/**/ 0xBF22B3BB, 0xFE0E92B4, +/**/ 0x3F9D91A6, 0x6C540000, +/**/ 0x3D2E61F1, 0x658CFB9A, +/**/ 0x3FEF1000, 0x00000000, +/**/ 0xBF16CF39, 0xFE8B488E, +/**/ 0x3F9E8A3E, 0xE30D0000, +/**/ 0xBD21A9FA, 0x3DE53900, +/**/ 0x3FEF0800, 0x00000000, +/**/ 0xBEFF07C1, 0xF07C1F08, +/**/ 0x3F9F829B, 0x0E780000, +/**/ 0x3D298026, 0x7C7E09E4, +/**/ 0x3FEF0000, 0x00000000, +/**/ 0x3EFF003E, 0x007C00F8, +/**/ 0x3FA03D5D, 0x85E70000, +/**/ 0x3D3F7789, 0x60ED29CF, +/**/ 0x3FEEF800, 0x00000000, +/**/ 0x3F17B671, 0x3D759870, +/**/ 0x3FA0B94F, 0x7C198000, +/**/ 0xBD2E8989, 0x6F022783, +/**/ 0x3FEEF000, 0x00000000, +/**/ 0x3F241070, 0x2A8BB96A, +/**/ 0x3FA13523, 0x78598000, +/**/ 0xBD1C1AC3, 0xB71FA59B, +/**/ 0x3FEEE800, 0x00000000, +/**/ 0x3F2C7F84, 0x58E01EEA, +/**/ 0x3FA1B0D9, 0x89240000, +/**/ 0xBD33401E, 0x9AE889BB, +/**/ 0x3FEEE000, 0x00000000, +/**/ 0x3F329425, 0xA3D491BC, +/**/ 0x3FA22C71, 0xBCEA8000, +/**/ 0x3CFD2818, 0xF87F888F, +/**/ 0x3FEED800, 0x00000000, +/**/ 0x3F37054D, 0x9E9D2AE8, +/**/ 0x3FA2A7EC, 0x22150000, +/**/ 0xBD278CE7, 0x7A9163FE, +/**/ 0x3FEED000, 0x00000000, +/**/ 0x3F3B9325, 0x540C85E6, +/**/ 0x3FA32348, 0xC7000000, +/**/ 0x3D2696DB, 0x90B1E49F, +/**/ 0x3FEED000, 0x00000000, +/**/ 0xBF3FC267, 0xF099FC26, +/**/ 0x3FA39E87, 0xB9FE8000, +/**/ 0x3D3EAFD4, 0x80AD9015, +/**/ 0x3FEEC800, 0x00000000, +/**/ 0xBF3AFB6E, 0xD02A4E5D, +/**/ 0x3FA419A9, 0x09590000, +/**/ 0x3D3B5CDC, 0x67D48EA7, +/**/ 0x3FEEC000, 0x00000000, +/**/ 0xBF361803, 0xD7A79FF1, +/**/ 0x3FA494AC, 0xC34D8000, +/**/ 0x3D211C78, 0xA56FD247, +/**/ 0x3FEEB800, 0x00000000, +/**/ 0xBF31183B, 0x805C2197, +/**/ 0x3FA50F92, 0xF60F8000, +/**/ 0x3D296CFB, 0x0A91FFE3, +/**/ 0x3FEEB000, 0x00000000, +/**/ 0xBF27F854, 0x5FE15180, +/**/ 0x3FA58A5B, 0xAFC90000, +/**/ 0xBD2B2B73, 0x9570AD39, +/**/ 0x3FEEA800, 0x00000000, +/**/ 0xBF1B0F90, 0xE210C36A, +/**/ 0x3FA60506, 0xFE990000, +/**/ 0xBD32BA40, 0x8194E036, +/**/ 0x3FEEA000, 0x00000000, +/**/ 0xBEF6F7DD, 0x8C33ADB2, +/**/ 0x3FA67F94, 0xF0948000, +/**/ 0x3D3ECC1F, 0x3E7E4ED7, +/**/ 0x3FEE9800, 0x00000000, +/**/ 0x3F1003D3, 0x1003D310, +/**/ 0x3FA6FA05, 0x93C78000, +/**/ 0x3D3B415E, 0x41D634A1, +/**/ 0x3FEE9000, 0x00000000, +/**/ 0x3F231ABF, 0x0B7672A0, +/**/ 0x3FA77458, 0xF6330000, +/**/ 0xBD3181DC, 0xE586AF09, +/**/ 0x3FEE8800, 0x00000000, +/**/ 0x3F2E6B5C, 0xCF172481, +/**/ 0x3FA7EE8F, 0x25CD8000, +/**/ 0xBD3F4216, 0x11A5C1E9, +/**/ 0x3FEE8000, 0x00000000, +/**/ 0x3F34F9CD, 0x77A84876, +/**/ 0x3FA868A8, 0x30840000, +/**/ 0xBD12623A, 0x134AC693, +/**/ 0x3FEE7800, 0x00000000, +/**/ 0x3F3AD9A8, 0xD7473427, +/**/ 0x3FA8E2A4, 0x243A0000, +/**/ 0x3D2B9EEB, 0x01426490, +/**/ 0x3FEE7800, 0x00000000, +/**/ 0xBF3F2AD3, 0x4578DCCA, +/**/ 0x3FA95C83, 0x0EC90000, +/**/ 0xBD2C1482, 0x97C5FEB8, +/**/ 0x3FEE7000, 0x00000000, +/**/ 0xBF3913BA, 0x97A6A035, +/**/ 0x3FA9D644, 0xFDFF8000, +/**/ 0x3D313C90, 0x539A473B, +/**/ 0x3FEE6800, 0x00000000, +/**/ 0xBF32E120, 0xC594A915, +/**/ 0x3FAA4FE9, 0xFFA40000, +/**/ 0xBD36E584, 0xA0402925, +/**/ 0x3FEE6000, 0x00000000, +/**/ 0xBF292632, 0xC5DF4232, +/**/ 0x3FAAC972, 0x21710000, +/**/ 0x3D2F8D3E, 0xF013222C, +/**/ 0x3FEE5800, 0x00000000, +/**/ 0xBF18A6DF, 0xC3518A6E, +/**/ 0x3FAB42DD, 0x71198000, +/**/ 0xBD1C827A, 0xE5D6704C, +/**/ 0x3FEE5000, 0x00000000, +/**/ 0x3ED6BC08, 0x86833271, +/**/ 0x3FABBC2B, 0xFC450000, +/**/ 0xBD17D186, 0x91417DAF, +/**/ 0x3FEE4800, 0x00000000, +/**/ 0x3F1BEB2D, 0xE672838D, +/**/ 0x3FAC355D, 0xD0920000, +/**/ 0x3D2F2CCC, 0x9ABF8388, +/**/ 0x3FEE4000, 0x00000000, +/**/ 0x3F2B6B8D, 0x9785150A, +/**/ 0x3FACAE72, 0xFB960000, +/**/ 0xBD3EFABF, 0x2025B1BE, +/**/ 0x3FEE3800, 0x00000000, +/**/ 0x3F348BCE, 0xE0D399FA, +/**/ 0x3FAD276B, 0x8ADB0000, +/**/ 0x3D16A423, 0xC78A64B0, +/**/ 0x3FEE3000, 0x00000000, +/**/ 0x3F3B7CD0, 0x933AC00F, +/**/ 0x3FADA047, 0x8BE38000, +/**/ 0x3D2252C7, 0xB1F6FE05, +/**/ 0x3FEE3000, 0x00000000, +/**/ 0xBF3D7747, 0x308F5281, +/**/ 0x3FAE1907, 0x0C278000, +/**/ 0xBD2FEA46, 0x64629E86, +/**/ 0x3FEE2800, 0x00000000, +/**/ 0xBF36508B, 0x6C196F66, +/**/ 0x3FAE91AA, 0x19150000, +/**/ 0xBD0E82A0, 0x1DCC6A76, +/**/ 0x3FEE2000, 0x00000000, +/**/ 0xBF2E1E1E, 0x1E1E1E1E, +/**/ 0x3FAF0A30, 0xC0118000, +/**/ 0xBD2D599E, 0x83368E91, +/**/ 0x3FEE1800, 0x00000000, +/**/ 0xBF1ECB93, 0xDD355CDB, +/**/ 0x3FAF829B, 0x0E780000, +/**/ 0x3D398026, 0x7C7E09E4, +/**/ 0x3FEE1000, 0x00000000, +/**/ 0xBECE0FF8, 0x7C01E100, +/**/ 0x3FAFFAE9, 0x119B8000, +/**/ 0x3D230337, 0x4262C554, +/**/ 0x3FEE0800, 0x00000000, +/**/ 0x3F1D54B5, 0x25C73724, +/**/ 0x3FB0398D, 0x6B624000, +/**/ 0xBD3AB14D, 0xFCBFCD00, +/**/ 0x3FEE0000, 0x00000000, +/**/ 0x3F2E01E0, 0x1E01E01E, +/**/ 0x3FB07598, 0x35990000, +/**/ 0xBD3B8ECF, 0xE4B59987, +/**/ 0x3FEDF800, 0x00000000, +/**/ 0x3F36C715, 0xC84194BA, +/**/ 0x3FB0B194, 0xEE0D0000, +/**/ 0x3D3666EA, 0x4F69EDCC, +/**/ 0x3FEDF000, 0x00000000, +/**/ 0x3F3EA78B, 0xEF26D838, +/**/ 0x3FB0ED83, 0x9B554000, +/**/ 0xBD3901F4, 0x6D48ABB4, +/**/ 0x3FEDF000, 0x00000000, +/**/ 0xBF395DBF, 0xF10995DC, +/**/ 0x3FB12964, 0x44030000, +/**/ 0xBD3D53BB, 0x751AA773, +/**/ 0x3FEDE800, 0x00000000, +/**/ 0xBF3148E0, 0x3BCBADC8, +/**/ 0x3FB16536, 0xEEA38000, +/**/ 0xBD147C5E, 0x768FA309, +/**/ 0x3FEDE000, 0x00000000, +/**/ 0xBF2233CE, 0x86E25CE1, +/**/ 0x3FB1A0FB, 0xA1BF8000, +/**/ 0x3D24A3FC, 0xC319D6DC, +/**/ 0x3FEDD800, 0x00000000, +/**/ 0xBEEA1CE9, 0x26B3FE23, +/**/ 0x3FB1DCB2, 0x63DB0000, +/**/ 0x3D39444F, 0x5E9E8981, +/**/ 0x3FEDD000, 0x00000000, +/**/ 0x3F1E4836, 0x0AB71710, +/**/ 0x3FB2185B, 0x3B75C000, +/**/ 0xBD3E3189, 0xF8F32304, +/**/ 0x3FEDC800, 0x00000000, +/**/ 0x3F300EE5, 0x00EE500F, +/**/ 0x3FB253F6, 0x2F0A0000, +/**/ 0x3D3416F8, 0xFB69A701, +/**/ 0x3FEDC000, 0x00000000, +/**/ 0x3F38A58D, 0x231C226A, +/**/ 0x3FB28F83, 0x450EC000, +/**/ 0x3D3A8D75, 0xAA119769, +/**/ 0x3FEDC000, 0x00000000, +/**/ 0xBF3EAA0C, 0x14715D63, +/**/ 0x3FB2CB02, 0x83F5C000, +/**/ 0x3D3E1EE2, 0xCA657021, +/**/ 0x3FEDB800, 0x00000000, +/**/ 0xBF35DFF8, 0x92AEFFC5, +/**/ 0x3FB30673, 0xF22C8000, +/**/ 0x3D24C9E2, 0x9DCF0BA5, +/**/ 0x3FEDB000, 0x00000000, +/**/ 0xBF29F894, 0x67E251A0, +/**/ 0x3FB341D7, 0x961BC000, +/**/ 0x3D31D092, 0x99837610, +/**/ 0x3FEDA800, 0x00000000, +/**/ 0xBF0FF896, 0x1FF89620, +/**/ 0x3FB37D2D, 0x76284000, +/**/ 0xBD2C60AA, 0x9B7FF15C, +/**/ 0x3FEDA000, 0x00000000, +/**/ 0x3F145E70, 0x076828BD, +/**/ 0x3FB3B875, 0x98B1C000, +/**/ 0xBD222415, 0x94ACA313, +/**/ 0x3FED9800, 0x00000000, +/**/ 0x3F2C8F60, 0xE567D573, +/**/ 0x3FB3F3B0, 0x04140000, +/**/ 0x3CEE2474, 0xACDFCEC5, +/**/ 0x3FED9000, 0x00000000, +/**/ 0x3F379118, 0xF3FC4DA2, +/**/ 0x3FB42EDC, 0xBEA64000, +/**/ 0x3D1BC0EE, 0xEA7C9ACD, +/**/ 0x3FED9000, 0x00000000, +/**/ 0xBF3F0C3C, 0x049DE4C3, +/**/ 0x3FB469FB, 0xCEBB4000, +/**/ 0x3D3B663C, 0x4F257194, +/**/ 0x3FED8800, 0x00000000, +/**/ 0xBF35905F, 0xF13D5906, +/**/ 0x3FB4A50D, 0x3AA1C000, +/**/ 0xBD2F7FE1, 0x308973E2, +/**/ 0x3FED8000, 0x00000000, +/**/ 0xBF27F6C8, 0x77D1EA57, +/**/ 0x3FB4E011, 0x08A34000, +/**/ 0x3D3AE5CF, 0xDF2C5AE5, +/**/ 0x3FED7800, 0x00000000, +/**/ 0xBF026AD1, 0xF4F31BA0, +/**/ 0x3FB51B07, 0x3F060000, +/**/ 0x3D383F69, 0x278E686A, +/**/ 0x3FED7000, 0x00000000, +/**/ 0x3F1DE6B2, 0xF26DF1BD, +/**/ 0x3FB555EF, 0xE40B4000, +/**/ 0x3D30B497, 0x8C868E23, +/**/ 0x3FED6800, 0x00000000, +/**/ 0x3F31599F, 0x7BA23D96, +/**/ 0x3FB590CA, 0xFDF00000, +/**/ 0x3D3C284F, 0x5722ABAA, +/**/ 0x3FED6000, 0x00000000, +/**/ 0x3F3B526C, 0xD425A760, +/**/ 0x3FB5CB98, 0x92ED4000, +/**/ 0x3D17BE44, 0xA64FC52F, +/**/ 0x3FED6000, 0x00000000, +/**/ 0xBF3A9BFC, 0x546A6FF1, +/**/ 0x3FB60658, 0xA9374000, +/**/ 0x3D30C3B1, 0xDEE9C4F8, +/**/ 0x3FED5800, 0x00000000, +/**/ 0xBF3071AD, 0x08F02FAC, +/**/ 0x3FB6410B, 0x46FE8000, +/**/ 0xBD153F8F, 0x3CBD8D14, +/**/ 0x3FED5000, 0x00000000, +/**/ 0xBF18BAD9, 0x12C6C142, +/**/ 0x3FB67BB0, 0x726EC000, +/**/ 0x3CEF724B, 0x69EF5912, +/**/ 0x3FED4800, 0x00000000, +/**/ 0x3F10B35C, 0x3254A5A2, +/**/ 0x3FB6B648, 0x31B00000, +/**/ 0xBD3BF30A, 0x1377DE92, +/**/ 0x3FED4000, 0x00000000, +/**/ 0x3F2D41D4, 0x1D41D41D, +/**/ 0x3FB6F0D2, 0x8AE58000, +/**/ 0xBD34B464, 0x1B664613, +/**/ 0x3FED3800, 0x00000000, +/**/ 0x3F392D71, 0xF494E548, +/**/ 0x3FB72B4F, 0x842EC000, +/**/ 0xBD3704CC, 0xC00C9DD3, +/**/ 0x3FED3800, 0x00000000, +/**/ 0xBF3C2DA1, 0xFF165C2E, +/**/ 0x3FB765BF, 0x23A6C000, +/**/ 0xBCFECBC0, 0x35C4256A, +/**/ 0x3FED3000, 0x00000000, +/**/ 0xBF317062, 0x7AA49674, +/**/ 0x3FB7A021, 0x6F648000, +/**/ 0x3D3E124C, 0xA18418FF, +/**/ 0x3FED2800, 0x00000000, +/**/ 0xBF1A6B80, 0x749CB290, +/**/ 0x3FB7DA76, 0x6D7B0000, +/**/ 0x3D32CC84, 0x4480C89B, +/**/ 0x3FED2000, 0x00000000, +/**/ 0x3F114B52, 0x25C6336D, +/**/ 0x3FB814BE, 0x23F8C000, +/**/ 0x3CCB2381, 0xDA82FDFD, +/**/ 0x3FED1800, 0x00000000, +/**/ 0x3F2EB155, 0xF08A3B1D, +/**/ 0x3FB84EF8, 0x98E84000, +/**/ 0xBD37D5CD, 0x246977C9, +/**/ 0x3FED1000, 0x00000000, +/**/ 0x3F3A7692, 0xBD71CD93, +/**/ 0x3FB88925, 0xD24FC000, +/**/ 0xBD31D505, 0x44FBB806, +/**/ 0x3FED1000, 0x00000000, +/**/ 0xBF3A5384, 0x89FC5E69, +/**/ 0x3FB8C345, 0xD6318000, +/**/ 0x3D3B20F5, 0xACB42A66, +/**/ 0x3FED0800, 0x00000000, +/**/ 0xBF2E0B56, 0x6439240E, +/**/ 0x3FB8FD58, 0xAA8C4000, +/**/ 0xBD3EEC90, 0x1BCB725B, +/**/ 0x3FED0000, 0x00000000, +/**/ 0xBF0CFF8C, 0x01CFF8C0, +/**/ 0x3FB9375E, 0x55594000, +/**/ 0x3D3EDDC3, 0x7380C364, +/**/ 0x3FECF800, 0x00000000, +/**/ 0x3F1F7661, 0x546D8D78, +/**/ 0x3FB97156, 0xDC8F8000, +/**/ 0xBD3C1FC1, 0x9AFDB97B, +/**/ 0x3FECF000, 0x00000000, +/**/ 0x3F3372E2, 0x25FE30D9, +/**/ 0x3FB9AB42, 0x46204000, +/**/ 0xBD28A648, 0x26787061, +/**/ 0x3FECE800, 0x00000000, +/**/ 0x3F3F1FDB, 0xD92305A6, +/**/ 0x3FB9E520, 0x97F9C000, +/**/ 0x3D235FAC, 0xB52DD050, +/**/ 0x3FECE800, 0x00000000, +/**/ 0xBF351B8A, 0x9C37FC63, +/**/ 0x3FBA1EF1, 0xD8060000, +/**/ 0x3D3CD417, 0x6DF97BCB, +/**/ 0x3FECE000, 0x00000000, +/**/ 0xBF227EC2, 0x6CB725AB, +/**/ 0x3FBA58B6, 0x0C2B4000, +/**/ 0xBD3CDC73, 0x5C5C9F2A, +/**/ 0x3FECD800, 0x00000000, +/**/ 0x3F05A240, 0xE6C2B448, +/**/ 0x3FBA926D, 0x3A4AC000, +/**/ 0x3D356365, 0x0BD22A9C, +/**/ 0x3FECD000, 0x00000000, +/**/ 0x3F2D7EC2, 0xFBB8D9F3, +/**/ 0x3FBACC17, 0x68434000, +/**/ 0xBD2AA783, 0xA0B7FA4C, +/**/ 0x3FECC800, 0x00000000, +/**/ 0x3F3AE1DB, 0x1B71D3E9, +/**/ 0x3FBB05B4, 0x9BEE4000, +/**/ 0x3D0FF22C, 0x18F84A5E, +/**/ 0x3FECC800, 0x00000000, +/**/ 0xBF38E45A, 0xCD6DE82D, +/**/ 0x3FBB3F44, 0xDB220000, +/**/ 0x3D3FD153, 0xD8DE09AF, +/**/ 0x3FECC000, 0x00000000, +/**/ 0xBF29269F, 0xE341926A, +/**/ 0x3FBB78C8, 0x2BB10000, +/**/ 0xBD325EF7, 0xBC3987E7, +/**/ 0x3FECB800, 0x00000000, +/**/ 0xBEC589FB, 0xF620C1DA, +/**/ 0x3FBBB23E, 0x93690000, +/**/ 0xBD368B18, 0x3559DB8B, +/**/ 0x3FECB000, 0x00000000, +/**/ 0x3F28A893, 0x0DE5FF1A, +/**/ 0x3FBBEBA8, 0x18148000, +/**/ 0xBD389B78, 0xB6DF1F57, +/**/ 0x3FECA800, 0x00000000, +/**/ 0x3F38EAB9, 0x0039563B, +/**/ 0x3FBC2504, 0xBF79C000, +/**/ 0x3D3717C4, 0xD0EF4ADC, +/**/ 0x3FECA800, 0x00000000, +/**/ 0xBF3A67D5, 0x08F377F2, +/**/ 0x3FBC5E54, 0x8F5BC000, +/**/ 0x3D1D0C57, 0x585FBE06, +/**/ 0x3FECA000, 0x00000000, +/**/ 0xBF2B46E0, 0x072792E4, +/**/ 0x3FBC9797, 0x8D790000, +/**/ 0xBD36E010, 0x977D1884, +/**/ 0x3FEC9800, 0x00000000, +/**/ 0xBEE904EA, 0x1BB327C3, +/**/ 0x3FBCD0CD, 0xBF8C0000, +/**/ 0x3D33E14D, 0xB50DD743, +/**/ 0x3FEC9000, 0x00000000, +/**/ 0x3F2853EB, 0x77683AEC, +/**/ 0x3FBD09F7, 0x2B4C4000, +/**/ 0x3D2048C0, 0x00354E33, +/**/ 0x3FEC8800, 0x00000000, +/**/ 0x3F3932D7, 0xDC52100E, +/**/ 0x3FBD4313, 0xD66CC000, +/**/ 0xBD294543, 0x79135713, +/**/ 0x3FEC8800, 0x00000000, +/**/ 0xBF39AD90, 0x2736962B, +/**/ 0x3FBD7C23, 0xC69CC000, +/**/ 0xBD297EE4, 0xDD328771, +/**/ 0x3FEC8000, 0x00000000, +/**/ 0xBF28EEA2, 0xF316B4C2, +/**/ 0x3FBDB527, 0x0187C000, +/**/ 0x3D392778, 0x56AE181F, +/**/ 0x3FEC7800, 0x00000000, +/**/ 0x3EEAB099, 0x058F7536, +/**/ 0x3FBDEE1D, 0x8CD60000, +/**/ 0xBD328DA0, 0x729EFF89, +/**/ 0x3FEC7000, 0x00000000, +/**/ 0x3F2C71C7, 0x1C71C71C, +/**/ 0x3FBE2707, 0x6E2B0000, +/**/ 0xBD2A342C, 0x2AF0003C, +/**/ 0x3FEC6800, 0x00000000, +/**/ 0x3F3BB2BB, 0xD6422A30, +/**/ 0x3FBE5FE4, 0xAB274000, +/**/ 0xBD35FAE9, 0xF74FFE4D, +/**/ 0x3FEC6800, 0x00000000, +/**/ 0xBF36BD01, 0x54BDE47E, +/**/ 0x3FBE98B5, 0x49670000, +/**/ 0x3D346774, 0x89C50E97, +/**/ 0x3FEC6000, 0x00000000, +/**/ 0xBF222CC5, 0xB5157FE4, +/**/ 0x3FBED179, 0x4E838000, +/**/ 0xBD1FD143, 0x749D0484, +/**/ 0x3FEC5800, 0x00000000, +/**/ 0x3F129A21, 0xA930B840, +/**/ 0x3FBF0A30, 0xC0118000, +/**/ 0xBD3D599E, 0x83368E91, +/**/ 0x3FEC5000, 0x00000000, +/**/ 0x3F3279B1, 0xAC5CEE14, +/**/ 0x3FBF42DB, 0xA3A24000, +/**/ 0xBD3312B7, 0x32DF6C0D, +/**/ 0x3FEC5000, 0x00000000, +/**/ 0xBF3F9CF5, 0xD4AB8D0B, +/**/ 0x3FBF7B79, 0xFEC38000, +/**/ 0xBD010987, 0xE897ED01, +/**/ 0x3FEC4800, 0x00000000, +/**/ 0xBF319D7C, 0xCC17DAE4, +/**/ 0x3FBFB40B, 0xD6FF4000, +/**/ 0x3D2C0BEC, 0xB7B53B5B, +/**/ 0x3FEC4000, 0x00000000, +/**/ 0xBF0C3F8F, 0x01C3F8F0, +/**/ 0x3FBFEC91, 0x31DC0000, +/**/ 0xBD354555, 0xD1AE6607, +/**/ 0x3FEC3800, 0x00000000, +/**/ 0x3F254738, 0xAB1B8FFC, +/**/ 0x3FC01285, 0x0A6E0000, +/**/ 0xBD1A8619, 0x4805BF94, +/**/ 0x3FEC3000, 0x00000000, +/**/ 0x3F38E51F, 0x48B3C5D7, +/**/ 0x3FC02EBB, 0x42BF4000, +/**/ 0xBD15A8FA, 0x5CE00E5D, +/**/ 0x3FEC3000, 0x00000000, +/**/ 0xBF38C377, 0x867E595E, +/**/ 0x3FC04AEB, 0x449F6000, +/**/ 0x3D2AFA90, 0x65CCD35C, +/**/ 0x3FEC2800, 0x00000000, +/**/ 0xBF24AC6D, 0x15FE3D95, +/**/ 0x3FC06715, 0x12CA6000, +/**/ 0xBD2A4757, 0x9CDC0A3D, +/**/ 0x3FEC2000, 0x00000000, +/**/ 0x3F10B34F, 0x53B8CDAE, +/**/ 0x3FC08338, 0xAFFA2000, +/**/ 0x3D30533C, 0xAC823E27, +/**/ 0x3FEC1800, 0x00000000, +/**/ 0x3F32C599, 0x3FABB0F6, +/**/ 0x3FC09F56, 0x1EE72000, +/**/ 0xBD28F305, 0x7157D1A8, +/**/ 0x3FEC1800, 0x00000000, +/**/ 0xBF3E8BF4, 0x97CD1B6C, +/**/ 0x3FC0BB6D, 0x6247A000, +/**/ 0x3D35464F, 0x3CCD04B3, +/**/ 0x3FEC1000, 0x00000000, +/**/ 0xBF2F8FC7, 0xE3F1F8FC, +/**/ 0x3FC0D77E, 0x7CD08000, +/**/ 0x3D3CB2CD, 0x2EE2F482, +/**/ 0x3FEC0800, 0x00000000, +/**/ 0xBEEDC860, 0x5B199F35, +/**/ 0x3FC0F389, 0x7134C000, +/**/ 0xBD3DA359, 0xE893D6C6, +/**/ 0x3FEC0000, 0x00000000, +/**/ 0x3F2C01C0, 0x1C01C01C, +/**/ 0x3FC10F8E, 0x42254000, +/**/ 0xBD293B38, 0x43396307, +/**/ 0x3FEBF800, 0x00000000, +/**/ 0x3F3D0577, 0x256228AA, +/**/ 0x3FC12B8C, 0xF2518000, +/**/ 0x3D348A4A, 0x13C0A0FC, +/**/ 0x3FEBF800, 0x00000000, +/**/ 0xBF33E08B, 0xCB93A8A1, +/**/ 0x3FC14785, 0x84674000, +/**/ 0x3D156345, 0x1027C750, +/**/ 0x3FEBF000, 0x00000000, +/**/ 0xBF12C4DB, 0x1DE63F4A, +/**/ 0x3FC16377, 0xFB124000, +/**/ 0x3D091E1A, 0xBF41763E, +/**/ 0x3FEBE800, 0x00000000, +/**/ 0x3F2526D0, 0x769F9E4F, +/**/ 0x3FC17F64, 0x58FCA000, +/**/ 0x3D2843FA, 0xD093C8DC, +/**/ 0x3FEBE000, 0x00000000, +/**/ 0x3F39ED43, 0x5292D891, +/**/ 0x3FC19B4A, 0xA0CEE000, +/**/ 0xBD3D8824, 0x9621338B, +/**/ 0x3FEBE000, 0x00000000, +/**/ 0xBF36A3B3, 0x5FC845A9, +/**/ 0x3FC1B72A, 0xD52F6000, +/**/ 0x3D2E80A4, 0x1811A396, +/**/ 0x3FEBD800, 0x00000000, +/**/ 0xBF1C7E26, 0xB7230491, +/**/ 0x3FC1D304, 0xF8C36000, +/**/ 0xBD3A6D44, 0xDF451042, +/**/ 0x3FEBD000, 0x00000000, +/**/ 0x3F20F365, 0x451B61CB, +/**/ 0x3FC1EED9, 0x0E2DC000, +/**/ 0x3D161563, 0x7097648F, +/**/ 0x3FEBC800, 0x00000000, +/**/ 0x3F3827F3, 0xD72DD0AA, +/**/ 0x3FC20AA7, 0x18102000, +/**/ 0x3D3F2C94, 0x348552FE, +/**/ 0x3FEBC800, 0x00000000, +/**/ 0xBF3814D3, 0xBE0C262F, +/**/ 0x3FC2266F, 0x190A6000, +/**/ 0xBD24D20A, 0xB840E7F6, +/**/ 0x3FEBC000, 0x00000000, +/**/ 0xBF207963, 0x7ECECB53, +/**/ 0x3FC24231, 0x13BA6000, +/**/ 0xBD3E3A00, 0x78EE9D9C, +/**/ 0x3FEBB800, 0x00000000, +/**/ 0x3F1EC130, 0xF29268D3, +/**/ 0x3FC25DED, 0x0ABC6000, +/**/ 0x3D35A385, 0x4F176449, +/**/ 0x3FEBB000, 0x00000000, +/**/ 0x3F37B218, 0xAB6353BF, +/**/ 0x3FC279A3, 0x00AB4000, +/**/ 0x3D3EF432, 0xB3235108, +/**/ 0x3FEBB000, 0x00000000, +/**/ 0xBF383759, 0xF2298376, +/**/ 0x3FC29552, 0xF8200000, +/**/ 0xBD35B967, 0xF4471DFC, +/**/ 0x3FEBA800, 0x00000000, +/**/ 0xBF201832, 0x1EAD4253, +/**/ 0x3FC2B0FC, 0xF3B1A000, +/**/ 0x3D177CA3, 0xE30A59EA, +/**/ 0x3FEBA000, 0x00000000, +/**/ 0x3F20679B, 0xD84886B1, +/**/ 0x3FC2CCA0, 0xF5F60000, +/**/ 0xBD3B5EF1, 0x91AFF120, +/**/ 0x3FEB9800, 0x00000000, +/**/ 0x3F38884D, 0xA41FEB4C, +/**/ 0x3FC2E83F, 0x0180E000, +/**/ 0xBD3F0C2A, 0xC284E1CE, +/**/ 0x3FEB9800, 0x00000000, +/**/ 0xBF370EA7, 0x3806E548, +/**/ 0x3FC303D7, 0x18E48000, +/**/ 0xBCD680B5, 0xCE3ECB05, +/**/ 0x3FEB9000, 0x00000000, +/**/ 0xBF1A4477, 0xB5EF34C0, +/**/ 0x3FC31F69, 0x3EB1A000, +/**/ 0xBD2A6726, 0xE5A396FB, +/**/ 0x3FEB8800, 0x00000000, +/**/ 0x3F2401B8, 0x9401B894, +/**/ 0x3FC33AF5, 0x75770000, +/**/ 0x3D3C9ECC, 0xA2FE72A5, +/**/ 0x3FEB8000, 0x00000000, +/**/ 0x3F3AA73A, 0x400DC1AA, +/**/ 0x3FC3567B, 0xBFC22000, +/**/ 0x3D3250D2, 0x53991A1F, +/**/ 0x3FEB8000, 0x00000000, +/**/ 0xBF349E11, 0x2E63A6A8, +/**/ 0x3FC371FC, 0x201E8000, +/**/ 0x3D3EE877, 0x9B2D8ABC, +/**/ 0x3FEB7800, 0x00000000, +/**/ 0xBF0E7898, 0xC8DA04B9, +/**/ 0x3FC38D76, 0x99164000, +/**/ 0x3D1844A5, 0x9E39BB70, +/**/ 0x3FEB7000, 0x00000000, +/**/ 0x3F2A284E, 0xE6B33E2D, +/**/ 0x3FC3A8EB, 0x2D31A000, +/**/ 0x3D1BAFB7, 0x7D5D503E, +/**/ 0x3FEB6800, 0x00000000, +/**/ 0x3F3E0B91, 0x759C2BB4, +/**/ 0x3FC3C459, 0xDEF76000, +/**/ 0x3D3EDC86, 0xF6B70D33, +/**/ 0x3FEB6800, 0x00000000, +/**/ 0xBF30E8E2, 0x088FD6E7, +/**/ 0x3FC3DFC2, 0xB0ECC000, +/**/ 0x3D28A72A, 0x62B8C13F, +/**/ 0x3FEB6000, 0x00000000, +/**/ 0x3ECB6006, 0xD801B600, +/**/ 0x3FC3FB25, 0xA5952000, +/**/ 0x3D3195BE, 0x6B358FF7, +/**/ 0x3FEB5800, 0x00000000, +/**/ 0x3F316A6A, 0xD840F62C, +/**/ 0x3FC41682, 0xBF728000, +/**/ 0xBD210047, 0x081F849D, +/**/ 0x3FEB5800, 0x00000000, +/**/ 0xBF3D4DEE, 0x7DF8BD99, +/**/ 0x3FC431DA, 0x01050000, +/**/ 0x3D304837, 0x836E0391, +/**/ 0x3FEB5000, 0x00000000, +/**/ 0xBF27E4B1, 0x7E4B17E5, +/**/ 0x3FC44D2B, 0x6CCB8000, +/**/ 0xBD170CC1, 0x6135783C, +/**/ 0x3FEB4800, 0x00000000, +/**/ 0x3F15F47D, 0x55E6D8FE, +/**/ 0x3FC46877, 0x05430000, +/**/ 0xBD3D8145, 0xF8D5087E, +/**/ 0x3FEB4000, 0x00000000, +/**/ 0x3F37006D, 0x0B803686, +/**/ 0x3FC483BC, 0xCCE6E000, +/**/ 0x3D1EEA52, 0x723F6369, +/**/ 0x3FEB4000, 0x00000000, +/**/ 0xBF37687C, 0x46A66920, +/**/ 0x3FC49EFC, 0xC6314000, +/**/ 0xBD090F59, 0x9F55572B, +/**/ 0x3FEB3800, 0x00000000, +/**/ 0xBF16F6A4, 0xFF2645BE, +/**/ 0x3FC4BA36, 0xF39A6000, +/**/ 0xBD34354B, 0xB3F219E5, +/**/ 0x3FEB3000, 0x00000000, +/**/ 0x3F2801B3, 0x1801B318, +/**/ 0x3FC4D56B, 0x5798E000, +/**/ 0x3D380580, 0x15A96555, +/**/ 0x3FEB2800, 0x00000000, +/**/ 0x3F3DD2FF, 0x93511680, +/**/ 0x3FC4F099, 0xF4A24000, +/**/ 0xBD3E9BF2, 0xFAFEAF27, +/**/ 0x3FEB2800, 0x00000000, +/**/ 0xBF304743, 0xA89DCCAC, +/**/ 0x3FC50BC2, 0xCD29C000, +/**/ 0x3D1ADA57, 0x28DB8D4F, +/**/ 0x3FEB2000, 0x00000000, +/**/ 0x3EFB2036, 0x406C80D9, +/**/ 0x3FC526E5, 0xE3A1C000, +/**/ 0xBD3790BA, 0x37FC5238, +/**/ 0x3FEB1800, 0x00000000, +/**/ 0x3F33BEC8, 0x4F9DC00E, +/**/ 0x3FC54203, 0x3A7A8000, +/**/ 0x3D268D68, 0xED855F0E, +/**/ 0x3FEB1800, 0x00000000, +/**/ 0xBF3A2101, 0x44F8CE7E, +/**/ 0x3FC55D1A, 0xD4232000, +/**/ 0x3D3ADD94, 0xDDA647E8, +/**/ 0x3FEB1000, 0x00000000, +/**/ 0xBF1FB596, 0xB99AF3F3, +/**/ 0x3FC5782C, 0xB3092000, +/**/ 0xBD33A463, 0x51794442, +/**/ 0x3FEB0800, 0x00000000, +/**/ 0x3F24B31D, 0x922A3E85, +/**/ 0x3FC59338, 0xD9982000, +/**/ 0x3CF0BA68, 0xB7555D4A, +/**/ 0x3FEB0000, 0x00000000, +/**/ 0x3F3CB3CF, 0xE19BF6B7, +/**/ 0x3FC5AE3F, 0x4A3AA000, +/**/ 0x3D21EA25, 0xF012A8B9, +/**/ 0x3FEB0000, 0x00000000, +/**/ 0xBF30DEAE, 0x9A5BF0D1, +/**/ 0x3FC5C940, 0x07598000, +/**/ 0xBD3A8D94, 0x8CD23322, +/**/ 0x3FEAF800, 0x00000000, +/**/ 0x3EFA2072, 0x9EDE13CE, +/**/ 0x3FC5E43B, 0x135BE000, +/**/ 0xBD343AB4, 0xCEED9C31, +/**/ 0x3FEAF000, 0x00000000, +/**/ 0x3F3435E5, 0x0D79435E, +/**/ 0x3FC5FF30, 0x70A7A000, +/**/ 0xBD38586F, 0x183BEBF2, +/**/ 0x3FEAF000, 0x00000000, +/**/ 0xBF392321, 0x06855D30, +/**/ 0x3FC61A20, 0x21A0E000, +/**/ 0x3D3DD9DD, 0x1BDF3CDD, +/**/ 0x3FEAE800, 0x00000000, +/**/ 0xBF19A45C, 0x7ABED811, +/**/ 0x3FC6350A, 0x28AAA000, +/**/ 0x3D2D5EC0, 0xAB8163AF, +/**/ 0x3FEAE000, 0x00000000, +/**/ 0x3F28C7ED, 0x84EF68CB, +/**/ 0x3FC64FEE, 0x88260000, +/**/ 0xBD1DA40D, 0x759DDED6, +/**/ 0x3FEAD800, 0x00000000, +/**/ 0x3F3F43FC, 0xA482F00D, +/**/ 0x3FC66ACD, 0x4272A000, +/**/ 0x3D3AA1BD, 0xBFC6C785, +/**/ 0x3FEAD800, 0x00000000, +/**/ 0xBF2B9222, 0xCDE3E7AE, +/**/ 0x3FC685A6, 0x59EF0000, +/**/ 0xBD21F2A9, 0x6C103214, +/**/ 0x3FEAD000, 0x00000000, +/**/ 0x3F14F302, 0xEED254A3, +/**/ 0x3FC6A079, 0xD0F7A000, +/**/ 0x3D35A3F8, 0x448D14F5, +/**/ 0x3FEAC800, 0x00000000, +/**/ 0x3F385567, 0x32071DEF, +/**/ 0x3FC6BB47, 0xA9E80000, +/**/ 0x3D19F64D, 0x23EA3296, +/**/ 0x3FEAC800, 0x00000000, +/**/ 0xBF347F29, 0xD47F29D4, +/**/ 0x3FC6D60F, 0xE719E000, +/**/ 0xBD3BC6E5, 0x57134767, +/**/ 0x3FEAC000, 0x00000000, +/**/ 0xBEF40FE1, 0xE82D23BC, +/**/ 0x3FC6F0D2, 0x8AE56000, +/**/ 0x3D369737, 0xC93373DA, +/**/ 0x3FEAB800, 0x00000000, +/**/ 0x3F320FDE, 0x972D8538, +/**/ 0x3FC70B8F, 0x97A1A000, +/**/ 0x3D34EA64, 0xF6A95BEF, +/**/ 0x3FEAB800, 0x00000000, +/**/ 0xBF3A8C9F, 0x66711513, +/**/ 0x3FC72647, 0x0FA40000, +/**/ 0xBD3774DF, 0x0E743A45, +/**/ 0x3FEAB000, 0x00000000, +/**/ 0xBF1C5A0F, 0x02806ABC, +/**/ 0x3FC740F8, 0xF5404000, +/**/ 0xBD30B66C, 0x99018AA1, +/**/ 0x3FEAA800, 0x00000000, +/**/ 0x3F28E44B, 0xD22C937A, +/**/ 0x3FC75BA5, 0x4AC8E000, +/**/ 0x3D3DDCA5, 0x8BC4A7C0, +/**/ 0x3FEAA800, 0x00000000, +/**/ 0xBF3FF2AD, 0xFF2ADFF3, +/**/ 0x3FC7764C, 0x128F2000, +/**/ 0x3D027490, 0x3479E3D1, +/**/ 0x3FEAA000, 0x00000000, +/**/ 0xBF288A16, 0x0B3ADA5C, +/**/ 0x3FC790ED, 0x4EE26000, +/**/ 0x3D199BBD, 0x4E7746F6, +/**/ 0x3FEA9800, 0x00000000, +/**/ 0x3F1DEC0D, 0x4C77B035, +/**/ 0x3FC7AB89, 0x0210E000, +/**/ 0xBD2BDB90, 0x72534A58, +/**/ 0x3FEA9000, 0x00000000, +/**/ 0x3F3B4D71, 0x91F59E6B, +/**/ 0x3FC7C61F, 0x2E674000, +/**/ 0xBD32392D, 0xB31BE8E0, +/**/ 0x3FEA9000, 0x00000000, +/**/ 0xBF30CDCB, 0xB8A2A522, +/**/ 0x3FC7E0AF, 0xD630C000, +/**/ 0x3D139E7C, 0x1D8F1034, +/**/ 0x3FEA8800, 0x00000000, +/**/ 0x3F094A00, 0x6A2194A0, +/**/ 0x3FC7FB3A, 0xFBB76000, +/**/ 0xBD37DBF5, 0x24609D57, +/**/ 0x3FEA8000, 0x00000000, +/**/ 0x3F373289, 0x870AC52E, +/**/ 0x3FC815C0, 0xA1436000, +/**/ 0xBD302A52, 0xF9201CE8, +/**/ 0x3FEA8000, 0x00000000, +/**/ 0xBF34B1FA, 0x9E8684DD, +/**/ 0x3FC83040, 0xC91BC000, +/**/ 0x3D3E5B71, 0xC6E66F32, +/**/ 0x3FEA7800, 0x00000000, +/**/ 0xBEE08AF5, 0xA9267648, +/**/ 0x3FC84ABB, 0x75866000, +/**/ 0xBD3D8DAA, 0xDF4E2BD2, +/**/ 0x3FEA7000, 0x00000000, +/**/ 0x3F33BB67, 0x1A3D927E, +/**/ 0x3FC86530, 0xA8C70000, +/**/ 0x3D398BB0, 0xCB4EA3E3, +/**/ 0x3FEA7000, 0x00000000, +/**/ 0xBF37F2C9, 0x7F2C97F3, +/**/ 0x3FC87FA0, 0x6520C000, +/**/ 0x3D322120, 0x401202FC, +/**/ 0x3FEA6800, 0x00000000, +/**/ 0xBF0C77A5, 0x3C076D20, +/**/ 0x3FC89A0A, 0xACD4E000, +/**/ 0x3D2C0BFB, 0xDA8F5A72, +/**/ 0x3FEA6000, 0x00000000, +/**/ 0x3F30E6DA, 0x7C7EF82B, +/**/ 0x3FC8B46F, 0x82236000, +/**/ 0x3D12D9F2, 0x102DD7C9, +/**/ 0x3FEA6000, 0x00000000, +/**/ 0xBF3A9167, 0x2EC05C44, +/**/ 0x3FC8CECE, 0xE74AE000, +/**/ 0xBD3A5BA0, 0xAA429BB5, +/**/ 0x3FEA5800, 0x00000000, +/**/ 0xBF17DF12, 0xEEB6BD53, +/**/ 0x3FC8E928, 0xDE886000, +/**/ 0x3D3A8154, 0xB13D72D5, +/**/ 0x3FEA5000, 0x00000000, +/**/ 0x3F2D676D, 0x98C70AE6, +/**/ 0x3FC9037D, 0x6A180000, +/**/ 0x3D230DEA, 0x57C1C8D9, +/**/ 0x3FEA5000, 0x00000000, +/**/ 0xBF3C8EFF, 0x96CE4780, +/**/ 0x3FC91DCC, 0x8C340000, +/**/ 0x3D37BC6A, 0xBDDEFF46, +/**/ 0x3FEA4800, 0x00000000, +/**/ 0xBF1EFFCB, 0x71EFFCB7, +/**/ 0x3FC93816, 0x4715A000, +/**/ 0xBD34C63D, 0x6A3A39D9, +/**/ 0x3FEA4000, 0x00000000, +/**/ 0x3F2A41A4, 0x1A41A41A, +/**/ 0x3FC9525A, 0x9CF46000, +/**/ 0xBD329713, 0x7D9F158F, +/**/ 0x3FEA4000, 0x00000000, +/**/ 0xBF3DECBB, 0xBF3B3C0E, +/**/ 0x3FC96C99, 0x9006A000, +/**/ 0x3D2A88D5, 0x9CBB452C, +/**/ 0x3FEA3800, 0x00000000, +/**/ 0xBF21D14E, 0x3BCD35A8, +/**/ 0x3FC986D3, 0x22818000, +/**/ 0x3CF93B56, 0x4DD44000, +/**/ 0x3FEA3000, 0x00000000, +/**/ 0x3F285A0A, 0x3B5832C0, +/**/ 0x3FC9A107, 0x56988000, +/**/ 0x3D264AA6, 0x242CD098, +/**/ 0x3FEA3000, 0x00000000, +/**/ 0xBF3EABC1, 0xD71AFD8C, +/**/ 0x3FC9BB36, 0x2E7E0000, +/**/ 0xBD21F2A8, 0xA1CE0FFC, +/**/ 0x3FEA2800, 0x00000000, +/**/ 0xBF22E60D, 0x7C041611, +/**/ 0x3FC9D55F, 0xAC62E000, +/**/ 0xBD3F4669, 0xFC3B5BC3, +/**/ 0x3FEA2000, 0x00000000, +/**/ 0x3F27AE57, 0x5FF2EF43, +/**/ 0x3FC9EF83, 0xD276A000, +/**/ 0xBD2730B7, 0xB3F9CE00, +/**/ 0x3FEA2000, 0x00000000, +/**/ 0xBF3ECD35, 0x3D66322E, +/**/ 0x3FCA09A2, 0xA2E7A000, +/**/ 0xBD2DD99D, 0xCD411233, +/**/ 0x3FEA1800, 0x00000000, +/**/ 0xBF22C068, 0x5B4FE5E9, +/**/ 0x3FCA23BC, 0x1FE2C000, +/**/ 0xBD3539CD, 0x91DC9F0B, +/**/ 0x3FEA1000, 0x00000000, +/**/ 0x3F283C48, 0x80B67A9A, +/**/ 0x3FCA3DD0, 0x4B938000, +/**/ 0x3D297DA1, 0x366E2C5A, +/**/ 0x3FEA1000, 0x00000000, +/**/ 0xBF3E5236, 0x89907BBA, +/**/ 0x3FCA57DF, 0x28244000, +/**/ 0x3D3B99C8, 0xCA1D9ABB, +/**/ 0x3FEA0800, 0x00000000, +/**/ 0xBF21629E, 0x32054967, +/**/ 0x3FCA71E8, 0xB7BE0000, +/**/ 0xBD210ACA, 0x6EF05323, +/**/ 0x3FEA0000, 0x00000000, +/**/ 0x3F2A01A0, 0x1A01A01A, +/**/ 0x3FCA8BEC, 0xFC882000, +/**/ 0x3D3E3185, 0xCF21B9CF, +/**/ 0x3FEA0000, 0x00000000, +/**/ 0xBF3D3BE3, 0x93FF301D, +/**/ 0x3FCAA5EB, 0xF8A94000, +/**/ 0xBD32A0A9, 0x36951A8F, +/**/ 0x3FE9F800, 0x00000000, +/**/ 0xBF1D9DD1, 0xBFE608ED, +/**/ 0x3FCABFE5, 0xAE462000, +/**/ 0xBD3B68F5, 0x395F139D, +/**/ 0x3FE9F000, 0x00000000, +/**/ 0x3F2CFC26, 0x1B29257F, +/**/ 0x3FCAD9DA, 0x1F828000, +/**/ 0xBD3882B7, 0xC803F050, +/**/ 0x3FE9F000, 0x00000000, +/**/ 0xBF3B8B57, 0x7E613717, +/**/ 0x3FCAF3C9, 0x4E80C000, +/**/ 0xBCBA4E63, 0x3FCD9066, +/**/ 0x3FE9E800, 0x00000000, +/**/ 0xBF160EF9, 0xB9FABD04, +/**/ 0x3FCB0DB3, 0x3D620000, +/**/ 0x3D3FEE14, 0x38EAB906, +/**/ 0x3FE9E000, 0x00000000, +/**/ 0x3F3094D3, 0xEAF850E2, +/**/ 0x3FCB2797, 0xEE464000, +/**/ 0xBD3BE88A, 0x906D00A9, +/**/ 0x3FE9E000, 0x00000000, +/**/ 0xBF3941AA, 0xBBE88FDC, +/**/ 0x3FCB4177, 0x634BA000, +/**/ 0x3D355D01, 0x5666069F, +/**/ 0x3FE9D800, 0x00000000, +/**/ 0xBF083A25, 0x25F4B1AA, +/**/ 0x3FCB5B51, 0x9E8FC000, +/**/ 0xBD34B722, 0xEC011F31, +/**/ 0x3FE9D000, 0x00000000, +/**/ 0x3F3343FB, 0xF71FAC14, +/**/ 0x3FCB7526, 0xA22E4000, +/**/ 0x3D2C0DBF, 0x2E785490, +/**/ 0x3FE9D000, 0x00000000, +/**/ 0xBF365FF3, 0x1965FF32, +/**/ 0x3FCB8EF6, 0x70420000, +/**/ 0x3D387533, 0x321788E0, +/**/ 0x3FE9C800, 0x00000000, +/**/ 0x3EA9C801, 0x9C8019C8, +/**/ 0x3FCBA8C1, 0x0AE46000, +/**/ 0x3D3A32E2, 0x9EEE9D85, +/**/ 0x3FE9C000, 0x00000000, +/**/ 0x3F368A77, 0x25080CE1, +/**/ 0x3FCBC286, 0x742D8000, +/**/ 0x3D39AC53, 0xF39D121C, +/**/ 0x3FE9C000, 0x00000000, +/**/ 0xBF32E743, 0xC54763F2, +/**/ 0x3FCBDC46, 0xAE344000, +/**/ 0x3D3625B4, 0x023D6505, +/**/ 0x3FE9B800, 0x00000000, +/**/ 0x3F0DBD49, 0x8B7424F9, +/**/ 0x3FCBF601, 0xBB0E4000, +/**/ 0x3D2386A9, 0x47C378B5, +/**/ 0x3FE9B000, 0x00000000, +/**/ 0x3F3A6734, 0x00CD9A67, +/**/ 0x3FCC0FB7, 0x9CCFE000, +/**/ 0xBD346FFF, 0x99E8A558, +/**/ 0x3FE9B000, 0x00000000, +/**/ 0xBF2DB15A, 0xAEF25B7C, +/**/ 0x3FCC2968, 0x558C2000, +/**/ 0xBD2CFD73, 0xDEE38A40, +/**/ 0x3FE9A800, 0x00000000, +/**/ 0x3F1FDFEC, 0xC140C073, +/**/ 0x3FCC4313, 0xE754E000, +/**/ 0x3D3279BE, 0x74CAD7D6, +/**/ 0x3FE9A000, 0x00000000, +/**/ 0x3F3ED923, 0xA7DCBEB3, +/**/ 0x3FCC5CBA, 0x543AE000, +/**/ 0x3D20929D, 0xECB454FC, +/**/ 0x3FE9A000, 0x00000000, +/**/ 0xBF246A7B, 0xB256DE2C, +/**/ 0x3FCC765B, 0x9E4D6000, +/**/ 0x3D31AB6B, 0x36976F6C, +/**/ 0x3FE99800, 0x00000000, +/**/ 0x3F299999, 0x9999999A, +/**/ 0x3FCC8FF7, 0xC79AA000, +/**/ 0xBD27794F, 0x689F8434, +/**/ 0x3FE99800, 0x00000000, +/**/ 0xBF3C20C6, 0x3EC03FF3, +/**/ 0x3FCCA98E, 0xD22F6000, +/**/ 0xBCF698C1, 0x8CA209C8, +/**/ 0x3FE99000, 0x00000000, +/**/ 0xBF13F803, 0x31EC07FD, +/**/ 0x3FCCC320, 0xC0176000, +/**/ 0x3D240903, 0x9A653794, +/**/ 0x3FE98800, 0x00000000, +/**/ 0x3F323513, 0x5AC98715, +/**/ 0x3FCCDCAD, 0x935D2000, +/**/ 0xBD0A0FF0, 0x34C9A447, +/**/ 0x3FE98800, 0x00000000, +/**/ 0xBF368793, 0x89F80661, +/**/ 0x3FCCF635, 0x4E09C000, +/**/ 0x3D277123, 0x9A07D55B, +/**/ 0x3FE98000, 0x00000000, +/**/ 0x3EE98019, 0x8019801A, +/**/ 0x3FCD0FB7, 0xF2256000, +/**/ 0xBD0AF52B, 0x20633B29, +/**/ 0x3FE97800, 0x00000000, +/**/ 0x3F382FC6, 0xAB329020, +/**/ 0x3FCD2935, 0x81B6C000, +/**/ 0xBD383270, 0x128AAA5F, +/**/ 0x3FE97800, 0x00000000, +/**/ 0xBF305C4B, 0x962DBFF3, +/**/ 0x3FCD42AD, 0xFEC36000, +/**/ 0xBD175C00, 0xFD804272, +/**/ 0x3FE97000, 0x00000000, +/**/ 0x3F1C9F01, 0x970E4F81, +/**/ 0x3FCD5C21, 0x6B4FC000, +/**/ 0xBD21BA91, 0xBBCA681B, +/**/ 0x3FE96800, 0x00000000, +/**/ 0x3F3EBBE1, 0x049160B8, +/**/ 0x3FCD758F, 0xC95F0000, +/**/ 0xBD15A10A, 0x8B4162AA, +/**/ 0x3FE96800, 0x00000000, +/**/ 0xBF233FE6, 0x9933FE6A, +/**/ 0x3FCD8EF9, 0x1AF32000, +/**/ 0xBD15105F, 0xC364C784, +/**/ 0x3FE96000, 0x00000000, +/**/ 0x3F2C2873, 0xCE078906, +/**/ 0x3FCDA85D, 0x620CE000, +/**/ 0x3D240194, 0xC16CC7EC, +/**/ 0x3FE96000, 0x00000000, +/**/ 0xBF3A27A0, 0xE442936B, +/**/ 0x3FCDC1BC, 0xA0ABE000, +/**/ 0x3D38FAC1, 0xA628CCC6, +/**/ 0x3FE95800, 0x00000000, +/**/ 0xBF029C69, 0x548A97A9, +/**/ 0x3FCDDB16, 0xD8CEA000, +/**/ 0xBD1EEF79, 0x7104B8BC, +/**/ 0x3FE95000, 0x00000000, +/**/ 0x3F35906B, 0x9F74B92D, +/**/ 0x3FCDF46C, 0x0C722000, +/**/ 0x3D3A5E82, 0xB0B79039, +/**/ 0x3FE95000, 0x00000000, +/**/ 0xBF327BBF, 0xF35927BC, +/**/ 0x3FCE0DBC, 0x3D92A000, +/**/ 0x3D359233, 0xF0529BF1, +/**/ 0x3FE94800, 0x00000000, +/**/ 0x3F161F9A, 0xDD3C0CA4, +/**/ 0x3FCE2707, 0x6E2B0000, +/**/ 0xBD3A342C, 0x2AF0003C, +/**/ 0x3FE94000, 0x00000000, +/**/ 0x3F3D9B56, 0x41228A8F, +/**/ 0x3FCE404D, 0xA034C000, +/**/ 0xBD3187EE, 0xE09A2799, +/**/ 0x3FE94000, 0x00000000, +/**/ 0xBF2482F5, 0x598A73F8, +/**/ 0x3FCE598E, 0xD5A88000, +/**/ 0xBD0D134B, 0xCF1E98A1, +/**/ 0x3FE93800, 0x00000000, +/**/ 0x3F2BE2D5, 0x3C1B9728, +/**/ 0x3FCE72CB, 0x107DA000, +/**/ 0x3D1DD48C, 0xCDF5471C, +/**/ 0x3FE93800, 0x00000000, +/**/ 0xBF39CC03, 0x2698CFF3, +/**/ 0x3FCE8C02, 0x52AA6000, +/**/ 0xBD26805B, 0x80E8E6FF, +/**/ 0x3FE93000, 0x00000000, +/**/ 0xBEF79CD3, 0xB9F30358, +/**/ 0x3FCEA534, 0x9E23A000, +/**/ 0x3D381B93, 0x4C73CCB5, +/**/ 0x3FE92800, 0x00000000, +/**/ 0x3F36E803, 0x255BA00D, +/**/ 0x3FCEBE61, 0xF4DD8000, +/**/ 0xBD23D453, 0x30FDCA4D, +/**/ 0x3FE92800, 0x00000000, +/**/ 0xBF30A69B, 0x36077742, +/**/ 0x3FCED78A, 0x58CA8000, +/**/ 0x3D16F1B5, 0x3793387E, +/**/ 0x3FE92000, 0x00000000, +/**/ 0x3F1F693A, 0x1C451AB3, +/**/ 0x3FCEF0AD, 0xCBDC6000, +/**/ 0xBD2B26B7, 0x9C86AF24, +/**/ 0x3FE92000, 0x00000000, +/**/ 0xBF3F9548, 0xC74EA9E2, +/**/ 0x3FCF09CC, 0x50036000, +/**/ 0x3D3DA094, 0x18D999DB, +/**/ 0x3FE91800, 0x00000000, +/**/ 0xBF1BD5A8, 0xF7C46911, +/**/ 0x3FCF22E5, 0xE72F2000, +/**/ 0xBD3F454F, 0x1417E41F, +/**/ 0x3FE91000, 0x00000000, +/**/ 0x3F31B9E1, 0x0D83D1C6, +/**/ 0x3FCF3BFA, 0x934D6000, +/**/ 0x3D2D9F2A, 0x937B903B, +/**/ 0x3FE91000, 0x00000000, +/**/ 0xBF35876F, 0xF3795877, +/**/ 0x3FCF550A, 0x564B8000, +/**/ 0xBD2323E3, 0xA09202FE, +/**/ 0x3FE90800, 0x00000000, +/**/ 0x3F0A34CD, 0xBD1D87EC, +/**/ 0x3FCF6E15, 0x32154000, +/**/ 0xBD3C9A97, 0x7AC4EC74, +/**/ 0x3FE90000, 0x00000000, +/**/ 0x3F3C23F5, 0x0E760899, +/**/ 0x3FCF871B, 0x28956000, +/**/ 0xBD3F75FD, 0x6A526EFE, +/**/ 0x3FE90000, 0x00000000, +/**/ 0xBF25DECD, 0xD0BE9594, +/**/ 0x3FCFA01C, 0x3BB58000, +/**/ 0xBD1A1F71, 0xFAE1D786, +/**/ 0x3FE8F800, 0x00000000, +/**/ 0x3F2C18F9, 0xC18F9C19, +/**/ 0x3FCFB918, 0x6D5E4000, +/**/ 0xBD0D572A, 0xAB993C87, +/**/ 0x3FE8F800, 0x00000000, +/**/ 0xBF38E868, 0x8176594C, +/**/ 0x3FCFD20F, 0xBF770000, +/**/ 0xBD11C55B, 0x72C6FE70, +/**/ 0x3FE8F000, 0x00000000, +/**/ 0x3EC8F006, 0x3C018F00, +/**/ 0x3FCFEB02, 0x33E60000, +/**/ 0x3D2F316E, 0x32D5E8C7, +/**/ 0x3FE8E800, 0x00000000, +/**/ 0x3F395B4D, 0xAD115384, +/**/ 0x3FD001F7, 0xE6484000, +/**/ 0x3D38A957, 0x40C9ABBC, +/**/ 0x3FE8E800, 0x00000000, +/**/ 0xBF2AD850, 0xEC8C0F90, +/**/ 0x3FD00E6C, 0x45AD5000, +/**/ 0x3CDCC68D, 0x52E01203, +/**/ 0x3FE8E000, 0x00000000, +/**/ 0x3F27B6E9, 0xA56B1AA1, +/**/ 0x3FD01ADE, 0x3913A000, +/**/ 0xBD108930, 0xCCDC1521, +/**/ 0x3FE8E000, 0x00000000, +/**/ 0xBF3ACDE3, 0x40DFC1D8, +/**/ 0x3FD0274D, 0xC16C2000, +/**/ 0x3D2979E8, 0x9CF835C2, +/**/ 0x3FE8D800, 0x00000000, +/**/ 0xBEF68397, 0x317DF64C, +/**/ 0x3FD033BA, 0xDFA74000, +/**/ 0x3D0C30BC, 0x1485BDFF, +/**/ 0x3FE8D000, 0x00000000, +/**/ 0x3F380C69, 0x80C6980C, +/**/ 0x3FD04025, 0x94B4D000, +/**/ 0x3CF036B8, 0x9EF42D7F, +/**/ 0x3FE8D000, 0x00000000, +/**/ 0xBF2CE006, 0x338C7FE7, +/**/ 0x3FD04C8D, 0xE1842000, +/**/ 0xBD1FE6BA, 0x512CEB86, +/**/ 0x3FE8C800, 0x00000000, +/**/ 0x3F2644F0, 0x1EFBBD63, +/**/ 0x3FD058F3, 0xC703F000, +/**/ 0xBD30E866, 0xBCD236AD, +/**/ 0x3FE8C800, 0x00000000, +/**/ 0xBF3B3C2D, 0xAA79217A, +/**/ 0x3FD06557, 0x46227000, +/**/ 0x3D0131DF, 0xB4868D6A, +/**/ 0x3FE8C000, 0x00000000, +/**/ 0xBEF8BFCE, 0x8062FF3A, +/**/ 0x3FD071B8, 0x5FCD6000, +/**/ 0xBD3BCB8B, 0xA3E01A11, +/**/ 0x3FE8B800, 0x00000000, +/**/ 0x3F383301, 0xBD2672C4, +/**/ 0x3FD07E17, 0x14F1D000, +/**/ 0xBD3EFCC6, 0x4F384BD5, +/**/ 0x3FE8B800, 0x00000000, +/**/ 0xBF2BFE74, 0x9BFE749C, +/**/ 0x3FD08A73, 0x667C5000, +/**/ 0x3D3EBC1D, 0x40C5A329, +/**/ 0x3FE8B000, 0x00000000, +/**/ 0x3F27BA8C, 0xD4353EB3, +/**/ 0x3FD096CD, 0x55591000, +/**/ 0x3D3F998D, 0x20550A31, +/**/ 0x3FE8B000, 0x00000000, +/**/ 0xBF3A3784, 0xA062B2E4, +/**/ 0x3FD0A324, 0xE2739000, +/**/ 0x3D0C6BEE, 0x7EF4030E, +/**/ 0x3FE8A800, 0x00000000, +/**/ 0xBECED1F6, 0x5E630281, +/**/ 0x3FD0AF7A, 0x0EB6C000, +/**/ 0x3D23CCF9, 0x4945ADAD, +/**/ 0x3FE8A000, 0x00000000, +/**/ 0x3F39CAE0, 0x0C519CAE, +/**/ 0x3FD0BBCC, 0xDB0D2000, +/**/ 0x3D32F32C, 0xCC5DCDFB, +/**/ 0x3FE8A000, 0x00000000, +/**/ 0xBF283C02, 0x4EDBA5FD, +/**/ 0x3FD0C81D, 0x4860B000, +/**/ 0xBD3E5BCF, 0x401D1731, +/**/ 0x3FE89800, 0x00000000, +/**/ 0x3F2C0F60, 0x1899C0F6, +/**/ 0x3FD0D46B, 0x579AB000, +/**/ 0x3D3D2C81, 0xF640E1E6, +/**/ 0x3FE89800, 0x00000000, +/**/ 0xBF37C414, 0xBDBE51D0, +/**/ 0x3FD0E0B7, 0x09A43000, +/**/ 0x3D32A038, 0xA7862F2A, +/**/ 0x3FE89000, 0x00000000, +/**/ 0x3F03F540, 0xDD12CE7D, +/**/ 0x3FD0ED00, 0x5F658000, +/**/ 0xBD22DC75, 0x285AA803, +/**/ 0x3FE88800, 0x00000000, +/**/ 0x3F3CCFDE, 0x400C45CD, +/**/ 0x3FD0F947, 0x59C67000, +/**/ 0xBD395261, 0x7F0818B6, +/**/ 0x3FE88800, 0x00000000, +/**/ 0xBF21A0F5, 0x44FB66B5, +/**/ 0x3FD1058B, 0xF9AE5000, +/**/ 0xBD34AB9D, 0x817D52CD, +/**/ 0x3FE88000, 0x00000000, +/**/ 0x3F319D95, 0x2866A138, +/**/ 0x3FD111CE, 0x4003F000, +/**/ 0xBD1B3237, 0x096B4B6B, +/**/ 0x3FE88000, 0x00000000, +/**/ 0xBF33E5FA, 0xA48B49DA, +/**/ 0x3FD11E0E, 0x2DADA000, +/**/ 0xBD2A47F8, 0x8FCCE5BA, +/**/ 0x3FE87800, 0x00000000, +/**/ 0x3F1A9336, 0xDEECB0A8, +/**/ 0x3FD12A4B, 0xC3912000, +/**/ 0xBD35A750, 0x61473259, +/**/ 0x3FE87800, 0x00000000, +/**/ 0xBF3EC219, 0xFB6A388D, +/**/ 0x3FD13687, 0x0293B000, +/**/ 0xBD3D3E84, 0x99D67123, +/**/ 0x3FE87000, 0x00000000, +/**/ 0xBF106AE7, 0xC1625090, +/**/ 0x3FD142BF, 0xEB9A0000, +/**/ 0x3D31CE61, 0x85B58A9E, +/**/ 0x3FE86800, 0x00000000, +/**/ 0x3F369AE5, 0xACD4200C, +/**/ 0x3FD14EF6, 0x7F887000, +/**/ 0xBD3E97A6, 0x5DFC9794, +/**/ 0x3FE86800, 0x00000000, +/**/ 0xBF2D4286, 0x9389D11C, +/**/ 0x3FD15B2A, 0xBF429000, +/**/ 0xBD2D8E3B, 0x49B629B2, +/**/ 0x3FE86000, 0x00000000, +/**/ 0x3F286186, 0x18618618, +/**/ 0x3FD1675C, 0xABABA000, +/**/ 0x3D38380E, 0x731F55C4, +/**/ 0x3FE86000, 0x00000000, +/**/ 0xBF38EF0F, 0x6AC71708, +/**/ 0x3FD1738C, 0x45A67000, +/**/ 0xBD39C6E9, 0x0032C176, +/**/ 0x3FE85800, 0x00000000, +/**/ 0x3EFFF3D3, 0xE00C2C20, +/**/ 0x3FD17FB9, 0x8E151000, +/**/ 0xBD3A8A8B, 0xA74A2684, +/**/ 0x3FE85000, 0x00000000, +/**/ 0x3F3CFBA0, 0xF9592266, +/**/ 0x3FD18BE4, 0x85D93000, +/**/ 0x3D3C167F, 0x6F3604AB, +/**/ 0x3FE85000, 0x00000000, +/**/ 0xBF1FE7B0, 0xFF3D87FA, +/**/ 0x3FD1980D, 0x2DD42000, +/**/ 0x3D2B7B3A, 0x7A361C9A, +/**/ 0x3FE84800, 0x00000000, +/**/ 0x3F331E8D, 0x918DC223, +/**/ 0x3FD1A433, 0x86E68000, +/**/ 0xBD07A850, 0x634E0AAC, +/**/ 0x3FE84800, 0x00000000, +/**/ 0xBF31BAF9, 0x8D76B549, +/**/ 0x3FD1B057, 0x91F08000, +/**/ 0xBD32DD46, 0x6DC55E2D, +/**/ 0x3FE84000, 0x00000000, +/**/ 0x3F22F2EC, 0xDC90C512, +/**/ 0x3FD1BC79, 0x4FD1D000, +/**/ 0xBD3CCF0C, 0x747BA7BE, +/**/ 0x3FE84000, 0x00000000, +/**/ 0xBF3B442A, 0x6A0916B9, +/**/ 0x3FD1C898, 0xC169A000, +/**/ 0xBD381410, 0xE5C62AFF, +/**/ 0x3FE83800, 0x00000000, +/**/ 0x3EA83801, 0x83801838, +/**/ 0x3FD1D4B5, 0xE796A000, +/**/ 0x3D222A5B, 0xD197BAC2, +/**/ 0x3FE83000, 0x00000000, +/**/ 0x3F3B6A41, 0xCBD11C5C, +/**/ 0x3FD1E0D0, 0xC3371000, +/**/ 0x3D3AF8F2, 0xA9B0D4A0, +/**/ 0x3FE83000, 0x00000000, +/**/ 0xBF225381, 0xCB7A3CD6, +/**/ 0x3FD1ECE9, 0x5528B000, +/**/ 0xBD184E7B, 0x09B4A3B8, +/**/ 0x3FE82800, 0x00000000, +/**/ 0x3F32500C, 0x152500C1, +/**/ 0x3FD1F8FF, 0x9E48A000, +/**/ 0x3D27946C, 0x040CBE77, +/**/ 0x3FE82800, 0x00000000, +/**/ 0xBF32285F, 0x14902134, +/**/ 0x3FD20513, 0x9F73B000, +/**/ 0x3CF6E15E, 0x1609E0A4, +/**/ 0x3FE82000, 0x00000000, +/**/ 0x3F22D9EB, 0xA4018213, +/**/ 0x3FD21125, 0x59861000, +/**/ 0x3D382E78, 0xBA2950C4, +/**/ 0x3FE82000, 0x00000000, +/**/ 0xBF3AEFFC, 0xFC6BBFF4, +/**/ 0x3FD21D34, 0xCD5B9000, +/**/ 0x3D3B552F, 0xB28BADAA, +/**/ 0x3FE81800, 0x00000000, +/**/ 0x3EE81818, 0x18181818, +/**/ 0x3FD22941, 0xFBCF8000, +/**/ 0xBD3A6976, 0xF5EB0963, +/**/ 0x3FE81000, 0x00000000, +/**/ 0x3F3C7F27, 0x4FF0F3C6, +/**/ 0x3FD2354C, 0xE5BC9000, +/**/ 0xBD3D78ED, 0x0602A663, +/**/ 0x3FE81000, 0x00000000, +/**/ 0xBF1ED344, 0x0A86941D, +/**/ 0x3FD24155, 0x8BFD1000, +/**/ 0x3D300FFF, 0x3228FCAD, +/**/ 0x3FE80800, 0x00000000, +/**/ 0x3F3424D0, 0x1B0BD52D, +/**/ 0x3FD24D5B, 0xEF6AF000, +/**/ 0xBCBDD780, 0xFC9FABDD, +/**/ 0x3FE80800, 0x00000000, +/**/ 0xBF2FE7F9, 0xFE7F9FE8, +/**/ 0x3FD25960, 0x10DF7000, +/**/ 0x3D38E7BC, 0x224EA3E3, +/**/ 0x3FE80000, 0x00000000, +/**/ 0x3F280180, 0x18018018, +/**/ 0x3FD26561, 0xF1338000, +/**/ 0x3D38B488, 0x66FAA45F, +/**/ 0x3FE80000, 0x00000000, +/**/ 0xBF37FD00, 0x5FF40180, +/**/ 0x3FD27161, 0x913F8000, +/**/ 0x3D34F4F1, 0xF61564B4, +/**/ 0x3FE7F800, 0x00000000, +/**/ 0x3F104AE8, 0x9750B6C7, +/**/ 0x3FD27D5E, 0xF1DB6000, +/**/ 0xBD092374, 0x78CAC9F4, +/**/ 0x3FE7F800, 0x00000000, +/**/ 0xBF3FD017, 0xF405FD01, +/**/ 0x3FD2895A, 0x13DE8000, +/**/ 0x3D3A8D7A, 0xD24C13F0, +/**/ 0x3FE7F000, 0x00000000, +/**/ 0xBF0D2BF1, 0xC9C5485E, +/**/ 0x3FD29552, 0xF81FF000, +/**/ 0x3D348D30, 0x1771C408, +/**/ 0x3FE7E800, 0x00000000, +/**/ 0x3F38927F, 0xD029DB60, +/**/ 0x3FD2A149, 0x9F763000, +/**/ 0xBD30DBBF, 0x51F3AADC, +/**/ 0x3FE7E800, 0x00000000, +/**/ 0xBF26504A, 0xB0A45169, +/**/ 0x3FD2AD3E, 0x0AB73000, +/**/ 0x3D2B972E, 0x488C359F, +/**/ 0x3FE7E000, 0x00000000, +/**/ 0x3F312A8A, 0xD278E8DD, +/**/ 0x3FD2B930, 0x3AB8A000, +/**/ 0xBD26DB12, 0xD6BFB0A5, +/**/ 0x3FE7E000, 0x00000000, +/**/ 0xBF327577, 0x24BB32E7, +/**/ 0x3FD2C520, 0x304F8000, +/**/ 0x3D230852, 0x8C342F39, +/**/ 0x3FE7D800, 0x00000000, +/**/ 0x3F23EF9A, 0xA4B45AEC, +/**/ 0x3FD2D10D, 0xEC508000, +/**/ 0x3D360C61, 0xF7088353, +/**/ 0x3FE7D800, 0x00000000, +/**/ 0xBF398DAF, 0x32748CC1, +/**/ 0x3FD2DCF9, 0x6F8FD000, +/**/ 0x3D20B4A2, 0x8E33C9CE, +/**/ 0x3FE7D000, 0x00000000, +/**/ 0x3F07D05F, 0x417D05F4, +/**/ 0x3FD2E8E2, 0xBAE12000, +/**/ 0xBD267B1E, 0x99B72BD8, +/**/ 0x3FE7C800, 0x00000000, +/**/ 0x3F3F8EF7, 0x431D3027, +/**/ 0x3FD2F4C9, 0xCF17A000, +/**/ 0x3D371F04, 0x9374B87B, +/**/ 0x3FE7C800, 0x00000000, +/**/ 0xBF0E77A3, 0xDAD83E6C, +/**/ 0x3FD300AE, 0xAD063000, +/**/ 0x3D342F56, 0x8B75FCAC, +/**/ 0x3FE7C000, 0x00000000, +/**/ 0x3F38E041, 0x588D1676, +/**/ 0x3FD30C91, 0x557F2000, +/**/ 0xBD142958, 0xA1451755, +/**/ 0x3FE7C000, 0x00000000, +/**/ 0xBF24C6DD, 0x1FE8414C, +/**/ 0x3FD31871, 0xC9544000, +/**/ 0x3D184FAB, 0x94CECFD9, +/**/ 0x3FE7B800, 0x00000000, +/**/ 0x3F3265F4, 0x81C2D3B2, +/**/ 0x3FD32450, 0x09570000, +/**/ 0x3D3D271B, 0x9BDAE59D, +/**/ 0x3FE7B800, 0x00000000, +/**/ 0xBF30C39C, 0xB6466407, +/**/ 0x3FD3302C, 0x16586000, +/**/ 0x3D36217D, 0xC2A3E08B, +/**/ 0x3FE7B000, 0x00000000, +/**/ 0x3F283FAD, 0x12B21224, +/**/ 0x3FD33C05, 0xF128E000, +/**/ 0xBD22B906, 0x380E1A7D, +/**/ 0x3FE7B000, 0x00000000, +/**/ 0xBF36EFB8, 0xF899E55D, +/**/ 0x3FD347DD, 0x9A988000, +/**/ 0xBD25594D, 0xD4C58092, +/**/ 0x3FE7A800, 0x00000000, +/**/ 0x3F1836B6, 0x3FF42B9F, +/**/ 0x3FD353B3, 0x1376E000, +/**/ 0xBD1331AF, 0xE6C26D9B, +/**/ 0x3FE7A800, 0x00000000, +/**/ 0xBF3CE7FD, 0x0B739FF4, +/**/ 0x3FD35F86, 0x5C933000, +/**/ 0xBD3B07DE, 0x4EA1A54A, +/**/ 0x3FE7A000, 0x00000000, +/**/ 0x3EC7A005, 0xE8017A00, +/**/ 0x3FD36B57, 0x76BC1000, +/**/ 0x3D116978, 0x5A9C223F, +/**/ 0x3FE79800, 0x00000000, +/**/ 0x3F3D535D, 0xB1CC5B7B, +/**/ 0x3FD37726, 0x62BFE000, +/**/ 0xBD3E9436, 0xAC53B023, +/**/ 0x3FE79800, 0x00000000, +/**/ 0xBF15EEAC, 0xE0DA37A9, +/**/ 0x3FD382F3, 0x216C5000, +/**/ 0xBD1061D2, 0x1D1A7F6D, +/**/ 0x3FE79000, 0x00000000, +/**/ 0x3F37C21E, 0x344E16D6, +/**/ 0x3FD38EBD, 0xB38ED000, +/**/ 0x3D290582, 0xE67D4CA0, +/**/ 0x3FE79000, 0x00000000, +/**/ 0xBF25E69A, 0x39C9E465, +/**/ 0x3FD39A86, 0x19F45000, +/**/ 0x3D18EE51, 0x937354F5, +/**/ 0x3FE78800, 0x00000000, +/**/ 0x3F32640B, 0xC52640BC, +/**/ 0x3FD3A64C, 0x55694000, +/**/ 0x3D37A71C, 0xBCD735D0, +/**/ 0x3FE78800, 0x00000000, +/**/ 0xBF3037DE, 0x2F6A09ED, +/**/ 0x3FD3B210, 0x66B9C000, +/**/ 0xBD33C1ED, 0x9811560E, +/**/ 0x3FE78000, 0x00000000, +/**/ 0x3F2A71DC, 0x01781A72, +/**/ 0x3FD3BDD2, 0x4EB15000, +/**/ 0xBD3257B4, 0x970E6ED9, +/**/ 0x3FE78000, 0x00000000, +/**/ 0xBF354996, 0xA9EEBFF4, +/**/ 0x3FD3C992, 0x0E1B2000, +/**/ 0x3D141C28, 0xAA680B76, +/**/ 0x3FE77800, 0x00000000, +/**/ 0x3F208119, 0xAC60D341, +/**/ 0x3FD3D54F, 0xA5C1F000, +/**/ 0x3D3C3E1C, 0xD9A395E3, +/**/ 0x3FE77800, 0x00000000, +/**/ 0xBF3A28AE, 0x742E2DD0, +/**/ 0x3FD3E10B, 0x16701000, +/**/ 0x3D3F3BCF, 0x145429C7, +/**/ 0x3FE77000, 0x00000000, +/**/ 0x3F0BD584, 0x36340177, +/**/ 0x3FD3ECC4, 0x60EF6000, +/**/ 0xBD060286, 0x27C1300F, +/**/ 0x3FE77000, 0x00000000, +/**/ 0xBF3ED55D, 0x240C7174, +/**/ 0x3FD3F87B, 0x86094000, +/**/ 0xBD35DFD7, 0x54589889, +/**/ 0x3FE76800, 0x00000000, +/**/ 0xBEF18DE5, 0xAB277F45, +/**/ 0x3FD40430, 0x8686A000, +/**/ 0x3D3F8EF4, 0x3049F7D3, +/**/ 0x3FE76000, 0x00000000, +/**/ 0x3F3CB026, 0x01D3C7B8, +/**/ 0x3FD40FE3, 0x63303000, +/**/ 0x3D3E5C5F, 0xE79F05C6, +/**/ 0x3FE76000, 0x00000000, +/**/ 0xBF15E95B, 0xA9D08664, +/**/ 0x3FD41B94, 0x1CCE1000, +/**/ 0xBD304690, 0x13E43FC9, +/**/ 0x3FE75800, 0x00000000, +/**/ 0x3F3867A4, 0x097CFD43, +/**/ 0x3FD42742, 0xB427E000, +/**/ 0xBD398727, 0x02B82675, +/**/ 0x3FE75800, 0x00000000, +/**/ 0xBF2353DF, 0xE8A9353E, +/**/ 0x3FD432EF, 0x2A04F000, +/**/ 0xBD3FB129, 0x931715AD, +/**/ 0x3FE75000, 0x00000000, +/**/ 0x3F3450E6, 0x4F13DC4A, +/**/ 0x3FD43E99, 0x7F2C1000, +/**/ 0x3D1C3F72, 0x40C41A04, +/**/ 0x3FE75000, 0x00000000, +/**/ 0xBF2B4FBF, 0xE8B1B4FC, +/**/ 0x3FD44A41, 0xB463C000, +/**/ 0x3D31EE28, 0xF37CF612, +/**/ 0x3FE74800, 0x00000000, +/**/ 0x3F306BB6, 0x7E458100, +/**/ 0x3FD455E7, 0xCA720000, +/**/ 0x3D1AD8C6, 0x36629AED, +/**/ 0x3FE74800, 0x00000000, +/**/ 0xBF31745D, 0x1745D174, +/**/ 0x3FD4618B, 0xC21C6000, +/**/ 0xBD13D82F, 0x484C84CC, +/**/ 0x3FE74000, 0x00000000, +/**/ 0x3F296FBD, 0x236DEC04, +/**/ 0x3FD46D2D, 0x9C280000, +/**/ 0x3D359B27, 0x5F67F75A, +/**/ 0x3FE74000, 0x00000000, +/**/ 0xBF350F9D, 0x3B304B87, +/**/ 0x3FD478CD, 0x5959B000, +/**/ 0x3D2EC89B, 0xF0C8D098, +/**/ 0x3FE73800, 0x00000000, +/**/ 0x3F226A51, 0xA4EBDC70, +/**/ 0x3FD4846A, 0xFA75C000, +/**/ 0xBD263EA2, 0xE3798DCE, +/**/ 0x3FE73800, 0x00000000, +/**/ 0xBF3879D5, 0xF00B9A78, +/**/ 0x3FD49006, 0x80401000, +/**/ 0xBD38BCCF, 0xFE1A0F8C, +/**/ 0x3FE73000, 0x00000000, +/**/ 0x3F178D7F, 0x5DAAD90C, +/**/ 0x3FD49B9F, 0xEB7C1000, +/**/ 0x3D3DAC1C, 0x58AB60D7, +/**/ 0x3FE73000, 0x00000000, +/**/ 0xBF3BB33C, 0x783709C7, +/**/ 0x3FD4A737, 0x3CED0000, +/**/ 0xBD39A234, 0xEBF35449, +/**/ 0x3FE72800, 0x00000000, +/**/ 0x3F061274, 0x265AD23A, +/**/ 0x3FD4B2CC, 0x75556000, +/**/ 0xBD380FCB, 0xC78BFA4B, +/**/ 0x3FE72800, 0x00000000, +/**/ 0xBF3EBC05, 0xC90A1FD2, +/**/ 0x3FD4BE5F, 0x95778000, +/**/ 0xBD3D7C92, 0xCD9AD824, +/**/ 0x3FE72000, 0x00000000, +/**/ 0xBEC71FFA, 0x38017200, +/**/ 0x3FD4C9F0, 0x9E153000, +/**/ 0xBD2E1DDE, 0x70E02DE0, +/**/ 0x3FE71800, 0x00000000, +/**/ 0x3F3E6B99, 0x74A050E1, +/**/ 0x3FD4D57F, 0x8FEFE000, +/**/ 0x3D23F926, 0x7FD06868, +/**/ 0x3FE71800, 0x00000000, +/**/ 0xBF077400, 0xB8BD1180, +/**/ 0x3FD4E10C, 0x6BC8A000, +/**/ 0x3CF8283F, 0x1636F061, +/**/ 0x3FE71000, 0x00000000, +/**/ 0x3F3BC36C, 0xE3E0453A, +/**/ 0x3FD4EC97, 0x32600000, +/**/ 0x3D234D7A, 0xAF04D104, +/**/ 0x3FE71000, 0x00000000, +/**/ 0xBF15FA98, 0x6935DDC5, +/**/ 0x3FD4F81F, 0xE4764000, +/**/ 0xBD27FCF6, 0x434FF08D, +/**/ 0x3FE70800, 0x00000000, +/**/ 0x3F394B40, 0x7337CF08, +/**/ 0x3FD503A6, 0x82CB2000, +/**/ 0xBD2A68C8, 0xF16F9B5D, +/**/ 0x3FE70800, 0x00000000, +/**/ 0xBF1F7B97, 0xA835403A, +/**/ 0x3FD50F2B, 0x0E1E0000, +/**/ 0x3D3A0940, 0x8C47B8D8, +/**/ 0x3FE70000, 0x00000000, +/**/ 0x3F3702E0, 0x5C0B8170, +/**/ 0x3FD51AAD, 0x872E0000, +/**/ 0xBD3F4BD8, 0xDB0A7CC1, +/**/ 0x3FE70000, 0x00000000, +/**/ 0xBF241EE6, 0x4F67A855, +/**/ 0x3FD5262D, 0xEEB99000, +/**/ 0xBD3E1B9F, 0x70894A01, +/**/ 0x3FE6F800, 0x00000000, +/**/ 0x3F34EA19, 0x221C0170, +/**/ 0x3FD531AC, 0x457EE000, +/**/ 0x3D3DF83B, 0x7D931501, +/**/ 0x3FE6F800, 0x00000000, +/**/ 0xBF282102, 0x5508CA5C, +/**/ 0x3FD53D28, 0x8C3BE000, +/**/ 0xBD111397, 0xEB6DFAC5, +/**/ 0x3FE6F000, 0x00000000, +/**/ 0x3F3300B7, 0x9300B793, +/**/ 0x3FD548A2, 0xC3ADD000, +/**/ 0x3D23167E, 0x63081CF7, +/**/ 0x3FE6F000, 0x00000000, +/**/ 0xBF2BC486, 0x005BB90F, +/**/ 0x3FD5541A, 0xEC91C000, +/**/ 0xBCF816AA, 0xDC72EEBA, +/**/ 0x3FE6E800, 0x00000000, +/**/ 0x3F314688, 0xC5A3A00B, +/**/ 0x3FD55F91, 0x07A44000, +/**/ 0xBD11E647, 0x78DF4A62, +/**/ 0x3FE6E800, 0x00000000, +/**/ 0xBF2F09D6, 0xDA9C5AE1, +/**/ 0x3FD56B05, 0x15A18000, +/**/ 0x3D29247B, 0xBC4A23FC, +/**/ 0x3FE6E000, 0x00000000, +/**/ 0x3F2F76B4, 0x337C6CB1, +/**/ 0x3FD57677, 0x17456000, +/**/ 0xBD364EAD, 0x9524D7CA, +/**/ 0x3FE6E000, 0x00000000, +/**/ 0xBF30F8AC, 0xEDF4EC87, +/**/ 0x3FD581E7, 0x0D4B3000, +/**/ 0xBD1F31E1, 0xB12D8F1D, +/**/ 0x3FE6D800, 0x00000000, +/**/ 0x3F2CBDF2, 0x6EAEF381, +/**/ 0x3FD58D54, 0xF86E0000, +/**/ 0x3D2791F3, 0x0A795215, +/**/ 0x3FE6D800, 0x00000000, +/**/ 0xBF323DB9, 0xB624BFF5, +/**/ 0x3FD598C0, 0xD9688000, +/**/ 0xBD385F49, 0x70D96DA4, +/**/ 0x3FE6D000, 0x00000000, +/**/ 0x3F2A6268, 0x1C860FB0, +/**/ 0x3FD5A42A, 0xB0F4D000, +/**/ 0xBCDE63AF, 0x2DF7BA69, +/**/ 0x3FE6D000, 0x00000000, +/**/ 0xBF335443, 0xB253BAE1, +/**/ 0x3FD5AF92, 0x7FCCE000, +/**/ 0xBD1C032F, 0xF5FFC77A, +/**/ 0x3FE6C800, 0x00000000, +/**/ 0x3F2863B1, 0xAB4294D4, +/**/ 0x3FD5BAF8, 0x46AA2000, +/**/ 0xBD339AE8, 0xF873FA41, +/**/ 0x3FE6C800, 0x00000000, +/**/ 0xBF343C7C, 0x87EAA6DF, +/**/ 0x3FD5C65C, 0x0645A000, +/**/ 0xBD39FE06, 0x0180EE65, +/**/ 0x3FE6C000, 0x00000000, +/**/ 0x3F26C16C, 0x16C16C17, +/**/ 0x3FD5D1BD, 0xBF581000, +/**/ 0xBD38D6BD, 0xC9C7C238, +/**/ 0x3FE6C000, 0x00000000, +/**/ 0xBF34F695, 0x95C33E00, +/**/ 0x3FD5DD1D, 0x7299C000, +/**/ 0xBD38AF61, 0x8815CE17, +/**/ 0x3FE6B800, 0x00000000, +/**/ 0x3F257B34, 0xE7802D73, +/**/ 0x3FD5E87B, 0x20C29000, +/**/ 0x3D3527D1, 0x8F7738FA, +/**/ 0x3FE6B800, 0x00000000, +/**/ 0xBF3582BF, 0xF4A5582C, +/**/ 0x3FD5F3D6, 0xCA8A2000, +/**/ 0x3D37AF84, 0x8E19CC75, +/**/ 0x3FE6B000, 0x00000000, +/**/ 0x3F2490AA, 0x31A3CFC7, +/**/ 0x3FD5FF30, 0x70A79000, +/**/ 0x3D2E9E43, 0x9F105039, +/**/ 0x3FE6B000, 0x00000000, +/**/ 0xBF35E12C, 0x77C30E5A, +/**/ 0x3FD60A88, 0x13D1A000, +/**/ 0x3D36E9B9, 0xC879AF55, +/**/ 0x3FE6A800, 0x00000000, +/**/ 0x3F24016A, 0x94016A94, +/**/ 0x3FD615DD, 0xB4BEC000, +/**/ 0x3D13C7CA, 0x90BC04B2, +/**/ 0x3FE6A800, 0x00000000, +/**/ 0xBF36120B, 0xAD33D63F, +/**/ 0x3FD62131, 0x5424F000, +/**/ 0xBD3382FC, 0x4AA68669, +/**/ 0x3FE6A000, 0x00000000, +/**/ 0x3F23CD15, 0x3729043E, +/**/ 0x3FD62C82, 0xF2B9C000, +/**/ 0x3D3E54BD, 0xBD7C8A98 } }; + +static const union {int4 i[4350]; double x[2175]; } vj = { .i = { +/**/ 0x3F46A400, 0x7D161C28, +/**/ 0xBF46A200, 0x20600000, +/**/ 0x3D27DC4E, 0xAA7623D9, +/**/ 0x3F4693FA, 0xD596E639, +/**/ 0xBF4691FD, 0x4CE00000, +/**/ 0x3D26B0CF, 0x29C3F0AD, +/**/ 0x3F4683F5, 0x3219CE89, +/**/ 0xBF4681FA, 0x7B600000, +/**/ 0x3D22B290, 0x95B9FDCC, +/**/ 0x3F4673EF, 0x929ED397, +/**/ 0xBF4671F7, 0xABE00000, +/**/ 0x3D17C727, 0xFA2F2D87, +/**/ 0x3F4663E9, 0xF725F3E2, +/**/ 0xBF4661F4, 0xDE600000, +/**/ 0x3CF22ED3, 0x6EDBFF1C, +/**/ 0x3F4653E4, 0x5FAF2DE9, +/**/ 0xBF4651F2, 0x12E00000, +/**/ 0xBD144936, 0x157812BB, +/**/ 0x3F4643DE, 0xCC3A802B, +/**/ 0xBF4641EF, 0x49600000, +/**/ 0xBD2959CB, 0x60314E05, +/**/ 0x3F4633D9, 0x3CC7E927, +/**/ 0xBF4631EC, 0x81E00000, +/**/ 0xBD35ABDA, 0xC3638E99, +/**/ 0x3F4623D3, 0xB157675C, +/**/ 0xBF4621E9, 0xBC800000, +/**/ 0x3D3FF1D3, 0xC63F9A21, +/**/ 0x3F4613CE, 0x29E8F948, +/**/ 0xBF4611E6, 0xF9000000, +/**/ 0x3D342D26, 0x71EEE611, +/**/ 0x3F4603C8, 0xA67C9D6B, +/**/ 0xBF4601E4, 0x37800000, +/**/ 0x3D1C1C77, 0x11A09689, +/**/ 0x3F45F3C3, 0x27125244, +/**/ 0xBF45F1E1, 0x78000000, +/**/ 0xBD1DFD16, 0xF7DC643C, +/**/ 0x3F45E3BD, 0xABAA1651, +/**/ 0xBF45E1DE, 0xBA800000, +/**/ 0xBD376503, 0x91318A02, +/**/ 0x3F45D3B8, 0x3443E812, +/**/ 0xBF45D1DB, 0xFF200000, +/**/ 0x3D3756E4, 0xCE55DCDD, +/**/ 0x3F45C3B2, 0xC0DFC606, +/**/ 0xBF45C1D9, 0x45A00000, +/**/ 0x3D12D5CF, 0x8F6F8FA0, +/**/ 0x3F45B3AD, 0x517DAEAB, +/**/ 0xBF45B1D6, 0x8E200000, +/**/ 0xBD2E90AB, 0x9B85DC2C, +/**/ 0x3F45A3A7, 0xE61DA081, +/**/ 0xBF45A1D3, 0xD8C00000, +/**/ 0x3D3B5E88, 0x3BF5AC54, +/**/ 0x3F4593A2, 0x7EBF9A07, +/**/ 0xBF4591D1, 0x25400000, +/**/ 0x3D12AC3A, 0x0C86DDB1, +/**/ 0x3F45839D, 0x1B6399BB, +/**/ 0xBF4581CE, 0x73C00000, +/**/ 0xBD3361C2, 0x76830985, +/**/ 0x3F457397, 0xBC099E1C, +/**/ 0xBF4571CB, 0xC4600000, +/**/ 0x3D333915, 0xD062EBFF, +/**/ 0x3F456392, 0x60B1A5AA, +/**/ 0xBF4561C9, 0x16E00000, +/**/ 0xBD1E0DA0, 0x9CC4988F, +/**/ 0x3F45538D, 0x095BAEE4, +/**/ 0xBF4551C6, 0x6B800000, +/**/ 0x3D3C69C4, 0x235BC18A, +/**/ 0x3F454387, 0xB607B848, +/**/ 0xBF4541C3, 0xC2000000, +/**/ 0xBCEFCC99, 0xF7737723, +/**/ 0x3F453382, 0x66B5C056, +/**/ 0xBF4531C1, 0x1A800000, +/**/ 0xBD3FBAE2, 0x809CBCBB, +/**/ 0x3F45237D, 0x1B65C58C, +/**/ 0xBF4521BE, 0x75200000, +/**/ 0x3CCAA5C8, 0x194FEE63, +/**/ 0x3F451377, 0xD417C66A, +/**/ 0xBF4511BB, 0xD1C00000, +/**/ 0x3D3ED325, 0xE1CC7BBC, +/**/ 0x3F450372, 0x90CBC16E, +/**/ 0xBF4501B9, 0x30400000, +/**/ 0xBD0F0298, 0x68AB3742, +/**/ 0x3F44F36D, 0x5181B517, +/**/ 0xBF44F1B6, 0x90E00000, +/**/ 0x3D381BE1, 0x41E67AD9, +/**/ 0x3F44E368, 0x16399FE6, +/**/ 0xBF44E1B3, 0xF3600000, +/**/ 0xBD2A6E79, 0x668D3662, +/**/ 0x3F44D362, 0xDEF38058, +/**/ 0xBF44D1B1, 0x58000000, +/**/ 0x3D284EA7, 0x21F8B7C2, +/**/ 0x3F44C35D, 0xABAF54EC, +/**/ 0xBF44C1AE, 0xBE800000, +/**/ 0xBD3BC76D, 0x7417D9C5, +/**/ 0x3F44B358, 0x7C6D1C22, +/**/ 0xBF44B1AC, 0x27200000, +/**/ 0xBD1409FD, 0x16AAD1FC, +/**/ 0x3F44A353, 0x512CD479, +/**/ 0xBF44A1A9, 0x91C00000, +/**/ 0x3D30771E, 0x98BC14FD, +/**/ 0x3F44934E, 0x29EE7C70, +/**/ 0xBF4491A6, 0xFE400000, +/**/ 0xBD3B5993, 0x5CCB7232, +/**/ 0x3F448349, 0x06B21285, +/**/ 0xBF4481A4, 0x6CE00000, +/**/ 0xBD20E729, 0x5512F9C2, +/**/ 0x3F447343, 0xE7779538, +/**/ 0xBF4471A1, 0xDD800000, +/**/ 0x3D225436, 0x55B30899, +/**/ 0x3F44633E, 0xCC3F0308, +/**/ 0xBF44619F, 0x50200000, +/**/ 0x3D39807C, 0x9E54E31F, +/**/ 0x3F445339, 0xB5085A73, +/**/ 0xBF44519C, 0xC4A00000, +/**/ 0xBD376F6F, 0xD5804C0E, +/**/ 0x3F444334, 0xA1D399FA, +/**/ 0xBF44419A, 0x3B400000, +/**/ 0xBD234953, 0x6CDE6425, +/**/ 0x3F44332F, 0x92A0C01A, +/**/ 0xBF443197, 0xB3E00000, +/**/ 0x3D070E7B, 0xAAF6596F, +/**/ 0x3F44232A, 0x876FCB54, +/**/ 0xBF442195, 0x2E800000, +/**/ 0x3D2C49F8, 0x4EC011F1, +/**/ 0x3F441325, 0x8040BA25, +/**/ 0xBF441192, 0xAB200000, +/**/ 0x3D3825DC, 0xD8AAA7EB, +/**/ 0x3F440320, 0x7D138B0E, +/**/ 0xBF440190, 0x29A00000, +/**/ 0xBD3F1A8D, 0xFE0B73D6, +/**/ 0x3F43F31B, 0x7DE83C8C, +/**/ 0xBF43F18D, 0xAA400000, +/**/ 0xBD379B43, 0xE46CA26B, +/**/ 0x3F43E316, 0x82BECD20, +/**/ 0xBF43E18B, 0x2CE00000, +/**/ 0xBD315B44, 0x6283780D, +/**/ 0x3F43D311, 0x8B973B49, +/**/ 0xBF43D188, 0xB1800000, +/**/ 0xBD28B31E, 0x017589BE, +/**/ 0x3F43C30C, 0x98718584, +/**/ 0xBF43C186, 0x38200000, +/**/ 0xBD212A46, 0x8FBB296E, +/**/ 0x3F43B307, 0xA94DAA52, +/**/ 0xBF43B183, 0xC0C00000, +/**/ 0xBD183403, 0x045CBBD2, +/**/ 0x3F43A302, 0xBE2BA832, +/**/ 0xBF43A181, 0x4B600000, +/**/ 0xBD13009B, 0xD7CC5936, +/**/ 0x3F4392FD, 0xD70B7DA2, +/**/ 0xBF43917E, 0xD8000000, +/**/ 0xBD12B655, 0xC1742279, +/**/ 0x3F4382F8, 0xF3ED2921, +/**/ 0xBF43817C, 0x66A00000, +/**/ 0xBD17512E, 0xEA83FAE8, +/**/ 0x3F4372F4, 0x14D0A930, +/**/ 0xBF437179, 0xF7400000, +/**/ 0xBD206692, 0xBED65875, +/**/ 0x3F4362EF, 0x39B5FC4C, +/**/ 0xBF436177, 0x89E00000, +/**/ 0xBD27931B, 0xD38FFE9E, +/**/ 0x3F4352EA, 0x629D20F5, +/**/ 0xBF435175, 0x1E800000, +/**/ 0xBD309618, 0xE524208F, +/**/ 0x3F4342E5, 0x8F8615AA, +/**/ 0xBF434172, 0xB5200000, +/**/ 0xBD3697E9, 0xDD4C72C5, +/**/ 0x3F4332E0, 0xC070D8EB, +/**/ 0xBF433170, 0x4DC00000, +/**/ 0xBD3DCE00, 0x5E6E12C3, +/**/ 0x3F4322DB, 0xF55D6935, +/**/ 0xBF43216D, 0xE8800000, +/**/ 0x3D39C8A4, 0x0AE9A8CE, +/**/ 0x3F4312D7, 0x2E4BC509, +/**/ 0xBF43116B, 0x85200000, +/**/ 0x3D302D03, 0xD1CD2FA1, +/**/ 0x3F4302D2, 0x6B3BEAE5, +/**/ 0xBF430169, 0x23C00000, +/**/ 0x3D15807D, 0xA3BADFD1, +/**/ 0x3F42F2CD, 0xAC2DD949, +/**/ 0xBF42F166, 0xC4600000, +/**/ 0xBD1A7422, 0xF57F0504, +/**/ 0x3F42E2C8, 0xF1218EB3, +/**/ 0xBF42E164, 0x67000000, +/**/ 0xBD33C974, 0x2F2C781C, +/**/ 0x3F42D2C4, 0x3A1709A3, +/**/ 0xBF42D162, 0x0BC00000, +/**/ 0x3D3DDBDD, 0x851A1E61, +/**/ 0x3F42C2BF, 0x870E4898, +/**/ 0xBF42C15F, 0xB2600000, +/**/ 0x3D2CA7D9, 0xA14AA8FD, +/**/ 0x3F42B2BA, 0xD8074A10, +/**/ 0xBF42B15D, 0x5B000000, +/**/ 0xBD03022E, 0xDDCDDFF5, +/**/ 0x3F42A2B6, 0x2D020C8C, +/**/ 0xBF42A15B, 0x05A00000, +/**/ 0xBD343FBA, 0x0F9231A8, +/**/ 0x3F4292B1, 0x85FE8E8A, +/**/ 0xBF429158, 0xB2600000, +/**/ 0x3D38B690, 0xA52C9CCF, +/**/ 0x3F4282AC, 0xE2FCCE8A, +/**/ 0xBF428156, 0x61000000, +/**/ 0x3D120E6A, 0xC8CC82EB, +/**/ 0x3F4272A8, 0x43FCCB0A, +/**/ 0xBF427154, 0x11A00000, +/**/ 0xBD30D79B, 0x792E6C51, +/**/ 0x3F4262A3, 0xA8FE8289, +/**/ 0xBF426151, 0xC4600000, +/**/ 0x3D38A5EE, 0x91F7F7AA, +/**/ 0x3F42529F, 0x1201F387, +/**/ 0xBF42514F, 0x79000000, +/**/ 0x3CEFA728, 0x46C2E8BA, +/**/ 0x3F42429A, 0x7F071C84, +/**/ 0xBF42414D, 0x2FA00000, +/**/ 0xBD37D0BA, 0xFA447A17, +/**/ 0x3F423295, 0xF00DFBFD, +/**/ 0xBF42314A, 0xE8600000, +/**/ 0x3D2C7A24, 0x94AF3FED, +/**/ 0x3F422291, 0x65169072, +/**/ 0xBF422148, 0xA3000000, +/**/ 0xBD29B0BD, 0x050CEA04, +/**/ 0x3F42128C, 0xDE20D863, +/**/ 0xBF421146, 0x5FC00000, +/**/ 0x3D36EFF3, 0x0C3035EB, +/**/ 0x3F420288, 0x5B2CD24E, +/**/ 0xBF420144, 0x1E600000, +/**/ 0xBD19A3E2, 0x73569B27, +/**/ 0x3F41F283, 0xDC3A7CB2, +/**/ 0xBF41F141, 0xDF200000, +/**/ 0x3D3B1DDE, 0xEEB67715, +/**/ 0x3F41E27F, 0x6149D610, +/**/ 0xBF41E13F, 0xA1C00000, +/**/ 0xBD11EA17, 0x94F49154, +/**/ 0x3F41D27A, 0xEA5ADCE5, +/**/ 0xBF41D13D, 0x66800000, +/**/ 0x3D3ACED9, 0x52DD9D37, +/**/ 0x3F41C276, 0x776D8FB1, +/**/ 0xBF41C13B, 0x2D200000, +/**/ 0xBD1C140B, 0xF72D8EEB, +/**/ 0x3F41B272, 0x0881ECF4, +/**/ 0xBF41B138, 0xF5E00000, +/**/ 0x3D360AE5, 0x939583E1, +/**/ 0x3F41A26D, 0x9D97F32C, +/**/ 0xBF41A136, 0xC0800000, +/**/ 0xBD2C00D9, 0x1D246C7C, +/**/ 0x3F419269, 0x36AFA0D9, +/**/ 0xBF419134, 0x8D400000, +/**/ 0x3D29B40E, 0x0B955CFB, +/**/ 0x3F418264, 0xD3C8F479, +/**/ 0xBF418132, 0x5BE00000, +/**/ 0xBD3964BF, 0x45A6C249, +/**/ 0x3F417260, 0x74E3EC8D, +/**/ 0xBF417130, 0x2CA00000, +/**/ 0xBCE777E0, 0xF3363612, +/**/ 0x3F41625C, 0x1A008792, +/**/ 0xBF41612D, 0xFF600000, +/**/ 0x3D36D608, 0x28DE8296, +/**/ 0x3F415257, 0xC31EC409, +/**/ 0xBF41512B, 0xD4000000, +/**/ 0xBD32AE69, 0x4BB1B788, +/**/ 0x3F414253, 0x703EA071, +/**/ 0xBF414129, 0xAAC00000, +/**/ 0x3D05BF68, 0x170ECD8C, +/**/ 0x3F41324F, 0x21601B48, +/**/ 0xBF413127, 0x83800000, +/**/ 0x3D370A0B, 0x7C653BFC, +/**/ 0x3F41224A, 0xD683330E, +/**/ 0xBF412125, 0x5E200000, +/**/ 0xBD35B70D, 0x77BBBEBF, +/**/ 0x3F411246, 0x8FA7E642, +/**/ 0xBF411123, 0x3AE00000, +/**/ 0xBD0C52EB, 0x93ABC1CD, +/**/ 0x3F410242, 0x4CCE3363, +/**/ 0xBF410121, 0x19A00000, +/**/ 0x3D2B2237, 0xE5C6F4C7, +/**/ 0x3F40F23E, 0x0DF618F1, +/**/ 0xBF40F11E, 0xFA600000, +/**/ 0x3D3D9C5F, 0x1E9A50AD, +/**/ 0x3F40E239, 0xD31F956A, +/**/ 0xBF40E11C, 0xDD000000, +/**/ 0xBD336793, 0x8965F0DA, +/**/ 0x3F40D235, 0x9C4AA74E, +/**/ 0xBF40D11A, 0xC1C00000, +/**/ 0xBD15E6EE, 0x7E49E231, +/**/ 0x3F40C231, 0x69774D1D, +/**/ 0xBF40C118, 0xA8800000, +/**/ 0x3D1D9B9D, 0x04FD621C, +/**/ 0x3F40B22D, 0x3AA58554, +/**/ 0xBF40B116, 0x91400000, +/**/ 0x3D333B55, 0x7DD9EED3, +/**/ 0x3F40A229, 0x0FD54E74, +/**/ 0xBF40A114, 0x7C000000, +/**/ 0x3D3E048F, 0x7AA78478, +/**/ 0x3F409224, 0xE906A6FC, +/**/ 0xBF409112, 0x68A00000, +/**/ 0xBD383C6A, 0x644DDE88, +/**/ 0x3F408220, 0xC6398D6B, +/**/ 0xBF408110, 0x57600000, +/**/ 0xBD2F0D2F, 0x76B8C83A, +/**/ 0x3F40721C, 0xA76E0040, +/**/ 0xBF40710E, 0x48200000, +/**/ 0xBD1F63E0, 0x9CE99FD3, +/**/ 0x3F406218, 0x8CA3FDFB, +/**/ 0xBF40610C, 0x3AE00000, +/**/ 0xBCF328B4, 0x4FE774F2, +/**/ 0x3F405214, 0x75DB851A, +/**/ 0xBF40510A, 0x2FA00000, +/**/ 0x3D11B6BD, 0x3782BCD4, +/**/ 0x3F404210, 0x6314941D, +/**/ 0xBF404108, 0x26600000, +/**/ 0x3D22116F, 0xE7183792, +/**/ 0x3F40320C, 0x544F2983, +/**/ 0xBF403106, 0x1F200000, +/**/ 0x3D293F1E, 0x1B995B3D, +/**/ 0x3F402208, 0x498B43CB, +/**/ 0xBF402104, 0x19E00000, +/**/ 0x3D2E6669, 0xFC162630, +/**/ 0x3F401204, 0x42C8E175, +/**/ 0xBF401102, 0x16A00000, +/**/ 0x3D30C4AA, 0x254FC9F8, +/**/ 0x3F400200, 0x40080100, +/**/ 0xBF400100, 0x15600000, +/**/ 0x3D3154EE, 0xE4431F92, +/**/ 0x3F3FE3F8, 0x829141D6, +/**/ 0xBF3FE1FC, 0x2C400000, +/**/ 0x3D30E503, 0x9B2D30FB, +/**/ 0x3F3FC3F0, 0x8D157F6B, +/**/ 0xBF3FC1F8, 0x31C00000, +/**/ 0x3D2EEBD1, 0x53EBD670, +/**/ 0x3F3FA3E8, 0x9F9CB7BC, +/**/ 0xBF3FA1F4, 0x3B400000, +/**/ 0x3D2A113C, 0xE04A16E0, +/**/ 0x3F3F83E0, 0xBA26E7CA, +/**/ 0xBF3F81F0, 0x48C00000, +/**/ 0x3D233C4A, 0x99C43E34, +/**/ 0x3F3F63D8, 0xDCB40C91, +/**/ 0xBF3F61EC, 0x5A400000, +/**/ 0x3D14DDF6, 0x7BD210C1, +/**/ 0x3F3F43D1, 0x07442311, +/**/ 0xBF3F41E8, 0x6FC00000, +/**/ 0xBCC52C1D, 0x9E4B51C8, +/**/ 0x3F3F23C9, 0x39D72849, +/**/ 0xBF3F21E4, 0x89400000, +/**/ 0xBD1A196F, 0x8EA8C754, +/**/ 0x3F3F03C1, 0x746D1936, +/**/ 0xBF3F01E0, 0xA6C00000, +/**/ 0xBD2BB719, 0xF95AF98D, +/**/ 0x3F3EE3B9, 0xB705F2D8, +/**/ 0xBF3EE1DC, 0xC8400000, +/**/ 0xBD3628EB, 0x28FFD598, +/**/ 0x3F3EC3B2, 0x01A1B22C, +/**/ 0xBF3EC1D8, 0xEDC00000, +/**/ 0xBD3F6D76, 0x0BBAC8F8, +/**/ 0x3F3EA3AA, 0x54405432, +/**/ 0xBF3EA1D5, 0x17800000, +/**/ 0x3D3657D2, 0xB7A7EE0D, +/**/ 0x3F3E83A2, 0xAEE1D5E8, +/**/ 0xBF3E81D1, 0x45000000, +/**/ 0x3D264FDE, 0xFA9CCC78, +/**/ 0x3F3E639B, 0x1186344C, +/**/ 0xBF3E61CD, 0x76800000, +/**/ 0xBCEF83EB, 0xE02EF455, +/**/ 0x3F3E4393, 0x7C2D6C5E, +/**/ 0xBF3E41C9, 0xAC000000, +/**/ 0xBD2C26B3, 0x03C3E129, +/**/ 0x3F3E238B, 0xEED77B1B, +/**/ 0xBF3E21C5, 0xE5800000, +/**/ 0xBD3C1CBE, 0x904D773D, +/**/ 0x3F3E0384, 0x69845D83, +/**/ 0xBF3E01C2, 0x23400000, +/**/ 0x3D34E8B1, 0xD0615454, +/**/ 0x3F3DE37C, 0xEC341093, +/**/ 0xBF3DE1BE, 0x64C00000, +/**/ 0x3D13F7DF, 0xE9BE933E, +/**/ 0x3F3DC375, 0x76E6914B, +/**/ 0xBF3DC1BA, 0xAA400000, +/**/ 0xBD27B7D7, 0x707B004A, +/**/ 0x3F3DA36E, 0x099BDCA9, +/**/ 0xBF3DA1B6, 0xF3C00000, +/**/ 0xBD3DA3F8, 0xEE2141C3, +/**/ 0x3F3D8366, 0xA453EFAC, +/**/ 0xBF3D81B3, 0x41800000, +/**/ 0x3D2F4DA1, 0x63D21825, +/**/ 0x3F3D635F, 0x470EC752, +/**/ 0xBF3D61AF, 0x93000000, +/**/ 0xBD0FD473, 0xFAD0B844, +/**/ 0x3F3D4357, 0xF1CC609A, +/**/ 0xBF3D41AB, 0xE8800000, +/**/ 0xBD388716, 0x298657C2, +/**/ 0x3F3D2350, 0xA48CB882, +/**/ 0xBF3D21A8, 0x42400000, +/**/ 0x3D32023A, 0x0B68711A, +/**/ 0x3F3D0349, 0x5F4FCC0A, +/**/ 0xBF3D01A4, 0x9FC00000, +/**/ 0xBD117676, 0x23A704B0, +/**/ 0x3F3CE342, 0x22159830, +/**/ 0xBF3CE1A1, 0x01400000, +/**/ 0xBD3BA59C, 0x8F391F09, +/**/ 0x3F3CC33A, 0xECDE19F1, +/**/ 0xBF3CC19D, 0x67000000, +/**/ 0x3D28567A, 0x9EBBF706, +/**/ 0x3F3CA333, 0xBFA94E4E, +/**/ 0xBF3CA199, 0xD0800000, +/**/ 0xBD29D41F, 0x2D41F1CC, +/**/ 0x3F3C832C, 0x9A773245, +/**/ 0xBF3C8196, 0x3E400000, +/**/ 0x3D391B7D, 0x14ED5134, +/**/ 0x3F3C6325, 0x7D47C2D4, +/**/ 0xBF3C6192, 0xAFC00000, +/**/ 0xBCFC31C5, 0x83403B5B, +/**/ 0x3F3C431E, 0x681AFCFA, +/**/ 0xBF3C418F, 0x25400000, +/**/ 0xBD3D84DB, 0x88A1FFF3, +/**/ 0x3F3C2317, 0x5AF0DDB6, +/**/ 0xBF3C218B, 0x9F000000, +/**/ 0x3D175CFF, 0x6298A63B, +/**/ 0x3F3C0310, 0x55C96207, +/**/ 0xBF3C0188, 0x1C800000, +/**/ 0xBD37ADC9, 0xDFB8E489, +/**/ 0x3F3BE309, 0x58A486EA, +/**/ 0xBF3BE184, 0x9E400000, +/**/ 0x3D23DA0F, 0x45069C64, +/**/ 0x3F3BC302, 0x6382495F, +/**/ 0xBF3BC181, 0x23C00000, +/**/ 0xBD35574B, 0x4CC2EFE0, +/**/ 0x3F3BA2FB, 0x7662A665, +/**/ 0xBF3BA17D, 0xAD800000, +/**/ 0x3D250C7B, 0x4BED0B89, +/**/ 0x3F3B82F4, 0x91459AFA, +/**/ 0xBF3B817A, 0x3B000000, +/**/ 0xBD36795D, 0x322E5605, +/**/ 0x3F3B62ED, 0xB42B241D, +/**/ 0xBF3B6176, 0xCCC00000, +/**/ 0x3D1EAB91, 0xF6413886, +/**/ 0x3F3B42E6, 0xDF133ECC, +/**/ 0xBF3B4173, 0x62400000, +/**/ 0xBD3B0BFC, 0xF86BE5B5, +/**/ 0x3F3B22E0, 0x11FDE807, +/**/ 0xBF3B216F, 0xFC000000, +/**/ 0x3CF62FEB, 0xDDE8D701, +/**/ 0x3F3B02D9, 0x4CEB1CCC, +/**/ 0xBF3B016C, 0x99C00000, +/**/ 0x3D3CF8D7, 0xF210FD9E, +/**/ 0x3F3AE2D2, 0x8FDADA1A, +/**/ 0xBF3AE169, 0x3B400000, +/**/ 0xBD2092E2, 0x1526CFB0, +/**/ 0x3F3AC2CB, 0xDACD1CEF, +/**/ 0xBF3AC165, 0xE1000000, +/**/ 0x3D319D24, 0x18D261D5, +/**/ 0x3F3AA2C5, 0x2DC1E24A, +/**/ 0xBF3AA162, 0x8A800000, +/**/ 0xBD355268, 0x533CC8EC, +/**/ 0x3F3A82BE, 0x88B9272B, +/**/ 0xBF3A815F, 0x38400000, +/**/ 0x3D074750, 0x0AFE6139, +/**/ 0x3F3A62B7, 0xEBB2E88F, +/**/ 0xBF3A615B, 0xEA000000, +/**/ 0x3D3A501B, 0x6668AD57, +/**/ 0x3F3A42B1, 0x56AF2375, +/**/ 0xBF3A4158, 0x9F800000, +/**/ 0xBD2E37A7, 0xA98381BD, +/**/ 0x3F3A22AA, 0xC9ADD4DD, +/**/ 0xBF3A2155, 0x59400000, +/**/ 0x3D1A9872, 0x7B82F9AC, +/**/ 0x3F3A02A4, 0x44AEF9C5, +/**/ 0xBF3A0152, 0x17000000, +/**/ 0x3D3B96ED, 0x0FF040AD, +/**/ 0x3F39E29D, 0xC7B28F2C, +/**/ 0xBF39E14E, 0xD8800000, +/**/ 0xBD304862, 0x33534BD7, +/**/ 0x3F39C297, 0x52B89211, +/**/ 0xBF39C14B, 0x9E400000, +/**/ 0x3D084979, 0x17AF009B, +/**/ 0x3F39A290, 0xE5C0FF72, +/**/ 0xBF39A148, 0x68000000, +/**/ 0x3D358CA1, 0x604B64C9, +/**/ 0x3F39828A, 0x80CBD44E, +/**/ 0xBF398145, 0x35800000, +/**/ 0xBD38BD0B, 0x2E334404, +/**/ 0x3F396284, 0x23D90DA4, +/**/ 0xBF396142, 0x07400000, +/**/ 0xBD1F4B58, 0xEF1B1C68, +/**/ 0x3F39427D, 0xCEE8A873, +/**/ 0xBF39413E, 0xDD000000, +/**/ 0x3D209881, 0x07E010EC, +/**/ 0x3F392277, 0x81FAA1B9, +/**/ 0xBF39213B, 0xB6C00000, +/**/ 0x3D37A139, 0x5CF03181, +/**/ 0x3F390271, 0x3D0EF676, +/**/ 0xBF390138, 0x94400000, +/**/ 0xBD39D2EB, 0x65276B0B, +/**/ 0x3F38E26B, 0x0025A3A8, +/**/ 0xBF38E135, 0x76000000, +/**/ 0xBD281E5A, 0xEE3023F6, +/**/ 0x3F38C264, 0xCB3EA64F, +/**/ 0xBF38C132, 0x5BC00000, +/**/ 0x3CEDAE6E, 0x3F9A4B53, +/**/ 0x3F38A25E, 0x9E59FB68, +/**/ 0xBF38A12F, 0x45800000, +/**/ 0x3D2A47EF, 0x412B648E, +/**/ 0x3F388258, 0x79779FF3, +/**/ 0xBF38812C, 0x33400000, +/**/ 0x3D38955F, 0x5ED0D8F2, +/**/ 0x3F386252, 0x5C9790EE, +/**/ 0xBF386129, 0x24C00000, +/**/ 0xBD3CBD55, 0x09939374, +/**/ 0x3F38424C, 0x47B9CB5A, +/**/ 0xBF384126, 0x1A800000, +/**/ 0xBD32D325, 0x4F399186, +/**/ 0x3F382246, 0x3ADE4C33, +/**/ 0xBF382123, 0x14400000, +/**/ 0xBD235622, 0x524688EB, +/**/ 0x3F380240, 0x3605107A, +/**/ 0xBF380120, 0x12000000, +/**/ 0xBCF44184, 0xEB2F3DDC, +/**/ 0x3F37E23A, 0x392E152C, +/**/ 0xBF37E11D, 0x13C00000, +/**/ 0x3D198B16, 0x2153D1B8, +/**/ 0x3F37C234, 0x4459574A, +/**/ 0xBF37C11A, 0x19800000, +/**/ 0x3D2A9511, 0x47A3C923, +/**/ 0x3F37A22E, 0x5786D3D1, +/**/ 0xBF37A117, 0x23400000, +/**/ 0x3D337431, 0x4B4128D9, +/**/ 0x3F378228, 0x72B687C1, +/**/ 0xBF378114, 0x31000000, +/**/ 0x3D38E0BF, 0xC5BFE9E8, +/**/ 0x3F376222, 0x95E87019, +/**/ 0xBF376111, 0x42C00000, +/**/ 0x3D3D9134, 0x5A0B2CE9, +/**/ 0x3F37421C, 0xC11C89D8, +/**/ 0xBF37410E, 0x58400000, +/**/ 0xBD3E7970, 0xB1802C40, +/**/ 0x3F372216, 0xF452D1FB, +/**/ 0xBF37210B, 0x72000000, +/**/ 0xBD3B3E2F, 0x16E562C9, +/**/ 0x3F370211, 0x2F8B4583, +/**/ 0xBF370108, 0x8FC00000, +/**/ 0xBD38BC06, 0x9087DACD, +/**/ 0x3F36E20B, 0x72C5E16F, +/**/ 0xBF36E105, 0xB1800000, +/**/ 0xBD36F1F6, 0xD92B1B21, +/**/ 0x3F36C205, 0xBE02A2BC, +/**/ 0xBF36C102, 0xD7400000, +/**/ 0xBD35DEFF, 0xABF2CD23, +/**/ 0x3F36A200, 0x1141866B, +/**/ 0xBF36A100, 0x01000000, +/**/ 0xBD358220, 0xC462BC85, +/**/ 0x3F3681FA, 0x6C828979, +/**/ 0xBF3680FD, 0x2EC00000, +/**/ 0xBD35DA59, 0xDE5ED723, +/**/ 0x3F3661F4, 0xCFC5A8E7, +/**/ 0xBF3660FA, 0x60800000, +/**/ 0xBD36E6AA, 0xB62B2CD1, +/**/ 0x3F3641EF, 0x3B0AE1B2, +/**/ 0xBF3640F7, 0x96400000, +/**/ 0xBD38A613, 0x086BEF29, +/**/ 0x3F3621E9, 0xAE5230DA, +/**/ 0xBF3620F4, 0xD0000000, +/**/ 0xBD3B1792, 0x9225715D, +/**/ 0x3F3601E4, 0x299B935F, +/**/ 0xBF3600F2, 0x0DC00000, +/**/ 0xBD3E3A29, 0x10BC2805, +/**/ 0x3F35E1DE, 0xACE7063E, +/**/ 0xBF35E0EF, 0x4FC00000, +/**/ 0x3D3DF329, 0xBE0B570D, +/**/ 0x3F35C1D9, 0x38348676, +/**/ 0xBF35C0EC, 0x95800000, +/**/ 0x3D397166, 0x1C0C5502, +/**/ 0x3F35A1D3, 0xCB841108, +/**/ 0xBF35A0E9, 0xDF400000, +/**/ 0x3D34418C, 0x4AC1FA2D, +/**/ 0x3F3581CE, 0x66D5A2F1, +/**/ 0xBF3580E7, 0x2D000000, +/**/ 0x3D2CC939, 0x168E9C6E, +/**/ 0x3F3561C9, 0x0A293931, +/**/ 0xBF3560E4, 0x7EC00000, +/**/ 0x3D1F6E5C, 0x795CE154, +/**/ 0x3F3541C3, 0xB57ED0C7, +/**/ 0xBF3540E1, 0xD4800000, +/**/ 0x3CE4EF88, 0x898FEE67, +/**/ 0x3F3521BE, 0x68D666B1, +/**/ 0xBF3520DF, 0x2E400000, +/**/ 0xBD1CDACF, 0x0B78D65E, +/**/ 0x3F3501B9, 0x242FF7EF, +/**/ 0xBF3500DC, 0x8C000000, +/**/ 0xBD2F7BF1, 0x6F1CBFB8, +/**/ 0x3F34E1B3, 0xE78B8180, +/**/ 0xBF34E0D9, 0xEDC00000, +/**/ 0xBD38ED52, 0x5A899820, +/**/ 0x3F34C1AE, 0xB2E90063, +/**/ 0xBF34C0D7, 0x53C00000, +/**/ 0x3D3D3C3F, 0x930A694E, +/**/ 0x3F34A1A9, 0x86487196, +/**/ 0xBF34A0D4, 0xBD800000, +/**/ 0x3D32BFBD, 0x4FA7CCCB, +/**/ 0x3F3481A4, 0x61A9D219, +/**/ 0xBF3480D2, 0x2B400000, +/**/ 0x3D1E789C, 0x65A26E32, +/**/ 0x3F34619F, 0x450D1EEB, +/**/ 0xBF3460CF, 0x9D000000, +/**/ 0xBD109E0B, 0x47E500B5, +/**/ 0x3F34419A, 0x3072550B, +/**/ 0xBF3440CD, 0x12C00000, +/**/ 0xBD309040, 0x3523FAE9, +/**/ 0x3F342195, 0x23D97178, +/**/ 0xBF3420CA, 0x8C800000, +/**/ 0xBD3D9B10, 0xD31DE7C2, +/**/ 0x3F340190, 0x1F427131, +/**/ 0xBF3400C8, 0x0A800000, +/**/ 0x3D34B90B, 0x90B287C4, +/**/ 0x3F33E18B, 0x22AD5135, +/**/ 0xBF33E0C5, 0x8C400000, +/**/ 0x3D19B454, 0xCA1B0FC2, +/**/ 0x3F33C186, 0x2E1A0E83, +/**/ 0xBF33C0C3, 0x12000000, +/**/ 0xBD20FBE7, 0x638FC1F4, +/**/ 0x3F33A181, 0x4188A61A, +/**/ 0xBF33A0C0, 0x9BC00000, +/**/ 0xBD38070E, 0xE0C03290, +/**/ 0x3F33817C, 0x5CF914F9, +/**/ 0xBF3380BE, 0x29C00000, +/**/ 0x3D37D2C3, 0xE0B6E5F5, +/**/ 0x3F336177, 0x806B5820, +/**/ 0xBF3360BB, 0xBB800000, +/**/ 0x3D1C4213, 0x35598794, +/**/ 0x3F334172, 0xABDF6C8D, +/**/ 0xBF3340B9, 0x51400000, +/**/ 0xBD249997, 0xC111C569, +/**/ 0x3F33216D, 0xDF554F40, +/**/ 0xBF3320B6, 0xEB000000, +/**/ 0xBD3C442D, 0xEEEE28E2, +/**/ 0x3F330169, 0x1ACCFD37, +/**/ 0xBF3300B4, 0x89000000, +/**/ 0x3D312B5E, 0xDBBF316D, +/**/ 0x3F32E164, 0x5E467372, +/**/ 0xBF32E0B2, 0x2AC00000, +/**/ 0xBCFFD254, 0x7484E6E1, +/**/ 0x3F32C15F, 0xA9C1AEF0, +/**/ 0xBF32C0AF, 0xD0800000, +/**/ 0xBD35BCBA, 0x1F2C3F9D, +/**/ 0x3F32A15A, 0xFD3EACAF, +/**/ 0xBF32A0AD, 0x7A800000, +/**/ 0x3D35EDA0, 0x8C8BAA61, +/**/ 0x3F328156, 0x58BD69B0, +/**/ 0xBF3280AB, 0x28400000, +/**/ 0x3CF02EAF, 0x3F79FE5E, +/**/ 0x3F326151, 0xBC3DE2F1, +/**/ 0xBF3260A8, 0xDA000000, +/**/ 0xBD347BDA, 0xB1304AA8, +/**/ 0x3F32414D, 0x27C01572, +/**/ 0xBF3240A6, 0x90000000, +/**/ 0x3D35724F, 0xD46BE359, +/**/ 0x3F322148, 0x9B43FE30, +/**/ 0xBF3220A4, 0x49C00000, +/**/ 0xBCF31954, 0x43BF90C9, +/**/ 0x3F320144, 0x16C99A2D, +/**/ 0xBF3200A2, 0x07800000, +/**/ 0xBD386689, 0xC4901E30, +/**/ 0x3F31E13F, 0x9A50E666, +/**/ 0xBF31E09F, 0xC9800000, +/**/ 0x3D2FA8E5, 0x134E34BF, +/**/ 0x3F31C13B, 0x25D9DFDB, +/**/ 0xBF31C09D, 0x8F400000, +/**/ 0xBD20FF40, 0x477D87DF, +/**/ 0x3F31A136, 0xB964838C, +/**/ 0xBF31A09B, 0x59400000, +/**/ 0x3D3E9E3E, 0x68B5B77B, +/**/ 0x3F318132, 0x54F0CE76, +/**/ 0xBF318099, 0x27000000, +/**/ 0x3D14BC39, 0x906F8A53, +/**/ 0x3F31612D, 0xF87EBD9A, +/**/ 0xBF316096, 0xF8C00000, +/**/ 0xBD34CC2F, 0xFCD50724, +/**/ 0x3F314129, 0xA40E4DF7, +/**/ 0xBF314094, 0xCEC00000, +/**/ 0x3D30AD83, 0x7A3A1B8D, +/**/ 0x3F312125, 0x579F7C8B, +/**/ 0xBF312092, 0xA8800000, +/**/ 0xBD24C5AE, 0x057F5C66, +/**/ 0x3F310121, 0x13324657, +/**/ 0xBF310090, 0x86800000, +/**/ 0x3D3A03C0, 0xBFD488E0, +/**/ 0x3F30E11C, 0xD6C6A858, +/**/ 0xBF30E08E, 0x68400000, +/**/ 0xBD00EDA8, 0x56935D63, +/**/ 0x3F30C118, 0xA25C9F8F, +/**/ 0xBF30C08C, 0x4E000000, +/**/ 0xBD3EC638, 0x2FDDD1CE, +/**/ 0x3F30A114, 0x75F428FB, +/**/ 0xBF30A08A, 0x38000000, +/**/ 0x3D102CDE, 0x0CA3DCBE, +/**/ 0x3F308110, 0x518D419B, +/**/ 0xBF308088, 0x25C00000, +/**/ 0xBD39A865, 0xBFA78921, +/**/ 0x3F30610C, 0x3527E66D, +/**/ 0xBF306086, 0x17C00000, +/**/ 0x3D203FE0, 0x72CE37BD, +/**/ 0x3F304108, 0x20C41472, +/**/ 0xBF304084, 0x0D800000, +/**/ 0xBD369AC6, 0x6054C3FA, +/**/ 0x3F302104, 0x1461C8A9, +/**/ 0xBF302082, 0x07800000, +/**/ 0x3D2450ED, 0x4836293A, +/**/ 0x3F300100, 0x10010010, +/**/ 0xBF300080, 0x05400000, +/**/ 0xBD359558, 0x88B3357C, +/**/ 0x3F2FC1F8, 0x27436F4F, +/**/ 0xBF2FC0FC, 0x0E800000, +/**/ 0x3D245998, 0x92ECD4D1, +/**/ 0x3F2F81F0, 0x3E87D8DC, +/**/ 0xBF2F80F8, 0x1A000000, +/**/ 0xBD36901A, 0xB592170A, +/**/ 0x3F2F41E8, 0x65CF36C6, +/**/ 0xBF2F40F4, 0x2E000000, +/**/ 0x3D2069E5, 0x53524603, +/**/ 0x3F2F01E0, 0x9D19830B, +/**/ 0xBF2F00F0, 0x49800000, +/**/ 0xBD39830B, 0x69C22240, +/**/ 0x3F2EC1D8, 0xE466B7AB, +/**/ 0xBF2EC0EC, 0x6D800000, +/**/ 0x3D1123AC, 0xFB871BBA, +/**/ 0x3F2E81D1, 0x3BB6CEA4, +/**/ 0xBF2E80E8, 0x99000000, +/**/ 0xBD3E6629, 0x2E158AF6, +/**/ 0x3F2E41C9, 0xA309C1F4, +/**/ 0xBF2E40E4, 0xCD000000, +/**/ 0xBCF8F488, 0x2B29884E, +/**/ 0x3F2E01C2, 0x1A5F8B99, +/**/ 0xBF2E00E1, 0x09000000, +/**/ 0x3D3ACE8D, 0x6EA006C6, +/**/ 0x3F2DC1BA, 0xA1B82593, +/**/ 0xBF2DC0DD, 0x4C800000, +/**/ 0xBD22974E, 0x59D0B687, +/**/ 0x3F2D81B3, 0x391389E0, +/**/ 0xBF2D80D9, 0x98800000, +/**/ 0x3D322319, 0xD7897CAD, +/**/ 0x3F2D41AB, 0xE071B27F, +/**/ 0xBF2D40D5, 0xEC000000, +/**/ 0xBD32E42F, 0x57954C6E, +/**/ 0x3F2D01A4, 0x97D2996E, +/**/ 0xBF2D00D2, 0x48000000, +/**/ 0x3D1E7DF5, 0xC741610E, +/**/ 0x3F2CC19D, 0x5F3638AB, +/**/ 0xBF2CC0CE, 0xAB800000, +/**/ 0xBD3E50DF, 0xA0909C5A, +/**/ 0x3F2C8196, 0x369C8A37, +/**/ 0xBF2C80CB, 0x17800000, +/**/ 0xBD12D119, 0x8D8D1C8F, +/**/ 0x3F2C418F, 0x1E05880E, +/**/ 0xBF2C40C7, 0x8B800000, +/**/ 0x3D347649, 0x544D2574, +/**/ 0x3F2C0188, 0x15712C30, +/**/ 0xBF2C00C4, 0x07000000, +/**/ 0xBD32D030, 0x4EEA9E68, +/**/ 0x3F2BC181, 0x1CDF709C, +/**/ 0xBF2BC0C0, 0x8B000000, +/**/ 0x3D15E533, 0x74A84109, +/**/ 0x3F2B817A, 0x34504F50, +/**/ 0xBF2B80BD, 0x17000000, +/**/ 0x3D3D53C1, 0x025FBF68, +/**/ 0x3F2B4173, 0x5BC3C24B, +/**/ 0xBF2B40B9, 0xAA800000, +/**/ 0xBD267FA7, 0x6BAA2FA8, +/**/ 0x3F2B016C, 0x9339C38C, +/**/ 0xBF2B00B6, 0x46800000, +/**/ 0x3D277F1D, 0xBB3FDE1E, +/**/ 0x3F2AC165, 0xDAB24D11, +/**/ 0xBF2AC0B2, 0xEA000000, +/**/ 0xBD3DAD17, 0x1A8CDBE2, +/**/ 0x3F2A815F, 0x322D58D9, +/**/ 0xBF2A80AF, 0x96000000, +/**/ 0xBD1E1315, 0xD81CF36E, +/**/ 0x3F2A4158, 0x99AAE0E3, +/**/ 0xBF2A40AC, 0x4A000000, +/**/ 0x3D2C7307, 0xE649E7B4, +/**/ 0x3F2A0152, 0x112ADF2D, +/**/ 0xBF2A00A9, 0x05800000, +/**/ 0xBD3C713A, 0xB77435EC, +/**/ 0x3F29C14B, 0x98AD4DB7, +/**/ 0xBF29C0A5, 0xC9800000, +/**/ 0xBD1E1005, 0x3A7AE827, +/**/ 0x3F298145, 0x3032267F, +/**/ 0xBF2980A2, 0x95800000, +/**/ 0x3D2A0460, 0xA8F2A842, +/**/ 0x3F29413E, 0xD7B96385, +/**/ 0xBF29409F, 0x69000000, +/**/ 0xBD3EDDA5, 0xA7B8321E, +/**/ 0x3F290138, 0x8F42FEC5, +/**/ 0xBF29009C, 0x45000000, +/**/ 0xBD264506, 0x3A3F0D33, +/**/ 0x3F28C132, 0x56CEF241, +/**/ 0xBF28C099, 0x29000000, +/**/ 0x3D206930, 0x33EE13CD, +/**/ 0x3F28812C, 0x2E5D37F6, +/**/ 0xBF288096, 0x15000000, +/**/ 0x3D3B28AC, 0x22DF1FDA, +/**/ 0x3F284126, 0x15EDC9E3, +/**/ 0xBF284093, 0x08800000, +/**/ 0xBD324546, 0xDD73B6DB, +/**/ 0x3F280120, 0x0D80A208, +/**/ 0xBF280090, 0x04800000, +/**/ 0xBCB440C2, 0x6DFEB485, +/**/ 0x3F27C11A, 0x1515BA62, +/**/ 0xBF27C08D, 0x08800000, +/**/ 0x3D31BCBE, 0x9823B19D, +/**/ 0x3F278114, 0x2CAD0CF1, +/**/ 0xBF27808A, 0x14000000, +/**/ 0xBD3CD148, 0xA9EB4E97, +/**/ 0x3F27410E, 0x544693B4, +/**/ 0xBF274087, 0x28000000, +/**/ 0xBD277AAC, 0xCA4F73AA, +/**/ 0x3F270108, 0x8BE248AA, +/**/ 0xBF270084, 0x44000000, +/**/ 0x3D13E656, 0x26068EF7, +/**/ 0x3F26C102, 0xD38025D2, +/**/ 0xBF26C081, 0x68000000, +/**/ 0x3D35547B, 0x44C3EC8A, +/**/ 0x3F2680FD, 0x2B20252A, +/**/ 0xBF26807E, 0x93800000, +/**/ 0xBD3AABA5, 0x110DCE4B, +/**/ 0x3F2640F7, 0x92C240B1, +/**/ 0xBF26407B, 0xC7800000, +/**/ 0xBD260B96, 0xAC011956, +/**/ 0x3F2600F2, 0x0A667267, +/**/ 0xBF260079, 0x03800000, +/**/ 0x3D111C22, 0x5DFA826E, +/**/ 0x3F25C0EC, 0x920CB44A, +/**/ 0xBF25C076, 0x47800000, +/**/ 0x3D333BD6, 0xD8A2980A, +/**/ 0x3F2580E7, 0x29B5005A, +/**/ 0xBF258073, 0x93000000, +/**/ 0xBD3E2660, 0x71C1D861, +/**/ 0x3F2540E1, 0xD15F5095, +/**/ 0xBF254070, 0xE7000000, +/**/ 0xBD2FBD3A, 0x4E77E5EE, +/**/ 0x3F2500DC, 0x890B9EFA, +/**/ 0xBF25006E, 0x43000000, +/**/ 0xBCFEBDF2, 0x7B90A2D9, +/**/ 0x3F24C0D7, 0x50B9E589, +/**/ 0xBF24C06B, 0xA7000000, +/**/ 0x3D2765B3, 0x58F2FF2C, +/**/ 0x3F2480D2, 0x286A1E40, +/**/ 0xBF248069, 0x13000000, +/**/ 0x3D38FE8D, 0x74AE382C, +/**/ 0x3F2440CD, 0x101C431E, +/**/ 0xBF244066, 0x86800000, +/**/ 0xBD3A07C3, 0xB0286224, +/**/ 0x3F2400C8, 0x07D04E23, +/**/ 0xBF240064, 0x02800000, +/**/ 0xBD2ABE33, 0x46EFC0EC, +/**/ 0x3F23C0C3, 0x0F86394D, +/**/ 0xBF23C061, 0x86800000, +/**/ 0xBCF06744, 0x70DE3151, +/**/ 0x3F2380BE, 0x273DFE9C, +/**/ 0xBF23805F, 0x12800000, +/**/ 0x3D260659, 0x05CFCD61, +/**/ 0x3F2340B9, 0x4EF7980F, +/**/ 0xBF23405C, 0xA6800000, +/**/ 0x3D36BEC8, 0xD7DBBEBC, +/**/ 0x3F2300B4, 0x86B2FFA4, +/**/ 0xBF23005A, 0x42000000, +/**/ 0xBD3DD29F, 0x2B2027B4, +/**/ 0x3F22C0AF, 0xCE702F5C, +/**/ 0xBF22C057, 0xE6000000, +/**/ 0xBD32B00B, 0x6959A7D0, +/**/ 0x3F2280AB, 0x262F2134, +/**/ 0xBF228055, 0x92000000, +/**/ 0xBD1F61EF, 0x19FAAC2D, +/**/ 0x3F2240A6, 0x8DEFCF2C, +/**/ 0xBF224053, 0x46000000, +/**/ 0x3D05A87E, 0xCB16B8A8, +/**/ 0x3F2200A2, 0x05B23344, +/**/ 0xBF220051, 0x02000000, +/**/ 0x3D29F32F, 0x23B9B257, +/**/ 0x3F21C09D, 0x8D76477A, +/**/ 0xBF21C04E, 0xC6000000, +/**/ 0x3D36F61B, 0x7E214821, +/**/ 0x3F218099, 0x253C05CD, +/**/ 0xBF21804C, 0x91800000, +/**/ 0xBD3F5464, 0x46FDFCA2, +/**/ 0x3F214094, 0xCD03683D, +/**/ 0xBF21404A, 0x65800000, +/**/ 0xBD35E4E7, 0xA30F2308, +/**/ 0x3F210090, 0x84CC68C9, +/**/ 0xBF210048, 0x41800000, +/**/ 0xBD2974DC, 0xF800CC34, +/**/ 0x3F20C08C, 0x4C970171, +/**/ 0xBF20C046, 0x25800000, +/**/ 0xBD0E9FC5, 0xC1006E9D, +/**/ 0x3F208088, 0x24632C32, +/**/ 0xBF208044, 0x11800000, +/**/ 0x3D133DE7, 0x078E4438, +/**/ 0x3F204084, 0x0C30E30D, +/**/ 0xBF204042, 0x05800000, +/**/ 0x3D2A61D2, 0x15F82A7B, +/**/ 0x3F200080, 0x04002001, +/**/ 0xBF200040, 0x01800000, +/**/ 0x3D355155, 0x3BBB110C, +/**/ 0x3F1F80F8, 0x17A1BA1A, +/**/ 0xBF1F807C, 0x0B000000, +/**/ 0x3D3D31BE, 0x6C520A9B, +/**/ 0x3F1F00F0, 0x47462860, +/**/ 0xBF1F0078, 0x22000000, +/**/ 0xBD3B2CDB, 0x4B6D83F6, +/**/ 0x3F1E80E8, 0x96ED7ED3, +/**/ 0xBF1E8074, 0x4A000000, +/**/ 0xBD33C977, 0xD4122C5A, +/**/ 0x3F1E00E1, 0x0697B172, +/**/ 0xBF1E0070, 0x82000000, +/**/ 0xBD29462E, 0x2D1517C4, +/**/ 0x3F1D80D9, 0x9644B43B, +/**/ 0xBF1D806C, 0xCA000000, +/**/ 0xBD16E2E3, 0xF0952D45, +/**/ 0x3F1D00D2, 0x45F47B2C, +/**/ 0xBF1D0069, 0x22000000, +/**/ 0x3CEED452, 0x2DDC2A8D, +/**/ 0x3F1C80CB, 0x15A6FA46, +/**/ 0xBF1C8065, 0x8A000000, +/**/ 0x3D1DAFEE, 0xA08CEBE8, +/**/ 0x3F1C00C4, 0x055C2585, +/**/ 0xBF1C0062, 0x02000000, +/**/ 0x3D2B50A4, 0xBB11EF55, +/**/ 0x3F1B80BD, 0x1513F0E9, +/**/ 0xBF1B805E, 0x8A000000, +/**/ 0x3D33ACA6, 0xC6D142BF, +/**/ 0x3F1B00B6, 0x44CE5071, +/**/ 0xBF1B005B, 0x22000000, +/**/ 0x3D3979F8, 0xF8CD3D11, +/**/ 0x3F1A80AF, 0x948B381A, +/**/ 0xBF1A8057, 0xCA000000, +/**/ 0x3D3F1149, 0x07EDFD29, +/**/ 0x3F1A00A9, 0x044A9BE5, +/**/ 0xBF1A0054, 0x81000000, +/**/ 0xBD3B8C68, 0xF7BB7092, +/**/ 0x3F1980A2, 0x940C6FCF, +/**/ 0xBF198051, 0x49000000, +/**/ 0xBD365E1C, 0xF27E09A9, +/**/ 0x3F19009C, 0x43D0A7D8, +/**/ 0xBF19004E, 0x21000000, +/**/ 0xBD3162D2, 0xD508D564, +/**/ 0x3F188096, 0x139737FE, +/**/ 0xBF18804B, 0x09000000, +/**/ 0xBD293315, 0x18D5C93E, +/**/ 0x3F180090, 0x03601440, +/**/ 0xBF180048, 0x01000000, +/**/ 0xBD200288, 0x0C26A328, +/**/ 0x3F17808A, 0x132B309E, +/**/ 0xBF178045, 0x09000000, +/**/ 0xBD0CC7F9, 0x7E89FD6F, +/**/ 0x3F170084, 0x42F88115, +/**/ 0xBF170042, 0x21000000, +/**/ 0x3CE40881, 0x058494DC, +/**/ 0x3F16807E, 0x92C7F9A5, +/**/ 0xBF16803F, 0x49000000, +/**/ 0x3D12AE16, 0xCD5698B9, +/**/ 0x3F160079, 0x02998E4D, +/**/ 0xBF16003C, 0x81000000, +/**/ 0x3D21138B, 0xC5780E17, +/**/ 0x3F158073, 0x926D330B, +/**/ 0xBF158039, 0xC9000000, +/**/ 0x3D287809, 0x4E2001E2, +/**/ 0x3F15006E, 0x4242DBDF, +/**/ 0xBF150037, 0x21000000, +/**/ 0x3D2F8684, 0x21448AA2, +/**/ 0x3F148069, 0x121A7CC8, +/**/ 0xBF148034, 0x89000000, +/**/ 0x3D33207E, 0x2F637D8E, +/**/ 0x3F140064, 0x01F409C4, +/**/ 0xBF140032, 0x01000000, +/**/ 0x3D3654B9, 0x12E44B29, +/**/ 0x3F13805F, 0x11CF76D3, +/**/ 0xBF13802F, 0x89000000, +/**/ 0x3D3960F2, 0xCA5547F3, +/**/ 0x3F13005A, 0x41ACB7F4, +/**/ 0xBF13002D, 0x21000000, +/**/ 0x3D3C462B, 0x6487063D, +/**/ 0x3F128055, 0x918BC126, +/**/ 0xBF12802A, 0xC9000000, +/**/ 0x3D3F0562, 0xEFEA1107, +/**/ 0x3F120051, 0x016C8668, +/**/ 0xBF120028, 0x80000000, +/**/ 0xBD3E6066, 0x857113CE, +/**/ 0x3F11804C, 0x914EFBBA, +/**/ 0xBF118026, 0x48000000, +/**/ 0xBD3BEA30, 0xEDD9EB54, +/**/ 0x3F110048, 0x41331519, +/**/ 0xBF110024, 0x20000000, +/**/ 0xBD3996FC, 0x3BFFFF5A, +/**/ 0x3F108044, 0x1118C686, +/**/ 0xBF108022, 0x08000000, +/**/ 0xBD3765C8, 0x62F2E042, +/**/ 0x3F100040, 0x01000400, +/**/ 0xBF100020, 0x00000000, +/**/ 0xBD355595, 0x562224CD, +/**/ 0x3F0F0078, 0x21D1830C, +/**/ 0xBF0F003C, 0x10000000, +/**/ 0xBD336563, 0x095D69EB, +/**/ 0x3F0E0070, 0x81A5E62E, +/**/ 0xBF0E0038, 0x40000000, +/**/ 0xBD319431, 0x70D45290, +/**/ 0x3F0D0069, 0x217D1965, +/**/ 0xBF0D0034, 0x90000000, +/**/ 0xBD2FC201, 0x022D0EF6, +/**/ 0x3F0C0062, 0x015704B1, +/**/ 0xBF0C0031, 0x00000000, +/**/ 0xBD2C95A0, 0x5E276E21, +/**/ 0x3F0B005B, 0x2133900E, +/**/ 0xBF0B002D, 0x90000000, +/**/ 0xBD29A140, 0xE0372A42, +/**/ 0x3F0A0054, 0x8112A37D, +/**/ 0xBF0A002A, 0x40000000, +/**/ 0xBD26E2E2, 0x73BBB580, +/**/ 0x3F09004E, 0x20F426FB, +/**/ 0xBF090027, 0x10000000, +/**/ 0xBD245885, 0x04D48C20, +/**/ 0x3F080048, 0x00D80288, +/**/ 0xBF080024, 0x00000000, +/**/ 0xBD220028, 0x80613426, +/**/ 0x3F070042, 0x20BE1E23, +/**/ 0xBF070021, 0x10000000, +/**/ 0xBD1FAF99, 0xA80279F3, +/**/ 0x3F06003C, 0x80A661CA, +/**/ 0xBF06001E, 0x40000000, +/**/ 0xBD1BBAE3, 0xDC287DFE, +/**/ 0x3F050037, 0x2090B57C, +/**/ 0xBF05001B, 0x90000000, +/**/ 0xBD181E2F, 0x7B73B67C, +/**/ 0x3F040032, 0x007D0139, +/**/ 0xBF040019, 0x00000000, +/**/ 0xBD14D57C, 0x65A375F8, +/**/ 0x3F03002D, 0x206B2CFF, +/**/ 0xBF030016, 0x90000000, +/**/ 0xBD11DCCA, 0x7BF71EC1, +/**/ 0x3F020028, 0x805B20CD, +/**/ 0xBF020014, 0x40000000, +/**/ 0xBD0E6033, 0x425C4447, +/**/ 0x3F010024, 0x204CC4A3, +/**/ 0xBF010012, 0x10000000, +/**/ 0xBD0996D3, 0x730FFF5C, +/**/ 0x3F000020, 0x00400080, +/**/ 0xBF000010, 0x00000000, +/**/ 0xBD055575, 0x558888DE, +/**/ 0x3EFE0038, 0x406978C6, +/**/ 0xBEFE001C, 0x20000000, +/**/ 0xBD019418, 0xB845146A, +/**/ 0x3EFC0031, 0x0055C096, +/**/ 0xBEFC0018, 0x80000000, +/**/ 0xBCFC957A, 0xD989DB3C, +/**/ 0x3EFA002A, 0x4044A870, +/**/ 0xBEFA0015, 0x20000000, +/**/ 0xBCF6E2C6, 0x8F0EED2F, +/**/ 0x3EF80024, 0x00360051, +/**/ 0xBEF80012, 0x00000000, +/**/ 0xBCF20014, 0x40184CEB, +/**/ 0x3EF6001E, 0x40299839, +/**/ 0xBEF6000F, 0x20000000, +/**/ 0xBCEBBAC7, 0x434A1F5C, +/**/ 0x3EF40019, 0x001F4027, +/**/ 0xBEF4000C, 0x80000000, +/**/ 0xBCE4D568, 0xDD68DD6A, +/**/ 0x3EF20014, 0x4016C81A, +/**/ 0xBEF2000A, 0x20000000, +/**/ 0xBCDE6019, 0xA11710FC, +/**/ 0x3EF00010, 0x00100010, +/**/ 0xBEF00008, 0x00000000, +/**/ 0xBCD55565, 0x5562222D, +/**/ 0x3EEC0018, 0x80157013, +/**/ 0xBEEC000C, 0x40000000, +/**/ 0xBCCC9568, 0x176276C5, +/**/ 0x3EE80012, 0x000D800A, +/**/ 0xBEE80009, 0x00000000, +/**/ 0xBCC2000A, 0x20061337, +/**/ 0x3EE4000C, 0x8007D005, +/**/ 0xBEE40006, 0x40000000, +/**/ 0xBCB4D55F, 0x195A3758, +/**/ 0x3EE00008, 0x00040002, +/**/ 0xBEE00004, 0x00000000, +/**/ 0xBCA5555D, 0x5558888A, +/**/ 0x3ED80009, 0x00036001, +/**/ 0xBED80004, 0x80000000, +/**/ 0xBC920005, 0x100184CD, +/**/ 0x3ED00004, 0x00010000, +/**/ 0xBED00002, 0x00000000, +/**/ 0xBC755559, 0x55562222, +/**/ 0x3EC00002, 0x00004000, +/**/ 0xBEC00001, 0x00000000, +/**/ 0xBC455557, 0x55558889, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0xBEBFFFFC, 0x00008000, +/**/ 0x3EBFFFFE, 0x00000000, +/**/ 0x3C455553, 0x55558889, +/**/ 0xBECFFFF8, 0x00020000, +/**/ 0x3ECFFFFC, 0x00000000, +/**/ 0x3C755551, 0x55562222, +/**/ 0xBED7FFF7, 0x00035FFF, +/**/ 0x3ED7FFFB, 0x80000000, +/**/ 0x3C91FFFA, 0xF00184CC, +/**/ 0xBEDFFFF0, 0x0007FFFC, +/**/ 0x3EDFFFF8, 0x00000000, +/**/ 0x3CA5554D, 0x55588887, +/**/ 0xBEE3FFF3, 0x8007CFFB, +/**/ 0x3EE3FFF9, 0xC0000000, +/**/ 0x3CB4D54B, 0x915A3753, +/**/ 0xBEE7FFEE, 0x000D7FF6, +/**/ 0x3EE7FFF7, 0x00000000, +/**/ 0x3CC1FFF5, 0xE006132F, +/**/ 0xBEEBFFE7, 0x80156FED, +/**/ 0x3EEBFFF3, 0xC0000000, +/**/ 0x3CCC9542, 0x936276B2, +/**/ 0xBEEFFFE0, 0x001FFFE0, +/**/ 0x3EEFFFF0, 0x00000000, +/**/ 0x3CD55545, 0x55622217, +/**/ 0xBEF1FFEB, 0xC016C7E6, +/**/ 0x3EF1FFF5, 0xE0000000, +/**/ 0x3CDE5FE6, 0x5F1710D1, +/**/ 0xBEF3FFE7, 0x001F3FD9, +/**/ 0x3EF3FFF3, 0x80000000, +/**/ 0x3CE4D541, 0xCD68DD41, +/**/ 0xBEF5FFE1, 0xC02997C7, +/**/ 0x3EF5FFF0, 0xE0000000, +/**/ 0x3CEBBA8E, 0x124A1F13, +/**/ 0xBEF7FFDC, 0x0035FFAF, +/**/ 0x3EF7FFEE, 0x00000000, +/**/ 0x3CF1FFEB, 0xC0184CAE, +/**/ 0xBEF9FFD5, 0xC044A790, +/**/ 0x3EF9FFEA, 0xE0000000, +/**/ 0x3CF6E28E, 0xC68EECCD, +/**/ 0xBEFBFFCF, 0x0055BF6A, +/**/ 0x3EFBFFE7, 0x80000000, +/**/ 0x3CFC952F, 0xD189DAA2, +/**/ 0xBEFDFFC7, 0xC069773A, +/**/ 0x3EFDFFE3, 0xE0000000, +/**/ 0x3D0193E7, 0x480513F6, +/**/ 0xBEFFFFC0, 0x007FFF00, +/**/ 0x3EFFFFE0, 0x00000000, +/**/ 0x3D055535, 0x55888833, +/**/ 0xBF00FFDB, 0xE04CC35D, +/**/ 0x3F00FFED, 0xF0000000, +/**/ 0x3D099681, 0xE2CFFE66, +/**/ 0xBF01FFD7, 0x805B1F33, +/**/ 0x3F01FFEB, 0xC0000000, +/**/ 0x3D0E5FCC, 0xBE5C42ED, +/**/ 0xBF02FFD2, 0xE06B2B01, +/**/ 0x3F02FFE9, 0x70000000, +/**/ 0x3D11DC8A, 0xD9D71DD1, +/**/ 0xBF03FFCE, 0x007CFEC8, +/**/ 0x3F03FFE7, 0x00000000, +/**/ 0x3D14D52E, 0x45A374B3, +/**/ 0xBF04FFC8, 0xE090B284, +/**/ 0x3F04FFE4, 0x70000000, +/**/ 0x3D181DD0, 0x8553B4C7, +/**/ 0xBF05FFC3, 0x80A65E36, +/**/ 0x3F05FFE1, 0xC0000000, +/**/ 0x3D1BBA71, 0x7A287BBE, +/**/ 0xBF06FFBD, 0xE0BE19DD, +/**/ 0x3F06FFDE, 0xF0000000, +/**/ 0x3D1FAF11, 0x03E27702, +/**/ 0xBF07FFB8, 0x00D7FD78, +/**/ 0x3F07FFDC, 0x00000000, +/**/ 0x3D21FFD7, 0x80613240, +/**/ 0xBF08FFB1, 0xE0F42105, +/**/ 0x3F08FFD8, 0xF0000000, +/**/ 0x3D245825, 0xA6C489B3, +/**/ 0xBF09FFAB, 0x81129C84, +/**/ 0x3F09FFD5, 0xC0000000, +/**/ 0x3D26E272, 0xE2BBB26F, +/**/ 0xBF0AFFA4, 0xE13387F2, +/**/ 0x3F0AFFD2, 0x70000000, +/**/ 0x3D29A0BF, 0x21272669, +/**/ 0xBF0BFF9E, 0x0156FB50, +/**/ 0x3F0BFFCF, 0x00000000, +/**/ 0x3D2C950A, 0x4E276957, +/**/ 0xBF0CFF96, 0xE17D0E9B, +/**/ 0x3F0CFFCB, 0x70000000, +/**/ 0x3D2FC154, 0x551D090E, +/**/ 0xBF0DFF8F, 0x81A5D9D2, +/**/ 0x3F0DFFC7, 0xC0000000, +/**/ 0x3D3193CE, 0x90544EF1, +/**/ 0xBF0EFF87, 0xE1D174F4, +/**/ 0x3F0EFFC3, 0xF0000000, +/**/ 0x3D3364F2, 0x4D556583, +/**/ 0xBF0FFF80, 0x01FFF800, +/**/ 0x3F0FFFC0, 0x00000000, +/**/ 0x3D355515, 0x56221F78, +/**/ 0xBF107FBB, 0xF118BD7A, +/**/ 0x3F107FDD, 0xF8000000, +/**/ 0x3D376537, 0x9EEAD9D8, +/**/ 0xBF10FFB7, 0xC1330AE7, +/**/ 0x3F10FFDB, 0xE0000000, +/**/ 0x3D399659, 0x1B7FF7AE, +/**/ 0xBF117FB3, 0x714EF047, +/**/ 0x3F117FD9, 0xB8000000, +/**/ 0x3D3BE979, 0xBF51E233, +/**/ 0xBF11FFAF, 0x016C7998, +/**/ 0x3F11FFD7, 0x80000000, +/**/ 0x3D3E5F99, 0x7D7108FF, +/**/ 0xBF127FAA, 0x718BB2DA, +/**/ 0x3F127FD5, 0x39000000, +/**/ 0xBD3F0647, 0xB7721DC6, +/**/ 0xBF12FFA5, 0xC1ACA80C, +/**/ 0x3F12FFD2, 0xE1000000, +/**/ 0xBD3C4729, 0xED071532, +/**/ 0xBF137FA0, 0xF1CF652D, +/**/ 0x3F137FD0, 0x79000000, +/**/ 0xBD39620D, 0x315D596D, +/**/ 0xBF13FF9C, 0x01F3F63C, +/**/ 0x3F13FFCE, 0x01000000, +/**/ 0xBD3655F1, 0x92E45F81, +/**/ 0xBF147F96, 0xF21A6739, +/**/ 0x3F147FCB, 0x79000000, +/**/ 0xBD3321D7, 0x206B9526, +/**/ 0xBF14FF91, 0xC242C421, +/**/ 0x3F14FFC8, 0xE1000000, +/**/ 0xBD2F897B, 0xD244C12A, +/**/ 0xBF157F8C, 0x726D18F6, +/**/ 0x3F157FC6, 0x39000000, +/**/ 0xBD287B4B, 0xF93040AE, +/**/ 0xBF15FF87, 0x029971B4, +/**/ 0x3F15FFC3, 0x81000000, +/**/ 0xBD21171E, 0xD578562C, +/**/ 0xBF167F81, 0x72C7DA5C, +/**/ 0x3F167FC0, 0xB9000000, +/**/ 0xBD12B5E9, 0x0F773DB4, +/**/ 0xBF16FF7B, 0xC2F85EEC, +/**/ 0x3F16FFBD, 0xE1000000, +/**/ 0xBCE44CD3, 0x158A76C2, +/**/ 0xBF177F75, 0xF32B0B63, +/**/ 0x3F177FBA, 0xF9000000, +/**/ 0x3D0CB55C, 0x2E48511B, +/**/ 0xBF17FF70, 0x035FEBC0, +/**/ 0x3F17FFB8, 0x01000000, +/**/ 0x3D1FFAF0, 0x184C534F, +/**/ 0xBF187F69, 0xF3970C03, +/**/ 0x3F187FB4, 0xF9000000, +/**/ 0x3D292D95, 0xACC53FBE, +/**/ 0xBF18FF63, 0xC3D07829, +/**/ 0x3F18FFB1, 0xE1000000, +/**/ 0x3D315FD7, 0xE48887C8, +/**/ 0xBF197F5D, 0x740C3C32, +/**/ 0x3F197FAE, 0xB9000000, +/**/ 0x3D365AE3, 0x1DF5B242, +/**/ 0xBF19FF57, 0x044A641C, +/**/ 0x3F19FFAB, 0x81000000, +/**/ 0x3D3B88EC, 0x6FBB0E5F, +/**/ 0xBF1A7F50, 0x748AFBE7, +/**/ 0x3F1A7FA8, 0x3A000000, +/**/ 0xBD3F150C, 0x39766B40, +/**/ 0xBF1AFF49, 0xC4CE0F91, +/**/ 0x3F1AFFA4, 0xE2000000, +/**/ 0xBD397E06, 0xF14DB839, +/**/ 0xBF1B7F42, 0xF513AB19, +/**/ 0x3F1B7FA1, 0x7A000000, +/**/ 0xBD33B103, 0xCBD9CC3D, +/**/ 0xBF1BFF3C, 0x055BDA7D, +/**/ 0x3F1BFF9E, 0x02000000, +/**/ 0xBD2B5A05, 0xBB1321B5, +/**/ 0xBF1C7F34, 0xF5A6A9BD, +/**/ 0x3F1C7F9A, 0x7A000000, +/**/ 0xBD1DC410, 0xECAF9551, +/**/ 0xBF1CFF2D, 0xC5F424D6, +/**/ 0x3F1CFF96, 0xE2000000, +/**/ 0xBCEF80FF, 0x3DF3CD68, +/**/ 0xBF1D7F26, 0x764457C8, +/**/ 0x3F1D7F93, 0x3A000000, +/**/ 0x3D16CBC7, 0x4271E737, +/**/ 0xBF1DFF1F, 0x06974E91, +/**/ 0x3F1DFF8F, 0x82000000, +/**/ 0x3D2939D2, 0x1D134848, +/**/ 0xBF1E7F17, 0x76ED1530, +/**/ 0x3F1E7F8B, 0xBA000000, +/**/ 0x3D33C2DD, 0xA9892C73, +/**/ 0xBF1EFF0F, 0xC745B7A4, +/**/ 0x3F1EFF87, 0xE2000000, +/**/ 0x3D3B25CF, 0x8AEC69D5, +/**/ 0xBF1F7F07, 0xF7A141EA, +/**/ 0x3F1F7F83, 0xFB000000, +/**/ 0xBD3D3941, 0x645B412A, +/**/ 0xBF1FFF00, 0x07FFC002, +/**/ 0x3F1FFF80, 0x03000000, +/**/ 0xBD355955, 0x3BBC6662, +/**/ 0xBF203F7B, 0xFC309EF5, +/**/ 0x3F203FBD, 0xFD800000, +/**/ 0xBD2A72D8, 0x260B17B3, +/**/ 0xBF207F77, 0xE462E3D0, +/**/ 0x3F207FBB, 0xF1800000, +/**/ 0xBD136218, 0x0994AE68, +/**/ 0xBF20BF73, 0xBC96B492, +/**/ 0x3F20BFB9, 0xDD800000, +/**/ 0x3D0E52E6, 0xECB2641F, +/**/ 0xBF20FF6F, 0x84CC1739, +/**/ 0x3F20FFB7, 0xC1800000, +/**/ 0x3D296078, 0xE7FCF60B, +/**/ 0xBF213F6B, 0x3D0311C6, +/**/ 0x3F213FB5, 0x9D800000, +/**/ 0x3D35DA18, 0xA7850AFF, +/**/ 0xBF217F66, 0xE53BAA36, +/**/ 0x3F217FB3, 0x71800000, +/**/ 0x3D3F48F1, 0x5E7BB444, +/**/ 0xBF21BF62, 0x7D75E68A, +/**/ 0x3F21BFB1, 0x3E000000, +/**/ 0xBD370239, 0x812BC469, +/**/ 0xBF21FF5E, 0x05B1CCC0, +/**/ 0x3F21FFAF, 0x02000000, +/**/ 0xBD2A0CD0, 0x23BF1A4D, +/**/ 0xBF223F59, 0x7DEF62D8, +/**/ 0x3F223FAC, 0xBE000000, +/**/ 0xBD0614D3, 0x736E3623, +/**/ 0xBF227F54, 0xE62EAED0, +/**/ 0x3F227FAA, 0x72000000, +/**/ 0x3D1F28BD, 0x37EDEDB0, +/**/ 0xBF22BF50, 0x3E6FB6A9, +/**/ 0x3F22BFA8, 0x1E000000, +/**/ 0x3D32A0F5, 0x07CE33C8, +/**/ 0xBF22FF4B, 0x86B28060, +/**/ 0x3F22FFA5, 0xC2000000, +/**/ 0x3D3DC2B6, 0xA31C6A8D, +/**/ 0xBF233F46, 0xBEF711F6, +/**/ 0x3F233FA3, 0x5E800000, +/**/ 0xBD36CF8B, 0xFC67C9FB, +/**/ 0xBF237F41, 0xE73D7169, +/**/ 0x3F237FA0, 0xF2800000, +/**/ 0xBD2629A5, 0xE6D88A89, +/**/ 0xBF23BF3C, 0xFF85A4B8, +/**/ 0x3F23BF9E, 0x7E800000, +/**/ 0x3CEE7C34, 0x202574EC, +/**/ 0xBF23FF38, 0x07CFB1E3, +/**/ 0x3F23FF9C, 0x02800000, +/**/ 0x3D2A9723, 0x46E594C1, +/**/ 0xBF243F33, 0x001B9EE8, +/**/ 0x3F243F99, 0x7E800000, +/**/ 0x3D39F33C, 0xF61AE74C, +/**/ 0xBF247F2D, 0xE86971C7, +/**/ 0x3F247F96, 0xF3000000, +/**/ 0xBD39141C, 0x85341E31, +/**/ 0xBF24BF28, 0xC0B9307F, +/**/ 0x3F24BF94, 0x5F000000, +/**/ 0xBD2792F5, 0xDA0FAF09, +/**/ 0xBF24FF23, 0x890AE10E, +/**/ 0x3F24FF91, 0xC3000000, +/**/ 0x3CFD4219, 0xFB239430, +/**/ 0xBF253F1E, 0x415E8974, +/**/ 0x3F253F8F, 0x1F000000, +/**/ 0x3D2F8B72, 0x0359434A, +/**/ 0xBF257F18, 0xE9B42FAF, +/**/ 0x3F257F8C, 0x73000000, +/**/ 0x3D3E0C4B, 0x1939FEDF, +/**/ 0xBF25BF13, 0x820BD9BF, +/**/ 0x3F25BF89, 0xBF800000, +/**/ 0xBD335728, 0x39B301E2, +/**/ 0xBF25FF0E, 0x0A658DA3, +/**/ 0x3F25FF87, 0x03800000, +/**/ 0xBD118E84, 0x5E1E8D4F, +/**/ 0xBF263F08, 0x82C15159, +/**/ 0x3F263F84, 0x3F800000, +/**/ 0x3D25CFC0, 0xBDDDD045, +/**/ 0xBF267F02, 0xEB1F2AE1, +/**/ 0x3F267F81, 0x73800000, +/**/ 0x3D3A8C5C, 0x08837E99, +/**/ 0xBF26BEFD, 0x437F203A, +/**/ 0x3F26BF7E, 0xA0000000, +/**/ 0xBD35752E, 0x3C56F12D, +/**/ 0xBF26FEF7, 0x8BE13762, +/**/ 0x3F26FF7B, 0xC4000000, +/**/ 0xBD146EFA, 0x46359E28, +/**/ 0xBF273EF1, 0xC4457659, +/**/ 0x3F273F78, 0xE0000000, +/**/ 0x3D273355, 0xCD265865, +/**/ 0xBF277EEB, 0xECABE31C, +/**/ 0x3F277F75, 0xF4000000, +/**/ 0x3D3CAC0E, 0x095DEBF8, +/**/ 0xBF27BEE6, 0x051483AC, +/**/ 0x3F27BF73, 0x00800000, +/**/ 0xBD31E395, 0x4C39F4DB, +/**/ 0xBF27FEE0, 0x0D7F5E08, +/**/ 0x3F27FF70, 0x04800000, +/**/ 0xBCB43F3D, 0xA1314B81, +/**/ 0xBF283EDA, 0x05EC782D, +/**/ 0x3F283F6D, 0x00800000, +/**/ 0x3D321B10, 0x115B8D70, +/**/ 0xBF287ED3, 0xEE5BD81B, +/**/ 0x3F287F69, 0xF5000000, +/**/ 0xBD3B54A7, 0x83704FE1, +/**/ 0xBF28BECD, 0xC6CD83D1, +/**/ 0x3F28BF66, 0xE1000000, +/**/ 0xBD20C4CC, 0x41229C91, +/**/ 0xBF28FEC7, 0x8F41814D, +/**/ 0x3F28FF63, 0xC5000000, +/**/ 0x3D25E5A8, 0x2A183F17, +/**/ 0xBF293EC1, 0x47B7D68F, +/**/ 0x3F293F60, 0xA1000000, +/**/ 0x3D3EAC06, 0xF81B997D, +/**/ 0xBF297EBA, 0xF0308995, +/**/ 0x3F297F5D, 0x75800000, +/**/ 0xBD2A6B9B, 0x3A1E5BAD, +/**/ 0xBF29BEB4, 0x88ABA05E, +/**/ 0x3F29BF5A, 0x41800000, +/**/ 0x3D1D3958, 0xBDFE3C77, +/**/ 0xBF29FEAE, 0x112920E9, +/**/ 0x3F29FF57, 0x05800000, +/**/ 0x3D3C3972, 0x375BA904, +/**/ 0xBF2A3EA7, 0x89A91135, +/**/ 0x3F2A3F53, 0xC2000000, +/**/ 0xBD2CE6F3, 0x588DE85B, +/**/ 0xBF2A7EA0, 0xF22B7740, +/**/ 0x3F2A7F50, 0x76000000, +/**/ 0x3D1D2249, 0x75AEDBFD, +/**/ 0xBF2ABE9A, 0x4AB05909, +/**/ 0x3F2ABF4D, 0x22000000, +/**/ 0x3D3D6E96, 0x2CE7BDAC, +/**/ 0xBF2AFE93, 0x9337BC90, +/**/ 0x3F2AFF49, 0xC6800000, +/**/ 0xBD2800DC, 0xCB7D724C, +/**/ 0xBF2B3E8C, 0xCBC1A7D1, +/**/ 0x3F2B3F46, 0x62800000, +/**/ 0x3D25F908, 0xFA591B29, +/**/ 0xBF2B7E85, 0xF44E20CE, +/**/ 0x3F2B7F42, 0xF7000000, +/**/ 0xBD3D9991, 0x53021ED8, +/**/ 0xBF2BBE7F, 0x0CDD2D83, +/**/ 0x3F2BBF3F, 0x83000000, +/**/ 0xBD1706BF, 0xFD596AD6, +/**/ 0xBF2BFE78, 0x156ED3F0, +/**/ 0x3F2BFF3C, 0x07000000, +/**/ 0x3D328528, 0x4EC45253, +/**/ 0xBF2C3E71, 0x0E031A14, +/**/ 0x3F2C3F38, 0x83800000, +/**/ 0xBD34C408, 0x927D8A9E, +/**/ 0xBF2C7E69, 0xF69A05ED, +/**/ 0x3F2C7F34, 0xF7800000, +/**/ 0x3D118EF4, 0xCAE2C25F, +/**/ 0xBF2CBE62, 0xCF339D7A, +/**/ 0x3F2CBF31, 0x63800000, +/**/ 0x3D3DFD79, 0x73DBBB41, +/**/ 0xBF2CFE5B, 0x97CFE6B9, +/**/ 0x3F2CFF2D, 0xC8000000, +/**/ 0xBD1FD74F, 0xE7FE77E6, +/**/ 0xBF2D3E54, 0x506EE7AA, +/**/ 0x3F2D3F2A, 0x24000000, +/**/ 0x3D328AD4, 0xBDDB871F, +/**/ 0xBF2D7E4C, 0xF910A64A, +/**/ 0x3F2D7F26, 0x78800000, +/**/ 0xBD327F8C, 0x903DDD81, +/**/ 0xBF2DBE45, 0x91B52899, +/**/ 0x3F2DBF22, 0xC4800000, +/**/ 0x3D21D80F, 0xDF52840A, +/**/ 0xBF2DFE3E, 0x1A5C7495, +/**/ 0x3F2DFF1F, 0x09000000, +/**/ 0xBD3B316D, 0xEED9F651, +/**/ 0xBF2E3E36, 0x9306903D, +/**/ 0x3F2E3F1B, 0x45000000, +/**/ 0x3CF2911A, 0x76DB3C6B, +/**/ 0xBF2E7E2E, 0xFBB3818F, +/**/ 0x3F2E7F17, 0x79000000, +/**/ 0x3D3DFC86, 0x85559113, +/**/ 0xBF2EBE27, 0x54634E89, +/**/ 0x3F2EBF13, 0xA5800000, +/**/ 0xBD12D83E, 0x0AB3DBE7, +/**/ 0xBF2EFE1F, 0x9D15FD2B, +/**/ 0x3F2EFF0F, 0xC9800000, +/**/ 0x3D39124F, 0x617B99F1, +/**/ 0xBF2F3E17, 0xD5CB9373, +/**/ 0x3F2F3F0B, 0xE6000000, +/**/ 0xBD2152B9, 0xF8F64DA1, +/**/ 0xBF2F7E0F, 0xFE841760, +/**/ 0x3F2F7F07, 0xFA000000, +/**/ 0x3D3617EB, 0x34C4735B, +/**/ 0xBF2FBE08, 0x173F8EEF, +/**/ 0x3F2FBF04, 0x06800000, +/**/ 0xBD2551B0, 0x739FA712, +/**/ 0xBF2FFE00, 0x1FFE0020, +/**/ 0x3F2FFF00, 0x0A800000, +/**/ 0x3D351558, 0x885DE027, +/**/ 0xBF301EFC, 0x0C5FB879, +/**/ 0x3F301F7E, 0x03800000, +/**/ 0xBD255905, 0x68F8FC50, +/**/ 0xBF303EF8, 0x00C1F3B0, +/**/ 0x3F303F7B, 0xFD800000, +/**/ 0x3D361295, 0xDF771CF4, +/**/ 0xBF305EF3, 0xED25B4B7, +/**/ 0x3F305F79, 0xF3C00000, +/**/ 0xBD2158BB, 0xD8A255DB, +/**/ 0xBF307EEF, 0xD18AFE8B, +/**/ 0x3F307F77, 0xE5C00000, +/**/ 0x3D3917A1, 0xB740E625, +/**/ 0xBF309EEB, 0xADF1D42C, +/**/ 0x3F309F75, 0xD4000000, +/**/ 0xBD1281AD, 0x9C716D59, +/**/ 0xBF30BEE7, 0x825A3899, +/**/ 0x3F30BF73, 0xBE000000, +/**/ 0x3D3E2C7A, 0x86ED7DDC, +/**/ 0xBF30DEE3, 0x4EC42ED1, +/**/ 0x3F30DF71, 0xA4400000, +/**/ 0x3CF7F534, 0xF54F7E28, +/**/ 0xBF30FEDF, 0x132FB9D5, +/**/ 0x3F30FF6F, 0x86800000, +/**/ 0xBD3AA6E1, 0x404F4E01, +/**/ 0xBF311EDA, 0xCF9CDCA2, +/**/ 0x3F311F6D, 0x64800000, +/**/ 0x3D2375B9, 0x4A6EC981, +/**/ 0xBF313ED6, 0x840B9A38, +/**/ 0x3F313F6B, 0x3EC00000, +/**/ 0xBD315A73, 0x33401DD0, +/**/ 0xBF315ED2, 0x307BF596, +/**/ 0x3F315F69, 0x14C00000, +/**/ 0x3D341A2F, 0x02C11605, +/**/ 0xBF317ECD, 0xD4EDF1BC, +/**/ 0x3F317F66, 0xE7000000, +/**/ 0xBD1798F3, 0xB2B7E8C5, +/**/ 0xBF319EC9, 0x716191A8, +/**/ 0x3F319F64, 0xB5400000, +/**/ 0xBD3F5AB7, 0x35D62ED5, +/**/ 0xBF31BEC5, 0x05D6D85A, +/**/ 0x3F31BF62, 0x7F400000, +/**/ 0x3D1EF6FF, 0xCA7EC7CD, +/**/ 0xBF31DEC0, 0x924DC8D2, +/**/ 0x3F31DF60, 0x45800000, +/**/ 0xBD309BD7, 0xA8550396, +/**/ 0xBF31FEBC, 0x16C6660D, +/**/ 0x3F31FF5E, 0x07800000, +/**/ 0x3D379981, 0xC3E31F70, +/**/ 0xBF321EB7, 0x9340B30B, +/**/ 0x3F321F5B, 0xC5C00000, +/**/ 0x3CD7B300, 0x5FE92B94, +/**/ 0xBF323EB3, 0x07BCB2CC, +/**/ 0x3F323F59, 0x80000000, +/**/ 0xBD364AF9, 0x25A7CF34, +/**/ 0xBF325EAE, 0x743A684F, +/**/ 0x3F325F57, 0x36000000, +/**/ 0x3D339D32, 0x17E48399, +/**/ 0xBF327EA9, 0xD8B9D692, +/**/ 0x3F327F54, 0xE8400000, +/**/ 0xBCFE7B27, 0xCC387BD1, +/**/ 0xBF329EA5, 0x353B0095, +/**/ 0x3F329F52, 0x96800000, +/**/ 0xBD36D8A7, 0x1AE7FA80, +/**/ 0xBF32BEA0, 0x89BDE957, +/**/ 0x3F32BF50, 0x40800000, +/**/ 0x3D34CB54, 0x05CF3DC3, +/**/ 0xBF32DE9B, 0xD64293D7, +/**/ 0x3F32DF4D, 0xE6C00000, +/**/ 0x3CF053EA, 0xD5A4F691, +/**/ 0xBF32FE97, 0x1AC90315, +/**/ 0x3F32FF4B, 0x89000000, +/**/ 0xBD3229E7, 0x5CAE7B16, +/**/ 0xBF331E92, 0x57513A0F, +/**/ 0x3F331F49, 0x27000000, +/**/ 0x3D3B3EE1, 0xAEED4509, +/**/ 0xBF333E8D, 0x8BDB3BC4, +/**/ 0x3F333F46, 0xC1400000, +/**/ 0x3D228133, 0x2E0C2605, +/**/ 0xBF335E88, 0xB8670B34, +/**/ 0x3F335F44, 0x57800000, +/**/ 0xBD20477F, 0xBBD6E280, +/**/ 0xBF337E83, 0xDCF4AB5D, +/**/ 0x3F337F41, 0xE9C00000, +/**/ 0xBD38ED2A, 0xE9CE8AFC, +/**/ 0xBF339E7E, 0xF9841F3F, +/**/ 0x3F339F3F, 0x77C00000, +/**/ 0x3D36E558, 0x39159F9B, +/**/ 0xBF33BE7A, 0x0E1569D9, +/**/ 0x3F33BF3D, 0x02000000, +/**/ 0x3D1D5325, 0x40681634, +/**/ 0xBF33DE75, 0x1AA88E2A, +/**/ 0x3F33DF3A, 0x88400000, +/**/ 0xBD1E775F, 0x7F2112CE, +/**/ 0xBF33FE70, 0x1F3D8F31, +/**/ 0x3F33FF38, 0x0A800000, +/**/ 0xBD35F18B, 0x91F80D1B, +/**/ 0xBF341E6B, 0x1BD46FED, +/**/ 0x3F341F35, 0x88800000, +/**/ 0x3D3C5AAD, 0xFDC3FC2F, +/**/ 0xBF343E66, 0x106D335D, +/**/ 0x3F343F33, 0x02C00000, +/**/ 0x3D2E8FA9, 0x268A89F1, +/**/ 0xBF345E60, 0xFD07DC80, +/**/ 0x3F345F30, 0x79000000, +/**/ 0x3D06B73F, 0x902AC9EE, +/**/ 0xBF347E5B, 0xE1A46E55, +/**/ 0x3F347F2D, 0xEB400000, +/**/ 0xBD21EE30, 0x45C43959, +/**/ 0xBF349E56, 0xBE42EBDC, +/**/ 0x3F349F2B, 0x59800000, +/**/ 0xBD34212B, 0xE8B753E8, +/**/ 0xBF34BE51, 0x92E35813, +/**/ 0x3F34BF28, 0xC3C00000, +/**/ 0xBD3EA653, 0x9D2064DB, +/**/ 0xBF34DE4C, 0x5F85B5F9, +/**/ 0x3F34DF26, 0x29C00000, +/**/ 0x3D377A70, 0x81DCB6FB, +/**/ 0xBF34FE47, 0x242A088D, +/**/ 0x3F34FF23, 0x8C000000, +/**/ 0x3D2C8440, 0x6BB44A6D, +/**/ 0xBF351E41, 0xE0D052CF, +/**/ 0x3F351F20, 0xEA400000, +/**/ 0x3D16C6ED, 0x0048AAF8, +/**/ 0xBF353E3C, 0x957897BD, +/**/ 0x3F353F1E, 0x44800000, +/**/ 0xBD01ADF4, 0xF506A07E, +/**/ 0xBF355E37, 0x4222DA57, +/**/ 0x3F355F1B, 0x9AC00000, +/**/ 0xBD22E69B, 0x4B88A655, +/**/ 0xBF357E31, 0xE6CF1D9B, +/**/ 0x3F357F18, 0xED000000, +/**/ 0xBD3005F2, 0x153DAEB0, +/**/ 0xBF359E2C, 0x837D6488, +/**/ 0x3F359F16, 0x3B400000, +/**/ 0xBD35ECAC, 0x2D5222B4, +/**/ 0xBF35BE27, 0x182DB21E, +/**/ 0x3F35BF13, 0x85800000, +/**/ 0xBD3B267C, 0x2EA6CB14, +/**/ 0xBF35DE21, 0xA4E0095B, +/**/ 0x3F35DF10, 0xCBC00000, +/**/ 0xBD3FB262, 0x5A40A340, +/**/ 0xBF35FE1C, 0x29946D3F, +/**/ 0x3F35FF0E, 0x0DC00000, +/**/ 0x3D3C70A1, 0x0E7B79ED, +/**/ 0xBF361E16, 0xA64AE0C7, +/**/ 0x3F361F0B, 0x4C000000, +/**/ 0x3D39438D, 0xC9C8D263, +/**/ 0xBF363E11, 0x1B0366F4, +/**/ 0x3F363F08, 0x86400000, +/**/ 0x3D36C763, 0x9582CD0C, +/**/ 0xBF365E0B, 0x87BE02C5, +/**/ 0x3F365F05, 0xBC800000, +/**/ 0x3D34FD22, 0x2F24F1F9, +/**/ 0xBF367E05, 0xEC7AB737, +/**/ 0x3F367F02, 0xEEC00000, +/**/ 0x3D33E5C9, 0x53CAEA94, +/**/ 0xBF369E00, 0x4939874A, +/**/ 0x3F369F00, 0x1D000000, +/**/ 0x3D338258, 0xC03081D0, +/**/ 0xBF36BDFA, 0x9DFA75FE, +/**/ 0x3F36BEFD, 0x47400000, +/**/ 0x3D33D3D0, 0x30B1A458, +/**/ 0xBF36DDF4, 0xEABD8651, +/**/ 0x3F36DEFA, 0x6D800000, +/**/ 0x3D34DB2F, 0x614A60C1, +/**/ 0xBF36FDEF, 0x2F82BB41, +/**/ 0x3F36FEF7, 0x8FC00000, +/**/ 0x3D369976, 0x0D96E7B8, +/**/ 0xBF371DE9, 0x6C4A17CF, +/**/ 0x3F371EF4, 0xAE000000, +/**/ 0x3D390FA3, 0xF0D38C30, +/**/ 0xBF373DE3, 0xA1139EF8, +/**/ 0x3F373EF1, 0xC8400000, +/**/ 0x3D3C3EB8, 0xC5DCC397, +/**/ 0xBF375DDD, 0xCDDF53BC, +/**/ 0x3F375EEE, 0xDEC00000, +/**/ 0xBD3FD84B, 0xB8D0D9FD, +/**/ 0xBF377DD7, 0xF2AD3919, +/**/ 0x3F377EEB, 0xF1000000, +/**/ 0xBD3B3469, 0xD11891A0, +/**/ 0xBF379DD2, 0x0F7D520F, +/**/ 0x3F379EE8, 0xFF400000, +/**/ 0xBD35D4A1, 0xC93D855B, +/**/ 0xBF37BDCC, 0x244FA19D, +/**/ 0x3F37BEE6, 0x09800000, +/**/ 0xBD2F6FE7, 0xCFC56806, +/**/ 0xBF37DDC6, 0x31242AC1, +/**/ 0x3F37DEE3, 0x0FC00000, +/**/ 0xBD21BAC0, 0xE815F202, +/**/ 0xBF37FDC0, 0x35FAF079, +/**/ 0x3F37FEE0, 0x12000000, +/**/ 0xBCF43E7B, 0x5190C28B, +/**/ 0xBF381DBA, 0x32D3F5C6, +/**/ 0x3F381EDD, 0x10400000, +/**/ 0x3D1C55D8, 0x34C1F9E9, +/**/ 0xBF383DB4, 0x27AF3DA6, +/**/ 0x3F383EDA, 0x0A800000, +/**/ 0x3D302FB8, 0x8AAF36D4, +/**/ 0xBF385DAE, 0x148CCB18, +/**/ 0x3F385ED7, 0x00C00000, +/**/ 0x3D3A0BDF, 0x7AE0D0F8, +/**/ 0xBF387DA7, 0xF96CA11B, +/**/ 0x3F387ED3, 0xF3400000, +/**/ 0xBD3B5515, 0x6B1CDAAF, +/**/ 0xBF389DA1, 0xD64EC2AD, +/**/ 0x3F389ED0, 0xE1800000, +/**/ 0xBD2FE44C, 0xE1179E5E, +/**/ 0xBF38BD9B, 0xAB3332CD, +/**/ 0x3F38BECD, 0xCBC00000, +/**/ 0xBD0E529E, 0xF86F56EC, +/**/ 0xBF38DD95, 0x7819F47A, +/**/ 0x3F38DECA, 0xB2000000, +/**/ 0x3D2246C3, 0xFEB631AB, +/**/ 0xBF38FD8F, 0x3D030AB4, +/**/ 0x3F38FEC7, 0x94400000, +/**/ 0x3D36D7FA, 0xE04DA791, +/**/ 0xBF391D88, 0xF9EE7878, +/**/ 0x3F391EC4, 0x72C00000, +/**/ 0xBD3AAB89, 0x86F7ADBB, +/**/ 0xBF393D82, 0xAEDC40C7, +/**/ 0x3F393EC1, 0x4D000000, +/**/ 0xBD26CC57, 0x032C6155, +/**/ 0xBF395D7C, 0x5BCC669D, +/**/ 0x3F395EBE, 0x23400000, +/**/ 0x3D12A452, 0x93C3EB3D, +/**/ 0xBF397D76, 0x00BEECFB, +/**/ 0x3F397EBA, 0xF5800000, +/**/ 0x3D358336, 0xA0BCD695, +/**/ 0xBF399D6F, 0x9DB3D6E0, +/**/ 0x3F399EB7, 0xC4000000, +/**/ 0xBD38D6C5, 0xDA737570, +/**/ 0xBF39BD69, 0x32AB2749, +/**/ 0x3F39BEB4, 0x8E400000, +/**/ 0xBD198F84, 0x65026C7D, +/**/ 0xBF39DD62, 0xBFA4E136, +/**/ 0x3F39DEB1, 0x54800000, +/**/ 0x3D29B9C9, 0x2EA9B41A, +/**/ 0xBF39FD5C, 0x44A107A5, +/**/ 0x3F39FEAE, 0x17000000, +/**/ 0xBD3F1375, 0x16137ACF, +/**/ 0xBF3A1D55, 0xC19F9D96, +/**/ 0x3F3A1EAA, 0xD5400000, +/**/ 0xBD2467DC, 0xDE73AFA0, +/**/ 0xBF3A3D4F, 0x36A0A607, +/**/ 0x3F3A3EA7, 0x8F800000, +/**/ 0x3D26F8F0, 0x7B8357C6, +/**/ 0xBF3A5D48, 0xA3A423F7, +/**/ 0x3F3A5EA4, 0x46000000, +/**/ 0xBD3E0141, 0x5DA0DFB7, +/**/ 0xBF3A7D42, 0x08AA1A64, +/**/ 0x3F3A7EA0, 0xF8400000, +/**/ 0xBD1AB06E, 0x41050D29, +/**/ 0xBF3A9D3B, 0x65B28C4E, +/**/ 0x3F3A9E9D, 0xA6800000, +/**/ 0x3D317CE9, 0x56A0E005, +/**/ 0xBF3ABD34, 0xBABD7CB3, +/**/ 0x3F3ABE9A, 0x51000000, +/**/ 0xBD358532, 0xF899EF39, +/**/ 0xBF3ADD2E, 0x07CAEE92, +/**/ 0x3F3ADE96, 0xF7400000, +/**/ 0x3D113A3C, 0xC83BF5C2, +/**/ 0xBF3AFD27, 0x4CDAE4EA, +/**/ 0x3F3AFE93, 0x99800000, +/**/ 0x3D3EF92F, 0x863C7C8E, +/**/ 0xBF3B1D20, 0x89ED62B9, +/**/ 0x3F3B1E90, 0x38000000, +/**/ 0xBD161149, 0x3341CC3C, +/**/ 0xBF3B3D19, 0xBF026AFE, +/**/ 0x3F3B3E8C, 0xD2400000, +/**/ 0x3D36D709, 0x67C955DF, +/**/ 0xBF3B5D12, 0xEC1A00B8, +/**/ 0x3F3B5E89, 0x68C00000, +/**/ 0xBD27E77B, 0x5AE9B17A, +/**/ 0xBF3B7D0C, 0x113426E6, +/**/ 0x3F3B7E85, 0xFB000000, +/**/ 0x3D321C58, 0x219679DE, +/**/ 0xBF3B9D05, 0x2E50E086, +/**/ 0x3F3B9E82, 0x89800000, +/**/ 0xBD2DEF6A, 0xFAA62113, +/**/ 0xBF3BBCFE, 0x43703097, +/**/ 0x3F3BBE7F, 0x13C00000, +/**/ 0x3D30D119, 0x23305306, +/**/ 0xBF3BDCF7, 0x50921A17, +/**/ 0x3F3BDE7B, 0x9A400000, +/**/ 0xBD2D1078, 0x9FBACE27, +/**/ 0xBF3BFCF0, 0x55B6A006, +/**/ 0x3F3BFE78, 0x1C800000, +/**/ 0x3D32FD49, 0xD625DF1E, +/**/ 0xBF3C1CE9, 0x52DDC563, +/**/ 0x3F3C1E74, 0x9B000000, +/**/ 0xBD253AA9, 0x7D07255B, +/**/ 0xBF3C3CE2, 0x48078D2B, +/**/ 0x3F3C3E71, 0x15400000, +/**/ 0x3D38A8E7, 0x9E08B538, +/**/ 0xBF3C5CDB, 0x3533FA5D, +/**/ 0x3F3C5E6D, 0x8BC00000, +/**/ 0xBD09780B, 0x45956AFC, +/**/ 0xBF3C7CD4, 0x1A630FF9, +/**/ 0x3F3C7E69, 0xFE400000, +/**/ 0xBD3E2410, 0x2792F44E, +/**/ 0xBF3C9CCC, 0xF794D0FC, +/**/ 0x3F3C9E66, 0x6C800000, +/**/ 0x3D1F2AEC, 0x30AB4456, +/**/ 0xBF3CBCC5, 0xCCC94066, +/**/ 0x3F3CBE62, 0xD7000000, +/**/ 0xBD3161A0, 0x231641D5, +/**/ 0xBF3CDCBE, 0x9A006135, +/**/ 0x3F3CDE5F, 0x3D400000, +/**/ 0x3D3657DD, 0xF4AD1934, +/**/ 0xBF3CFCB7, 0x5F3A3668, +/**/ 0x3F3CFE5B, 0x9FC00000, +/**/ 0xBCF07CB0, 0x2E7AC798, +/**/ 0xBF3D1CB0, 0x1C76C2FD, +/**/ 0x3F3D1E57, 0xFE400000, +/**/ 0xBD377F9B, 0x6090F643, +/**/ 0xBF3D3CA8, 0xD1B609F3, +/**/ 0x3F3D3E54, 0x58800000, +/**/ 0x3D32F16C, 0x849503E6, +/**/ 0xBF3D5CA1, 0x7EF80E49, +/**/ 0x3F3D5E50, 0xAF000000, +/**/ 0xBCFB3B3A, 0xAF1CA4EA, +/**/ 0xBF3D7C9A, 0x243CD2FE, +/**/ 0x3F3D7E4D, 0x01800000, +/**/ 0xBD356DFC, 0x4701415B, +/**/ 0xBF3D9C92, 0xC1845B0F, +/**/ 0x3F3D9E49, 0x4FC00000, +/**/ 0x3D37C392, 0x582AEA48, +/**/ 0xBF3DBC8B, 0x56CEA97C, +/**/ 0x3F3DBE45, 0x9A400000, +/**/ 0x3D1787DF, 0x67DCC15E, +/**/ 0xBF3DDC83, 0xE41BC143, +/**/ 0x3F3DDE41, 0xE0C00000, +/**/ 0xBD262398, 0x352F961F, +/**/ 0xBF3DFC7C, 0x696BA563, +/**/ 0x3F3DFE3E, 0x23400000, +/**/ 0xBD3B16B9, 0xDEDD373A, +/**/ 0xBF3E1C74, 0xE6BE58DA, +/**/ 0x3F3E1E3A, 0x61800000, +/**/ 0x3D35D42E, 0x336BE94B, +/**/ 0xBF3E3C6D, 0x5C13DEA7, +/**/ 0x3F3E3E36, 0x9C000000, +/**/ 0x3D1EBFAF, 0x08A303A2, +/**/ 0xBF3E5C65, 0xC96C39C9, +/**/ 0x3F3E5E32, 0xD2800000, +/**/ 0xBD160A06, 0x34856362, +/**/ 0xBF3E7C5E, 0x2EC76D3D, +/**/ 0x3F3E7E2F, 0x05000000, +/**/ 0xBD31C21A, 0x154CDF1A, +/**/ 0xBF3E9C56, 0x8C257C04, +/**/ 0x3F3E9E2B, 0x33800000, +/**/ 0xBD3D0DDE, 0x31941F7F, +/**/ 0xBF3EBC4E, 0xE186691B, +/**/ 0x3F3EBE27, 0x5DC00000, +/**/ 0x3D389B31, 0xC26EC60D, +/**/ 0xBF3EDC47, 0x2EEA3781, +/**/ 0x3F3EDE23, 0x84400000, +/**/ 0x3D2E742A, 0xD583BEF8, +/**/ 0xBF3EFC3F, 0x7450EA34, +/**/ 0x3F3EFE1F, 0xA6C00000, +/**/ 0x3D1B3F31, 0xAC2DA351, +/**/ 0xBF3F1C37, 0xB1BA8433, +/**/ 0x3F3F1E1B, 0xC5400000, +/**/ 0xBCE45533, 0x2DC67430, +/**/ 0xBF3F3C2F, 0xE727087C, +/**/ 0x3F3F3E17, 0xDFC00000, +/**/ 0xBD1C7133, 0xFF1174AE, +/**/ 0xBF3F5C28, 0x14967A0F, +/**/ 0x3F3F5E13, 0xF6400000, +/**/ 0xBD29383C, 0x4AE098DC, +/**/ 0xBF3F7C20, 0x3A08DBE9, +/**/ 0x3F3F7E10, 0x08C00000, +/**/ 0xBD31211D, 0x684B0B3B, +/**/ 0xBF3F9C18, 0x577E3109, +/**/ 0x3F3F9E0C, 0x17400000, +/**/ 0xBD34AA4B, 0x268D7464, +/**/ 0xBF3FBC10, 0x6CF67C6E, +/**/ 0x3F3FBE08, 0x21C00000, +/**/ 0xBD3736A7, 0xBED03388, +/**/ 0xBF3FDC08, 0x7A71C116, +/**/ 0x3F3FDE04, 0x28400000, +/**/ 0xBD38C533, 0x900BC4E5, +/**/ 0xBF3FFC00, 0x7FF00200, +/**/ 0x3F3FFE00, 0x2AC00000, +/**/ 0xBD3954EE, 0xF9987527, +/**/ 0xBF400DFC, 0x3EB8A115, +/**/ 0x3F400EFE, 0x14A00000, +/**/ 0xBD38E4DA, 0x5B2E613B, +/**/ 0xBF401DF8, 0x397AC249, +/**/ 0x3F401EFC, 0x11E00000, +/**/ 0xBD3773F6, 0x14E5761B, +/**/ 0xBF402DF4, 0x303E661C, +/**/ 0x3F402EFA, 0x0D200000, +/**/ 0xBD350142, 0x873570A0, +/**/ 0xBF403DF0, 0x23038E0C, +/**/ 0x3F403EF8, 0x06600000, +/**/ 0xBD318BC0, 0x12F5DD53, +/**/ 0xBF404DEC, 0x11CA3B9A, +/**/ 0x3F404EF5, 0xFDA00000, +/**/ 0xBD2A24DE, 0x32BC307C, +/**/ 0xBF405DE7, 0xFC927044, +/**/ 0x3F405EF3, 0xF2E00000, +/**/ 0xBD1E513F, 0xF01532DA, +/**/ 0xBF406DE3, 0xE35C2D8A, +/**/ 0x3F406EF1, 0xE6200000, +/**/ 0xBCF10631, 0xCE27534E, +/**/ 0xBF407DDF, 0xC62774EA, +/**/ 0x3F407EEF, 0xD7600000, +/**/ 0x3D19E95C, 0x86CE9380, +/**/ 0xBF408DDB, 0xA4F447E4, +/**/ 0x3F408EED, 0xC6A00000, +/**/ 0x3D2E19BC, 0xBA0CD2C3, +/**/ 0xBF409DD7, 0x7FC2A7F8, +/**/ 0x3F409EEB, 0xB3E00000, +/**/ 0x3D38A832, 0x31FF7199, +/**/ 0xBF40ADD3, 0x569296A4, +/**/ 0x3F40AEE9, 0x9F400000, +/**/ 0xBD3CB2AD, 0xC2D77791, +/**/ 0xBF40BDCF, 0x29641567, +/**/ 0x3F40BEE7, 0x88800000, +/**/ 0xBD3102C1, 0xE5545563, +/**/ 0xBF40CDCA, 0xF83725C2, +/**/ 0x3F40CEE5, 0x6FC00000, +/**/ 0xBD111C2A, 0x66B3E48D, +/**/ 0xBF40DDC6, 0xC30BC932, +/**/ 0x3F40DEE3, 0x55000000, +/**/ 0x3D2302EF, 0x7711FC2A, +/**/ 0xBF40EDC2, 0x89E20138, +/**/ 0x3F40EEE1, 0x38400000, +/**/ 0x3D3857C4, 0xB558238E, +/**/ 0xBF40FDBE, 0x4CB9CF52, +/**/ 0x3F40FEDF, 0x19A00000, +/**/ 0xBD37C324, 0x1194C2E1, +/**/ 0xBF410DBA, 0x0B933501, +/**/ 0x3F410EDC, 0xF8E00000, +/**/ 0xBD1B390B, 0xFBCAF285, +/**/ 0xBF411DB5, 0xC66E33C2, +/**/ 0x3F411EDA, 0xD6200000, +/**/ 0x3D266ECF, 0x0E52C3A4, +/**/ 0xBF412DB1, 0x7D4ACD15, +/**/ 0x3F412ED8, 0xB1600000, +/**/ 0x3D3E4EDB, 0x1A4AF71D, +/**/ 0xBF413DAD, 0x30290279, +/**/ 0x3F413ED6, 0x8AC00000, +/**/ 0xBD2B0DD1, 0x58C4D599, +/**/ 0xBF414DA8, 0xDF08D56E, +/**/ 0x3F414ED4, 0x62000000, +/**/ 0x3D1EDC6F, 0x2FB4061D, +/**/ 0xBF415DA4, 0x89EA4773, +/**/ 0x3F415ED2, 0x37400000, +/**/ 0x3D3E09E8, 0x1BA53538, +/**/ 0xBF416DA0, 0x30CD5A06, +/**/ 0x3F416ED0, 0x0AA00000, +/**/ 0xBD251B08, 0x4A5B4574, +/**/ 0xBF417D9B, 0xD3B20EA8, +/**/ 0x3F417ECD, 0xDBE00000, +/**/ 0x3D2BE3AD, 0x4241B57B, +/**/ 0xBF418D97, 0x729866D7, +/**/ 0x3F418ECB, 0xAB400000, +/**/ 0xBD387707, 0xFA22BD16, +/**/ 0xBF419D93, 0x0D806412, +/**/ 0x3F419EC9, 0x78800000, +/**/ 0x3D01C6FC, 0xFFA2FC2F, +/**/ 0xBF41AD8E, 0xA46A07D9, +/**/ 0x3F41AEC7, 0x43C00000, +/**/ 0x3D3E028D, 0x05F32EE8, +/**/ 0xBF41BD8A, 0x375553AB, +/**/ 0x3F41BEC5, 0x0D200000, +/**/ 0xBD146400, 0xC7E46F2B, +/**/ 0xBF41CD85, 0xC6424907, +/**/ 0x3F41CEC2, 0xD4600000, +/**/ 0x3D38E737, 0x8DFCE791, +/**/ 0xBF41DD81, 0x5130E96B, +/**/ 0x3F41DEC0, 0x99C00000, +/**/ 0xBD1FEF30, 0x92F4A6CE, +/**/ 0xBF41ED7C, 0xD8213659, +/**/ 0x3F41EEBE, 0x5D000000, +/**/ 0x3D383EF4, 0x4AE68315, +/**/ 0xBF41FD78, 0x5B13314D, +/**/ 0x3F41FEBC, 0x1E600000, +/**/ 0xBD199E1E, 0x39A8276A, +/**/ 0xBF420D73, 0xDA06DBC8, +/**/ 0x3F420EB9, 0xDDA00000, +/**/ 0x3D3C11BF, 0xE39F6D77, +/**/ 0xBF421D6F, 0x54FC3749, +/**/ 0x3F421EB7, 0x9B000000, +/**/ 0xBCD50D72, 0xC3A8C440, +/**/ 0xBF422D6A, 0xCBF3454F, +/**/ 0x3F422EB5, 0x56600000, +/**/ 0xBD3B9869, 0x06E59170, +/**/ 0xBF423D66, 0x3EEC0759, +/**/ 0x3F423EB3, 0x0FA00000, +/**/ 0x3D248C4B, 0x86930551, +/**/ 0xBF424D61, 0xADE67EE6, +/**/ 0x3F424EB0, 0xC7000000, +/**/ 0xBD2D6F13, 0xB3649FF7, +/**/ 0xBF425D5D, 0x18E2AD76, +/**/ 0x3F425EAE, 0x7C400000, +/**/ 0x3D396F87, 0xB496441D, +/**/ 0xBF426D58, 0x7FE09487, +/**/ 0x3F426EAC, 0x2FA00000, +/**/ 0x3D05E2D0, 0x01961A2F, +/**/ 0xBF427D53, 0xE2E03598, +/**/ 0x3F427EA9, 0xE1000000, +/**/ 0xBD32D013, 0x652D1720, +/**/ 0xBF428D4F, 0x41E1922A, +/**/ 0x3F428EA7, 0x90400000, +/**/ 0x3D38CB3F, 0x15C6A78A, +/**/ 0xBF429D4A, 0x9CE4ABBA, +/**/ 0x3F429EA5, 0x3DA00000, +/**/ 0x3D163D44, 0x07F8A52A, +/**/ 0xBF42AD45, 0xF3E983C8, +/**/ 0x3F42AEA2, 0xE9000000, +/**/ 0xBD2905BC, 0x1FEC6070, +/**/ 0xBF42BD41, 0x46F01BD4, +/**/ 0x3F42BEA0, 0x92600000, +/**/ 0xBD3D6A4E, 0x8FE5CB8E, +/**/ 0xBF42CD3C, 0x95F8755C, +/**/ 0x3F42CE9E, 0x39A00000, +/**/ 0x3D32D9FF, 0x120028B6, +/**/ 0xBF42DD37, 0xE10291DF, +/**/ 0x3F42DE9B, 0xDF000000, +/**/ 0x3D112C29, 0x94B2D8A6, +/**/ 0xBF42ED33, 0x280E72DD, +/**/ 0x3F42EE99, 0x82600000, +/**/ 0xBD222C5A, 0x0E9DC27F, +/**/ 0xBF42FD2E, 0x6B1C19D4, +/**/ 0x3F42FE97, 0x23C00000, +/**/ 0xBD3548A7, 0xA4C12307, +/**/ 0xBF430D29, 0xAA2B8844, +/**/ 0x3F430E94, 0xC3000000, +/**/ 0x3D3FB49A, 0x1B27A40C, +/**/ 0xBF431D24, 0xE53CBFAC, +/**/ 0x3F431E92, 0x60600000, +/**/ 0x3D35E297, 0xC65D601D, +/**/ 0xBF432D20, 0x1C4FC18B, +/**/ 0x3F432E8F, 0xFBC00000, +/**/ 0x3D2A84A1, 0xD4E46CD5, +/**/ 0xBF433D1B, 0x4F648F60, +/**/ 0x3F433E8D, 0x95200000, +/**/ 0x3D175314, 0x526215F8, +/**/ 0xBF434D16, 0x7E7B2AAB, +/**/ 0x3F434E8B, 0x2C800000, +/**/ 0xBCD9430B, 0x9746A94C, +/**/ 0xBF435D11, 0xA99394E9, +/**/ 0x3F435E88, 0xC1E00000, +/**/ 0xBD15A88D, 0x47EF6144, +/**/ 0xBF436D0C, 0xD0ADCF9B, +/**/ 0x3F436E86, 0x55400000, +/**/ 0xBD227301, 0x94614FFB, +/**/ 0xBF437D07, 0xF3C9DC3F, +/**/ 0x3F437E83, 0xE6A00000, +/**/ 0xBD27A44A, 0x16908831, +/**/ 0xBF438D03, 0x12E7BC55, +/**/ 0x3F438E81, 0x76000000, +/**/ 0xBD2A6621, 0x13DE59AC, +/**/ 0xBF439CFE, 0x2E07715C, +/**/ 0x3F439E7F, 0x03600000, +/**/ 0xBD2AB687, 0x76635000, +/**/ 0xBF43ACF9, 0x4528FCD2, +/**/ 0x3F43AE7C, 0x8EC00000, +/**/ 0xBD28937E, 0x28F7818F, +/**/ 0xBF43BCF4, 0x584C6037, +/**/ 0x3F43BE7A, 0x18200000, +/**/ 0xBD23FB06, 0x17328F27, +/**/ 0xBF43CCEF, 0x67719D0A, +/**/ 0x3F43CE77, 0x9F800000, +/**/ 0xBD19D640, 0x5AD74747, +/**/ 0xBF43DCEA, 0x7298B4CA, +/**/ 0x3F43DE75, 0x24E00000, +/**/ 0xBCFB0E6A, 0xC5CB9C74, +/**/ 0xBF43ECE5, 0x79C1A8F6, +/**/ 0x3F43EE72, 0xA8400000, +/**/ 0x3D1145E2, 0xF21B8682, +/**/ 0xBF43FCE0, 0x7CEC7B0D, +/**/ 0x3F43FE70, 0x29A00000, +/**/ 0x3D27251B, 0x59543A06, +/**/ 0xBF440CDB, 0x7C192C8E, +/**/ 0x3F440E6D, 0xA9000000, +/**/ 0x3D341357, 0xAC6250B6, +/**/ 0xBF441CD6, 0x7747BEF8, +/**/ 0x3F441E6B, 0x26600000, +/**/ 0x3D3DD4D6, 0x43A510F7, +/**/ 0xBF442CD1, 0x6E7833CB, +/**/ 0x3F442E68, 0xA1E00000, +/**/ 0xBD3727F7, 0x05F7D1E1, +/**/ 0xBF443CCC, 0x61AA8C85, +/**/ 0x3F443E66, 0x1B400000, +/**/ 0xBD25C421, 0x527C9668, +/**/ 0xBF444CC7, 0x50DECAA5, +/**/ 0x3F444E63, 0x92A00000, +/**/ 0x3D053C47, 0x053F70AC, +/**/ 0xBF445CC2, 0x3C14EFAB, +/**/ 0x3F445E61, 0x08000000, +/**/ 0x3D3175D5, 0x1E315FBB, +/**/ 0xBF446CBD, 0x234CFD15, +/**/ 0x3F446E5E, 0x7B800000, +/**/ 0xBD3E762C, 0x6A8B33AC, +/**/ 0xBF447CB8, 0x0686F463, +/**/ 0x3F447E5B, 0xECE00000, +/**/ 0xBD2A36F8, 0x67AD9900, +/**/ 0xBF448CB2, 0xE5C2D713, +/**/ 0x3F448E59, 0x5C400000, +/**/ 0x3D161B95, 0x1E974853, +/**/ 0xBF449CAD, 0xC100A6A5, +/**/ 0x3F449E56, 0xC9A00000, +/**/ 0x3D3971F7, 0x8CE22250, +/**/ 0xBF44ACA8, 0x98406498, +/**/ 0x3F44AE54, 0x35200000, +/**/ 0xBD315945, 0xDF8A23F8, +/**/ 0xBF44BCA3, 0x6B82126A, +/**/ 0x3F44BE51, 0x9E800000, +/**/ 0x3D1498B2, 0x1A63D360, +/**/ 0xBF44CC9E, 0x3AC5B19B, +/**/ 0x3F44CE4F, 0x05E00000, +/**/ 0x3D3CF14E, 0x4323A054, +/**/ 0xBF44DC99, 0x060B43AA, +/**/ 0x3F44DE4C, 0x6B600000, +/**/ 0xBD23EDC2, 0x4CE35F94, +/**/ 0xBF44EC93, 0xCD52CA15, +/**/ 0x3F44EE49, 0xCEC00000, +/**/ 0x3D306E9D, 0xCCF1B48E, +/**/ 0xBF44FC8E, 0x909C465C, +/**/ 0x3F44FE47, 0x30400000, +/**/ 0xBD33DD35, 0x5FF9440B, +/**/ 0xBF450C89, 0x4FE7B9FF, +/**/ 0x3F450E44, 0x8FA00000, +/**/ 0x3D224D49, 0xAA4D276D, +/**/ 0xBF451C84, 0x0B35267A, +/**/ 0x3F451E41, 0xED200000, +/**/ 0xBD3884D4, 0x11B557F9, +/**/ 0xBF452C7E, 0xC2848D4F, +/**/ 0x3F452E3F, 0x48800000, +/**/ 0x3D1C857D, 0xB43290C4, +/**/ 0xBF453C79, 0x75D5EFFC, +/**/ 0x3F453E3C, 0xA2000000, +/**/ 0xBD37E5C1, 0x2D598D3C, +/**/ 0xBF454C74, 0x25294FFF, +/**/ 0x3F454E39, 0xF9600000, +/**/ 0x3D24CD93, 0x3FE47B89, +/**/ 0xBF455C6E, 0xD07EAED8, +/**/ 0x3F455E37, 0x4EE00000, +/**/ 0xBD31F800, 0xAA959122, +/**/ 0xBF456C69, 0x77D60E06, +/**/ 0x3F456E34, 0xA2400000, +/**/ 0x3D32FEDF, 0x7329AF92, +/**/ 0xBF457C64, 0x1B2F6F08, +/**/ 0x3F457E31, 0xF3C00000, +/**/ 0xBD1ACE5A, 0x1C545A6F, +/**/ 0xBF458C5E, 0xBA8AD35D, +/**/ 0x3F458E2F, 0x43400000, +/**/ 0xBD3F0E63, 0x19F6B9EF, +/**/ 0xBF459C59, 0x55E83C84, +/**/ 0x3F459E2C, 0x90A00000, +/**/ 0x3D23DEF2, 0x73005F6F, +/**/ 0xBF45AC53, 0xED47ABFB, +/**/ 0x3F45AE29, 0xDC200000, +/**/ 0xBD277204, 0x1C295DE7, +/**/ 0xBF45BC4E, 0x80A92343, +/**/ 0x3F45BE27, 0x25800000, +/**/ 0x3D3FF92A, 0x8D869589, +/**/ 0xBF45CC49, 0x100CA3D9, +/**/ 0x3F45CE24, 0x6D000000, +/**/ 0x3D2A0DFD, 0x145C5335, +/**/ 0xBF45DC43, 0x9B722F3C, +/**/ 0x3F45DE21, 0xB2800000, +/**/ 0xBD123A1A, 0x6A8614B3, +/**/ 0xBF45EC3E, 0x22D9C6ED, +/**/ 0x3F45EE1E, 0xF6000000, +/**/ 0xBD34C665, 0x63CBC7E7, +/**/ 0xBF45FC38, 0xA6436C69, +/**/ 0x3F45FE1C, 0x37600000, +/**/ 0x3D3C6061, 0xAB6C51D7, +/**/ 0xBF460C33, 0x25AF2130, +/**/ 0x3F460E19, 0x76E00000, +/**/ 0x3D2DCD9C, 0x1EC7F453, +/**/ 0xBF461C2D, 0xA11CE6C1, +/**/ 0x3F461E16, 0xB4600000, +/**/ 0x3D066EFA, 0x20C52899, +/**/ 0xBF462C28, 0x188CBE9A, +/**/ 0x3F462E13, 0xEFE00000, +/**/ 0xBD1FA5AC, 0xEB5FDD5C, +/**/ 0xBF463C22, 0x8BFEAA3B, +/**/ 0x3F463E11, 0x29600000, +/**/ 0xBD313E11, 0xF22FE2BC, +/**/ 0xBF464C1C, 0xFB72AB23, +/**/ 0x3F464E0E, 0x60E00000, +/**/ 0xBD392F15, 0x6710E251, +/**/ 0xBF465C17, 0x66E8C2D0, +/**/ 0x3F465E0B, 0x96600000, +/**/ 0xBD3FBB76, 0x1EFC78A7, +/**/ 0xBF466C11, 0xCE60F2C1, +/**/ 0x3F466E08, 0xC9C00000, +/**/ 0x3D3B1DCB, 0x602C1A84, +/**/ 0xBF467C0C, 0x31DB3C76, +/**/ 0x3F467E05, 0xFB400000, +/**/ 0x3D375DAE, 0x9027DA74, +/**/ 0xBF468C06, 0x9157A16E, +/**/ 0x3F468E03, 0x2AC00000, +/**/ 0x3D350532, 0xEA560DA0, +/**/ 0xBF469C00, 0xECD62326, +/**/ 0x3F469E00, 0x58400000, +/**/ 0x3D341557, 0xE7B63DE2 } }; + +#else +#ifdef LITTLE_ENDI +static const union {int4 i[5800]; double x[2900];} ui = { .i = { +/**/ 0x00000000, 0x3FF6A000, +/**/ 0x3729043E, 0x3F33CD15, +/**/ 0x0B3AB000, 0xBFD63003, +/**/ 0xE731AE00, 0x3D2DB623, +/**/ 0x00000000, 0x3FF69800, +/**/ 0xCC7267D0, 0x3F33F349, +/**/ 0xCDB03000, 0xBFD61965, +/**/ 0x603C488E, 0x3D2F08AD, +/**/ 0x00000000, 0x3FF69000, +/**/ 0x8D0BFD2E, 0x3F3473A8, +/**/ 0x8AF09000, 0xBFD602D0, +/**/ 0x76DF3F65, 0xBD1EBE91, +/**/ 0x00000000, 0x3FF68800, +/**/ 0x390B9ED0, 0x3F354DD2, +/**/ 0x3D5C3000, 0xBFD5EC43, +/**/ 0x1229D17F, 0xBD36B71A, +/**/ 0x00000000, 0x3FF68000, +/**/ 0x16816817, 0x3F368168, +/**/ 0xDF596000, 0xBFD5D5BD, +/**/ 0x08A465DC, 0x3D0A0B2A, +/**/ 0x00000000, 0x3FF67800, +/**/ 0xF08C7765, 0x3F380E0B, +/**/ 0x6B544000, 0xBFD5BF40, +/**/ 0xEB68981C, 0x3D227023, +/**/ 0x00000000, 0x3FF67000, +/**/ 0x16719F36, 0x3F39F360, +/**/ 0xDBBEE000, 0xBFD5A8CA, +/**/ 0x0AF7ECF8, 0x3CF7C79B, +/**/ 0x00000000, 0x3FF66800, +/**/ 0x5AB40167, 0x3F3C3107, +/**/ 0x2B113000, 0xBFD5925D, +/**/ 0xA7A56F34, 0x3D369BF5, +/**/ 0x00000000, 0x3FF66000, +/**/ 0x122F9016, 0x3F3EC6A5, +/**/ 0x53C8D000, 0xBFD57BF7, +/**/ 0xEE5D40EF, 0xBD1FADED, +/**/ 0x00000000, 0x3FF65C00, +/**/ 0xECCA9097, 0xBF3E4C22, +/**/ 0x50695000, 0xBFD56599, +/**/ 0x2BADC774, 0xBD14C5FD, +/**/ 0x00000000, 0x3FF65400, +/**/ 0x4B55CC62, 0xBF3B07AC, +/**/ 0x1B7BE000, 0xBFD54F43, +/**/ 0xC0910952, 0xBD1A8954, +/**/ 0x00000000, 0x3FF64C00, +/**/ 0x32DA090E, 0xBF376C52, +/**/ 0xAF8F7000, 0xBFD538F4, +/**/ 0xE45547CE, 0xBD27EC02, +/**/ 0x00000000, 0x3FF64400, +/**/ 0x4DE9BD38, 0xBF337A6F, +/**/ 0x0738A000, 0xBFD522AE, +/**/ 0x8164C759, 0xBD2EBE70, +/**/ 0x00000000, 0x3FF63C00, +/**/ 0x923C708B, 0xBF2E64BB, +/**/ 0x1D11C000, 0xBFD50C6F, +/**/ 0x7E827C2C, 0x3D3A0E6B, +/**/ 0x00000000, 0x3FF63400, +/**/ 0xA7E43FD4, 0xBF2528EE, +/**/ 0xEBBAA000, 0xBFD4F637, +/**/ 0xCB3124B9, 0x3D3FC158, +/**/ 0x00000000, 0x3FF62C00, +/**/ 0x86689DF7, 0xBF168454, +/**/ 0x6DD8C000, 0xBFD4E008, +/**/ 0xA1E44788, 0x3D34D692, +/**/ 0x00000000, 0x3FF62400, +/**/ 0x77016240, 0xBED623FA, +/**/ 0x9E173000, 0xBFD4C9E0, +/**/ 0x1B0AD8A4, 0x3D2E2089, +/**/ 0x00000000, 0x3FF61C00, +/**/ 0x58715130, 0x3F151300, +/**/ 0x77268000, 0xBFD4B3C0, +/**/ 0x81052B9F, 0x3D165B46, +/**/ 0x00000000, 0x3FF61400, +/**/ 0x35D2754E, 0x3F266D06, +/**/ 0xF3BCC000, 0xBFD49DA7, +/**/ 0x4DAF4B9A, 0xBD307B33, +/**/ 0x00000000, 0x3FF60C00, +/**/ 0xDA197F23, 0x3F317C61, +/**/ 0x0E958000, 0xBFD48797, +/**/ 0x465CF25F, 0xBD3DC1B8, +/**/ 0x00000000, 0x3FF60400, +/**/ 0x81605816, 0x3F381605, +/**/ 0xC271C000, 0xBFD4718D, +/**/ 0xFB4C14C5, 0xBD306C18, +/**/ 0x00000000, 0x3FF5FC00, +/**/ 0xB5C6F559, 0x3F3F0317, +/**/ 0x0A17E000, 0xBFD45B8C, +/**/ 0xE7D0A853, 0x3D0D9120, +/**/ 0x00000000, 0x3FF5F800, +/**/ 0x6D2041E3, 0xBF39BCBD, +/**/ 0xE053A000, 0xBFD44591, +/**/ 0x92923D88, 0x3D06E958, +/**/ 0x00000000, 0x3FF5F000, +/**/ 0x5604CC40, 0xBF3229CF, +/**/ 0x3FF62000, 0xBFD42F9F, +/**/ 0x0F7D3354, 0xBD390644, +/**/ 0x00000000, 0x3FF5E800, +/**/ 0xFD431489, 0xBF2488E5, +/**/ 0x23D5F000, 0xBFD419B4, +/**/ 0x226DE3EC, 0x3D3CE379, +/**/ 0x00000000, 0x3FF5E000, +/**/ 0x6424E9C9, 0xBF0067E7, +/**/ 0x86CEA000, 0xBFD403D0, +/**/ 0x74487308, 0xBD3E6EF5, +/**/ 0x00000000, 0x3FF5D800, +/**/ 0x38A94D24, 0x3F19F0FB, +/**/ 0x63C17000, 0xBFD3EDF4, +/**/ 0x297F2C3F, 0x3D3F067C, +/**/ 0x00000000, 0x3FF5D000, +/**/ 0x23CAD2AA, 0x3F2EADD9, +/**/ 0xB5947000, 0xBFD3D81F, +/**/ 0x2A9D37A4, 0x3D222C7C, +/**/ 0x00000000, 0x3FF5C800, +/**/ 0x31057262, 0x3F3882B9, +/**/ 0x77333000, 0xBFD3C252, +/**/ 0xB606BD5C, 0xBD183B54, +/**/ 0x00000000, 0x3FF5C400, +/**/ 0x10FFA8F8, 0xBF3E00AE, +/**/ 0xA38E6000, 0xBFD3AC8C, +/**/ 0xBC02BE4A, 0x3D2D0BEF, +/**/ 0x00000000, 0x3FF5BC00, +/**/ 0x8056EAF3, 0xBF34339B, +/**/ 0x359BC000, 0xBFD396CE, +/**/ 0x5663663D, 0x3D05839C, +/**/ 0x00000000, 0x3FF5B400, +/**/ 0xF31D7FD5, 0xBF242CC1, +/**/ 0x28565000, 0xBFD38117, +/**/ 0x93A0702B, 0x3D2A71E4, +/**/ 0x00000000, 0x3FF5AC00, +/**/ 0x6B015AC0, 0x3ED5AC05, +/**/ 0x76BE1000, 0xBFD36B67, +/**/ 0xB0F177C8, 0xBD116ECD, +/**/ 0x00000000, 0x3FF5A400, +/**/ 0x5BA55E5A, 0x3F26268D, +/**/ 0x1BD83000, 0xBFD355BF, +/**/ 0x8964F0E8, 0x3D2BA99B, +/**/ 0x00000000, 0x3FF59C00, +/**/ 0x3CCAA376, 0x3F361F12, +/**/ 0x12AED000, 0xBFD3401E, +/**/ 0x556E291D, 0x3D317C73, +/**/ 0x00000000, 0x3FF59800, +/**/ 0x62D32417, 0xBF3E863D, +/**/ 0x56512000, 0xBFD32A84, +/**/ 0x139AF5D6, 0xBD04F928, +/**/ 0x00000000, 0x3FF59000, +/**/ 0xEA712DCF, 0xBF32DCF7, +/**/ 0xE1D36000, 0xBFD314F1, +/**/ 0xD3213CB8, 0x3D28E27A, +/**/ 0x00000000, 0x3FF58800, +/**/ 0xA0CC87E8, 0xBF1B95B2, +/**/ 0xB04EB000, 0xBFD2FF66, +/**/ 0x541E6E2E, 0x3D38AED2, +/**/ 0x00000000, 0x3FF58000, +/**/ 0x01580560, 0x3F158056, +/**/ 0xBCE12000, 0xBFD2E9E2, +/**/ 0x128D1DC2, 0xBD24300C, +/**/ 0x00000000, 0x3FF57800, +/**/ 0x15791F34, 0x3F31F340, +/**/ 0x02ADD000, 0xBFD2D466, +/**/ 0xDCD54196, 0x3D288D0D, +/**/ 0x00000000, 0x3FF57000, +/**/ 0x06B39A23, 0x3F3ED3C5, +/**/ 0x7CDC9000, 0xBFD2BEF0, +/**/ 0x4A5004F4, 0xBD2A9CFA, +/**/ 0x00000000, 0x3FF56C00, +/**/ 0x53FEA954, 0xBF33FEA9, +/**/ 0x269A4000, 0xBFD2A982, +/**/ 0x557285CF, 0x3D22058E, +/**/ 0x00000000, 0x3FF56400, +/**/ 0xEB478503, 0xBF1A1160, +/**/ 0xFB187000, 0xBFD2941A, +/**/ 0xB730E28B, 0x3D3210C2, +/**/ 0x00000000, 0x3FF55C00, +/**/ 0xE4A18B2E, 0x3F1D09AD, +/**/ 0xF58D9000, 0xBFD27EBA, +/**/ 0x00B4BDA7, 0x3D2B1988, +/**/ 0x00000000, 0x3FF55400, +/**/ 0x55555555, 0x3F355555, +/**/ 0x1134E000, 0xBFD26962, +/**/ 0x10522625, 0x3D31B61F, +/**/ 0x00000000, 0x3FF55000, +/**/ 0xB319A21F, 0xBF3C4BE6, +/**/ 0x494E5000, 0xBFD25410, +/**/ 0xC0EF77F2, 0xBD3B1D7A, +/**/ 0x00000000, 0x3FF54800, +/**/ 0x8FA03FD5, 0xBF2B4328, +/**/ 0x991EC000, 0xBFD23EC5, +/**/ 0x48A2E522, 0x3D36DBE4, +/**/ 0x00000000, 0x3FF54000, +/**/ 0x40154015, 0x3EF54015, +/**/ 0xFBEF8000, 0xBFD22981, +/**/ 0x609580DA, 0x3D3A1421, +/**/ 0x00000000, 0x3FF53800, +/**/ 0x40FEAC6F, 0x3F30948F, +/**/ 0x6D0EC000, 0xBFD21445, +/**/ 0x28B728A3, 0x3D3CAF04, +/**/ 0x00000000, 0x3FF53400, +/**/ 0xFD04F7B8, 0xBF3FE034, +/**/ 0xE7CF4000, 0xBFD1FF0F, +/**/ 0x513FF0C1, 0xBD3E9D5B, +/**/ 0x00000000, 0x3FF52C00, +/**/ 0x7FAB5403, 0xBF300A95, +/**/ 0x6788A000, 0xBFD1E9E1, +/**/ 0xD3C8B65E, 0x3D382EAE, +/**/ 0x00000000, 0x3FF52400, +/**/ 0x52401524, 0x3EB52401, +/**/ 0xE796C000, 0xBFD1D4B9, +/**/ 0x7C42E56D, 0xBD222A66, +/**/ 0x00000000, 0x3FF51C00, +/**/ 0x2F8151D0, 0x3F307EAE, +/**/ 0x635A7000, 0xBFD1BF99, +/**/ 0x575C2125, 0x3D31AC89, +/**/ 0x00000000, 0x3FF51800, +/**/ 0xEAE9ECE4, 0xBF3ECE3F, +/**/ 0xD638D000, 0xBFD1AA7F, +/**/ 0x9616F7A0, 0xBD29F60A, +/**/ 0x00000000, 0x3FF51000, +/**/ 0xC7675243, 0xBF2BA3DD, +/**/ 0x3B9BC000, 0xBFD1956D, +/**/ 0x3AD1AA14, 0xBD27D2F7, +/**/ 0x00000000, 0x3FF50800, +/**/ 0x764E368D, 0x3F0B9AC8, +/**/ 0x8EF19000, 0xBFD18061, +/**/ 0xC86D38E5, 0x3D3482FF, +/**/ 0x00000000, 0x3FF50000, +/**/ 0x15015015, 0x3F350150, +/**/ 0xCBAD0000, 0xBFD16B5C, +/**/ 0x042D74BF, 0x3D323299, +/**/ 0x00000000, 0x3FF4FC00, +/**/ 0x4A683C50, 0xBF392851, +/**/ 0xED456000, 0xBFD1565E, +/**/ 0xFB6ABA25, 0x3CEE75AD, +/**/ 0x00000000, 0x3FF4F400, +/**/ 0xACD95EF0, 0xBF1C2748, +/**/ 0xEF367000, 0xBFD14167, +/**/ 0x824DAAF5, 0xBD3E0C07, +/**/ 0x00000000, 0x3FF4EC00, +/**/ 0x67A47465, 0x3F26B90D, +/**/ 0xCD007000, 0xBFD12C77, +/**/ 0x8A11F797, 0xBD13B294, +/**/ 0x00000000, 0x3FF4E400, +/**/ 0xF0539783, 0x3F3E0A72, +/**/ 0x8227E000, 0xBFD1178E, +/**/ 0xCE2D07F2, 0xBD31EF78, +/**/ 0x00000000, 0x3FF4E000, +/**/ 0xF87FD642, 0xBF2E00A6, +/**/ 0x0A35D000, 0xBFD102AC, +/**/ 0xDFDFD686, 0x3D2F1FBD, +/**/ 0x00000000, 0x3FF4D800, +/**/ 0x0B12E3FD, 0x3F10EFB7, +/**/ 0x60B78000, 0xBFD0EDD0, +/**/ 0x2D8435F5, 0xBD0019B5, +/**/ 0x00000000, 0x3FF4D000, +/**/ 0x5CB4DBE5, 0x3F37BEF1, +/**/ 0x813EB000, 0xBFD0D8FB, +/**/ 0x8753FA35, 0xBD1EE8C8, +/**/ 0x00000000, 0x3FF4CC00, +/**/ 0xA50918B1, 0xBF34778D, +/**/ 0x67616000, 0xBFD0C42D, +/**/ 0x163CEAE9, 0xBD27188B, +/**/ 0x00000000, 0x3FF4C400, +/**/ 0xE37288EC, 0xBED9F4F7, +/**/ 0x0EB9E000, 0xBFD0AF66, +/**/ 0xF528D80A, 0xBD23C7C3, +/**/ 0x00000000, 0x3FF4BC00, +/**/ 0x68FE0E42, 0x3F33EDDA, +/**/ 0x72E6C000, 0xBFD09AA5, +/**/ 0xE1734342, 0xBD3B50A1, +/**/ 0x00000000, 0x3FF4B800, +/**/ 0xB72E47D9, 0xBF3776C6, +/**/ 0x8F8AE000, 0xBFD085EB, +/**/ 0x3F45FE7B, 0xBD3E5D51, +/**/ 0x00000000, 0x3FF4B000, +/**/ 0xA052BF5B, 0xBF04AFD6, +/**/ 0x604D6000, 0xBFD07138, +/**/ 0x4E912B17, 0x3D3E7632, +/**/ 0x00000000, 0x3FF4A800, +/**/ 0xD5B5C015, 0x3F328FFA, +/**/ 0xE0D96000, 0xBFD05C8B, +/**/ 0xC77CCB58, 0xBD2AD0F1, +/**/ 0x00000000, 0x3FF4A400, +/**/ 0x9FEB5D80, 0xBF380528, +/**/ 0x0CDE8000, 0xBFD047E6, +/**/ 0x0D397F3C, 0xBD2DBDF1, +/**/ 0x00000000, 0x3FF49C00, +/**/ 0x25FF5B21, 0xBF02AD3E, +/**/ 0xE0106000, 0xBFD03346, +/**/ 0xA966395C, 0xBCF89FF8, +/**/ 0x00000000, 0x3FF49400, +/**/ 0x2D066EA2, 0x3F339E3B, +/**/ 0x5626C000, 0xBFD01EAE, +/**/ 0xFADE85AE, 0xBD3A43DC, +/**/ 0x00000000, 0x3FF49000, +/**/ 0xAFB2E932, 0xBF3629C1, +/**/ 0x6ADDA000, 0xBFD00A1C, +/**/ 0x688B9E18, 0xBD31CD8D, +/**/ 0x00000000, 0x3FF48800, +/**/ 0x22014880, 0x3ED48805, +/**/ 0x33EA0000, 0xBFCFEB22, +/**/ 0xDE00938B, 0xBD2F3418, +/**/ 0x00000000, 0x3FF48000, +/**/ 0x3D324D89, 0x3F37119F, +/**/ 0xBE620000, 0xBFCFC218, +/**/ 0x6F1CF6A0, 0xBD34BBA4, +/**/ 0x00000000, 0x3FF47C00, +/**/ 0x1EB851EC, 0xBF31EB85, +/**/ 0x6CB3C000, 0xBFCF991C, +/**/ 0xCD7CC834, 0x3D390D04, +/**/ 0x00000000, 0x3FF47400, +/**/ 0xAAFC7C01, 0x3F1569C9, +/**/ 0x36778000, 0xBFCF702D, +/**/ 0x16673E23, 0x3D108195, +/**/ 0x00000000, 0x3FF46C00, +/**/ 0x96066250, 0x3F3CE345, +/**/ 0x134E0000, 0xBFCF474B, +/**/ 0xF1DF7B5E, 0x3D3BAE49, +/**/ 0x00000000, 0x3FF46800, +/**/ 0x1D02DE87, 0xBF26A297, +/**/ 0xFADFA000, 0xBFCF1E75, +/**/ 0x25D83F6D, 0x3D20862B, +/**/ 0x00000000, 0x3FF46000, +/**/ 0xB9F34381, 0x3F2978FE, +/**/ 0xE4DD0000, 0xBFCEF5AD, +/**/ 0x65BB8E11, 0x3CCA2115, +/**/ 0x00000000, 0x3FF45C00, +/**/ 0xF6C71366, 0xBF3AF398, +/**/ 0xC8FEA000, 0xBFCECCF2, +/**/ 0xA3E75640, 0x3D3BEC63, +/**/ 0x00000000, 0x3FF45400, +/**/ 0x449AFF5D, 0xBF030E9C, +/**/ 0x9F04A000, 0xBFCEA444, +/**/ 0x63732A36, 0xBD35E916, +/**/ 0x00000000, 0x3FF44C00, +/**/ 0xF8B42EF3, 0x3F367190, +/**/ 0x5EB78000, 0xBFCE7BA3, +/**/ 0x23793649, 0x3D0D5EEE, +/**/ 0x00000000, 0x3FF44800, +/**/ 0xD260511C, 0xBF3079A9, +/**/ 0xFFE72000, 0xBFCE530E, +/**/ 0xB13F7C18, 0x3D3FDBDB, +/**/ 0x00000000, 0x3FF44000, +/**/ 0x0B644FBE, 0x3F21B87C, +/**/ 0x7A6B2000, 0xBFCE2A87, +/**/ 0x7787081A, 0xBD382381, +/**/ 0x00000000, 0x3FF43C00, +/**/ 0x411B2E25, 0xBF3D8CF5, +/**/ 0xC6236000, 0xBFCE020C, +/**/ 0xADB91424, 0x3D252B00, +/**/ 0x00000000, 0x3FF43400, +/**/ 0xD6A60978, 0xBF0DAC08, +/**/ 0xDAF6E000, 0xBFCDD99E, +/**/ 0x69C756EB, 0x3D302EC6, +/**/ 0x00000000, 0x3FF42C00, +/**/ 0x51F86EFA, 0x3F36625D, +/**/ 0xB0D48000, 0xBFCDB13D, +/**/ 0x847527E6, 0xBD32806A, +/**/ 0x00000000, 0x3FF42800, +/**/ 0xA8766564, 0xBF2E8B2D, +/**/ 0x3FB30000, 0xBFCD88E9, +/**/ 0x0234BF51, 0x3D375F28, +/**/ 0x00000000, 0x3FF42000, +/**/ 0xCB2A247B, 0x3F26A4CB, +/**/ 0x7F904000, 0xBFCD60A1, +/**/ 0x6FC20D39, 0x3D35D6E0, +/**/ 0x00000000, 0x3FF41C00, +/**/ 0xC17DF552, 0xBF39D5E8, +/**/ 0x68720000, 0xBFCD3866, +/**/ 0xB38932BC, 0x3D373650, +/**/ 0x00000000, 0x3FF41400, +/**/ 0x14141414, 0x3EF41414, +/**/ 0xF2656000, 0xBFCD1037, +/**/ 0x75B6F6E4, 0x3D084A7E, +/**/ 0x00000000, 0x3FF40C00, +/**/ 0x43AE87FD, 0x3F3C97A8, +/**/ 0x157F2000, 0xBFCCE816, +/**/ 0xA2099515, 0x3D29E0AB, +/**/ 0x00000000, 0x3FF40800, +/**/ 0x66A67E6F, 0xBF1F4BBC, +/**/ 0xC9DB4000, 0xBFCCC000, +/**/ 0x5D57AFF9, 0x3D1D6D58, +/**/ 0x00000000, 0x3FF40000, +/**/ 0x14014014, 0x3F340140, +/**/ 0x079D4000, 0xBFCC97F8, +/**/ 0xA8C6E6C5, 0xBD23B161, +/**/ 0x00000000, 0x3FF3FC00, +/**/ 0xFD809FD8, 0xBF2FD809, +/**/ 0xC6F00000, 0xBFCC6FFB, +/**/ 0xD3A69D43, 0xBD3EE138, +/**/ 0x00000000, 0x3FF3F400, +/**/ 0x57EE89D2, 0x3F28CA0E, +/**/ 0x0005C000, 0xBFCC480C, +/**/ 0xD5E44E76, 0xBD39A294, +/**/ 0x00000000, 0x3FF3F000, +/**/ 0xA50F9260, 0xBF370BD5, +/**/ 0xAB180000, 0xBFCC2028, +/**/ 0xE55C7AC6, 0x3D292E0E, +/**/ 0x00000000, 0x3FF3E800, +/**/ 0x75945FCE, 0x3F1704AA, +/**/ 0xC0676000, 0xBFCBF851, +/**/ 0x4C0854AD, 0x3D35420E, +/**/ 0x00000000, 0x3FF3E400, +/**/ 0xB56FD83C, 0xBF3D3431, +/**/ 0x383BE000, 0xBFCBD087, +/**/ 0x595412B6, 0x3D2D4BC4, +/**/ 0x00000000, 0x3FF3DC00, +/**/ 0x3DC013DC, 0x3EB3DC01, +/**/ 0x0AE4A000, 0xBFCBA8C9, +/**/ 0xF44432DA, 0xBD3A32E7, +/**/ 0x00000000, 0x3FF3D400, +/**/ 0xA75C5BBD, 0x3F3D991A, +/**/ 0x30B82000, 0xBFCB8117, +/**/ 0x3B9CD768, 0xBD1E9068, +/**/ 0x00000000, 0x3FF3D000, +/**/ 0x59C52F5D, 0xBF1292BA, +/**/ 0xA213A000, 0xBFCB5971, +/**/ 0x83AA91DF, 0xBD39B50E, +/**/ 0x00000000, 0x3FF3C800, +/**/ 0xBABE7440, 0x3F395A47, +/**/ 0x575BC000, 0xBFCB31D8, +/**/ 0x562A63CB, 0xBD3C794E, +/**/ 0x00000000, 0x3FF3C400, +/**/ 0x58A0943A, 0xBF20D475, +/**/ 0x48FC2000, 0xBFCB0A4B, +/**/ 0x5C3998ED, 0x3D22E72D, +/**/ 0x00000000, 0x3FF3BC00, +/**/ 0x3295482C, 0x3F360D92, +/**/ 0x6F672000, 0xBFCAE2CA, +/**/ 0xAE54F550, 0xBD37A8D5, +/**/ 0x00000000, 0x3FF3B800, +/**/ 0xCAB48651, 0xBF267D12, +/**/ 0xC316A000, 0xBFCABB55, +/**/ 0xCAF14CD8, 0x3D38A65A, +/**/ 0x00000000, 0x3FF3B000, +/**/ 0x13B13B14, 0x3F33B13B, +/**/ 0x3C8AE000, 0xBFCA93ED, +/**/ 0x50562169, 0x3D287243, +/**/ 0x00000000, 0x3FF3AC00, +/**/ 0x2C8FD3BF, 0xBF2A46AF, +/**/ 0xD44B8000, 0xBFCA6C90, +/**/ 0xF037B0C6, 0x3D3F63B7, +/**/ 0x00000000, 0x3FF3A400, +/**/ 0xAC822610, 0x3F324387, +/**/ 0x82E6A000, 0xBFCA4540, +/**/ 0xC81F7171, 0xBD360A77, +/**/ 0x00000000, 0x3FF3A000, +/**/ 0xA1923DEE, 0xBF2C34BB, +/**/ 0x40F1C000, 0xBFCA1DFC, +/**/ 0x004F3781, 0x3D301E0F, +/**/ 0x00000000, 0x3FF39800, +/**/ 0x87F63372, 0x3F31C2C1, +/**/ 0x0708A000, 0xBFC9F6C4, +/**/ 0x4BCD3F43, 0x3D3337D9, +/**/ 0x00000000, 0x3FF39400, +/**/ 0xE11BD52E, 0xBF2C4AA0, +/**/ 0xCDCE0000, 0xBFC9CF97, +/**/ 0x10C414E3, 0xBD3D862F, +/**/ 0x00000000, 0x3FF38C00, +/**/ 0x6088DBF4, 0x3F322D36, +/**/ 0x8DEBA000, 0xBFC9A877, +/**/ 0x3EFEC390, 0xBD3470FA, +/**/ 0x00000000, 0x3FF38800, +/**/ 0x503F774E, 0xBF2A8BBF, +/**/ 0x4011A000, 0xBFC98163, +/**/ 0x9E9045E2, 0xBD34EADD, +/**/ 0x00000000, 0x3FF38000, +/**/ 0x13813814, 0x3F338138, +/**/ 0xDCF70000, 0xBFC95A5A, +/**/ 0x58A0FF6F, 0xBD07F228, +/**/ 0x00000000, 0x3FF37C00, +/**/ 0x1B177053, 0xBF26FB6F, +/**/ 0x5D594000, 0xBFC9335E, +/**/ 0x3ABD47DA, 0xBD33115C, +/**/ 0x00000000, 0x3FF37400, +/**/ 0x945EDC20, 0x3F35BD1C, +/**/ 0xB9FCC000, 0xBFC90C6D, +/**/ 0x7718D7CA, 0x3D1935F5, +/**/ 0x00000000, 0x3FF37000, +/**/ 0x4DBDCC60, 0xBF219D00, +/**/ 0xEBAC2000, 0xBFC8E588, +/**/ 0xAB2D1140, 0xBD3B7D5C, +/**/ 0x00000000, 0x3FF36800, +/**/ 0xE0747954, 0x3F38DF3D, +/**/ 0xEB390000, 0xBFC8BEAF, +/**/ 0xAAE92CD1, 0x3D073D54, +/**/ 0x00000000, 0x3FF36400, +/**/ 0xD9D3C49F, 0xBF14E775, +/**/ 0xB17B2000, 0xBFC897E2, +/**/ 0x380CBE9E, 0x3D296B37, +/**/ 0x00000000, 0x3FF35C00, +/**/ 0xF2AF821E, 0x3F3CE5F9, +/**/ 0x3750E000, 0xBFC87121, +/**/ 0x42F9AF75, 0xBD3328EB, +/**/ 0x00000000, 0x3FF35800, +/**/ 0xE34971F2, 0xBEE82DF0, +/**/ 0x759F6000, 0xBFC84A6B, +/**/ 0x2ADF8609, 0x3D3DA280, +/**/ 0x00000000, 0x3FF35400, +/**/ 0x4873ECAE, 0xBF3E304D, +/**/ 0x6551A000, 0xBFC823C1, +/**/ 0x9A631E83, 0xBD1E0DDB, +/**/ 0x00000000, 0x3FF34C00, +/**/ 0x1FF659DB, 0x3F1264B6, +/**/ 0xFF59A000, 0xBFC7FD22, +/**/ 0xF457B7D2, 0x3D158BEB, +/**/ 0x00000000, 0x3FF34800, +/**/ 0xFECB9865, 0xBF386531, +/**/ 0x3CAF6000, 0xBFC7D690, +/**/ 0x17C301D7, 0x3D24C06B, +/**/ 0x00000000, 0x3FF34000, +/**/ 0xEEDA65AE, 0x3F25A8C2, +/**/ 0x16516000, 0xBFC7B009, +/**/ 0xCB067E57, 0x3D3AE75F, +/**/ 0x00000000, 0x3FF33C00, +/**/ 0x8434E1F4, 0xBF31BA4A, +/**/ 0x85444000, 0xBFC7898D, +/**/ 0xE3DBAF3F, 0xBD38E67B, +/**/ 0x00000000, 0x3FF33400, +/**/ 0xDBFC660A, 0x3F31EE97, +/**/ 0x82936000, 0xBFC7631D, +/**/ 0xC7C5F3E1, 0x3D25E77D, +/**/ 0x00000000, 0x3FF33000, +/**/ 0xBC40BFDA, 0xBF246252, +/**/ 0x074FE000, 0xBFC73CB9, +/**/ 0x0D0005A6, 0x3D3D66A9, +/**/ 0x00000000, 0x3FF32800, +/**/ 0x13299E64, 0x3F39E640, +/**/ 0x0C914000, 0xBFC71660, +/**/ 0x7CEC3838, 0xBCE51B15, +/**/ 0x00000000, 0x3FF32400, +/**/ 0xEF40991F, 0xBEFCB5D4, +/**/ 0x8B756000, 0xBFC6F012, +/**/ 0x0D31EF0F, 0xBD357739, +/**/ 0x00000000, 0x3FF32000, +/**/ 0xC823D892, 0xBF3D4632, +/**/ 0x7D204000, 0xBFC6C9D0, +/**/ 0xFD9B2DCA, 0x3CDC73FA, +/**/ 0x00000000, 0x3FF31800, +/**/ 0x7AED804C, 0x3F1DD63A, +/**/ 0xDABBE000, 0xBFC6A399, +/**/ 0xE66A15A6, 0x3D38F934, +/**/ 0x00000000, 0x3FF31400, +/**/ 0xE8C11E1A, 0xBF339849, +/**/ 0x9D786000, 0xBFC67D6E, +/**/ 0x30A706D3, 0x3D311E88, +/**/ 0x00000000, 0x3FF30C00, +/**/ 0x0D190131, 0x3F319013, +/**/ 0xBE8C2000, 0xBFC6574E, +/**/ 0x34F0F462, 0x3D398C1D, +/**/ 0x00000000, 0x3FF30800, +/**/ 0xB47A7FDA, 0xBF222315, +/**/ 0x37336000, 0xBFC6313A, +/**/ 0x4F21EA6D, 0x3D144DF5, +/**/ 0x00000000, 0x3FF30000, +/**/ 0x40260390, 0x3F3C82AC, +/**/ 0x00B0A000, 0xBFC60B31, +/**/ 0xC988F814, 0x3D371456, +/**/ 0x00000000, 0x3FF2FC00, +/**/ 0xA2430A62, 0x3F026443, +/**/ 0x144C2000, 0xBFC5E533, +/**/ 0xF3B290EA, 0x3D31CE0B, +/**/ 0x00000000, 0x3FF2F800, +/**/ 0xED097B42, 0xBF37B425, +/**/ 0x6B544000, 0xBFC5BF40, +/**/ 0xEB68981C, 0x3D127023, +/**/ 0x00000000, 0x3FF2F000, +/**/ 0x4AE0553C, 0x3F2D00E3, +/**/ 0xFF1D6000, 0xBFC59958, +/**/ 0x9769CA05, 0x3D3A1D05, +/**/ 0x00000000, 0x3FF2EC00, +/**/ 0x25D69D44, 0xBF262BC0, +/**/ 0xC9018000, 0xBFC5737C, +/**/ 0xA6B887F6, 0xBD39BAA7, +/**/ 0x00000000, 0x3FF2E400, +/**/ 0xE3103D6B, 0x3F3B88B5, +/**/ 0xC2610000, 0xBFC54DAB, +/**/ 0xE5C8D0D8, 0xBD2746FE, +/**/ 0x00000000, 0x3FF2E000, +/**/ 0xC04B8097, 0x3F02E025, +/**/ 0xE4A1C000, 0xBFC527E5, +/**/ 0x8D4B411D, 0x3D34E60B, +/**/ 0x00000000, 0x3FF2DC00, +/**/ 0x2C305021, 0xBF369C22, +/**/ 0x292F6000, 0xBFC5022B, +/**/ 0xFF36A25B, 0xBD348A05, +/**/ 0x00000000, 0x3FF2D400, +/**/ 0xD50A012D, 0x3F30A012, +/**/ 0x897BC000, 0xBFC4DC7B, +/**/ 0x0AE1FF0F, 0xBD0C79B6, +/**/ 0x00000000, 0x3FF2D000, +/**/ 0xBC66484E, 0xBF1FBE29, +/**/ 0xFEFE2000, 0xBFC4B6D6, +/**/ 0xF56E7952, 0xBD1522EC, +/**/ 0x00000000, 0x3FF2C800, +/**/ 0x12C9FB4E, 0x3F3FB4D8, +/**/ 0x8333C000, 0xBFC4913D, +/**/ 0x558124C4, 0x3D353E43, +/**/ 0x00000000, 0x3FF2C400, +/**/ 0x7004B11E, 0x3F1E3432, +/**/ 0x0F9F6000, 0xBFC46BAF, +/**/ 0x0790841A, 0x3D1249CD, +/**/ 0x00000000, 0x3FF2C000, +/**/ 0x5C8EF02F, 0xBF30671A, +/**/ 0x9DC9C000, 0xBFC4462B, +/**/ 0xA711B062, 0x3D384858, +/**/ 0x00000000, 0x3FF2B800, +/**/ 0xD548D9AC, 0x3F37D835, +/**/ 0x27410000, 0xBFC420B3, +/**/ 0xC85A0884, 0x3D116282, +/**/ 0x00000000, 0x3FF2B400, +/**/ 0xAD012B40, 0x3ED2B404, +/**/ 0xA5992000, 0xBFC3FB45, +/**/ 0xC0CAE559, 0xBD319713, +/**/ 0x00000000, 0x3FF2B000, +/**/ 0x8E7302A1, 0xBF370F78, +/**/ 0x126BC000, 0xBFC3D5E3, +/**/ 0x85096C4B, 0xBD13FB2F, +/**/ 0x00000000, 0x3FF2A800, +/**/ 0x3C1053F9, 0x3F31C92F, +/**/ 0x67580000, 0xBFC3B08B, +/**/ 0xF29320FB, 0x3D3AADE8, +/**/ 0x00000000, 0x3FF2A400, +/**/ 0x3DBE2E04, 0xBF14AD94, +/**/ 0x9E028000, 0xBFC38B3E, +/**/ 0x545C17F9, 0x3D370EF0, +/**/ 0x00000000, 0x3FF2A000, +/**/ 0xBED61BED, 0xBF3BED61, +/**/ 0xB015A000, 0xBFC365FC, +/**/ 0xAFB9691B, 0x3D3FD3A0, +/**/ 0x00000000, 0x3FF29800, +/**/ 0x26F004A6, 0x3F2B061A, +/**/ 0x97412000, 0xBFC340C5, +/**/ 0xF7D9D386, 0x3D37A3DC, +/**/ 0x00000000, 0x3FF29400, +/**/ 0xFF6B646D, 0xBF21B488, +/**/ 0x4D3A4000, 0xBFC31B99, +/**/ 0xE3A50810, 0xBD3F098E, +/**/ 0x00000000, 0x3FF29000, +/**/ 0x2CA5D5AC, 0xBF3F0582, +/**/ 0xCBBC0000, 0xBFC2F677, +/**/ 0x2160F40D, 0xBD352B30, +/**/ 0x00000000, 0x3FF28800, +/**/ 0x16025116, 0x3F260251, +/**/ 0x0C868000, 0xBFC2D161, +/**/ 0xCB81B4A1, 0xBD039D6C, +/**/ 0x00000000, 0x3FF28400, +/**/ 0x502065D2, 0xBF258CDF, +/**/ 0x095F6000, 0xBFC2AC55, +/**/ 0xD0C6C8A8, 0x3D1D3466, +/**/ 0x00000000, 0x3FF27C00, +/**/ 0x1CE4D6F8, 0x3F3FA38A, +/**/ 0xBC11A000, 0xBFC28753, +/**/ 0x359302E6, 0xBD37494E, +/**/ 0x00000000, 0x3FF27800, +/**/ 0xDCCA0781, 0x3F247DD5, +/**/ 0x1E6DE000, 0xBFC2625D, +/**/ 0xF09E3D82, 0x3CF52962, +/**/ 0x00000000, 0x3FF27400, +/**/ 0xDB195E8F, 0xBF25E8EF, +/**/ 0x2A49C000, 0xBFC23D71, +/**/ 0x8FD3DF5C, 0xBD100D23, +/**/ 0x00000000, 0x3FF27000, +/**/ 0xFFB647FE, 0xBF3FF6C8, +/**/ 0xD9808000, 0xBFC2188F, +/**/ 0x7F50C701, 0x3D3B3A1E, +/**/ 0x00000000, 0x3FF26800, +/**/ 0xC024D167, 0x3F266F9A, +/**/ 0x25F26000, 0xBFC1F3B9, +/**/ 0x9B083633, 0x3D15F74E, +/**/ 0x00000000, 0x3FF26400, +/**/ 0xEABD0E14, 0xBF22D1BD, +/**/ 0x09854000, 0xBFC1CEED, +/**/ 0x39192AF9, 0x3D315C1C, +/**/ 0x00000000, 0x3FF26000, +/**/ 0xF6D0EEC8, 0xBF3DD8F7, +/**/ 0x7E240000, 0xBFC1AA2B, +/**/ 0xDDE3B366, 0x3D31AC38, +/**/ 0x00000000, 0x3FF25800, +/**/ 0x2A241EF6, 0x3F2BCEB1, +/**/ 0x7DBEC000, 0xBFC18574, +/**/ 0x45BD9B49, 0xBD3E6744, +/**/ 0x00000000, 0x3FF25400, +/**/ 0xA21378D7, 0xBF18A05B, +/**/ 0x024B2000, 0xBFC160C8, +/**/ 0xA9009E3D, 0xBD2EC2D2, +/**/ 0x00000000, 0x3FF25000, +/**/ 0xD6CFA90C, 0xBF3A076F, +/**/ 0x05C3A000, 0xBFC13C26, +/**/ 0xD94F6509, 0x3D2CF5FD, +/**/ 0x00000000, 0x3FF24800, +/**/ 0x92492492, 0x3F324924, +/**/ 0x8227E000, 0xBFC1178E, +/**/ 0xCE2D07F2, 0xBD21EF78, +/**/ 0x00000000, 0x3FF24400, +/**/ 0x6151E899, 0xBEF3682B, +/**/ 0x717D0000, 0xBFC0F301, +/**/ 0x41AE86C5, 0x3D3E09B4, +/**/ 0x00000000, 0x3FF24000, +/**/ 0x89FA4C67, 0xBF34868E, +/**/ 0xCDCCC000, 0xBFC0CE7E, +/**/ 0xABFF5447, 0xBD14652D, +/**/ 0x00000000, 0x3FF23800, +/**/ 0x6B11F09F, 0x3F3858D8, +/**/ 0x91268000, 0xBFC0AA06, +/**/ 0xD7032129, 0x3D345519, +/**/ 0x00000000, 0x3FF23400, +/**/ 0xAF37C049, 0x3F159E26, +/**/ 0xB59E4000, 0xBFC08598, +/**/ 0x7009902C, 0x3D27E5DD, +/**/ 0x00000000, 0x3FF23000, +/**/ 0x2E076329, 0xBF2AB546, +/**/ 0x354D4000, 0xBFC06135, +/**/ 0x28340EE9, 0xBD363046, +/**/ 0x00000000, 0x3FF22C00, +/**/ 0xFEDD5FEE, 0xBF3FEDD5, +/**/ 0x0A51E000, 0xBFC03CDC, +/**/ 0xF169FC5C, 0xBD381A9C, +/**/ 0x00000000, 0x3FF22400, +/**/ 0x009126D7, 0x3F2B5B92, +/**/ 0x2ECF6000, 0xBFC0188D, +/**/ 0x1CFF9DFE, 0xBD03F965, +/**/ 0x00000000, 0x3FF22000, +/**/ 0x8121FB78, 0xBF121FB7, +/**/ 0x39DBC000, 0xBFBFE891, +/**/ 0xD82F7A82, 0xBD356594, +/**/ 0x00000000, 0x3FF21C00, +/**/ 0x3A459635, 0xBF368F22, +/**/ 0x9DB58000, 0xBFBFA01C, +/**/ 0xFA48A730, 0x3D08F351, +/**/ 0x00000000, 0x3FF21400, +/**/ 0x855E6012, 0x3F379804, +/**/ 0x7D900000, 0xBFBF57BC, +/**/ 0x9EA8B04E, 0xBD176A6C, +/**/ 0x00000000, 0x3FF21000, +/**/ 0x78CD7A37, 0x3F17B57C, +/**/ 0xCDD98000, 0xBFBF0F70, +/**/ 0x6C272C1E, 0xBD32E31F, +/**/ 0x00000000, 0x3FF20C00, +/**/ 0x07E4EF15, 0xBF271E73, +/**/ 0x830A0000, 0xBFBEC739, +/**/ 0xA80CDD10, 0xBD311FCB, +/**/ 0x00000000, 0x3FF20800, +/**/ 0x49392BA7, 0xBF3CDDEC, +/**/ 0x91A34000, 0xBFBE7F16, +/**/ 0x9BC77BFA, 0x3D32C1C5, +/**/ 0x00000000, 0x3FF20000, +/**/ 0x12012012, 0x3F320120, +/**/ 0xEE304000, 0xBFBE3707, +/**/ 0xE6766ABD, 0xBD20F684, +/**/ 0x00000000, 0x3FF1FC00, +/**/ 0xCE8AD1A2, 0x3EF0DC4F, +/**/ 0x8D468000, 0xBFBDEF0D, +/**/ 0x412E9A74, 0x3D324750, +/**/ 0x00000000, 0x3FF1F800, +/**/ 0xDC11F704, 0xBF2F7047, +/**/ 0x63844000, 0xBFBDA727, +/**/ 0x1FA71733, 0xBD1A8940, +/**/ 0x00000000, 0x3FF1F000, +/**/ 0x16B6419D, 0x3F3FAF3F, +/**/ 0x65920000, 0xBFBD5F55, +/**/ 0xCC185469, 0xBD30E239, +/**/ 0x00000000, 0x3FF1EC00, +/**/ 0xF70985E2, 0x3F2E878F, +/**/ 0x88218000, 0xBFBD1797, +/**/ 0xB5EFBEED, 0xBD336433, +/**/ 0x00000000, 0x3FF1E800, +/**/ 0x94D7FDC3, 0xBEEF55E4, +/**/ 0xBFEE0000, 0xBFBCCFED, +/**/ 0x2FE71256, 0xBD33A823, +/**/ 0x00000000, 0x3FF1E400, +/**/ 0x0478BBCF, 0xBF310C4C, +/**/ 0x01BC4000, 0xBFBC8858, +/**/ 0xC65AACD3, 0xBD2646D1, +/**/ 0x00000000, 0x3FF1DC00, +/**/ 0xCB840C49, 0x3F3F0ECB, +/**/ 0x425A4000, 0xBFBC40D6, +/**/ 0x1D1930DD, 0xBD3CB112, +/**/ 0x00000000, 0x3FF1D800, +/**/ 0xC9579074, 0x3F2EACE5, +/**/ 0x769FC000, 0xBFBBF968, +/**/ 0x8D824283, 0xBD24218C, +/**/ 0x00000000, 0x3FF1D400, +/**/ 0xFC60F0AE, 0xBECABDFA, +/**/ 0x936D8000, 0xBFBBB20E, +/**/ 0x35459B8E, 0x3D368BA8, +/**/ 0x00000000, 0x3FF1D000, +/**/ 0xAFDC61F3, 0xBF2F2A4B, +/**/ 0x8DAD4000, 0xBFBB6AC8, +/**/ 0xF50225C7, 0xBD3B1BDF, +/**/ 0x00000000, 0x3FF1CC00, +/**/ 0xAB802394, 0xBF3EC8AF, +/**/ 0x5A530000, 0xBFBB2396, +/**/ 0xEA137079, 0x3CEFF64E, +/**/ 0x00000000, 0x3FF1C400, +/**/ 0xCE058D9B, 0x3F322FC1, +/**/ 0xEE5B0000, 0xBFBADC77, +/**/ 0x09C31904, 0x3D3573B2, +/**/ 0x00000000, 0x3FF1C000, +/**/ 0xE0EFA2CF, 0x3F0AA04F, +/**/ 0x3ECAC000, 0xBFBA956D, +/**/ 0x4C02C4AF, 0xBD3E6379, +/**/ 0x00000000, 0x3FF1BC00, +/**/ 0x225ADFDD, 0xBF26B7F7, +/**/ 0x40B1C000, 0xBFBA4E76, +/**/ 0xB94407C8, 0x3D0E42B6, +/**/ 0x00000000, 0x3FF1B800, +/**/ 0x217CD13A, 0xBF39E073, +/**/ 0xE9278000, 0xBFBA0792, +/**/ 0xC9AD51BF, 0x3D0A9CE6, +/**/ 0x00000000, 0x3FF1B000, +/**/ 0x2BAE2B21, 0x3F37C67F, +/**/ 0x2D4D4000, 0xBFB9C0C3, +/**/ 0x9E838668, 0x3D3AB7C0, +/**/ 0x00000000, 0x3FF1AC00, +/**/ 0xBD720DCF, 0x3F23316E, +/**/ 0x024CC000, 0xBFB97A07, +/**/ 0x732093CE, 0x3CF8BCC1, +/**/ 0x00000000, 0x3FF1A800, +/**/ 0x611A7B96, 0xBF11A7B9, +/**/ 0x5D594000, 0xBFB9335E, +/**/ 0x3ABD47DA, 0xBD23115C, +/**/ 0x00000000, 0x3FF1A400, +/**/ 0xA1C1B8E7, 0xBF324195, +/**/ 0x33AEC000, 0xBFB8ECC9, +/**/ 0xBE67F7AA, 0x3D222F39, +/**/ 0x00000000, 0x3FF1A000, +/**/ 0xFEE61FEE, 0xBF3FEE61, +/**/ 0x7A91C000, 0xBFB8A647, +/**/ 0xAF9BD6DF, 0xBD3C28C0, +/**/ 0x00000000, 0x3FF19800, +/**/ 0x362B721D, 0x3F328F89, +/**/ 0x27508000, 0xBFB85FD9, +/**/ 0x19970C1C, 0x3D35B818, +/**/ 0x00000000, 0x3FF19400, +/**/ 0x28A70119, 0x3F14E023, +/**/ 0x2F410000, 0xBFB8197E, +/**/ 0x60D20041, 0x3D3C0FE4, +/**/ 0x00000000, 0x3FF19000, +/**/ 0x3E48FC6F, 0xBF1FD419, +/**/ 0x87C28000, 0xBFB7D336, +/**/ 0x3E706706, 0xBD33C88C, +/**/ 0x00000000, 0x3FF18C00, +/**/ 0xFD42546B, 0xBF34F7C6, +/**/ 0x263D8000, 0xBFB78D02, +/**/ 0x94B69FB7, 0xBD069B57, +/**/ 0x00000000, 0x3FF18400, +/**/ 0x01185E30, 0x3F3E2FA4, +/**/ 0x00228000, 0xBFB746E1, +/**/ 0x6E1E21D2, 0x3D3126D1, +/**/ 0x00000000, 0x3FF18000, +/**/ 0x11811812, 0x3F318118, +/**/ 0x0AEAC000, 0xBFB700D3, +/**/ 0xA99DED32, 0xBCEC1E8D, +/**/ 0x00000000, 0x3FF17C00, +/**/ 0xFF2E2C43, 0x3F13F1CA, +/**/ 0x3C188000, 0xBFB6BAD8, +/**/ 0xC08926AE, 0xBD0DAF3C, +/**/ 0x00000000, 0x3FF17800, +/**/ 0x0A5EF9FF, 0xBF1D79B9, +/**/ 0x89364000, 0xBFB674F0, +/**/ 0x4C9D3302, 0xBD3A7999, +/**/ 0x00000000, 0x3FF17400, +/**/ 0x1ECEA765, 0xBF338FAD, +/**/ 0xE7D78000, 0xBFB62F1B, +/**/ 0x7ED63C4E, 0x3D217995, +/**/ 0x00000000, 0x3FF17000, +/**/ 0xD8C8714B, 0xBF3F976B, +/**/ 0x4D978000, 0xBFB5E95A, +/**/ 0xE1D17171, 0xBD31CB7C, +/**/ 0x00000000, 0x3FF16800, +/**/ 0xB08FA497, 0x3F348A33, +/**/ 0xB01AC000, 0xBFB5A3AB, +/**/ 0x9E6AFA18, 0xBD3E2574, +/**/ 0x00000000, 0x3FF16400, +/**/ 0x864022C9, 0x3F21AA1F, +/**/ 0x050E0000, 0xBFB55E10, +/**/ 0x0C53C72E, 0xBD0C1D74, +/**/ 0x00000000, 0x3FF16000, +/**/ 0xB487BCAD, 0xBF05B7C9, +/**/ 0x42260000, 0xBFB51887, +/**/ 0x96258B3E, 0xBD330A1D, +/**/ 0x00000000, 0x3FF15C00, +/**/ 0x5B1E5F75, 0xBF2C3411, +/**/ 0x5D208000, 0xBFB4D311, +/**/ 0x82F4E1EF, 0x3CF53A25, +/**/ 0x00000000, 0x3FF15800, +/**/ 0xEEA99544, 0xBF39543F, +/**/ 0x4BC30000, 0xBFB48DAE, +/**/ 0x208C200C, 0xBD30185B, +/**/ 0x00000000, 0x3FF15000, +/**/ 0xDD5C8CB8, 0x3F3B9A3F, +/**/ 0x03DBC000, 0xBFB4485E, +/**/ 0xE8D26AB7, 0xBD3FAD46, +/**/ 0x00000000, 0x3FF14C00, +/**/ 0xB19AE5C7, 0x3F30B155, +/**/ 0x7B414000, 0xBFB40320, +/**/ 0xAA8157C0, 0xBD26FD84, +/**/ 0x00000000, 0x3FF14800, +/**/ 0xB34EDA32, 0x3F17C382, +/**/ 0xA7D20000, 0xBFB3BDF5, +/**/ 0xAD125895, 0x3D319BD0, +/**/ 0x00000000, 0x3FF14400, +/**/ 0xBAF129D0, 0xBF129CFF, +/**/ 0x7F748000, 0xBFB378DD, +/**/ 0x28F1FACA, 0xBD371411, +/**/ 0x00000000, 0x3FF14000, +/**/ 0x771B7C7F, 0xBF2E2E59, +/**/ 0xF8184000, 0xBFB333D7, +/**/ 0xA81B8848, 0x3CE692B6, +/**/ 0x00000000, 0x3FF13C00, +/**/ 0x30FE1D9C, 0xBF395F06, +/**/ 0x07B40000, 0xBFB2EEE5, +/**/ 0xDD77C860, 0xBD08081E, +/**/ 0x00000000, 0x3FF13400, +/**/ 0x5C81135D, 0x3F3C8113, +/**/ 0xA4470000, 0xBFB2AA04, +/**/ 0xA8B1CB41, 0xBD37A48B, +/**/ 0x00000000, 0x3FF13000, +/**/ 0xBB3B5DC0, 0x3F3288FF, +/**/ 0xC3D8C000, 0xBFB26536, +/**/ 0x097C5BA3, 0xBD0B4BAC, +/**/ 0x00000000, 0x3FF12C00, +/**/ 0xB81577AE, 0x3F21713D, +/**/ 0x5C784000, 0xBFB2207B, +/**/ 0xFC10C7BF, 0xBD349D8C, +/**/ 0x00000000, 0x3FF12800, +/**/ 0xBAD6FC84, 0xBEEE05E5, +/**/ 0x643D0000, 0xBFB1DBD2, +/**/ 0xD977C494, 0xBD390B24, +/**/ 0x00000000, 0x3FF12400, +/**/ 0x59F992BF, 0xBF24E314, +/**/ 0xD1464000, 0xBFB1973B, +/**/ 0x54F930B3, 0xBD3566D1, +/**/ 0x00000000, 0x3FF12000, +/**/ 0xC9F6E7A8, 0xBF33CB91, +/**/ 0x99BB4000, 0xBFB152B7, +/**/ 0x07030829, 0x3D09BB29, +/**/ 0x00000000, 0x3FF11C00, +/**/ 0x8B7D9851, 0xBF3CFE65, +/**/ 0xB3CB0000, 0xBFB10E45, +/**/ 0x284A3465, 0x3D37CF69, +/**/ 0x00000000, 0x3FF11400, +/**/ 0x29605DF7, 0x3F39F5DB, +/**/ 0x15AC4000, 0xBFB0C9E6, +/**/ 0x0974D976, 0xBD2C2DA8, +/**/ 0x00000000, 0x3FF11000, +/**/ 0x11111111, 0x3F311111, +/**/ 0xB59E4000, 0xBFB08598, +/**/ 0x7009902C, 0x3D17E5DD, +/**/ 0x00000000, 0x3FF10C00, +/**/ 0x12A5B1AE, 0x3F20A63A, +/**/ 0x89E74000, 0xBFB0415D, +/**/ 0x5CF1D753, 0xBD1111C0, +/**/ 0x00000000, 0x3FF10800, +/**/ 0xBE011080, 0xBED107FB, +/**/ 0x11AB8000, 0xBFAFFA69, +/**/ 0x98381A8F, 0xBD23008C, +/**/ 0x00000000, 0x3FF10400, +/**/ 0x6FEABBAE, 0xBF216989, +/**/ 0x51800000, 0xBFAF723B, +/**/ 0xDD5610D3, 0x3D3D6EB0, +/**/ 0x00000000, 0x3FF10000, +/**/ 0x10FEF011, 0xBF30FEF0, +/**/ 0xC0068000, 0xBFAEEA31, +/**/ 0x3606D891, 0xBD3C3DD8, +/**/ 0x00000000, 0x3FF0FC00, +/**/ 0x98CDDC74, 0xBF3922C0, +/**/ 0x4A0B8000, 0xBFAE624C, +/**/ 0x74676689, 0x3D30F25C, +/**/ 0x00000000, 0x3FF0F400, +/**/ 0x325A1A80, 0x3F3EDFAB, +/**/ 0xDC680000, 0xBFADDA8A, +/**/ 0x64D9E42F, 0x3D21B1AC, +/**/ 0x00000000, 0x3FF0F000, +/**/ 0xF27F9A57, 0x3F370834, +/**/ 0x64060000, 0xBFAD52ED, +/**/ 0x2A29BBD6, 0x3D33C85D, +/**/ 0x00000000, 0x3FF0EC00, +/**/ 0xD391FBC5, 0x3F2EAD7C, +/**/ 0xCDDD8000, 0xBFACCB73, +/**/ 0x6E09F5FE, 0xBD3965C3, +/**/ 0x00000000, 0x3FF0E800, +/**/ 0xE9479870, 0x3F1F2CA5, +/**/ 0x06F70000, 0xBFAC441E, +/**/ 0x49850D15, 0xBD354F1F, +/**/ 0x00000000, 0x3FF0E400, +/**/ 0x80439019, 0x3ED95609, +/**/ 0xFC690000, 0xBFABBCEB, +/**/ 0x8C317C2A, 0x3D17BF86, +/**/ 0x00000000, 0x3FF0E000, +/**/ 0xC6867596, 0xBF1B6B4D, +/**/ 0x9B588000, 0xBFAB35DD, +/**/ 0xD6CF558E, 0xBD3D5674, +/**/ 0x00000000, 0x3FF0DC00, +/**/ 0x172D4CE8, 0xBF2BEAEE, +/**/ 0xD0FB0000, 0xBFAAAEF2, +/**/ 0x353BB42E, 0xBD20FC1A, +/**/ 0x00000000, 0x3FF0D800, +/**/ 0x479071A9, 0xBF34EAB0, +/**/ 0x8A938000, 0xBFAA282B, +/**/ 0x80EFC8E3, 0x3D2E8F59, +/**/ 0x00000000, 0x3FF0D400, +/**/ 0xA61C62D3, 0xBF3BBA9C, +/**/ 0xB5740000, 0xBFA9A187, +/**/ 0x4EC4D90D, 0x3D30C22E, +/**/ 0x00000000, 0x3FF0CC00, +/**/ 0x77344011, 0x3F3D9AA6, +/**/ 0x3EFD8000, 0xBFA91B07, +/**/ 0x3F76CA96, 0x3D19D7C5, +/**/ 0x00000000, 0x3FF0C800, +/**/ 0xCDA3AC11, 0x3F3714FB, +/**/ 0x149F8000, 0xBFA894AA, +/**/ 0x8BE97661, 0xBD39A19A, +/**/ 0x00000000, 0x3FF0C400, +/**/ 0x391F2E61, 0x3F30B446, +/**/ 0x23D90000, 0xBFA80E70, +/**/ 0x6F28BF45, 0x3D399DC1, +/**/ 0x00000000, 0x3FF0C000, +/**/ 0x682E11CD, 0x3F24F0D1, +/**/ 0x5A358000, 0xBFA78859, +/**/ 0x083B3A4C, 0x3D108B0D, +/**/ 0x00000000, 0x3FF0BC00, +/**/ 0x5D5A36EA, 0x3F118519, +/**/ 0xA5510000, 0xBFA70265, +/**/ 0x11FD5CE7, 0x3D2888DF, +/**/ 0x00000000, 0x3FF0B800, +/**/ 0x62386CAB, 0xBEF913DA, +/**/ 0xF2D48000, 0xBFA67C94, +/**/ 0x827CCA0C, 0xBD3DAC20, +/**/ 0x00000000, 0x3FF0B400, +/**/ 0xBD31D7D0, 0xBF1D7CFF, +/**/ 0x30790000, 0xBFA5F6E7, +/**/ 0x8012494C, 0x3D20485A, +/**/ 0x00000000, 0x3FF0B000, +/**/ 0x226951DC, 0xBF2A11BA, +/**/ 0x4C040000, 0xBFA5715C, +/**/ 0xDFC47628, 0x3D38888D, +/**/ 0x00000000, 0x3FF0AC00, +/**/ 0x7B2E9DD2, 0xBF328E31, +/**/ 0x334A0000, 0xBFA4EBF4, +/**/ 0xF73BE773, 0x3D2D9150, +/**/ 0x00000000, 0x3FF0A800, +/**/ 0x7EF597EF, 0xBF37EF59, +/**/ 0xD42E0000, 0xBFA466AE, +/**/ 0x75BDFD28, 0x3D2C1673, +/**/ 0x00000000, 0x3FF0A400, +/**/ 0x50D413C1, 0xBF3D2C71, +/**/ 0x1CA08000, 0xBFA3E18C, +/**/ 0x3F6E378E, 0xBD3748ED, +/**/ 0x00000000, 0x3FF09C00, +/**/ 0xF836010A, 0x3F3DBA6A, +/**/ 0xFAA10000, 0xBFA35C8B, +/**/ 0x5EF9EB35, 0xBD38357D, +/**/ 0x00000000, 0x3FF09800, +/**/ 0x624D4AF5, 0x3F38C51F, +/**/ 0x5C3C8000, 0xBFA2D7AE, +/**/ 0x459DA66D, 0x3D322939, +/**/ 0x00000000, 0x3FF09400, +/**/ 0x10953F39, 0x3F33F390, +/**/ 0x2F8D0000, 0xBFA252F3, +/**/ 0xE021B67B, 0xBD283E9A, +/**/ 0x00000000, 0x3FF09000, +/**/ 0x861539B9, 0x3F2E8B42, +/**/ 0x62BC0000, 0xBFA1CE5A, +/**/ 0x8D8DF999, 0xBD3A9CC7, +/**/ 0x00000000, 0x3FF08C00, +/**/ 0xACBC4021, 0x3F25766E, +/**/ 0xE4008000, 0xBFA149E3, +/**/ 0x9A4168FD, 0x3D32B98A, +/**/ 0x00000000, 0x3FF08800, +/**/ 0x0F3DBD5A, 0x3F1950DB, +/**/ 0xA19E0000, 0xBFA0C58F, +/**/ 0x58B17913, 0x3D0559D1, +/**/ 0x00000000, 0x3FF08400, +/**/ 0x08421084, 0x3F008421, +/**/ 0x89E78000, 0xBFA0415D, +/**/ 0xF461C516, 0x3D3DDDC7, +/**/ 0x00000000, 0x3FF08000, +/**/ 0x0041FF7C, 0xBF007FDF, +/**/ 0x16780000, 0xBF9F7A9B, +/**/ 0x271BE7D7, 0xBD242AD9, +/**/ 0x00000000, 0x3FF07C00, +/**/ 0xC54798FB, 0xBF183591, +/**/ 0x28140000, 0xBF9E72BF, +/**/ 0x49774D47, 0x3D28D751, +/**/ 0x00000000, 0x3FF07800, +/**/ 0x518F4EFD, 0xBF23CFA1, +/**/ 0x25980000, 0xBF9D6B27, +/**/ 0x50D1B838, 0x3D39FF7B, +/**/ 0x00000000, 0x3FF07400, +/**/ 0x01073261, 0xBF2B3EB7, +/**/ 0xEC150000, 0xBF9C63D2, +/**/ 0xE030A687, 0x3D35439C, +/**/ 0x00000000, 0x3FF07000, +/**/ 0xD6EAB025, 0xBF31341F, +/**/ 0x58B70000, 0xBF9B5CC2, +/**/ 0xB8AFBFE8, 0xBD18E611, +/**/ 0x00000000, 0x3FF06C00, +/**/ 0x6ED049E0, 0xBF34A638, +/**/ 0x48C60000, 0xBF9A55F5, +/**/ 0x9F2D03C9, 0x3D2DE070, +/**/ 0x00000000, 0x3FF06800, +/**/ 0xEF997F5C, 0xBF37F5BF, +/**/ 0x99A20000, 0xBF994F6B, +/**/ 0xF96CF7F5, 0xBD311D5E, +/**/ 0x00000000, 0x3FF06400, +/**/ 0xE5604189, 0xBF3B22D0, +/**/ 0x28C90000, 0xBF984925, +/**/ 0x325A0C34, 0x3D2AA0BA, +/**/ 0x00000000, 0x3FF06000, +/**/ 0xC1163FF0, 0xBF3E2D85, +/**/ 0xD3D00000, 0xBF974321, +/**/ 0x0FE94778, 0xBCFB4A69, +/**/ 0x00000000, 0x3FF05800, +/**/ 0x27586632, 0x3F3EEA07, +/**/ 0x78690000, 0xBF963D61, +/**/ 0x89596542, 0xBD07ABF3, +/**/ 0x00000000, 0x3FF05400, +/**/ 0x98E2A5E7, 0x3F3C23BB, +/**/ 0xF45F0000, 0xBF9537E3, +/**/ 0xD2D7F253, 0xBD2AB259, +/**/ 0x00000000, 0x3FF05000, +/**/ 0x73404146, 0x3F397F7D, +/**/ 0x25980000, 0xBF9432A9, +/**/ 0x928637FE, 0xBD098139, +/**/ 0x00000000, 0x3FF04C00, +/**/ 0xB0C7B49A, 0x3F36FD32, +/**/ 0xEA130000, 0xBF932DB0, +/**/ 0x130895FC, 0xBD2710CB, +/**/ 0x00000000, 0x3FF04800, +/**/ 0x664C578A, 0x3F349CC1, +/**/ 0x1FEA0000, 0xBF9228FB, +/**/ 0x284991FE, 0xBD2713E3, +/**/ 0x00000000, 0x3FF04400, +/**/ 0xC2FCB1F4, 0x3F325E0F, +/**/ 0xA5500000, 0xBF912487, +/**/ 0xFED4B393, 0xBD3FDBE5, +/**/ 0x00000000, 0x3FF04000, +/**/ 0x10410410, 0x3F304104, +/**/ 0x58930000, 0xBF902056, +/**/ 0x7C8E8417, 0xBD3611D2, +/**/ 0x00000000, 0x3FF03C00, +/**/ 0x6334030B, 0x3F2C8B09, +/**/ 0x30340000, 0xBF8E38CE, +/**/ 0xA3DA281A, 0x3D39DE88, +/**/ 0x00000000, 0x3FF03800, +/**/ 0x48FF7E3A, 0x3F28D6F0, +/**/ 0x84C80000, 0xBF8C3173, +/**/ 0xFCEFB9FE, 0x3D341F33, +/**/ 0x00000000, 0x3FF03400, +/**/ 0x0081A559, 0x3F25658A, +/**/ 0x6C180000, 0xBF8A2A9C, +/**/ 0x4D6D3472, 0x3D3F73BC, +/**/ 0x00000000, 0x3FF03000, +/**/ 0xEBC349DE, 0x3F2236A3, +/**/ 0xA3880000, 0xBF882448, +/**/ 0x12C584E0, 0xBD345544, +/**/ 0x00000000, 0x3FF02C00, +/**/ 0x3FEFD386, 0x3F1E9417, +/**/ 0xE8B60000, 0xBF861E77, +/**/ 0xEAF8EAF3, 0x3D38073E, +/**/ 0x00000000, 0x3FF02800, +/**/ 0xCA7A317C, 0x3F193F1D, +/**/ 0xF9680000, 0xBF841929, +/**/ 0x55D01368, 0xBD1977C7, +/**/ 0x00000000, 0x3FF02400, +/**/ 0x6CB49652, 0x3F146DF7, +/**/ 0x939E0000, 0xBF82145E, +/**/ 0x38C4EA00, 0xBD3E3D12, +/**/ 0x00000000, 0x3FF02000, +/**/ 0x81020408, 0x3F102040, +/**/ 0x75880000, 0xBF801015, +/**/ 0x1998B506, 0xBD3BCE25, +/**/ 0x00000000, 0x3FF01C00, +/**/ 0x8C355D63, 0x3F08AB2B, +/**/ 0xBB100000, 0xBF7C189C, +/**/ 0x12588560, 0x3D3D8055, +/**/ 0x00000000, 0x3FF01800, +/**/ 0xBD1BA97E, 0x3F021B28, +/**/ 0x14580000, 0xBF781212, +/**/ 0x82973F27, 0xBD1AD503, +/**/ 0x00000000, 0x3FF01400, +/**/ 0x411155AB, 0x3EF91F67, +/**/ 0x74780000, 0xBF740C8A, +/**/ 0xDF070002, 0xBD1E3871, +/**/ 0x00000000, 0x3FF01000, +/**/ 0x10101010, 0x3EF01010, +/**/ 0x59580000, 0xBF700805, +/**/ 0xCB31C67B, 0xBD2166AF, +/**/ 0x00000000, 0x3FF00C00, +/**/ 0x279DB649, 0x3EE20D8A, +/**/ 0x82880000, 0xBF680904, +/**/ 0x96A70C0C, 0xBD285C06, +/**/ 0x00000000, 0x3FF00800, +/**/ 0x02010080, 0x3ED00804, +/**/ 0x55D80000, 0xBF600401, +/**/ 0xC7CC7089, 0x3D33BB10, +/**/ 0x00000000, 0x3FF00400, +/**/ 0x00401004, 0x3EB00401, +/**/ 0x55600000, 0xBF500200, +/**/ 0xCD5F35F8, 0xBD356224, +/**/ 0x00000000, 0x3FF00000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x3FEFF800, +/**/ 0xFF801FF8, 0x3EAFF801, +/**/ 0xAA800000, 0x3F4FFC00, +/**/ 0x7809A0A3, 0x3D35621F, +/**/ 0x00000000, 0x3FEFF000, +/**/ 0xFC01FF00, 0x3ECFF007, +/**/ 0xA9B00000, 0x3F5FF802, +/**/ 0x1D61C5EB, 0xBD33BC66, +/**/ 0x00000000, 0x3FEFE800, +/**/ 0x186DADBE, 0x3EE1F28A, +/**/ 0x7D780000, 0x3F67F704, +/**/ 0x89D68648, 0x3D283DA6, +/**/ 0x00000000, 0x3FEFE000, +/**/ 0xE01FE020, 0x3EEFE01F, +/**/ 0xA2B00000, 0x3F6FF00A, +/**/ 0xA086B56A, 0x3D20BC04, +/**/ 0x00000000, 0x3FEFD800, +/**/ 0xDF68BD14, 0x3EF8E0E6, +/**/ 0x60F00000, 0x3F73F38A, +/**/ 0x93C93749, 0x3D192256, +/**/ 0x00000000, 0x3FEFD000, +/**/ 0x439A981C, 0x3F01E528, +/**/ 0xEBD80000, 0x3F77EE11, +/**/ 0xC2D23A07, 0x3D0749D3, +/**/ 0x00000000, 0x3FEFC800, +/**/ 0x8596391C, 0x3F08556A, +/**/ 0x70040000, 0x3F7BE79C, +/**/ 0x9A6C0404, 0x3D38EC8F, +/**/ 0x00000000, 0x3FEFC000, +/**/ 0x01FC07F0, 0x3F0FC07F, +/**/ 0x6B100000, 0x3F7FE02A, +/**/ 0x0DDA40E4, 0x3D19E23F, +/**/ 0x00000000, 0x3FEFB800, +/**/ 0x9F5976B5, 0x3F1412D5, +/**/ 0x2D1A0000, 0x3F81EBDE, +/**/ 0xFF48DC36, 0xBD2A0683, +/**/ 0x00000000, 0x3FEFB000, +/**/ 0xBD271E34, 0x3F18C21A, +/**/ 0x5D260000, 0x3F83E729, +/**/ 0xFF29A114, 0xBD2609C1, +/**/ 0x00000000, 0x3FEFA800, +/**/ 0x5594A734, 0x3F1DEDB2, +/**/ 0x03EC0000, 0x3F85E1F7, +/**/ 0xF585DA1B, 0x3D37CA09, +/**/ 0x00000000, 0x3FEFA000, +/**/ 0x1FA11CAA, 0x3F21CAA0, +/**/ 0x5F820000, 0x3F87DC47, +/**/ 0x5B5DA1F5, 0xBD3EB124, +/**/ 0x00000000, 0x3FEF9800, +/**/ 0x55E8CB6B, 0x3F24DC34, +/**/ 0xADC60000, 0x3F89D61A, +/**/ 0x327B4257, 0x3D37B196, +/**/ 0x00000000, 0x3FEF9000, +/**/ 0x13BAF1B2, 0x3F282B68, +/**/ 0x2C740000, 0x3F8BCF71, +/**/ 0x97BD9771, 0x3D1C25E0, +/**/ 0x00000000, 0x3FEF8800, +/**/ 0xCC420861, 0x3F2BB80D, +/**/ 0x19120000, 0x3F8DC84B, +/**/ 0x1E3A5B30, 0x3D1C0A54, +/**/ 0x00000000, 0x3FEF8000, +/**/ 0x1F81F820, 0x3F2F81F8, +/**/ 0xB0FC0000, 0x3F8FC0A8, +/**/ 0xF6D3A69C, 0x3CDF1E7C, +/**/ 0x00000000, 0x3FEF7800, +/**/ 0xED1079FA, 0x3F31C47C, +/**/ 0x18B00000, 0x3F90DC45, +/**/ 0x380313FC, 0xBD29BC2F, +/**/ 0x00000000, 0x3FEF7000, +/**/ 0xFA98528D, 0x3F33E672, +/**/ 0xEB9F0000, 0x3F91D7F7, +/**/ 0x83FCC7A6, 0xBD14193A, +/**/ 0x00000000, 0x3FEF6800, +/**/ 0xCAFBD3D2, 0x3F3626C7, +/**/ 0xEFB50000, 0x3F92D36C, +/**/ 0x341706C3, 0x3D35F0BB, +/**/ 0x00000000, 0x3FEF6000, +/**/ 0x06DDABA6, 0x3F388565, +/**/ 0x43470000, 0x3F93CEA4, +/**/ 0x32D6A40B, 0xBD36A2C4, +/**/ 0x00000000, 0x3FEF5800, +/**/ 0x6CC4F5F5, 0x3F3B0234, +/**/ 0x04900000, 0x3F94C99E, +/**/ 0x5DF5F4A5, 0x3D1DECC6, +/**/ 0x00000000, 0x3FEF5000, +/**/ 0xD102728A, 0x3F3D9D1F, +/**/ 0x51B90000, 0x3F95C45A, +/**/ 0x216D87D8, 0xBD263BB6, +/**/ 0x00000000, 0x3FEF5000, +/**/ 0xE26A1DD4, 0xBF3FA9EE, +/**/ 0x48D20000, 0x3F96BED9, +/**/ 0x160A43F8, 0xBD320BC4, +/**/ 0x00000000, 0x3FEF4800, +/**/ 0xADEC7540, 0xBF3CD30D, +/**/ 0x07D60000, 0x3F97B91B, +/**/ 0xB602ACE4, 0xBD33B955, +/**/ 0x00000000, 0x3FEF4000, +/**/ 0x7C761DC6, 0xBF39DE52, +/**/ 0xACAA0000, 0x3F98B31F, +/**/ 0xA96E4964, 0xBD33FC78, +/**/ 0x00000000, 0x3FEF3800, +/**/ 0x23989FF0, 0xBF36CBD3, +/**/ 0x551D0000, 0x3F99ACE7, +/**/ 0x7EC7C410, 0xBD2D75D9, +/**/ 0x00000000, 0x3FEF3000, +/**/ 0x639F8B15, 0xBF339BA5, +/**/ 0x1EE80000, 0x3F9AA672, +/**/ 0x5C5AF494, 0x3D2AD4EB, +/**/ 0x00000000, 0x3FEF2800, +/**/ 0xE7AA579B, 0xBF304DDE, +/**/ 0x27B00000, 0x3F9B9FC0, +/**/ 0x0AE6922A, 0xBD3B9A01, +/**/ 0x00000000, 0x3FEF2000, +/**/ 0x8B8C46FD, 0xBF29C52A, +/**/ 0x8D010000, 0x3F9C98D1, +/**/ 0x0589DF0F, 0xBD2BF615, +/**/ 0x00000000, 0x3FEF1800, +/**/ 0xFE0E92B4, 0xBF22B3BB, +/**/ 0x6C540000, 0x3F9D91A6, +/**/ 0x658CFB9A, 0x3D2E61F1, +/**/ 0x00000000, 0x3FEF1000, +/**/ 0xFE8B488E, 0xBF16CF39, +/**/ 0xE30D0000, 0x3F9E8A3E, +/**/ 0x3DE53900, 0xBD21A9FA, +/**/ 0x00000000, 0x3FEF0800, +/**/ 0xF07C1F08, 0xBEFF07C1, +/**/ 0x0E780000, 0x3F9F829B, +/**/ 0x7C7E09E4, 0x3D298026, +/**/ 0x00000000, 0x3FEF0000, +/**/ 0x007C00F8, 0x3EFF003E, +/**/ 0x85E70000, 0x3FA03D5D, +/**/ 0x60ED29CF, 0x3D3F7789, +/**/ 0x00000000, 0x3FEEF800, +/**/ 0x3D759870, 0x3F17B671, +/**/ 0x7C198000, 0x3FA0B94F, +/**/ 0x6F022783, 0xBD2E8989, +/**/ 0x00000000, 0x3FEEF000, +/**/ 0x2A8BB96A, 0x3F241070, +/**/ 0x78598000, 0x3FA13523, +/**/ 0xB71FA59B, 0xBD1C1AC3, +/**/ 0x00000000, 0x3FEEE800, +/**/ 0x58E01EEA, 0x3F2C7F84, +/**/ 0x89240000, 0x3FA1B0D9, +/**/ 0x9AE889BB, 0xBD33401E, +/**/ 0x00000000, 0x3FEEE000, +/**/ 0xA3D491BC, 0x3F329425, +/**/ 0xBCEA8000, 0x3FA22C71, +/**/ 0xF87F888F, 0x3CFD2818, +/**/ 0x00000000, 0x3FEED800, +/**/ 0x9E9D2AE8, 0x3F37054D, +/**/ 0x22150000, 0x3FA2A7EC, +/**/ 0x7A9163FE, 0xBD278CE7, +/**/ 0x00000000, 0x3FEED000, +/**/ 0x540C85E6, 0x3F3B9325, +/**/ 0xC7000000, 0x3FA32348, +/**/ 0x90B1E49F, 0x3D2696DB, +/**/ 0x00000000, 0x3FEED000, +/**/ 0xF099FC26, 0xBF3FC267, +/**/ 0xB9FE8000, 0x3FA39E87, +/**/ 0x80AD9015, 0x3D3EAFD4, +/**/ 0x00000000, 0x3FEEC800, +/**/ 0xD02A4E5D, 0xBF3AFB6E, +/**/ 0x09590000, 0x3FA419A9, +/**/ 0x67D48EA7, 0x3D3B5CDC, +/**/ 0x00000000, 0x3FEEC000, +/**/ 0xD7A79FF1, 0xBF361803, +/**/ 0xC34D8000, 0x3FA494AC, +/**/ 0xA56FD247, 0x3D211C78, +/**/ 0x00000000, 0x3FEEB800, +/**/ 0x805C2197, 0xBF31183B, +/**/ 0xF60F8000, 0x3FA50F92, +/**/ 0x0A91FFE3, 0x3D296CFB, +/**/ 0x00000000, 0x3FEEB000, +/**/ 0x5FE15180, 0xBF27F854, +/**/ 0xAFC90000, 0x3FA58A5B, +/**/ 0x9570AD39, 0xBD2B2B73, +/**/ 0x00000000, 0x3FEEA800, +/**/ 0xE210C36A, 0xBF1B0F90, +/**/ 0xFE990000, 0x3FA60506, +/**/ 0x8194E036, 0xBD32BA40, +/**/ 0x00000000, 0x3FEEA000, +/**/ 0x8C33ADB2, 0xBEF6F7DD, +/**/ 0xF0948000, 0x3FA67F94, +/**/ 0x3E7E4ED7, 0x3D3ECC1F, +/**/ 0x00000000, 0x3FEE9800, +/**/ 0x1003D310, 0x3F1003D3, +/**/ 0x93C78000, 0x3FA6FA05, +/**/ 0x41D634A1, 0x3D3B415E, +/**/ 0x00000000, 0x3FEE9000, +/**/ 0x0B7672A0, 0x3F231ABF, +/**/ 0xF6330000, 0x3FA77458, +/**/ 0xE586AF09, 0xBD3181DC, +/**/ 0x00000000, 0x3FEE8800, +/**/ 0xCF172481, 0x3F2E6B5C, +/**/ 0x25CD8000, 0x3FA7EE8F, +/**/ 0x11A5C1E9, 0xBD3F4216, +/**/ 0x00000000, 0x3FEE8000, +/**/ 0x77A84876, 0x3F34F9CD, +/**/ 0x30840000, 0x3FA868A8, +/**/ 0x134AC693, 0xBD12623A, +/**/ 0x00000000, 0x3FEE7800, +/**/ 0xD7473427, 0x3F3AD9A8, +/**/ 0x243A0000, 0x3FA8E2A4, +/**/ 0x01426490, 0x3D2B9EEB, +/**/ 0x00000000, 0x3FEE7800, +/**/ 0x4578DCCA, 0xBF3F2AD3, +/**/ 0x0EC90000, 0x3FA95C83, +/**/ 0x97C5FEB8, 0xBD2C1482, +/**/ 0x00000000, 0x3FEE7000, +/**/ 0x97A6A035, 0xBF3913BA, +/**/ 0xFDFF8000, 0x3FA9D644, +/**/ 0x539A473B, 0x3D313C90, +/**/ 0x00000000, 0x3FEE6800, +/**/ 0xC594A915, 0xBF32E120, +/**/ 0xFFA40000, 0x3FAA4FE9, +/**/ 0xA0402925, 0xBD36E584, +/**/ 0x00000000, 0x3FEE6000, +/**/ 0xC5DF4232, 0xBF292632, +/**/ 0x21710000, 0x3FAAC972, +/**/ 0xF013222C, 0x3D2F8D3E, +/**/ 0x00000000, 0x3FEE5800, +/**/ 0xC3518A6E, 0xBF18A6DF, +/**/ 0x71198000, 0x3FAB42DD, +/**/ 0xE5D6704C, 0xBD1C827A, +/**/ 0x00000000, 0x3FEE5000, +/**/ 0x86833271, 0x3ED6BC08, +/**/ 0xFC450000, 0x3FABBC2B, +/**/ 0x91417DAF, 0xBD17D186, +/**/ 0x00000000, 0x3FEE4800, +/**/ 0xE672838D, 0x3F1BEB2D, +/**/ 0xD0920000, 0x3FAC355D, +/**/ 0x9ABF8388, 0x3D2F2CCC, +/**/ 0x00000000, 0x3FEE4000, +/**/ 0x9785150A, 0x3F2B6B8D, +/**/ 0xFB960000, 0x3FACAE72, +/**/ 0x2025B1BE, 0xBD3EFABF, +/**/ 0x00000000, 0x3FEE3800, +/**/ 0xE0D399FA, 0x3F348BCE, +/**/ 0x8ADB0000, 0x3FAD276B, +/**/ 0xC78A64B0, 0x3D16A423, +/**/ 0x00000000, 0x3FEE3000, +/**/ 0x933AC00F, 0x3F3B7CD0, +/**/ 0x8BE38000, 0x3FADA047, +/**/ 0xB1F6FE05, 0x3D2252C7, +/**/ 0x00000000, 0x3FEE3000, +/**/ 0x308F5281, 0xBF3D7747, +/**/ 0x0C278000, 0x3FAE1907, +/**/ 0x64629E86, 0xBD2FEA46, +/**/ 0x00000000, 0x3FEE2800, +/**/ 0x6C196F66, 0xBF36508B, +/**/ 0x19150000, 0x3FAE91AA, +/**/ 0x1DCC6A76, 0xBD0E82A0, +/**/ 0x00000000, 0x3FEE2000, +/**/ 0x1E1E1E1E, 0xBF2E1E1E, +/**/ 0xC0118000, 0x3FAF0A30, +/**/ 0x83368E91, 0xBD2D599E, +/**/ 0x00000000, 0x3FEE1800, +/**/ 0xDD355CDB, 0xBF1ECB93, +/**/ 0x0E780000, 0x3FAF829B, +/**/ 0x7C7E09E4, 0x3D398026, +/**/ 0x00000000, 0x3FEE1000, +/**/ 0x7C01E100, 0xBECE0FF8, +/**/ 0x119B8000, 0x3FAFFAE9, +/**/ 0x4262C554, 0x3D230337, +/**/ 0x00000000, 0x3FEE0800, +/**/ 0x25C73724, 0x3F1D54B5, +/**/ 0x6B624000, 0x3FB0398D, +/**/ 0xFCBFCD00, 0xBD3AB14D, +/**/ 0x00000000, 0x3FEE0000, +/**/ 0x1E01E01E, 0x3F2E01E0, +/**/ 0x35990000, 0x3FB07598, +/**/ 0xE4B59987, 0xBD3B8ECF, +/**/ 0x00000000, 0x3FEDF800, +/**/ 0xC84194BA, 0x3F36C715, +/**/ 0xEE0D0000, 0x3FB0B194, +/**/ 0x4F69EDCC, 0x3D3666EA, +/**/ 0x00000000, 0x3FEDF000, +/**/ 0xEF26D838, 0x3F3EA78B, +/**/ 0x9B554000, 0x3FB0ED83, +/**/ 0x6D48ABB4, 0xBD3901F4, +/**/ 0x00000000, 0x3FEDF000, +/**/ 0xF10995DC, 0xBF395DBF, +/**/ 0x44030000, 0x3FB12964, +/**/ 0x751AA773, 0xBD3D53BB, +/**/ 0x00000000, 0x3FEDE800, +/**/ 0x3BCBADC8, 0xBF3148E0, +/**/ 0xEEA38000, 0x3FB16536, +/**/ 0x768FA309, 0xBD147C5E, +/**/ 0x00000000, 0x3FEDE000, +/**/ 0x86E25CE1, 0xBF2233CE, +/**/ 0xA1BF8000, 0x3FB1A0FB, +/**/ 0xC319D6DC, 0x3D24A3FC, +/**/ 0x00000000, 0x3FEDD800, +/**/ 0x26B3FE23, 0xBEEA1CE9, +/**/ 0x63DB0000, 0x3FB1DCB2, +/**/ 0x5E9E8981, 0x3D39444F, +/**/ 0x00000000, 0x3FEDD000, +/**/ 0x0AB71710, 0x3F1E4836, +/**/ 0x3B75C000, 0x3FB2185B, +/**/ 0xF8F32304, 0xBD3E3189, +/**/ 0x00000000, 0x3FEDC800, +/**/ 0x00EE500F, 0x3F300EE5, +/**/ 0x2F0A0000, 0x3FB253F6, +/**/ 0xFB69A701, 0x3D3416F8, +/**/ 0x00000000, 0x3FEDC000, +/**/ 0x231C226A, 0x3F38A58D, +/**/ 0x450EC000, 0x3FB28F83, +/**/ 0xAA119769, 0x3D3A8D75, +/**/ 0x00000000, 0x3FEDC000, +/**/ 0x14715D63, 0xBF3EAA0C, +/**/ 0x83F5C000, 0x3FB2CB02, +/**/ 0xCA657021, 0x3D3E1EE2, +/**/ 0x00000000, 0x3FEDB800, +/**/ 0x92AEFFC5, 0xBF35DFF8, +/**/ 0xF22C8000, 0x3FB30673, +/**/ 0x9DCF0BA5, 0x3D24C9E2, +/**/ 0x00000000, 0x3FEDB000, +/**/ 0x67E251A0, 0xBF29F894, +/**/ 0x961BC000, 0x3FB341D7, +/**/ 0x99837610, 0x3D31D092, +/**/ 0x00000000, 0x3FEDA800, +/**/ 0x1FF89620, 0xBF0FF896, +/**/ 0x76284000, 0x3FB37D2D, +/**/ 0x9B7FF15C, 0xBD2C60AA, +/**/ 0x00000000, 0x3FEDA000, +/**/ 0x076828BD, 0x3F145E70, +/**/ 0x98B1C000, 0x3FB3B875, +/**/ 0x94ACA313, 0xBD222415, +/**/ 0x00000000, 0x3FED9800, +/**/ 0xE567D573, 0x3F2C8F60, +/**/ 0x04140000, 0x3FB3F3B0, +/**/ 0xACDFCEC5, 0x3CEE2474, +/**/ 0x00000000, 0x3FED9000, +/**/ 0xF3FC4DA2, 0x3F379118, +/**/ 0xBEA64000, 0x3FB42EDC, +/**/ 0xEA7C9ACD, 0x3D1BC0EE, +/**/ 0x00000000, 0x3FED9000, +/**/ 0x049DE4C3, 0xBF3F0C3C, +/**/ 0xCEBB4000, 0x3FB469FB, +/**/ 0x4F257194, 0x3D3B663C, +/**/ 0x00000000, 0x3FED8800, +/**/ 0xF13D5906, 0xBF35905F, +/**/ 0x3AA1C000, 0x3FB4A50D, +/**/ 0x308973E2, 0xBD2F7FE1, +/**/ 0x00000000, 0x3FED8000, +/**/ 0x77D1EA57, 0xBF27F6C8, +/**/ 0x08A34000, 0x3FB4E011, +/**/ 0xDF2C5AE5, 0x3D3AE5CF, +/**/ 0x00000000, 0x3FED7800, +/**/ 0xF4F31BA0, 0xBF026AD1, +/**/ 0x3F060000, 0x3FB51B07, +/**/ 0x278E686A, 0x3D383F69, +/**/ 0x00000000, 0x3FED7000, +/**/ 0xF26DF1BD, 0x3F1DE6B2, +/**/ 0xE40B4000, 0x3FB555EF, +/**/ 0x8C868E23, 0x3D30B497, +/**/ 0x00000000, 0x3FED6800, +/**/ 0x7BA23D96, 0x3F31599F, +/**/ 0xFDF00000, 0x3FB590CA, +/**/ 0x5722ABAA, 0x3D3C284F, +/**/ 0x00000000, 0x3FED6000, +/**/ 0xD425A760, 0x3F3B526C, +/**/ 0x92ED4000, 0x3FB5CB98, +/**/ 0xA64FC52F, 0x3D17BE44, +/**/ 0x00000000, 0x3FED6000, +/**/ 0x546A6FF1, 0xBF3A9BFC, +/**/ 0xA9374000, 0x3FB60658, +/**/ 0xDEE9C4F8, 0x3D30C3B1, +/**/ 0x00000000, 0x3FED5800, +/**/ 0x08F02FAC, 0xBF3071AD, +/**/ 0x46FE8000, 0x3FB6410B, +/**/ 0x3CBD8D14, 0xBD153F8F, +/**/ 0x00000000, 0x3FED5000, +/**/ 0x12C6C142, 0xBF18BAD9, +/**/ 0x726EC000, 0x3FB67BB0, +/**/ 0x69EF5912, 0x3CEF724B, +/**/ 0x00000000, 0x3FED4800, +/**/ 0x3254A5A2, 0x3F10B35C, +/**/ 0x31B00000, 0x3FB6B648, +/**/ 0x1377DE92, 0xBD3BF30A, +/**/ 0x00000000, 0x3FED4000, +/**/ 0x1D41D41D, 0x3F2D41D4, +/**/ 0x8AE58000, 0x3FB6F0D2, +/**/ 0x1B664613, 0xBD34B464, +/**/ 0x00000000, 0x3FED3800, +/**/ 0xF494E548, 0x3F392D71, +/**/ 0x842EC000, 0x3FB72B4F, +/**/ 0xC00C9DD3, 0xBD3704CC, +/**/ 0x00000000, 0x3FED3800, +/**/ 0xFF165C2E, 0xBF3C2DA1, +/**/ 0x23A6C000, 0x3FB765BF, +/**/ 0x35C4256A, 0xBCFECBC0, +/**/ 0x00000000, 0x3FED3000, +/**/ 0x7AA49674, 0xBF317062, +/**/ 0x6F648000, 0x3FB7A021, +/**/ 0xA18418FF, 0x3D3E124C, +/**/ 0x00000000, 0x3FED2800, +/**/ 0x749CB290, 0xBF1A6B80, +/**/ 0x6D7B0000, 0x3FB7DA76, +/**/ 0x4480C89B, 0x3D32CC84, +/**/ 0x00000000, 0x3FED2000, +/**/ 0x25C6336D, 0x3F114B52, +/**/ 0x23F8C000, 0x3FB814BE, +/**/ 0xDA82FDFD, 0x3CCB2381, +/**/ 0x00000000, 0x3FED1800, +/**/ 0xF08A3B1D, 0x3F2EB155, +/**/ 0x98E84000, 0x3FB84EF8, +/**/ 0x246977C9, 0xBD37D5CD, +/**/ 0x00000000, 0x3FED1000, +/**/ 0xBD71CD93, 0x3F3A7692, +/**/ 0xD24FC000, 0x3FB88925, +/**/ 0x44FBB806, 0xBD31D505, +/**/ 0x00000000, 0x3FED1000, +/**/ 0x89FC5E69, 0xBF3A5384, +/**/ 0xD6318000, 0x3FB8C345, +/**/ 0xACB42A66, 0x3D3B20F5, +/**/ 0x00000000, 0x3FED0800, +/**/ 0x6439240E, 0xBF2E0B56, +/**/ 0xAA8C4000, 0x3FB8FD58, +/**/ 0x1BCB725B, 0xBD3EEC90, +/**/ 0x00000000, 0x3FED0000, +/**/ 0x01CFF8C0, 0xBF0CFF8C, +/**/ 0x55594000, 0x3FB9375E, +/**/ 0x7380C364, 0x3D3EDDC3, +/**/ 0x00000000, 0x3FECF800, +/**/ 0x546D8D78, 0x3F1F7661, +/**/ 0xDC8F8000, 0x3FB97156, +/**/ 0x9AFDB97B, 0xBD3C1FC1, +/**/ 0x00000000, 0x3FECF000, +/**/ 0x25FE30D9, 0x3F3372E2, +/**/ 0x46204000, 0x3FB9AB42, +/**/ 0x26787061, 0xBD28A648, +/**/ 0x00000000, 0x3FECE800, +/**/ 0xD92305A6, 0x3F3F1FDB, +/**/ 0x97F9C000, 0x3FB9E520, +/**/ 0xB52DD050, 0x3D235FAC, +/**/ 0x00000000, 0x3FECE800, +/**/ 0x9C37FC63, 0xBF351B8A, +/**/ 0xD8060000, 0x3FBA1EF1, +/**/ 0x6DF97BCB, 0x3D3CD417, +/**/ 0x00000000, 0x3FECE000, +/**/ 0x6CB725AB, 0xBF227EC2, +/**/ 0x0C2B4000, 0x3FBA58B6, +/**/ 0x5C5C9F2A, 0xBD3CDC73, +/**/ 0x00000000, 0x3FECD800, +/**/ 0xE6C2B448, 0x3F05A240, +/**/ 0x3A4AC000, 0x3FBA926D, +/**/ 0x0BD22A9C, 0x3D356365, +/**/ 0x00000000, 0x3FECD000, +/**/ 0xFBB8D9F3, 0x3F2D7EC2, +/**/ 0x68434000, 0x3FBACC17, +/**/ 0xA0B7FA4C, 0xBD2AA783, +/**/ 0x00000000, 0x3FECC800, +/**/ 0x1B71D3E9, 0x3F3AE1DB, +/**/ 0x9BEE4000, 0x3FBB05B4, +/**/ 0x18F84A5E, 0x3D0FF22C, +/**/ 0x00000000, 0x3FECC800, +/**/ 0xCD6DE82D, 0xBF38E45A, +/**/ 0xDB220000, 0x3FBB3F44, +/**/ 0xD8DE09AF, 0x3D3FD153, +/**/ 0x00000000, 0x3FECC000, +/**/ 0xE341926A, 0xBF29269F, +/**/ 0x2BB10000, 0x3FBB78C8, +/**/ 0xBC3987E7, 0xBD325EF7, +/**/ 0x00000000, 0x3FECB800, +/**/ 0xF620C1DA, 0xBEC589FB, +/**/ 0x93690000, 0x3FBBB23E, +/**/ 0x3559DB8B, 0xBD368B18, +/**/ 0x00000000, 0x3FECB000, +/**/ 0x0DE5FF1A, 0x3F28A893, +/**/ 0x18148000, 0x3FBBEBA8, +/**/ 0xB6DF1F57, 0xBD389B78, +/**/ 0x00000000, 0x3FECA800, +/**/ 0x0039563B, 0x3F38EAB9, +/**/ 0xBF79C000, 0x3FBC2504, +/**/ 0xD0EF4ADC, 0x3D3717C4, +/**/ 0x00000000, 0x3FECA800, +/**/ 0x08F377F2, 0xBF3A67D5, +/**/ 0x8F5BC000, 0x3FBC5E54, +/**/ 0x585FBE06, 0x3D1D0C57, +/**/ 0x00000000, 0x3FECA000, +/**/ 0x072792E4, 0xBF2B46E0, +/**/ 0x8D790000, 0x3FBC9797, +/**/ 0x977D1884, 0xBD36E010, +/**/ 0x00000000, 0x3FEC9800, +/**/ 0x1BB327C3, 0xBEE904EA, +/**/ 0xBF8C0000, 0x3FBCD0CD, +/**/ 0xB50DD743, 0x3D33E14D, +/**/ 0x00000000, 0x3FEC9000, +/**/ 0x77683AEC, 0x3F2853EB, +/**/ 0x2B4C4000, 0x3FBD09F7, +/**/ 0x00354E33, 0x3D2048C0, +/**/ 0x00000000, 0x3FEC8800, +/**/ 0xDC52100E, 0x3F3932D7, +/**/ 0xD66CC000, 0x3FBD4313, +/**/ 0x79135713, 0xBD294543, +/**/ 0x00000000, 0x3FEC8800, +/**/ 0x2736962B, 0xBF39AD90, +/**/ 0xC69CC000, 0x3FBD7C23, +/**/ 0xDD328771, 0xBD297EE4, +/**/ 0x00000000, 0x3FEC8000, +/**/ 0xF316B4C2, 0xBF28EEA2, +/**/ 0x0187C000, 0x3FBDB527, +/**/ 0x56AE181F, 0x3D392778, +/**/ 0x00000000, 0x3FEC7800, +/**/ 0x058F7536, 0x3EEAB099, +/**/ 0x8CD60000, 0x3FBDEE1D, +/**/ 0x729EFF89, 0xBD328DA0, +/**/ 0x00000000, 0x3FEC7000, +/**/ 0x1C71C71C, 0x3F2C71C7, +/**/ 0x6E2B0000, 0x3FBE2707, +/**/ 0x2AF0003C, 0xBD2A342C, +/**/ 0x00000000, 0x3FEC6800, +/**/ 0xD6422A30, 0x3F3BB2BB, +/**/ 0xAB274000, 0x3FBE5FE4, +/**/ 0xF74FFE4D, 0xBD35FAE9, +/**/ 0x00000000, 0x3FEC6800, +/**/ 0x54BDE47E, 0xBF36BD01, +/**/ 0x49670000, 0x3FBE98B5, +/**/ 0x89C50E97, 0x3D346774, +/**/ 0x00000000, 0x3FEC6000, +/**/ 0xB5157FE4, 0xBF222CC5, +/**/ 0x4E838000, 0x3FBED179, +/**/ 0x749D0484, 0xBD1FD143, +/**/ 0x00000000, 0x3FEC5800, +/**/ 0xA930B840, 0x3F129A21, +/**/ 0xC0118000, 0x3FBF0A30, +/**/ 0x83368E91, 0xBD3D599E, +/**/ 0x00000000, 0x3FEC5000, +/**/ 0xAC5CEE14, 0x3F3279B1, +/**/ 0xA3A24000, 0x3FBF42DB, +/**/ 0x32DF6C0D, 0xBD3312B7, +/**/ 0x00000000, 0x3FEC5000, +/**/ 0xD4AB8D0B, 0xBF3F9CF5, +/**/ 0xFEC38000, 0x3FBF7B79, +/**/ 0xE897ED01, 0xBD010987, +/**/ 0x00000000, 0x3FEC4800, +/**/ 0xCC17DAE4, 0xBF319D7C, +/**/ 0xD6FF4000, 0x3FBFB40B, +/**/ 0xB7B53B5B, 0x3D2C0BEC, +/**/ 0x00000000, 0x3FEC4000, +/**/ 0x01C3F8F0, 0xBF0C3F8F, +/**/ 0x31DC0000, 0x3FBFEC91, +/**/ 0xD1AE6607, 0xBD354555, +/**/ 0x00000000, 0x3FEC3800, +/**/ 0xAB1B8FFC, 0x3F254738, +/**/ 0x0A6E0000, 0x3FC01285, +/**/ 0x4805BF94, 0xBD1A8619, +/**/ 0x00000000, 0x3FEC3000, +/**/ 0x48B3C5D7, 0x3F38E51F, +/**/ 0x42BF4000, 0x3FC02EBB, +/**/ 0x5CE00E5D, 0xBD15A8FA, +/**/ 0x00000000, 0x3FEC3000, +/**/ 0x867E595E, 0xBF38C377, +/**/ 0x449F6000, 0x3FC04AEB, +/**/ 0x65CCD35C, 0x3D2AFA90, +/**/ 0x00000000, 0x3FEC2800, +/**/ 0x15FE3D95, 0xBF24AC6D, +/**/ 0x12CA6000, 0x3FC06715, +/**/ 0x9CDC0A3D, 0xBD2A4757, +/**/ 0x00000000, 0x3FEC2000, +/**/ 0x53B8CDAE, 0x3F10B34F, +/**/ 0xAFFA2000, 0x3FC08338, +/**/ 0xAC823E27, 0x3D30533C, +/**/ 0x00000000, 0x3FEC1800, +/**/ 0x3FABB0F6, 0x3F32C599, +/**/ 0x1EE72000, 0x3FC09F56, +/**/ 0x7157D1A8, 0xBD28F305, +/**/ 0x00000000, 0x3FEC1800, +/**/ 0x97CD1B6C, 0xBF3E8BF4, +/**/ 0x6247A000, 0x3FC0BB6D, +/**/ 0x3CCD04B3, 0x3D35464F, +/**/ 0x00000000, 0x3FEC1000, +/**/ 0xE3F1F8FC, 0xBF2F8FC7, +/**/ 0x7CD08000, 0x3FC0D77E, +/**/ 0x2EE2F482, 0x3D3CB2CD, +/**/ 0x00000000, 0x3FEC0800, +/**/ 0x5B199F35, 0xBEEDC860, +/**/ 0x7134C000, 0x3FC0F389, +/**/ 0xE893D6C6, 0xBD3DA359, +/**/ 0x00000000, 0x3FEC0000, +/**/ 0x1C01C01C, 0x3F2C01C0, +/**/ 0x42254000, 0x3FC10F8E, +/**/ 0x43396307, 0xBD293B38, +/**/ 0x00000000, 0x3FEBF800, +/**/ 0x256228AA, 0x3F3D0577, +/**/ 0xF2518000, 0x3FC12B8C, +/**/ 0x13C0A0FC, 0x3D348A4A, +/**/ 0x00000000, 0x3FEBF800, +/**/ 0xCB93A8A1, 0xBF33E08B, +/**/ 0x84674000, 0x3FC14785, +/**/ 0x1027C750, 0x3D156345, +/**/ 0x00000000, 0x3FEBF000, +/**/ 0x1DE63F4A, 0xBF12C4DB, +/**/ 0xFB124000, 0x3FC16377, +/**/ 0xBF41763E, 0x3D091E1A, +/**/ 0x00000000, 0x3FEBE800, +/**/ 0x769F9E4F, 0x3F2526D0, +/**/ 0x58FCA000, 0x3FC17F64, +/**/ 0xD093C8DC, 0x3D2843FA, +/**/ 0x00000000, 0x3FEBE000, +/**/ 0x5292D891, 0x3F39ED43, +/**/ 0xA0CEE000, 0x3FC19B4A, +/**/ 0x9621338B, 0xBD3D8824, +/**/ 0x00000000, 0x3FEBE000, +/**/ 0x5FC845A9, 0xBF36A3B3, +/**/ 0xD52F6000, 0x3FC1B72A, +/**/ 0x1811A396, 0x3D2E80A4, +/**/ 0x00000000, 0x3FEBD800, +/**/ 0xB7230491, 0xBF1C7E26, +/**/ 0xF8C36000, 0x3FC1D304, +/**/ 0xDF451042, 0xBD3A6D44, +/**/ 0x00000000, 0x3FEBD000, +/**/ 0x451B61CB, 0x3F20F365, +/**/ 0x0E2DC000, 0x3FC1EED9, +/**/ 0x7097648F, 0x3D161563, +/**/ 0x00000000, 0x3FEBC800, +/**/ 0xD72DD0AA, 0x3F3827F3, +/**/ 0x18102000, 0x3FC20AA7, +/**/ 0x348552FE, 0x3D3F2C94, +/**/ 0x00000000, 0x3FEBC800, +/**/ 0xBE0C262F, 0xBF3814D3, +/**/ 0x190A6000, 0x3FC2266F, +/**/ 0xB840E7F6, 0xBD24D20A, +/**/ 0x00000000, 0x3FEBC000, +/**/ 0x7ECECB53, 0xBF207963, +/**/ 0x13BA6000, 0x3FC24231, +/**/ 0x78EE9D9C, 0xBD3E3A00, +/**/ 0x00000000, 0x3FEBB800, +/**/ 0xF29268D3, 0x3F1EC130, +/**/ 0x0ABC6000, 0x3FC25DED, +/**/ 0x4F176449, 0x3D35A385, +/**/ 0x00000000, 0x3FEBB000, +/**/ 0xAB6353BF, 0x3F37B218, +/**/ 0x00AB4000, 0x3FC279A3, +/**/ 0xB3235108, 0x3D3EF432, +/**/ 0x00000000, 0x3FEBB000, +/**/ 0xF2298376, 0xBF383759, +/**/ 0xF8200000, 0x3FC29552, +/**/ 0xF4471DFC, 0xBD35B967, +/**/ 0x00000000, 0x3FEBA800, +/**/ 0x1EAD4253, 0xBF201832, +/**/ 0xF3B1A000, 0x3FC2B0FC, +/**/ 0xE30A59EA, 0x3D177CA3, +/**/ 0x00000000, 0x3FEBA000, +/**/ 0xD84886B1, 0x3F20679B, +/**/ 0xF5F60000, 0x3FC2CCA0, +/**/ 0x91AFF120, 0xBD3B5EF1, +/**/ 0x00000000, 0x3FEB9800, +/**/ 0xA41FEB4C, 0x3F38884D, +/**/ 0x0180E000, 0x3FC2E83F, +/**/ 0xC284E1CE, 0xBD3F0C2A, +/**/ 0x00000000, 0x3FEB9800, +/**/ 0x3806E548, 0xBF370EA7, +/**/ 0x18E48000, 0x3FC303D7, +/**/ 0xCE3ECB05, 0xBCD680B5, +/**/ 0x00000000, 0x3FEB9000, +/**/ 0xB5EF34C0, 0xBF1A4477, +/**/ 0x3EB1A000, 0x3FC31F69, +/**/ 0xE5A396FB, 0xBD2A6726, +/**/ 0x00000000, 0x3FEB8800, +/**/ 0x9401B894, 0x3F2401B8, +/**/ 0x75770000, 0x3FC33AF5, +/**/ 0xA2FE72A5, 0x3D3C9ECC, +/**/ 0x00000000, 0x3FEB8000, +/**/ 0x400DC1AA, 0x3F3AA73A, +/**/ 0xBFC22000, 0x3FC3567B, +/**/ 0x53991A1F, 0x3D3250D2, +/**/ 0x00000000, 0x3FEB8000, +/**/ 0x2E63A6A8, 0xBF349E11, +/**/ 0x201E8000, 0x3FC371FC, +/**/ 0x9B2D8ABC, 0x3D3EE877, +/**/ 0x00000000, 0x3FEB7800, +/**/ 0xC8DA04B9, 0xBF0E7898, +/**/ 0x99164000, 0x3FC38D76, +/**/ 0x9E39BB70, 0x3D1844A5, +/**/ 0x00000000, 0x3FEB7000, +/**/ 0xE6B33E2D, 0x3F2A284E, +/**/ 0x2D31A000, 0x3FC3A8EB, +/**/ 0x7D5D503E, 0x3D1BAFB7, +/**/ 0x00000000, 0x3FEB6800, +/**/ 0x759C2BB4, 0x3F3E0B91, +/**/ 0xDEF76000, 0x3FC3C459, +/**/ 0xF6B70D33, 0x3D3EDC86, +/**/ 0x00000000, 0x3FEB6800, +/**/ 0x088FD6E7, 0xBF30E8E2, +/**/ 0xB0ECC000, 0x3FC3DFC2, +/**/ 0x62B8C13F, 0x3D28A72A, +/**/ 0x00000000, 0x3FEB6000, +/**/ 0xD801B600, 0x3ECB6006, +/**/ 0xA5952000, 0x3FC3FB25, +/**/ 0x6B358FF7, 0x3D3195BE, +/**/ 0x00000000, 0x3FEB5800, +/**/ 0xD840F62C, 0x3F316A6A, +/**/ 0xBF728000, 0x3FC41682, +/**/ 0x081F849D, 0xBD210047, +/**/ 0x00000000, 0x3FEB5800, +/**/ 0x7DF8BD99, 0xBF3D4DEE, +/**/ 0x01050000, 0x3FC431DA, +/**/ 0x836E0391, 0x3D304837, +/**/ 0x00000000, 0x3FEB5000, +/**/ 0x7E4B17E5, 0xBF27E4B1, +/**/ 0x6CCB8000, 0x3FC44D2B, +/**/ 0x6135783C, 0xBD170CC1, +/**/ 0x00000000, 0x3FEB4800, +/**/ 0x55E6D8FE, 0x3F15F47D, +/**/ 0x05430000, 0x3FC46877, +/**/ 0xF8D5087E, 0xBD3D8145, +/**/ 0x00000000, 0x3FEB4000, +/**/ 0x0B803686, 0x3F37006D, +/**/ 0xCCE6E000, 0x3FC483BC, +/**/ 0x723F6369, 0x3D1EEA52, +/**/ 0x00000000, 0x3FEB4000, +/**/ 0x46A66920, 0xBF37687C, +/**/ 0xC6314000, 0x3FC49EFC, +/**/ 0x9F55572B, 0xBD090F59, +/**/ 0x00000000, 0x3FEB3800, +/**/ 0xFF2645BE, 0xBF16F6A4, +/**/ 0xF39A6000, 0x3FC4BA36, +/**/ 0xB3F219E5, 0xBD34354B, +/**/ 0x00000000, 0x3FEB3000, +/**/ 0x1801B318, 0x3F2801B3, +/**/ 0x5798E000, 0x3FC4D56B, +/**/ 0x15A96555, 0x3D380580, +/**/ 0x00000000, 0x3FEB2800, +/**/ 0x93511680, 0x3F3DD2FF, +/**/ 0xF4A24000, 0x3FC4F099, +/**/ 0xFAFEAF27, 0xBD3E9BF2, +/**/ 0x00000000, 0x3FEB2800, +/**/ 0xA89DCCAC, 0xBF304743, +/**/ 0xCD29C000, 0x3FC50BC2, +/**/ 0x28DB8D4F, 0x3D1ADA57, +/**/ 0x00000000, 0x3FEB2000, +/**/ 0x406C80D9, 0x3EFB2036, +/**/ 0xE3A1C000, 0x3FC526E5, +/**/ 0x37FC5238, 0xBD3790BA, +/**/ 0x00000000, 0x3FEB1800, +/**/ 0x4F9DC00E, 0x3F33BEC8, +/**/ 0x3A7A8000, 0x3FC54203, +/**/ 0xED855F0E, 0x3D268D68, +/**/ 0x00000000, 0x3FEB1800, +/**/ 0x44F8CE7E, 0xBF3A2101, +/**/ 0xD4232000, 0x3FC55D1A, +/**/ 0xDDA647E8, 0x3D3ADD94, +/**/ 0x00000000, 0x3FEB1000, +/**/ 0xB99AF3F3, 0xBF1FB596, +/**/ 0xB3092000, 0x3FC5782C, +/**/ 0x51794442, 0xBD33A463, +/**/ 0x00000000, 0x3FEB0800, +/**/ 0x922A3E85, 0x3F24B31D, +/**/ 0xD9982000, 0x3FC59338, +/**/ 0xB7555D4A, 0x3CF0BA68, +/**/ 0x00000000, 0x3FEB0000, +/**/ 0xE19BF6B7, 0x3F3CB3CF, +/**/ 0x4A3AA000, 0x3FC5AE3F, +/**/ 0xF012A8B9, 0x3D21EA25, +/**/ 0x00000000, 0x3FEB0000, +/**/ 0x9A5BF0D1, 0xBF30DEAE, +/**/ 0x07598000, 0x3FC5C940, +/**/ 0x8CD23322, 0xBD3A8D94, +/**/ 0x00000000, 0x3FEAF800, +/**/ 0x9EDE13CE, 0x3EFA2072, +/**/ 0x135BE000, 0x3FC5E43B, +/**/ 0xCEED9C31, 0xBD343AB4, +/**/ 0x00000000, 0x3FEAF000, +/**/ 0x0D79435E, 0x3F3435E5, +/**/ 0x70A7A000, 0x3FC5FF30, +/**/ 0x183BEBF2, 0xBD38586F, +/**/ 0x00000000, 0x3FEAF000, +/**/ 0x06855D30, 0xBF392321, +/**/ 0x21A0E000, 0x3FC61A20, +/**/ 0x1BDF3CDD, 0x3D3DD9DD, +/**/ 0x00000000, 0x3FEAE800, +/**/ 0x7ABED811, 0xBF19A45C, +/**/ 0x28AAA000, 0x3FC6350A, +/**/ 0xAB8163AF, 0x3D2D5EC0, +/**/ 0x00000000, 0x3FEAE000, +/**/ 0x84EF68CB, 0x3F28C7ED, +/**/ 0x88260000, 0x3FC64FEE, +/**/ 0x759DDED6, 0xBD1DA40D, +/**/ 0x00000000, 0x3FEAD800, +/**/ 0xA482F00D, 0x3F3F43FC, +/**/ 0x4272A000, 0x3FC66ACD, +/**/ 0xBFC6C785, 0x3D3AA1BD, +/**/ 0x00000000, 0x3FEAD800, +/**/ 0xCDE3E7AE, 0xBF2B9222, +/**/ 0x59EF0000, 0x3FC685A6, +/**/ 0x6C103214, 0xBD21F2A9, +/**/ 0x00000000, 0x3FEAD000, +/**/ 0xEED254A3, 0x3F14F302, +/**/ 0xD0F7A000, 0x3FC6A079, +/**/ 0x448D14F5, 0x3D35A3F8, +/**/ 0x00000000, 0x3FEAC800, +/**/ 0x32071DEF, 0x3F385567, +/**/ 0xA9E80000, 0x3FC6BB47, +/**/ 0x23EA3296, 0x3D19F64D, +/**/ 0x00000000, 0x3FEAC800, +/**/ 0xD47F29D4, 0xBF347F29, +/**/ 0xE719E000, 0x3FC6D60F, +/**/ 0x57134767, 0xBD3BC6E5, +/**/ 0x00000000, 0x3FEAC000, +/**/ 0xE82D23BC, 0xBEF40FE1, +/**/ 0x8AE56000, 0x3FC6F0D2, +/**/ 0xC93373DA, 0x3D369737, +/**/ 0x00000000, 0x3FEAB800, +/**/ 0x972D8538, 0x3F320FDE, +/**/ 0x97A1A000, 0x3FC70B8F, +/**/ 0xF6A95BEF, 0x3D34EA64, +/**/ 0x00000000, 0x3FEAB800, +/**/ 0x66711513, 0xBF3A8C9F, +/**/ 0x0FA40000, 0x3FC72647, +/**/ 0x0E743A45, 0xBD3774DF, +/**/ 0x00000000, 0x3FEAB000, +/**/ 0x02806ABC, 0xBF1C5A0F, +/**/ 0xF5404000, 0x3FC740F8, +/**/ 0x99018AA1, 0xBD30B66C, +/**/ 0x00000000, 0x3FEAA800, +/**/ 0xD22C937A, 0x3F28E44B, +/**/ 0x4AC8E000, 0x3FC75BA5, +/**/ 0x8BC4A7C0, 0x3D3DDCA5, +/**/ 0x00000000, 0x3FEAA800, +/**/ 0xFF2ADFF3, 0xBF3FF2AD, +/**/ 0x128F2000, 0x3FC7764C, +/**/ 0x3479E3D1, 0x3D027490, +/**/ 0x00000000, 0x3FEAA000, +/**/ 0x0B3ADA5C, 0xBF288A16, +/**/ 0x4EE26000, 0x3FC790ED, +/**/ 0x4E7746F6, 0x3D199BBD, +/**/ 0x00000000, 0x3FEA9800, +/**/ 0x4C77B035, 0x3F1DEC0D, +/**/ 0x0210E000, 0x3FC7AB89, +/**/ 0x72534A58, 0xBD2BDB90, +/**/ 0x00000000, 0x3FEA9000, +/**/ 0x91F59E6B, 0x3F3B4D71, +/**/ 0x2E674000, 0x3FC7C61F, +/**/ 0xB31BE8E0, 0xBD32392D, +/**/ 0x00000000, 0x3FEA9000, +/**/ 0xB8A2A522, 0xBF30CDCB, +/**/ 0xD630C000, 0x3FC7E0AF, +/**/ 0x1D8F1034, 0x3D139E7C, +/**/ 0x00000000, 0x3FEA8800, +/**/ 0x6A2194A0, 0x3F094A00, +/**/ 0xFBB76000, 0x3FC7FB3A, +/**/ 0x24609D57, 0xBD37DBF5, +/**/ 0x00000000, 0x3FEA8000, +/**/ 0x870AC52E, 0x3F373289, +/**/ 0xA1436000, 0x3FC815C0, +/**/ 0xF9201CE8, 0xBD302A52, +/**/ 0x00000000, 0x3FEA8000, +/**/ 0x9E8684DD, 0xBF34B1FA, +/**/ 0xC91BC000, 0x3FC83040, +/**/ 0xC6E66F32, 0x3D3E5B71, +/**/ 0x00000000, 0x3FEA7800, +/**/ 0xA9267648, 0xBEE08AF5, +/**/ 0x75866000, 0x3FC84ABB, +/**/ 0xDF4E2BD2, 0xBD3D8DAA, +/**/ 0x00000000, 0x3FEA7000, +/**/ 0x1A3D927E, 0x3F33BB67, +/**/ 0xA8C70000, 0x3FC86530, +/**/ 0xCB4EA3E3, 0x3D398BB0, +/**/ 0x00000000, 0x3FEA7000, +/**/ 0x7F2C97F3, 0xBF37F2C9, +/**/ 0x6520C000, 0x3FC87FA0, +/**/ 0x401202FC, 0x3D322120, +/**/ 0x00000000, 0x3FEA6800, +/**/ 0x3C076D20, 0xBF0C77A5, +/**/ 0xACD4E000, 0x3FC89A0A, +/**/ 0xDA8F5A72, 0x3D2C0BFB, +/**/ 0x00000000, 0x3FEA6000, +/**/ 0x7C7EF82B, 0x3F30E6DA, +/**/ 0x82236000, 0x3FC8B46F, +/**/ 0x102DD7C9, 0x3D12D9F2, +/**/ 0x00000000, 0x3FEA6000, +/**/ 0x2EC05C44, 0xBF3A9167, +/**/ 0xE74AE000, 0x3FC8CECE, +/**/ 0xAA429BB5, 0xBD3A5BA0, +/**/ 0x00000000, 0x3FEA5800, +/**/ 0xEEB6BD53, 0xBF17DF12, +/**/ 0xDE886000, 0x3FC8E928, +/**/ 0xB13D72D5, 0x3D3A8154, +/**/ 0x00000000, 0x3FEA5000, +/**/ 0x98C70AE6, 0x3F2D676D, +/**/ 0x6A180000, 0x3FC9037D, +/**/ 0x57C1C8D9, 0x3D230DEA, +/**/ 0x00000000, 0x3FEA5000, +/**/ 0x96CE4780, 0xBF3C8EFF, +/**/ 0x8C340000, 0x3FC91DCC, +/**/ 0xBDDEFF46, 0x3D37BC6A, +/**/ 0x00000000, 0x3FEA4800, +/**/ 0x71EFFCB7, 0xBF1EFFCB, +/**/ 0x4715A000, 0x3FC93816, +/**/ 0x6A3A39D9, 0xBD34C63D, +/**/ 0x00000000, 0x3FEA4000, +/**/ 0x1A41A41A, 0x3F2A41A4, +/**/ 0x9CF46000, 0x3FC9525A, +/**/ 0x7D9F158F, 0xBD329713, +/**/ 0x00000000, 0x3FEA4000, +/**/ 0xBF3B3C0E, 0xBF3DECBB, +/**/ 0x9006A000, 0x3FC96C99, +/**/ 0x9CBB452C, 0x3D2A88D5, +/**/ 0x00000000, 0x3FEA3800, +/**/ 0x3BCD35A8, 0xBF21D14E, +/**/ 0x22818000, 0x3FC986D3, +/**/ 0x4DD44000, 0x3CF93B56, +/**/ 0x00000000, 0x3FEA3000, +/**/ 0x3B5832C0, 0x3F285A0A, +/**/ 0x56988000, 0x3FC9A107, +/**/ 0x242CD098, 0x3D264AA6, +/**/ 0x00000000, 0x3FEA3000, +/**/ 0xD71AFD8C, 0xBF3EABC1, +/**/ 0x2E7E0000, 0x3FC9BB36, +/**/ 0xA1CE0FFC, 0xBD21F2A8, +/**/ 0x00000000, 0x3FEA2800, +/**/ 0x7C041611, 0xBF22E60D, +/**/ 0xAC62E000, 0x3FC9D55F, +/**/ 0xFC3B5BC3, 0xBD3F4669, +/**/ 0x00000000, 0x3FEA2000, +/**/ 0x5FF2EF43, 0x3F27AE57, +/**/ 0xD276A000, 0x3FC9EF83, +/**/ 0xB3F9CE00, 0xBD2730B7, +/**/ 0x00000000, 0x3FEA2000, +/**/ 0x3D66322E, 0xBF3ECD35, +/**/ 0xA2E7A000, 0x3FCA09A2, +/**/ 0xCD411233, 0xBD2DD99D, +/**/ 0x00000000, 0x3FEA1800, +/**/ 0x5B4FE5E9, 0xBF22C068, +/**/ 0x1FE2C000, 0x3FCA23BC, +/**/ 0x91DC9F0B, 0xBD3539CD, +/**/ 0x00000000, 0x3FEA1000, +/**/ 0x80B67A9A, 0x3F283C48, +/**/ 0x4B938000, 0x3FCA3DD0, +/**/ 0x366E2C5A, 0x3D297DA1, +/**/ 0x00000000, 0x3FEA1000, +/**/ 0x89907BBA, 0xBF3E5236, +/**/ 0x28244000, 0x3FCA57DF, +/**/ 0xCA1D9ABB, 0x3D3B99C8, +/**/ 0x00000000, 0x3FEA0800, +/**/ 0x32054967, 0xBF21629E, +/**/ 0xB7BE0000, 0x3FCA71E8, +/**/ 0x6EF05323, 0xBD210ACA, +/**/ 0x00000000, 0x3FEA0000, +/**/ 0x1A01A01A, 0x3F2A01A0, +/**/ 0xFC882000, 0x3FCA8BEC, +/**/ 0xCF21B9CF, 0x3D3E3185, +/**/ 0x00000000, 0x3FEA0000, +/**/ 0x93FF301D, 0xBF3D3BE3, +/**/ 0xF8A94000, 0x3FCAA5EB, +/**/ 0x36951A8F, 0xBD32A0A9, +/**/ 0x00000000, 0x3FE9F800, +/**/ 0xBFE608ED, 0xBF1D9DD1, +/**/ 0xAE462000, 0x3FCABFE5, +/**/ 0x395F139D, 0xBD3B68F5, +/**/ 0x00000000, 0x3FE9F000, +/**/ 0x1B29257F, 0x3F2CFC26, +/**/ 0x1F828000, 0x3FCAD9DA, +/**/ 0xC803F050, 0xBD3882B7, +/**/ 0x00000000, 0x3FE9F000, +/**/ 0x7E613717, 0xBF3B8B57, +/**/ 0x4E80C000, 0x3FCAF3C9, +/**/ 0x3FCD9066, 0xBCBA4E63, +/**/ 0x00000000, 0x3FE9E800, +/**/ 0xB9FABD04, 0xBF160EF9, +/**/ 0x3D620000, 0x3FCB0DB3, +/**/ 0x38EAB906, 0x3D3FEE14, +/**/ 0x00000000, 0x3FE9E000, +/**/ 0xEAF850E2, 0x3F3094D3, +/**/ 0xEE464000, 0x3FCB2797, +/**/ 0x906D00A9, 0xBD3BE88A, +/**/ 0x00000000, 0x3FE9E000, +/**/ 0xBBE88FDC, 0xBF3941AA, +/**/ 0x634BA000, 0x3FCB4177, +/**/ 0x5666069F, 0x3D355D01, +/**/ 0x00000000, 0x3FE9D800, +/**/ 0x25F4B1AA, 0xBF083A25, +/**/ 0x9E8FC000, 0x3FCB5B51, +/**/ 0xEC011F31, 0xBD34B722, +/**/ 0x00000000, 0x3FE9D000, +/**/ 0xF71FAC14, 0x3F3343FB, +/**/ 0xA22E4000, 0x3FCB7526, +/**/ 0x2E785490, 0x3D2C0DBF, +/**/ 0x00000000, 0x3FE9D000, +/**/ 0x1965FF32, 0xBF365FF3, +/**/ 0x70420000, 0x3FCB8EF6, +/**/ 0x321788E0, 0x3D387533, +/**/ 0x00000000, 0x3FE9C800, +/**/ 0x9C8019C8, 0x3EA9C801, +/**/ 0x0AE46000, 0x3FCBA8C1, +/**/ 0x9EEE9D85, 0x3D3A32E2, +/**/ 0x00000000, 0x3FE9C000, +/**/ 0x25080CE1, 0x3F368A77, +/**/ 0x742D8000, 0x3FCBC286, +/**/ 0xF39D121C, 0x3D39AC53, +/**/ 0x00000000, 0x3FE9C000, +/**/ 0xC54763F2, 0xBF32E743, +/**/ 0xAE344000, 0x3FCBDC46, +/**/ 0x023D6505, 0x3D3625B4, +/**/ 0x00000000, 0x3FE9B800, +/**/ 0x8B7424F9, 0x3F0DBD49, +/**/ 0xBB0E4000, 0x3FCBF601, +/**/ 0x47C378B5, 0x3D2386A9, +/**/ 0x00000000, 0x3FE9B000, +/**/ 0x00CD9A67, 0x3F3A6734, +/**/ 0x9CCFE000, 0x3FCC0FB7, +/**/ 0x99E8A558, 0xBD346FFF, +/**/ 0x00000000, 0x3FE9B000, +/**/ 0xAEF25B7C, 0xBF2DB15A, +/**/ 0x558C2000, 0x3FCC2968, +/**/ 0xDEE38A40, 0xBD2CFD73, +/**/ 0x00000000, 0x3FE9A800, +/**/ 0xC140C073, 0x3F1FDFEC, +/**/ 0xE754E000, 0x3FCC4313, +/**/ 0x74CAD7D6, 0x3D3279BE, +/**/ 0x00000000, 0x3FE9A000, +/**/ 0xA7DCBEB3, 0x3F3ED923, +/**/ 0x543AE000, 0x3FCC5CBA, +/**/ 0xECB454FC, 0x3D20929D, +/**/ 0x00000000, 0x3FE9A000, +/**/ 0xB256DE2C, 0xBF246A7B, +/**/ 0x9E4D6000, 0x3FCC765B, +/**/ 0x36976F6C, 0x3D31AB6B, +/**/ 0x00000000, 0x3FE99800, +/**/ 0x9999999A, 0x3F299999, +/**/ 0xC79AA000, 0x3FCC8FF7, +/**/ 0x689F8434, 0xBD27794F, +/**/ 0x00000000, 0x3FE99800, +/**/ 0x3EC03FF3, 0xBF3C20C6, +/**/ 0xD22F6000, 0x3FCCA98E, +/**/ 0x8CA209C8, 0xBCF698C1, +/**/ 0x00000000, 0x3FE99000, +/**/ 0x31EC07FD, 0xBF13F803, +/**/ 0xC0176000, 0x3FCCC320, +/**/ 0x9A653794, 0x3D240903, +/**/ 0x00000000, 0x3FE98800, +/**/ 0x5AC98715, 0x3F323513, +/**/ 0x935D2000, 0x3FCCDCAD, +/**/ 0x34C9A447, 0xBD0A0FF0, +/**/ 0x00000000, 0x3FE98800, +/**/ 0x89F80661, 0xBF368793, +/**/ 0x4E09C000, 0x3FCCF635, +/**/ 0x9A07D55B, 0x3D277123, +/**/ 0x00000000, 0x3FE98000, +/**/ 0x8019801A, 0x3EE98019, +/**/ 0xF2256000, 0x3FCD0FB7, +/**/ 0x20633B29, 0xBD0AF52B, +/**/ 0x00000000, 0x3FE97800, +/**/ 0xAB329020, 0x3F382FC6, +/**/ 0x81B6C000, 0x3FCD2935, +/**/ 0x128AAA5F, 0xBD383270, +/**/ 0x00000000, 0x3FE97800, +/**/ 0x962DBFF3, 0xBF305C4B, +/**/ 0xFEC36000, 0x3FCD42AD, +/**/ 0xFD804272, 0xBD175C00, +/**/ 0x00000000, 0x3FE97000, +/**/ 0x970E4F81, 0x3F1C9F01, +/**/ 0x6B4FC000, 0x3FCD5C21, +/**/ 0xBBCA681B, 0xBD21BA91, +/**/ 0x00000000, 0x3FE96800, +/**/ 0x049160B8, 0x3F3EBBE1, +/**/ 0xC95F0000, 0x3FCD758F, +/**/ 0x8B4162AA, 0xBD15A10A, +/**/ 0x00000000, 0x3FE96800, +/**/ 0x9933FE6A, 0xBF233FE6, +/**/ 0x1AF32000, 0x3FCD8EF9, +/**/ 0xC364C784, 0xBD15105F, +/**/ 0x00000000, 0x3FE96000, +/**/ 0xCE078906, 0x3F2C2873, +/**/ 0x620CE000, 0x3FCDA85D, +/**/ 0xC16CC7EC, 0x3D240194, +/**/ 0x00000000, 0x3FE96000, +/**/ 0xE442936B, 0xBF3A27A0, +/**/ 0xA0ABE000, 0x3FCDC1BC, +/**/ 0xA628CCC6, 0x3D38FAC1, +/**/ 0x00000000, 0x3FE95800, +/**/ 0x548A97A9, 0xBF029C69, +/**/ 0xD8CEA000, 0x3FCDDB16, +/**/ 0x7104B8BC, 0xBD1EEF79, +/**/ 0x00000000, 0x3FE95000, +/**/ 0x9F74B92D, 0x3F35906B, +/**/ 0x0C722000, 0x3FCDF46C, +/**/ 0xB0B79039, 0x3D3A5E82, +/**/ 0x00000000, 0x3FE95000, +/**/ 0xF35927BC, 0xBF327BBF, +/**/ 0x3D92A000, 0x3FCE0DBC, +/**/ 0xF0529BF1, 0x3D359233, +/**/ 0x00000000, 0x3FE94800, +/**/ 0xDD3C0CA4, 0x3F161F9A, +/**/ 0x6E2B0000, 0x3FCE2707, +/**/ 0x2AF0003C, 0xBD3A342C, +/**/ 0x00000000, 0x3FE94000, +/**/ 0x41228A8F, 0x3F3D9B56, +/**/ 0xA034C000, 0x3FCE404D, +/**/ 0xE09A2799, 0xBD3187EE, +/**/ 0x00000000, 0x3FE94000, +/**/ 0x598A73F8, 0xBF2482F5, +/**/ 0xD5A88000, 0x3FCE598E, +/**/ 0xCF1E98A1, 0xBD0D134B, +/**/ 0x00000000, 0x3FE93800, +/**/ 0x3C1B9728, 0x3F2BE2D5, +/**/ 0x107DA000, 0x3FCE72CB, +/**/ 0xCDF5471C, 0x3D1DD48C, +/**/ 0x00000000, 0x3FE93800, +/**/ 0x2698CFF3, 0xBF39CC03, +/**/ 0x52AA6000, 0x3FCE8C02, +/**/ 0x80E8E6FF, 0xBD26805B, +/**/ 0x00000000, 0x3FE93000, +/**/ 0xB9F30358, 0xBEF79CD3, +/**/ 0x9E23A000, 0x3FCEA534, +/**/ 0x4C73CCB5, 0x3D381B93, +/**/ 0x00000000, 0x3FE92800, +/**/ 0x255BA00D, 0x3F36E803, +/**/ 0xF4DD8000, 0x3FCEBE61, +/**/ 0x30FDCA4D, 0xBD23D453, +/**/ 0x00000000, 0x3FE92800, +/**/ 0x36077742, 0xBF30A69B, +/**/ 0x58CA8000, 0x3FCED78A, +/**/ 0x3793387E, 0x3D16F1B5, +/**/ 0x00000000, 0x3FE92000, +/**/ 0x1C451AB3, 0x3F1F693A, +/**/ 0xCBDC6000, 0x3FCEF0AD, +/**/ 0x9C86AF24, 0xBD2B26B7, +/**/ 0x00000000, 0x3FE92000, +/**/ 0xC74EA9E2, 0xBF3F9548, +/**/ 0x50036000, 0x3FCF09CC, +/**/ 0x18D999DB, 0x3D3DA094, +/**/ 0x00000000, 0x3FE91800, +/**/ 0xF7C46911, 0xBF1BD5A8, +/**/ 0xE72F2000, 0x3FCF22E5, +/**/ 0x1417E41F, 0xBD3F454F, +/**/ 0x00000000, 0x3FE91000, +/**/ 0x0D83D1C6, 0x3F31B9E1, +/**/ 0x934D6000, 0x3FCF3BFA, +/**/ 0x937B903B, 0x3D2D9F2A, +/**/ 0x00000000, 0x3FE91000, +/**/ 0xF3795877, 0xBF35876F, +/**/ 0x564B8000, 0x3FCF550A, +/**/ 0xA09202FE, 0xBD2323E3, +/**/ 0x00000000, 0x3FE90800, +/**/ 0xBD1D87EC, 0x3F0A34CD, +/**/ 0x32154000, 0x3FCF6E15, +/**/ 0x7AC4EC74, 0xBD3C9A97, +/**/ 0x00000000, 0x3FE90000, +/**/ 0x0E760899, 0x3F3C23F5, +/**/ 0x28956000, 0x3FCF871B, +/**/ 0x6A526EFE, 0xBD3F75FD, +/**/ 0x00000000, 0x3FE90000, +/**/ 0xD0BE9594, 0xBF25DECD, +/**/ 0x3BB58000, 0x3FCFA01C, +/**/ 0xFAE1D786, 0xBD1A1F71, +/**/ 0x00000000, 0x3FE8F800, +/**/ 0xC18F9C19, 0x3F2C18F9, +/**/ 0x6D5E4000, 0x3FCFB918, +/**/ 0xAB993C87, 0xBD0D572A, +/**/ 0x00000000, 0x3FE8F800, +/**/ 0x8176594C, 0xBF38E868, +/**/ 0xBF770000, 0x3FCFD20F, +/**/ 0x72C6FE70, 0xBD11C55B, +/**/ 0x00000000, 0x3FE8F000, +/**/ 0x3C018F00, 0x3EC8F006, +/**/ 0x33E60000, 0x3FCFEB02, +/**/ 0x32D5E8C7, 0x3D2F316E, +/**/ 0x00000000, 0x3FE8E800, +/**/ 0xAD115384, 0x3F395B4D, +/**/ 0xE6484000, 0x3FD001F7, +/**/ 0x40C9ABBC, 0x3D38A957, +/**/ 0x00000000, 0x3FE8E800, +/**/ 0xEC8C0F90, 0xBF2AD850, +/**/ 0x45AD5000, 0x3FD00E6C, +/**/ 0x52E01203, 0x3CDCC68D, +/**/ 0x00000000, 0x3FE8E000, +/**/ 0xA56B1AA1, 0x3F27B6E9, +/**/ 0x3913A000, 0x3FD01ADE, +/**/ 0xCCDC1521, 0xBD108930, +/**/ 0x00000000, 0x3FE8E000, +/**/ 0x40DFC1D8, 0xBF3ACDE3, +/**/ 0xC16C2000, 0x3FD0274D, +/**/ 0x9CF835C2, 0x3D2979E8, +/**/ 0x00000000, 0x3FE8D800, +/**/ 0x317DF64C, 0xBEF68397, +/**/ 0xDFA74000, 0x3FD033BA, +/**/ 0x1485BDFF, 0x3D0C30BC, +/**/ 0x00000000, 0x3FE8D000, +/**/ 0x80C6980C, 0x3F380C69, +/**/ 0x94B4D000, 0x3FD04025, +/**/ 0x9EF42D7F, 0x3CF036B8, +/**/ 0x00000000, 0x3FE8D000, +/**/ 0x338C7FE7, 0xBF2CE006, +/**/ 0xE1842000, 0x3FD04C8D, +/**/ 0x512CEB86, 0xBD1FE6BA, +/**/ 0x00000000, 0x3FE8C800, +/**/ 0x1EFBBD63, 0x3F2644F0, +/**/ 0xC703F000, 0x3FD058F3, +/**/ 0xBCD236AD, 0xBD30E866, +/**/ 0x00000000, 0x3FE8C800, +/**/ 0xAA79217A, 0xBF3B3C2D, +/**/ 0x46227000, 0x3FD06557, +/**/ 0xB4868D6A, 0x3D0131DF, +/**/ 0x00000000, 0x3FE8C000, +/**/ 0x8062FF3A, 0xBEF8BFCE, +/**/ 0x5FCD6000, 0x3FD071B8, +/**/ 0xA3E01A11, 0xBD3BCB8B, +/**/ 0x00000000, 0x3FE8B800, +/**/ 0xBD2672C4, 0x3F383301, +/**/ 0x14F1D000, 0x3FD07E17, +/**/ 0x4F384BD5, 0xBD3EFCC6, +/**/ 0x00000000, 0x3FE8B800, +/**/ 0x9BFE749C, 0xBF2BFE74, +/**/ 0x667C5000, 0x3FD08A73, +/**/ 0x40C5A329, 0x3D3EBC1D, +/**/ 0x00000000, 0x3FE8B000, +/**/ 0xD4353EB3, 0x3F27BA8C, +/**/ 0x55591000, 0x3FD096CD, +/**/ 0x20550A31, 0x3D3F998D, +/**/ 0x00000000, 0x3FE8B000, +/**/ 0xA062B2E4, 0xBF3A3784, +/**/ 0xE2739000, 0x3FD0A324, +/**/ 0x7EF4030E, 0x3D0C6BEE, +/**/ 0x00000000, 0x3FE8A800, +/**/ 0x5E630281, 0xBECED1F6, +/**/ 0x0EB6C000, 0x3FD0AF7A, +/**/ 0x4945ADAD, 0x3D23CCF9, +/**/ 0x00000000, 0x3FE8A000, +/**/ 0x0C519CAE, 0x3F39CAE0, +/**/ 0xDB0D2000, 0x3FD0BBCC, +/**/ 0xCC5DCDFB, 0x3D32F32C, +/**/ 0x00000000, 0x3FE8A000, +/**/ 0x4EDBA5FD, 0xBF283C02, +/**/ 0x4860B000, 0x3FD0C81D, +/**/ 0x401D1731, 0xBD3E5BCF, +/**/ 0x00000000, 0x3FE89800, +/**/ 0x1899C0F6, 0x3F2C0F60, +/**/ 0x579AB000, 0x3FD0D46B, +/**/ 0xF640E1E6, 0x3D3D2C81, +/**/ 0x00000000, 0x3FE89800, +/**/ 0xBDBE51D0, 0xBF37C414, +/**/ 0x09A43000, 0x3FD0E0B7, +/**/ 0xA7862F2A, 0x3D32A038, +/**/ 0x00000000, 0x3FE89000, +/**/ 0xDD12CE7D, 0x3F03F540, +/**/ 0x5F658000, 0x3FD0ED00, +/**/ 0x285AA803, 0xBD22DC75, +/**/ 0x00000000, 0x3FE88800, +/**/ 0x400C45CD, 0x3F3CCFDE, +/**/ 0x59C67000, 0x3FD0F947, +/**/ 0x7F0818B6, 0xBD395261, +/**/ 0x00000000, 0x3FE88800, +/**/ 0x44FB66B5, 0xBF21A0F5, +/**/ 0xF9AE5000, 0x3FD1058B, +/**/ 0x817D52CD, 0xBD34AB9D, +/**/ 0x00000000, 0x3FE88000, +/**/ 0x2866A138, 0x3F319D95, +/**/ 0x4003F000, 0x3FD111CE, +/**/ 0x096B4B6B, 0xBD1B3237, +/**/ 0x00000000, 0x3FE88000, +/**/ 0xA48B49DA, 0xBF33E5FA, +/**/ 0x2DADA000, 0x3FD11E0E, +/**/ 0x8FCCE5BA, 0xBD2A47F8, +/**/ 0x00000000, 0x3FE87800, +/**/ 0xDEECB0A8, 0x3F1A9336, +/**/ 0xC3912000, 0x3FD12A4B, +/**/ 0x61473259, 0xBD35A750, +/**/ 0x00000000, 0x3FE87800, +/**/ 0xFB6A388D, 0xBF3EC219, +/**/ 0x0293B000, 0x3FD13687, +/**/ 0x99D67123, 0xBD3D3E84, +/**/ 0x00000000, 0x3FE87000, +/**/ 0xC1625090, 0xBF106AE7, +/**/ 0xEB9A0000, 0x3FD142BF, +/**/ 0x85B58A9E, 0x3D31CE61, +/**/ 0x00000000, 0x3FE86800, +/**/ 0xACD4200C, 0x3F369AE5, +/**/ 0x7F887000, 0x3FD14EF6, +/**/ 0x5DFC9794, 0xBD3E97A6, +/**/ 0x00000000, 0x3FE86800, +/**/ 0x9389D11C, 0xBF2D4286, +/**/ 0xBF429000, 0x3FD15B2A, +/**/ 0x49B629B2, 0xBD2D8E3B, +/**/ 0x00000000, 0x3FE86000, +/**/ 0x18618618, 0x3F286186, +/**/ 0xABABA000, 0x3FD1675C, +/**/ 0x731F55C4, 0x3D38380E, +/**/ 0x00000000, 0x3FE86000, +/**/ 0x6AC71708, 0xBF38EF0F, +/**/ 0x45A67000, 0x3FD1738C, +/**/ 0x0032C176, 0xBD39C6E9, +/**/ 0x00000000, 0x3FE85800, +/**/ 0xE00C2C20, 0x3EFFF3D3, +/**/ 0x8E151000, 0x3FD17FB9, +/**/ 0xA74A2684, 0xBD3A8A8B, +/**/ 0x00000000, 0x3FE85000, +/**/ 0xF9592266, 0x3F3CFBA0, +/**/ 0x85D93000, 0x3FD18BE4, +/**/ 0x6F3604AB, 0x3D3C167F, +/**/ 0x00000000, 0x3FE85000, +/**/ 0xFF3D87FA, 0xBF1FE7B0, +/**/ 0x2DD42000, 0x3FD1980D, +/**/ 0x7A361C9A, 0x3D2B7B3A, +/**/ 0x00000000, 0x3FE84800, +/**/ 0x918DC223, 0x3F331E8D, +/**/ 0x86E68000, 0x3FD1A433, +/**/ 0x634E0AAC, 0xBD07A850, +/**/ 0x00000000, 0x3FE84800, +/**/ 0x8D76B549, 0xBF31BAF9, +/**/ 0x91F08000, 0x3FD1B057, +/**/ 0x6DC55E2D, 0xBD32DD46, +/**/ 0x00000000, 0x3FE84000, +/**/ 0xDC90C512, 0x3F22F2EC, +/**/ 0x4FD1D000, 0x3FD1BC79, +/**/ 0x747BA7BE, 0xBD3CCF0C, +/**/ 0x00000000, 0x3FE84000, +/**/ 0x6A0916B9, 0xBF3B442A, +/**/ 0xC169A000, 0x3FD1C898, +/**/ 0xE5C62AFF, 0xBD381410, +/**/ 0x00000000, 0x3FE83800, +/**/ 0x83801838, 0x3EA83801, +/**/ 0xE796A000, 0x3FD1D4B5, +/**/ 0xD197BAC2, 0x3D222A5B, +/**/ 0x00000000, 0x3FE83000, +/**/ 0xCBD11C5C, 0x3F3B6A41, +/**/ 0xC3371000, 0x3FD1E0D0, +/**/ 0xA9B0D4A0, 0x3D3AF8F2, +/**/ 0x00000000, 0x3FE83000, +/**/ 0xCB7A3CD6, 0xBF225381, +/**/ 0x5528B000, 0x3FD1ECE9, +/**/ 0x09B4A3B8, 0xBD184E7B, +/**/ 0x00000000, 0x3FE82800, +/**/ 0x152500C1, 0x3F32500C, +/**/ 0x9E48A000, 0x3FD1F8FF, +/**/ 0x040CBE77, 0x3D27946C, +/**/ 0x00000000, 0x3FE82800, +/**/ 0x14902134, 0xBF32285F, +/**/ 0x9F73B000, 0x3FD20513, +/**/ 0x1609E0A4, 0x3CF6E15E, +/**/ 0x00000000, 0x3FE82000, +/**/ 0xA4018213, 0x3F22D9EB, +/**/ 0x59861000, 0x3FD21125, +/**/ 0xBA2950C4, 0x3D382E78, +/**/ 0x00000000, 0x3FE82000, +/**/ 0xFC6BBFF4, 0xBF3AEFFC, +/**/ 0xCD5B9000, 0x3FD21D34, +/**/ 0xB28BADAA, 0x3D3B552F, +/**/ 0x00000000, 0x3FE81800, +/**/ 0x18181818, 0x3EE81818, +/**/ 0xFBCF8000, 0x3FD22941, +/**/ 0xF5EB0963, 0xBD3A6976, +/**/ 0x00000000, 0x3FE81000, +/**/ 0x4FF0F3C6, 0x3F3C7F27, +/**/ 0xE5BC9000, 0x3FD2354C, +/**/ 0x0602A663, 0xBD3D78ED, +/**/ 0x00000000, 0x3FE81000, +/**/ 0x0A86941D, 0xBF1ED344, +/**/ 0x8BFD1000, 0x3FD24155, +/**/ 0x3228FCAD, 0x3D300FFF, +/**/ 0x00000000, 0x3FE80800, +/**/ 0x1B0BD52D, 0x3F3424D0, +/**/ 0xEF6AF000, 0x3FD24D5B, +/**/ 0xFC9FABDD, 0xBCBDD780, +/**/ 0x00000000, 0x3FE80800, +/**/ 0xFE7F9FE8, 0xBF2FE7F9, +/**/ 0x10DF7000, 0x3FD25960, +/**/ 0x224EA3E3, 0x3D38E7BC, +/**/ 0x00000000, 0x3FE80000, +/**/ 0x18018018, 0x3F280180, +/**/ 0xF1338000, 0x3FD26561, +/**/ 0x66FAA45F, 0x3D38B488, +/**/ 0x00000000, 0x3FE80000, +/**/ 0x5FF40180, 0xBF37FD00, +/**/ 0x913F8000, 0x3FD27161, +/**/ 0xF61564B4, 0x3D34F4F1, +/**/ 0x00000000, 0x3FE7F800, +/**/ 0x9750B6C7, 0x3F104AE8, +/**/ 0xF1DB6000, 0x3FD27D5E, +/**/ 0x78CAC9F4, 0xBD092374, +/**/ 0x00000000, 0x3FE7F800, +/**/ 0xF405FD01, 0xBF3FD017, +/**/ 0x13DE8000, 0x3FD2895A, +/**/ 0xD24C13F0, 0x3D3A8D7A, +/**/ 0x00000000, 0x3FE7F000, +/**/ 0xC9C5485E, 0xBF0D2BF1, +/**/ 0xF81FF000, 0x3FD29552, +/**/ 0x1771C408, 0x3D348D30, +/**/ 0x00000000, 0x3FE7E800, +/**/ 0xD029DB60, 0x3F38927F, +/**/ 0x9F763000, 0x3FD2A149, +/**/ 0x51F3AADC, 0xBD30DBBF, +/**/ 0x00000000, 0x3FE7E800, +/**/ 0xB0A45169, 0xBF26504A, +/**/ 0x0AB73000, 0x3FD2AD3E, +/**/ 0x488C359F, 0x3D2B972E, +/**/ 0x00000000, 0x3FE7E000, +/**/ 0xD278E8DD, 0x3F312A8A, +/**/ 0x3AB8A000, 0x3FD2B930, +/**/ 0xD6BFB0A5, 0xBD26DB12, +/**/ 0x00000000, 0x3FE7E000, +/**/ 0x24BB32E7, 0xBF327577, +/**/ 0x304F8000, 0x3FD2C520, +/**/ 0x8C342F39, 0x3D230852, +/**/ 0x00000000, 0x3FE7D800, +/**/ 0xA4B45AEC, 0x3F23EF9A, +/**/ 0xEC508000, 0x3FD2D10D, +/**/ 0xF7088353, 0x3D360C61, +/**/ 0x00000000, 0x3FE7D800, +/**/ 0x32748CC1, 0xBF398DAF, +/**/ 0x6F8FD000, 0x3FD2DCF9, +/**/ 0x8E33C9CE, 0x3D20B4A2, +/**/ 0x00000000, 0x3FE7D000, +/**/ 0x417D05F4, 0x3F07D05F, +/**/ 0xBAE12000, 0x3FD2E8E2, +/**/ 0x99B72BD8, 0xBD267B1E, +/**/ 0x00000000, 0x3FE7C800, +/**/ 0x431D3027, 0x3F3F8EF7, +/**/ 0xCF17A000, 0x3FD2F4C9, +/**/ 0x9374B87B, 0x3D371F04, +/**/ 0x00000000, 0x3FE7C800, +/**/ 0xDAD83E6C, 0xBF0E77A3, +/**/ 0xAD063000, 0x3FD300AE, +/**/ 0x8B75FCAC, 0x3D342F56, +/**/ 0x00000000, 0x3FE7C000, +/**/ 0x588D1676, 0x3F38E041, +/**/ 0x557F2000, 0x3FD30C91, +/**/ 0xA1451755, 0xBD142958, +/**/ 0x00000000, 0x3FE7C000, +/**/ 0x1FE8414C, 0xBF24C6DD, +/**/ 0xC9544000, 0x3FD31871, +/**/ 0x94CECFD9, 0x3D184FAB, +/**/ 0x00000000, 0x3FE7B800, +/**/ 0x81C2D3B2, 0x3F3265F4, +/**/ 0x09570000, 0x3FD32450, +/**/ 0x9BDAE59D, 0x3D3D271B, +/**/ 0x00000000, 0x3FE7B800, +/**/ 0xB6466407, 0xBF30C39C, +/**/ 0x16586000, 0x3FD3302C, +/**/ 0xC2A3E08B, 0x3D36217D, +/**/ 0x00000000, 0x3FE7B000, +/**/ 0x12B21224, 0x3F283FAD, +/**/ 0xF128E000, 0x3FD33C05, +/**/ 0x380E1A7D, 0xBD22B906, +/**/ 0x00000000, 0x3FE7B000, +/**/ 0xF899E55D, 0xBF36EFB8, +/**/ 0x9A988000, 0x3FD347DD, +/**/ 0xD4C58092, 0xBD25594D, +/**/ 0x00000000, 0x3FE7A800, +/**/ 0x3FF42B9F, 0x3F1836B6, +/**/ 0x1376E000, 0x3FD353B3, +/**/ 0xE6C26D9B, 0xBD1331AF, +/**/ 0x00000000, 0x3FE7A800, +/**/ 0x0B739FF4, 0xBF3CE7FD, +/**/ 0x5C933000, 0x3FD35F86, +/**/ 0x4EA1A54A, 0xBD3B07DE, +/**/ 0x00000000, 0x3FE7A000, +/**/ 0xE8017A00, 0x3EC7A005, +/**/ 0x76BC1000, 0x3FD36B57, +/**/ 0x5A9C223F, 0x3D116978, +/**/ 0x00000000, 0x3FE79800, +/**/ 0xB1CC5B7B, 0x3F3D535D, +/**/ 0x62BFE000, 0x3FD37726, +/**/ 0xAC53B023, 0xBD3E9436, +/**/ 0x00000000, 0x3FE79800, +/**/ 0xE0DA37A9, 0xBF15EEAC, +/**/ 0x216C5000, 0x3FD382F3, +/**/ 0x1D1A7F6D, 0xBD1061D2, +/**/ 0x00000000, 0x3FE79000, +/**/ 0x344E16D6, 0x3F37C21E, +/**/ 0xB38ED000, 0x3FD38EBD, +/**/ 0xE67D4CA0, 0x3D290582, +/**/ 0x00000000, 0x3FE79000, +/**/ 0x39C9E465, 0xBF25E69A, +/**/ 0x19F45000, 0x3FD39A86, +/**/ 0x937354F5, 0x3D18EE51, +/**/ 0x00000000, 0x3FE78800, +/**/ 0xC52640BC, 0x3F32640B, +/**/ 0x55694000, 0x3FD3A64C, +/**/ 0xBCD735D0, 0x3D37A71C, +/**/ 0x00000000, 0x3FE78800, +/**/ 0x2F6A09ED, 0xBF3037DE, +/**/ 0x66B9C000, 0x3FD3B210, +/**/ 0x9811560E, 0xBD33C1ED, +/**/ 0x00000000, 0x3FE78000, +/**/ 0x01781A72, 0x3F2A71DC, +/**/ 0x4EB15000, 0x3FD3BDD2, +/**/ 0x970E6ED9, 0xBD3257B4, +/**/ 0x00000000, 0x3FE78000, +/**/ 0xA9EEBFF4, 0xBF354996, +/**/ 0x0E1B2000, 0x3FD3C992, +/**/ 0xAA680B76, 0x3D141C28, +/**/ 0x00000000, 0x3FE77800, +/**/ 0xAC60D341, 0x3F208119, +/**/ 0xA5C1F000, 0x3FD3D54F, +/**/ 0xD9A395E3, 0x3D3C3E1C, +/**/ 0x00000000, 0x3FE77800, +/**/ 0x742E2DD0, 0xBF3A28AE, +/**/ 0x16701000, 0x3FD3E10B, +/**/ 0x145429C7, 0x3D3F3BCF, +/**/ 0x00000000, 0x3FE77000, +/**/ 0x36340177, 0x3F0BD584, +/**/ 0x60EF6000, 0x3FD3ECC4, +/**/ 0x27C1300F, 0xBD060286, +/**/ 0x00000000, 0x3FE77000, +/**/ 0x240C7174, 0xBF3ED55D, +/**/ 0x86094000, 0x3FD3F87B, +/**/ 0x54589889, 0xBD35DFD7, +/**/ 0x00000000, 0x3FE76800, +/**/ 0xAB277F45, 0xBEF18DE5, +/**/ 0x8686A000, 0x3FD40430, +/**/ 0x3049F7D3, 0x3D3F8EF4, +/**/ 0x00000000, 0x3FE76000, +/**/ 0x01D3C7B8, 0x3F3CB026, +/**/ 0x63303000, 0x3FD40FE3, +/**/ 0xE79F05C6, 0x3D3E5C5F, +/**/ 0x00000000, 0x3FE76000, +/**/ 0xA9D08664, 0xBF15E95B, +/**/ 0x1CCE1000, 0x3FD41B94, +/**/ 0x13E43FC9, 0xBD304690, +/**/ 0x00000000, 0x3FE75800, +/**/ 0x097CFD43, 0x3F3867A4, +/**/ 0xB427E000, 0x3FD42742, +/**/ 0x02B82675, 0xBD398727, +/**/ 0x00000000, 0x3FE75800, +/**/ 0xE8A9353E, 0xBF2353DF, +/**/ 0x2A04F000, 0x3FD432EF, +/**/ 0x931715AD, 0xBD3FB129, +/**/ 0x00000000, 0x3FE75000, +/**/ 0x4F13DC4A, 0x3F3450E6, +/**/ 0x7F2C1000, 0x3FD43E99, +/**/ 0x40C41A04, 0x3D1C3F72, +/**/ 0x00000000, 0x3FE75000, +/**/ 0xE8B1B4FC, 0xBF2B4FBF, +/**/ 0xB463C000, 0x3FD44A41, +/**/ 0xF37CF612, 0x3D31EE28, +/**/ 0x00000000, 0x3FE74800, +/**/ 0x7E458100, 0x3F306BB6, +/**/ 0xCA720000, 0x3FD455E7, +/**/ 0x36629AED, 0x3D1AD8C6, +/**/ 0x00000000, 0x3FE74800, +/**/ 0x1745D174, 0xBF31745D, +/**/ 0xC21C6000, 0x3FD4618B, +/**/ 0x484C84CC, 0xBD13D82F, +/**/ 0x00000000, 0x3FE74000, +/**/ 0x236DEC04, 0x3F296FBD, +/**/ 0x9C280000, 0x3FD46D2D, +/**/ 0x5F67F75A, 0x3D359B27, +/**/ 0x00000000, 0x3FE74000, +/**/ 0x3B304B87, 0xBF350F9D, +/**/ 0x5959B000, 0x3FD478CD, +/**/ 0xF0C8D098, 0x3D2EC89B, +/**/ 0x00000000, 0x3FE73800, +/**/ 0xA4EBDC70, 0x3F226A51, +/**/ 0xFA75C000, 0x3FD4846A, +/**/ 0xE3798DCE, 0xBD263EA2, +/**/ 0x00000000, 0x3FE73800, +/**/ 0xF00B9A78, 0xBF3879D5, +/**/ 0x80401000, 0x3FD49006, +/**/ 0xFE1A0F8C, 0xBD38BCCF, +/**/ 0x00000000, 0x3FE73000, +/**/ 0x5DAAD90C, 0x3F178D7F, +/**/ 0xEB7C1000, 0x3FD49B9F, +/**/ 0x58AB60D7, 0x3D3DAC1C, +/**/ 0x00000000, 0x3FE73000, +/**/ 0x783709C7, 0xBF3BB33C, +/**/ 0x3CED0000, 0x3FD4A737, +/**/ 0xEBF35449, 0xBD39A234, +/**/ 0x00000000, 0x3FE72800, +/**/ 0x265AD23A, 0x3F061274, +/**/ 0x75556000, 0x3FD4B2CC, +/**/ 0xC78BFA4B, 0xBD380FCB, +/**/ 0x00000000, 0x3FE72800, +/**/ 0xC90A1FD2, 0xBF3EBC05, +/**/ 0x95778000, 0x3FD4BE5F, +/**/ 0xCD9AD824, 0xBD3D7C92, +/**/ 0x00000000, 0x3FE72000, +/**/ 0x38017200, 0xBEC71FFA, +/**/ 0x9E153000, 0x3FD4C9F0, +/**/ 0x70E02DE0, 0xBD2E1DDE, +/**/ 0x00000000, 0x3FE71800, +/**/ 0x74A050E1, 0x3F3E6B99, +/**/ 0x8FEFE000, 0x3FD4D57F, +/**/ 0x7FD06868, 0x3D23F926, +/**/ 0x00000000, 0x3FE71800, +/**/ 0xB8BD1180, 0xBF077400, +/**/ 0x6BC8A000, 0x3FD4E10C, +/**/ 0x1636F061, 0x3CF8283F, +/**/ 0x00000000, 0x3FE71000, +/**/ 0xE3E0453A, 0x3F3BC36C, +/**/ 0x32600000, 0x3FD4EC97, +/**/ 0xAF04D104, 0x3D234D7A, +/**/ 0x00000000, 0x3FE71000, +/**/ 0x6935DDC5, 0xBF15FA98, +/**/ 0xE4764000, 0x3FD4F81F, +/**/ 0x434FF08D, 0xBD27FCF6, +/**/ 0x00000000, 0x3FE70800, +/**/ 0x7337CF08, 0x3F394B40, +/**/ 0x82CB2000, 0x3FD503A6, +/**/ 0xF16F9B5D, 0xBD2A68C8, +/**/ 0x00000000, 0x3FE70800, +/**/ 0xA835403A, 0xBF1F7B97, +/**/ 0x0E1E0000, 0x3FD50F2B, +/**/ 0x8C47B8D8, 0x3D3A0940, +/**/ 0x00000000, 0x3FE70000, +/**/ 0x5C0B8170, 0x3F3702E0, +/**/ 0x872E0000, 0x3FD51AAD, +/**/ 0xDB0A7CC1, 0xBD3F4BD8, +/**/ 0x00000000, 0x3FE70000, +/**/ 0x4F67A855, 0xBF241EE6, +/**/ 0xEEB99000, 0x3FD5262D, +/**/ 0x70894A01, 0xBD3E1B9F, +/**/ 0x00000000, 0x3FE6F800, +/**/ 0x221C0170, 0x3F34EA19, +/**/ 0x457EE000, 0x3FD531AC, +/**/ 0x7D931501, 0x3D3DF83B, +/**/ 0x00000000, 0x3FE6F800, +/**/ 0x5508CA5C, 0xBF282102, +/**/ 0x8C3BE000, 0x3FD53D28, +/**/ 0xEB6DFAC5, 0xBD111397, +/**/ 0x00000000, 0x3FE6F000, +/**/ 0x9300B793, 0x3F3300B7, +/**/ 0xC3ADD000, 0x3FD548A2, +/**/ 0x63081CF7, 0x3D23167E, +/**/ 0x00000000, 0x3FE6F000, +/**/ 0x005BB90F, 0xBF2BC486, +/**/ 0xEC91C000, 0x3FD5541A, +/**/ 0xDC72EEBA, 0xBCF816AA, +/**/ 0x00000000, 0x3FE6E800, +/**/ 0xC5A3A00B, 0x3F314688, +/**/ 0x07A44000, 0x3FD55F91, +/**/ 0x78DF4A62, 0xBD11E647, +/**/ 0x00000000, 0x3FE6E800, +/**/ 0xDA9C5AE1, 0xBF2F09D6, +/**/ 0x15A18000, 0x3FD56B05, +/**/ 0xBC4A23FC, 0x3D29247B, +/**/ 0x00000000, 0x3FE6E000, +/**/ 0x337C6CB1, 0x3F2F76B4, +/**/ 0x17456000, 0x3FD57677, +/**/ 0x9524D7CA, 0xBD364EAD, +/**/ 0x00000000, 0x3FE6E000, +/**/ 0xEDF4EC87, 0xBF30F8AC, +/**/ 0x0D4B3000, 0x3FD581E7, +/**/ 0xB12D8F1D, 0xBD1F31E1, +/**/ 0x00000000, 0x3FE6D800, +/**/ 0x6EAEF381, 0x3F2CBDF2, +/**/ 0xF86E0000, 0x3FD58D54, +/**/ 0x0A795215, 0x3D2791F3, +/**/ 0x00000000, 0x3FE6D800, +/**/ 0xB624BFF5, 0xBF323DB9, +/**/ 0xD9688000, 0x3FD598C0, +/**/ 0x70D96DA4, 0xBD385F49, +/**/ 0x00000000, 0x3FE6D000, +/**/ 0x1C860FB0, 0x3F2A6268, +/**/ 0xB0F4D000, 0x3FD5A42A, +/**/ 0x2DF7BA69, 0xBCDE63AF, +/**/ 0x00000000, 0x3FE6D000, +/**/ 0xB253BAE1, 0xBF335443, +/**/ 0x7FCCE000, 0x3FD5AF92, +/**/ 0xF5FFC77A, 0xBD1C032F, +/**/ 0x00000000, 0x3FE6C800, +/**/ 0xAB4294D4, 0x3F2863B1, +/**/ 0x46AA2000, 0x3FD5BAF8, +/**/ 0xF873FA41, 0xBD339AE8, +/**/ 0x00000000, 0x3FE6C800, +/**/ 0x87EAA6DF, 0xBF343C7C, +/**/ 0x0645A000, 0x3FD5C65C, +/**/ 0x0180EE65, 0xBD39FE06, +/**/ 0x00000000, 0x3FE6C000, +/**/ 0x16C16C17, 0x3F26C16C, +/**/ 0xBF581000, 0x3FD5D1BD, +/**/ 0xC9C7C238, 0xBD38D6BD, +/**/ 0x00000000, 0x3FE6C000, +/**/ 0x95C33E00, 0xBF34F695, +/**/ 0x7299C000, 0x3FD5DD1D, +/**/ 0x8815CE17, 0xBD38AF61, +/**/ 0x00000000, 0x3FE6B800, +/**/ 0xE7802D73, 0x3F257B34, +/**/ 0x20C29000, 0x3FD5E87B, +/**/ 0x8F7738FA, 0x3D3527D1, +/**/ 0x00000000, 0x3FE6B800, +/**/ 0xF4A5582C, 0xBF3582BF, +/**/ 0xCA8A2000, 0x3FD5F3D6, +/**/ 0x8E19CC75, 0x3D37AF84, +/**/ 0x00000000, 0x3FE6B000, +/**/ 0x31A3CFC7, 0x3F2490AA, +/**/ 0x70A79000, 0x3FD5FF30, +/**/ 0x9F105039, 0x3D2E9E43, +/**/ 0x00000000, 0x3FE6B000, +/**/ 0x77C30E5A, 0xBF35E12C, +/**/ 0x13D1A000, 0x3FD60A88, +/**/ 0xC879AF55, 0x3D36E9B9, +/**/ 0x00000000, 0x3FE6A800, +/**/ 0x94016A94, 0x3F24016A, +/**/ 0xB4BEC000, 0x3FD615DD, +/**/ 0x90BC04B2, 0x3D13C7CA, +/**/ 0x00000000, 0x3FE6A800, +/**/ 0xAD33D63F, 0xBF36120B, +/**/ 0x5424F000, 0x3FD62131, +/**/ 0x4AA68669, 0xBD3382FC, +/**/ 0x00000000, 0x3FE6A000, +/**/ 0x3729043E, 0x3F23CD15, +/**/ 0xF2B9C000, 0x3FD62C82, +/**/ 0xBD7C8A98, 0x3D3E54BD } }; + +static const union {int4 i[4350]; double x[2175]; } vj = { .i = { +/**/ 0x7D161C28, 0x3F46A400, +/**/ 0x20600000, 0xBF46A200, +/**/ 0xAA7623D9, 0x3D27DC4E, +/**/ 0xD596E639, 0x3F4693FA, +/**/ 0x4CE00000, 0xBF4691FD, +/**/ 0x29C3F0AD, 0x3D26B0CF, +/**/ 0x3219CE89, 0x3F4683F5, +/**/ 0x7B600000, 0xBF4681FA, +/**/ 0x95B9FDCC, 0x3D22B290, +/**/ 0x929ED397, 0x3F4673EF, +/**/ 0xABE00000, 0xBF4671F7, +/**/ 0xFA2F2D87, 0x3D17C727, +/**/ 0xF725F3E2, 0x3F4663E9, +/**/ 0xDE600000, 0xBF4661F4, +/**/ 0x6EDBFF1C, 0x3CF22ED3, +/**/ 0x5FAF2DE9, 0x3F4653E4, +/**/ 0x12E00000, 0xBF4651F2, +/**/ 0x157812BB, 0xBD144936, +/**/ 0xCC3A802B, 0x3F4643DE, +/**/ 0x49600000, 0xBF4641EF, +/**/ 0x60314E05, 0xBD2959CB, +/**/ 0x3CC7E927, 0x3F4633D9, +/**/ 0x81E00000, 0xBF4631EC, +/**/ 0xC3638E99, 0xBD35ABDA, +/**/ 0xB157675C, 0x3F4623D3, +/**/ 0xBC800000, 0xBF4621E9, +/**/ 0xC63F9A21, 0x3D3FF1D3, +/**/ 0x29E8F948, 0x3F4613CE, +/**/ 0xF9000000, 0xBF4611E6, +/**/ 0x71EEE611, 0x3D342D26, +/**/ 0xA67C9D6B, 0x3F4603C8, +/**/ 0x37800000, 0xBF4601E4, +/**/ 0x11A09689, 0x3D1C1C77, +/**/ 0x27125244, 0x3F45F3C3, +/**/ 0x78000000, 0xBF45F1E1, +/**/ 0xF7DC643C, 0xBD1DFD16, +/**/ 0xABAA1651, 0x3F45E3BD, +/**/ 0xBA800000, 0xBF45E1DE, +/**/ 0x91318A02, 0xBD376503, +/**/ 0x3443E812, 0x3F45D3B8, +/**/ 0xFF200000, 0xBF45D1DB, +/**/ 0xCE55DCDD, 0x3D3756E4, +/**/ 0xC0DFC606, 0x3F45C3B2, +/**/ 0x45A00000, 0xBF45C1D9, +/**/ 0x8F6F8FA0, 0x3D12D5CF, +/**/ 0x517DAEAB, 0x3F45B3AD, +/**/ 0x8E200000, 0xBF45B1D6, +/**/ 0x9B85DC2C, 0xBD2E90AB, +/**/ 0xE61DA081, 0x3F45A3A7, +/**/ 0xD8C00000, 0xBF45A1D3, +/**/ 0x3BF5AC54, 0x3D3B5E88, +/**/ 0x7EBF9A07, 0x3F4593A2, +/**/ 0x25400000, 0xBF4591D1, +/**/ 0x0C86DDB1, 0x3D12AC3A, +/**/ 0x1B6399BB, 0x3F45839D, +/**/ 0x73C00000, 0xBF4581CE, +/**/ 0x76830985, 0xBD3361C2, +/**/ 0xBC099E1C, 0x3F457397, +/**/ 0xC4600000, 0xBF4571CB, +/**/ 0xD062EBFF, 0x3D333915, +/**/ 0x60B1A5AA, 0x3F456392, +/**/ 0x16E00000, 0xBF4561C9, +/**/ 0x9CC4988F, 0xBD1E0DA0, +/**/ 0x095BAEE4, 0x3F45538D, +/**/ 0x6B800000, 0xBF4551C6, +/**/ 0x235BC18A, 0x3D3C69C4, +/**/ 0xB607B848, 0x3F454387, +/**/ 0xC2000000, 0xBF4541C3, +/**/ 0xF7737723, 0xBCEFCC99, +/**/ 0x66B5C056, 0x3F453382, +/**/ 0x1A800000, 0xBF4531C1, +/**/ 0x809CBCBB, 0xBD3FBAE2, +/**/ 0x1B65C58C, 0x3F45237D, +/**/ 0x75200000, 0xBF4521BE, +/**/ 0x194FEE63, 0x3CCAA5C8, +/**/ 0xD417C66A, 0x3F451377, +/**/ 0xD1C00000, 0xBF4511BB, +/**/ 0xE1CC7BBC, 0x3D3ED325, +/**/ 0x90CBC16E, 0x3F450372, +/**/ 0x30400000, 0xBF4501B9, +/**/ 0x68AB3742, 0xBD0F0298, +/**/ 0x5181B517, 0x3F44F36D, +/**/ 0x90E00000, 0xBF44F1B6, +/**/ 0x41E67AD9, 0x3D381BE1, +/**/ 0x16399FE6, 0x3F44E368, +/**/ 0xF3600000, 0xBF44E1B3, +/**/ 0x668D3662, 0xBD2A6E79, +/**/ 0xDEF38058, 0x3F44D362, +/**/ 0x58000000, 0xBF44D1B1, +/**/ 0x21F8B7C2, 0x3D284EA7, +/**/ 0xABAF54EC, 0x3F44C35D, +/**/ 0xBE800000, 0xBF44C1AE, +/**/ 0x7417D9C5, 0xBD3BC76D, +/**/ 0x7C6D1C22, 0x3F44B358, +/**/ 0x27200000, 0xBF44B1AC, +/**/ 0x16AAD1FC, 0xBD1409FD, +/**/ 0x512CD479, 0x3F44A353, +/**/ 0x91C00000, 0xBF44A1A9, +/**/ 0x98BC14FD, 0x3D30771E, +/**/ 0x29EE7C70, 0x3F44934E, +/**/ 0xFE400000, 0xBF4491A6, +/**/ 0x5CCB7232, 0xBD3B5993, +/**/ 0x06B21285, 0x3F448349, +/**/ 0x6CE00000, 0xBF4481A4, +/**/ 0x5512F9C2, 0xBD20E729, +/**/ 0xE7779538, 0x3F447343, +/**/ 0xDD800000, 0xBF4471A1, +/**/ 0x55B30899, 0x3D225436, +/**/ 0xCC3F0308, 0x3F44633E, +/**/ 0x50200000, 0xBF44619F, +/**/ 0x9E54E31F, 0x3D39807C, +/**/ 0xB5085A73, 0x3F445339, +/**/ 0xC4A00000, 0xBF44519C, +/**/ 0xD5804C0E, 0xBD376F6F, +/**/ 0xA1D399FA, 0x3F444334, +/**/ 0x3B400000, 0xBF44419A, +/**/ 0x6CDE6425, 0xBD234953, +/**/ 0x92A0C01A, 0x3F44332F, +/**/ 0xB3E00000, 0xBF443197, +/**/ 0xAAF6596F, 0x3D070E7B, +/**/ 0x876FCB54, 0x3F44232A, +/**/ 0x2E800000, 0xBF442195, +/**/ 0x4EC011F1, 0x3D2C49F8, +/**/ 0x8040BA25, 0x3F441325, +/**/ 0xAB200000, 0xBF441192, +/**/ 0xD8AAA7EB, 0x3D3825DC, +/**/ 0x7D138B0E, 0x3F440320, +/**/ 0x29A00000, 0xBF440190, +/**/ 0xFE0B73D6, 0xBD3F1A8D, +/**/ 0x7DE83C8C, 0x3F43F31B, +/**/ 0xAA400000, 0xBF43F18D, +/**/ 0xE46CA26B, 0xBD379B43, +/**/ 0x82BECD20, 0x3F43E316, +/**/ 0x2CE00000, 0xBF43E18B, +/**/ 0x6283780D, 0xBD315B44, +/**/ 0x8B973B49, 0x3F43D311, +/**/ 0xB1800000, 0xBF43D188, +/**/ 0x017589BE, 0xBD28B31E, +/**/ 0x98718584, 0x3F43C30C, +/**/ 0x38200000, 0xBF43C186, +/**/ 0x8FBB296E, 0xBD212A46, +/**/ 0xA94DAA52, 0x3F43B307, +/**/ 0xC0C00000, 0xBF43B183, +/**/ 0x045CBBD2, 0xBD183403, +/**/ 0xBE2BA832, 0x3F43A302, +/**/ 0x4B600000, 0xBF43A181, +/**/ 0xD7CC5936, 0xBD13009B, +/**/ 0xD70B7DA2, 0x3F4392FD, +/**/ 0xD8000000, 0xBF43917E, +/**/ 0xC1742279, 0xBD12B655, +/**/ 0xF3ED2921, 0x3F4382F8, +/**/ 0x66A00000, 0xBF43817C, +/**/ 0xEA83FAE8, 0xBD17512E, +/**/ 0x14D0A930, 0x3F4372F4, +/**/ 0xF7400000, 0xBF437179, +/**/ 0xBED65875, 0xBD206692, +/**/ 0x39B5FC4C, 0x3F4362EF, +/**/ 0x89E00000, 0xBF436177, +/**/ 0xD38FFE9E, 0xBD27931B, +/**/ 0x629D20F5, 0x3F4352EA, +/**/ 0x1E800000, 0xBF435175, +/**/ 0xE524208F, 0xBD309618, +/**/ 0x8F8615AA, 0x3F4342E5, +/**/ 0xB5200000, 0xBF434172, +/**/ 0xDD4C72C5, 0xBD3697E9, +/**/ 0xC070D8EB, 0x3F4332E0, +/**/ 0x4DC00000, 0xBF433170, +/**/ 0x5E6E12C3, 0xBD3DCE00, +/**/ 0xF55D6935, 0x3F4322DB, +/**/ 0xE8800000, 0xBF43216D, +/**/ 0x0AE9A8CE, 0x3D39C8A4, +/**/ 0x2E4BC509, 0x3F4312D7, +/**/ 0x85200000, 0xBF43116B, +/**/ 0xD1CD2FA1, 0x3D302D03, +/**/ 0x6B3BEAE5, 0x3F4302D2, +/**/ 0x23C00000, 0xBF430169, +/**/ 0xA3BADFD1, 0x3D15807D, +/**/ 0xAC2DD949, 0x3F42F2CD, +/**/ 0xC4600000, 0xBF42F166, +/**/ 0xF57F0504, 0xBD1A7422, +/**/ 0xF1218EB3, 0x3F42E2C8, +/**/ 0x67000000, 0xBF42E164, +/**/ 0x2F2C781C, 0xBD33C974, +/**/ 0x3A1709A3, 0x3F42D2C4, +/**/ 0x0BC00000, 0xBF42D162, +/**/ 0x851A1E61, 0x3D3DDBDD, +/**/ 0x870E4898, 0x3F42C2BF, +/**/ 0xB2600000, 0xBF42C15F, +/**/ 0xA14AA8FD, 0x3D2CA7D9, +/**/ 0xD8074A10, 0x3F42B2BA, +/**/ 0x5B000000, 0xBF42B15D, +/**/ 0xDDCDDFF5, 0xBD03022E, +/**/ 0x2D020C8C, 0x3F42A2B6, +/**/ 0x05A00000, 0xBF42A15B, +/**/ 0x0F9231A8, 0xBD343FBA, +/**/ 0x85FE8E8A, 0x3F4292B1, +/**/ 0xB2600000, 0xBF429158, +/**/ 0xA52C9CCF, 0x3D38B690, +/**/ 0xE2FCCE8A, 0x3F4282AC, +/**/ 0x61000000, 0xBF428156, +/**/ 0xC8CC82EB, 0x3D120E6A, +/**/ 0x43FCCB0A, 0x3F4272A8, +/**/ 0x11A00000, 0xBF427154, +/**/ 0x792E6C51, 0xBD30D79B, +/**/ 0xA8FE8289, 0x3F4262A3, +/**/ 0xC4600000, 0xBF426151, +/**/ 0x91F7F7AA, 0x3D38A5EE, +/**/ 0x1201F387, 0x3F42529F, +/**/ 0x79000000, 0xBF42514F, +/**/ 0x46C2E8BA, 0x3CEFA728, +/**/ 0x7F071C84, 0x3F42429A, +/**/ 0x2FA00000, 0xBF42414D, +/**/ 0xFA447A17, 0xBD37D0BA, +/**/ 0xF00DFBFD, 0x3F423295, +/**/ 0xE8600000, 0xBF42314A, +/**/ 0x94AF3FED, 0x3D2C7A24, +/**/ 0x65169072, 0x3F422291, +/**/ 0xA3000000, 0xBF422148, +/**/ 0x050CEA04, 0xBD29B0BD, +/**/ 0xDE20D863, 0x3F42128C, +/**/ 0x5FC00000, 0xBF421146, +/**/ 0x0C3035EB, 0x3D36EFF3, +/**/ 0x5B2CD24E, 0x3F420288, +/**/ 0x1E600000, 0xBF420144, +/**/ 0x73569B27, 0xBD19A3E2, +/**/ 0xDC3A7CB2, 0x3F41F283, +/**/ 0xDF200000, 0xBF41F141, +/**/ 0xEEB67715, 0x3D3B1DDE, +/**/ 0x6149D610, 0x3F41E27F, +/**/ 0xA1C00000, 0xBF41E13F, +/**/ 0x94F49154, 0xBD11EA17, +/**/ 0xEA5ADCE5, 0x3F41D27A, +/**/ 0x66800000, 0xBF41D13D, +/**/ 0x52DD9D37, 0x3D3ACED9, +/**/ 0x776D8FB1, 0x3F41C276, +/**/ 0x2D200000, 0xBF41C13B, +/**/ 0xF72D8EEB, 0xBD1C140B, +/**/ 0x0881ECF4, 0x3F41B272, +/**/ 0xF5E00000, 0xBF41B138, +/**/ 0x939583E1, 0x3D360AE5, +/**/ 0x9D97F32C, 0x3F41A26D, +/**/ 0xC0800000, 0xBF41A136, +/**/ 0x1D246C7C, 0xBD2C00D9, +/**/ 0x36AFA0D9, 0x3F419269, +/**/ 0x8D400000, 0xBF419134, +/**/ 0x0B955CFB, 0x3D29B40E, +/**/ 0xD3C8F479, 0x3F418264, +/**/ 0x5BE00000, 0xBF418132, +/**/ 0x45A6C249, 0xBD3964BF, +/**/ 0x74E3EC8D, 0x3F417260, +/**/ 0x2CA00000, 0xBF417130, +/**/ 0xF3363612, 0xBCE777E0, +/**/ 0x1A008792, 0x3F41625C, +/**/ 0xFF600000, 0xBF41612D, +/**/ 0x28DE8296, 0x3D36D608, +/**/ 0xC31EC409, 0x3F415257, +/**/ 0xD4000000, 0xBF41512B, +/**/ 0x4BB1B788, 0xBD32AE69, +/**/ 0x703EA071, 0x3F414253, +/**/ 0xAAC00000, 0xBF414129, +/**/ 0x170ECD8C, 0x3D05BF68, +/**/ 0x21601B48, 0x3F41324F, +/**/ 0x83800000, 0xBF413127, +/**/ 0x7C653BFC, 0x3D370A0B, +/**/ 0xD683330E, 0x3F41224A, +/**/ 0x5E200000, 0xBF412125, +/**/ 0x77BBBEBF, 0xBD35B70D, +/**/ 0x8FA7E642, 0x3F411246, +/**/ 0x3AE00000, 0xBF411123, +/**/ 0x93ABC1CD, 0xBD0C52EB, +/**/ 0x4CCE3363, 0x3F410242, +/**/ 0x19A00000, 0xBF410121, +/**/ 0xE5C6F4C7, 0x3D2B2237, +/**/ 0x0DF618F1, 0x3F40F23E, +/**/ 0xFA600000, 0xBF40F11E, +/**/ 0x1E9A50AD, 0x3D3D9C5F, +/**/ 0xD31F956A, 0x3F40E239, +/**/ 0xDD000000, 0xBF40E11C, +/**/ 0x8965F0DA, 0xBD336793, +/**/ 0x9C4AA74E, 0x3F40D235, +/**/ 0xC1C00000, 0xBF40D11A, +/**/ 0x7E49E231, 0xBD15E6EE, +/**/ 0x69774D1D, 0x3F40C231, +/**/ 0xA8800000, 0xBF40C118, +/**/ 0x04FD621C, 0x3D1D9B9D, +/**/ 0x3AA58554, 0x3F40B22D, +/**/ 0x91400000, 0xBF40B116, +/**/ 0x7DD9EED3, 0x3D333B55, +/**/ 0x0FD54E74, 0x3F40A229, +/**/ 0x7C000000, 0xBF40A114, +/**/ 0x7AA78478, 0x3D3E048F, +/**/ 0xE906A6FC, 0x3F409224, +/**/ 0x68A00000, 0xBF409112, +/**/ 0x644DDE88, 0xBD383C6A, +/**/ 0xC6398D6B, 0x3F408220, +/**/ 0x57600000, 0xBF408110, +/**/ 0x76B8C83A, 0xBD2F0D2F, +/**/ 0xA76E0040, 0x3F40721C, +/**/ 0x48200000, 0xBF40710E, +/**/ 0x9CE99FD3, 0xBD1F63E0, +/**/ 0x8CA3FDFB, 0x3F406218, +/**/ 0x3AE00000, 0xBF40610C, +/**/ 0x4FE774F2, 0xBCF328B4, +/**/ 0x75DB851A, 0x3F405214, +/**/ 0x2FA00000, 0xBF40510A, +/**/ 0x3782BCD4, 0x3D11B6BD, +/**/ 0x6314941D, 0x3F404210, +/**/ 0x26600000, 0xBF404108, +/**/ 0xE7183792, 0x3D22116F, +/**/ 0x544F2983, 0x3F40320C, +/**/ 0x1F200000, 0xBF403106, +/**/ 0x1B995B3D, 0x3D293F1E, +/**/ 0x498B43CB, 0x3F402208, +/**/ 0x19E00000, 0xBF402104, +/**/ 0xFC162630, 0x3D2E6669, +/**/ 0x42C8E175, 0x3F401204, +/**/ 0x16A00000, 0xBF401102, +/**/ 0x254FC9F8, 0x3D30C4AA, +/**/ 0x40080100, 0x3F400200, +/**/ 0x15600000, 0xBF400100, +/**/ 0xE4431F92, 0x3D3154EE, +/**/ 0x829141D6, 0x3F3FE3F8, +/**/ 0x2C400000, 0xBF3FE1FC, +/**/ 0x9B2D30FB, 0x3D30E503, +/**/ 0x8D157F6B, 0x3F3FC3F0, +/**/ 0x31C00000, 0xBF3FC1F8, +/**/ 0x53EBD670, 0x3D2EEBD1, +/**/ 0x9F9CB7BC, 0x3F3FA3E8, +/**/ 0x3B400000, 0xBF3FA1F4, +/**/ 0xE04A16E0, 0x3D2A113C, +/**/ 0xBA26E7CA, 0x3F3F83E0, +/**/ 0x48C00000, 0xBF3F81F0, +/**/ 0x99C43E34, 0x3D233C4A, +/**/ 0xDCB40C91, 0x3F3F63D8, +/**/ 0x5A400000, 0xBF3F61EC, +/**/ 0x7BD210C1, 0x3D14DDF6, +/**/ 0x07442311, 0x3F3F43D1, +/**/ 0x6FC00000, 0xBF3F41E8, +/**/ 0x9E4B51C8, 0xBCC52C1D, +/**/ 0x39D72849, 0x3F3F23C9, +/**/ 0x89400000, 0xBF3F21E4, +/**/ 0x8EA8C754, 0xBD1A196F, +/**/ 0x746D1936, 0x3F3F03C1, +/**/ 0xA6C00000, 0xBF3F01E0, +/**/ 0xF95AF98D, 0xBD2BB719, +/**/ 0xB705F2D8, 0x3F3EE3B9, +/**/ 0xC8400000, 0xBF3EE1DC, +/**/ 0x28FFD598, 0xBD3628EB, +/**/ 0x01A1B22C, 0x3F3EC3B2, +/**/ 0xEDC00000, 0xBF3EC1D8, +/**/ 0x0BBAC8F8, 0xBD3F6D76, +/**/ 0x54405432, 0x3F3EA3AA, +/**/ 0x17800000, 0xBF3EA1D5, +/**/ 0xB7A7EE0D, 0x3D3657D2, +/**/ 0xAEE1D5E8, 0x3F3E83A2, +/**/ 0x45000000, 0xBF3E81D1, +/**/ 0xFA9CCC78, 0x3D264FDE, +/**/ 0x1186344C, 0x3F3E639B, +/**/ 0x76800000, 0xBF3E61CD, +/**/ 0xE02EF455, 0xBCEF83EB, +/**/ 0x7C2D6C5E, 0x3F3E4393, +/**/ 0xAC000000, 0xBF3E41C9, +/**/ 0x03C3E129, 0xBD2C26B3, +/**/ 0xEED77B1B, 0x3F3E238B, +/**/ 0xE5800000, 0xBF3E21C5, +/**/ 0x904D773D, 0xBD3C1CBE, +/**/ 0x69845D83, 0x3F3E0384, +/**/ 0x23400000, 0xBF3E01C2, +/**/ 0xD0615454, 0x3D34E8B1, +/**/ 0xEC341093, 0x3F3DE37C, +/**/ 0x64C00000, 0xBF3DE1BE, +/**/ 0xE9BE933E, 0x3D13F7DF, +/**/ 0x76E6914B, 0x3F3DC375, +/**/ 0xAA400000, 0xBF3DC1BA, +/**/ 0x707B004A, 0xBD27B7D7, +/**/ 0x099BDCA9, 0x3F3DA36E, +/**/ 0xF3C00000, 0xBF3DA1B6, +/**/ 0xEE2141C3, 0xBD3DA3F8, +/**/ 0xA453EFAC, 0x3F3D8366, +/**/ 0x41800000, 0xBF3D81B3, +/**/ 0x63D21825, 0x3D2F4DA1, +/**/ 0x470EC752, 0x3F3D635F, +/**/ 0x93000000, 0xBF3D61AF, +/**/ 0xFAD0B844, 0xBD0FD473, +/**/ 0xF1CC609A, 0x3F3D4357, +/**/ 0xE8800000, 0xBF3D41AB, +/**/ 0x298657C2, 0xBD388716, +/**/ 0xA48CB882, 0x3F3D2350, +/**/ 0x42400000, 0xBF3D21A8, +/**/ 0x0B68711A, 0x3D32023A, +/**/ 0x5F4FCC0A, 0x3F3D0349, +/**/ 0x9FC00000, 0xBF3D01A4, +/**/ 0x23A704B0, 0xBD117676, +/**/ 0x22159830, 0x3F3CE342, +/**/ 0x01400000, 0xBF3CE1A1, +/**/ 0x8F391F09, 0xBD3BA59C, +/**/ 0xECDE19F1, 0x3F3CC33A, +/**/ 0x67000000, 0xBF3CC19D, +/**/ 0x9EBBF706, 0x3D28567A, +/**/ 0xBFA94E4E, 0x3F3CA333, +/**/ 0xD0800000, 0xBF3CA199, +/**/ 0x2D41F1CC, 0xBD29D41F, +/**/ 0x9A773245, 0x3F3C832C, +/**/ 0x3E400000, 0xBF3C8196, +/**/ 0x14ED5134, 0x3D391B7D, +/**/ 0x7D47C2D4, 0x3F3C6325, +/**/ 0xAFC00000, 0xBF3C6192, +/**/ 0x83403B5B, 0xBCFC31C5, +/**/ 0x681AFCFA, 0x3F3C431E, +/**/ 0x25400000, 0xBF3C418F, +/**/ 0x88A1FFF3, 0xBD3D84DB, +/**/ 0x5AF0DDB6, 0x3F3C2317, +/**/ 0x9F000000, 0xBF3C218B, +/**/ 0x6298A63B, 0x3D175CFF, +/**/ 0x55C96207, 0x3F3C0310, +/**/ 0x1C800000, 0xBF3C0188, +/**/ 0xDFB8E489, 0xBD37ADC9, +/**/ 0x58A486EA, 0x3F3BE309, +/**/ 0x9E400000, 0xBF3BE184, +/**/ 0x45069C64, 0x3D23DA0F, +/**/ 0x6382495F, 0x3F3BC302, +/**/ 0x23C00000, 0xBF3BC181, +/**/ 0x4CC2EFE0, 0xBD35574B, +/**/ 0x7662A665, 0x3F3BA2FB, +/**/ 0xAD800000, 0xBF3BA17D, +/**/ 0x4BED0B89, 0x3D250C7B, +/**/ 0x91459AFA, 0x3F3B82F4, +/**/ 0x3B000000, 0xBF3B817A, +/**/ 0x322E5605, 0xBD36795D, +/**/ 0xB42B241D, 0x3F3B62ED, +/**/ 0xCCC00000, 0xBF3B6176, +/**/ 0xF6413886, 0x3D1EAB91, +/**/ 0xDF133ECC, 0x3F3B42E6, +/**/ 0x62400000, 0xBF3B4173, +/**/ 0xF86BE5B5, 0xBD3B0BFC, +/**/ 0x11FDE807, 0x3F3B22E0, +/**/ 0xFC000000, 0xBF3B216F, +/**/ 0xDDE8D701, 0x3CF62FEB, +/**/ 0x4CEB1CCC, 0x3F3B02D9, +/**/ 0x99C00000, 0xBF3B016C, +/**/ 0xF210FD9E, 0x3D3CF8D7, +/**/ 0x8FDADA1A, 0x3F3AE2D2, +/**/ 0x3B400000, 0xBF3AE169, +/**/ 0x1526CFB0, 0xBD2092E2, +/**/ 0xDACD1CEF, 0x3F3AC2CB, +/**/ 0xE1000000, 0xBF3AC165, +/**/ 0x18D261D5, 0x3D319D24, +/**/ 0x2DC1E24A, 0x3F3AA2C5, +/**/ 0x8A800000, 0xBF3AA162, +/**/ 0x533CC8EC, 0xBD355268, +/**/ 0x88B9272B, 0x3F3A82BE, +/**/ 0x38400000, 0xBF3A815F, +/**/ 0x0AFE6139, 0x3D074750, +/**/ 0xEBB2E88F, 0x3F3A62B7, +/**/ 0xEA000000, 0xBF3A615B, +/**/ 0x6668AD57, 0x3D3A501B, +/**/ 0x56AF2375, 0x3F3A42B1, +/**/ 0x9F800000, 0xBF3A4158, +/**/ 0xA98381BD, 0xBD2E37A7, +/**/ 0xC9ADD4DD, 0x3F3A22AA, +/**/ 0x59400000, 0xBF3A2155, +/**/ 0x7B82F9AC, 0x3D1A9872, +/**/ 0x44AEF9C5, 0x3F3A02A4, +/**/ 0x17000000, 0xBF3A0152, +/**/ 0x0FF040AD, 0x3D3B96ED, +/**/ 0xC7B28F2C, 0x3F39E29D, +/**/ 0xD8800000, 0xBF39E14E, +/**/ 0x33534BD7, 0xBD304862, +/**/ 0x52B89211, 0x3F39C297, +/**/ 0x9E400000, 0xBF39C14B, +/**/ 0x17AF009B, 0x3D084979, +/**/ 0xE5C0FF72, 0x3F39A290, +/**/ 0x68000000, 0xBF39A148, +/**/ 0x604B64C9, 0x3D358CA1, +/**/ 0x80CBD44E, 0x3F39828A, +/**/ 0x35800000, 0xBF398145, +/**/ 0x2E334404, 0xBD38BD0B, +/**/ 0x23D90DA4, 0x3F396284, +/**/ 0x07400000, 0xBF396142, +/**/ 0xEF1B1C68, 0xBD1F4B58, +/**/ 0xCEE8A873, 0x3F39427D, +/**/ 0xDD000000, 0xBF39413E, +/**/ 0x07E010EC, 0x3D209881, +/**/ 0x81FAA1B9, 0x3F392277, +/**/ 0xB6C00000, 0xBF39213B, +/**/ 0x5CF03181, 0x3D37A139, +/**/ 0x3D0EF676, 0x3F390271, +/**/ 0x94400000, 0xBF390138, +/**/ 0x65276B0B, 0xBD39D2EB, +/**/ 0x0025A3A8, 0x3F38E26B, +/**/ 0x76000000, 0xBF38E135, +/**/ 0xEE3023F6, 0xBD281E5A, +/**/ 0xCB3EA64F, 0x3F38C264, +/**/ 0x5BC00000, 0xBF38C132, +/**/ 0x3F9A4B53, 0x3CEDAE6E, +/**/ 0x9E59FB68, 0x3F38A25E, +/**/ 0x45800000, 0xBF38A12F, +/**/ 0x412B648E, 0x3D2A47EF, +/**/ 0x79779FF3, 0x3F388258, +/**/ 0x33400000, 0xBF38812C, +/**/ 0x5ED0D8F2, 0x3D38955F, +/**/ 0x5C9790EE, 0x3F386252, +/**/ 0x24C00000, 0xBF386129, +/**/ 0x09939374, 0xBD3CBD55, +/**/ 0x47B9CB5A, 0x3F38424C, +/**/ 0x1A800000, 0xBF384126, +/**/ 0x4F399186, 0xBD32D325, +/**/ 0x3ADE4C33, 0x3F382246, +/**/ 0x14400000, 0xBF382123, +/**/ 0x524688EB, 0xBD235622, +/**/ 0x3605107A, 0x3F380240, +/**/ 0x12000000, 0xBF380120, +/**/ 0xEB2F3DDC, 0xBCF44184, +/**/ 0x392E152C, 0x3F37E23A, +/**/ 0x13C00000, 0xBF37E11D, +/**/ 0x2153D1B8, 0x3D198B16, +/**/ 0x4459574A, 0x3F37C234, +/**/ 0x19800000, 0xBF37C11A, +/**/ 0x47A3C923, 0x3D2A9511, +/**/ 0x5786D3D1, 0x3F37A22E, +/**/ 0x23400000, 0xBF37A117, +/**/ 0x4B4128D9, 0x3D337431, +/**/ 0x72B687C1, 0x3F378228, +/**/ 0x31000000, 0xBF378114, +/**/ 0xC5BFE9E8, 0x3D38E0BF, +/**/ 0x95E87019, 0x3F376222, +/**/ 0x42C00000, 0xBF376111, +/**/ 0x5A0B2CE9, 0x3D3D9134, +/**/ 0xC11C89D8, 0x3F37421C, +/**/ 0x58400000, 0xBF37410E, +/**/ 0xB1802C40, 0xBD3E7970, +/**/ 0xF452D1FB, 0x3F372216, +/**/ 0x72000000, 0xBF37210B, +/**/ 0x16E562C9, 0xBD3B3E2F, +/**/ 0x2F8B4583, 0x3F370211, +/**/ 0x8FC00000, 0xBF370108, +/**/ 0x9087DACD, 0xBD38BC06, +/**/ 0x72C5E16F, 0x3F36E20B, +/**/ 0xB1800000, 0xBF36E105, +/**/ 0xD92B1B21, 0xBD36F1F6, +/**/ 0xBE02A2BC, 0x3F36C205, +/**/ 0xD7400000, 0xBF36C102, +/**/ 0xABF2CD23, 0xBD35DEFF, +/**/ 0x1141866B, 0x3F36A200, +/**/ 0x01000000, 0xBF36A100, +/**/ 0xC462BC85, 0xBD358220, +/**/ 0x6C828979, 0x3F3681FA, +/**/ 0x2EC00000, 0xBF3680FD, +/**/ 0xDE5ED723, 0xBD35DA59, +/**/ 0xCFC5A8E7, 0x3F3661F4, +/**/ 0x60800000, 0xBF3660FA, +/**/ 0xB62B2CD1, 0xBD36E6AA, +/**/ 0x3B0AE1B2, 0x3F3641EF, +/**/ 0x96400000, 0xBF3640F7, +/**/ 0x086BEF29, 0xBD38A613, +/**/ 0xAE5230DA, 0x3F3621E9, +/**/ 0xD0000000, 0xBF3620F4, +/**/ 0x9225715D, 0xBD3B1792, +/**/ 0x299B935F, 0x3F3601E4, +/**/ 0x0DC00000, 0xBF3600F2, +/**/ 0x10BC2805, 0xBD3E3A29, +/**/ 0xACE7063E, 0x3F35E1DE, +/**/ 0x4FC00000, 0xBF35E0EF, +/**/ 0xBE0B570D, 0x3D3DF329, +/**/ 0x38348676, 0x3F35C1D9, +/**/ 0x95800000, 0xBF35C0EC, +/**/ 0x1C0C5502, 0x3D397166, +/**/ 0xCB841108, 0x3F35A1D3, +/**/ 0xDF400000, 0xBF35A0E9, +/**/ 0x4AC1FA2D, 0x3D34418C, +/**/ 0x66D5A2F1, 0x3F3581CE, +/**/ 0x2D000000, 0xBF3580E7, +/**/ 0x168E9C6E, 0x3D2CC939, +/**/ 0x0A293931, 0x3F3561C9, +/**/ 0x7EC00000, 0xBF3560E4, +/**/ 0x795CE154, 0x3D1F6E5C, +/**/ 0xB57ED0C7, 0x3F3541C3, +/**/ 0xD4800000, 0xBF3540E1, +/**/ 0x898FEE67, 0x3CE4EF88, +/**/ 0x68D666B1, 0x3F3521BE, +/**/ 0x2E400000, 0xBF3520DF, +/**/ 0x0B78D65E, 0xBD1CDACF, +/**/ 0x242FF7EF, 0x3F3501B9, +/**/ 0x8C000000, 0xBF3500DC, +/**/ 0x6F1CBFB8, 0xBD2F7BF1, +/**/ 0xE78B8180, 0x3F34E1B3, +/**/ 0xEDC00000, 0xBF34E0D9, +/**/ 0x5A899820, 0xBD38ED52, +/**/ 0xB2E90063, 0x3F34C1AE, +/**/ 0x53C00000, 0xBF34C0D7, +/**/ 0x930A694E, 0x3D3D3C3F, +/**/ 0x86487196, 0x3F34A1A9, +/**/ 0xBD800000, 0xBF34A0D4, +/**/ 0x4FA7CCCB, 0x3D32BFBD, +/**/ 0x61A9D219, 0x3F3481A4, +/**/ 0x2B400000, 0xBF3480D2, +/**/ 0x65A26E32, 0x3D1E789C, +/**/ 0x450D1EEB, 0x3F34619F, +/**/ 0x9D000000, 0xBF3460CF, +/**/ 0x47E500B5, 0xBD109E0B, +/**/ 0x3072550B, 0x3F34419A, +/**/ 0x12C00000, 0xBF3440CD, +/**/ 0x3523FAE9, 0xBD309040, +/**/ 0x23D97178, 0x3F342195, +/**/ 0x8C800000, 0xBF3420CA, +/**/ 0xD31DE7C2, 0xBD3D9B10, +/**/ 0x1F427131, 0x3F340190, +/**/ 0x0A800000, 0xBF3400C8, +/**/ 0x90B287C4, 0x3D34B90B, +/**/ 0x22AD5135, 0x3F33E18B, +/**/ 0x8C400000, 0xBF33E0C5, +/**/ 0xCA1B0FC2, 0x3D19B454, +/**/ 0x2E1A0E83, 0x3F33C186, +/**/ 0x12000000, 0xBF33C0C3, +/**/ 0x638FC1F4, 0xBD20FBE7, +/**/ 0x4188A61A, 0x3F33A181, +/**/ 0x9BC00000, 0xBF33A0C0, +/**/ 0xE0C03290, 0xBD38070E, +/**/ 0x5CF914F9, 0x3F33817C, +/**/ 0x29C00000, 0xBF3380BE, +/**/ 0xE0B6E5F5, 0x3D37D2C3, +/**/ 0x806B5820, 0x3F336177, +/**/ 0xBB800000, 0xBF3360BB, +/**/ 0x35598794, 0x3D1C4213, +/**/ 0xABDF6C8D, 0x3F334172, +/**/ 0x51400000, 0xBF3340B9, +/**/ 0xC111C569, 0xBD249997, +/**/ 0xDF554F40, 0x3F33216D, +/**/ 0xEB000000, 0xBF3320B6, +/**/ 0xEEEE28E2, 0xBD3C442D, +/**/ 0x1ACCFD37, 0x3F330169, +/**/ 0x89000000, 0xBF3300B4, +/**/ 0xDBBF316D, 0x3D312B5E, +/**/ 0x5E467372, 0x3F32E164, +/**/ 0x2AC00000, 0xBF32E0B2, +/**/ 0x7484E6E1, 0xBCFFD254, +/**/ 0xA9C1AEF0, 0x3F32C15F, +/**/ 0xD0800000, 0xBF32C0AF, +/**/ 0x1F2C3F9D, 0xBD35BCBA, +/**/ 0xFD3EACAF, 0x3F32A15A, +/**/ 0x7A800000, 0xBF32A0AD, +/**/ 0x8C8BAA61, 0x3D35EDA0, +/**/ 0x58BD69B0, 0x3F328156, +/**/ 0x28400000, 0xBF3280AB, +/**/ 0x3F79FE5E, 0x3CF02EAF, +/**/ 0xBC3DE2F1, 0x3F326151, +/**/ 0xDA000000, 0xBF3260A8, +/**/ 0xB1304AA8, 0xBD347BDA, +/**/ 0x27C01572, 0x3F32414D, +/**/ 0x90000000, 0xBF3240A6, +/**/ 0xD46BE359, 0x3D35724F, +/**/ 0x9B43FE30, 0x3F322148, +/**/ 0x49C00000, 0xBF3220A4, +/**/ 0x43BF90C9, 0xBCF31954, +/**/ 0x16C99A2D, 0x3F320144, +/**/ 0x07800000, 0xBF3200A2, +/**/ 0xC4901E30, 0xBD386689, +/**/ 0x9A50E666, 0x3F31E13F, +/**/ 0xC9800000, 0xBF31E09F, +/**/ 0x134E34BF, 0x3D2FA8E5, +/**/ 0x25D9DFDB, 0x3F31C13B, +/**/ 0x8F400000, 0xBF31C09D, +/**/ 0x477D87DF, 0xBD20FF40, +/**/ 0xB964838C, 0x3F31A136, +/**/ 0x59400000, 0xBF31A09B, +/**/ 0x68B5B77B, 0x3D3E9E3E, +/**/ 0x54F0CE76, 0x3F318132, +/**/ 0x27000000, 0xBF318099, +/**/ 0x906F8A53, 0x3D14BC39, +/**/ 0xF87EBD9A, 0x3F31612D, +/**/ 0xF8C00000, 0xBF316096, +/**/ 0xFCD50724, 0xBD34CC2F, +/**/ 0xA40E4DF7, 0x3F314129, +/**/ 0xCEC00000, 0xBF314094, +/**/ 0x7A3A1B8D, 0x3D30AD83, +/**/ 0x579F7C8B, 0x3F312125, +/**/ 0xA8800000, 0xBF312092, +/**/ 0x057F5C66, 0xBD24C5AE, +/**/ 0x13324657, 0x3F310121, +/**/ 0x86800000, 0xBF310090, +/**/ 0xBFD488E0, 0x3D3A03C0, +/**/ 0xD6C6A858, 0x3F30E11C, +/**/ 0x68400000, 0xBF30E08E, +/**/ 0x56935D63, 0xBD00EDA8, +/**/ 0xA25C9F8F, 0x3F30C118, +/**/ 0x4E000000, 0xBF30C08C, +/**/ 0x2FDDD1CE, 0xBD3EC638, +/**/ 0x75F428FB, 0x3F30A114, +/**/ 0x38000000, 0xBF30A08A, +/**/ 0x0CA3DCBE, 0x3D102CDE, +/**/ 0x518D419B, 0x3F308110, +/**/ 0x25C00000, 0xBF308088, +/**/ 0xBFA78921, 0xBD39A865, +/**/ 0x3527E66D, 0x3F30610C, +/**/ 0x17C00000, 0xBF306086, +/**/ 0x72CE37BD, 0x3D203FE0, +/**/ 0x20C41472, 0x3F304108, +/**/ 0x0D800000, 0xBF304084, +/**/ 0x6054C3FA, 0xBD369AC6, +/**/ 0x1461C8A9, 0x3F302104, +/**/ 0x07800000, 0xBF302082, +/**/ 0x4836293A, 0x3D2450ED, +/**/ 0x10010010, 0x3F300100, +/**/ 0x05400000, 0xBF300080, +/**/ 0x88B3357C, 0xBD359558, +/**/ 0x27436F4F, 0x3F2FC1F8, +/**/ 0x0E800000, 0xBF2FC0FC, +/**/ 0x92ECD4D1, 0x3D245998, +/**/ 0x3E87D8DC, 0x3F2F81F0, +/**/ 0x1A000000, 0xBF2F80F8, +/**/ 0xB592170A, 0xBD36901A, +/**/ 0x65CF36C6, 0x3F2F41E8, +/**/ 0x2E000000, 0xBF2F40F4, +/**/ 0x53524603, 0x3D2069E5, +/**/ 0x9D19830B, 0x3F2F01E0, +/**/ 0x49800000, 0xBF2F00F0, +/**/ 0x69C22240, 0xBD39830B, +/**/ 0xE466B7AB, 0x3F2EC1D8, +/**/ 0x6D800000, 0xBF2EC0EC, +/**/ 0xFB871BBA, 0x3D1123AC, +/**/ 0x3BB6CEA4, 0x3F2E81D1, +/**/ 0x99000000, 0xBF2E80E8, +/**/ 0x2E158AF6, 0xBD3E6629, +/**/ 0xA309C1F4, 0x3F2E41C9, +/**/ 0xCD000000, 0xBF2E40E4, +/**/ 0x2B29884E, 0xBCF8F488, +/**/ 0x1A5F8B99, 0x3F2E01C2, +/**/ 0x09000000, 0xBF2E00E1, +/**/ 0x6EA006C6, 0x3D3ACE8D, +/**/ 0xA1B82593, 0x3F2DC1BA, +/**/ 0x4C800000, 0xBF2DC0DD, +/**/ 0x59D0B687, 0xBD22974E, +/**/ 0x391389E0, 0x3F2D81B3, +/**/ 0x98800000, 0xBF2D80D9, +/**/ 0xD7897CAD, 0x3D322319, +/**/ 0xE071B27F, 0x3F2D41AB, +/**/ 0xEC000000, 0xBF2D40D5, +/**/ 0x57954C6E, 0xBD32E42F, +/**/ 0x97D2996E, 0x3F2D01A4, +/**/ 0x48000000, 0xBF2D00D2, +/**/ 0xC741610E, 0x3D1E7DF5, +/**/ 0x5F3638AB, 0x3F2CC19D, +/**/ 0xAB800000, 0xBF2CC0CE, +/**/ 0xA0909C5A, 0xBD3E50DF, +/**/ 0x369C8A37, 0x3F2C8196, +/**/ 0x17800000, 0xBF2C80CB, +/**/ 0x8D8D1C8F, 0xBD12D119, +/**/ 0x1E05880E, 0x3F2C418F, +/**/ 0x8B800000, 0xBF2C40C7, +/**/ 0x544D2574, 0x3D347649, +/**/ 0x15712C30, 0x3F2C0188, +/**/ 0x07000000, 0xBF2C00C4, +/**/ 0x4EEA9E68, 0xBD32D030, +/**/ 0x1CDF709C, 0x3F2BC181, +/**/ 0x8B000000, 0xBF2BC0C0, +/**/ 0x74A84109, 0x3D15E533, +/**/ 0x34504F50, 0x3F2B817A, +/**/ 0x17000000, 0xBF2B80BD, +/**/ 0x025FBF68, 0x3D3D53C1, +/**/ 0x5BC3C24B, 0x3F2B4173, +/**/ 0xAA800000, 0xBF2B40B9, +/**/ 0x6BAA2FA8, 0xBD267FA7, +/**/ 0x9339C38C, 0x3F2B016C, +/**/ 0x46800000, 0xBF2B00B6, +/**/ 0xBB3FDE1E, 0x3D277F1D, +/**/ 0xDAB24D11, 0x3F2AC165, +/**/ 0xEA000000, 0xBF2AC0B2, +/**/ 0x1A8CDBE2, 0xBD3DAD17, +/**/ 0x322D58D9, 0x3F2A815F, +/**/ 0x96000000, 0xBF2A80AF, +/**/ 0xD81CF36E, 0xBD1E1315, +/**/ 0x99AAE0E3, 0x3F2A4158, +/**/ 0x4A000000, 0xBF2A40AC, +/**/ 0xE649E7B4, 0x3D2C7307, +/**/ 0x112ADF2D, 0x3F2A0152, +/**/ 0x05800000, 0xBF2A00A9, +/**/ 0xB77435EC, 0xBD3C713A, +/**/ 0x98AD4DB7, 0x3F29C14B, +/**/ 0xC9800000, 0xBF29C0A5, +/**/ 0x3A7AE827, 0xBD1E1005, +/**/ 0x3032267F, 0x3F298145, +/**/ 0x95800000, 0xBF2980A2, +/**/ 0xA8F2A842, 0x3D2A0460, +/**/ 0xD7B96385, 0x3F29413E, +/**/ 0x69000000, 0xBF29409F, +/**/ 0xA7B8321E, 0xBD3EDDA5, +/**/ 0x8F42FEC5, 0x3F290138, +/**/ 0x45000000, 0xBF29009C, +/**/ 0x3A3F0D33, 0xBD264506, +/**/ 0x56CEF241, 0x3F28C132, +/**/ 0x29000000, 0xBF28C099, +/**/ 0x33EE13CD, 0x3D206930, +/**/ 0x2E5D37F6, 0x3F28812C, +/**/ 0x15000000, 0xBF288096, +/**/ 0x22DF1FDA, 0x3D3B28AC, +/**/ 0x15EDC9E3, 0x3F284126, +/**/ 0x08800000, 0xBF284093, +/**/ 0xDD73B6DB, 0xBD324546, +/**/ 0x0D80A208, 0x3F280120, +/**/ 0x04800000, 0xBF280090, +/**/ 0x6DFEB485, 0xBCB440C2, +/**/ 0x1515BA62, 0x3F27C11A, +/**/ 0x08800000, 0xBF27C08D, +/**/ 0x9823B19D, 0x3D31BCBE, +/**/ 0x2CAD0CF1, 0x3F278114, +/**/ 0x14000000, 0xBF27808A, +/**/ 0xA9EB4E97, 0xBD3CD148, +/**/ 0x544693B4, 0x3F27410E, +/**/ 0x28000000, 0xBF274087, +/**/ 0xCA4F73AA, 0xBD277AAC, +/**/ 0x8BE248AA, 0x3F270108, +/**/ 0x44000000, 0xBF270084, +/**/ 0x26068EF7, 0x3D13E656, +/**/ 0xD38025D2, 0x3F26C102, +/**/ 0x68000000, 0xBF26C081, +/**/ 0x44C3EC8A, 0x3D35547B, +/**/ 0x2B20252A, 0x3F2680FD, +/**/ 0x93800000, 0xBF26807E, +/**/ 0x110DCE4B, 0xBD3AABA5, +/**/ 0x92C240B1, 0x3F2640F7, +/**/ 0xC7800000, 0xBF26407B, +/**/ 0xAC011956, 0xBD260B96, +/**/ 0x0A667267, 0x3F2600F2, +/**/ 0x03800000, 0xBF260079, +/**/ 0x5DFA826E, 0x3D111C22, +/**/ 0x920CB44A, 0x3F25C0EC, +/**/ 0x47800000, 0xBF25C076, +/**/ 0xD8A2980A, 0x3D333BD6, +/**/ 0x29B5005A, 0x3F2580E7, +/**/ 0x93000000, 0xBF258073, +/**/ 0x71C1D861, 0xBD3E2660, +/**/ 0xD15F5095, 0x3F2540E1, +/**/ 0xE7000000, 0xBF254070, +/**/ 0x4E77E5EE, 0xBD2FBD3A, +/**/ 0x890B9EFA, 0x3F2500DC, +/**/ 0x43000000, 0xBF25006E, +/**/ 0x7B90A2D9, 0xBCFEBDF2, +/**/ 0x50B9E589, 0x3F24C0D7, +/**/ 0xA7000000, 0xBF24C06B, +/**/ 0x58F2FF2C, 0x3D2765B3, +/**/ 0x286A1E40, 0x3F2480D2, +/**/ 0x13000000, 0xBF248069, +/**/ 0x74AE382C, 0x3D38FE8D, +/**/ 0x101C431E, 0x3F2440CD, +/**/ 0x86800000, 0xBF244066, +/**/ 0xB0286224, 0xBD3A07C3, +/**/ 0x07D04E23, 0x3F2400C8, +/**/ 0x02800000, 0xBF240064, +/**/ 0x46EFC0EC, 0xBD2ABE33, +/**/ 0x0F86394D, 0x3F23C0C3, +/**/ 0x86800000, 0xBF23C061, +/**/ 0x70DE3151, 0xBCF06744, +/**/ 0x273DFE9C, 0x3F2380BE, +/**/ 0x12800000, 0xBF23805F, +/**/ 0x05CFCD61, 0x3D260659, +/**/ 0x4EF7980F, 0x3F2340B9, +/**/ 0xA6800000, 0xBF23405C, +/**/ 0xD7DBBEBC, 0x3D36BEC8, +/**/ 0x86B2FFA4, 0x3F2300B4, +/**/ 0x42000000, 0xBF23005A, +/**/ 0x2B2027B4, 0xBD3DD29F, +/**/ 0xCE702F5C, 0x3F22C0AF, +/**/ 0xE6000000, 0xBF22C057, +/**/ 0x6959A7D0, 0xBD32B00B, +/**/ 0x262F2134, 0x3F2280AB, +/**/ 0x92000000, 0xBF228055, +/**/ 0x19FAAC2D, 0xBD1F61EF, +/**/ 0x8DEFCF2C, 0x3F2240A6, +/**/ 0x46000000, 0xBF224053, +/**/ 0xCB16B8A8, 0x3D05A87E, +/**/ 0x05B23344, 0x3F2200A2, +/**/ 0x02000000, 0xBF220051, +/**/ 0x23B9B257, 0x3D29F32F, +/**/ 0x8D76477A, 0x3F21C09D, +/**/ 0xC6000000, 0xBF21C04E, +/**/ 0x7E214821, 0x3D36F61B, +/**/ 0x253C05CD, 0x3F218099, +/**/ 0x91800000, 0xBF21804C, +/**/ 0x46FDFCA2, 0xBD3F5464, +/**/ 0xCD03683D, 0x3F214094, +/**/ 0x65800000, 0xBF21404A, +/**/ 0xA30F2308, 0xBD35E4E7, +/**/ 0x84CC68C9, 0x3F210090, +/**/ 0x41800000, 0xBF210048, +/**/ 0xF800CC34, 0xBD2974DC, +/**/ 0x4C970171, 0x3F20C08C, +/**/ 0x25800000, 0xBF20C046, +/**/ 0xC1006E9D, 0xBD0E9FC5, +/**/ 0x24632C32, 0x3F208088, +/**/ 0x11800000, 0xBF208044, +/**/ 0x078E4438, 0x3D133DE7, +/**/ 0x0C30E30D, 0x3F204084, +/**/ 0x05800000, 0xBF204042, +/**/ 0x15F82A7B, 0x3D2A61D2, +/**/ 0x04002001, 0x3F200080, +/**/ 0x01800000, 0xBF200040, +/**/ 0x3BBB110C, 0x3D355155, +/**/ 0x17A1BA1A, 0x3F1F80F8, +/**/ 0x0B000000, 0xBF1F807C, +/**/ 0x6C520A9B, 0x3D3D31BE, +/**/ 0x47462860, 0x3F1F00F0, +/**/ 0x22000000, 0xBF1F0078, +/**/ 0x4B6D83F6, 0xBD3B2CDB, +/**/ 0x96ED7ED3, 0x3F1E80E8, +/**/ 0x4A000000, 0xBF1E8074, +/**/ 0xD4122C5A, 0xBD33C977, +/**/ 0x0697B172, 0x3F1E00E1, +/**/ 0x82000000, 0xBF1E0070, +/**/ 0x2D1517C4, 0xBD29462E, +/**/ 0x9644B43B, 0x3F1D80D9, +/**/ 0xCA000000, 0xBF1D806C, +/**/ 0xF0952D45, 0xBD16E2E3, +/**/ 0x45F47B2C, 0x3F1D00D2, +/**/ 0x22000000, 0xBF1D0069, +/**/ 0x2DDC2A8D, 0x3CEED452, +/**/ 0x15A6FA46, 0x3F1C80CB, +/**/ 0x8A000000, 0xBF1C8065, +/**/ 0xA08CEBE8, 0x3D1DAFEE, +/**/ 0x055C2585, 0x3F1C00C4, +/**/ 0x02000000, 0xBF1C0062, +/**/ 0xBB11EF55, 0x3D2B50A4, +/**/ 0x1513F0E9, 0x3F1B80BD, +/**/ 0x8A000000, 0xBF1B805E, +/**/ 0xC6D142BF, 0x3D33ACA6, +/**/ 0x44CE5071, 0x3F1B00B6, +/**/ 0x22000000, 0xBF1B005B, +/**/ 0xF8CD3D11, 0x3D3979F8, +/**/ 0x948B381A, 0x3F1A80AF, +/**/ 0xCA000000, 0xBF1A8057, +/**/ 0x07EDFD29, 0x3D3F1149, +/**/ 0x044A9BE5, 0x3F1A00A9, +/**/ 0x81000000, 0xBF1A0054, +/**/ 0xF7BB7092, 0xBD3B8C68, +/**/ 0x940C6FCF, 0x3F1980A2, +/**/ 0x49000000, 0xBF198051, +/**/ 0xF27E09A9, 0xBD365E1C, +/**/ 0x43D0A7D8, 0x3F19009C, +/**/ 0x21000000, 0xBF19004E, +/**/ 0xD508D564, 0xBD3162D2, +/**/ 0x139737FE, 0x3F188096, +/**/ 0x09000000, 0xBF18804B, +/**/ 0x18D5C93E, 0xBD293315, +/**/ 0x03601440, 0x3F180090, +/**/ 0x01000000, 0xBF180048, +/**/ 0x0C26A328, 0xBD200288, +/**/ 0x132B309E, 0x3F17808A, +/**/ 0x09000000, 0xBF178045, +/**/ 0x7E89FD6F, 0xBD0CC7F9, +/**/ 0x42F88115, 0x3F170084, +/**/ 0x21000000, 0xBF170042, +/**/ 0x058494DC, 0x3CE40881, +/**/ 0x92C7F9A5, 0x3F16807E, +/**/ 0x49000000, 0xBF16803F, +/**/ 0xCD5698B9, 0x3D12AE16, +/**/ 0x02998E4D, 0x3F160079, +/**/ 0x81000000, 0xBF16003C, +/**/ 0xC5780E17, 0x3D21138B, +/**/ 0x926D330B, 0x3F158073, +/**/ 0xC9000000, 0xBF158039, +/**/ 0x4E2001E2, 0x3D287809, +/**/ 0x4242DBDF, 0x3F15006E, +/**/ 0x21000000, 0xBF150037, +/**/ 0x21448AA2, 0x3D2F8684, +/**/ 0x121A7CC8, 0x3F148069, +/**/ 0x89000000, 0xBF148034, +/**/ 0x2F637D8E, 0x3D33207E, +/**/ 0x01F409C4, 0x3F140064, +/**/ 0x01000000, 0xBF140032, +/**/ 0x12E44B29, 0x3D3654B9, +/**/ 0x11CF76D3, 0x3F13805F, +/**/ 0x89000000, 0xBF13802F, +/**/ 0xCA5547F3, 0x3D3960F2, +/**/ 0x41ACB7F4, 0x3F13005A, +/**/ 0x21000000, 0xBF13002D, +/**/ 0x6487063D, 0x3D3C462B, +/**/ 0x918BC126, 0x3F128055, +/**/ 0xC9000000, 0xBF12802A, +/**/ 0xEFEA1107, 0x3D3F0562, +/**/ 0x016C8668, 0x3F120051, +/**/ 0x80000000, 0xBF120028, +/**/ 0x857113CE, 0xBD3E6066, +/**/ 0x914EFBBA, 0x3F11804C, +/**/ 0x48000000, 0xBF118026, +/**/ 0xEDD9EB54, 0xBD3BEA30, +/**/ 0x41331519, 0x3F110048, +/**/ 0x20000000, 0xBF110024, +/**/ 0x3BFFFF5A, 0xBD3996FC, +/**/ 0x1118C686, 0x3F108044, +/**/ 0x08000000, 0xBF108022, +/**/ 0x62F2E042, 0xBD3765C8, +/**/ 0x01000400, 0x3F100040, +/**/ 0x00000000, 0xBF100020, +/**/ 0x562224CD, 0xBD355595, +/**/ 0x21D1830C, 0x3F0F0078, +/**/ 0x10000000, 0xBF0F003C, +/**/ 0x095D69EB, 0xBD336563, +/**/ 0x81A5E62E, 0x3F0E0070, +/**/ 0x40000000, 0xBF0E0038, +/**/ 0x70D45290, 0xBD319431, +/**/ 0x217D1965, 0x3F0D0069, +/**/ 0x90000000, 0xBF0D0034, +/**/ 0x022D0EF6, 0xBD2FC201, +/**/ 0x015704B1, 0x3F0C0062, +/**/ 0x00000000, 0xBF0C0031, +/**/ 0x5E276E21, 0xBD2C95A0, +/**/ 0x2133900E, 0x3F0B005B, +/**/ 0x90000000, 0xBF0B002D, +/**/ 0xE0372A42, 0xBD29A140, +/**/ 0x8112A37D, 0x3F0A0054, +/**/ 0x40000000, 0xBF0A002A, +/**/ 0x73BBB580, 0xBD26E2E2, +/**/ 0x20F426FB, 0x3F09004E, +/**/ 0x10000000, 0xBF090027, +/**/ 0x04D48C20, 0xBD245885, +/**/ 0x00D80288, 0x3F080048, +/**/ 0x00000000, 0xBF080024, +/**/ 0x80613426, 0xBD220028, +/**/ 0x20BE1E23, 0x3F070042, +/**/ 0x10000000, 0xBF070021, +/**/ 0xA80279F3, 0xBD1FAF99, +/**/ 0x80A661CA, 0x3F06003C, +/**/ 0x40000000, 0xBF06001E, +/**/ 0xDC287DFE, 0xBD1BBAE3, +/**/ 0x2090B57C, 0x3F050037, +/**/ 0x90000000, 0xBF05001B, +/**/ 0x7B73B67C, 0xBD181E2F, +/**/ 0x007D0139, 0x3F040032, +/**/ 0x00000000, 0xBF040019, +/**/ 0x65A375F8, 0xBD14D57C, +/**/ 0x206B2CFF, 0x3F03002D, +/**/ 0x90000000, 0xBF030016, +/**/ 0x7BF71EC1, 0xBD11DCCA, +/**/ 0x805B20CD, 0x3F020028, +/**/ 0x40000000, 0xBF020014, +/**/ 0x425C4447, 0xBD0E6033, +/**/ 0x204CC4A3, 0x3F010024, +/**/ 0x10000000, 0xBF010012, +/**/ 0x730FFF5C, 0xBD0996D3, +/**/ 0x00400080, 0x3F000020, +/**/ 0x00000000, 0xBF000010, +/**/ 0x558888DE, 0xBD055575, +/**/ 0x406978C6, 0x3EFE0038, +/**/ 0x20000000, 0xBEFE001C, +/**/ 0xB845146A, 0xBD019418, +/**/ 0x0055C096, 0x3EFC0031, +/**/ 0x80000000, 0xBEFC0018, +/**/ 0xD989DB3C, 0xBCFC957A, +/**/ 0x4044A870, 0x3EFA002A, +/**/ 0x20000000, 0xBEFA0015, +/**/ 0x8F0EED2F, 0xBCF6E2C6, +/**/ 0x00360051, 0x3EF80024, +/**/ 0x00000000, 0xBEF80012, +/**/ 0x40184CEB, 0xBCF20014, +/**/ 0x40299839, 0x3EF6001E, +/**/ 0x20000000, 0xBEF6000F, +/**/ 0x434A1F5C, 0xBCEBBAC7, +/**/ 0x001F4027, 0x3EF40019, +/**/ 0x80000000, 0xBEF4000C, +/**/ 0xDD68DD6A, 0xBCE4D568, +/**/ 0x4016C81A, 0x3EF20014, +/**/ 0x20000000, 0xBEF2000A, +/**/ 0xA11710FC, 0xBCDE6019, +/**/ 0x00100010, 0x3EF00010, +/**/ 0x00000000, 0xBEF00008, +/**/ 0x5562222D, 0xBCD55565, +/**/ 0x80157013, 0x3EEC0018, +/**/ 0x40000000, 0xBEEC000C, +/**/ 0x176276C5, 0xBCCC9568, +/**/ 0x000D800A, 0x3EE80012, +/**/ 0x00000000, 0xBEE80009, +/**/ 0x20061337, 0xBCC2000A, +/**/ 0x8007D005, 0x3EE4000C, +/**/ 0x40000000, 0xBEE40006, +/**/ 0x195A3758, 0xBCB4D55F, +/**/ 0x00040002, 0x3EE00008, +/**/ 0x00000000, 0xBEE00004, +/**/ 0x5558888A, 0xBCA5555D, +/**/ 0x00036001, 0x3ED80009, +/**/ 0x80000000, 0xBED80004, +/**/ 0x100184CD, 0xBC920005, +/**/ 0x00010000, 0x3ED00004, +/**/ 0x00000000, 0xBED00002, +/**/ 0x55562222, 0xBC755559, +/**/ 0x00004000, 0x3EC00002, +/**/ 0x00000000, 0xBEC00001, +/**/ 0x55558889, 0xBC455557, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00000000, 0x00000000, +/**/ 0x00008000, 0xBEBFFFFC, +/**/ 0x00000000, 0x3EBFFFFE, +/**/ 0x55558889, 0x3C455553, +/**/ 0x00020000, 0xBECFFFF8, +/**/ 0x00000000, 0x3ECFFFFC, +/**/ 0x55562222, 0x3C755551, +/**/ 0x00035FFF, 0xBED7FFF7, +/**/ 0x80000000, 0x3ED7FFFB, +/**/ 0xF00184CC, 0x3C91FFFA, +/**/ 0x0007FFFC, 0xBEDFFFF0, +/**/ 0x00000000, 0x3EDFFFF8, +/**/ 0x55588887, 0x3CA5554D, +/**/ 0x8007CFFB, 0xBEE3FFF3, +/**/ 0xC0000000, 0x3EE3FFF9, +/**/ 0x915A3753, 0x3CB4D54B, +/**/ 0x000D7FF6, 0xBEE7FFEE, +/**/ 0x00000000, 0x3EE7FFF7, +/**/ 0xE006132F, 0x3CC1FFF5, +/**/ 0x80156FED, 0xBEEBFFE7, +/**/ 0xC0000000, 0x3EEBFFF3, +/**/ 0x936276B2, 0x3CCC9542, +/**/ 0x001FFFE0, 0xBEEFFFE0, +/**/ 0x00000000, 0x3EEFFFF0, +/**/ 0x55622217, 0x3CD55545, +/**/ 0xC016C7E6, 0xBEF1FFEB, +/**/ 0xE0000000, 0x3EF1FFF5, +/**/ 0x5F1710D1, 0x3CDE5FE6, +/**/ 0x001F3FD9, 0xBEF3FFE7, +/**/ 0x80000000, 0x3EF3FFF3, +/**/ 0xCD68DD41, 0x3CE4D541, +/**/ 0xC02997C7, 0xBEF5FFE1, +/**/ 0xE0000000, 0x3EF5FFF0, +/**/ 0x124A1F13, 0x3CEBBA8E, +/**/ 0x0035FFAF, 0xBEF7FFDC, +/**/ 0x00000000, 0x3EF7FFEE, +/**/ 0xC0184CAE, 0x3CF1FFEB, +/**/ 0xC044A790, 0xBEF9FFD5, +/**/ 0xE0000000, 0x3EF9FFEA, +/**/ 0xC68EECCD, 0x3CF6E28E, +/**/ 0x0055BF6A, 0xBEFBFFCF, +/**/ 0x80000000, 0x3EFBFFE7, +/**/ 0xD189DAA2, 0x3CFC952F, +/**/ 0xC069773A, 0xBEFDFFC7, +/**/ 0xE0000000, 0x3EFDFFE3, +/**/ 0x480513F6, 0x3D0193E7, +/**/ 0x007FFF00, 0xBEFFFFC0, +/**/ 0x00000000, 0x3EFFFFE0, +/**/ 0x55888833, 0x3D055535, +/**/ 0xE04CC35D, 0xBF00FFDB, +/**/ 0xF0000000, 0x3F00FFED, +/**/ 0xE2CFFE66, 0x3D099681, +/**/ 0x805B1F33, 0xBF01FFD7, +/**/ 0xC0000000, 0x3F01FFEB, +/**/ 0xBE5C42ED, 0x3D0E5FCC, +/**/ 0xE06B2B01, 0xBF02FFD2, +/**/ 0x70000000, 0x3F02FFE9, +/**/ 0xD9D71DD1, 0x3D11DC8A, +/**/ 0x007CFEC8, 0xBF03FFCE, +/**/ 0x00000000, 0x3F03FFE7, +/**/ 0x45A374B3, 0x3D14D52E, +/**/ 0xE090B284, 0xBF04FFC8, +/**/ 0x70000000, 0x3F04FFE4, +/**/ 0x8553B4C7, 0x3D181DD0, +/**/ 0x80A65E36, 0xBF05FFC3, +/**/ 0xC0000000, 0x3F05FFE1, +/**/ 0x7A287BBE, 0x3D1BBA71, +/**/ 0xE0BE19DD, 0xBF06FFBD, +/**/ 0xF0000000, 0x3F06FFDE, +/**/ 0x03E27702, 0x3D1FAF11, +/**/ 0x00D7FD78, 0xBF07FFB8, +/**/ 0x00000000, 0x3F07FFDC, +/**/ 0x80613240, 0x3D21FFD7, +/**/ 0xE0F42105, 0xBF08FFB1, +/**/ 0xF0000000, 0x3F08FFD8, +/**/ 0xA6C489B3, 0x3D245825, +/**/ 0x81129C84, 0xBF09FFAB, +/**/ 0xC0000000, 0x3F09FFD5, +/**/ 0xE2BBB26F, 0x3D26E272, +/**/ 0xE13387F2, 0xBF0AFFA4, +/**/ 0x70000000, 0x3F0AFFD2, +/**/ 0x21272669, 0x3D29A0BF, +/**/ 0x0156FB50, 0xBF0BFF9E, +/**/ 0x00000000, 0x3F0BFFCF, +/**/ 0x4E276957, 0x3D2C950A, +/**/ 0xE17D0E9B, 0xBF0CFF96, +/**/ 0x70000000, 0x3F0CFFCB, +/**/ 0x551D090E, 0x3D2FC154, +/**/ 0x81A5D9D2, 0xBF0DFF8F, +/**/ 0xC0000000, 0x3F0DFFC7, +/**/ 0x90544EF1, 0x3D3193CE, +/**/ 0xE1D174F4, 0xBF0EFF87, +/**/ 0xF0000000, 0x3F0EFFC3, +/**/ 0x4D556583, 0x3D3364F2, +/**/ 0x01FFF800, 0xBF0FFF80, +/**/ 0x00000000, 0x3F0FFFC0, +/**/ 0x56221F78, 0x3D355515, +/**/ 0xF118BD7A, 0xBF107FBB, +/**/ 0xF8000000, 0x3F107FDD, +/**/ 0x9EEAD9D8, 0x3D376537, +/**/ 0xC1330AE7, 0xBF10FFB7, +/**/ 0xE0000000, 0x3F10FFDB, +/**/ 0x1B7FF7AE, 0x3D399659, +/**/ 0x714EF047, 0xBF117FB3, +/**/ 0xB8000000, 0x3F117FD9, +/**/ 0xBF51E233, 0x3D3BE979, +/**/ 0x016C7998, 0xBF11FFAF, +/**/ 0x80000000, 0x3F11FFD7, +/**/ 0x7D7108FF, 0x3D3E5F99, +/**/ 0x718BB2DA, 0xBF127FAA, +/**/ 0x39000000, 0x3F127FD5, +/**/ 0xB7721DC6, 0xBD3F0647, +/**/ 0xC1ACA80C, 0xBF12FFA5, +/**/ 0xE1000000, 0x3F12FFD2, +/**/ 0xED071532, 0xBD3C4729, +/**/ 0xF1CF652D, 0xBF137FA0, +/**/ 0x79000000, 0x3F137FD0, +/**/ 0x315D596D, 0xBD39620D, +/**/ 0x01F3F63C, 0xBF13FF9C, +/**/ 0x01000000, 0x3F13FFCE, +/**/ 0x92E45F81, 0xBD3655F1, +/**/ 0xF21A6739, 0xBF147F96, +/**/ 0x79000000, 0x3F147FCB, +/**/ 0x206B9526, 0xBD3321D7, +/**/ 0xC242C421, 0xBF14FF91, +/**/ 0xE1000000, 0x3F14FFC8, +/**/ 0xD244C12A, 0xBD2F897B, +/**/ 0x726D18F6, 0xBF157F8C, +/**/ 0x39000000, 0x3F157FC6, +/**/ 0xF93040AE, 0xBD287B4B, +/**/ 0x029971B4, 0xBF15FF87, +/**/ 0x81000000, 0x3F15FFC3, +/**/ 0xD578562C, 0xBD21171E, +/**/ 0x72C7DA5C, 0xBF167F81, +/**/ 0xB9000000, 0x3F167FC0, +/**/ 0x0F773DB4, 0xBD12B5E9, +/**/ 0xC2F85EEC, 0xBF16FF7B, +/**/ 0xE1000000, 0x3F16FFBD, +/**/ 0x158A76C2, 0xBCE44CD3, +/**/ 0xF32B0B63, 0xBF177F75, +/**/ 0xF9000000, 0x3F177FBA, +/**/ 0x2E48511B, 0x3D0CB55C, +/**/ 0x035FEBC0, 0xBF17FF70, +/**/ 0x01000000, 0x3F17FFB8, +/**/ 0x184C534F, 0x3D1FFAF0, +/**/ 0xF3970C03, 0xBF187F69, +/**/ 0xF9000000, 0x3F187FB4, +/**/ 0xACC53FBE, 0x3D292D95, +/**/ 0xC3D07829, 0xBF18FF63, +/**/ 0xE1000000, 0x3F18FFB1, +/**/ 0xE48887C8, 0x3D315FD7, +/**/ 0x740C3C32, 0xBF197F5D, +/**/ 0xB9000000, 0x3F197FAE, +/**/ 0x1DF5B242, 0x3D365AE3, +/**/ 0x044A641C, 0xBF19FF57, +/**/ 0x81000000, 0x3F19FFAB, +/**/ 0x6FBB0E5F, 0x3D3B88EC, +/**/ 0x748AFBE7, 0xBF1A7F50, +/**/ 0x3A000000, 0x3F1A7FA8, +/**/ 0x39766B40, 0xBD3F150C, +/**/ 0xC4CE0F91, 0xBF1AFF49, +/**/ 0xE2000000, 0x3F1AFFA4, +/**/ 0xF14DB839, 0xBD397E06, +/**/ 0xF513AB19, 0xBF1B7F42, +/**/ 0x7A000000, 0x3F1B7FA1, +/**/ 0xCBD9CC3D, 0xBD33B103, +/**/ 0x055BDA7D, 0xBF1BFF3C, +/**/ 0x02000000, 0x3F1BFF9E, +/**/ 0xBB1321B5, 0xBD2B5A05, +/**/ 0xF5A6A9BD, 0xBF1C7F34, +/**/ 0x7A000000, 0x3F1C7F9A, +/**/ 0xECAF9551, 0xBD1DC410, +/**/ 0xC5F424D6, 0xBF1CFF2D, +/**/ 0xE2000000, 0x3F1CFF96, +/**/ 0x3DF3CD68, 0xBCEF80FF, +/**/ 0x764457C8, 0xBF1D7F26, +/**/ 0x3A000000, 0x3F1D7F93, +/**/ 0x4271E737, 0x3D16CBC7, +/**/ 0x06974E91, 0xBF1DFF1F, +/**/ 0x82000000, 0x3F1DFF8F, +/**/ 0x1D134848, 0x3D2939D2, +/**/ 0x76ED1530, 0xBF1E7F17, +/**/ 0xBA000000, 0x3F1E7F8B, +/**/ 0xA9892C73, 0x3D33C2DD, +/**/ 0xC745B7A4, 0xBF1EFF0F, +/**/ 0xE2000000, 0x3F1EFF87, +/**/ 0x8AEC69D5, 0x3D3B25CF, +/**/ 0xF7A141EA, 0xBF1F7F07, +/**/ 0xFB000000, 0x3F1F7F83, +/**/ 0x645B412A, 0xBD3D3941, +/**/ 0x07FFC002, 0xBF1FFF00, +/**/ 0x03000000, 0x3F1FFF80, +/**/ 0x3BBC6662, 0xBD355955, +/**/ 0xFC309EF5, 0xBF203F7B, +/**/ 0xFD800000, 0x3F203FBD, +/**/ 0x260B17B3, 0xBD2A72D8, +/**/ 0xE462E3D0, 0xBF207F77, +/**/ 0xF1800000, 0x3F207FBB, +/**/ 0x0994AE68, 0xBD136218, +/**/ 0xBC96B492, 0xBF20BF73, +/**/ 0xDD800000, 0x3F20BFB9, +/**/ 0xECB2641F, 0x3D0E52E6, +/**/ 0x84CC1739, 0xBF20FF6F, +/**/ 0xC1800000, 0x3F20FFB7, +/**/ 0xE7FCF60B, 0x3D296078, +/**/ 0x3D0311C6, 0xBF213F6B, +/**/ 0x9D800000, 0x3F213FB5, +/**/ 0xA7850AFF, 0x3D35DA18, +/**/ 0xE53BAA36, 0xBF217F66, +/**/ 0x71800000, 0x3F217FB3, +/**/ 0x5E7BB444, 0x3D3F48F1, +/**/ 0x7D75E68A, 0xBF21BF62, +/**/ 0x3E000000, 0x3F21BFB1, +/**/ 0x812BC469, 0xBD370239, +/**/ 0x05B1CCC0, 0xBF21FF5E, +/**/ 0x02000000, 0x3F21FFAF, +/**/ 0x23BF1A4D, 0xBD2A0CD0, +/**/ 0x7DEF62D8, 0xBF223F59, +/**/ 0xBE000000, 0x3F223FAC, +/**/ 0x736E3623, 0xBD0614D3, +/**/ 0xE62EAED0, 0xBF227F54, +/**/ 0x72000000, 0x3F227FAA, +/**/ 0x37EDEDB0, 0x3D1F28BD, +/**/ 0x3E6FB6A9, 0xBF22BF50, +/**/ 0x1E000000, 0x3F22BFA8, +/**/ 0x07CE33C8, 0x3D32A0F5, +/**/ 0x86B28060, 0xBF22FF4B, +/**/ 0xC2000000, 0x3F22FFA5, +/**/ 0xA31C6A8D, 0x3D3DC2B6, +/**/ 0xBEF711F6, 0xBF233F46, +/**/ 0x5E800000, 0x3F233FA3, +/**/ 0xFC67C9FB, 0xBD36CF8B, +/**/ 0xE73D7169, 0xBF237F41, +/**/ 0xF2800000, 0x3F237FA0, +/**/ 0xE6D88A89, 0xBD2629A5, +/**/ 0xFF85A4B8, 0xBF23BF3C, +/**/ 0x7E800000, 0x3F23BF9E, +/**/ 0x202574EC, 0x3CEE7C34, +/**/ 0x07CFB1E3, 0xBF23FF38, +/**/ 0x02800000, 0x3F23FF9C, +/**/ 0x46E594C1, 0x3D2A9723, +/**/ 0x001B9EE8, 0xBF243F33, +/**/ 0x7E800000, 0x3F243F99, +/**/ 0xF61AE74C, 0x3D39F33C, +/**/ 0xE86971C7, 0xBF247F2D, +/**/ 0xF3000000, 0x3F247F96, +/**/ 0x85341E31, 0xBD39141C, +/**/ 0xC0B9307F, 0xBF24BF28, +/**/ 0x5F000000, 0x3F24BF94, +/**/ 0xDA0FAF09, 0xBD2792F5, +/**/ 0x890AE10E, 0xBF24FF23, +/**/ 0xC3000000, 0x3F24FF91, +/**/ 0xFB239430, 0x3CFD4219, +/**/ 0x415E8974, 0xBF253F1E, +/**/ 0x1F000000, 0x3F253F8F, +/**/ 0x0359434A, 0x3D2F8B72, +/**/ 0xE9B42FAF, 0xBF257F18, +/**/ 0x73000000, 0x3F257F8C, +/**/ 0x1939FEDF, 0x3D3E0C4B, +/**/ 0x820BD9BF, 0xBF25BF13, +/**/ 0xBF800000, 0x3F25BF89, +/**/ 0x39B301E2, 0xBD335728, +/**/ 0x0A658DA3, 0xBF25FF0E, +/**/ 0x03800000, 0x3F25FF87, +/**/ 0x5E1E8D4F, 0xBD118E84, +/**/ 0x82C15159, 0xBF263F08, +/**/ 0x3F800000, 0x3F263F84, +/**/ 0xBDDDD045, 0x3D25CFC0, +/**/ 0xEB1F2AE1, 0xBF267F02, +/**/ 0x73800000, 0x3F267F81, +/**/ 0x08837E99, 0x3D3A8C5C, +/**/ 0x437F203A, 0xBF26BEFD, +/**/ 0xA0000000, 0x3F26BF7E, +/**/ 0x3C56F12D, 0xBD35752E, +/**/ 0x8BE13762, 0xBF26FEF7, +/**/ 0xC4000000, 0x3F26FF7B, +/**/ 0x46359E28, 0xBD146EFA, +/**/ 0xC4457659, 0xBF273EF1, +/**/ 0xE0000000, 0x3F273F78, +/**/ 0xCD265865, 0x3D273355, +/**/ 0xECABE31C, 0xBF277EEB, +/**/ 0xF4000000, 0x3F277F75, +/**/ 0x095DEBF8, 0x3D3CAC0E, +/**/ 0x051483AC, 0xBF27BEE6, +/**/ 0x00800000, 0x3F27BF73, +/**/ 0x4C39F4DB, 0xBD31E395, +/**/ 0x0D7F5E08, 0xBF27FEE0, +/**/ 0x04800000, 0x3F27FF70, +/**/ 0xA1314B81, 0xBCB43F3D, +/**/ 0x05EC782D, 0xBF283EDA, +/**/ 0x00800000, 0x3F283F6D, +/**/ 0x115B8D70, 0x3D321B10, +/**/ 0xEE5BD81B, 0xBF287ED3, +/**/ 0xF5000000, 0x3F287F69, +/**/ 0x83704FE1, 0xBD3B54A7, +/**/ 0xC6CD83D1, 0xBF28BECD, +/**/ 0xE1000000, 0x3F28BF66, +/**/ 0x41229C91, 0xBD20C4CC, +/**/ 0x8F41814D, 0xBF28FEC7, +/**/ 0xC5000000, 0x3F28FF63, +/**/ 0x2A183F17, 0x3D25E5A8, +/**/ 0x47B7D68F, 0xBF293EC1, +/**/ 0xA1000000, 0x3F293F60, +/**/ 0xF81B997D, 0x3D3EAC06, +/**/ 0xF0308995, 0xBF297EBA, +/**/ 0x75800000, 0x3F297F5D, +/**/ 0x3A1E5BAD, 0xBD2A6B9B, +/**/ 0x88ABA05E, 0xBF29BEB4, +/**/ 0x41800000, 0x3F29BF5A, +/**/ 0xBDFE3C77, 0x3D1D3958, +/**/ 0x112920E9, 0xBF29FEAE, +/**/ 0x05800000, 0x3F29FF57, +/**/ 0x375BA904, 0x3D3C3972, +/**/ 0x89A91135, 0xBF2A3EA7, +/**/ 0xC2000000, 0x3F2A3F53, +/**/ 0x588DE85B, 0xBD2CE6F3, +/**/ 0xF22B7740, 0xBF2A7EA0, +/**/ 0x76000000, 0x3F2A7F50, +/**/ 0x75AEDBFD, 0x3D1D2249, +/**/ 0x4AB05909, 0xBF2ABE9A, +/**/ 0x22000000, 0x3F2ABF4D, +/**/ 0x2CE7BDAC, 0x3D3D6E96, +/**/ 0x9337BC90, 0xBF2AFE93, +/**/ 0xC6800000, 0x3F2AFF49, +/**/ 0xCB7D724C, 0xBD2800DC, +/**/ 0xCBC1A7D1, 0xBF2B3E8C, +/**/ 0x62800000, 0x3F2B3F46, +/**/ 0xFA591B29, 0x3D25F908, +/**/ 0xF44E20CE, 0xBF2B7E85, +/**/ 0xF7000000, 0x3F2B7F42, +/**/ 0x53021ED8, 0xBD3D9991, +/**/ 0x0CDD2D83, 0xBF2BBE7F, +/**/ 0x83000000, 0x3F2BBF3F, +/**/ 0xFD596AD6, 0xBD1706BF, +/**/ 0x156ED3F0, 0xBF2BFE78, +/**/ 0x07000000, 0x3F2BFF3C, +/**/ 0x4EC45253, 0x3D328528, +/**/ 0x0E031A14, 0xBF2C3E71, +/**/ 0x83800000, 0x3F2C3F38, +/**/ 0x927D8A9E, 0xBD34C408, +/**/ 0xF69A05ED, 0xBF2C7E69, +/**/ 0xF7800000, 0x3F2C7F34, +/**/ 0xCAE2C25F, 0x3D118EF4, +/**/ 0xCF339D7A, 0xBF2CBE62, +/**/ 0x63800000, 0x3F2CBF31, +/**/ 0x73DBBB41, 0x3D3DFD79, +/**/ 0x97CFE6B9, 0xBF2CFE5B, +/**/ 0xC8000000, 0x3F2CFF2D, +/**/ 0xE7FE77E6, 0xBD1FD74F, +/**/ 0x506EE7AA, 0xBF2D3E54, +/**/ 0x24000000, 0x3F2D3F2A, +/**/ 0xBDDB871F, 0x3D328AD4, +/**/ 0xF910A64A, 0xBF2D7E4C, +/**/ 0x78800000, 0x3F2D7F26, +/**/ 0x903DDD81, 0xBD327F8C, +/**/ 0x91B52899, 0xBF2DBE45, +/**/ 0xC4800000, 0x3F2DBF22, +/**/ 0xDF52840A, 0x3D21D80F, +/**/ 0x1A5C7495, 0xBF2DFE3E, +/**/ 0x09000000, 0x3F2DFF1F, +/**/ 0xEED9F651, 0xBD3B316D, +/**/ 0x9306903D, 0xBF2E3E36, +/**/ 0x45000000, 0x3F2E3F1B, +/**/ 0x76DB3C6B, 0x3CF2911A, +/**/ 0xFBB3818F, 0xBF2E7E2E, +/**/ 0x79000000, 0x3F2E7F17, +/**/ 0x85559113, 0x3D3DFC86, +/**/ 0x54634E89, 0xBF2EBE27, +/**/ 0xA5800000, 0x3F2EBF13, +/**/ 0x0AB3DBE7, 0xBD12D83E, +/**/ 0x9D15FD2B, 0xBF2EFE1F, +/**/ 0xC9800000, 0x3F2EFF0F, +/**/ 0x617B99F1, 0x3D39124F, +/**/ 0xD5CB9373, 0xBF2F3E17, +/**/ 0xE6000000, 0x3F2F3F0B, +/**/ 0xF8F64DA1, 0xBD2152B9, +/**/ 0xFE841760, 0xBF2F7E0F, +/**/ 0xFA000000, 0x3F2F7F07, +/**/ 0x34C4735B, 0x3D3617EB, +/**/ 0x173F8EEF, 0xBF2FBE08, +/**/ 0x06800000, 0x3F2FBF04, +/**/ 0x739FA712, 0xBD2551B0, +/**/ 0x1FFE0020, 0xBF2FFE00, +/**/ 0x0A800000, 0x3F2FFF00, +/**/ 0x885DE027, 0x3D351558, +/**/ 0x0C5FB879, 0xBF301EFC, +/**/ 0x03800000, 0x3F301F7E, +/**/ 0x68F8FC50, 0xBD255905, +/**/ 0x00C1F3B0, 0xBF303EF8, +/**/ 0xFD800000, 0x3F303F7B, +/**/ 0xDF771CF4, 0x3D361295, +/**/ 0xED25B4B7, 0xBF305EF3, +/**/ 0xF3C00000, 0x3F305F79, +/**/ 0xD8A255DB, 0xBD2158BB, +/**/ 0xD18AFE8B, 0xBF307EEF, +/**/ 0xE5C00000, 0x3F307F77, +/**/ 0xB740E625, 0x3D3917A1, +/**/ 0xADF1D42C, 0xBF309EEB, +/**/ 0xD4000000, 0x3F309F75, +/**/ 0x9C716D59, 0xBD1281AD, +/**/ 0x825A3899, 0xBF30BEE7, +/**/ 0xBE000000, 0x3F30BF73, +/**/ 0x86ED7DDC, 0x3D3E2C7A, +/**/ 0x4EC42ED1, 0xBF30DEE3, +/**/ 0xA4400000, 0x3F30DF71, +/**/ 0xF54F7E28, 0x3CF7F534, +/**/ 0x132FB9D5, 0xBF30FEDF, +/**/ 0x86800000, 0x3F30FF6F, +/**/ 0x404F4E01, 0xBD3AA6E1, +/**/ 0xCF9CDCA2, 0xBF311EDA, +/**/ 0x64800000, 0x3F311F6D, +/**/ 0x4A6EC981, 0x3D2375B9, +/**/ 0x840B9A38, 0xBF313ED6, +/**/ 0x3EC00000, 0x3F313F6B, +/**/ 0x33401DD0, 0xBD315A73, +/**/ 0x307BF596, 0xBF315ED2, +/**/ 0x14C00000, 0x3F315F69, +/**/ 0x02C11605, 0x3D341A2F, +/**/ 0xD4EDF1BC, 0xBF317ECD, +/**/ 0xE7000000, 0x3F317F66, +/**/ 0xB2B7E8C5, 0xBD1798F3, +/**/ 0x716191A8, 0xBF319EC9, +/**/ 0xB5400000, 0x3F319F64, +/**/ 0x35D62ED5, 0xBD3F5AB7, +/**/ 0x05D6D85A, 0xBF31BEC5, +/**/ 0x7F400000, 0x3F31BF62, +/**/ 0xCA7EC7CD, 0x3D1EF6FF, +/**/ 0x924DC8D2, 0xBF31DEC0, +/**/ 0x45800000, 0x3F31DF60, +/**/ 0xA8550396, 0xBD309BD7, +/**/ 0x16C6660D, 0xBF31FEBC, +/**/ 0x07800000, 0x3F31FF5E, +/**/ 0xC3E31F70, 0x3D379981, +/**/ 0x9340B30B, 0xBF321EB7, +/**/ 0xC5C00000, 0x3F321F5B, +/**/ 0x5FE92B94, 0x3CD7B300, +/**/ 0x07BCB2CC, 0xBF323EB3, +/**/ 0x80000000, 0x3F323F59, +/**/ 0x25A7CF34, 0xBD364AF9, +/**/ 0x743A684F, 0xBF325EAE, +/**/ 0x36000000, 0x3F325F57, +/**/ 0x17E48399, 0x3D339D32, +/**/ 0xD8B9D692, 0xBF327EA9, +/**/ 0xE8400000, 0x3F327F54, +/**/ 0xCC387BD1, 0xBCFE7B27, +/**/ 0x353B0095, 0xBF329EA5, +/**/ 0x96800000, 0x3F329F52, +/**/ 0x1AE7FA80, 0xBD36D8A7, +/**/ 0x89BDE957, 0xBF32BEA0, +/**/ 0x40800000, 0x3F32BF50, +/**/ 0x05CF3DC3, 0x3D34CB54, +/**/ 0xD64293D7, 0xBF32DE9B, +/**/ 0xE6C00000, 0x3F32DF4D, +/**/ 0xD5A4F691, 0x3CF053EA, +/**/ 0x1AC90315, 0xBF32FE97, +/**/ 0x89000000, 0x3F32FF4B, +/**/ 0x5CAE7B16, 0xBD3229E7, +/**/ 0x57513A0F, 0xBF331E92, +/**/ 0x27000000, 0x3F331F49, +/**/ 0xAEED4509, 0x3D3B3EE1, +/**/ 0x8BDB3BC4, 0xBF333E8D, +/**/ 0xC1400000, 0x3F333F46, +/**/ 0x2E0C2605, 0x3D228133, +/**/ 0xB8670B34, 0xBF335E88, +/**/ 0x57800000, 0x3F335F44, +/**/ 0xBBD6E280, 0xBD20477F, +/**/ 0xDCF4AB5D, 0xBF337E83, +/**/ 0xE9C00000, 0x3F337F41, +/**/ 0xE9CE8AFC, 0xBD38ED2A, +/**/ 0xF9841F3F, 0xBF339E7E, +/**/ 0x77C00000, 0x3F339F3F, +/**/ 0x39159F9B, 0x3D36E558, +/**/ 0x0E1569D9, 0xBF33BE7A, +/**/ 0x02000000, 0x3F33BF3D, +/**/ 0x40681634, 0x3D1D5325, +/**/ 0x1AA88E2A, 0xBF33DE75, +/**/ 0x88400000, 0x3F33DF3A, +/**/ 0x7F2112CE, 0xBD1E775F, +/**/ 0x1F3D8F31, 0xBF33FE70, +/**/ 0x0A800000, 0x3F33FF38, +/**/ 0x91F80D1B, 0xBD35F18B, +/**/ 0x1BD46FED, 0xBF341E6B, +/**/ 0x88800000, 0x3F341F35, +/**/ 0xFDC3FC2F, 0x3D3C5AAD, +/**/ 0x106D335D, 0xBF343E66, +/**/ 0x02C00000, 0x3F343F33, +/**/ 0x268A89F1, 0x3D2E8FA9, +/**/ 0xFD07DC80, 0xBF345E60, +/**/ 0x79000000, 0x3F345F30, +/**/ 0x902AC9EE, 0x3D06B73F, +/**/ 0xE1A46E55, 0xBF347E5B, +/**/ 0xEB400000, 0x3F347F2D, +/**/ 0x45C43959, 0xBD21EE30, +/**/ 0xBE42EBDC, 0xBF349E56, +/**/ 0x59800000, 0x3F349F2B, +/**/ 0xE8B753E8, 0xBD34212B, +/**/ 0x92E35813, 0xBF34BE51, +/**/ 0xC3C00000, 0x3F34BF28, +/**/ 0x9D2064DB, 0xBD3EA653, +/**/ 0x5F85B5F9, 0xBF34DE4C, +/**/ 0x29C00000, 0x3F34DF26, +/**/ 0x81DCB6FB, 0x3D377A70, +/**/ 0x242A088D, 0xBF34FE47, +/**/ 0x8C000000, 0x3F34FF23, +/**/ 0x6BB44A6D, 0x3D2C8440, +/**/ 0xE0D052CF, 0xBF351E41, +/**/ 0xEA400000, 0x3F351F20, +/**/ 0x0048AAF8, 0x3D16C6ED, +/**/ 0x957897BD, 0xBF353E3C, +/**/ 0x44800000, 0x3F353F1E, +/**/ 0xF506A07E, 0xBD01ADF4, +/**/ 0x4222DA57, 0xBF355E37, +/**/ 0x9AC00000, 0x3F355F1B, +/**/ 0x4B88A655, 0xBD22E69B, +/**/ 0xE6CF1D9B, 0xBF357E31, +/**/ 0xED000000, 0x3F357F18, +/**/ 0x153DAEB0, 0xBD3005F2, +/**/ 0x837D6488, 0xBF359E2C, +/**/ 0x3B400000, 0x3F359F16, +/**/ 0x2D5222B4, 0xBD35ECAC, +/**/ 0x182DB21E, 0xBF35BE27, +/**/ 0x85800000, 0x3F35BF13, +/**/ 0x2EA6CB14, 0xBD3B267C, +/**/ 0xA4E0095B, 0xBF35DE21, +/**/ 0xCBC00000, 0x3F35DF10, +/**/ 0x5A40A340, 0xBD3FB262, +/**/ 0x29946D3F, 0xBF35FE1C, +/**/ 0x0DC00000, 0x3F35FF0E, +/**/ 0x0E7B79ED, 0x3D3C70A1, +/**/ 0xA64AE0C7, 0xBF361E16, +/**/ 0x4C000000, 0x3F361F0B, +/**/ 0xC9C8D263, 0x3D39438D, +/**/ 0x1B0366F4, 0xBF363E11, +/**/ 0x86400000, 0x3F363F08, +/**/ 0x9582CD0C, 0x3D36C763, +/**/ 0x87BE02C5, 0xBF365E0B, +/**/ 0xBC800000, 0x3F365F05, +/**/ 0x2F24F1F9, 0x3D34FD22, +/**/ 0xEC7AB737, 0xBF367E05, +/**/ 0xEEC00000, 0x3F367F02, +/**/ 0x53CAEA94, 0x3D33E5C9, +/**/ 0x4939874A, 0xBF369E00, +/**/ 0x1D000000, 0x3F369F00, +/**/ 0xC03081D0, 0x3D338258, +/**/ 0x9DFA75FE, 0xBF36BDFA, +/**/ 0x47400000, 0x3F36BEFD, +/**/ 0x30B1A458, 0x3D33D3D0, +/**/ 0xEABD8651, 0xBF36DDF4, +/**/ 0x6D800000, 0x3F36DEFA, +/**/ 0x614A60C1, 0x3D34DB2F, +/**/ 0x2F82BB41, 0xBF36FDEF, +/**/ 0x8FC00000, 0x3F36FEF7, +/**/ 0x0D96E7B8, 0x3D369976, +/**/ 0x6C4A17CF, 0xBF371DE9, +/**/ 0xAE000000, 0x3F371EF4, +/**/ 0xF0D38C30, 0x3D390FA3, +/**/ 0xA1139EF8, 0xBF373DE3, +/**/ 0xC8400000, 0x3F373EF1, +/**/ 0xC5DCC397, 0x3D3C3EB8, +/**/ 0xCDDF53BC, 0xBF375DDD, +/**/ 0xDEC00000, 0x3F375EEE, +/**/ 0xB8D0D9FD, 0xBD3FD84B, +/**/ 0xF2AD3919, 0xBF377DD7, +/**/ 0xF1000000, 0x3F377EEB, +/**/ 0xD11891A0, 0xBD3B3469, +/**/ 0x0F7D520F, 0xBF379DD2, +/**/ 0xFF400000, 0x3F379EE8, +/**/ 0xC93D855B, 0xBD35D4A1, +/**/ 0x244FA19D, 0xBF37BDCC, +/**/ 0x09800000, 0x3F37BEE6, +/**/ 0xCFC56806, 0xBD2F6FE7, +/**/ 0x31242AC1, 0xBF37DDC6, +/**/ 0x0FC00000, 0x3F37DEE3, +/**/ 0xE815F202, 0xBD21BAC0, +/**/ 0x35FAF079, 0xBF37FDC0, +/**/ 0x12000000, 0x3F37FEE0, +/**/ 0x5190C28B, 0xBCF43E7B, +/**/ 0x32D3F5C6, 0xBF381DBA, +/**/ 0x10400000, 0x3F381EDD, +/**/ 0x34C1F9E9, 0x3D1C55D8, +/**/ 0x27AF3DA6, 0xBF383DB4, +/**/ 0x0A800000, 0x3F383EDA, +/**/ 0x8AAF36D4, 0x3D302FB8, +/**/ 0x148CCB18, 0xBF385DAE, +/**/ 0x00C00000, 0x3F385ED7, +/**/ 0x7AE0D0F8, 0x3D3A0BDF, +/**/ 0xF96CA11B, 0xBF387DA7, +/**/ 0xF3400000, 0x3F387ED3, +/**/ 0x6B1CDAAF, 0xBD3B5515, +/**/ 0xD64EC2AD, 0xBF389DA1, +/**/ 0xE1800000, 0x3F389ED0, +/**/ 0xE1179E5E, 0xBD2FE44C, +/**/ 0xAB3332CD, 0xBF38BD9B, +/**/ 0xCBC00000, 0x3F38BECD, +/**/ 0xF86F56EC, 0xBD0E529E, +/**/ 0x7819F47A, 0xBF38DD95, +/**/ 0xB2000000, 0x3F38DECA, +/**/ 0xFEB631AB, 0x3D2246C3, +/**/ 0x3D030AB4, 0xBF38FD8F, +/**/ 0x94400000, 0x3F38FEC7, +/**/ 0xE04DA791, 0x3D36D7FA, +/**/ 0xF9EE7878, 0xBF391D88, +/**/ 0x72C00000, 0x3F391EC4, +/**/ 0x86F7ADBB, 0xBD3AAB89, +/**/ 0xAEDC40C7, 0xBF393D82, +/**/ 0x4D000000, 0x3F393EC1, +/**/ 0x032C6155, 0xBD26CC57, +/**/ 0x5BCC669D, 0xBF395D7C, +/**/ 0x23400000, 0x3F395EBE, +/**/ 0x93C3EB3D, 0x3D12A452, +/**/ 0x00BEECFB, 0xBF397D76, +/**/ 0xF5800000, 0x3F397EBA, +/**/ 0xA0BCD695, 0x3D358336, +/**/ 0x9DB3D6E0, 0xBF399D6F, +/**/ 0xC4000000, 0x3F399EB7, +/**/ 0xDA737570, 0xBD38D6C5, +/**/ 0x32AB2749, 0xBF39BD69, +/**/ 0x8E400000, 0x3F39BEB4, +/**/ 0x65026C7D, 0xBD198F84, +/**/ 0xBFA4E136, 0xBF39DD62, +/**/ 0x54800000, 0x3F39DEB1, +/**/ 0x2EA9B41A, 0x3D29B9C9, +/**/ 0x44A107A5, 0xBF39FD5C, +/**/ 0x17000000, 0x3F39FEAE, +/**/ 0x16137ACF, 0xBD3F1375, +/**/ 0xC19F9D96, 0xBF3A1D55, +/**/ 0xD5400000, 0x3F3A1EAA, +/**/ 0xDE73AFA0, 0xBD2467DC, +/**/ 0x36A0A607, 0xBF3A3D4F, +/**/ 0x8F800000, 0x3F3A3EA7, +/**/ 0x7B8357C6, 0x3D26F8F0, +/**/ 0xA3A423F7, 0xBF3A5D48, +/**/ 0x46000000, 0x3F3A5EA4, +/**/ 0x5DA0DFB7, 0xBD3E0141, +/**/ 0x08AA1A64, 0xBF3A7D42, +/**/ 0xF8400000, 0x3F3A7EA0, +/**/ 0x41050D29, 0xBD1AB06E, +/**/ 0x65B28C4E, 0xBF3A9D3B, +/**/ 0xA6800000, 0x3F3A9E9D, +/**/ 0x56A0E005, 0x3D317CE9, +/**/ 0xBABD7CB3, 0xBF3ABD34, +/**/ 0x51000000, 0x3F3ABE9A, +/**/ 0xF899EF39, 0xBD358532, +/**/ 0x07CAEE92, 0xBF3ADD2E, +/**/ 0xF7400000, 0x3F3ADE96, +/**/ 0xC83BF5C2, 0x3D113A3C, +/**/ 0x4CDAE4EA, 0xBF3AFD27, +/**/ 0x99800000, 0x3F3AFE93, +/**/ 0x863C7C8E, 0x3D3EF92F, +/**/ 0x89ED62B9, 0xBF3B1D20, +/**/ 0x38000000, 0x3F3B1E90, +/**/ 0x3341CC3C, 0xBD161149, +/**/ 0xBF026AFE, 0xBF3B3D19, +/**/ 0xD2400000, 0x3F3B3E8C, +/**/ 0x67C955DF, 0x3D36D709, +/**/ 0xEC1A00B8, 0xBF3B5D12, +/**/ 0x68C00000, 0x3F3B5E89, +/**/ 0x5AE9B17A, 0xBD27E77B, +/**/ 0x113426E6, 0xBF3B7D0C, +/**/ 0xFB000000, 0x3F3B7E85, +/**/ 0x219679DE, 0x3D321C58, +/**/ 0x2E50E086, 0xBF3B9D05, +/**/ 0x89800000, 0x3F3B9E82, +/**/ 0xFAA62113, 0xBD2DEF6A, +/**/ 0x43703097, 0xBF3BBCFE, +/**/ 0x13C00000, 0x3F3BBE7F, +/**/ 0x23305306, 0x3D30D119, +/**/ 0x50921A17, 0xBF3BDCF7, +/**/ 0x9A400000, 0x3F3BDE7B, +/**/ 0x9FBACE27, 0xBD2D1078, +/**/ 0x55B6A006, 0xBF3BFCF0, +/**/ 0x1C800000, 0x3F3BFE78, +/**/ 0xD625DF1E, 0x3D32FD49, +/**/ 0x52DDC563, 0xBF3C1CE9, +/**/ 0x9B000000, 0x3F3C1E74, +/**/ 0x7D07255B, 0xBD253AA9, +/**/ 0x48078D2B, 0xBF3C3CE2, +/**/ 0x15400000, 0x3F3C3E71, +/**/ 0x9E08B538, 0x3D38A8E7, +/**/ 0x3533FA5D, 0xBF3C5CDB, +/**/ 0x8BC00000, 0x3F3C5E6D, +/**/ 0x45956AFC, 0xBD09780B, +/**/ 0x1A630FF9, 0xBF3C7CD4, +/**/ 0xFE400000, 0x3F3C7E69, +/**/ 0x2792F44E, 0xBD3E2410, +/**/ 0xF794D0FC, 0xBF3C9CCC, +/**/ 0x6C800000, 0x3F3C9E66, +/**/ 0x30AB4456, 0x3D1F2AEC, +/**/ 0xCCC94066, 0xBF3CBCC5, +/**/ 0xD7000000, 0x3F3CBE62, +/**/ 0x231641D5, 0xBD3161A0, +/**/ 0x9A006135, 0xBF3CDCBE, +/**/ 0x3D400000, 0x3F3CDE5F, +/**/ 0xF4AD1934, 0x3D3657DD, +/**/ 0x5F3A3668, 0xBF3CFCB7, +/**/ 0x9FC00000, 0x3F3CFE5B, +/**/ 0x2E7AC798, 0xBCF07CB0, +/**/ 0x1C76C2FD, 0xBF3D1CB0, +/**/ 0xFE400000, 0x3F3D1E57, +/**/ 0x6090F643, 0xBD377F9B, +/**/ 0xD1B609F3, 0xBF3D3CA8, +/**/ 0x58800000, 0x3F3D3E54, +/**/ 0x849503E6, 0x3D32F16C, +/**/ 0x7EF80E49, 0xBF3D5CA1, +/**/ 0xAF000000, 0x3F3D5E50, +/**/ 0xAF1CA4EA, 0xBCFB3B3A, +/**/ 0x243CD2FE, 0xBF3D7C9A, +/**/ 0x01800000, 0x3F3D7E4D, +/**/ 0x4701415B, 0xBD356DFC, +/**/ 0xC1845B0F, 0xBF3D9C92, +/**/ 0x4FC00000, 0x3F3D9E49, +/**/ 0x582AEA48, 0x3D37C392, +/**/ 0x56CEA97C, 0xBF3DBC8B, +/**/ 0x9A400000, 0x3F3DBE45, +/**/ 0x67DCC15E, 0x3D1787DF, +/**/ 0xE41BC143, 0xBF3DDC83, +/**/ 0xE0C00000, 0x3F3DDE41, +/**/ 0x352F961F, 0xBD262398, +/**/ 0x696BA563, 0xBF3DFC7C, +/**/ 0x23400000, 0x3F3DFE3E, +/**/ 0xDEDD373A, 0xBD3B16B9, +/**/ 0xE6BE58DA, 0xBF3E1C74, +/**/ 0x61800000, 0x3F3E1E3A, +/**/ 0x336BE94B, 0x3D35D42E, +/**/ 0x5C13DEA7, 0xBF3E3C6D, +/**/ 0x9C000000, 0x3F3E3E36, +/**/ 0x08A303A2, 0x3D1EBFAF, +/**/ 0xC96C39C9, 0xBF3E5C65, +/**/ 0xD2800000, 0x3F3E5E32, +/**/ 0x34856362, 0xBD160A06, +/**/ 0x2EC76D3D, 0xBF3E7C5E, +/**/ 0x05000000, 0x3F3E7E2F, +/**/ 0x154CDF1A, 0xBD31C21A, +/**/ 0x8C257C04, 0xBF3E9C56, +/**/ 0x33800000, 0x3F3E9E2B, +/**/ 0x31941F7F, 0xBD3D0DDE, +/**/ 0xE186691B, 0xBF3EBC4E, +/**/ 0x5DC00000, 0x3F3EBE27, +/**/ 0xC26EC60D, 0x3D389B31, +/**/ 0x2EEA3781, 0xBF3EDC47, +/**/ 0x84400000, 0x3F3EDE23, +/**/ 0xD583BEF8, 0x3D2E742A, +/**/ 0x7450EA34, 0xBF3EFC3F, +/**/ 0xA6C00000, 0x3F3EFE1F, +/**/ 0xAC2DA351, 0x3D1B3F31, +/**/ 0xB1BA8433, 0xBF3F1C37, +/**/ 0xC5400000, 0x3F3F1E1B, +/**/ 0x2DC67430, 0xBCE45533, +/**/ 0xE727087C, 0xBF3F3C2F, +/**/ 0xDFC00000, 0x3F3F3E17, +/**/ 0xFF1174AE, 0xBD1C7133, +/**/ 0x14967A0F, 0xBF3F5C28, +/**/ 0xF6400000, 0x3F3F5E13, +/**/ 0x4AE098DC, 0xBD29383C, +/**/ 0x3A08DBE9, 0xBF3F7C20, +/**/ 0x08C00000, 0x3F3F7E10, +/**/ 0x684B0B3B, 0xBD31211D, +/**/ 0x577E3109, 0xBF3F9C18, +/**/ 0x17400000, 0x3F3F9E0C, +/**/ 0x268D7464, 0xBD34AA4B, +/**/ 0x6CF67C6E, 0xBF3FBC10, +/**/ 0x21C00000, 0x3F3FBE08, +/**/ 0xBED03388, 0xBD3736A7, +/**/ 0x7A71C116, 0xBF3FDC08, +/**/ 0x28400000, 0x3F3FDE04, +/**/ 0x900BC4E5, 0xBD38C533, +/**/ 0x7FF00200, 0xBF3FFC00, +/**/ 0x2AC00000, 0x3F3FFE00, +/**/ 0xF9987527, 0xBD3954EE, +/**/ 0x3EB8A115, 0xBF400DFC, +/**/ 0x14A00000, 0x3F400EFE, +/**/ 0x5B2E613B, 0xBD38E4DA, +/**/ 0x397AC249, 0xBF401DF8, +/**/ 0x11E00000, 0x3F401EFC, +/**/ 0x14E5761B, 0xBD3773F6, +/**/ 0x303E661C, 0xBF402DF4, +/**/ 0x0D200000, 0x3F402EFA, +/**/ 0x873570A0, 0xBD350142, +/**/ 0x23038E0C, 0xBF403DF0, +/**/ 0x06600000, 0x3F403EF8, +/**/ 0x12F5DD53, 0xBD318BC0, +/**/ 0x11CA3B9A, 0xBF404DEC, +/**/ 0xFDA00000, 0x3F404EF5, +/**/ 0x32BC307C, 0xBD2A24DE, +/**/ 0xFC927044, 0xBF405DE7, +/**/ 0xF2E00000, 0x3F405EF3, +/**/ 0xF01532DA, 0xBD1E513F, +/**/ 0xE35C2D8A, 0xBF406DE3, +/**/ 0xE6200000, 0x3F406EF1, +/**/ 0xCE27534E, 0xBCF10631, +/**/ 0xC62774EA, 0xBF407DDF, +/**/ 0xD7600000, 0x3F407EEF, +/**/ 0x86CE9380, 0x3D19E95C, +/**/ 0xA4F447E4, 0xBF408DDB, +/**/ 0xC6A00000, 0x3F408EED, +/**/ 0xBA0CD2C3, 0x3D2E19BC, +/**/ 0x7FC2A7F8, 0xBF409DD7, +/**/ 0xB3E00000, 0x3F409EEB, +/**/ 0x31FF7199, 0x3D38A832, +/**/ 0x569296A4, 0xBF40ADD3, +/**/ 0x9F400000, 0x3F40AEE9, +/**/ 0xC2D77791, 0xBD3CB2AD, +/**/ 0x29641567, 0xBF40BDCF, +/**/ 0x88800000, 0x3F40BEE7, +/**/ 0xE5545563, 0xBD3102C1, +/**/ 0xF83725C2, 0xBF40CDCA, +/**/ 0x6FC00000, 0x3F40CEE5, +/**/ 0x66B3E48D, 0xBD111C2A, +/**/ 0xC30BC932, 0xBF40DDC6, +/**/ 0x55000000, 0x3F40DEE3, +/**/ 0x7711FC2A, 0x3D2302EF, +/**/ 0x89E20138, 0xBF40EDC2, +/**/ 0x38400000, 0x3F40EEE1, +/**/ 0xB558238E, 0x3D3857C4, +/**/ 0x4CB9CF52, 0xBF40FDBE, +/**/ 0x19A00000, 0x3F40FEDF, +/**/ 0x1194C2E1, 0xBD37C324, +/**/ 0x0B933501, 0xBF410DBA, +/**/ 0xF8E00000, 0x3F410EDC, +/**/ 0xFBCAF285, 0xBD1B390B, +/**/ 0xC66E33C2, 0xBF411DB5, +/**/ 0xD6200000, 0x3F411EDA, +/**/ 0x0E52C3A4, 0x3D266ECF, +/**/ 0x7D4ACD15, 0xBF412DB1, +/**/ 0xB1600000, 0x3F412ED8, +/**/ 0x1A4AF71D, 0x3D3E4EDB, +/**/ 0x30290279, 0xBF413DAD, +/**/ 0x8AC00000, 0x3F413ED6, +/**/ 0x58C4D599, 0xBD2B0DD1, +/**/ 0xDF08D56E, 0xBF414DA8, +/**/ 0x62000000, 0x3F414ED4, +/**/ 0x2FB4061D, 0x3D1EDC6F, +/**/ 0x89EA4773, 0xBF415DA4, +/**/ 0x37400000, 0x3F415ED2, +/**/ 0x1BA53538, 0x3D3E09E8, +/**/ 0x30CD5A06, 0xBF416DA0, +/**/ 0x0AA00000, 0x3F416ED0, +/**/ 0x4A5B4574, 0xBD251B08, +/**/ 0xD3B20EA8, 0xBF417D9B, +/**/ 0xDBE00000, 0x3F417ECD, +/**/ 0x4241B57B, 0x3D2BE3AD, +/**/ 0x729866D7, 0xBF418D97, +/**/ 0xAB400000, 0x3F418ECB, +/**/ 0xFA22BD16, 0xBD387707, +/**/ 0x0D806412, 0xBF419D93, +/**/ 0x78800000, 0x3F419EC9, +/**/ 0xFFA2FC2F, 0x3D01C6FC, +/**/ 0xA46A07D9, 0xBF41AD8E, +/**/ 0x43C00000, 0x3F41AEC7, +/**/ 0x05F32EE8, 0x3D3E028D, +/**/ 0x375553AB, 0xBF41BD8A, +/**/ 0x0D200000, 0x3F41BEC5, +/**/ 0xC7E46F2B, 0xBD146400, +/**/ 0xC6424907, 0xBF41CD85, +/**/ 0xD4600000, 0x3F41CEC2, +/**/ 0x8DFCE791, 0x3D38E737, +/**/ 0x5130E96B, 0xBF41DD81, +/**/ 0x99C00000, 0x3F41DEC0, +/**/ 0x92F4A6CE, 0xBD1FEF30, +/**/ 0xD8213659, 0xBF41ED7C, +/**/ 0x5D000000, 0x3F41EEBE, +/**/ 0x4AE68315, 0x3D383EF4, +/**/ 0x5B13314D, 0xBF41FD78, +/**/ 0x1E600000, 0x3F41FEBC, +/**/ 0x39A8276A, 0xBD199E1E, +/**/ 0xDA06DBC8, 0xBF420D73, +/**/ 0xDDA00000, 0x3F420EB9, +/**/ 0xE39F6D77, 0x3D3C11BF, +/**/ 0x54FC3749, 0xBF421D6F, +/**/ 0x9B000000, 0x3F421EB7, +/**/ 0xC3A8C440, 0xBCD50D72, +/**/ 0xCBF3454F, 0xBF422D6A, +/**/ 0x56600000, 0x3F422EB5, +/**/ 0x06E59170, 0xBD3B9869, +/**/ 0x3EEC0759, 0xBF423D66, +/**/ 0x0FA00000, 0x3F423EB3, +/**/ 0x86930551, 0x3D248C4B, +/**/ 0xADE67EE6, 0xBF424D61, +/**/ 0xC7000000, 0x3F424EB0, +/**/ 0xB3649FF7, 0xBD2D6F13, +/**/ 0x18E2AD76, 0xBF425D5D, +/**/ 0x7C400000, 0x3F425EAE, +/**/ 0xB496441D, 0x3D396F87, +/**/ 0x7FE09487, 0xBF426D58, +/**/ 0x2FA00000, 0x3F426EAC, +/**/ 0x01961A2F, 0x3D05E2D0, +/**/ 0xE2E03598, 0xBF427D53, +/**/ 0xE1000000, 0x3F427EA9, +/**/ 0x652D1720, 0xBD32D013, +/**/ 0x41E1922A, 0xBF428D4F, +/**/ 0x90400000, 0x3F428EA7, +/**/ 0x15C6A78A, 0x3D38CB3F, +/**/ 0x9CE4ABBA, 0xBF429D4A, +/**/ 0x3DA00000, 0x3F429EA5, +/**/ 0x07F8A52A, 0x3D163D44, +/**/ 0xF3E983C8, 0xBF42AD45, +/**/ 0xE9000000, 0x3F42AEA2, +/**/ 0x1FEC6070, 0xBD2905BC, +/**/ 0x46F01BD4, 0xBF42BD41, +/**/ 0x92600000, 0x3F42BEA0, +/**/ 0x8FE5CB8E, 0xBD3D6A4E, +/**/ 0x95F8755C, 0xBF42CD3C, +/**/ 0x39A00000, 0x3F42CE9E, +/**/ 0x120028B6, 0x3D32D9FF, +/**/ 0xE10291DF, 0xBF42DD37, +/**/ 0xDF000000, 0x3F42DE9B, +/**/ 0x94B2D8A6, 0x3D112C29, +/**/ 0x280E72DD, 0xBF42ED33, +/**/ 0x82600000, 0x3F42EE99, +/**/ 0x0E9DC27F, 0xBD222C5A, +/**/ 0x6B1C19D4, 0xBF42FD2E, +/**/ 0x23C00000, 0x3F42FE97, +/**/ 0xA4C12307, 0xBD3548A7, +/**/ 0xAA2B8844, 0xBF430D29, +/**/ 0xC3000000, 0x3F430E94, +/**/ 0x1B27A40C, 0x3D3FB49A, +/**/ 0xE53CBFAC, 0xBF431D24, +/**/ 0x60600000, 0x3F431E92, +/**/ 0xC65D601D, 0x3D35E297, +/**/ 0x1C4FC18B, 0xBF432D20, +/**/ 0xFBC00000, 0x3F432E8F, +/**/ 0xD4E46CD5, 0x3D2A84A1, +/**/ 0x4F648F60, 0xBF433D1B, +/**/ 0x95200000, 0x3F433E8D, +/**/ 0x526215F8, 0x3D175314, +/**/ 0x7E7B2AAB, 0xBF434D16, +/**/ 0x2C800000, 0x3F434E8B, +/**/ 0x9746A94C, 0xBCD9430B, +/**/ 0xA99394E9, 0xBF435D11, +/**/ 0xC1E00000, 0x3F435E88, +/**/ 0x47EF6144, 0xBD15A88D, +/**/ 0xD0ADCF9B, 0xBF436D0C, +/**/ 0x55400000, 0x3F436E86, +/**/ 0x94614FFB, 0xBD227301, +/**/ 0xF3C9DC3F, 0xBF437D07, +/**/ 0xE6A00000, 0x3F437E83, +/**/ 0x16908831, 0xBD27A44A, +/**/ 0x12E7BC55, 0xBF438D03, +/**/ 0x76000000, 0x3F438E81, +/**/ 0x13DE59AC, 0xBD2A6621, +/**/ 0x2E07715C, 0xBF439CFE, +/**/ 0x03600000, 0x3F439E7F, +/**/ 0x76635000, 0xBD2AB687, +/**/ 0x4528FCD2, 0xBF43ACF9, +/**/ 0x8EC00000, 0x3F43AE7C, +/**/ 0x28F7818F, 0xBD28937E, +/**/ 0x584C6037, 0xBF43BCF4, +/**/ 0x18200000, 0x3F43BE7A, +/**/ 0x17328F27, 0xBD23FB06, +/**/ 0x67719D0A, 0xBF43CCEF, +/**/ 0x9F800000, 0x3F43CE77, +/**/ 0x5AD74747, 0xBD19D640, +/**/ 0x7298B4CA, 0xBF43DCEA, +/**/ 0x24E00000, 0x3F43DE75, +/**/ 0xC5CB9C74, 0xBCFB0E6A, +/**/ 0x79C1A8F6, 0xBF43ECE5, +/**/ 0xA8400000, 0x3F43EE72, +/**/ 0xF21B8682, 0x3D1145E2, +/**/ 0x7CEC7B0D, 0xBF43FCE0, +/**/ 0x29A00000, 0x3F43FE70, +/**/ 0x59543A06, 0x3D27251B, +/**/ 0x7C192C8E, 0xBF440CDB, +/**/ 0xA9000000, 0x3F440E6D, +/**/ 0xAC6250B6, 0x3D341357, +/**/ 0x7747BEF8, 0xBF441CD6, +/**/ 0x26600000, 0x3F441E6B, +/**/ 0x43A510F7, 0x3D3DD4D6, +/**/ 0x6E7833CB, 0xBF442CD1, +/**/ 0xA1E00000, 0x3F442E68, +/**/ 0x05F7D1E1, 0xBD3727F7, +/**/ 0x61AA8C85, 0xBF443CCC, +/**/ 0x1B400000, 0x3F443E66, +/**/ 0x527C9668, 0xBD25C421, +/**/ 0x50DECAA5, 0xBF444CC7, +/**/ 0x92A00000, 0x3F444E63, +/**/ 0x053F70AC, 0x3D053C47, +/**/ 0x3C14EFAB, 0xBF445CC2, +/**/ 0x08000000, 0x3F445E61, +/**/ 0x1E315FBB, 0x3D3175D5, +/**/ 0x234CFD15, 0xBF446CBD, +/**/ 0x7B800000, 0x3F446E5E, +/**/ 0x6A8B33AC, 0xBD3E762C, +/**/ 0x0686F463, 0xBF447CB8, +/**/ 0xECE00000, 0x3F447E5B, +/**/ 0x67AD9900, 0xBD2A36F8, +/**/ 0xE5C2D713, 0xBF448CB2, +/**/ 0x5C400000, 0x3F448E59, +/**/ 0x1E974853, 0x3D161B95, +/**/ 0xC100A6A5, 0xBF449CAD, +/**/ 0xC9A00000, 0x3F449E56, +/**/ 0x8CE22250, 0x3D3971F7, +/**/ 0x98406498, 0xBF44ACA8, +/**/ 0x35200000, 0x3F44AE54, +/**/ 0xDF8A23F8, 0xBD315945, +/**/ 0x6B82126A, 0xBF44BCA3, +/**/ 0x9E800000, 0x3F44BE51, +/**/ 0x1A63D360, 0x3D1498B2, +/**/ 0x3AC5B19B, 0xBF44CC9E, +/**/ 0x05E00000, 0x3F44CE4F, +/**/ 0x4323A054, 0x3D3CF14E, +/**/ 0x060B43AA, 0xBF44DC99, +/**/ 0x6B600000, 0x3F44DE4C, +/**/ 0x4CE35F94, 0xBD23EDC2, +/**/ 0xCD52CA15, 0xBF44EC93, +/**/ 0xCEC00000, 0x3F44EE49, +/**/ 0xCCF1B48E, 0x3D306E9D, +/**/ 0x909C465C, 0xBF44FC8E, +/**/ 0x30400000, 0x3F44FE47, +/**/ 0x5FF9440B, 0xBD33DD35, +/**/ 0x4FE7B9FF, 0xBF450C89, +/**/ 0x8FA00000, 0x3F450E44, +/**/ 0xAA4D276D, 0x3D224D49, +/**/ 0x0B35267A, 0xBF451C84, +/**/ 0xED200000, 0x3F451E41, +/**/ 0x11B557F9, 0xBD3884D4, +/**/ 0xC2848D4F, 0xBF452C7E, +/**/ 0x48800000, 0x3F452E3F, +/**/ 0xB43290C4, 0x3D1C857D, +/**/ 0x75D5EFFC, 0xBF453C79, +/**/ 0xA2000000, 0x3F453E3C, +/**/ 0x2D598D3C, 0xBD37E5C1, +/**/ 0x25294FFF, 0xBF454C74, +/**/ 0xF9600000, 0x3F454E39, +/**/ 0x3FE47B89, 0x3D24CD93, +/**/ 0xD07EAED8, 0xBF455C6E, +/**/ 0x4EE00000, 0x3F455E37, +/**/ 0xAA959122, 0xBD31F800, +/**/ 0x77D60E06, 0xBF456C69, +/**/ 0xA2400000, 0x3F456E34, +/**/ 0x7329AF92, 0x3D32FEDF, +/**/ 0x1B2F6F08, 0xBF457C64, +/**/ 0xF3C00000, 0x3F457E31, +/**/ 0x1C545A6F, 0xBD1ACE5A, +/**/ 0xBA8AD35D, 0xBF458C5E, +/**/ 0x43400000, 0x3F458E2F, +/**/ 0x19F6B9EF, 0xBD3F0E63, +/**/ 0x55E83C84, 0xBF459C59, +/**/ 0x90A00000, 0x3F459E2C, +/**/ 0x73005F6F, 0x3D23DEF2, +/**/ 0xED47ABFB, 0xBF45AC53, +/**/ 0xDC200000, 0x3F45AE29, +/**/ 0x1C295DE7, 0xBD277204, +/**/ 0x80A92343, 0xBF45BC4E, +/**/ 0x25800000, 0x3F45BE27, +/**/ 0x8D869589, 0x3D3FF92A, +/**/ 0x100CA3D9, 0xBF45CC49, +/**/ 0x6D000000, 0x3F45CE24, +/**/ 0x145C5335, 0x3D2A0DFD, +/**/ 0x9B722F3C, 0xBF45DC43, +/**/ 0xB2800000, 0x3F45DE21, +/**/ 0x6A8614B3, 0xBD123A1A, +/**/ 0x22D9C6ED, 0xBF45EC3E, +/**/ 0xF6000000, 0x3F45EE1E, +/**/ 0x63CBC7E7, 0xBD34C665, +/**/ 0xA6436C69, 0xBF45FC38, +/**/ 0x37600000, 0x3F45FE1C, +/**/ 0xAB6C51D7, 0x3D3C6061, +/**/ 0x25AF2130, 0xBF460C33, +/**/ 0x76E00000, 0x3F460E19, +/**/ 0x1EC7F453, 0x3D2DCD9C, +/**/ 0xA11CE6C1, 0xBF461C2D, +/**/ 0xB4600000, 0x3F461E16, +/**/ 0x20C52899, 0x3D066EFA, +/**/ 0x188CBE9A, 0xBF462C28, +/**/ 0xEFE00000, 0x3F462E13, +/**/ 0xEB5FDD5C, 0xBD1FA5AC, +/**/ 0x8BFEAA3B, 0xBF463C22, +/**/ 0x29600000, 0x3F463E11, +/**/ 0xF22FE2BC, 0xBD313E11, +/**/ 0xFB72AB23, 0xBF464C1C, +/**/ 0x60E00000, 0x3F464E0E, +/**/ 0x6710E251, 0xBD392F15, +/**/ 0x66E8C2D0, 0xBF465C17, +/**/ 0x96600000, 0x3F465E0B, +/**/ 0x1EFC78A7, 0xBD3FBB76, +/**/ 0xCE60F2C1, 0xBF466C11, +/**/ 0xC9C00000, 0x3F466E08, +/**/ 0x602C1A84, 0x3D3B1DCB, +/**/ 0x31DB3C76, 0xBF467C0C, +/**/ 0xFB400000, 0x3F467E05, +/**/ 0x9027DA74, 0x3D375DAE, +/**/ 0x9157A16E, 0xBF468C06, +/**/ 0x2AC00000, 0x3F468E03, +/**/ 0xEA560DA0, 0x3D350532, +/**/ 0xECD62326, 0xBF469C00, +/**/ 0x58400000, 0x3F469E00, +/**/ 0xE7B63DE2, 0x3D341557 } }; + +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/urem.h glibc-2.2.3/sysdeps/ieee754/dbl-64/urem.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/urem.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/urem.h Sun Mar 11 23:02:45 2001 @@ -0,0 +1,50 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: urem.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ + +#ifndef UREM_H +#define UREM_H + +#ifdef BIG_ENDI +static const mynumber big = {{0x43380000, 0}}, /* 6755399441055744 */ + t128 = {{0x47f00000, 0}}, /* 2^ 128 */ + tm128 = {{0x37f00000, 0}}, /* 2^-128 */ + ZERO = {{0, 0}}, /* 0.0 */ + nZERO = {{0x80000000, 0}}, /* -0.0 */ + NAN = {{0x7ff80000, 0}}, /* NaN */ + nNAN = {{0xfff80000, 0}}; /* -NaN */ +#else +#ifdef LITTLE_ENDI +static const mynumber big = {{0, 0x43380000}}, /* 6755399441055744 */ + t128 = {{0, 0x47f00000}}, /* 2^ 128 */ + tm128 = {{0, 0x37f00000}}, /* 2^-128 */ + ZERO = {{0, 0}}, /* 0.0 */ + nZERO = {{0, 0x80000000}}, /* -0.0 */ + NAN = {{0, 0x7ff80000}}, /* NaN */ + nNAN = {{0, 0xfff80000}}; /* -NaN */ +#endif +#endif + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/uroot.h glibc-2.2.3/sysdeps/ieee754/dbl-64/uroot.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/uroot.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/uroot.h Sat Apr 7 14:02:38 2001 @@ -0,0 +1,43 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:uroot.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef UROOT_H +#define UROOT_H + +#ifdef BIG_ENDI + static const mynumber +/**/ t512 = {{0x5ff00000, 0x00000000 }}, /* 2^512 */ +/**/ tm256 = {{0x2ff00000, 0x00000000 }}; /* 2^-256 */ + +#else +#ifdef LITTLE_ENDI + static const mynumber +/**/ t512 = {{0x00000000, 0x5ff00000 }}, /* 2^512 */ +/**/ tm256 = {{0x00000000, 0x2ff00000 }}; /* 2^-256 */ +#endif +#endif + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/usncs.h glibc-2.2.3/sysdeps/ieee754/dbl-64/usncs.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/usncs.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/usncs.h Sun Mar 11 21:59:51 2001 @@ -0,0 +1,79 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/************************************************************************/ +/* MODULE_NAME: dosincos.h */ +/* */ +/* */ +/* common data and variables definition for BIG or LITTLE ENDIAN */ +/************************************************************************/ + +#ifndef USNCS_H +#define USNCS_H + +#ifdef BIG_ENDI +static const mynumber + +/**/ NAN = {{0x7ff80000, 0x00000000 }}, /* NaN */ +/**/ s1 = {{0xBFC55555, 0x55555555 }}, /* -0.16666666666666666 */ +/**/ s2 = {{0x3F811111, 0x11110ECE }}, /* 0.0083333333333323288 */ +/**/ s3 = {{0xBF2A01A0, 0x19DB08B8 }}, /* -0.00019841269834414642 */ +/**/ s4 = {{0x3EC71DE2, 0x7B9A7ED9 }}, /* 2.755729806860771e-06 */ +/**/ s5 = {{0xBE5ADDFF, 0xC2FCDF59 }}, /* -2.5022014848318398e-08 */ +/**/ aa = {{0xBFC55580, 0x00000000 }}, /* -0.1666717529296875 */ +/**/ bb = {{0x3ED55555, 0x55556E24 }}, /* 5.0862630208387126e-06 */ +/**/ big = {{0x42c80000, 0x00000000 }}, /* 52776558133248 */ +/**/ hp0 = {{0x3FF921FB, 0x54442D18 }}, /* 1.5707963267948966 */ +/**/ hp1 = {{0x3C91A626, 0x33145C07 }}, /* 6.123233995736766e-17 */ +/**/ mp1 = {{0x3FF921FB, 0x58000000 }}, /* 1.5707963407039642 */ +/**/ mp2 = {{0xBE4DDE97, 0x3C000000 }}, /* -1.3909067564377153e-08 */ +/**/ mp3 = {{0xBC8CB3B3, 0x99D747F2 }}, /* -4.9789962505147994e-17 */ +/**/ pp3 = {{0xBC8CB3B3, 0x98000000 }}, /* -4.9789962314799099e-17 */ +/**/ pp4 = {{0xbacd747f, 0x23e32ed7 }}, /* -1.9034889620193266e-25 */ +/**/ hpinv = {{0x3FE45F30, 0x6DC9C883 }}, /* 0.63661977236758138 */ +/**/ toint = {{0x43380000, 0x00000000 }}; /* 6755399441055744 */ + +#else +#ifdef LITTLE_ENDI +static const mynumber + +/**/ NAN = {{0x00000000, 0x7ff80000 }},/* NaN */ +/**/ s1 = {{0x55555555, 0xBFC55555 }},/* -0.16666666666666666 */ +/**/ s2 = {{0x11110ECE, 0x3F811111 }},/* 0.0083333333333323288 */ +/**/ s3 = {{0x19DB08B8, 0xBF2A01A0 }},/* -0.00019841269834414642 */ +/**/ s4 = {{0x7B9A7ED9, 0x3EC71DE2 }},/* 2.755729806860771e-06 */ +/**/ s5 = {{0xC2FCDF59, 0xBE5ADDFF }},/* -2.5022014848318398e-08 */ +/**/ aa = {{0x00000000, 0xBFC55580 }},/* -0.1666717529296875 */ +/**/ bb = {{0x55556E24, 0x3ED55555 }},/* 5.0862630208387126e-06 */ +/**/ big = {{0x00000000, 0x42c80000 }},/* 52776558133248 */ +/**/ hp0 = {{0x54442D18, 0x3FF921FB }},/* 1.5707963267948966 */ +/**/ hp1 = {{0x33145C07, 0x3C91A626 }},/* 6.123233995736766e-17 */ +/**/ mp1 = {{0x58000000, 0x3FF921FB }},/* 1.5707963407039642 */ +/**/ mp2 = {{0x3C000000, 0xBE4DDE97 }},/* -1.3909067564377153e-08 */ +/**/ mp3 = {{0x99D747F2, 0xBC8CB3B3 }},/* -4.9789962505147994e-17 */ +/**/ pp3 = {{0x98000000, 0xBC8CB3B3 }},/* -4.9789962314799099e-17 */ +/**/ pp4 = {{0x23e32ed7, 0xbacd747f }},/* -1.9034889620193266e-25 */ +/**/ hpinv = {{0x6DC9C883, 0x3FE45F30 }},/* 0.63661977236758138 */ +/**/ toint = {{0x00000000, 0x43380000 }};/* 6755399441055744 */ + + +#endif +#endif + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/utan.h glibc-2.2.3/sysdeps/ieee754/dbl-64/utan.h --- glibc-2.2.2/sysdeps/ieee754/dbl-64/utan.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/utan.h Sun Mar 11 23:11:48 2001 @@ -0,0 +1,279 @@ + +/* + * IBM Accurate Mathematical Library + * Copyright (c) International Business Machines Corp., 2001 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +/******************************************************************/ +/* */ +/* MODULE_NAME:utan.h */ +/* */ +/* common data and variables prototype and definition */ +/******************************************************************/ + +#ifndef UTAN_H +#define UTAN_H + +#ifdef BIG_ENDI + static const number + /* polynomial I */ +/**/ d3 = {{0x3FD55555, 0x55555555} }, /* 0.333... */ +/**/ d5 = {{0x3FC11111, 0x111107C6} }, /* 0.133... */ +/**/ d7 = {{0x3FABA1BA, 0x1CDB8745} }, /* . */ +/**/ d9 = {{0x3F9664ED, 0x49CFC666} }, /* . */ +/**/ d11 = {{0x3F82385A, 0x3CF2E4EA} }, /* . */ + /* polynomial II */ +/**/ a3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ +/**/ aa3 = {{0x3c755555, 0x55555555} }, /* 1/3-a3 */ +/**/ a5 = {{0x3fc11111, 0x11111111} }, /* 2/15 */ +/**/ aa5 = {{0x3c411111, 0x11111111} }, /* 2/15-a5 */ +/**/ a7 = {{0x3faba1ba, 0x1ba1ba1c} }, /* 17/315 */ +/**/ aa7 = {{0xbc479179, 0x17917918} }, /* ()-a7 */ +/**/ a9 = {{0x3f9664f4, 0x882c10fa} }, /* 62/2835 */ +/**/ aa9 = {{0xbc09a528, 0x8b6c44fd} }, /* ()-a9 */ +/**/ a11 = {{0x3f8226e3, 0x55e6c23d} }, /* . */ +/**/ aa11 = {{0xbc2c292b, 0x8f1a2c13} }, /* . */ +/**/ a13 = {{0x3f6d6d3d, 0x0e157de0} }, /* . */ +/**/ aa13 = {{0xbc0280cf, 0xc968d971} }, /* . */ +/**/ a15 = {{0x3f57da36, 0x452b75e3} }, /* . */ +#if 0 +/**/ aa15 = {{0xbbf25789, 0xb285d2ed} }, /* . */ +#endif +/**/ a17 = {{0x3f435582, 0x48036744} }, /* . */ +#if 0 +/**/ aa17 = {{0x3be488d9, 0x563f1f23} }, /* . */ +#endif +/**/ a19 = {{0x3f2f57d7, 0x734d1664} }, /* . */ +#if 0 +/**/ aa19 = {{0x3bb0d55a, 0x913ccb50} }, /* . */ +#endif +/**/ a21 = {{0x3f1967e1, 0x8afcafad} }, /* . */ +#if 0 +/**/ aa21 = {{0xbbbd7614, 0xa42d44e6} }, /* . */ +#endif +/**/ a23 = {{0x3f0497d8, 0xeea25259} }, /* . */ +#if 0 +/**/ aa23 = {{0x3b99f2d0, 0x2e4d2863} }, /* . */ +#endif +/**/ a25 = {{0x3ef0b132, 0xd39a6050} }, /* . */ +#if 0 +/**/ aa25 = {{0x3b93b274, 0xc2c19614} }, /* . */ +#endif +/**/ a27 = {{0x3edb0f72, 0xd3ee24e9} }, /* . */ +#if 0 +/**/ aa27 = {{0x3b61688d, 0xdd595609} }, /* . */ +#endif + /* polynomial III */ +/**/ e0 = {{0x3FD55555, 0x55554DBD} }, /* . */ +/**/ e1 = {{0x3FC11112, 0xE0A6B45F} }, /* . */ + + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x3ff00000, 0x00000000} }, /* 1 */ +/**/ mone = {{0xbff00000, 0x00000000} }, /*-1 */ +/**/ mfftnhf = {{0xc02f0000, 0x00000000} }, /*-15.5 */ +/**/ two8 = {{0x40700000, 0x00000000} }, /* 256 */ + +/**/ g1 = {{0x3e4b096c, 0x00000000} }, /* 1.259e-8 */ +/**/ g2 = {{0x3faf212d, 0x00000000} }, /* 0.0608 */ +/**/ g3 = {{0x3fe92f1a, 0x00000000} }, /* 0.787 */ +/**/ g4 = {{0x40390000, 0x00000000} }, /* 25.0 */ +/**/ g5 = {{0x4197d784, 0x00000000} }, /* 1e8 */ +/**/ gy1 = {{0x3e7ad7f2, 0x9abcaf48} }, /* 1e-7 */ +/**/ gy2 = {{0x3faf212d, 0x00000000} }, /* 0.0608 */ + +/**/ u1 = {{0x3cc8c33a, 0x00000000} }, /* 6.873e-16 */ +/**/ u2 = {{0x3983dc4d, 0x00000000} }, /* 1.224e-31 */ +/**/ u3 = {{0x3c78e14b, 0x00000000} }, /* 2.158e-17 */ +/**/ ua3 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ +/**/ ub3 = {{0x3cc81898, 0x00000000} }, /* 6.688e-16 */ +/**/ u4 = {{0x399856c2, 0x00000000} }, /* 3e-31 */ +/**/ u5 = {{0x3c39d80a, 0x00000000} }, /* 1.401e-18 */ +/**/ u6 = {{0x3c374c5a, 0x00000000} }, /* 1.263e-18 */ +/**/ u7 = {{0x39903beb, 0x00000000} }, /* 2.001e-31 */ +/**/ u8 = {{0x399c56ae, 0x00000000} }, /* 3.493e-31 */ +/**/ u9 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ +/**/ ua9 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ +/**/ ub9 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ +/**/ u10 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ +/**/ ua10 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ +/**/ ub10 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ +/**/ u11 = {{0x39e509b6, 0x00000000} }, /* 8.298e-30 */ +/**/ u12 = {{0x39e509b6, 0x00000000} }, /* 8.298e-30 */ +/**/ u13 = {{0x3c39d80a, 0x00000000} }, /* 1.401e-18 */ +/**/ u14 = {{0x3c374c5a, 0x00000000} }, /* 1.263e-18 */ +/**/ u15 = {{0x3ab5767a, 0x00000000} }, /* 6.935e-26 */ +/**/ u16 = {{0x3ab57744, 0x00000000} }, /* 6.936e-26 */ +/**/ u17 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ +/**/ ua17 = {{0x3bfdb11f, 0x00000000} }, /* 1.006e-19 */ +/**/ ub17 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ +/**/ u18 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ +/**/ ua18 = {{0x3bfdb11f, 0x00000000} }, /* 1.006e-19 */ +/**/ ub18 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ +/**/ u19 = {{0x39a13b61, 0x00000000} }, /* 4.248e-31 */ +/**/ u20 = {{0x39a13b61, 0x00000000} }, /* 4.248e-31 */ +/**/ u21 = {{0x3c3bb9b8, 0x00000000} }, /* 1.503e-18 */ +/**/ u22 = {{0x3c392e08, 0x00000000} }, /* 1.365e-18 */ +/**/ u23 = {{0x3a0ce706, 0x00000000} }, /* 4.560e-29 */ +/**/ u24 = {{0x3a0cff5d, 0x00000000} }, /* 4.575e-29 */ +/**/ u25 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ +/**/ ua25 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ +/**/ ub25 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ +/**/ u26 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ +/**/ ua26 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ +/**/ ub26 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ +/**/ u27 = {{0x3ad421cb, 0x00000000} }, /* 2.602e-25 */ +/**/ u28 = {{0x3ad421cb, 0x00000000} }, /* 2.602e-25 */ + +/**/ mp1 = {{0x3FF921FB, 0x58000000} }, +/**/ mp2 = {{0xBE4DDE97, 0x3C000000} }, +/**/ mp3 = {{0xBC8CB3B3, 0x99D747F2} }, +/**/ pp3 = {{0xBC8CB3B3, 0x98000000} }, +/**/ pp4 = {{0xbacd747f, 0x23e32ed7} }, +/**/ hpinv = {{0x3FE45F30, 0x6DC9C883} }, +/**/ toint = {{0x43380000, 0x00000000} }; + +#else +#ifdef LITTLE_ENDI + + static const number + /* polynomial I */ +/**/ d3 = {{0x55555555, 0x3FD55555} }, /* 0.333... */ +/**/ d5 = {{0x111107C6, 0x3FC11111} }, /* 0.133... */ +/**/ d7 = {{0x1CDB8745, 0x3FABA1BA} }, /* . */ +/**/ d9 = {{0x49CFC666, 0x3F9664ED} }, /* . */ +/**/ d11 = {{0x3CF2E4EA, 0x3F82385A} }, /* . */ + /* polynomial II */ +/**/ a3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ +/**/ aa3 = {{0x55555555, 0x3c755555} }, /* 1/3-a3 */ +/**/ a5 = {{0x11111111, 0x3fc11111} }, /* 2/15 */ +/**/ aa5 = {{0x11111111, 0x3c411111} }, /* 2/15-a5 */ +/**/ a7 = {{0x1ba1ba1c, 0x3faba1ba} }, /* 17/315 */ +/**/ aa7 = {{0x17917918, 0xbc479179} }, /* ()-a7 */ +/**/ a9 = {{0x882c10fa, 0x3f9664f4} }, /* 62/2835 */ +/**/ aa9 = {{0x8b6c44fd, 0xbc09a528} }, /* ()-a9 */ +/**/ a11 = {{0x55e6c23d, 0x3f8226e3} }, /* . */ +/**/ aa11 = {{0x8f1a2c13, 0xbc2c292b} }, /* . */ +/**/ a13 = {{0x0e157de0, 0x3f6d6d3d} }, /* . */ +/**/ aa13 = {{0xc968d971, 0xbc0280cf} }, /* . */ +/**/ a15 = {{0x452b75e3, 0x3f57da36} }, /* . */ +#if 0 +/**/ aa15 = {{0xb285d2ed, 0xbbf25789} }, /* . */ +#endif +/**/ a17 = {{0x48036744, 0x3f435582} }, /* . */ +#if 0 +/**/ aa17 = {{0x563f1f23, 0x3be488d9} }, /* . */ +#endif +/**/ a19 = {{0x734d1664, 0x3f2f57d7} }, /* . */ +#if 0 +/**/ aa19 = {{0x913ccb50, 0x3bb0d55a} }, /* . */ +#endif +/**/ a21 = {{0x8afcafad, 0x3f1967e1} }, /* . */ +#if 0 +/**/ aa21 = {{0xa42d44e6, 0xbbbd7614} }, /* . */ +#endif +/**/ a23 = {{0xeea25259, 0x3f0497d8} }, /* . */ +#if 0 +/**/ aa23 = {{0x2e4d2863, 0x3b99f2d0} }, /* . */ +#endif +/**/ a25 = {{0xd39a6050, 0x3ef0b132} }, /* . */ +#if 0 +/**/ aa25 = {{0xc2c19614, 0x3b93b274} }, /* . */ +#endif +/**/ a27 = {{0xd3ee24e9, 0x3edb0f72} }, /* . */ +#if 0 +/**/ aa27 = {{0xdd595609, 0x3b61688d} }, /* . */ +#endif + /* polynomial III */ +/**/ e0 = {{0x55554DBD, 0x3FD55555} }, /* . */ +/**/ e1 = {{0xE0A6B45F, 0x3FC11112} }, /* . */ + + /* constants */ +/**/ zero = {{0x00000000, 0x00000000} }, /* 0 */ +/**/ one = {{0x00000000, 0x3ff00000} }, /* 1 */ +/**/ mone = {{0x00000000, 0xbff00000} }, /*-1 */ +/**/ mfftnhf = {{0x00000000, 0xc02f0000} }, /*-15.5 */ +/**/ two8 = {{0x00000000, 0x40700000} }, /* 256 */ + +/**/ g1 = {{0x00000000, 0x3e4b096c} }, /* 1.259e-8 */ +/**/ g2 = {{0x00000000, 0x3faf212d} }, /* 0.0608 */ +/**/ g3 = {{0x00000000, 0x3fe92f1a} }, /* 0.787 */ +/**/ g4 = {{0x00000000, 0x40390000} }, /* 25.0 */ +/**/ g5 = {{0x00000000, 0x4197d784} }, /* 1e8 */ +/**/ gy1 = {{0x9abcaf48, 0x3e7ad7f2} }, /* 1e-7 */ +/**/ gy2 = {{0x00000000, 0x3faf212d} }, /* 0.0608 */ + +/**/ u1 = {{0x00000000, 0x3cc8c33a} }, /* 6.873e-16 */ +/**/ u2 = {{0x00000000, 0x3983dc4d} }, /* 1.224e-31 */ +/**/ u3 = {{0x00000000, 0x3c78e14b} }, /* 2.158e-17 */ +/**/ ua3 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ +/**/ ub3 = {{0x00000000, 0x3cc81898} }, /* 6.688e-16 */ +/**/ u4 = {{0x00000000, 0x399856c2} }, /* 3e-31 */ +/**/ u5 = {{0x00000000, 0x3c39d80a} }, /* 1.401e-18 */ +/**/ u6 = {{0x00000000, 0x3c374c5a} }, /* 1.263e-18 */ +/**/ u7 = {{0x00000000, 0x39903beb} }, /* 2.001e-31 */ +/**/ u8 = {{0x00000000, 0x399c56ae} }, /* 3.493e-31 */ +/**/ u9 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ +/**/ ua9 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ +/**/ ub9 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ +/**/ u10 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ +/**/ ua10 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ +/**/ ub10 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ +/**/ u11 = {{0x00000000, 0x39e509b6} }, /* 8.298e-30 */ +/**/ u12 = {{0x00000000, 0x39e509b6} }, /* 8.298e-30 */ +/**/ u13 = {{0x00000000, 0x3c39d80a} }, /* 1.401e-18 */ +/**/ u14 = {{0x00000000, 0x3c374c5a} }, /* 1.263e-18 */ +/**/ u15 = {{0x00000000, 0x3ab5767a} }, /* 6.935e-26 */ +/**/ u16 = {{0x00000000, 0x3ab57744} }, /* 6.936e-26 */ +/**/ u17 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ +/**/ ua17 = {{0x00000000, 0x3bfdb11f} }, /* 1.006e-19 */ +/**/ ub17 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ +/**/ u18 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ +/**/ ua18 = {{0x00000000, 0x3bfdb11f} }, /* 1.006e-19 */ +/**/ ub18 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ +/**/ u19 = {{0x00000000, 0x39a13b61} }, /* 4.248e-31 */ +/**/ u20 = {{0x00000000, 0x39a13b61} }, /* 4.248e-31 */ +/**/ u21 = {{0x00000000, 0x3c3bb9b8} }, /* 1.503e-18 */ +/**/ u22 = {{0x00000000, 0x3c392e08} }, /* 1.365e-18 */ +/**/ u23 = {{0x00000000, 0x3a0ce706} }, /* 4.560e-29 */ +/**/ u24 = {{0x00000000, 0x3a0cff5d} }, /* 4.575e-29 */ +/**/ u25 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ +/**/ ua25 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ +/**/ ub25 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ +/**/ u26 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ +/**/ ua26 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ +/**/ ub26 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ +/**/ u27 = {{0x00000000, 0x3ad421cb} }, /* 2.602e-25 */ +/**/ u28 = {{0x00000000, 0x3ad421cb} }, /* 2.602e-25 */ + +/**/ mp1 = {{0x58000000, 0x3FF921FB} }, +/**/ mp2 = {{0x3C000000, 0xBE4DDE97} }, +/**/ mp3 = {{0x99D747F2, 0xBC8CB3B3} }, +/**/ pp3 = {{0x98000000, 0xBC8CB3B3} }, +/**/ pp4 = {{0x23e32ed7, 0xbacd747f} }, +/**/ hpinv = {{0x6DC9C883, 0x3FE45F30} }, +/**/ toint = {{0x00000000, 0x43380000} }; + +#endif +#endif + + +#define ZERO zero.d +#define ONE one.d +#define MONE mone.d +#define TWO8 two8.d + +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/dbl-64/utan.tbl glibc-2.2.3/sysdeps/ieee754/dbl-64/utan.tbl --- glibc-2.2.2/sysdeps/ieee754/dbl-64/utan.tbl Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/dbl-64/utan.tbl Sun Mar 11 23:17:23 2001 @@ -0,0 +1,1506 @@ +/****************************************************************/ +/* TABLES FOR THE utan() FUNCTION */ +/****************************************************************/ + + +#ifdef BIG_ENDI +static const number + xfg[186][4] = { /* xi,Fi,Gi,FFi, i=16..201 */ +/**/ {{{0x3fb00000, 0x1e519d60} }, +/**/ {{0x3fb00557, 0x96c4e240} }, +/**/ {{0x402ff554, 0x628127b7} }, +/**/ {{0xbb9a1dee, 0x9e355b06} },}, +/**/ {{{0x3fb10000, 0x1b1a7010} }, +/**/ {{0x3fb10668, 0xaab892b7} }, +/**/ {{0x402e12c7, 0xbe3fdf74} }, +/**/ {{0x3ba89234, 0x037da741} },}, +/**/ {{{0x3fb20000, 0x2505e350} }, +/**/ {{0x3fb2079b, 0xff547824} }, +/**/ {{0x402c65c5, 0xde853633} }, +/**/ {{0x3bb7486e, 0xe9614250} },}, +/**/ {{{0x3fb2ffff, 0xfcdc4252} }, +/**/ {{0x3fb308f3, 0x5eb16c68} }, +/**/ {{0x402ae5da, 0xe56be74f} }, +/**/ {{0xbb82c726, 0x91a23034} },}, +/**/ {{{0x3fb3ffff, 0xe3ff849f} }, +/**/ {{0x3fb40a71, 0x154999cc} }, +/**/ {{0x40298c43, 0x046b7352} }, +/**/ {{0x3b9aceaf, 0x3843738f} },}, +/**/ {{{0x3fb4ffff, 0xedc9590f} }, +/**/ {{0x3fb50c17, 0x429bdd80} }, +/**/ {{0x40285384, 0x91b5d674} }, +/**/ {{0xbbc1d02d, 0xb4403d22} },}, +/**/ {{{0x3fb60000, 0x00ee83f7} }, +/**/ {{0x3fb60de7, 0xda80cc21} }, +/**/ {{0x40273724, 0xef21a2a7} }, +/**/ {{0xbb95e53c, 0x72523ffd} },}, +/**/ {{{0x3fb6ffff, 0xeb05ea41} }, +/**/ {{0x3fb70fe4, 0xb8c51bea} }, +/**/ {{0x40263370, 0xfae562ff} }, +/**/ {{0xbb99ad0e, 0x8ffe0626} },}, +/**/ {{{0x3fb7ffff, 0xdc0515f7} }, +/**/ {{0x3fb81210, 0x1db54498} }, +/**/ {{0x40254553, 0x0e7eab5c} }, +/**/ {{0xbb914c87, 0xd62ed686} },}, +/**/ {{{0x3fb8ffff, 0xe384d7ab} }, +/**/ {{0x3fb9146c, 0x2a8d3727} }, +/**/ {{0x40246a33, 0xfd57f3fd} }, +/**/ {{0xbbbbda8d, 0x5381e06d} },}, +/**/ {{{0x3fb9ffff, 0xe4832347} }, +/**/ {{0x3fba16fa, 0xd50e1050} }, +/**/ {{0x40239fe2, 0xc5537a96} }, +/**/ {{0x3bc7f695, 0xc111eabb} },}, +/**/ {{{0x3fbb0000, 0x274540e3} }, +/**/ {{0x3fbb19be, 0x7ae68517} }, +/**/ {{0x4022e481, 0x3637e946} }, +/**/ {{0x3bc307f8, 0x8dbd9d93} },}, +/**/ {{{0x3fbbffff, 0xfebf2e9b} }, +/**/ {{0x3fbc1cb8, 0x8369cd19} }, +/**/ {{0x40223676, 0x17aef223} }, +/**/ {{0x3bc50038, 0x424a9cf3} },}, +/**/ {{{0x3fbd0000, 0x23529045} }, +/**/ {{0x3fbd1feb, 0xc11d7ef7} }, +/**/ {{0x4021945f, 0xb8e43d4e} }, +/**/ {{0x3b812007, 0x52a6f224} },}, +/**/ {{{0x3fbdffff, 0xd872a829} }, +/**/ {{0x3fbe2359, 0x8ee4d6b7} }, +/**/ {{0x4020fd0c, 0x76195d5f} }, +/**/ {{0xbbb4d9ab, 0x85fdca85} },}, +/**/ {{{0x3fbeffff, 0xff323b84} }, +/**/ {{0x3fbf2704, 0xec9073e5} }, +/**/ {{0x40206f71, 0x3020200f} }, +/**/ {{0x3bb77aa2, 0x12836992} },}, +/**/ {{{0x3fc00000, 0x0ce79195} }, +/**/ {{0x3fc01577, 0xbc30cc61} }, +/**/ {{0x401fd549, 0xd6564a88} }, +/**/ {{0xbbc8926f, 0x965c0ad0} },}, +/**/ {{{0x3fc07fff, 0xee40e918} }, +/**/ {{0x3fc0978d, 0x8279ac01} }, +/**/ {{0x401edbb5, 0x9294bc03} }, +/**/ {{0xbb80a533, 0x4aae45d6} },}, +/**/ {{{0x3fc10000, 0x0cc091fd} }, +/**/ {{0x3fc119c5, 0x44dfb2f7} }, +/**/ {{0x401df0bb, 0x067d8e18} }, +/**/ {{0xbbcc2c18, 0x4ff642a4} },}, +/**/ {{{0x3fc18000, 0x0d9936a1} }, +/**/ {{0x3fc19c1f, 0xb9085a4b} }, +/**/ {{0x401d131a, 0x71ce3629} }, +/**/ {{0xbbc36553, 0x0669355b} },}, +/**/ {{{0x3fc1ffff, 0xed5f3188} }, +/**/ {{0x3fc21e9d, 0xee74bf2d} }, +/**/ {{0x401c41b6, 0xff0cd655} }, +/**/ {{0x3b8867f5, 0x478ecfc5} },}, +/**/ {{{0x3fc28000, 0x05f06a51} }, +/**/ {{0x3fc2a141, 0x550b313f} }, +/**/ {{0x401b7b92, 0x1702e6d2} }, +/**/ {{0xbbadab51, 0x380131fe} },}, +/**/ {{{0x3fc2ffff, 0xfe3d339e} }, +/**/ {{0x3fc3240a, 0xa75f76df} }, +/**/ {{0x401abfc8, 0xfcb6409d} }, +/**/ {{0x3bc60bcf, 0x0d291d83} },}, +/**/ {{{0x3fc37fff, 0xed888d6f} }, +/**/ {{0x3fc3a6fb, 0x13cc5db7} }, +/**/ {{0x401a0d8f, 0x8ed5320d} }, +/**/ {{0x3bb8a48e, 0x4eef03ab} },}, +/**/ {{{0x3fc40000, 0x02ca050d} }, +/**/ {{0x3fc42a13, 0xe25776bb} }, +/**/ {{0x4019642d, 0xfa84c2bc} }, +/**/ {{0xbbd0bd5d, 0xcc56516f} },}, +/**/ {{{0x3fc47fff, 0xf2531f5c} }, +/**/ {{0x3fc4ad55, 0xdeb73404} }, +/**/ {{0x4018c2fe, 0xf86e9035} }, +/**/ {{0x3b9cffe7, 0x5aa287c8} },}, +/**/ {{{0x3fc50000, 0x13774992} }, +/**/ {{0x3fc530c2, 0x7d0ee307} }, +/**/ {{0x4018296c, 0x370caf35} }, +/**/ {{0xbbcf75d1, 0xf91d6532} },}, +/**/ {{{0x3fc57fff, 0xedddcb2d} }, +/**/ {{0x3fc5b45a, 0x5db4347d} }, +/**/ {{0x401796ee, 0x52190c0e} }, +/**/ {{0x3b88a25f, 0x17d5d076} },}, +/**/ {{{0x3fc5ffff, 0xf41949a0} }, +/**/ {{0x3fc6381f, 0x13bf986a} }, +/**/ {{0x40170b09, 0x2d2255fd} }, +/**/ {{0xbb9bfb23, 0xb1bcd5e7} },}, +/**/ {{{0x3fc67fff, 0xf834d3a1} }, +/**/ {{0x3fc6bc11, 0x8ec85952} }, +/**/ {{0x4016854c, 0x62cf2268} }, +/**/ {{0x3b9ee53b, 0x82e39e04} },}, +/**/ {{{0x3fc6ffff, 0xfd9106ea} }, +/**/ {{0x3fc74032, 0xf298f6f7} }, +/**/ {{0x40160551, 0x1f4f84a9} }, +/**/ {{0xbbb59c4a, 0x112634b8} },}, +/**/ {{{0x3fc78000, 0x0f649a4f} }, +/**/ {{0x3fc7c484, 0x6ca53abc} }, +/**/ {{0x40158ab9, 0x4809d175} }, +/**/ {{0x3bc91c75, 0x73d3cd2e} },}, +/**/ {{{0x3fc7ffff, 0xef06bbd8} }, +/**/ {{0x3fc84906, 0xdf7d76ad} }, +/**/ {{0x4015152e, 0xdd2b30a6} }, +/**/ {{0xbbbfa2da, 0x084c3eef} },}, +/**/ {{{0x3fc88000, 0x021c6334} }, +/**/ {{0x3fc8cdbb, 0xd965f986} }, +/**/ {{0x4014a462, 0x51b74296} }, +/**/ {{0xbb9ec02e, 0x74dcfe0b} },}, +/**/ {{{0x3fc8ffff, 0xf38d0756} }, +/**/ {{0x3fc952a4, 0x28e173c7} }, +/**/ {{0x4014380b, 0x17b59ebd} }, +/**/ {{0xbbcd0f1c, 0xb77589f0} },}, +/**/ {{{0x3fc98000, 0x104efca1} }, +/**/ {{0x3fc9d7c1, 0x4644d23c} }, +/**/ {{0x4013cfe5, 0xcb1eabd5} }, +/**/ {{0xbbd5d6f7, 0xea188d9e} },}, +/**/ {{{0x3fca0000, 0x09417b30} }, +/**/ {{0x3fca5d14, 0x096d76aa} }, +/**/ {{0x40136bb4, 0xb3723db0} }, +/**/ {{0x3bbe3e0d, 0xfbf3979c} },}, +/**/ {{{0x3fca7fff, 0xeb1c23ec} }, +/**/ {{0x3fcae29d, 0xab60288d} }, +/**/ {{0x40130b3e, 0x783071d7} }, +/**/ {{0xbbc7dd82, 0x3d5384bf} },}, +/**/ {{{0x3fcaffff, 0xfb171c13} }, +/**/ {{0x3fcb685f, 0xa221a96b} }, +/**/ {{0x4012ae4d, 0xd8c0747d} }, +/**/ {{0x3bd4644b, 0xd5554972} },}, +/**/ {{{0x3fcb8000, 0x0aba44be} }, +/**/ {{0x3fcbee5a, 0xecdf241f} }, +/**/ {{0x401254b1, 0xc6fad63b} }, +/**/ {{0x3ba41916, 0xd092b85a} },}, +/**/ {{{0x3fcc0000, 0x113d2a3e} }, +/**/ {{0x3fcc7490, 0xb3e92543} }, +/**/ {{0x4011fe3c, 0x9a62c035} }, +/**/ {{0xbba3cc39, 0x41a03739} },}, +/**/ {{{0x3fcc7fff, 0xf49e00ce} }, +/**/ {{0x3fccfb02, 0x0f59eab0} }, +/**/ {{0x4011aac3, 0xe956a631} }, +/**/ {{0xbbb7a383, 0xbfa8cb5b} },}, +/**/ {{{0x3fcd0000, 0x05f611ab} }, +/**/ {{0x3fcd81b0, 0x89e6844e} }, +/**/ {{0x40115a1f, 0xf391268d} }, +/**/ {{0x3bd39b5c, 0xb2dc91f3} },}, +/**/ {{{0x3fcd8000, 0x14764ceb} }, +/**/ {{0x3fce089d, 0x27debf0d} }, +/**/ {{0x40110c2b, 0xfbc84740} }, +/**/ {{0x3bc14d4d, 0x84712510} },}, +/**/ {{{0x3fce0000, 0x14bcea76} }, +/**/ {{0x3fce8fc9, 0x16dbc820} }, +/**/ {{0x4010c0c5, 0xa00ca48e} }, +/**/ {{0xbbd33788, 0x640f1b9e} },}, +/**/ {{{0x3fce7fff, 0xfd7995bd} }, +/**/ {{0x3fcf1735, 0x88b50424} }, +/**/ {{0x401077cc, 0xbe02169a} }, +/**/ {{0xbbb61fee, 0x221fdf77} },}, +/**/ {{{0x3fcf0000, 0x0cc35436} }, +/**/ {{0x3fcf9ee3, 0xfd21a40b} }, +/**/ {{0x40103123, 0x1ee7ffe8} }, +/**/ {{0x3bd427e3, 0xc79ff5c1} },}, +/**/ {{{0x3fcf8000, 0x01d1da33} }, +/**/ {{0x3fd0136a, 0xb7dbe15c} }, +/**/ {{0x400fd959, 0x77d559e5} }, +/**/ {{0x3bb0c6a1, 0xd67948d7} },}, +/**/ {{{0x3fd00000, 0x060c13b2} }, +/**/ {{0x3fd05785, 0xaaad4f18} }, +/**/ {{0x400f549e, 0x2675d182} }, +/**/ {{0xbbc15208, 0x18f0dd10} },}, +/**/ {{{0x3fd04000, 0x03885492} }, +/**/ {{0x3fd09bc3, 0x660542d7} }, +/**/ {{0x400ed3e2, 0xdf3f5fec} }, +/**/ {{0xbbd95657, 0xb883ae62} },}, +/**/ {{{0x3fd08000, 0x052f5a13} }, +/**/ {{0x3fd0e024, 0x9a195045} }, +/**/ {{0x400e56f8, 0xfa68f2c8} }, +/**/ {{0x3bded7ba, 0x5a543e8e} },}, +/**/ {{{0x3fd0c000, 0x02ba1af5} }, +/**/ {{0x3fd124a9, 0xe2e7f24b} }, +/**/ {{0x400dddb4, 0xbffe633f} }, +/**/ {{0xbbdcba86, 0x0c60278f} },}, +/**/ {{{0x3fd0ffff, 0xf76642c1} }, +/**/ {{0x3fd16953, 0xe162ffe6} }, +/**/ {{0x400d67ed, 0x0311d5d5} }, +/**/ {{0x3b7b1f4a, 0xe40c5f9e} },}, +/**/ {{{0x3fd14000, 0x033602f0} }, +/**/ {{0x3fd1ae23, 0x5f49508e} }, +/**/ {{0x400cf57a, 0xb8708266} }, +/**/ {{0xbbd6a6c2, 0x8620f301} },}, +/**/ {{{0x3fd17fff, 0xfefd1a13} }, +/**/ {{0x3fd1f318, 0xdb2a9ba1} }, +/**/ {{0x400c8639, 0x8d11009e} }, +/**/ {{0x3bd3a9c6, 0x69b21d3b} },}, +/**/ {{{0x3fd1bfff, 0xf718365d} }, +/**/ {{0x3fd23835, 0x0c41e3ac} }, +/**/ {{0x400c1a06, 0xe02be47c} }, +/**/ {{0x3bdb961a, 0x129e8cd1} },}, +/**/ {{{0x3fd1ffff, 0xff001e00} }, +/**/ {{0x3fd27d78, 0xb2f6395e} }, +/**/ {{0x400bb0c1, 0xf2fe9a85} }, +/**/ {{0x3be074a9, 0xe68fd7d8} },}, +/**/ {{{0x3fd23fff, 0xfe425a6a} }, +/**/ {{0x3fd2c2e4, 0x618faabe} }, +/**/ {{0x400b4a4c, 0x190b18df} }, +/**/ {{0xbbdf0d1f, 0xf615aad1} },}, +/**/ {{{0x3fd28000, 0x059ec1db} }, +/**/ {{0x3fd30878, 0xd8583884} }, +/**/ {{0x400ae688, 0x0cd82bc2} }, +/**/ {{0xbbd563c3, 0x141c1f8d} },}, +/**/ {{{0x3fd2c000, 0x000dd081} }, +/**/ {{0x3fd34e36, 0xaffdb6d8} }, +/**/ {{0x400a855a, 0x5270fc15} }, +/**/ {{0xbbc6d88d, 0x9f2cdafd} },}, +/**/ {{{0x3fd2ffff, 0xfc1dcd2b} }, +/**/ {{0x3fd3941e, 0xa95875bc} }, +/**/ {{0x400a26a8, 0xaa9502b6} }, +/**/ {{0xbbe13cad, 0x8389b15c} },}, +/**/ {{{0x3fd33fff, 0xf6c0d4a0} }, +/**/ {{0x3fd3da31, 0x739845f5} }, +/**/ {{0x4009ca5a, 0x4d2573a0} }, +/**/ {{0xbbc71636, 0xacaee379} },}, +/**/ {{{0x3fd38000, 0x06b16793} }, +/**/ {{0x3fd4206f, 0xdbc088f0} }, +/**/ {{0x40097057, 0x9344e33a} }, +/**/ {{0xbbc2c052, 0x1d7a4f81} },}, +/**/ {{{0x3fd3c000, 0x07358fa3} }, +/**/ {{0x3fd466da, 0x6f23311d} }, +/**/ {{0x4009188a, 0x5aa612ea} }, +/**/ {{0x3b8653a5, 0x685e8edc} },}, +/**/ {{{0x3fd3ffff, 0xfc3b18cf} }, +/**/ {{0x3fd4ad71, 0xe9282e6b} }, +/**/ {{0x4008c2dd, 0x641e643d} }, +/**/ {{0x3b95f0ef, 0x3f567c64} },}, +/**/ {{{0x3fd44000, 0x000dd2a8} }, +/**/ {{0x3fd4f437, 0x1fa3f2d1} }, +/**/ {{0x40086f3c, 0x6072f821} }, +/**/ {{0x3bb68efa, 0x95ff68b5} },}, +/**/ {{{0x3fd47fff, 0xfbb43713} }, +/**/ {{0x3fd53b2a, 0xb3ac333c} }, +/**/ {{0x40081d94, 0x3da56692} }, +/**/ {{0xbbbf4d7f, 0x2985fd3f} },}, +/**/ {{{0x3fd4bfff, 0xfb113bf4} }, +/**/ {{0x3fd5824d, 0x6e8ed9c2} }, +/**/ {{0x4007cdd2, 0xa8add00f} }, +/**/ {{0x3bcf478a, 0x1c9b3657} },}, +/**/ {{{0x3fd4ffff, 0xf7f087c9} }, +/**/ {{0x3fd5c9a0, 0x07446496} }, +/**/ {{0x40077fe6, 0x444588eb} }, +/**/ {{0xbbc177dc, 0xa4eabb0c} },}, +/**/ {{{0x3fd54000, 0x088b3814} }, +/**/ {{0x3fd61123, 0x564125f9} }, +/**/ {{0x400733be, 0x6281a765} }, +/**/ {{0xbbc2c52c, 0xf57051c4} },}, +/**/ {{{0x3fd57fff, 0xf7d55966} }, +/**/ {{0x3fd658d7, 0xe194a5d5} }, +/**/ {{0x4006e94b, 0x73b47d1f} }, +/**/ {{0x3bda2fcf, 0xf9996dc6} },}, +/**/ {{{0x3fd5c000, 0x08bf2490} }, +/**/ {{0x3fd6a0be, 0xb775b28d} }, +/**/ {{0x4006a07e, 0x15b6ec28} }, +/**/ {{0xbbe0ca90, 0xaa5285b8} },}, +/**/ {{{0x3fd60000, 0x09fa853f} }, +/**/ {{0x3fd6e8d8, 0x65a66cfd} }, +/**/ {{0x40065948, 0x1c701269} }, +/**/ {{0x3bd9ea95, 0x8591e13a} },}, +/**/ {{{0x3fd64000, 0x07595fca} }, +/**/ {{0x3fd73125, 0xc0556a7c} }, +/**/ {{0x4006139b, 0xbaae9d02} }, +/**/ {{0x3bd88aff, 0x40152b83} },}, +/**/ {{{0x3fd68000, 0x031687da} }, +/**/ {{0x3fd779a7, 0x92e2cfd0} }, +/**/ {{0x4005cf6b, 0xcae0882b} }, +/**/ {{0xbbd8a4a2, 0x9f439451} },}, +/**/ {{{0x3fd6bfff, 0xf5c8cfe2} }, +/**/ {{0x3fd7c25e, 0x9fb452ed} }, +/**/ {{0x40058cab, 0xc561f1cd} }, +/**/ {{0xbbe371a6, 0xf6a37d74} },}, +/**/ {{{0x3fd6ffff, 0xf81df231} }, +/**/ {{0x3fd80b4b, 0xcfb4dab5} }, +/**/ {{0x40054b4f, 0x8d3ca5d3} }, +/**/ {{0x3bcb4686, 0x679dc99f} },}, +/**/ {{{0x3fd73fff, 0xfa71385e} }, +/**/ {{0x3fd8546f, 0xe007a9b6} }, +/**/ {{0x40050b4b, 0xb3b22176} }, +/**/ {{0xbbcd1540, 0xa5c73477} },}, +/**/ {{{0x3fd78000, 0x024a9c2b} }, +/**/ {{0x3fd89dcb, 0xa7fcf5cf} }, +/**/ {{0x4004cc95, 0x3159cbe1} }, +/**/ {{0xbbdc25ea, 0xd58a6ad0} },}, +/**/ {{{0x3fd7c000, 0x02eb62b8} }, +/**/ {{0x3fd8e75f, 0xec0ba5cf} }, +/**/ {{0x40048f21, 0x8731eeea} }, +/**/ {{0xbbc1cb73, 0xcc1adafb} },}, +/**/ {{{0x3fd80000, 0x054a52d1} }, +/**/ {{0x3fd9312d, 0x8bb822e9} }, +/**/ {{0x400452e6, 0x9170a729} }, +/**/ {{0xbbd8bb17, 0xeac002ee} },}, +/**/ {{{0x3fd83fff, 0xf93a00a3} }, +/**/ {{0x3fd97b35, 0x4bb9ad2a} }, +/**/ {{0x400417da, 0xae924e7f} }, +/**/ {{0x3bd4b800, 0x9a378cc7} },}, +/**/ {{{0x3fd87fff, 0xfbdc91c1} }, +/**/ {{0x3fd9c578, 0x2771b601} }, +/**/ {{0x4003ddf4, 0x78855799} }, +/**/ {{0x3bd9077d, 0xa00445d9} },}, +/**/ {{{0x3fd8bfff, 0xf6d215e6} }, +/**/ {{0x3fda0ff6, 0xe0ea4a0b} }, +/**/ {{0x4003a52b, 0x189a0989} }, +/**/ {{0xbbda6831, 0x89c0613d} },}, +/**/ {{{0x3fd90000, 0x02f734ef} }, +/**/ {{0x3fda5ab2, 0x736bf579} }, +/**/ {{0x40036d75, 0xe9244ca6} }, +/**/ {{0x3be3a6d8, 0x4b722377} },}, +/**/ {{{0x3fd94000, 0x04eef8b4} }, +/**/ {{0x3fdaa5ab, 0x9fb6e3d0} }, +/**/ {{0x400336cc, 0xc9089cb7} }, +/**/ {{0x3b9f6963, 0x22cc00bb} },}, +/**/ {{{0x3fd98000, 0x041ec76a} }, +/**/ {{0x3fdaf0e3, 0x5176c7e4} }, +/**/ {{0x40030127, 0xcb0b9506} }, +/**/ {{0x3bb1ffdb, 0x5385a849} },}, +/**/ {{{0x3fd9c000, 0x08044e47} }, +/**/ {{0x3fdb3c5a, 0x77071224} }, +/**/ {{0x4002cc7f, 0x50d75ec7} }, +/**/ {{0xbbb0fade, 0x78effc8a} },}, +/**/ {{{0x3fda0000, 0x01f8235b} }, +/**/ {{0x3fdb8811, 0xe725782e} }, +/**/ {{0x400298cc, 0x18fbfb37} }, +/**/ {{0xbbe55ed3, 0x3b50e71b} },}, +/**/ {{{0x3fda3fff, 0xfb8c6f08} }, +/**/ {{0x3fdbd40a, 0x97b086f3} }, +/**/ {{0x40026607, 0x154de04b} }, +/**/ {{0xbbdec65e, 0x455faae3} },}, +/**/ {{{0x3fda7fff, 0xfb3d63e1} }, +/**/ {{0x3fdc2045, 0x7d9a3b8a} }, +/**/ {{0x40023429, 0x7e60bfbb} }, +/**/ {{0x3be3001c, 0x154ebd33} },}, +/**/ {{{0x3fdabfff, 0xf5f45c48} }, +/**/ {{0x3fdc6cc3, 0x7b8d45e6} }, +/**/ {{0x4002032c, 0xdb1ace69} }, +/**/ {{0xbbe5ebf8, 0x3ed33616} },}, +/**/ {{{0x3fdb0000, 0x0508b34c} }, +/**/ {{0x3fdcb985, 0xa27e8d37} }, +/**/ {{0x4001d30a, 0xd4459a2b} }, +/**/ {{0xbbd01432, 0xae61e2d1} },}, +/**/ {{{0x3fdb4000, 0x0a84710c} }, +/**/ {{0x3fdd068c, 0xc3e50155} }, +/**/ {{0x4001a3bd, 0x775034dd} }, +/**/ {{0xbbe80b1e, 0x58e0e228} },}, +/**/ {{{0x3fdb7fff, 0xf692e9d8} }, +/**/ {{0x3fdd53d9, 0xc49d6627} }, +/**/ {{0x4001753e, 0xfe18066a} }, +/**/ {{0xbbb004c8, 0xf760d33e} },}, +/**/ {{{0x3fdbc000, 0x0280f14d} }, +/**/ {{0x3fdda16d, 0xe4e81013} }, +/**/ {{0x40014789, 0xa38ea052} }, +/**/ {{0x3be848bc, 0x27c9c4ea} },}, +/**/ {{{0x3fdc0000, 0x001121d1} }, +/**/ {{0x3fddef49, 0xeac018f0} }, +/**/ {{0x40011a98, 0x20b8be0c} }, +/**/ {{0xbbe1527e, 0xd0d6010e} },}, +/**/ {{{0x3fdc3fff, 0xfef662aa} }, +/**/ {{0x3fde3d6e, 0xea0c7070} }, +/**/ {{0x4000ee65, 0x32f46ccd} }, +/**/ {{0x3be8d241, 0x189a000d} },}, +/**/ {{{0x3fdc8000, 0x09845818} }, +/**/ {{0x3fde8bdd, 0xf36a8b1b} }, +/**/ {{0x4000c2eb, 0xcac73476} }, +/**/ {{0x3bd221f7, 0x12bed284} },}, +/**/ {{{0x3fdcbfff, 0xfb0493bf} }, +/**/ {{0x3fdeda97, 0xe0c60d10} }, +/**/ {{0x40009827, 0x251c7836} }, +/**/ {{0xbbe0bd54, 0x6eec41b7} },}, +/**/ {{{0x3fdcffff, 0xfd52961f} }, +/**/ {{0x3fdf299d, 0xefb3e44b} }, +/**/ {{0x40006e12, 0x74e459f5} }, +/**/ {{0xbbd93f77, 0xe969c82f} },}, +/**/ {{{0x3fdd3fff, 0xfe2319a4} }, +/**/ {{0x3fdf78f1, 0x17139490} }, +/**/ {{0x400044a9, 0x3e737e94} }, +/**/ {{0xbb91e7cc, 0x49594b7a} },}, +/**/ {{{0x3fdd7fff, 0xfa4de596} }, +/**/ {{0x3fdfc892, 0x638f49e8} }, +/**/ {{0x40001be7, 0x231057a5} }, +/**/ {{0x3bd482b0, 0xf5af9f5f} },}, +/**/ {{{0x3fddbfff, 0xfe729a69} }, +/**/ {{0x3fe00c41, 0x7c6ab019} }, +/**/ {{0x3fffe78f, 0xbf612660} }, +/**/ {{0x3bea5cda, 0x00da681e} },}, +/**/ {{{0x3fde0000, 0x09d66802} }, +/**/ {{0x3fe03461, 0xf6b883cf} }, +/**/ {{0x3fff988e, 0xbc05a87c} }, +/**/ {{0xbbe06c33, 0xf2372669} },}, +/**/ {{{0x3fde3fff, 0xfb211657} }, +/**/ {{0x3fe05cab, 0x191db8e8} }, +/**/ {{0x3fff4ac3, 0x7bcfe6be} }, +/**/ {{0xbbd5d51f, 0x5ed8d35b} },}, +/**/ {{{0x3fde8000, 0x0a3f068a} }, +/**/ {{0x3fe0851d, 0x95fb54f0} }, +/**/ {{0x3ffefe26, 0x144ca408} }, +/**/ {{0xbbc7c894, 0xa2c169c5} },}, +/**/ {{{0x3fdec000, 0x01adb060} }, +/**/ {{0x3fe0adb9, 0xdc7b54f9} }, +/**/ {{0x3ffeb2af, 0x5ebe52a7} }, +/**/ {{0x3bd4e740, 0x312c5ffd} },}, +/**/ {{{0x3fdeffff, 0xff5c0d01} }, +/**/ {{0x3fe0d680, 0x92550a8d} }, +/**/ {{0x3ffe6858, 0x0d71fdf0} }, +/**/ {{0x3bddd8a6, 0x96b35499} },}, +/**/ {{{0x3fdf3fff, 0xf93d5fcc} }, +/**/ {{0x3fe0ff72, 0x45cb4374} }, +/**/ {{0x3ffe1f19, 0x3cce5040} }, +/**/ {{0xbbc9f0ec, 0x7c1efab4} },}, +/**/ {{{0x3fdf7fff, 0xfa0dd18f} }, +/**/ {{0x3fe1288f, 0x944dd508} }, +/**/ {{0x3ffdd6ec, 0x298b874d} }, +/**/ {{0x3bea6ebd, 0x9642a0a6} },}, +/**/ {{{0x3fdfbfff, 0xfd3a9f1a} }, +/**/ {{0x3fe151d9, 0x13750f3e} }, +/**/ {{0x3ffd8fca, 0x5806a27e} }, +/**/ {{0x3bda2a03, 0xfc65ac7a} },}, +/**/ {{{0x3fdfffff, 0xfc481400} }, +/**/ {{0x3fe17b4f, 0x598944ca} }, +/**/ {{0x3ffd49ad, 0x82532170} }, +/**/ {{0x3bc4412e, 0x3d236dc3} },}, +/**/ {{{0x3fe01fff, 0xff53786c} }, +/**/ {{0x3fe1a4f3, 0x07d83d47} }, +/**/ {{0x3ffd048f, 0x851bffeb} }, +/**/ {{0x3bd1589d, 0x29f81b14} },}, +/**/ {{{0x3fe03fff, 0xfee301b7} }, +/**/ {{0x3fe1cec4, 0xb8a6a382} }, +/**/ {{0x3ffcc06a, 0x7c519db6} }, +/**/ {{0x3bd370e6, 0x5b24d6b2} },}, +/**/ {{{0x3fe06000, 0x006e36bf} }, +/**/ {{0x3fe1f8c5, 0x114eb8be} }, +/**/ {{0x3ffc7d38, 0xa34d6786} }, +/**/ {{0xbbea92de, 0x4b98c1d4} },}, +/**/ {{{0x3fe07fff, 0xfd60aa43} }, +/**/ {{0x3fe222f4, 0xabeccecb} }, +/**/ {{0x3ffc3af4, 0x77342ac4} }, +/**/ {{0xbbdd47f6, 0x03a5c2c2} },}, +/**/ {{{0x3fe0a000, 0x037762e8} }, +/**/ {{0x3fe24d54, 0x3f99efe8} }, +/**/ {{0x3ffbf998, 0x75f54fab} }, +/**/ {{0x3bedf7f4, 0x15771a46} },}, +/**/ {{{0x3fe0bfff, 0xff1c6921} }, +/**/ {{0x3fe277e4, 0x598e35d0} }, +/**/ {{0x3ffbb91f, 0x8addd186} }, +/**/ {{0x3be0f16c, 0x5e0e5a73} },}, +/**/ {{{0x3fe0dfff, 0xff07154b} }, +/**/ {{0x3fe2a2a5, 0xb6bc3986} }, +/**/ {{0x3ffb7984, 0x8301646d} }, +/**/ {{0xbbf02dd0, 0xbbaa5310} },}, +/**/ {{{0x3fe10000, 0x02fcdda4} }, +/**/ {{0x3fe2cd99, 0x02a59f1e} }, +/**/ {{0x3ffb3ac2, 0x705219bf} }, +/**/ {{0xbbe59357, 0x112fa616} },}, +/**/ {{{0x3fe12000, 0x01ce1140} }, +/**/ {{0x3fe2f8be, 0xdf0a67c2} }, +/**/ {{0x3ffafcd4, 0x9ab8ae2a} }, +/**/ {{0x3be2c542, 0x9303f346} },}, +/**/ {{{0x3fe14000, 0x04d0f355} }, +/**/ {{0x3fe32418, 0x08fcc7bf} }, +/**/ {{0x3ffabfb6, 0x497b9a36} }, +/**/ {{0x3bebc044, 0xb5a59234} },}, +/**/ {{{0x3fe16000, 0x00fb0c8a} }, +/**/ {{0x3fe34fa5, 0x2471618b} }, +/**/ {{0x3ffa8363, 0x0d26d117} }, +/**/ {{0xbbdbfbb2, 0x3f7bb7c9} },}, +/**/ {{{0x3fe18000, 0x026f10b3} }, +/**/ {{0x3fe37b66, 0xf7579056} }, +/**/ {{0x3ffa47d6, 0x6b4cf4b1} }, +/**/ {{0x3bf0f6b4, 0xaf0b5de9} },}, +/**/ {{{0x3fe19fff, 0xfd0978f8} }, +/**/ {{0x3fe3a75e, 0x290cc78c} }, +/**/ {{0x3ffa0d0c, 0x36c21315} }, +/**/ {{0x3beb2129, 0xa296b262} },}, +/**/ {{{0x3fe1bfff, 0xfd94840b} }, +/**/ {{0x3fe3d38b, 0x85b4e4a4} }, +/**/ {{0x3ff9d300, 0x32f2ecef} }, +/**/ {{0xbbdbab1a, 0xb9bb7d74} },}, +/**/ {{{0x3fe1dfff, 0xfbda1ea1} }, +/**/ {{0x3fe3ffef, 0xbf3cee2f} }, +/**/ {{0x3ff999ae, 0x6770fed8} }, +/**/ {{0x3bda0bdc, 0xb4ace9a4} },}, +/**/ {{{0x3fe1ffff, 0xfc989533} }, +/**/ {{0x3fe42c8b, 0x9c27900c} }, +/**/ {{0x3ff96112, 0xe0d9f1ac} }, +/**/ {{0xbbee19eb, 0x2fa2d81a} },}, +/**/ {{{0x3fe22000, 0x012b8d26} }, +/**/ {{0x3fe4595f, 0xe11975ca} }, +/**/ {{0x3ff92929, 0xcdaa4e80} }, +/**/ {{0x3bf23382, 0xacc82d4b} },}, +/**/ {{{0x3fe24000, 0x04f4d6af} }, +/**/ {{0x3fe4866d, 0x4d224131} }, +/**/ {{0x3ff8f1ef, 0x815c34e8} }, +/**/ {{0xbbd0c6ff, 0x3b740a99} },}, +/**/ {{{0x3fe25fff, 0xfcc07bda} }, +/**/ {{0x3fe4b3b4, 0x98b7d010} }, +/**/ {{0x3ff8bb60, 0x73e7ffa1} }, +/**/ {{0x3bebc31b, 0x1ad7a9c2} },}, +/**/ {{{0x3fe28000, 0x042d9639} }, +/**/ {{0x3fe4e136, 0xb64540d1} }, +/**/ {{0x3ff88578, 0xf4374938} }, +/**/ {{0x3be36de9, 0x1b85e901} },}, +/**/ {{{0x3fe2a000, 0x03be29a0} }, +/**/ {{0x3fe50ef4, 0x52bffd96} }, +/**/ {{0x3ff85035, 0xc0042c06} }, +/**/ {{0x3be15d01, 0x76f5efbd} },}, +/**/ {{{0x3fe2bfff, 0xfaa91f12} }, +/**/ {{0x3fe53cee, 0x3e2f4e0d} }, +/**/ {{0x3ff81b93, 0x8542df07} }, +/**/ {{0x3be555cd, 0x17662a2b} },}, +/**/ {{{0x3fe2dfff, 0xfe884891} }, +/**/ {{0x3fe56b25, 0x6c1a2470} }, +/**/ {{0x3ff7e78e, 0xe422ea70} }, +/**/ {{0x3bf03504, 0xbd030c11} },}, +/**/ {{{0x3fe2ffff, 0xfe87152b} }, +/**/ {{0x3fe5999a, 0x9beaaaa1} }, +/**/ {{0x3ff7b424, 0xd18fe9b3} }, +/**/ {{0xbb649a5f, 0x773e0e64} },}, +/**/ {{{0x3fe31fff, 0xffc1a721} }, +/**/ {{0x3fe5c84e, 0xafe0e564} }, +/**/ {{0x3ff78152, 0x338db8d4} }, +/**/ {{0x3beaf428, 0x5da8e935} },}, +/**/ {{{0x3fe33fff, 0xff70a372} }, +/**/ {{0x3fe5f742, 0x82191d64} }, +/**/ {{0x3ff74f14, 0x1122bcae} }, +/**/ {{0x3bdb1c4b, 0xdee4bfaf} },}, +/**/ {{{0x3fe36000, 0x0436e836} }, +/**/ {{0x3fe62676, 0xfde6ccff} }, +/**/ {{0x3ff71d67, 0x7644252c} }, +/**/ {{0xbbec3d10, 0xe08c3afb} },}, +/**/ {{{0x3fe37fff, 0xfcbe9641} }, +/**/ {{0x3fe655ec, 0xee9ffdaf} }, +/**/ {{0x3ff6ec49, 0xa6fc0515} }, +/**/ {{0x3bdda453, 0x2ed29567} },}, +/**/ {{{0x3fe39fff, 0xffb6d6ca} }, +/**/ {{0x3fe685a5, 0x5e67a1e1} }, +/**/ {{0x3ff6bbb7, 0xbc2ae969} }, +/**/ {{0x3becbf7b, 0x2ef43882} },}, +/**/ {{{0x3fe3c000, 0x04934fec} }, +/**/ {{0x3fe6b5a1, 0x2cc07d75} }, +/**/ {{0x3ff68baf, 0x10b02ef8} }, +/**/ {{0xbbe7c8fb, 0xfeb7cabd} },}, +/**/ {{{0x3fe3e000, 0x03f5cf7f} }, +/**/ {{0x3fe6e5e1, 0x3e59def6} }, +/**/ {{0x3ff65c2d, 0x0e61500f} }, +/**/ {{0xbbe30ba4, 0x035f7845} },}, +/**/ {{{0x3fe40000, 0x05280ad9} }, +/**/ {{0x3fe71666, 0x91ab4c3e} }, +/**/ {{0x3ff62d2f, 0x19f01c90} }, +/**/ {{0xbbf1e9f5, 0xffe95f6a} },}, +/**/ {{{0x3fe42000, 0x049efb65} }, +/**/ {{0x3fe74732, 0x18af3b9d} }, +/**/ {{0x3ff5feb2, 0xb86465e4} }, +/**/ {{0x3bc4cad7, 0x280d591e} },}, +/**/ {{{0x3fe44000, 0x0035ccb6} }, +/**/ {{0x3fe77844, 0xcb4ff1e5} }, +/**/ {{0x3ff5d0b5, 0x7c455428} }, +/**/ {{0x3bed8c18, 0x7ba5617c} },}, +/**/ {{{0x3fe46000, 0x03346717} }, +/**/ {{0x3fe7a99f, 0xba258778} }, +/**/ {{0x3ff5a334, 0xf4392254} }, +/**/ {{0xbbefd14a, 0xfc84a570} },}, +/**/ {{{0x3fe48000, 0x03002575} }, +/**/ {{0x3fe7db43, 0xd836768f} }, +/**/ {{0x3ff5762e, 0xdcf97e0c} }, +/**/ {{0xbbdd7eba, 0x5f5df49e} },}, +/**/ {{{0x3fe4a000, 0x055bf381} }, +/**/ {{0x3fe80d32, 0x35edeefa} }, +/**/ {{0x3ff549a0, 0xea46e31f} }, +/**/ {{0xbbdba522, 0x76823eac} },}, +/**/ {{{0x3fe4c000, 0x04ce10e3} }, +/**/ {{0x3fe83f6b, 0xd67dc1a8} }, +/**/ {{0x3ff51d88, 0xed82bcc4} }, +/**/ {{0xbbeae92d, 0x077d29ea} },}, +/**/ {{{0x3fe4e000, 0x016c60e1} }, +/**/ {{0x3fe871f1, 0xca0aaf31} }, +/**/ {{0x3ff4f1e4, 0xbdacbf16} }, +/**/ {{0x3be82958, 0x46ee425e} },}, +/**/ {{{0x3fe4ffff, 0xff966f0a} }, +/**/ {{0x3fe8a4c5, 0x2bff2dae} }, +/**/ {{0x3ff4c6b2, 0x3917657e} }, +/**/ {{0xbbf127c2, 0x5c86c705} },}, +/**/ {{{0x3fe52000, 0x0076e6eb} }, +/**/ {{0x3fe8d7e7, 0x175651e8} }, +/**/ {{0x3ff49bef, 0x4f459b05} }, +/**/ {{0xbbb1e9d1, 0x4181bbfc} },}, +/**/ {{{0x3fe54000, 0x03d12d3b} }, +/**/ {{0x3fe90b58, 0xa976ed56} }, +/**/ {{0x3ff47199, 0xfdf24af4} }, +/**/ {{0x3be38c17, 0xc30decaf} },}, +/**/ {{{0x3fe55fff, 0xfce7fa8d} }, +/**/ {{0x3fe93f1a, 0xf03a3a09} }, +/**/ {{0x3ff447b0, 0x5f13234b} }, +/**/ {{0x3bf1b8b2, 0x70df7e20} },}, +/**/ {{{0x3fe58000, 0x0331b46a} }, +/**/ {{0x3fe9732f, 0x38e83134} }, +/**/ {{0x3ff41e30, 0x68d8b41b} }, +/**/ {{0xbbee24d8, 0xb90bc28b} },}, +/**/ {{{0x3fe59fff, 0xfc14848e} }, +/**/ {{0x3fe9a796, 0x8471b489} }, +/**/ {{0x3ff3f518, 0x5de3aa73} }, +/**/ {{0xbbecacd9, 0xe0761536} },}, +/**/ {{{0x3fe5bfff, 0xfb7cd395} }, +/**/ {{0x3fe9dc52, 0x24a8b955} }, +/**/ {{0x3ff3cc66, 0x4f8fff15} }, +/**/ {{0xbbf67c97, 0x82045611} },}, +/**/ {{{0x3fe5e000, 0x000dcc40} }, +/**/ {{0x3fea1163, 0x4df5b93e} }, +/**/ {{0x3ff3a418, 0x75853228} }, +/**/ {{0xbbf585da, 0xd481f350} },}, +/**/ {{{0x3fe60000, 0x02efd2fc} }, +/**/ {{0x3fea46cb, 0x30d16323} }, +/**/ {{0x3ff37c2d, 0x187962ae} }, +/**/ {{0x3bf004c3, 0xa5f77bb0} },}, +/**/ {{{0x3fe61fff, 0xfeb8088a} }, +/**/ {{0x3fea7c8b, 0x053920c0} }, +/**/ {{0x3ff354a2, 0x891769a9} }, +/**/ {{0x3bbc6b30, 0x3fee3029} },}, +/**/ {{{0x3fe64000, 0x00f3ca06} }, +/**/ {{0x3feab2a4, 0x28a1911a} }, +/**/ {{0x3ff32d77, 0x0a6f0a4a} }, +/**/ {{0x3bf2a6f8, 0xfac5081a} },}, +/**/ {{{0x3fe65fff, 0xfe9ec2f4} }, +/**/ {{0x3feae917, 0xd4ce7239} }, +/**/ {{0x3ff306a9, 0x0751a948} }, +/**/ {{0xbbe950b5, 0x51ab9dbd} },}, +/**/ {{{0x3fe68000, 0x03d43966} }, +/**/ {{0x3feb1fe7, 0x708b998a} }, +/**/ {{0x3ff2e036, 0xd7a153c7} }, +/**/ {{0x3bdd36e2, 0xa1e4a14e} },}, +/**/ {{{0x3fe69fff, 0xfab67783} }, +/**/ {{0x3feb5714, 0x2e575464} }, +/**/ {{0x3ff2ba1f, 0x05006cb6} }, +/**/ {{0x3bea9a4a, 0x473c2e31} },}, +/**/ {{{0x3fe6bfff, 0xfcb65f89} }, +/**/ {{0x3feb8e9f, 0x981efd2f} }, +/**/ {{0x3ff2945f, 0xe948d9f7} }, +/**/ {{0xbbca5294, 0xe802df72} },}, +/**/ {{{0x3fe6dfff, 0xfc5609a9} }, +/**/ {{0x3febc68a, 0xfaed6ff1} }, +/**/ {{0x3ff26ef8, 0x1533411e} }, +/**/ {{0xbbf89153, 0xf51bc566} },}, +/**/ {{{0x3fe6ffff, 0xfc4eef86} }, +/**/ {{0x3febfed7, 0xc62205fe} }, +/**/ {{0x3ff249e6, 0x0e70978c} }, +/**/ {{0x3bc39021, 0xa2b9ff56} },}, +/**/ {{{0x3fe72000, 0x004d98b3} }, +/**/ {{0x3fec3787, 0x716968ad} }, +/**/ {{0x3ff22528, 0x61be7751} }, +/**/ {{0x3befc9c5, 0x74ee2211} },}, +/**/ {{{0x3fe73fff, 0xfc155075} }, +/**/ {{0x3fec709b, 0x5ec6fd4e} }, +/**/ {{0x3ff200bd, 0xb5d53311} }, +/**/ {{0x3be28a4d, 0xa269ae63} },}, +/**/ {{{0x3fe76000, 0x0498c203} }, +/**/ {{0x3fecaa15, 0x323d08c1} }, +/**/ {{0x3ff1dca4, 0x93433f65} }, +/**/ {{0x3bf8cae4, 0x14a28fb7} },}, +/**/ {{{0x3fe77fff, 0xff1e5636} }, +/**/ {{0x3fece3f6, 0x4147c12c} }, +/**/ {{0x3ff1b8db, 0xbfe294a8} }, +/**/ {{0xbbe7e19c, 0x4b56a744} },}, +/**/ {{{0x3fe7a000, 0x0226d45a} }, +/**/ {{0x3fed1e40, 0x4120eb7f} }, +/**/ {{0x3ff19561, 0xd15f8278} }, +/**/ {{0x3be64b28, 0x032c5d4c} },}, +/**/ {{{0x3fe7c000, 0x0250a5aa} }, +/**/ {{0x3fed58f4, 0xb112a1e1} }, +/**/ {{0x3ff17235, 0x8a59d565} }, +/**/ {{0xbbe716de, 0xb8dc7867} },}, +/**/ {{{0x3fe7e000, 0x0482f82e} }, +/**/ {{0x3fed9415, 0x3576bdf0} }, +/**/ {{0x3ff14f55, 0xa22a1c5b} }, +/**/ {{0x3bf207e1, 0xe1305604} },}, +/**/ {{{0x3fe80000, 0x0205003e} }, +/**/ {{0x3fedcfa3, 0x64d69ff7} }, +/**/ {{0x3ff12cc0, 0xe37eb26f} }, +/**/ {{0xbbd52ec6, 0xe32395f8} },}, +/**/ {{{0x3fe81fff, 0xfbf99411} }, +/**/ {{0x3fee0ba0, 0xebf98f51} }, +/**/ {{0x3ff10a76, 0x16ddd5d6} }, +/**/ {{0xbbece0d6, 0x59866045} },}, +/**/ {{{0x3fe84000, 0x0248e3a3} }, +/**/ {{0x3fee480f, 0x9bb7f565} }, +/**/ {{0x3ff0e873, 0xfb84e05c} }, +/**/ {{0x3bf4e5e8, 0x1595df92} },}, +/**/ {{{0x3fe86000, 0x0145c157} }, +/**/ {{0x3fee84f1, 0x0a10b3ab} }, +/**/ {{0x3ff0c6b9, 0x7cbd7b1e} }, +/**/ {{0xbbe19de6, 0xd5f121d0} },}, +/**/ {{{0x3fe88000, 0x022631b9} }, +/**/ {{0x3feec247, 0x0be1f047} }, +/**/ {{0x3ff0a545, 0x6d0b3ee6} }, +/**/ {{0xbbc272b1, 0xa3ba2c6f} },}, +/**/ {{{0x3fe8a000, 0x045f7828} }, +/**/ {{0x3fef0013, 0x6c45ba1c} }, +/**/ {{0x3ff08416, 0xaf2a0f09} }, +/**/ {{0x3be82b56, 0x5b63c799} },}, +/**/ {{{0x3fe8bfff, 0xffc686cf} }, +/**/ {{0x3fef3e57, 0xf03c824b} }, +/**/ {{0x3ff0632c, 0x33502220} }, +/**/ {{0xbbd039ad, 0x2dbeeb25} },}, +/**/ {{{0x3fe8dfff, 0xfd8644c6} }, +/**/ {{0x3fef7d16, 0x8774261d} }, +/**/ {{0x3ff04284, 0xdd5b3019} }, +/**/ {{0x3bd79f33, 0xe1eba933} },}, +/**/ {{{0x3fe8ffff, 0xfe4e7937} }, +/**/ {{0x3fefbc51, 0x1a99a641} }, +/**/ {{0x3ff0221f, 0x9f69840b} }, +/**/ {{0xbbea9e84, 0x7beee018} },}, +/**/ {{{0x3fe92000, 0x0435251f} }, +/**/ {{0x3feffc09, 0x9eb22390} }, +/**/ {{0x3ff001fb, 0x6f7c51e8} }, +/**/ {{0xbb5a12e7, 0x31032e0a} },}, + }; + +#else +#ifdef LITTLE_ENDI +static const number + xfg[186][4] = { /* xi,Fi,Gi,FFi, i=16..201 */ +/**/ {{{0x1e519d60, 0x3fb00000} }, +/**/ {{0x96c4e240, 0x3fb00557} }, +/**/ {{0x628127b7, 0x402ff554} }, +/**/ {{0x9e355b06, 0xbb9a1dee} },}, +/**/ {{{0x1b1a7010, 0x3fb10000} }, +/**/ {{0xaab892b7, 0x3fb10668} }, +/**/ {{0xbe3fdf74, 0x402e12c7} }, +/**/ {{0x037da741, 0x3ba89234} },}, +/**/ {{{0x2505e350, 0x3fb20000} }, +/**/ {{0xff547824, 0x3fb2079b} }, +/**/ {{0xde853633, 0x402c65c5} }, +/**/ {{0xe9614250, 0x3bb7486e} },}, +/**/ {{{0xfcdc4252, 0x3fb2ffff} }, +/**/ {{0x5eb16c68, 0x3fb308f3} }, +/**/ {{0xe56be74f, 0x402ae5da} }, +/**/ {{0x91a23034, 0xbb82c726} },}, +/**/ {{{0xe3ff849f, 0x3fb3ffff} }, +/**/ {{0x154999cc, 0x3fb40a71} }, +/**/ {{0x046b7352, 0x40298c43} }, +/**/ {{0x3843738f, 0x3b9aceaf} },}, +/**/ {{{0xedc9590f, 0x3fb4ffff} }, +/**/ {{0x429bdd80, 0x3fb50c17} }, +/**/ {{0x91b5d674, 0x40285384} }, +/**/ {{0xb4403d22, 0xbbc1d02d} },}, +/**/ {{{0x00ee83f7, 0x3fb60000} }, +/**/ {{0xda80cc21, 0x3fb60de7} }, +/**/ {{0xef21a2a7, 0x40273724} }, +/**/ {{0x72523ffd, 0xbb95e53c} },}, +/**/ {{{0xeb05ea41, 0x3fb6ffff} }, +/**/ {{0xb8c51bea, 0x3fb70fe4} }, +/**/ {{0xfae562ff, 0x40263370} }, +/**/ {{0x8ffe0626, 0xbb99ad0e} },}, +/**/ {{{0xdc0515f7, 0x3fb7ffff} }, +/**/ {{0x1db54498, 0x3fb81210} }, +/**/ {{0x0e7eab5c, 0x40254553} }, +/**/ {{0xd62ed686, 0xbb914c87} },}, +/**/ {{{0xe384d7ab, 0x3fb8ffff} }, +/**/ {{0x2a8d3727, 0x3fb9146c} }, +/**/ {{0xfd57f3fd, 0x40246a33} }, +/**/ {{0x5381e06d, 0xbbbbda8d} },}, +/**/ {{{0xe4832347, 0x3fb9ffff} }, +/**/ {{0xd50e1050, 0x3fba16fa} }, +/**/ {{0xc5537a96, 0x40239fe2} }, +/**/ {{0xc111eabb, 0x3bc7f695} },}, +/**/ {{{0x274540e3, 0x3fbb0000} }, +/**/ {{0x7ae68517, 0x3fbb19be} }, +/**/ {{0x3637e946, 0x4022e481} }, +/**/ {{0x8dbd9d93, 0x3bc307f8} },}, +/**/ {{{0xfebf2e9b, 0x3fbbffff} }, +/**/ {{0x8369cd19, 0x3fbc1cb8} }, +/**/ {{0x17aef223, 0x40223676} }, +/**/ {{0x424a9cf3, 0x3bc50038} },}, +/**/ {{{0x23529045, 0x3fbd0000} }, +/**/ {{0xc11d7ef7, 0x3fbd1feb} }, +/**/ {{0xb8e43d4e, 0x4021945f} }, +/**/ {{0x52a6f224, 0x3b812007} },}, +/**/ {{{0xd872a829, 0x3fbdffff} }, +/**/ {{0x8ee4d6b7, 0x3fbe2359} }, +/**/ {{0x76195d5f, 0x4020fd0c} }, +/**/ {{0x85fdca85, 0xbbb4d9ab} },}, +/**/ {{{0xff323b84, 0x3fbeffff} }, +/**/ {{0xec9073e5, 0x3fbf2704} }, +/**/ {{0x3020200f, 0x40206f71} }, +/**/ {{0x12836992, 0x3bb77aa2} },}, +/**/ {{{0x0ce79195, 0x3fc00000} }, +/**/ {{0xbc30cc61, 0x3fc01577} }, +/**/ {{0xd6564a88, 0x401fd549} }, +/**/ {{0x965c0ad0, 0xbbc8926f} },}, +/**/ {{{0xee40e918, 0x3fc07fff} }, +/**/ {{0x8279ac01, 0x3fc0978d} }, +/**/ {{0x9294bc03, 0x401edbb5} }, +/**/ {{0x4aae45d6, 0xbb80a533} },}, +/**/ {{{0x0cc091fd, 0x3fc10000} }, +/**/ {{0x44dfb2f7, 0x3fc119c5} }, +/**/ {{0x067d8e18, 0x401df0bb} }, +/**/ {{0x4ff642a4, 0xbbcc2c18} },}, +/**/ {{{0x0d9936a1, 0x3fc18000} }, +/**/ {{0xb9085a4b, 0x3fc19c1f} }, +/**/ {{0x71ce3629, 0x401d131a} }, +/**/ {{0x0669355b, 0xbbc36553} },}, +/**/ {{{0xed5f3188, 0x3fc1ffff} }, +/**/ {{0xee74bf2d, 0x3fc21e9d} }, +/**/ {{0xff0cd655, 0x401c41b6} }, +/**/ {{0x478ecfc5, 0x3b8867f5} },}, +/**/ {{{0x05f06a51, 0x3fc28000} }, +/**/ {{0x550b313f, 0x3fc2a141} }, +/**/ {{0x1702e6d2, 0x401b7b92} }, +/**/ {{0x380131fe, 0xbbadab51} },}, +/**/ {{{0xfe3d339e, 0x3fc2ffff} }, +/**/ {{0xa75f76df, 0x3fc3240a} }, +/**/ {{0xfcb6409d, 0x401abfc8} }, +/**/ {{0x0d291d83, 0x3bc60bcf} },}, +/**/ {{{0xed888d6f, 0x3fc37fff} }, +/**/ {{0x13cc5db7, 0x3fc3a6fb} }, +/**/ {{0x8ed5320d, 0x401a0d8f} }, +/**/ {{0x4eef03ab, 0x3bb8a48e} },}, +/**/ {{{0x02ca050d, 0x3fc40000} }, +/**/ {{0xe25776bb, 0x3fc42a13} }, +/**/ {{0xfa84c2bc, 0x4019642d} }, +/**/ {{0xcc56516f, 0xbbd0bd5d} },}, +/**/ {{{0xf2531f5c, 0x3fc47fff} }, +/**/ {{0xdeb73404, 0x3fc4ad55} }, +/**/ {{0xf86e9035, 0x4018c2fe} }, +/**/ {{0x5aa287c8, 0x3b9cffe7} },}, +/**/ {{{0x13774992, 0x3fc50000} }, +/**/ {{0x7d0ee307, 0x3fc530c2} }, +/**/ {{0x370caf35, 0x4018296c} }, +/**/ {{0xf91d6532, 0xbbcf75d1} },}, +/**/ {{{0xedddcb2d, 0x3fc57fff} }, +/**/ {{0x5db4347d, 0x3fc5b45a} }, +/**/ {{0x52190c0e, 0x401796ee} }, +/**/ {{0x17d5d076, 0x3b88a25f} },}, +/**/ {{{0xf41949a0, 0x3fc5ffff} }, +/**/ {{0x13bf986a, 0x3fc6381f} }, +/**/ {{0x2d2255fd, 0x40170b09} }, +/**/ {{0xb1bcd5e7, 0xbb9bfb23} },}, +/**/ {{{0xf834d3a1, 0x3fc67fff} }, +/**/ {{0x8ec85952, 0x3fc6bc11} }, +/**/ {{0x62cf2268, 0x4016854c} }, +/**/ {{0x82e39e04, 0x3b9ee53b} },}, +/**/ {{{0xfd9106ea, 0x3fc6ffff} }, +/**/ {{0xf298f6f7, 0x3fc74032} }, +/**/ {{0x1f4f84a9, 0x40160551} }, +/**/ {{0x112634b8, 0xbbb59c4a} },}, +/**/ {{{0x0f649a4f, 0x3fc78000} }, +/**/ {{0x6ca53abc, 0x3fc7c484} }, +/**/ {{0x4809d175, 0x40158ab9} }, +/**/ {{0x73d3cd2e, 0x3bc91c75} },}, +/**/ {{{0xef06bbd8, 0x3fc7ffff} }, +/**/ {{0xdf7d76ad, 0x3fc84906} }, +/**/ {{0xdd2b30a6, 0x4015152e} }, +/**/ {{0x084c3eef, 0xbbbfa2da} },}, +/**/ {{{0x021c6334, 0x3fc88000} }, +/**/ {{0xd965f986, 0x3fc8cdbb} }, +/**/ {{0x51b74296, 0x4014a462} }, +/**/ {{0x74dcfe0b, 0xbb9ec02e} },}, +/**/ {{{0xf38d0756, 0x3fc8ffff} }, +/**/ {{0x28e173c7, 0x3fc952a4} }, +/**/ {{0x17b59ebd, 0x4014380b} }, +/**/ {{0xb77589f0, 0xbbcd0f1c} },}, +/**/ {{{0x104efca1, 0x3fc98000} }, +/**/ {{0x4644d23c, 0x3fc9d7c1} }, +/**/ {{0xcb1eabd5, 0x4013cfe5} }, +/**/ {{0xea188d9e, 0xbbd5d6f7} },}, +/**/ {{{0x09417b30, 0x3fca0000} }, +/**/ {{0x096d76aa, 0x3fca5d14} }, +/**/ {{0xb3723db0, 0x40136bb4} }, +/**/ {{0xfbf3979c, 0x3bbe3e0d} },}, +/**/ {{{0xeb1c23ec, 0x3fca7fff} }, +/**/ {{0xab60288d, 0x3fcae29d} }, +/**/ {{0x783071d7, 0x40130b3e} }, +/**/ {{0x3d5384bf, 0xbbc7dd82} },}, +/**/ {{{0xfb171c13, 0x3fcaffff} }, +/**/ {{0xa221a96b, 0x3fcb685f} }, +/**/ {{0xd8c0747d, 0x4012ae4d} }, +/**/ {{0xd5554972, 0x3bd4644b} },}, +/**/ {{{0x0aba44be, 0x3fcb8000} }, +/**/ {{0xecdf241f, 0x3fcbee5a} }, +/**/ {{0xc6fad63b, 0x401254b1} }, +/**/ {{0xd092b85a, 0x3ba41916} },}, +/**/ {{{0x113d2a3e, 0x3fcc0000} }, +/**/ {{0xb3e92543, 0x3fcc7490} }, +/**/ {{0x9a62c035, 0x4011fe3c} }, +/**/ {{0x41a03739, 0xbba3cc39} },}, +/**/ {{{0xf49e00ce, 0x3fcc7fff} }, +/**/ {{0x0f59eab0, 0x3fccfb02} }, +/**/ {{0xe956a631, 0x4011aac3} }, +/**/ {{0xbfa8cb5b, 0xbbb7a383} },}, +/**/ {{{0x05f611ab, 0x3fcd0000} }, +/**/ {{0x89e6844e, 0x3fcd81b0} }, +/**/ {{0xf391268d, 0x40115a1f} }, +/**/ {{0xb2dc91f3, 0x3bd39b5c} },}, +/**/ {{{0x14764ceb, 0x3fcd8000} }, +/**/ {{0x27debf0d, 0x3fce089d} }, +/**/ {{0xfbc84740, 0x40110c2b} }, +/**/ {{0x84712510, 0x3bc14d4d} },}, +/**/ {{{0x14bcea76, 0x3fce0000} }, +/**/ {{0x16dbc820, 0x3fce8fc9} }, +/**/ {{0xa00ca48e, 0x4010c0c5} }, +/**/ {{0x640f1b9e, 0xbbd33788} },}, +/**/ {{{0xfd7995bd, 0x3fce7fff} }, +/**/ {{0x88b50424, 0x3fcf1735} }, +/**/ {{0xbe02169a, 0x401077cc} }, +/**/ {{0x221fdf77, 0xbbb61fee} },}, +/**/ {{{0x0cc35436, 0x3fcf0000} }, +/**/ {{0xfd21a40b, 0x3fcf9ee3} }, +/**/ {{0x1ee7ffe8, 0x40103123} }, +/**/ {{0xc79ff5c1, 0x3bd427e3} },}, +/**/ {{{0x01d1da33, 0x3fcf8000} }, +/**/ {{0xb7dbe15c, 0x3fd0136a} }, +/**/ {{0x77d559e5, 0x400fd959} }, +/**/ {{0xd67948d7, 0x3bb0c6a1} },}, +/**/ {{{0x060c13b2, 0x3fd00000} }, +/**/ {{0xaaad4f18, 0x3fd05785} }, +/**/ {{0x2675d182, 0x400f549e} }, +/**/ {{0x18f0dd10, 0xbbc15208} },}, +/**/ {{{0x03885492, 0x3fd04000} }, +/**/ {{0x660542d7, 0x3fd09bc3} }, +/**/ {{0xdf3f5fec, 0x400ed3e2} }, +/**/ {{0xb883ae62, 0xbbd95657} },}, +/**/ {{{0x052f5a13, 0x3fd08000} }, +/**/ {{0x9a195045, 0x3fd0e024} }, +/**/ {{0xfa68f2c8, 0x400e56f8} }, +/**/ {{0x5a543e8e, 0x3bded7ba} },}, +/**/ {{{0x02ba1af5, 0x3fd0c000} }, +/**/ {{0xe2e7f24b, 0x3fd124a9} }, +/**/ {{0xbffe633f, 0x400dddb4} }, +/**/ {{0x0c60278f, 0xbbdcba86} },}, +/**/ {{{0xf76642c1, 0x3fd0ffff} }, +/**/ {{0xe162ffe6, 0x3fd16953} }, +/**/ {{0x0311d5d5, 0x400d67ed} }, +/**/ {{0xe40c5f9e, 0x3b7b1f4a} },}, +/**/ {{{0x033602f0, 0x3fd14000} }, +/**/ {{0x5f49508e, 0x3fd1ae23} }, +/**/ {{0xb8708266, 0x400cf57a} }, +/**/ {{0x8620f301, 0xbbd6a6c2} },}, +/**/ {{{0xfefd1a13, 0x3fd17fff} }, +/**/ {{0xdb2a9ba1, 0x3fd1f318} }, +/**/ {{0x8d11009e, 0x400c8639} }, +/**/ {{0x69b21d3b, 0x3bd3a9c6} },}, +/**/ {{{0xf718365d, 0x3fd1bfff} }, +/**/ {{0x0c41e3ac, 0x3fd23835} }, +/**/ {{0xe02be47c, 0x400c1a06} }, +/**/ {{0x129e8cd1, 0x3bdb961a} },}, +/**/ {{{0xff001e00, 0x3fd1ffff} }, +/**/ {{0xb2f6395e, 0x3fd27d78} }, +/**/ {{0xf2fe9a85, 0x400bb0c1} }, +/**/ {{0xe68fd7d8, 0x3be074a9} },}, +/**/ {{{0xfe425a6a, 0x3fd23fff} }, +/**/ {{0x618faabe, 0x3fd2c2e4} }, +/**/ {{0x190b18df, 0x400b4a4c} }, +/**/ {{0xf615aad1, 0xbbdf0d1f} },}, +/**/ {{{0x059ec1db, 0x3fd28000} }, +/**/ {{0xd8583884, 0x3fd30878} }, +/**/ {{0x0cd82bc2, 0x400ae688} }, +/**/ {{0x141c1f8d, 0xbbd563c3} },}, +/**/ {{{0x000dd081, 0x3fd2c000} }, +/**/ {{0xaffdb6d8, 0x3fd34e36} }, +/**/ {{0x5270fc15, 0x400a855a} }, +/**/ {{0x9f2cdafd, 0xbbc6d88d} },}, +/**/ {{{0xfc1dcd2b, 0x3fd2ffff} }, +/**/ {{0xa95875bc, 0x3fd3941e} }, +/**/ {{0xaa9502b6, 0x400a26a8} }, +/**/ {{0x8389b15c, 0xbbe13cad} },}, +/**/ {{{0xf6c0d4a0, 0x3fd33fff} }, +/**/ {{0x739845f5, 0x3fd3da31} }, +/**/ {{0x4d2573a0, 0x4009ca5a} }, +/**/ {{0xacaee379, 0xbbc71636} },}, +/**/ {{{0x06b16793, 0x3fd38000} }, +/**/ {{0xdbc088f0, 0x3fd4206f} }, +/**/ {{0x9344e33a, 0x40097057} }, +/**/ {{0x1d7a4f81, 0xbbc2c052} },}, +/**/ {{{0x07358fa3, 0x3fd3c000} }, +/**/ {{0x6f23311d, 0x3fd466da} }, +/**/ {{0x5aa612ea, 0x4009188a} }, +/**/ {{0x685e8edc, 0x3b8653a5} },}, +/**/ {{{0xfc3b18cf, 0x3fd3ffff} }, +/**/ {{0xe9282e6b, 0x3fd4ad71} }, +/**/ {{0x641e643d, 0x4008c2dd} }, +/**/ {{0x3f567c64, 0x3b95f0ef} },}, +/**/ {{{0x000dd2a8, 0x3fd44000} }, +/**/ {{0x1fa3f2d1, 0x3fd4f437} }, +/**/ {{0x6072f821, 0x40086f3c} }, +/**/ {{0x95ff68b5, 0x3bb68efa} },}, +/**/ {{{0xfbb43713, 0x3fd47fff} }, +/**/ {{0xb3ac333c, 0x3fd53b2a} }, +/**/ {{0x3da56692, 0x40081d94} }, +/**/ {{0x2985fd3f, 0xbbbf4d7f} },}, +/**/ {{{0xfb113bf4, 0x3fd4bfff} }, +/**/ {{0x6e8ed9c2, 0x3fd5824d} }, +/**/ {{0xa8add00f, 0x4007cdd2} }, +/**/ {{0x1c9b3657, 0x3bcf478a} },}, +/**/ {{{0xf7f087c9, 0x3fd4ffff} }, +/**/ {{0x07446496, 0x3fd5c9a0} }, +/**/ {{0x444588eb, 0x40077fe6} }, +/**/ {{0xa4eabb0c, 0xbbc177dc} },}, +/**/ {{{0x088b3814, 0x3fd54000} }, +/**/ {{0x564125f9, 0x3fd61123} }, +/**/ {{0x6281a765, 0x400733be} }, +/**/ {{0xf57051c4, 0xbbc2c52c} },}, +/**/ {{{0xf7d55966, 0x3fd57fff} }, +/**/ {{0xe194a5d5, 0x3fd658d7} }, +/**/ {{0x73b47d1f, 0x4006e94b} }, +/**/ {{0xf9996dc6, 0x3bda2fcf} },}, +/**/ {{{0x08bf2490, 0x3fd5c000} }, +/**/ {{0xb775b28d, 0x3fd6a0be} }, +/**/ {{0x15b6ec28, 0x4006a07e} }, +/**/ {{0xaa5285b8, 0xbbe0ca90} },}, +/**/ {{{0x09fa853f, 0x3fd60000} }, +/**/ {{0x65a66cfd, 0x3fd6e8d8} }, +/**/ {{0x1c701269, 0x40065948} }, +/**/ {{0x8591e13a, 0x3bd9ea95} },}, +/**/ {{{0x07595fca, 0x3fd64000} }, +/**/ {{0xc0556a7c, 0x3fd73125} }, +/**/ {{0xbaae9d02, 0x4006139b} }, +/**/ {{0x40152b83, 0x3bd88aff} },}, +/**/ {{{0x031687da, 0x3fd68000} }, +/**/ {{0x92e2cfd0, 0x3fd779a7} }, +/**/ {{0xcae0882b, 0x4005cf6b} }, +/**/ {{0x9f439451, 0xbbd8a4a2} },}, +/**/ {{{0xf5c8cfe2, 0x3fd6bfff} }, +/**/ {{0x9fb452ed, 0x3fd7c25e} }, +/**/ {{0xc561f1cd, 0x40058cab} }, +/**/ {{0xf6a37d74, 0xbbe371a6} },}, +/**/ {{{0xf81df231, 0x3fd6ffff} }, +/**/ {{0xcfb4dab5, 0x3fd80b4b} }, +/**/ {{0x8d3ca5d3, 0x40054b4f} }, +/**/ {{0x679dc99f, 0x3bcb4686} },}, +/**/ {{{0xfa71385e, 0x3fd73fff} }, +/**/ {{0xe007a9b6, 0x3fd8546f} }, +/**/ {{0xb3b22176, 0x40050b4b} }, +/**/ {{0xa5c73477, 0xbbcd1540} },}, +/**/ {{{0x024a9c2b, 0x3fd78000} }, +/**/ {{0xa7fcf5cf, 0x3fd89dcb} }, +/**/ {{0x3159cbe1, 0x4004cc95} }, +/**/ {{0xd58a6ad0, 0xbbdc25ea} },}, +/**/ {{{0x02eb62b8, 0x3fd7c000} }, +/**/ {{0xec0ba5cf, 0x3fd8e75f} }, +/**/ {{0x8731eeea, 0x40048f21} }, +/**/ {{0xcc1adafb, 0xbbc1cb73} },}, +/**/ {{{0x054a52d1, 0x3fd80000} }, +/**/ {{0x8bb822e9, 0x3fd9312d} }, +/**/ {{0x9170a729, 0x400452e6} }, +/**/ {{0xeac002ee, 0xbbd8bb17} },}, +/**/ {{{0xf93a00a3, 0x3fd83fff} }, +/**/ {{0x4bb9ad2a, 0x3fd97b35} }, +/**/ {{0xae924e7f, 0x400417da} }, +/**/ {{0x9a378cc7, 0x3bd4b800} },}, +/**/ {{{0xfbdc91c1, 0x3fd87fff} }, +/**/ {{0x2771b601, 0x3fd9c578} }, +/**/ {{0x78855799, 0x4003ddf4} }, +/**/ {{0xa00445d9, 0x3bd9077d} },}, +/**/ {{{0xf6d215e6, 0x3fd8bfff} }, +/**/ {{0xe0ea4a0b, 0x3fda0ff6} }, +/**/ {{0x189a0989, 0x4003a52b} }, +/**/ {{0x89c0613d, 0xbbda6831} },}, +/**/ {{{0x02f734ef, 0x3fd90000} }, +/**/ {{0x736bf579, 0x3fda5ab2} }, +/**/ {{0xe9244ca6, 0x40036d75} }, +/**/ {{0x4b722377, 0x3be3a6d8} },}, +/**/ {{{0x04eef8b4, 0x3fd94000} }, +/**/ {{0x9fb6e3d0, 0x3fdaa5ab} }, +/**/ {{0xc9089cb7, 0x400336cc} }, +/**/ {{0x22cc00bb, 0x3b9f6963} },}, +/**/ {{{0x041ec76a, 0x3fd98000} }, +/**/ {{0x5176c7e4, 0x3fdaf0e3} }, +/**/ {{0xcb0b9506, 0x40030127} }, +/**/ {{0x5385a849, 0x3bb1ffdb} },}, +/**/ {{{0x08044e47, 0x3fd9c000} }, +/**/ {{0x77071224, 0x3fdb3c5a} }, +/**/ {{0x50d75ec7, 0x4002cc7f} }, +/**/ {{0x78effc8a, 0xbbb0fade} },}, +/**/ {{{0x01f8235b, 0x3fda0000} }, +/**/ {{0xe725782e, 0x3fdb8811} }, +/**/ {{0x18fbfb37, 0x400298cc} }, +/**/ {{0x3b50e71b, 0xbbe55ed3} },}, +/**/ {{{0xfb8c6f08, 0x3fda3fff} }, +/**/ {{0x97b086f3, 0x3fdbd40a} }, +/**/ {{0x154de04b, 0x40026607} }, +/**/ {{0x455faae3, 0xbbdec65e} },}, +/**/ {{{0xfb3d63e1, 0x3fda7fff} }, +/**/ {{0x7d9a3b8a, 0x3fdc2045} }, +/**/ {{0x7e60bfbb, 0x40023429} }, +/**/ {{0x154ebd33, 0x3be3001c} },}, +/**/ {{{0xf5f45c48, 0x3fdabfff} }, +/**/ {{0x7b8d45e6, 0x3fdc6cc3} }, +/**/ {{0xdb1ace69, 0x4002032c} }, +/**/ {{0x3ed33616, 0xbbe5ebf8} },}, +/**/ {{{0x0508b34c, 0x3fdb0000} }, +/**/ {{0xa27e8d37, 0x3fdcb985} }, +/**/ {{0xd4459a2b, 0x4001d30a} }, +/**/ {{0xae61e2d1, 0xbbd01432} },}, +/**/ {{{0x0a84710c, 0x3fdb4000} }, +/**/ {{0xc3e50155, 0x3fdd068c} }, +/**/ {{0x775034dd, 0x4001a3bd} }, +/**/ {{0x58e0e228, 0xbbe80b1e} },}, +/**/ {{{0xf692e9d8, 0x3fdb7fff} }, +/**/ {{0xc49d6627, 0x3fdd53d9} }, +/**/ {{0xfe18066a, 0x4001753e} }, +/**/ {{0xf760d33e, 0xbbb004c8} },}, +/**/ {{{0x0280f14d, 0x3fdbc000} }, +/**/ {{0xe4e81013, 0x3fdda16d} }, +/**/ {{0xa38ea052, 0x40014789} }, +/**/ {{0x27c9c4ea, 0x3be848bc} },}, +/**/ {{{0x001121d1, 0x3fdc0000} }, +/**/ {{0xeac018f0, 0x3fddef49} }, +/**/ {{0x20b8be0c, 0x40011a98} }, +/**/ {{0xd0d6010e, 0xbbe1527e} },}, +/**/ {{{0xfef662aa, 0x3fdc3fff} }, +/**/ {{0xea0c7070, 0x3fde3d6e} }, +/**/ {{0x32f46ccd, 0x4000ee65} }, +/**/ {{0x189a000d, 0x3be8d241} },}, +/**/ {{{0x09845818, 0x3fdc8000} }, +/**/ {{0xf36a8b1b, 0x3fde8bdd} }, +/**/ {{0xcac73476, 0x4000c2eb} }, +/**/ {{0x12bed284, 0x3bd221f7} },}, +/**/ {{{0xfb0493bf, 0x3fdcbfff} }, +/**/ {{0xe0c60d10, 0x3fdeda97} }, +/**/ {{0x251c7836, 0x40009827} }, +/**/ {{0x6eec41b7, 0xbbe0bd54} },}, +/**/ {{{0xfd52961f, 0x3fdcffff} }, +/**/ {{0xefb3e44b, 0x3fdf299d} }, +/**/ {{0x74e459f5, 0x40006e12} }, +/**/ {{0xe969c82f, 0xbbd93f77} },}, +/**/ {{{0xfe2319a4, 0x3fdd3fff} }, +/**/ {{0x17139490, 0x3fdf78f1} }, +/**/ {{0x3e737e94, 0x400044a9} }, +/**/ {{0x49594b7a, 0xbb91e7cc} },}, +/**/ {{{0xfa4de596, 0x3fdd7fff} }, +/**/ {{0x638f49e8, 0x3fdfc892} }, +/**/ {{0x231057a5, 0x40001be7} }, +/**/ {{0xf5af9f5f, 0x3bd482b0} },}, +/**/ {{{0xfe729a69, 0x3fddbfff} }, +/**/ {{0x7c6ab019, 0x3fe00c41} }, +/**/ {{0xbf612660, 0x3fffe78f} }, +/**/ {{0x00da681e, 0x3bea5cda} },}, +/**/ {{{0x09d66802, 0x3fde0000} }, +/**/ {{0xf6b883cf, 0x3fe03461} }, +/**/ {{0xbc05a87c, 0x3fff988e} }, +/**/ {{0xf2372669, 0xbbe06c33} },}, +/**/ {{{0xfb211657, 0x3fde3fff} }, +/**/ {{0x191db8e8, 0x3fe05cab} }, +/**/ {{0x7bcfe6be, 0x3fff4ac3} }, +/**/ {{0x5ed8d35b, 0xbbd5d51f} },}, +/**/ {{{0x0a3f068a, 0x3fde8000} }, +/**/ {{0x95fb54f0, 0x3fe0851d} }, +/**/ {{0x144ca408, 0x3ffefe26} }, +/**/ {{0xa2c169c5, 0xbbc7c894} },}, +/**/ {{{0x01adb060, 0x3fdec000} }, +/**/ {{0xdc7b54f9, 0x3fe0adb9} }, +/**/ {{0x5ebe52a7, 0x3ffeb2af} }, +/**/ {{0x312c5ffd, 0x3bd4e740} },}, +/**/ {{{0xff5c0d01, 0x3fdeffff} }, +/**/ {{0x92550a8d, 0x3fe0d680} }, +/**/ {{0x0d71fdf0, 0x3ffe6858} }, +/**/ {{0x96b35499, 0x3bddd8a6} },}, +/**/ {{{0xf93d5fcc, 0x3fdf3fff} }, +/**/ {{0x45cb4374, 0x3fe0ff72} }, +/**/ {{0x3cce5040, 0x3ffe1f19} }, +/**/ {{0x7c1efab4, 0xbbc9f0ec} },}, +/**/ {{{0xfa0dd18f, 0x3fdf7fff} }, +/**/ {{0x944dd508, 0x3fe1288f} }, +/**/ {{0x298b874d, 0x3ffdd6ec} }, +/**/ {{0x9642a0a6, 0x3bea6ebd} },}, +/**/ {{{0xfd3a9f1a, 0x3fdfbfff} }, +/**/ {{0x13750f3e, 0x3fe151d9} }, +/**/ {{0x5806a27e, 0x3ffd8fca} }, +/**/ {{0xfc65ac7a, 0x3bda2a03} },}, +/**/ {{{0xfc481400, 0x3fdfffff} }, +/**/ {{0x598944ca, 0x3fe17b4f} }, +/**/ {{0x82532170, 0x3ffd49ad} }, +/**/ {{0x3d236dc3, 0x3bc4412e} },}, +/**/ {{{0xff53786c, 0x3fe01fff} }, +/**/ {{0x07d83d47, 0x3fe1a4f3} }, +/**/ {{0x851bffeb, 0x3ffd048f} }, +/**/ {{0x29f81b14, 0x3bd1589d} },}, +/**/ {{{0xfee301b7, 0x3fe03fff} }, +/**/ {{0xb8a6a382, 0x3fe1cec4} }, +/**/ {{0x7c519db6, 0x3ffcc06a} }, +/**/ {{0x5b24d6b2, 0x3bd370e6} },}, +/**/ {{{0x006e36bf, 0x3fe06000} }, +/**/ {{0x114eb8be, 0x3fe1f8c5} }, +/**/ {{0xa34d6786, 0x3ffc7d38} }, +/**/ {{0x4b98c1d4, 0xbbea92de} },}, +/**/ {{{0xfd60aa43, 0x3fe07fff} }, +/**/ {{0xabeccecb, 0x3fe222f4} }, +/**/ {{0x77342ac4, 0x3ffc3af4} }, +/**/ {{0x03a5c2c2, 0xbbdd47f6} },}, +/**/ {{{0x037762e8, 0x3fe0a000} }, +/**/ {{0x3f99efe8, 0x3fe24d54} }, +/**/ {{0x75f54fab, 0x3ffbf998} }, +/**/ {{0x15771a46, 0x3bedf7f4} },}, +/**/ {{{0xff1c6921, 0x3fe0bfff} }, +/**/ {{0x598e35d0, 0x3fe277e4} }, +/**/ {{0x8addd186, 0x3ffbb91f} }, +/**/ {{0x5e0e5a73, 0x3be0f16c} },}, +/**/ {{{0xff07154b, 0x3fe0dfff} }, +/**/ {{0xb6bc3986, 0x3fe2a2a5} }, +/**/ {{0x8301646d, 0x3ffb7984} }, +/**/ {{0xbbaa5310, 0xbbf02dd0} },}, +/**/ {{{0x02fcdda4, 0x3fe10000} }, +/**/ {{0x02a59f1e, 0x3fe2cd99} }, +/**/ {{0x705219bf, 0x3ffb3ac2} }, +/**/ {{0x112fa616, 0xbbe59357} },}, +/**/ {{{0x01ce1140, 0x3fe12000} }, +/**/ {{0xdf0a67c2, 0x3fe2f8be} }, +/**/ {{0x9ab8ae2a, 0x3ffafcd4} }, +/**/ {{0x9303f346, 0x3be2c542} },}, +/**/ {{{0x04d0f355, 0x3fe14000} }, +/**/ {{0x08fcc7bf, 0x3fe32418} }, +/**/ {{0x497b9a36, 0x3ffabfb6} }, +/**/ {{0xb5a59234, 0x3bebc044} },}, +/**/ {{{0x00fb0c8a, 0x3fe16000} }, +/**/ {{0x2471618b, 0x3fe34fa5} }, +/**/ {{0x0d26d117, 0x3ffa8363} }, +/**/ {{0x3f7bb7c9, 0xbbdbfbb2} },}, +/**/ {{{0x026f10b3, 0x3fe18000} }, +/**/ {{0xf7579056, 0x3fe37b66} }, +/**/ {{0x6b4cf4b1, 0x3ffa47d6} }, +/**/ {{0xaf0b5de9, 0x3bf0f6b4} },}, +/**/ {{{0xfd0978f8, 0x3fe19fff} }, +/**/ {{0x290cc78c, 0x3fe3a75e} }, +/**/ {{0x36c21315, 0x3ffa0d0c} }, +/**/ {{0xa296b262, 0x3beb2129} },}, +/**/ {{{0xfd94840b, 0x3fe1bfff} }, +/**/ {{0x85b4e4a4, 0x3fe3d38b} }, +/**/ {{0x32f2ecef, 0x3ff9d300} }, +/**/ {{0xb9bb7d74, 0xbbdbab1a} },}, +/**/ {{{0xfbda1ea1, 0x3fe1dfff} }, +/**/ {{0xbf3cee2f, 0x3fe3ffef} }, +/**/ {{0x6770fed8, 0x3ff999ae} }, +/**/ {{0xb4ace9a4, 0x3bda0bdc} },}, +/**/ {{{0xfc989533, 0x3fe1ffff} }, +/**/ {{0x9c27900c, 0x3fe42c8b} }, +/**/ {{0xe0d9f1ac, 0x3ff96112} }, +/**/ {{0x2fa2d81a, 0xbbee19eb} },}, +/**/ {{{0x012b8d26, 0x3fe22000} }, +/**/ {{0xe11975ca, 0x3fe4595f} }, +/**/ {{0xcdaa4e80, 0x3ff92929} }, +/**/ {{0xacc82d4b, 0x3bf23382} },}, +/**/ {{{0x04f4d6af, 0x3fe24000} }, +/**/ {{0x4d224131, 0x3fe4866d} }, +/**/ {{0x815c34e8, 0x3ff8f1ef} }, +/**/ {{0x3b740a99, 0xbbd0c6ff} },}, +/**/ {{{0xfcc07bda, 0x3fe25fff} }, +/**/ {{0x98b7d010, 0x3fe4b3b4} }, +/**/ {{0x73e7ffa1, 0x3ff8bb60} }, +/**/ {{0x1ad7a9c2, 0x3bebc31b} },}, +/**/ {{{0x042d9639, 0x3fe28000} }, +/**/ {{0xb64540d1, 0x3fe4e136} }, +/**/ {{0xf4374938, 0x3ff88578} }, +/**/ {{0x1b85e901, 0x3be36de9} },}, +/**/ {{{0x03be29a0, 0x3fe2a000} }, +/**/ {{0x52bffd96, 0x3fe50ef4} }, +/**/ {{0xc0042c06, 0x3ff85035} }, +/**/ {{0x76f5efbd, 0x3be15d01} },}, +/**/ {{{0xfaa91f12, 0x3fe2bfff} }, +/**/ {{0x3e2f4e0d, 0x3fe53cee} }, +/**/ {{0x8542df07, 0x3ff81b93} }, +/**/ {{0x17662a2b, 0x3be555cd} },}, +/**/ {{{0xfe884891, 0x3fe2dfff} }, +/**/ {{0x6c1a2470, 0x3fe56b25} }, +/**/ {{0xe422ea70, 0x3ff7e78e} }, +/**/ {{0xbd030c11, 0x3bf03504} },}, +/**/ {{{0xfe87152b, 0x3fe2ffff} }, +/**/ {{0x9beaaaa1, 0x3fe5999a} }, +/**/ {{0xd18fe9b3, 0x3ff7b424} }, +/**/ {{0x773e0e64, 0xbb649a5f} },}, +/**/ {{{0xffc1a721, 0x3fe31fff} }, +/**/ {{0xafe0e564, 0x3fe5c84e} }, +/**/ {{0x338db8d4, 0x3ff78152} }, +/**/ {{0x5da8e935, 0x3beaf428} },}, +/**/ {{{0xff70a372, 0x3fe33fff} }, +/**/ {{0x82191d64, 0x3fe5f742} }, +/**/ {{0x1122bcae, 0x3ff74f14} }, +/**/ {{0xdee4bfaf, 0x3bdb1c4b} },}, +/**/ {{{0x0436e836, 0x3fe36000} }, +/**/ {{0xfde6ccff, 0x3fe62676} }, +/**/ {{0x7644252c, 0x3ff71d67} }, +/**/ {{0xe08c3afb, 0xbbec3d10} },}, +/**/ {{{0xfcbe9641, 0x3fe37fff} }, +/**/ {{0xee9ffdaf, 0x3fe655ec} }, +/**/ {{0xa6fc0515, 0x3ff6ec49} }, +/**/ {{0x2ed29567, 0x3bdda453} },}, +/**/ {{{0xffb6d6ca, 0x3fe39fff} }, +/**/ {{0x5e67a1e1, 0x3fe685a5} }, +/**/ {{0xbc2ae969, 0x3ff6bbb7} }, +/**/ {{0x2ef43882, 0x3becbf7b} },}, +/**/ {{{0x04934fec, 0x3fe3c000} }, +/**/ {{0x2cc07d75, 0x3fe6b5a1} }, +/**/ {{0x10b02ef8, 0x3ff68baf} }, +/**/ {{0xfeb7cabd, 0xbbe7c8fb} },}, +/**/ {{{0x03f5cf7f, 0x3fe3e000} }, +/**/ {{0x3e59def6, 0x3fe6e5e1} }, +/**/ {{0x0e61500f, 0x3ff65c2d} }, +/**/ {{0x035f7845, 0xbbe30ba4} },}, +/**/ {{{0x05280ad9, 0x3fe40000} }, +/**/ {{0x91ab4c3e, 0x3fe71666} }, +/**/ {{0x19f01c90, 0x3ff62d2f} }, +/**/ {{0xffe95f6a, 0xbbf1e9f5} },}, +/**/ {{{0x049efb65, 0x3fe42000} }, +/**/ {{0x18af3b9d, 0x3fe74732} }, +/**/ {{0xb86465e4, 0x3ff5feb2} }, +/**/ {{0x280d591e, 0x3bc4cad7} },}, +/**/ {{{0x0035ccb6, 0x3fe44000} }, +/**/ {{0xcb4ff1e5, 0x3fe77844} }, +/**/ {{0x7c455428, 0x3ff5d0b5} }, +/**/ {{0x7ba5617c, 0x3bed8c18} },}, +/**/ {{{0x03346717, 0x3fe46000} }, +/**/ {{0xba258778, 0x3fe7a99f} }, +/**/ {{0xf4392254, 0x3ff5a334} }, +/**/ {{0xfc84a570, 0xbbefd14a} },}, +/**/ {{{0x03002575, 0x3fe48000} }, +/**/ {{0xd836768f, 0x3fe7db43} }, +/**/ {{0xdcf97e0c, 0x3ff5762e} }, +/**/ {{0x5f5df49e, 0xbbdd7eba} },}, +/**/ {{{0x055bf381, 0x3fe4a000} }, +/**/ {{0x35edeefa, 0x3fe80d32} }, +/**/ {{0xea46e31f, 0x3ff549a0} }, +/**/ {{0x76823eac, 0xbbdba522} },}, +/**/ {{{0x04ce10e3, 0x3fe4c000} }, +/**/ {{0xd67dc1a8, 0x3fe83f6b} }, +/**/ {{0xed82bcc4, 0x3ff51d88} }, +/**/ {{0x077d29ea, 0xbbeae92d} },}, +/**/ {{{0x016c60e1, 0x3fe4e000} }, +/**/ {{0xca0aaf31, 0x3fe871f1} }, +/**/ {{0xbdacbf16, 0x3ff4f1e4} }, +/**/ {{0x46ee425e, 0x3be82958} },}, +/**/ {{{0xff966f0a, 0x3fe4ffff} }, +/**/ {{0x2bff2dae, 0x3fe8a4c5} }, +/**/ {{0x3917657e, 0x3ff4c6b2} }, +/**/ {{0x5c86c705, 0xbbf127c2} },}, +/**/ {{{0x0076e6eb, 0x3fe52000} }, +/**/ {{0x175651e8, 0x3fe8d7e7} }, +/**/ {{0x4f459b05, 0x3ff49bef} }, +/**/ {{0x4181bbfc, 0xbbb1e9d1} },}, +/**/ {{{0x03d12d3b, 0x3fe54000} }, +/**/ {{0xa976ed56, 0x3fe90b58} }, +/**/ {{0xfdf24af4, 0x3ff47199} }, +/**/ {{0xc30decaf, 0x3be38c17} },}, +/**/ {{{0xfce7fa8d, 0x3fe55fff} }, +/**/ {{0xf03a3a09, 0x3fe93f1a} }, +/**/ {{0x5f13234b, 0x3ff447b0} }, +/**/ {{0x70df7e20, 0x3bf1b8b2} },}, +/**/ {{{0x0331b46a, 0x3fe58000} }, +/**/ {{0x38e83134, 0x3fe9732f} }, +/**/ {{0x68d8b41b, 0x3ff41e30} }, +/**/ {{0xb90bc28b, 0xbbee24d8} },}, +/**/ {{{0xfc14848e, 0x3fe59fff} }, +/**/ {{0x8471b489, 0x3fe9a796} }, +/**/ {{0x5de3aa73, 0x3ff3f518} }, +/**/ {{0xe0761536, 0xbbecacd9} },}, +/**/ {{{0xfb7cd395, 0x3fe5bfff} }, +/**/ {{0x24a8b955, 0x3fe9dc52} }, +/**/ {{0x4f8fff15, 0x3ff3cc66} }, +/**/ {{0x82045611, 0xbbf67c97} },}, +/**/ {{{0x000dcc40, 0x3fe5e000} }, +/**/ {{0x4df5b93e, 0x3fea1163} }, +/**/ {{0x75853228, 0x3ff3a418} }, +/**/ {{0xd481f350, 0xbbf585da} },}, +/**/ {{{0x02efd2fc, 0x3fe60000} }, +/**/ {{0x30d16323, 0x3fea46cb} }, +/**/ {{0x187962ae, 0x3ff37c2d} }, +/**/ {{0xa5f77bb0, 0x3bf004c3} },}, +/**/ {{{0xfeb8088a, 0x3fe61fff} }, +/**/ {{0x053920c0, 0x3fea7c8b} }, +/**/ {{0x891769a9, 0x3ff354a2} }, +/**/ {{0x3fee3029, 0x3bbc6b30} },}, +/**/ {{{0x00f3ca06, 0x3fe64000} }, +/**/ {{0x28a1911a, 0x3feab2a4} }, +/**/ {{0x0a6f0a4a, 0x3ff32d77} }, +/**/ {{0xfac5081a, 0x3bf2a6f8} },}, +/**/ {{{0xfe9ec2f4, 0x3fe65fff} }, +/**/ {{0xd4ce7239, 0x3feae917} }, +/**/ {{0x0751a948, 0x3ff306a9} }, +/**/ {{0x51ab9dbd, 0xbbe950b5} },}, +/**/ {{{0x03d43966, 0x3fe68000} }, +/**/ {{0x708b998a, 0x3feb1fe7} }, +/**/ {{0xd7a153c7, 0x3ff2e036} }, +/**/ {{0xa1e4a14e, 0x3bdd36e2} },}, +/**/ {{{0xfab67783, 0x3fe69fff} }, +/**/ {{0x2e575464, 0x3feb5714} }, +/**/ {{0x05006cb6, 0x3ff2ba1f} }, +/**/ {{0x473c2e31, 0x3bea9a4a} },}, +/**/ {{{0xfcb65f89, 0x3fe6bfff} }, +/**/ {{0x981efd2f, 0x3feb8e9f} }, +/**/ {{0xe948d9f7, 0x3ff2945f} }, +/**/ {{0xe802df72, 0xbbca5294} },}, +/**/ {{{0xfc5609a9, 0x3fe6dfff} }, +/**/ {{0xfaed6ff1, 0x3febc68a} }, +/**/ {{0x1533411e, 0x3ff26ef8} }, +/**/ {{0xf51bc566, 0xbbf89153} },}, +/**/ {{{0xfc4eef86, 0x3fe6ffff} }, +/**/ {{0xc62205fe, 0x3febfed7} }, +/**/ {{0x0e70978c, 0x3ff249e6} }, +/**/ {{0xa2b9ff56, 0x3bc39021} },}, +/**/ {{{0x004d98b3, 0x3fe72000} }, +/**/ {{0x716968ad, 0x3fec3787} }, +/**/ {{0x61be7751, 0x3ff22528} }, +/**/ {{0x74ee2211, 0x3befc9c5} },}, +/**/ {{{0xfc155075, 0x3fe73fff} }, +/**/ {{0x5ec6fd4e, 0x3fec709b} }, +/**/ {{0xb5d53311, 0x3ff200bd} }, +/**/ {{0xa269ae63, 0x3be28a4d} },}, +/**/ {{{0x0498c203, 0x3fe76000} }, +/**/ {{0x323d08c1, 0x3fecaa15} }, +/**/ {{0x93433f65, 0x3ff1dca4} }, +/**/ {{0x14a28fb7, 0x3bf8cae4} },}, +/**/ {{{0xff1e5636, 0x3fe77fff} }, +/**/ {{0x4147c12c, 0x3fece3f6} }, +/**/ {{0xbfe294a8, 0x3ff1b8db} }, +/**/ {{0x4b56a744, 0xbbe7e19c} },}, +/**/ {{{0x0226d45a, 0x3fe7a000} }, +/**/ {{0x4120eb7f, 0x3fed1e40} }, +/**/ {{0xd15f8278, 0x3ff19561} }, +/**/ {{0x032c5d4c, 0x3be64b28} },}, +/**/ {{{0x0250a5aa, 0x3fe7c000} }, +/**/ {{0xb112a1e1, 0x3fed58f4} }, +/**/ {{0x8a59d565, 0x3ff17235} }, +/**/ {{0xb8dc7867, 0xbbe716de} },}, +/**/ {{{0x0482f82e, 0x3fe7e000} }, +/**/ {{0x3576bdf0, 0x3fed9415} }, +/**/ {{0xa22a1c5b, 0x3ff14f55} }, +/**/ {{0xe1305604, 0x3bf207e1} },}, +/**/ {{{0x0205003e, 0x3fe80000} }, +/**/ {{0x64d69ff7, 0x3fedcfa3} }, +/**/ {{0xe37eb26f, 0x3ff12cc0} }, +/**/ {{0xe32395f8, 0xbbd52ec6} },}, +/**/ {{{0xfbf99411, 0x3fe81fff} }, +/**/ {{0xebf98f51, 0x3fee0ba0} }, +/**/ {{0x16ddd5d6, 0x3ff10a76} }, +/**/ {{0x59866045, 0xbbece0d6} },}, +/**/ {{{0x0248e3a3, 0x3fe84000} }, +/**/ {{0x9bb7f565, 0x3fee480f} }, +/**/ {{0xfb84e05c, 0x3ff0e873} }, +/**/ {{0x1595df92, 0x3bf4e5e8} },}, +/**/ {{{0x0145c157, 0x3fe86000} }, +/**/ {{0x0a10b3ab, 0x3fee84f1} }, +/**/ {{0x7cbd7b1e, 0x3ff0c6b9} }, +/**/ {{0xd5f121d0, 0xbbe19de6} },}, +/**/ {{{0x022631b9, 0x3fe88000} }, +/**/ {{0x0be1f047, 0x3feec247} }, +/**/ {{0x6d0b3ee6, 0x3ff0a545} }, +/**/ {{0xa3ba2c6f, 0xbbc272b1} },}, +/**/ {{{0x045f7828, 0x3fe8a000} }, +/**/ {{0x6c45ba1c, 0x3fef0013} }, +/**/ {{0xaf2a0f09, 0x3ff08416} }, +/**/ {{0x5b63c799, 0x3be82b56} },}, +/**/ {{{0xffc686cf, 0x3fe8bfff} }, +/**/ {{0xf03c824b, 0x3fef3e57} }, +/**/ {{0x33502220, 0x3ff0632c} }, +/**/ {{0x2dbeeb25, 0xbbd039ad} },}, +/**/ {{{0xfd8644c6, 0x3fe8dfff} }, +/**/ {{0x8774261d, 0x3fef7d16} }, +/**/ {{0xdd5b3019, 0x3ff04284} }, +/**/ {{0xe1eba933, 0x3bd79f33} },}, +/**/ {{{0xfe4e7937, 0x3fe8ffff} }, +/**/ {{0x1a99a641, 0x3fefbc51} }, +/**/ {{0x9f69840b, 0x3ff0221f} }, +/**/ {{0x7beee018, 0xbbea9e84} },}, +/**/ {{{0x0435251f, 0x3fe92000} }, +/**/ {{0x9eb22390, 0x3feffc09} }, +/**/ {{0x6f7c51e8, 0x3ff001fb} }, +/**/ {{0x31032e0a, 0xbb5a12e7} },}, + }; + +#endif +#endif diff -durpNa glibc-2.2.2/sysdeps/ieee754/flt-32/e_asinf.c glibc-2.2.3/sysdeps/ieee754/flt-32/e_asinf.c --- glibc-2.2.2/sysdeps/ieee754/flt-32/e_asinf.c Tue Jul 13 16:57:40 1999 +++ glibc-2.2.3/sysdeps/ieee754/flt-32/e_asinf.c Tue Apr 17 08:17:33 2001 @@ -13,6 +13,12 @@ * ==================================================== */ +/* + Single precision expansion contributed by + Stephen L. Moshier +*/ + + #if defined(LIBM_SCCS) && !defined(lint) static char rcsid[] = "$NetBSD: e_asinf.c,v 1.5 1995/05/12 04:57:25 jtc Exp $"; #endif @@ -27,20 +33,19 @@ static float #endif one = 1.0000000000e+00, /* 0x3F800000 */ huge = 1.000e+30, -pio2_hi = 1.5707962513e+00, /* 0x3fc90fda */ -pio2_lo = 7.5497894159e-08, /* 0x33a22168 */ -pio4_hi = 7.8539818525e-01, /* 0x3f490fdb */ - /* coefficient for R(x^2) */ -pS0 = 1.6666667163e-01, /* 0x3e2aaaab */ -pS1 = -3.2556581497e-01, /* 0xbea6b090 */ -pS2 = 2.0121252537e-01, /* 0x3e4e0aa8 */ -pS3 = -4.0055535734e-02, /* 0xbd241146 */ -pS4 = 7.9153501429e-04, /* 0x3a4f7f04 */ -pS5 = 3.4793309169e-05, /* 0x3811ef08 */ -qS1 = -2.4033949375e+00, /* 0xc019d139 */ -qS2 = 2.0209457874e+00, /* 0x4001572d */ -qS3 = -6.8828397989e-01, /* 0xbf303361 */ -qS4 = 7.7038154006e-02; /* 0x3d9dc62e */ + +pio2_hi = 1.57079637050628662109375f, +pio2_lo = -4.37113900018624283e-8f, +pio4_hi = 0.785398185253143310546875f, + +/* asin x = x + x^3 p(x^2) + -0.5 <= x <= 0.5; + Peak relative error 4.8e-9 */ +p0 = 1.666675248e-1f, +p1 = 7.495297643e-2f, +p2 = 4.547037598e-2f, +p3 = 2.417951451e-2f, +p4 = 4.216630880e-2f; #ifdef __STDC__ float __ieee754_asinf(float x) @@ -63,30 +68,26 @@ qS4 = 7.7038154006e-02; /* 0x3d9dc62e * if(huge+x>one) return x;/* return x with inexact if x!=0*/ } else { t = x*x; - p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); - q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); - w = p/q; + w = t * (p0 + t * (p1 + t * (p2 + t * (p3 + t * p4)))); return x+x*w; } } /* 1> |x|>= 0.5 */ w = one-fabsf(x); - t = w*(float)0.5; - p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); - q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); + t = w*0.5f; + p = t * (p0 + t * (p1 + t * (p2 + t * (p3 + t * p4)))); s = __ieee754_sqrtf(t); if(ix>=0x3F79999A) { /* if |x| > 0.975 */ - w = p/q; - t = pio2_hi-((float)2.0*(s+s*w)-pio2_lo); + t = pio2_hi-(2.0f*(s+s*p)-pio2_lo); } else { int32_t iw; w = s; GET_FLOAT_WORD(iw,w); SET_FLOAT_WORD(w,iw&0xfffff000); c = (t-w*w)/(s+w); - r = p/q; - p = (float)2.0*s*r-(pio2_lo-(float)2.0*c); - q = pio4_hi-(float)2.0*w; + r = p; + p = 2.0f*s*r-(pio2_lo-2.0f*c); + q = pio4_hi-2.0f*w; t = pio4_hi-(p-q); } if(hx>0) return t; else return -t; diff -durpNa glibc-2.2.2/sysdeps/ieee754/flt-32/e_exp2f.c glibc-2.2.3/sysdeps/ieee754/flt-32/e_exp2f.c --- glibc-2.2.2/sysdeps/ieee754/flt-32/e_exp2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/flt-32/e_exp2f.c Sat Feb 17 08:48:20 2001 @@ -0,0 +1,128 @@ +/* Single-precision floating point 2^x. + Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Geoffrey Keating + + 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. */ + +/* The basic design here is from + Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical + Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., + 17 (1), March 1991, pp. 26-45. + It has been slightly modified to compute 2^x instead of e^x, and for + single-precision. + */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif +#include +#include +#include +#include +#include +#include +#include + +#include "t_exp2f.h" + +static const volatile float TWOM100 = 7.88860905e-31; +static const volatile float TWO127 = 1.7014118346e+38; + +float +__ieee754_exp2f (float x) +{ + static const float himark = (float) FLT_MAX_EXP; + static const float lomark = (float) (FLT_MIN_EXP - FLT_MANT_DIG - 1) - 1.0; + + /* Check for usual case. */ + if (isless (x, himark) && isgreater (x, lomark)) + { + static const float THREEp14 = 49152.0; + int tval, unsafe; + float rx, x22, result; + union ieee754_float ex2_u, scale_u; + fenv_t oldenv; + + feholdexcept (&oldenv); +#ifdef FE_TONEAREST + /* If we don't have this, it's too bad. */ + fesetround (FE_TONEAREST); +#endif + + /* 1. Argument reduction. + Choose integers ex, -128 <= t < 128, and some real + -1/512 <= x1 <= 1/512 so that + x = ex + t/512 + x1. + + First, calculate rx = ex + t/256. */ + rx = x + THREEp14; + rx -= THREEp14; + x -= rx; /* Compute x=x1. */ + /* Compute tval = (ex*256 + t)+128. + Now, t = (tval mod 256)-128 and ex=tval/256 [that's mod, NOT %; and + /-round-to-nearest not the usual c integer /]. */ + tval = (int) (rx * 256.0f + 128.0f); + + /* 2. Adjust for accurate table entry. + Find e so that + x = ex + t/256 + e + x2 + where -7e-4 < e < 7e-4, and + (float)(2^(t/256+e)) + is accurate to one part in 2^-64. */ + + /* 'tval & 255' is the same as 'tval%256' except that it's always + positive. + Compute x = x2. */ + x -= __exp2f_deltatable[tval & 255]; + + /* 3. Compute ex2 = 2^(t/255+e+ex). */ + ex2_u.f = __exp2f_atable[tval & 255]; + tval >>= 8; + unsafe = abs(tval) >= -FLT_MIN_EXP - 1; + ex2_u.ieee.exponent += tval >> unsafe; + scale_u.f = 1.0; + scale_u.ieee.exponent += tval - (tval >> unsafe); + + /* 4. Approximate 2^x2 - 1, using a second-degree polynomial, + with maximum error in [-2^-9 - 2^-14, 2^-9 + 2^-14] + less than 1.3e-10. */ + + x22 = (.24022656679f * x + .69314736128f) * ex2_u.f; + + /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ + fesetenv (&oldenv); + + result = x22 * x + ex2_u.f; + + if (!unsafe) + return result; + else + return result * scale_u.f; + } + /* Exceptional cases: */ + else if (isless (x, himark)) + { + if (__isinff (x)) + /* e^-inf == 0, with no error. */ + return 0; + else + /* Underflow */ + return TWOM100 * TWOM100; + } + else + /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ + return TWO127*x; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/flt-32/e_gammaf_r.c glibc-2.2.3/sysdeps/ieee754/flt-32/e_gammaf_r.c --- glibc-2.2.2/sysdeps/ieee754/flt-32/e_gammaf_r.c Thu Oct 21 09:14:39 1999 +++ glibc-2.2.3/sysdeps/ieee754/flt-32/e_gammaf_r.c Mon Mar 26 20:53:28 2001 @@ -1,5 +1,5 @@ /* Implementation of gamma function according to ISO C. - Copyright (C) 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -45,8 +45,11 @@ __ieee754_gammaf_r (float x, int *signga return (x - x) / (x - x); } if (hx == 0xff800000) - /* x == -Inf. According to ISO this is NaN. */ - return x - x; + { + /* x == -Inf. According to ISO this is NaN. */ + *signgamp = 0; + return x - x; + } /* XXX FIXME. */ return __ieee754_expf (__ieee754_lgammaf_r (x, signgamp)); diff -durpNa glibc-2.2.2/sysdeps/ieee754/flt-32/e_powf.c glibc-2.2.3/sysdeps/ieee754/flt-32/e_powf.c --- glibc-2.2.2/sysdeps/ieee754/flt-32/e_powf.c Tue Jul 13 16:58:47 1999 +++ glibc-2.2.3/sysdeps/ieee754/flt-32/e_powf.c Mon Mar 26 20:53:28 2001 @@ -76,6 +76,10 @@ ivln2_l = 7.0526075433e-06; /* 0x36eca /* y==zero: x**0 = 1 */ if(iy==0) return one; + /* x==+-1 */ + if(x == 1.0) return one; + if(x == -1.0 && isinf(y)) return one; + /* +-NaN return x+y */ if(ix > 0x7f800000 || iy > 0x7f800000) diff -durpNa glibc-2.2.2/sysdeps/ieee754/flt-32/s_exp2f.c glibc-2.2.3/sysdeps/ieee754/flt-32/s_exp2f.c --- glibc-2.2.2/sysdeps/ieee754/flt-32/s_exp2f.c Thu Jun 29 12:40:26 2000 +++ glibc-2.2.3/sysdeps/ieee754/flt-32/s_exp2f.c Wed Dec 31 16:00:00 1969 @@ -1,128 +0,0 @@ -/* Single-precision floating point 2^x. - Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - 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. */ - -/* The basic design here is from - Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical - Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., - 17 (1), March 1991, pp. 26-45. - It has been slightly modified to compute 2^x instead of e^x, and for - single-precision. - */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include - -#include "t_exp2f.h" - -static const volatile float TWOM100 = 7.88860905e-31; -static const volatile float TWO127 = 1.7014118346e+38; - -float -__ieee754_exp2f (float x) -{ - static const float himark = (float) FLT_MAX_EXP; - static const float lomark = (float) (FLT_MIN_EXP - FLT_MANT_DIG - 1) - 1.0; - - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - static const float THREEp14 = 49152.0; - int tval, unsafe; - float rx, x22, result; - union ieee754_float ex2_u, scale_u; - fenv_t oldenv; - - feholdexcept (&oldenv); -#ifdef FE_TONEAREST - /* If we don't have this, it's too bad. */ - fesetround (FE_TONEAREST); -#endif - - /* 1. Argument reduction. - Choose integers ex, -128 <= t < 128, and some real - -1/512 <= x1 <= 1/512 so that - x = ex + t/512 + x1. - - First, calculate rx = ex + t/256. */ - rx = x + THREEp14; - rx -= THREEp14; - x -= rx; /* Compute x=x1. */ - /* Compute tval = (ex*256 + t)+128. - Now, t = (tval mod 256)-128 and ex=tval/256 [that's mod, NOT %; and - /-round-to-nearest not the usual c integer /]. */ - tval = (int) (rx * 256.0f + 128.0f); - - /* 2. Adjust for accurate table entry. - Find e so that - x = ex + t/256 + e + x2 - where -7e-4 < e < 7e-4, and - (float)(2^(t/256+e)) - is accurate to one part in 2^-64. */ - - /* 'tval & 255' is the same as 'tval%256' except that it's always - positive. - Compute x = x2. */ - x -= __exp2f_deltatable[tval & 255]; - - /* 3. Compute ex2 = 2^(t/255+e+ex). */ - ex2_u.f = __exp2f_atable[tval & 255]; - tval >>= 8; - unsafe = abs(tval) >= -FLT_MIN_EXP - 1; - ex2_u.ieee.exponent += tval >> unsafe; - scale_u.f = 1.0; - scale_u.ieee.exponent += tval - (tval >> unsafe); - - /* 4. Approximate 2^x2 - 1, using a second-degree polynomial, - with maximum error in [-2^-9 - 2^-14, 2^-9 + 2^-14] - less than 1.3e-10. */ - - x22 = (.24022656679f * x + .69314736128f) * ex2_u.f; - - /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ - fesetenv (&oldenv); - - result = x22 * x + ex2_u.f; - - if (!unsafe) - return result; - else - return result * scale_u.f; - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (__isinff (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TWOM100 * TWOM100; - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO127*x; -} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-128/e_asinl.c glibc-2.2.3/sysdeps/ieee754/ldbl-128/e_asinl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-128/e_asinl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-128/e_asinl.c Fri Apr 20 08:48:37 2001 @@ -0,0 +1,248 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + Long double expansions contributed by + Stephen L. Moshier +*/ + +/* __ieee754_asin(x) + * Method : + * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... + * we approximate asin(x) on [0,0.5] by + * asin(x) = x + x*x^2*R(x^2) + * Between .5 and .625 the approximation is + * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) + * For x in [0.625,1] + * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) + * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; + * then for x>0.98 + * asin(x) = pi/2 - 2*(s+s*z*R(z)) + * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) + * For x<=0.98, let pio4_hi = pio2_hi/2, then + * f = hi part of s; + * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) + * and + * asin(x) = pi/2 - 2*(s+s*z*R(z)) + * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) + * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) + * + * Special cases: + * if x is NaN, return x itself; + * if |x|>1, return NaN with invalid signal. + * + */ + + +#include "math.h" +#include "math_private.h" +long double sqrtl (long double); + +#ifdef __STDC__ +static const long double +#else +static long double +#endif + one = 1.0L, + huge = 1.0e+4932L, + pio2_hi = 1.5707963267948966192313216916397514420986L, + pio2_lo = 4.3359050650618905123985220130216759843812E-35L, + pio4_hi = 7.8539816339744830961566084581987569936977E-1L, + + /* coefficient for R(x^2) */ + + /* asin(x) = x + x^3 pS(x^2) / qS(x^2) + 0 <= x <= 0.5 + peak relative error 1.9e-35 */ + pS0 = -8.358099012470680544198472400254596543711E2L, + pS1 = 3.674973957689619490312782828051860366493E3L, + pS2 = -6.730729094812979665807581609853656623219E3L, + pS3 = 6.643843795209060298375552684423454077633E3L, + pS4 = -3.817341990928606692235481812252049415993E3L, + pS5 = 1.284635388402653715636722822195716476156E3L, + pS6 = -2.410736125231549204856567737329112037867E2L, + pS7 = 2.219191969382402856557594215833622156220E1L, + pS8 = -7.249056260830627156600112195061001036533E-1L, + pS9 = 1.055923570937755300061509030361395604448E-3L, + + qS0 = -5.014859407482408326519083440151745519205E3L, + qS1 = 2.430653047950480068881028451580393430537E4L, + qS2 = -4.997904737193653607449250593976069726962E4L, + qS3 = 5.675712336110456923807959930107347511086E4L, + qS4 = -3.881523118339661268482937768522572588022E4L, + qS5 = 1.634202194895541569749717032234510811216E4L, + qS6 = -4.151452662440709301601820849901296953752E3L, + qS7 = 5.956050864057192019085175976175695342168E2L, + qS8 = -4.175375777334867025769346564600396877176E1L, + /* 1.000000000000000000000000000000000000000E0 */ + + /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) + -0.0625 <= x <= 0.0625 + peak relative error 3.3e-35 */ + rS0 = -5.619049346208901520945464704848780243887E0L, + rS1 = 4.460504162777731472539175700169871920352E1L, + rS2 = -1.317669505315409261479577040530751477488E2L, + rS3 = 1.626532582423661989632442410808596009227E2L, + rS4 = -3.144806644195158614904369445440583873264E1L, + rS5 = -9.806674443470740708765165604769099559553E1L, + rS6 = 5.708468492052010816555762842394927806920E1L, + rS7 = 1.396540499232262112248553357962639431922E1L, + rS8 = -1.126243289311910363001762058295832610344E1L, + rS9 = -4.956179821329901954211277873774472383512E-1L, + rS10 = 3.313227657082367169241333738391762525780E-1L, + + sS0 = -4.645814742084009935700221277307007679325E0L, + sS1 = 3.879074822457694323970438316317961918430E1L, + sS2 = -1.221986588013474694623973554726201001066E2L, + sS3 = 1.658821150347718105012079876756201905822E2L, + sS4 = -4.804379630977558197953176474426239748977E1L, + sS5 = -1.004296417397316948114344573811562952793E2L, + sS6 = 7.530281592861320234941101403870010111138E1L, + sS7 = 1.270735595411673647119592092304357226607E1L, + sS8 = -1.815144839646376500705105967064792930282E1L, + sS9 = -7.821597334910963922204235247786840828217E-2L, + /* 1.000000000000000000000000000000000000000E0 */ + + asinr5625 = 5.9740641664535021430381036628424864397707E-1L; + + + +#ifdef __STDC__ +long double +__ieee754_asinl (long double x) +#else +double +__ieee754_asinl (x) + long double x; +#endif +{ + long double t, w, p, q, c, r, s; + int32_t ix, sign, flag; + ieee854_long_double_shape_type u; + + flag = 0; + u.value = x; + sign = u.parts32.w0; + ix = sign & 0x7fffffff; + u.parts32.w0 = ix; /* |x| */ + if (ix >= 0x3fff0000) /* |x|>= 1 */ + { + if (ix == 0x3fff0000 + && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) + /* asin(1)=+-pi/2 with inexact */ + return x * pio2_hi + x * pio2_lo; + return (x - x) / (x - x); /* asin(|x|>1) is NaN */ + } + else if (ix < 0x3ffe0000) /* |x| < 0.5 */ + { + if (ix < 0x3fc60000) /* |x| < 2**-57 */ + { + if (huge + x > one) + return x; /* return x with inexact if x!=0 */ + } + else + { + t = x * x; + /* Mark to use pS, qS later on. */ + flag = 1; + } + } + else if (ix < 0x3ffe4000) /* 0.625 */ + { + t = u.value - 0.5625; + p = ((((((((((rS10 * t + + rS9) * t + + rS8) * t + + rS7) * t + + rS6) * t + + rS5) * t + + rS4) * t + + rS3) * t + + rS2) * t + + rS1) * t + + rS0) * t; + + q = ((((((((( t + + sS9) * t + + sS8) * t + + sS7) * t + + sS6) * t + + sS5) * t + + sS4) * t + + sS3) * t + + sS2) * t + + sS1) * t + + sS0; + t = asinr5625 + p / q; + if ((sign & 0x80000000) == 0) + return t; + else + return -t; + } + else + { + /* 1 > |x| >= 0.625 */ + w = one - u.value; + t = w * 0.5; + } + + p = (((((((((pS9 * t + + pS8) * t + + pS7) * t + + pS6) * t + + pS5) * t + + pS4) * t + + pS3) * t + + pS2) * t + + pS1) * t + + pS0) * t; + + q = (((((((( t + + qS8) * t + + qS7) * t + + qS6) * t + + qS5) * t + + qS4) * t + + qS3) * t + + qS2) * t + + qS1) * t + + qS0; + + if (flag) /* 2^-57 < |x| < 0.5 */ + { + w = p / q; + return x + x * w; + } + + s = __ieee754_sqrtl (t); + if (ix >= 0x3ffef333) /* |x| > 0.975 */ + { + w = p / q; + t = pio2_hi - (2.0 * (s + s * w) - pio2_lo); + } + else + { + u.value = s; + u.parts32.w3 = 0; + u.parts32.w2 = 0; + w = u.value; + c = (t - w * w) / (s + w); + r = p / q; + p = 2.0 * s * r - (pio2_lo - 2.0 * c); + q = pio4_hi - 2.0 * w; + t = pio4_hi - (p - q); + } + + if ((sign & 0x80000000) == 0) + return t; + else + return -t; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-128/e_logl.c glibc-2.2.3/sysdeps/ieee754/ldbl-128/e_logl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-128/e_logl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-128/e_logl.c Tue Apr 17 14:57:12 2001 @@ -0,0 +1,265 @@ +/* logll.c + * + * Natural logarithm for 128-bit long double precision. + * + * + * + * SYNOPSIS: + * + * long double x, y, logl(); + * + * y = logl( x ); + * + * + * + * DESCRIPTION: + * + * Returns the base e (2.718...) logarithm of x. + * + * The argument is separated into its exponent and fractional + * parts. Use of a lookup table increases the speed of the routine. + * The program uses logarithms tabulated at intervals of 1/128 to + * cover the domain from approximately 0.7 to 1.4. + * + * On the interval [-1/128, +1/128] the logarithm of 1+x is approximated by + * log(1+x) = x - 0.5 x^2 + x^3 P(x) . + * + * + * + * ACCURACY: + * + * Relative error: + * arithmetic domain # trials peak rms + * IEEE 0.875, 1.125 100000 1.2e-34 4.1e-35 + * IEEE 0.125, 8 100000 1.2e-34 4.1e-35 + * + * + * WARNING: + * + * This program uses integer operations on bit fields of floating-point + * numbers. It does not work with data structures other than the + * structure assumed. + * + */ + +/* Copyright 2001 by Stephen L. Moshier */ + +#include "math_private.h" + +/* log(1+x) = x - .5 x^2 + x^3 l(x) + -.0078125 <= x <= +.0078125 + peak relative error 1.2e-37 */ +static const long double +l3 = 3.333333333333333333333333333333336096926E-1L, +l4 = -2.499999999999999999999999999486853077002E-1L, +l5 = 1.999999999999999999999999998515277861905E-1L, +l6 = -1.666666666666666666666798448356171665678E-1L, +l7 = 1.428571428571428571428808945895490721564E-1L, +l8 = -1.249999999999999987884655626377588149000E-1L, +l9 = 1.111111111111111093947834982832456459186E-1L, +l10 = -1.000000000000532974938900317952530453248E-1L, +l11 = 9.090909090915566247008015301349979892689E-2L, +l12 = -8.333333211818065121250921925397567745734E-2L, +l13 = 7.692307559897661630807048686258659316091E-2L, +l14 = -7.144242754190814657241902218399056829264E-2L, +l15 = 6.668057591071739754844678883223432347481E-2L; + +/* Lookup table of ln(t) - (t-1) + t = 0.5 + (k+26)/128) + k = 0, ..., 91 */ +static const long double logtbl[92] = { +-5.5345593589352099112142921677820359632418E-2L, +-5.2108257402767124761784665198737642086148E-2L, +-4.8991686870576856279407775480686721935120E-2L, +-4.5993270766361228596215288742353061431071E-2L, +-4.3110481649613269682442058976885699556950E-2L, +-4.0340872319076331310838085093194799765520E-2L, +-3.7682072451780927439219005993827431503510E-2L, +-3.5131785416234343803903228503274262719586E-2L, +-3.2687785249045246292687241862699949178831E-2L, +-3.0347913785027239068190798397055267411813E-2L, +-2.8110077931525797884641940838507561326298E-2L, +-2.5972247078357715036426583294246819637618E-2L, +-2.3932450635346084858612873953407168217307E-2L, +-2.1988775689981395152022535153795155900240E-2L, +-2.0139364778244501615441044267387667496733E-2L, +-1.8382413762093794819267536615342902718324E-2L, +-1.6716169807550022358923589720001638093023E-2L, +-1.5138929457710992616226033183958974965355E-2L, +-1.3649036795397472900424896523305726435029E-2L, +-1.2244881690473465543308397998034325468152E-2L, +-1.0924898127200937840689817557742469105693E-2L, +-9.6875626072830301572839422532631079809328E-3L, +-8.5313926245226231463436209313499745894157E-3L, +-7.4549452072765973384933565912143044991706E-3L, +-6.4568155251217050991200599386801665681310E-3L, +-5.5356355563671005131126851708522185605193E-3L, +-4.6900728132525199028885749289712348829878E-3L, +-3.9188291218610470766469347968659624282519E-3L, +-3.2206394539524058873423550293617843896540E-3L, +-2.5942708080877805657374888909297113032132E-3L, +-2.0385211375711716729239156839929281289086E-3L, +-1.5522183228760777967376942769773768850872E-3L, +-1.1342191863606077520036253234446621373191E-3L, +-7.8340854719967065861624024730268350459991E-4L, +-4.9869831458030115699628274852562992756174E-4L, +-2.7902661731604211834685052867305795169688E-4L, +-1.2335696813916860754951146082826952093496E-4L, +-3.0677461025892873184042490943581654591817E-5L, +#define ZERO logtbl[38] + 0.0000000000000000000000000000000000000000E0L, +-3.0359557945051052537099938863236321874198E-5L, +-1.2081346403474584914595395755316412213151E-4L, +-2.7044071846562177120083903771008342059094E-4L, +-4.7834133324631162897179240322783590830326E-4L, +-7.4363569786340080624467487620270965403695E-4L, +-1.0654639687057968333207323853366578860679E-3L, +-1.4429854811877171341298062134712230604279E-3L, +-1.8753781835651574193938679595797367137975E-3L, +-2.3618380914922506054347222273705859653658E-3L, +-2.9015787624124743013946600163375853631299E-3L, +-3.4938307889254087318399313316921940859043E-3L, +-4.1378413103128673800485306215154712148146E-3L, +-4.8328735414488877044289435125365629849599E-3L, +-5.5782063183564351739381962360253116934243E-3L, +-6.3731336597098858051938306767880719015261E-3L, +-7.2169643436165454612058905294782949315193E-3L, +-8.1090214990427641365934846191367315083867E-3L, +-9.0486422112807274112838713105168375482480E-3L, +-1.0035177140880864314674126398350812606841E-2L, +-1.1067990155502102718064936259435676477423E-2L, +-1.2146457974158024928196575103115488672416E-2L, +-1.3269969823361415906628825374158424754308E-2L, +-1.4437927104692837124388550722759686270765E-2L, +-1.5649743073340777659901053944852735064621E-2L, +-1.6904842527181702880599758489058031645317E-2L, +-1.8202661505988007336096407340750378994209E-2L, +-1.9542647000370545390701192438691126552961E-2L, +-2.0924256670080119637427928803038530924742E-2L, +-2.2346958571309108496179613803760727786257E-2L, +-2.3810230892650362330447187267648486279460E-2L, +-2.5313561699385640380910474255652501521033E-2L, +-2.6856448685790244233704909690165496625399E-2L, +-2.8438398935154170008519274953860128449036E-2L, +-3.0058928687233090922411781058956589863039E-2L, +-3.1717563112854831855692484086486099896614E-2L, +-3.3413836095418743219397234253475252001090E-2L, +-3.5147290019036555862676702093393332533702E-2L, +-3.6917475563073933027920505457688955423688E-2L, +-3.8723951502862058660874073462456610731178E-2L, +-4.0566284516358241168330505467000838017425E-2L, +-4.2444048996543693813649967076598766917965E-2L, +-4.4356826869355401653098777649745233339196E-2L, +-4.6304207416957323121106944474331029996141E-2L, +-4.8285787106164123613318093945035804818364E-2L, +-5.0301169421838218987124461766244507342648E-2L, +-5.2349964705088137924875459464622098310997E-2L, +-5.4431789996103111613753440311680967840214E-2L, +-5.6546268881465384189752786409400404404794E-2L, +-5.8693031345788023909329239565012647817664E-2L, +-6.0871713627532018185577188079210189048340E-2L, +-6.3081958078862169742820420185833800925568E-2L, +-6.5323413029406789694910800219643791556918E-2L, +-6.7595732653791419081537811574227049288168E-2L +}; + +/* ln(2) = ln2a + ln2b with extended precision. */ +static const long double + ln2a = 6.93145751953125e-1L, + ln2b = 1.4286068203094172321214581765680755001344E-6L; + +long double +__ieee754_logl(long double x) +{ + long double z, y, w; + ieee854_long_double_shape_type u, t; + unsigned int m; + int k, e; + + u.value = x; + m = u.parts32.w0; + + /* Check for IEEE special cases. */ + k = m & 0x7fffffff; + /* log(0) = -infinity. */ + if ((k | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) + { + return -0.5L / ZERO; + } + /* log ( x < 0 ) = NaN */ + if (m & 0x80000000) + { + return (x - x) / ZERO; + } + /* log (infinity or NaN) */ + if (k >= 0x7fff0000) + { + return x + x; + } + + /* Extract exponent and reduce domain to 0.703125 <= u < 1.40625 */ + e = (int) (m >> 16) - (int) 0x3ffe; + m &= 0xffff; + u.parts32.w0 = m | 0x3ffe0000; + m |= 0x10000; + /* Find lookup table index k from high order bits of the significand. */ + if (m < 0x16800) + { + k = (m - 0xff00) >> 9; + /* t is the argument 0.5 + (k+26)/128 + of the nearest item to u in the lookup table. */ + t.parts32.w0 = 0x3fff0000 + (k << 9); + t.parts32.w1 = 0; + t.parts32.w2 = 0; + t.parts32.w3 = 0; + u.parts32.w0 += 0x10000; + e -= 1; + k += 64; + } + else + { + k = (m - 0xfe00) >> 10; + t.parts32.w0 = 0x3ffe0000 + (k << 10); + t.parts32.w1 = 0; + t.parts32.w2 = 0; + t.parts32.w3 = 0; + } + /* On this interval the table is not used due to cancellation error. */ + if ((x <= 1.0078125L) && (x >= 0.9921875L)) + { + z = x - 1.0L; + k = 64; + t.value = 1.0L; + e = 0; + } + else + { + /* log(u) = log( t u/t ) = log(t) + log(u/t) + log(t) is tabulated in the lookup table. + Express log(u/t) = log(1+z), where z = u/t - 1 = (u-t)/t. + cf. Cody & Waite. */ + z = (u.value - t.value) / t.value; + } + /* Series expansion of log(1+z). */ + w = z * z; + y = ((((((((((((l15 * z + + l14) * z + + l13) * z + + l12) * z + + l11) * z + + l10) * z + + l9) * z + + l8) * z + + l7) * z + + l6) * z + + l5) * z + + l4) * z + + l3) * z * w; + y -= 0.5 * w; + y += e * ln2b; /* Base 2 exponent offset times ln(2). */ + y += z; + y += logtbl[k-26]; /* log(t) - (t-1) */ + y += (t.value - 1.0L); + y += e * ln2a; + return y; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-128/k_tanl.c glibc-2.2.3/sysdeps/ieee754/ldbl-128/k_tanl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-128/k_tanl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-128/k_tanl.c Mon Apr 16 23:47:52 2001 @@ -0,0 +1,147 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + Long double expansions contributed by + Stephen L. Moshier +*/ + +/* __kernel_tanl( x, y, k ) + * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 + * Input x is assumed to be bounded by ~pi/4 in magnitude. + * Input y is the tail of x. + * Input k indicates whether tan (if k=1) or + * -1/tan (if k= -1) is returned. + * + * Algorithm + * 1. Since tan(-x) = -tan(x), we need only to consider positive x. + * 2. if x < 2^-57, return x with inexact if x!=0. + * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) + * on [0,0.67433]. + * + * Note: tan(x+y) = tan(x) + tan'(x)*y + * ~ tan(x) + (1+x*x)*y + * Therefore, for better accuracy in computing tan(x+y), let + * r = x^3 * R(x^2) + * then + * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) + * + * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then + * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) + * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) + */ + +#include "math.h" +#include "math_private.h" +#ifdef __STDC__ +static const long double +#else +static long double +#endif + one = 1.0L, + pio4hi = 7.8539816339744830961566084581987569936977E-1L, + pio4lo = 2.1679525325309452561992610065108379921906E-35L, + + /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2) + 0 <= x <= 0.6743316650390625 + Peak relative error 8.0e-36 */ + TH = 3.333333333333333333333333333333333333333E-1L, + T0 = -1.813014711743583437742363284336855889393E7L, + T1 = 1.320767960008972224312740075083259247618E6L, + T2 = -2.626775478255838182468651821863299023956E4L, + T3 = 1.764573356488504935415411383687150199315E2L, + T4 = -3.333267763822178690794678978979803526092E-1L, + + U0 = -1.359761033807687578306772463253710042010E8L, + U1 = 6.494370630656893175666729313065113194784E7L, + U2 = -4.180787672237927475505536849168729386782E6L, + U3 = 8.031643765106170040139966622980914621521E4L, + U4 = -5.323131271912475695157127875560667378597E2L; + /* 1.000000000000000000000000000000000000000E0 */ + + +#ifdef __STDC__ +long double +__kernel_tanl (long double x, long double y, int iy) +#else +long double +__kernel_tanl (x, y, iy) + long double x, y; + int iy; +#endif +{ + long double z, r, v, w, s; + int32_t ix, sign; + ieee854_long_double_shape_type u, u1; + + u.value = x; + ix = u.parts32.w0 & 0x7fffffff; + if (ix < 0x3fc60000) /* x < 2**-57 */ + { + if ((int) x == 0) + { /* generate inexact */ + if ((ix | u.parts32.w1 | u.parts32.w2 | u.parts32.w3 + | (iy + 1)) == 0) + return one / fabs (x); + else + return (iy == 1) ? x : -one / x; + } + } + if (ix >= 0x3ffe5942) /* |x| >= 0.6743316650390625 */ + { + if ((u.parts32.w0 & 0x80000000) != 0) + { + x = -x; + y = -y; + sign = -1; + } + else + sign = 1; + z = pio4hi - x; + w = pio4lo - y; + x = z + w; + y = 0.0; + } + z = x * x; + r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4))); + v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z)))); + r = r / v; + + s = z * x; + r = y + z * (s * r + y); + r += TH * s; + w = x + r; + if (ix >= 0x3ffe5942) + { + v = (long double) iy; + w = (v - 2.0 * (x - (w * w / (w + v) - r))); + if (sign < 0) + w = -w; + return w; + } + if (iy == 1) + return w; + else + { /* if allow error up to 2 ulp, + simply return -1.0/(x+r) here */ + /* compute -1.0/(x+r) accurately */ + u1.value = w; + u1.parts32.w2 = 0; + u1.parts32.w3 = 0; + v = r - (u1.value - x); /* u1+v = r+x */ + z = -1.0 / w; + u.value = z; + u.parts32.w2 = 0; + u.parts32.w3 = 0; + s = 1.0 + u.value * u1.value; + return u.value + z * (s + u.value * v); + } +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-128/s_atanl.c glibc-2.2.3/sysdeps/ieee754/ldbl-128/s_atanl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-128/s_atanl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-128/s_atanl.c Fri Apr 13 17:35:08 2001 @@ -0,0 +1,218 @@ +/* s_atanl.c + * + * Inverse circular tangent for 128-bit long double precision + * (arctangent) + * + * + * + * SYNOPSIS: + * + * long double x, y, atanl(); + * + * y = atanl( x ); + * + * + * + * DESCRIPTION: + * + * Returns radian angle between -pi/2 and +pi/2 whose tangent is x. + * + * The function uses a rational approximation of the form + * t + t^3 P(t^2)/Q(t^2), optimized for |t| < 0.09375. + * + * The argument is reduced using the identity + * arctan x - arctan u = arctan ((x-u)/(1 + ux)) + * and an 83-entry lookup table for arctan u, with u = 0, 1/8, ..., 10.25. + * Use of the table improves the execution speed of the routine. + * + * + * + * ACCURACY: + * + * Relative error: + * arithmetic domain # trials peak rms + * IEEE -19, 19 4e5 1.7e-34 5.4e-35 + * + * + * WARNING: + * + * This program uses integer operations on bit fields of floating-point + * numbers. It does not work with data structures other than the + * structure assumed. + * + */ + +/* Copyright 2001 by Stephen L. Moshier */ + +#include "math_private.h" + +/* arctan(k/8), k = 0, ..., 82 */ +static const long double atantbl[84] = { + 0.0000000000000000000000000000000000000000E0L, + 1.2435499454676143503135484916387102557317E-1L, /* arctan(0.125) */ + 2.4497866312686415417208248121127581091414E-1L, + 3.5877067027057222039592006392646049977698E-1L, + 4.6364760900080611621425623146121440202854E-1L, + 5.5859931534356243597150821640166127034645E-1L, + 6.4350110879328438680280922871732263804151E-1L, + 7.1882999962162450541701415152590465395142E-1L, + 7.8539816339744830961566084581987572104929E-1L, + 8.4415398611317100251784414827164750652594E-1L, + 8.9605538457134395617480071802993782702458E-1L, + 9.4200004037946366473793717053459358607166E-1L, + 9.8279372324732906798571061101466601449688E-1L, + 1.0191413442663497346383429170230636487744E0L, + 1.0516502125483736674598673120862998296302E0L, + 1.0808390005411683108871567292171998202703E0L, + 1.1071487177940905030170654601785370400700E0L, + 1.1309537439791604464709335155363278047493E0L, + 1.1525719972156675180401498626127513797495E0L, + 1.1722738811284763866005949441337046149712E0L, + 1.1902899496825317329277337748293183376012E0L, + 1.2068173702852525303955115800565576303133E0L, + 1.2220253232109896370417417439225704908830E0L, + 1.2360594894780819419094519711090786987027E0L, + 1.2490457723982544258299170772810901230778E0L, + 1.2610933822524404193139408812473357720101E0L, + 1.2722973952087173412961937498224804940684E0L, + 1.2827408797442707473628852511364955306249E0L, + 1.2924966677897852679030914214070816845853E0L, + 1.3016288340091961438047858503666855921414E0L, + 1.3101939350475556342564376891719053122733E0L, + 1.3182420510168370498593302023271362531155E0L, + 1.3258176636680324650592392104284756311844E0L, + 1.3329603993374458675538498697331558093700E0L, + 1.3397056595989995393283037525895557411039E0L, + 1.3460851583802539310489409282517796256512E0L, + 1.3521273809209546571891479413898128509842E0L, + 1.3578579772154994751124898859640585287459E0L, + 1.3633001003596939542892985278250991189943E0L, + 1.3684746984165928776366381936948529556191E0L, + 1.3734007669450158608612719264449611486510E0L, + 1.3780955681325110444536609641291551522494E0L, + 1.3825748214901258580599674177685685125566E0L, + 1.3868528702577214543289381097042486034883E0L, + 1.3909428270024183486427686943836432060856E0L, + 1.3948567013423687823948122092044222644895E0L, + 1.3986055122719575950126700816114282335732E0L, + 1.4021993871854670105330304794336492676944E0L, + 1.4056476493802697809521934019958079881002E0L, + 1.4089588955564736949699075250792569287156E0L, + 1.4121410646084952153676136718584891599630E0L, + 1.4152014988178669079462550975833894394929E0L, + 1.4181469983996314594038603039700989523716E0L, + 1.4209838702219992566633046424614466661176E0L, + 1.4237179714064941189018190466107297503086E0L, + 1.4263547484202526397918060597281265695725E0L, + 1.4288992721907326964184700745371983590908E0L, + 1.4313562697035588982240194668401779312122E0L, + 1.4337301524847089866404719096698873648610E0L, + 1.4360250423171655234964275337155008780675E0L, + 1.4382447944982225979614042479354815855386E0L, + 1.4403930189057632173997301031392126865694E0L, + 1.4424730991091018200252920599377292525125E0L, + 1.4444882097316563655148453598508037025938E0L, + 1.4464413322481351841999668424758804165254E0L, + 1.4483352693775551917970437843145232637695E0L, + 1.4501726582147939000905940595923466567576E0L, + 1.4519559822271314199339700039142990228105E0L, + 1.4536875822280323362423034480994649820285E0L, + 1.4553696664279718992423082296859928222270E0L, + 1.4570043196511885530074841089245667532358E0L, + 1.4585935117976422128825857356750737658039E0L, + 1.4601391056210009726721818194296893361233E0L, + 1.4616428638860188872060496086383008594310E0L, + 1.4631064559620759326975975316301202111560E0L, + 1.4645314639038178118428450961503371619177E0L, + 1.4659193880646627234129855241049975398470E0L, + 1.4672716522843522691530527207287398276197E0L, + 1.4685896086876430842559640450619880951144E0L, + 1.4698745421276027686510391411132998919794E0L, + 1.4711276743037345918528755717617308518553E0L, + 1.4723501675822635384916444186631899205983E0L, + 1.4735431285433308455179928682541563973416E0L, /* arctan(10.25) */ + 1.5707963267948966192313216916397514420986E0L /* pi/2 */ +}; + + +/* arctan t = t + t^3 p(t^2) / q(t^2) + |t| <= 0.09375 + peak relative error 5.3e-37 */ + +static const long double + p0 = -4.283708356338736809269381409828726405572E1L, + p1 = -8.636132499244548540964557273544599863825E1L, + p2 = -5.713554848244551350855604111031839613216E1L, + p3 = -1.371405711877433266573835355036413750118E1L, + p4 = -8.638214309119210906997318946650189640184E-1L, + q0 = 1.285112506901621042780814422948906537959E2L, + q1 = 3.361907253914337187957855834229672347089E2L, + q2 = 3.180448303864130128268191635189365331680E2L, + q3 = 1.307244136980865800160844625025280344686E2L, + q4 = 2.173623741810414221251136181221172551416E1L; + /* q5 = 1.000000000000000000000000000000000000000E0 */ + + +long double +__atanl (long double x) +{ + int k, sign; + long double t, u, p, q; + ieee854_long_double_shape_type s; + + s.value = x; + k = s.parts32.w0; + if (k & 0x80000000) + sign = 1; + else + sign = 0; + + /* Check for IEEE special cases. */ + k &= 0x7fffffff; + if (k >= 0x7fff0000) + { + /* NaN. */ + if ((k & 0xffff) | s.parts32.w1 | s.parts32.w2 | s.parts32.w3) + return (x + x); + + /* Infinity. */ + if (sign) + return -atantbl[83]; + else + return atantbl[83]; + } + + if (sign) + x = -x; + + if (k >= 0x40024800) /* 10.25 */ + { + k = 83; + t = -1.0/x; + } + else + { + /* Index of nearest table element. + Roundoff to integer is asymmetrical to avoid cancellation when t < 0 + (cf. fdlibm). */ + k = 8.0 * x + 0.25; + u = 0.125 * k; + /* Small arctan argument. */ + t = (x - u) / (1.0 + x * u); + } + + /* Arctan of small argument t. */ + u = t * t; + p = ((((p4 * u) + p3) * u + p2) * u + p1) * u + p0; + q = ((((u + q4) * u + q3) * u + q2) * u + q1) * u + q0; + u = t * u * p / q + t; + + /* arctan x = arctan u + arctan t */ + u = atantbl[k] + u; + if (sign) + return (-u); + else + return u; +} + +weak_alias (__atanl, atanl) diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_asinl.c glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_asinl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_asinl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_asinl.c Thu Apr 5 10:32:18 2001 @@ -0,0 +1,144 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + Long double expansions contributed by + Stephen L. Moshier +*/ + +/* __ieee754_asin(x) + * Method : + * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... + * we approximate asin(x) on [0,0.5] by + * asin(x) = x + x*x^2*R(x^2) + * + * For x in [0.5,1] + * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) + * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; + * then for x>0.98 + * asin(x) = pi/2 - 2*(s+s*z*R(z)) + * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) + * For x<=0.98, let pio4_hi = pio2_hi/2, then + * f = hi part of s; + * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) + * and + * asin(x) = pi/2 - 2*(s+s*z*R(z)) + * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) + * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) + * + * Special cases: + * if x is NaN, return x itself; + * if |x|>1, return NaN with invalid signal. + * + */ + + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static const long double +#else +static long double +#endif + one = 1.0L, + huge = 1.0e+4932L, + pio2_hi = 1.5707963267948966192021943710788178805159986950457096099853515625L, + pio2_lo = 2.9127320560933561582586004641843300502121E-20L, + pio4_hi = 7.8539816339744830960109718553940894025800E-1L, + + /* coefficient for R(x^2) */ + + /* asin(x) = x + x^3 pS(x^2) / qS(x^2) + 0 <= x <= 0.5 + peak relative error 1.9e-21 */ + pS0 = -1.008714657938491626019651170502036851607E1L, + pS1 = 2.331460313214179572063441834101394865259E1L, + pS2 = -1.863169762159016144159202387315381830227E1L, + pS3 = 5.930399351579141771077475766877674661747E0L, + pS4 = -6.121291917696920296944056882932695185001E-1L, + pS5 = 3.776934006243367487161248678019350338383E-3L, + + qS0 = -6.052287947630949712886794360635592886517E1L, + qS1 = 1.671229145571899593737596543114258558503E2L, + qS2 = -1.707840117062586426144397688315411324388E2L, + qS3 = 7.870295154902110425886636075950077640623E1L, + qS4 = -1.568433562487314651121702982333303458814E1L; + /* 1.000000000000000000000000000000000000000E0 */ + +#ifdef __STDC__ +long double +__ieee754_asinl (long double x) +#else +double +__ieee754_asinl (x) + long double x; +#endif +{ + long double t, w, p, q, c, r, s; + int32_t ix; + u_int32_t se, i0, i1, k; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + ix = (ix << 16) | (i0 >> 16); + if (ix >= 0x3fff8000) + { /* |x|>= 1 */ + if (ix == 0x3fff8000 && ((i0 - 0x80000000) | i1) == 0) + /* asin(1)=+-pi/2 with inexact */ + return x * pio2_hi + x * pio2_lo; + return (x - x) / (x - x); /* asin(|x|>1) is NaN */ + } + else if (ix < 0x3ffe8000) + { /* |x|<0.5 */ + if (ix < 0x3fde8000) + { /* if |x| < 2**-33 */ + if (huge + x > one) + return x; /* return x with inexact if x!=0 */ + } + else + { + t = x * x; + p = + t * (pS0 + + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5))))); + q = qS0 + t * (qS1 + t * (qS2 + t * (qS3 + t * (qS4 + t)))); + w = p / q; + return x + x * w; + } + } + /* 1> |x|>= 0.5 */ + w = one - fabsl (x); + t = w * 0.5; + p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5))))); + q = qS0 + t * (qS1 + t * (qS2 + t * (qS3 + t * (qS4 + t)))); + s = __ieee754_sqrtl (t); + if (ix >= 0x3ffef999) + { /* if |x| > 0.975 */ + w = p / q; + t = pio2_hi - (2.0 * (s + s * w) - pio2_lo); + } + else + { + GET_LDOUBLE_WORDS (k, i0, i1, s); + i1 = 0; + SET_LDOUBLE_WORDS (w,k,i0,i1); + c = (t - w * w) / (s + w); + r = p / q; + p = 2.0 * s * r - (pio2_lo - 2.0 * c); + q = pio4_hi - 2.0 * w; + t = pio4_hi - (p - q); + } + if ((se & 0x8000) == 0) + return t; + else + return -t; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_gammal_r.c glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_gammal_r.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_gammal_r.c Tue Jul 13 17:11:32 1999 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_gammal_r.c Mon Mar 26 20:53:28 2001 @@ -1,5 +1,5 @@ /* Implementation of gamma function according to ISO C. - Copyright (C) 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -38,7 +38,16 @@ __ieee754_gammal_r (long double x, int * *signgamp = 0; return x / x; } - if ((hx & 0x8000) != 0 && (hx & 0x7fff) != 0x7fff && __rintl (x) == x) + if (es == 0xffffffff && ((hx & 0x7fffffff) | lx) == 0) + { + /* x == -Inf. According to ISO this is NaN. */ + *signgamp = 0; + return x - x; + } + if ((es & 0x7fff) == 0x7fff && ((hx & 0x7fffffff) | lx) != 0) + /* NaN, return it. */ + return x; + if ((es & 0x8000) != 0 && x < 0xffffffff && __rintl (x) == x) { /* Return value for integer x < 0 is NaN with invalid exception. */ *signgamp = 0; diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_j1l.c glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_j1l.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_j1l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_j1l.c Sat Apr 7 14:02:38 2001 @@ -0,0 +1,633 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Long double expansions contributed by + Stephen L. Moshier */ + +/* __ieee754_j1(x), __ieee754_y1(x) + * Bessel function of the first and second kinds of order zero. + * Method -- j1(x): + * 1. For tiny x, we use j1(x) = x/2 - x^3/16 + x^5/384 - ... + * 2. Reduce x to |x| since j1(x)=-j1(-x), and + * for x in (0,2) + * j1(x) = x/2 + x*z*R0/S0, where z = x*x; + * for x in (2,inf) + * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x1)-q1(x)*sin(x1)) + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x1)+q1(x)*cos(x1)) + * where x1 = x-3*pi/4. It is better to compute sin(x1),cos(x1) + * as follow: + * cos(x1) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) + * = 1/sqrt(2) * (sin(x) - cos(x)) + * sin(x1) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) + * = -1/sqrt(2) * (sin(x) + cos(x)) + * (To avoid cancellation, use + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + * to compute the worse one.) + * + * 3 Special cases + * j1(nan)= nan + * j1(0) = 0 + * j1(inf) = 0 + * + * Method -- y1(x): + * 1. screen out x<=0 cases: y1(0)=-inf, y1(x<0)=NaN + * 2. For x<2. + * Since + * y1(x) = 2/pi*(j1(x)*(ln(x/2)+Euler)-1/x-x/2+5/64*x^3-...) + * therefore y1(x)-2/pi*j1(x)*ln(x)-1/x is an odd function. + * We use the following function to approximate y1, + * y1(x) = x*U(z)/V(z) + (2/pi)*(j1(x)*ln(x)-1/x), z= x^2 + * Note: For tiny x, 1/x dominate y1 and hence + * y1(tiny) = -2/pi/tiny + * 3. For x>=2. + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x1)+q1(x)*cos(x1)) + * where x1 = x-3*pi/4. It is better to compute sin(x1),cos(x1) + * by method mentioned above. + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static long double pone (long double), qone (long double); +#else +static long double pone (), qone (); +#endif + +#ifdef __STDC__ +static const long double +#else +static long double +#endif + huge = 1e4930L, + one = 1.0L, + invsqrtpi = 5.6418958354775628694807945156077258584405e-1L, + tpi = 6.3661977236758134307553505349005744813784e-1L, + + /* J1(x) = .5 x + x x^2 R(x^2) / S(x^2) + 0 <= x <= 2 + Peak relative error 4.5e-21 */ +R[5] = { + -9.647406112428107954753770469290757756814E7L, + 2.686288565865230690166454005558203955564E6L, + -3.689682683905671185891885948692283776081E4L, + 2.195031194229176602851429567792676658146E2L, + -5.124499848728030297902028238597308971319E-1L, +}, + + S[4] = +{ + 1.543584977988497274437410333029029035089E9L, + 2.133542369567701244002565983150952549520E7L, + 1.394077011298227346483732156167414670520E5L, + 5.252401789085732428842871556112108446506E2L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + +#ifdef __STDC__ +static const long double zero = 0.0; +#else +static long double zero = 0.0; +#endif + + +#ifdef __STDC__ +long double +__ieee754_j1l (long double x) +#else +long double +__ieee754_j1l (x) + long double x; +#endif +{ + long double z, c, r, s, ss, cc, u, v, y; + int32_t ix; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + if (ix >= 0x7fff) + return one / x; + y = fabsl (x); + if (ix >= 0x4000) + { /* |x| >= 2.0 */ + __sincosl (y, &s, &c); + ss = -s - c; + cc = s - c; + if (ix < 0x7ffe) + { /* make sure y+y not overflow */ + z = __cosl (y + y); + if ((s * c) > zero) + cc = z / ss; + else + ss = z / cc; + } + /* + * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x) + * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x) + */ + if (ix > 0x4080) + z = (invsqrtpi * cc) / __ieee754_sqrtl (y); + else + { + u = pone (y); + v = qone (y); + z = invsqrtpi * (u * cc - v * ss) / __ieee754_sqrtl (y); + } + if (se & 0x8000) + return -z; + else + return z; + } + if (ix < 0x3fde) /* |x| < 2^-33 */ + { + if (huge + x > one) + return 0.5 * x; /* inexact if x!=0 necessary */ + } + z = x * x; + r = z * (R[0] + z * (R[1]+ z * (R[2] + z * (R[3] + z * R[4])))); + s = S[0] + z * (S[1] + z * (S[2] + z * (S[3] + z))); + r *= x; + return (x * 0.5 + r / s); +} + + +/* Y1(x) = 2/pi * (log(x) * j1(x) - 1/x) + x R(x^2) + 0 <= x <= 2 + Peak relative error 2.3e-23 */ +#ifdef __STDC__ +static const long double U0[6] = { +#else +static long double U0[6] = { +#endif + -5.908077186259914699178903164682444848615E10L, + 1.546219327181478013495975514375773435962E10L, + -6.438303331169223128870035584107053228235E8L, + 9.708540045657182600665968063824819371216E6L, + -6.138043997084355564619377183564196265471E4L, + 1.418503228220927321096904291501161800215E2L, +}; +#ifdef __STDC__ +static const long double V0[5] = { +#else +static long double V0[5] = { +#endif + 3.013447341682896694781964795373783679861E11L, + 4.669546565705981649470005402243136124523E9L, + 3.595056091631351184676890179233695857260E7L, + 1.761554028569108722903944659933744317994E5L, + 5.668480419646516568875555062047234534863E2L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + + +#ifdef __STDC__ +long double +__ieee754_y1l (long double x) +#else +long double +__ieee754_y1l (x) + long double x; +#endif +{ + long double z, s, c, ss, cc, u, v; + int32_t ix; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */ + if (se & 0x8000) + return zero / zero; + if (ix >= 0x7fff) + return one / (x + x * x); + if ((i0 | i1) == 0) + return -one / zero; + if (ix >= 0x4000) + { /* |x| >= 2.0 */ + __sincosl (x, &s, &c); + ss = -s - c; + cc = s - c; + if (ix < 0x7fe00000) + { /* make sure x+x not overflow */ + z = __cosl (x + x); + if ((s * c) > zero) + cc = z / ss; + else + ss = z / cc; + } + /* y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x0)+q1(x)*cos(x0)) + * where x0 = x-3pi/4 + * Better formula: + * cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) + * = 1/sqrt(2) * (sin(x) - cos(x)) + * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) + * = -1/sqrt(2) * (cos(x) + sin(x)) + * To avoid cancellation, use + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + * to compute the worse one. + */ + if (ix > 0x4080) + z = (invsqrtpi * ss) / __ieee754_sqrtl (x); + else + { + u = pone (x); + v = qone (x); + z = invsqrtpi * (u * ss + v * cc) / __ieee754_sqrtl (x); + } + return z; + } + if (ix <= 0x3fbe) + { /* x < 2**-65 */ + return (-tpi / x); + } + z = x * x; + u = U0[0] + z * (U0[1] + z * (U0[2] + z * (U0[3] + z * (U0[4] + z * U0[5])))); + v = V0[0] + z * (V0[1] + z * (V0[2] + z * (V0[3] + z * (V0[4] + z)))); + return (x * (u / v) + + tpi * (__ieee754_j1l (x) * __ieee754_logl (x) - one / x)); +} + + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + */ + +/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) + P1(x) = 1 + z^2 R(z^2), z=1/x + 8 <= x <= inf (0 <= z <= 0.125) + Peak relative error 5.2e-22 */ + +#ifdef __STDC__ +static const long double pr8[7] = { +#else +static long double pr8[7] = { +#endif + 8.402048819032978959298664869941375143163E-9L, + 1.813743245316438056192649247507255996036E-6L, + 1.260704554112906152344932388588243836276E-4L, + 3.439294839869103014614229832700986965110E-3L, + 3.576910849712074184504430254290179501209E-2L, + 1.131111483254318243139953003461511308672E-1L, + 4.480715825681029711521286449131671880953E-2L, +}; +#ifdef __STDC__ +static const long double ps8[6] = { +#else +static long double ps8[6] = { +#endif + 7.169748325574809484893888315707824924354E-8L, + 1.556549720596672576431813934184403614817E-5L, + 1.094540125521337139209062035774174565882E-3L, + 3.060978962596642798560894375281428805840E-2L, + 3.374146536087205506032643098619414507024E-1L, + 1.253830208588979001991901126393231302559E0L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + +/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) + P1(x) = 1 + z^2 R(z^2), z=1/x + 4.54541015625 <= x <= 8 + Peak relative error 7.7e-22 */ +#ifdef __STDC__ +static const long double pr5[7] = { +#else +static long double pr5[7] = { +#endif + 4.318486887948814529950980396300969247900E-7L, + 4.715341880798817230333360497524173929315E-5L, + 1.642719430496086618401091544113220340094E-3L, + 2.228688005300803935928733750456396149104E-2L, + 1.142773760804150921573259605730018327162E-1L, + 1.755576530055079253910829652698703791957E-1L, + 3.218803858282095929559165965353784980613E-2L, +}; +#ifdef __STDC__ +static const long double ps5[6] = { +#else +static long double ps5[6] = { +#endif + 3.685108812227721334719884358034713967557E-6L, + 4.069102509511177498808856515005792027639E-4L, + 1.449728676496155025507893322405597039816E-2L, + 2.058869213229520086582695850441194363103E-1L, + 1.164890985918737148968424972072751066553E0L, + 2.274776933457009446573027260373361586841E0L, + /* 1.000000000000000000000000000000000000000E0L,*/ +}; + +/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) + P1(x) = 1 + z^2 R(z^2), z=1/x + 2.85711669921875 <= x <= 4.54541015625 + Peak relative error 6.5e-21 */ +#ifdef __STDC__ +static const long double pr3[7] = { +#else +static long double pr3[7] = { +#endif + 1.265251153957366716825382654273326407972E-5L, + 8.031057269201324914127680782288352574567E-4L, + 1.581648121115028333661412169396282881035E-2L, + 1.179534658087796321928362981518645033967E-1L, + 3.227936912780465219246440724502790727866E-1L, + 2.559223765418386621748404398017602935764E-1L, + 2.277136933287817911091370397134882441046E-2L, +}; +#ifdef __STDC__ +static const long double ps3[6] = { +#else +static long double ps3[6] = { +#endif + 1.079681071833391818661952793568345057548E-4L, + 6.986017817100477138417481463810841529026E-3L, + 1.429403701146942509913198539100230540503E-1L, + 1.148392024337075609460312658938700765074E0L, + 3.643663015091248720208251490291968840882E0L, + 3.990702269032018282145100741746633960737E0L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + +/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) + P1(x) = 1 + z^2 R(z^2), z=1/x + 2 <= x <= 2.85711669921875 + Peak relative error 3.5e-21 */ +#ifdef __STDC__ +static const long double pr2[7] = { +#else +static long double pr2[7] = { +#endif + 2.795623248568412225239401141338714516445E-4L, + 1.092578168441856711925254839815430061135E-2L, + 1.278024620468953761154963591853679640560E-1L, + 5.469680473691500673112904286228351988583E-1L, + 8.313769490922351300461498619045639016059E-1L, + 3.544176317308370086415403567097130611468E-1L, + 1.604142674802373041247957048801599740644E-2L, +}; +#ifdef __STDC__ +static const long double ps2[6] = { +#else +static long double ps2[6] = { +#endif + 2.385605161555183386205027000675875235980E-3L, + 9.616778294482695283928617708206967248579E-2L, + 1.195215570959693572089824415393951258510E0L, + 5.718412857897054829999458736064922974662E0L, + 1.065626298505499086386584642761602177568E1L, + 6.809140730053382188468983548092322151791E0L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + + +#ifdef __STDC__ +static long double +pone (long double x) +#else +static long double +pone (x) + long double x; +#endif +{ +#ifdef __STDC__ + const long double *p, *q; +#else + long double *p, *q; +#endif + long double z, r, s; + int32_t ix; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + if (ix >= 0x4002) /* x >= 8 */ + { + p = pr8; + q = ps8; + } + else + { + i1 = (ix << 16) | (i0 >> 16); + if (i1 >= 0x40019174) /* x >= 4.54541015625 */ + { + p = pr5; + q = ps5; + } + else if (i1 >= 0x4000b6db) /* x >= 2.85711669921875 */ + { + p = pr3; + q = ps3; + } + else if (ix >= 0x4000) /* x better be >= 2 */ + { + p = pr2; + q = ps2; + } + } + z = one / (x * x); + r = p[0] + z * (p[1] + + z * (p[2] + z * (p[3] + z * (p[4] + z * (p[5] + z * p[6]))))); + s = q[0] + z * (q[1] + z * (q[2] + z * (q[3] + z * (q[4] + z * (q[5] + z))))); + return one + z * r / s; +} + + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + */ + +/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), + Q1(x) = z(.375 + z^2 R(z^2)), z=1/x + 8 <= x <= inf + Peak relative error 8.3e-22 */ + +#ifdef __STDC__ +static const long double qr8[7] = { +#else +static long double qr8[7] = { +#endif + -5.691925079044209246015366919809404457380E-10L, + -1.632587664706999307871963065396218379137E-7L, + -1.577424682764651970003637263552027114600E-5L, + -6.377627959241053914770158336842725291713E-4L, + -1.087408516779972735197277149494929568768E-2L, + -6.854943629378084419631926076882330494217E-2L, + -1.055448290469180032312893377152490183203E-1L, +}; +#ifdef __STDC__ +static const long double qs8[7] = { +#else +static long double qs8[7] = { +#endif + 5.550982172325019811119223916998393907513E-9L, + 1.607188366646736068460131091130644192244E-6L, + 1.580792530091386496626494138334505893599E-4L, + 6.617859900815747303032860443855006056595E-3L, + 1.212840547336984859952597488863037659161E-1L, + 9.017885953937234900458186716154005541075E-1L, + 2.201114489712243262000939120146436167178E0L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + +/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), + Q1(x) = z(.375 + z^2 R(z^2)), z=1/x + 4.54541015625 <= x <= 8 + Peak relative error 4.1e-22 */ +#ifdef __STDC__ +static const long double qr5[7] = { +#else +static long double qr5[7] = { +#endif + -6.719134139179190546324213696633564965983E-8L, + -9.467871458774950479909851595678622044140E-6L, + -4.429341875348286176950914275723051452838E-4L, + -8.539898021757342531563866270278505014487E-3L, + -6.818691805848737010422337101409276287170E-2L, + -1.964432669771684034858848142418228214855E-1L, + -1.333896496989238600119596538299938520726E-1L, +}; +#ifdef __STDC__ +static const long double qs5[7] = { +#else +static long double qs5[7] = { +#endif + 6.552755584474634766937589285426911075101E-7L, + 9.410814032118155978663509073200494000589E-5L, + 4.561677087286518359461609153655021253238E-3L, + 9.397742096177905170800336715661091535805E-2L, + 8.518538116671013902180962914473967738771E-1L, + 3.177729183645800174212539541058292579009E0L, + 4.006745668510308096259753538973038902990E0L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + +/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), + Q1(x) = z(.375 + z^2 R(z^2)), z=1/x + 2.85711669921875 <= x <= 4.54541015625 + Peak relative error 2.2e-21 */ +#ifdef __STDC__ +static const long double qr3[7] = { +#else +static long double qr3[7] = { +#endif + -3.618746299358445926506719188614570588404E-6L, + -2.951146018465419674063882650970344502798E-4L, + -7.728518171262562194043409753656506795258E-3L, + -8.058010968753999435006488158237984014883E-2L, + -3.356232856677966691703904770937143483472E-1L, + -4.858192581793118040782557808823460276452E-1L, + -1.592399251246473643510898335746432479373E-1L, +}; +#ifdef __STDC__ +static const long double qs3[7] = { +#else +static long double qs3[7] = { +#endif + 3.529139957987837084554591421329876744262E-5L, + 2.973602667215766676998703687065066180115E-3L, + 8.273534546240864308494062287908662592100E-2L, + 9.613359842126507198241321110649974032726E-1L, + 4.853923697093974370118387947065402707519E0L, + 1.002671608961669247462020977417828796933E1L, + 7.028927383922483728931327850683151410267E0L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + +/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), + Q1(x) = z(.375 + z^2 R(z^2)), z=1/x + 2 <= x <= 2.85711669921875 + Peak relative error 6.9e-22 */ +#ifdef __STDC__ +static const long double qr2[7] = { +#else +static long double qr2[7] = { +#endif + -1.372751603025230017220666013816502528318E-4L, + -6.879190253347766576229143006767218972834E-3L, + -1.061253572090925414598304855316280077828E-1L, + -6.262164224345471241219408329354943337214E-1L, + -1.423149636514768476376254324731437473915E0L, + -1.087955310491078933531734062917489870754E0L, + -1.826821119773182847861406108689273719137E-1L, +}; +#ifdef __STDC__ +static const long double qs2[7] = { +#else +static long double qs2[7] = { +#endif + 1.338768933634451601814048220627185324007E-3L, + 7.071099998918497559736318523932241901810E-2L, + 1.200511429784048632105295629933382142221E0L, + 8.327301713640367079030141077172031825276E0L, + 2.468479301872299311658145549931764426840E1L, + 2.961179686096262083509383820557051621644E1L, + 1.201402313144305153005639494661767354977E1L, + /* 1.000000000000000000000000000000000000000E0L, */ +}; + + +#ifdef __STDC__ +static long double +qone (long double x) +#else +static long double +qone (x) + long double x; +#endif +{ +#ifdef __STDC__ + const long double *p, *q; +#else + long double *p, *q; +#endif + static long double s, r, z; + int32_t ix; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + if (ix >= 0x4002) /* x >= 8 */ + { + p = qr8; + q = qs8; + } + else + { + i1 = (ix << 16) | (i0 >> 16); + if (i1 >= 0x40019174) /* x >= 4.54541015625 */ + { + p = qr5; + q = qs5; + } + else if (i1 >= 0x4000b6db) /* x >= 2.85711669921875 */ + { + p = qr3; + q = qs3; + } + else if (ix >= 0x4000) /* x better be >= 2 */ + { + p = qr2; + q = qs2; + } + } + z = one / (x * x); + r = + p[0] + z * (p[1] + + z * (p[2] + z * (p[3] + z * (p[4] + z * (p[5] + z * p[6]))))); + s = + q[0] + z * (q[1] + + z * (q[2] + + z * (q[3] + z * (q[4] + z * (q[5] + z * (q[6] + z)))))); + return (.375 + z * r / s) / x; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_jnl.c glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_jnl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_jnl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_jnl.c Mon Feb 26 12:19:07 2001 @@ -0,0 +1,368 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Modifications for long double contributed by + Stephen L. Moshier */ + +/* + * __ieee754_jn(n, x), __ieee754_yn(n, x) + * floating point Bessel's function of the 1st and 2nd kind + * of order n + * + * Special cases: + * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; + * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. + * Note 2. About jn(n,x), yn(n,x) + * For n=0, j0(x) is called, + * for n=1, j1(x) is called, + * for nx, a continued fraction approximation to + * j(n,x)/j(n-1,x) is evaluated and then backward + * recursion is used starting from a supposed value + * for j(n,x). The resulting value of j(0,x) is + * compared with the actual value to correct the + * supposed value of j(n,x). + * + * yn(n,x) is similar in all respects, except + * that forward recursion is used for all + * values of n>1. + * + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static const long double +#else +static long double +#endif + invsqrtpi = 5.64189583547756286948079e-1L, two = 2.0e0L, one = 1.0e0L; + +#ifdef __STDC__ +static const long double zero = 0.0L; +#else +static long double zero = 0.0L; +#endif + +#ifdef __STDC__ +long double +__ieee754_jnl (int n, long double x) +#else +long double +__ieee754_jnl (n, x) + int n; + long double x; +#endif +{ + u_int32_t se, i0, i1; + int32_t i, ix, sgn; + long double a, b, temp, di; + long double z, w; + + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + + /* if J(n,NaN) is NaN */ + if ((ix == 0x7fff) && ((i0 & 0x7fffffff) != 0)) + return x + x; + if (n < 0) + { + n = -n; + x = -x; + se ^= 0x8000; + } + if (n == 0) + return (__ieee754_j0l (x)); + if (n == 1) + return (__ieee754_j1l (x)); + sgn = (n & 1) & (se >> 15); /* even n -- 0, odd n -- sign(x) */ + x = fabsl (x); + if ((ix | i0 | i1) == 0 || ix >= 0x7fff) /* if x is 0 or inf */ + b = zero; + else if ((long double) n <= x) + { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + if (ix >= 0x412D) + { /* x > 2**302 */ + + /* ??? This might be a futile gesture. + If x exceeds X_TLOSS anyway, the wrapper function + will set the result to zero. */ + + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + long double s; + long double c; + __sincosl (x, &s, &c); + switch (n & 3) + { + case 0: + temp = c + s; + break; + case 1: + temp = -c + s; + break; + case 2: + temp = -c - s; + break; + case 3: + temp = c - s; + break; + } + b = invsqrtpi * temp / __ieee754_sqrtl (x); + } + else + { + a = __ieee754_j0l (x); + b = __ieee754_j1l (x); + for (i = 1; i < n; i++) + { + temp = b; + b = b * ((long double) (i + i) / x) - a; /* avoid underflow */ + a = temp; + } + } + } + else + { + if (ix < 0x3fde) + { /* x < 2**-33 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if (n >= 400) /* underflow, result < 10^-4952 */ + b = zero; + else + { + temp = x * 0.5; + b = temp; + for (a = one, i = 2; i <= n; i++) + { + a *= (long double) i; /* a = n! */ + b *= temp; /* b = (x/2)^n */ + } + b = b / a; + } + } + else + { + /* use backward recurrence */ + /* x x^2 x^2 + * J(n,x)/J(n-1,x) = ---- ------ ------ ..... + * 2n - 2(n+1) - 2(n+2) + * + * 1 1 1 + * (for large x) = ---- ------ ------ ..... + * 2n 2(n+1) 2(n+2) + * -- - ------ - ------ - + * x x x + * + * Let w = 2n/x and h=2/x, then the above quotient + * is equal to the continued fraction: + * 1 + * = ----------------------- + * 1 + * w - ----------------- + * 1 + * w+h - --------- + * w+2h - ... + * + * To determine how many terms needed, let + * Q(0) = w, Q(1) = w(w+h) - 1, + * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), + * When Q(k) > 1e4 good for single + * When Q(k) > 1e9 good for double + * When Q(k) > 1e17 good for quadruple + */ + /* determine k */ + long double t, v; + long double q0, q1, h, tmp; + int32_t k, m; + w = (n + n) / (long double) x; + h = 2.0L / (long double) x; + q0 = w; + z = w + h; + q1 = w * z - 1.0L; + k = 1; + while (q1 < 1.0e11L) + { + k += 1; + z += h; + tmp = z * q1 - q0; + q0 = q1; + q1 = tmp; + } + m = n + n; + for (t = zero, i = 2 * (n + k); i >= m; i -= 2) + t = one / (i / x - t); + a = t; + b = one; + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = n; + v = two / x; + tmp = tmp * __ieee754_logl (fabsl (v * tmp)); + + if (tmp < 1.1356523406294143949491931077970765006170e+04L) + { + for (i = n - 1, di = (long double) (i + i); i > 0; i--) + { + temp = b; + b *= di; + b = b / x - a; + a = temp; + di -= two; + } + } + else + { + for (i = n - 1, di = (long double) (i + i); i > 0; i--) + { + temp = b; + b *= di; + b = b / x - a; + a = temp; + di -= two; + /* scale b to avoid spurious overflow */ + if (b > 1e100L) + { + a /= b; + t /= b; + b = one; + } + } + } + b = (t * __ieee754_j0l (x) / b); + } + } + if (sgn == 1) + return -b; + else + return b; +} + +#ifdef __STDC__ +long double +__ieee754_ynl (int n, long double x) +#else +long double +__ieee754_ynl (n, x) + int n; + long double x; +#endif +{ + u_int32_t se, i0, i1; + int32_t i, ix; + int32_t sign; + long double a, b, temp; + + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + /* if Y(n,NaN) is NaN */ + if ((ix == 0x7fff) && ((i0 & 0x7fffffff) != 0)) + return x + x; + if ((ix | i0 | i1) == 0) + return -one / zero; + if (se & 0x8000) + return zero / zero; + sign = 1; + if (n < 0) + { + n = -n; + sign = 1 - ((n & 1) << 1); + } + if (n == 0) + return (__ieee754_y0l (x)); + if (n == 1) + return (sign * __ieee754_y1l (x)); + if (ix == 0x7fff) + return zero; + if (ix >= 0x412D) + { /* x > 2**302 */ + + /* ??? See comment above on the possible futility of this. */ + + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + long double s; + long double c; + __sincosl (x, &s, &c); + switch (n & 3) + { + case 0: + temp = s - c; + break; + case 1: + temp = -s - c; + break; + case 2: + temp = -s + c; + break; + case 3: + temp = s + c; + break; + } + b = invsqrtpi * temp / __ieee754_sqrtl (x); + } + else + { + a = __ieee754_y0l (x); + b = __ieee754_y1l (x); + /* quit if b is -inf */ + GET_LDOUBLE_WORDS (se, i0, i1, b); + for (i = 1; i < n && se != 0xffff; i++) + { + temp = b; + b = ((long double) (i + i) / x) * b - a; + GET_LDOUBLE_WORDS (se, i0, i1, b); + a = temp; + } + } + if (sign > 0) + return b; + else + return -b; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_lgammal_r.c glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_lgammal_r.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-96/e_lgammal_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-96/e_lgammal_r.c Sun Mar 4 11:21:47 2001 @@ -0,0 +1,418 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Long double expansions contributed by + Stephen L. Moshier */ + +/* __ieee754_lgammal_r(x, signgamp) + * Reentrant version of the logarithm of the Gamma function + * with user provide pointer for the sign of Gamma(x). + * + * Method: + * 1. Argument Reduction for 0 < x <= 8 + * Since gamma(1+s)=s*gamma(s), for x in [0,8], we may + * reduce x to a number in [1.5,2.5] by + * lgamma(1+s) = log(s) + lgamma(s) + * for example, + * lgamma(7.3) = log(6.3) + lgamma(6.3) + * = log(6.3*5.3) + lgamma(5.3) + * = log(6.3*5.3*4.3*3.3*2.3) + lgamma(2.3) + * 2. Polynomial approximation of lgamma around its + * minimun ymin=1.461632144968362245 to maintain monotonicity. + * On [ymin-0.23, ymin+0.27] (i.e., [1.23164,1.73163]), use + * Let z = x-ymin; + * lgamma(x) = -1.214862905358496078218 + z^2*poly(z) + * 2. Rational approximation in the primary interval [2,3] + * We use the following approximation: + * s = x-2.0; + * lgamma(x) = 0.5*s + s*P(s)/Q(s) + * Our algorithms are based on the following observation + * + * zeta(2)-1 2 zeta(3)-1 3 + * lgamma(2+s) = s*(1-Euler) + --------- * s - --------- * s + ... + * 2 3 + * + * where Euler = 0.5771... is the Euler constant, which is very + * close to 0.5. + * + * 3. For x>=8, we have + * lgamma(x)~(x-0.5)log(x)-x+0.5*log(2pi)+1/(12x)-1/(360x**3)+.... + * (better formula: + * lgamma(x)~(x-0.5)*(log(x)-1)-.5*(log(2pi)-1) + ...) + * Let z = 1/x, then we approximation + * f(z) = lgamma(x) - (x-0.5)(log(x)-1) + * by + * 3 5 11 + * w = w0 + w1*z + w2*z + w3*z + ... + w6*z + * + * 4. For negative x, since (G is gamma function) + * -x*G(-x)*G(x) = pi/sin(pi*x), + * we have + * G(x) = pi/(sin(pi*x)*(-x)*G(-x)) + * since G(-x) is positive, sign(G(x)) = sign(sin(pi*x)) for x<0 + * Hence, for x<0, signgam = sign(sin(pi*x)) and + * lgamma(x) = log(|Gamma(x)|) + * = log(pi/(|x*sin(pi*x)|)) - lgamma(-x); + * Note: one should avoid compute pi*(-x) directly in the + * computation of sin(pi*(-x)). + * + * 5. Special Cases + * lgamma(2+s) ~ s*(1-Euler) for tiny s + * lgamma(1)=lgamma(2)=0 + * lgamma(x) ~ -log(x) for tiny x + * lgamma(0) = lgamma(inf) = inf + * lgamma(-integer) = +-inf + * + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static const long double +#else +static long double +#endif + half = 0.5L, + one = 1.0L, + pi = 3.14159265358979323846264L, + + /* lgam(1+x) = 0.5 x + x a(x)/b(x) + -0.268402099609375 <= x <= 0 + peak relative error 6.6e-22 */ + a0 = -6.343246574721079391729402781192128239938E2L, + a1 = 1.856560238672465796768677717168371401378E3L, + a2 = 2.404733102163746263689288466865843408429E3L, + a3 = 8.804188795790383497379532868917517596322E2L, + a4 = 1.135361354097447729740103745999661157426E2L, + a5 = 3.766956539107615557608581581190400021285E0L, + + b0 = 8.214973713960928795704317259806842490498E3L, + b1 = 1.026343508841367384879065363925870888012E4L, + b2 = 4.553337477045763320522762343132210919277E3L, + b3 = 8.506975785032585797446253359230031874803E2L, + b4 = 6.042447899703295436820744186992189445813E1L, + /* b5 = 1.000000000000000000000000000000000000000E0 */ + + + tc = 1.4616321449683623412626595423257213284682E0L, + tf = -1.2148629053584961146050602565082954242826E-1,/* double precision */ +/* tt = (tail of tf), i.e. tf + tt has extended precision. */ + tt = 3.3649914684731379602768989080467587736363E-18L, + /* lgam ( 1.4616321449683623412626595423257213284682E0 ) = +-1.2148629053584960809551455717769158215135617312999903886372437313313530E-1 */ + + /* lgam (x + tc) = tf + tt + x g(x)/h(x) + - 0.230003726999612341262659542325721328468 <= x + <= 0.2699962730003876587373404576742786715318 + peak relative error 2.1e-21 */ + g0 = 3.645529916721223331888305293534095553827E-18L, + g1 = 5.126654642791082497002594216163574795690E3L, + g2 = 8.828603575854624811911631336122070070327E3L, + g3 = 5.464186426932117031234820886525701595203E3L, + g4 = 1.455427403530884193180776558102868592293E3L, + g5 = 1.541735456969245924860307497029155838446E2L, + g6 = 4.335498275274822298341872707453445815118E0L, + + h0 = 1.059584930106085509696730443974495979641E4L, + h1 = 2.147921653490043010629481226937850618860E4L, + h2 = 1.643014770044524804175197151958100656728E4L, + h3 = 5.869021995186925517228323497501767586078E3L, + h4 = 9.764244777714344488787381271643502742293E2L, + h5 = 6.442485441570592541741092969581997002349E1L, + /* h6 = 1.000000000000000000000000000000000000000E0 */ + + + /* lgam (x+1) = -0.5 x + x u(x)/v(x) + -0.100006103515625 <= x <= 0.231639862060546875 + peak relative error 1.3e-21 */ + u0 = -8.886217500092090678492242071879342025627E1L, + u1 = 6.840109978129177639438792958320783599310E2L, + u2 = 2.042626104514127267855588786511809932433E3L, + u3 = 1.911723903442667422201651063009856064275E3L, + u4 = 7.447065275665887457628865263491667767695E2L, + u5 = 1.132256494121790736268471016493103952637E2L, + u6 = 4.484398885516614191003094714505960972894E0L, + + v0 = 1.150830924194461522996462401210374632929E3L, + v1 = 3.399692260848747447377972081399737098610E3L, + v2 = 3.786631705644460255229513563657226008015E3L, + v3 = 1.966450123004478374557778781564114347876E3L, + v4 = 4.741359068914069299837355438370682773122E2L, + v5 = 4.508989649747184050907206782117647852364E1L, + /* v6 = 1.000000000000000000000000000000000000000E0 */ + + + /* lgam (x+2) = .5 x + x s(x)/r(x) + 0 <= x <= 1 + peak relative error 7.2e-22 */ + s0 = 1.454726263410661942989109455292824853344E6L, + s1 = -3.901428390086348447890408306153378922752E6L, + s2 = -6.573568698209374121847873064292963089438E6L, + s3 = -3.319055881485044417245964508099095984643E6L, + s4 = -7.094891568758439227560184618114707107977E5L, + s5 = -6.263426646464505837422314539808112478303E4L, + s6 = -1.684926520999477529949915657519454051529E3L, + + r0 = -1.883978160734303518163008696712983134698E7L, + r1 = -2.815206082812062064902202753264922306830E7L, + r2 = -1.600245495251915899081846093343626358398E7L, + r3 = -4.310526301881305003489257052083370058799E6L, + r4 = -5.563807682263923279438235987186184968542E5L, + r5 = -3.027734654434169996032905158145259713083E4L, + r6 = -4.501995652861105629217250715790764371267E2L, + /* r6 = 1.000000000000000000000000000000000000000E0 */ + + +/* lgam(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x w(1/x^2) + x >= 8 + Peak relative error 1.51e-21 + w0 = LS2PI - 0.5 */ + w0 = 4.189385332046727417803e-1L, + w1 = 8.333333333333331447505E-2L, + w2 = -2.777777777750349603440E-3L, + w3 = 7.936507795855070755671E-4L, + w4 = -5.952345851765688514613E-4L, + w5 = 8.412723297322498080632E-4L, + w6 = -1.880801938119376907179E-3L, + w7 = 4.885026142432270781165E-3L; + +#ifdef __STDC__ +static const long double zero = 0.0L; +#else +static long double zero = 0.0L; +#endif + +#ifdef __STDC__ +static long double +sin_pi (long double x) +#else +static long double +sin_pi (x) + long double x; +#endif +{ + long double y, z; + int n, ix; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + + i1 = (ix << 16) | (i0 >> 16); + if (ix < 0x3ffd8000) /* 0.25 */ + return __sinl (pi * x); + y = -x; /* x is assume negative */ + + /* + * argument reduction, make sure inexact flag not raised if input + * is an integer + */ + z = __floorl (y); + if (z != y) + { /* inexact anyway */ + y *= half; + y = 2.0 * (y - __floorl (y)); /* y = |x| mod 2.0 */ + n = (int) (y * 4.0); + } + else + { + return (zero + zero); + } + + switch (n) + { + case 0: + y = __sinl (pi * y); + break; + case 1: + case 2: + y = __cosl (pi * (half - y)); + break; + case 3: + case 4: + y = __sinl (pi * (one - y)); + break; + case 5: + case 6: + y = -__cosl (pi * (y - 1.5)); + break; + default: + y = __sinl (pi * (y - 2.0)); + break; + } + return -y; +} + + +#ifdef __STDC__ +long double +__ieee754_lgammal_r (long double x, int *signgamp) +#else +long double +__ieee754_lgammal_r (x, signgamp) + long double x; + int *signgamp; +#endif +{ + long double t, y, z, nadj, p, p1, p2, q, r, w; + int i, ix; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + + if ((ix | i0 | i1) == 0) + return one / fabsl (x); + + ix = (ix << 16) | (i0 >> 16); + + /* purge off +-inf, NaN, +-0, and negative arguments */ + *signgamp = 1; + if (ix >= 0x7fff0000) + return x * x; + + if (ix < 0x3fc08000) /* 2^-63 */ + { /* |x|<2**-63, return -log(|x|) */ + if (se & 0x8000) + { + *signgamp = -1; + return -__ieee754_logl (-x); + } + else + return -__ieee754_logl (x); + } + if (se & 0x8000) + { + if (x == __floorl(x)) + return x / zero; + t = sin_pi (x); + if (t == zero) + return one / fabsl (t); /* -integer */ + nadj = __ieee754_logl (pi / fabsl (t * x)); + if (t < zero) + *signgamp = -1; + x = -x; + } + + /* purge off 1 and 2 */ + if ((((ix - 0x3fff8000) | i0 | i1) == 0) + || (((ix - 0x40008000) | i0 | i1) == 0)) + r = 0; + else if (ix < 0x40008000) /* 2.0 */ + { + /* x < 2.0 */ + if (ix <= 0x3ffee666) /* 8.99993896484375e-1 */ + { + /* lgamma(x) = lgamma(x+1) - log(x) */ + r = -__ieee754_logl (x); + if (ix >= 0x3ffebb4a) /* 7.31597900390625e-1 */ + { + y = x - one; + i = 0; + } + else if (ix >= 0x3ffced33)/* 2.31639862060546875e-1 */ + { + y = x - (tc - one); + i = 1; + } + else + { + /* x < 0.23 */ + y = x; + i = 2; + } + } + else + { + r = zero; + if (ix >= 0x3fffdda6) /* 1.73162841796875 */ + { + /* [1.7316,2] */ + y = x - 2.0; + i = 0; + } + else if (ix >= 0x3fff9da6)/* 1.23162841796875 */ + { + /* [1.23,1.73] */ + y = x - tc; + i = 1; + } + else + { + /* [0.9, 1.23] */ + y = x - one; + i = 2; + } + } + switch (i) + { + case 0: + p1 = a0 + y * (a1 + y * (a2 + y * (a3 + y * (a4 + y * a5)))); + p2 = b0 + y * (b1 + y * (b2 + y * (b3 + y * (b4 + y)))); + r += half * y + y * p1/p2; + break; + case 1: + p1 = g0 + y * (g1 + y * (g2 + y * (g3 + y * (g4 + y * (g5 + y * g6))))); + p2 = h0 + y * (h1 + y * (h2 + y * (h3 + y * (h4 + y * (h5 + y))))); + p = tt + y * p1/p2; + r += (tf + p); + break; + case 2: + p1 = y * (u0 + y * (u1 + y * (u2 + y * (u3 + y * (u4 + y * (u5 + y * u6)))))); + p2 = v0 + y * (v1 + y * (v2 + y * (v3 + y * (v4 + y * (v5 + y))))); + r += (-half * y + p1 / p2); + } + } + else if (ix < 0x40028000) /* 8.0 */ + { + /* x < 8.0 */ + i = (int) x; + t = zero; + y = x - (double) i; + p = y * + (s0 + y * (s1 + y * (s2 + y * (s3 + y * (s4 + y * (s5 + y * s6)))))); + q = r0 + y * (r1 + y * (r2 + y * (r3 + y * (r4 + y * (r5 + y * (r6 + y)))))); + r = half * y + p / q; + z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ + switch (i) + { + case 7: + z *= (y + 6.0); /* FALLTHRU */ + case 6: + z *= (y + 5.0); /* FALLTHRU */ + case 5: + z *= (y + 4.0); /* FALLTHRU */ + case 4: + z *= (y + 3.0); /* FALLTHRU */ + case 3: + z *= (y + 2.0); /* FALLTHRU */ + r += __ieee754_logl (z); + break; + } + } + else if (ix < 0x40418000) /* 2^66 */ + { + /* 8.0 <= x < 2**66 */ + t = __ieee754_logl (x); + z = one / x; + y = z * z; + w = w0 + z * (w1 + + y * (w2 + y * (w3 + y * (w4 + y * (w5 + y * (w6 + y * w7)))))); + r = (x - half) * (t - one) + w; + } + else + /* 2**66 <= x <= inf */ + r = x * (__ieee754_logl (x) - one); + if (se & 0x8000) + r = nadj - r; + return r; +} diff -durpNa glibc-2.2.2/sysdeps/ieee754/ldbl-96/s_erfl.c glibc-2.2.3/sysdeps/ieee754/ldbl-96/s_erfl.c --- glibc-2.2.2/sysdeps/ieee754/ldbl-96/s_erfl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/ieee754/ldbl-96/s_erfl.c Fri Mar 16 13:45:21 2001 @@ -0,0 +1,445 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Long double expansions contributed by + Stephen L. Moshier */ + +/* double erf(double x) + * double erfc(double x) + * x + * 2 |\ + * erf(x) = --------- | exp(-t*t)dt + * sqrt(pi) \| + * 0 + * + * erfc(x) = 1-erf(x) + * Note that + * erf(-x) = -erf(x) + * erfc(-x) = 2 - erfc(x) + * + * Method: + * 1. For |x| in [0, 0.84375] + * erf(x) = x + x*R(x^2) + * erfc(x) = 1 - erf(x) if x in [-.84375,0.25] + * = 0.5 + ((0.5-x)-x*R) if x in [0.25,0.84375] + * Remark. The formula is derived by noting + * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) + * and that + * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 + * is close to one. The interval is chosen because the fix + * point of erf(x) is near 0.6174 (i.e., erf(x)=x when x is + * near 0.6174), and by some experiment, 0.84375 is chosen to + * guarantee the error is less than one ulp for erf. + * + * 2. For |x| in [0.84375,1.25], let s = |x| - 1, and + * c = 0.84506291151 rounded to single (24 bits) + * erf(x) = sign(x) * (c + P1(s)/Q1(s)) + * erfc(x) = (1-c) - P1(s)/Q1(s) if x > 0 + * 1+(c+P1(s)/Q1(s)) if x < 0 + * Remark: here we use the taylor series expansion at x=1. + * erf(1+s) = erf(1) + s*Poly(s) + * = 0.845.. + P1(s)/Q1(s) + * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] + * + * 3. For x in [1.25,1/0.35(~2.857143)], + * erfc(x) = (1/x)*exp(-x*x-0.5625+R1(z)/S1(z)) + * z=1/x^2 + * erf(x) = 1 - erfc(x) + * + * 4. For x in [1/0.35,107] + * erfc(x) = (1/x)*exp(-x*x-0.5625+R2/S2) if x > 0 + * = 2.0 - (1/x)*exp(-x*x-0.5625+R2(z)/S2(z)) + * if -6.666 x >= 107 + * erf(x) = sign(x) *(1 - tiny) (raise inexact) + * erfc(x) = tiny*tiny (raise underflow) if x > 0 + * = 2 - tiny if x<0 + * + * 7. Special case: + * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, + * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, + * erfc/erf(NaN) is NaN + */ + + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ +static const long double +#else +static long double +#endif +tiny = 1e-4931L, + half = 0.5L, + one = 1.0L, + two = 2.0L, + /* c = (float)0.84506291151 */ + erx = 0.845062911510467529296875L, +/* + * Coefficients for approximation to erf on [0,0.84375] + */ + /* 2/sqrt(pi) - 1 */ + efx = 1.2837916709551257389615890312154517168810E-1L, + /* 8 * (2/sqrt(pi) - 1) */ + efx8 = 1.0270333367641005911692712249723613735048E0L, + + pp[6] = { + 1.122751350964552113068262337278335028553E6L, + -2.808533301997696164408397079650699163276E6L, + -3.314325479115357458197119660818768924100E5L, + -6.848684465326256109712135497895525446398E4L, + -2.657817695110739185591505062971929859314E3L, + -1.655310302737837556654146291646499062882E2L, + }, + + qq[6] = { + 8.745588372054466262548908189000448124232E6L, + 3.746038264792471129367533128637019611485E6L, + 7.066358783162407559861156173539693900031E5L, + 7.448928604824620999413120955705448117056E4L, + 4.511583986730994111992253980546131408924E3L, + 1.368902937933296323345610240009071254014E2L, + /* 1.000000000000000000000000000000000000000E0 */ + }, + +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +/* erf(x+1) = 0.845062911510467529296875 + pa(x)/qa(x) + -0.15625 <= x <= +.25 + Peak relative error 8.5e-22 */ + + pa[8] = { + -1.076952146179812072156734957705102256059E0L, + 1.884814957770385593365179835059971587220E2L, + -5.339153975012804282890066622962070115606E1L, + 4.435910679869176625928504532109635632618E1L, + 1.683219516032328828278557309642929135179E1L, + -2.360236618396952560064259585299045804293E0L, + 1.852230047861891953244413872297940938041E0L, + 9.394994446747752308256773044667843200719E-2L, + }, + + qa[7] = { + 4.559263722294508998149925774781887811255E2L, + 3.289248982200800575749795055149780689738E2L, + 2.846070965875643009598627918383314457912E2L, + 1.398715859064535039433275722017479994465E2L, + 6.060190733759793706299079050985358190726E1L, + 2.078695677795422351040502569964299664233E1L, + 4.641271134150895940966798357442234498546E0L, + /* 1.000000000000000000000000000000000000000E0 */ + }, + +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +/* erfc(1/x) = x exp (-1/x^2 - 0.5625 + ra(x^2)/sa(x^2)) + 1/2.85711669921875 < 1/x < 1/1.25 + Peak relative error 3.1e-21 */ + + ra[] = { + 1.363566591833846324191000679620738857234E-1L, + 1.018203167219873573808450274314658434507E1L, + 1.862359362334248675526472871224778045594E2L, + 1.411622588180721285284945138667933330348E3L, + 5.088538459741511988784440103218342840478E3L, + 8.928251553922176506858267311750789273656E3L, + 7.264436000148052545243018622742770549982E3L, + 2.387492459664548651671894725748959751119E3L, + 2.220916652813908085449221282808458466556E2L, + }, + + sa[] = { + -1.382234625202480685182526402169222331847E1L, + -3.315638835627950255832519203687435946482E2L, + -2.949124863912936259747237164260785326692E3L, + -1.246622099070875940506391433635999693661E4L, + -2.673079795851665428695842853070996219632E4L, + -2.880269786660559337358397106518918220991E4L, + -1.450600228493968044773354186390390823713E4L, + -2.874539731125893533960680525192064277816E3L, + -1.402241261419067750237395034116942296027E2L, + /* 1.000000000000000000000000000000000000000E0 */ + }, +/* + * Coefficients for approximation to erfc in [1/.35,107] + */ +/* erfc(1/x) = x exp (-1/x^2 - 0.5625 + rb(x^2)/sb(x^2)) + 1/6.6666259765625 < 1/x < 1/2.85711669921875 + Peak relative error 4.2e-22 */ + rb[] = { + -4.869587348270494309550558460786501252369E-5L, + -4.030199390527997378549161722412466959403E-3L, + -9.434425866377037610206443566288917589122E-2L, + -9.319032754357658601200655161585539404155E-1L, + -4.273788174307459947350256581445442062291E0L, + -8.842289940696150508373541814064198259278E0L, + -7.069215249419887403187988144752613025255E0L, + -1.401228723639514787920274427443330704764E0L, + }, + + sb[] = { + 4.936254964107175160157544545879293019085E-3L, + 1.583457624037795744377163924895349412015E-1L, + 1.850647991850328356622940552450636420484E0L, + 9.927611557279019463768050710008450625415E0L, + 2.531667257649436709617165336779212114570E1L, + 2.869752886406743386458304052862814690045E1L, + 1.182059497870819562441683560749192539345E1L, + /* 1.000000000000000000000000000000000000000E0 */ + }, +/* erfc(1/x) = x exp (-1/x^2 - 0.5625 + rc(x^2)/sc(x^2)) + 1/107 <= 1/x <= 1/6.6666259765625 + Peak relative error 1.1e-21 */ + rc[] = { + -8.299617545269701963973537248996670806850E-5L, + -6.243845685115818513578933902532056244108E-3L, + -1.141667210620380223113693474478394397230E-1L, + -7.521343797212024245375240432734425789409E-1L, + -1.765321928311155824664963633786967602934E0L, + -1.029403473103215800456761180695263439188E0L, + }, + + sc[] = { + 8.413244363014929493035952542677768808601E-3L, + 2.065114333816877479753334599639158060979E-1L, + 1.639064941530797583766364412782135680148E0L, + 4.936788463787115555582319302981666347450E0L, + 5.005177727208955487404729933261347679090E0L, + /* 1.000000000000000000000000000000000000000E0 */ + }; + +#ifdef __STDC__ +long double +__erfl (long double x) +#else +double +__erfl (x) + long double x; +#endif +{ + long double R, S, P, Q, s, y, z, r; + int32_t ix, i; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + + if (ix >= 0x7fff) + { /* erf(nan)=nan */ + i = ((se & 0xffff) >> 15) << 1; + return (long double) (1 - i) + one / x; /* erf(+-inf)=+-1 */ + } + + ix = (ix << 16) | (i0 >> 16); + if (ix < 0x3ffed800) /* |x|<0.84375 */ + { + if (ix < 0x3fde8000) /* |x|<2**-33 */ + { + if (ix < 0x00080000) + return 0.125 * (8.0 * x + efx8 * x); /*avoid underflow */ + return x + efx * x; + } + z = x * x; + r = pp[0] + z * (pp[1] + + z * (pp[2] + z * (pp[3] + z * (pp[4] + z * pp[5])))); + s = qq[0] + z * (qq[1] + + z * (qq[2] + z * (qq[3] + z * (qq[4] + z * (qq[5] + z))))); + y = r / s; + return x + x * y; + } + if (ix < 0x3fffa000) /* 1.25 */ + { /* 0.84375 <= |x| < 1.25 */ + s = fabsl (x) - one; + P = pa[0] + s * (pa[1] + s * (pa[2] + + s * (pa[3] + s * (pa[4] + s * (pa[5] + s * (pa[6] + s * pa[7])))))); + Q = qa[0] + s * (qa[1] + s * (qa[2] + + s * (qa[3] + s * (qa[4] + s * (qa[5] + s * (qa[6] + s)))))); + if ((se & 0x8000) == 0) + return erx + P / Q; + else + return -erx - P / Q; + } + if (ix >= 0x4001d555) /* 6.6666259765625 */ + { /* inf>|x|>=6.666 */ + if ((se & 0x8000) == 0) + return one - tiny; + else + return tiny - one; + } + x = fabsl (x); + s = one / (x * x); + if (ix < 0x4000b6db) /* 2.85711669921875 */ + { + R = ra[0] + s * (ra[1] + s * (ra[2] + s * (ra[3] + s * (ra[4] + + s * (ra[5] + s * (ra[6] + s * (ra[7] + s * ra[8]))))))); + S = sa[0] + s * (sa[1] + s * (sa[2] + s * (sa[3] + s * (sa[4] + + s * (sa[5] + s * (sa[6] + s * (sa[7] + s * (sa[8] + s)))))))); + } + else + { /* |x| >= 1/0.35 */ + R = rb[0] + s * (rb[1] + s * (rb[2] + s * (rb[3] + s * (rb[4] + + s * (rb[5] + s * (rb[6] + s * rb[7])))))); + S = sb[0] + s * (sb[1] + s * (sb[2] + s * (sb[3] + s * (sb[4] + + s * (sb[5] + s * (sb[6] + s)))))); + } + z = x; + GET_LDOUBLE_WORDS (i, i0, i1, z); + i1 = 0; + SET_LDOUBLE_WORDS (z, i, i0, i1); + r = + __ieee754_expl (-z * z - 0.5625) * __ieee754_expl ((z - x) * (z + x) + + R / S); + if ((se & 0x8000) == 0) + return one - r / x; + else + return r / x - one; +} + +weak_alias (__erfl, erfl) +#ifdef NO_LONG_DOUBLE +strong_alias (__erf, __erfl) +weak_alias (__erf, erfl) +#endif +#ifdef __STDC__ + long double + __erfcl (long double x) +#else + long double + __erfcl (x) + double + x; +#endif +{ + int32_t hx, ix; + long double R, S, P, Q, s, y, z, r; + u_int32_t se, i0, i1; + + GET_LDOUBLE_WORDS (se, i0, i1, x); + ix = se & 0x7fff; + if (ix >= 0x7fff) + { /* erfc(nan)=nan */ + /* erfc(+-inf)=0,2 */ + return (long double) (((se & 0xffff) >> 15) << 1) + one / x; + } + + ix = (ix << 16) | (i0 >> 16); + if (ix < 0x3ffed800) /* |x|<0.84375 */ + { + if (ix < 0x3fbe0000) /* |x|<2**-65 */ + return one - x; + z = x * x; + r = pp[0] + z * (pp[1] + + z * (pp[2] + z * (pp[3] + z * (pp[4] + z * pp[5])))); + s = qq[0] + z * (qq[1] + + z * (qq[2] + z * (qq[3] + z * (qq[4] + z * (qq[5] + z))))); + y = r / s; + if (ix < 0x3ffd8000) /* x<1/4 */ + { + return one - (x + x * y); + } + else + { + r = x * y; + r += (x - half); + return half - r; + } + } + if (ix < 0x3fffa000) /* 1.25 */ + { /* 0.84375 <= |x| < 1.25 */ + s = fabsl (x) - one; + P = pa[0] + s * (pa[1] + s * (pa[2] + + s * (pa[3] + s * (pa[4] + s * (pa[5] + s * (pa[6] + s * pa[7])))))); + Q = qa[0] + s * (qa[1] + s * (qa[2] + + s * (qa[3] + s * (qa[4] + s * (qa[5] + s * (qa[6] + s)))))); + if ((se & 0x8000) == 0) + { + z = one - erx; + return z - P / Q; + } + else + { + z = erx + P / Q; + return one + z; + } + } + if (ix < 0x4005d600) /* 107 */ + { /* |x|<107 */ + x = fabsl (x); + s = one / (x * x); + if (ix < 0x4000b6db) /* 2.85711669921875 */ + { /* |x| < 1/.35 ~ 2.857143 */ + R = ra[0] + s * (ra[1] + s * (ra[2] + s * (ra[3] + s * (ra[4] + + s * (ra[5] + s * (ra[6] + s * (ra[7] + s * ra[8]))))))); + S = sa[0] + s * (sa[1] + s * (sa[2] + s * (sa[3] + s * (sa[4] + + s * (sa[5] + s * (sa[6] + s * (sa[7] + s * (sa[8] + s)))))))); + } + else if (ix < 0x4001d555) /* 6.6666259765625 */ + { /* 6.666 > |x| >= 1/.35 ~ 2.857143 */ + R = rb[0] + s * (rb[1] + s * (rb[2] + s * (rb[3] + s * (rb[4] + + s * (rb[5] + s * (rb[6] + s * rb[7])))))); + S = sb[0] + s * (sb[1] + s * (sb[2] + s * (sb[3] + s * (sb[4] + + s * (sb[5] + s * (sb[6] + s)))))); + } + else + { /* |x| >= 6.666 */ + if (se & 0x8000) + return two - tiny; /* x < -6.666 */ + + R = rc[0] + s * (rc[1] + s * (rc[2] + s * (rc[3] + + s * (rc[4] + s * rc[5])))); + S = sc[0] + s * (sc[1] + s * (sc[2] + s * (sc[3] + + s * (sc[4] + s)))); + } + z = x; + GET_LDOUBLE_WORDS (hx, i0, i1, z); + i1 = 0; + i0 &= 0xffffff00; + SET_LDOUBLE_WORDS (z, hx, i0, i1); + r = __ieee754_expl (-z * z - 0.5625) * + __ieee754_expl ((z - x) * (z + x) + R / S); + if ((se & 0x8000) == 0) + return r / x; + else + return two - r / x; + } + else + { + if ((se & 0x8000) == 0) + return tiny * tiny; + else + return two - tiny; + } +} + +weak_alias (__erfcl, erfcl) +#ifdef NO_LONG_DOUBLE +strong_alias (__erfc, __erfcl) +weak_alias (__erfc, erfcl) +#endif diff -durpNa glibc-2.2.2/sysdeps/m68k/dl-machine.h glibc-2.2.3/sysdeps/m68k/dl-machine.h --- glibc-2.2.2/sysdeps/m68k/dl-machine.h Thu Oct 26 22:57:35 2000 +++ glibc-2.2.3/sysdeps/m68k/dl-machine.h Mon Mar 26 20:53:28 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. m68k version. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -255,10 +255,10 @@ elf_machine_rela (struct link_map *map, const char *strtab; strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/branred.c glibc-2.2.3/sysdeps/m68k/fpu/branred.c --- glibc-2.2.2/sysdeps/m68k/fpu/branred.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/branred.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/doasin.c glibc-2.2.3/sysdeps/m68k/fpu/doasin.c --- glibc-2.2.2/sysdeps/m68k/fpu/doasin.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/doasin.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/dosincos.c glibc-2.2.3/sysdeps/m68k/fpu/dosincos.c --- glibc-2.2.2/sysdeps/m68k/fpu/dosincos.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/dosincos.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/e_exp2.c glibc-2.2.3/sysdeps/m68k/fpu/e_exp2.c --- glibc-2.2.2/sysdeps/m68k/fpu/e_exp2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/e_exp2.c Sat Feb 17 08:49:17 2001 @@ -0,0 +1,2 @@ +#define FUNC __ieee754_exp2 +#include diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/e_exp2f.c glibc-2.2.3/sysdeps/m68k/fpu/e_exp2f.c --- glibc-2.2.2/sysdeps/m68k/fpu/e_exp2f.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/e_exp2f.c Sat Feb 17 08:49:28 2001 @@ -0,0 +1,2 @@ +#define FUNC __ieee754_exp2f +#include diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/e_exp2l.c glibc-2.2.3/sysdeps/m68k/fpu/e_exp2l.c --- glibc-2.2.2/sysdeps/m68k/fpu/e_exp2l.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/e_exp2l.c Sat Feb 17 08:49:41 2001 @@ -0,0 +1,2 @@ +#define FUNC __ieee754_exp2l +#include diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/e_pow.c glibc-2.2.3/sysdeps/m68k/fpu/e_pow.c --- glibc-2.2.2/sysdeps/m68k/fpu/e_pow.c Mon Jun 28 12:05:41 1999 +++ glibc-2.2.3/sysdeps/m68k/fpu/e_pow.c Thu Apr 12 14:02:10 2001 @@ -41,23 +41,25 @@ s(__ieee754_pow) (float_type x, float_ty y_cond = __m81_test (y); if (y_cond & __M81_COND_ZERO) return 1.0; + if (y_cond & __M81_COND_NAN) + return x == 1.0 ? x : x + y; x_cond = __m81_test (x); - if ((x_cond | y_cond) & __M81_COND_NAN) + if (x_cond & __M81_COND_NAN) return x + y; if (y_cond & __M81_COND_INF) { ax = s(fabs) (x); - if (ax == 1) - return y - y; - if (ax > 1) + if (ax == 1.0) + return ax; + if (ax > 1.0) return y_cond & __M81_COND_NEG ? 0 : y; else return y_cond & __M81_COND_NEG ? -y : 0; } - if (s(fabs) (y) == 1) + if (s(fabs) (y) == 1.0) return y_cond & __M81_COND_NEG ? 1 / x : x; if (y == 2) @@ -77,7 +79,7 @@ s(__ieee754_pow) (float_type x, float_ty } ax = s(fabs) (x); - if (x_cond & (__M81_COND_INF | __M81_COND_ZERO) || ax == 1) + if (x_cond & (__M81_COND_INF | __M81_COND_ZERO) || ax == 1.0) { z = ax; if (y_cond & __M81_COND_NEG) diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/e_scalb.c glibc-2.2.3/sysdeps/m68k/fpu/e_scalb.c --- glibc-2.2.2/sysdeps/m68k/fpu/e_scalb.c Mon Jun 28 12:05:43 1999 +++ glibc-2.2.3/sysdeps/m68k/fpu/e_scalb.c Thu Apr 12 14:02:10 2001 @@ -18,6 +18,7 @@ Boston, MA 02111-1307, USA. */ #include +#include "math_private.h" #include "mathimpl.h" #ifndef SUFF @@ -47,14 +48,12 @@ s(__ieee754_scalb) (float_type x, float_ return x * fn; else if (x_cond & __M81_COND_ZERO) return x; - else if (x_cond & __M81_COND_INF) - return 0.0/0.0; else return x / -fn; } if (m81(__rint) (fn) != fn) - return 0.0/0.0; + return (x - x) / (x - x); __asm ("fscale%.x %1, %0" : "=f" (retval) : "f" (fn), "0" (x)); return retval; diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/halfulp.c glibc-2.2.3/sysdeps/m68k/fpu/halfulp.c --- glibc-2.2.2/sysdeps/m68k/fpu/halfulp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/halfulp.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/libm-test-ulps glibc-2.2.3/sysdeps/m68k/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/m68k/fpu/libm-test-ulps Tue Oct 31 11:10:07 2000 +++ glibc-2.2.3/sysdeps/m68k/fpu/libm-test-ulps Wed Apr 25 14:51:13 2001 @@ -6,7 +6,7 @@ ildouble: 1 ldouble: 1 # acosh -Test "acosh (7) == 2.6339157938496334172": +Test "acosh (7) == 2.633915793849633417250092694615937": ildouble: 1 ldouble: 1 @@ -48,109 +48,112 @@ float: 1 ifloat: 1 # cacos -Test "Imaginary part of: cacos (-2 - 3 i) == 2.1414491111159960199 + 1.9833870299165354323 i": +Test "Imaginary part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i": ildouble: 1 ldouble: 1 -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 2 ifloat: 2 ildouble: 1 ldouble: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 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": +ildouble: 6 +ldouble: 6 +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 idouble: 1 ildouble: 2 ldouble: 2 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 idouble: 1 ildouble: 1 ldouble: 1 -Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": ildouble: 1 ldouble: 1 # casin -Test "Imaginary part of: casin (-2 - 3 i) == -0.5706527843210994007 - 1.9833870299165354323 i": +Test "Imaginary part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i": ildouble: 1 ldouble: 1 -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 ildouble: 1 ldouble: 1 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 2 ifloat: 2 ildouble: 1 ldouble: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 6 float: 19 idouble: 6 ifloat: 19 ildouble: 6 ldouble: 6 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 13 float: 1 idouble: 13 ifloat: 1 ildouble: 7 ldouble: 7 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 ildouble: 3 ldouble: 3 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 2 ifloat: 2 ildouble: 3 ldouble: 3 # catan -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 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": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": ildouble: 1 ldouble: 1 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 1 ifloat: 1 ildouble: 1 ldouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": ildouble: 2 ldouble: 2 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": +ildouble: 1 +ldouble: 2 +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": ildouble: 2 ldouble: 2 @@ -212,13 +215,9 @@ ldouble: 2 Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": float: 1 ifloat: 1 -ildouble: 5 -ldouble: 5 Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": float: 1 ifloat: 1 -ildouble: 19 -ldouble: 19 Test "Real part of: cexp (0.7 + 1.2 i) == 0.72969890915032360123451688642930727 + 1.8768962328348102821139467908203072 i": float: 3 ifloat: 3 @@ -229,7 +228,7 @@ float: 2 ifloat: 2 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": ildouble: 1 ldouble: 1 @@ -344,18 +343,9 @@ float: 1 ifloat: 1 # csqrt -Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i": -ildouble: 1 -ldouble: 1 -Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i": -ildouble: 1 -ldouble: 1 Test "Real part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i": float: 1 ifloat: 1 -Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i": -ildouble: 1 -ldouble: 1 # ctan Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i": @@ -398,9 +388,13 @@ ldouble: 1 Test "erfc (0.7) == 0.32219880616258152702": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 Test "erfc (1.2) == 0.089686021770364619762": float: 2 ifloat: 2 +ildouble: 3 +ldouble: 3 Test "erfc (2.0) == 0.0046777349810472658379": double: 1 idouble: 1 @@ -409,6 +403,8 @@ double: 24 float: 11 idouble: 24 ifloat: 11 +ildouble: 12 +ldouble: 12 # exp10 Test "exp10 (0.7) == 5.0118723362727228500155418688494574": @@ -452,6 +448,17 @@ ifloat: 1 ildouble: 1 ldouble: 1 +# gamma +Test "gamma (-0.5) == log(2*sqrt(pi))": +ildouble: 1 +ldouble: 1 +Test "gamma (0.5) == log(sqrt(pi))": +ildouble: 1 +ldouble: 1 +Test "gamma (3) == M_LN2l": +ildouble: 1 +ldouble: 1 + # hypot Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271": float: 1 @@ -486,8 +493,8 @@ Test "j0 (1.5) == 0.51182767173591812875 float: 1 ifloat: 1 Test "j0 (10.0) == -0.24593576445134833520": -float: 3 -ifloat: 3 +double: 1 +idouble: 1 # j1 Test "j1 (-1.0) == -0.44005058574493351596": @@ -499,20 +506,25 @@ ifloat: 1 Test "j1 (1.5) == 0.55793650791009964199": float: 1 ifloat: 1 -Test "j1 (2.0) == 0.57672480775687338720": -float: 1 -ifloat: 1 Test "j1 (10.0) == 0.043472746168861436670": float: 2 ifloat: 2 +ildouble: 2 +ldouble: 2 +Test "j1 (2.0) == 0.57672480775687338720": +float: 1 +ifloat: 1 +Test "j1 (8.0) == 0.23463634685391462438": +ildouble: 1 +ldouble: 1 # jn Test "jn (0, 1.5) == 0.51182767173591812875": float: 1 ifloat: 1 Test "jn (0, 10.0) == -0.24593576445134833520": -float: 3 -ifloat: 3 +double: 1 +idouble: 1 Test "jn (1, -1.0) == -0.44005058574493351596": float: 1 ifloat: 1 @@ -522,62 +534,104 @@ ifloat: 1 Test "jn (1, 1.5) == 0.55793650791009964199": float: 1 ifloat: 1 -Test "jn (1, 2.0) == 0.57672480775687338720": -float: 1 -ifloat: 1 Test "jn (1, 10.0) == 0.043472746168861436670": float: 2 ifloat: 2 +ildouble: 2 +ldouble: 2 +Test "jn (1, 2.0) == 0.57672480775687338720": +float: 1 +ifloat: 1 +Test "jn (1, 8.0) == 0.23463634685391462438": +ildouble: 1 +ldouble: 1 Test "jn (10, -1.0) == 0.26306151236874532070e-9": float: 2 ifloat: 2 +ildouble: 1 +ldouble: 1 Test "jn (10, 0.1) == 0.26905328954342155795e-19": double: 4 float: 6 idouble: 4 ifloat: 6 +ildouble: 1 +ldouble: 1 Test "jn (10, 0.7) == 0.75175911502153953928e-11": double: 3 float: 2 idouble: 3 ifloat: 2 +ildouble: 2 +ldouble: 2 Test "jn (10, 1.0) == 0.26306151236874532070e-9": float: 2 ifloat: 2 +ildouble: 1 +ldouble: 1 Test "jn (10, 10.0) == 0.20748610663335885770": -float: 9 -ifloat: 9 +double: 1 +float: 11 +idouble: 1 +ifloat: 11 +ildouble: 2 +ldouble: 2 Test "jn (10, 2.0) == 0.25153862827167367096e-6": float: 2 ifloat: 2 +ildouble: 1 +ldouble: 1 Test "jn (3, -1.0) == -0.019563353982668405919": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "jn (3, 0.1) == 0.000020820315754756261429": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 Test "jn (3, 0.7) == 0.0069296548267508408077": double: 2 idouble: 2 Test "jn (3, 1.0) == 0.019563353982668405919": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "jn (3, 10.0) == 0.058379379305186812343": -float: 5 -ifloat: 5 +double: 1 +float: 3 +idouble: 1 +ifloat: 3 +ildouble: 1 +ldouble: 1 # lgamma +Test "lgamma (-0.5) == log(2*sqrt(pi))": +ildouble: 1 +ldouble: 1 +Test "lgamma (0.5) == log(sqrt(pi))": +ildouble: 1 +ldouble: 1 Test "lgamma (0.7) == 0.26086724653166651439": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "lgamma (1.2) == -0.853740900033158497197e-1": double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "lgamma (3) == M_LN2l": +ildouble: 1 +ldouble: 1 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -602,7 +656,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -664,7 +718,7 @@ float: 1 ifloat: 1 # tan -Test "tan (0.7) == 0.84228838046307944813": +Test "tan (0.7) == 0.84228838046307944812813500221293775": ildouble: 1 ldouble: 1 Test "tan (pi/4) == 1": @@ -677,14 +731,21 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "tgamma (0.5) == sqrt (pi)": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "tgamma (0.7) == 1.29805533264755778568": double: 1 float: 1 idouble: 1 ifloat: 1 +Test "tgamma (4) == 6": +ildouble: 1 +ldouble: 1 # y0 Test "y0 (0.1) == -1.5342386513503668441": @@ -695,15 +756,22 @@ ifloat: 2 Test "y0 (0.7) == -0.19066492933739506743": double: 2 idouble: 2 +ildouble: 2 +ldouble: 2 +Test "y0 (1.5) == 0.38244892379775884396": +ildouble: 1 +ldouble: 1 Test "y0 (10.0) == 0.055671167283599391424": -float: 1 -ifloat: 1 +ildouble: 1 +ldouble: 1 Test "y0 (2.0) == 0.51037567264974511960": float: 1 ifloat: 1 Test "y0 (8.0) == 0.22352148938756622053": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 # y1 Test "y1 (0.1) == -6.4589510947020269877": @@ -711,6 +779,8 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 Test "y1 (0.7) == -1.1032498719076333697": double: 1 float: 1 @@ -723,11 +793,16 @@ Test "y1 (1.5) == -0.4123086269739112959 float: 2 ifloat: 2 Test "y1 (10.0) == 0.24901542420695388392": -float: 2 -ifloat: 2 +float: 1 +ifloat: 1 Test "y1 (2.0) == -0.10703243154093754689": float: 2 ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "y1 (8.0) == -0.15806046173124749426": +ildouble: 2 +ldouble: 2 # yn Test "yn (0, 0.1) == -1.5342386513503668441": @@ -738,20 +813,29 @@ ifloat: 2 Test "yn (0, 0.7) == -0.19066492933739506743": double: 2 idouble: 2 +ildouble: 2 +ldouble: 2 +Test "yn (0, 1.5) == 0.38244892379775884396": +ildouble: 1 +ldouble: 1 Test "yn (0, 10.0) == 0.055671167283599391424": -float: 1 -ifloat: 1 +ildouble: 1 +ldouble: 1 Test "yn (0, 2.0) == 0.51037567264974511960": float: 1 ifloat: 1 Test "yn (0, 8.0) == 0.22352148938756622053": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "yn (1, 0.1) == -6.4589510947020269877": double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 Test "yn (1, 0.7) == -1.1032498719076333697": double: 1 float: 1 @@ -764,38 +848,50 @@ Test "yn (1, 1.5) == -0.4123086269739112 float: 1 ifloat: 1 Test "yn (1, 10.0) == 0.24901542420695388392": -float: 2 -ifloat: 2 +float: 1 +ifloat: 1 Test "yn (1, 2.0) == -0.10703243154093754689": float: 2 ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "yn (1, 8.0) == -0.15806046173124749426": +ildouble: 2 +ldouble: 2 Test "yn (10, 0.1) == -0.11831335132045197885e19": double: 2 float: 2 idouble: 2 ifloat: 2 +ildouble: 2 +ldouble: 2 Test "yn (10, 0.7) == -0.42447194260703866924e10": double: 6 idouble: 6 +ildouble: 7 +ldouble: 7 Test "yn (10, 10.0) == -0.35981415218340272205": -float: 2 -ifloat: 2 -Test "yn (10, 2.0) == -129184.54220803928264": double: 1 +float: 1 idouble: 1 +ifloat: 1 +Test "yn (10, 2.0) == -129184.54220803928264": +ildouble: 1 +ldouble: 1 Test "yn (3, 0.1) == -5099.3323786129048894": double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 2 +ldouble: 2 Test "yn (3, 0.7) == -15.819479052819633505": double: 2 float: 1 idouble: 2 ifloat: 1 -Test "yn (3, 10.0) == -0.25136265718383732978": -float: 1 -ifloat: 1 +ildouble: 2 +ldouble: 2 Test "yn (3, 2.0) == -1.1277837768404277861": float: 1 ifloat: 1 @@ -848,8 +944,8 @@ double: 1 float: 7 idouble: 1 ifloat: 7 -ildouble: 5 -ldouble: 5 +ildouble: 6 +ldouble: 6 Function: Imaginary part of "cacosh": double: 1 @@ -942,14 +1038,12 @@ ldouble: 2 Function: Real part of "cexp": float: 3 ifloat: 3 -ildouble: 5 -ldouble: 5 +ildouble: 2 +ldouble: 2 Function: Imaginary part of "cexp": float: 2 ifloat: 2 -ildouble: 19 -ldouble: 19 Function: Imaginary part of "clog": ildouble: 1 @@ -1022,12 +1116,6 @@ ldouble: 2 Function: Real part of "csqrt": float: 1 ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csqrt": -ildouble: 1 -ldouble: 1 Function: Real part of "ctan": double: 1 @@ -1058,6 +1146,8 @@ double: 24 float: 11 idouble: 24 ifloat: 11 +ildouble: 12 +ldouble: 12 Function: "exp10": double: 1 @@ -1077,6 +1167,10 @@ ifloat: 1 ildouble: 1 ldouble: 1 +Function: "gamma": +ildouble: 1 +ldouble: 1 + Function: "hypot": float: 1 ifloat: 1 @@ -1084,24 +1178,32 @@ ildouble: 1 ldouble: 1 Function: "j0": -float: 3 -ifloat: 3 +double: 1 +float: 1 +idouble: 1 +ifloat: 1 Function: "j1": float: 2 ifloat: 2 +ildouble: 2 +ldouble: 2 Function: "jn": double: 4 -float: 9 +float: 11 idouble: 4 -ifloat: 9 +ifloat: 11 +ildouble: 2 +ldouble: 2 Function: "lgamma": double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 Function: "log": double: 1 @@ -1166,23 +1268,31 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: "y0": double: 2 float: 2 idouble: 2 ifloat: 2 +ildouble: 2 +ldouble: 2 Function: "y1": double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 2 +ldouble: 2 Function: "yn": double: 6 float: 2 idouble: 6 ifloat: 2 +ildouble: 7 +ldouble: 7 # end of automatic generation diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mpa.c glibc-2.2.3/sysdeps/m68k/fpu/mpa.c --- glibc-2.2.2/sysdeps/m68k/fpu/mpa.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mpa.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mpatan.c glibc-2.2.3/sysdeps/m68k/fpu/mpatan.c --- glibc-2.2.2/sysdeps/m68k/fpu/mpatan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mpatan.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mpatan2.c glibc-2.2.3/sysdeps/m68k/fpu/mpatan2.c --- glibc-2.2.2/sysdeps/m68k/fpu/mpatan2.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mpatan2.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mpexp.c glibc-2.2.3/sysdeps/m68k/fpu/mpexp.c --- glibc-2.2.2/sysdeps/m68k/fpu/mpexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mpexp.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mplog.c glibc-2.2.3/sysdeps/m68k/fpu/mplog.c --- glibc-2.2.2/sysdeps/m68k/fpu/mplog.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mplog.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mpsqrt.c glibc-2.2.3/sysdeps/m68k/fpu/mpsqrt.c --- glibc-2.2.2/sysdeps/m68k/fpu/mpsqrt.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mpsqrt.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/mptan.c glibc-2.2.3/sysdeps/m68k/fpu/mptan.c --- glibc-2.2.2/sysdeps/m68k/fpu/mptan.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/mptan.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/s_exp2.c glibc-2.2.3/sysdeps/m68k/fpu/s_exp2.c --- glibc-2.2.2/sysdeps/m68k/fpu/s_exp2.c Tue Sep 30 09:58:29 1997 +++ glibc-2.2.3/sysdeps/m68k/fpu/s_exp2.c Wed Dec 31 16:00:00 1969 @@ -1,2 +0,0 @@ -#define FUNC __ieee754_exp2 -#include diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/s_exp2f.c glibc-2.2.3/sysdeps/m68k/fpu/s_exp2f.c --- glibc-2.2.2/sysdeps/m68k/fpu/s_exp2f.c Tue Sep 30 09:58:31 1997 +++ glibc-2.2.3/sysdeps/m68k/fpu/s_exp2f.c Wed Dec 31 16:00:00 1969 @@ -1,2 +0,0 @@ -#define FUNC __ieee754_exp2f -#include diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/s_exp2l.c glibc-2.2.3/sysdeps/m68k/fpu/s_exp2l.c --- glibc-2.2.2/sysdeps/m68k/fpu/s_exp2l.c Tue Sep 30 09:58:33 1997 +++ glibc-2.2.3/sysdeps/m68k/fpu/s_exp2l.c Wed Dec 31 16:00:00 1969 @@ -1,2 +0,0 @@ -#define FUNC __ieee754_exp2l -#include diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/s_fpclassifyl.c glibc-2.2.3/sysdeps/m68k/fpu/s_fpclassifyl.c --- glibc-2.2.2/sysdeps/m68k/fpu/s_fpclassifyl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/s_fpclassifyl.c Fri Feb 16 05:40:22 2001 @@ -0,0 +1,43 @@ +/* Return classification value corresponding to argument. m68k version. + Copyright (C) 1997,2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1997. + Fixed for m68k by Andreas Schwab . + + 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 + +#include "math_private.h" + + +int +__fpclassifyl (long double x) +{ + u_int32_t ex, hx, lx; + int retval = FP_NORMAL; + + GET_LDOUBLE_WORDS (ex, hx, lx, x); + ex &= 0x7fff; + if ((ex | hx | lx) == 0) + retval = FP_ZERO; + else if (ex == 0 && (hx & 0x80000000) == 0) + retval = FP_SUBNORMAL; + else if (ex == 0x7fff) + retval = ((hx & 0x7fffffff) | lx) != 0 ? FP_NAN : FP_INFINITE; + + return retval; +} diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/s_nextafterl.c glibc-2.2.3/sysdeps/m68k/fpu/s_nextafterl.c --- glibc-2.2.2/sysdeps/m68k/fpu/s_nextafterl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/s_nextafterl.c Fri Feb 16 05:40:22 2001 @@ -0,0 +1,109 @@ +/* s_nextafterl.c -- long double version of s_nextafter.c. + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + * Fixed for m68k by Andreas Schwab . + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: $"; +#endif + +/* IEEE functions + * nextafterl(x,y) + * return the next machine floating-point number of x in the + * direction toward y. + * Special cases: + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + long double __nextafterl(long double x, long double y) +#else + long double __nextafterl(x,y) + long double x,y; +#endif +{ + int32_t ix,iy,esx,esy; + u_int32_t hx,hy,lx,ly; + + GET_LDOUBLE_WORDS(esx,hx,lx,x); + GET_LDOUBLE_WORDS(esy,hy,ly,y); + ix = esx&0x7fff; /* |x| */ + iy = esy&0x7fff; /* |y| */ + + if(((ix==0x7fff)&&((hx&0x7fffffff)|lx)!=0) || /* x is nan */ + ((iy==0x7fff)&&((hy&0x7fffffff)|ly)!=0)) /* y is nan */ + return x+y; + if(x==y) return y; /* x=y, return y */ + if((ix|hx|lx)==0) { /* x == 0 */ + SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */ + y = x*x; + if(y==x) return y; else return x; /* raise underflow flag */ + } + if(esx>=0) { /* x > 0 */ + if(esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))) { + /* x > y, x -= ulp */ + if(lx==0) { + if (ix != 0 && hx == 0x80000000) hx = 0; + if (hx==0) esx -= 1; + hx -= 1; + } + lx -= 1; + } else { /* x < y, x += ulp */ + lx += 1; + if(lx==0) { + hx += 1; + if (hx==0) { + hx = 0x80000000; + esx += 1; + } + } + } + } else { /* x < 0 */ + if(esy>=0||esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))){ + /* x < y, x -= ulp */ + if(lx==0) { + if (ix != 0 && hx == 0x80000000) hx = 0; + if (hx==0) esx -= 1; + hx -= 1; + } + lx -= 1; + } else { /* x > y, x += ulp */ + lx += 1; + if(lx==0) { + hx += 1; + if (hx==0) { + hx = 0x80000000; + esx += 1; + } + } + } + } + esy = esx&0x7fff; + if(esy==0x7fff) return x+x; /* overflow */ + if(esy==0 && (hx & 0x80000000) == 0) { /* underflow */ + y = x*x; + if(y!=x) { /* raise underflow flag */ + SET_LDOUBLE_WORDS(y,esx,hx,lx); + return y; + } + } + SET_LDOUBLE_WORDS(x,esx,hx,lx); + return x; +} +weak_alias (__nextafterl, nextafterl) +strong_alias (__nextafterl, __nexttowardl) +weak_alias (__nextafterl, nexttowardl) diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/sincos32.c glibc-2.2.3/sysdeps/m68k/fpu/sincos32.c --- glibc-2.2.2/sysdeps/m68k/fpu/sincos32.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/sincos32.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/slowexp.c glibc-2.2.3/sysdeps/m68k/fpu/slowexp.c --- glibc-2.2.2/sysdeps/m68k/fpu/slowexp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/slowexp.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/m68k/fpu/slowpow.c glibc-2.2.3/sysdeps/m68k/fpu/slowpow.c --- glibc-2.2.2/sysdeps/m68k/fpu/slowpow.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/m68k/fpu/slowpow.c Sun Mar 11 15:25:54 2001 @@ -0,0 +1 @@ +/* Not needed. */ diff -durpNa glibc-2.2.2/sysdeps/mach/getsysstats.c glibc-2.2.3/sysdeps/mach/getsysstats.c --- glibc-2.2.2/sysdeps/mach/getsysstats.c Fri Mar 5 14:40:43 1999 +++ glibc-2.2.3/sysdeps/mach/getsysstats.c Mon Mar 26 20:53:28 2001 @@ -1,5 +1,5 @@ /* System dependent pieces of sysconf; Mach version - Copyright (C) 1996, 97, 99 Free Software Foundation, Inc. + Copyright (C) 1996, 97, 99, 2001 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 @@ -60,7 +60,7 @@ __get_nprocs () } /* Return the number of physical pages on the system. */ -int +long int __get_phys_pages () { struct host_basic_info hbi; @@ -78,7 +78,7 @@ __get_phys_pages () } /* Return the number of available physical pages */ -int +long int __get_avphys_pages () { vm_statistics_data_t vs; diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/Makefile glibc-2.2.3/sysdeps/mach/hurd/Makefile --- glibc-2.2.2/sysdeps/mach/hurd/Makefile Wed Nov 8 14:10:22 2000 +++ glibc-2.2.3/sysdeps/mach/hurd/Makefile Sat Apr 7 14:02:38 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1993,94,95,96,97,98,99,2000 Free Software Foundation, Inc. +# Copyright (C) 1993,94,95,96,97,98,99,2000,01 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 @@ -149,7 +149,12 @@ lib-noranlib: $(common-objpfx)hurd/libhu endif $(link-rpcuserlibs): %-link.so: %_pic.a - $(build-module) -nostdlib -Wl,-soname=$(*F).so$($(*F).so-version) +# The $(build-module) variable now contains a sequence of several commands, +# so we can't tweak the ld command just by adding text to this command line. + $(build-module) +LDFLAGS-link-rpcuserlibs = -nostdlib -Wl,-soname=$(*F).so$($(*F).so-version) +LDFLAGS-libmachuser-link.so = $(LDFLAGS-link-rpcuserlibs) +LDFLAGS-libhurduser-link.so = $(LDFLAGS-link-rpcuserlibs) # And get them into the libc.so ldscript. $(inst_libdir)/libc.so: $(rpcuserlibs) diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/adjtime.c glibc-2.2.3/sysdeps/mach/hurd/adjtime.c --- glibc-2.2.2/sysdeps/mach/hurd/adjtime.c Mon May 26 15:21:57 1997 +++ glibc-2.2.3/sysdeps/mach/hurd/adjtime.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991,93,95,97,2001 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 @@ -30,12 +30,11 @@ __adjtime (delta, olddelta) struct timeval *olddelta; { error_t err; - mach_port_t hostpriv, devmaster; + mach_port_t hostpriv; - if (err = __USEPORT (PROC, __proc_getprivports (port, - &hostpriv, &devmaster))) - return __hurd_fail (err); - __mach_port_deallocate (__mach_task_self (), devmaster); + err = __get_privileged_ports (&hostpriv, NULL); + if (err) + return __hurd_fail (EPERM); err = __host_adjust_time (hostpriv, /* `time_value_t' and `struct timeval' are in diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/bits/errno.h glibc-2.2.3/sysdeps/mach/hurd/bits/errno.h --- glibc-2.2.2/sysdeps/mach/hurd/bits/errno.h Fri Feb 11 15:48:59 2000 +++ glibc-2.2.3/sysdeps/mach/hurd/bits/errno.h Mon Mar 26 20:53:28 2001 @@ -22,7 +22,7 @@ enum __error_t_codes EIO = _HURD_ERRNO (5), #define EIO _HURD_ERRNO (5) /* Input/output error */ ENXIO = _HURD_ERRNO (6), -#define ENXIO _HURD_ERRNO (6) /* Device not configured */ +#define ENXIO _HURD_ERRNO (6) /* No such device or address */ E2BIG = _HURD_ERRNO (7), #define E2BIG _HURD_ERRNO (7) /* Argument list too long */ ENOEXEC = _HURD_ERRNO (8), diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/bits/posix_opt.h glibc-2.2.3/sysdeps/mach/hurd/bits/posix_opt.h --- glibc-2.2.2/sysdeps/mach/hurd/bits/posix_opt.h Sun Oct 8 17:05:06 2000 +++ glibc-2.2.3/sysdeps/mach/hurd/bits/posix_opt.h Wed Apr 25 14:51:13 2001 @@ -1,5 +1,5 @@ /* Define POSIX options for GNU/Hurd. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998,2000,01 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 @@ -39,6 +39,9 @@ /* Mapping of files to memory is supported. */ #define _POSIX_MAPPED_FILES 1 + +/* Locking of ranges of memory is supported. */ +#define _POSIX_MEMLOCK_RANGE 1 /* Setting of memory protections is supported. */ #define _POSIX_MEMORY_PROTECTION 1 diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/configure glibc-2.2.3/sysdeps/mach/hurd/configure --- glibc-2.2.2/sysdeps/mach/hurd/configure Wed Aug 2 15:39:37 2000 +++ glibc-2.2.3/sysdeps/mach/hurd/configure Mon Mar 26 21:53:22 2001 @@ -5,3 +5,7 @@ DEFINES="$DEFINES -D_LIBC_REENTRANT" # Don't bother trying to generate any glue code to be compatible with the # existing system library, because we are the only system library. inhibit_glue=yes + +if test "x$prefix" != x; then + echo "configure: warning: --prefix= (empty) is required for GNU/Hurd to work normally" 1>&2 +fi diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/configure.in glibc-2.2.3/sysdeps/mach/hurd/configure.in --- glibc-2.2.2/sysdeps/mach/hurd/configure.in Wed Jan 22 20:23:31 1997 +++ glibc-2.2.3/sysdeps/mach/hurd/configure.in Mon Mar 26 20:53:28 2001 @@ -7,3 +7,7 @@ DEFINES="$DEFINES -D_LIBC_REENTRANT" # Don't bother trying to generate any glue code to be compatible with the # existing system library, because we are the only system library. inhibit_glue=yes + +if test "x$prefix" != x; then + AC_MSG_WARN([--prefix= (empty) is required for GNU/Hurd to work normally]) +fi diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/dl-sysdep.c glibc-2.2.3/sysdeps/mach/hurd/dl-sysdep.c --- glibc-2.2.2/sysdeps/mach/hurd/dl-sysdep.c Sat Jan 6 20:35:40 2001 +++ glibc-2.2.3/sysdeps/mach/hurd/dl-sysdep.c Thu Apr 12 14:02:11 2001 @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Hurd version. - Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -46,7 +47,6 @@ extern void __mach_init (void); extern int _dl_argc; extern char **_dl_argv; extern char **_environ; -extern void ENTRY_POINT (void); int __libc_enable_secure; int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion @@ -118,7 +118,7 @@ _dl_sysdep_start (void **start_argptr, { static struct hurd_startup_data nodata; _dl_hurd_data = &nodata; - nodata.user_entry = (vm_address_t) &ENTRY_POINT; + nodata.user_entry = (vm_address_t) ENTRY_POINT; } else _dl_hurd_data = (void *) p; @@ -127,12 +127,12 @@ _dl_sysdep_start (void **start_argptr, if (_dl_hurd_data->flags & EXEC_STACK_ARGS && _dl_hurd_data->user_entry == 0) - _dl_hurd_data->user_entry = (vm_address_t) &ENTRY_POINT; + _dl_hurd_data->user_entry = (vm_address_t) ENTRY_POINT; unfmh(); /* XXX */ #if 0 /* XXX make this work for real someday... */ - if (_dl_hurd_data->user_entry == (vm_address_t) &ENTRY_POINT) + if (_dl_hurd_data->user_entry == (vm_address_t) ENTRY_POINT) /* We were invoked as a command, not as the program interpreter. The generic ld.so code supports this: it will parse the args as "ld.so PROGRAM [ARGS...]". For booting the Hurd, we @@ -553,6 +553,37 @@ __libc_write (int fd, const void *buf, s return nwrote; } + +/* This is only used for printing messages (see dl-misc.c). */ +__ssize_t weak_function +__writev (int fd, const struct iovec *iov, int niov) +{ + int i; + size_t total = 0; + for (i = 0; i < niov; ++i) + total += iov[i].iov_len; + + assert (fd < _hurd_init_dtablesize); + + if (total != 0) + { + char buf[total], *bufp = buf; + error_t err; + mach_msg_type_number_t nwrote; + + for (i = 0; i < niov; ++i) + bufp = (memcpy (bufp, iov[i].iov_base, iov[i].iov_len) + + iov[i].iov_len); + + err = __io_write (_hurd_init_dtable[fd], buf, total, -1, &nwrote); + if (err) + return __hurd_fail (err); + + return nwrote; + } + return 0; +} + off_t weak_function __lseek (int fd, off_t offset, int whence) diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/fork.c glibc-2.2.3/sysdeps/mach/hurd/fork.c --- glibc-2.2.2/sysdeps/mach/hurd/fork.c Sat Dec 4 12:31:53 1999 +++ glibc-2.2.3/sysdeps/mach/hurd/fork.c Mon Apr 9 20:03:57 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994,95,96,97,99 Free Software Foundation, Inc. +/* Copyright (C) 1994,95,96,97,99,2001 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 @@ -296,8 +296,8 @@ __fork (void) mach_port_urefs_t refs, *record_refs = NULL; mach_port_t insert; mach_msg_type_name_t insert_type = MACH_MSG_TYPE_COPY_SEND; - if (portnames[i] == newtask) - /* Skip the name we use for the child's task port. */ + if (portnames[i] == newtask || portnames[i] == newproc) + /* Skip the name we use for the child's task or proc ports. */ continue; if (portnames[i] == __mach_task_self ()) /* For the name we use for our own task port, @@ -305,10 +305,9 @@ __fork (void) insert = newtask; else if (portnames[i] == _hurd_ports[INIT_PORT_PROC].port) { - /* Get the proc server port for the new task. */ - if (err = __proc_task2proc (portnames[i], newtask, &insert)) - LOSE; - insert_type = MACH_MSG_TYPE_MOVE_SEND; + /* Use the proc server port for the new task. */ + insert = newproc; + insert_type = MACH_MSG_TYPE_COPY_SEND; } else if (portnames[i] == ss->thread) { diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/gethostname.c glibc-2.2.3/sysdeps/mach/hurd/gethostname.c --- glibc-2.2.2/sysdeps/mach/hurd/gethostname.c Fri Apr 7 12:10:01 2000 +++ glibc-2.2.3/sysdeps/mach/hurd/gethostname.c Mon Mar 26 20:53:28 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991-1997, 2000, 2001 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 @@ -25,7 +25,7 @@ int __gethostname (name, len) char *name; - socklen_t len; + size_t len; { /* The host name is just the contents of the file /etc/hostname. */ ssize_t n = _hurd_get_host_config ("/etc/hostname", name, len); diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/i386/bits/sigcontext.h glibc-2.2.3/sysdeps/mach/hurd/i386/bits/sigcontext.h --- glibc-2.2.2/sysdeps/mach/hurd/i386/bits/sigcontext.h Tue Nov 25 19:51:10 1997 +++ glibc-2.2.3/sysdeps/mach/hurd/i386/bits/sigcontext.h Mon Mar 26 20:53:28 2001 @@ -1,5 +1,5 @@ /* Machine-dependent signal context structure for GNU Hurd. i386 version. - Copyright (C) 1991, 1992, 1994, 1997 Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1994, 1997, 2001 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 @@ -86,6 +86,12 @@ struct sigcontext struct i386_fp_regs sc_fpregs; int sc_fpexcsr; /* FPSR including exception bits. */ }; + +/* Traditional BSD names for some members. */ +#define sc_sp sc_uesp /* Stack pointer. */ +#define sc_fp sc_ebp /* Frame pointer. */ +#define sc_pc sc_eip /* Process counter. */ +#define sc_ps sc_efl /* Codes for SIGFPE. */ diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/i386/init-first.c glibc-2.2.3/sysdeps/mach/hurd/i386/init-first.c --- glibc-2.2.2/sysdeps/mach/hurd/i386/init-first.c Fri Apr 7 12:10:01 2000 +++ glibc-2.2.3/sysdeps/mach/hurd/i386/init-first.c Mon Mar 26 20:53:28 2001 @@ -1,5 +1,5 @@ /* Initialization code run first thing by the ELF startup code. For i386/Hurd. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -42,6 +43,7 @@ int __libc_multiple_libcs = 1; extern int __libc_argc; extern char **__libc_argv; +extern char **_dl_argv; void *(*_cthread_init_routine) (void); /* Returns new SP to use. */ void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__)); @@ -164,6 +166,13 @@ init (int *data) /* Copy the argdata from the old stack to the new one. */ newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data, (char *) d - (char *) data); + +#ifdef SHARED + /* And readjust the dynamic linker's idea of where the argument + vector lives. */ + assert (_dl_argv == argv); + _dl_argv = (void *) ((int *) newsp + 1); +#endif /* Set up the Hurd startup data block immediately following the argument and environment pointers on the new stack. */ diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/i386/intr-msg.h glibc-2.2.3/sysdeps/mach/hurd/i386/intr-msg.h --- glibc-2.2.2/sysdeps/mach/hurd/i386/intr-msg.h Mon Nov 15 16:23:39 1999 +++ glibc-2.2.3/sysdeps/mach/hurd/i386/intr-msg.h Sat Apr 7 14:02:39 2001 @@ -1,5 +1,5 @@ /* Machine-dependent details of interruptible RPC messaging. i386 version. - Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,99,2001 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 @@ -53,20 +53,20 @@ INTR_MSG_BACK_OUT (struct i386_thread_st #include "hurdfault.h" -static inline int -SYSCALL_EXAMINE (struct i386_thread_state *state, int *callno) -{ - struct { unsigned int c[2]; } *p = (void *) (state->eip - 7); - int result; - if (_hurdsig_catch_memory_fault (p)) - return 0; - if (result = p->c[0] == 0x0000009a && (p->c[1] & 0x00ffffff) == 0x00000700) - /* The PC is just after an `lcall $7,$0' instruction. - This is a system call in progress; %eax holds the call number. */ - *callno = state->eax; - _hurdsig_end_catch_fault (); - return result; -} +/* This cannot be an inline function because it calls setjmp. */ +#define SYSCALL_EXAMINE(state, callno) \ +({ \ + struct { unsigned int c[2]; } *p = (void *) ((state)->eip - 7); \ + int result; \ + if (_hurdsig_catch_memory_fault (p)) \ + return 0; \ + if (result = p->c[0] == 0x0000009a && (p->c[1] & 0x00ffffff) == 0x00000700) \ + /* The PC is just after an `lcall $7,$0' instruction. \ + This is a system call in progress; %eax holds the call number. */ \ + *(callno) = (state)->eax; \ + _hurdsig_end_catch_fault (); \ + result; \ +}) struct mach_msg_trap_args @@ -83,35 +83,31 @@ struct mach_msg_trap_args }; -static inline int -MSG_EXAMINE (struct i386_thread_state *state, int *msgid, - mach_port_t *rcv_name, mach_port_t *send_name, - mach_msg_option_t *option, mach_msg_timeout_t *timeout) -{ - const struct mach_msg_trap_args *args = (const void *) state->uesp; - mach_msg_header_t *msg; - - if (_hurdsig_catch_memory_fault (args)) - return -1; - msg = args->msg; - *option = args->option; - *timeout = args->timeout; - *rcv_name = args->rcv_name; - _hurdsig_end_catch_fault (); - - if (msg == 0) - { - *send_name = MACH_PORT_NULL; - *msgid = 0; - } - else - { - if (_hurdsig_catch_memory_fault (msg)) - return -1; - *send_name = msg->msgh_remote_port; - *msgid = msg->msgh_id; - _hurdsig_end_catch_fault (); - } - - return 0; -} +/* This cannot be an inline function because it calls setjmp. */ +#define MSG_EXAMINE(state, msgid, rcvname, send_name, opt, tmout) \ +({ \ + const struct mach_msg_trap_args *args = (const void *) (state)->uesp; \ + mach_msg_header_t *msg; \ + _hurdsig_catch_memory_fault (args) ? -1 : \ + ({ \ + msg = args->msg; \ + *(opt) = args->option; \ + *(tmout) = args->timeout; \ + *(rcvname) = args->rcv_name; \ + _hurdsig_end_catch_fault (); \ + if (msg == 0) \ + { \ + *(send_name) = MACH_PORT_NULL; \ + *(msgid) = 0; \ + } \ + else \ + { \ + if (_hurdsig_catch_memory_fault (msg)) \ + return -1; \ + *(send_name) = msg->msgh_remote_port; \ + *(msgid) = msg->msgh_id; \ + _hurdsig_end_catch_fault (); \ + } \ + 0; \ + }); \ +}) diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/i386/sigcontextinfo.h glibc-2.2.3/sysdeps/mach/hurd/i386/sigcontextinfo.h --- glibc-2.2.2/sysdeps/mach/hurd/i386/sigcontextinfo.h Mon Aug 23 10:41:38 1999 +++ glibc-2.2.3/sysdeps/mach/hurd/i386/sigcontextinfo.h Mon Mar 26 20:53:28 2001 @@ -21,3 +21,5 @@ #define GET_PC(ctx) ((void *) (ctx).sc_eip) #define GET_FRAME(ctx) ((void *) (ctx).sc_ebp) #define GET_STACK(ctx) ((void *) (ctx).sc_uesp) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/i386/sigreturn.c glibc-2.2.3/sysdeps/mach/hurd/i386/sigreturn.c --- glibc-2.2.2/sysdeps/mach/hurd/i386/sigreturn.c Sat Aug 8 13:52:09 1998 +++ glibc-2.2.3/sysdeps/mach/hurd/i386/sigreturn.c Sat Apr 7 14:02:39 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 94, 95, 96, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,94,95,96,97,98,2001 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 @@ -23,6 +23,7 @@ register int *sp asm ("%esp"); #include #include #include +#include int __sigreturn (struct sigcontext *scp) diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/mlock.c glibc-2.2.3/sysdeps/mach/hurd/mlock.c --- glibc-2.2.2/sysdeps/mach/hurd/mlock.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/mach/hurd/mlock.c Thu Apr 19 16:25:10 2001 @@ -0,0 +1,47 @@ +/* mlock -- guarantee pages are resident in memory. Mach/Hurd version. + Copyright (C) 2001 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. */ + +#include +#include +#include +#include +#include + +/* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to + be memory resident. */ + +int +mlock (const void *addr, size_t len) +{ + mach_port_t hostpriv; + vm_address_t page; + error_t err; + + err = __get_privileged_ports (&hostpriv, NULL); + if (err) + return __hurd_fail (EPERM); + + page = trunc_page ((vm_address_t) addr); + len = round_page ((vm_address_t) addr + len) - page; + err = __vm_wire (hostpriv, __mach_task_self (), page, len, + VM_PROT_ALL); /* XXX ? */ + __mach_port_deallocate (__mach_task_self (), hostpriv); + + return err ? __hurd_fail (err) : 0; +} diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/munlock.c glibc-2.2.3/sysdeps/mach/hurd/munlock.c --- glibc-2.2.2/sysdeps/mach/hurd/munlock.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/mach/hurd/munlock.c Thu Apr 19 16:25:10 2001 @@ -0,0 +1,45 @@ +/* munlock -- undo the effects of prior mlock calls. Mach/Hurd version. + Copyright (C) 2001 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. */ + +#include +#include +#include +#include +#include + +/* Undo the effects on these whole pages of any prior mlock calls. */ + +int +munlock (const void *addr, size_t len) +{ + mach_port_t hostpriv; + vm_address_t page; + error_t err; + + err = __get_privileged_ports (&hostpriv, NULL); + if (err) + return __hurd_fail (EPERM); + + page = trunc_page ((vm_address_t) addr); + len = round_page ((vm_address_t) addr + len) - page; + err = __vm_wire (hostpriv, __mach_task_self (), page, len, VM_PROT_NONE); + __mach_port_deallocate (__mach_task_self (), hostpriv); + + return err ? __hurd_fail (err) : 0; +} diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/opendir.c glibc-2.2.3/sysdeps/mach/hurd/opendir.c --- glibc-2.2.2/sysdeps/mach/hurd/opendir.c Sat Oct 24 11:14:13 1998 +++ glibc-2.2.3/sysdeps/mach/hurd/opendir.c Sat Apr 7 14:02:38 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,95,96,97,98,2001 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 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/reboot.c glibc-2.2.3/sysdeps/mach/hurd/reboot.c --- glibc-2.2.2/sysdeps/mach/hurd/reboot.c Wed Aug 12 16:48:32 1998 +++ glibc-2.2.3/sysdeps/mach/hurd/reboot.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 93, 94, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1992,93,94,97,98,2001 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 @@ -28,12 +28,11 @@ reboot (int howto) { error_t err; startup_t init; - mach_port_t hostpriv, devmaster; + mach_port_t hostpriv; - if (err = __USEPORT (PROC, __proc_getprivports (port, - &hostpriv, &devmaster))) - return __hurd_fail (err); - __mach_port_deallocate (__mach_task_self (), devmaster); + err = __get_privileged_ports (&hostpriv, NULL); + if (err) + return __hurd_fail (EPERM); err = __USEPORT (PROC, __proc_getmsgport (port, 1, &init)); if (!err) diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/recv.c glibc-2.2.3/sysdeps/mach/hurd/recv.c --- glibc-2.2.2/sysdeps/mach/hurd/recv.c Mon May 26 15:23:45 1997 +++ glibc-2.2.3/sysdeps/mach/hurd/recv.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1997, 2001 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 @@ -27,7 +27,7 @@ Returns the number read or -1 for errors. */ /* XXX should be __recv ? */ -int +ssize_t recv (fd, buf, n, flags) int fd; void *buf; diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/recvfrom.c glibc-2.2.3/sysdeps/mach/hurd/recvfrom.c --- glibc-2.2.2/sysdeps/mach/hurd/recvfrom.c Wed Mar 17 13:08:56 1999 +++ glibc-2.2.3/sysdeps/mach/hurd/recvfrom.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1997, 1999, 2001 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 @@ -27,7 +27,7 @@ If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of the sender, and store the actual size of the address in *ADDR_LEN. Returns the number of bytes read or -1 for errors. */ -int +ssize_t recvfrom (fd, buf, n, flags, addrarg, addr_len) int fd; void *buf; diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/send.c glibc-2.2.3/sysdeps/mach/hurd/send.c --- glibc-2.2.2/sysdeps/mach/hurd/send.c Mon Jun 23 14:52:13 1997 +++ glibc-2.2.3/sysdeps/mach/hurd/send.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1996, 1997, 2001 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 @@ -23,7 +23,7 @@ #include /* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ -int +ssize_t __send (fd, buf, n, flags) int fd; const void *buf; diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/sendto.c glibc-2.2.3/sysdeps/mach/hurd/sendto.c --- glibc-2.2.2/sysdeps/mach/hurd/sendto.c Fri Mar 5 14:41:03 1999 +++ glibc-2.2.3/sysdeps/mach/hurd/sendto.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1995, 1996, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1995, 1996, 1997, 1999, 2001 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 @@ -26,7 +26,7 @@ /* Send N bytes of BUF on socket FD to peer at address ADDR (which is ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ -int +ssize_t sendto (int fd, const void *buf, size_t n, diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/settimeofday.c glibc-2.2.3/sysdeps/mach/hurd/settimeofday.c --- glibc-2.2.2/sysdeps/mach/hurd/settimeofday.c Mon May 26 15:24:29 1997 +++ glibc-2.2.3/sysdeps/mach/hurd/settimeofday.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 97 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,95,97,2001 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 @@ -29,7 +29,7 @@ __settimeofday (tv, tz) const struct timezone *tz; { error_t err; - mach_port_t hostpriv, devmaster; + mach_port_t hostpriv; if (tz != NULL) { @@ -37,10 +37,9 @@ __settimeofday (tv, tz) return -1; } - if (err = __USEPORT (PROC, __proc_getprivports (port, - &hostpriv, &devmaster))) - return __hurd_fail (err); - __mach_port_deallocate (__mach_task_self (), devmaster); + err = __get_privileged_ports (&hostpriv, NULL); + if (err) + return __hurd_fail (EPERM); /* `time_value_t' and `struct timeval' are in fact identical with the names changed. */ diff -durpNa glibc-2.2.2/sysdeps/mach/hurd/sysd-stdio.c glibc-2.2.3/sysdeps/mach/hurd/sysd-stdio.c --- glibc-2.2.2/sysdeps/mach/hurd/sysd-stdio.c Mon Jul 26 08:32:57 1999 +++ glibc-2.2.3/sysdeps/mach/hurd/sysd-stdio.c Sat Apr 7 14:02:38 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 95, 96, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1994,95,96,97,98,2001 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 @@ -175,11 +175,10 @@ __stdio_open (filename, m, cookieptr) /* Open FILENAME with the mode in M. Use the same magic cookie already in *COOKIEPTR if possible, closing the old cookie with CLOSEFN. */ int -__stdio_reopen (filename, m, cookieptr, closefn) - const char *filename; - __io_mode m; - void **cookieptr; - __io_close_fn closefn; +__stdio_reopen (const char *filename, + __io_mode m, + void **cookieptr, + __io_close_fn closefn) { int flags; file_t port; diff -durpNa glibc-2.2.2/sysdeps/mach/i386/machine-sp.h glibc-2.2.3/sysdeps/mach/i386/machine-sp.h --- glibc-2.2.2/sysdeps/mach/i386/machine-sp.h Mon Jun 23 14:52:31 1997 +++ glibc-2.2.3/sysdeps/mach/i386/machine-sp.h Sat Apr 7 14:02:39 2001 @@ -1,5 +1,5 @@ /* Machine-specific function to return the stack pointer. i386 version. - Copyright (C) 1994, 1997 Free Software Foundation, Inc. + Copyright (C) 1994,97,2001 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 @@ -26,6 +26,7 @@ #define _EXTERN_INLINE extern __inline #endif +extern void *__thread_stack_pointer (void); _EXTERN_INLINE void * __thread_stack_pointer (void) { diff -durpNa glibc-2.2.2/sysdeps/mips/bsd-_setjmp.S glibc-2.2.3/sysdeps/mips/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/mips/bsd-_setjmp.S Mon Apr 17 10:19:00 2000 +++ glibc-2.2.3/sysdeps/mips/bsd-_setjmp.S Mon Mar 26 20:53:28 2001 @@ -27,14 +27,16 @@ .option pic2 #endif ENTRY (_setjmp) - .set noreorder #ifdef __PIC__ + .set noreorder .cpload t9 + .set reorder la t9, C_SYMBOL_NAME (__sigsetjmp) +#endif + move a1,zero /* Pass a second argument of zero. */ +#ifdef __PIC__ jr t9 #else j C_SYMBOL_NAME (__sigsetjmp) #endif - move a1,zero /* Pass a second argument of zero. */ - .set reorder .end _setjmp diff -durpNa glibc-2.2.2/sysdeps/mips/bsd-setjmp.S glibc-2.2.3/sysdeps/mips/bsd-setjmp.S --- glibc-2.2.2/sysdeps/mips/bsd-setjmp.S Mon Apr 17 10:19:00 2000 +++ glibc-2.2.3/sysdeps/mips/bsd-setjmp.S Mon Mar 26 20:53:28 2001 @@ -30,11 +30,13 @@ ENTRY (setjmp) .set noreorder #ifdef __PIC__ .cpload t9 + .set reorder la t9, C_SYMBOL_NAME (__sigsetjmp) +#endif + li a1, 1 /* Pass a second argument of one. */ +#ifdef __PIC__ jr t9 #else j C_SYMBOL_NAME (__sigsetjmp) #endif - li a1, 1 /* Pass a second argument of one. */ - .set reorder .end setjmp diff -durpNa glibc-2.2.2/sysdeps/mips/dl-machine.h glibc-2.2.3/sysdeps/mips/dl-machine.h --- glibc-2.2.2/sysdeps/mips/dl-machine.h Thu Nov 2 16:50:17 2000 +++ glibc-2.2.3/sysdeps/mips/dl-machine.h Mon Mar 26 20:53:28 2001 @@ -412,7 +412,6 @@ _dl_runtime_resolve:\n \ ".text\n"\ _RTLD_PROLOGUE(ENTRY_POINT)\ ".set noreorder\n\ - .set noreorder\n\ bltzal $0, 0f\n\ nop\n\ 0: .cpload $31\n\ diff -durpNa glibc-2.2.2/sysdeps/mips/elf/start.S glibc-2.2.3/sysdeps/mips/elf/start.S --- glibc-2.2.2/sysdeps/mips/elf/start.S Tue Jun 13 13:17:40 2000 +++ glibc-2.2.3/sysdeps/mips/elf/start.S Thu Apr 12 14:02:12 2001 @@ -1,5 +1,5 @@ /* Startup code compliant to the ELF Mips ABI. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 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 @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#define __ASSEMBLY__ 1 #include #ifndef ENTRY_POINT diff -durpNa glibc-2.2.2/sysdeps/mips/fpu/libm-test-ulps glibc-2.2.3/sysdeps/mips/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/mips/fpu/libm-test-ulps Thu Oct 26 22:57:35 2000 +++ glibc-2.2.3/sysdeps/mips/fpu/libm-test-ulps Wed Apr 25 14:51:13 2001 @@ -13,6 +13,17 @@ float: 2 idouble: 1 ifloat: 2 +# atan2 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4 +ifloat: 4 + # atanh Test "atanh (0.7) == 0.8673005276940531944": double: 1 @@ -39,87 +50,87 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -174,7 +185,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -521,7 +532,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -538,7 +549,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -757,6 +768,10 @@ double: 1 float: 2 idouble: 1 ifloat: 2 + +Function: "atan2": +float: 4 +ifloat: 4 Function: "atanh": double: 1 diff -durpNa glibc-2.2.2/sysdeps/posix/clock_getres.c glibc-2.2.3/sysdeps/posix/clock_getres.c --- glibc-2.2.2/sysdeps/posix/clock_getres.c Fri Feb 9 10:04:27 2001 +++ glibc-2.2.3/sysdeps/posix/clock_getres.c Wed Apr 25 14:51:13 2001 @@ -17,14 +17,19 @@ Boston, MA 02111-1307, USA. */ #include +#include #include #include +#include +#include -#ifndef EXTRA_CLOCK_CASES -# define EXTRA_CLOCK_CASES +#if HP_TIMING_AVAIL +/* Clock frequency of the processor. */ +static long int nsec; #endif + /* Get resolution of clock. */ int clock_getres (clockid_t clock_id, struct timespec *res) @@ -50,7 +55,35 @@ clock_getres (clockid_t clock_id, struct } break; - EXTRA_CLOCK_CASES +#if HP_TIMING_AVAIL + case CLOCK_PROCESS_CPUTIME_ID: + case CLOCK_THREAD_CPUTIME_ID: + { + if (__builtin_expect (nsec == 0, 0)) + { + hp_timing_t freq; + + /* This can only happen if we haven't initialized the `freq' + variable yet. Do this now. We don't have to protect this + code against multiple execution since all of them should + lead to the same result. */ + freq = __get_clockfreq (); + if (__builtin_expect (freq == 0, 0)) + /* Something went wrong. */ + break; + + nsec = MAX (UINT64_C (1000000000) / freq, 1); + } + + /* File in the values. The seconds are always zero (unless we + have a 1Hz machine). */ + res->tv_sec = 0; + res->tv_nsec = nsec; + + retval = 0; + } + break; +#endif default: __set_errno (EINVAL); diff -durpNa glibc-2.2.2/sysdeps/posix/euidaccess.c glibc-2.2.3/sysdeps/posix/euidaccess.c --- glibc-2.2.2/sysdeps/posix/euidaccess.c Thu Sep 7 11:56:39 2000 +++ glibc-2.2.3/sysdeps/posix/euidaccess.c Tue Apr 17 08:17:39 2001 @@ -1,5 +1,5 @@ /* Check if effective user id can access file - Copyright (C) 1990,91,95,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1990,91,95,96,97,98,99,2000,01 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 @@ -43,22 +43,11 @@ #include #endif -#ifdef _POSIX_VERSION -#include -#if !defined(NGROUPS_MAX) || NGROUPS_MAX < 1 -#undef NGROUPS_MAX -#define NGROUPS_MAX sysconf (_SC_NGROUPS_MAX) -#endif /* NGROUPS_MAX */ - -#else /* not _POSIX_VERSION */ +#ifndef _POSIX_VERSION uid_t getuid (); gid_t getgid (); uid_t geteuid (); gid_t getegid (); -#include -#if !defined(NGROUPS_MAX) && defined(NGROUPS) -#define NGROUPS_MAX NGROUPS -#endif /* not NGROUPS_MAX and NGROUPS */ #endif /* not POSIX_VERSION */ #include diff -durpNa glibc-2.2.2/sysdeps/posix/fpathconf.c glibc-2.2.3/sysdeps/posix/fpathconf.c --- glibc-2.2.2/sysdeps/posix/fpathconf.c Fri Feb 9 10:04:27 2001 +++ glibc-2.2.3/sysdeps/posix/fpathconf.c Wed Apr 25 14:51:13 2001 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -142,7 +143,16 @@ __fpathconf (fd, name) case _PC_ASYNC_IO: #ifdef _POSIX_ASYNC_IO - return _POSIX_ASYNC_IO; + { + /* AIO is only allowed on regular files and block devices. */ + struct stat64 st; + + if (__fxstat64 (_STAT_VER, fd, &st) < 0 + || (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode))) + return -1; + else + return 1; + } #else return -1; #endif @@ -202,6 +212,23 @@ __fpathconf (fd, name) return -1; return sv.f_frsize; } + + case _PC_ALLOC_SIZE_MIN: + { + /* XXX It is not entirely clear what the limit is supposed to do. + I assume that the number should reflect the minimal block + alignment. */ + struct statvfs64 sv; + + if (__fstatvfs64 (fd, &sv) < 0) + return -1; + return sv.f_frsize; + } + + case _PC_SYMLINK_MAX: + /* In general there are no limits. If a system has one it should + overwrite this case. */ + return -1; } } diff -durpNa glibc-2.2.2/sysdeps/posix/gai_strerror.c glibc-2.2.3/sysdeps/posix/gai_strerror.c --- glibc-2.2.2/sysdeps/posix/gai_strerror.c Sat Jun 19 09:40:29 1999 +++ glibc-2.2.3/sysdeps/posix/gai_strerror.c Sat Apr 7 14:02:39 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Philip Blundell , 1997. @@ -38,16 +38,21 @@ values[] = { EAI_NONAME, N_("Name or service not known") }, { EAI_SERVICE, N_("Servname not supported for ai_socktype") }, { EAI_SOCKTYPE, N_("ai_socktype not supported") }, - { EAI_SYSTEM, N_("System error") } + { EAI_SYSTEM, N_("System error") }, + { EAI_INPROGRESS, N_("Processing request in progress") }, + { EAI_CANCELED, N_("Request canceled") }, + { EAI_NOTCANCELED, N_("Request not canceled") }, + { EAI_ALLDONE, N_("All requests done") }, + { EAI_INTR, N_("Interrupted by a signal") } }; -char * +const char * gai_strerror (int code) { size_t i; for (i = 0; i < sizeof (values) / sizeof (values[0]); ++i) if (values[i].code == code) - return (char *) values[i].msg; + return _(values[i].msg); - return (char *) _("Unknown error"); + return _("Unknown error"); } diff -durpNa glibc-2.2.2/sysdeps/posix/pathconf.c glibc-2.2.3/sysdeps/posix/pathconf.c --- glibc-2.2.2/sysdeps/posix/pathconf.c Fri Feb 9 10:04:27 2001 +++ glibc-2.2.3/sysdeps/posix/pathconf.c Wed Apr 25 14:51:13 2001 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -138,7 +139,16 @@ __pathconf (const char *path, int name) case _PC_ASYNC_IO: #ifdef _POSIX_ASYNC_IO - return _POSIX_ASYNC_IO; + { + /* AIO is only allowed on regular files and block devices. */ + struct stat64 st; + + if (__xstat64 (_STAT_VER, path, &st) < 0 + || (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode))) + return -1; + else + return 1; + } #else return -1; #endif @@ -198,6 +208,23 @@ __pathconf (const char *path, int name) return -1; return sv.f_frsize; } + + case _PC_ALLOC_SIZE_MIN: + { + /* XXX It is not entirely clear what the limit is supposed to do. + I assume that the number should reflect the minimal block + alignment. */ + struct statvfs64 sv; + + if (__statvfs64 (path, &sv) < 0) + return -1; + return sv.f_frsize; + } + + case _PC_SYMLINK_MAX: + /* In general there are no limits. If a system has one it should + overwrite this case. */ + return -1; } } diff -durpNa glibc-2.2.2/sysdeps/posix/sprofil.c glibc-2.2.3/sysdeps/posix/sprofil.c --- glibc-2.2.2/sysdeps/posix/sprofil.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/posix/sprofil.c Wed Mar 21 12:15:05 2001 @@ -0,0 +1,357 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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. */ + +#include +#include +#include +#include +#include + +#include +#include + +#ifndef SIGPROF +# include +#else + +#include + +struct region + { + size_t offset; + size_t nsamples; + unsigned int scale; + union + { + void *vp; + unsigned short *us; + unsigned int *ui; + } + sample; + size_t start; + size_t end; + }; + +struct prof_info + { + unsigned int num_regions; + struct region *region; + struct region *last, *overflow; + struct itimerval saved_timer; + struct sigaction saved_action; + }; + +static unsigned int overflow_counter; + +static struct region default_overflow_region = + { + offset: 0, + nsamples: 1, + scale: 2, + sample: { &overflow_counter }, + start: 0, + end: ~(size_t) 0 + }; + +static struct prof_info prof_info; + +static inline unsigned long int +pc_to_index (size_t pc, size_t offset, unsigned int scale, int prof_uint) +{ + size_t i = (pc - offset) / (prof_uint ? sizeof (int) : sizeof (short)); + + if (sizeof (unsigned long long int) > sizeof (size_t)) + return (unsigned long long int) i * scale / 65536; + else + return i / 65536 * scale + i % 65536 * scale / 65536; +} + +static inline size_t +index_to_pc (unsigned long int n, size_t offset, unsigned int scale, + int prof_uint) +{ + size_t pc, bin_size = (prof_uint ? sizeof (int) : sizeof (short)); + + if (sizeof (unsigned long long int) > sizeof (size_t)) + pc = offset + (unsigned long long int) n * bin_size * 65536ull / scale; + else + pc = (offset + n * bin_size / scale * 65536 + + n * bin_size % scale * 65536 / scale); + + if (pc_to_index (pc, offset, scale, prof_uint) < n) + /* Adjust for rounding error. */ + ++pc; + + assert (pc_to_index (pc - 1, offset, scale, prof_uint) < n + && pc_to_index (pc, offset, scale, prof_uint) >= n); + + return pc; +} + +static inline void +profil_count (void *pcp, int prof_uint) +{ + struct region *region, *r = prof_info.last; + size_t lo, hi, mid, pc = (unsigned long int) pcp; + unsigned long int i; + + /* Fast path: pc is in same region as before. */ + if (pc >= r->start && pc < r->end) + region = r; + else + { + /* Slow path: do a binary search for the right region. */ + lo = 0; hi = prof_info.num_regions - 1; + while (lo <= hi) + { + mid = (lo + hi) / 2; + + r = prof_info.region + mid; + if (pc >= r->start && pc < r->end) + { + prof_info.last = r; + region = r; + break; + } + + if (pc < r->start) + hi = mid - 1; + else + lo = mid + 1; + } + + /* No matching region: increment overflow count. There is no point + in updating the cache here, as it won't hit anyhow. */ + region = prof_info.overflow; + } + + i = pc_to_index (pc, region->offset, region->scale, prof_uint); + if (i < r->nsamples) + { + if (prof_uint) + { + if (r->sample.ui[i] < (unsigned int) ~0) + ++r->sample.ui[i]; + } + else + { + if (r->sample.us[i] < (unsigned short) ~0) + ++r->sample.us[i]; + } + } + else + { + if (prof_uint) + ++prof_info.overflow->sample.ui[0]; + else + ++prof_info.overflow->sample.us[0]; + } +} + +static inline void +profil_count_ushort (void *pcp) +{ + profil_count (pcp, 0); +} + +static inline void +profil_count_uint (void *pcp) +{ + profil_count (pcp, 1); +} + +/* Get the machine-dependent definition of `profil_counter', the signal + handler for SIGPROF. It calls `profil_count' (above) with the PC of the + interrupted code. */ +#define profil_counter profil_counter_ushort +#define profil_count(pc) profil_count (pc, 0) +#include "profil-counter.h" + +#undef profil_counter +#undef profil_count + +#define profil_counter profil_counter_uint +#define profil_count(pc) profil_count (pc, 1) +#include "profil-counter.h" + +static int +insert (int i, unsigned long int start, unsigned long int end, struct prof *p, + int prof_uint) +{ + struct region *r; + size_t to_copy; + + if (start >= end) + return 0; /* don't bother with empty regions */ + + if (prof_info.num_regions == 0) + r = malloc (sizeof (*r)); + else + r = realloc (prof_info.region, (prof_info.num_regions + 1) * sizeof (*r)); + if (r == NULL) + return -1; + + to_copy = prof_info.num_regions - i; + if (to_copy > 0) + memmove (r + i + 1, r + i, to_copy * sizeof (*r)); + + r[i].offset = p->pr_off; + r[i].nsamples = p->pr_size / (prof_uint ? sizeof (int) : sizeof (short)); + r[i].scale = p->pr_scale; + r[i].sample.vp = p->pr_base; + r[i].start = start; + r[i].end = end; + + prof_info.region = r; + ++prof_info.num_regions; + + if (p->pr_off == 0 && p->pr_scale == 2) + prof_info.overflow = r; + + return 0; +} + +/* Add a new profiling region. If the new region overlaps with + existing ones, this may add multiple subregions so that the final + data structure is free of overlaps. The absence of overlaps makes + it possible to use a binary search in profil_count(). Note that + this function depends on new regions being presented in DECREASING + ORDER of starting address. */ + +static int +add_region (struct prof *p, int prof_uint) +{ + unsigned long int nsamples; + size_t start, end; + int i; + + if (p->pr_scale < 2) + return 0; + + nsamples = p->pr_size / (prof_uint ? sizeof (int) : sizeof (short)); + + start = p->pr_off; + end = index_to_pc (nsamples, p->pr_off, p->pr_scale, prof_uint); + + /* Merge with existing regions. */ + for (i = 0; i < prof_info.num_regions; ++i) + { + if (start < prof_info.region[i].start) + { + if (end < prof_info.region[i].start) + break; + else if (insert (i, start, prof_info.region[i].start, p, prof_uint) + < 0) + return -1; + } + start = prof_info.region[i].end; + } + return insert (i, start, end, p, prof_uint); +} + +static int +pcmp (const void *left, const void *right) +{ + struct prof *l = *(struct prof **) left; + struct prof *r = *(struct prof **) right; + + if (l->pr_off < r->pr_off) + return 1; + else if (l->pr_off > r->pr_off) + return -1; + return 0; +} + +int +__sprofil (struct prof *profp, int profcnt, struct timeval *tvp, + unsigned int flags) +{ + struct prof *p[profcnt]; + struct itimerval timer; + struct sigaction act; + int i; + + if (tvp != NULL) + { + /* Return profiling period. */ + unsigned long int t = 1000000 / __profile_frequency (); + tvp->tv_sec = t / 1000000; + tvp->tv_usec = t % 1000000; + } + + if (prof_info.num_regions > 0) + { + /* Disable profiling. */ + if (__setitimer (ITIMER_PROF, &prof_info.saved_timer, NULL) < 0) + return -1; + + if (__sigaction (SIGPROF, &prof_info.saved_action, NULL) < 0) + return -1; + + free (prof_info.region); + return 0; + } + + prof_info.num_regions = 0; + prof_info.region = NULL; + prof_info.overflow = &default_overflow_region; + + for (i = 0; i < profcnt; ++i) + p[i] = profp + i; + + /* Sort in order of decreasing starting address: */ + qsort (p, profcnt, sizeof (p[0]), pcmp); + + /* Add regions in order of decreasing starting address: */ + for (i = 0; i < profcnt; ++i) + if (add_region (p[i], (flags & PROF_UINT) != 0) < 0) + { + if (prof_info.region) + free (prof_info.region); + prof_info.num_regions = 0; + prof_info.region = NULL; + return -1; + } + + if (prof_info.num_regions == 0) + return 0; + + prof_info.last = prof_info.region; + + /* Install SIGPROF handler. */ + if (flags & PROF_UINT) + act.sa_handler = (sighandler_t) &profil_counter_uint; + else + act.sa_handler = (sighandler_t) &profil_counter_ushort; + act.sa_flags = SA_RESTART; + sigfillset (&act.sa_mask); + if (__sigaction (SIGPROF, &act, &prof_info.saved_action) < 0) + return -1; + + /* Setup profiling timer. */ + timer.it_value.tv_sec = 0; + timer.it_value.tv_usec = 1; + timer.it_interval = timer.it_value; + return __setitimer (ITIMER_PROF, &timer, &prof_info.saved_timer); +} + +weak_alias (__sprofil, sprofil) + +#endif /* SIGPROF */ diff -durpNa glibc-2.2.2/sysdeps/posix/sysconf.c glibc-2.2.3/sysdeps/posix/sysconf.c --- glibc-2.2.2/sysdeps/posix/sysconf.c Fri Feb 9 10:04:27 2001 +++ glibc-2.2.3/sysdeps/posix/sysconf.c Wed Apr 25 14:51:13 2001 @@ -798,6 +798,31 @@ __sysconf (name) return -1; #endif + case _SC_V6_ILP32_OFF32: +#ifdef _POSIX_V6_ILP32_OFF32 + return _POSIX_V6_ILP32_OFF32; +#else + return -1; +#endif + case _SC_V6_ILP32_OFFBIG: +#ifdef _POSIX_V6_ILP32_OFFBIG + return _POSIX_V6_ILP32_OFFBIG; +#else + return -1; +#endif + case _SC_V6_LP64_OFF64: +#ifdef _POSIX_V6_LP64_OFF64 + return _POSIX_V6_LP64_OFF64; +#else + return -1; +#endif + case _SC_V6_LPBIG_OFFBIG: +#ifdef _POSIX_V6_LPBIG_OFFBIG + return _POSIX_V6_LPBIG_OFFBIG; +#else + return -1; +#endif + case _SC_XOPEN_LEGACY: return _XOPEN_LEGACY; @@ -926,9 +951,9 @@ __sysconf (name) return -1; #endif - case _SC_MULTIPLE_PROCESS: -#ifdef _POSIX_MULTIPLE_PROCESS - return _POSIX_MULTIPLE_PROCESS; + case _SC_MULTI_PROCESS: +#ifdef _POSIX_MULTI_PROCESS + return _POSIX_MULTI_PROCESS; #else return -1; #endif @@ -1084,7 +1109,7 @@ __sysconf (name) return -1; #endif - case _SC_SYMLOOP: + case _SC_SYMLOOP_MAX: #ifdef SYMLOOP_MAX return SYMLOOP_MAX; #else diff -durpNa glibc-2.2.2/sysdeps/posix/tempname.c glibc-2.2.3/sysdeps/posix/tempname.c --- glibc-2.2.2/sysdeps/posix/tempname.c Thu Sep 14 12:24:26 2000 +++ glibc-2.2.3/sysdeps/posix/tempname.c Wed Apr 25 14:51:13 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991-1999, 2000, 2001 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 @@ -16,24 +16,130 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include -#include -#include -#include -#include +#if HAVE_CONFIG_H +# include +#endif + #include -#include -#include -#include -#include #include +#include +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include +#ifndef P_tmpdir +# define P_tmpdir "/tmp" +#endif +#ifndef TMP_MAX +# define TMP_MAX 238328 +#endif +#ifndef __GT_FILE +# define __GT_FILE 0 +# define __GT_BIGFILE 1 +# define __GT_DIR 2 +# define __GT_NOCREATE 3 +#endif + +#if STDC_HEADERS || _LIBC +# include +# include +# include +#endif + +#if HAVE_FCNTL_H || _LIBC +# include +#endif + +#if HAVE_SYS_TIME_H || _LIBC +# include +#endif + +#if HAVE_STDINT_H || _LIBC +# include +#endif + +#if HAVE_UNISTD_H || _LIBC +# include +#endif + +#include +#if STAT_MACROS_BROKEN +# undef S_ISDIR +#endif +#if !defined S_ISDIR && defined S_IFDIR +# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif + +#if _LIBC +# define struct_stat64 struct stat64 +#else +# define struct_stat64 struct stat +# define __getpid getpid +# define __gettimeofday gettimeofday +# define __mkdir mkdir +# define __open open +# define __open64 open +# define __lxstat64(version, path, buf) lstat (path, buf) +# define __xstat64(version, path, buf) stat (path, buf) +#endif + +#if ! (HAVE___SECURE_GETENV || _LIBC) +# define __secure_getenv getenv +#endif + +#ifdef _LIBC +# include +# if HP_TIMING_AVAIL +# define RANDOM_BITS(Var) \ + if (__builtin_expect (value == UINT64_C (0), 0)) \ + { \ + /* If this is the first time this function is used initialize \ + the variable we accumulate the value in to some somewhat \ + random value. If we'd not do this programs at startup time \ + might have a reduced set of possible names, at least on slow \ + machines. */ \ + struct timeval tv; \ + __gettimeofday (&tv, NULL); \ + value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ + } \ + HP_TIMING_NOW (Var) +# endif +#endif + +/* Use the widest available unsigned type if uint64_t is not + available. The algorithm below extracts a number less than 62**6 + (approximately 2**35.725) from uint64_t, so ancient hosts where + uintmax_t is only 32 bits lose about 3.725 bits of randomness, + which is better than not having mkstemp at all. */ +#if !defined UINT64_MAX && !defined uint64_t +# define uint64_t uintmax_t +#endif + /* Return nonzero if DIR is an existent directory. */ static int direxists (const char *dir) { - struct stat64 buf; + struct_stat64 buf; return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); } @@ -124,10 +230,10 @@ __gen_tempname (char *tmpl, int kind) int len; char *XXXXXX; static uint64_t value; - struct timeval tv; + uint64_t random_time_bits; int count, fd = -1; int save_errno = errno; - struct stat64 st; + struct_stat64 st; len = strlen (tmpl); if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX")) @@ -140,8 +246,20 @@ __gen_tempname (char *tmpl, int kind) XXXXXX = &tmpl[len - 6]; /* Get some more or less random data. */ - __gettimeofday (&tv, NULL); - value += ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ __getpid (); +#ifdef RANDOM_BITS + RANDOM_BITS (random_time_bits); +#else +# if HAVE_GETTIMEOFDAY || _LIBC + { + struct timeval tv; + __gettimeofday (&tv, NULL); + random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; + } +# else + random_time_bits = time (NULL); +# endif +#endif + value += random_time_bits ^ __getpid (); for (count = 0; count < TMP_MAX; value += 7777, ++count) { @@ -163,15 +281,15 @@ __gen_tempname (char *tmpl, int kind) switch (kind) { case __GT_FILE: - fd = __open (tmpl, O_RDWR | O_CREAT | O_EXCL, 0600); + fd = __open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); break; case __GT_BIGFILE: - fd = __open64 (tmpl, O_RDWR | O_CREAT | O_EXCL, 0600); + fd = __open64 (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); break; case __GT_DIR: - fd = __mkdir (tmpl, 0700); + fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); break; case __GT_NOCREATE: diff -durpNa glibc-2.2.2/sysdeps/powerpc/atomicity.h glibc-2.2.3/sysdeps/powerpc/atomicity.h --- glibc-2.2.2/sysdeps/powerpc/atomicity.h Tue Feb 15 10:51:42 2000 +++ glibc-2.2.3/sysdeps/powerpc/atomicity.h Sat Apr 7 14:02:39 2001 @@ -33,11 +33,11 @@ __attribute__ ((unused)) exchange_and_add (volatile uint32_t *mem, int val) { int tmp, result; - __asm__ ("\ -0: lwarx %0,0,%2 - add%I3 %1,%0,%3 - stwcx. %1,0,%2 - bne- 0b + __asm__ ("\n\ +0: lwarx %0,0,%2 \n\ + add%I3 %1,%0,%3 \n\ + stwcx. %1,0,%2 \n\ + bne- 0b \n\ " : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory"); return result; } @@ -47,11 +47,11 @@ __attribute__ ((unused)) atomic_add (volatile uint32_t *mem, int val) { int tmp; - __asm__ ("\ -0: lwarx %0,0,%1 - add%I2 %0,%0,%2 - stwcx. %0,0,%1 - bne- 0b + __asm__ ("\n\ +0: lwarx %0,0,%1 \n\ + add%I2 %0,%0,%2 \n\ + stwcx. %0,0,%1 \n\ + bne- 0b \n\ " : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory"); } @@ -60,14 +60,14 @@ __attribute__ ((unused)) compare_and_swap (volatile long int *p, long int oldval, long int newval) { int result; - __asm__ ("\ -0: lwarx %0,0,%1 - sub%I2c. %0,%0,%2 - cntlzw %0,%0 - bne- 1f - stwcx. %3,0,%1 - bne- 0b -1: + __asm__ ("\n\ +0: lwarx %0,0,%1 \n\ + sub%I2c. %0,%0,%2 \n\ + cntlzw %0,%0 \n\ + bne- 1f \n\ + stwcx. %3,0,%1 \n\ + bne- 0b \n\ +1: \n\ " : "=&b"(result) : "r"(p), "Ir"(oldval), "r"(newval) : "cr0", "memory"); return result >> 5; } @@ -77,10 +77,10 @@ __attribute__ ((unused)) always_swap (volatile long int *p, long int newval) { long int result; - __asm__ ("\ -0: lwarx %0,0,%1 - stwcx. %2,0,%1 - bne- 0b + __asm__ ("\n\ +0: lwarx %0,0,%1 \n\ + stwcx. %2,0,%1 \n\ + bne- 0b \n\ " : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory"); return result; } @@ -90,13 +90,13 @@ __attribute__ ((unused)) test_and_set (volatile long int *p, long int newval) { int result; - __asm__ ("\ -0: lwarx %0,0,%1 - cmpwi %0,0 - bne- 1f - stwcx. %2,0,%1 - bne- 0b -1: + __asm__ ("\n\ +0: lwarx %0,0,%1 \n\ + cmpwi %0,0 \n\ + bne- 1f \n\ + stwcx. %2,0,%1 \n\ + bne- 0b \n\ +1: \n\ " : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory"); return result; } diff -durpNa glibc-2.2.2/sysdeps/powerpc/dl-machine.c glibc-2.2.3/sysdeps/powerpc/dl-machine.c --- glibc-2.2.2/sysdeps/powerpc/dl-machine.c Sat Jan 6 20:35:40 2001 +++ glibc-2.2.3/sysdeps/powerpc/dl-machine.c Mon Mar 26 20:53:28 2001 @@ -468,10 +468,10 @@ __process_machine_rela (struct link_map const char *strtab; strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, onsider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/powerpc/dl-machine.h glibc-2.2.3/sysdeps/powerpc/dl-machine.h --- glibc-2.2.2/sysdeps/powerpc/dl-machine.h Thu Oct 26 22:57:35 2000 +++ glibc-2.2.3/sysdeps/powerpc/dl-machine.h Sat Apr 7 14:02:39 2001 @@ -1,6 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. PowerPC version. - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 - Free Software Foundation, Inc. + Copyright (C) 1995-2000, 2001 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 @@ -103,101 +102,101 @@ elf_machine_load_address (void) /* This code is used in dl-runtime.c to call the `fixup' function and then redirect to the address it returns. It is called from code built in the PLT by elf_machine_runtime_setup. */ -#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .section \".text\" - .align 2 - .globl _dl_runtime_resolve - .type _dl_runtime_resolve,@function -_dl_runtime_resolve: - # We need to save the registers used to pass parameters, and register 0, - # which is used by _mcount; the registers are saved in a stack frame. - stwu 1,-64(1) - stw 0,12(1) - stw 3,16(1) - stw 4,20(1) - # The code that calls this has put parameters for `fixup' in r12 and r11. - mr 3,12 - stw 5,24(1) - mr 4,11 - stw 6,28(1) - mflr 0 - # We also need to save some of the condition register fields. - stw 7,32(1) - stw 0,48(1) - stw 8,36(1) - mfcr 0 - stw 9,40(1) - stw 10,44(1) - stw 0,8(1) - bl fixup@local - # 'fixup' returns the address we want to branch to. - mtctr 3 - # Put the registers back... - lwz 0,48(1) - lwz 10,44(1) - lwz 9,40(1) - mtlr 0 - lwz 8,36(1) - lwz 0,8(1) - lwz 7,32(1) - lwz 6,28(1) - mtcrf 0xFF,0 - lwz 5,24(1) - lwz 4,20(1) - lwz 3,16(1) - lwz 0,12(1) - # ...unwind the stack frame, and jump to the PLT entry we updated. - addi 1,1,64 - bctr - .size _dl_runtime_resolve,.-_dl_runtime_resolve - - .align 2 - .globl _dl_prof_resolve - .type _dl_prof_resolve,@function -_dl_prof_resolve: - # We need to save the registers used to pass parameters, and register 0, - # which is used by _mcount; the registers are saved in a stack frame. - stwu 1,-64(1) - stw 0,12(1) - stw 3,16(1) - stw 4,20(1) - # The code that calls this has put parameters for `fixup' in r12 and r11. - mr 3,12 - stw 5,24(1) - mr 4,11 - stw 6,28(1) - mflr 5 - # We also need to save some of the condition register fields. - stw 7,32(1) - stw 5,48(1) - stw 8,36(1) - mfcr 0 - stw 9,40(1) - stw 10,44(1) - stw 0,8(1) - bl profile_fixup@local - # 'fixup' returns the address we want to branch to. - mtctr 3 - # Put the registers back... - lwz 0,48(1) - lwz 10,44(1) - lwz 9,40(1) - mtlr 0 - lwz 8,36(1) - lwz 0,8(1) - lwz 7,32(1) - lwz 6,28(1) - mtcrf 0xFF,0 - lwz 5,24(1) - lwz 4,20(1) - lwz 3,16(1) - lwz 0,12(1) - # ...unwind the stack frame, and jump to the PLT entry we updated. - addi 1,1,64 - bctr - .size _dl_prof_resolve,.-_dl_prof_resolve - # Undo '.section text'. - .previous +#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\n\ + .section \".text\" \n\ + .align 2 \n\ + .globl _dl_runtime_resolve \n\ + .type _dl_runtime_resolve,@function \n\ +_dl_runtime_resolve: \n\ + # We need to save the registers used to pass parameters, and register 0,\n\ + # which is used by _mcount; the registers are saved in a stack frame.\n\ + stwu 1,-64(1) \n\ + stw 0,12(1) \n\ + stw 3,16(1) \n\ + stw 4,20(1) \n\ + # The code that calls this has put parameters for `fixup' in r12 and r11.\n\ + mr 3,12 \n\ + stw 5,24(1) \n\ + mr 4,11 \n\ + stw 6,28(1) \n\ + mflr 0 \n\ + # We also need to save some of the condition register fields.\n\ + stw 7,32(1) \n\ + stw 0,48(1) \n\ + stw 8,36(1) \n\ + mfcr 0 \n\ + stw 9,40(1) \n\ + stw 10,44(1) \n\ + stw 0,8(1) \n\ + bl fixup@local \n\ + # 'fixup' returns the address we want to branch to.\n\ + mtctr 3 \n\ + # Put the registers back...\n\ + lwz 0,48(1) \n\ + lwz 10,44(1) \n\ + lwz 9,40(1) \n\ + mtlr 0 \n\ + lwz 8,36(1) \n\ + lwz 0,8(1) \n\ + lwz 7,32(1) \n\ + lwz 6,28(1) \n\ + mtcrf 0xFF,0 \n\ + lwz 5,24(1) \n\ + lwz 4,20(1) \n\ + lwz 3,16(1) \n\ + lwz 0,12(1) \n\ + # ...unwind the stack frame, and jump to the PLT entry we updated.\n\ + addi 1,1,64 \n\ + bctr \n\ + .size _dl_runtime_resolve,.-_dl_runtime_resolve \n\ + \n\ + .align 2 \n\ + .globl _dl_prof_resolve \n\ + .type _dl_prof_resolve,@function \n\ +_dl_prof_resolve: \n\ + # We need to save the registers used to pass parameters, and register 0,\n\ + # which is used by _mcount; the registers are saved in a stack frame.\n\ + stwu 1,-64(1) \n\ + stw 0,12(1) \n\ + stw 3,16(1) \n\ + stw 4,20(1) \n\ + # The code that calls this has put parameters for `fixup' in r12 and r11.\n\ + mr 3,12 \n\ + stw 5,24(1) \n\ + mr 4,11 \n\ + stw 6,28(1) \n\ + mflr 5 \n\ + # We also need to save some of the condition register fields.\n\ + stw 7,32(1) \n\ + stw 5,48(1) \n\ + stw 8,36(1) \n\ + mfcr 0 \n\ + stw 9,40(1) \n\ + stw 10,44(1) \n\ + stw 0,8(1) \n\ + bl profile_fixup@local \n\ + # 'fixup' returns the address we want to branch to.\n\ + mtctr 3 \n\ + # Put the registers back...\n\ + lwz 0,48(1) \n\ + lwz 10,44(1) \n\ + lwz 9,40(1) \n\ + mtlr 0 \n\ + lwz 8,36(1) \n\ + lwz 0,8(1) \n\ + lwz 7,32(1) \n\ + lwz 6,28(1) \n\ + mtcrf 0xFF,0 \n\ + lwz 5,24(1) \n\ + lwz 4,20(1) \n\ + lwz 3,16(1) \n\ + lwz 0,12(1) \n\ + # ...unwind the stack frame, and jump to the PLT entry we updated.\n\ + addi 1,1,64 \n\ + bctr \n\ + .size _dl_prof_resolve,.-_dl_prof_resolve \n\ + # Undo '.section text'.\n\ + .previous \n\ "); /* The actual _start code is in dl-start.S. Use a really @@ -227,9 +226,8 @@ __elf_preferred_address(struct link_map /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ #define ELF_MACHINE_JMP_SLOT R_PPC_JMP_SLOT -/* Nonzero iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. */ -#define elf_machine_pltrel_p(type) ((type) == R_PPC_JMP_SLOT) +/* The PowerPC never uses REL relocations. */ +#define ELF_MACHINE_NO_REL 1 /* Set up the loaded object described by L so its unrelocated PLT entries will jump to the on-demand fixup code in dl-runtime.c. @@ -341,7 +339,6 @@ elf_machine_rela (struct link_map *map, reloc_addr, finaladdr, rinfo); } -#define ELF_MACHINE_NO_REL 1 /* The SVR4 ABI specifies that the JMPREL relocs must be inside the DT_RELA table. */ diff -durpNa glibc-2.2.2/sysdeps/powerpc/elf/libc-start.c glibc-2.2.3/sysdeps/powerpc/elf/libc-start.c --- glibc-2.2.2/sysdeps/powerpc/elf/libc-start.c Wed Jan 10 15:54:52 2001 +++ glibc-2.2.3/sysdeps/powerpc/elf/libc-start.c Mon Mar 26 20:53:29 2001 @@ -94,8 +94,8 @@ BP_SYM (__libc_start_main) (int argc, ch /* Call the initializer of the libc. */ #ifdef SHARED - if (_dl_debug_impcalls) - _dl_debug_message (1, "\ninitialize libc\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ninitialize libc\n\n"); #endif __libc_init_first (argc, argv, __environ); @@ -105,15 +105,15 @@ BP_SYM (__libc_start_main) (int argc, ch /* Call the initializer of the program, if any. */ #ifdef SHARED - if (_dl_debug_impcalls) - _dl_debug_message (1, "\ninitialize program: ", argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ninitialize program: %s\n\n", argv[0]); #endif if (stinfo->init) stinfo->init (argc, argv, __environ, auxvec); #ifdef SHARED - if (_dl_debug_impcalls) - _dl_debug_message (1, "\ntransferring control: ", argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ntransferring control: %s\n\n", argv[0]); #endif exit (stinfo->main (argc, argv, __environ, auxvec)); diff -durpNa glibc-2.2.2/sysdeps/powerpc/fprrest.S glibc-2.2.3/sysdeps/powerpc/fprrest.S --- glibc-2.2.2/sysdeps/powerpc/fprrest.S Mon Feb 28 16:40:02 2000 +++ glibc-2.2.3/sysdeps/powerpc/fprrest.S Mon Mar 26 20:53:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -16,42 +16,79 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + Floating Point Registers (FPRs) restore routine +*/ + #include - ASM_GLOBAL_DIRECTIVE _restfpr_14 -_restfpr_14: lfd fp14,-144(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_15 -_restfpr_15: lfd fp15,-136(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_16 -_restfpr_16: lfd fp16,-128(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_17 -_restfpr_17: lfd fp17,-120(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_18 -_restfpr_18: lfd fp18,-112(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_19 -_restfpr_19: lfd fp19,-104(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_20 -_restfpr_20: lfd fp20,-96(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_21 -_restfpr_21: lfd fp21,-88(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_22 -_restfpr_22: lfd fp22,-80(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_23 -_restfpr_23: lfd fp23,-72(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_24 -_restfpr_24: lfd fp24,-64(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_25 -_restfpr_25: lfd fp25,-56(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_26 -_restfpr_26: lfd fp26,-48(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_27 -_restfpr_27: lfd fp27,-40(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_28 -_restfpr_28: lfd fp28,-32(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_29 -_restfpr_29: lfd fp29,-24(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_30 -_restfpr_30: lfd fp30,-16(r11) - ASM_GLOBAL_DIRECTIVE _restfpr_31 -_restfpr_31: lfd fp31,-8(r11) - blr +ENTRY(_restfpr_all) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf14) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_14) +C_TEXT(_restf14): +C_TEXT(_restfpr_14): lfd fp14,-144(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf15) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_15) +C_TEXT(_restf15): +C_TEXT(_restfpr_15): lfd fp15,-136(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf16) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_16) +C_TEXT(_restf16): +C_TEXT(_restfpr_16): lfd fp16,-128(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf17) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_17) +C_TEXT(_restf17): +C_TEXT(_restfpr_17): lfd fp17,-120(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf18) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_18) +C_TEXT(_restf18): +C_TEXT(_restfpr_18): lfd fp18,-112(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf19) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_19) +C_TEXT(_restf19): +C_TEXT(_restfpr_19): lfd fp19,-104(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf20) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_20) +C_TEXT(_restf20): +C_TEXT(_restfpr_20): lfd fp20,-96(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf21) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_21) +C_TEXT(_restf21): +C_TEXT(_restfpr_21): lfd fp21,-88(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf22) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_22) +C_TEXT(_restf22): +C_TEXT(_restfpr_22): lfd fp22,-80(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf23) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_23) +C_TEXT(_restf23): +C_TEXT(_restfpr_23): lfd fp23,-72(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf24) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_24) +C_TEXT(_restf24): +C_TEXT(_restfpr_24): lfd fp24,-64(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf25) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_25) +C_TEXT(_restf25): +C_TEXT(_restfpr_25): lfd fp25,-56(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf26) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_26) +C_TEXT(_restf26): +C_TEXT(_restfpr_26): lfd fp26,-48(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf27) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_27) +C_TEXT(_restf27): +C_TEXT(_restfpr_27): lfd fp27,-40(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf28) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_28) +C_TEXT(_restf28): +C_TEXT(_restfpr_28): lfd fp28,-32(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf29) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_29) +C_TEXT(_restf29): +C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame + lfd fp29,-24(r1) #restore f29 + mtlr r0 #move return address to LR + lfd fp30,-16(r1) #restore f30 + lfd fp31,-8(r1) #restore f31 + blr #return diff -durpNa glibc-2.2.2/sysdeps/powerpc/fprsave.S glibc-2.2.3/sysdeps/powerpc/fprsave.S --- glibc-2.2.2/sysdeps/powerpc/fprsave.S Mon Feb 28 16:35:03 2000 +++ glibc-2.2.3/sysdeps/powerpc/fprsave.S Mon Mar 26 20:53:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -16,42 +16,78 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + Floating Point Registers (FPRs) save routine +*/ + #include - ASM_GLOBAL_DIRECTIVE _savefpr_14 -_savefpr_14: stfd fp14,-144(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_15 -_savefpr_15: stfd fp15,-136(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_16 -_savefpr_16: stfd fp16,-128(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_17 -_savefpr_17: stfd fp17,-120(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_18 -_savefpr_18: stfd fp18,-112(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_19 -_savefpr_19: stfd fp19,-104(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_20 -_savefpr_20: stfd fp20,-96(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_21 -_savefpr_21: stfd fp21,-88(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_22 -_savefpr_22: stfd fp22,-80(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_23 -_savefpr_23: stfd fp23,-72(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_24 -_savefpr_24: stfd fp24,-64(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_25 -_savefpr_25: stfd fp25,-56(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_26 -_savefpr_26: stfd fp26,-48(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_27 -_savefpr_27: stfd fp27,-40(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_28 -_savefpr_28: stfd fp28,-32(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_29 -_savefpr_29: stfd fp29,-24(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_30 -_savefpr_30: stfd fp30,-16(r11) - ASM_GLOBAL_DIRECTIVE _savefpr_31 -_savefpr_31: stfd fp31,-8(r11) - blr +ENTRY(_savefpr_all) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef14) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_14) +C_TEXT(_savef14): +C_TEXT(_savefpr_14): stfd fp14,-144(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef15) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_15) +C_TEXT(_savef15): +C_TEXT(_savefpr_15): stfd fp15,-136(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef16) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_16) +C_TEXT(_savef16): +C_TEXT(_savefpr_16): stfd fp16,-128(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef17) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_17) +C_TEXT(_savef17): +C_TEXT(_savefpr_17): stfd fp17,-120(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef18) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_18) +C_TEXT(_savef18): +C_TEXT(_savefpr_18): stfd fp18,-112(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef19) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_19) +C_TEXT(_savef19): +C_TEXT(_savefpr_19): stfd fp19,-104(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef20) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_20) +C_TEXT(_savef20): +C_TEXT(_savefpr_20): stfd fp20,-96(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef21) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_21) +C_TEXT(_savef21): +C_TEXT(_savefpr_21): stfd fp21,-88(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef22) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_22) +C_TEXT(_savef22): +C_TEXT(_savefpr_22): stfd fp22,-80(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef23) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_23) +C_TEXT(_savef23): +C_TEXT(_savefpr_23): stfd fp23,-72(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef24) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_24) +C_TEXT(_savef24): +C_TEXT(_savefpr_24): stfd fp24,-64(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef25) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_25) +C_TEXT(_savef25): +C_TEXT(_savefpr_25): stfd fp25,-56(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef26) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_26) +C_TEXT(_savef26): +C_TEXT(_savefpr_26): stfd fp26,-48(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef27) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_27) +C_TEXT(_savef27): +C_TEXT(_savefpr_27): stfd fp27,-40(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef28) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_28) +C_TEXT(_savef28): +C_TEXT(_savefpr_28): stfd fp28,-32(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef29) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_29) +C_TEXT(_savef29): +C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29 + stfd fp30,-16(r1) #save f30 + stfd fp31,-8(r1) #save f31 + stw r0,8(r1) #save LR in callers frame + blr #return diff -durpNa glibc-2.2.2/sysdeps/powerpc/fpu/libm-test-ulps glibc-2.2.3/sysdeps/powerpc/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/powerpc/fpu/libm-test-ulps Thu Oct 26 22:57:35 2000 +++ glibc-2.2.3/sysdeps/powerpc/fpu/libm-test-ulps Wed Apr 25 14:51:13 2001 @@ -13,6 +13,17 @@ float: 2 idouble: 1 ifloat: 2 +# atan2 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4 +ifloat: 4 + # atanh Test "atanh (0.7) == 0.8673005276940531944": double: 1 @@ -39,86 +50,86 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 float: 1 idouble: 1 ifloat: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -173,7 +184,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -512,7 +523,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -529,7 +540,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -747,6 +758,10 @@ double: 1 float: 2 idouble: 1 ifloat: 2 + +Function: "atan2": +float: 4 +ifloat: 4 Function: "atanh": double: 1 diff -durpNa glibc-2.2.2/sysdeps/powerpc/fpu/s_lrint.c glibc-2.2.3/sysdeps/powerpc/fpu/s_lrint.c --- glibc-2.2.2/sysdeps/powerpc/fpu/s_lrint.c Sat Oct 9 16:53:45 1999 +++ glibc-2.2.3/sysdeps/powerpc/fpu/s_lrint.c Sat Apr 7 14:02:39 2001 @@ -32,12 +32,12 @@ __lrint (double x) weak_alias (__lrint, lrint) /* This code will also work for a 'float' argument. */ -asm ("\ - .globl __lrintf - .globl lrintf - .weak lrintf - .set __lrintf,__lrint - .set lrintf,__lrint +asm ("\n\ + .globl __lrintf \n\ + .globl lrintf \n\ + .weak lrintf \n\ + .set __lrintf,__lrint \n\ + .set lrintf,__lrint \n\ "); #ifdef NO_LONG_DOUBLE diff -durpNa glibc-2.2.2/sysdeps/powerpc/gprrest0.S glibc-2.2.3/sysdeps/powerpc/gprrest0.S --- glibc-2.2.2/sysdeps/powerpc/gprrest0.S Mon Feb 28 15:29:51 2000 +++ glibc-2.2.3/sysdeps/powerpc/gprrest0.S Mon Mar 26 20:53:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -16,44 +16,54 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + General Purpose Register (GPR) restore routine + when Floating Point Registers (FPRs) are not saved + + Note: This restore routine must not be called when GPR30 or + GPR31, or both, are the only registers beings saved. In these + cases, the saving and restoring must be done inline. +*/ + #include - ASM_GLOBAL_DIRECTIVE _restgpr0_13 -_restgpr0_13: lwz r13,-76(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_14 -_restgpr0_14: lwz r14,-72(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_15 -_restgpr0_15: lwz r15,-68(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_16 -_restgpr0_16: lwz r16,-64(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_17 -_restgpr0_17: lwz r17,-60(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_18 -_restgpr0_18: lwz r18,-56(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_19 -_restgpr0_19: lwz r19,-52(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_20 -_restgpr0_20: lwz r20,-48(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_21 -_restgpr0_21: lwz r21,-44(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_22 -_restgpr0_22: lwz r22,-40(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_23 -_restgpr0_23: lwz r23,-36(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_24 -_restgpr0_24: lwz r24,-32(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_25 -_restgpr0_25: lwz r25,-28(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_26 -_restgpr0_26: lwz r26,-24(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_27 -_restgpr0_27: lwz r27,-20(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_28 -_restgpr0_28: lwz r28,-16(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_29 -_restgpr0_29: lwz r29,-12(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_30 -_restgpr0_30: lwz r30,-8(r1) - ASM_GLOBAL_DIRECTIVE _restgpr0_31 -_restgpr0_31: lwz r31,-4(r1) - blr +ENTRY(_restgpr0_all) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_13) +C_TEXT(_restgpr0_13): lwz r13,-76(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_14) +C_TEXT(_restgpr0_14): lwz r14,-72(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_15) +C_TEXT(_restgpr0_15): lwz r15,-68(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_16) +C_TEXT(_restgpr0_16): lwz r16,-64(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_17) +C_TEXT(_restgpr0_17): lwz r17,-60(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_18) +C_TEXT(_restgpr0_18): lwz r18,-56(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_19) +C_TEXT(_restgpr0_19): lwz r19,-52(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_20) +C_TEXT(_restgpr0_20): lwz r20,-48(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_21) +C_TEXT(_restgpr0_21): lwz r21,-44(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_22) +C_TEXT(_restgpr0_22): lwz r22,-40(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_23) +C_TEXT(_restgpr0_23): lwz r23,-36(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_24) +C_TEXT(_restgpr0_24): lwz r24,-32(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_25) +C_TEXT(_restgpr0_25): lwz r25,-28(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_26) +C_TEXT(_restgpr0_26): lwz r26,-24(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_27) +C_TEXT(_restgpr0_27): lwz r27,-20(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_28) +C_TEXT(_restgpr0_28): lwz r28,-16(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr0_29) +C_TEXT(_restgpr0_29): lwz r0,8(r1) #get return address from frame + lwz r29,-12(r1) #restore r29 + mtlr r0 #move return address to LR + lwz r30,-8(r1) #restore r30 + lwz r31,-4(r1) #restore r31 + blr #return diff -durpNa glibc-2.2.2/sysdeps/powerpc/gprrest1.S glibc-2.2.3/sysdeps/powerpc/gprrest1.S --- glibc-2.2.2/sysdeps/powerpc/gprrest1.S Mon Feb 28 15:30:10 2000 +++ glibc-2.2.3/sysdeps/powerpc/gprrest1.S Mon Mar 26 20:53:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -16,44 +16,48 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + General Purpose Register (GPR) restore routine + when Floating Point Registers (FPRs) are saved +*/ + #include - ASM_GLOBAL_DIRECTIVE _restgpr1_13 -_restgpr1_13: lwz r13,-76(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_14 -_restgpr1_14: lwz r14,-72(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_15 -_restgpr1_15: lwz r15,-68(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_16 -_restgpr1_16: lwz r16,-64(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_17 -_restgpr1_17: lwz r17,-60(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_18 -_restgpr1_18: lwz r18,-56(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_19 -_restgpr1_19: lwz r19,-52(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_20 -_restgpr1_20: lwz r20,-48(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_21 -_restgpr1_21: lwz r21,-44(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_22 -_restgpr1_22: lwz r22,-40(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_23 -_restgpr1_23: lwz r23,-36(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_24 -_restgpr1_24: lwz r24,-32(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_25 -_restgpr1_25: lwz r25,-28(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_26 -_restgpr1_26: lwz r26,-24(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_27 -_restgpr1_27: lwz r27,-20(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_28 -_restgpr1_28: lwz r28,-16(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_29 -_restgpr1_29: lwz r29,-12(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_30 -_restgpr1_30: lwz r30,-8(r12) - ASM_GLOBAL_DIRECTIVE _restgpr1_31 -_restgpr1_31: lwz r31,-4(r12) - blr +ENTRY(_restgpr1_all) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_13) +C_TEXT(_restgpr1_13): lwz r13,-76(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_14) +C_TEXT(_restgpr1_14): lwz r14,-72(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_15) +C_TEXT(_restgpr1_15): lwz r15,-68(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_16) +C_TEXT(_restgpr1_16): lwz r16,-64(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_17) +C_TEXT(_restgpr1_17): lwz r17,-60(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_18) +C_TEXT(_restgpr1_18): lwz r18,-56(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_19) +C_TEXT(_restgpr1_19): lwz r19,-52(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_20) +C_TEXT(_restgpr1_20): lwz r20,-48(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_21) +C_TEXT(_restgpr1_21): lwz r21,-44(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_22) +C_TEXT(_restgpr1_22): lwz r22,-40(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_23) +C_TEXT(_restgpr1_23): lwz r23,-36(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_24) +C_TEXT(_restgpr1_24): lwz r24,-32(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_25) +C_TEXT(_restgpr1_25): lwz r25,-28(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_26) +C_TEXT(_restgpr1_26): lwz r26,-24(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_27) +C_TEXT(_restgpr1_27): lwz r27,-20(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_28) +C_TEXT(_restgpr1_28): lwz r28,-16(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_restgpr1_29) +C_TEXT(_restgpr1_29): lwz r29,-12(r12) #restore r29 + lwz r30,-8(r12) #restore r30 + lwz r31,-4(r12) #restore r31 + blr #return diff -durpNa glibc-2.2.2/sysdeps/powerpc/gprsave0.S glibc-2.2.3/sysdeps/powerpc/gprsave0.S --- glibc-2.2.2/sysdeps/powerpc/gprsave0.S Mon Feb 28 15:29:31 2000 +++ glibc-2.2.3/sysdeps/powerpc/gprsave0.S Mon Mar 26 20:53:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -16,45 +16,53 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + General Purpose Register (GPR) save routine + when Floating Point Registers (FPRs) are not saved + + Note: This save routine must not be called when GPR30 or + GPR31, or both, are the only registers beings saved. In these + cases, the saving and restoring must be done inline. +*/ + #include - ASM_GLOBAL_DIRECTIVE _savegpr0_13 -_savegpr0_13: stw r13,-76(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_14 -_savegpr0_14: stw r14,-72(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_15 -_savegpr0_15: stw r15,-68(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_16 -_savegpr0_16: stw r16,-64(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_17 -_savegpr0_17: stw r17,-60(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_18 -_savegpr0_18: stw r18,-56(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_19 -_savegpr0_19: stw r19,-52(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_20 -_savegpr0_20: stw r20,-48(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_21 -_savegpr0_21: stw r21,-44(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_22 -_savegpr0_22: stw r22,-40(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_23 -_savegpr0_23: stw r23,-36(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_24 -_savegpr0_24: stw r24,-32(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_25 -_savegpr0_25: stw r25,-28(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_26 -_savegpr0_26: stw r26,-24(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_27 -_savegpr0_27: stw r27,-20(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_28 -_savegpr0_28: stw r28,-16(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_29 -_savegpr0_29: stw r29,-12(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_30 -_savegpr0_30: stw r30,-8(r1) - ASM_GLOBAL_DIRECTIVE _savegpr0_31 -_savegpr0_31: stw r31,-4(r1) - stw r0,8(r1) - blr +ENTRY(_savegpr0_all) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_13) +C_TEXT(_savegpr0_13): stw r13,-76(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_14) +C_TEXT(_savegpr0_14): stw r14,-72(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_15) +C_TEXT(_savegpr0_15): stw r15,-68(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_16) +C_TEXT(_savegpr0_16): stw r16,-64(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_17) +C_TEXT(_savegpr0_17): stw r17,-60(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_18) +C_TEXT(_savegpr0_18): stw r18,-56(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_19) +C_TEXT(_savegpr0_19): stw r19,-52(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_20) +C_TEXT(_savegpr0_20): stw r20,-48(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_21) +C_TEXT(_savegpr0_21): stw r21,-44(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_22) +C_TEXT(_savegpr0_22): stw r22,-40(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_23) +C_TEXT(_savegpr0_23): stw r23,-36(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_24) +C_TEXT(_savegpr0_24): stw r24,-32(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_25) +C_TEXT(_savegpr0_25): stw r25,-28(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_26) +C_TEXT(_savegpr0_26): stw r26,-24(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_27) +C_TEXT(_savegpr0_27): stw r27,-20(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_28) +C_TEXT(_savegpr0_28): stw r28,-16(r1) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr0_29) +C_TEXT(_savegpr0_29): stw r29,-12(r1) #save r29 + stw r30,-8(r1) #save r30 + stw r31,-4(r1) #save r31 + stw r0,8(r1) #save LR in callers frame + blr #return diff -durpNa glibc-2.2.2/sysdeps/powerpc/gprsave1.S glibc-2.2.3/sysdeps/powerpc/gprsave1.S --- glibc-2.2.2/sysdeps/powerpc/gprsave1.S Mon Feb 28 15:30:01 2000 +++ glibc-2.2.3/sysdeps/powerpc/gprsave1.S Mon Mar 26 20:53:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -16,44 +16,48 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + General Purpose Register (GPR) save routine + when Floating Point Registers (FPRs) are saved +*/ + #include - ASM_GLOBAL_DIRECTIVE _savegpr1_13 -_savegpr1_13: stw r13,-76(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_14 -_savegpr1_14: stw r14,-72(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_15 -_savegpr1_15: stw r15,-68(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_16 -_savegpr1_16: stw r16,-64(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_17 -_savegpr1_17: stw r17,-60(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_18 -_savegpr1_18: stw r18,-56(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_19 -_savegpr1_19: stw r19,-52(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_20 -_savegpr1_20: stw r20,-48(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_21 -_savegpr1_21: stw r21,-44(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_22 -_savegpr1_22: stw r22,-40(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_23 -_savegpr1_23: stw r23,-36(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_24 -_savegpr1_24: stw r24,-32(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_25 -_savegpr1_25: stw r25,-28(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_26 -_savegpr1_26: stw r26,-24(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_27 -_savegpr1_27: stw r27,-20(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_28 -_savegpr1_28: stw r28,-16(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_29 -_savegpr1_29: stw r29,-12(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_30 -_savegpr1_30: stw r30,-8(r12) - ASM_GLOBAL_DIRECTIVE _savegpr1_31 -_savegpr1_31: stw r31,-4(r12) - blr +ENTRY(_savegpr1_all) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_13) +C_TEXT(_savegpr1_13): stw r13,-76(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_14) +C_TEXT(_savegpr1_14): stw r14,-72(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_15) +C_TEXT(_savegpr1_15): stw r15,-68(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_16) +C_TEXT(_savegpr1_16): stw r16,-64(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_17) +C_TEXT(_savegpr1_17): stw r17,-60(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_18) +C_TEXT(_savegpr1_18): stw r18,-56(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_19) +C_TEXT(_savegpr1_19): stw r19,-52(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_20) +C_TEXT(_savegpr1_20): stw r20,-48(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_21) +C_TEXT(_savegpr1_21): stw r21,-44(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_22) +C_TEXT(_savegpr1_22): stw r22,-40(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_23) +C_TEXT(_savegpr1_23): stw r23,-36(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_24) +C_TEXT(_savegpr1_24): stw r24,-32(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_25) +C_TEXT(_savegpr1_25): stw r25,-28(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_26) +C_TEXT(_savegpr1_26): stw r26,-24(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_27) +C_TEXT(_savegpr1_27): stw r27,-20(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_28) +C_TEXT(_savegpr1_28): stw r28,-16(r12) + ASM_GLOBAL_DIRECTIVE C_TEXT(_savegpr1_29) +C_TEXT(_savegpr1_29): stw r29,-12(r12) #save r29 + stw r30,-8(r12) #save r30 + stw r31,-4(r12) #save r31 + blr #return diff -durpNa glibc-2.2.2/sysdeps/powerpc/ppc-mcount.S glibc-2.2.3/sysdeps/powerpc/ppc-mcount.S --- glibc-2.2.2/sysdeps/powerpc/ppc-mcount.S Mon Oct 11 15:18:53 1999 +++ glibc-2.2.3/sysdeps/powerpc/ppc-mcount.S Sat Apr 7 14:02:39 2001 @@ -63,6 +63,7 @@ ENTRY(_mcount) stw r4, 44(r1) stw r5, 8(r1) bl JUMPTARGET(__mcount_internal) + nop /* Restore the registers... */ lwz r6, 8(r1) lwz r0, 44(r1) diff -durpNa glibc-2.2.2/sysdeps/powerpc/register-dump.h glibc-2.2.3/sysdeps/powerpc/register-dump.h --- glibc-2.2.2/sysdeps/powerpc/register-dump.h Tue Nov 17 15:47:39 1998 +++ glibc-2.2.3/sysdeps/powerpc/register-dump.h Sat Apr 7 14:02:39 2001 @@ -22,23 +22,23 @@ /* This prints out the information in the following form: */ static const char dumpform[] = "\ -Register dump: -fp0-3: 0000030%0000031% 0000032%0000033% 0000034%0000035% 0000036%0000037% -fp4-7: 0000038%0000039% 000003a%000003b% 000003c%000003d% 000003e%000003f% -fp8-11: 0000040%0000041% 0000042%0000043% 0000044%0000045% 0000046%0000047% -fp12-15: 0000048%0000049% 000004a%000004b% 000004c%000004d% 000004e%000004f% -fp16-19: 0000050%0000051% 0000052%0000053% 0000054%0000055% 0000056%0000057% -fp20-23: 0000058%0000059% 000005a%000005b% 000005c%000005d% 000005e%000005f% -fp24-27: 0000060%0000061% 0000062%0000063% 0000064%0000065% 0000066%0000067% -fp28-31: 0000068%0000069% 000006a%000006b% 000006c%000006d% 000006e%000006f% -r0 =0000000% sp =0000001% r2 =0000002% r3 =0000003% trap=0000028% -r4 =0000004% r5 =0000005% r6 =0000006% r7 =0000007% sr0=0000020% sr1=0000021% -r8 =0000008% r9 =0000009% r10=000000a% r11=000000b% dar=0000029% dsi=000002a% -r12=000000c% r13=000000d% r14=000000e% r15=000000f% r3*=0000022% -r16=0000010% r17=0000011% r18=0000012% r19=0000013% -r20=0000014% r21=0000015% r22=0000016% r23=0000017% lr=0000024% xer=0000025% -r24=0000018% r25=0000019% r26=000001a% r27=000001b% mq=0000027% ctr=0000023% -r28=000001c% r29=000001d% r30=000001e% r31=000001f% fscr=0000071% ccr=0000026% +Register dump:\n\ +fp0-3: 0000030%0000031% 0000032%0000033% 0000034%0000035% 0000036%0000037%\n\ +fp4-7: 0000038%0000039% 000003a%000003b% 000003c%000003d% 000003e%000003f%\n\ +fp8-11: 0000040%0000041% 0000042%0000043% 0000044%0000045% 0000046%0000047%\n\ +fp12-15: 0000048%0000049% 000004a%000004b% 000004c%000004d% 000004e%000004f%\n\ +fp16-19: 0000050%0000051% 0000052%0000053% 0000054%0000055% 0000056%0000057%\n\ +fp20-23: 0000058%0000059% 000005a%000005b% 000005c%000005d% 000005e%000005f%\n\ +fp24-27: 0000060%0000061% 0000062%0000063% 0000064%0000065% 0000066%0000067%\n\ +fp28-31: 0000068%0000069% 000006a%000006b% 000006c%000006d% 000006e%000006f%\n\ +r0 =0000000% sp =0000001% r2 =0000002% r3 =0000003% trap=0000028%\n\ +r4 =0000004% r5 =0000005% r6 =0000006% r7 =0000007% sr0=0000020% sr1=0000021%\n\ +r8 =0000008% r9 =0000009% r10=000000a% r11=000000b% dar=0000029% dsi=000002a%\n\ +r12=000000c% r13=000000d% r14=000000e% r15=000000f% r3*=0000022%\n\ +r16=0000010% r17=0000011% r18=0000012% r19=0000013%\n\ +r20=0000014% r21=0000015% r22=0000016% r23=0000017% lr=0000024% xer=0000025%\n\ +r24=0000018% r25=0000019% r26=000001a% r27=000001b% mq=0000027% ctr=0000023%\n\ +r28=000001c% r29=000001d% r30=000001e% r31=000001f% fscr=0000071% ccr=0000026%\n\ "; /* Most of the fields are self-explanatory. 'sr0' is the next diff -durpNa glibc-2.2.2/sysdeps/s390/Dist glibc-2.2.3/sysdeps/s390/Dist --- glibc-2.2.2/sysdeps/s390/Dist Thu Aug 31 14:45:24 2000 +++ glibc-2.2.3/sysdeps/s390/Dist Mon Mar 26 21:15:24 2001 @@ -1,3 +1,2 @@ -s390-mcount.S machine-gmon.h fpu/fenv_libc.h diff -durpNa glibc-2.2.2/sysdeps/s390/Implies glibc-2.2.3/sysdeps/s390/Implies --- glibc-2.2.2/sysdeps/s390/Implies Wed Aug 2 06:19:45 2000 +++ glibc-2.2.3/sysdeps/s390/Implies Wed Dec 31 16:00:00 1969 @@ -1,4 +0,0 @@ -wordsize-32 -ieee754 -ieee754/dbl-64 -ieee754/flt-32 diff -durpNa glibc-2.2.2/sysdeps/s390/Makefile glibc-2.2.3/sysdeps/s390/Makefile --- glibc-2.2.2/sysdeps/s390/Makefile Wed Aug 2 06:20:31 2000 +++ glibc-2.2.3/sysdeps/s390/Makefile Wed Dec 31 16:00:00 1969 @@ -1,11 +0,0 @@ -pic-ccflag = -fpic - -ifeq ($(subdir),gmon) -sysdep_routines += s390-mcount -endif - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused -CFLAGS-dl-load.c += -Wno-unused -CFLAGS-dl-reloc.c += -Wno-unused -endif diff -durpNa glibc-2.2.2/sysdeps/s390/Versions glibc-2.2.3/sysdeps/s390/Versions --- glibc-2.2.2/sysdeps/s390/Versions Mon Aug 28 04:11:40 2000 +++ glibc-2.2.3/sysdeps/s390/Versions Wed Dec 31 16:00:00 1969 @@ -1,6 +0,0 @@ -libc { - GLIBC_2.0 { - # Functions from libgcc. - __divdi3; __moddi3; __udivdi3; __umoddi3; - } -} diff -durpNa glibc-2.2.2/sysdeps/s390/__longjmp.c glibc-2.2.3/sysdeps/s390/__longjmp.c --- glibc-2.2.2/sysdeps/s390/__longjmp.c Thu Aug 31 14:45:24 2000 +++ glibc-2.2.3/sysdeps/s390/__longjmp.c Wed Dec 31 16:00:00 1969 @@ -1,41 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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 -#include -#include -#include -#include -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ -void -__longjmp (__jmp_buf env, int val) -{ - /* Restore registers and jump back. */ - asm volatile ("lr %%r2,%0\n\t" /* PUT val in grp 2. */ - "lm %%r6,%%r15,%1\n\t" - "br %%r14" - : : "r" (val == 0 ? 1 : val), - "m" (env->gregs[__JB_GPR6]) : "2" ); - - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff -durpNa glibc-2.2.2/sysdeps/s390/add_n.S glibc-2.2.3/sysdeps/s390/add_n.S --- glibc-2.2.2/sysdeps/s390/add_n.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/add_n.S Wed Dec 31 16:00:00 1969 @@ -1,63 +0,0 @@ -/* Add two limb vectors of the same length > 0 and store sum in a third - limb vector. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP 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 MP 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 MP 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. */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - s2_ptr %r4 - size %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__mpn_add_n) - st %r6,24(%r15) # save register 6 - sr %r1,%r1 - lhi %r0,1 # cannot use ahi to add carry, use alr -.L0: l %r6,0(%r1,%r3) # .L0 -> no carry from last add - al %r6,0(%r1,%r4) - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 3,.L3 -.L1: brct %r5,.L0 - slr %r2,%r2 # no last carry to return - j .Lexit -.L2: l %r6,0(%r1,%r3) # .L2 -> carry from last add - al %r6,0(%r1,%r4) - brc 3,.L4 - alr %r6,%r0 # no carry yet, add carry from last add - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 12,.L1 # new carry ? -.L3: brct %r5,.L2 - lr %r2,%r0 # return last carry - j .Lexit -.L4: alr %r6,%r0 # already a carry, add carry from last add - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brct %r5,.L2 - lr %r2,%r0 # return last carry -.Lexit: l %r6,24(%r15) # restore register 6 - br %r14 -END(__mpn_add_n) diff -durpNa glibc-2.2.2/sysdeps/s390/addmul_1.S glibc-2.2.3/sysdeps/s390/addmul_1.S --- glibc-2.2.2/sysdeps/s390/addmul_1.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/addmul_1.S Wed Dec 31 16:00:00 1969 @@ -1,58 +0,0 @@ -/* S390 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP 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 MP 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 MP 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. */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - sizeP %r4 - s2_limb %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__mpn_addmul_1) - st %r6,24(%r15) - slr %r6,%r6 # cy_limb = 0 -.L0: icm %r1,15,0(%r3) # get s1_ptr[i] - mr %r0,%r5 # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb) - jnm .L1 - alr %r0,%r5 -.L1: ltr %r5,%r5 - jnm .L2 - al %r0,0(%r3) -.L2: alr %r1,%r6 # prod_low += cy_limb - lr %r6,%r0 # cy_limb = prod_high - brc 12,.L3 - ahi %r6,1 # + (prod_low < cy_limb) -.L3: al %r1,0(%r2) # prod_low += res_ptr[i] - brc 12,.L4 - ahi %r6,1 # cy_limb++ -.L4: st %r1,0(%r2) - la %r2,4(0,%r2) - la %r3,4(0,%r3) - brct %r4,.L0 - lr %r2,%r6 # return cy_limb - l %r6,24(%r15) -.Lexit: br %r14 -END(__mpn_addmul_1) diff -durpNa glibc-2.2.2/sysdeps/s390/atomicity.h glibc-2.2.3/sysdeps/s390/atomicity.h --- glibc-2.2.2/sysdeps/s390/atomicity.h Sun Oct 8 17:05:07 2000 +++ glibc-2.2.3/sysdeps/s390/atomicity.h Wed Dec 31 16:00:00 1969 @@ -1,76 +0,0 @@ -/* Low-level functions for atomic operations. S390 version. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 _ATOMICITY_H -#define _ATOMICITY_H 1 - -#include - -static inline int -__attribute__ ((unused)) -exchange_and_add (volatile uint32_t *mem, int val) -{ - int result; - __asm__ __volatile__( - " L %0,%2\n" - " LA 2,%1\n" - "0: LR 0,%0\n" - " AR 0,%3\n" - " CS %0,0,0(2)\n" - " JL 0b" - : "=&d" (result), "=m" (*mem) - : "1" (*mem), "d" (val) : "0", "1", "2" ); - return result; -} - -static inline void -__attribute__ ((unused)) -atomic_add (volatile uint32_t *mem, int val) -{ - __asm__ __volatile__( - " LA 2,%0\n" - "0: L 0,%1\n" - " LR 1,0\n" - " AR 1,%2\n" - " CS 0,1,0(2)\n" - " JL 0b" - : "=m" (*mem) : "0" (*mem), "d" (val) : "0", "1", "2" ); -} - -static inline int -__attribute__ ((unused)) -compare_and_swap (volatile long int *p, long int oldval, long int newval) -{ - int retval; - - __asm__ __volatile__( - " la 1,%1\n" - " lr 0,%2\n" - " cs 0,%3,0(1)\n" - " ipm %0\n" - " srl %0,28\n" - "0:" - : "=&r" (retval), "+m" (*p) - : "d" (oldval) , "d" (newval) - : "memory", "0", "1", "cc"); - return !retval; -} - -#endif /* atomicity.h */ diff -durpNa glibc-2.2.2/sysdeps/s390/backtrace.c glibc-2.2.3/sysdeps/s390/backtrace.c --- glibc-2.2.2/sysdeps/s390/backtrace.c Wed Aug 2 06:26:27 2000 +++ glibc-2.2.3/sysdeps/s390/backtrace.c Wed Dec 31 16:00:00 1969 @@ -1,81 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 -#include - -/* This is a global variable set at program start time. It marks the - highest used stack address. */ -extern void *__libc_stack_end; - - -/* This is the stack layout we see for every non-leaf function. - size offset - %r15 -> +------------------+ - 4 | back chain | 0 - 4 | end of stack | 4 - 8 | glue | 8 - 8 | scratch | 16 - 40 | save area r6-r15 | 24 - 16 | save area f4,f6 | 64 - 16 | empty | 80 - +------------------+ - r14 in the save area holds the return address. -*/ - -struct layout -{ - int back_chain; - int end_of_stack; - int glue[2]; - int scratch[2]; - int save_grps[10]; - int save_fp[4]; - int empty[2]; -}; - -int -__backtrace (array, size) - void **array; - int size; -{ - /* We assume that all the code is generated with frame pointers set. */ - struct layout *stack; - int cnt = 0; - - asm ("LR %0,%%r15" : "=d" (stack) ); - /* We skip the call to this function, it makes no sense to record it. */ - stack = (struct layout *) stack->back_chain; - while (cnt < size) - { - if (stack == NULL || (void *) stack > __libc_stack_end) - /* This means the address is out of range. Note that for the - toplevel we see a frame pointer with value NULL which clearly is - out of range. */ - break; - - array[cnt++] = stack->save_grps[9]; - - stack = (struct layout *) stack->back_chain; - } - - return cnt; -} -weak_alias (__backtrace, backtrace) diff -durpNa glibc-2.2.2/sysdeps/s390/bcopy.S glibc-2.2.3/sysdeps/s390/bcopy.S --- glibc-2.2.2/sysdeps/s390/bcopy.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/bcopy.S Wed Dec 31 16:00:00 1969 @@ -1,69 +0,0 @@ -/* bcopy -- copy a block from source to destination. For IBM S390 - This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address of source - * R3 = address of destination - * R4 = number of bytes to copy - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__bcopy) - clr %r2,%r3 # check against destructive overlap - jnl .L0 - lr %r1,%r2 - alr %r1,%r4 - clr %r1,%r3 - jh .L2 -.L0: - lr %r5,%r4 # source length - lr %r4,%r2 # source address - sr %r1,%r1 # set pad byte to zero - lr %r2,%r3 # set destination - lr %r3,%r5 # destination length = source length -.L1: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L1 - br %r14 -.L2: # destructive overlay, can not use mvcle - lr %r1,%r2 # bcopy is called with source,dest - lr %r2,%r3 # memmove with dest,source! Oh, well... - lr %r3,%r1 - basr %r1,0 -.L3: -#ifdef PIC - al %r1,.L4-.L3(%r1) # get address of global offset table - # load address of memmove - l %r1,memmove@GOT12(%r1) - br %r1 -.L4: .long _GLOBAL_OFFSET_TABLE_-.L3 -#else - al %r1,.L4-.L3(%r1) # load address of memmove - br %r1 # jump to memmove -.L4: .long memmove-.L3 -#endif - -END(__bcopy) - -#ifndef NO_WEAK_ALIAS -weak_alias (__bcopy, bcopy) -#endif diff -durpNa glibc-2.2.2/sysdeps/s390/bits/byteswap.h glibc-2.2.3/sysdeps/s390/bits/byteswap.h --- glibc-2.2.2/sysdeps/s390/bits/byteswap.h Wed Aug 2 07:07:21 2000 +++ glibc-2.2.3/sysdeps/s390/bits/byteswap.h Wed Dec 31 16:00:00 1969 @@ -1,86 +0,0 @@ -/* Macros to swap the order of bytes in integer values. s390 version. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 _BYTESWAP_H && !defined _NETINET_IN_H -# error "Never use directly; include instead." -#endif - -#define __bswap_constant_16(x) \ - ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) - -/* Swap bytes in 16 bit value. */ -#if defined __GNUC__ && __GNUC__ >= 2 -# define __bswap_16(x) \ - (__extension__ \ - ({ unsigned short int __v; \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_16 (x); \ - else { \ - unsigned short int __tmp = (unsigned short int) (x); \ - __asm__ __volatile__ ( \ - "sr %0,%0\n" \ - "la 1,%1\n" \ - "icm %0,2,1(1)\n" \ - "ic %0,0(1)" \ - : "=&d" (__v) : "m" (__tmp) : "1"); \ - } \ - __v; })) -#else -/* This is better than nothing. */ -#define __bswap_16(x) __bswap_constant_16 (x) -#endif - -/* Swap bytes in 32 bit value. */ -#define __bswap_constant_32(x) \ - ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ - (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) - -#if defined __GNUC__ && __GNUC__ >= 2 -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __v; \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_32 (x); \ - else { \ - unsigned int __tmp = (unsigned int) (x); \ - __asm__ __volatile__ ( \ - "la 1,%1\n" \ - "icm %0,8,3(1)\n" \ - "icm %0,4,2(1)\n" \ - "icm %0,2,1(1)\n" \ - "ic %0,0(1)" \ - : "=&d" (__v) : "m" (__tmp) : "1"); \ - } \ - __v; })) -#else -# define __bswap_32(x) __bswap_constant_32 (x) -#endif - -#if defined __GNUC__ && __GNUC__ >= 2 -/* Swap bytes in 64 bit value. */ -# define __bswap_64(x) \ - __extension__ \ - ({ union { unsigned long long int __ll; \ - unsigned long int __l[2]; } __w, __r; \ - __w.__ll = (x); \ - __r.__l[0] = __bswap_32 (__w.__l[1]); \ - __r.__l[1] = __bswap_32 (__w.__l[0]); \ - __r.__ll; }) -#endif diff -durpNa glibc-2.2.2/sysdeps/s390/bits/huge_val.h glibc-2.2.3/sysdeps/s390/bits/huge_val.h --- glibc-2.2.2/sysdeps/s390/bits/huge_val.h Wed Aug 2 07:07:21 2000 +++ glibc-2.2.3/sysdeps/s390/bits/huge_val.h Mon Mar 26 20:53:29 2001 @@ -1,6 +1,6 @@ -/* `HUGE_VAL' constants for s390 (where it is infinity). +/* `HUGE_VAL' constants for S/390 (where it is infinity). Used by and functions for overflow. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -30,17 +30,17 @@ #if __GNUC_PREREQ(2,96) # define HUGE_VAL (__extension__ 0x1.0p2047) #else -#define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } +# define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } -#define __huge_val_t union { unsigned char __c[8]; double __d; } -#ifdef __GNUC__ -# define HUGE_VAL (__extension__ \ +# define __huge_val_t union { unsigned char __c[8]; double __d; } +# ifdef __GNUC__ +# define HUGE_VAL (__extension__ \ ((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d) -#else /* Not GCC. */ +# else /* Not GCC. */ static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; -# define HUGE_VAL (__huge_val.__d) -#endif /* GCC. */ -#endif /* GCC 2.95 */ +# define HUGE_VAL (__huge_val.__d) +# endif /* GCC. */ +#endif /* GCC 2.95 */ /* ISO C 99 extensions: (float) HUGE_VALF and (long double) HUGE_VALL. */ @@ -48,22 +48,18 @@ static __huge_val_t __huge_val = { __HUG #ifdef __USE_ISOC99 # if __GNUC_PREREQ(2,96) - -# define HUGE_VALF (__extension__ 0x1.0p255f) -# define HUGE_VALL (__extension__ 0x1.0p255f) - +# define HUGE_VALF (__extension__ 0x1.0p255f) +# define HUGE_VALL (__extension__ 0x1.0p255f) # else - -# define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 } - -# define __huge_valf_t union { unsigned char __c[4]; float __f; } -# ifdef __GNUC__ -# define HUGE_VALF (__extension__ \ +# define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 } +# define __huge_valf_t union { unsigned char __c[4]; float __f; } +# ifdef __GNUC__ +# define HUGE_VALF (__extension__ \ ((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f) -# else /* Not GCC. */ +# else /* Not GCC. */ static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes }; -# define HUGE_VALF (__huge_valf.__f) -# endif /* GCC. */ +# define HUGE_VALF (__huge_valf.__f) +# endif /* GCC. */ /* On 390 there is no 'long double' format. Make it the same as 'double' */ # define HUGE_VALL HUGE_VAL diff -durpNa glibc-2.2.2/sysdeps/s390/bits/setjmp.h glibc-2.2.3/sysdeps/s390/bits/setjmp.h --- glibc-2.2.2/sysdeps/s390/bits/setjmp.h Thu Aug 31 14:45:24 2000 +++ glibc-2.2.3/sysdeps/s390/bits/setjmp.h Wed Dec 31 16:00:00 1969 @@ -1,52 +0,0 @@ -/* 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. */ - -/* Define the machine-dependent type `jmp_buf'. IBM s390 version. */ - -#ifndef __S390_SETJMP_H__ -#define __S390_SETJMP_H__ - -#define __JB_GPR6 0 -#define __JB_GPR7 1 -#define __JB_GPR8 2 -#define __JB_GPR9 3 -#define __JB_GPR10 4 -#define __JB_GPR11 5 -#define __JB_GPR12 6 -#define __JB_GPR13 7 -#define __JB_GPR14 8 -#define __JB_GPR15 9 - -#ifndef _ASM - -typedef struct { - /* We save registers 6-15. */ - long int gregs[10]; - - /* We save fpu registers 4 and 6. */ - long long fpregs[2]; -} __jmp_buf[1]; - -#endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((int) (address) < (jmpbuf)->gregs[__JB_GPR15]) - -#endif /* __S390_SETJMP_H__ */ diff -durpNa glibc-2.2.2/sysdeps/s390/bits/string.h glibc-2.2.3/sysdeps/s390/bits/string.h --- glibc-2.2.2/sysdeps/s390/bits/string.h Fri Dec 1 11:55:10 2000 +++ glibc-2.2.3/sysdeps/s390/bits/string.h Wed Mar 28 12:52:20 2001 @@ -1,5 +1,5 @@ -/* Optimized, inlined string functions. s390 version. - Copyright (C) 2000 Free Software Foundation, Inc. +/* Optimized, inlined string functions. S/390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -25,118 +25,207 @@ /* The s390 processors can access unaligned multi-byte variables. */ #define _STRING_ARCH_unaligned 1 - /* We only provide optimizations if the user selects them and if GNU CC is used. */ #if !defined __NO_STRING_INLINES && defined __USE_STRING_INLINES \ && defined __GNUC__ && __GNUC__ >= 2 -#ifdef __cplusplus -# define __STRING_INLINE inline -#else -# define __STRING_INLINE extern __inline +#ifndef __STRING_INLINE +# ifdef __cplusplus +# define __STRING_INLINE inline +# else +# define __STRING_INLINE extern __inline +# endif #endif #define _HAVE_STRING_ARCH_strlen 1 +#ifndef _FORCE_INLINES __STRING_INLINE size_t strlen (__const char *__str) { - size_t __len; + char *__ptr, *__tmp; - __asm__ __volatile__ (" sr 0,0\n" - " lr %0,%1\n" - "0: srst 0,%0\n" + __ptr = (char *) 0; + __tmp = (char *) __str; + __asm__ __volatile__ (" la 0,0\n" + "0: srst %0,%1\n" " jo 0b\n" - " lr %0,0\n" - " sr %0,%1" - : "=&a" (__len) : "a" (__str) + : "+&a" (__ptr), "+&a" (__tmp) : : "cc", "0" ); - return __len; + return (size_t) (__ptr - __str); } +#endif /* Copy SRC to DEST. */ #define _HAVE_STRING_ARCH_strcpy 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strcpy (char *__dest, __const char *__src) { char *tmp = __dest; - __asm__ __volatile__ (" sr 0,0\n" + __asm__ __volatile__ (" la 0,0\n" "0: mvst %0,%1\n" " jo 0b" : "+&a" (__dest), "+&a" (__src) : : "cc", "memory", "0" ); return tmp; } +#endif #define _HAVE_STRING_ARCH_strncpy 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strncpy (char *__dest, __const char *__src, size_t __n) { - char *tmp = __dest; + char *__ret = __dest; + char *__ptr; + size_t __diff; - if (__n <= 0) - return tmp; - __asm__ __volatile (" slr %0,%1\n" - "0: icm 0,1,0(%1)\n" - " stc 0,0(%0,%1)\n" - " jz 2f\n" - " la %1,1(%1)\n" - " brct %2,0b\n" - " j 3f\n" - "1: la %1,1(%1)\n" - " stc 0,0(%0,%1)\n" - "2: brct %2,1b\n" - "3:" - : "+&a" (__dest), "+&a" (__src), "+&d" (__n) : - : "cc", "memory", "0" ); - return tmp; + if (__n > 0) { + __diff = (size_t) (__dest - __src); + __ptr = (char *) __src; + __asm__ __volatile__ (" j 1f\n" + "0: la %0,1(%0)\n" + "1: icm 0,1,0(%0)\n" + " stc 0,0(%2,%0)\n" + " jz 3f\n" +#if defined(__s390x__) + " brctg %1,0b\n" +#else + " brct %1,0b\n" +#endif + " j 4f\n" + "2: la %0,1(%0)\n" + " stc 0,0(%2,%0)\n" +#if defined(__s390x__) + "3: brctg %1,2b\n" +#else + "3: brct %1,2b\n" +#endif + "4:" + : "+&a" (__ptr), "+&a" (__n) : "a" (__diff) + : "cc", "0" ); + } + return __ret; } +#endif /* Append SRC onto DEST. */ #define _HAVE_STRING_ARCH_strcat 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strcat(char *__dest, const char *__src) { - char *tmp = __dest; + char *__ret = __dest; + char *__ptr, *__tmp; - __asm__ __volatile__ (" sr 0,0\n" - "0: srst 0,%0\n" - " jo 0b\n" - " lr %0,0\n" - " sr 0,0\n" - "1: mvst %0,%1\n" - " jo 1b" - : "+&a" (__dest), "+&a" (__src) : - : "cc", "memory", "0" ); - return tmp; + /* Move __ptr to the end of __dest. */ + __ptr = (char *) 0; + __tmp = __dest; + __asm__ __volatile__ (" la 0,0\n" + "0: srst %0,%1\n" + " jo 0b\n" + : "+&a" (__ptr), "+&a" (__tmp) : + : "cc", "0" ); + + /* Now do the copy. */ + __asm__ __volatile__ (" la 0,0\n" + "0: mvst %0,%1\n" + " jo 0b" + : "+&a" (__ptr), "+&a" (__src) : + : "cc", "0" ); + return __ret; } +#endif -/* Append no more than N characters from SRC onto DEST. */ +/* Append no more than N characters from SRC onto DEST. */ #define _HAVE_STRING_ARCH_strncat 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strncat (char *__dest, __const char *__src, size_t __n) { - char *tmp = __dest; + char *__ret = __dest; + char *__ptr, *__tmp; + size_t __diff; - if (__n <= 0) - return tmp; - __asm__ __volatile__ (" sr 0,0\n" - "0: srst 0,%0\n" - " jo 0b\n" - " lr %0,0\n" - " slr %0,%1\n" - "1: icm 0,1,0(%1)\n" - " stc 0,0(%0,%1)\n" - " jz 2f\n" - " la %1,1(%1)\n" - " brct %2,1b\n" - " la %0,0(%0,%1)\n" - " xc 0(1,%0),0(%0)\n" - "2:" - : "+&a" (__dest), "+&a" (__src), "+&d" (__n) : - : "cc", "memory", "0" ); - return tmp; + if (__n > 0) { + /* Move __ptr to the end of __dest. */ + __ptr = (char *) 0; + __tmp = __dest; + __asm__ __volatile__ (" la 0,0\n" + "0: srst %0,%1\n" + " jo 0b\n" + : "+&a" (__ptr), "+&a" (__tmp) : + : "cc", "0" ); + + __diff = (size_t) (__ptr - __src); + __tmp = (char *) __src; + __asm__ __volatile__ (" j 1f\n" + "0: la %0,1(%0)\n" + "1: icm 0,1,0(%0)\n" + " stc 0,0(%2,%0)\n" + " jz 2f\n" +#if defined(__s390x__) + " brctg %1,0b\n" +#else + " brct %1,0b\n" +#endif + " slr 0,0\n" + " stc 0,1(%2,%0)\n" + "2:" + : "+&a" (__tmp), "+&a" (__n) : "a" (__diff) + : "cc", "0" ); + + } + return __ret; +} +#endif + +/* Search N bytes of S for C. */ +#define _HAVE_STRING_ARCH_memchr 1 +#ifndef _FORCE_INLINES +__STRING_INLINE void * +memchr (__const void *__str, int __c, size_t __n) +{ + char *__ptr, *__tmp; + + __tmp = (char *) __str; + __ptr = (char *) __tmp + __n; + __asm__ __volatile__ (" lhi 0,0xff\n" + " nr 0,%2\n" + "0: srst %0,%1\n" + " jo 0b\n" + " brc 13,1f\n" + " la %0,0\n" + "1:" + : "+&a" (__ptr), "+&a" (__tmp) : "d" (__c) + : "cc", "0" ); + return __ptr; } +#endif + +/* Search N bytes of S for C. */ +#define _HAVE_STRING_ARCH_memchr 1 +#ifndef _FORCE_INLINES +__STRING_INLINE int +strcmp (__const char *__s1, __const char *__s2) +{ + char *__p1, *__p2; + int __ret; + + __p1 = (char *) __s1; + __p2 = (char *) __s2; + __asm__ __volatile__ (" slr 0,0\n" + "0: clst %1,%2\n" + " jo 0b\n" + " ipm %0\n" + " srl %0,28" + : "=d" (__ret), "+&a" (__p1), "+&a" (__p2) : + : "cc", "0" ); + __ret = (__ret == 0) ? 0 : (__ret == 1) ? -1 : 1; + return __ret; +} +#endif #endif /* Use string inlines && GNU CC. */ diff -durpNa glibc-2.2.2/sysdeps/s390/bsd-_setjmp.S glibc-2.2.3/sysdeps/s390/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/s390/bsd-_setjmp.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/bsd-_setjmp.S Wed Dec 31 16:00:00 1969 @@ -1,46 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. s390 version. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software ; you can redistribute it and/or - modify it under the terms of the GNU 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. */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -ENTRY(_setjmp) -#ifdef PIC - /* We cannot use the PLT, because it requires that %r12 be set, but - we can't save and restore our caller's value. Instead, we do an - indirect jump through the GOT. */ - basr %r1,0 -.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ - /* get address of __sigjmp_save from got */ - l %r1,__sigjmp_save@GOT12(0,%r1) - lhi %r3,0 /* second argument of one */ - br %r1 -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -#else - basr %r1,0 -.L0: l %r1,.L1 - .L0(0,%r1) /* load address of __sigsetjmp */ - lhi %r3,0 /* second argument of zero */ - br %r1 /* branch to __sigsetjmp */ -.L1: .long __sigsetjmp -#endif -END (_setjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/bsd-setjmp.S glibc-2.2.3/sysdeps/s390/bsd-setjmp.S --- glibc-2.2.2/sysdeps/s390/bsd-setjmp.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/bsd-setjmp.S Wed Dec 31 16:00:00 1969 @@ -1,46 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. s390 version. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software ; you can redistribute it and/or - modify it under the terms of the GNU 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. */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -ENTRY(setjmp) -#ifdef PIC - /* We cannot use the PLT, because it requires that %r12 be set, but - we can't save and restore our caller's value. Instead, we do an - indirect jump through the GOT. */ - basr %r1,0 -.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ - /* get address of __sigjmp_save from got */ - l %r1,__sigjmp_save@GOT12(0,%r1) - lhi %r3,1 /* second argument of one */ - br %r1 -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -#else - basr %r1,0 -.L0: l %r1,.L1 - .L0(0,%r1) /* load address of __sigsetjmp */ - lhi %r3,1 /* second argument of zero */ - br %r1 /* branch to __sigsetjmp */ -.L1: .long __sigsetjmp -#endif -END (setjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/bzero.S glibc-2.2.3/sysdeps/s390/bzero.S --- glibc-2.2.2/sysdeps/s390/bzero.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/bzero.S Wed Dec 31 16:00:00 1969 @@ -1,43 +0,0 @@ -/* bzero -- set a block of memory to zero. IBM S390 version - This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address to memory area - * R3 = number of bytes to fill - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__bzero) - ltr %r3,%r3 - jz .L1 - sr %r1,%r1 # set pad byte to zero - sr %r4,%r4 # no source for MVCLE, only a pad byte - sr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 -.L1: br %r14 -END(__bzero) - -#ifndef NO_WEAK_ALIAS -weak_alias (__bzero, bzero) -#endif diff -durpNa glibc-2.2.2/sysdeps/s390/dl-machine.h glibc-2.2.3/sysdeps/s390/dl-machine.h --- glibc-2.2.2/sysdeps/s390/dl-machine.h Thu Oct 26 22:57:36 2000 +++ glibc-2.2.3/sysdeps/s390/dl-machine.h Wed Dec 31 16:00:00 1969 @@ -1,458 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. S390 Version. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Carl Pederson & Martin Schwidefsky. - 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 dl_machine_h -#define dl_machine_h - - -#define ELF_MACHINE_NAME "s390" - -#include -#include -#include - - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_S390; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ - -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - register Elf32_Addr *got; - - asm( " bras %0,2f\n" - "1: .long _GLOBAL_OFFSET_TABLE_-1b\n" - "2: al %0,0(%0)" - : "=&a" (got) : : "0" ); - - return *got; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ - Elf32_Addr addr; - - asm( " bras 1,2f\n" - "1: .long _GLOBAL_OFFSET_TABLE_ - 1b\n" - " .long _dl_start - 1b - 0x80000000\n" - "2: l %0,4(1)\n" - " ar %0,1\n" - " al 1,0(1)\n" - " sl %0,_dl_start@GOT12(1)" - : "=&d" (addr) : : "1" ); - return addr; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - Elf32_Addr *got; - got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (__builtin_expect (profile, 0)) - { - got[2] = (Elf32_Addr) &_dl_runtime_profile; - - if (_dl_name_match_p (_dl_profile, l)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - _dl_profile_map = l; - } - else - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - - return lazy; -} - -/* This code is used in dl-runtime.c to call the `fixup' function - and then redirect to the address it returns. */ - -/* s390: - Arguments are in register. - r2 - r7 holds the original parameters for the function call, fixup - and trampoline code use r0-r5 and r14-15. For the correct function - call r2-r5 and r14-15 must be restored. - Arguments from the PLT are stored at 24(r15) and 28(r15) - and must be moved to r2 and r3 for the fixup call (see elf32-s390.c - in the binutils for the PLT code). - Fixup function address in r2. -*/ -#ifndef PROF -#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ - asm ( "\ - .text\n\ - .globl _dl_runtime_resolve\n\ - .type _dl_runtime_resolve, @function\n\ - .align 16\n\ -_dl_runtime_resolve:\n\ - # save registers\n\ - stm 2,5,32(15)\n\ - st 14,48(15)\n\ - lr 0,15\n\ - ahi 15,-96\n\ - st 0,0(15)\n\ - # load args saved by PLT\n\ - lm 2,3,120(15)\n\ - basr 1,0\n\ -0: ahi 1,1f-0b\n\ - l 14,0(1)\n\ - bas 14,0(14,1) # call fixup\n\ - lr 1,2 # function addr returned in r2\n\ - # restore registers\n\ - ahi 15,96\n\ - l 14,48(15)\n\ - lm 2,5,32(15)\n\ - br 1\n\ -1: .long fixup-1b\n\ - .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ -\n\ - .globl _dl_runtime_profile\n\ - .type _dl_runtime_profile, @function\n\ - .align 16\n\ -_dl_runtime_profile:\n\ - # save registers\n\ - stm 2,5,32(15)\n\ - st 14,48(15)\n\ - lr 0,15\n\ - ahi 15,-96\n\ - st 0,0(15)\n\ - # load args saved by PLT\n\ - lm 2,3,120(15)\n\ - # load return address as third parameter\n\ - lr 4,14\n\ - basr 1,0\n\ -0: ahi 1,1f-0b\n\ - l 14,0(1)\n\ - bas 14,0(14,1) # call fixup\n\ - lr 1,2 # function addr returned in r2\n\ - # restore registers\n\ - ahi 15,96\n\ - l 14,48(15)\n\ - lm 2,5,32(15)\n\ - br 1\n\ -1: .long profile_fixup-1b\n\ - .size _dl_runtime_profile, .-_dl_runtime_profile\n\ -"); -#else -#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ - asm ( "\ - .text\n\ - .globl _dl_runtime_resolve\n\ - .globl _dl_runtime_profile\n\ - .type _dl_runtime_resolve, @function\n\ - .type _dl_runtime_profile, @function\n\ - .align 16\n\ -_dl_runtime_resolve:\n\ -_dl_runtime_profile:\n\ - # save registers\n\ - stm 2,5,32(15)\n\ - st 14,48(15)\n\ - lr 0,15\n\ - ahi 15,-96\n\ - st 0,0(15)\n\ - # load args saved by PLT\n\ - lm 2,3,120(15)\n\ - # load return address as third parameter\n\ - lr 4,14\n\ - basr 1,0\n\ -0: ahi 1,1f-0b\n\ - l 14,0(1)\n\ - bas 14,0(14,1) # call fixup\n\ - lr 1,2 # function addr returned in r2\n\ - # restore registers\n\ - ahi 15,96\n\ - l 14,48(15)\n\ - lm 2,5,32(15)\n\ - br 1\n\ -1: .long fixup-1b\n\ - .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ - .size _dl_runtime_profile, .-_dl_runtime_profile\n\ -"); -#endif - -/* The PLT uses Elf32_Rela relocs. */ -#define elf_machine_relplt elf_machine_rela - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\n\ -.text\n\ -.align 4\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - basr %r13,0\n\ -.L0: ahi %r13,.Llit-.L0\n\ - lr %r2,%r15\n\ - # Alloc stack frame\n\ - ahi %r15,-96\n\ - # Set the back chain to zero\n\ - xc 0(4,%r15),0(%r15)\n\ - # Call _dl_start with %r2 pointing to arg on stack\n\ - l %r14,.Ladr1-.Llit(%r13)\n\ - bas %r14,0(%r14,%r13) # call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %r8.\n\ - lr %r8,%r2\n\ - # Point %r12 at the GOT.\n\ - l %r12,.Ladr0-.Llit(%r13)\n\ - ar %r12,%r13\n\ - # Store the highest stack address\n\ - l %r1,__libc_stack_end@GOT(%r12)\n\ - st %r15, 0(%r1)\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - l %r1,_dl_skip_args@GOT12(0,%r12)\n\ - l %r1,0(%r1) # load _dl_skip_args\n\ - # Get the original argument count.\n\ - l %r0,96(%r15)\n\ - # Subtract _dl_skip_args from it.\n\ - sr %r0,%r1\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - sll %r1,2\n\ - ar %r15,%r1\n\ - # Set the back chain to zero again\n\ - xc 0(4,%r15),0(%r15)\n\ - # Store back the modified argument count.\n\ - st %r0,96(%r15)\n\ - # The special initializer gets called with the stack just\n\ - # as the application's entry point will see it; it can\n\ - # switch stacks if it moves these contents over.\n\ -" RTLD_START_SPECIAL_INIT "\n\ - # Call the function to run the initializers.\n\ - # Load the parameters:\n\ - # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ - l %r2,_dl_loaded@GOT(%r12)\n\ - l %r2,0(%r2)\n\ - l %r3,96(%r15)\n\ - la %r4,100(%r15)\n\ - lr %r5,%r3\n\ - sll %r5,2\n\ - la %r5,104(%r5,%r15)\n\ - l %r1,.Ladr4-.Llit(%r13)\n\ - bas %r14,0(%r1,%r13)\n\ - # Pass our finalizer function to the user in %r14, as per ELF ABI.\n\ - l %r14,_dl_fini@GOT(%r12)\n\ - # Free stack frame\n\ - ahi %r15,96\n\ - # Jump to the user's entry point (saved in %r8).\n\ - br %r8\n\ -.Llit:\n\ -.Ladr0: .long _GLOBAL_OFFSET_TABLE_-.Llit\n\ -.Ladr1: .long _dl_start-.Llit\n\ -.Ladr4: .long _dl_init@PLT-.Llit\n\ -"); - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* Nonzero iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. */ -#define elf_machine_pltrel_p(type) ((type) == R_390_JMP_SLOT) - -/* Nonzero iff TYPE should not be allowed to resolve to one of - the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_lookup_noexec_p(type) ((type) == R_390_COPY) - -/* Nonzero iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. */ -#define elf_machine_lookup_noplt_p(type) ((type) == R_390_JMP_SLOT) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT - -/* The S390 never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 - -/* The S390 overlaps DT_RELA and DT_PLTREL. */ -#define ELF_MACHINE_PLTREL_OVERLAP 1 - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -extern const char *_dl_platform; - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (_dl_platform != NULL && *_dl_platform == '\0') - /* Avoid an empty string which would disturb us. */ - _dl_platform = NULL; -} - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value; -} - -#endif /* !dl_machine_h */ - - -#ifdef RESOLVE - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -static inline void -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - Elf32_Addr *const reloc_addr) -{ - if (ELF32_R_TYPE (reloc->r_info) == R_390_RELATIVE) { -#ifndef RTLD_BOOTSTRAP - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -#endif - *reloc_addr = map->l_addr + reloc->r_addend; - } - else if (ELF32_R_TYPE (reloc->r_info) != R_390_NONE) - { - const Elf32_Sym *const refsym = sym; - Elf32_Addr value = RESOLVE (&sym, version, ELF32_R_TYPE (reloc->r_info)); - if (sym) - value += sym->st_value; - - switch (ELF32_R_TYPE (reloc->r_info)) - { - case R_390_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && __builtin_expect (_dl_verbose, 0))) - { - const char *strtab; - - strtab = (const char *) D_PTR(map,l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); - } - memcpy (reloc_addr, (void *) value, MIN (sym->st_size, - refsym->st_size)); - break; - case R_390_GLOB_DAT: - case R_390_JMP_SLOT: - *reloc_addr = value; - break; - case R_390_32: - { -#ifndef RTLD_BOOTSTRAP - /* This is defined in rtld.c, but nowhere in the static - libc.a; make the reference weak so static programs can - still link. This declaration cannot be done when - compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because - rtld.c contains the common defn for _dl_rtld_map, which - is incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); - if (map == &_dl_rtld_map) - /* Undo the relocation done here during bootstrapping. - Now we will relocate it anew, possibly using a - binding found in the user program or a loaded library - rather than the dynamic linker's built-in definitions - used while loading those libraries. */ - value -= map->l_addr + refsym->st_value; -#endif - *reloc_addr = value + reloc->r_addend; - break; - } - - case R_390_PC32: - *reloc_addr = value +reloc->r_addend - (Elf32_Addr) reloc_addr; - break; - case R_390_NONE: - break; - default: - _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 0); - break; - } - } -} - - -static inline void -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - /* Check for unexpected PLT reloc type. */ - if (__builtin_expect (ELF32_R_TYPE (reloc->r_info), R_390_JMP_SLOT) - == R_390_JMP_SLOT) - *reloc_addr += l_addr; - else - _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 1); -} - -#endif /* RESOLVE */ diff -durpNa glibc-2.2.2/sysdeps/s390/elf/bsd-_setjmp.S glibc-2.2.3/sysdeps/s390/elf/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/s390/elf/bsd-_setjmp.S Wed Aug 2 07:17:30 2000 +++ glibc-2.2.3/sysdeps/s390/elf/bsd-_setjmp.S Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -/* We don't need any code here since the setjmp.S file contains it. */ diff -durpNa glibc-2.2.2/sysdeps/s390/elf/bsd-setjmp.S glibc-2.2.3/sysdeps/s390/elf/bsd-setjmp.S --- glibc-2.2.2/sysdeps/s390/elf/bsd-setjmp.S Wed Aug 2 07:17:30 2000 +++ glibc-2.2.3/sysdeps/s390/elf/bsd-setjmp.S Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -/* We don't need any code here since the setjmp.S file contains it. */ diff -durpNa glibc-2.2.2/sysdeps/s390/elf/setjmp.S glibc-2.2.3/sysdeps/s390/elf/setjmp.S --- glibc-2.2.2/sysdeps/s390/elf/setjmp.S Wed Nov 22 10:59:56 2000 +++ glibc-2.2.3/sysdeps/s390/elf/setjmp.S Wed Dec 31 16:00:00 1969 @@ -1,56 +0,0 @@ -/* setjmp for s390, ELF version. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 _ASM -#define _SETJMP_H -#include - - /* We include the BSD entry points here as well but we make - them weak. */ -ENTRY (setjmp) - .weak C_SYMBOL_NAME (setjmp) - lhi %r3,1 /* second argument of one */ - j __sigsetjmp /* branch relativ to __sigsetjmp */ -END (setjmp) - -ENTRY(_setjmp) - .weak C_SYMBOL_NAME (_setjmp) - lhi %r3,0 /* second argument of zero */ - -ENTRY(__sigsetjmp) - stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ -#ifdef PIC - /* We cannot use the PLT, because it requires that %r12 be set, but - we can't save and restore our caller's value. Instead, we do an - indirect jump through the GOT. */ - basr %r1,0 -.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ - /* get address of __sigjmp_save from got */ - l %r1,__sigjmp_save@GOT12(0,%r1) - br %r1 -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -#else - basr %r1,0 -.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */ - br %r1 /* tail-call __sigjmp_save */ -.L1: .long __sigjmp_save -#endif -END (__sigsetjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/elf/start.S glibc-2.2.3/sysdeps/s390/elf/start.S --- glibc-2.2.2/sysdeps/s390/elf/start.S Wed Aug 2 07:17:30 2000 +++ glibc-2.2.3/sysdeps/s390/elf/start.S Wed Dec 31 16:00:00 1969 @@ -1,95 +0,0 @@ -/* Startup code compliant to the ELF s390 ABI. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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. */ - -/* - This is the canonical entry point, usually the first thing in the text - segment. Most registers' values are unspecified, except for: - - %r14 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - %r15 The stack contains the arguments and environment: - 0(%r15) argc - 4(%r15) argv[0] - ... - (4*argc)(%r15) NULL - (4*(argc+1))(%r15) envp[0] - ... - NULL -*/ - - .text - .globl _start -_start: - /* Setup pointer to literal pool of _start */ - basr %r13,0 -.L0: ahi %r13,.Llit-.L0 - - /* load argc and argv from stack */ - la %r4,4(%r15) # get argv - l %r3,0(%r15) # get argc - - /* align the stack to a double word boundary */ - lhi %r0,-8 - nr %r15,%r0 - - /* Setup a stack frame and a parameter area */ - ahi %r15,-104 # make room on stack - xc 0(4,%r15),0(%r15) # clear back-chain - - /* set up arguments for __libc_start_main: - main, argc, argv, envp, _init, _fini, rtld_fini, stack_end - Note that envp will be determined later in __libc_start_main - */ - stm %r14,%r15,96(%r15) # store rtld_fini/stack_end to parameter area - la %r7,96(%r15) - l %r6,.L2-.Llit(%r13) # load pointer to _fini - l %r5,.L1-.Llit(%r13) # load pointer to _init - l %r2,.L3-.Llit(%r13) # load pointer to main - - /* ok, now branch to the libc main routine */ - l %r1,.L4-.Llit(%r13) - basr %r14,%r1 - - /* crash if __libc_start_main returns */ - .word 0 - -.Llit: -.L1: .long _init -.L2: .long _fini -.L3: .long main -.L4: .long __libc_start_main - -/* FIXME: FPU flags or what ?!? */ - - .section .rodata - .globl _fp_hw - .long 3 - .size _fp_hw, 4 - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff -durpNa glibc-2.2.2/sysdeps/s390/ffs.c glibc-2.2.3/sysdeps/s390/ffs.c --- glibc-2.2.2/sysdeps/s390/ffs.c Wed Aug 2 06:33:48 2000 +++ glibc-2.2.3/sysdeps/s390/ffs.c Mon Mar 26 20:53:29 2001 @@ -1,7 +1,8 @@ /* ffs -- find first set bit in a word, counted from least significant end. - This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + S/390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -23,46 +24,45 @@ #undef ffs -/* - * ffs: find first bit set. This is defined the same way as - * the libc and compiler builtin ffs routines, therefore - * differs in spirit from the above ffz (man ffs). - */ +/* ffs: find first bit set. This is defined the same way as + the libc and compiler builtin ffs routines, therefore + differs in spirit from the above ffz (man ffs). */ int __ffs (x) int x; { - int r; + int r; - if (x == 0) - return 0; - __asm__(" lr %%r1,%1\n" - " sr %0,%0\n" - " tml %%r1,0xFFFF\n" - " jnz 0f\n" - " ahi %0,16\n" - " srl %%r1,16\n" - "0: tml %%r1,0x00FF\n" - " jnz 1f\n" - " ahi %0,8\n" - " srl %%r1,8\n" - "1: tml %%r1,0x000F\n" - " jnz 2f\n" - " ahi %0,4\n" - " srl %%r1,4\n" - "2: tml %%r1,0x0003\n" - " jnz 3f\n" - " ahi %0,2\n" - " srl %%r1,2\n" - "3: tml %%r1,0x0001\n" - " jnz 4f\n" - " ahi %0,1\n" - "4:" - : "=&d" (r) : "d" (x) : "cc", "1" ); - return r+1; + if (x == 0) + return 0; + __asm__(" lr %%r1,%1\n" + " sr %0,%0\n" + " tml %%r1,0xFFFF\n" + " jnz 0f\n" + " ahi %0,16\n" + " srl %%r1,16\n" + "0: tml %%r1,0x00FF\n" + " jnz 1f\n" + " ahi %0,8\n" + " srl %%r1,8\n" + "1: tml %%r1,0x000F\n" + " jnz 2f\n" + " ahi %0,4\n" + " srl %%r1,4\n" + "2: tml %%r1,0x0003\n" + " jnz 3f\n" + " ahi %0,2\n" + " srl %%r1,2\n" + "3: tml %%r1,0x0001\n" + " jnz 4f\n" + " ahi %0,1\n" + "4:" + : "=&d" (r) : "d" (x) : "cc", "1" ); + return r+1; } weak_alias (__ffs, ffs) #undef ffsl weak_alias (__ffs, ffsl) + diff -durpNa glibc-2.2.2/sysdeps/s390/fpu/libm-test-ulps glibc-2.2.3/sysdeps/s390/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/s390/fpu/libm-test-ulps Thu Oct 26 22:57:36 2000 +++ glibc-2.2.3/sysdeps/s390/fpu/libm-test-ulps Wed Apr 25 14:51:13 2001 @@ -18,6 +18,17 @@ float: 2 idouble: 1 ifloat: 2 +# atan2 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4 +ifloat: 4 + # atanh Test "atanh (0.7) == 0.8673005276940531944": double: 1 @@ -44,87 +55,87 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -187,7 +198,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -542,7 +553,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -559,7 +570,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -791,6 +802,10 @@ double: 1 float: 2 idouble: 1 ifloat: 2 + +Function: "atan2": +float: 4 +ifloat: 4 Function: "atanh": double: 1 diff -durpNa glibc-2.2.2/sysdeps/s390/gmp-mparam.h glibc-2.2.3/sysdeps/s390/gmp-mparam.h --- glibc-2.2.2/sysdeps/s390/gmp-mparam.h Thu Aug 31 14:45:24 2000 +++ glibc-2.2.3/sysdeps/s390/gmp-mparam.h Mon Mar 26 20:53:29 2001 @@ -1,5 +1,5 @@ /* gmp-mparam.h -- Compiler/machine parameter header file. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU MP Library. @@ -19,11 +19,13 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 +#include + +#define BITS_PER_MP_LIMB __WORDSIZE +#define BYTES_PER_MP_LIMB (__WORDSIZE / 8) +#define BITS_PER_LONGINT __WORDSIZE +#define BITS_PER_INT 32 +#define BITS_PER_SHORTINT 16 +#define BITS_PER_CHAR 8 #define IEEE_DOUBLE_BIG_ENDIAN 0 diff -durpNa glibc-2.2.2/sysdeps/s390/initfini.c glibc-2.2.3/sysdeps/s390/initfini.c --- glibc-2.2.2/sysdeps/s390/initfini.c Mon Aug 21 10:06:40 2000 +++ glibc-2.2.3/sysdeps/s390/initfini.c Wed Dec 31 16:00:00 1969 @@ -1,149 +0,0 @@ -/* Special .init and .fini section support for S/390. - 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. - - In addition to the permissions in the GNU Library General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The Library General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - 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, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* This file is compiled into assembly code which is then munged by a sed - script into two files: crti.s and crtn.s. - - * crti.s puts a function prologue at the beginning of the - .init and .fini sections and defines global symbols for - those addresses, so they can be called as functions. - - * crtn.s puts the corresponding function epilogues - in the .init and .fini sections. */ - -__asm__ (" - -#include \"defs.h\" - -/*@HEADER_ENDS*/ - -/*@TESTS_BEGIN*/ - -/*@TESTS_END*/ - -/*@_init_PROLOG_BEGINS*/ - - .section .init -#NO_APP - .align 4 -.globl _init - .type _init,@function -_init: -# leaf function 0 -# automatics 0 -# outgoing args 0 -# need frame pointer 0 -# call alloca 0 -# has varargs 0 -# incoming args (stack) 0 -# function length 36 - STM 6,15,24(15) - BRAS 13,.LTN1_0 -.LT1_0: -.LC14: - .long __gmon_start__@GOT -.LC15: - .long _GLOBAL_OFFSET_TABLE_-.LT1_0 -.LTN1_0: - LR 1,15 - AHI 15,-96 - ST 1,0(15) - L 12,.LC15-.LT1_0(13) - AR 12,13 - L 1,.LC14-.LT1_0(13) - L 1,0(1,12) - LTR 1,1 - JE .L22 - BASR 14,1 -.L22: -#APP - ALIGN - END_INIT - -/*@_init_PROLOG_ENDS*/ - -/*@_init_EPILOG_BEGINS*/ - .align 4 - .section .init -#NO_APP - .align 4 - L 4,152(15) - LM 6,15,120(15) - BR 4 -#APP - END_INIT - -/*@_init_EPILOG_ENDS*/ - -/*@_fini_PROLOG_BEGINS*/ - .section .fini -#NO_APP - .align 4 -.globl _fini - .type _fini,@function -_fini: -# leaf function 0 -# automatics 0 -# outgoing args 0 -# need frame pointer 0 -# call alloca 0 -# has varargs 0 -# incoming args (stack) 0 -# function length 30 - STM 6,15,24(15) - BRAS 13,.LTN2_0 -.LT2_0: -.LC17: - .long _GLOBAL_OFFSET_TABLE_-.LT2_0 -.LTN2_0: - LR 1,15 - AHI 15,-96 - ST 1,0(15) - L 12,.LC17-.LT2_0(13) - AR 12,13 -#APP - ALIGN - END_FINI - -/*@_fini_PROLOG_ENDS*/ - -/*@_fini_EPILOG_BEGINS*/ - .align 4 - .section .fini -#NO_APP - .align 4 - L 4,152(15) - LM 6,15,120(15) - BR 4 -#APP - END_FINI - -/*@_fini_EPILOG_ENDS*/ - -/*@TRAILER_BEGINS*/ -"); diff -durpNa glibc-2.2.2/sysdeps/s390/memchr.S glibc-2.2.3/sysdeps/s390/memchr.S --- glibc-2.2.2/sysdeps/s390/memchr.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/memchr.S Wed Dec 31 16:00:00 1969 @@ -1,40 +0,0 @@ -/* Search a character in a block of memory. For IBM S390 - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address to memory area - * R3 = character to find - * R4 = number of bytes to search - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(memchr) - lhi %r0,0xff - nr %r0,%r3 - lr %r1,%r2 - la %r2,0(%r4,%r1) -0: srst %r2,%r1 - jo 0b - brc 13,1f - slr %r2,%r2 -1: br %r14 -END(memchr) diff -durpNa glibc-2.2.2/sysdeps/s390/memcpy.S glibc-2.2.3/sysdeps/s390/memcpy.S --- glibc-2.2.2/sysdeps/s390/memcpy.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/memcpy.S Wed Dec 31 16:00:00 1969 @@ -1,41 +0,0 @@ -/* Set a block of memory to some byte value. For IBM S390 - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address to destination memory area - * R3 = address to source memory area - * R4 = number of bytes to copy - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(memcpy) - ltr %r5,%r4 - jz .L1 - lr %r4,%r3 # %r4/%r5 = source ptr/len - lr %r3,%r5 # %r2/%r3 = dest ptr/len - lr %r0,%r2 # save source address -.L0: mvcle %r2,%r4,0 # thats it, MVCLE is your friend - jo .L0 - lr %r2,%r0 # return value is source address -.L1: - br %r14 -END(memset) diff -durpNa glibc-2.2.2/sysdeps/s390/memset.S glibc-2.2.3/sysdeps/s390/memset.S --- glibc-2.2.2/sysdeps/s390/memset.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/memset.S Wed Dec 31 16:00:00 1969 @@ -1,43 +0,0 @@ -/* Set a block of memory to some byte value. For IBM S390 - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address to memory area - * R3 = byte to fill memory with - * R4 = number of bytes to fill - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(memset) - ltr %r4,%r4 - jz .L1 - lr %r0,%r2 # save source address - lr %r1,%r3 # move pad byte to R1 - lr %r3,%r4 - sr %r4,%r4 # no source for MVCLE, only a pad byte - sr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 - lr %r2,%r0 # return value is source address -.L1: - br %r14 -END(memset) diff -durpNa glibc-2.2.2/sysdeps/s390/mul_1.S glibc-2.2.3/sysdeps/s390/mul_1.S --- glibc-2.2.2/sysdeps/s390/mul_1.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/mul_1.S Wed Dec 31 16:00:00 1969 @@ -1,55 +0,0 @@ -/* i80386 __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP 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 MP 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 MP 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. */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - size %r4 - s2_limb %r5 -*/ - -#include -#include "asm-syntax.h" - - .text -ENTRY(__mpn_mul_1) - st %r6,24(%r15) - slr %r6,%r6 # cy_limb = 0 -.L0: icm %r1,15,0(%r3) # get s1_ptr[i] - mr %r0,%r5 # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb) - jnm .L1 - alr %r0,%r5 -.L1: ltr %r5,%r5 - jnm .L2 - al %r0,0(%r3) -.L2: alr %r1,%r6 # prod_low += cy_limb - lr %r6,%r0 # cy_limb = prod_high - brc 12,.L3 - ahi %r6,1 # + (prod_low < cy_limb) -.L3: st %r1,0(%r2) - la %r2,4(0,%r2) - la %r3,4(0,%r3) - brct %r4,.L0 - lr %r2,%r6 # return cy_limb - l %r6,24(%r15) -.Lexit: br %r14 -END(__mpn_mul_1) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/Dist glibc-2.2.3/sysdeps/s390/s390-32/Dist --- glibc-2.2.2/sysdeps/s390/s390-32/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/Dist Mon Mar 26 21:15:24 2001 @@ -0,0 +1 @@ +s390-mcount.S diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/Implies glibc-2.2.3/sysdeps/s390/s390-32/Implies --- glibc-2.2.2/sysdeps/s390/s390-32/Implies Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/Implies Fri Mar 16 00:59:32 2001 @@ -0,0 +1,4 @@ +wordsize-32 +ieee754 +ieee754/dbl-64 +ieee754/flt-32 diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/Makefile glibc-2.2.3/sysdeps/s390/s390-32/Makefile --- glibc-2.2.2/sysdeps/s390/s390-32/Makefile Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/Makefile Fri Mar 16 00:59:44 2001 @@ -0,0 +1,11 @@ +pic-ccflag = -fpic + +ifeq ($(subdir),gmon) +sysdep_routines += s390-mcount +endif + +ifeq ($(subdir),elf) +CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused +CFLAGS-dl-load.c += -Wno-unused +CFLAGS-dl-reloc.c += -Wno-unused +endif diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/Versions glibc-2.2.3/sysdeps/s390/s390-32/Versions --- glibc-2.2.2/sysdeps/s390/s390-32/Versions Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/Versions Fri Mar 16 00:59:57 2001 @@ -0,0 +1,6 @@ +libc { + GLIBC_2.0 { + # Functions from libgcc. + __divdi3; __moddi3; __udivdi3; __umoddi3; + } +} diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/__longjmp.c glibc-2.2.3/sysdeps/s390/s390-32/__longjmp.c --- glibc-2.2.2/sysdeps/s390/s390-32/__longjmp.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/__longjmp.c Fri Mar 16 01:00:09 2001 @@ -0,0 +1,43 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include +#include +#include +#include +#include + +/* Jump to the position specified by ENV, causing the + setjmp call there to return VAL, or 1 if VAL is 0. */ +void +__longjmp (__jmp_buf env, int val) +{ + /* Restore registers and jump back. */ + asm volatile ("lr %%r2,%0\n\t" /* PUT val in grp 2. */ + "ld %%f6,48(%1)\n\t" + "ld %%f4,40(%1)\n\t" + "lm %%r6,%%r15,0(%1)\n\t" + "br %%r14" + : : "r" (val == 0 ? 1 : val), + "a" (env) : "2" ); + + /* Avoid `volatile function does return' warnings. */ + for (;;); +} diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/add_n.S glibc-2.2.3/sysdeps/s390/s390-32/add_n.S --- glibc-2.2.2/sysdeps/s390/s390-32/add_n.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/add_n.S Fri Mar 16 01:00:23 2001 @@ -0,0 +1,63 @@ +/* Add two limb vectors of the same length > 0 and store sum in a third + limb vector. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU MP Library. + + The GNU MP 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 MP 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 MP 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. */ + +/* + INPUT PARAMETERS + res_ptr %r2 + s1_ptr %r3 + s2_ptr %r4 + size %r5 +*/ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__mpn_add_n) + st %r6,24(%r15) # save register 6 + sr %r1,%r1 + lhi %r0,1 # cannot use ahi to add carry, use alr +.L0: l %r6,0(%r1,%r3) # .L0 -> no carry from last add + al %r6,0(%r1,%r4) + st %r6,0(%r1,%r2) + la %r1,4(0,%r1) + brc 3,.L3 +.L1: brct %r5,.L0 + slr %r2,%r2 # no last carry to return + j .Lexit +.L2: l %r6,0(%r1,%r3) # .L2 -> carry from last add + al %r6,0(%r1,%r4) + brc 3,.L4 + alr %r6,%r0 # no carry yet, add carry from last add + st %r6,0(%r1,%r2) + la %r1,4(0,%r1) + brc 12,.L1 # new carry ? +.L3: brct %r5,.L2 + lr %r2,%r0 # return last carry + j .Lexit +.L4: alr %r6,%r0 # already a carry, add carry from last add + st %r6,0(%r1,%r2) + la %r1,4(0,%r1) + brct %r5,.L2 + lr %r2,%r0 # return last carry +.Lexit: l %r6,24(%r15) # restore register 6 + br %r14 +END(__mpn_add_n) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/addmul_1.S glibc-2.2.3/sysdeps/s390/s390-32/addmul_1.S --- glibc-2.2.2/sysdeps/s390/s390-32/addmul_1.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/addmul_1.S Fri Mar 16 01:00:36 2001 @@ -0,0 +1,58 @@ +/* S390 __mpn_addmul_1 -- Multiply a limb vector with a limb and add + the result to a second limb vector. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU MP Library. + + The GNU MP 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 MP 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 MP 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. */ + +/* + INPUT PARAMETERS + res_ptr %r2 + s1_ptr %r3 + sizeP %r4 + s2_limb %r5 +*/ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__mpn_addmul_1) + st %r6,24(%r15) + slr %r6,%r6 # cy_limb = 0 +.L0: icm %r1,15,0(%r3) # get s1_ptr[i] + mr %r0,%r5 # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb) + jnm .L1 + alr %r0,%r5 +.L1: ltr %r5,%r5 + jnm .L2 + al %r0,0(%r3) +.L2: alr %r1,%r6 # prod_low += cy_limb + lr %r6,%r0 # cy_limb = prod_high + brc 12,.L3 + ahi %r6,1 # + (prod_low < cy_limb) +.L3: al %r1,0(%r2) # prod_low += res_ptr[i] + brc 12,.L4 + ahi %r6,1 # cy_limb++ +.L4: st %r1,0(%r2) + la %r2,4(0,%r2) + la %r3,4(0,%r3) + brct %r4,.L0 + lr %r2,%r6 # return cy_limb + l %r6,24(%r15) +.Lexit: br %r14 +END(__mpn_addmul_1) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/atomicity.h glibc-2.2.3/sysdeps/s390/s390-32/atomicity.h --- glibc-2.2.2/sysdeps/s390/s390-32/atomicity.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/atomicity.h Fri Mar 16 01:00:53 2001 @@ -0,0 +1,76 @@ +/* Low-level functions for atomic operations. S390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _ATOMICITY_H +#define _ATOMICITY_H 1 + +#include + +static inline int +__attribute__ ((unused)) +exchange_and_add (volatile uint32_t *mem, int val) +{ + int result; + __asm__ __volatile__( + " L %0,%2\n" + " LA 2,%1\n" + "0: LR 0,%0\n" + " AR 0,%3\n" + " CS %0,0,0(2)\n" + " JL 0b" + : "=&d" (result), "=m" (*mem) + : "1" (*mem), "d" (val) : "0", "1", "2" ); + return result; +} + +static inline void +__attribute__ ((unused)) +atomic_add (volatile uint32_t *mem, int val) +{ + __asm__ __volatile__( + " LA 2,%0\n" + "0: L 0,%1\n" + " LR 1,0\n" + " AR 1,%2\n" + " CS 0,1,0(2)\n" + " JL 0b" + : "=m" (*mem) : "0" (*mem), "d" (val) : "0", "1", "2" ); +} + +static inline int +__attribute__ ((unused)) +compare_and_swap (volatile long int *p, long int oldval, long int newval) +{ + int retval; + + __asm__ __volatile__( + " la 1,%1\n" + " lr 0,%2\n" + " cs 0,%3,0(1)\n" + " ipm %0\n" + " srl %0,28\n" + "0:" + : "=&r" (retval), "+m" (*p) + : "d" (oldval) , "d" (newval) + : "memory", "0", "1", "cc"); + return !retval; +} + +#endif /* atomicity.h */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/backtrace.c glibc-2.2.3/sysdeps/s390/s390-32/backtrace.c --- glibc-2.2.2/sysdeps/s390/s390-32/backtrace.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/backtrace.c Fri Mar 16 01:01:07 2001 @@ -0,0 +1,81 @@ +/* Return backtrace of current program state. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 +#include + +/* This is a global variable set at program start time. It marks the + highest used stack address. */ +extern void *__libc_stack_end; + + +/* This is the stack layout we see for every non-leaf function. + size offset + %r15 -> +------------------+ + 4 | back chain | 0 + 4 | end of stack | 4 + 8 | glue | 8 + 8 | scratch | 16 + 40 | save area r6-r15 | 24 + 16 | save area f4,f6 | 64 + 16 | empty | 80 + +------------------+ + r14 in the save area holds the return address. +*/ + +struct layout +{ + int back_chain; + int end_of_stack; + int glue[2]; + int scratch[2]; + int save_grps[10]; + int save_fp[4]; + int empty[2]; +}; + +int +__backtrace (array, size) + void **array; + int size; +{ + /* We assume that all the code is generated with frame pointers set. */ + struct layout *stack; + int cnt = 0; + + asm ("LR %0,%%r15" : "=d" (stack) ); + /* We skip the call to this function, it makes no sense to record it. */ + stack = (struct layout *) stack->back_chain; + while (cnt < size) + { + if (stack == NULL || (void *) stack > __libc_stack_end) + /* This means the address is out of range. Note that for the + toplevel we see a frame pointer with value NULL which clearly is + out of range. */ + break; + + array[cnt++] = stack->save_grps[9]; + + stack = (struct layout *) stack->back_chain; + } + + return cnt; +} +weak_alias (__backtrace, backtrace) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/bcopy.S glibc-2.2.3/sysdeps/s390/s390-32/bcopy.S --- glibc-2.2.2/sysdeps/s390/s390-32/bcopy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/bcopy.S Sat Apr 7 14:02:39 2001 @@ -0,0 +1,75 @@ +/* bcopy -- copy a block from source to destination. S/390 version. + This file is part of the GNU C Library. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of source + %r3 = address of destination + %r4 = number of bytes to copy. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__bcopy) + ltr %r1,%r4 # zero bcopy ? + jz .L4 + clr %r2,%r3 # check against destructive overlap + jnl .L0 + alr %r1,%r2 + clr %r1,%r3 + jh .L5 +.L0: ahi %r4,-1 # length - 1 + lr %r1,%r4 + srl %r1,8 + ltr %r1,%r1 + jz .L2 +.L1: mvc 0(256,%r3),0(%r2) # move in 256 byte chunks + la %r2,256(%r2) + la %r3,256(%r3) + brct %r1,.L1 +.L2: bras %r1,.L3 # setup base pointer for execute + mvc 0(1,%r3),0(%r2) # instruction for execute +.L3: ex %r4,0(%r1) # execute mvc with length ((%r4)&255)+1 +.L4: br %r14 + +.L5: # destructive overlay, can not use mvcle + lr %r1,%r2 # bcopy is called with source,dest + lr %r2,%r3 # memmove with dest,source! Oh, well... + lr %r3,%r1 + basr %r1,0 +.L6: +#ifdef PIC + al %r1,.L7-.L6(%r1) # get address of global offset table + # load address of memmove + l %r1,memmove@GOT12(%r1) + br %r1 +.L7: .long _GLOBAL_OFFSET_TABLE_-.L6 +#else + al %r1,.L7-.L6(%r1) # load address of memmove + br %r1 # jump to memmove +.L7: .long memmove-.L6 +#endif + +END(__bcopy) + +#ifndef NO_WEAK_ALIAS +weak_alias (__bcopy, bcopy) +#endif + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/bits/byteswap.h glibc-2.2.3/sysdeps/s390/s390-32/bits/byteswap.h --- glibc-2.2.2/sysdeps/s390/s390-32/bits/byteswap.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/bits/byteswap.h Fri Mar 16 01:05:31 2001 @@ -0,0 +1,86 @@ +/* Macros to swap the order of bytes in integer values. s390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _BYTESWAP_H && !defined _NETINET_IN_H +# error "Never use directly; include instead." +#endif + +#define __bswap_constant_16(x) \ + ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) + +/* Swap bytes in 16 bit value. */ +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_16(x) \ + (__extension__ \ + ({ unsigned short int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_16 (x); \ + else { \ + unsigned short int __tmp = (unsigned short int) (x); \ + __asm__ __volatile__ ( \ + "sr %0,%0\n" \ + "la 1,%1\n" \ + "icm %0,2,1(1)\n" \ + "ic %0,0(1)" \ + : "=&d" (__v) : "m" (__tmp) : "1"); \ + } \ + __v; })) +#else +/* This is better than nothing. */ +#define __bswap_16(x) __bswap_constant_16 (x) +#endif + +/* Swap bytes in 32 bit value. */ +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_32(x) \ + (__extension__ \ + ({ unsigned int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_32 (x); \ + else { \ + unsigned int __tmp = (unsigned int) (x); \ + __asm__ __volatile__ ( \ + "la 1,%1\n" \ + "icm %0,8,3(1)\n" \ + "icm %0,4,2(1)\n" \ + "icm %0,2,1(1)\n" \ + "ic %0,0(1)" \ + : "=&d" (__v) : "m" (__tmp) : "1"); \ + } \ + __v; })) +#else +# define __bswap_32(x) __bswap_constant_32 (x) +#endif + +#if defined __GNUC__ && __GNUC__ >= 2 +/* Swap bytes in 64 bit value. */ +# define __bswap_64(x) \ + __extension__ \ + ({ union { unsigned long long int __ll; \ + unsigned long int __l[2]; } __w, __r; \ + __w.__ll = (x); \ + __r.__l[0] = __bswap_32 (__w.__l[1]); \ + __r.__l[1] = __bswap_32 (__w.__l[0]); \ + __r.__ll; }) +#endif diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/bits/setjmp.h glibc-2.2.3/sysdeps/s390/s390-32/bits/setjmp.h --- glibc-2.2.2/sysdeps/s390/s390-32/bits/setjmp.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/bits/setjmp.h Fri Mar 16 01:07:49 2001 @@ -0,0 +1,52 @@ +/* Copyright (C) 2000, 2001 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. */ + +/* Define the machine-dependent type `jmp_buf'. IBM s390 version. */ + +#ifndef __S390_SETJMP_H__ +#define __S390_SETJMP_H__ + +#define __JB_GPR6 0 +#define __JB_GPR7 1 +#define __JB_GPR8 2 +#define __JB_GPR9 3 +#define __JB_GPR10 4 +#define __JB_GPR11 5 +#define __JB_GPR12 6 +#define __JB_GPR13 7 +#define __JB_GPR14 8 +#define __JB_GPR15 9 + +#ifndef _ASM + +typedef struct { + /* We save registers 6-15. */ + long int gregs[10]; + + /* We save fpu registers 4 and 6. */ + long fpregs[4]; +} __jmp_buf[1]; + +#endif + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address) \ + ((int) (address) < (jmpbuf)->gregs[__JB_GPR15]) + +#endif /* __S390_SETJMP_H__ */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/bsd-_setjmp.S glibc-2.2.3/sysdeps/s390/s390-32/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/bsd-_setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/bsd-_setjmp.S Fri Mar 16 01:01:37 2001 @@ -0,0 +1,46 @@ +/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. s390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software ; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. + We cannot do it in C because it must be a tail-call, so frame-unwinding + in setjmp doesn't clobber the state restored by longjmp. */ + +#include + +ENTRY(_setjmp) +#ifdef PIC + /* We cannot use the PLT, because it requires that %r12 be set, but + we can't save and restore our caller's value. Instead, we do an + indirect jump through the GOT. */ + basr %r1,0 +.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ + /* get address of __sigjmp_save from got */ + l %r1,__sigjmp_save@GOT12(0,%r1) + lhi %r3,0 /* second argument of one */ + br %r1 +.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 +#else + basr %r1,0 +.L0: l %r1,.L1 - .L0(0,%r1) /* load address of __sigsetjmp */ + lhi %r3,0 /* second argument of zero */ + br %r1 /* branch to __sigsetjmp */ +.L1: .long __sigsetjmp +#endif +END (_setjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/bsd-setjmp.S glibc-2.2.3/sysdeps/s390/s390-32/bsd-setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/bsd-setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/bsd-setjmp.S Fri Mar 16 01:01:49 2001 @@ -0,0 +1,46 @@ +/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. s390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software ; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. + We cannot do it in C because it must be a tail-call, so frame-unwinding + in setjmp doesn't clobber the state restored by longjmp. */ + +#include + +ENTRY(setjmp) +#ifdef PIC + /* We cannot use the PLT, because it requires that %r12 be set, but + we can't save and restore our caller's value. Instead, we do an + indirect jump through the GOT. */ + basr %r1,0 +.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ + /* get address of __sigjmp_save from got */ + l %r1,__sigjmp_save@GOT12(0,%r1) + lhi %r3,1 /* second argument of one */ + br %r1 +.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 +#else + basr %r1,0 +.L0: l %r1,.L1 - .L0(0,%r1) /* load address of __sigsetjmp */ + lhi %r3,1 /* second argument of zero */ + br %r1 /* branch to __sigsetjmp */ +.L1: .long __sigsetjmp +#endif +END (setjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/bzero.S glibc-2.2.3/sysdeps/s390/s390-32/bzero.S --- glibc-2.2.2/sysdeps/s390/s390-32/bzero.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/bzero.S Fri Mar 16 01:02:01 2001 @@ -0,0 +1,43 @@ +/* bzero -- set a block of memory to zero. IBM S390 version + This file is part of the GNU C Library. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* + * R2 = address to memory area + * R3 = number of bytes to fill + */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__bzero) + ltr %r3,%r3 + jz .L1 + sr %r1,%r1 # set pad byte to zero + sr %r4,%r4 # no source for MVCLE, only a pad byte + sr %r5,%r5 +.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend + jo .L0 +.L1: br %r14 +END(__bzero) + +#ifndef NO_WEAK_ALIAS +weak_alias (__bzero, bzero) +#endif diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/dl-machine.h glibc-2.2.3/sysdeps/s390/s390-32/dl-machine.h --- glibc-2.2.2/sysdeps/s390/s390-32/dl-machine.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/dl-machine.h Fri Mar 16 01:02:23 2001 @@ -0,0 +1,454 @@ +/* Machine-dependent ELF dynamic relocation inline functions. S390 Version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Carl Pederson & Martin Schwidefsky. + 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 dl_machine_h +#define dl_machine_h + + +#define ELF_MACHINE_NAME "s390" + +#include +#include +#include + +/* This is an older, now obsolete value. */ +#define EM_S390_OLD 0xA390 + +/* Return nonzero iff ELF header is compatible with the running host. */ +static inline int +elf_machine_matches_host (const Elf32_Ehdr *ehdr) +{ + return (ehdr->e_machine == EM_S390 || ehdr->e_machine == EM_S390_OLD) + && ehdr->e_ident[EI_CLASS] == ELFCLASS32; +} + + +/* Return the link-time address of _DYNAMIC. Conveniently, this is the + first element of the GOT. This must be inlined in a function which + uses global data. */ + +static inline Elf32_Addr +elf_machine_dynamic (void) +{ + register Elf32_Addr *got; + + asm( " bras %0,2f\n" + "1: .long _GLOBAL_OFFSET_TABLE_-1b\n" + "2: al %0,0(%0)" + : "=&a" (got) : : "0" ); + + return *got; +} + + +/* Return the run-time load address of the shared object. */ +static inline Elf32_Addr +elf_machine_load_address (void) +{ + Elf32_Addr addr; + + asm( " bras 1,2f\n" + "1: .long _GLOBAL_OFFSET_TABLE_ - 1b\n" + " .long _dl_start - 1b - 0x80000000\n" + "2: l %0,4(1)\n" + " ar %0,1\n" + " al 1,0(1)\n" + " sl %0,_dl_start@GOT12(1)" + : "=&d" (addr) : : "1" ); + return addr; +} + +/* Set up the loaded object described by L so its unrelocated PLT + entries will jump to the on-demand fixup code in dl-runtime.c. */ + +static inline int __attribute__ ((unused)) +elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +{ + extern void _dl_runtime_resolve (Elf32_Word); + extern void _dl_runtime_profile (Elf32_Word); + + if (l->l_info[DT_JMPREL] && lazy) + { + /* The GOT entries for functions in the PLT have not yet been filled + in. Their initial contents will arrange when called to push an + offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], + and then jump to _GLOBAL_OFFSET_TABLE[2]. */ + Elf32_Addr *got; + got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); + got[1] = (Elf32_Addr) l; /* Identify this shared object. */ + + /* The got[2] entry contains the address of a function which gets + called to get the address of a so far unresolved function and + jump to it. The profiling extension of the dynamic linker allows + to intercept the calls to collect information. In this case we + don't store the address in the GOT so that all future calls also + end in this function. */ + if (__builtin_expect (profile, 0)) + { + got[2] = (Elf32_Addr) &_dl_runtime_profile; + + if (_dl_name_match_p (_dl_profile, l)) + /* This is the object we are looking for. Say that we really + want profiling and the timers are started. */ + _dl_profile_map = l; + } + else + /* This function will get called to fix up the GOT entry indicated by + the offset on the stack, and then jump to the resolved address. */ + got[2] = (Elf32_Addr) &_dl_runtime_resolve; + } + + return lazy; +} + +/* This code is used in dl-runtime.c to call the `fixup' function + and then redirect to the address it returns. */ + +/* s390: + Arguments are in register. + r2 - r7 holds the original parameters for the function call, fixup + and trampoline code use r0-r5 and r14-15. For the correct function + call r2-r5 and r14-15 must be restored. + Arguments from the PLT are stored at 24(r15) and 28(r15) + and must be moved to r2 and r3 for the fixup call (see elf32-s390.c + in the binutils for the PLT code). + Fixup function address in r2. +*/ +#ifndef PROF +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + asm ( "\ + .text\n\ + .globl _dl_runtime_resolve\n\ + .type _dl_runtime_resolve, @function\n\ + .align 16\n\ +_dl_runtime_resolve:\n\ + # save registers\n\ + stm 2,5,32(15)\n\ + st 14,48(15)\n\ + lr 0,15\n\ + ahi 15,-96\n\ + st 0,0(15)\n\ + # load args saved by PLT\n\ + lm 2,3,120(15)\n\ + basr 1,0\n\ +0: ahi 1,1f-0b\n\ + l 14,0(1)\n\ + bas 14,0(14,1) # call fixup\n\ + lr 1,2 # function addr returned in r2\n\ + # restore registers\n\ + ahi 15,96\n\ + l 14,48(15)\n\ + lm 2,5,32(15)\n\ + br 1\n\ +1: .long fixup-1b\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ +\n\ + .globl _dl_runtime_profile\n\ + .type _dl_runtime_profile, @function\n\ + .align 16\n\ +_dl_runtime_profile:\n\ + # save registers\n\ + stm 2,5,32(15)\n\ + st 14,48(15)\n\ + lr 0,15\n\ + ahi 15,-96\n\ + st 0,0(15)\n\ + # load args saved by PLT\n\ + lm 2,3,120(15)\n\ + # load return address as third parameter\n\ + lr 4,14\n\ + basr 1,0\n\ +0: ahi 1,1f-0b\n\ + l 14,0(1)\n\ + bas 14,0(14,1) # call fixup\n\ + lr 1,2 # function addr returned in r2\n\ + # restore registers\n\ + ahi 15,96\n\ + l 14,48(15)\n\ + lm 2,5,32(15)\n\ + br 1\n\ +1: .long profile_fixup-1b\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ +"); +#else +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + asm ( "\ + .text\n\ + .globl _dl_runtime_resolve\n\ + .globl _dl_runtime_profile\n\ + .type _dl_runtime_resolve, @function\n\ + .type _dl_runtime_profile, @function\n\ + .align 16\n\ +_dl_runtime_resolve:\n\ +_dl_runtime_profile:\n\ + # save registers\n\ + stm 2,5,32(15)\n\ + st 14,48(15)\n\ + lr 0,15\n\ + ahi 15,-96\n\ + st 0,0(15)\n\ + # load args saved by PLT\n\ + lm 2,3,120(15)\n\ + # load return address as third parameter\n\ + lr 4,14\n\ + basr 1,0\n\ +0: ahi 1,1f-0b\n\ + l 14,0(1)\n\ + bas 14,0(14,1) # call fixup\n\ + lr 1,2 # function addr returned in r2\n\ + # restore registers\n\ + ahi 15,96\n\ + l 14,48(15)\n\ + lm 2,5,32(15)\n\ + br 1\n\ +1: .long fixup-1b\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ +"); +#endif + +/* Mask identifying addresses reserved for the user program, + where the dynamic linker should not map anything. */ +#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL + +/* Initial entry point code for the dynamic linker. + The C function `_dl_start' is the real entry point; + its return value is the user program's entry point. */ + +#define RTLD_START asm ("\n\ +.text\n\ +.align 4\n\ +.globl _start\n\ +.globl _dl_start_user\n\ +_start:\n\ + basr %r13,0\n\ +.L0: ahi %r13,.Llit-.L0\n\ + lr %r2,%r15\n\ + # Alloc stack frame\n\ + ahi %r15,-96\n\ + # Set the back chain to zero\n\ + xc 0(4,%r15),0(%r15)\n\ + # Call _dl_start with %r2 pointing to arg on stack\n\ + l %r14,.Ladr1-.Llit(%r13)\n\ + bas %r14,0(%r14,%r13) # call _dl_start\n\ +_dl_start_user:\n\ + # Save the user entry point address in %r8.\n\ + lr %r8,%r2\n\ + # Point %r12 at the GOT.\n\ + l %r12,.Ladr0-.Llit(%r13)\n\ + ar %r12,%r13\n\ + # Store the highest stack address\n\ + l %r1,__libc_stack_end@GOT(%r12)\n\ + st %r15, 0(%r1)\n\ + # See if we were run as a command with the executable file\n\ + # name as an extra leading argument.\n\ + l %r1,_dl_skip_args@GOT12(0,%r12)\n\ + l %r1,0(%r1) # load _dl_skip_args\n\ + # Get the original argument count.\n\ + l %r0,96(%r15)\n\ + # Subtract _dl_skip_args from it.\n\ + sr %r0,%r1\n\ + # Adjust the stack pointer to skip _dl_skip_args words.\n\ + sll %r1,2\n\ + ar %r15,%r1\n\ + # Set the back chain to zero again\n\ + xc 0(4,%r15),0(%r15)\n\ + # Store back the modified argument count.\n\ + st %r0,96(%r15)\n\ + # The special initializer gets called with the stack just\n\ + # as the application's entry point will see it; it can\n\ + # switch stacks if it moves these contents over.\n\ +" RTLD_START_SPECIAL_INIT "\n\ + # Call the function to run the initializers.\n\ + # Load the parameters:\n\ + # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ + l %r2,_dl_loaded@GOT(%r12)\n\ + l %r2,0(%r2)\n\ + l %r3,96(%r15)\n\ + la %r4,100(%r15)\n\ + lr %r5,%r3\n\ + sll %r5,2\n\ + la %r5,104(%r5,%r15)\n\ + l %r1,.Ladr4-.Llit(%r13)\n\ + bas %r14,0(%r1,%r13)\n\ + # Pass our finalizer function to the user in %r14, as per ELF ABI.\n\ + l %r14,_dl_fini@GOT(%r12)\n\ + # Free stack frame\n\ + ahi %r15,96\n\ + # Jump to the user's entry point (saved in %r8).\n\ + br %r8\n\ +.Llit:\n\ +.Ladr0: .long _GLOBAL_OFFSET_TABLE_-.Llit\n\ +.Ladr1: .long _dl_start-.Llit\n\ +.Ladr4: .long _dl_init@PLT-.Llit\n\ +"); + +#ifndef RTLD_START_SPECIAL_INIT +#define RTLD_START_SPECIAL_INIT /* nothing */ +#endif + +/* Nonzero iff TYPE should not be allowed to resolve to one of + the main executable's symbols, as for a COPY reloc. */ +#define elf_machine_lookup_noexec_p(type) ((type) == R_390_COPY) + +/* Nonzero iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. */ +#define elf_machine_lookup_noplt_p(type) ((type) == R_390_JMP_SLOT) + +/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ +#define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT + +/* The S390 never uses Elf32_Rel relocations. */ +#define ELF_MACHINE_NO_REL 1 + +/* The S390 overlaps DT_RELA and DT_PLTREL. */ +#define ELF_MACHINE_PLTREL_OVERLAP 1 + +/* We define an initialization functions. This is called very early in + _dl_sysdep_start. */ +#define DL_PLATFORM_INIT dl_platform_init () + +extern const char *_dl_platform; + +static inline void __attribute__ ((unused)) +dl_platform_init (void) +{ + if (_dl_platform != NULL && *_dl_platform == '\0') + /* Avoid an empty string which would disturb us. */ + _dl_platform = NULL; +} + +static inline Elf32_Addr +elf_machine_fixup_plt (struct link_map *map, lookup_t t, + const Elf32_Rela *reloc, + Elf32_Addr *reloc_addr, Elf32_Addr value) +{ + return *reloc_addr = value; +} + +/* Return the final value of a plt relocation. */ +static inline Elf32_Addr +elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, + Elf32_Addr value) +{ + return value; +} + +#endif /* !dl_machine_h */ + + +#ifdef RESOLVE + +/* Perform the relocation specified by RELOC and SYM (which is fully resolved). + MAP is the object containing the reloc. */ + +static inline void +elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, + const Elf32_Sym *sym, const struct r_found_version *version, + Elf32_Addr *const reloc_addr) +{ + if (ELF32_R_TYPE (reloc->r_info) == R_390_RELATIVE) { +#ifndef RTLD_BOOTSTRAP + if (map != &_dl_rtld_map) /* Already done in rtld itself. */ +#endif + *reloc_addr = map->l_addr + reloc->r_addend; + } + else if (ELF32_R_TYPE (reloc->r_info) != R_390_NONE) + { + const Elf32_Sym *const refsym = sym; + Elf32_Addr value = RESOLVE (&sym, version, ELF32_R_TYPE (reloc->r_info)); + if (sym) + value += sym->st_value; + + switch (ELF32_R_TYPE (reloc->r_info)) + { + case R_390_COPY: + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; + if (__builtin_expect (sym->st_size > refsym->st_size, 0) + || (__builtin_expect (sym->st_size < refsym->st_size, 0) + && __builtin_expect (_dl_verbose, 0))) + { + const char *strtab; + + strtab = (const char *) D_PTR(map,l_info[DT_STRTAB]); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); + } + memcpy (reloc_addr, (void *) value, MIN (sym->st_size, + refsym->st_size)); + break; + case R_390_GLOB_DAT: + case R_390_JMP_SLOT: + *reloc_addr = value; + break; + case R_390_32: + { +#ifndef RTLD_BOOTSTRAP + /* This is defined in rtld.c, but nowhere in the static + libc.a; make the reference weak so static programs can + still link. This declaration cannot be done when + compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because + rtld.c contains the common defn for _dl_rtld_map, which + is incompatible with a weak decl in the same file. */ + weak_extern (_dl_rtld_map); + if (map == &_dl_rtld_map) + /* Undo the relocation done here during bootstrapping. + Now we will relocate it anew, possibly using a + binding found in the user program or a loaded library + rather than the dynamic linker's built-in definitions + used while loading those libraries. */ + value -= map->l_addr + refsym->st_value; +#endif + *reloc_addr = value + reloc->r_addend; + break; + } + + case R_390_PC32: + *reloc_addr = value + reloc->r_addend - (Elf32_Addr) reloc_addr; + break; + case R_390_NONE: + break; + default: + _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 0); + break; + } + } +} + + +static inline void +elf_machine_lazy_rel (struct link_map *map, + Elf32_Addr l_addr, const Elf32_Rela *reloc) +{ + Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); + /* Check for unexpected PLT reloc type. */ + if (__builtin_expect (ELF32_R_TYPE (reloc->r_info), R_390_JMP_SLOT) + == R_390_JMP_SLOT) + *reloc_addr += l_addr; + else + _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 1); +} + +#endif /* RESOLVE */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/elf/bsd-_setjmp.S glibc-2.2.3/sysdeps/s390/s390-32/elf/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/elf/bsd-_setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/elf/bsd-_setjmp.S Fri Mar 16 01:08:44 2001 @@ -0,0 +1 @@ +/* We don't need any code here since the setjmp.S file contains it. */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/elf/bsd-setjmp.S glibc-2.2.3/sysdeps/s390/s390-32/elf/bsd-setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/elf/bsd-setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/elf/bsd-setjmp.S Fri Mar 16 01:08:54 2001 @@ -0,0 +1 @@ +/* We don't need any code here since the setjmp.S file contains it. */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/elf/setjmp.S glibc-2.2.3/sysdeps/s390/s390-32/elf/setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/elf/setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/elf/setjmp.S Fri Mar 16 01:09:04 2001 @@ -0,0 +1,61 @@ +/* setjmp for s390, ELF version. + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _ASM +#define _SETJMP_H +#include + + /* We include the BSD entry points here as well but we make + them weak. */ +ENTRY (setjmp) + .weak C_SYMBOL_NAME (setjmp) + lhi %r3,1 /* second argument of one */ + j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */ +END (setjmp) + + /* Binary compatibility entry point. */ +ENTRY(_setjmp) + .weak C_SYMBOL_NAME (_setjmp) +ENTRY(__setjmp) + lhi %r3,0 /* second argument of zero */ + +ENTRY(__sigsetjmp) +.Linternal_sigsetjmp: + stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ + std %f4,40(%r2) + std %f6,48(%r2) +#ifdef PIC + /* We cannot use the PLT, because it requires that %r12 be set, but + we can't save and restore our caller's value. Instead, we do an + indirect jump through the GOT. */ + basr %r1,0 +.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ + /* get address of __sigjmp_save from got */ + l %r1,__sigjmp_save@GOT12(0,%r1) + br %r1 +.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 +#else + basr %r1,0 +.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */ + br %r1 /* tail-call __sigjmp_save */ +.L1: .long __sigjmp_save +#endif +END (__sigsetjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/elf/start.S glibc-2.2.3/sysdeps/s390/s390-32/elf/start.S --- glibc-2.2.2/sysdeps/s390/s390-32/elf/start.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/elf/start.S Fri Mar 16 01:09:18 2001 @@ -0,0 +1,95 @@ +/* Startup code compliant to the ELF s390 ABI. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* + This is the canonical entry point, usually the first thing in the text + segment. Most registers' values are unspecified, except for: + + %r14 Contains a function pointer to be registered with `atexit'. + This is how the dynamic linker arranges to have DT_FINI + functions called for shared libraries that have been loaded + before this code runs. + + %r15 The stack contains the arguments and environment: + 0(%r15) argc + 4(%r15) argv[0] + ... + (4*argc)(%r15) NULL + (4*(argc+1))(%r15) envp[0] + ... + NULL +*/ + + .text + .globl _start +_start: + /* Setup pointer to literal pool of _start */ + basr %r13,0 +.L0: ahi %r13,.Llit-.L0 + + /* load argc and argv from stack */ + la %r4,4(%r15) # get argv + l %r3,0(%r15) # get argc + + /* align the stack to a double word boundary */ + lhi %r0,-8 + nr %r15,%r0 + + /* Setup a stack frame and a parameter area */ + ahi %r15,-104 # make room on stack + xc 0(4,%r15),0(%r15) # clear back-chain + + /* set up arguments for __libc_start_main: + main, argc, argv, envp, _init, _fini, rtld_fini, stack_end + Note that envp will be determined later in __libc_start_main + */ + stm %r14,%r15,96(%r15) # store rtld_fini/stack_end to parameter area + la %r7,96(%r15) + l %r6,.L2-.Llit(%r13) # load pointer to _fini + l %r5,.L1-.Llit(%r13) # load pointer to _init + l %r2,.L3-.Llit(%r13) # load pointer to main + + /* ok, now branch to the libc main routine */ + l %r1,.L4-.Llit(%r13) + basr %r14,%r1 + + /* crash if __libc_start_main returns */ + .word 0 + +.Llit: +.L1: .long _init +.L2: .long _fini +.L3: .long main +.L4: .long __libc_start_main + +/* FIXME: FPU flags or what ?!? */ + + .section .rodata + .globl _fp_hw + .long 3 + .size _fp_hw, 4 + +/* Define a symbol for the first piece of initialized data. */ + .data + .globl __data_start +__data_start: + .long 0 + .weak data_start + data_start = __data_start diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/initfini.c glibc-2.2.3/sysdeps/s390/s390-32/initfini.c --- glibc-2.2.2/sysdeps/s390/s390-32/initfini.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/initfini.c Fri Mar 16 01:02:52 2001 @@ -0,0 +1,149 @@ +/* Special .init and .fini section support for S/390. + Copyright (C) 2000, 2001 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. + + In addition to the permissions in the GNU Library General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The Library General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + 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, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* This file is compiled into assembly code which is then munged by a sed + script into two files: crti.s and crtn.s. + + * crti.s puts a function prologue at the beginning of the + .init and .fini sections and defines global symbols for + those addresses, so they can be called as functions. + + * crtn.s puts the corresponding function epilogues + in the .init and .fini sections. */ + +__asm__ (" + +#include \"defs.h\" + +/*@HEADER_ENDS*/ + +/*@TESTS_BEGIN*/ + +/*@TESTS_END*/ + +/*@_init_PROLOG_BEGINS*/ + + .section .init +#NO_APP + .align 4 +.globl _init + .type _init,@function +_init: +# leaf function 0 +# automatics 0 +# outgoing args 0 +# need frame pointer 0 +# call alloca 0 +# has varargs 0 +# incoming args (stack) 0 +# function length 36 + STM 6,15,24(15) + BRAS 13,.LTN1_0 +.LT1_0: +.LC14: + .long __gmon_start__@GOT +.LC15: + .long _GLOBAL_OFFSET_TABLE_-.LT1_0 +.LTN1_0: + LR 1,15 + AHI 15,-96 + ST 1,0(15) + L 12,.LC15-.LT1_0(13) + AR 12,13 + L 1,.LC14-.LT1_0(13) + L 1,0(1,12) + LTR 1,1 + JE .L22 + BASR 14,1 +.L22: +#APP + .align 4,0x07 + END_INIT + +/*@_init_PROLOG_ENDS*/ + +/*@_init_EPILOG_BEGINS*/ + .align 4 + .section .init +#NO_APP + .align 4 + L 4,152(15) + LM 6,15,120(15) + BR 4 +#APP + END_INIT + +/*@_init_EPILOG_ENDS*/ + +/*@_fini_PROLOG_BEGINS*/ + .section .fini +#NO_APP + .align 4 +.globl _fini + .type _fini,@function +_fini: +# leaf function 0 +# automatics 0 +# outgoing args 0 +# need frame pointer 0 +# call alloca 0 +# has varargs 0 +# incoming args (stack) 0 +# function length 30 + STM 6,15,24(15) + BRAS 13,.LTN2_0 +.LT2_0: +.LC17: + .long _GLOBAL_OFFSET_TABLE_-.LT2_0 +.LTN2_0: + LR 1,15 + AHI 15,-96 + ST 1,0(15) + L 12,.LC17-.LT2_0(13) + AR 12,13 +#APP + .align 4,0x07 + END_FINI + +/*@_fini_PROLOG_ENDS*/ + +/*@_fini_EPILOG_BEGINS*/ + .align 4 + .section .fini +#NO_APP + .align 4 + L 4,152(15) + LM 6,15,120(15) + BR 4 +#APP + END_FINI + +/*@_fini_EPILOG_ENDS*/ + +/*@TRAILER_BEGINS*/ +"); diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/memchr.S glibc-2.2.3/sysdeps/s390/s390-32/memchr.S --- glibc-2.2.2/sysdeps/s390/s390-32/memchr.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/memchr.S Fri Mar 16 01:03:04 2001 @@ -0,0 +1,40 @@ +/* Search a character in a block of memory. For IBM S390 + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* + * R2 = address to memory area + * R3 = character to find + * R4 = number of bytes to search + */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(memchr) + lhi %r0,0xff + nr %r0,%r3 + lr %r1,%r2 + la %r2,0(%r4,%r1) +0: srst %r2,%r1 + jo 0b + brc 13,1f + slr %r2,%r2 +1: br %r14 +END(memchr) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/memcpy.S glibc-2.2.3/sysdeps/s390/s390-32/memcpy.S --- glibc-2.2.2/sysdeps/s390/s390-32/memcpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/memcpy.S Sat Apr 7 14:02:39 2001 @@ -0,0 +1,46 @@ +/* memcpy - copy a block from source to destination. S/390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of destination memory area + %r3 = address of source memory area + %r4 = number of bytes to copy. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(memcpy) + ltr %r4,%r4 + jz .L3 + ahi %r4,-1 # length - 1 + lr %r1,%r2 # copy destination address + lr %r5,%r4 + sra %r5,8 + jz .L1 +.L0: mvc 0(256,%r1),0(%r3) # move in 256 byte chunks + la %r1,256(%r1) + la %r3,256(%r3) + brct %r5,.L0 +.L1: bras %r5,.L2 # setup base pointer for execute + mvc 0(1,%r1),0(%r3) # instruction for execute +.L2: ex %r4,0(%r5) # execute mvc with length ((%r4)&255)+1 +.L3: br %r14 +END(memcpy) + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/memset.S glibc-2.2.3/sysdeps/s390/s390-32/memset.S --- glibc-2.2.2/sysdeps/s390/s390-32/memset.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/memset.S Fri Mar 16 01:03:26 2001 @@ -0,0 +1,43 @@ +/* Set a block of memory to some byte value. For IBM S390 + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* + * R2 = address to memory area + * R3 = byte to fill memory with + * R4 = number of bytes to fill + */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(memset) + ltr %r4,%r4 + jz .L1 + lr %r0,%r2 # save source address + lr %r1,%r3 # move pad byte to R1 + lr %r3,%r4 + sr %r4,%r4 # no source for MVCLE, only a pad byte + sr %r5,%r5 +.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend + jo .L0 + lr %r2,%r0 # return value is source address +.L1: + br %r14 +END(memset) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/mul_1.S glibc-2.2.3/sysdeps/s390/s390-32/mul_1.S --- glibc-2.2.2/sysdeps/s390/s390-32/mul_1.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/mul_1.S Fri Mar 16 01:03:39 2001 @@ -0,0 +1,55 @@ +/* __mpn_mul_1 -- Multiply a limb vector with a limb and store + the result in a second limb vector. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU MP Library. + + The GNU MP 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 MP 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 MP 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. */ + +/* + INPUT PARAMETERS + res_ptr %r2 + s1_ptr %r3 + size %r4 + s2_limb %r5 +*/ + +#include +#include "asm-syntax.h" + + .text +ENTRY(__mpn_mul_1) + st %r6,24(%r15) + slr %r6,%r6 # cy_limb = 0 +.L0: icm %r1,15,0(%r3) # get s1_ptr[i] + mr %r0,%r5 # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb) + jnm .L1 + alr %r0,%r5 +.L1: ltr %r5,%r5 + jnm .L2 + al %r0,0(%r3) +.L2: alr %r1,%r6 # prod_low += cy_limb + lr %r6,%r0 # cy_limb = prod_high + brc 12,.L3 + ahi %r6,1 # + (prod_low < cy_limb) +.L3: st %r1,0(%r2) + la %r2,4(0,%r2) + la %r3,4(0,%r3) + brct %r4,.L0 + lr %r2,%r6 # return cy_limb + l %r6,24(%r15) +.Lexit: br %r14 +END(__mpn_mul_1) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/s390-mcount.S glibc-2.2.3/sysdeps/s390/s390-32/s390-mcount.S --- glibc-2.2.2/sysdeps/s390/s390-32/s390-mcount.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/s390-mcount.S Fri Mar 16 01:03:57 2001 @@ -0,0 +1,84 @@ +/* S/390-specific implemetation of profiling support. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com) + + 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 + +/* + * How profiling works on S/390: + * On the start of each function _mcount is called with the address of a + * data word in %r1 (initialized to 0, used for counting). The compiler + * with the option -p generates code of the form: + * + * STM 6,15,24(15) + * BRAS 13,.LTN0_0 + * .LT0_0: + * .LC12: .long _mcount + * .LC13: .long .LP0 + * .data + * .align 4 + * .LP0: .long 0 + * .text + * # function profiler + * st 14,4(15) + * l 14,.LC12-.LT0_0(13) + * l 1,.LC13-.LT0_0(13) + * basr 14,14 + * l 14,4(15) + * + * The _mcount implementation now has to call __mcount_internal with the + * address of .LP0 as first parameter and the return address as second + * parameter. &.LP0 was loaded to %r1 and the return address is in %r14. + * _mcount may not modify any register. + */ + + ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(_mcount) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(_mcount), @function) + .align ALIGNARG(4) +C_LABEL(_mcount) + /* Save the caller-clobbered registers. */ + ahi %r15,-128 + stm %r14,%r5,96(%r15) + l %r2,132(%r15) # callers address = first parameter + la %r2,0(%r2) # clear bit 0 + la %r3,0(%r14) # callees address = second parameter + +#ifdef PIC + bras %r14,0f + .long _GLOBAL_OFFSET_TABLE_-. +0: al %r14,0(%r14) + l %r14,__mcount_internal@GOT(%r14) +#else + bras %r14,0f + .long __mcount_internal +0: l %r14,0(%r14) +#endif + basr %r14,%r14 + + /* + * Pop the saved registers. Please note that `mcount' has no + * return value. + */ + lm %r14,%r5,96(%r15) + ahi %r15,128 + br %r14 + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) + +#undef mcount +weak_alias(_mcount, mcount) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/setjmp.S glibc-2.2.3/sysdeps/s390/s390-32/setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/setjmp.S Fri Mar 16 01:04:16 2001 @@ -0,0 +1,51 @@ +/* + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _ASM +#define _ASM +#endif + +#include +#include + +/* Save the current program position in ENV and return 0. */ +/* R2 = pointer to jmp_buf, R3 = savemask */ + +ENTRY(__sigsetjmp) + stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ + std %f4,40(%r2) + std %f6,48(%r2) +#ifdef PIC + /* We cannot use the PLT, because it requires that %r12 be set, but + we can't save and restore our caller's value. Instead, we do an + indirect jump through the GOT. */ + basr %r1,0 +.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ + /* get address of __sigjmp_save from got */ + l %r1,__sigjmp_save@GOT12(0,%r1) + br %r1 +.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 +#else + basr %r1,0 +.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */ + br %r1 /* tail-call __sigjmp_save */ +.L1: .long __sigjmp_save +#endif +END (__sigsetjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/strcmp.S glibc-2.2.3/sysdeps/s390/s390-32/strcmp.S --- glibc-2.2.2/sysdeps/s390/s390-32/strcmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/strcmp.S Wed Mar 28 12:53:36 2001 @@ -0,0 +1,41 @@ +/* strcmp - compare two string. S/390 version. + This file is part of the GNU C Library. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of string 1 + %r3 = address of string 2. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(strcmp) + slr %r0,%r0 +0: clst %r2,%r3 + jo 0b + jp 1f + jm 2f + slr %r2,%r2 + br %r14 +1: lhi %r2,1 + br %r14 +2: lhi %r2,-1 + br %r14 +END(strcmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/strcpy.S glibc-2.2.3/sysdeps/s390/s390-32/strcpy.S --- glibc-2.2.2/sysdeps/s390/s390-32/strcpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/strcpy.S Fri Mar 16 01:04:30 2001 @@ -0,0 +1,36 @@ +/* strcpy - copy a string from source to destination. For IBM S390 + This file is part of the GNU C Library. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* + * R2 = address of destination + * R3 = address of source + */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(strcpy) + slr %r0,%r0 + lr %r1,%r2 +0: mvst %r1,%r3 + jo 0b + br %r14 +END(strcpy) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/strncpy.S glibc-2.2.3/sysdeps/s390/s390-32/strncpy.S --- glibc-2.2.2/sysdeps/s390/s390-32/strncpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/strncpy.S Fri Mar 16 01:04:41 2001 @@ -0,0 +1,79 @@ +/* strncpy - copy at most n characters from a string from source to + destination. For IBM S390 + This file is part of the GNU C Library. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* + * R2 = address of destination (dst) + * R3 = address of source (src) + * R4 = max of bytes to copy + */ + +#include "sysdep.h" +#include "asm-syntax.h" + +ENTRY(strncpy) + .text + st %r2,24(%r15) # save dst pointer + slr %r2,%r3 # %r3 points to src, %r2+%r3 to dst + lhi %r1,3 + nr %r1,%r4 # last 2 bits of # bytes + srl %r4,2 + ltr %r4,%r4 # less than 4 bytes to copy ? + jz .L1 + bras %r5,.L0 # enter loop & load address of a 0 + .long 0 +.L0: icm %r0,8,0(%r3) # first byte + jz .L3 + icm %r0,4,1(%r3) # second byte + jz .L4 + icm %r0,2,2(%r3) # third byte + jz .L5 + icm %r0,1,3(%r3) # fourth byte + jz .L6 + st %r0,0(%r2,%r3) # store all four to dest. + la %r3,4(%r3) + brct %r4,.L0 +.L1: ltr %r1,%r1 + jz .Lexit +.L2: icm %r0,1,0(%r3) + stc %r0,0(%r2,%r3) + la %r3,1(%r3) + jz .L7 + brct %r1,.L2 + j .Lexit +.L3: icm %r0,4,0(%r5) +.L4: icm %r0,2,0(%r5) +.L5: icm %r0,1,0(%r5) +.L6: st %r0,0(%r2,%r3) + la %r3,4(%r3) + ahi %r4,-1 + j .L8 +.L7: ahi %r1,-1 +.L8: sll %r4,2 + alr %r4,%r1 + alr %r2,%r3 # start of dst area to be zeroed + lr %r3,%r4 + slr %r4,%r4 + slr %r5,%r5 +.L9: mvcle %r2,%r4,0 # pad dst with zeroes + jo .L9 +.Lexit: l %r2,24(%r15) # return dst pointer + br %r14 +END(strncpy) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/sub_n.S glibc-2.2.3/sysdeps/s390/s390-32/sub_n.S --- glibc-2.2.2/sysdeps/s390/s390-32/sub_n.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/sub_n.S Fri Mar 16 01:04:54 2001 @@ -0,0 +1,62 @@ +/* __mpn_sub_n -- Add two limb vectors of the same length > 0 and store + sum in a third limb vector. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU MP Library. + + The GNU MP 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 MP 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 MP 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. */ + +/* + INPUT PARAMETERS + res_ptr %r2 + s1_ptr %r3 + s2_ptr %r4 + size %r5 +*/ + +#include "sysdep.h" +#include "asm-syntax.h" + +ENTRY(__mpn_sub_n) + st %r6,24(%r15) # save register 6 + sr %r1,%r1 + lhi %r0,1 # cannot use ahi to add carry, use slr +.L0: l %r6,0(%r1,%r3) # .L0 -> no carry from last sub + sl %r6,0(%r1,%r4) + st %r6,0(%r1,%r2) + la %r1,4(0,%r1) + brc 4,.L3 +.L1: brct %r5,.L0 + slr %r2,%r2 # no last carry to return + j .Lexit +.L2: l %r6,0(%r1,%r3) # .L2 -> carry from last sub + sl %r6,0(%r1,%r4) + brc 4,.L4 + slr %r6,%r0 # no carry yet, add carry from last sub + st %r6,0(%r1,%r2) + la %r1,4(0,%r1) + brc 11,.L1 # new carry ? +.L3: brct %r5,.L2 + lr %r2,%r0 # return last carry + j .Lexit +.L4: slr %r6,%r0 # already a carry, add carry from last sub + st %r6,0(%r1,%r2) + la %r1,4(0,%r1) + brct %r5,.L2 + lr %r2,%r0 # return last carry +.Lexit: l %r6,24(%r15) # restore register 6 + br %r14 +END(__mpn_sub_n) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-32/sysdep.h glibc-2.2.3/sysdeps/s390/s390-32/sysdep.h --- glibc-2.2.2/sysdeps/s390/s390-32/sysdep.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-32/sysdep.h Fri Mar 16 01:05:12 2001 @@ -0,0 +1,121 @@ +/* Assembler macros for s390. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +#ifdef __ASSEMBLER__ + +/* Syntactic details of assembler. */ + +#ifdef HAVE_ELF + +/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ +#define ALIGNARG(log2) 1< +#include +#include +#include +#include +#include + +/* Jump to the position specified by ENV, causing the + setjmp call there to return VAL, or 1 if VAL is 0. */ +void +__longjmp (__jmp_buf env, int val) +{ + /* Restore registers and jump back. */ + asm volatile ("lgr %%r2,%0\n\t" /* Put val in grp 2. */ + "ld %%f7,104(%1)\n\t" + "ld %%f5,96(%1)\n\t" + "ld %%f3,88(%1)\n\t" + "ld %%f1,80(%1)\n\t" + "lmg %%r6,%%r15,0(%1)\n\t" + "br %%r14" + : : "r" (val == 0 ? 1 : val), + "a" (env) : "2" ); + + /* Avoid `volatile function does return' warnings. */ + for (;;); +} + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/add_n.S glibc-2.2.3/sysdeps/s390/s390-64/add_n.S --- glibc-2.2.2/sysdeps/s390/s390-64/add_n.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/add_n.S Fri Mar 16 01:11:17 2001 @@ -0,0 +1,63 @@ +/* Add two limb vectors of the same length > 0 and store sum in a third + limb vector. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU MP Library. + + The GNU MP 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 MP 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 MP 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. */ + +/* + INPUT PARAMETERS + res_ptr %r2 + s1_ptr %r3 + s2_ptr %r4 + size %r5 +*/ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__mpn_add_n) + stg %r6,48(%r15) # save register 6 + slgr %r1,%r1 + lghi %r0,1 # cannot use ahi to add carry, use alr +.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last add + alg %r6,0(%r1,%r4) + stg %r6,0(%r1,%r2) + la %r1,8(%r1) + brc 3,.L3 +.L1: brct %r5,.L0 + slgr %r2,%r2 # no last carry to return + j .Lexit +.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last add + alg %r6,0(%r1,%r4) + brc 3,.L4 + algr %r6,%r0 # no carry yet, add carry from last add + stg %r6,0(%r1,%r2) + la %r1,8(%r1) + brc 12,.L1 # new carry ? +.L3: brct %r5,.L2 + lgr %r2,%r0 # return last carry + j .Lexit +.L4: algr %r6,%r0 # already a carry, add carry from last add + stg %r6,0(%r1,%r2) + la %r1,8(%r1) + brct %r5,.L2 + lgr %r2,%r0 # return last carry +.Lexit: lg %r6,48(%r15) # restore register 6 + br %r14 +END(__mpn_add_n) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/atomicity.h glibc-2.2.3/sysdeps/s390/s390-64/atomicity.h --- glibc-2.2.2/sysdeps/s390/s390-64/atomicity.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/atomicity.h Fri Mar 16 01:11:50 2001 @@ -0,0 +1,76 @@ +/* Low-level functions for atomic operations. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _ATOMICITY_H +#define _ATOMICITY_H 1 + +#include + +static inline int +__attribute__ ((unused)) +exchange_and_add (volatile uint32_t *mem, int val) +{ + int result; + __asm__ __volatile__( + " L %0,%2\n" + " LA 2,%1\n" + "0: LR 0,%0\n" + " AR 0,%3\n" + " CS %0,0,0(2)\n" + " JL 0b" + : "=&d" (result), "=m" (*mem) + : "1" (*mem), "d" (val) : "0", "1", "2" ); + return result; +} + +static inline void +__attribute__ ((unused)) +atomic_add (volatile uint32_t *mem, int val) +{ + __asm__ __volatile__( + " LA 2,%0\n" + "0: L 0,%1\n" + " LR 1,0\n" + " AR 1,%2\n" + " CS 0,1,0(2)\n" + " JL 0b" + : "=m" (*mem) : "0" (*mem), "d" (val) : "0", "1", "2" ); +} + +static inline int +__attribute__ ((unused)) +compare_and_swap (volatile long int *p, long int oldval, long int newval) +{ + int retval; + + __asm__ __volatile__( + " la 1,%1\n" + " lgr 0,%2\n" + " csg 0,%3,0(1)\n" + " ipm %0\n" + " srl %0,28\n" + "0:" + : "=&r" (retval), "+m" (*p) + : "d" (oldval) , "d" (newval) + : "memory", "0", "1", "cc"); + return !retval; +} + +#endif /* atomicity.h */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/backtrace.c glibc-2.2.3/sysdeps/s390/s390-64/backtrace.c --- glibc-2.2.2/sysdeps/s390/s390-64/backtrace.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/backtrace.c Fri Mar 16 01:12:07 2001 @@ -0,0 +1,81 @@ +/* Return backtrace of current program state. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 +#include + + +/* This is a global variable set at program start time. It marks the + highest used stack address. */ +extern void *__libc_stack_end; + + +/* This is the stack layout we see for every non-leaf function. + size offset + %r15 -> +------------------+ + 8 | back chain | 0 + 8 | end of stack | 8 + 32 | scratch | 16 + 80 | save area r6-r15 | 48 + 16 | save area f4,f6 | 128 + 16 | empty | 144 + +------------------+ + r14 in the save area holds the return address. +*/ + +struct layout +{ + long back_chain; + long end_of_stack; + long scratch[4]; + long save_grps[10]; + long save_fp[2]; + long empty[2]; +}; + +int +__backtrace (array, size) + void **array; + int size; +{ + /* We assume that all the code is generated with frame pointers set. */ + struct layout *stack; + int cnt = 0; + + asm ("LGR %0,%%r15" : "=d" (stack) ); + /* We skip the call to this function, it makes no sense to record it. */ + stack = (struct layout *) stack->back_chain; + while (cnt < size) + { + if (stack == NULL || (void *) stack > __libc_stack_end) + /* This means the address is out of range. Note that for the + toplevel we see a frame pointer with value NULL which clearly is + out of range. */ + break; + + array[cnt++] = stack->save_grps[9]; + + stack = (struct layout *) stack->back_chain; + } + + return cnt; +} +weak_alias (__backtrace, backtrace) + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/bcopy.S glibc-2.2.3/sysdeps/s390/s390-64/bcopy.S --- glibc-2.2.2/sysdeps/s390/s390-64/bcopy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/bcopy.S Sat Apr 7 14:02:39 2001 @@ -0,0 +1,66 @@ +/* bcopy -- copy a block from source to destination. 64 bit S/390 version. + This file is part of the GNU C Library. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of source + %r3 = address of destination + %r4 = number of bytes to copy. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__bcopy) + ltgr %r1,%r4 # zero bcopy ? + jz .L4 + clgr %r2,%r3 # check against destructive overlap + jnl .L0 + algr %r1,%r2 + clgr %r1,%r3 + jh .L5 +.L0: aghi %r4,-1 # length - 1 + srlg %r1,%r4,8 + ltgr %r1,%r1 + jz .L2 +.L1: mvc 0(256,%r3),0(%r2) # move in 256 byte chunks + la %r2,256(%r2) + la %r3,256(%r3) + brctg %r1,.L1 +.L2: bras %r1,.L3 # setup base pointer for execute + mvc 0(1,%r3),0(%r2) # instruction for execute +.L3: ex %r4,0(%r1) # execute mvc with length ((%r4)&255)+1 +.L4: br %r14 + +.L5: # destructive overlay, can not use mvcle + lgr %r1,%r2 # bcopy is called with source,dest + lgr %r2,%r3 # memmove with dest,source! Oh, well... + lgr %r3,%r1 +#ifdef PIC + jg memmove@PLT +#else + jg memmove +#endif + +END(__bcopy) + +#ifndef NO_WEAK_ALIAS +weak_alias (__bcopy, bcopy) +#endif + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/bits/byteswap.h glibc-2.2.3/sysdeps/s390/s390-64/bits/byteswap.h --- glibc-2.2.2/sysdeps/s390/s390-64/bits/byteswap.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/bits/byteswap.h Fri Mar 16 01:16:28 2001 @@ -0,0 +1,93 @@ +/* Macros to swap the order of bytes in integer values. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _BYTESWAP_H && !defined _NETINET_IN_H +# error "Never use directly; include instead." +#endif + +#define __bswap_constant_16(x) \ + ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) + +/* Swap bytes in 16 bit value. */ +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_16(x) \ + (__extension__ \ + ({ unsigned short int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_16 (x); \ + else { \ + unsigned short int __tmp = (unsigned short int) (x); \ + __asm__ __volatile__ ( \ + "lrvh %0,%1" \ + : "=&d" (__v) : "m" (__tmp) ); \ + } \ + __v; })) +#else +/* This is better than nothing. */ +#define __bswap_16(x) __bswap_constant_16 (x) +#endif + +/* Swap bytes in 32 bit value. */ +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_32(x) \ + (__extension__ \ + ({ unsigned int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_32 (x); \ + else { \ + unsigned int __tmp = (unsigned int) (x); \ + __asm__ __volatile__ ( \ + "lrv %0,%1" \ + : "=&d" (__v) : "m" (__tmp)); \ + } \ + __v; })) +#else +# define __bswap_32(x) __bswap_constant_32 (x) +#endif + +/* Swap bytes in 64 bit value. */ +#define __bswap_constant_64(x) \ + ((((x)&0xff00000000000000) >> 56) | (((x)&0x00ff000000000000) >> 40) | \ + (((x)&0x0000ff0000000000) >> 24) | (((x)&0x000000ff00000000) >> 8) | \ + (((x)&0x00000000ff000000) << 8) | (((x)&0x0000000000ff0000) << 24) | \ + (((x)&0x000000000000ff00) << 40) | (((x)&0x00000000000000ff) << 56)) + +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_64(x) \ + (__extension__ \ + ({ unsigned long __w; \ + if (__builtin_constant_p (x)) \ + __w = __bswap_constant_64 (x); \ + else { \ + unsigned long __tmp = (unsigned long) (x); \ + __asm__ __volatile__ ( \ + "lrvg %0,%1" \ + : "=&d" (__w) : "m" (__tmp)); \ + } \ + __w; })) +#else +# define __bswap_64(x) __bswap_constant_64 (x) +#endif + + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/bits/setjmp.h glibc-2.2.3/sysdeps/s390/s390-64/bits/setjmp.h --- glibc-2.2.2/sysdeps/s390/s390-64/bits/setjmp.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/bits/setjmp.h Fri Mar 16 01:16:55 2001 @@ -0,0 +1,53 @@ +/* Copyright (C) 2001 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. */ + +/* Define the machine-dependent type `jmp_buf'. 64 bit S/390 version. */ + +#ifndef __S390_SETJMP_H__ +#define __S390_SETJMP_H__ + +#define __JB_GPR6 0 +#define __JB_GPR7 1 +#define __JB_GPR8 2 +#define __JB_GPR9 3 +#define __JB_GPR10 4 +#define __JB_GPR11 5 +#define __JB_GPR12 6 +#define __JB_GPR13 7 +#define __JB_GPR14 8 +#define __JB_GPR15 9 + +#ifndef _ASM + +typedef struct { + /* We save registers 6-15. */ + long int gregs[10]; + + /* We save fpu registers 4 and 6. */ + long fpregs[8]; +} __jmp_buf[1]; + +#endif + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address) \ + ((int) (address) < (jmpbuf)->gregs[__JB_GPR15]) + +#endif /* __S390_SETJMP_H__ */ + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/bsd-_setjmp.S glibc-2.2.3/sysdeps/s390/s390-64/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/bsd-_setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/bsd-_setjmp.S Fri Mar 16 01:12:35 2001 @@ -0,0 +1,35 @@ +/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software ; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. + We cannot do it in C because it must be a tail-call, so frame-unwinding + in setjmp doesn't clobber the state restored by longjmp. */ + +#include + +ENTRY(_setjmp) + slgr %r3,%r3 /* Second argument of zero. */ +#ifdef PIC + jg __sigsetjmp@PLT /* Branch to PLT of __sigsetjmp. */ +#else + jg __sigsetjmp /* Branch to __sigsetjmp. */ +#endif +END (_setjmp) + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/bsd-setjmp.S glibc-2.2.3/sysdeps/s390/s390-64/bsd-setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/bsd-setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/bsd-setjmp.S Fri Mar 16 01:12:47 2001 @@ -0,0 +1,34 @@ +/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software ; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. + We cannot do it in C because it must be a tail-call, so frame-unwinding + in setjmp doesn't clobber the state restored by longjmp. */ + +#include + +ENTRY(setjmp) + lghi %r1,1 /* Second argument of one. */ +#ifdef PIC + jg __sigsetjmp@PLT /* Branch to PLT of __sigsetjmp. */ +#else + jg __sigsetjmp /* Branch to __sigsetjmp. */ +#endif +END (setjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/bzero.S glibc-2.2.3/sysdeps/s390/s390-64/bzero.S --- glibc-2.2.2/sysdeps/s390/s390-64/bzero.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/bzero.S Fri Mar 16 01:13:01 2001 @@ -0,0 +1,42 @@ +/* bzero -- set a block of memory to zero. 64 bit S/390 version. + This file is part of the GNU C Library. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of memory area + %r3 = number of bytes to fill. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(__bzero) + ltgr %r3,%r3 + jz .L1 + sgr %r1,%r1 # set pad byte to zero + sgr %r4,%r4 # no source for MVCLE, only a pad byte + sgr %r5,%r5 +.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend + jo .L0 +.L1: br %r14 +END(__bzero) + +#ifndef NO_WEAK_ALIAS +weak_alias (__bzero, bzero) +#endif diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/dl-machine.h glibc-2.2.3/sysdeps/s390/s390-64/dl-machine.h --- glibc-2.2.2/sysdeps/s390/s390-64/dl-machine.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/dl-machine.h Fri Mar 16 01:13:15 2001 @@ -0,0 +1,434 @@ +/* Machine-dependent ELF dynamic relocation inline functions. + 64 bit S/390 Version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 dl_machine_h +#define dl_machine_h + +#define ELF_MACHINE_NAME "s390x" + +#include +#include +#include + +/* This is an older, now obsolete value. */ +#define EM_S390_OLD 0xA390 + +/* Return nonzero iff E_MACHINE is compatible with the running host. */ +static inline int +elf_machine_matches_host (const Elf64_Ehdr *ehdr) +{ + return (ehdr->e_machine == EM_S390 || ehdr->e_machine == EM_S390_OLD) + && ehdr->e_ident[EI_CLASS] == ELFCLASS64; +} + +/* Return the link-time address of _DYNAMIC. Conveniently, this is the + first element of the GOT. This must be inlined in a function which + uses global data. */ + +static inline Elf64_Addr +elf_machine_dynamic (void) +{ + register Elf64_Addr *got; + + asm( " larl %0,_GLOBAL_OFFSET_TABLE_\n" + : "=&a" (got) : : "0" ); + + return *got; +} + +/* Return the run-time load address of the shared object. */ +static inline Elf64_Addr +elf_machine_load_address (void) +{ + Elf64_Addr addr; + + asm( " larl %0,_dl_start\n" + " larl 1,_GLOBAL_OFFSET_TABLE_\n" + " lghi 2,_dl_start@GOT\n" + " slg %0,0(2,1)" + : "=&d" (addr) : : "1", "2" ); + return addr; +} + +/* Set up the loaded object described by L so its unrelocated PLT + entries will jump to the on-demand fixup code in dl-runtime.c. */ + +static inline int __attribute__ ((unused)) +elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +{ + extern void _dl_runtime_resolve (Elf64_Word); + extern void _dl_runtime_profile (Elf64_Word); + + if (l->l_info[DT_JMPREL] && lazy) + { + /* The GOT entries for functions in the PLT have not yet been filled + in. Their initial contents will arrange when called to push an + offset into the .rela.plt section, push _GLOBAL_OFFSET_TABLE_[1], + and then jump to _GLOBAL_OFFSET_TABLE[2]. */ + Elf64_Addr *got; + got = (Elf64_Addr *) D_PTR (l, l_info[DT_PLTGOT]); + got[1] = (Elf64_Addr) l; /* Identify this shared object. */ + + /* The got[2] entry contains the address of a function which gets + called to get the address of a so far unresolved function and + jump to it. The profiling extension of the dynamic linker allows + to intercept the calls to collect information. In this case we + don't store the address in the GOT so that all future calls also + end in this function. */ + if (__builtin_expect (profile, 0)) + { + got[2] = (Elf64_Addr) &_dl_runtime_profile; + + if (_dl_name_match_p (_dl_profile, l)) + /* This is the object we are looking for. Say that we really + want profiling and the timers are started. */ + _dl_profile_map = l; + } + else + /* This function will get called to fix up the GOT entry indicated by + the offset on the stack, and then jump to the resolved address. */ + got[2] = (Elf64_Addr) &_dl_runtime_resolve; + } + + return lazy; +} + +/* This code is used in dl-runtime.c to call the `fixup' function + and then redirect to the address it returns. */ + +/* s390: + Arguments are in register. + r2 - r7 holds the original parameters for the function call, fixup + and trampoline code use r0-r5 and r14-15. For the correct function + call r2-r5 and r14-15 must be restored. + Arguments from the PLT are stored at 48(r15) and 56(r15) + and must be moved to r2 and r3 for the fixup call (see elf32-s390.c + in the binutils for the PLT code). + Fixup function address in r2. +*/ +#ifndef PROF +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + asm ( "\ + .text\n\ + .globl _dl_runtime_resolve\n\ + .type _dl_runtime_resolve, @function\n\ + .align 16\n\ +_dl_runtime_resolve:\n\ + # save registers\n\ + stmg 2,5,64(15)\n\ + stg 14,96(15)\n\ + lgr 0,15\n\ + aghi 15,-160\n\ + stg 0,0(15)\n\ + # load args saved by PLT\n\ + lmg 2,3,208(15)\n\ + brasl 14,fixup # call fixup + lgr 1,2 # function addr returned in r2\n\ + # restore registers\n\ + aghi 15,160\n\ + lg 14,96(15)\n\ + lmg 2,5,64(15)\n\ + br 1\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ +\n\ + .globl _dl_runtime_profile\n\ + .type _dl_runtime_profile, @function\n\ + .align 16\n\ +_dl_runtime_profile:\n\ + # save registers\n\ + stmg 2,5,64(15)\n\ + stg 14,96(15)\n\ + lgr 0,15\n\ + aghi 15,-160\n\ + stg 0,0(15)\n\ + # load args saved by PLT\n\ + lmg 2,3,208(15)\n\ + # load return address as third parameter\n\ + lgr 4,14\n\ + brasl 14,profile_fixup # call fixup\n\ + lgr 1,2 # function addr returned in r2\n\ + # restore registers\n\ + aghi 15,160\n\ + lg 14,96(15)\n\ + lmg 2,5,64(15)\n\ + br 1\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ +"); +#else +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + asm ( "\ + .text\n\ + .globl _dl_runtime_resolve\n\ + .globl _dl_runtime_profile\n\ + .type _dl_runtime_resolve, @function\n\ + .type _dl_runtime_profile, @function\n\ + .align 16\n\ +_dl_runtime_resolve:\n\ +_dl_runtime_profile:\n\ + # save registers\n\ + stmg 2,5,64(15)\n\ + stg 14,96(15)\n\ + lgr 0,15\n\ + aghi 15,-160\n\ + stg 0,0(15)\n\ + # load args saved by PLT\n\ + lmg 2,3,208(15)\n\ + # load return address as third parameter\n\ + lgr 4,14\n\ + brasl 14,profile_fixup # call fixup\n\ + lgr 1,2 # function addr returned in r2\n\ + # restore registers\n\ + aghi 15,160\n\ + lg 14,96(15)\n\ + lmg 2,5,64(15)\n\ + br 1\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ +"); +#endif + +/* Initial entry point code for the dynamic linker. + The C function `_dl_start' is the real entry point; + its return value is the user program's entry point. */ + +#define RTLD_START asm ("\n\ +.text\n\ +.align 4\n\ +.globl _start\n\ +.globl _dl_start_user\n\ +_start:\n\ + lgr %r2,%r15\n\ + # Alloc stack frame\n\ + aghi %r15,-160\n\ + # Set the back chain to zero\n\ + xc 0(8,%r15),0(%r15)\n\ + # Call _dl_start with %r2 pointing to arg on stack\n\ + brasl %r14,_dl_start # call _dl_start\n\ +_dl_start_user:\n\ + # Save the user entry point address in %r8.\n\ + lgr %r8,%r2\n\ + # Point %r12 at the GOT.\n\ + larl %r12,_GLOBAL_OFFSET_TABLE_\n\ + # Store the highest stack address\n\ + lghi %r1,__libc_stack_end@GOT + lg %r1,0(%r1,%r12)\n\ + stg %r15, 0(%r1)\n\ + # See if we were run as a command with the executable file\n\ + # name as an extra leading argument.\n\ + lghi %r1,_dl_skip_args@GOT + lg %r1,0(%r1,%r12)\n\ + lgf %r1,0(%r1) # load _dl_skip_args\n\ + # Get the original argument count.\n\ + lg %r0,160(%r15)\n\ + # Subtract _dl_skip_args from it.\n\ + sgr %r0,%r1\n\ + # Adjust the stack pointer to skip _dl_skip_args words.\n\ + sllg %r1,%r1,3\n\ + agr %r15,%r1\n\ + # Set the back chain to zero again\n\ + xc 0(8,%r15),0(%r15)\n\ + # Store back the modified argument count.\n\ + stg %r0,160(%r15)\n\ + # The special initializer gets called with the stack just\n\ + # as the application's entry point will see it; it can\n\ + # switch stacks if it moves these contents over.\n\ +" RTLD_START_SPECIAL_INIT "\n\ + # Call the function to run the initializers.\n\ + # Load the parameters:\n\ + # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ + lghi %r2,_dl_loaded@GOT + lg %r2,0(%r2,%r12)\n\ + lg %r2,0(%r2)\n\ + lg %r3,160(%r15)\n\ + la %r4,168(%r15)\n\ + lgr %r5,%r3\n\ + sllg %r5,%r5,3\n\ + la %r5,176(%r5,%r15)\n\ + brasl %r14,_dl_init@PLT\n + # Pass our finalizer function to the user in %r14, as per ELF ABI.\n\ + lghi %r14,_dl_fini@GOT + lg %r14,0(%r14,%r12)\n\ + # Free stack frame\n\ + aghi %r15,160\n\ + # Jump to the user's entry point (saved in %r8).\n\ + br %r8\n\ +"); + +#ifndef RTLD_START_SPECIAL_INIT +#define RTLD_START_SPECIAL_INIT /* nothing */ +#endif + +/* Nonzero iff TYPE should not be allowed to resolve to one of + the main executable's symbols, as for a COPY reloc. */ +#define elf_machine_lookup_noexec_p(type) ((type) == R_390_COPY) + +/* Nonzero iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. */ +#define elf_machine_lookup_noplt_p(type) ((type) == R_390_JMP_SLOT) + +/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ +#define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT + +/* The 64 bit S/390 never uses Elf64_Rel relocations. */ +#define ELF_MACHINE_NO_REL 1 + +/* We define an initialization functions. This is called very early in + _dl_sysdep_start. */ +#define DL_PLATFORM_INIT dl_platform_init () + +extern const char *_dl_platform; + +static inline void __attribute__ ((unused)) +dl_platform_init (void) +{ + if (_dl_platform != NULL && *_dl_platform == '\0') + /* Avoid an empty string which would disturb us. */ + _dl_platform = NULL; +} + +static inline Elf64_Addr +elf_machine_fixup_plt (struct link_map *map, lookup_t t, + const Elf64_Rela *reloc, + Elf64_Addr *reloc_addr, Elf64_Addr value) +{ + return *reloc_addr = value; +} + +/* Return the final value of a plt relocation. */ +static inline Elf64_Addr +elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, + Elf64_Addr value) +{ + return value; +} + +#endif /* !dl_machine_h */ + +#ifdef RESOLVE + +/* Perform the relocation specified by RELOC and SYM (which is fully resolved). + MAP is the object containing the reloc. */ + +static inline void +elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, + const Elf64_Sym *sym, const struct r_found_version *version, + Elf64_Addr *const reloc_addr) +{ + if (ELF64_R_TYPE (reloc->r_info) == R_390_RELATIVE) { +#ifndef RTLD_BOOTSTRAP + weak_extern (_dl_rtld_map); + if (map != &_dl_rtld_map) /* Already done in rtld itself. */ +#endif + *reloc_addr = map->l_addr + reloc->r_addend; + } + else if (ELF64_R_TYPE (reloc->r_info) != R_390_NONE) + { + const Elf64_Sym *const refsym = sym; + Elf64_Addr value = RESOLVE (&sym, version, ELF64_R_TYPE (reloc->r_info)); + if (sym) + value += sym->st_value; + + switch (ELF64_R_TYPE (reloc->r_info)) + { + case R_390_GLOB_DAT: + case R_390_JMP_SLOT: + *reloc_addr = value + reloc->r_addend; + break; +#ifndef RTLD_BOOTSTRAP + case R_390_COPY: + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; + if (__builtin_expect (sym->st_size > refsym->st_size, 0) + || (__builtin_expect (sym->st_size < refsym->st_size, 0) + && __builtin_expect (_dl_verbose, 0))) + { + const char *strtab; + + strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); + } + memcpy (reloc_addr, (void *) value, MIN (sym->st_size, + refsym->st_size)); + break; + case R_390_64: + *reloc_addr = value + reloc->r_addend; + break; + case R_390_32: + *(unsigned int *) reloc_addr = value + reloc->r_addend; + break; + case R_390_16: + *(unsigned short *) reloc_addr = value + reloc->r_addend; + break; + case R_390_8: + *(char *) reloc_addr = value + reloc->r_addend; + break; + case R_390_PC64: + *reloc_addr = value +reloc->r_addend - (Elf64_Addr) reloc_addr; + break; + case R_390_PC32DBL: + case R_390_PLT32DBL: + *(unsigned int *) reloc_addr = (unsigned int) + ((int) (value + reloc->r_addend - (Elf64_Addr) reloc_addr) >> 1); + break; + case R_390_PC32: + *(unsigned int *) reloc_addr = + value + reloc->r_addend - (Elf64_Addr) reloc_addr; + break; + case R_390_PC16DBL: + case R_390_PLT16DBL: + *(unsigned short *) reloc_addr = (unsigned short) + ((short) (value + reloc->r_addend - (Elf64_Addr) reloc_addr) >> 1); + break; + case R_390_PC16: + *(unsigned short *) reloc_addr = + value + reloc->r_addend - (Elf64_Addr) reloc_addr; + break; +#endif +#if !defined(RTLD_BOOTSTRAP) || defined(_NDEBUG) + default: + /* We add these checks in the version to relocate ld.so only + if we are still debugging. */ + _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 0); + break; +#endif + } + } +} + +static inline void +elf_machine_lazy_rel (struct link_map *map, + Elf64_Addr l_addr, const Elf64_Rela *reloc) +{ + Elf64_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); + /* Check for unexpected PLT reloc type. */ + if (__builtin_expect (ELF64_R_TYPE (reloc->r_info), R_390_JMP_SLOT) + == R_390_JMP_SLOT) + *reloc_addr += l_addr; + else + _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 1); +} + +#endif /* RESOLVE */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/elf/bsd-_setjmp.S glibc-2.2.3/sysdeps/s390/s390-64/elf/bsd-_setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/elf/bsd-_setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/elf/bsd-_setjmp.S Fri Mar 16 01:17:30 2001 @@ -0,0 +1 @@ +/* We don't need any code here since the setjmp.S file contains it. */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/elf/bsd-setjmp.S glibc-2.2.3/sysdeps/s390/s390-64/elf/bsd-setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/elf/bsd-setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/elf/bsd-setjmp.S Fri Mar 16 01:17:39 2001 @@ -0,0 +1 @@ +/* We don't need any code here since the setjmp.S file contains it. */ diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/elf/setjmp.S glibc-2.2.3/sysdeps/s390/s390-64/elf/setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/elf/setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/elf/setjmp.S Fri Mar 16 01:17:52 2001 @@ -0,0 +1,53 @@ +/* setjmp for 64 bit S/390, ELF version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _ASM +#define _SETJMP_H +#include + + /* We include the BSD entry points here as well but we make + them weak. */ +ENTRY (setjmp) + .weak C_SYMBOL_NAME (setjmp) + lghi %r3,1 /* Second argument of one. */ + j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */ +END (setjmp) + + /* Binary compatibility entry point. */ +ENTRY(_setjmp) + .weak C_SYMBOL_NAME (_setjmp) +ENTRY(__setjmp) + slgr %r3,%r3 /* Second argument of zero. */ + +ENTRY(__sigsetjmp) +.Linternal_sigsetjmp: + stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ + std %f1,80(%r2) + std %f3,88(%r2) + std %f5,96(%r2) + std %f7,104(%r2) +#ifdef PIC + jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */ +#else + jg __sigjmp_save +#endif +END (__sigsetjmp) + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/elf/start.S glibc-2.2.3/sysdeps/s390/s390-64/elf/start.S --- glibc-2.2.2/sysdeps/s390/s390-64/elf/start.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/elf/start.S Fri Mar 16 01:18:07 2001 @@ -0,0 +1,84 @@ +/* Startup code compliant to the 64 bit S/390 ELF ABI. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* + This is the canonical entry point, usually the first thing in the text + segment. Most registers' values are unspecified, except for: + + %r14 Contains a function pointer to be registered with `atexit'. + This is how the dynamic linker arranges to have DT_FINI + functions called for shared libraries that have been loaded + before this code runs. + + %r15 The stack contains the arguments and environment: + 0(%r15) argc + 8(%r15) argv[0] + ... + (8*argc)(%r15) NULL + (8*(argc+1))(%r15) envp[0] + ... + NULL +*/ + + .text + .globl _start +_start: + /* Load argc and argv from stack. */ + la %r4,8(%r15) # get argv + lg %r3,0(%r15) # get argc + + /* Align the stack to a double word boundary. */ + lghi %r0,-16 + ngr %r15,%r0 + + /* Setup a stack frame and a parameter area. */ + aghi %r15,-176 # make room on stack + xc 0(8,%r15),0(%r15) # clear back-chain + + /* Set up arguments for __libc_start_main: + main, argc, argv, envp, _init, _fini, rtld_fini, stack_end + Note that envp will be determined later in __libc_start_main. + */ + stmg %r14,%r15,160(%r15) # store rtld_fini/stack_end to parameter area + la %r7,160(%r15) + larl %r6,_fini # load pointer to _fini + larl %r5,_init # load pointer to _init + larl %r2,main # load pointer to main + + /* Ok, now branch to the libc main routine. */ + brasl %r14,__libc_start_main + + /* Crash if __libc_start_main returns. */ + .word 0 + + /* FIXME: FPU flags or what ?!? */ + + .section .rodata + .globl _fp_hw + .long 3 + .size _fp_hw, 4 + + /* Define a symbol for the first piece of initialized data. */ + .data + .globl __data_start +__data_start: + .long 0 + .weak data_start + data_start = __data_start diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/initfini.c glibc-2.2.3/sysdeps/s390/s390-64/initfini.c --- glibc-2.2.2/sysdeps/s390/s390-64/initfini.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/initfini.c Sat Apr 7 14:02:39 2001 @@ -0,0 +1,136 @@ +/* Special .init and .fini section support for 64 bit S/390. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Library General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The Library General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + 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, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* This file is compiled into assembly code which is then munged by a sed + script into two files: crti.s and crtn.s. + + * crti.s puts a function prologue at the beginning of the + .init and .fini sections and defines global symbols for + those addresses, so they can be called as functions. + + * crtn.s puts the corresponding function epilogues + in the .init and .fini sections. */ + +__asm__ (" + +#include \"defs.h\" + +/*@HEADER_ENDS*/ + +/*@TESTS_BEGIN*/ + +/*@TESTS_END*/ + +/*@_init_PROLOG_BEGINS*/ + + .section .init +#NO_APP + .align 4 +.globl _init + .type _init,@function +_init: +# leaf function 0 +# automatics 0 +# outgoing args 0 +# need frame pointer 0 +# call alloca 0 +# has varargs 0 +# incoming args (stack) 0 +# function length 36 + STMG 6,15,48(15) + LGR 1,15 + AGHI 15,-160 + STG 1,0(15) + LARL 12,_GLOBAL_OFFSET_TABLE_ + LARL 1,__gmon_start__@GOTENT + LG 1,0(1) + LTGR 1,1 + JE .L22 + BASR 14,1 +.L22: +#APP + .align 4,0x07 + END_INIT + +/*@_init_PROLOG_ENDS*/ + +/*@_init_EPILOG_BEGINS*/ + .align 4 + .section .init +#NO_APP + .align 4 + LG 4,272(15) + LMG 6,15,208(15) + BR 4 +#APP + END_INIT + +/*@_init_EPILOG_ENDS*/ + +/*@_fini_PROLOG_BEGINS*/ + .section .fini +#NO_APP + .align 4 +.globl _fini + .type _fini,@function +_fini: +# leaf function 0 +# automatics 0 +# outgoing args 0 +# need frame pointer 0 +# call alloca 0 +# has varargs 0 +# incoming args (stack) 0 +# function length 30 + STMG 6,15,48(15) + LGR 1,15 + AGHI 15,-160 + STG 1,0(15) + LARL 12,_GLOBAL_OFFSET_TABLE_ +#APP + .align 4,0x07 + END_FINI + +/*@_fini_PROLOG_ENDS*/ + +/*@_fini_EPILOG_BEGINS*/ + .align 4 + .section .fini +#NO_APP + .align 4 + LG 4,272(15) + LMG 6,15,208(15) + BR 4 +#APP + END_FINI + +/*@_fini_EPILOG_ENDS*/ + +/*@TRAILER_BEGINS*/ +"); diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/memchr.S glibc-2.2.3/sysdeps/s390/s390-64/memchr.S --- glibc-2.2.2/sysdeps/s390/s390-64/memchr.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/memchr.S Fri Mar 16 01:13:55 2001 @@ -0,0 +1,40 @@ +/* Search a character in a block of memory. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* INPUT PARAMETERS + %r2 = address to memory area + %r3 = character to find + %r4 = number of bytes to search. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(memchr) + lghi %r0,0xff + ngr %r0,%r3 + lgr %r1,%r2 + la %r2,0(%r4,%r1) +0: srst %r2,%r1 + jo 0b + brc 13,1f + slgr %r2,%r2 +1: br %r14 +END(memchr) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/memcpy.S glibc-2.2.3/sysdeps/s390/s390-64/memcpy.S --- glibc-2.2.2/sysdeps/s390/s390-64/memcpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/memcpy.S Sat Apr 7 14:02:39 2001 @@ -0,0 +1,45 @@ +/* memcpy - copy a block from source to destination. 64 bit S/390 version. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of destination memory area + %r3 = address of source memory area + %r4 = number of bytes to copy. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(memcpy) + ltgr %r4,%r4 + jz .L3 + aghi %r4,-1 # length - 1 + lgr %r1,%r2 # copy destination address + srag %r5,%r4,8 + jz .L1 +.L0: mvc 0(256,%r1),0(%r3) # move in 256 byte chunks + la %r1,256(%r1) + la %r3,256(%r3) + brctg %r5,.L0 +.L1: bras %r5,.L2 # setup base pointer for execute + mvc 0(1,%r1),0(%r3) # instruction for execute +.L2: ex %r4,0(%r5) # execute mvc with length ((%r4)&255)+1 +.L3: br %r14 +END(memcpy) + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/memset.S glibc-2.2.3/sysdeps/s390/s390-64/memset.S --- glibc-2.2.2/sysdeps/s390/s390-64/memset.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/memset.S Fri Mar 16 01:14:20 2001 @@ -0,0 +1,43 @@ +/* Set a block of memory to some byte value. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* INPUT PARAMETERS + %r2 = address of memory area + %r3 = byte to fill memory with + %r4 = number of bytes to fill. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(memset) + ltgr %r4,%r4 + jz .L1 + lgr %r0,%r2 # save source address + lgr %r1,%r3 # move pad byte to R1 + lgr %r3,%r4 + sgr %r4,%r4 # no source for MVCLE, only a pad byte + sgr %r5,%r5 +.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend + jo .L0 + lgr %r2,%r0 # return value is source address +.L1: + br %r14 +END(memset) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/s390x-mcount.S glibc-2.2.3/sysdeps/s390/s390-64/s390x-mcount.S --- glibc-2.2.2/sysdeps/s390/s390-64/s390x-mcount.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/s390x-mcount.S Fri Mar 16 01:14:32 2001 @@ -0,0 +1,72 @@ +/* 64 bit S/390-specific implemetation of profiling support. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com) + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +/* How profiling works on 64 bit S/390: + On the start of each function _mcount is called with the address of a + data word in %r1 (initialized to 0, used for counting). The compiler + with the option -p generates code of the form: + + STM 6,15,24(15) + BRAS 13,.LTN0_0 + .LT0_0: + .LC13: .long .LP0 + .data + .align 4 + .LP0: .long 0 + .text + # function profiler + stg 14,4(15) + lg 1,.LC13-.LT0_0(13) + brasl 14,_mcount + lg 14,4(15) + + The _mcount implementation now has to call __mcount_internal with the + address of .LP0 as first parameter and the return address as second + parameter. &.LP0 was loaded to %r1 and the return address is in %r14. + _mcount may not modify any register. */ + + ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(_mcount) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(_mcount), @function) + .align ALIGNARG(4) +C_LABEL(_mcount) + /* Save the caller-clobbered registers. */ + aghi %r15,-224 + stmg %r14,%r5,160(%r15) + lg %r2,232(%r15) # callers address = first parameter + la %r2,0(%r2) # clear bit 0 + la %r3,0(%r14) # callees address = second parameter + +#ifdef PIC + brasl %r14,__mcount_internal@PLT +#else + brasl %r14,__mcount_internal +#endif + + /* Pop the saved registers. Please note that `mcount' has no + return value. */ + lmg %r14,%r5,160(%r15) + ahi %r15,224 + br %r14 + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) + +#undef mcount +weak_alias(_mcount, mcount) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/setjmp.S glibc-2.2.3/sysdeps/s390/s390-64/setjmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/setjmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/setjmp.S Fri Mar 16 01:14:44 2001 @@ -0,0 +1,43 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _ASM +#define _ASM +#endif + +#include +#include + +/* Save the current program position in ENV and return 0. */ +/* R2 = pointer to jmp_buf, R3 = savemask. */ + +ENTRY(__sigsetjmp) + stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ + std %f1,80(%r2) + std %f3,88(%r2) + std %f5,96(%r2) + std %f7,104(%r2) +#ifdef PIC + jg __sigjmp_save@PLT /* Tail-call __sigjmp_save. */ +#else + jg __sigjmp_save /* Tail-call __sigjmp_save. */ +#endif +END (__sigsetjmp) + + diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/strcmp.S glibc-2.2.3/sysdeps/s390/s390-64/strcmp.S --- glibc-2.2.2/sysdeps/s390/s390-64/strcmp.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/strcmp.S Wed Mar 28 12:54:20 2001 @@ -0,0 +1,41 @@ +/* strcmp - compare two string. 64 bit S/390 version. + This file is part of the GNU C Library. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* INPUT PARAMETERS + %r2 = address of string 1 + %r3 = address of string 2. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(strcmp) + slr %r0,%r0 +0: clst %r2,%r3 + jo 0b + jp 1f + jm 2f + slgr %r2,%r2 + br %r14 +1: lghi %r2,1 + br %r14 +2: lghi %r2,-1 + br %r14 +END(strcmp) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/strcpy.S glibc-2.2.3/sysdeps/s390/s390-64/strcpy.S --- glibc-2.2.2/sysdeps/s390/s390-64/strcpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/strcpy.S Fri Mar 16 01:14:55 2001 @@ -0,0 +1,35 @@ +/* strcpy - copy a string from source to destination. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software ; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* INPUT PARAMETERS + %r2 = address of destination + %r3 = address of source. */ + +#include "sysdep.h" +#include "asm-syntax.h" + + .text +ENTRY(strcpy) + slgr %r0,%r0 + lgr %r1,%r2 +0: mvst %r1,%r3 + jo 0b + br %r14 +END(strcpy) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/strncpy.S glibc-2.2.3/sysdeps/s390/s390-64/strncpy.S --- glibc-2.2.2/sysdeps/s390/s390-64/strncpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/strncpy.S Fri Mar 16 01:15:05 2001 @@ -0,0 +1,90 @@ +/* strncpy - copy at most n characters from a string from source to + destination. 64 bit S/390 version + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* INPUT PARAMETERS + %r2 = address of destination (dst) + %r3 = address of source (src) + %r4 = max of bytes to copy. */ + +#include "sysdep.h" +#include "asm-syntax.h" + +ENTRY(strncpy) + .text + stg %r2,48(%r15) # save dst pointer + slgr %r2,%r3 # %r3 points to src, %r2+%r3 to dst + lghi %r1,7 + ngr %r1,%r4 # last 3 bits of # bytes + srlg %r4,%r4,3 + ltgr %r4,%r4 # less than 8 bytes to copy ? + jz .L1 + bras %r5,.L0 # enter loop & load address of a 0 + .long 0 +.L0: icmh %r0,8,0(%r3) # first byte + jz .L3 + icmh %r0,4,1(%r3) # second byte + jz .L4 + icmh %r0,2,2(%r3) # third byte + jz .L5 + icmh %r0,1,3(%r3) # fourth byte + jz .L6 + icm %r0,8,4(%r3) # fifth byte + jz .L7 + icm %r0,4,5(%r3) # sixth byte + jz .L8 + icm %r0,2,6(%r3) # seventh byte + jz .L9 + icm %r0,1,7(%r3) # eigth byte + jz .L10 + stg %r0,0(%r2,%r3) # store all eight to dest. + la %r3,8(%r3) + brct %r4,.L0 +.L1: ltgr %r1,%r1 + jz .Lexit +.L2: icm %r0,1,0(%r3) + stc %r0,0(%r2,%r3) + la %r3,1(%r3) + jz .L11 + brct %r1,.L2 + j .Lexit +.L3: icmh %r0,4,0(%r5) +.L4: icmh %r0,2,0(%r5) +.L5: icmh %r0,1,0(%r5) +.L6: icm %r0,8,0(%r5) +.L7: icm %r0,4,0(%r5) +.L8: icm %r0,2,0(%r5) +.L9: icm %r0,1,0(%r5) +.L10: stg %r0,0(%r2,%r3) + la %r3,8(%r3) + aghi %r4,-1 + j .L12 +.L11: aghi %r1,-1 +.L12: sllg %r4,%r4,3 + algr %r4,%r1 + algr %r2,%r3 # start of dst area to be zeroed + lgr %r3,%r4 + slgr %r4,%r4 + slgr %r5,%r5 +.L13: mvcle %r2,%r4,0 # pad dst with zeroes + jo .L13 +.Lexit: lg %r2,48(%r15) # return dst pointer + br %r14 +END(strncpy) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/sub_n.S glibc-2.2.3/sysdeps/s390/s390-64/sub_n.S --- glibc-2.2.2/sysdeps/s390/s390-64/sub_n.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/sub_n.S Fri Mar 16 01:11:32 2001 @@ -0,0 +1,60 @@ +/* __mpn_sub_n -- Add two limb vectors of the same length > 0 and store + sum in a third limb vector. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU MP 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. */ + +/* INPUT PARAMETERS + %r2 = res_ptr + %r3 = s1_ptr + %r4 = s2_ptr + %r5 = size. */ + +#include "sysdep.h" +#include "asm-syntax.h" + +ENTRY(__mpn_sub_n) + stg %r6,48(%r15) # save register 6 + sgr %r1,%r1 + lghi %r0,1 # cannot use ahi to add carry, use slr +.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last sub + slg %r6,0(%r1,%r4) + stg %r6,0(%r1,%r2) + la %r1,8(%r1) + brc 4,.L3 +.L1: brct %r5,.L0 + slgr %r2,%r2 # no last carry to return + j .Lexit +.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last sub + slg %r6,0(%r1,%r4) + brc 4,.L4 + slgr %r6,%r0 # no carry yet, add carry from last sub + stg %r6,0(%r1,%r2) + la %r1,8(%r1) + brc 11,.L1 # new carry ? +.L3: brct %r5,.L2 + lgr %r2,%r0 # return last carry + j .Lexit +.L4: slgr %r6,%r0 # already a carry, add carry from last sub + stg %r6,0(%r1,%r2) + la %r1,8(%r1) + brct %r5,.L2 + lgr %r2,%r0 # return last carry +.Lexit: lg %r6,48(%r15) # restore register 6 + br %r14 +END(__mpn_sub_n) diff -durpNa glibc-2.2.2/sysdeps/s390/s390-64/sysdep.h glibc-2.2.3/sysdeps/s390/s390-64/sysdep.h --- glibc-2.2.2/sysdeps/s390/s390-64/sysdep.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/s390/s390-64/sysdep.h Fri Mar 16 01:15:23 2001 @@ -0,0 +1,112 @@ +/* Assembler macros for 64 bit S/390. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +#ifdef __ASSEMBLER__ + +/* Syntactic details of assembler. */ + +#ifdef HAVE_ELF + +/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ +#define ALIGNARG(log2) 1< - -/* - * How profiling works on S/390: - * On the start of each function _mcount is called with the address of a - * data word in %r1 (initialized to 0, used for counting). The compiler - * with the option -p generates code of the form: - * - * STM 6,15,24(15) - * BRAS 13,.LTN0_0 - * .LT0_0: - * .LC12: .long _mcount - * .LC13: .long .LP0 - * .data - * .align 4 - * .LP0: .long 0 - * .text - * # function profiler - * st 14,4(15) - * l 14,.LC12-.LT0_0(13) - * l 1,.LC13-.LT0_0(13) - * basr 14,14 - * l 14,4(15) - * - * The _mcount implementation now has to call __mcount_internal with the - * address of .LP0 as first parameter and the return address as second - * parameter. &.LP0 was loaded to %r1 and the return address is in %r14. - * _mcount may not modify any register. - */ - - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(_mcount) - ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(_mcount), @function) - .align ALIGNARG(4) -C_LABEL(_mcount) - /* Save the caller-clobbered registers. */ - ahi %r15,-128 - stm %r14,%r5,96(%r15) - l %r2,132(%r15) # callers address = first parameter - la %r2,0(%r2) # clear bit 0 - la %r3,0(%r14) # callees address = second parameter - -#ifdef PIC - bras %r14,0f - .long _GLOBAL_OFFSET_TABLE_-. -0: al %r14,0(%r14) - l %r14,__mcount_internal@GOT(%r14) -#else - bras %r14,0f - .long __mcount_internal -0: l %r14,0(%r14) -#endif - basr %r14,%r14 - - /* - * Pop the saved registers. Please note that `mcount' has no - * return value. - */ - lm %r14,%r5,96(%r15) - ahi %r15,128 - br %r14 - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) - -#undef mcount -weak_alias(_mcount, mcount) diff -durpNa glibc-2.2.2/sysdeps/s390/setjmp.S glibc-2.2.3/sysdeps/s390/setjmp.S --- glibc-2.2.2/sysdeps/s390/setjmp.S Wed Nov 22 10:59:56 2000 +++ glibc-2.2.3/sysdeps/s390/setjmp.S Wed Dec 31 16:00:00 1969 @@ -1,49 +0,0 @@ -/* - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 _ASM -#define _ASM -#endif - -#include -#include - -/* Save the current program position in ENV and return 0. */ -/* R2 = pointer to jmp_buf, R3 = savemask */ - -ENTRY(__sigsetjmp) - stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ -#ifdef PIC - /* We cannot use the PLT, because it requires that %r12 be set, but - we can't save and restore our caller's value. Instead, we do an - indirect jump through the GOT. */ - basr %r1,0 -.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ - /* get address of __sigjmp_save from got */ - l %r1,__sigjmp_save@GOT12(0,%r1) - br %r1 -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -#else - basr %r1,0 -.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */ - br %r1 /* tail-call __sigjmp_save */ -.L1: .long __sigjmp_save -#endif -END (__sigsetjmp) diff -durpNa glibc-2.2.2/sysdeps/s390/strcpy.S glibc-2.2.3/sysdeps/s390/strcpy.S --- glibc-2.2.2/sysdeps/s390/strcpy.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/strcpy.S Wed Dec 31 16:00:00 1969 @@ -1,36 +0,0 @@ -/* strcpy - copy a string from source to destination. For IBM S390 - This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address of destination - * R3 = address of source - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(strcpy) - slr %r0,%r0 - lr %r1,%r2 -0: mvst %r1,%r3 - jo 0b - br %r14 -END(strcpy) diff -durpNa glibc-2.2.2/sysdeps/s390/strncpy.S glibc-2.2.3/sysdeps/s390/strncpy.S --- glibc-2.2.2/sysdeps/s390/strncpy.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/strncpy.S Wed Dec 31 16:00:00 1969 @@ -1,79 +0,0 @@ -/* strncpy - copy at most n characters from a string from source to - destination. For IBM S390 - This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* - * R2 = address of destination (dst) - * R3 = address of source (src) - * R4 = max of bytes to copy - */ - -#include "sysdep.h" -#include "asm-syntax.h" - -ENTRY(strncpy) - .text - st %r2,24(%r15) # save dst pointer - slr %r2,%r3 # %r3 points to src, %r2+%r3 to dst - lhi %r1,3 - nr %r1,%r4 # last 2 bits of # bytes - srl %r4,2 - ltr %r4,%r4 # less than 4 bytes to copy ? - jz .L1 - bras %r5,.L0 # enter loop & load address of a 0 - .long 0 -.L0: icm %r0,8,0(%r3) # first byte - jz .L3 - icm %r0,4,1(%r3) # second byte - jz .L4 - icm %r0,2,2(%r3) # third byte - jz .L5 - icm %r0,1,3(%r3) # fourth byte - jz .L6 - st %r0,0(%r2,%r3) # store all four to dest. - la %r3,4(%r3) - brct %r4,.L0 -.L1: ltr %r1,%r1 - jz .Lexit -.L2: icm %r0,1,0(%r3) - stc %r0,0(%r2,%r3) - la %r3,1(%r3) - jz .L7 - brct %r1,.L2 - j .Lexit -.L3: icm %r0,4,0(%r5) -.L4: icm %r0,2,0(%r5) -.L5: icm %r0,1,0(%r5) -.L6: st %r0,0(%r2,%r3) - la %r3,4(%r3) - ahi %r4,-1 - j .L8 -.L7: ahi %r1,-1 -.L8: sll %r4,2 - alr %r4,%r1 - alr %r2,%r3 # start of dst area to be zeroed - lr %r3,%r4 - slr %r4,%r4 - slr %r5,%r5 -.L9: mvcle %r2,%r4,0 # pad dst with zeroes - jo .L9 -.Lexit: l %r2,24(%r15) # return dst pointer - br %r14 -END(strncpy) diff -durpNa glibc-2.2.2/sysdeps/s390/sub_n.S glibc-2.2.3/sysdeps/s390/sub_n.S --- glibc-2.2.2/sysdeps/s390/sub_n.S Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/sub_n.S Wed Dec 31 16:00:00 1969 @@ -1,62 +0,0 @@ -/* i80386 __mpn_sub_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP 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 MP 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 MP 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. */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - s2_ptr %r4 - size %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - -ENTRY(__mpn_sub_n) - st %r6,24(%r15) # save register 6 - sr %r1,%r1 - lhi %r0,1 # cannot use ahi to add carry, use slr -.L0: l %r6,0(%r1,%r3) # .L0 -> no carry from last sub - sl %r6,0(%r1,%r4) - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 4,.L3 -.L1: brct %r5,.L0 - slr %r2,%r2 # no last carry to return - j .Lexit -.L2: l %r6,0(%r1,%r3) # .L2 -> carry from last sub - sl %r6,0(%r1,%r4) - brc 4,.L4 - slr %r6,%r0 # no carry yet, add carry from last sub - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 11,.L1 # new carry ? -.L3: brct %r5,.L2 - lr %r2,%r0 # return last carry - j .Lexit -.L4: slr %r6,%r0 # already a carry, add carry from last sub - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brct %r5,.L2 - lr %r2,%r0 # return last carry -.Lexit: l %r6,24(%r15) # restore register 6 - br %r14 -END(__mpn_sub_n) diff -durpNa glibc-2.2.2/sysdeps/s390/sys/ucontext.h glibc-2.2.3/sysdeps/s390/sys/ucontext.h --- glibc-2.2.2/sysdeps/s390/sys/ucontext.h Wed Aug 2 07:20:42 2000 +++ glibc-2.2.3/sysdeps/s390/sys/ucontext.h Wed Dec 31 16:00:00 1969 @@ -1,95 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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. */ - -/* System V/s390 ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include -#include - -/* Type for general register. */ -typedef int greg_t; - -/* Number of general registers. */ -#define NGREG 16 - -/* Number of each register is the `greg_t gregs[NREG]' array. */ -enum -{ - R_GPR0 = 0, -#define R_GPR0 R_GPR0 - R_GPR1 = 1, -#define R_GPR1 R_GPR1 - R_GPR2 = 2, -#define R_GPR2 R_GPR2 - R_GPR3 = 3, -#define R_GPR3 R_GPR3 - R_GPR4 = 4, -#define R_GPR4 R_GPR4 - R_GPR5 = 5, -#define R_GPR5 R_GPR5 - R_GPR6 = 6, -#define R_GPR6 R_GPR6 - R_GPR7 = 7, -#define R_GPR7 R_GPR7 - R_GPR8 = 8, -#define R_GPR8 R_GPR8 - R_GPR9 = 9, -#define R_GPR9 R_GPR9 - R_GPRA = 10, -#define R_GPRA R_GPRA - R_GPRB = 11, -#define R_GPRB R_GPRB - R_GPRC = 12, -#define R_GPRC R_GPRC - R_GPRD = 13, -#define R_GPRD R_GPRD - R_GPRE = 14, -#define R_GPRE R_GPRE - R_GPRF = 15 -#define R_GPRF R_GPRF -}; - -/* Structure to describe FPU registers. */ -typedef long long fpreg_t; - -/* Context to describe whole processor state. */ -typedef struct -{ - int version; - greg_t gregs[NGREG]; - fpreg_t fpregs[16]; -} mcontext_t; - -#define MCONTEXT_VERSION 1 - -/* Userlevel context. */ -typedef struct ucontext -{ - unsigned long int uc_flags; - struct ucontext *uc_links; - __sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - long int uc_filler[170]; -} ucontext_t; - -#endif /* sys/ucontext.h */ diff -durpNa glibc-2.2.2/sysdeps/s390/sysdep.h glibc-2.2.3/sysdeps/s390/sysdep.h --- glibc-2.2.2/sysdeps/s390/sysdep.h Wed Aug 2 07:26:00 2000 +++ glibc-2.2.3/sysdeps/s390/sysdep.h Wed Dec 31 16:00:00 1969 @@ -1,121 +0,0 @@ -/* Assembler macros for s390. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#ifdef HAVE_ELF - -/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ -#define ALIGNARG(log2) 1<", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/sh/sh4/fpu/libm-test-ulps glibc-2.2.3/sysdeps/sh/sh4/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/sh/sh4/fpu/libm-test-ulps Thu Oct 26 22:57:36 2000 +++ glibc-2.2.3/sysdeps/sh/sh4/fpu/libm-test-ulps Wed Apr 25 14:51:14 2001 @@ -13,6 +13,17 @@ float: 2 idouble: 1 ifloat: 2 +# atan2 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3 +ifloat: 3 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4 +ifloat: 4 + # atanh Test "atanh (0.7) == 0.8673005276940531944": double: 1 @@ -39,87 +50,87 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -174,7 +185,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -521,7 +532,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -538,7 +549,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -757,6 +768,10 @@ double: 1 float: 2 idouble: 1 ifloat: 2 + +Function: "atan2": +float: 4 +ifloat: 4 Function: "atanh": double: 1 diff -durpNa glibc-2.2.2/sysdeps/sh/stackinfo.h glibc-2.2.3/sysdeps/sh/stackinfo.h --- glibc-2.2.2/sysdeps/sh/stackinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sh/stackinfo.h Tue Apr 10 20:00:00 2001 @@ -0,0 +1,28 @@ +/* Copyright (C) 2001 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. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On SH the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +#endif /* stackinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/sh/sys/ucontext.h glibc-2.2.3/sysdeps/sh/sys/ucontext.h --- glibc-2.2.2/sysdeps/sh/sys/ucontext.h Mon Jun 12 13:14:04 2000 +++ glibc-2.2.3/sysdeps/sh/sys/ucontext.h Tue Mar 27 22:27:49 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 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 @@ -27,10 +27,10 @@ typedef int greg_t; /* Number of general registers. */ -#define NGREG 16 +#define NFPREG 16 /* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; +typedef greg_t gregset_t[NFPREG]; /* Number of each register is the `gregset_t' array. */ enum diff -durpNa glibc-2.2.2/sysdeps/sparc/Versions glibc-2.2.3/sysdeps/sparc/Versions --- glibc-2.2.2/sysdeps/sparc/Versions Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/Versions Mon Apr 23 11:59:46 2001 @@ -0,0 +1,6 @@ +ld { + GLIBC_2.2.3 { + # If this symbol is ever available on SPARC it was introduced in 2.2.3. + _dl_cpuclock_offset; + } +} diff -durpNa glibc-2.2.2/sysdeps/sparc/abort-instr.h glibc-2.2.3/sysdeps/sparc/abort-instr.h --- glibc-2.2.2/sysdeps/sparc/abort-instr.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/abort-instr.h Fri Apr 6 15:40:08 2001 @@ -0,0 +1,2 @@ +/* An instruction which should crash any program is an unimp. */ +#define ABORT_INSTRUCTION asm ("unimp 0xf00") diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/dl-machine.h glibc-2.2.3/sysdeps/sparc/sparc32/dl-machine.h --- glibc-2.2.2/sysdeps/sparc/sparc32/dl-machine.h Fri Feb 9 10:04:29 2001 +++ glibc-2.2.3/sysdeps/sparc/sparc32/dl-machine.h Mon Mar 26 20:53:30 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -392,10 +392,10 @@ elf_machine_rela (struct link_map *map, const char *strtab; strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/fpu/libm-test-ulps glibc-2.2.3/sysdeps/sparc/sparc32/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/sparc/sparc32/fpu/libm-test-ulps Thu Oct 26 22:57:36 2000 +++ glibc-2.2.3/sysdeps/sparc/sparc32/fpu/libm-test-ulps Wed Apr 25 14:51:14 2001 @@ -18,6 +18,20 @@ Test "atanh (0.7) == 0.86730052769405319 double: 1 idouble: 1 +# atan2 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3.0000 +ifloat: 3.0000 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3.0000 +ifloat: 3.0000 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4.0000 +ifloat: 4.0000 +Function: "atan2": +float: 4.0000 +ifloat: 4.0000 + # cabs Test "cabs (-0.7 + 12.4 i) == 12.419742348374220601176836866763271": float: 1 @@ -39,87 +53,87 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -174,7 +188,7 @@ float: 1 ifloat: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -521,7 +535,7 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -538,7 +552,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/Dist glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/Dist --- glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/Dist Thu May 6 02:17:06 1999 +++ glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/Dist Mon Apr 9 21:48:54 2001 @@ -1,6 +1,7 @@ -dotmul.S -rem.S -sdiv.S -udiv.S -umul.S -urem.S +dotmul.S +hp-timing.c +rem.S +sdiv.S +udiv.S +umul.S +urem.S diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/Makefile glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/Makefile --- glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/Makefile Mon Jul 26 18:56:31 1999 +++ glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/Makefile Mon Apr 9 20:04:15 2001 @@ -1,5 +1,9 @@ sysdep-CFLAGS += -mcpu=v8 -mtune=ultrasparc -Wa,-Av9a +ifeq ($(subdir),csu) +sysdep_routines += hp-timing +endif + ifeq ($(subst gnulib,string,$(subdir)),string) ASFLAGS-.o += -Wa,-Av9a ASFLAGS-.os += -Wa,-Av9a diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/hp-timing.c glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/hp-timing.c --- glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/hp-timing.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/hp-timing.c Mon Apr 9 17:10:46 2001 @@ -0,0 +1,24 @@ +/* Support for high precision, low overhead timing functions. sparcv9 version. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David S. Miller , 2001. + + 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 + +/* We have to define the variable for the overhead. */ +hp_timing_t __libc_hp_timing_overhead; diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/hp-timing.h glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/hp-timing.h --- glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9/hp-timing.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9/hp-timing.h Mon Apr 9 17:10:14 2001 @@ -0,0 +1,89 @@ +/* High precision, low overhead timing functions. sparcv9 version. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David S. Miller , 2001. + + 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 _HP_TIMING_H +#define _HP_TIMING_H 1 + +#include +#include +#include + +#define HP_TIMING_AVAIL (1) +#define HP_TIMING_INLINE (1) + +typedef unsigned long long int hp_timing_t; + +extern hp_timing_t __libc_hp_timing_overhead; + +#define HP_TIMING_ZERO(Var) (Var) = (0) + +#define HP_TIMING_NOW(Var) \ + __asm__ __volatile__ ("rd %%tick, %L0\n\t" \ + "srlx %L0, 32, %H0" \ + : "=r" (Var)) + +#define HP_TIMING_DIFF_INIT() \ + do { \ + int __cnt = 5; \ + __libc_hp_timing_overhead = ~0ull; \ + do \ + { \ + hp_timing_t __t1, __t2; \ + HP_TIMING_NOW (__t1); \ + HP_TIMING_NOW (__t2); \ + if (__t2 - __t1 < __libc_hp_timing_overhead) \ + __libc_hp_timing_overhead = __t2 - __t1; \ + } \ + while (--__cnt > 0); \ + } while (0) + +#define HP_TIMING_DIFF(Diff, Start, End) (Diff) = ((End) - (Start)) + +#define HP_TIMING_ACCUM(Sum, Diff) \ +do { \ + hp_timing_t __diff = (Diff) - __libc_hp_timing_overhead; \ + __asm__ __volatile__("srl %L0, 0, %%g1\n\t" \ + "sllx %H0, 32, %%g7\n\t" \ + "or %%g1, %%g7, %%g1\n\t" \ + "1: ldx [%1], %%g5\n\t" \ + "add %%g5, %%g1, %%g7\n\t" \ + "casx [%1], %%g5, %%g7\n\t" \ + "cmp %%g5, %%g7\n\t" \ + "bne,pn %%xcc, 1b\n\t" \ + " nop" \ + : /* no outputs */ \ + : "r" (__diff), "r" (&(Sum)) \ + : "memory", "g1", "g5", "g7"); \ +} while(0) + +#define HP_TIMING_ACCUM_NT(Sum, Diff) (Sum) += (Diff) + +#define HP_TIMING_PRINT(Buf, Len, Val) \ + do { \ + char __buf[20]; \ + char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0); \ + int __len = (Len); \ + char *__dest = (Buf); \ + while (__len-- > 0 && __cp < __buf + sizeof (__buf)) \ + *__dest++ = *__cp++; \ + memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles"))); \ + } while (0) + +#endif /* hp-timing.h */ diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9b/Implies glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9b/Implies --- glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9b/Implies Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9b/Implies Fri Apr 6 15:34:09 2001 @@ -0,0 +1 @@ +sparc/sparc32/sparcv9 diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9b/memcpy.S glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9b/memcpy.S --- glibc-2.2.2/sysdeps/sparc/sparc32/sparcv9b/memcpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc32/sparcv9b/memcpy.S Fri Apr 6 15:33:45 2001 @@ -0,0 +1,4 @@ +#define ASI_PNF 0x82 +#define ASI_BLK_P 0xf0 +#define XCC icc +#include diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/Dist glibc-2.2.3/sysdeps/sparc/sparc64/Dist --- glibc-2.2.2/sysdeps/sparc/sparc64/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc64/Dist Mon Apr 9 21:46:29 2001 @@ -0,0 +1 @@ +hp-timing.c diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/Makefile glibc-2.2.3/sysdeps/sparc/sparc64/Makefile --- glibc-2.2.2/sysdeps/sparc/sparc64/Makefile Tue Apr 18 08:42:41 2000 +++ glibc-2.2.3/sysdeps/sparc/sparc64/Makefile Mon Apr 9 20:04:15 2001 @@ -1,2 +1,6 @@ # The Sparc `long double' is a distinct type we support. long-double-fcts = yes + +ifeq ($(subdir),csu) +sysdep_routines += hp-timing +endif diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/dl-machine.h glibc-2.2.3/sysdeps/sparc/sparc64/dl-machine.h --- glibc-2.2.2/sysdeps/sparc/sparc64/dl-machine.h Fri Feb 9 10:04:29 2001 +++ glibc-2.2.3/sysdeps/sparc/sparc64/dl-machine.h Thu Apr 12 16:10:57 2001 @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 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 @@ -49,19 +49,37 @@ elf_machine_dynamic (void) static inline Elf64_Addr elf_machine_load_address (void) { - register Elf64_Addr elf_pic_register __asm__("%l7"); - Elf64_Addr pc, la; + register Elf64_Addr *elf_pic_register __asm__("%l7"); - /* Utilize the fact that a local .got entry will be partially - initialized at startup awaiting its RELATIVE fixup. */ + /* We used to utilize the fact that a local .got entry will + be partially initialized at startup awaiting its RELATIVE + fixup: - __asm("sethi %%hi(.Load_address), %1\n" - ".Load_address:\n\t" - "rd %%pc, %0\n\t" - "or %1, %%lo(.Load_address), %1\n\t" - : "=r"(pc), "=r"(la)); + Elf64_Addr pc, la; - return pc - *(Elf64_Addr *)(elf_pic_register + la); + __asm("sethi %%hi(.Load_address), %1\n" + ".Load_address:\n\t" + "rd %%pc, %0\n\t" + "or %1, %%lo(.Load_address), %1\n\t" + : "=r"(pc), "=r"(la)); + + return pc - *(Elf64_Addr *)(elf_pic_register + la); + + Unfortunately as binutils tries to work around Solaris + dynamic linker bug which resolves R_SPARC_RELATIVE as X += B + A + instead of X = B + A this does not work any longer, since ld + clears it. + + The following method relies on the fact that sparcv9 ABI maximal + page length is 1MB and all ELF segments on sparc64 are aligned + to 1MB. Also, it relies on _DYNAMIC coming after _GLOBAL_OFFSET_TABLE_ + and assumes that they both fit into the first 1MB of the RW segment. + This should be true for some time unless ld.so grows too much, at the + moment the whole stripped ld.so is 128KB and only smaller part of that + is in the RW segment. */ + + return ((Elf64_Addr)elf_pic_register - *elf_pic_register + 0xfffff) + & ~0xfffffUL; } /* We have 4 cases to handle. And we code different code sequences @@ -227,10 +245,10 @@ elf_machine_rela (struct link_map *map, const char *strtab; strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_sysdep_error (_dl_argv[0] ?: "", - ": Symbol `", strtab + refsym->st_name, - "' has different size in shared object, " - "consider re-linking\n", NULL); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + _dl_argv[0] ?: "", + strtab + refsym->st_name); } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/fpu/libm-test-ulps glibc-2.2.3/sysdeps/sparc/sparc64/fpu/libm-test-ulps --- glibc-2.2.2/sysdeps/sparc/sparc64/fpu/libm-test-ulps Thu Oct 26 22:57:36 2000 +++ glibc-2.2.3/sysdeps/sparc/sparc64/fpu/libm-test-ulps Wed Apr 25 14:51:14 2001 @@ -13,11 +13,39 @@ float: 2 idouble: 1 ifloat: 2 +# atan +Test "atan (0.7) == 0.61072596438920861654375887649023613": +ildouble: 1 +ldouble: 1 + # atanh Test "atanh (0.7) == 0.8673005276940531944": double: 1 idouble: 1 +# atan2 +Test "atan2 (0.4, 0.0003) == 1.5700463269355215717704032607580829": +ildouble: 1 +ldouble: 1 +Test "atan2 (0.7, 1) == 0.61072596438920861654375887649023613": +ildouble: 1 +ldouble: 1 +Test "atan2 (-0.7, 1.0) == -0.61072596438920861654375887649023613": +ildouble: 1 +ldouble: 1 +Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267": +float: 3.0000 +ifloat: 3.0000 +Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267": +float: 3.0000 +ifloat: 3.0000 +Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736": +float: 4.0000 +ifloat: 4.0000 +Function: "atan2": +float: 4.0000 +ifloat: 4.0000 + # cabs Test "cabs (-0.7 + 12.4 i) == 12.419742348374220601176836866763271": float: 1 @@ -39,87 +67,107 @@ float: 1 ifloat: 1 # cacos -Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 +ildouble: 3 +ldouble: 3 # cacosh -Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 7 idouble: 1 ifloat: 7 -Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +ildouble: 5 +ldouble: 5 +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i": double: 1 float: 3 idouble: 1 ifloat: 3 -Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i": double: 1 float: 1 idouble: 1 ifloat: 1 # casin -Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": double: 3 float: 2 idouble: 3 ifloat: 2 -Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i": float: 1 ifloat: 1 +ildouble: 3 +ldouble: 3 # casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 idouble: 5 ifloat: 1 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +ildouble: 4 +ldouble: 4 +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 3 float: 6 idouble: 3 ifloat: 6 -Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +ildouble: 2 +ldouble: 2 +Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": double: 1 idouble: 1 -Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 # catan -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 idouble: 1 ifloat: 1 -Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": float: 4 ifloat: 4 -Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 # catanh -Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": float: 4 ifloat: 4 -Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": float: 1 ifloat: 1 -Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i": double: 1 float: 6 idouble: 1 @@ -181,7 +229,7 @@ ildouble: 1 ldouble: 1 # clog -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": double: 1 float: 3 idouble: 1 @@ -304,11 +352,16 @@ ildouble: 0.2252 ldouble: 0.2252 # cpow +Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i": +ildouble: 2 +ldouble: 2 Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": double: 1 float: 4 idouble: 1 ifloat: 4 +ildouble: 3 +ldouble: 3 Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": float: 2 ifloat: 2 @@ -317,6 +370,8 @@ double: 1.1031 float: 1.4668 idouble: 1.1031 ifloat: 1.4668 +ildouble: 0.9006 +ldouble: 0.9006 # csin Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i": @@ -585,11 +640,13 @@ idouble: 1 ifloat: 2 # log -Test "log (0.7) == -0.35667494393873237891": +Test "log (0.7) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 # log10 Test "log10 (0.7) == -0.15490195998574316929": @@ -602,7 +659,7 @@ float: 1 ifloat: 1 # log1p -Test "log1p (-0.3) == -0.35667494393873237891": +Test "log1p (-0.3) == -0.35667494393873237891263871124118447": double: 1 float: 1 idouble: 1 @@ -667,6 +724,9 @@ ildouble: 1 ldouble: 1 # tan +Test "tan (0.7) == 0.84228838046307944812813500221293775": +ildouble: 1 +ldouble: 1 Test "tan (pi/4) == 1": double: 0.5 idouble: 0.5 @@ -841,6 +901,14 @@ float: 2 idouble: 1 ifloat: 2 +Function: "atan": +ildouble: 1 +ldouble: 1 + +Function: "atan2": +ildouble: 1 +ldouble: 1 + Function: "atanh": double: 1 idouble: 1 @@ -860,40 +928,54 @@ ifloat: 1 Function: Imaginary part of "cacos": float: 1 ifloat: 1 +ildouble: 3 +ldouble: 3 Function: Real part of "cacosh": double: 1 float: 7 idouble: 1 ifloat: 7 +ildouble: 5 +ldouble: 5 Function: Imaginary part of "cacosh": double: 1 float: 3 idouble: 1 ifloat: 3 +ildouble: 1 +ldouble: 1 Function: Real part of "casin": double: 3 float: 2 idouble: 3 ifloat: 2 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "casin": float: 1 ifloat: 1 +ildouble: 3 +ldouble: 3 Function: Real part of "casinh": double: 5 float: 1 idouble: 5 ifloat: 1 +ildouble: 4 +ldouble: 4 Function: Imaginary part of "casinh": double: 3 float: 6 idouble: 3 ifloat: 6 +ildouble: 2 +ldouble: 2 Function: Real part of "catan": float: 4 @@ -904,6 +986,8 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Real part of "catanh": double: 4 @@ -988,12 +1072,16 @@ double: 1 float: 4 idouble: 1 ifloat: 4 +ildouble: 3 +ldouble: 3 Function: Imaginary part of "cpow": double: 1.1031 float: 2 idouble: 1.1031 ifloat: 2 +ildouble: 0.9006 +ldouble: 0.9006 Function: Imaginary part of "csin": float: 1 @@ -1110,6 +1198,8 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: "log10": double: 1 @@ -1150,6 +1240,8 @@ ldouble: 1 Function: "tan": double: 0.5 idouble: 0.5 +ildouble: 1 +ldouble: 1 Function: "tanh": double: 1 diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/hp-timing.c glibc-2.2.3/sysdeps/sparc/sparc64/hp-timing.c --- glibc-2.2.2/sysdeps/sparc/sparc64/hp-timing.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc64/hp-timing.c Mon Apr 9 17:11:28 2001 @@ -0,0 +1,24 @@ +/* Support for high precision, low overhead timing functions. sparc64 version. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David S. Miller , 2001. + + 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 + +/* We have to define the variable for the overhead. */ +hp_timing_t __libc_hp_timing_overhead; diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/hp-timing.h glibc-2.2.3/sysdeps/sparc/sparc64/hp-timing.h --- glibc-2.2.2/sysdeps/sparc/sparc64/hp-timing.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc64/hp-timing.h Mon Apr 9 17:11:38 2001 @@ -0,0 +1,84 @@ +/* High precision, low overhead timing functions. sparc64 version. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David S. Miller , 2001. + + 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 _HP_TIMING_H +#define _HP_TIMING_H 1 + +#include +#include +#include + +#define HP_TIMING_AVAIL (1) +#define HP_TIMING_INLINE (1) + +typedef unsigned long int hp_timing_t; + +extern hp_timing_t __libc_hp_timing_overhead; + +#define HP_TIMING_ZERO(Var) (Var) = (0) + +#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rd %%tick, %0" : "=r" (Var)) + +#define HP_TIMING_DIFF_INIT() \ + do { \ + int __cnt = 5; \ + __libc_hp_timing_overhead = ~0ull; \ + do \ + { \ + hp_timing_t __t1, __t2; \ + HP_TIMING_NOW (__t1); \ + HP_TIMING_NOW (__t2); \ + if (__t2 - __t1 < __libc_hp_timing_overhead) \ + __libc_hp_timing_overhead = __t2 - __t1; \ + } \ + while (--__cnt > 0); \ + } while (0) + +#define HP_TIMING_DIFF(Diff, Start, End) (Diff) = ((End) - (Start)) + +#define HP_TIMING_ACCUM(Sum, Diff) \ +do { \ + hp_timing_t __diff = (Diff) - __libc_hp_timing_overhead; \ + hp_timing_t tmp1, tmp2; \ + __asm__ __volatile__("1: ldx [%3], %0\n\t" \ + "add %0, %2, %1\n\t" \ + "casx [%3], %0, %1\n\t" \ + "cmp %0, %1\n\t" \ + "bne,pn %%xcc, 1b\n\t" \ + " nop" \ + : "=&r" (tmp1), "=&r" (tmp2) \ + : "r" (__diff), "r" (&(Sum)) \ + : "memory", "g1", "g5", "g7"); \ +} while(0) + +#define HP_TIMING_ACCUM_NT(Sum, Diff) (Sum) += (Diff) + +#define HP_TIMING_PRINT(Buf, Len, Val) \ + do { \ + char __buf[20]; \ + char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0); \ + int __len = (Len); \ + char *__dest = (Buf); \ + while (__len-- > 0 && __cp < __buf + sizeof (__buf)) \ + *__dest++ = *__cp++; \ + memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles"))); \ + } while (0) + +#endif /* hp-timing.h */ diff -durpNa glibc-2.2.2/sysdeps/sparc/sparc64/sparcv9b/memcpy.S glibc-2.2.3/sysdeps/sparc/sparc64/sparcv9b/memcpy.S --- glibc-2.2.2/sysdeps/sparc/sparc64/sparcv9b/memcpy.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/sparc64/sparcv9b/memcpy.S Fri Apr 6 15:33:26 2001 @@ -0,0 +1,713 @@ +/* Copy SIZE bytes from SRC to DEST. + For UltraSPARC-III. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David S. Miller (davem@redhat.com) + + 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 ASI_BLK_P 0xf0 +#define FPRS_FEF 0x04 +#define VISEntryHalf rd %fprs, %o5; wr %g0, FPRS_FEF, %fprs +#define VISExitHalf and %o5, FPRS_FEF, %o5; wr %o5, 0x0, %fprs +#define SMALL_COPY_USES_FPU + +#ifndef XCC +#define USE_BPR +#define XCC xcc +#endif + + .text + .align 32 + +ENTRY(bcopy) + sub %o1, %o0, %o4 /* IEU0 Group */ + mov %o0, %g3 /* IEU1 */ + cmp %o4, %o2 /* IEU1 Group */ + mov %o1, %o0 /* IEU0 */ + bgeu,pt %XCC, 100f /* CTI */ + mov %g3, %o1 /* IEU0 Group */ +#ifndef USE_BPR + srl %o2, 0, %o2 /* IEU1 */ +#endif + brnz,pn %o2, 220f /* CTI Group */ + add %o0, %o2, %o0 /* IEU0 */ + retl + nop +END(bcopy) + + /* Special/non-trivial issues of this code: + * + * 1) %o5 is preserved from VISEntryHalf to VISExitHalf + * 2) Only low 32 FPU registers are used so that only the + * lower half of the FPU register set is dirtied by this + * code. This is especially important in the kernel. + * 3) This code never prefetches cachelines past the end + * of the source buffer. + * + * The cheetah's flexible spine, oversized liver, enlarged heart, + * slender muscular body, and claws make it the swiftest hunter + * in Africa and the fastest animal on land. Can reach speeds + * of up to 2.4GB per second. + */ + .align 32 +ENTRY(memcpy) + +100: /* %o0=dst, %o1=src, %o2=len */ +#ifndef __KERNEL__ + /* Save away original 'dst' for memcpy return value. */ + mov %o0, %g3 ! A0 Group +#endif + /* Anything to copy at all? */ + cmp %o2, 0 ! A1 + ble,pn %XCC, 102f ! BR + + /* Extremely small copy? */ +218: cmp %o2, 31 ! A0 Group + ble,pn %XCC, 101f ! BR + + /* Large enough to use unrolled prefetch loops? */ + cmp %o2, 0x100 ! A1 + bge,a,pt %XCC, 103f ! BR Group + andcc %o0, 0x3f, %g2 ! A0 + + ba,pt %XCC, 108f ! BR Group + andcc %o0, 0x7, %g2 ! A0 + + .align 32 +101: + /* Copy %o2 bytes from src to dst, one byte at a time. */ + ldub [%o1 + 0x00], %o3 ! MS Group + add %o1, 0x1, %o1 ! A0 + add %o0, 0x1, %o0 ! A1 + subcc %o2, 1, %o2 ! A0 Group + + bg,pt %XCC, 101b ! BR + stb %o3, [%o0 + -1] ! MS Group (1-cycle stall) + +102: +#ifdef __KERNEL__ + retl ! BR Group (0-4 cycle stall) + clr %o0 ! A0 +#else + retl ! BR Group (0-4 cycle stall) + mov %g3, %o0 ! A0 +#endif + + /* Here len >= (6 * 64) and condition codes reflect execution + * of "andcc %o0, 0x7, %g2", done by caller. + */ + .align 64 +103: + /* Is 'dst' already aligned on an 64-byte boundary? */ + be,pt %XCC, 2f ! BR + + /* Compute abs((dst & 0x3f) - 0x40) into %g2. This is the number + * of bytes to copy to make 'dst' 64-byte aligned. We pre- + * subtract this from 'len'. + */ + sub %g2, 0x40, %g2 ! A0 Group + sub %g0, %g2, %g2 ! A0 Group + sub %o2, %g2, %o2 ! A0 Group + + /* Copy %g2 bytes from src to dst, one byte at a time. */ +1: ldub [%o1 + 0x00], %o3 ! MS (Group) + add %o1, 0x1, %o1 ! A1 + add %o0, 0x1, %o0 ! A0 Group + subcc %g2, 0x1, %g2 ! A1 + + bg,pt %XCC, 1b ! BR Group + stb %o3, [%o0 + -1] ! MS Group + +2: VISEntryHalf ! MS+MS + and %o1, 0x7, %g1 ! A1 + ba,pt %XCC, 104f ! BR + alignaddr %o1, %g0, %o1 ! MS (Break-after) + + .align 64 +104: + prefetch [%o1 + 0x000], #one_read ! MS Group1 + prefetch [%o1 + 0x040], #one_read ! MS Group2 + andn %o2, (0x40 - 1), %o4 ! A0 + prefetch [%o1 + 0x080], #one_read ! MS Group3 + cmp %o4, 0x140 ! A0 + prefetch [%o1 + 0x0c0], #one_read ! MS Group4 + ldd [%o1 + 0x000], %f0 ! MS Group5 (%f0 results at G8) + bge,a,pt %XCC, 1f ! BR + + prefetch [%o1 + 0x100], #one_read ! MS Group6 +1: ldd [%o1 + 0x008], %f2 ! AX (%f2 results at G9) + cmp %o4, 0x180 ! A1 + bge,a,pt %XCC, 1f ! BR + prefetch [%o1 + 0x140], #one_read ! MS Group7 +1: ldd [%o1 + 0x010], %f4 ! AX (%f4 results at G10) + cmp %o4, 0x1c0 ! A1 + bge,a,pt %XCC, 1f ! BR + + prefetch [%o1 + 0x180], #one_read ! MS Group8 +1: faligndata %f0, %f2, %f16 ! FGA Group9 (%f16 at G12) + ldd [%o1 + 0x018], %f6 ! AX (%f6 results at G12) + faligndata %f2, %f4, %f18 ! FGA Group10 (%f18 results at G13) + ldd [%o1 + 0x020], %f8 ! MS (%f8 results at G13) + faligndata %f4, %f6, %f20 ! FGA Group12 (1-cycle stall,%f20 at G15) + ldd [%o1 + 0x028], %f10 ! MS (%f10 results at G15) + faligndata %f6, %f8, %f22 ! FGA Group13 (%f22 results at G16) + + ldd [%o1 + 0x030], %f12 ! MS (%f12 results at G16) + faligndata %f8, %f10, %f24 ! FGA Group15 (1-cycle stall,%f24 at G18) + ldd [%o1 + 0x038], %f14 ! MS (%f14 results at G18) + faligndata %f10, %f12, %f26 ! FGA Group16 (%f26 results at G19) + ldd [%o1 + 0x040], %f0 ! MS (%f0 results at G19) + + /* We only use the first loop if len > (7 * 64). */ + subcc %o4, 0x1c0, %o4 ! A0 Group17 + bg,pt %XCC, 105f ! BR + add %o1, 0x40, %o1 ! A1 + + add %o4, 0x140, %o4 ! A0 Group18 + ba,pt %XCC, 106f ! BR + srl %o4, 6, %o3 ! A0 Group19 + nop + nop + nop + nop + nop + + nop + nop + + /* This loop performs the copy and queues new prefetches. + * We drop into the second loop when len <= (5 * 64). Note + * that this (5 * 64) factor has been subtracted from len + * already. + */ +105: + ldd [%o1 + 0x008], %f2 ! MS Group2 (%f2 results at G5) + faligndata %f12, %f14, %f28 ! FGA (%f28 results at G5) + ldd [%o1 + 0x010], %f4 ! MS Group3 (%f4 results at G6) + faligndata %f14, %f0, %f30 ! FGA Group4 (1-cycle stall, %f30 at G7) + stda %f16, [%o0] ASI_BLK_P ! MS + ldd [%o1 + 0x018], %f6 ! AX (%f6 results at G7) + + faligndata %f0, %f2, %f16 ! FGA Group12 (7-cycle stall) + ldd [%o1 + 0x020], %f8 ! MS (%f8 results at G15) + faligndata %f2, %f4, %f18 ! FGA Group13 (%f18 results at G16) + ldd [%o1 + 0x028], %f10 ! MS (%f10 results at G16) + faligndata %f4, %f6, %f20 ! FGA Group14 (%f20 results at G17) + ldd [%o1 + 0x030], %f12 ! MS (%f12 results at G17) + faligndata %f6, %f8, %f22 ! FGA Group15 (%f22 results at G18) + ldd [%o1 + 0x038], %f14 ! MS (%f14 results at G18) + + faligndata %f8, %f10, %f24 ! FGA Group16 (%f24 results at G19) + ldd [%o1 + 0x040], %f0 ! AX (%f0 results at G19) + prefetch [%o1 + 0x180], #one_read ! MS + faligndata %f10, %f12, %f26 ! FGA Group17 (%f26 results at G20) + subcc %o4, 0x40, %o4 ! A0 + add %o1, 0x40, %o1 ! A1 + bg,pt %XCC, 105b ! BR + add %o0, 0x40, %o0 ! A0 Group18 + + mov 5, %o3 ! A1 + + /* This loop performs on the copy, no new prefetches are + * queued. We do things this way so that we do not perform + * any spurious prefetches past the end of the src buffer. + */ +106: + ldd [%o1 + 0x008], %f2 ! MS + faligndata %f12, %f14, %f28 ! FGA Group2 + ldd [%o1 + 0x010], %f4 ! MS + faligndata %f14, %f0, %f30 ! FGA Group4 (1-cycle stall) + stda %f16, [%o0] ASI_BLK_P ! MS + ldd [%o1 + 0x018], %f6 ! AX + faligndata %f0, %f2, %f16 ! FGA Group12 (7-cycle stall) + + ldd [%o1 + 0x020], %f8 ! MS + faligndata %f2, %f4, %f18 ! FGA Group13 + ldd [%o1 + 0x028], %f10 ! MS + faligndata %f4, %f6, %f20 ! FGA Group14 + ldd [%o1 + 0x030], %f12 ! MS + faligndata %f6, %f8, %f22 ! FGA Group15 + ldd [%o1 + 0x038], %f14 ! MS + faligndata %f8, %f10, %f24 ! FGA Group16 + + ldd [%o1 + 0x040], %f0 ! AX + faligndata %f10, %f12, %f26 ! FGA Group17 + subcc %o3, 0x01, %o3 ! A0 + add %o1, 0x40, %o1 ! A1 + bg,pt %XCC, 106b ! BR + add %o0, 0x40, %o0 ! A0 Group18 + + /* Finally we copy the last full 64-byte block. */ + ldd [%o1 + 0x008], %f2 ! MS + faligndata %f12, %f14, %f28 ! FGA + ldd [%o1 + 0x010], %f4 ! MS Group19 + faligndata %f14, %f0, %f30 ! FGA + stda %f16, [%o0] ASI_BLK_P ! MS Group20 + ldd [%o1 + 0x018], %f6 ! AX + faligndata %f0, %f2, %f16 ! FGA Group11 (7-cycle stall) + ldd [%o1 + 0x020], %f8 ! MS + faligndata %f2, %f4, %f18 ! FGA Group12 + ldd [%o1 + 0x028], %f10 ! MS + faligndata %f4, %f6, %f20 ! FGA Group13 + ldd [%o1 + 0x030], %f12 ! MS + faligndata %f6, %f8, %f22 ! FGA Group14 + ldd [%o1 + 0x038], %f14 ! MS + faligndata %f8, %f10, %f24 ! FGA Group15 + cmp %g1, 0 ! A0 + be,pt %XCC, 1f ! BR + add %o0, 0x40, %o0 ! A1 + ldd [%o1 + 0x040], %f0 ! MS +1: faligndata %f10, %f12, %f26 ! FGA Group16 + faligndata %f12, %f14, %f28 ! FGA Group17 + faligndata %f14, %f0, %f30 ! FGA Group18 + stda %f16, [%o0] ASI_BLK_P ! MS + add %o0, 0x40, %o0 ! A0 + add %o1, 0x40, %o1 ! A1 + membar #Sync ! MS Group26 (7-cycle stall) + + /* Now we copy the (len modulo 64) bytes at the end. + * Note how we borrow the %f0 loaded above. + * + * Also notice how this code is careful not to perform a + * load past the end of the src buffer just like similar + * code found in 'toosmall' processing. + */ + and %o2, 0x3f, %o2 ! A0 Group + andcc %o2, 0x38, %g2 ! A0 Group + be,pn %XCC, 107f ! BR + subcc %g2, 0x8, %g2 ! A1 + be,pn %XCC, 107f ! BR Group + cmp %g1, 0 ! A0 + + be,a,pt %XCC, 1f ! BR Group + ldd [%o1 + 0x00], %f0 ! MS + +1: ldd [%o1 + 0x08], %f2 ! MS Group + add %o1, 0x8, %o1 ! A0 + sub %o2, 0x8, %o2 ! A1 + subcc %g2, 0x8, %g2 ! A0 Group + faligndata %f0, %f2, %f8 ! FGA Group + std %f8, [%o0 + 0x00] ! MS (XXX does it stall here? XXX) + be,pn %XCC, 107f ! BR + add %o0, 0x8, %o0 ! A0 + ldd [%o1 + 0x08], %f0 ! MS Group + add %o1, 0x8, %o1 ! A0 + sub %o2, 0x8, %o2 ! A1 + subcc %g2, 0x8, %g2 ! A0 Group + faligndata %f2, %f0, %f8 ! FGA + std %f8, [%o0 + 0x00] ! MS (XXX does it stall here? XXX) + bne,pn %XCC, 1b ! BR + add %o0, 0x8, %o0 ! A0 Group + + /* If anything is left, we copy it one byte at a time. + * Note that %g1 is (src & 0x3) saved above before the + * alignaddr was performed. + */ +107: + cmp %o2, 0 + add %o1, %g1, %o1 + VISExitHalf + be,pn %XCC, 102b + nop + ba,a,pt %XCC, 101b + + /* If we get here, then 32 <= len < (6 * 64) */ +108: + +#ifdef SMALL_COPY_USES_FPU + + /* Is 'dst' already aligned on an 8-byte boundary? */ + be,pt %XCC, 2f ! BR Group + + /* Compute abs((dst & 7) - 8) into %g2. This is the number + * of bytes to copy to make 'dst' 8-byte aligned. We pre- + * subtract this from 'len'. + */ + sub %g2, 0x8, %g2 ! A0 + sub %g0, %g2, %g2 ! A0 Group (reg-dep) + sub %o2, %g2, %o2 ! A0 Group (reg-dep) + + /* Copy %g2 bytes from src to dst, one byte at a time. */ +1: ldub [%o1 + 0x00], %o3 ! MS (Group) (%o3 in 3 cycles) + add %o1, 0x1, %o1 ! A1 + add %o0, 0x1, %o0 ! A0 Group + subcc %g2, 0x1, %g2 ! A1 + + bg,pt %XCC, 1b ! BR Group + stb %o3, [%o0 + -1] ! MS Group + +2: VISEntryHalf ! MS+MS + + /* Compute (len - (len % 8)) into %g2. This is guarenteed + * to be nonzero. + */ + andn %o2, 0x7, %g2 ! A0 Group + + /* You may read this and believe that it allows reading + * one 8-byte longword past the end of src. It actually + * does not, as %g2 is subtracted as loads are done from + * src, so we always stop before running off the end. + * Also, we are guarenteed to have at least 0x10 bytes + * to move here. + */ + sub %g2, 0x8, %g2 ! A0 Group (reg-dep) + alignaddr %o1, %g0, %g1 ! MS (Break-after) + ldd [%g1 + 0x00], %f0 ! MS Group (1-cycle stall) + add %g1, 0x8, %g1 ! A0 + +1: ldd [%g1 + 0x00], %f2 ! MS Group + add %g1, 0x8, %g1 ! A0 + sub %o2, 0x8, %o2 ! A1 + subcc %g2, 0x8, %g2 ! A0 Group + + faligndata %f0, %f2, %f8 ! FGA Group (1-cycle stall) + std %f8, [%o0 + 0x00] ! MS Group (2-cycle stall) + add %o1, 0x8, %o1 ! A0 + be,pn %XCC, 2f ! BR + + add %o0, 0x8, %o0 ! A1 + ldd [%g1 + 0x00], %f0 ! MS Group + add %g1, 0x8, %g1 ! A0 + sub %o2, 0x8, %o2 ! A1 + + subcc %g2, 0x8, %g2 ! A0 Group + faligndata %f2, %f0, %f8 ! FGA Group (1-cycle stall) + std %f8, [%o0 + 0x00] ! MS Group (2-cycle stall) + add %o1, 0x8, %o1 ! A0 + + bne,pn %XCC, 1b ! BR + add %o0, 0x8, %o0 ! A1 + + /* Nothing left to copy? */ +2: cmp %o2, 0 ! A0 Group + VISExitHalf ! A0+MS + be,pn %XCC, 102b ! BR Group + nop ! A0 + ba,a,pt %XCC, 101b ! BR Group + +#else /* !(SMALL_COPY_USES_FPU) */ + + xor %o1, %o0, %g2 + andcc %g2, 0x7, %g0 + bne,pn %XCC, 101b + andcc %o1, 0x7, %g2 + + be,pt %XCC, 2f + sub %g2, 0x8, %g2 + sub %g0, %g2, %g2 + sub %o2, %g2, %o2 + +1: ldub [%o1 + 0x00], %o3 + add %o1, 0x1, %o1 + add %o0, 0x1, %o0 + subcc %g2, 0x1, %g2 + bg,pt %XCC, 1b + stb %o3, [%o0 + -1] + +2: andn %o2, 0x7, %g2 + sub %o2, %g2, %o2 + +3: ldx [%o1 + 0x00], %o3 + add %o1, 0x8, %o1 + add %o0, 0x8, %o0 + subcc %g2, 0x8, %g2 + bg,pt %XCC, 3b + stx %o3, [%o0 + -8] + + cmp %o2, 0 + bne,pn %XCC, 101b + nop + ba,a,pt %XCC, 102b + +#endif /* !(SMALL_COPY_USES_FPU) */ +END(memcpy) + +#define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3) \ + ldx [%src - offset - 0x20], %t0; \ + ldx [%src - offset - 0x18], %t1; \ + ldx [%src - offset - 0x10], %t2; \ + ldx [%src - offset - 0x08], %t3; \ + stw %t0, [%dst - offset - 0x1c]; \ + srlx %t0, 32, %t0; \ + stw %t0, [%dst - offset - 0x20]; \ + stw %t1, [%dst - offset - 0x14]; \ + srlx %t1, 32, %t1; \ + stw %t1, [%dst - offset - 0x18]; \ + stw %t2, [%dst - offset - 0x0c]; \ + srlx %t2, 32, %t2; \ + stw %t2, [%dst - offset - 0x10]; \ + stw %t3, [%dst - offset - 0x04]; \ + srlx %t3, 32, %t3; \ + stw %t3, [%dst - offset - 0x08]; + +#define RMOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ + ldx [%src - offset - 0x20], %t0; \ + ldx [%src - offset - 0x18], %t1; \ + ldx [%src - offset - 0x10], %t2; \ + ldx [%src - offset - 0x08], %t3; \ + stx %t0, [%dst - offset - 0x20]; \ + stx %t1, [%dst - offset - 0x18]; \ + stx %t2, [%dst - offset - 0x10]; \ + stx %t3, [%dst - offset - 0x08]; \ + ldx [%src - offset - 0x40], %t0; \ + ldx [%src - offset - 0x38], %t1; \ + ldx [%src - offset - 0x30], %t2; \ + ldx [%src - offset - 0x28], %t3; \ + stx %t0, [%dst - offset - 0x40]; \ + stx %t1, [%dst - offset - 0x38]; \ + stx %t2, [%dst - offset - 0x30]; \ + stx %t3, [%dst - offset - 0x28]; + +#define RMOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ + ldx [%src + offset + 0x00], %t0; \ + ldx [%src + offset + 0x08], %t1; \ + stw %t0, [%dst + offset + 0x04]; \ + srlx %t0, 32, %t2; \ + stw %t2, [%dst + offset + 0x00]; \ + stw %t1, [%dst + offset + 0x0c]; \ + srlx %t1, 32, %t3; \ + stw %t3, [%dst + offset + 0x08]; + +#define RMOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1) \ + ldx [%src + offset + 0x00], %t0; \ + ldx [%src + offset + 0x08], %t1; \ + stx %t0, [%dst + offset + 0x00]; \ + stx %t1, [%dst + offset + 0x08]; + + .align 32 +228: andcc %o2, 1, %g0 /* IEU1 Group */ + be,pt %icc, 2f+4 /* CTI */ +1: ldub [%o1 - 1], %o5 /* LOAD Group */ + sub %o1, 1, %o1 /* IEU0 */ + sub %o0, 1, %o0 /* IEU1 */ + subcc %o2, 1, %o2 /* IEU1 Group */ + be,pn %xcc, 229f /* CTI */ + stb %o5, [%o0] /* Store */ +2: ldub [%o1 - 1], %o5 /* LOAD Group */ + sub %o0, 2, %o0 /* IEU0 */ + ldub [%o1 - 2], %g5 /* LOAD Group */ + sub %o1, 2, %o1 /* IEU0 */ + subcc %o2, 2, %o2 /* IEU1 Group */ + stb %o5, [%o0 + 1] /* Store */ + bne,pt %xcc, 2b /* CTI */ + stb %g5, [%o0] /* Store */ +229: retl + mov %g4, %o0 + + .align 32 +ENTRY(memmove) + mov %o0, %g3 +#ifndef USE_BPR + srl %o2, 0, %o2 /* IEU1 Group */ +#endif + brz,pn %o2, 102b /* CTI Group */ + sub %o0, %o1, %o4 /* IEU0 */ + cmp %o4, %o2 /* IEU1 Group */ + bgeu,pt %XCC, 218b /* CTI */ + mov %o0, %g4 /* IEU0 */ + add %o0, %o2, %o0 /* IEU0 Group */ +220: add %o1, %o2, %o1 /* IEU1 */ + cmp %o2, 15 /* IEU1 Group */ + bleu,pn %xcc, 228b /* CTI */ + andcc %o0, 7, %g2 /* IEU1 Group */ + sub %o0, %o1, %g5 /* IEU0 */ + andcc %g5, 3, %o5 /* IEU1 Group */ + bne,pn %xcc, 232f /* CTI */ + andcc %o1, 3, %g0 /* IEU1 Group */ + be,a,pt %xcc, 236f /* CTI */ + andcc %o1, 4, %g0 /* IEU1 Group */ + andcc %o1, 1, %g0 /* IEU1 Group */ + be,pn %xcc, 4f /* CTI */ + andcc %o1, 2, %g0 /* IEU1 Group */ + ldub [%o1 - 1], %g2 /* Load Group */ + sub %o1, 1, %o1 /* IEU0 */ + sub %o0, 1, %o0 /* IEU1 */ + sub %o2, 1, %o2 /* IEU0 Group */ + be,pn %xcc, 5f /* CTI Group */ + stb %g2, [%o0] /* Store */ +4: lduh [%o1 - 2], %g2 /* Load Group */ + sub %o1, 2, %o1 /* IEU0 */ + sub %o0, 2, %o0 /* IEU1 */ + sub %o2, 2, %o2 /* IEU0 */ + sth %g2, [%o0] /* Store Group + bubble */ +5: andcc %o1, 4, %g0 /* IEU1 */ +236: be,a,pn %xcc, 2f /* CTI */ + andcc %o2, -128, %g7 /* IEU1 Group */ + lduw [%o1 - 4], %g5 /* Load Group */ + sub %o1, 4, %o1 /* IEU0 */ + sub %o0, 4, %o0 /* IEU1 */ + sub %o2, 4, %o2 /* IEU0 Group */ + stw %g5, [%o0] /* Store */ + andcc %o2, -128, %g7 /* IEU1 Group */ +2: be,pn %xcc, 235f /* CTI */ + andcc %o0, 4, %g0 /* IEU1 Group */ + be,pn %xcc, 282f + 4 /* CTI Group */ +5: RMOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5) + RMOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5) + RMOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5) + RMOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5) + subcc %g7, 128, %g7 /* IEU1 Group */ + sub %o1, 128, %o1 /* IEU0 */ + bne,pt %xcc, 5b /* CTI */ + sub %o0, 128, %o0 /* IEU0 Group */ +235: andcc %o2, 0x70, %g7 /* IEU1 Group */ +41: be,pn %xcc, 280f /* CTI */ + andcc %o2, 8, %g0 /* IEU1 Group */ + /* Clk1 8-( */ + /* Clk2 8-( */ + /* Clk3 8-( */ + /* Clk4 8-( */ +279: rd %pc, %o5 /* PDU Group */ + sll %g7, 1, %g5 /* IEU0 Group */ + sub %o1, %g7, %o1 /* IEU1 */ + sub %o5, %g5, %o5 /* IEU0 Group */ + jmpl %o5 + %lo(280f - 279b), %g0 /* CTI Group brk forced*/ + sub %o0, %g7, %o0 /* IEU0 Group */ + RMOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5) + RMOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5) + RMOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5) + RMOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5) + RMOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5) + RMOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5) + RMOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5) +280: be,pt %xcc, 281f /* CTI */ + andcc %o2, 4, %g0 /* IEU1 */ + ldx [%o1 - 8], %g2 /* Load Group */ + sub %o0, 8, %o0 /* IEU0 */ + stw %g2, [%o0 + 4] /* Store Group */ + sub %o1, 8, %o1 /* IEU1 */ + srlx %g2, 32, %g2 /* IEU0 Group */ + stw %g2, [%o0] /* Store */ +281: be,pt %xcc, 1f /* CTI */ + andcc %o2, 2, %g0 /* IEU1 Group */ + lduw [%o1 - 4], %g2 /* Load Group */ + sub %o1, 4, %o1 /* IEU0 */ + stw %g2, [%o0 - 4] /* Store Group */ + sub %o0, 4, %o0 /* IEU0 */ +1: be,pt %xcc, 1f /* CTI */ + andcc %o2, 1, %g0 /* IEU1 Group */ + lduh [%o1 - 2], %g2 /* Load Group */ + sub %o1, 2, %o1 /* IEU0 */ + sth %g2, [%o0 - 2] /* Store Group */ + sub %o0, 2, %o0 /* IEU0 */ +1: be,pt %xcc, 211f /* CTI */ + nop /* IEU1 */ + ldub [%o1 - 1], %g2 /* Load Group */ + stb %g2, [%o0 - 1] /* Store Group + bubble */ +211: retl + mov %g4, %o0 + +282: RMOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5) + RMOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5) + subcc %g7, 128, %g7 /* IEU1 Group */ + sub %o1, 128, %o1 /* IEU0 */ + bne,pt %xcc, 282b /* CTI */ + sub %o0, 128, %o0 /* IEU0 Group */ + andcc %o2, 0x70, %g7 /* IEU1 */ + be,pn %xcc, 284f /* CTI */ + andcc %o2, 8, %g0 /* IEU1 Group */ + /* Clk1 8-( */ + /* Clk2 8-( */ + /* Clk3 8-( */ + /* Clk4 8-( */ +283: rd %pc, %o5 /* PDU Group */ + sub %o1, %g7, %o1 /* IEU0 Group */ + sub %o5, %g7, %o5 /* IEU1 */ + jmpl %o5 + %lo(284f - 283b), %g0 /* CTI Group brk forced*/ + sub %o0, %g7, %o0 /* IEU0 Group */ + RMOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3) + RMOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3) + RMOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3) + RMOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3) + RMOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3) + RMOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3) + RMOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3) +284: be,pt %xcc, 285f /* CTI Group */ + andcc %o2, 4, %g0 /* IEU1 */ + ldx [%o1 - 8], %g2 /* Load Group */ + sub %o0, 8, %o0 /* IEU0 */ + sub %o1, 8, %o1 /* IEU0 Group */ + stx %g2, [%o0] /* Store */ +285: be,pt %xcc, 1f /* CTI */ + andcc %o2, 2, %g0 /* IEU1 Group */ + lduw [%o1 - 4], %g2 /* Load Group */ + sub %o0, 4, %o0 /* IEU0 */ + sub %o1, 4, %o1 /* IEU0 Group */ + stw %g2, [%o0] /* Store */ +1: be,pt %xcc, 1f /* CTI */ + andcc %o2, 1, %g0 /* IEU1 Group */ + lduh [%o1 - 2], %g2 /* Load Group */ + sub %o0, 2, %o0 /* IEU0 */ + sub %o1, 2, %o1 /* IEU0 Group */ + sth %g2, [%o0] /* Store */ +1: be,pt %xcc, 1f /* CTI */ + nop /* IEU0 Group */ + ldub [%o1 - 1], %g2 /* Load Group */ + stb %g2, [%o0 - 1] /* Store Group + bubble */ +1: retl + mov %g4, %o0 + +232: brz,pt %g2, 2f /* CTI Group */ + sub %o2, %g2, %o2 /* IEU0 Group */ +1: ldub [%o1 - 1], %g5 /* Load Group */ + sub %o1, 1, %o1 /* IEU0 */ + sub %o0, 1, %o0 /* IEU1 */ + subcc %g2, 1, %g2 /* IEU1 Group */ + bne,pt %xcc, 1b /* CTI */ + stb %g5, [%o0] /* Store */ +2: andn %o2, 7, %g5 /* IEU0 Group */ + and %o2, 7, %o2 /* IEU1 */ + fmovd %f0, %f2 /* FPU */ + alignaddr %o1, %g0, %g1 /* GRU Group */ + ldd [%g1], %f4 /* Load Group */ +1: ldd [%g1 - 8], %f6 /* Load Group */ + sub %g1, 8, %g1 /* IEU0 Group */ + subcc %g5, 8, %g5 /* IEU1 */ + faligndata %f6, %f4, %f0 /* GRU Group */ + std %f0, [%o0 - 8] /* Store */ + sub %o1, 8, %o1 /* IEU0 Group */ + be,pn %xcc, 233f /* CTI */ + sub %o0, 8, %o0 /* IEU1 */ + ldd [%g1 - 8], %f4 /* Load Group */ + sub %g1, 8, %g1 /* IEU0 */ + subcc %g5, 8, %g5 /* IEU1 */ + faligndata %f4, %f6, %f0 /* GRU Group */ + std %f0, [%o0 - 8] /* Store */ + sub %o1, 8, %o1 /* IEU0 */ + bne,pn %xcc, 1b /* CTI Group */ + sub %o0, 8, %o0 /* IEU0 */ +233: brz,pn %o2, 234f /* CTI Group */ + nop /* IEU0 */ +237: ldub [%o1 - 1], %g5 /* LOAD */ + sub %o1, 1, %o1 /* IEU0 */ + sub %o0, 1, %o0 /* IEU1 */ + subcc %o2, 1, %o2 /* IEU1 */ + bne,pt %xcc, 237b /* CTI */ + stb %g5, [%o0] /* Store Group */ +234: wr %g0, FPRS_FEF, %fprs + retl + mov %g4, %o0 +END(memmove) + +#ifdef USE_BPR +weak_alias(memcpy, __align_cpy_1) +weak_alias(memcpy, __align_cpy_2) +weak_alias(memcpy, __align_cpy_4) +weak_alias(memcpy, __align_cpy_8) +weak_alias(memcpy, __align_cpy_16) +#endif diff -durpNa glibc-2.2.2/sysdeps/sparc/stackinfo.h glibc-2.2.3/sysdeps/sparc/stackinfo.h --- glibc-2.2.2/sysdeps/sparc/stackinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/sparc/stackinfo.h Wed Mar 21 10:50:06 2001 @@ -0,0 +1,28 @@ +/* Copyright (C) 2001 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. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On sparc the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +#endif /* stackinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/bsd/getpt.c glibc-2.2.3/sysdeps/unix/bsd/getpt.c --- glibc-2.2.2/sysdeps/unix/bsd/getpt.c Wed Jan 10 15:54:58 2001 +++ glibc-2.2.3/sysdeps/unix/bsd/getpt.c Sat Apr 7 14:02:39 2001 @@ -81,8 +81,7 @@ weak_alias (__getpt, getpt) #ifndef HAVE_POSIX_OPENPT /* We cannot define posix_openpt in general for BSD systems. */ int -__posix_openpt (oflag) - int oflag; +__posix_openpt (int oflag) { __set_errno (ENOSYS); return -1; diff -durpNa glibc-2.2.2/sysdeps/unix/clock_gettime.c glibc-2.2.3/sysdeps/unix/clock_gettime.c --- glibc-2.2.2/sysdeps/unix/clock_gettime.c Fri Feb 9 10:04:30 2001 +++ glibc-2.2.3/sysdeps/unix/clock_gettime.c Wed Apr 25 14:51:14 2001 @@ -17,14 +17,30 @@ Boston, MA 02111-1307, USA. */ #include +#include #include #include +#include +#include -#ifndef EXTRA_CLOCK_CASES -# define EXTRA_CLOCK_CASES +#if HP_TIMING_AVAIL +/* Clock frequency of the processor. We make it a 64-bit variable + because some jokers are already playing with processors with more + than 4GHz. */ +static hp_timing_t freq; + + +/* We need the starting time for the process. */ +extern hp_timing_t _dl_cpuclock_offset; + + +/* This function is defined in the thread library. */ +extern int __pthread_clock_gettime (hp_timing_t freq, struct timespec *tp) + __attribute__ ((__weak__)); #endif + /* Get current value of CLOCK and store it in TP. */ int clock_gettime (clockid_t clock_id, struct timespec *tp) @@ -41,7 +57,48 @@ clock_gettime (clockid_t clock_id, struc TIMEVAL_TO_TIMESPEC (&tv, tp); break; - EXTRA_CLOCK_CASES +#if HP_TIMING_AVAIL + case CLOCK_PROCESS_CPUTIME_ID: + case CLOCK_THREAD_CPUTIME_ID: + { + hp_timing_t tsc; + + if (__builtin_expect (freq == 0, 0)) + { + /* This can only happen if we haven't initialized the `freq' + variable yet. Do this now. We don't have to protect this + code against multiple execution since all of them should + lead to the same result. */ + freq = __get_clockfreq (); + if (__builtin_expect (freq == 0, 0)) + /* Something went wrong. */ + break; + } + + if (clock_id == CLOCK_THREAD_CPUTIME_ID + && __pthread_clock_gettime != NULL) + { + retval = __pthread_clock_gettime (freq, tp); + break; + } + + /* Get the current counter. */ + HP_TIMING_NOW (tsc); + + /* Compute the offset since the start time of the process. */ + tsc -= _dl_cpuclock_offset; + + /* Compute the seconds. */ + tp->tv_sec = tsc / freq; + + /* And the nanoseconds. This computation should be stable until + we get machines with about 16GHz frequency. */ + tp->tv_nsec = ((tsc % freq) * UINT64_C (1000000000)) / freq; + + retval = 0; + } + break; +#endif default: __set_errno (EINVAL); diff -durpNa glibc-2.2.2/sysdeps/unix/clock_nanosleep.c glibc-2.2.3/sysdeps/unix/clock_nanosleep.c --- glibc-2.2.2/sysdeps/unix/clock_nanosleep.c Fri Feb 9 10:04:30 2001 +++ glibc-2.2.3/sysdeps/unix/clock_nanosleep.c Wed Apr 25 14:51:14 2001 @@ -20,9 +20,14 @@ #include #include #include +#include -#ifndef CLOCK_P +#if HP_TIMING_AVAIL +# define CLOCK_P(clock) \ + (clock) != CLOCK_PROCESS_CPUTIME_ID \ + && (clock) != CLOCK_THREAD_CPUTIME_ID +#else # define CLOCK_P(clock) 0 #endif diff -durpNa glibc-2.2.2/sysdeps/unix/clock_settime.c glibc-2.2.3/sysdeps/unix/clock_settime.c --- glibc-2.2.2/sysdeps/unix/clock_settime.c Fri Feb 9 10:04:30 2001 +++ glibc-2.2.3/sysdeps/unix/clock_settime.c Wed Apr 25 14:51:14 2001 @@ -19,12 +19,26 @@ #include #include #include +#include -#ifndef EXTRA_CLOCK_CASES -# define EXTRA_CLOCK_CASES +#if HP_TIMING_AVAIL +/* Clock frequency of the processor. We make it a 64-bit variable + because some jokers are already playing with processors with more + than 4GHz. */ +static hp_timing_t freq; + + +/* We need the starting time for the process. */ +extern hp_timing_t _dl_cpuclock_offset; + + +/* This function is defined in the thread library. */ +extern void __pthread_clock_settime (hp_timing_t offset) + __attribute__ ((__weak__)); #endif + /* Set CLOCK to value TP. */ int clock_settime (clockid_t clock_id, const struct timespec *tp) @@ -47,7 +61,45 @@ clock_settime (clockid_t clock_id, const retval = settimeofday (&tv, NULL); break; - EXTRA_CLOCK_CASES +#if HP_TIMING_AVAIL + case CLOCK_PROCESS_CPUTIME_ID: + case CLOCK_THREAD_CPUTIME_ID: + { + hp_timing_t tsc; + hp_timing_t usertime; + + /* First thing is to get the current time. */ + HP_TIMING_NOW (tsc); + + if (__builtin_expect (freq == 0, 0)) + { + /* This can only happen if we haven't initialized the `freq' + variable yet. Do this now. We don't have to protect this + code against multiple execution since all of them should + lead to the same result. */ + freq = __get_clockfreq (); + if (__builtin_expect (freq == 0, 0)) + { + /* Something went wrong. */ + retval = -1; + break; + } + } + + /* Convert the user-provided time into CPU ticks. */ + usertime = tp->tv_sec * freq + (tp->tv_nsec * freq) / 1000000000ull; + + /* Determine the offset and use it as the new base value. */ + if (clock_id != CLOCK_THREAD_CPUTIME_ID + || __pthread_clock_settime == NULL) + _dl_cpuclock_offset = tsc - usertime; + else + __pthread_clock_settime (tsc - usertime); + + retval = 0; + } + break; +#endif default: __set_errno (EINVAL); diff -durpNa glibc-2.2.2/sysdeps/unix/i386/clock_getcpuclockid.c glibc-2.2.3/sysdeps/unix/i386/clock_getcpuclockid.c --- glibc-2.2.2/sysdeps/unix/i386/clock_getcpuclockid.c Fri Feb 9 10:04:31 2001 +++ glibc-2.2.3/sysdeps/unix/i386/clock_getcpuclockid.c Wed Dec 31 16:00:00 1969 @@ -1,34 +0,0 @@ -/* Copyright (C) 2000, 2001 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. */ - -#include -#include -#include - -int -clock_getcpuclockid (pid_t pid, clockid_t *clock_id) -{ - /* We don't allow any process ID but our own. */ - if (pid != 0 && pid != getpid ()) - return EPERM; - - /* Store the number. */ - *clock_id = CLOCK_PROCESS_CPUTIME_ID; - - return 0; -} diff -durpNa glibc-2.2.2/sysdeps/unix/i386/i586/clock_getres.c glibc-2.2.3/sysdeps/unix/i386/i586/clock_getres.c --- glibc-2.2.2/sysdeps/unix/i386/i586/clock_getres.c Fri Feb 9 10:04:31 2001 +++ glibc-2.2.3/sysdeps/unix/i386/i586/clock_getres.c Wed Dec 31 16:00:00 1969 @@ -1,72 +0,0 @@ -/* Copyright (C) 1999, 2000, 2001 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. */ - -#include -#include -#include - -/* This implementation uses the TSC register in modern (i586 and up) IA-32 - processors (most modern clones also provide it). Since we need the - resolution of the clock and since determining this is not cheap, we - cache the value. But this means that systems with processors running - at different speeds or process migration to machines with slower or - faster processors will not work without changes. */ - - -/* Clock frequency of the processor. */ -static long int nsec; - - -/* We add an limitation here: we assume that the machine is not up as - long as it takes to wrap-around the 64-bit timestamp counter. On a - 4GHz machine it would take 136 years of uptime to wrap around so - this "limitation" is not severe. - - We use this clock also as the monotonic clock since we don't allow - setting the CPU-time clock. If this should ever change we will have - to separate the two. */ -#define EXTRA_CLOCK_CASES \ - case CLOCK_PROCESS_CPUTIME_ID: \ - case CLOCK_THREAD_CPUTIME_ID: \ - { \ - if (__builtin_expect (nsec == 0, 0)) \ - { \ - unsigned long long int freq; \ - \ - /* This can only happen if we haven't initialized the `freq' \ - variable yet. Do this now. We don't have to protect this \ - code against multiple execution since all of them should \ - lead to the same result. */ \ - freq = __get_clockfreq (); \ - if (__builtin_expect (freq == 0, 0)) \ - /* Something went wrong. */ \ - break; \ - \ - nsec = MAX (1000000000ULL / freq, 1); \ - } \ - \ - /* File in the values. The seconds are always zero (unless we \ - have a 1Hz machine). */ \ - res->tv_sec = 0; \ - res->tv_nsec = nsec; \ - \ - retval = 0; \ - } \ - break; - -#include diff -durpNa glibc-2.2.2/sysdeps/unix/i386/i586/clock_gettime.c glibc-2.2.3/sysdeps/unix/i386/i586/clock_gettime.c --- glibc-2.2.2/sysdeps/unix/i386/i586/clock_gettime.c Fri Feb 9 10:04:31 2001 +++ glibc-2.2.3/sysdeps/unix/i386/i586/clock_gettime.c Wed Dec 31 16:00:00 1969 @@ -1,76 +0,0 @@ -/* Copyright (C) 1999, 2000, 2001 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. */ - -#include -#include - -/* This implementation uses the TSC register in modern (i586 and up) IA-32 - processors (most modern clones also provide it). Since we need the - resolution of the clock and since determining this is not cheap, we - cache the value. But this means that systems with processors running - at different speeds or process migration to machines with slower or - faster processors will not work without changes. */ - - -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static unsigned long long int freq; - - -/* We add an limitation here: we assume that the machine is not up as - long as it takes to wrap-around the 64-bit timestamp counter. On a - 4GHz machine it would take 136 years of uptime to wrap around so - this "limitation" is not severe. - - We use this clock also as the monotonic clock since we don't allow - setting the CPU-time clock. If this should ever change we will have - to separate the two. */ -#define EXTRA_CLOCK_CASES \ - case CLOCK_PROCESS_CPUTIME_ID: \ - case CLOCK_THREAD_CPUTIME_ID: \ - { \ - unsigned long long int tsc; \ - \ - if (__builtin_expect (freq == 0, 0)) \ - { \ - /* This can only happen if we haven't initialized the `freq' \ - variable yet. Do this now. We don't have to protect this \ - code against multiple execution since all of them should \ - lead to the same result. */ \ - freq = __get_clockfreq (); \ - if (__builtin_expect (freq == 0, 0)) \ - /* Something went wrong. */ \ - break; \ - } \ - \ - /* Get the current counter. */ \ - asm volatile ("rdtsc" : "=A" (tsc)); \ - \ - /* Compute the seconds. */ \ - tp->tv_sec = tsc / freq; \ - \ - /* And the nanoseconds. This computation should be stable until \ - we get machines with about 16GHz frequency. */ \ - tp->tv_nsec = ((tsc % freq) * 1000000000ull) / freq; \ - \ - retval = 0; \ - } \ - break; - -#include diff -durpNa glibc-2.2.2/sysdeps/unix/i386/i586/clock_nanosleep.c glibc-2.2.3/sysdeps/unix/i386/i586/clock_nanosleep.c --- glibc-2.2.2/sysdeps/unix/i386/i586/clock_nanosleep.c Sun Oct 8 17:05:08 2000 +++ glibc-2.2.3/sysdeps/unix/i386/i586/clock_nanosleep.c Wed Dec 31 16:00:00 1969 @@ -1,25 +0,0 @@ -/* High-resolution sleep with the specified clock. - 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. */ - -/* Additional definitions for the x86 version. */ -#define CLOCK_P(clock) \ - (clock) != CLOCK_PROCESS_CPUTIME_ID \ - && (clock) != CLOCK_THREAD_CPUTIME_ID - -#include diff -durpNa glibc-2.2.2/sysdeps/unix/i386/i686/Implies glibc-2.2.3/sysdeps/unix/i386/i686/Implies --- glibc-2.2.2/sysdeps/unix/i386/i686/Implies Tue Apr 11 00:04:58 2000 +++ glibc-2.2.3/sysdeps/unix/i386/i686/Implies Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -unix/i386/i586 diff -durpNa glibc-2.2.2/sysdeps/unix/make-syscalls.sh glibc-2.2.3/sysdeps/unix/make-syscalls.sh --- glibc-2.2.2/sysdeps/unix/make-syscalls.sh Thu Sep 14 12:24:27 2000 +++ glibc-2.2.3/sysdeps/unix/make-syscalls.sh Mon Mar 26 20:53:31 2001 @@ -24,7 +24,7 @@ # V: byte-per-page vector (3rd arg to mincore) # W: wait status, optionally-NULL pointer to int (e.g., 2nd arg of wait4) -ptr='[abBfFINpPsSW]' # all pointer keyletters +ptr='[abBfFINpPsSWV]' # all pointer keyletters int='[inv]' # all scalar keyletters typ='[ifnNpP]' # typed-arg keyletters: we capture type for use in thunk diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/Dist glibc-2.2.3/sysdeps/unix/sysv/aix/Dist --- glibc-2.2.2/sysdeps/unix/sysv/aix/Dist Sat Jan 6 23:38:11 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/Dist Sat Apr 7 16:38:23 2001 @@ -1,9 +1,10 @@ dl-sym.c dl-open.c dl-close.c +dl-libc.c +dlldr.h kernel_proto.h bits/utmpx.h gnu/lib-names.h uitrunc.c -savef.S -restf.S +utmpx.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/Makefile glibc-2.2.3/sysdeps/unix/sysv/aix/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/aix/Makefile Sat Jan 6 20:35:40 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/Makefile Sat Apr 7 14:02:39 2001 @@ -2,18 +2,16 @@ # This is a hack until the import/export stuff is worked out. +postctor += /lib/syscalls.exp -# XXX This is a hack until we have the possibility to generate out own crt0. -static-start-installed-name = /usr/lib/crt0.o - ifeq ($(subdir),misc) -sysdep_routines += dl-open dl-sym dl-close restf savef uitrunc +sysdep_routines += dl-libc dl-open dl-sym dl-close uitrunc endif ifeq ($(subdir),login) sysdep_routines += setutxent getutxent endutxent getutxid getutxline \ pututxline utmpxname -sysdep_headers += utmpx.h bits/utmpx.h +#sysdep_headers += utmpx.h bits/utmpx.h +#sysdep_headers += bits/utmp.h bits/utmpx.h endif # Don't compile the ctype glue code, since there is no old non-GNU C library. diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/bits/types.h glibc-2.2.3/sysdeps/unix/sysv/aix/bits/types.h --- glibc-2.2.2/sysdeps/unix/sysv/aix/bits/types.h Fri Feb 9 10:04:31 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/bits/types.h Mon Mar 26 20:53:35 2001 @@ -25,6 +25,7 @@ #include +#define __need_NULL #define __need_size_t #include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/bits/utmpx.h glibc-2.2.3/sysdeps/unix/sysv/aix/bits/utmpx.h --- glibc-2.2.2/sysdeps/unix/sysv/aix/bits/utmpx.h Mon Mar 20 17:26:45 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/bits/utmpx.h Sat Apr 7 14:02:39 2001 @@ -65,3 +65,10 @@ struct utmpx #ifdef __USE_GNU # define ACCOUNTING 9 /* System accounting. */ #endif + +#define _HAVE_UT_TYPE 1 +#define _HAVE_UT_PID 1 +#define _HAVE_UT_ID 1 +#define _HAVE_UT_TV 1 +#define _HAVE_UT_HOST 1 + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/dl-close.c glibc-2.2.3/sysdeps/unix/sysv/aix/dl-close.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/dl-close.c Mon Apr 17 15:12:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/dl-close.c Sat Apr 7 14:02:39 2001 @@ -1,9 +1,46 @@ -/* XXX The implementation of dlopen should somehow use the __loadx system - call but how? */ +/* Copyright (C) 2001 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. */ + +#include +#include +#include +#include #include +#include -int -__libc_dlclose (void *handle) +extern int _dl_numso; +extern DL_SODATA *_dl_sotable; + +void +_dl_close (void *handle) { - return 0; + if ((int) handle < 0 || (int) handle >= _dl_numso || _dl_sotable == NULL) + { + errno = EINVAL; + return; + } + + if (_dl_sotable[(int) handle].handle != 0) + __unload (_dl_sotable[(int) handle].handle); + + _dl_sotable[(int) handle].index = 0; + _dl_sotable[(int) handle].dataorg = 0; + _dl_sotable[(int) handle].handle = 0; + _dl_sotable[(int) handle].type = 0; } + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/dl-libc.c glibc-2.2.3/sysdeps/unix/sysv/aix/dl-libc.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/dl-libc.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/dl-libc.c Wed Apr 4 22:28:23 2001 @@ -0,0 +1,41 @@ +/* Handle loading and unloading shared objects for internal libc purposes. + Copyright (C) 2001 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. */ + +#include +#include +#include + +void * +__libc_dlopen (const char *name) +{ + return _dl_open (name, RTLD_LAZY, NULL); +} + +void * +__libc_dlsym (void *map, const char *name) +{ + return _dl_sym (map, name, NULL); +} + +int +__libc_dlclose (void *map) +{ + _dl_close (__map); + return 0; +} diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/dl-open.c glibc-2.2.3/sysdeps/unix/sysv/aix/dl-open.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/dl-open.c Mon Apr 17 15:13:34 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/dl-open.c Sat Apr 7 14:02:39 2001 @@ -1,9 +1,133 @@ -/* XXX The implementation of dlopen should somehow use the __loadx system - call but how? */ +/* Copyright (C) 1999, 2000, 2001 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. */ + +#include +#include +#include +#include +#include #include +#include + +#define NUM_SHARED_OBJECTS 32 + +int _dl_numso = NUM_SHARED_OBJECTS; +DL_SODATA *_dl_sotable = NULL; void * -__libc_dlopen (const char *file) +_dl_open (const char *file, int mode, const void *caller) { - return (void *) 0; + DL_SODATA *new_so; + void *handle; + int entry; + int bsize = _dl_numso * sizeof (DL_INFO); + DL_INFO *dl_info = malloc (bsize); + + if (dl_info == NULL) + return NULL; + + /* 1st time thru initial shared object data table. */ + if (_dl_sotable == NULL) + { + _dl_sotable = (DL_SODATA *) calloc (_dl_numso, sizeof (DL_SODATA)); + if (_dl_sotable == NULL) + return NULL; + + __loadx (DL_POSTLOADQ, dl_info, bsize, NULL); + while (!(dl_info[0].dlinfo_xflags & DL_INFO_OK) + || dl_info[0].dlinfo_arraylen == 0) + { + bsize *= 2; + dl_info = realloc (dl_info, bsize); + if (dl_info == NULL) + return NULL; + + __loadx (DL_POSTLOADQ, dl_info, bsize, NULL); + } + } + + /* Validate mode bits. */ + if (!(mode & RTLD_NOW) && !(mode & RTLD_LAZY)) + { + free (dl_info); + errno = EINVAL; + return NULL; + } + + /* Load the module. */ + handle = (void *) __loadx (DL_LOAD | DL_LOAD_RTL | DL_LOAD_LDX1, + dl_info, bsize, file, NULL); + if (handle == NULL) + { + free (dl_info); + errno = EINVAL; + return NULL; + } + + /* Was dl_info buffer to small to get info. */ + while (!(dl_info[0].dlinfo_xflags & DL_INFO_OK) + || dl_info[0].dlinfo_arraylen == 0) + { + bsize *= 2; + dl_info = realloc (dl_info, bsize); + if (dl_info == NULL) + { + (void) __unload ((void *) handle); + errno = ENOMEM; + return NULL; + } + __loadx (DL_POSTLOADQ | DL_LOAD_RTL, dl_info, bsize, handle); + } + + /* Get an empty entry in the shared object table. */ + for (entry = 0; entry < _dl_numso; ++entry) + if (_dl_sotable[entry].type == 0) + break; + + /* See if the table needs to be increased. */ + if (entry == _dl_numso) + { + new_so = (DL_SODATA *) realloc (_dl_sotable, + _dl_numso * 2 * sizeof (DL_SODATA)); + if (new_so == NULL) + return NULL; + + memset (new_so + _dl_numso, '\0', _dl_numso * sizeof (DL_SODATA)); + _dl_numso *= 2; + _dl_sotable = new_so; + } + + /* See if this is syscall (look for /unix in file). */ + if (strcmp ("/unix", file) == 0) + { + _dl_sotable[entry].index = dl_info[1].dlinfo_index; + _dl_sotable[entry].dataorg = dl_info[1].dlinfo_dataorg; + _dl_sotable[entry].handle = handle; + _dl_sotable[entry].type = DL_UNIX_SYSCALL; + } + else + { + _dl_sotable[entry].index = dl_info[1].dlinfo_index; + _dl_sotable[entry].dataorg = dl_info[1].dlinfo_dataorg; + _dl_sotable[entry].handle = handle; + _dl_sotable[entry].type = DL_GETSYM; + } + + free (dl_info); + return (void *) entry; } diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/dl-sym.c glibc-2.2.3/sysdeps/unix/sysv/aix/dl-sym.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/dl-sym.c Mon Apr 17 15:15:05 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/dl-sym.c Sat Apr 7 14:02:39 2001 @@ -1,9 +1,58 @@ -/* XXX The implementation of dlopen should somehow use the __loadx system - call but how? */ +/* Copyright (C) 2001 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. */ + +#include +#include +#include +#include #include +#include + +extern int _dl_numso; +extern DL_SODATA *_dl_sotable; void * -__libc_dlsym (void *handle, const char *name) +_dl_sym (void *handle, const char *symbol, void *who) { - return (void *) 0; + void *rt_function; + + if ((int) handle < 0 || (int) handle >= _dl_numso || _dl_sotable == NULL) + { + errno = EINVAL; + return NULL; + } + + switch (_dl_sotable[(int) handle].type) + { + case DL_UNIX_SYSCALL: + rt_function = (void *) __loadx (DL_UNIX_SYSCALL, (void *) symbol); + break; + + case DL_GETSYM: + rt_function = (void *) __loadx (DL_GETSYM, (void *) symbol, + _dl_sotable[(int) handle].index, + _dl_sotable[(int) handle].dataorg); + break; + + default: + errno = EINVAL; + return NULL; + } + + return rt_function; } diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/dlldr.h glibc-2.2.3/sysdeps/unix/sysv/aix/dlldr.h --- glibc-2.2.2/sysdeps/unix/sysv/aix/dlldr.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/dlldr.h Tue Apr 3 18:34:38 2001 @@ -0,0 +1,112 @@ +/* Copyright (C) 2001 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. +*/ + + +/* + + int __loadx(flag, module, arg1, arg2, arg3) + + The __loadx() is a call to ld_loadutil() kernel function, which + does the real work. Note ld_loadutil() is not exported an cannot be + called directly from user space. + + void *ld_loadutil() call is a utility function used for loader extensions + supporting run-time linking and dl*() functions. + + void * - will return the modules entry point if it succeds of NULL + on failure. + + int flag - the flag field performas a dual role: the top 8 bits specify + the work for __loadx() to perform, the bottom 8 bits are + used to pass flags to the work routines, all other bits are + reserved. + +*/ + +#define DL_LOAD 0x1000000 /* __loadx(flag,buf, buf_len, filename, libr_path) */ +#define DL_POSTLOADQ 0x2000000 /* __loadx(flag,buf, buf_len, module_handle) */ +#define DL_EXECQ 0x3000000 /* __loadx(flag,buf, buf_len) */ +#define DL_EXITQ 0x4000000 /* __loadx(flag,buf, buf_len) */ +#define DL_PREUNLOADQ 0x5000000 /* __loadx(flag,buf, buf_len, module_handle) */ +#define DL_INIT 0x6000000 /* __loadx(flag,NULL) */ +#define DL_GETSYM 0x7000000 /* __loadx(flag,symbol, index, modules_data_origin) */ +#define DL_SETDEPEND 0x8000000 /* __loadx(flag,import_data_org, import_index, */ + /* export_data_org, export_index) */ +#define DL_DELDEPEND 0x9000000 /* __loadx(flag,import_data_org, import_index, */ + /* export_data_org, export_index) */ +#define DL_GLOBALSYM 0xA000000 /* __loadx(flag,symbol_name, ptr_to_rec_index, */ + /* ptr_to_rec_data_org) */ +#define DL_UNIX_SYSCALL 0xB000000 /* __loadx(flag,syscall_symbol_name) */ + +#define DL_FUNCTION_MASK 0xFF000000 +#define DL_SRCHDEPENDS 0x00100000 +#define DL_SRCHMODULE 0x00080000 +#define DL_SRCHLOADLIST 0x00040000 +#define DL_LOAD_LDX1 0x00040000 +#define DL_LOAD_RTL 0x00020000 +#define DL_HASHSTRING 0x00020000 +#define DL_INFO_OK 0x00010000 +#define DL_LOAD_DLINFO 0x00010000 +#define DL_UNLOADED 0x00020000 + +typedef union _dl_info +{ + struct { + uint _xflags; /* flag bits in the array */ + uint _size; /* size of this structure */ + uint _arraylen; /* number of following elements */ + } _dl_stat; + struct { + caddr_t _textorg; /* start of loaded program image */ + caddr_t _dataorg; /* start of data instance */ + uint _datasize; /* size of data instance */ + ushort _index; /* index of this le in la_dynlist */ + ushort _mflags; /* info about module from load() */ + } _dl_array; +} DL_INFO; + +#define dlinfo_xflags _dl_stat._xflags +#define dlinfo_arraylen _dl_stat._arraylen +#define dlinfo_size _dl_stat._size + +#define dlinfo_textorg _dl_array._textorg +#define dlinfo_datasize _dl_array._datasize +#define dlinfo_dataorg _dl_array._dataorg +#define dlinfo_index _dl_array._index +#define dlinfo_flags _dl_array._mflags + +#define DL_HAS_RTINIT 0x1 /* indicates the module __rtinit symbols */ +#define DL_IS_NEW 0x2 /* indicates that the module is newly loaded */ + +struct _xArgs +{ + char *libpath; + DL_INFO *info; + uint infosize; +}; + +/* Shared Object DATA used for dl-open,dl-sym & dl-close support */ +typedef struct +{ + void *handle; /* handle for __loadx */ + uint type; /* type of __loadx flag */ + ushort index; /* dlinfo_index */ + caddr_t dataorg; /* dlinfo_dataorg */ +} DL_SODATA; + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/gethostname.c glibc-2.2.3/sysdeps/unix/sysv/aix/gethostname.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/gethostname.c Tue Apr 18 12:42:57 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/gethostname.c Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 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 @@ -21,7 +21,7 @@ int __gethostname (name, len) char *name; - socklen_t len; + size_t len; { return gethostname (name, len); } diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/getpeername.c glibc-2.2.3/sysdeps/unix/sysv/aix/getpeername.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/getpeername.c Mon Mar 20 17:15:30 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/getpeername.c Sat Apr 7 14:02:39 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -25,3 +25,4 @@ getpeername (int fd, __SOCKADDR_ARG addr { return ngetpeername (fd, addr.__sockaddr__, len); } +weak_alias (getpeername,__getpeername) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/gettimeofday.c glibc-2.2.3/sysdeps/unix/sysv/aix/gettimeofday.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/gettimeofday.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/gettimeofday.c Tue Apr 3 18:32:14 2001 @@ -0,0 +1,94 @@ +/* Copyright (C) 1991, 92, 94, 95, 96, 97 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. */ + +#include +#include +#include + +#ifndef HAVE_GNU_LD +#define __daylight daylight +#define __timezone timezone +#define __tzname tzname +#endif + +/* Assembler Routines to access the timer registers */ +asm(" +.rtc_upper: mfspr 3,4 # copy RTCU to return register + blr + +.rtc_lower: mfspr 3,5 # copy RTCL to return register + blr +"); + +/* Get the current time of day and timezone information, + putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. + Returns 0 on success, -1 on errors. */ +int +__gettimeofday (tv, tz) + struct timeval *tv; + struct timezone *tz; +{ + int ts, tl, tu; + + if (tv == NULL) + { + __set_errno (EINVAL); + return -1; + } + + ts = rtc_upper(); /* seconds */ + tl = rtc_lower(); /* nanoseconds */ + tu = rtc_upper(); /* Check for a carry from */ + if (ts != tu) /* the lower reg to the upper */ + tl = rtc_lower(); /* Recover from the race condition */ + + tv->tv_sec = (long int) (tu + (double)tl/1000000000); + tv->tv_usec = (long int) ((double)tl/1000); + +#if 0 + if (tz != NULL) + { + const time_t timer = tv->tv_sec; + struct tm tm; + const struct tm *tmp; + + const long int save_timezone = __timezone; + const long int save_daylight = __daylight; + char *save_tzname[2]; + save_tzname[0] = __tzname[0]; + save_tzname[1] = __tzname[1]; + + tmp = localtime_r (&timer, &tm); + + tz->tz_minuteswest = __timezone / 60; + tz->tz_dsttime = __daylight; + + __timezone = save_timezone; + __daylight = save_daylight; + __tzname[0] = save_tzname[0]; + __tzname[1] = save_tzname[1]; + + if (tmp == NULL) + return -1; + } +#endif + + return 0; +} + +weak_alias (__gettimeofday, gettimeofday) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/libc-start.c glibc-2.2.3/sysdeps/unix/sysv/aix/libc-start.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/libc-start.c Mon Mar 20 17:17:14 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/libc-start.c Sat Apr 7 14:02:39 2001 @@ -1,20 +1 @@ -/* We don't need the usual code since we are using the AIX crt code. */ - -/* This function is called in the AIX crt0. */ -void -__mod_init (void) -{ - /* XXX What has to be done? */ -} - -/* This variable is reference in the AIX crt0 code. - XXX Since I don't know how it is used make it a pointer to a function. */ -void *__crt0v = __mod_init; - - -/* XXX Another weird function from the C library. I have no idea what - it does but it is needed by libgcc. */ -void -_savef14 (void) -{ -} +/* stub libc-start.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/powerpc/memset.c glibc-2.2.3/sysdeps/unix/sysv/aix/powerpc/memset.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/powerpc/memset.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/powerpc/memset.c Tue Apr 3 18:52:37 2001 @@ -0,0 +1,21 @@ +/* Copyright (C) 2001 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. */ + + +/* Until the cache line issues are resolved use the generic implementation. */ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/restf.S glibc-2.2.3/sysdeps/unix/sysv/aix/restf.S --- glibc-2.2.2/sysdeps/unix/sysv/aix/restf.S Tue Dec 5 19:14:16 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/restf.S Wed Dec 31 16:00:00 1969 @@ -1,58 +0,0 @@ -/* 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. */ - -#include - -ENTRY(_restf_all) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf14) -C_TEXT(_restf14): lfd fp14,-144(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf15) -C_TEXT(_restf15): lfd fp15,-136(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf16) -C_TEXT(_restf16): lfd fp16,-128(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf17) -C_TEXT(_restf17): lfd fp17,-120(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf18) -C_TEXT(_restf18): lfd fp18,-112(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf19) -C_TEXT(_restf19): lfd fp19,-104(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf20) -C_TEXT(_restf20): lfd fp20,-96(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf21) -C_TEXT(_restf21): lfd fp21,-88(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf22) -C_TEXT(_restf22): lfd fp22,-80(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf23) -C_TEXT(_restf23): lfd fp23,-72(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf24) -C_TEXT(_restf24): lfd fp24,-64(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf25) -C_TEXT(_restf25): lfd fp25,-56(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf26) -C_TEXT(_restf26): lfd fp26,-48(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf27) -C_TEXT(_restf27): lfd fp27,-40(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf28) -C_TEXT(_restf28): lfd fp28,-32(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf29) -C_TEXT(_restf29): lfd fp29,-24(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf30) -C_TEXT(_restf30): lfd fp30,-16(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf31) -C_TEXT(_restf31): lfd fp31,-8(r11) - blr diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/savef.S glibc-2.2.3/sysdeps/unix/sysv/aix/savef.S --- glibc-2.2.2/sysdeps/unix/sysv/aix/savef.S Tue Dec 5 19:13:59 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/savef.S Wed Dec 31 16:00:00 1969 @@ -1,58 +0,0 @@ -/* 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. */ - -#include - -ENTRY(_savef_all) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef14) -C_TEXT(_savef14): stfd fp14,-144(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef15) -C_TEXT(_savef15): stfd fp15,-136(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef16) -C_TEXT(_savef16): stfd fp16,-128(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef17) -C_TEXT(_savef17): stfd fp17,-120(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef18) -C_TEXT(_savef18): stfd fp18,-112(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef19) -C_TEXT(_savef19): stfd fp19,-104(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef20) -C_TEXT(_savef20): stfd fp20,-96(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef21) -C_TEXT(_savef21): stfd fp21,-88(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef22) -C_TEXT(_savef22): stfd fp22,-80(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef23) -C_TEXT(_savef23): stfd fp23,-72(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef24) -C_TEXT(_savef24): stfd fp24,-64(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef25) -C_TEXT(_savef25): stfd fp25,-56(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef26) -C_TEXT(_savef26): stfd fp26,-48(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef27) -C_TEXT(_savef27): stfd fp27,-40(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef28) -C_TEXT(_savef28): stfd fp28,-32(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef29) -C_TEXT(_savef29): stfd fp29,-24(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef30) -C_TEXT(_savef30): stfd fp30,-16(r11) - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef31) -C_TEXT(_savef31): stfd fp31,-8(r11) - blr diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/start.c glibc-2.2.3/sysdeps/unix/sysv/aix/start.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/start.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/start.c Tue Apr 3 18:33:04 2001 @@ -0,0 +1,290 @@ +/* Copyright (C) 1991, 93, 1995-1998, 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. +*/ + + +/* Old compatibility names for C types. */ +typedef unsigned char uchar; /* sb in libc/posix/types.h */ + +#include +#include +#include +#include +#include +#include +#include + +/* The first piece of initialized data. */ +int __data_start = 0; + +extern int errno; + +/* extern __pthread_init; */ + +typedef void (*FPV)(void); + +typedef struct crt0_info +{ + int *p_argc; + FPV threads_init; +} INFO; + + +INFO crt0_info; +int argc; +char **argv; +char **__environ; +int module_count; +caddr_t text_origin; +caddr_t data_origin; + +asm(" + .toc +LL..0: .tc argc[TC],argc +LL..1: .tc argv[TC],argv +LL..2: .tc __environ[TC],__environ +LL..3: .tc module_count[TC],module_count +LL..4: .tc text_origin[TC],text_origin +LL..5: .tc data_origin[TC],data_origin +"); + +int main (int argc,char **argv,char **__environ); +int modinit(int argc,INFO *crt0_info, int module_count, + caddr_t text_origin, caddr_t data_origin); + +void mod_init1(void *handler,__RTINIT *rti); + +__RTINIT *find_rtinit(caddr_t text_origin,caddr_t data_origin, int module_count); + +extern int *__loadx(); + +void __start(void) +{ +#ifdef __64BIT__ +asm(" + ld 17,LL..0(2) # argc + std 14,0(17) # copy reg14 to argc + ld 17,LL..1(2) # argv + std 15,0(17) # copy reg15 to argv + ld 17,LL..2(2) # envp + std 16,0(17) # copy reg16 to envp + ld 17,LL..3(2) # module_count + std 30,0(17) # copy reg30 to module_count + ld 17,LL..4(2) # text_origin + std 29,0(17) # copy reg29 to text_origin + ld 17,LL..5(2) # data_origin + std 28,0(17) # copy reg28 to data_origin +"); +#else +asm(" + lwz 17,LL..0(2) # argc + stw 3,0(17) # copy reg3 to argc + lwz 17,LL..1(2) # argv + stw 4,0(17) # copy reg4 to argv + lwz 17,LL..2(2) # envp + stw 5,0(17) # copy reg5 to envp + lwz 17,LL..3(2) # module_count + stw 30,0(17) # copy reg30 to module_count + lwz 17,LL..4(2) # text_origin + stw 29,0(17) # copy reg29 to text_origin + lwz 17,LL..5(2) # data_origin + stw 28,0(17) # copy reg28 to data_origin +"); +#endif + crt0_info.p_argc = (int*)&argc; + +/* crt0_info.threads_init = (FPV) &__pthread_init; */ + + /* + * Do run-time linking, if enabled and call the init() + * for all loaded modules. + */ + argc = modinit(argc,&crt0_info,module_count,text_origin,data_origin); + + errno=0; + /* + * Call the user program. + */ + exit (main (argc, argv, __environ)); +} + +/* + * The modinit() function performs run-time linking, + * if enabled, and calling the init() function for + * all loaded modules. + * + * int modinit(argc,crt0_info,module_count,text,data) + * + * argc - current value of argc. + * info - crt0 information passed + * module_count - number of modules loaded. + * text - Beginning of text address + * data - Beginning of data address + */ + +#define DL_BUFFER_SIZE 1000 + +int modinit(int argc,INFO *crt0_info, int module_count, + caddr_t text_origin, caddr_t data_origin) +{ + int *handler = 0; + __RTINIT *rtinit_info = 0; + int flag; + DL_INFO dl_buffer[DL_BUFFER_SIZE]; + DL_INFO *dl_info = dl_buffer; + int i; + FPV p; + __libc_lock_define_initialized(static,modinit_lock); + + /* + * try to find __rtinit symbols + */ + rtinit_info = find_rtinit(text_origin,data_origin,module_count); + + flag = DL_EXECQ; + if (rtinit_info && rtinit_info->rtl) flag |= DL_LOAD_RTL; + + /* + * get a list of modules that have __rtinit + */ + if (__loadx(flag, dl_info, sizeof(dl_buffer))) exit(0x90); + + if (( dl_info[0].dlinfo_xflags & DL_INFO_OK)) + { + rtinit_info = find_rtinit(dl_info[1].dlinfo_textorg, + dl_info[1].dlinfo_dataorg, + module_count); + if ((rtinit_info != NULL) & (rtinit_info->rtl != NULL)) + { + if((*rtinit_info->rtl)(dl_info,0)) exit(0x90); + } + } + + /* + * initialize threads in case any init + * functions need thread functions + */ + if (crt0_info->threads_init) + (*crt0_info->threads_init)(); + + p = (FPV) __loadx(DL_GLOBALSYM | DL_SRCHLOADLIST,"pthread_init"); + if (p) + (*p)(); + + __libc_lock_lock(modinit_lock); + + /* + * initialization each module loaded that has __rtinit. + */ + if (( dl_info[0].dlinfo_xflags & DL_INFO_OK)) + { + for (i=1; i < dl_info[0].dlinfo_arraylen + 1; i++) + { + if (dl_info[i].dlinfo_flags & DL_HAS_RTINIT) + { + rtinit_info = find_rtinit(dl_info[i].dlinfo_textorg, + dl_info[i].dlinfo_dataorg, + module_count); + if (rtinit_info) + { + mod_init1(handler,rtinit_info); + } + } + } + } + + __libc_lock_unlock(modinit_lock); + /* + * reload argc if needed. + */ + return((int) (*crt0_info->p_argc)); +} + +/* + * The mod_init1 calls every initialization function + * for a given module. + * + * void mod_init1(handler, rti) + * + * void *handler - if NULL init funtions for modules loaded at exec time + * are being executed. Otherwise, the handler points to the + * module loaded. + * + * __RTINIT *rti - pointer to __rtinit data structure (with rti->init_offset + * not equal to zero) + */ + +void mod_init1(void *handler,__RTINIT *rtl) +{ + __RTINIT_DESCRIPTOR *descriptor; + + descriptor =(__RTINIT_DESCRIPTOR *) ((caddr_t)&rtl->rtl + rtl->init_offset); + while (descriptor->f) + { + if (!(descriptor->flags & _RT_CALLED)) + { + descriptor->flags |= _RT_CALLED; + ( descriptor->f )(handler,rtl,descriptor); /* execute init/fini */ + } + descriptor = (__RTINIT_DESCRIPTOR *) ((caddr_t)descriptor + + rtl->__rtinit_descriptor_size); + } +} + + +/* + * Find __rtinit symbol + * + * __RTINIT *find_rtinit(caddr_t text_origin) + * + * caddr_t text_origin - Beginning of text area + * caddr_t data_origin - Beginning of data area + * int module_count - Number of modules loaded + * __RTINIT *rti - pointer to __rtinit data structure + */ + +__RTINIT *find_rtinit(caddr_t text_origin, caddr_t data_origin, int module_count) +{ + struct xcoffhdr *xcoff_hdr; + SCNHDR *sec_hdr; + SCNHDR *ldr_sec_hdr; + SCNHDR *data_sec_hdr; + LDSYM *ldsym_hdr; + __RTINIT *rtl; + + xcoff_hdr = (struct xcoffhdr *) text_origin; + sec_hdr = (SCNHDR *) ((caddr_t)&xcoff_hdr->aouthdr + + xcoff_hdr->filehdr.f_opthdr); + ldr_sec_hdr = (SCNHDR *) (sec_hdr + (xcoff_hdr->aouthdr.o_snloader - 1)); + ldsym_hdr = (LDSYM *) ((caddr_t)xcoff_hdr + ldr_sec_hdr->s_scnptr + + LDHDRSZ); + + if ( module_count <= 0) + { + if ( !(ldr_sec_hdr->s_scnptr) ) return ((__RTINIT *) 0); + + if ( memcmp(ldsym_hdr,RTINIT_NAME,sizeof(RTINIT_NAME)-1)) + return ((__RTINIT *) 0); + } + + data_sec_hdr = (SCNHDR *) (sec_hdr + (xcoff_hdr->aouthdr.o_sndata - 1)); + rtl = (__RTINIT *) (ldsym_hdr->l_value + + (data_origin - data_sec_hdr->s_vaddr)); + return(rtl); +} + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/utmpx.h glibc-2.2.3/sysdeps/unix/sysv/aix/utmpx.h --- glibc-2.2.2/sysdeps/unix/sysv/aix/utmpx.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/utmpx.h Tue Apr 3 18:28:41 2001 @@ -0,0 +1,89 @@ +/* Copyright (C) 1997, 1998, 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 _UTMPX_H +#define _UTMPX_H 1 + +#include +#include + +/* Required according to Unix98. */ +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +/* Get system dependent values and data structures. */ +#include + +#ifdef __USE_GNU +/* Compatibility names for the strings of the canonical file names. */ +# define UTMPX_FILE _PATH_UTMPX +# define UTMPX_FILENAME _PATH_UTMPX +# define WTMPX_FILE _PATH_WTMPX +# define WTMPX_FILENAME _PATH_WTMPX +#endif + +/* For the getutmp{,x} functions we need the `struct utmp'. */ +#ifdef __USE_GNU +struct utmp; +#endif + + +__BEGIN_DECLS + +/* Open user accounting database. */ +extern void setutxent (void) __THROW; + +/* Close user accounting database. */ +extern void endutxent (void) __THROW; + +/* Get the next entry from the user accounting database. */ +extern struct utmpx *getutxent (void) __THROW; + +/* Get the user accounting database entry corresponding to ID. */ +extern struct utmpx *getutxid (__const struct utmpx *__id) __THROW; + +/* Get the user accounting database entry corresponding to LINE. */ +extern struct utmpx *getutxline (__const struct utmpx *__line) __THROW; + +/* Write the entry UTMPX into the user accounting database. */ +extern struct utmpx *pututxline (__const struct utmpx *__utmpx) __THROW; + + +#ifdef __USE_GNU +/* Change name of the utmpx file to be examined. */ +extern int utmpxname (__const char *__file) __THROW; + +/* Append entry UTMP to the wtmpx-like file WTMPX_FILE. */ +extern void updwtmpx (__const char *__wtmpx_file, + __const struct utmpx *__utmpx) __THROW; + + +/* Copy the information in UTMPX to UTMP. */ +extern void getutmp (__const struct utmpx *__utmpx, + struct utmp *__utmp) __THROW; + +/* Copy the information in UTMP to UTMPX. */ +extern void getutmpx (__const struct utmp *__utmp, + struct utmpx *__utmpx) __THROW; +#endif + +__END_DECLS + +#endif /* utmpx.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/aix/write.c glibc-2.2.3/sysdeps/unix/sysv/aix/write.c --- glibc-2.2.2/sysdeps/unix/sysv/aix/write.c Sat Jan 6 20:35:41 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/aix/write.c Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1999. @@ -32,3 +32,4 @@ __write (fd, ptr, n) } /* AIX has no weak aliases (yet) but let's hope for better times. */ weak_alias (__write, write) +strong_alias (__write, __libc_write) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/gethostname.c glibc-2.2.3/sysdeps/unix/sysv/gethostname.c --- glibc-2.2.2/sysdeps/unix/sysv/gethostname.c Fri Apr 7 12:10:02 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/gethostname.c Mon Mar 26 20:53:33 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995, 1997, 2000, 2001 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 @@ -27,7 +27,7 @@ int __gethostname (name, len) char *name; - socklen_t len; + size_t len; { struct utsname buf; size_t node_len; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h Fri Feb 9 10:04:32 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h Mon Mar 26 20:53:35 2001 @@ -17,15 +17,17 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t +#if !defined _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t # error "Never include this file directly. Use instead" #endif #include -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 /* Type for data associated with a signal. */ typedef union sigval @@ -33,6 +35,11 @@ typedef union sigval int sival_int; void *sival_ptr; } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 # define __SI_MAX_SIZE 128 # if __WORDSIZE == 64 @@ -120,7 +127,9 @@ typedef struct siginfo signals. */ enum { - SI_SIGIO = -5, /* Sent by queued SIGIO. */ + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ # define SI_SIGIO SI_SIGIO SI_ASYNCIO, /* Sent by AIO completion. */ # define SI_ASYNCIO SI_ASYNCIO @@ -246,7 +255,8 @@ enum #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ -#if defined _SIGNAL_H && !defined __have_sigevent_t +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t # define __have_sigevent_t 1 /* Structure to transport application-defined values with signals. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/bits/stat.h Thu Jun 22 12:04:26 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/bits/stat.h Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -101,10 +101,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/getsysstats.c glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/getsysstats.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/getsysstats.c Fri Aug 6 13:06:19 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/getsysstats.c Sat Apr 7 14:02:40 2001 @@ -29,7 +29,9 @@ If there is no "CPUs ..." line then we are on a UP system. */ \ (RESULT) = 1; \ while (fgets_unlocked (BUFFER, sizeof (BUFFER), FP) != NULL) \ - if (sscanf (BUFFER, "CPUs probed %*d active %d", &(RESULT)) == 1) \ + if ((sscanf (BUFFER, "cpus active : %d", &(RESULT)) == 1) \ + || (sscanf (BUFFER, "CPUs probed %*d active %d", \ + &(RESULT)) == 1)) \ break; \ } \ while (0) @@ -46,7 +48,8 @@ If there is no "CPUs ..." line then we are on a UP system. */ \ (RESULT) = 1; \ while (fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ - if (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1) \ + if ((sscanf (buffer, "cpus detected : %d", &(RESULT)) == 1) \ + || (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1)) \ break; \ } \ while (0) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h Mon Aug 23 10:42:00 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h Mon Mar 26 20:53:35 2001 @@ -21,3 +21,5 @@ #define GET_PC(ctx) ((void *) (ctx).sc_pc) #define GET_FRAME(ctx) ((void *) (ctx).sc_regs[15]) #define GET_STACK(ctx) ((void *) (ctx).sc_regs[30]) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/alpha/syscalls.list Thu Aug 31 14:45:30 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/alpha/syscalls.list Mon Mar 26 20:53:35 2001 @@ -26,7 +26,7 @@ fstatfs - fstatfs 2 __fstatfs fstatfs statfs - statfs 2 __statfs statfs statfs64 getrlimit - getrlimit 2 __getrlimit getrlimit getrlimit64 setrlimit - setrlimit 2 __setrlimit setrlimit64 setrlimit -ftruncate - ftruncate 2 __ftruncate ftruncate ftruncate64 +ftruncate - ftruncate 2 __ftruncate ftruncate __ftruncate64 ftruncate64 truncate - truncate 2 truncate truncate64 # these are actually common with the x86: diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/arm/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/Dist Tue Jun 13 20:15:24 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/Dist Mon Mar 26 20:53:35 2001 @@ -1,4 +1,6 @@ clone.S +dl-procinfo.c +dl-procinfo.h ioperm.c setresuid.c setresgid.c diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/Makefile glibc-2.2.3/sysdeps/unix/sysv/linux/arm/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/Makefile Thu Aug 31 14:45:30 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/Makefile Mon Mar 26 20:53:35 2001 @@ -12,3 +12,11 @@ endif ifeq ($(subdir),resource) sysdep_routines += oldgetrlimit64 endif + +ifeq ($(subdir),elf) +# extra shared linker files to link into dl-allobjs.so and libc +sysdep-dl-routines += dl-procinfo +sysdep_routines += dl-procinfo +# extra shared linker files to link only into dl-allobjs.so +sysdep-rtld-routines += dl-procinfo +endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/dl-procinfo.c glibc-2.2.3/sysdeps/unix/sysv/linux/arm/dl-procinfo.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/dl-procinfo.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/dl-procinfo.c Fri Mar 9 22:35:45 2001 @@ -0,0 +1,31 @@ +/* Data for Linux/ARM version of processor capability information. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Philip Blundell , 2001. + + 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. */ + +/* This information must be kept in sync with the _DL_HWCAP_COUNT and + _DL_PLATFORM_COUNT definitions in procinfo.h. */ + + +/* If anything should be added here check whether the size of each string + is still ok with the given array size. */ +const char _dl_arm_cap_flags[][10] = + { + "swp", "half", "thumb", "26bit", "fast-mult", "fpa", "vfp", "edsp", + }; + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/dl-procinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/dl-procinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/dl-procinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/dl-procinfo.h Fri Mar 9 22:36:09 2001 @@ -0,0 +1,89 @@ +/* Linux/ARM version of processor capability information handling macros. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Philip Blundell , 2001. + + 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 _DL_PROCINFO_H +#define _DL_PROCINFO_H 1 + +#include + +/* If anything should be added here check whether the size of each string + is still ok with the given array size. */ +extern const char _dl_arm_cap_flags[][10]; +#define _DL_HWCAP_COUNT 32 + +/* The kernel provides platform data but it is not interesting. */ +#define _DL_HWCAP_PLATFORM 0 + + +static inline int +__attribute__ ((unused)) +_dl_procinfo (int word) +{ + int i; + + _dl_printf ("AT_HWCAP: "); + + for (i = 0; i < _DL_HWCAP_COUNT; ++i) + if (word & (1 << i)) + _dl_printf (" %s", _dl_arm_cap_flags[i]); + + _dl_printf ("\n"); + + return 0; +} + +static inline const char * +__attribute__ ((unused)) +_dl_hwcap_string (int idx) +{ + return _dl_arm_cap_flags[idx]; +}; + +enum +{ + HWCAP_ARM_SWP = 1 << 0, + HWCAP_ARM_HALF = 1 << 1, + HWCAP_ARM_THUMB = 1 << 2, + HWCAP_ARM_26BIT = 1 << 3, + HWCAP_ARM_FAST_MULT = 1 << 4, + HWCAP_ARM_FPA = 1 << 5, + HWCAP_ARM_VFP = 1 << 6, + HWCAP_ARM_EDSP = 1 << 7, + + HWCAP_IMPORTANT = (HWCAP_ARM_HALF | HWCAP_ARM_FAST_MULT) +}; + +static inline int +__attribute__ ((unused)) +_dl_string_hwcap (const char *str) +{ + int i; + + for (i = 0; i < _DL_HWCAP_COUNT; i++) + { + if (strcmp (str, _dl_arm_cap_flags[i]) == 0) + return i; + } + return -1; +}; + +#define _dl_string_platform(str) (-1) + +#endif /* dl-procinfo.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/register-dump.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/register-dump.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/register-dump.h Mon Jan 4 14:16:17 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/register-dump.h Wed Apr 25 14:51:14 2001 @@ -1,5 +1,5 @@ /* Dump registers. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Philip Blundell , 1998. @@ -32,6 +32,7 @@ CPSR: XXXXXXXX Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX + Addr: XXXXXXXX */ @@ -46,7 +47,7 @@ hexvalue (unsigned long int value, char static void register_dump (int fd, union k_sigcontext *ctx) { - char regs[20][8]; + char regs[21][8]; struct iovec iov[97]; size_t nr = 0; @@ -105,6 +106,7 @@ register_dump (int fd, union k_sigcontex hexvalue (ctx->v21.trap_no, regs[17], 8); hexvalue (ctx->v21.error_code, regs[18], 8); hexvalue (ctx->v21.oldmask, regs[19], 8); + hexvalue (ctx->v21.fault_address, regs[20], 8); } /* Generate the output. */ @@ -148,6 +150,11 @@ register_dump (int fd, union k_sigcontex ADD_MEM (regs[18], 8); ADD_STRING (" OldMask: "); ADD_MEM (regs[19], 8); + if (ctx->v20.magic != SIGCONTEXT_2_0_MAGIC) + { + ADD_STRING ("\n Addr: "); + ADD_MEM (regs[20], 8); + } ADD_STRING ("\n"); diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h Fri Feb 11 15:49:01 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h Mon Mar 26 20:53:35 2001 @@ -31,3 +31,5 @@ ctx.v20.reg.ARM_sp : ctx.v21.arm_sp)) #define ADVANCE_STACK_FRAME(frm) \ ((struct layout *)frm - 1) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/elf.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/elf.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/elf.h Mon Sep 13 18:40:33 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/elf.h Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1999, 2001 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 @@ -19,12 +19,8 @@ #ifndef _SYS_ELF_H #define _SYS_ELF_H 1 -#include - -typedef unsigned long int elf_greg_t; -#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) +#warning "This header is obsolete; use instead." -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -typedef struct user_fp elf_fpregset_t; +#include #endif /* sys/elf.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/procfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/procfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/procfs.h Mon Nov 15 16:23:39 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/procfs.h Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1999, 2001 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 @@ -19,20 +19,36 @@ #ifndef _SYS_PROCFS_H #define _SYS_PROCFS_H 1 -/* This is somehow modelled after the file of the same name on SysVr4 +/* This is somewhat modelled after the file of the same name on SVR4 systems. It provides a definition of the core file format for ELF - used on Linux. */ + used on Linux. It doesn't have anything to do with the /proc file + system, even though Linux has one. + + Anyway, the whole purpose of this file is for GDB and GDB only. + Don't read too much into it. Don't use it for anything other than + GDB unless you know what you are doing. */ #include -#include #include #include -#include #include -#include __BEGIN_DECLS +/* Type for a general-purpose register. */ +typedef unsigned long elf_greg_t; + +/* And the whole bunch of them. We could have used `struct + user_regs' directly in the typedef, but tradition says that + the register set is an array, which does have some peculiar + semantics, so leave it that way. */ +#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +/* Register set for the floating-point registers. */ +typedef struct user_fpregs elf_fpregset_t; + +/* Signal info. */ struct elf_siginfo { int si_signo; /* Signal number. */ @@ -40,23 +56,19 @@ struct elf_siginfo int si_errno; /* Errno. */ }; -/* Definitions to generate core files. Fields present but not used are - marked with "XXX". */ +/* Definitions to generate Intel SVR4-like core files. These mostly + have the same names as the SVR4 types with "elf_" tacked on the + front to prevent clashes with Linux definitions, and the typedef + forms have been avoided. This is mostly like the SVR4 structure, + but more Linuxy, with things that Linux does not support and which + GDB doesn't really use excluded. */ + struct elf_prstatus { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif struct elf_siginfo pr_info; /* Info associated with signal. */ short int pr_cursig; /* Current signal. */ unsigned long int pr_sigpend; /* Set of pending signals. */ unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif __pid_t pr_pid; __pid_t pr_ppid; __pid_t pr_pgrp; @@ -65,15 +77,12 @@ struct elf_prstatus struct timeval pr_stime; /* System time. */ struct timeval pr_cutime; /* Cumulative user time. */ struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif elf_gregset_t pr_reg; /* GP registers. */ int pr_fpvalid; /* True if math copro being used. */ }; -#define ELF_PRARGSZ (80) /* Number of chars for args */ +#define ELF_PRARGSZ (80) /* Number of chars for args. */ struct elf_prpsinfo { @@ -90,18 +99,22 @@ struct elf_prpsinfo char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ }; +/* The rest of this file provides the types for emulation of the + Solaris interfaces that should be implemented by + users of libthread_db. */ + /* Addresses. */ typedef void *psaddr_t; /* Register sets. Linux has different names. */ -typedef gregset_t prgregset_t; -typedef fpregset_t prfpregset_t; +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; /* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ + therefore have only one PID type. */ typedef __pid_t lwpid_t; - +/* Process status and info. In the end we do provide typedefs for them. */ typedef struct elf_prstatus prstatus_t; typedef struct elf_prpsinfo prpsinfo_t; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/ucontext.h Fri Feb 9 10:04:32 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/ucontext.h Wed Apr 25 14:51:14 2001 @@ -23,7 +23,7 @@ #include #include -#include +#include typedef int greg_t; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/user.h glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/user.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/arm/sys/user.h Fri Sep 17 10:00:57 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/arm/sys/user.h Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 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 @@ -19,14 +19,11 @@ #ifndef _SYS_USER_H #define _SYS_USER_H 1 -#include - -/* and both define the PTRACE_* macros. - This leads to compilation problems with programs which include both - user.h and ptrace.h (eg: GDB). Do not include here. */ -#include +/* The whole purpose of this file is for GDB and GDB only. Don't read + too much into it. Don't use it for anything other than GDB unless + you know what you are doing. */ -struct user_fp +struct user_fpregs { struct fp_reg { @@ -44,9 +41,14 @@ struct user_fp unsigned int init_flag; }; +struct user_regs +{ + unsigned long int uregs[18]; +}; + struct user { - struct pt_regs regs; /* General registers */ + struct user_regs regs; /* General registers */ int u_fpvalid; /* True if math co-processor being used. */ unsigned long int u_tsize; /* Text segment size (pages). */ @@ -58,13 +60,13 @@ struct user long int signal; /* Signal that caused the core dump. */ int reserved; /* No longer used */ - struct pt_regs *u_ar0; /* help gdb to find the general registers. */ + struct user_regs *u_ar0; /* help gdb to find the general registers. */ unsigned long magic; /* uniquely identify a core file */ char u_comm[32]; /* User command that was responsible */ int u_debugreg[8]; - struct user_fp u_fp; /* Floating point registers */ - struct user_fp_struct *u_fp0; /* help gdb to find the FP registers. */ + struct user_fpregs u_fp; /* Floating point registers */ + struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */ }; #endif /* sys/user.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/bits/siginfo.h Fri Feb 9 10:04:32 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/bits/siginfo.h Mon Mar 26 20:53:35 2001 @@ -17,15 +17,17 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t +#if !defined _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t # error "Never include this file directly. Use instead" #endif #include -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 /* Type for data associated with a signal. */ typedef union sigval @@ -33,6 +35,11 @@ typedef union sigval int sival_int; void *sival_ptr; } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 # define __SI_MAX_SIZE 128 # if __WORDSIZE == 64 @@ -120,7 +127,9 @@ typedef struct siginfo signals. */ enum { - SI_SIGIO = -5, /* Sent by queued SIGIO. */ + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ # define SI_SIGIO SI_SIGIO SI_ASYNCIO, /* Sent by AIO completion. */ # define SI_ASYNCIO SI_ASYNCIO @@ -246,7 +255,8 @@ enum #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ -#if defined _SIGNAL_H && !defined __have_sigevent_t +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t # define __have_sigevent_t 1 /* Structure to transport application-defined values with signals. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/bits/stat.h Tue Aug 15 11:16:26 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/bits/stat.h Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992,95,96,97,98,99,2000,2001 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 @@ -118,10 +118,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cmsg_nxthdr.c glibc-2.2.3/sysdeps/unix/sysv/linux/cmsg_nxthdr.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cmsg_nxthdr.c Wed Nov 18 13:15:13 1998 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cmsg_nxthdr.c Mon Mar 26 20:53:35 2001 @@ -1,5 +1,5 @@ /* Return point to next ancillary data entry in message header. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2001 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 @@ -32,7 +32,7 @@ __cmsg_nxthdr (struct msghdr *mhdr, stru if ((unsigned char *) (cmsg + 1) >= ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen) || ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len) - >= ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen))) + > ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen))) /* No more entries. */ return NULL; return cmsg; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/configure glibc-2.2.3/sysdeps/unix/sysv/linux/configure --- glibc-2.2.2/sysdeps/unix/sysv/linux/configure Thu Oct 26 23:41:16 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/configure Mon Mar 26 21:53:40 2001 @@ -87,8 +87,9 @@ if test -n "$minimum_kernel"; then echo $ac_n "checking for kernel header at least $minimum_kernel""... $ac_c" 1>&6 echo "configure:89: checking for kernel header at least $minimum_kernel" >&5 decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; + abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; cat > conftest.$ac_ext < #if LINUX_VERSION_CODE < $decnum @@ -111,6 +112,10 @@ rm -f conftest* #define __LINUX_KERNEL_VERSION $decnum EOF + cat >> confdefs.h <&2; exit 1; } @@ -200,7 +205,7 @@ if test $host = $build; then ac_prefix=$ac_default_prefix fi echo $ac_n "checking for symlinks in ${ac_prefix}/include""... $ac_c" 1>&6 -echo "configure:204: checking for symlinks in ${ac_prefix}/include" >&5 +echo "configure:209: checking for symlinks in ${ac_prefix}/include" >&5 ac_message= if test -L ${ac_prefix}/include/net; then ac_message="$ac_message diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/configure.in glibc-2.2.3/sysdeps/unix/sysv/linux/configure.in --- glibc-2.2.2/sysdeps/unix/sysv/linux/configure.in Tue Oct 17 14:54:20 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/configure.in Mon Mar 26 20:53:35 2001 @@ -74,6 +74,7 @@ if test -n "$minimum_kernel"; then AC_MSG_CHECKING(for kernel header at least $minimum_kernel) changequote(,)dnl decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; + abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; changequote([,])dnl AC_EGREP_CPP([eat flaming death], [#include #if LINUX_VERSION_CODE < $decnum @@ -82,6 +83,7 @@ eat flaming death AC_MSG_RESULT($libc_minimum_kernel) if test "$libc_minimum_kernel" = ok; then AC_DEFINE_UNQUOTED(__LINUX_KERNEL_VERSION, $decnum) + AC_DEFINE_UNQUOTED(__ABI_TAG_VERSION, $abinum) else AC_MSG_ERROR([*** The available kernel headers are older than the requested *** compatible kernel version]) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/cris/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/Dist Sun Apr 8 21:30:48 2001 @@ -0,0 +1,5 @@ +clone.S +setresuid.c +setresgid.c +setfsuid.c +setfsgid.c diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/Makefile glibc-2.2.3/sysdeps/unix/sysv/linux/cris/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/Makefile Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/Makefile Sun Apr 8 21:31:00 2001 @@ -0,0 +1,8 @@ +ifeq ($(subdir),misc) +sysdep_routines += setfsgid setfsuid setresgid setresuid +endif + +ifeq ($(subdir),signal) +sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \ + rt_sigqueueinfo rt_sigaction rt_sigpending +endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/_G_config.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/_G_config.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/_G_config.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/_G_config.h Sun Apr 8 21:31:15 2001 @@ -0,0 +1,105 @@ +/* This file is needed by libio to define various configuration parameters. + These are always the same in the GNU C library. */ + +/* We have to keep a separate copy for CRIS, because we don't use thunks, + and libstdc++-v2 (which we currently use) cares. The C++ ABI is + changed totally with GCC 3.0, where we should not need a separate file. */ + +#ifndef _G_config_h +#define _G_config_h 1 + +/* Define types for libio in terms of the standard internal type names. */ + +#include +#define __need_size_t +#define __need_wchar_t +#define __need_wint_t +#define __need_NULL +#include +#ifndef _WINT_T +/* Integral type unchanged by default argument promotions that can + hold any value corresponding to members of the extended character + set, as well as at least one value that does not correspond to any + member of the extended character set. */ +# define _WINT_T +typedef unsigned int wint_t; +#endif +#define __need_mbstate_t +#include +#define _G_size_t size_t +typedef struct +{ + __off_t __pos; + __mbstate_t __state; +} _G_fpos_t; +typedef struct +{ + __off64_t __pos; + __mbstate_t __state; +} _G_fpos64_t; +#define _G_ssize_t __ssize_t +#define _G_off_t __off_t +#define _G_off64_t __off64_t +#define _G_pid_t __pid_t +#define _G_uid_t __uid_t +#define _G_wchar_t wchar_t +#define _G_wint_t wint_t +#define _G_stat64 stat64 +#include +typedef union +{ + struct __gconv_info __cd; + struct + { + struct __gconv_info __cd; + struct __gconv_step_data __data; + } __combined; +} _G_iconv_t; + +typedef int _G_int16_t __attribute__ ((__mode__ (__HI__))); +typedef int _G_int32_t __attribute__ ((__mode__ (__SI__))); +typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__))); +typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__))); + +#define _G_HAVE_BOOL 1 + + +/* These library features are always available in the GNU C library. */ +#define _G_HAVE_ATEXIT 1 +#define _G_HAVE_SYS_CDEFS 1 +#define _G_HAVE_SYS_WAIT 1 +#define _G_NEED_STDARG_H 1 +#define _G_va_list __gnuc_va_list + +#define _G_HAVE_PRINTF_FP 1 +#define _G_HAVE_MMAP 1 +#define _G_HAVE_LONG_DOUBLE_IO 1 +#define _G_HAVE_IO_FILE_OPEN 1 +#define _G_HAVE_IO_GETLINE_INFO 1 + +#define _G_IO_IO_FILE_VERSION 0x20001 + +#define _G_OPEN64 __open64 +#define _G_LSEEK64 __lseek64 +#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf) + +/* This is defined by if `st_blksize' exists. */ +#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE) + +#define _G_BUFSIZ 8192 + +/* These are the vtbl details for ELF. */ +#define _G_NAMES_HAVE_UNDERSCORE 0 +#define _G_VTABLE_LABEL_HAS_LENGTH 1 +#undef _G_USING_THUNKS +#define _G_VTABLE_LABEL_PREFIX "_vt." +#define _G_VTABLE_LABEL_PREFIX_ID _vt. + + +#if defined __cplusplus || defined __STDC__ +# define _G_ARGS(ARGLIST) ARGLIST +#else +# define _G_ARGS(ARGLIST) () +#endif + +#endif /* _G_config.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/bits/fcntl.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/bits/fcntl.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/bits/fcntl.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/bits/fcntl.h Sun Apr 8 21:31:35 2001 @@ -0,0 +1,179 @@ +/* O_*, F_*, FD_* bit values for Linux. + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 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 _FCNTL_H +# error "Never use directly; include instead." +#endif + + +#include + +/* open/fcntl - O_SYNC is only implemented on blocks devices and on files + located on an ext2 file system */ +#define O_ACCMODE 0003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 0100 /* not fcntl */ +#define O_EXCL 0200 /* not fcntl */ +#define O_NOCTTY 0400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 +#define O_NDELAY O_NONBLOCK +#define O_SYNC 010000 +#define O_FSYNC O_SYNC +#define O_ASYNC 020000 + +#ifdef __USE_GNU +# define O_DIRECT 040000 /* Direct disk access. */ +# define O_DIRECTORY 0200000 /* Must be a directory. */ +# define O_NOFOLLOW 0400000 /* Do not follow links. */ +#endif + +/* For now Linux has synchronisity options for data and read operations. + We define the symbols here but let them do the same as O_SYNC since + this is a superset. */ +#if defined __USE_POSIX199309 || defined __USE_UNIX98 +# define O_DSYNC O_SYNC /* Synchronize data. */ +# define O_RSYNC O_SYNC /* Synchronize read operations. */ +#endif + +#ifdef __USE_LARGEFILE64 +# define O_LARGEFILE 0100000 +#endif + +/* Values for the second argument to `fcntl'. */ +#define F_DUPFD 0 /* Duplicate file descriptor. */ +#define F_GETFD 1 /* Get file descriptor flags. */ +#define F_SETFD 2 /* Set file descriptor flags. */ +#define F_GETFL 3 /* Get file status flags. */ +#define F_SETFL 4 /* Set file status flags. */ +#ifndef __USE_FILE_OFFSET64 +# define F_GETLK 5 /* Get record locking info. */ +# define F_SETLK 6 /* Set record locking info (non-blocking). */ +# define F_SETLKW 7 /* Set record locking info (blocking). */ +#else +# define F_GETLK F_GETLK64 /* Get record locking info. */ +# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ +# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ +#endif +#define F_GETLK64 12 /* Get record locking info. */ +#define F_SETLK64 13 /* Set record locking info (non-blocking). */ +#define F_SETLKW64 14 /* Set record locking info (blocking). */ + +#if defined __USE_BSD || defined __USE_XOPEN2K +# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ +# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ +#endif + +#ifdef __USE_GNU +# define F_SETSIG 10 /* Set number of signal to be sent. */ +# define F_GETSIG 11 /* Get number of signal to be sent. */ +#endif + +#ifdef __USE_GNU +# define F_SETLEASE 1024 /* Set a lease. */ +# define F_GETLEASE 1025 /* Enquire what lease is active. */ +# define F_NOTIFY 1026 /* Request notfications on a directory. */ +#endif + +/* For F_[GET|SET]FL. */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ +#define F_RDLCK 0 /* Read lock. */ +#define F_WRLCK 1 /* Write lock. */ +#define F_UNLCK 2 /* Remove lock. */ + +/* For old implementation of bsd flock(). */ +#define F_EXLCK 4 /* or 3 */ +#define F_SHLCK 8 /* or 4 */ + +#ifdef __USE_BSD +/* Operations for bsd flock(), also used by the kernel implementation. */ +# define LOCK_SH 1 /* shared lock */ +# define LOCK_EX 2 /* exclusive lock */ +# define LOCK_NB 4 /* or'd with one of the above to prevent + blocking */ +# define LOCK_UN 8 /* remove lock */ +#endif + +#ifdef __USE_GNU +# define LOCK_MAND 32 /* This is a mandatory flock: */ +# define LOCK_READ 64 /* ... which allows concurrent read operations. */ +# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ +# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ +#endif + +#ifdef __USE_GNU +/* Types of directory notifications that may be requested with F_NOTIFY. */ +# define DN_ACCESS 0x00000001 /* File accessed. */ +# define DN_MODIFY 0x00000002 /* File modified. */ +# define DN_CREATE 0x00000004 /* File created. */ +# define DN_DELETE 0x00000008 /* File removed. */ +# define DN_RENAME 0x00000010 /* File renamed. */ +# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ +# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ +#endif + +struct flock + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ +#ifndef __USE_FILE_OFFSET64 + __off_t l_start; /* Offset where the lock begins. */ + __off_t l_len; /* Size of the locked area; zero means until EOF. */ +#else + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ +#endif + __pid_t l_pid; /* Process holding the lock. */ + }; + +#ifdef __USE_LARGEFILE64 +struct flock64 + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; +#endif + +/* Define some more compatibility macros to be backward compatible with + BSD systems which did not managed to hide these kernel macros. */ +#ifdef __USE_BSD +# define FAPPEND O_APPEND +# define FFSYNC O_FSYNC +# define FASYNC O_ASYNC +# define FNONBLOCK O_NONBLOCK +# define FNDELAY O_NDELAY +#endif /* Use BSD. */ + +/* Advise to `posix_fadvise'. */ +#ifdef __USE_XOPEN2K +# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ +# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ +# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ +# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ +# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/bits/mman.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/bits/mman.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/bits/mman.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/bits/mman.h Sun Apr 8 21:31:50 2001 @@ -0,0 +1,93 @@ +/* Definitions for POSIX memory map interface. Linux/CRIS version. + Copyright (C) 1997, 2000, 2001 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 _SYS_MMAN_H +# error "Never use directly; include instead." +#endif + +/* The following definitions basically come from the kernel headers. + But the kernel header is not namespace clean. */ + + +/* Protections are chosen from these bits, OR'd together. The + implementation does not necessarily support PROT_EXEC or PROT_WRITE + without PROT_READ. The only guarantees are that no writing will be + allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ + +#define PROT_READ 0x1 /* Page can be read. */ +#define PROT_WRITE 0x2 /* Page can be written. */ +#define PROT_EXEC 0x4 /* Page can be executed. */ +#define PROT_NONE 0x0 /* Page can not be accessed. */ + +/* Sharing types (must choose one and only one of these). */ +#define MAP_SHARED 0x01 /* Share changes. */ +#define MAP_PRIVATE 0x02 /* Changes are private. */ +#ifdef __USE_MISC +# define MAP_TYPE 0x0f /* Mask for type of mapping. */ +#endif + +/* Other flags. */ +#define MAP_FIXED 0x10 /* Interpret addr exactly. */ +#ifdef __USE_MISC +# define MAP_FILE 0 +# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ +# define MAP_ANON MAP_ANONYMOUS +#endif + +/* These are Linux-specific. */ +#ifdef __USE_MISC +# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ +# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ +# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ +# define MAP_LOCKED 0x2000 /* Lock the mapping. */ +# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ +#endif + +/* Flags to `msync'. */ +#define MS_ASYNC 1 /* Sync memory asynchronously. */ +#define MS_SYNC 4 /* Synchronous memory sync. */ +#define MS_INVALIDATE 2 /* Invalidate the caches. */ + +/* Flags for `mlockall'. */ +#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ +#define MCL_FUTURE 2 /* Lock all additions to address + space. */ + +/* Flags for `mremap'. */ +#ifdef __USE_GNU +# define MREMAP_MAYMOVE 1 +#endif + +/* Advice to `madvise'. */ +#ifdef __USE_BSD +# define MADV_NORMAL 0 /* No further special treatment. */ +# define MADV_RANDOM 1 /* Expect random page references. */ +# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define MADV_WILLNEED 3 /* Will need these pages. */ +# define MADV_DONTNEED 4 /* Don't need these pages. */ +#endif + +/* The POSIX people had to invent similar names for the same things. */ +#ifdef __USE_XOPEN2K +# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ +# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ +# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ +# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/bits/resource.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/bits/resource.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/bits/resource.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/bits/resource.h Sun Apr 8 21:32:15 2001 @@ -0,0 +1,209 @@ +/* Bit values & structures for resource limits. Linux/CRIS version. + Copyright (C) 1994,1996,1997,1998,1999,2000, 2001 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 _SYS_RESOURCE_H +# error "Never use directly; include instead." +#endif + +#include + +/* Transmute defines to enumerations. The macro re-definitions are + necessary because some programs want to test for operating system + features with #ifdef RUSAGE_SELF. In ISO C the reflexive + definition is a no-op. */ + +/* Kinds of resource limit. */ +enum __rlimit_resource +{ + /* Per-process CPU limit, in seconds. */ + RLIMIT_CPU = 0, +#define RLIMIT_CPU RLIMIT_CPU + + /* Largest file that can be created, in bytes. */ + RLIMIT_FSIZE = 1, +#define RLIMIT_FSIZE RLIMIT_FSIZE + + /* Maximum size of data segment, in bytes. */ + RLIMIT_DATA = 2, +#define RLIMIT_DATA RLIMIT_DATA + + /* Maximum size of stack segment, in bytes. */ + RLIMIT_STACK = 3, +#define RLIMIT_STACK RLIMIT_STACK + + /* Largest core file that can be created, in bytes. */ + RLIMIT_CORE = 4, +#define RLIMIT_CORE RLIMIT_CORE + + /* Largest resident set size, in bytes. + This affects swapping; processes that are exceeding their + resident set size will be more likely to have physical memory + taken from them. */ + RLIMIT_RSS = 5, +#define RLIMIT_RSS RLIMIT_RSS + + /* Number of open files. */ + RLIMIT_NOFILE = 7, + RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ +#define RLIMIT_NOFILE RLIMIT_NOFILE +#define RLIMIT_OFILE RLIMIT_OFILE + + /* Address space limit. */ + RLIMIT_AS = 9, +#define RLIMIT_AS RLIMIT_AS + + /* Number of processes. */ + RLIMIT_NPROC = 6, +#define RLIMIT_NPROC RLIMIT_NPROC + + /* Locked-in-memory address space. */ + RLIMIT_MEMLOCK = 8, +#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK + + /* Maximum number of file locks. */ + RLIMIT_LOCKS = 10, +#define RLIMIT_LOCKS RLIMIT_LOCKS + + RLIMIT_NLIMITS = 11, + RLIM_NLIMITS = RLIMIT_NLIMITS +#define RLIMIT_NLIMITS RLIMIT_NLIMITS +#define RLIM_NLIMITS RLIM_NLIMITS +}; + +/* Value to indicate that there is no limit. */ +#ifndef __USE_FILE_OFFSET64 +# define RLIM_INFINITY ((unsigned long int)(~0UL)) +#else +# define RLIM_INFINITY 0xffffffffffffffffuLL +#endif + +#ifdef __USE_LARGEFILE64 +# define RLIM64_INFINITY 0xffffffffffffffffuLL +#endif + +/* We can represent all limits. */ +#define RLIM_SAVED_MAX RLIM_INFINITY +#define RLIM_SAVED_CUR RLIM_INFINITY + + +/* Type for resource quantity measurement. */ +#ifndef __USE_FILE_OFFSET64 +typedef __rlim_t rlim_t; +#else +typedef __rlim64_t rlim_t; +#endif +#ifdef __USE_LARGEFILE64 +typedef __rlim64_t rlim64_t; +#endif + +struct rlimit + { + /* The current (soft) limit. */ + rlim_t rlim_cur; + /* The hard limit. */ + rlim_t rlim_max; + }; + +#ifdef __USE_LARGEFILE64 +struct rlimit64 + { + /* The current (soft) limit. */ + rlim64_t rlim_cur; + /* The hard limit. */ + rlim64_t rlim_max; + }; +#endif + +/* Whose usage statistics do you want? */ +enum __rusage_who +{ + /* The calling process. */ + RUSAGE_SELF = 0, +#define RUSAGE_SELF RUSAGE_SELF + + /* All of its terminated child processes. */ + RUSAGE_CHILDREN = -1, +#define RUSAGE_CHILDREN RUSAGE_CHILDREN + + /* Both. */ + RUSAGE_BOTH = -2 +#define RUSAGE_BOTH RUSAGE_BOTH +}; + +#define __need_timeval +#include /* For `struct timeval'. */ + +/* Structure which says how much of each resource has been used. */ +struct rusage + { + /* Total amount of user time used. */ + struct timeval ru_utime; + /* Total amount of system time used. */ + struct timeval ru_stime; + /* Maximum resident set size (in kilobytes). */ + long int ru_maxrss; + /* Amount of sharing of text segment memory + with other processes (kilobyte-seconds). */ + long int ru_ixrss; + /* Amount of data segment memory used (kilobyte-seconds). */ + long int ru_idrss; + /* Amount of stack memory used (kilobyte-seconds). */ + long int ru_isrss; + /* Number of soft page faults (i.e. those serviced by reclaiming + a page from the list of pages awaiting reallocation. */ + long int ru_minflt; + /* Number of hard page faults (i.e. those that required I/O). */ + long int ru_majflt; + /* Number of times a process was swapped out of physical memory. */ + long int ru_nswap; + /* Number of input operations via the file system. Note: This + and `ru_oublock' do not include operations with the cache. */ + long int ru_inblock; + /* Number of output operations via the file system. */ + long int ru_oublock; + /* Number of IPC messages sent. */ + long int ru_msgsnd; + /* Number of IPC messages received. */ + long int ru_msgrcv; + /* Number of signals delivered. */ + long int ru_nsignals; + /* Number of voluntary context switches, i.e. because the process + gave up the process before it had to (usually to wait for some + resource to be available). */ + long int ru_nvcsw; + /* Number of involuntary context switches, i.e. a higher priority process + became runnable or the current process used up its time slice. */ + long int ru_nivcsw; + }; + +/* Priority limits. */ +#define PRIO_MIN -20 /* Minimum priority a process can have. */ +#define PRIO_MAX 20 /* Maximum priority a process can have. */ + +/* The type of the WHICH argument to `getpriority' and `setpriority', + indicating what flavor of entity the WHO argument specifies. */ +enum __priority_which +{ + PRIO_PROCESS = 0, /* WHO is a process ID. */ +#define PRIO_PROCESS PRIO_PROCESS + PRIO_PGRP = 1, /* WHO is a process group ID. */ +#define PRIO_PGRP PRIO_PGRP + PRIO_USER = 2 /* WHO is a user ID. */ +#define PRIO_USER PRIO_USER +}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/brk.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/brk.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/brk.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/brk.c Sun Apr 8 21:32:28 2001 @@ -0,0 +1,44 @@ +/* brk system call for Linux/CRIS. + Copyright (C) 1995, 1996, 2001 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. */ + +#include +#include +#include + +/* This must be initialized data because commons can't have aliases. */ +void *__curbrk = 0; + +int +__brk (void *addr) +{ + unsigned char *newbrk; + + newbrk = (unsigned char *) INLINE_SYSCALL (brk, 1, addr); + + __curbrk = newbrk; + + if (newbrk < (unsigned char *) addr) + { + __set_errno (ENOMEM); + return -1; + } + + return 0; +} +weak_alias (__brk, brk) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/chown.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/chown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/chown.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/chown.c Sun Apr 8 21:32:41 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/clone.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/clone.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/clone.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/clone.S Sun Apr 8 21:32:55 2001 @@ -0,0 +1,88 @@ +/* Copyright (C) 2001 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. */ + +#include +#define _ERRNO_H 1 +#include + +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */ + + .syntax no_register_prefix + + .text +ENTRY (__clone) + /* Sanity check arguments: No NULL function pointers. Allow a NULL + stack pointer though; it makes the kernel allocate stack. */ + test.d r10 + beq 1f + nop + + /* We need to muck with a few registers. */ + movem r1,[sp=sp-8] + + /* Save the function pointer and argument. We can't save them + onto the new stack since it can be NULL. */ + move.d r10,r0 + move.d r13,r1 + + /* Move the other arguments into place for the system call. */ + move.d r11,r10 + move.d r12,r11 + + /* Do the system call. */ + movu.w SYS_ify (clone),r9 + break 13 + test.d r10 + beq .Lthread_start + nop + + /* Jump to error handler if we get (unsigned) -4096 .. 0xffffffff. */ + cmps.w -4096,r10 + bhs 0f + movem [sp+],r1 + + /* In parent, successful return. (Avoid using "ret" - it's a macro.) */ + Ret + nop + +.Lthread_start: + /* Terminate frame pointers here. */ + moveq 0,r8 + + /* I've told you once. */ + move.d r1,r10 + jsr r0 + + SETUP_PIC + PLTCALL (_exit) + + /* Die horribly. */ + test.d [6809] + + /* Stop the unstoppable. */ +9: + ba 9b + nop + +/* Local error handler. */ +1: + movs.w -EINVAL,r10 + /* Drop through into the ordinary error handler. */ +PSEUDO_END (__clone) + +weak_alias (__clone, clone) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/fchown.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/fchown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/fchown.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/fchown.c Sun Apr 8 21:33:08 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/fcntl.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/fcntl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/fcntl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/fcntl.c Sun Apr 8 21:33:52 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/fxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/fxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/fxstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/fxstat.c Sun Apr 8 21:34:09 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getegid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getegid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getegid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getegid.c Sun Apr 8 21:34:34 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/geteuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/geteuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/geteuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/geteuid.c Sun Apr 8 21:34:52 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getgid.c Sun Apr 8 21:35:05 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getgroups.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getgroups.c Sun Apr 8 21:35:21 2001 @@ -0,0 +1,2 @@ +/* We also have to rewrite the kernel gid_t to the user land type. */ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getresgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getresgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getresgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getresgid.c Sun Apr 8 21:35:40 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getresuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getresuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getresuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getresuid.c Sun Apr 8 21:35:56 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getrlimit.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getrlimit.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getrlimit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getrlimit.c Sun Apr 8 21:36:16 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getrlimit64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getrlimit64.c Sun Apr 8 21:36:29 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/getuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/getuid.c Sun Apr 8 21:36:48 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/lchown.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/lchown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/lchown.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/lchown.c Sun Apr 8 21:42:48 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/lockf64.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/lockf64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/lockf64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/lockf64.c Sun Apr 8 21:43:05 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/lxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/lxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/lxstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/lxstat.c Sun Apr 8 21:43:24 2001 @@ -0,0 +1,2 @@ +#include + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/mmap.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/mmap.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/mmap.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/mmap.S Sun Apr 8 21:43:42 2001 @@ -0,0 +1,68 @@ +/* Copyright (C) 1995, 96, 97, 98, 99, 2000, 2001 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. */ + +#include + +#include "kernel-features.h" + +#include + +/* Rather than dragging in yet another kernel file, , we + define it here. Provide for easy override. */ +#ifndef PAGE_SHIFT +#define PAGE_SHIFT 13 +#endif + + .syntax no_register_prefix + +/* This is __ptr_t + __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) */ + + ENTRY (__mmap) + + /* Only accept a offset (and address) being a multiple of PAGE_SIZE, + since we only pass the page part in the system call. */ + move.d [sp+4],r9 + btstq (PAGE_SHIFT - 1),r9 + bne 1f + btstq (PAGE_SHIFT - 1),r10 + + bne 1f + lsrq PAGE_SHIFT,r9 + + move [sp],mof + move srp,[sp] + move r9,srp + + movu.b SYS_ify (mmap2),r9 + break 13 + + cmps.w -4096,r10 + bhs 0f + move [sp],srp + + Ret + nop + +/* Local error handler. */ +1: + movs.w -EINVAL,r10 + /* Drop through into the ordinary error handler. */ +PSEUDO_END (__mmap) + +weak_alias (__mmap, mmap) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/mmap64.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/mmap64.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/mmap64.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/mmap64.S Sun Apr 8 21:44:45 2001 @@ -0,0 +1,91 @@ +/* Copyright (C) 2001 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. */ + +#include + +#include "kernel-features.h" + +#include + +/* Rather than dragging in yet another kernel file, , we + define it here. Provide for easy override. */ +#ifndef PAGE_SHIFT +#define PAGE_SHIFT 13 +#endif + +/* This is: __ptr_t + __mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd, + off64_t offset); */ + +/* This was done in C, but the resulting code didn't look anywhere near + nice, and mmap64 is important enough to have fast code. Rather than + fixing (the generic bits in) gcc, we make sure not to depend on it by + writing code that GCC cannot reasonably generate. */ + + .syntax no_register_prefix + +ENTRY (__mmap64) + + move [sp],mof + move.d [sp+4],r9 + + /* Only accept an offset being a multiple of PAGE_SIZE, ditto address. */ + btstq (PAGE_SHIFT - 1),r9 + bne 1f + lsrq PAGE_SHIFT,r9 + + btstq (PAGE_SHIFT - 1),r10 + bne 1f + move.d r9,[sp] + + /* We have to store the adjusted part somewhere we can "or" from. + No registers available, so let's re-use the incoming low-part + parameter location. */ + move.d [sp+8],r9 + + swapwbr r9 + /* Check if the highest bits (now the lowest bits) are zero. They + must be, since we're actually calling a system function + specifying the size in *pages* in a single dword. Thus you can + mmap64 PAGE_SIZE * 4 Gbyte. */ + btstq (PAGE_SHIFT - 1),r9 + bne 1f + swapwbr r9 + + lslq (32 - PAGE_SHIFT),r9 + or.d [sp],r9 + move srp,[sp] + move r9,srp + + movu.b SYS_ify (mmap2),r9 + break 13 + + cmps.w -4096,r10 + bhs 0f + move [sp],srp + + Ret + nop + +/* Local error handler. */ +1: + movs.w -EINVAL,r10 + /* Drop through into the ordinary error handler. */ +PSEUDO_END (__mmap64) + +weak_alias (__mmap64, mmap64) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/msgctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/msgctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/msgctl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/msgctl.c Sun Apr 8 21:45:00 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/profil-counter.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/profil-counter.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/profil-counter.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/profil-counter.h Sun Apr 8 21:45:23 2001 @@ -0,0 +1,26 @@ +/* Low-level statistical profiling support function. Linux/CRIS version. + Copyright (C) 2001 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. */ + +#include + +static void +profil_counter (int signo, struct sigcontext *scp) +{ + profil_count ((void *) scp->regs.irp); +} diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/register-dump.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/register-dump.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/register-dump.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/register-dump.h Sun Apr 8 21:45:39 2001 @@ -0,0 +1,117 @@ +/* Dump registers. + Copyright (C) 1998, 2001 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. */ + +#include +#include +#include + +/* We will print the register dump in this format: + + R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX + R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX + R8: XXXXXXXX R9: XXXXXXXX R10: XXXXXXXX R11: XXXXXXXX + R12: XXXXXXXX R13: XXXXXXXX SP: XXXXXXXX PC: XXXXXXXX +DCCR: XXXXXXXX SRP: XXXXXXXX */ + +static void +hexvalue (unsigned long int value, char *buf, size_t len) +{ + char *cp = _itoa_word (value, buf + len, 16, 0); + while (cp > buf) + *--cp = '0'; +} + +static void register_dump (int fd, struct sigcontext *ctx) +{ + char regs[18][8]; + struct iovec iov[36], *next_iov = iov; + struct pt_regs *rx = &ctx->regs; + +#define ADD_STRING(str) \ + next_iov->iov_base = (char *) (str); \ + next_iov->iov_len = strlen (str); \ + ++next_iov +#define ADD_MEM(str, len) \ + next_iov->iov_base = (str); \ + next_iov->iov_len = (len); \ + ++next_iov + + /* Generate strings of register contents. */ + hexvalue (rx->r0, regs[0], 8); + hexvalue (rx->r1, regs[1], 8); + hexvalue (rx->r2, regs[2], 8); + hexvalue (rx->r3, regs[3], 8); + hexvalue (rx->r4, regs[4], 8); + hexvalue (rx->r5, regs[5], 8); + hexvalue (rx->r6, regs[6], 8); + hexvalue (rx->r7, regs[7], 8); + hexvalue (rx->r8, regs[8], 8); + hexvalue (rx->r9, regs[9], 8); + hexvalue (rx->r10, regs[10], 8); + hexvalue (rx->r11, regs[11], 8); + hexvalue (rx->r12, regs[12], 8); + hexvalue (rx->r13, regs[13], 8); + hexvalue (ctx->usp, regs[14], 8); + hexvalue (rx->irp, regs[17], 8); + hexvalue (rx->dccr, regs[15], 8); + hexvalue (rx->srp, regs[16], 8); + + /* Generate the output. */ + ADD_STRING ("Register dump:\n\n R0: "); + ADD_MEM (regs[0], 8); + ADD_STRING (" R1: "); + ADD_MEM (regs[1], 8); + ADD_STRING (" R2: "); + ADD_MEM (regs[2], 8); + ADD_STRING (" R3: "); + ADD_MEM (regs[3], 8); + ADD_STRING ("\n R4: "); + ADD_MEM (regs[4], 8); + ADD_STRING (" R5: "); + ADD_MEM (regs[5], 8); + ADD_STRING (" R6: "); + ADD_MEM (regs[6], 8); + ADD_STRING (" R7: "); + ADD_MEM (regs[7], 8); + ADD_STRING ("\n R8: "); + ADD_MEM (regs[8], 8); + ADD_STRING (" R9: "); + ADD_MEM (regs[9], 8); + ADD_STRING (" R10: "); + ADD_MEM (regs[10], 8); + ADD_STRING (" R11: "); + ADD_MEM (regs[11], 8); + ADD_STRING ("\n R12: "); + ADD_MEM (regs[12], 8); + ADD_STRING (" R13: "); + ADD_MEM (regs[13], 8); + ADD_STRING (" SP: "); + ADD_MEM (regs[14], 8); + ADD_STRING (" PC: "); + ADD_MEM (regs[17], 8); + ADD_STRING ("\nDCCR: "); + ADD_MEM (regs[15], 8); + ADD_STRING (" SRP: "); + ADD_MEM (regs[16], 4); + + /* Write the stuff out. */ + writev (fd, iov, next_iov - iov); +} + +#define REGISTER_DUMP register_dump (fd, ctx) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/semctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/semctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/semctl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/semctl.c Sun Apr 8 21:46:05 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setegid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setegid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setegid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setegid.c Sun Apr 8 21:46:28 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/seteuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/seteuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/seteuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/seteuid.c Sun Apr 8 21:46:45 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setfsgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setfsgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setfsgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setfsgid.c Sun Apr 8 21:47:13 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setfsuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setfsuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setfsuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setfsuid.c Sun Apr 8 21:47:29 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setgid.c Sun Apr 8 21:47:52 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setgroups.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setgroups.c Sun Apr 8 21:48:09 2001 @@ -0,0 +1,2 @@ +/* We also have to rewrite the kernel gid_t to the user land type. */ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setregid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setregid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setregid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setregid.c Sun Apr 8 21:48:27 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setresgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setresgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setresgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setresgid.c Sun Apr 8 22:08:17 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setresuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setresuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setresuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setresuid.c Sun Apr 8 22:08:36 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setreuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setreuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setreuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setreuid.c Sun Apr 8 21:48:41 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setrlimit.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setrlimit.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setrlimit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setrlimit.c Sun Apr 8 21:48:56 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/setuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/setuid.c Sun Apr 8 21:49:10 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/shmctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/shmctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/shmctl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/shmctl.c Sun Apr 8 21:49:25 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/socket.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/socket.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/socket.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/socket.S Sun Apr 8 21:49:41 2001 @@ -0,0 +1,96 @@ +/* Copyright (C) 1995, 1996, 1997, 1999, 2001 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. */ + +#include +#include + +#define P(a, b) P2(a, b) +#define P2(a, b) a##b + +/* The socket-oriented system calls are handled unusally in Linux. + They are all gated through the single `socketcall' system call number. + `socketcall' takes two arguments: the first is the subcode, specifying + which socket function is being called; and the second is a pointer to + the arguments to the specific function. + + The .S files for the other calls just #define socket and #include this. + They also #define a 'number-of-arguments' word in NARGS, which + defaults to 3. */ + +#ifndef NARGS +#ifdef socket +#error NARGS not defined +#endif +#define NARGS 3 +#endif + + .syntax no_register_prefix + +#ifndef __socket +#define __socket P(__,socket) +#endif + +ENTRY(__socket) + subq NARGS*4,sp + +#if NARGS >= 2 + move.d sp,r9 + move.d r10,[r9+] +#else + move.d r10,[sp] +#endif +#if NARGS >= 2 + move.d r11,[r9+] +#endif +#if NARGS >= 3 + move.d r12,[r9+] +#endif +#if NARGS >= 4 + move.d r13,[r9+] +#endif +#if NARGS >= 5 + move.d [sp+NARGS*4],r13 + move.d r13,[r9+] +#endif +#if NARGS >= 6 + move.d [sp+NARGS*4+4],r13 + move.d r13,[r9+] +#endif +#if NARGS >= 7 + move.d [sp+NARGS*4+8],r13 + move.d r13,[r9+] +#endif +#if NARGS >= 8 + move.d [sp+NARGS*4+12],r13 + move.d r13,[r9+] +#endif +#if NARGS >= 9 +#error Too many arguments! +#endif + moveq P(SOCKOP_,socket),r10 + move.d sp,r11 + movu.w SYS_ify(socketcall),r9 + break 13 + cmps.w -4096,r10 + bhs 0f + addq NARGS*4,sp + Ret + nop +PSEUDO_END (__socket) + +weak_alias (__socket, socket) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/sys/ucontext.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/sys/ucontext.h Sun Apr 8 21:49:56 2001 @@ -0,0 +1,56 @@ +/* Copyright (C) 1998, 1999, 2000, 2001 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 _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include +#include + +#include + + +/* Type for general register. */ +typedef long int greg_t; + +/* Number of general registers. */ +#define NGREG 20 + +/* Container for all general registers. */ +typedef greg_t gregset_t[NGREG]; + +/* A placeholder type for floating-point register. */ +typedef long int fpreg_t; + +/* A placeholder; CRIS does not have any fp regs. */ +typedef unsigned long fpregset_t; + +/* A machine context is exactly a sigcontext. */ +typedef struct sigcontext mcontext_t; + +/* Userlevel context. */ +typedef struct ucontext + { + unsigned long int uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + __sigset_t uc_sigmask; + } ucontext_t; + +#endif /* sys/ucontext.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/syscall.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/syscall.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/syscall.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/syscall.S Sun Apr 8 21:50:08 2001 @@ -0,0 +1,40 @@ +/* Copyright (C) 2001 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. */ + +#include + + .syntax no_register_prefix + +/* Make syscall (callno, ...) into a system call. */ + +ENTRY (syscall) + move.d r10,r9 + move.d r11,r10 + move.d r12,r11 + move.d r13,r12 + move.d [sp],r13 + move srp,[sp] + move [sp+4],mof + move [sp+8],srp + break 13 + cmps.w -4096,r10 + bhs 0f + move [sp],srp + Ret + nop +PSEUDO_END (syscall) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/sysdep.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/sysdep.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/sysdep.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/sysdep.S Sun Apr 8 21:50:44 2001 @@ -0,0 +1,74 @@ +/* Copyright (C) 2001 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. */ + +#include + +/* Make space for the errno variable. */ + + .globl C_SYMBOL_NAME(errno) + .type C_SYMBOL_NAME(errno),@object + .lcomm C_SYMBOL_NAME(errno),4 + +weak_alias (errno, _errno) + +/* The syscall stubs jump here when they detect an error, bot for PIC and + non-PIC. */ + + .syntax no_register_prefix + +ENTRY (__syscall_error) + neg.d r10,r10 + +#ifdef _LIBC_REENTRANT + push r10 + push srp + + /* Note that __syscall_error is only visible within this library, + and no-one passes it on as a pointer, so can assume that R0 (GOT + pointer) is correctly set up. */ + PLTCALL (__errno_location) + + pop srp + pop r11 + move.d r11,[r10] + +#else /* not _LIBC_REENTRANT */ +# ifdef __PIC__ + move.d [r0+C_SYMBOL_NAME(errno:GOT)],r9 + move.d r10,[r9] +# else + move.d r10,[C_SYMBOL_NAME(errno)] +# endif +#endif /* _LIBC_REENTRANT */ + +#ifdef __PIC__ +/* PIC callers are supposed to have R0 on stack, ready for us to restore. + Callers are only allowed from within this DSO, so the GOT in r0 is the + one we want to use. + + (Don't use "ret" - it's a macro). */ + + moveq -1,r10 + Ret + pop r0 +#else + Ret + moveq -1,r10 +#endif + +END (__syscall_error) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/cris/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/sysdep.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/sysdep.h Sun Apr 8 21:50:27 2001 @@ -0,0 +1,214 @@ +/* Assembler macros for CRIS. + Copyright (C) 1999, 2001 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. */ + +#include +#include +#include +#include "config.h" + +#undef SYS_ify +#define SYS_ify(syscall_name) (__NR_##syscall_name) + + +#ifdef __ASSEMBLER__ + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +#undef SYS_ify +#define SYS_ify(syscall_name) __NR_##syscall_name + +/* ELF-like local names start with `.L'. */ +#undef L +#define L(name) .L##name + +/* Linux uses a negative return value to indicate syscall errors, + unlike most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be + negative even if the call succeeded. E.g., the `lseek' system call + might return a large offset. Therefore we must not anymore test + for < 0, but test for a real error by making sure the value in %eax + is a real error number. Linus said he will make sure the no syscall + returns a value in -1 .. -4095 as a valid result so we can safely + test with -4095. */ + +/* Syscall wrappers consist of + #include + PSEUDO (...) + ret + PSEUDO_END (...) + + which expand to the following. */ + +/* Linux takes system call arguments in registers: + syscall number R9 + arg 1 R10 + arg 2 R11 + arg 3 R12 + arg 4 R13 + arg 5 MOF + arg 6 SRP + + The compiler calls us by the C convention: + syscall number in the DO_CALL macro + arg 1 R10 + arg 2 R11 + arg 3 R12 + arg 4 R13 + arg 5 [SP] + arg 6 [SP + 4] + */ + +/* Note that we use "bhs", since we want to match + (unsigned) -4096 .. 0xffffffff. Using "ble" would match + -4096 .. -2**31. */ +#define PSEUDO(name, syscall_name, args) \ + ENTRY (name) @ \ + DOARGS_##args @ \ + movu.w SYS_ify (syscall_name),$r9 @ \ + break 13 @ \ + cmps.w -4096,$r10 @ \ + bhs 0f @ \ + nop @ \ + UNDOARGS_return_##args + +/* Ouch! We have to remember not to use "ret" in assembly-code. + ("Luckily", mnemonics are case-insensitive.) + Note that we assume usage is exactly: + PSEUDO (...) + ret + PSEUDO_END (...) + so we can put all payload into PSEUDO (except for error handling). */ + +#define ret + +#define PSEUDO_END(name) \ +0: @ \ + SETUP_PIC @ \ + PLTJUMP (syscall_error) @ \ + END (name) + +#define DOARGS_0 +#define DOARGS_1 +#define DOARGS_2 +#define DOARGS_3 +#define DOARGS_4 +#define DOARGS_5 \ + move [$sp],$mof + +/* To avoid allocating stack-space, we re-use the arg 5 (MOF) entry by + storing SRP into it. If called with too-few arguments, we will crash, + but that will happen in the general case too. */ +#define DOARGS_6 \ + DOARGS_5 @ \ + move $srp,[$sp] @ \ + move [$sp+4],$srp + +#define UNDOARGS_return_0 \ + Ret @ \ + nop + +#define UNDOARGS_return_1 UNDOARGS_return_0 +#define UNDOARGS_return_2 UNDOARGS_return_0 +#define UNDOARGS_return_3 UNDOARGS_return_0 +#define UNDOARGS_return_4 UNDOARGS_return_0 +#define UNDOARGS_return_5 UNDOARGS_return_0 + +/* We assume the following code will be "ret" and "PSEUDO_END". */ +#define UNDOARGS_return_return_6 \ + jump [$sp] + +#else /* not __ASSEMBLER__ */ + +#undef INLINE_SYSCALL +#define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + unsigned long __sys_res; \ + register unsigned long __res asm ("r10"); \ + LOAD_ARGS_c_##nr (args) \ + register unsigned long __callno asm ("r9") \ + = SYS_ify (name); \ + asm volatile (LOAD_ARGS_asm_##nr (args) \ + "break 13" \ + : "=r" (__res) \ + : ASM_ARGS_##nr (args) \ + : ASM_CLOBBER_##nr); \ + __sys_res = __res; \ + \ + if (__sys_res >= (unsigned long) -4096) \ + { \ + __set_errno (- __sys_res); \ + __sys_res = (unsigned long) -1; \ + } \ + __sys_res; \ + }) + +#define LOAD_ARGS_c_0() +#define LOAD_ARGS_asm_0() +#define ASM_CLOBBER_0 "memory" +#define ASM_ARGS_0() "r" (__callno) + +#define LOAD_ARGS_c_1(r10) \ + LOAD_ARGS_c_0() \ + register unsigned long __r10 __asm__ ("r10") = (unsigned long) (r10); +#define LOAD_ARGS_asm_1(r10) LOAD_ARGS_asm_0 () +#define ASM_CLOBBER_1 ASM_CLOBBER_0 +#define ASM_ARGS_1(r10) ASM_ARGS_0 (), "0" (__r10) + +#define LOAD_ARGS_c_2(r10, r11) \ + LOAD_ARGS_c_1(r10) \ + register unsigned long __r11 __asm__ ("r11") = (unsigned long) (r11); +#define LOAD_ARGS_asm_2(r10, r11) LOAD_ARGS_asm_1 (r10) +#define ASM_CLOBBER_2 ASM_CLOBBER_1 +#define ASM_ARGS_2(r10, r11) ASM_ARGS_1 (r10), "r" (__r11) + +#define LOAD_ARGS_c_3(r10, r11, r12) \ + LOAD_ARGS_c_2(r10, r11) \ + register unsigned long __r12 __asm__ ("r12") = (unsigned long) (r12); +#define LOAD_ARGS_asm_3(r10, r11, r12) LOAD_ARGS_asm_2 (r10, r11) +#define ASM_CLOBBER_3 ASM_CLOBBER_2 +#define ASM_ARGS_3(r10, r11, r12) ASM_ARGS_2 (r10, r11), "r" (__r12) + +#define LOAD_ARGS_c_4(r10, r11, r12, r13) \ + LOAD_ARGS_c_3(r10, r11, r12) \ + register unsigned long __r13 __asm__ ("r13") = (unsigned long) (r13); +#define LOAD_ARGS_asm_4(r10, r11, r12, r13) LOAD_ARGS_asm_3 (r10, r11, r12) +#define ASM_CLOBBER_4 ASM_CLOBBER_3 +#define ASM_ARGS_4(r10, r11, r12, r13) ASM_ARGS_3 (r10, r11, r12), "r" (__r13) + +#define LOAD_ARGS_c_5(r10, r11, r12, r13, mof) \ + LOAD_ARGS_c_4(r10, r11, r12, r13) +#define LOAD_ARGS_asm_5(r10, r11, r12, r13, mof) \ + LOAD_ARGS_asm_4 (r10, r11, r12, r13) "move %5,$mof\n\t" +#define ASM_CLOBBER_5 ASM_CLOBBER_4 +#define ASM_ARGS_5(r10, r11, r12, r13, mof) \ + ASM_ARGS_4 (r10, r11, r12, r13), "g" (mof) + +#define LOAD_ARGS_c_6(r10, r11, r12, r13, mof, srp) \ + LOAD_ARGS_c_5(r10, r11, r12, r13, mof) +#define LOAD_ARGS_asm_6(r10, r11, r12, r13, mof, srp) \ + LOAD_ARGS_asm_5(r10, r11, r12, r13, mof) \ + "move %6,$srp\n\t" +#define ASM_CLOBBER_6 ASM_CLOBBER_5, "srp" +#define ASM_ARGS_6(r10, r11, r12, r13, mof, srp) \ + ASM_ARGS_5 (r10, r11, r12, r13, mof), "g" (srp) + +#endif /* not __ASSEMBLER__ */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/vfork.S glibc-2.2.3/sysdeps/unix/sysv/linux/cris/vfork.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/vfork.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/vfork.S Sun Apr 8 21:50:57 2001 @@ -0,0 +1,26 @@ +/* Copyright (C) 1999, 2001 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. */ + +#include + +PSEUDO (__vfork, vfork, 0) + Ret + nop +PSEUDO_END (__vfork) + +weak_alias (__vfork, vfork) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/cris/xstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/cris/xstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/cris/xstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/cris/xstat.c Sun Apr 8 21:51:09 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/dl-librecon.h glibc-2.2.3/sysdeps/unix/sysv/linux/dl-librecon.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/dl-librecon.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/dl-librecon.h Thu Mar 15 23:37:04 2001 @@ -0,0 +1,49 @@ +/* Optional code to distinguish library flavours. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek , 2001. + + 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 _DL_LIBRECON_H +#define _DL_LIBRECON_H 1 + +/* Recognizing extra environment variables. */ +#define EXTRA_LD_ENVVARS \ + case 13: \ + if (memcmp (&envline[3], "ASSUME_KERNEL", 13) == 0) \ + { \ + unsigned long int i, j, osversion = 0; \ + char *p = &envline[17], *q; \ + \ + for (i = 0; i < 3; i++, p = q + 1) \ + { \ + j = __strtoul_internal (p, &q, 0, 0); \ + if (j >= 255 || p == q || (i < 2 && *q && *q != '.')) \ + { \ + osversion = 0; \ + break; \ + } \ + osversion |= j << (16 - 8 * i); \ + if (!*q) \ + break; \ + } \ + if (osversion) \ + _dl_osversion = osversion; \ + break; \ + } + +#endif /* dl-librecon.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/dl-osinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/dl-osinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/dl-osinfo.h Fri Feb 9 10:04:32 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/dl-osinfo.h Mon Mar 26 20:53:35 2001 @@ -33,7 +33,7 @@ static inline void __attribute__ ((__noreturn__)) dl_fatal (const char *str) { - _dl_sysdep_output (2, str, NULL); + _dl_dprintf (2, str); _exit (1); } #endif @@ -102,5 +102,7 @@ dl_fatal (const char *str) if (version < __LINUX_KERNEL_VERSION) \ /* Not sufficent. */ \ FATAL ("FATAL: kernel too old\n"); \ + \ + _dl_osversion = version; \ } \ } while (0) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/fd_to_filename.h glibc-2.2.3/sysdeps/unix/sysv/linux/fd_to_filename.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/fd_to_filename.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/fd_to_filename.h Mon Apr 9 17:05:16 2001 @@ -0,0 +1,46 @@ +/* Query filename corresponding to an open FD. Linux version. + Copyright (C) 2001 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. */ + +#include +#include +#include +#include + +static inline const char * +fd_to_filename (int fd) +{ + char *ret = malloc (30); + + if (ret != NULL) + { + struct stat64 st; + + *_fitoa_word (fd, __stpcpy (ret, "/proc/self/fd/"), 10, 0) = '\0'; + + /* We must make sure the file exists. */ + if (__lxstat64 (_STAT_VER, ret, &st) < 0) + { + /* /proc is not mounted or something else happened. Don't + return the file name. */ + free (ret); + ret = NULL; + } + } + return ret; +} diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/fpathconf.c glibc-2.2.3/sysdeps/unix/sysv/linux/fpathconf.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/fpathconf.c Fri Jun 9 12:17:53 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/fpathconf.c Mon Mar 26 20:53:35 2001 @@ -1,5 +1,5 @@ /* Linux specific extensions to fpathconf. - Copyright (C) 1991, 95, 96, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1991,95,96,98,99,2000,2001 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 @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -42,8 +43,14 @@ __fpathconf (fd, name) /* Determine the filesystem type. */ if (__fstatfs (fd, &fsbuf) < 0) - /* not possible, return the default value. */ - return LINUX_LINK_MAX; + { + if (errno == ENOSYS) + /* not possible, return the default value. */ + return LINUX_LINK_MAX; + + /* Some error occured. */ + return -1; + } switch (fsbuf.f_type) { diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/gai_sigqueue.c glibc-2.2.3/sysdeps/unix/sysv/linux/gai_sigqueue.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/gai_sigqueue.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/gai_sigqueue.c Sat Mar 3 10:12:52 2001 @@ -0,0 +1,58 @@ +/* Copyright (C) 2001 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. */ + +#include +#include +#include +#include +#include + +#include +#include + +#include "gai_misc.h" + +#ifdef __NR_rt_sigqueueinfo +extern int __syscall_rt_sigqueueinfo (int, int, siginfo_t *__unbounded); + + +/* Return any pending signal or wait for one for the given time. */ +int +__gai_sigqueue (sig, val, caller_pid) + int sig; + const union sigval val; + pid_t caller_pid; +{ + siginfo_t info; + + /* First, clear the siginfo_t structure, so that we don't pass our + stack content to other tasks. */ + memset (&info, 0, sizeof (siginfo_t)); + /* We must pass the information about the data in a siginfo_t value. */ + info.si_signo = sig; + info.si_code = SI_ASYNCNL; + info.si_pid = caller_pid; + info.si_uid = getuid (); + info.si_value = val; + + return INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, + sig, __ptrvalue (&info)); +} +#else +# include +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/bits/resource.h glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/bits/resource.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/bits/resource.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/bits/resource.h Wed Apr 25 13:19:39 2001 @@ -0,0 +1,209 @@ +/* Bit values & structures for resource limits. Linux/HPPA version. + Copyright (C) 1994-99, 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 _SYS_RESOURCE_H +# error "Never use directly; include instead." +#endif + +#include + +/* Transmute defines to enumerations. The macro re-definitions are + necessary because some programs want to test for operating system + features with #ifdef RUSAGE_SELF. In ISO C the reflexive + definition is a no-op. */ + +/* Kinds of resource limit. */ +enum __rlimit_resource +{ + /* Per-process CPU limit, in seconds. */ + RLIMIT_CPU = 0, +#define RLIMIT_CPU RLIMIT_CPU + + /* Largest file that can be created, in bytes. */ + RLIMIT_FSIZE = 1, +#define RLIMIT_FSIZE RLIMIT_FSIZE + + /* Maximum size of data segment, in bytes. */ + RLIMIT_DATA = 2, +#define RLIMIT_DATA RLIMIT_DATA + + /* Maximum size of stack segment, in bytes. */ + RLIMIT_STACK = 3, +#define RLIMIT_STACK RLIMIT_STACK + + /* Largest core file that can be created, in bytes. */ + RLIMIT_CORE = 4, +#define RLIMIT_CORE RLIMIT_CORE + + /* Largest resident set size, in bytes. + This affects swapping; processes that are exceeding their + resident set size will be more likely to have physical memory + taken from them. */ + RLIMIT_RSS = 5, +#define RLIMIT_RSS RLIMIT_RSS + + /* Number of open files. */ + RLIMIT_NOFILE = 7, + RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ +#define RLIMIT_NOFILE RLIMIT_NOFILE +#define RLIMIT_OFILE RLIMIT_OFILE + + /* Address space limit. */ + RLIMIT_AS = 9, +#define RLIMIT_AS RLIMIT_AS + + /* Number of processes. */ + RLIMIT_NPROC = 6, +#define RLIMIT_NPROC RLIMIT_NPROC + + /* Locked-in-memory address space. */ + RLIMIT_MEMLOCK = 8, +#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK + + /* Maximum number of file locks. */ + RLIMIT_LOCKS = 10, +#define RLIMIT_LOCKS RLIMIT_LOCKS + + RLIMIT_NLIMITS = 11, + RLIM_NLIMITS = RLIMIT_NLIMITS +#define RLIMIT_NLIMITS RLIMIT_NLIMITS +#define RLIM_NLIMITS RLIM_NLIMITS +}; + +/* Value to indicate that there is no limit. */ +#ifndef __USE_FILE_OFFSET64 +# define RLIM_INFINITY ((unsigned long int)(~0UL)) +#else +# define RLIM_INFINITY 0xffffffffffffffffuLL +#endif + +#ifdef __USE_LARGEFILE64 +# define RLIM64_INFINITY 0xffffffffffffffffuLL +#endif + +/* We can represent all limits. */ +#define RLIM_SAVED_MAX RLIM_INFINITY +#define RLIM_SAVED_CUR RLIM_INFINITY + + +/* Type for resource quantity measurement. */ +#ifndef __USE_FILE_OFFSET64 +typedef __rlim_t rlim_t; +#else +typedef __rlim64_t rlim_t; +#endif +#ifdef __USE_LARGEFILE64 +typedef __rlim64_t rlim64_t; +#endif + +struct rlimit + { + /* The current (soft) limit. */ + rlim_t rlim_cur; + /* The hard limit. */ + rlim_t rlim_max; + }; + +#ifdef __USE_LARGEFILE64 +struct rlimit64 + { + /* The current (soft) limit. */ + rlim64_t rlim_cur; + /* The hard limit. */ + rlim64_t rlim_max; + }; +#endif + +/* Whose usage statistics do you want? */ +enum __rusage_who +{ + /* The calling process. */ + RUSAGE_SELF = 0, +#define RUSAGE_SELF RUSAGE_SELF + + /* All of its terminated child processes. */ + RUSAGE_CHILDREN = -1, +#define RUSAGE_CHILDREN RUSAGE_CHILDREN + + /* Both. */ + RUSAGE_BOTH = -2 +#define RUSAGE_BOTH RUSAGE_BOTH +}; + +#define __need_timeval +#include /* For `struct timeval'. */ + +/* Structure which says how much of each resource has been used. */ +struct rusage + { + /* Total amount of user time used. */ + struct timeval ru_utime; + /* Total amount of system time used. */ + struct timeval ru_stime; + /* Maximum resident set size (in kilobytes). */ + long int ru_maxrss; + /* Amount of sharing of text segment memory + with other processes (kilobyte-seconds). */ + long int ru_ixrss; + /* Amount of data segment memory used (kilobyte-seconds). */ + long int ru_idrss; + /* Amount of stack memory used (kilobyte-seconds). */ + long int ru_isrss; + /* Number of soft page faults (i.e. those serviced by reclaiming + a page from the list of pages awaiting reallocation. */ + long int ru_minflt; + /* Number of hard page faults (i.e. those that required I/O). */ + long int ru_majflt; + /* Number of times a process was swapped out of physical memory. */ + long int ru_nswap; + /* Number of input operations via the file system. Note: This + and `ru_oublock' do not include operations with the cache. */ + long int ru_inblock; + /* Number of output operations via the file system. */ + long int ru_oublock; + /* Number of IPC messages sent. */ + long int ru_msgsnd; + /* Number of IPC messages received. */ + long int ru_msgrcv; + /* Number of signals delivered. */ + long int ru_nsignals; + /* Number of voluntary context switches, i.e. because the process + gave up the process before it had to (usually to wait for some + resource to be available). */ + long int ru_nvcsw; + /* Number of involuntary context switches, i.e. a higher priority process + became runnable or the current process used up its time slice. */ + long int ru_nivcsw; + }; + +/* Priority limits. */ +#define PRIO_MIN -20 /* Minimum priority a process can have. */ +#define PRIO_MAX 20 /* Maximum priority a process can have. */ + +/* The type of the WHICH argument to `getpriority' and `setpriority', + indicating what flavor of entity the WHO argument specifies. */ +enum __priority_which +{ + PRIO_PROCESS = 0, /* WHO is a process ID. */ +#define PRIO_PROCESS PRIO_PROCESS + PRIO_PGRP = 1, /* WHO is a process group ID. */ +#define PRIO_PGRP PRIO_PGRP + PRIO_USER = 2 /* WHO is a user ID. */ +#define PRIO_USER PRIO_USER +}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/clone.S glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/clone.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/clone.S Sat Oct 14 20:26:18 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/clone.S Wed Apr 25 14:51:14 2001 @@ -33,18 +33,18 @@ ENTRY(__clone) /* FIXME: I have no idea how profiling works on hppa. */ /* Sanity check arguments. */ - comib,<> 0,%arg0,.Lerror /* no NULL function pointers */ - ldi EINVAL,%ret0 - comib,<> 0,%arg1,.Lerror /* no NULL stack pointers */ + comib,= 0,%arg0,.Lerror /* no NULL function pointers */ + ldi -EINVAL,%ret0 + comib,= 0,%arg1,.Lerror /* no NULL stack pointers */ nop /* Save the fn ptr and arg on the new stack. */ - stwm %arg3,64(%arg1) + stwm %arg0,64(%arg1) stw %arg3,-60(%arg1) /* Do the system call */ copy %arg2,%arg0 - ble 0x100(%sr7,%r0) + ble 0x100(%sr2,%r0) ldi __NR_clone,%r20 ldi -4096,%r1 @@ -60,12 +60,12 @@ ENTRY(__clone) /* Something bad happened -- no child created */ .Lerror: b __syscall_error - nop + sub %r0,%ret0,%arg0 thread_start: /* Load up the arguments. */ ldw -60(%sp),%arg0 - ldwm -64(%sp),%r22 + ldw -64(%sp),%r22 /* Call the user's function */ bl $$dyncall,%r31 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/getdents64.c glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/getdents64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/getdents64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/getdents64.c Wed Apr 25 13:18:14 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/mmap64.c glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/mmap64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/mmap64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/mmap64.c Wed Apr 25 13:19:03 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h Sun Oct 15 11:37:53 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000, 2001 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 @@ -33,15 +33,16 @@ typedef unsigned long int greg_t; /* Number of general registers. */ -#define NGREG 42 -#define NFPREG 33 +#define NGREG 80 +#define NFPREG 32 /* Container for all general registers. */ typedef struct gregset { greg_t g_regs[32]; - greg_t sr_regs[5]; - greg_t g_pad[5]; + greg_t sr_regs[8]; + greg_t cr_regs[24]; + greg_t g_pad[16]; } gregset_t; /* Container for all FPU registers. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/syscalls.list Sat Oct 14 20:28:22 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/syscalls.list Wed Apr 25 14:51:14 2001 @@ -32,8 +32,6 @@ shutdown - shutdown i:ii __shutdown shut socket - socket i:iii __socket socket socketpair - socketpair i:iiif __socketpair socketpair -ptrace - ptrace 4 __ptrace ptrace - getresuid - getresuid i:ppp getresuid getresgid - getresgid i:ppp getresgid diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/sysdep.h Sat Oct 14 20:28:47 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/sysdep.h Wed Apr 25 14:51:14 2001 @@ -1,5 +1,5 @@ /* Assembler macros for PA-RISC. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, , August 1999. Linux/PA-RISC changes by Philipp Rumpf, , March 2000. @@ -89,13 +89,8 @@ 1: .size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name) /* If compiled for profiling, call `mcount' at the start of each function. */ -#ifdef PROF -/* The mcount code relies on a normal frame pointer being on the stack - to locate our caller, so push one just for its benefit. */ -#define CALL_MCOUNT /* XXX */ -#else +/* No, don't bother. gcc will put the call in for us. */ #define CALL_MCOUNT /* Do nothing. */ -#endif /* syscall wrappers consist of #include @@ -192,21 +187,21 @@ #undef INLINE_SYSCALL #define INLINE_SYSCALL(name, nr, args...) ({ \ - unsigned long __sys_res; \ + long __sys_res; \ { \ register unsigned long __res asm("r28"); \ LOAD_ARGS_##nr(args) \ asm volatile( \ - "ble 0x100(%%sr2, %%r0)\n\t" \ + "ble 0x100(%%sr2, %%r0)\n\t" \ " ldi %1, %%r20" \ : "=r" (__res) \ : "i" (SYS_ify(name)) ASM_ARGS_##nr \ ); \ __sys_res = __res; \ } \ - if (__sys_res >= (unsigned long)-4095) { \ + if ((unsigned long)__sys_res >= (unsigned long)-4095) { \ __set_errno(-__sys_res); \ - __sys_res == (unsigned long)-1; \ + __sys_res = -1; \ } \ __sys_res; \ }) @@ -231,7 +226,7 @@ register unsigned long __r21 __asm__("r21") = (unsigned long)r21; \ LOAD_ARGS_5(r26,r25,r24,r23,r22) -#define ASM_ARGS_0 +#define ASM_ARGS_0 #define ASM_ARGS_1 , "r" (__r26) #define ASM_ARGS_2 , "r" (__r26), "r" (__r25) #define ASM_ARGS_3 , "r" (__r26), "r" (__r25), "r" (__r24) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/umount.c glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/umount.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/hppa/umount.c Sun Oct 15 11:37:53 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/hppa/umount.c Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines , 2000. @@ -19,6 +19,8 @@ /* Since we don't have an oldumount system call, do what the kernel does down here. */ + +extern long int __umount2 (const char *name, int flags); long int __umount (const char *name) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/i386/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/Dist Tue Jan 23 14:07:26 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/Dist Sat Apr 7 14:02:40 2001 @@ -14,3 +14,4 @@ sys/procfs.h sys/reg.h sys/user.h sys/vm86.h +ucontext_i.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/dl-librecon.h glibc-2.2.3/sysdeps/unix/sysv/linux/i386/dl-librecon.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/dl-librecon.h Tue Mar 28 11:05:48 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/dl-librecon.h Mon Mar 26 20:53:35 2001 @@ -1,5 +1,5 @@ /* Optional code to distinguish library flavours. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -41,13 +41,36 @@ break; \ \ /* We print a `5' or `6' depending on the outcome. */ \ - _dl_sysdep_message (d->d_tag != DT_NULL ? "5\n" : "6\n", NULL); \ + _dl_printf (d->d_tag != DT_NULL ? "5\n" : "6\n"); \ } \ } \ while (0) /* Recognizing extra environment variables. */ #define EXTRA_LD_ENVVARS \ + case 13: \ + if (memcmp (&envline[3], "ASSUME_KERNEL", 13) == 0) \ + { \ + unsigned long int i, j, osversion = 0; \ + char *p = &envline[17], *q; \ + \ + for (i = 0; i < 3; i++, p = q + 1) \ + { \ + j = __strtoul_internal (p, &q, 0, 0); \ + if (j >= 255 || p == q || (i < 2 && *q && *q != '.')) \ + { \ + osversion = 0; \ + break; \ + } \ + osversion |= j << (16 - 8 * i); \ + if (!*q) \ + break; \ + } \ + if (osversion) \ + _dl_osversion = osversion; \ + break; \ + } \ + \ case 15: \ if (memcmp (&envline[3], "LIBRARY_VERSION", 15) == 0) \ { \ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/dl-procinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/i386/dl-procinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/dl-procinfo.h Tue Jan 23 14:07:26 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/dl-procinfo.h Mon Mar 26 20:53:35 2001 @@ -21,6 +21,8 @@ #ifndef _DL_PROCINFO_H #define _DL_PROCINFO_H 1 +#include + /* If anything should be added here check whether the size of each string is still ok with the given array size. */ extern const char _dl_x86_cap_flags[][7]; @@ -43,13 +45,13 @@ _dl_procinfo (int word) in the kernel sources. */ int i; - _dl_sysdep_message ("AT_HWCAP: ", NULL); + _dl_printf ("AT_HWCAP: "); for (i = 0; i < _DL_HWCAP_COUNT; ++i) if (word & (1 << i)) - _dl_sysdep_message (" ", _dl_x86_cap_flags[i], NULL); + _dl_printf (" %s", _dl_x86_cap_flags[i]); - _dl_sysdep_message ("\n", NULL); + _dl_printf ("\n"); return 0; } diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/get_clockfreq.c glibc-2.2.3/sysdeps/unix/sysv/linux/i386/get_clockfreq.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/get_clockfreq.c Sat Jan 6 20:35:41 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/get_clockfreq.c Wed Apr 25 14:51:14 2001 @@ -1,5 +1,5 @@ /* Get frequency of the system processor. i386/Linux version. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 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 @@ -24,14 +24,16 @@ #include -unsigned long long int +hp_timing_t __get_clockfreq (void) { /* We read the information from the /proc filesystem. It contains at least one line like cpu MHz : 497.840237 + or also + cpu MHz : 497.841 We search for this line and convert the number in an integer. */ - static unsigned long long int result; + static hp_timing_t result; int fd; /* If this function was called before, we know the result. */ @@ -54,6 +56,8 @@ __get_clockfreq (void) if (__builtin_expect (mhz != NULL, 1)) { char *endp = buf + n; + int seen_decpoint = 0; + int ndigits = 0; /* Search for the beginning of the string. */ while (mhz < endp && (*mhz < '0' || *mhz > '9') && *mhz != '\n') @@ -65,10 +69,18 @@ __get_clockfreq (void) { result *= 10; result += *mhz - '0'; + if (seen_decpoint) + ++ndigits; } + else if (*mhz == '.') + seen_decpoint = 1; ++mhz; } + + /* Compensate for missing digits at the end. */ + while (ndigits++ < 6) + result *= 10; } } diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/getcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/i386/getcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/getcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/getcontext.S Sat Apr 7 13:08:02 2001 @@ -0,0 +1,79 @@ +/* Save current context. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + +#include "ucontext_i.h" + + +ENTRY(__getcontext) + /* Load address of the context data structure. */ + movl 4(%esp), %eax + + /* Return value of getcontext. EAX is the only register whose + value is not preserved. */ + movl $0, oEAX(%eax) + + /* Save the 32-bit register values and the return address. */ + movl %ecx, oECX(%eax) + movl %edx, oEDX(%eax) + movl %edi, oEDI(%eax) + movl %esi, oESI(%eax) + movl %ebp, oEBP(%eax) + movl (%esp), %ecx + movl %ecx, oEIP(%eax) + leal 4(%esp), %ecx /* Exclude the return address. */ + movl %ecx, oESP(%eax) + movl %ebx, oEBX(%eax) + + /* Save the FS and GS segment register. */ + xorl %edx, %edx + xorl %ecx, %ecx + movw %gs, %dx + movw %fs, %cx + movl %edx, oGS(%eax) + movl %ecx, oFS(%eax) + + /* We have separate floating-point register content memory on the + stack. We use the __fpregs_mem block in the context. Set the + links up correctly. */ + leal oFPREGSMEM(%eax), %ecx + movl %ecx, oFPREGS(%eax) + /* Save the floating-point context. */ + fnstenv (%ecx) + + /* Save the current signal mask. */ + pushl %ebx + leal oSIGMASK(%eax), %edx + xorl %ecx, %ecx + movl $SIG_BLOCK, %ebx + movl $__NR_sigprocmask, %eax + int $0x80 + popl %ebx + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + + /* All done, return 0 for success. */ + xorl %eax, %eax +L(pseudo_end): + ret +PSEUDO_END(__getcontext) + +weak_alias(__getcontext, getcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/getgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/i386/getgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/getgroups.c Fri Jul 7 10:57:38 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/getgroups.c Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000, 2001 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 @@ -45,16 +45,16 @@ extern int __libc_missing_32bit_uids; int __getgroups (int n, gid_t *groups) { - if (n < 0) +#if __ASSUME_32BITUIDS > 0 + return INLINE_SYSCALL (getgroups32, 2, n, CHECK_N (groups, n)); +#else + if (__builtin_expect (n, 1) < 0) { __set_errno (EINVAL); return -1; } else { -#if __ASSUME_32BITUIDS > 0 - return INLINE_SYSCALL (getgroups32, 2, n, CHECK_N (groups, n)); -#else int i, ngids; __kernel_gid_t kernel_groups[n = MIN (n, __sysconf (_SC_NGROUPS_MAX))]; # ifdef __NR_getgroups32 @@ -77,8 +77,8 @@ __getgroups (int n, gid_t *groups) for (i = 0; i < ngids; i++) (__ptrvalue (groups))[i] = kernel_groups[i]; return ngids; -#endif } +#endif } weak_alias (__getgroups, getgroups) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/ldconfig.h glibc-2.2.3/sysdeps/unix/sysv/linux/i386/ldconfig.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/ldconfig.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/ldconfig.h Sat Mar 10 08:16:27 2001 @@ -0,0 +1,25 @@ +/* Copyright (C) 2001 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. */ + +#include + +#define SYSDEP_KNOWN_INTERPRETER_NAMES \ + { "/lib/ld-linux.so.1", FLAG_ELF_LIBC5 }, +#define SYSDEP_KNOWN_LIBRARY_NAMES \ + { "libc.so.5", FLAG_ELF_LIBC5 }, \ + { "libm.so.5", FLAG_ELF_LIBC5 }, diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/makecontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/i386/makecontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/makecontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/makecontext.S Sat Apr 7 13:08:08 2001 @@ -0,0 +1,113 @@ +/* Create new context. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + +#include "ucontext_i.h" + + +ENTRY(__makecontext) + movl 4(%esp), %eax + + /* Load the address of the function we are supposed to run. */ + movl 8(%esp), %ecx + + /* Compute the address of the stack. The information comes from + to us_stack element. */ + movl oSS_SP(%eax), %edx + movl %ecx, oEIP(%eax) + addl oSS_SIZE(%eax), %edx + + /* Put the next context on the new stack (from the uc_link + element). */ + movl oLINK(%eax), %ecx + movl %ecx, -4(%edx) + + /* Remember the number of parameters for the exit handler since + it has to remove them. We store the number in the EBX register + which the function we will call must preserve. */ + movl 12(%esp), %ecx + movl %ecx, oEBX(%eax) + + /* Make room on the new stack for the parameters. */ + negl %ecx + leal -8(%edx,%ecx,4), %edx + negl %ecx + /* Store the future stack pointer. */ + movl %edx, oESP(%eax) + + /* Copy all the parameters. */ + jecxz 2f +1: movl 12(%esp,%ecx,4), %eax + movl %eax, (%edx,%ecx,4) + decl %ecx + jnz 1b +2: + + /* If the function we call returns we must continue with the + context which is given in the uc_link element. To do this + set the return address for the function the user provides + to a little bit of helper code which does the magic (see + below). */ +#ifdef PIC + call 1f +1: popl %ecx + addl $L(exitcode)-1b, %ecx + movl %ecx, (%edx) +#else + movl $L(exitcode), (%edx) +#endif + /* 'makecontext' returns no value. */ + ret + + /* This is the helper code which gets called if a function which + is registered with 'makecontext' returns. In this case we + have to install the context listed in the uc_link element of + the context 'makecontext' manipulated at the time of the + 'makecontext' call. If the pointer is NULL the process must + terminate. */ +L(exitcode): + /* This removes the parameters passed to the function given to + 'makecontext' from the stack. EBX contains the number of + parameters (see above). */ + leal (%esp,%ebx,4), %esp + +#ifdef PIC + call 1f +1: popl %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx +#endif + popl %eax /* This is the next context. */ + testl %eax, %eax + je 2f /* If it is zero exit. */ + + pushl %eax + call JUMPTARGET(__setcontext) + /* If this returns (which can happen if the syscall fails) we'll + exit the program with the return error value (-1). */ + +2: pushl %eax + call JUMPTARGET(exit) + /* The 'exit' call should never return. In case it does cause + the process to terminate. */ + hlt +END(__makecontext) + +weak_alias(__makecontext, makecontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/readelflib.c glibc-2.2.3/sysdeps/unix/sysv/linux/i386/readelflib.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/readelflib.c Sat Sep 30 14:46:37 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/readelflib.c Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger , 1999 and Jakub Jelinek , 2000. @@ -20,29 +20,30 @@ int process_elf32_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, - size_t file_length); + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); int process_elf64_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, - size_t file_length); + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); /* Returns 0 if everything is ok, != 0 in case of error. */ int process_elf_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, size_t file_length) + unsigned int *osversion, char **soname, void *file_contents, + size_t file_length) { ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; int ret; if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, soname, file_contents, - file_length); + return process_elf32_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); else { switch (elf_header->e_machine) { case EM_IA_64: - case EM_X8664: + case EM_X86_64: break; default: error (0, 0, _("%s is for unknown machine %d.\n"), @@ -50,8 +51,8 @@ process_elf_file (const char *file_name, return 1; } - ret = process_elf64_file (file_name, lib, flag, soname, file_contents, - file_length); + ret = process_elf64_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); /* IA64/X86-64 64bit libraries are always libc.so.6+. */ if (!ret) switch (elf_header->e_machine) @@ -59,7 +60,7 @@ process_elf_file (const char *file_name, case EM_IA_64: *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; break; - case EM_X8664: + case EM_X86_64: *flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6; break; } diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/setcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/i386/setcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/setcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/setcontext.S Sat Apr 7 13:08:13 2001 @@ -0,0 +1,96 @@ +/* Install given context. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + +#include "ucontext_i.h" + + +ENTRY(__setcontext) + /* Load address of the context data structure. */ + movl 4(%esp), %eax + + /* Get the current signal mask. Note that we preserve EBX in case + the system call fails and we return from the function with an + error. */ + pushl %ebx + xorl %edx, %edx + leal oSIGMASK(%eax), %ecx + movl $SIG_SETMASK, %ebx + movl $__NR_sigprocmask, %eax + int $0x80 + popl %ebx + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + + /* EAX was modified, reload it. */ + movl 4(%esp), %eax + + /* Restore the floating-point context. Not the registers, only the + rest. */ + movl oFPREGS(%eax), %ecx + fldenv (%ecx) + + /* Restore the FS and GS segment registers. */ + movl oGS(%eax), %edx + movl oFS(%eax), %ecx + movw %dx, %gs + movw %cx, %fs + + /* Load the new stack pointer. */ + movl oESP(%eax), %ecx + /* Make room for 8 registers and the return address. We will load + the values from the stack. */ + subl $36, %ecx + + /* Move the values of all the 32-bit registers (except ESP) on + the stack. This happens in the form the 'popa' instruction + expects it. Before this block put the address of the code + to execute. */ + movl oEDI(%eax), %ebx + movl oESI(%eax), %edx + movl oEBP(%eax), %esi + movl oEBX(%eax), %edi + movl %ebx, (%ecx) + movl %edx, 4(%ecx) + movl %esi, 8(%ecx) + movl %edi, 16(%ecx) + movl oEDX(%eax), %ebx + movl oECX(%eax), %edx + movl oEAX(%eax), %esi + movl oEIP(%eax), %edi + movl %ebx, 20(%ecx) + movl %edx, 24(%ecx) + movl %esi, 28(%ecx) + movl %edi, 32(%ecx) + + /* Set the new stack address. The stack points now to the block + we put the register content in. */ + movl %ecx, %esp + /* Restore the register content. */ + popa + /* The following 'ret' will pop the addres of the code and jump + to it. */ + +L(pseudo_end): + ret +PSEUDO_END(__setcontext) + +weak_alias(__setcontext, setcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h Mon Aug 23 10:42:47 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -22,3 +22,30 @@ #define GET_PC(ctx) ((void *) ctx.eip) #define GET_FRAME(ctx) ((void *) ctx.ebp) #define GET_STACK(ctx) ((void *) ctx.esp_at_signal) +#define CALL_SIGHANDLER(handler, signo, ctx) \ +do { \ + int __tmp1, __tmp2, __tmp3, __tmp4; \ + __asm __volatile ("movl\t%%esp, %%edi\n\t" \ + "andl\t$-16, %%esp\n\t" \ + "subl\t%8, %%esp\n\t" \ + "movl\t%%edi, %c8-4(%%esp)\n\t" \ + "movl\t%1, 0(%%esp)\n\t" \ + "leal\t4(%%esp), %%edi\n\t" \ + "cld\n\t" \ + "rep\tmovsl\n\t" \ + "call\t*%0\n\t" \ + "cld\n\t" \ + "movl\t%9, %%ecx\n\t" \ + "subl\t%%edi, %%esi\n\t" \ + "leal\t4(%%esp,%%esi,1), %%edi\n\t" \ + "leal\t4(%%esp), %%esi\n\t" \ + "rep\tmovsl\n\t" \ + "movl\t%c8-4(%%esp), %%esp\n\t" \ + : "=a" (__tmp1), "=d" (__tmp2), "=S" (__tmp3), \ + "=c" (__tmp4) \ + : "0" (handler), "1" (signo), "2" (&ctx), \ + "3" (sizeof (struct sigcontext) / 4), \ + "n" ((sizeof (struct sigcontext) + 19) & ~15), \ + "i" (sizeof (struct sigcontext) / 4) \ + : "cc", "edi"); \ +} while (0) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/swapcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/i386/swapcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/swapcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/swapcontext.S Sat Apr 7 13:08:17 2001 @@ -0,0 +1,129 @@ +/* Save current context and install the given one. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + 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 + +#include "ucontext_i.h" + + +ENTRY(__swapcontext) + /* Load address of the context data structure we save in. */ + movl 4(%esp), %eax + + /* Return value of swapcontext. EAX is the only register whose + value is not preserved. */ + movl $0, oEAX(%eax) + + /* Save the 32-bit register values and the return address. */ + movl %ecx, oECX(%eax) + movl %edx, oEDX(%eax) + movl %edi, oEDI(%eax) + movl %esi, oESI(%eax) + movl %ebp, oEBP(%eax) + movl (%esp), %ecx + movl %ecx, oEIP(%eax) + leal 4(%esp), %ecx + movl %ecx, oESP(%eax) + movl %ebx, oEBX(%eax) + + /* Save the FS and GS segment register. */ + xorl %edx, %edx + xorl %ecx, %ecx + movw %gs, %dx + movw %fs, %cx + movl %edx, oGS(%eax) + movl %ecx, oFS(%eax) + + /* We have separate floating-point register content memory on the + stack. We use the __fpregs_mem block in the context. Set the + links up correctly. */ + leal oFPREGSMEM(%eax), %ecx + movl %ecx, oFPREGS(%eax) + /* Save the floating-point context. */ + fnstenv (%ecx) + + /* Load address of the context data structure we have to load. */ + movl 8(%esp), %ecx + + /* Save the current signal mask and install the new one. */ + pushl %ebx + leal oSIGMASK(%eax), %edx + leal oSIGMASK(%ecx), %ecx + movl $SIG_SETMASK, %ebx + movl $__NR_sigprocmask, %eax + int $0x80 + popl %ebx + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + + /* EAX was modified, reload it. */ + movl 8(%esp), %eax + + /* Restore the floating-point context. Not the registers, only the + rest. */ + movl oFPREGS(%eax), %ecx + fldenv (%ecx) + + /* Restore the FS and GS segment registers. */ + movl oGS(%eax), %edx + movl oFS(%eax), %ecx + movw %dx, %gs + movw %cx, %fs + + /* Load the new stack pointer. */ + movl oESP(%eax), %ecx + /* Make room for 8 registers and the return address. We will load + the values from the stack. */ + subl $36, %ecx + + /* Move the values of all the 32-bit registers (except ESP) on + the stack. This happens in the form the 'popa' instruction + expects it. Before this block put the address of the code + to execute. */ + movl oEDI(%eax), %ebx + movl oESI(%eax), %edx + movl oEBP(%eax), %esi + movl oEBX(%eax), %edi + movl %ebx, (%ecx) + movl %edx, 4(%ecx) + movl %esi, 8(%ecx) + movl %edi, 16(%ecx) + movl oEDX(%eax), %ebx + movl oECX(%eax), %edx + movl oEAX(%eax), %esi + movl oEIP(%eax), %edi + movl %ebx, 20(%ecx) + movl %edx, 24(%ecx) + movl %esi, 28(%ecx) + movl %edi, 32(%ecx) + + /* Set the new stack address. The stack points now to the block + we put the register content in. */ + movl %ecx, %esp + /* Restore the register content. */ + popa + /* The following 'ret' will pop the addres of the code and jump + to it. */ + +L(pseudo_end): + ret +PSEUDO_END(__swapcontext) + +weak_alias(__swapcontext, swapcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/i386/ucontext_i.h glibc-2.2.3/sysdeps/unix/sysv/linux/i386/ucontext_i.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/i386/ucontext_i.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/i386/ucontext_i.h Sat Apr 7 13:08:38 2001 @@ -0,0 +1,41 @@ +/* Offsets and other constants needed in the *context() function + implementation. + Copyright (C) 2001 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. */ + +#define SIG_BLOCK 0 +#define SIG_SETMASK 2 + +/* Offsets of the fields in the ucontext_t structure. */ +#define oLINK 4 +#define oSS_SP 8 +#define oSS_SIZE 16 +#define oGS 20 +#define oFS 24 +#define oEDI 36 +#define oESI 40 +#define oEBP 44 +#define oESP 48 +#define oEBX 52 +#define oEDX 56 +#define oECX 60 +#define oEAX 64 +#define oEIP 76 +#define oFPREGS 96 +#define oSIGMASK 108 +#define oFPREGSMEM 236 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/Dist Sat Jan 13 10:48:51 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/Dist Tue Mar 27 22:27:54 2001 @@ -2,6 +2,9 @@ clone.S clone2.S dl-static.c ioperm.c +__start_context.S +ucontext_i.h net/route.h sys/procfs.h sys/io.h +sys/rse.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/Makefile glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/Makefile Sat Jan 13 10:48:51 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/Makefile Mon Mar 26 20:53:35 2001 @@ -1,3 +1,11 @@ +ifeq ($(subdir),misc) +sysdep_headers += sys/rse.h +endif + +ifeq ($(subdir),stdlib) +sysdep_routines += __start_context +endif + ifeq ($(subdir),csu) CFLAGS-initfini.s += -DWEAK_GMON_START endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/__longjmp.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/__longjmp.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/__longjmp.S Fri Jun 9 17:14:40 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/__longjmp.S Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by David Mosberger-Tang . The GNU C Library is free software; you can redistribute it and/or @@ -39,16 +39,9 @@ # define pNeg p7 /* is rotate count negative? */ - .psr abi64 - .psr lsb - .lsb - /* __longjmp(__jmp_buf buf, int val) */ - .text - .align 32 - .global __longjmp - .proc __longjmp -__longjmp: + +LEAF(__longjmp) alloc r8=ar.pfs,2,1,0,0 mov r27=ar.rsc add r2=0x98,in0 // r2 <- &jmpbuf.orig_jmp_buf_addr @@ -62,12 +55,9 @@ __longjmp: sub r8=r8,in0 // r8 <- &orig_jmpbuf - &jmpbuf ;; ld8 r25=[r2] // r25 <- jmpbuf.ar_unat - shr r8=r8,3 // r8 <- (&orig_jmpbuf - &jmpbuf)/8 - ;; - and r8=0x3f,r8 + extr.u r8=r8,3,6 // r8 <- (&orig_jmpbuf - &jmpbuf)/8 & 0x3f ;; cmp.lt pNeg,pPos=r8,r0 - dep r11=r0,r11,16,14 // clear ar.rsc.loadrs mov r2=in0 ;; (pPos) mov r16=r8 @@ -117,7 +107,6 @@ __longjmp: ld8.nta r11=[r2],16 // ar.pfs ld8.nta r22=[r3],56 // ar.lc ;; - loadrs // invalidate stacked regs (must be first in insn group) ld8.nta r24=[r2],32 // pr mov b0=r16 ;; @@ -168,5 +157,4 @@ __longjmp: invala // virt. -> phys. regnum mapping may change mov pr=r24,-1 ret - .endp __longjmp - +END(__longjmp) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/__start_context.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/__start_context.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/__start_context.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/__start_context.S Fri Mar 16 13:05:56 2001 @@ -0,0 +1,51 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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 +#include + +/* When a context set up by __makecontext() is activated, control + transfers to __start_context. When we get here: + + b1 = entry point of function to call + in0 = address of UCP to resume after function returns + in1 = global pointer for __start_context + out0 .. outN = arguments for function */ + +ENTRY(__start_context) + .prologue + alloc r2 = ar.pfs, 2, 0, 8, 0 + + .save rp, r4 // terminate call chain with a NULL rp + mov r4 = r0 + ;; + + .body + br.call.sptk rp = b1 +1: + mov gp = in1 // restore gp + cmp.ne p6,p0 = in0, r0 // uc_link != 0 ? + ;; +(p6) mov out0 = in0 +(p6) br.call.sptk rp = __setcontext +.Lexit: + mov out0 = 0 + br.call.sptk rp = exit + +1: br.cond.sptk .Lexit +END(__start_context) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h Sat Jul 15 09:58:22 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h Mon Mar 26 20:53:35 2001 @@ -21,12 +21,6 @@ # error "Never use directly; include instead." #endif -#ifndef sigcontext_struct -/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but - we need sigcontext. */ -# define sigcontext_struct sigcontext -#endif - #include #include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h Fri Feb 9 10:04:35 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h Tue Apr 17 08:17:48 2001 @@ -18,13 +18,15 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t +#if !defined _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t # error "Never include this file directly. Use instead" #endif -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 /* Type for data associated with a signal. */ typedef union sigval @@ -32,6 +34,11 @@ typedef union sigval int sival_int; void *sival_ptr; } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 # define __SI_MAX_SIZE 128 # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) @@ -42,6 +49,7 @@ typedef struct siginfo int si_errno; /* If non-zero, an errno value associated with this signal, as defined in . */ int si_code; /* Signal code. */ + int __pad0; /* Explicit padding. */ union { @@ -120,7 +128,9 @@ typedef struct siginfo signals. */ enum { - SI_SIGIO = -5, /* Sent by queued SIGIO. */ + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ # define SI_SIGIO SI_SIGIO SI_ASYNCIO, /* Sent by AIO completion. */ # define SI_ASYNCIO SI_ASYNCIO @@ -276,7 +286,8 @@ enum #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ -#if defined _SIGNAL_H && !defined __have_sigevent_t +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t # define __have_sigevent_t 1 /* Structure to transport application-defined values with signals. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/stat.h Mon Sep 18 15:42:30 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/stat.h Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 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 @@ -92,10 +92,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/time.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/time.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/bits/time.h Fri Feb 9 10:04:35 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/bits/time.h Wed Apr 25 14:51:14 2001 @@ -43,10 +43,14 @@ extern long int __sysconf (int); # ifdef __USE_POSIX199309 /* Identifier for system-wide realtime clock. */ -# define CLOCK_REALTIME 0 +# define CLOCK_REALTIME 0 +/* High-resolution timer from the CPU. */ +# define CLOCK_PROCESS_CPUTIME_ID 2 +/* Thread-specific CPU-time clock. */ +# define CLOCK_THREAD_CPUTIME_ID 3 /* Flag to indicate time is absolute. */ -# define TIMER_ABSTIME 1 +# define TIMER_ABSTIME 1 # endif # endif /* bits/time.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/brk.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/brk.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/brk.S Fri Jun 9 17:10:09 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/brk.S Mon Mar 26 20:53:35 2001 @@ -1,5 +1,5 @@ /* brk system call for Linux/ia64 - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Stephane Eranian and Jes Sorensen, , April 1999. @@ -19,31 +19,26 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include + #include #include - .text - .psr abi64 - .psr lsb - .lsb .global __curbrk .data .align 8 __curbrk: data8 0 - .weak ___brk_addr -___brk_addr = __curbrk - .text - .align 16 - .global __brk - .proc __brk -__brk: + +weak_alias (__curbrk, ___brk_addr) + +LEAF(__brk) mov r15=__NR_brk break.i __BREAK_SYSCALL ;; cmp.ltu p6,p0=ret0,r32 /* r32 is the input register, even though we haven't allocated a frame */ - addl r9=@ltoff(__curbrk#),gp + addl r9=@ltoff(__curbrk),gp ;; ld8 r9=[r9] (p6) mov ret0=ENOMEM @@ -51,8 +46,7 @@ __brk: ;; st8 [r9]=ret0 mov ret0=0 - br.ret.sptk.few rp - .endp __brk + ret +END(__brk) - .weak brk -brk = __brk +weak_alias (__brk, brk) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/clone2.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/clone2.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/clone2.S Sat Jul 15 10:30:41 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/clone2.S Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -24,7 +24,8 @@ /* size_t child_stack_size, int flags, void *arg) */ ENTRY(__clone2) - cmp.eq p6,p0=0,r32 + alloc r2=ar.pfs,5,2,3,0 + cmp.eq p6,p0=0,in0 mov r8=EINVAL (p6) br.cond.spnt.few __syscall_error ;; @@ -34,28 +35,12 @@ ENTRY(__clone2) /* instructions. We need to ensure */ /* that it will not read or write the */ /* backing store. */ - mov r17=ar.rsc /* save ar.rsc */ - mov r14=r32 /* save fn */ - mov r18=r33 /* save child_stack_base */ - /* Note that r15 is used to pass */ - /* syscall # to kernel & not preserved. */ - mov r16=r36 /* save arg */ - ;; - dep r36=0,r17,0,2 /* set to enforced lazy mode. */ - ;; - mov ar.rsc=r36 - cmp.ne p7,p0=0,r33 /* stack_base 0? */ - ;; -(p7) add r33=r33,r34 /* Stack base arg to syscall is */ - /* 0 if child_stack_base is 0, */ - /* child_stack_base + child_stack_size */ - /* otherwise. */ - /* The system call interface seems */ - /* quite contrived at this point. If */ - /* we don't pass the backing store */ - /* pointer, why do we pass the sp? */ - mov r32=r35 /* Flags are first syscall argument. */ - DO_CALL (SYS_ify (clone)) + mov loc0=in0 /* save fn */ + mov loc1=in4 /* save arg */ + mov out0=in3 /* Flags are first syscall argument. */ + mov out1=in1 /* Stack address. */ + mov out2=in2 /* Stack size. */ + DO_CALL (SYS_ify (clone2)) cmp.eq p6,p0=-1,r10 ;; (p6) br.cond.spnt.few __syscall_error @@ -64,18 +49,16 @@ ENTRY(__clone2) # define PARENT p7 cmp.eq CHILD,PARENT=0,r8 /* Are we the child? */ ;; -(CHILD) ld8 r34=[r14],8 /* Retrieve code pointer. */ -(CHILD) mov ar.bspstore=r18 /* Set register backing store in the child */ -(CHILD) mov r32=r16 /* Pass proper argument to fn */ - mov ar.rsc=r17 /* Restore RSE mode (both threads). */ +(CHILD) ld8 out1=[loc0],8 /* Retrieve code pointer. */ +(CHILD) mov out0=loc1 /* Pass proper argument to fn */ (PARENT) ret ;; - ld8 gp=[r14] /* Load function gp. */ - mov b6=r34 + ld8 gp=[loc0] /* Load function gp. */ + mov b6=out1 ;; br.call.dptk.few rp=b6 /* Call fn(arg) in the child */ ;; - mov r32=r8 /* Argument to _exit */ + mov out0=r8 /* Argument to _exit */ .globl _exit br.call.dpnt.few rp=_exit /* call _exit with result from fn. */ ret /* Not reached. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c Mon Apr 23 11:58:59 2001 @@ -0,0 +1,89 @@ +/* Get frequency of the system processor. IA-64/Linux version. + Copyright (C) 2001 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. */ + +#include +#include +#include +#include +#include + + +hp_timing_t +__get_clockfreq (void) +{ + /* We read the information from the /proc filesystem. It contains at + least one line like + itc MHz : 733.390988 + We search for this line and convert the number in an integer. */ + static hp_timing_t result; + int fd; + + /* If this function was called before, we know the result. */ + if (result != 0) + return result; + + fd = open ("/proc/cpuinfo", O_RDONLY); + if (__builtin_expect (fd != -1, 1)) + { + /* XXX AFAIK the /proc filesystem can generate "files" only up + to a size of 4096 bytes. */ + char buf[4096]; + ssize_t n; + + n = read (fd, buf, sizeof buf); + if (__builtin_expect (n, 1) > 0) + { + char *mhz = memmem (buf, n, "itc MHz", 7); + + if (__builtin_expect (mhz != NULL, 1)) + { + char *endp = buf + n; + int seen_decpoint = 0; + int ndigits = 0; + + /* Search for the beginning of the string. */ + while (mhz < endp && (*mhz < '0' || *mhz > '9') && *mhz != '\n') + ++mhz; + + while (mhz < endp && *mhz != '\n') + { + if (*mhz >= '0' && *mhz <= '9') + { + result *= 10; + result += *mhz - '0'; + if (seen_decpoint) + ++ndigits; + } + else if (*mhz == '.') + seen_decpoint = 1; + + ++mhz; + } + + /* Compensate for missing digits at the end. */ + while (ndigits++ < 6) + result *= 10; + } + } + + close (fd); + } + + return result; +} diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/getcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/getcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/getcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/getcontext.S Sat Apr 7 14:02:40 2001 @@ -0,0 +1,152 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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 +#include + +#include "ucontext_i.h" + +/* __getcontext (ucontext_t *ucp) + + Saves the machine context in UCP such that when it is activated, + it appears as if __getcontext() returned again. The only difference + is that on a first return, r9 contains 1 and on a subsequent + return, it contains 0. + + This implementation in intended to be used for *synchronous* context + switches only. Therefore, it does not have to save anything + other than the PRESERVED state. */ + +ENTRY(__getcontext) + alloc r16 = ar.pfs, 1, 0, 3, 0 + + // sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask): + + mov r2 = SC_MASK + mov r15 = __NR_rt_sigprocmask + ;; + mov out0 = SIG_BLOCK + mov out1 = 0 + add out2 = r2, in0 + + break __BREAK_SYSCALL + flushrs // save dirty partition on rbs + + mov.m rFPSR = ar.fpsr + mov.m rRSC = ar.rsc + add r2 = SC_GR+1*8, r32 + ;; + mov.m rBSP = ar.bsp + mov.m rUNAT = ar.unat + add r3 = SC_GR+4*8, r32 + ;; + +.mem.offset 0,0; st8.spill [r2] = r1, (5*8 - 1*8) +.mem.offset 8,0; st8.spill [r3] = r4, 16 + mov.i rPFS = ar.pfs + ;; +.mem.offset 0,0; st8.spill [r2] = r5, 16 +.mem.offset 8,0; st8.spill [r3] = r6, 48 + and rTMP = ~0x3, rRSC + ;; + st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8)) + st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8)) + ;; + mov.m ar.rsc = rTMP // put RSE into enforced lazy mode + mov.m rNAT = ar.unat + mov.i rLC = ar.lc + ;; + mov.m rRNAT = ar.rnat + mov.m ar.rsc = rRSC // restore RSE mode + mov rPR = pr + + /* + * Rotate NaT bits by rPOS positions to the right: + */ + stf.spill [r2] = f2, 32 + stf.spill [r3] = f3, 32 + add rPOS = SC_GR, r32 // rPOS <- &sc_gr[0] + ;; + stf.spill [r2] = f4, (16*16-4*16) + stf.spill [r3] = f5, (17*16-5*16) + extr.u rPOS = rPOS, 3, 6 // get NaT bit number for r0 + ;; + stf.spill [r2] = f16, 32 + stf.spill [r3] = f17, 32 + sub rCPOS = 64, rPOS + ;; + stf.spill [r2] = f18, 32 + stf.spill [r3] = f19, 32 + shr.u rTMP = rNAT, rPOS + ;; + stf.spill [r2] = f20, 32 + stf.spill [r3] = f21, 32 + shl rNAT = rNAT, rCPOS + ;; + stf.spill [r2] = f22, 32 + stf.spill [r3] = f23, 32 + or rNAT = rNAT, rTMP + ;; + stf.spill [r2] = f24, 32 + stf.spill [r3] = f25, 32 + mov r8 = 0 + ;; + stf.spill [r2] = f26, 32 + stf.spill [r3] = f27, 32 + mov r9 = 1 + ;; + stf.spill [r2] = f28, 32 + stf.spill [r3] = f29, 32 + mov rB0 = b0 + ;; + stf.spill [r2] = f30, 32 + stf.spill [r3] = f31, 32 + mov rB1 = b1 + ;; + add r2 = SC_NAT, r32 + nop 0 + add r3 = SC_BSP, r32 + ;; + st8 [r2] = rNAT, (SC_RNAT-SC_NAT) + st8 [r3] = rBSP, (SC_UNAT-SC_BSP) + mov rB2 = b2 + ;; + st8 [r2] = rRNAT, (SC_FPSR-SC_RNAT) + st8 [r3] = rUNAT, (SC_PFS-SC_UNAT) + mov rB3 = b3 + ;; + st8 [r2] = rFPSR, (SC_LC-SC_FPSR) + st8 [r3] = rPFS, (SC_PR-SC_PFS) + mov rB4 = b4 + ;; + st8 [r2] = rLC, (SC_BR+0*8-SC_LC) + st8 [r3] = rPR, (SC_BR+1*8-SC_PR) + mov rB5 = b5 + + st8 [r2] = rB0, 16 + st8 [r3] = rB1, 16 + ;; + st8 [r3] = rB2, 16 + st8 [r3] = rB3, 16 + ;; + st8 [r2] = rB4 + st8 [r3] = rB5 + ret +END(__getcontext) + +weak_alias(__getcontext, getcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/ioperm.c glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/ioperm.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/ioperm.c Fri Feb 9 10:04:35 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/ioperm.c Mon Mar 26 20:53:35 2001 @@ -60,7 +60,10 @@ io_offset (unsigned long int port) int _ioperm (unsigned long int from, unsigned long int num, int turn_on) { +#if 0 unsigned long int addr, len, base; +#endif + unsigned long int base; int prot; /* this test isn't as silly as it may look like; consider overflows! */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/ldconfig.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/ldconfig.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/ldconfig.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/ldconfig.h Sat Mar 10 08:17:03 2001 @@ -0,0 +1,25 @@ +/* Copyright (C) 2001 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. */ + +#include + +#define SYSDEP_KNOWN_INTERPRETER_NAMES \ + { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, +#define SYSDEP_KNOWN_LIBRARY_NAMES \ + { "libc.so.6", FLAG_ELF_LIBC6 }, \ + { "libm.so.6", FLAG_ELF_LIBC6 }, diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/makecontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/makecontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/makecontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/makecontext.c Sat Apr 7 14:02:40 2001 @@ -0,0 +1,93 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang . + + 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 +#include +#include +#include +#include +#include + + +struct fdesc + { + unsigned long ip; + unsigned long gp; + }; + +#define PUSH(val) \ +do { \ + if (ia64_rse_is_rnat_slot (rbs)) \ + *rbs++ = 0; \ + *rbs++ = (val); \ +} while (0) + + +/* This implementation can handle an ARGC value of at most 8 and + values can be passed only in integer registers (r32-r39). */ + +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + struct sigcontext *sc = &ucp->uc_mcontext; + extern void __start_context (ucontext_t *link, long gp, ...); + unsigned long stack_start, stack_end; + va_list ap; + long *rbs; + int i; + + stack_start = (long) sc->sc_stack.ss_sp; + stack_end = (long) sc->sc_stack.ss_sp + sc->sc_stack.ss_size; + + stack_start = (stack_start + 7) & -8; + stack_end = stack_end & -16; + + if (argc > 8) + { + fprintf (stderr, _("\ +makecontext: does not know how to handle more than 8 arguments\n")); + exit (-1); + } + + /* set the entry point and global pointer: */ + sc->sc_br[0] = ((struct fdesc *) &__start_context)->ip; + sc->sc_br[1] = ((struct fdesc *) func)->ip; + sc->sc_gr[1] = ((struct fdesc *) func)->gp; + + /* set up the call frame: */ + sc->sc_ar_pfs = ((sc->sc_ar_pfs & ~0x3fffffffffUL) + | (argc + 2) | ((argc + 2) << 7)); + rbs = (long *) stack_start; + PUSH((long) ucp->uc_link); + PUSH(((struct fdesc *) &__start_context)->gp); + va_start (ap, argc); + for (i = 0; i < argc; ++i) + PUSH(va_arg (ap, long)); + va_end (ap); + + /* set the memory and register stack pointers: */ + sc->sc_ar_bsp = (long) rbs; + sc->sc_gr[12] = stack_end - 16; + + /* clear the NaT bits for r1 and r12: */ + sc->sc_nat &= ~((1 << 1) | (1 << 12)); + sc->sc_ar_rnat = 0; +} + +weak_alias (__makecontext, makecontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/readelflib.c glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/readelflib.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/readelflib.c Fri Sep 29 15:42:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/readelflib.c Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -18,25 +18,28 @@ int process_elf32_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, size_t file_length); + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); int process_elf64_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, size_t file_length); + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); /* Returns 0 if everything is ok, != 0 in case of error. */ int process_elf_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, size_t file_length) + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length) { ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; int ret; if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, soname, file_contents, - file_length); + return process_elf32_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); else { - ret = process_elf64_file (file_name, lib, flag, soname, file_contents, - file_length); + ret = process_elf64_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); /* Intel 64bit libraries are always libc.so.6+. */ if (!ret) *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/setcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/setcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/setcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/setcontext.S Sat Apr 7 14:02:40 2001 @@ -0,0 +1,150 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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 +#include + +#include "ucontext_i.h" + +/* __setcontext (const ucontext_t *ucp) + + Restores the machine context in UCP and thereby resumes execution + in that context. + + This implementation in intended to be used for *synchronous* context + switches only. Therefore, it does not have to restore anything + other than the PRESERVED state. */ + +ENTRY(__setcontext) + alloc r16 = ar.pfs, 1, 0, 3, 0 + + // sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL): + + mov r2 = SC_MASK + mov r15 = __NR_rt_sigprocmask + ;; + mov out0 = SIG_SETMASK + add out1 = r2, in0 + mov out2 = 0 + + invala + break __BREAK_SYSCALL + add r2 = SC_NAT, r32 + + add r3 = SC_RNAT, r32 // r3 <- &sc_ar_rnat + add rPOS = SC_GR, r32 // rPOS <- &sc_gr[0] + ;; + ld8 rNAT = [r2], (SC_BSP-SC_NAT) + extr.u rPOS = rPOS, 3, 6 // get NaT bit number for r0 + ;; + ld8 rBSP = [r2], (SC_UNAT-SC_BSP) + ld8 rRNAT = [r3], (SC_FPSR-SC_RNAT) + /* + * Rotate NaT bits by rPOS positions to the left: + */ + sub rCPOS = 64, rPOS + ;; + ld8 rUNAT = [r2], (SC_PFS-SC_UNAT) + ld8 rFPSR = [r3], (SC_LC-SC_FPSR) + shl rTMP = rNAT, rPOS + ;; + ld8 rPFS = [r2], (SC_PR-SC_PFS) + ld8 rLC = [r3], (SC_BR+0*8-SC_LC) + shr.u rNAT = rNAT, rCPOS + ;; + ld8 rPR = [r2], (SC_BR+1*8-SC_PR) + ld8 rB0 = [r3], 16 + or rNAT = rNAT, rTMP + ;; + ld8 rB1 = [r2], 16 + ld8 rB2 = [r3], 16 + ;; + mov.m ar.unat = rNAT + mov.m rRSC = ar.rsc + ;; + ld8 rB3 = [r2], 16 + ld8 rB4 = [r3], (SC_GR+1*8-(SC_BR+4*8)) + ;; + ld8 rB5 = [r2], (SC_GR+4*8-(SC_BR+5*8)) + ld8.fill r1 = [r3], (5*8 - 1*8) + ;; + ld8.fill r4 = [r2], 16 + ld8.fill r5 = [r3], 16 + mov b0 = rB0 + ;; + ld8.fill r6 = [r2], 48 + ld8.fill r7 = [r3], (SC_FR+2*16-(SC_GR+7*8)) + ;; + ld8.fill sp = [r2], (SC_FR+3*16-(SC_GR+12*8)) + mov.m ar.fpsr = rFPSR + mov.i ar.pfs = rPFS + ;; + ldf.fill f3 = [r2], 16 + ldf.fill f2 = [r3], 48 + mov b1 = rB1 + ;; + ldf.fill f4 = [r2], (16*16-4*16) + ldf.fill f5 = [r3], (17*16-5*16) + mov b2 = rB2 + ;; + ldf.fill f16 = [r2], 32 + ldf.fill f17 = [r3], 32 + mov b3 = rB3 + ;; + ldf.fill f18 = [r2], 32 + ldf.fill f19 = [r3], 32 + mov b4 = rB4 + ;; + ldf.fill f20 = [r2], 32 + ldf.fill f21 = [r3], 32 + mov b5 = rB5 + ;; + ldf.fill f22 = [r2], 32 + ldf.fill f23 = [r3], 32 + mov r8 = 0 + ;; + ldf.fill f24 = [r2], 32 + ldf.fill f25 = [r3], 32 + mov r9 = 0 + ;; + ldf.fill f26 = [r2], 32 + ldf.fill f27 = [r3], 32 + dep rTMP = 0, rRSC, 16, 14 // clear ar.rsc.loadrs + ;; + ldf.fill f28 = [r2], 32 + ldf.fill f29 = [r3], 32 + and rTMP = ~0x3, rTMP // clear ar.rsc.mode + ;; + ldf.fill f30 = [r2], 32 + ldf.fill f31 = [r3], 32 + mov pr = rPR, -1 + ;; + mov.m ar.rsc = rTMP // put RSE into enforced lazy mode + ;; + loadrs // drop dirty partition + ;; + mov.m ar.bspstore = rBSP + mov.m ar.unat = rUNAT + mov.i ar.lc = rLC + ;; + mov.m ar.rnat = rRNAT + mov.m ar.rsc = rRSC + ret +END(__setcontext) + +weak_alias(__setcontext, setcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/setjmp.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/setjmp.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/setjmp.S Wed Nov 22 11:00:03 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/setjmp.S Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by David Mosberger-Tang . The GNU C Library is free software; you can redistribute it and/or @@ -19,7 +19,7 @@ The layout of the jmp_buf is as follows. This is subject to change and user-code should never depend on the particular layout of jmp_buf! - + offset: description: ------- ------------ @@ -67,34 +67,25 @@ #include #include - .text - .psr abi64 - .psr lsb - .lsb - /* The following two entry points are the traditional entry points: */ - .global setjmp - .proc setjmp -setjmp: alloc r8=ar.pfs,2,0,0,0 +LEAF(setjmp) + alloc r8=ar.pfs,2,0,0,0 mov in1=1 br.cond.sptk.many __sigsetjmp - .endp setjmp +END(setjmp) - .global _setjmp - .proc _setjmp -_setjmp: +LEAF(_setjmp) alloc r8=ar.pfs,2,0,0,0 mov in1=0 br.cond.sptk.many __sigsetjmp - .endp _setjmp +END(_setjmp) /* __sigsetjmp(__jmp_buf buf, int savemask) */ - .align 32 - .global __sigsetjmp - .proc __sigsetjmp -__sigsetjmp: - alloc loc0=ar.pfs,2,2,2,0 + +ENTRY(__sigsetjmp) + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) + alloc loc1=ar.pfs,2,2,2,0 mov r16=ar.unat ;; mov r17=ar.fpsr @@ -114,7 +105,8 @@ __sigsetjmp: ;; stf.spill.nta [r8]=f2,32 stf.spill.nta [r9]=f3,32 - mov loc1=rp + mov loc0=rp + .body ;; stf.spill.nta [r8]=f4,32 stf.spill.nta [r9]=f5,32 @@ -157,7 +149,7 @@ __sigsetjmp: mov r25=ar.unat mov out0=in0 - st8.nta [r2]=loc1,16 // b0 + st8.nta [r2]=loc0,16 // b0 st8.nta [r3]=r17,16 // b1 mov out1=in1 ;; @@ -167,7 +159,7 @@ __sigsetjmp: st8.nta [r2]=r20,16 // b4 st8.nta [r3]=r21,16 // b5 ;; - st8.nta [r2]=loc0,16 // ar.pfs + st8.nta [r2]=loc1,16 // ar.pfs st8.nta [r3]=r22,16 // ar.lc ;; st8.nta [r2]=r24,16 // pr @@ -178,10 +170,10 @@ __sigsetjmp: br.call.dpnt.few rp=__sigjmp_save .ret0: // force a new bundle ::q mov r8=0 - mov rp=loc1 - mov ar.pfs=loc0 + mov rp=loc0 + mov ar.pfs=loc1 ret - .endp __sigsetjmp +END(__sigsetjmp) weak_extern(_setjmp) weak_extern(setjmp) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/swapcontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/swapcontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/swapcontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/swapcontext.c Fri Mar 16 13:46:37 2001 @@ -0,0 +1,40 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang . + + 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 + +struct rv + { + long retval; + long first_return; + }; + +extern struct rv __getcontext (ucontext_t *__ucp) __THROW; +extern int __setcontext (__const ucontext_t *__ucp) __THROW; + +int +__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) +{ + struct rv rv = __getcontext (oucp); + if (rv.first_return) + __setcontext (ucp); + return 0; +} + +weak_alias (__swapcontext, swapcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sys/rse.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sys/rse.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sys/rse.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sys/rse.h Fri Mar 16 13:02:53 2001 @@ -0,0 +1,78 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang . + + 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 _ia64_rse_h +#define _ia64_rse_h + +#include + +/* Register stack engine related helper functions. This file may be + used in applications, so be careful about the name-space and give + some consideration to non-GNU C compilers (though __inline is + fine). */ + +static __inline unsigned long +ia64_rse_slot_num (unsigned long *addr) +{ + return (((unsigned long) addr) >> 3) & 0x3f; +} + +/* Return TRUE if ADDR is the address of an RNAT slot. */ + +static __inline unsigned long +ia64_rse_is_rnat_slot (unsigned long *addr) +{ + return ia64_rse_slot_num (addr) == 0x3f; +} + +/* Returns the address of the RNAT slot that covers the slot at + address SLOT_ADDR. */ + +static __inline unsigned long * +ia64_rse_rnat_addr (unsigned long *slot_addr) +{ + return (unsigned long *) ((unsigned long) slot_addr | (0x3f << 3)); +} + +/* Calcuate the number of registers in the dirty partition starting at + BSPSTORE with a size of DIRTY bytes. This isn't simply DIRTY + divided by eight because the 64th slot is used to store ar.rnat. */ + +static __inline unsigned long +ia64_rse_num_regs (unsigned long *bspstore, unsigned long *bsp) +{ + unsigned long slots = (bsp - bspstore); + + return slots - (ia64_rse_slot_num(bspstore) + slots)/0x40; +} + +/* The inverse of the above: given bspstore and the number of + registers, calculate ar.bsp. */ + +static __inline unsigned long * +ia64_rse_skip_regs (unsigned long *addr, long num_regs) +{ + long delta = ia64_rse_slot_num(addr) + num_regs; + + if (num_regs < 0) + delta -= 0x3e; + return addr + num_regs + delta/0x3f; +} + +#endif /* _ia64_rse_h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h Wed Aug 2 14:53:15 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 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 @@ -24,48 +24,40 @@ #include -typedef struct -{ - /* Place-holder for interrupt collection state. */ - long int ics_placeholder[15]; - unsigned long int ar_fpsr; /* Floating point status. */ - unsigned long int gp; /* Global data pointer (gr1). */ - /* scratch registers: */ - unsigned long int gr8, gr9, gr10, gr11, gr13, gr14, gr15; - unsigned long int gr16, gr17, gr18, gr19, gr20, gr21, gr22, gr23; - unsigned long int gr24, gr25, gr26, gr27, gr28, gr29, gr30, gr31; - unsigned long int ar_unat; - unsigned long int ar_ec; - unsigned long int ar_ccv; - /* RSE state: */ - unsigned long int ar_bsp_base; /* Location of RSE spill area. */ - unsigned long int ar_pfs; - unsigned long int ar_rsc; - unsigned long int ar_bspstore; - unsigned long int ar_rnat; - /* Misc. state: */ - unsigned long int dirty; /* BSP - BSPSTORE */ - unsigned long int cr_tpr; /* Hw interrupt mask register. */ - unsigned long int tpdp; /* thread private data pointer. */ - unsigned long int br_6, br_7; - /* Argument regs (gr32-gr39): */ - unsigned long int arg0, arg1, arg2, arg3; - unsigned long int arg4, arg5, arg6, arg7; - unsigned long int ss_flags; /* Save state flags. */ - unsigned long int br_1, br_2, br_3, br_4, br_5; /* Branch registers. */ - unsigned long int p_regs; /* Predicates. */ -} mcontext_t; +/* + * These are here mostly for backwards compatibility with older Unices. + * IA-64 Linux does not distinguish between "struct sigcontext" and + * "ucontext_t" as all the necessary info is inside the former. + */ + +typedef struct sigcontext mcontext_t; +#ifdef __GNUC__ +# define _SC_GR0_OFFSET \ + (((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0) +#else +# define _SC_GR0_OFFSET 0xc8 /* pray that this is correct... */ +#endif typedef struct ucontext -{ - mcontext_t uc_mcontext; /* saved machine state */ - int uc_spares[8]; /* room to grow... */ - unsigned int uc_created_by_getcontext: 1; - unsigned int uc_reserved_flags: 31; - struct ucontext *uc_link; - __sigset_t uc_sigmask; - stack_t uc_stack; -} ucontext_t; + { + union + { + mcontext_t _mc; + struct + { + unsigned long _pad[_SC_GR0_OFFSET/8]; + struct ucontext *_link; /* this should overlay sc_gr[0] */ + } + _uc; + } + _u; + } +ucontext_t; + +#define uc_mcontext _u._mc +#define uc_sigmask _u._mc.sc_sigmask +#define uc_stack _u._mc.sc_stack +#define uc_link _u._uc._link #endif /* sys/ucontext.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/syscalls.list Thu Feb 15 14:08:44 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/syscalls.list Thu Apr 26 20:07:24 2001 @@ -79,3 +79,6 @@ s_stat xstat stat i:sp __syscall_stat s_lstat lxstat lstat i:sp __syscall_lstat s_fstat fxstat fstat i:ip __syscall_fstat s_sysctl sysctl _sysctl i:p __syscall__sysctl + +# IA-64 specific +getunwind EXTRA getunwind i:pi getunwind diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sysdep.S glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sysdep.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sysdep.S Sun Oct 8 17:05:08 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sysdep.S Mon Mar 26 20:53:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by David Mosberger-Tang . The GNU C Library is free software; you can redistribute it and/or @@ -19,10 +19,6 @@ #include #include - .psr abi64 - .psr lsb - .lsb - .global errno .common errno,4,4 .type errno, @object @@ -34,16 +30,11 @@ __errno = errno .global _errno _errno = errno - .text - - .align 8 - - .global __syscall_error - .proc __syscall_error -__syscall_error: +ENTRY(__syscall_error) #ifdef _LIBC_REENTRANT + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0) alloc r35=ar.pfs, 0, 4, 0, 0 - mov r32=b0 + mov r32=rp mov r33=r8 mov r34=r1 ;; @@ -51,7 +42,7 @@ __syscall_error: .Lret0: /* force new bundle */ st4 [r8]=r33 mov r1=r34 - mov b0=r32 + mov rp=r32 mov r8=-1 mov ar.pfs=r35 #else /* _LIBC_REENTRANT */ @@ -71,8 +62,7 @@ __syscall_error: st4 [r2]=r3 #endif /* _LIBC_REENTRANT */ ret // ret is #define'd in syscall.h! - .endp __syscall_error - +END(__syscall_error) ENTRY(__ia64_syscall) mov r15=r37 /* syscall number */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/sysdep.h Sun Oct 8 17:05:08 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/sysdep.h Mon Mar 26 20:53:35 2001 @@ -36,16 +36,20 @@ #undef CALL_MCOUNT #ifdef PROF -# define CALL_MCOUNT \ - .data; \ -1: data8 0; \ - .previous; \ - alloc out0 = ar.pfs, 8, 0, 4, 0; \ - mov out1 = gp; \ - mov out2 = rp; \ - ;; \ - addl out3 = @ltoff(1b), gp; \ - br.call.sptk.many rp = _mcount \ +# define CALL_MCOUNT \ + .data; \ +1: data8 0; /* XXX fixme: use .xdata8 once labels work */ \ + .previous; \ + .prologue; \ + .save ar.pfs, r40; \ + alloc out0 = ar.pfs, 8, 0, 4, 0; \ + mov out1 = gp; \ + .save rp, out2; \ + mov out2 = rp; \ + .body; \ + ;; \ + addl out3 = @ltoff(1b), gp; \ + br.call.sptk.many rp = _mcount \ ;; #else # define CALL_MCOUNT /* Do nothing. */ @@ -71,17 +75,6 @@ DO_CALL (SYS_ify(syscall_name)); \ cmp.eq p6,p0=-1,r10;; \ (p6) br.cond.spnt.few __syscall_error; - -#define ENTRY(name) \ - .psr abi64; \ - .psr lsb; \ - .lsb; \ - .text; \ - .align 32; \ - .proc C_SYMBOL_NAME(name); \ - .global C_SYMBOL_NAME(name); \ - C_LABEL(name) \ - CALL_MCOUNT #define DO_CALL(num) \ mov r15=num; \ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/ucontext_i.h glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/ucontext_i.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/ia64/ucontext_i.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/ia64/ucontext_i.h Fri Mar 16 12:55:55 2001 @@ -0,0 +1,58 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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. */ + +/* Constants shared between setcontext() and getcontext(). Don't + install this header file. */ + +#define SIG_BLOCK 0 +#define SIG_UNBLOCK 1 +#define SIG_SETMASK 2 + +#define SC_NAT 0x008 +#define SC_BSP 0x048 +#define SC_RNAT 0x050 +#define SC_UNAT 0x060 +#define SC_FPSR 0x068 +#define SC_PFS 0x070 +#define SC_LC 0x078 +#define SC_PR 0x080 +#define SC_BR 0x088 +#define SC_GR 0x0c8 +#define SC_FR 0x1d0 +#define SC_MASK 0x9d0 + + +#define rTMP r16 +#define rPOS r16 +#define rCPOS r17 +#define rNAT r18 + +#define rB5 r18 +#define rB4 r19 +#define rB3 r20 +#define rB2 r21 +#define rB1 r22 +#define rB0 r23 +#define rRSC r24 +#define rBSP r25 +#define rRNAT r26 +#define rUNAT r27 +#define rFPSR r28 +#define rPFS r29 +#define rLC r30 +#define rPR r31 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/init-first.c glibc-2.2.3/sysdeps/unix/sysv/linux/init-first.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/init-first.c Fri Feb 9 10:04:32 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/init-first.c Mon Mar 26 20:53:35 2001 @@ -29,6 +29,7 @@ #include #ifndef SHARED +# include # include "dl-osinfo.h" #endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.2.3/sysdeps/unix/sysv/linux/kernel-features.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/kernel-features.h Tue Jan 23 14:07:25 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/kernel-features.h Wed Apr 25 14:51:14 2001 @@ -163,3 +163,22 @@ #if __LINUX_KERNEL_VERSION >= 132097 # define __ASSUME_AT_PAGESIZE 1 #endif + +/* Starting with 2.4.? kernels PPC passes the AUXV in the standard way. */ +#if __LINUX_KERNEL_VERSION >= (132096+99) && defined __powerpc__ +# define __ASSUME_STD_AUXV 1 +#endif + +/* There are an infinite number of PA-RISC kernel versions numbered + 2.4.0. But they've not really been released as such. We require + and expect the final version here. */ +#ifdef __hppa__ +# define __ASSUME_32BITUIDS 1 +# define __ASSUME_TRUNCATE64_SYSCALL 1 +# define __ASSUME_MMAP2_SYSCALL 1 +# define __ASSUME_STAT64_SYSCALL 1 +# define __ASSUME_IPC64 1 +# define __ASSUME_ST_INO_64_BIT 1 +# define __ASSUME_FCNTL64 1 +# define __ASSUME_GETDENTS64_SYSCALL 1 +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/linux_fsinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/linux_fsinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/linux_fsinfo.h Mon Apr 17 10:19:01 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/linux_fsinfo.h Mon Mar 26 20:53:35 2001 @@ -1,5 +1,5 @@ /* Constants from kernel header for various FSes. - Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001 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 @@ -99,7 +99,7 @@ #define XENIX_SUPER_MAGIC 0x012ff7b4 /* Constant that identifies the `shm' filesystem. */ -#define SHMFS_SUPER_MAGIC 0x02011994 +#define SHMFS_SUPER_MAGIC 0x01021994 /* Maximum link counts. */ #define COH_LINK_MAX 10000 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/m68k/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/m68k/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/m68k/bits/stat.h Tue Oct 3 08:11:28 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/m68k/bits/stat.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992,95,96,97,98,99,2000,2001 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 @@ -118,10 +118,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/m68k/ldconfig.h glibc-2.2.3/sysdeps/unix/sysv/linux/m68k/ldconfig.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/m68k/ldconfig.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/m68k/ldconfig.h Sat Mar 10 08:16:44 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h Mon Aug 23 10:43:23 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Schwab , 1998. @@ -22,3 +22,5 @@ #define GET_PC(ctx) ((void *) (ctx)->sc_pc) #define GET_FRAME(ctx) ((void *) __builtin_frame_address (1)) #define GET_STACK(ctx) ((void *) (ctx)->sc_usp) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/mips/bits/mman.h glibc-2.2.3/sysdeps/unix/sysv/linux/mips/bits/mman.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/mips/bits/mman.h Fri Feb 11 15:49:02 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/mips/bits/mman.h Mon Mar 26 20:53:36 2001 @@ -53,10 +53,12 @@ /* These are Linux-specific. */ #ifdef __USE_MISC -# define MAP_GROWSDOWN 0x1000 /* Stack-like segment. */ +# define MAP_NORESERVE 0x0400 /* don't check for reservations */ +# define MAP_ANONYMOUS 0x0800 /* don't use a file */ +# define MAP_GROWSDOWN 0x1000 /* stack-like segment */ # define MAP_DENYWRITE 0x2000 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x4000 /* Mark it as an executable. */ -# define MAP_NORESERVE 0x0400 /* Don't check for reservations. */ +# define MAP_EXECUTABLE 0x4000 /* mark it as an executable */ +# define MAP_LOCKED 0x8000 /* pages are locked */ #endif /* Flags to `msync'. */ @@ -68,6 +70,15 @@ #define MCL_CURRENT 1 /* Lock all currently mapped pages. */ #define MCL_FUTURE 2 /* Lock all additions to address space. */ + +/* Advice to `madvise'. */ +#ifdef __USE_BSD +#define MADV_NORMAL 0 /* default page-in behavior */ +#define MADV_RANDOM 1 /* page-in minimum required */ +#define MADV_SEQUENTIAL 2 /* read-ahead aggressively */ +#define MADV_WILLNEED 3 /* pre-fault pages */ +#define MADV_DONTNEED 4 /* discard these pages */ +#endif /* Flags for `mremap'. */ #ifdef __USE_GNU diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/mips/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/mips/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/mips/bits/siginfo.h Fri Feb 9 10:04:35 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/mips/bits/siginfo.h Mon Mar 26 20:53:36 2001 @@ -17,13 +17,15 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t +#if !defined _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t # error "Never include this file directly. Use instead" #endif -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 /* Type for data associated with a signal. */ typedef union sigval @@ -31,6 +33,11 @@ typedef union sigval int sival_int; void *sival_ptr; } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 # define __SI_MAX_SIZE 128 # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) @@ -112,7 +119,9 @@ typedef struct siginfo signals. */ enum { - SI_SIGIO = -5, /* Sent by queued SIGIO. */ + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ # define SI_SIGIO SI_SIGIO SI_MESGQ, /* Sent by real time mesq state change. */ # define SI_MESGQ SI_MESGQ @@ -238,7 +247,8 @@ enum #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ -#if defined _SIGNAL_H && !defined __have_sigevent_t +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t # define __have_sigevent_t 1 /* Structure to transport application-defined values with signals. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/mips/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/mips/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/mips/bits/stat.h Thu Sep 7 11:56:47 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/mips/bits/stat.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992,95,96,97,98,99,2000,2001 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 @@ -124,10 +124,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/mips/entry.h glibc-2.2.3/sysdeps/unix/sysv/linux/mips/entry.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/mips/entry.h Sat Jul 12 16:32:50 1997 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/mips/entry.h Thu Apr 12 14:02:18 2001 @@ -1 +1,5 @@ +#ifndef __ASSEMBLY__ +extern void __start (void); +#endif + #define ENTRY_POINT __start diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h Tue Jan 23 14:07:26 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h Mon Mar 26 20:53:36 2001 @@ -23,3 +23,5 @@ #define GET_PC(ctx) ((void *) ctx->sc_pc) #define GET_FRAME(ctx) ((void *) ctx->sc_regs[30]) #define GET_STACK(ctx) ((void *) ctx->sc_regs[29]) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/net/if_arp.h glibc-2.2.3/sysdeps/unix/sysv/linux/net/if_arp.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/net/if_arp.h Wed Nov 24 10:29:50 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/net/if_arp.h Sat Apr 7 14:02:40 2001 @@ -1,5 +1,5 @@ /* Definitions for Address Resolution Protocol. - Copyright (C) 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -95,9 +95,11 @@ struct arphdr #define ARPHRD_X25 271 /* CCITT X.25. */ #define ARPHDR_HWX25 272 /* Boards with X.25 in firmware. */ #define ARPHRD_PPP 512 -#define ARPHRD_HDLC 513 /* (Cisco) HDLC. */ +#define ARPHRD_CISCO 513 /* Cisco HDLC. */ +#define ARPHRD_HDLC ARPHRD_CISCO #define ARPHRD_LAPB 516 /* LAPB. */ #define ARPHRD_DDCMP 517 /* Digital's DDCMP. */ +#define ARPHRD_RAWHDLC 518 /* Raw HDLC. */ #define ARPHRD_TUNNEL 768 /* IPIP tunnel. */ #define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/pathconf.c glibc-2.2.3/sysdeps/unix/sysv/linux/pathconf.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/pathconf.c Fri Jun 9 12:17:53 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/pathconf.c Mon Mar 26 20:53:35 2001 @@ -1,5 +1,5 @@ /* Linux specific extensions to pathconf. - Copyright (C) 1991, 95, 96, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1991,95,96,98,99,2000,2001 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 @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -42,8 +43,14 @@ __pathconf (path, name) /* Determine the filesystem type. */ if (__statfs (path, &fsbuf) < 0) - /* not possible, return the default value. */ - return LINUX_LINK_MAX; + { + if (errno == ENOSYS) + /* not possible, return the default value. */ + return LINUX_LINK_MAX; + + /* Some error occured. */ + return -1; + } switch (fsbuf.f_type) { diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/Dist Mon Sep 18 15:42:31 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/Dist Thu Apr 12 14:02:18 2001 @@ -5,4 +5,5 @@ kernel_stat.h kernel_termios.h oldgetrlimit64.c sys/procfs.h +sys/ptrace.h sys/user.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/bits/stat.h Fri Aug 11 22:10:03 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/bits/stat.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992,95,96,97,98,99,2000,2001 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 @@ -113,10 +113,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c Mon Jan 4 08:00:06 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c Thu Apr 12 14:02:18 2001 @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Linux/PPC version. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2001 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 @@ -18,33 +18,38 @@ Boston, MA 02111-1307, USA. */ +#include "config.h" +#include "kernel-features.h" + +#ifndef __ASSUME_STD_AUXV + /* The PowerPC's auxiliary argument block gets aligned to a 16-byte boundary. This is history and impossible to change compatibly. */ -#define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \ - do { \ - char **_tmp; \ - size_t _test; \ - (argc) = *(long *) cookie; \ - (argv) = (char **) cookie + 1; \ - (envp) = (argv) + (argc) + 1; \ - for (_tmp = (envp); *_tmp; ++_tmp) \ - continue; \ - /* The following '++' is important! */ \ - ++_tmp; \ - \ - _test = (size_t)_tmp; \ - _test = (_test + 0xf) & ~0xf; \ - /* Under some circumstances, MkLinux (up to at least DR3a5) \ - omits the padding. To work around this, we make a \ - basic sanity check of the argument vector. Of \ - course, this means that in future, the argument \ - vector will have to be laid out to allow for this \ - test :-(. */ \ - if (((ElfW(auxv_t) *)_test)->a_type <= 0x10) \ - _tmp = (char **)_test; \ - (auxp) = (ElfW(auxv_t) *) _tmp; \ +#define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \ + do { \ + char **_tmp; \ + size_t _test; \ + (argc) = *(long int *) cookie; \ + (argv) = (char **) cookie + 1; \ + (envp) = (argv) + (argc) + 1; \ + for (_tmp = (envp); *_tmp; ++_tmp) \ + continue; \ + /* The following '++' is important! */ \ + ++_tmp; \ + \ + _test = (size_t)_tmp; \ + _test = (_test + 0xf) & ~0xf; \ + /* Under some circumstances, MkLinux (up to at least DR3a5) \ + omits the padding. To work around this, we make a \ + basic sanity check of the argument vector. Of \ + course, this means that in future, the argument \ + vector will have to be laid out to allow for this \ + test :-(. */ \ + if (((ElfW(auxv_t) *)_test)->a_type <= 0x10) \ + _tmp = (char **)_test; \ + (auxp) = (ElfW(auxv_t) *) _tmp; \ } while (0) - +#endif #include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/mmap64.c glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/mmap64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/mmap64.c Tue Jan 23 14:07:26 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/mmap64.c Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 1999. @@ -39,28 +39,32 @@ static int have_no_mmap2; #endif #endif -__ptr_t -__mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd, off64_t offset) +void * +__mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset) { + if (offset & ((1 << PAGE_SHIFT)-1)) + { + __set_errno (EINVAL); + return MAP_FAILED; + } #ifdef __NR_mmap2 - if ( # ifndef __ASSUME_MMAP2_SYSCALL - ! have_no_mmap2 && + if (! have_no_mmap2) # endif - ! (offset & ((1 << PAGE_SHIFT)-1))) { # ifndef __ASSUME_MMAP2_SYSCALL int saved_errno = errno; # endif - __ptr_t result; - __ptrvalue (result) = INLINE_SYSCALL (mmap2, 6, __ptrvalue (addr), len, prot, - flags, fd, (off_t) (offset >> PAGE_SHIFT)); + void *result; + __ptrvalue (result) = INLINE_SYSCALL (mmap2, 6, __ptrvalue (addr), len, + prot, flags, fd, + (off_t) (offset >> PAGE_SHIFT)); # if __BOUNDED_POINTERS__ __ptrlow (result) = __ptrvalue (result); __ptrhigh (result) = __ptrvalue (result) + len; # endif # ifndef __ASSUME_MMAP2_SYSCALL - if (result != (__ptr_t) -1 || errno != ENOSYS) + if (result != MAP_FAILED || errno != ENOSYS) # endif return result; @@ -70,6 +74,7 @@ __mmap64 (__ptr_t addr, size_t len, int # endif } #endif +#ifndef __ASSUME_MMAP2_SYSCALL if (offset != (off_t) offset || (offset + len) != (off_t) (offset + len)) { __set_errno (EINVAL); @@ -77,6 +82,7 @@ __mmap64 (__ptr_t addr, size_t len, int } return __mmap (addr, len, prot, flags, fd, (off_t) offset); +#endif } weak_alias (__mmap64, mmap64) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h Mon Aug 23 10:43:45 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2001 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 @@ -23,3 +23,5 @@ #define GET_PC(ctx) ((void *)((ctx)->regs->nip)) #define GET_FRAME(ctx) (*(void **)((ctx)->regs->gpr[1])) #define GET_STACK(ctx) ((void *)((ctx)->regs->gpr[1])) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h Fri Feb 11 15:49:02 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h Thu Apr 12 14:02:18 2001 @@ -122,8 +122,8 @@ struct elf_prpsinfo typedef void *psaddr_t; /* Register sets. Linux has different names. */ -typedef gregset_t prgregset_t; -typedef fpregset_t prfpregset_t; +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; /* We don't have any differences between processes and threads, therefore habe only ine PID type. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h Tue Apr 10 17:25:26 2001 @@ -0,0 +1,99 @@ +/* `ptrace' debugger support interface. Linux version. + Copyright (C) 2001 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 _SYS_PTRACE_H +#define _SYS_PTRACE_H 1 + +#include + +__BEGIN_DECLS + +/* Type of the REQUEST argument to `ptrace.' */ +enum __ptrace_request +{ + /* Indicate that the process making this request should be traced. + All signals received by this process can be intercepted by its + parent, and its parent can use the other `ptrace' requests. */ + PTRACE_TRACEME = 0, +#define PT_TRACE_ME PTRACE_TRACEME + + /* Return the word in the process's text space at address ADDR. */ + PTRACE_PEEKTEXT = 1, +#define PT_READ_I PTRACE_PEEKTEXT + + /* Return the word in the process's data space at address ADDR. */ + PTRACE_PEEKDATA = 2, +#define PT_READ_D PTRACE_PEEKDATA + + /* Return the word in the process's user area at offset ADDR. */ + PTRACE_PEEKUSER = 3, +#define PT_READ_U PTRACE_PEEKUSER + + /* Write the word DATA into the process's text space at address ADDR. */ + PTRACE_POKETEXT = 4, +#define PT_WRITE_I PTRACE_POKETEXT + + /* Write the word DATA into the process's data space at address ADDR. */ + PTRACE_POKEDATA = 5, +#define PT_WRITE_D PTRACE_POKEDATA + + /* Write the word DATA into the process's user area at offset ADDR. */ + PTRACE_POKEUSER = 6, +#define PT_WRITE_U PTRACE_POKEUSER + + /* Continue the process. */ + PTRACE_CONT = 7, +#define PT_CONTINUE PTRACE_CONT + + /* Kill the process. */ + PTRACE_KILL = 8, +#define PT_KILL PTRACE_KILL + + /* Single step the process. + This is not supported on all machines. */ + PTRACE_SINGLESTEP = 9, +#define PT_STEP PTRACE_SINGLESTEP + + /* Attach to a process that is already running. */ + PTRACE_ATTACH = 16, +#define PT_ATTACH PTRACE_ATTACH + + /* Detach from a process attached to with PTRACE_ATTACH. */ + PTRACE_DETACH = 17, +#define PT_DETACH PTRACE_DETACH + + /* Continue and stop at the next (return from) syscall. */ + PTRACE_SYSCALL = 24 +#define PT_SYSCALL PTRACE_SYSCALL +}; + +/* Perform process tracing functions. REQUEST is one of the values + above, and determines the action to be taken. + For all requests except PTRACE_TRACEME, PID specifies the process to be + traced. + + PID and the other arguments described above for the various requests should + appear (those that are used for the particular request) as: + pid_t PID, void *ADDR, int DATA, void *ADDR2 + after REQUEST. */ +extern long int ptrace (enum __ptrace_request __request, ...) __THROW; + +__END_DECLS + +#endif /* _SYS_PTRACE_H */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h Mon Oct 11 17:49:23 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h Thu Apr 12 14:02:18 2001 @@ -28,29 +28,6 @@ typedef struct sigcontext mcontext_t; -/* We need explicit types for the general and floating-point register - sets. */ - -/* Type for general register. */ -typedef int greg_t; - -/* Number of general registers. */ -#define NGREG 32 - -/* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; - - -/* Type for general register. */ -typedef int fpreg_t; - -/* Number of general registers. */ -#define NFPREG 32 - -/* Container for all general registers. */ -typedef fpreg_t fpregset_t[NFPREG]; - - /* Userlevel context. */ typedef struct ucontext { diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/powerpc/sysdep.h Thu Aug 31 14:45:31 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/powerpc/sysdep.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992,1997,1998,1999,2000,2001 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 @@ -143,6 +143,9 @@ /* Local labels stripped out by the linker. */ #undef L #define L(x) .L##x + +/* Label in text section. */ +#define C_TEXT(name) name #endif /* __ASSEMBLER__ */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/s390/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/Dist Thu Aug 31 14:45:32 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/Dist Mon Mar 26 21:27:18 2001 @@ -1,9 +1,2 @@ -clone.S -oldgetrlimit64.c -setresuid.c -setresgid.c -setfsuid.c -setfsgid.c sys/elf.h -sys/procfs.h sys/user.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/Makefile glibc-2.2.3/sysdeps/unix/sysv/linux/s390/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/Makefile Thu Aug 31 14:45:32 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/Makefile Wed Dec 31 16:00:00 1969 @@ -1,12 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_routines += setfsgid setfsuid setresgid setresuid -sysdep_headers += sys/elf.h -endif - -ifeq ($(subdir),csu) -CFLAGS-initfini.s += -DWEAK_GMON_START -endif - -ifeq ($(subdir),resource) -sysdep_routines += oldgetrlimit64 -endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/Versions glibc-2.2.3/sysdeps/unix/sysv/linux/s390/Versions --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/Versions Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/Versions Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __register_frame_info; __deregister_frame_info; __frame_state_for; - __register_frame_info_table; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # a* - alphasort64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - - # v* - versionsort64; - } -} - diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/alphasort64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/alphasort64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/alphasort64.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/alphasort64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/fcntl.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/fcntl.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/fcntl.h Sun Oct 8 17:05:09 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/fcntl.h Wed Dec 31 16:00:00 1969 @@ -1,179 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - 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 _FCNTL_H -# error "Never use directly; include instead." -#endif - - -#include - -/* open/fcntl - O_SYNC is only implemented on blocks devices and on files - located on an ext2 file system */ -#define O_ACCMODE 0003 -#define O_RDONLY 00 -#define O_WRONLY 01 -#define O_RDWR 02 -#define O_CREAT 0100 /* not fcntl */ -#define O_EXCL 0200 /* not fcntl */ -#define O_NOCTTY 0400 /* not fcntl */ -#define O_TRUNC 01000 /* not fcntl */ -#define O_APPEND 02000 -#define O_NONBLOCK 04000 -#define O_NDELAY O_NONBLOCK -#define O_SYNC 010000 -#define O_FSYNC O_SYNC -#define O_ASYNC 020000 - -#ifdef __USE_GNU -# define O_DIRECT 040000 /* Direct disk access. */ -# define O_DIRECTORY 0200000 /* Must be a directory. */ -# define O_NOFOLLOW 0400000 /* Do not follow links. */ -#endif - -/* For now Linux has synchronisity options for data and read operations. - We define the symbols here but let them do the same as O_SYNC since - this is a superset. */ -#if defined __USE_POSIX199309 || defined __USE_UNIX98 -# define O_DSYNC O_SYNC /* Synchronize data. */ -# define O_RSYNC O_SYNC /* Synchronize read operations. */ -#endif - -#ifdef __USE_LARGEFILE64 -# define O_LARGEFILE 0100000 -#endif - -/* Values for the second argument to `fcntl'. */ -#define F_DUPFD 0 /* Duplicate file descriptor. */ -#define F_GETFD 1 /* Get file descriptor flags. */ -#define F_SETFD 2 /* Set file descriptor flags. */ -#define F_GETFL 3 /* Get file status flags. */ -#define F_SETFL 4 /* Set file status flags. */ -#ifndef __USE_FILE_OFFSET64 -#define F_GETLK 5 /* Get record locking info. */ -#define F_SETLK 6 /* Set record locking info (non-blocking). */ -#define F_SETLKW 7 /* Set record locking info (blocking). */ -#else -# define F_GETLK F_GETLK64 /* Get record locking info. */ -# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ -# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ -#endif -#define F_GETLK64 12 /* Get record locking info. */ -#define F_SETLK64 13 /* Set record locking info (non-blocking). */ -#define F_SETLKW64 14 /* Set record locking info (blocking). */ - -#if defined __USE_BSD || defined __USE_XOPEN2K -# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ -# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ -#endif - -#ifdef __USE_GNU -# define F_SETSIG 10 /* Set number of signal to be sent. */ -# define F_GETSIG 11 /* Get number of signal to be sent. */ -#endif - -#ifdef __USE_GNU -# define F_SETLEASE 1024 /* Set a lease. */ -# define F_GETLEASE 1025 /* Enquire what lease is active. */ -# define F_NOTIFY 1026 /* Request notfications on a directory. */ -#endif - -/* For F_[GET|SET]FL. */ -#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -#define F_RDLCK 0 /* Read lock. */ -#define F_WRLCK 1 /* Write lock. */ -#define F_UNLCK 2 /* Remove lock. */ - -/* for old implementation of bsd flock () */ -#define F_EXLCK 4 /* or 3 */ -#define F_SHLCK 8 /* or 4 */ - -#ifdef __USE_BSD -/* operations for bsd flock(), also used by the kernel implementation */ -# define LOCK_SH 1 /* shared lock */ -# define LOCK_EX 2 /* exclusive lock */ -# define LOCK_NB 4 /* or'd with one of the above to prevent - blocking */ -# define LOCK_UN 8 /* remove lock */ -#endif - -#ifdef __USE_GNU -# define LOCK_MAND 32 /* This is a mandatory flock: */ -# define LOCK_READ 64 /* ... which allows concurrent read operations. */ -# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ -# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ -#endif - -#ifdef __USE_GNU -/* Types of directory notifications that may be requested with F_NOTIFY. */ -# define DN_ACCESS 0x00000001 /* File accessed. */ -# define DN_MODIFY 0x00000002 /* File modified. */ -# define DN_CREATE 0x00000004 /* File created. */ -# define DN_DELETE 0x00000008 /* File removed. */ -# define DN_RENAME 0x00000010 /* File renamed. */ -# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ -# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -#endif - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Define some more compatibility macros to be backward compatible with - BSD systems which did not managed to hide these kernel macros. */ -#ifdef __USE_BSD -# define FAPPEND O_APPEND -# define FFSYNC O_FSYNC -# define FASYNC O_ASYNC -# define FNONBLOCK O_NONBLOCK -# define FNDELAY O_NDELAY -#endif /* Use BSD. */ - -/* Advise to `posix_fadvise'. */ -#ifdef __USE_XOPEN2K -# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/mman.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/mman.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/mman.h Wed Aug 2 08:06:31 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/mman.h Wed Dec 31 16:00:00 1969 @@ -1,93 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/s390 version. - 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 _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - - -/* Protections are chosen from these bits, OR'd together. The - implementation does not necessarily support PROT_EXEC or PROT_WRITE - without PROT_READ. The only guarantees are that no writing will be - allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ - -#define PROT_READ 0x1 /* Page can be read. */ -#define PROT_WRITE 0x2 /* Page can be written. */ -#define PROT_EXEC 0x4 /* Page can be executed. */ -#define PROT_NONE 0x0 /* Page can not be accessed. */ - -/* Sharing types (must choose one and only one of these). */ -#define MAP_SHARED 0x01 /* Share changes. */ -#define MAP_PRIVATE 0x02 /* Changes are private. */ -#ifdef __USE_MISC -# define MAP_TYPE 0x0f /* Mask for type of mapping. */ -#endif - -/* Other flags. */ -#define MAP_FIXED 0x10 /* Interpret addr exactly. */ -#ifdef __USE_MISC -# define MAP_FILE 0 -# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ -# define MAP_ANON MAP_ANONYMOUS -#endif - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x2000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ -#endif - -/* Flags to `msync'. */ -#define MS_ASYNC 1 /* Sync memory asynchronously. */ -#define MS_SYNC 4 /* Synchronous memory sync. */ -#define MS_INVALIDATE 2 /* Invalidate the caches. */ - -/* Flags for `mlockall'. */ -#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ -#define MCL_FUTURE 2 /* Lock all additions to address - space. */ - -/* Flags for `mremap'. */ -#ifdef __USE_GNU -# define MREMAP_MAYMOVE 1 -#endif - -/* Advice to `madvise'. */ -#ifdef __USE_BSD -# define MADV_NORMAL 0 /* No further special treatment. */ -# define MADV_RANDOM 1 /* Expect random page references. */ -# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define MADV_WILLNEED 3 /* Will need these pages. */ -# define MADV_DONTNEED 4 /* Don't need these pages. */ -#endif - -/* The POSIX people had to invent similar names for the same things. */ -#ifdef __USE_XOPEN2K -# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/resource.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/resource.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/resource.h Wed Aug 2 08:06:31 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/resource.h Wed Dec 31 16:00:00 1969 @@ -1,205 +0,0 @@ -/* Bit values & structures for resource limits. Linux version. - 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 _SYS_RESOURCE_H -# error "Never use directly; include instead." -#endif - -#include - -/* Transmute defines to enumerations. The macro re-definitions are - necessary because some programs want to test for operating system - features with #ifdef RUSAGE_SELF. In ISO C the reflexive - definition is a no-op. */ - -/* Kinds of resource limit. */ -enum __rlimit_resource -{ - /* Per-process CPU limit, in seconds. */ - RLIMIT_CPU = 0, -#define RLIMIT_CPU RLIMIT_CPU - - /* Largest file that can be created, in bytes. */ - RLIMIT_FSIZE = 1, -#define RLIMIT_FSIZE RLIMIT_FSIZE - - /* Maximum size of data segment, in bytes. */ - RLIMIT_DATA = 2, -#define RLIMIT_DATA RLIMIT_DATA - - /* Maximum size of stack segment, in bytes. */ - RLIMIT_STACK = 3, -#define RLIMIT_STACK RLIMIT_STACK - - /* Largest core file that can be created, in bytes. */ - RLIMIT_CORE = 4, -#define RLIMIT_CORE RLIMIT_CORE - - /* Largest resident set size, in bytes. - This affects swapping; processes that are exceeding their - resident set size will be more likely to have physical memory - taken from them. */ - RLIMIT_RSS = 5, -#define RLIMIT_RSS RLIMIT_RSS - - /* Number of open files. */ - RLIMIT_NOFILE = 7, - RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ -#define RLIMIT_NOFILE RLIMIT_NOFILE -#define RLIMIT_OFILE RLIMIT_OFILE - - /* Address space limit. */ - RLIMIT_AS = 9, -#define RLIMIT_AS RLIMIT_AS - - /* Number of processes. */ - RLIMIT_NPROC = 6, -#define RLIMIT_NPROC RLIMIT_NPROC - - /* Locked-in-memory address space. */ - RLIMIT_MEMLOCK = 8, -#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK - - RLIMIT_NLIMITS = 10, - RLIM_NLIMITS = RLIMIT_NLIMITS -#define RLIMIT_NLIMITS RLIMIT_NLIMITS -#define RLIM_NLIMITS RLIM_NLIMITS -}; - -/* Value to indicate that there is no limit. */ -#ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((unsigned long int) (~0UL)) -#else -# define RLIM_INFINITY 0xffffffffffffffffuLL -#endif - -#ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0xffffffffffffffffuLL -#endif - -/* We can represent all limits. */ -#define RLIM_SAVED_MAX RLIM_INFINITY -#define RLIM_SAVED_CUR RLIM_INFINITY - - -/* Type for resource quantity measurement. */ -#ifndef __USE_FILE_OFFSET64 -typedef __rlim_t rlim_t; -#else -typedef __rlim64_t rlim_t; -#endif -#ifdef __USE_LARGEFILE64 -typedef __rlim64_t rlim64_t; -#endif - -struct rlimit - { - /* The current (soft) limit. */ - rlim_t rlim_cur; - /* The hard limit. */ - rlim_t rlim_max; - }; - -#ifdef __USE_LARGEFILE64 -struct rlimit64 - { - /* The current (soft) limit. */ - rlim64_t rlim_cur; - /* The hard limit. */ - rlim64_t rlim_max; - }; -#endif - -/* Whose usage statistics do you want? */ -enum __rusage_who -{ - /* The calling process. */ - RUSAGE_SELF = 0, -#define RUSAGE_SELF RUSAGE_SELF - - /* All of its terminated child processes. */ - RUSAGE_CHILDREN = -1, -#define RUSAGE_CHILDREN RUSAGE_CHILDREN - - /* Both. */ - RUSAGE_BOTH = -2 -#define RUSAGE_BOTH RUSAGE_BOTH -}; - -#define __need_timeval -#include /* For `struct timeval'. */ - -/* Structure which says how much of each resource has been used. */ -struct rusage - { - /* Total amount of user time used. */ - struct timeval ru_utime; - /* Total amount of system time used. */ - struct timeval ru_stime; - /* Maximum resident set size (in kilobytes). */ - long int ru_maxrss; - /* Amount of sharing of text segment memory - with other processes (kilobyte-seconds). */ - long int ru_ixrss; - /* Amount of data segment memory used (kilobyte-seconds). */ - long int ru_idrss; - /* Amount of stack memory used (kilobyte-seconds). */ - long int ru_isrss; - /* Number of soft page faults (i.e. those serviced by reclaiming - a page from the list of pages awaiting reallocation. */ - long int ru_minflt; - /* Number of hard page faults (i.e. those that required I/O). */ - long int ru_majflt; - /* Number of times a process was swapped out of physical memory. */ - long int ru_nswap; - /* Number of input operations via the file system. Note: This - and `ru_oublock' do not include operations with the cache. */ - long int ru_inblock; - /* Number of output operations via the file system. */ - long int ru_oublock; - /* Number of IPC messages sent. */ - long int ru_msgsnd; - /* Number of IPC messages received. */ - long int ru_msgrcv; - /* Number of signals delivered. */ - long int ru_nsignals; - /* Number of voluntary context switches, i.e. because the process - gave up the process before it had to (usually to wait for some - resource to be available). */ - long int ru_nvcsw; - /* Number of involuntary context switches, i.e. a higher priority process - became runnable or the current process used up its time slice. */ - long int ru_nivcsw; - }; - -/* Priority limits. */ -#define PRIO_MIN -20 /* Minimum priority a process can have. */ -#define PRIO_MAX 20 /* Maximum priority a process can have. */ - -/* The type of the WHICH argument to `getpriority' and `setpriority', - indicating what flavor of entity the WHO argument specifies. */ -enum __priority_which -{ - PRIO_PROCESS = 0, /* WHO is a process ID. */ -#define PRIO_PROCESS PRIO_PROCESS - PRIO_PGRP = 1, /* WHO is a process group ID. */ -#define PRIO_PGRP PRIO_PGRP - PRIO_USER = 2 /* WHO is a user ID. */ -#define PRIO_USER PRIO_USER -}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/bits/stat.h Mon Aug 21 10:07:40 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/bits/stat.h Wed Dec 31 16:00:00 1969 @@ -1,133 +0,0 @@ -/* Copyright (C) 1992, 95, 96, 97, 98, 99, 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 _SYS_STAT_H -# error "Never include directly; use instead." -#endif - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - - -struct stat - { - __dev_t st_dev; /* Device. */ - unsigned int __pad1; -#ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -#else - __ino_t __st_ino; /* 32bit file serial number. */ -#endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; -#ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -#else - __off64_t st_size; /* Size of file, in bytes. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#endif - __time_t st_atime; /* Time of last access. */ - unsigned long int __unused1; - __time_t st_mtime; /* Time of last modification. */ - unsigned long int __unused2; - __time_t st_ctime; /* Time of last status change. */ - unsigned long int __unused3; -#ifndef __USE_FILE_OFFSET64 - unsigned long int __unused4; - unsigned long int __unused5; -#else - __ino64_t st_ino; /* File serial number. */ -#endif - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - unsigned int __pad1; - - __ino_t __st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ - __time_t st_atime; /* Time of last access. */ - unsigned long int __unused1; - __time_t st_mtime; /* Time of last modification. */ - unsigned long int __unused2; - __time_t st_ctime; /* Time of last status change. */ - unsigned long int __unused3; - __ino64_t st_ino; /* File serial number. */ - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/chown.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/chown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/chown.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/chown.c Wed Dec 31 16:00:00 1969 @@ -1,118 +0,0 @@ -/* 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. */ - -#include -#include - -#include -#include -#include -#include - -#include -#include "kernel-features.h" - -/* - In Linux 2.1.x the chown functions have been changed. A new function lchown - was introduced. The new chown now follows symlinks - the old chown and the - new lchown do not follow symlinks. - The new lchown function has the same number as the old chown had and the - new chown has a new number. When compiling with headers from Linux > 2.1.8x - it's impossible to run this libc with older kernels. In these cases libc - has therefore to route calls to chown to the old chown function. -*/ - -extern int __syscall_chown (const char *__file, - __kernel_uid_t __owner, __kernel_gid_t __group); - -/* Running under Linux > 2.1.80. */ - -#ifdef __NR_chown32 -extern int __syscall_chown32 (const char *__file, - __kernel_uid32_t owner, __kernel_gid32_t group); -# if __ASSUME_32BITUIDS == 0 -/* This variable is shared with all files that need to check for 32bit - uids. */ -extern int __libc_missing_32bit_uids; -# endif -#endif /* __NR_chown32 */ - -int -__real_chown (const char *file, uid_t owner, gid_t group) -{ - static int __libc_old_chown; - int result; - - if (!__libc_old_chown) - { - int saved_errno = errno; -#ifdef __NR_chown32 - if (__libc_missing_32bit_uids <= 0) - { - int result; - int saved_errno = errno; - - result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group); - if (result == 0 || errno != ENOSYS) - return result; - - __set_errno (saved_errno); - __libc_missing_32bit_uids = 1; - } -#endif /* __NR_chown32 */ - if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U)) - || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U))) - { - __set_errno (EINVAL); - return -1; - } - - result = INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group); - - if (result >= 0 || errno != ENOSYS) - return result; - - __set_errno (saved_errno); - __libc_old_chown = 1; - } - - return __lchown (file, owner, group); -} - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -/* Compiling for compatibiity. */ -int -__chown_is_lchown (const char *file, uid_t owner, gid_t group) -{ - return __lchown (file, owner, group); -} -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -strong_alias (__chown_is_lchown, _chown_is_lchown) -compat_symbol (libc, __chown_is_lchown, __chown, GLIBC_2_0); -compat_symbol (libc, _chown_is_lchown, chown, GLIBC_2_0); - -strong_alias (__real_chown, _real_chown) -versioned_symbol (libc, __real_chown, __chown, GLIBC_2_1); -versioned_symbol (libc, _real_chown, chown, GLIBC_2_1); -#else -strong_alias (__real_chown, __chown) -weak_alias (__real_chown, chown) -#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/clone.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/clone.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/clone.S Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/clone.S Wed Dec 31 16:00:00 1969 @@ -1,66 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - 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. */ - -/* clone is even more special than fork as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include - -/*int __clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg);*/ -/* sys_clone(void *child_stack, unsigned long flags) */ - - .text -ENTRY(__clone) - /* Sanity check arguments & move registers */ - ltr %r1,%r2 /* no NULL function pointers */ - lhi %r2,-EINVAL - jz SYSCALL_ERROR_LABEL - ltr %r3,%r3 /* no NULL stack pointers */ - jz SYSCALL_ERROR_LABEL - /* move child_stack and flags, then call SVC */ - lr %r2,%r3 - lr %r3,%r4 - svc SYS_ify(clone) - ltr %r2,%r2 /* check return code */ - jm SYSCALL_ERROR_LABEL - jz thread_start - br %r14 - -thread_start: - /* fn is in gpr 1, arg in gpr 5 */ - lr %r2,%r5 /* set first parameter to void *arg */ - sr %r11,%r11 /* terminate the stack frame */ - ahi %r15,-96 /* make room on the stack for the save area */ - basr %r14,%r1 /* jump to fn */ -#ifdef PIC - basr %r12,0 -.L0: lr %r1,%r12 - al %r12,.L1-.L0(%r12) - al %r1,.L2-.L0(%r1) - br %r1 /* branch to _exit -> thread termination */ -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -.L2: .long _exit@PLT - .L0 -#else - basr %r1,0 -.L0: al %r1,.L1-.L0(0,%r1) - br %r1 /* branch to _exit -> thread termination */ -.L1: .long _exit - .L0 -#endif -PSEUDO_END (__clone) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/fchown.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/fchown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/fchown.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/fchown.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/fcntl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/fcntl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/fcntl.c Fri Sep 29 00:28:03 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/fcntl.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/fxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/fxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/fxstat.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/fxstat.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getdents64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getdents64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getdents64.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getdents64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getegid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getegid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getegid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getegid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/geteuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/geteuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/geteuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/geteuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getgid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getgid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getgroups.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getgroups.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getresgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getresgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getresgid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getresgid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getresuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getresuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getresuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getresuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getrlimit.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getrlimit.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getrlimit.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getrlimit.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getrlimit64.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getrlimit64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/getuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/getuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/lchown.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/lchown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/lchown.c Mon Aug 21 10:08:11 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/lchown.c Wed Dec 31 16:00:00 1969 @@ -1,75 +0,0 @@ -/* 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. */ - -#include -#include - -#include -#include -#include - -#include -#include "kernel-features.h" - -extern int __syscall_lchown (const char *__unbounded __file, - __kernel_uid_t __owner, __kernel_gid_t __group); - -# ifdef __NR_lchown32 -extern int __syscall_lchown32 (const char *__unbounded __file, - __kernel_uid32_t __owner, - __kernel_gid32_t __group); -# if __ASSUME_32BITUIDS == 0 -/* This variable is shared with all files that need to check for 32bit - uids. */ -extern int __libc_missing_32bit_uids; -# endif -# endif /* __NR_lchown32 */ - -int -__lchown (const char *file, uid_t owner, gid_t group) -{ -# if __ASSUME_32BITUIDS > 0 - return INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group); -# else -# ifdef __NR_lchown32 - if (__libc_missing_32bit_uids <= 0) - { - int result; - int saved_errno = errno; - - result = INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group); - if (result == 0 || errno != ENOSYS) - return result; - - __set_errno (saved_errno); - __libc_missing_32bit_uids = 1; - } -# endif /* __NR_lchown32 */ - - if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U)) - || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U))) - { - __set_errno (EINVAL); - return -1; - } - - return INLINE_SYSCALL (lchown, 3, CHECK_STRING (file), owner, group); -# endif -} - -weak_alias (__lchown, lchown) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/ldconfig.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/ldconfig.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/ldconfig.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/ldconfig.h Tue Mar 27 22:27:55 2001 @@ -0,0 +1,26 @@ +/* Copyright (C) 2001 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. */ + +#include + +#define SYSDEP_KNOWN_INTERPRETER_NAMES \ + { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, \ + { "/lib/ld64.so.1", FLAG_ELF_LIBC6 }, +#define SYSDEP_KNOWN_LIBRARY_NAMES \ + { "libc.so.6", FLAG_ELF_LIBC6 }, \ + { "libm.so.6", FLAG_ELF_LIBC6 }, diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/lockf64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/lockf64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/lockf64.c Fri Sep 29 00:28:03 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/lockf64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/lxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/lxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/lxstat.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/lxstat.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/mmap.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/mmap.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/mmap.S Thu Nov 16 11:12:05 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/mmap.S Wed Dec 31 16:00:00 1969 @@ -1,72 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 EINVAL 22 - - .text -ENTRY(__mmap) - /* Save registers and setup stack frame. */ - stm %r6,%r15,24(%r15) - lr %r1,%r15 - ahi %r15,-120 /* buy stack space */ - st %r1,0(%r15) /* store back chain */ - - /* Store parameters on stack, because old_mmap/mmap2 - * take only one parameter: a pointer to the parameter area - */ - st %r6,0x70(%r15) /* Store 'fd'. */ - st %r5,0x6C(%r15) /* Store 'flags'. */ - st %r4,0x68(%r15) /* Store 'prot'. */ - st %r3,0x64(%r15) /* Store 'length'. */ - st %r2,0x60(%r15) /* Store 'start'. */ - l %r1,216(%r15) /* Load offset. */ - -#ifdef __ASSUME_MMAP2_SYSCALL - /* I don't think it is worthwhile trying to use mmap2 whenever - * it is available. Only use it when we are sure the syscall - * exists. */ - tml %r1,0x0fff /* Offset page aligned ? */ - lhi %r2,-EINVAL - jnz 1f /* No -> EINVAL. */ - srl %r1,12 /* mmap2 takes the offset in pages. */ - st %r1,0x74(%r15) /* Store page offset. */ - la %r2,0x60(%r15) /* Load address of parameter list. */ - svc SYS_ify(mmap2) /* Do the system call trap. */ -#else - st %r1,0x74(%r15) /* Store offset unmodified. */ - la %r2,0x60(%r15) /* Load address of parameter list. */ - svc SYS_ify(mmap) /* Do the system call trap. */ -#endif - -1: l %r15,0(%r15) /* Load back chain. */ - lm %r6,%r15,24(%r15) /* Load registers. */ - - /* check gpr 2 for error */ - lhi %r0,-4096 - clr %r2,%r0 - jnl SYSCALL_ERROR_LABEL - - /* Successful; return the syscall's value. */ - br %r14 - -PSEUDO_END (__mmap) - -weak_alias (__mmap, mmap) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/mmap64.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/mmap64.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/mmap64.S Sat Jan 6 20:35:41 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/mmap64.S Wed Dec 31 16:00:00 1969 @@ -1,101 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 EINVAL 22 -#define ENOSYS 38 - - .text -ENTRY(__mmap64) - /* Save registers and setup stack frame. */ - stm %r6,%r15,24(%r15) - lr %r1,%r15 - ahi %r15,-120 /* Buy stack space. */ - st %r1,0(%r15) /* Store back chain. */ - - /* Store parameters on stack, because mmap2 and old_mmap - * take only one parameter: a pointer to the parameter area. */ - st %r6,0x70(%r15) /* Store 'fd'. */ - st %r5,0x6C(%r15) /* Store 'flags'. */ - st %r4,0x68(%r15) /* Store 'prot'. */ - st %r3,0x64(%r15) /* Store 'length'. */ - st %r2,0x60(%r15) /* Store 'start'. */ - -#ifdef __NR_mmap2 - lm %r0,%r1,216(%r15) /* Load 64 bit offset. */ - tml %r1,0x0fff /* Offset page aligned ? */ - jnz 2f /* No -> EINVAL. */ - srdl %r0,12 /* mmap2 takes the offset in pages. */ - ltr %r0,%r0 /* Offset > 2^44 ? */ - jnz 2f - st %r1,0x74(%r15) /* Store page offset. */ - - la %r2,0x60(%r15) /* Load address of parameter list. */ - svc SYS_ify(mmap2) /* Do the system call trap. */ - -#ifndef __ASSUME_MMAP2_SYSCALL - chi %r0,-ENOSYS - je 1f -#endif - - l %r15,0(%r15) /* Load back chain. */ - lm %r6,%r15,24(%r15) /* Load registers. */ - - /* Check gpr 2 for error. */ - lhi %r0,-4096 - clr %r2,%r0 - jnl SYSCALL_ERROR_LABEL - - /* Successful; return the syscall's value. */ - br %r14 - -#endif - -#if !defined __ASSUME_MMAP2_SYSCALL || !defined __NR_mmap2 -1: lm %r0,%r1,216(%r15) /* Load 64 bit offset. */ - st %r1,0x74(%r15) /* Store lower word of offset. */ - ltr %r0,%r0 /* Offset > 2^32 ? */ - jnz 2f - alr %r1,%r3 /* Add length to offset. */ - brc 3,2f /* Carry -> EINVAL. */ - - la %r2,0x60(%r15) /* Load address of parameter list. */ - svc SYS_ify(mmap) /* Do the system call trap. */ - - l %r15,0(%r15) /* Load back chain. */ - lm %r6,%r15,24(%r15) /* Load registers. */ - - /* Check gpr 2 for error. */ - lhi %r0,-4096 - clr %r2,%r0 - jnl SYSCALL_ERROR_LABEL - - /* Successful; return the syscall's value. */ - br %r14 -#endif - -2: lhi %r2,-EINVAL - l %r15,0(%r15) /* Load back chain. */ - lm %r6,%r15,24(%r15) /* Load registers. */ - j SYSCALL_ERROR_LABEL - -PSEUDO_END (__mmap64) - -weak_alias (__mmap64, mmap64) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/msgctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/msgctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/msgctl.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/msgctl.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/readdir64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/readdir64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/readdir64.c Mon Aug 28 04:16:50 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/readdir64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/readdir64_r.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/readdir64_r.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/readdir64_r.c Mon Aug 28 04:16:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/readdir64_r.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/readelflib.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/readelflib.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/readelflib.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/readelflib.c Mon Mar 19 14:07:43 2001 @@ -0,0 +1,60 @@ +/* Copyright (C) 2001 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. */ + + +int process_elf32_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); +int process_elf64_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); + +/* Returns 0 if everything is ok, != 0 in case of error. */ +int +process_elf_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, void *file_contents, + size_t file_length) +{ + ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; + int ret; + + if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) + return process_elf32_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); + else + { + ret = process_elf64_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); + /* S/390 64bit libraries are always libc.so.6+. */ + if (!ret) + *flag = FLAG_S390_LIB64|FLAG_ELF_LIBC6; + return ret; + } +} + +#undef __ELF_NATIVE_CLASS +#undef process_elf_file +#define process_elf_file process_elf32_file +#define __ELF_NATIVE_CLASS 32 +#include "sysdeps/generic/readelflib.c" + +#undef __ELF_NATIVE_CLASS +#undef process_elf_file +#define process_elf_file process_elf64_file +#define __ELF_NATIVE_CLASS 64 +#include "sysdeps/generic/readelflib.c" diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/register-dump.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/register-dump.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/register-dump.h Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/register-dump.h Wed Dec 31 16:00:00 1969 @@ -1,130 +0,0 @@ -/* Dump registers. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 -#include - -/* We will print the register dump in this format: - - GPR0: XXXXXXXX GPR1: XXXXXXXX GPR2: XXXXXXXX GPR3: XXXXXXXX - GPR4: XXXXXXXX GPR5: XXXXXXXX GPR6: XXXXXXXX GPR7: XXXXXXXX - GPR8: XXXXXXXX GPR9: XXXXXXXX GPRA: XXXXXXXX GPRB: XXXXXXXX - GPRC: XXXXXXXX GPRD: XXXXXXXX GPRE: XXXXXXXX GPRF: XXXXXXXX - - PSW.MASK: XXXXXXXX PSW.ADDR: XXXXXXXX - - ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX - ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX - ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX - ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[19][8]; - struct iovec iov[40]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->sregs->regs.gprs[0], regs[0], 8); - hexvalue (ctx->sregs->regs.gprs[1], regs[1], 8); - hexvalue (ctx->sregs->regs.gprs[2], regs[2], 8); - hexvalue (ctx->sregs->regs.gprs[3], regs[3], 8); - hexvalue (ctx->sregs->regs.gprs[4], regs[4], 8); - hexvalue (ctx->sregs->regs.gprs[5], regs[5], 8); - hexvalue (ctx->sregs->regs.gprs[6], regs[6], 8); - hexvalue (ctx->sregs->regs.gprs[7], regs[7], 8); - hexvalue (ctx->sregs->regs.gprs[8], regs[8], 8); - hexvalue (ctx->sregs->regs.gprs[9], regs[9], 8); - hexvalue (ctx->sregs->regs.gprs[10], regs[10], 8); - hexvalue (ctx->sregs->regs.gprs[11], regs[11], 8); - hexvalue (ctx->sregs->regs.gprs[12], regs[12], 8); - hexvalue (ctx->sregs->regs.gprs[13], regs[13], 8); - hexvalue (ctx->sregs->regs.gprs[14], regs[14], 8); - hexvalue (ctx->sregs->regs.gprs[15], regs[15], 8); - hexvalue (ctx->sregs->regs.psw.mask, regs[16], 8); - hexvalue (ctx->sregs->regs.psw.addr, regs[17], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n GPR0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" GPR1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" GPR2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" GPR3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n GPR4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" GPR5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" GPR6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" GPR7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n GPR8: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" GPR9: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" GPRA: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" GPRB: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n GPRC: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" GPRD: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" GPRE: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" GPRF: "); - ADD_MEM (regs[15], 8); - ADD_STRING ("\n\n PSW.MASK: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" PSW.ADDR: "); - ADD_MEM (regs[17], 8); - ADD_STRING (" TRAP: "); - ADD_MEM (regs[18], 4); - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, &ctx) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/Dist Sat Apr 7 14:02:40 2001 @@ -0,0 +1,8 @@ +clone.S +oldgetrlimit64.c +setresuid.c +setresgid.c +setfsuid.c +setfsgid.c +sys/procfs.h +ucontext_i.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/Makefile glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/Makefile Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/Makefile Fri Mar 16 01:22:13 2001 @@ -0,0 +1,12 @@ +ifeq ($(subdir),misc) +sysdep_routines += setfsgid setfsuid setresgid setresuid +sysdep_headers += sys/elf.h +endif + +ifeq ($(subdir),csu) +CFLAGS-initfini.s += -DWEAK_GMON_START +endif + +ifeq ($(subdir),resource) +sysdep_routines += oldgetrlimit64 +endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/Versions glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/Versions --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/Versions Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/Versions Fri Mar 16 01:22:33 2001 @@ -0,0 +1,28 @@ +libc { + GLIBC_2.0 { + # Exception handling support functions from libgcc + __register_frame; __register_frame_table; __deregister_frame; + __register_frame_info; __deregister_frame_info; __frame_state_for; + __register_frame_info_table; + } + GLIBC_2.2 { + # functions used in other libraries + __xstat64; __fxstat64; __lxstat64; + + # a* + alphasort64; + + # New rlimit interface + getrlimit; setrlimit; getrlimit64; + + # r* + readdir64; readdir64_r; + + # s* + scandir64; + + # v* + versionsort64; + } +} + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c Fri Mar 16 01:23:28 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h Fri Mar 16 01:43:30 2001 @@ -0,0 +1,179 @@ +/* O_*, F_*, FD_* bit values for Linux. + Copyright (C) 2000, 2001 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 _FCNTL_H +# error "Never use directly; include instead." +#endif + + +#include + +/* open/fcntl - O_SYNC is only implemented on blocks devices and on files + located on an ext2 file system */ +#define O_ACCMODE 0003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 0100 /* not fcntl */ +#define O_EXCL 0200 /* not fcntl */ +#define O_NOCTTY 0400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 +#define O_NDELAY O_NONBLOCK +#define O_SYNC 010000 +#define O_FSYNC O_SYNC +#define O_ASYNC 020000 + +#ifdef __USE_GNU +# define O_DIRECT 040000 /* Direct disk access. */ +# define O_DIRECTORY 0200000 /* Must be a directory. */ +# define O_NOFOLLOW 0400000 /* Do not follow links. */ +#endif + +/* For now Linux has synchronisity options for data and read operations. + We define the symbols here but let them do the same as O_SYNC since + this is a superset. */ +#if defined __USE_POSIX199309 || defined __USE_UNIX98 +# define O_DSYNC O_SYNC /* Synchronize data. */ +# define O_RSYNC O_SYNC /* Synchronize read operations. */ +#endif + +#ifdef __USE_LARGEFILE64 +# define O_LARGEFILE 0100000 +#endif + +/* Values for the second argument to `fcntl'. */ +#define F_DUPFD 0 /* Duplicate file descriptor. */ +#define F_GETFD 1 /* Get file descriptor flags. */ +#define F_SETFD 2 /* Set file descriptor flags. */ +#define F_GETFL 3 /* Get file status flags. */ +#define F_SETFL 4 /* Set file status flags. */ +#ifndef __USE_FILE_OFFSET64 +#define F_GETLK 5 /* Get record locking info. */ +#define F_SETLK 6 /* Set record locking info (non-blocking). */ +#define F_SETLKW 7 /* Set record locking info (blocking). */ +#else +# define F_GETLK F_GETLK64 /* Get record locking info. */ +# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ +# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ +#endif +#define F_GETLK64 12 /* Get record locking info. */ +#define F_SETLK64 13 /* Set record locking info (non-blocking). */ +#define F_SETLKW64 14 /* Set record locking info (blocking). */ + +#if defined __USE_BSD || defined __USE_XOPEN2K +# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ +# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ +#endif + +#ifdef __USE_GNU +# define F_SETSIG 10 /* Set number of signal to be sent. */ +# define F_GETSIG 11 /* Get number of signal to be sent. */ +#endif + +#ifdef __USE_GNU +# define F_SETLEASE 1024 /* Set a lease. */ +# define F_GETLEASE 1025 /* Enquire what lease is active. */ +# define F_NOTIFY 1026 /* Request notfications on a directory. */ +#endif + +/* For F_[GET|SET]FL. */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ +#define F_RDLCK 0 /* Read lock. */ +#define F_WRLCK 1 /* Write lock. */ +#define F_UNLCK 2 /* Remove lock. */ + +/* for old implementation of bsd flock () */ +#define F_EXLCK 4 /* or 3 */ +#define F_SHLCK 8 /* or 4 */ + +#ifdef __USE_BSD +/* operations for bsd flock(), also used by the kernel implementation */ +# define LOCK_SH 1 /* shared lock */ +# define LOCK_EX 2 /* exclusive lock */ +# define LOCK_NB 4 /* or'd with one of the above to prevent + blocking */ +# define LOCK_UN 8 /* remove lock */ +#endif + +#ifdef __USE_GNU +# define LOCK_MAND 32 /* This is a mandatory flock: */ +# define LOCK_READ 64 /* ... which allows concurrent read operations. */ +# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ +# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ +#endif + +#ifdef __USE_GNU +/* Types of directory notifications that may be requested with F_NOTIFY. */ +# define DN_ACCESS 0x00000001 /* File accessed. */ +# define DN_MODIFY 0x00000002 /* File modified. */ +# define DN_CREATE 0x00000004 /* File created. */ +# define DN_DELETE 0x00000008 /* File removed. */ +# define DN_RENAME 0x00000010 /* File renamed. */ +# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ +# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ +#endif + +struct flock + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ +#ifndef __USE_FILE_OFFSET64 + __off_t l_start; /* Offset where the lock begins. */ + __off_t l_len; /* Size of the locked area; zero means until EOF. */ +#else + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ +#endif + __pid_t l_pid; /* Process holding the lock. */ + }; + +#ifdef __USE_LARGEFILE64 +struct flock64 + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; +#endif + +/* Define some more compatibility macros to be backward compatible with + BSD systems which did not managed to hide these kernel macros. */ +#ifdef __USE_BSD +# define FAPPEND O_APPEND +# define FFSYNC O_FSYNC +# define FASYNC O_ASYNC +# define FNONBLOCK O_NONBLOCK +# define FNDELAY O_NDELAY +#endif /* Use BSD. */ + +/* Advise to `posix_fadvise'. */ +#ifdef __USE_XOPEN2K +# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ +# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ +# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ +# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ +# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h Fri Mar 16 01:43:43 2001 @@ -0,0 +1,93 @@ +/* Definitions for POSIX memory map interface. Linux/s390 version. + Copyright (C) 2000, 2001 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 _SYS_MMAN_H +# error "Never use directly; include instead." +#endif + +/* The following definitions basically come from the kernel headers. + But the kernel header is not namespace clean. */ + + +/* Protections are chosen from these bits, OR'd together. The + implementation does not necessarily support PROT_EXEC or PROT_WRITE + without PROT_READ. The only guarantees are that no writing will be + allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ + +#define PROT_READ 0x1 /* Page can be read. */ +#define PROT_WRITE 0x2 /* Page can be written. */ +#define PROT_EXEC 0x4 /* Page can be executed. */ +#define PROT_NONE 0x0 /* Page can not be accessed. */ + +/* Sharing types (must choose one and only one of these). */ +#define MAP_SHARED 0x01 /* Share changes. */ +#define MAP_PRIVATE 0x02 /* Changes are private. */ +#ifdef __USE_MISC +# define MAP_TYPE 0x0f /* Mask for type of mapping. */ +#endif + +/* Other flags. */ +#define MAP_FIXED 0x10 /* Interpret addr exactly. */ +#ifdef __USE_MISC +# define MAP_FILE 0 +# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ +# define MAP_ANON MAP_ANONYMOUS +#endif + +/* These are Linux-specific. */ +#ifdef __USE_MISC +# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ +# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ +# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ +# define MAP_LOCKED 0x2000 /* Lock the mapping. */ +# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ +#endif + +/* Flags to `msync'. */ +#define MS_ASYNC 1 /* Sync memory asynchronously. */ +#define MS_SYNC 4 /* Synchronous memory sync. */ +#define MS_INVALIDATE 2 /* Invalidate the caches. */ + +/* Flags for `mlockall'. */ +#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ +#define MCL_FUTURE 2 /* Lock all additions to address + space. */ + +/* Flags for `mremap'. */ +#ifdef __USE_GNU +# define MREMAP_MAYMOVE 1 +#endif + +/* Advice to `madvise'. */ +#ifdef __USE_BSD +# define MADV_NORMAL 0 /* No further special treatment. */ +# define MADV_RANDOM 1 /* Expect random page references. */ +# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define MADV_WILLNEED 3 /* Will need these pages. */ +# define MADV_DONTNEED 4 /* Don't need these pages. */ +#endif + +/* The POSIX people had to invent similar names for the same things. */ +#ifdef __USE_XOPEN2K +# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ +# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ +# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ +# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h Fri Mar 16 01:43:55 2001 @@ -0,0 +1,205 @@ +/* Bit values & structures for resource limits. Linux version. + Copyright (C) 2000, 2001 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 _SYS_RESOURCE_H +# error "Never use directly; include instead." +#endif + +#include + +/* Transmute defines to enumerations. The macro re-definitions are + necessary because some programs want to test for operating system + features with #ifdef RUSAGE_SELF. In ISO C the reflexive + definition is a no-op. */ + +/* Kinds of resource limit. */ +enum __rlimit_resource +{ + /* Per-process CPU limit, in seconds. */ + RLIMIT_CPU = 0, +#define RLIMIT_CPU RLIMIT_CPU + + /* Largest file that can be created, in bytes. */ + RLIMIT_FSIZE = 1, +#define RLIMIT_FSIZE RLIMIT_FSIZE + + /* Maximum size of data segment, in bytes. */ + RLIMIT_DATA = 2, +#define RLIMIT_DATA RLIMIT_DATA + + /* Maximum size of stack segment, in bytes. */ + RLIMIT_STACK = 3, +#define RLIMIT_STACK RLIMIT_STACK + + /* Largest core file that can be created, in bytes. */ + RLIMIT_CORE = 4, +#define RLIMIT_CORE RLIMIT_CORE + + /* Largest resident set size, in bytes. + This affects swapping; processes that are exceeding their + resident set size will be more likely to have physical memory + taken from them. */ + RLIMIT_RSS = 5, +#define RLIMIT_RSS RLIMIT_RSS + + /* Number of open files. */ + RLIMIT_NOFILE = 7, + RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ +#define RLIMIT_NOFILE RLIMIT_NOFILE +#define RLIMIT_OFILE RLIMIT_OFILE + + /* Address space limit. */ + RLIMIT_AS = 9, +#define RLIMIT_AS RLIMIT_AS + + /* Number of processes. */ + RLIMIT_NPROC = 6, +#define RLIMIT_NPROC RLIMIT_NPROC + + /* Locked-in-memory address space. */ + RLIMIT_MEMLOCK = 8, +#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK + + RLIMIT_NLIMITS = 10, + RLIM_NLIMITS = RLIMIT_NLIMITS +#define RLIMIT_NLIMITS RLIMIT_NLIMITS +#define RLIM_NLIMITS RLIM_NLIMITS +}; + +/* Value to indicate that there is no limit. */ +#ifndef __USE_FILE_OFFSET64 +# define RLIM_INFINITY ((unsigned long int) (~0UL)) +#else +# define RLIM_INFINITY 0xffffffffffffffffuLL +#endif + +#ifdef __USE_LARGEFILE64 +# define RLIM64_INFINITY 0xffffffffffffffffuLL +#endif + +/* We can represent all limits. */ +#define RLIM_SAVED_MAX RLIM_INFINITY +#define RLIM_SAVED_CUR RLIM_INFINITY + + +/* Type for resource quantity measurement. */ +#ifndef __USE_FILE_OFFSET64 +typedef __rlim_t rlim_t; +#else +typedef __rlim64_t rlim_t; +#endif +#ifdef __USE_LARGEFILE64 +typedef __rlim64_t rlim64_t; +#endif + +struct rlimit + { + /* The current (soft) limit. */ + rlim_t rlim_cur; + /* The hard limit. */ + rlim_t rlim_max; + }; + +#ifdef __USE_LARGEFILE64 +struct rlimit64 + { + /* The current (soft) limit. */ + rlim64_t rlim_cur; + /* The hard limit. */ + rlim64_t rlim_max; + }; +#endif + +/* Whose usage statistics do you want? */ +enum __rusage_who +{ + /* The calling process. */ + RUSAGE_SELF = 0, +#define RUSAGE_SELF RUSAGE_SELF + + /* All of its terminated child processes. */ + RUSAGE_CHILDREN = -1, +#define RUSAGE_CHILDREN RUSAGE_CHILDREN + + /* Both. */ + RUSAGE_BOTH = -2 +#define RUSAGE_BOTH RUSAGE_BOTH +}; + +#define __need_timeval +#include /* For `struct timeval'. */ + +/* Structure which says how much of each resource has been used. */ +struct rusage + { + /* Total amount of user time used. */ + struct timeval ru_utime; + /* Total amount of system time used. */ + struct timeval ru_stime; + /* Maximum resident set size (in kilobytes). */ + long int ru_maxrss; + /* Amount of sharing of text segment memory + with other processes (kilobyte-seconds). */ + long int ru_ixrss; + /* Amount of data segment memory used (kilobyte-seconds). */ + long int ru_idrss; + /* Amount of stack memory used (kilobyte-seconds). */ + long int ru_isrss; + /* Number of soft page faults (i.e. those serviced by reclaiming + a page from the list of pages awaiting reallocation. */ + long int ru_minflt; + /* Number of hard page faults (i.e. those that required I/O). */ + long int ru_majflt; + /* Number of times a process was swapped out of physical memory. */ + long int ru_nswap; + /* Number of input operations via the file system. Note: This + and `ru_oublock' do not include operations with the cache. */ + long int ru_inblock; + /* Number of output operations via the file system. */ + long int ru_oublock; + /* Number of IPC messages sent. */ + long int ru_msgsnd; + /* Number of IPC messages received. */ + long int ru_msgrcv; + /* Number of signals delivered. */ + long int ru_nsignals; + /* Number of voluntary context switches, i.e. because the process + gave up the process before it had to (usually to wait for some + resource to be available). */ + long int ru_nvcsw; + /* Number of involuntary context switches, i.e. a higher priority process + became runnable or the current process used up its time slice. */ + long int ru_nivcsw; + }; + +/* Priority limits. */ +#define PRIO_MIN -20 /* Minimum priority a process can have. */ +#define PRIO_MAX 20 /* Maximum priority a process can have. */ + +/* The type of the WHICH argument to `getpriority' and `setpriority', + indicating what flavor of entity the WHO argument specifies. */ +enum __priority_which +{ + PRIO_PROCESS = 0, /* WHO is a process ID. */ +#define PRIO_PROCESS PRIO_PROCESS + PRIO_PGRP = 1, /* WHO is a process group ID. */ +#define PRIO_PGRP PRIO_PGRP + PRIO_USER = 2 /* WHO is a user ID. */ +#define PRIO_USER PRIO_USER +}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h Fri Mar 16 01:44:06 2001 @@ -0,0 +1,134 @@ +/* Copyright (C) 1992,95,96,97,98,99,2000,2001 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 _SYS_STAT_H +# error "Never include directly; use instead." +#endif + +/* Versions of the `struct stat' data structure. */ +#define _STAT_VER_LINUX_OLD 1 +#define _STAT_VER_KERNEL 1 +#define _STAT_VER_SVR4 2 +#define _STAT_VER_LINUX 3 +#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ + +/* Versions of the `xmknod' interface. */ +#define _MKNOD_VER_LINUX 1 +#define _MKNOD_VER_SVR4 2 +#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ + + +struct stat + { + __dev_t st_dev; /* Device. */ + unsigned int __pad1; +#ifndef __USE_FILE_OFFSET64 + __ino_t st_ino; /* File serial number. */ +#else + __ino_t __st_ino; /* 32bit file serial number. */ +#endif + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + __dev_t st_rdev; /* Device number, if device. */ + unsigned int __pad2; +#ifndef __USE_FILE_OFFSET64 + __off_t st_size; /* Size of file, in bytes. */ +#else + __off64_t st_size; /* Size of file, in bytes. */ +#endif + __blksize_t st_blksize; /* Optimal block size for I/O. */ + +#ifndef __USE_FILE_OFFSET64 + __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ +#else + __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ +#endif + __time_t st_atime; /* Time of last access. */ + unsigned long int __unused1; + __time_t st_mtime; /* Time of last modification. */ + unsigned long int __unused2; + __time_t st_ctime; /* Time of last status change. */ + unsigned long int __unused3; +#ifndef __USE_FILE_OFFSET64 + unsigned long int __unused4; + unsigned long int __unused5; +#else + __ino64_t st_ino; /* File serial number. */ +#endif + }; + +#ifdef __USE_LARGEFILE64 +struct stat64 + { + __dev_t st_dev; /* Device. */ + unsigned int __pad1; + + __ino_t __st_ino; /* 32bit file serial number. */ + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + __dev_t st_rdev; /* Device number, if device. */ + unsigned int __pad2; + __off64_t st_size; /* Size of file, in bytes. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ + + __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ + __time_t st_atime; /* Time of last access. */ + unsigned long int __unused1; + __time_t st_mtime; /* Time of last modification. */ + unsigned long int __unused2; + __time_t st_ctime; /* Time of last status change. */ + unsigned long int __unused3; + __ino64_t st_ino; /* File serial number. */ + }; +#endif + +/* Tell code we have these members. */ +#define _STATBUF_ST_BLKSIZE +#define _STATBUF_ST_RDEV + +/* Encoding of the file mode. */ + +#define __S_IFMT 0170000 /* These bits determine file type. */ + +/* File types. */ +#define __S_IFDIR 0040000 /* Directory. */ +#define __S_IFCHR 0020000 /* Character device. */ +#define __S_IFBLK 0060000 /* Block device. */ +#define __S_IFREG 0100000 /* Regular file. */ +#define __S_IFIFO 0010000 /* FIFO. */ +#define __S_IFLNK 0120000 /* Symbolic link. */ +#define __S_IFSOCK 0140000 /* Socket. */ + +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) + +/* Protection bits. */ + +#define __S_ISUID 04000 /* Set user ID on execution. */ +#define __S_ISGID 02000 /* Set group ID on execution. */ +#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ +#define __S_IREAD 0400 /* Read by owner. */ +#define __S_IWRITE 0200 /* Write by owner. */ +#define __S_IEXEC 0100 /* Execute by owner. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/chown.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/chown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/chown.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/chown.c Fri Mar 16 01:23:39 2001 @@ -0,0 +1,118 @@ +/* Copyright (C) 2000, 2001 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. */ + +#include +#include + +#include +#include +#include +#include + +#include +#include "kernel-features.h" + +/* + In Linux 2.1.x the chown functions have been changed. A new function lchown + was introduced. The new chown now follows symlinks - the old chown and the + new lchown do not follow symlinks. + The new lchown function has the same number as the old chown had and the + new chown has a new number. When compiling with headers from Linux > 2.1.8x + it's impossible to run this libc with older kernels. In these cases libc + has therefore to route calls to chown to the old chown function. +*/ + +extern int __syscall_chown (const char *__file, + __kernel_uid_t __owner, __kernel_gid_t __group); + +/* Running under Linux > 2.1.80. */ + +#ifdef __NR_chown32 +extern int __syscall_chown32 (const char *__file, + __kernel_uid32_t owner, __kernel_gid32_t group); +# if __ASSUME_32BITUIDS == 0 +/* This variable is shared with all files that need to check for 32bit + uids. */ +extern int __libc_missing_32bit_uids; +# endif +#endif /* __NR_chown32 */ + +int +__real_chown (const char *file, uid_t owner, gid_t group) +{ + static int __libc_old_chown; + int result; + + if (!__libc_old_chown) + { + int saved_errno = errno; +#ifdef __NR_chown32 + if (__libc_missing_32bit_uids <= 0) + { + int result; + int saved_errno = errno; + + result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group); + if (result == 0 || errno != ENOSYS) + return result; + + __set_errno (saved_errno); + __libc_missing_32bit_uids = 1; + } +#endif /* __NR_chown32 */ + if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U)) + || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U))) + { + __set_errno (EINVAL); + return -1; + } + + result = INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group); + + if (result >= 0 || errno != ENOSYS) + return result; + + __set_errno (saved_errno); + __libc_old_chown = 1; + } + + return __lchown (file, owner, group); +} + + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +/* Compiling for compatibiity. */ +int +__chown_is_lchown (const char *file, uid_t owner, gid_t group) +{ + return __lchown (file, owner, group); +} +#endif + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +strong_alias (__chown_is_lchown, _chown_is_lchown) +compat_symbol (libc, __chown_is_lchown, __chown, GLIBC_2_0); +compat_symbol (libc, _chown_is_lchown, chown, GLIBC_2_0); + +strong_alias (__real_chown, _real_chown) +versioned_symbol (libc, __real_chown, __chown, GLIBC_2_1); +versioned_symbol (libc, _real_chown, chown, GLIBC_2_1); +#else +strong_alias (__real_chown, __chown) +weak_alias (__real_chown, chown) +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/clone.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/clone.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/clone.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/clone.S Fri Mar 16 01:23:14 2001 @@ -0,0 +1,66 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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. */ + +/* clone is even more special than fork as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include +#define _ERRNO_H 1 +#include + +/*int __clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg);*/ +/* sys_clone(void *child_stack, unsigned long flags) */ + + .text +ENTRY(__clone) + /* Sanity check arguments & move registers */ + ltr %r1,%r2 /* no NULL function pointers */ + lhi %r2,-EINVAL + jz SYSCALL_ERROR_LABEL + ltr %r3,%r3 /* no NULL stack pointers */ + jz SYSCALL_ERROR_LABEL + /* move child_stack and flags, then call SVC */ + lr %r2,%r3 + lr %r3,%r4 + svc SYS_ify(clone) + ltr %r2,%r2 /* check return code */ + jm SYSCALL_ERROR_LABEL + jz thread_start + br %r14 + +thread_start: + /* fn is in gpr 1, arg in gpr 5 */ + lr %r2,%r5 /* set first parameter to void *arg */ + sr %r11,%r11 /* terminate the stack frame */ + ahi %r15,-96 /* make room on the stack for the save area */ + basr %r14,%r1 /* jump to fn */ +#ifdef PIC + basr %r12,0 +.L0: lr %r1,%r12 + al %r12,.L1-.L0(%r12) + al %r1,.L2-.L0(%r1) + br %r1 /* branch to _exit -> thread termination */ +.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 +.L2: .long _exit@PLT - .L0 +#else + basr %r1,0 +.L0: al %r1,.L1-.L0(0,%r1) + br %r1 /* branch to _exit -> thread termination */ +.L1: .long _exit - .L0 +#endif +PSEUDO_END (__clone) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c Fri Mar 16 01:29:35 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c Fri Mar 16 01:29:47 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c Fri Mar 16 01:29:59 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S Thu Apr 12 14:02:18 2001 @@ -0,0 +1,72 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include + +#include "ucontext_i.h" + +/* __getcontext (const ucontext_t *ucp) + + Saves the machine context in UCP such that when it is activated, + it appears as if __getcontext() returned again. + + This implementation is intended to be used for *synchronous* context + switches only. Therefore, it does not have to save anything + other than the PRESERVED state. */ + +ENTRY(__getcontext) + lr %r5,%r2 + + /* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */ + la %r2,SIG_BLOCK + slr %r3,%r3 + la %r4,SC_MASK(%r5) + svc SYS_ify(rt_sigprocmask) + + /* Store fpu context. */ + stfpc SC_FPC(%r5) + std %f0,SC_FPRS(%r5) + std %f1,SC_FPRS+8(%r5) + std %f2,SC_FPRS+16(%r5) + std %f3,SC_FPRS+24(%r5) + std %f4,SC_FPRS+32(%r5) + std %f5,SC_FPRS+40(%r5) + std %f6,SC_FPRS+48(%r5) + std %f7,SC_FPRS+56(%r5) + std %f8,SC_FPRS+64(%r5) + std %f9,SC_FPRS+72(%r5) + std %f10,SC_FPRS+80(%r5) + std %f11,SC_FPRS+88(%r5) + std %f12,SC_FPRS+96(%r5) + std %f13,SC_FPRS+104(%r5) + std %f14,SC_FPRS+112(%r5) + std %f15,SC_FPRS+120(%r5) + + /* Set __getcontext return value to 0. */ + slr %r2,%r2 + + /* Store general purpose registers. */ + stm %r0,%r15,SC_GPRS(%r5) + + /* Return. */ + br %r14 +END(__getcontext) + +weak_alias(__getcontext, getcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c Fri Mar 16 01:30:14 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getegid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getegid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getegid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getegid.c Fri Mar 16 01:30:30 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c Fri Mar 16 01:30:41 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getgid.c Fri Mar 16 01:30:52 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c Fri Mar 16 01:31:16 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c Fri Mar 16 01:31:53 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c Fri Mar 16 01:32:19 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c Fri Mar 16 01:32:32 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c Fri Mar 16 01:32:46 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/getuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/getuid.c Fri Mar 16 01:33:00 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c Fri Mar 16 01:33:13 2001 @@ -0,0 +1,75 @@ +/* Copyright (C) 2000, 2001 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. */ + +#include +#include + +#include +#include +#include + +#include +#include "kernel-features.h" + +extern int __syscall_lchown (const char *__unbounded __file, + __kernel_uid_t __owner, __kernel_gid_t __group); + +# ifdef __NR_lchown32 +extern int __syscall_lchown32 (const char *__unbounded __file, + __kernel_uid32_t __owner, + __kernel_gid32_t __group); +# if __ASSUME_32BITUIDS == 0 +/* This variable is shared with all files that need to check for 32bit + uids. */ +extern int __libc_missing_32bit_uids; +# endif +# endif /* __NR_lchown32 */ + +int +__lchown (const char *file, uid_t owner, gid_t group) +{ +# if __ASSUME_32BITUIDS > 0 + return INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group); +# else +# ifdef __NR_lchown32 + if (__libc_missing_32bit_uids <= 0) + { + int result; + int saved_errno = errno; + + result = INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group); + if (result == 0 || errno != ENOSYS) + return result; + + __set_errno (saved_errno); + __libc_missing_32bit_uids = 1; + } +# endif /* __NR_lchown32 */ + + if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U)) + || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U))) + { + __set_errno (EINVAL); + return -1; + } + + return INLINE_SYSCALL (lchown, 3, CHECK_STRING (file), owner, group); +# endif +} + +weak_alias (__lchown, lchown) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c Fri Mar 16 01:33:30 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c Fri Mar 16 01:33:52 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c Wed Apr 4 10:32:39 2001 @@ -0,0 +1,101 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include +#include +#include +#include + +/* This implementation can handle any ARGC value but only + normal integer type parameters. Parameters of type float, + double, complex and structure with sizes 0, 2, 4 or 8 + won't work. + makecontext sets up a stack and the registers for the + context. The stack looks like this: + size offset + %r15 -> +-----------------------+ + 4 | back chain (zero) | 0 + 4 | reserved | 4 + 88 | save area for (*func) | 8 + +-----------------------+ + n | overflow parameters | 96 + +-----------------------+ + 8 | trampoline | 96+n + +-----------------------+ + The registers are set up like this: + %r2-%r6: parameters 1 to 5 + %r7 : (*func) pointer + %r8 : uc_link from ucontext structure + %r9 : address of setcontext + %r14 : return address to uc_link trampoline + %r15 : stack pointer. + + The trampoline looks like this: + basr %r14,%r7 + lr %r2,%r8 + br %r9. */ + +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + unsigned long *sp; + va_list ap; + int i; + + sp = (long *) (((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & -8L); + + /* Setup the trampoline. */ + *--sp = 0x07f90000; + *--sp = 0x0de71828; + + /* Set the return address to trampoline. */ + ucp->uc_mcontext.gregs[14] = (long) sp; + + /* Set register parameters. */ + va_start (ap, argc); + for (i = 0; (i < argc) && (i < 5); i++) + ucp->uc_mcontext.gregs[2+i] = va_arg (ap, long); + + /* The remaining arguments go to the overflow area. */ + if (argc > 5) { + sp -= argc - 5; + for (i = 5; i < argc; i++) + sp[i] = va_arg(ap, long); + } + va_end (ap); + + /* Make room for the save area and set the backchain. */ + sp -= 24; + *sp = 0; + + /* Pass (*func) to __start_context in %r7. */ + ucp->uc_mcontext.gregs[7] = (long) func; + + /* Pass ucp->uc_link to __start_context in %r8. */ + ucp->uc_mcontext.gregs[8] = (long) ucp->uc_link; + + /* Pass address of setcontext in %r9. */ + ucp->uc_mcontext.gregs[9] = (long) &setcontext; + + /* Set stack pointer. */ + ucp->uc_mcontext.gregs[15] = (long) sp; +} + +weak_alias (__makecontext, makecontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S Fri Mar 16 01:34:04 2001 @@ -0,0 +1,72 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 EINVAL 22 + + .text +ENTRY(__mmap) + /* Save registers and setup stack frame. */ + stm %r6,%r15,24(%r15) + lr %r1,%r15 + ahi %r15,-120 /* buy stack space */ + st %r1,0(%r15) /* store back chain */ + + /* Store parameters on stack, because old_mmap/mmap2 + * take only one parameter: a pointer to the parameter area + */ + st %r6,0x70(%r15) /* Store 'fd'. */ + st %r5,0x6C(%r15) /* Store 'flags'. */ + st %r4,0x68(%r15) /* Store 'prot'. */ + st %r3,0x64(%r15) /* Store 'length'. */ + st %r2,0x60(%r15) /* Store 'start'. */ + l %r1,216(%r15) /* Load offset. */ + +#ifdef __ASSUME_MMAP2_SYSCALL + /* I don't think it is worthwhile trying to use mmap2 whenever + * it is available. Only use it when we are sure the syscall + * exists. */ + tml %r1,0x0fff /* Offset page aligned ? */ + lhi %r2,-EINVAL + jnz 1f /* No -> EINVAL. */ + srl %r1,12 /* mmap2 takes the offset in pages. */ + st %r1,0x74(%r15) /* Store page offset. */ + la %r2,0x60(%r15) /* Load address of parameter list. */ + svc SYS_ify(mmap2) /* Do the system call trap. */ +#else + st %r1,0x74(%r15) /* Store offset unmodified. */ + la %r2,0x60(%r15) /* Load address of parameter list. */ + svc SYS_ify(mmap) /* Do the system call trap. */ +#endif + +1: l %r15,0(%r15) /* Load back chain. */ + lm %r6,%r15,24(%r15) /* Load registers. */ + + /* check gpr 2 for error */ + lhi %r0,-4096 + clr %r2,%r0 + jnl SYSCALL_ERROR_LABEL + + /* Successful; return the syscall's value. */ + br %r14 + +PSEUDO_END (__mmap) + +weak_alias (__mmap, mmap) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S Fri Mar 16 01:34:18 2001 @@ -0,0 +1,101 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 EINVAL 22 +#define ENOSYS 38 + + .text +ENTRY(__mmap64) + /* Save registers and setup stack frame. */ + stm %r6,%r15,24(%r15) + lr %r1,%r15 + ahi %r15,-120 /* Buy stack space. */ + st %r1,0(%r15) /* Store back chain. */ + + /* Store parameters on stack, because mmap2 and old_mmap + * take only one parameter: a pointer to the parameter area. */ + st %r6,0x70(%r15) /* Store 'fd'. */ + st %r5,0x6C(%r15) /* Store 'flags'. */ + st %r4,0x68(%r15) /* Store 'prot'. */ + st %r3,0x64(%r15) /* Store 'length'. */ + st %r2,0x60(%r15) /* Store 'start'. */ + +#ifdef __NR_mmap2 + lm %r0,%r1,216(%r15) /* Load 64 bit offset. */ + tml %r1,0x0fff /* Offset page aligned ? */ + jnz 2f /* No -> EINVAL. */ + srdl %r0,12 /* mmap2 takes the offset in pages. */ + ltr %r0,%r0 /* Offset > 2^44 ? */ + jnz 2f + st %r1,0x74(%r15) /* Store page offset. */ + + la %r2,0x60(%r15) /* Load address of parameter list. */ + svc SYS_ify(mmap2) /* Do the system call trap. */ + +#ifndef __ASSUME_MMAP2_SYSCALL + chi %r0,-ENOSYS + je 1f +#endif + + l %r15,0(%r15) /* Load back chain. */ + lm %r6,%r15,24(%r15) /* Load registers. */ + + /* Check gpr 2 for error. */ + lhi %r0,-4096 + clr %r2,%r0 + jnl SYSCALL_ERROR_LABEL + + /* Successful; return the syscall's value. */ + br %r14 + +#endif + +#if !defined __ASSUME_MMAP2_SYSCALL || !defined __NR_mmap2 +1: lm %r0,%r1,216(%r15) /* Load 64 bit offset. */ + st %r1,0x74(%r15) /* Store lower word of offset. */ + ltr %r0,%r0 /* Offset > 2^32 ? */ + jnz 2f + alr %r1,%r3 /* Add length to offset. */ + brc 3,2f /* Carry -> EINVAL. */ + + la %r2,0x60(%r15) /* Load address of parameter list. */ + svc SYS_ify(mmap) /* Do the system call trap. */ + + l %r15,0(%r15) /* Load back chain. */ + lm %r6,%r15,24(%r15) /* Load registers. */ + + /* Check gpr 2 for error. */ + lhi %r0,-4096 + clr %r2,%r0 + jnl SYSCALL_ERROR_LABEL + + /* Successful; return the syscall's value. */ + br %r14 +#endif + +2: lhi %r2,-EINVAL + l %r15,0(%r15) /* Load back chain. */ + lm %r6,%r15,24(%r15) /* Load registers. */ + j SYSCALL_ERROR_LABEL + +PSEUDO_END (__mmap64) + +weak_alias (__mmap64, mmap64) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c Fri Mar 16 01:34:51 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c Fri Mar 16 01:35:14 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c Fri Mar 16 01:35:32 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c Fri Mar 16 01:35:45 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h Fri Mar 16 01:36:12 2001 @@ -0,0 +1,130 @@ +/* Dump registers. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 +#include + +/* We will print the register dump in this format: + + GPR0: XXXXXXXX GPR1: XXXXXXXX GPR2: XXXXXXXX GPR3: XXXXXXXX + GPR4: XXXXXXXX GPR5: XXXXXXXX GPR6: XXXXXXXX GPR7: XXXXXXXX + GPR8: XXXXXXXX GPR9: XXXXXXXX GPRA: XXXXXXXX GPRB: XXXXXXXX + GPRC: XXXXXXXX GPRD: XXXXXXXX GPRE: XXXXXXXX GPRF: XXXXXXXX + + PSW.MASK: XXXXXXXX PSW.ADDR: XXXXXXXX + + ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX + ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX + ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX + ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX + + */ + +static void +hexvalue (unsigned long int value, char *buf, size_t len) +{ + char *cp = _itoa_word (value, buf + len, 16, 0); + while (cp > buf) + *--cp = '0'; +} + +static void +register_dump (int fd, struct sigcontext *ctx) +{ + char regs[19][8]; + struct iovec iov[40]; + size_t nr = 0; + +#define ADD_STRING(str) \ + iov[nr].iov_base = (char *) str; \ + iov[nr].iov_len = strlen (str); \ + ++nr +#define ADD_MEM(str, len) \ + iov[nr].iov_base = str; \ + iov[nr].iov_len = len; \ + ++nr + + /* Generate strings of register contents. */ + hexvalue (ctx->sregs->regs.gprs[0], regs[0], 8); + hexvalue (ctx->sregs->regs.gprs[1], regs[1], 8); + hexvalue (ctx->sregs->regs.gprs[2], regs[2], 8); + hexvalue (ctx->sregs->regs.gprs[3], regs[3], 8); + hexvalue (ctx->sregs->regs.gprs[4], regs[4], 8); + hexvalue (ctx->sregs->regs.gprs[5], regs[5], 8); + hexvalue (ctx->sregs->regs.gprs[6], regs[6], 8); + hexvalue (ctx->sregs->regs.gprs[7], regs[7], 8); + hexvalue (ctx->sregs->regs.gprs[8], regs[8], 8); + hexvalue (ctx->sregs->regs.gprs[9], regs[9], 8); + hexvalue (ctx->sregs->regs.gprs[10], regs[10], 8); + hexvalue (ctx->sregs->regs.gprs[11], regs[11], 8); + hexvalue (ctx->sregs->regs.gprs[12], regs[12], 8); + hexvalue (ctx->sregs->regs.gprs[13], regs[13], 8); + hexvalue (ctx->sregs->regs.gprs[14], regs[14], 8); + hexvalue (ctx->sregs->regs.gprs[15], regs[15], 8); + hexvalue (ctx->sregs->regs.psw.mask, regs[16], 8); + hexvalue (ctx->sregs->regs.psw.addr, regs[17], 8); + + /* Generate the output. */ + ADD_STRING ("Register dump:\n\n GPR0: "); + ADD_MEM (regs[0], 8); + ADD_STRING (" GPR1: "); + ADD_MEM (regs[1], 8); + ADD_STRING (" GPR2: "); + ADD_MEM (regs[2], 8); + ADD_STRING (" GPR3: "); + ADD_MEM (regs[3], 8); + ADD_STRING ("\n GPR4: "); + ADD_MEM (regs[4], 8); + ADD_STRING (" GPR5: "); + ADD_MEM (regs[5], 8); + ADD_STRING (" GPR6: "); + ADD_MEM (regs[6], 8); + ADD_STRING (" GPR7: "); + ADD_MEM (regs[7], 8); + ADD_STRING ("\n GPR8: "); + ADD_MEM (regs[8], 8); + ADD_STRING (" GPR9: "); + ADD_MEM (regs[9], 8); + ADD_STRING (" GPRA: "); + ADD_MEM (regs[10], 8); + ADD_STRING (" GPRB: "); + ADD_MEM (regs[11], 8); + ADD_STRING ("\n GPRC: "); + ADD_MEM (regs[12], 8); + ADD_STRING (" GPRD: "); + ADD_MEM (regs[13], 8); + ADD_STRING (" GPRE: "); + ADD_MEM (regs[14], 8); + ADD_STRING (" GPRF: "); + ADD_MEM (regs[15], 8); + ADD_STRING ("\n\n PSW.MASK: "); + ADD_MEM (regs[16], 8); + ADD_STRING (" PSW.ADDR: "); + ADD_MEM (regs[17], 8); + ADD_STRING (" TRAP: "); + ADD_MEM (regs[18], 4); + ADD_STRING ("\n"); + + /* Write the stuff out. */ + writev (fd, iov, nr); +} + + +#define REGISTER_DUMP register_dump (fd, &ctx) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c Fri Mar 16 01:36:25 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/semctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/semctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/semctl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/semctl.c Fri Mar 16 01:36:38 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S Thu Apr 12 14:02:18 2001 @@ -0,0 +1,69 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include + +#include "ucontext_i.h" + +/* __setcontext (const ucontext_t *ucp) + + Restores the machine context in UCP and thereby resumes execution + in that context. + + This implementation is intended to be used for *synchronous* context + switches only. Therefore, it does not have to restore anything + other than the PRESERVED state. */ + +ENTRY(__setcontext) + lr %r5,%r2 + + /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ + la %r2,SIG_BLOCK + la %r3,SC_MASK(%r5) + slr %r4,%r4 + svc SYS_ify(rt_sigprocmask) + + /* Load fpu context. */ + lfpc SC_FPC(%r5) + ld %f0,SC_FPRS(%r5) + ld %f1,SC_FPRS+8(%r5) + ld %f2,SC_FPRS+16(%r5) + ld %f3,SC_FPRS+24(%r5) + ld %f4,SC_FPRS+32(%r5) + ld %f5,SC_FPRS+40(%r5) + ld %f6,SC_FPRS+48(%r5) + ld %f7,SC_FPRS+56(%r5) + ld %f8,SC_FPRS+64(%r5) + ld %f9,SC_FPRS+72(%r5) + ld %f10,SC_FPRS+80(%r5) + ld %f11,SC_FPRS+88(%r5) + ld %f12,SC_FPRS+96(%r5) + ld %f13,SC_FPRS+104(%r5) + ld %f14,SC_FPRS+112(%r5) + ld %f15,SC_FPRS+120(%r5) + + /* Load general purpose registers. */ + lm %r0,%r15,SC_GPRS(%r5) + + /* Return. */ + br %r14 +END(__setcontext) + +weak_alias(__setcontext, setcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setegid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setegid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setegid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setegid.c Fri Mar 16 01:36:51 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c Fri Mar 16 01:38:29 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c Fri Mar 16 01:38:42 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c Fri Mar 16 01:38:53 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setgid.c Fri Mar 16 01:39:06 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c Fri Mar 16 01:39:18 2001 @@ -0,0 +1,2 @@ +/* We also have to rewrite the kernel gid_t to the user land type. */ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setregid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setregid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setregid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setregid.c Fri Mar 16 01:39:32 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c Fri Mar 16 01:39:45 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c Fri Mar 16 01:39:56 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c Fri Mar 16 01:40:08 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c Fri Mar 16 01:40:21 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/setuid.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/setuid.c Fri Mar 16 01:40:48 2001 @@ -0,0 +1,2 @@ +#include + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c Fri Mar 16 01:41:35 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/socket.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/socket.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/socket.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/socket.S Fri Mar 16 01:41:47 2001 @@ -0,0 +1,98 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 +#include + +/* &%/$&!! preprocessor */ +#define P(a, b) P2(a, b) +#define P2(a, b) a##b + + .text +/* The socket-oriented system calls are handled unusally in Linux. + They are all gated through the single `socketcall' system call number. + `socketcall' takes two arguments: the first is the subcode, specifying + which socket function is being called; and the second is a pointer to + the arguments to the specific function. + + The .S files for the other calls just #define socket and #include this. */ + +#ifndef __socket +#ifndef NO_WEAK_ALIAS +#define __socket P(__,socket) +#else +#define __socket socket +#endif +#endif + +#ifndef NARGS /* the socket.o object is compiled directly ... */ +#define NARGS 3 +#endif + +.globl __socket +ENTRY(__socket) + + /* Save registers and setup stack. */ + stm %r6,%r15,24(%r15) /* save registers */ + lr %r1,%r15 + l %r0,4(0,%r15) /* load eos */ + ahi %r15,-120 /* buy stack space */ + st %r1,0(0,%r15) /* store back chain */ + st %r0,4(0,%r15) /* store eos */ + + /* Reorder arguments */ +#if (NARGS >= 6) + mvc 0x74(4,%r15),216(%r15) /* move between parameter lists */ +#endif +#if (NARGS >= 5) + st %r6,0x70(0,%r15) /* store into parameter list */ +#endif +#if (NARGS >= 4) + st %r5,0x6C(0,%r15) /* store into parameter list */ +#endif +#if (NARGS >= 3) + st %r4,0x68(0,%r15) /* store into parameter list */ +#endif +#if (NARGS >= 2) + st %r3,0x64(0,%r15) /* store into parameter list */ + st %r2,0x60(0,%r15) +#endif + /* load subcode for socket syscall */ + lhi %r2,P(SOCKOP_,socket) + la %r3,0x60(0,%r15) /* load address of parameter list */ + + /* Do the system call trap. */ + svc SYS_ify(socketcall) + + l %r15,0(0,%r15) /* load back chain */ + lm %r6,15,24(%r15) /* load registers */ + + /* gpr2 is < 0 if there was an error. */ + lhi %r0,-125 + clr %r2,%r0 + jnl SYSCALL_ERROR_LABEL + + /* Successful; return the syscall's value. */ + br %r14 + +PSEUDO_END (__socket) + +#ifndef NO_WEAK_ALIAS +weak_alias (__socket, socket) +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h Fri Mar 16 01:44:20 2001 @@ -0,0 +1,118 @@ +/* Copyright (C) 2000, 2001 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 _SYS_PROCFS_H +#define _SYS_PROCFS_H 1 + +/* This is somewhat modelled after the file of the same name on SVR4 + systems. It provides a definition of the core file format for ELF + used on Linux. It doesn't have anything to do with the /proc file + system, even though Linux has one. + + Anyway, the whole purpose of this file is for GDB and GDB only. + Don't read too much into it. Don't use it for anything other than + GDB unless you know what you are doing. */ + +#include +#include +#include +#include +#include + +__BEGIN_DECLS + +typedef greg_t elf_greg_t; +#define ELF_NGREG NGREG +typedef gregset_t elf_gregset_t; +typedef fpreg_t elf_fpreg_t; +typedef fpregset_t elf_fpregset_t; + +/* Signal info. */ +struct elf_siginfo + { + int si_signo; /* Signal number. */ + int si_code; /* Extra code. */ + int si_errno; /* Errno. */ + }; + + +/* Definitions to generate Intel SVR4-like core files. These mostly + have the same names as the SVR4 types with "elf_" tacked on the + front to prevent clashes with Linux definitions, and the typedef + forms have been avoided. This is mostly like the SVR4 structure, + but more Linuxy, with things that Linux does not support and which + GDB doesn't really use excluded. */ + +struct elf_prstatus + { + struct elf_siginfo pr_info; /* Info associated with signal. */ + short int pr_cursig; /* Current signal. */ + unsigned long int pr_sigpend; /* Set of pending signals. */ + unsigned long int pr_sighold; /* Set of held signals. */ + __pid_t pr_pid; + __pid_t pr_ppid; + __pid_t pr_pgrp; + __pid_t pr_sid; + struct timeval pr_utime; /* User time. */ + struct timeval pr_stime; /* System time. */ + struct timeval pr_cutime; /* Cumulative user time. */ + struct timeval pr_cstime; /* Cumulative system time. */ + elf_gregset_t pr_reg; /* GP registers. */ + int pr_fpvalid; /* True if math copro being used. */ + }; + + +#define ELF_PRARGSZ (80) /* Number of chars for args. */ + +struct elf_prpsinfo + { + char pr_state; /* Numeric process state. */ + char pr_sname; /* Char for pr_state. */ + char pr_zomb; /* Zombie. */ + char pr_nice; /* Nice val. */ + unsigned long int pr_flag; /* Flags. */ + unsigned short int pr_uid; + unsigned short int pr_gid; + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + /* Lots missing */ + char pr_fname[16]; /* Filename of executable. */ + char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ + }; + +/* The rest of this file provides the types for emulation of the + Solaris interfaces that should be implemented by + users of libthread_db. */ + +/* Addresses. */ +typedef void *psaddr_t; + +/* Register sets. Linux has different names. */ +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; + +/* We don't have any differences between processes and threads, + therefore have only one PID type. */ +typedef __pid_t lwpid_t; + +/* Process status and info. In the end we do provide typedefs for them. */ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + +__END_DECLS + +#endif /* sys/procfs.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h Sat Apr 7 14:02:40 2001 @@ -0,0 +1,76 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 +/* Forward definition to avoid parse errors */ +struct ucontext; +typedef struct ucontext ucontext_t; +#include +#include + +/* We need the signal context definitions even if they are not used + included in . */ +#include + + +/* Type for a general-purpose register. */ +typedef unsigned long greg_t; + +/* And the whole bunch of them. We should have used `struct s390_regs', + but to avoid name space pollution and since the tradition says that + the register set is an array, we make gregset_t a simple array + that has the same size as s390_regs. */ +#define NGREG 36 +#define NUM_FPRS 16 +typedef greg_t gregset_t[NGREG]; + +typedef union +{ + double d; + float f; +} fpreg_t; + +/* Register set for the floating-point registers. */ +typedef struct { + unsigned int fpc; + fpreg_t fprs[NUM_FPRS]; +} fpregset_t; + +/* Context to describe whole processor state. */ +typedef struct + { + int version; + gregset_t gregs; + fpregset_t fpregs; + } mcontext_t; + +/* Userlevel context. */ +struct ucontext + { + unsigned long int uc_flags; + struct ucontext *uc_link; + __sigset_t uc_sigmask; + stack_t uc_stack; + mcontext_t uc_mcontext; + long int uc_filler[170]; + }; + + +#endif /* sys/ucontext.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S Fri Mar 16 01:42:03 2001 @@ -0,0 +1,51 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +/* Please consult the file sysdeps/unix/sysv/linux/s390/sysdep.h for + more information about the value -4095 used below.*/ + +ENTRY (syscall) + /* Save registers and setup stack. */ + stm %r6,%r15,24(%r15) /* save registers */ + lr %r1,%r15 + l %r0,4(0,%r15) /* load eos */ + ahi %r15,-96 /* buy stack space */ + st %r1,0(0,%r15) /* store back chain */ + st %r0,4(0,%r15) /* store eos */ + + lr %r1,%r2 /* move syscall number */ + lr %r2,%r3 /* first parameter */ + lr %r3,%r4 /* second parameter */ + lr %r4,%r5 /* third parameter */ + lr %r5,%r6 /* fourth parameter */ + l %r6,192(%r15) /* fifth parameter */ + basr %r7,0 +.L0: ex %r1,.L1-.L0(%r7) /* lsb of R1 is subsituted as SVC number */ + + l %r15,0(0,%r15) /* load back chain */ + lm %r6,15,24(%r15) /* load registers */ + + lhi %r0,-4095 + clr %r2,%r0 /* check R2 for error */ + jnl SYSCALL_ERROR_LABEL + br %r14 /* return to caller */ +.L1: .word 0x0A00 /* opcode for SVC 0 */ +PSEUDO_END (syscall) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list Fri Mar 16 01:42:15 2001 @@ -0,0 +1,4 @@ +# File name Caller Syscall name Args Strong name Weak names + +oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0 +oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S Fri Mar 16 01:42:34 2001 @@ -0,0 +1,104 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +/* Because the Linux version is in fact m68k/ELF and the start.? file + for this system (sysdeps/m68k/elf/start.S) is also used by The Hurd + and therefore this files must not contain the definition of the + `errno' variable (I don't know why, ask Roland), we have to define + it somewhere else. + + ...and this place is here. */ + .bss + .globl errno + .type errno,@object + .size errno,4 +errno: + .space 4 +weak_alias (errno, _errno) + +/* The following code is only used in the shared library when we + compile the reentrant version. Otherwise each system call defines + each own version. */ + +/* The syscall stubs jump here when they detect an error. */ + +#undef CALL_MCOUNT +#define CALL_MCOUNT + + .text +ENTRY(__syscall_error) +#ifndef PIC +#ifndef _LIBC_REENTRANT + lcr %r2,%r2 + basr %r1,0 +.L0: l %r1,.L1-.L0(%r1) + st %r2,0(0,%r1) + lhi %r2,-1 + br %r14 +.L1: .long errno +#else + stm %r11,%r15,44(%r15) + lr %r0,%r15 + ahi %r15,-96 + st %r0,0(%r15) + lcr %r11,%r2 + basr %r13,0 +.L0: l %r1,.L1-.L0(%r13) + basr %r14,%r1 + st %r11,0(%r2) + lhi %r2,-1 + l %r15,0(%r15) + lm %r11,%r15,44(%r15) + br %r14 +.L1: .long __errno_location +#endif +#else +#ifndef _LIBC_REENTRANT + basr %r1,0 +.L0: al %r1,.L1-.L0(%r1) + l %r1,errno@GOT12(%r1) + lcr %r2,%r2 + st %r2,0(0,%r1) + lhi %r2,-1 + br %r14 +.L1: .long _GLOBAL_OFFSET_TABLE_-0b +#else + stm %r11,%r15,44(%r15) + lr %r0,%r15 + ahi %r15,-96 + st %r0,0(%r15) + lcr %r11,%r2 + basr %r13,0 +.L0: l %r12,.L1-.L0(%r13) + ar %r12,%r13 + l %r14,.L2-.L0(%r13) + bas %r14,0(%r14,%r13) + st %r11,0(0,%r2) + lhi %r2,-1 + l %r15,0(%r15) + lm %r11,%r15,44(%r15) + br %r14 +.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 +.L2: .long __errno_location@PLT - .L0 +#endif +#endif + +END (__syscall_error) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h Fri Mar 16 01:42:47 2001 @@ -0,0 +1,212 @@ +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _LINUX_S390_SYSDEP_H +#define _LINUX_S390_SYSDEP_H + +#include +#include + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +/* in newer 2.1 kernels __NR_syscall is missing so we define it here */ +#define __NR_syscall 0 + +#undef SYS_ify +#define SYS_ify(syscall_name) __NR_##syscall_name + +/* ELF-like local names start with `.L'. */ +#undef L +#define L(name) .L##name + +#ifdef __ASSEMBLER__ + +/* Linux uses a negative return value to indicate syscall errors, unlike + most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be negative + even if the call succeeded. E.g., the `lseek' system call might return + a large offset. Therefore we must not anymore test for < 0, but test + for a real error by making sure the value in gpr2 is a real error + number. Linus said he will make sure the no syscall returns a value + in -1 .. -4095 as a valid result so we can savely test with -4095. */ + +#define SYSCALL_ERROR_LABEL 0f + +#undef PSEUDO +#define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (args, syscall_name); \ + lhi %r4,-4095 ; \ + clr %r2,%r4 ; \ + jnl SYSCALL_ERROR_LABEL ; \ + L(pseudo_end): + +#undef PSEUDO_END +#define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER; \ + END (name) + +#ifndef _LIBC_REENTRANT +#ifndef PIC +#define SYSCALL_ERROR_HANDLER \ +0: lcr %r2,%r2 ; \ + basr %r1,0 ; \ +1: l %r1,2f-1b(%r1) \ + st %r2,0(%r1) \ + lhi %r2,-1 \ + br %r14 \ +2: .long errno +#else +#define SYSCALL_ERROR_HANDLER \ +0: basr %r1,0 ; \ +1: al %r1,2f-1b(%r1) ; \ + l %r1,errno@GOT12(%r1) ; \ + lcr %r2,%r2 ; \ + st %r2,0(%r1) ; \ + lhi %r2,-1 ; \ + br %r14 ; \ +2: .long _GLOBAL_OFFSET_TABLE_-1b +#endif /* PIC */ +#else +#define SYSCALL_ERROR_HANDLER \ +0: basr %r1,0 ; \ +1: al %r1,2f-1b(%r1) ; \ + br %r1 ; \ +2: .long __syscall_error@PLT-1b +#endif /* _LIBC_REENTRANT */ + +/* Linux takes system call arguments in registers: + + syscall number 1 call-clobbered + arg 1 2 call-clobbered + arg 2 3 call-clobbered + arg 3 4 call-clobbered + arg 4 5 call-clobbered + arg 5 6 call-saved + + (Of course a function with say 3 arguments does not have entries for + arguments 4 and 5.) + S390 does not need to do ANY stack operations to get its parameters + right. + */ + +#define DO_CALL(args, syscall) \ + svc SYS_ify (syscall) + +#define ret \ + br 14 + +#endif /* __ASSEMBLER__ */ + +#undef INLINE_SYSCALL +#define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + DECLARGS_##nr(args) \ + int err; \ + asm volatile ( \ + LOADARGS_##nr \ + "svc %b1\n\t" \ + "lr %0,%%r2\n\t" \ + : "=d" (err) \ + : "I" (__NR_##name) ASMFMT_##nr \ + : "memory", "cc", "2", "3", "4", "5", "6"); \ + if (err >= 0xfffff001) \ + { \ + __set_errno(-err); \ + err = 0xffffffff; \ + } \ + (int) err; }) + +#define DECLARGS_0() +#define DECLARGS_1(arg1) \ + unsigned int gpr2 = (unsigned int) (arg1); +#define DECLARGS_2(arg1, arg2) \ + DECLARGS_1(arg1) \ + unsigned int gpr3 = (unsigned int) (arg2); +#define DECLARGS_3(arg1, arg2, arg3) \ + DECLARGS_2(arg1, arg2) \ + unsigned int gpr4 = (unsigned int) (arg3); +#define DECLARGS_4(arg1, arg2, arg3, arg4) \ + DECLARGS_3(arg1, arg2, arg3) \ + unsigned int gpr5 = (unsigned int) (arg4); +#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ + DECLARGS_4(arg1, arg2, arg3, arg4) \ + unsigned int gpr6 = (unsigned int) (arg5); + +#define LOADARGS_0 +#define LOADARGS_1 "L 2,%2\n\t" +#define LOADARGS_2 LOADARGS_1 "L 3,%3\n\t" +#define LOADARGS_3 LOADARGS_2 "L 4,%4\n\t" +#define LOADARGS_4 LOADARGS_3 "L 5,%5\n\t" +#define LOADARGS_5 LOADARGS_4 "L 6,%6\n\t" + +#define ASMFMT_0 +#define ASMFMT_1 , "m" (gpr2) +#define ASMFMT_2 , "m" (gpr2), "m" (gpr3) +#define ASMFMT_3 , "m" (gpr2), "m" (gpr3), "m" (gpr4) +#define ASMFMT_4 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5) +#define ASMFMT_5 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5), "m" (gpr6) + +#if 0 +#undef INLINE_SYSCALL +#define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + DECLARGS_##nr(args) \ + asm volatile ( \ + "svc %b1\n\t" \ + : "+d" (gpr2) \ + : "I" (__NR_##name) ASMFMT_##nr : "memory", "cc"); \ + if (gpr2 >= 0xfffff001) \ + { \ + __set_errno(-gpr2); \ + gpr2 = 0xffffffff; \ + } \ + (int) gpr2; }) + +#define DECLARGS_0() \ + register unsigned int gpr2 asm("2"); +#define DECLARGS_1(arg1) \ + register unsigned int gpr2 asm("2") = (unsigned int) (arg1); +#define DECLARGS_2(arg1, arg2) \ + DECLARGS_1(arg1) \ + register unsigned int gpr3 asm("3") = (unsigned int) (arg2); +#define DECLARGS_3(arg1, arg2, arg3) \ + DECLARGS_2(arg1, arg2) \ + register unsigned int gpr4 asm("4") = (unsigned int) (arg3); +#define DECLARGS_4(arg1, arg2, arg3, arg4) \ + DECLARGS_3(arg1, arg2, arg3) \ + register unsigned int gpr5 asm("5") = (unsigned int) (arg4); +#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ + DECLARGS_4(arg1, arg2, arg3, arg4) \ + register unsigned int gpr6 asm("6") = (unsigned int) (arg5); + +#define ASMFMT_0 +#define ASMFMT_1 +#define ASMFMT_2 , "d" (gpr3) +#define ASMFMT_3 , "d" (gpr3), "d" (gpr4) +#define ASMFMT_4 , "d" (gpr3), "d" (gpr4), "d" (gpr5) +#define ASMFMT_5 , "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) + +#endif /* 0 */ + +#endif /* _LINUX_S390_SYSDEP_H */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h Wed Apr 4 10:33:06 2001 @@ -0,0 +1,34 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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. */ + +/* Constants shared between setcontext() and getcontext(). Don't + install this header file. */ + +#define SIG_BLOCK 0 +#define SIG_UNBLOCK 1 +#define SIG_SETMASK 2 + +#define SC_FLGS 0x000 +#define SC_LINK 0x004 +#define SC_MASK 0x008 +#define SC_STCK 0x088 +#define SC_VERS 0x098 +#define SC_GPRS 0x09c +#define SC_FPC 0x130 +#define SC_FPRS 0x138 + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c Fri Mar 16 01:43:01 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c Fri Mar 16 01:43:13 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/Dist Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/Dist Sat Apr 7 14:02:40 2001 @@ -0,0 +1,4 @@ +clone.S +kernel_stat.h +sys/procfs.h +ucontext_i.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/Makefile glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/Makefile --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/Makefile Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/Makefile Fri Mar 16 01:21:57 2001 @@ -0,0 +1,8 @@ +ifeq ($(subdir),csu) +CFLAGS-initfini.s += -DWEAK_GMON_START +endif + +ifeq ($(subdir),misc) +sysdep_routines += setfsgid setfsuid setresgid setresuid +sysdep_headers += sys/elf.h +endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h Fri Mar 16 01:53:22 2001 @@ -0,0 +1,34 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* This file specifies the native word size of the machine, which indicates + the ELF file class used for executables and shared objects on this + machine. */ + +#ifndef _LINK_H +# error "Never use directly; include instead." +#endif + +#include + +#define __ELF_NATIVE_CLASS __WORDSIZE + +/* 64 bit Linux for S/390 is exceptional as it has .hash section with + 64 bit entries. */ +typedef uint64_t Elf_Symndx; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h Fri Mar 16 01:53:38 2001 @@ -0,0 +1,174 @@ +/* O_*, F_*, FD_* bit values for Linux for 64 bit S/390. + Copyright (C) 2001 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 _FCNTL_H +# error "Never use directly; include instead." +#endif + + +#include + +/* open/fcntl - O_SYNC is only implemented on blocks devices and on files + located on an ext2 file system */ +#define O_ACCMODE 0003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 0100 /* not fcntl */ +#define O_EXCL 0200 /* not fcntl */ +#define O_NOCTTY 0400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 +#define O_NDELAY O_NONBLOCK +#define O_SYNC 010000 +#define O_FSYNC O_SYNC +#define O_ASYNC 020000 +#define O_DIRECT 040000 + +#ifdef __USE_GNU +# define O_DIRECTORY 0200000 /* must be a directory */ +# define O_NOFOLLOW 0400000 /* don't follow links */ +#endif + +#ifdef __USE_LARGEFILE64 +/* Not necessary, files are always with 64bit off_t. */ +# define O_LARGEFILE 0 +#endif + +/* For now Linux has synchronisity options for data and read operations. + We define the symbols here but let them do the same as O_SYNC since + this is a superset. */ +#if defined __USE_POSIX199309 || defined __USE_UNIX98 +# define O_DSYNC O_SYNC /* Synchronize data. */ +# define O_RSYNC O_SYNC /* Synchronize read operations. */ +#endif + +/* Values for the second argument to `fcntl'. */ +#define F_DUPFD 0 /* Duplicate file descriptor. */ +#define F_GETFD 1 /* Get file descriptor flags. */ +#define F_SETFD 2 /* Set file descriptor flags. */ +#define F_GETFL 3 /* Get file status flags. */ +#define F_SETFL 4 /* Set file status flags. */ +#define F_GETLK 5 /* Get record locking info. */ +#define F_SETLK 6 /* Set record locking info (non-blocking). */ +#define F_SETLKW 7 /* Set record locking info (blocking). */ + +/* Not necessary, we always have 64-bit offsets. */ +#define F_GETLK64 5 /* Get record locking info. */ +#define F_SETLK64 6 /* Set record locking info (non-blocking). */ +#define F_SETLKW64 7 /* Set record locking info (blocking). */ + +#if defined __USE_BSD || defined __USE_XOPEN2K +# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ +# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ +#endif + +#ifdef __USE_GNU +# define F_SETSIG 10 /* Set number of signal to be sent. */ +# define F_GETSIG 11 /* Get number of signal to be sent. */ +#endif + +#ifdef __USE_GNU +# define F_SETLEASE 1024 /* Set a lease. */ +# define F_GETLEASE 1025 /* Enquire what lease is active. */ +# define F_NOTIFY 1026 /* Request notfications on a directory. */ +#endif + +/* For F_[GET|SET]FL. */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ +#define F_RDLCK 0 /* Read lock. */ +#define F_WRLCK 1 /* Write lock. */ +#define F_UNLCK 2 /* Remove lock. */ + +/* for old implementation of bsd flock () */ +#define F_EXLCK 4 /* or 3 */ +#define F_SHLCK 8 /* or 4 */ + +#ifdef __USE_BSD +/* Operations for bsd flock(), also used by the kernel implementation */ +# define LOCK_SH 1 /* shared lock */ +# define LOCK_EX 2 /* exclusive lock */ +# define LOCK_NB 4 /* or'd with one of the above to prevent + blocking */ +# define LOCK_UN 8 /* remove lock */ +#endif + +#ifdef __USE_GNU +# define LOCK_MAND 32 /* This is a mandatory flock: */ +# define LOCK_READ 64 /* ... which allows concurrent read operations. */ +# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ +# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ +#endif + + +#ifdef __USE_GNU +/* Types of directory notifications that may be requested with F_NOTIFY. */ +# define DN_ACCESS 0x00000001 /* File accessed. */ +# define DN_MODIFY 0x00000002 /* File modified. */ +# define DN_CREATE 0x00000004 /* File created. */ +# define DN_DELETE 0x00000008 /* File removed. */ +# define DN_RENAME 0x00000010 /* File renamed. */ +# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ +# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ +#endif + +/* We don't need to support __USE_FILE_OFFSET64. */ +struct flock + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off_t l_start; /* Offset where the lock begins. */ + __off_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; + +#ifdef __USE_LARGEFILE64 +struct flock64 + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; +#endif + + +/* Define some more compatibility macros to be backward compatible with + BSD systems which did not managed to hide these kernel macros. */ +#ifdef __USE_BSD +# define FAPPEND O_APPEND +# define FFSYNC O_FSYNC +# define FASYNC O_ASYNC +# define FNONBLOCK O_NONBLOCK +# define FNDELAY O_NDELAY +#endif /* Use BSD. */ + +/* Advise to `posix_fadvise'. */ +#ifdef __USE_XOPEN2K +# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ +# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ +# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ +# define POSIX_FADV_DONTNEED 6 /* Don't need these pages. */ +# define POSIX_FADV_NOREUSE 7 /* Data will be accessed once. */ +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h Fri Mar 16 01:53:51 2001 @@ -0,0 +1,78 @@ +/* Copyright (C) 2001 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 _SYS_IPC_H +# error "Never use directly; include instead." +#endif + +#include + +/* Mode bits for `msgget', `semget', and `shmget'. */ +#define IPC_CREAT 01000 /* Create key if key does not exist. */ +#define IPC_EXCL 02000 /* Fail if key exists. */ +#define IPC_NOWAIT 04000 /* Return error on wait. */ + +/* Control commands for `msgctl', `semctl', and `shmctl'. */ +#define IPC_RMID 0 /* Remove identifier. */ +#define IPC_SET 1 /* Set `ipc_perm' options. */ +#define IPC_STAT 2 /* Get `ipc_perm' options. */ +#ifdef __USE_GNU +#define IPC_INFO 3 /* See ipcs. */ +#endif + +/* Special key values. */ +#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ + + +/* Data structure used to pass permission information to IPC operations. */ +struct ipc_perm + { + __key_t __key; /* Key. */ + __uid_t uid; /* Owner's user ID. */ + __gid_t gid; /* Owner's group ID. */ + __uid_t cuid; /* Creator's user ID. */ + __gid_t cgid; /* Creator's group ID. */ + __mode_t mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ + unsigned short int __pad1; + unsigned long int __unused1; + unsigned long int __unused2; + }; + + + +__BEGIN_DECLS + +/* The actual system call: all functions are multiplexed by this. */ +extern int __ipc __P ((int __call, int __first, int __second, int __third, + void *__ptr)); + +__END_DECLS + +/* The codes for the functions to use the multiplexer `__ipc'. */ +#define IPCOP_semop 1 +#define IPCOP_semget 2 +#define IPCOP_semctl 3 +#define IPCOP_msgsnd 11 +#define IPCOP_msgrcv 12 +#define IPCOP_msgget 13 +#define IPCOP_msgctl 14 +#define IPCOP_shmat 21 +#define IPCOP_shmdt 22 +#define IPCOP_shmget 23 +#define IPCOP_shmctl 24 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h Fri Mar 16 01:54:05 2001 @@ -0,0 +1,94 @@ +/* Definitions for POSIX memory map interface. 64 bit S/390 version. + Copyright (C) 2001 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 _SYS_MMAN_H +# error "Never use directly; include instead." +#endif + +/* The following definitions basically come from the kernel headers. + But the kernel header is not namespace clean. */ + + +/* Protections are chosen from these bits, OR'd together. The + implementation does not necessarily support PROT_EXEC or PROT_WRITE + without PROT_READ. The only guarantees are that no writing will be + allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ + +#define PROT_READ 0x1 /* Page can be read. */ +#define PROT_WRITE 0x2 /* Page can be written. */ +#define PROT_EXEC 0x4 /* Page can be executed. */ +#define PROT_NONE 0x0 /* Page can not be accessed. */ + +/* Sharing types (must choose one and only one of these). */ +#define MAP_SHARED 0x01 /* Share changes. */ +#define MAP_PRIVATE 0x02 /* Changes are private. */ +#ifdef __USE_MISC +# define MAP_TYPE 0x0f /* Mask for type of mapping. */ +#endif + +/* Other flags. */ +#define MAP_FIXED 0x10 /* Interpret addr exactly. */ +#ifdef __USE_MISC +# define MAP_FILE 0 +# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ +# define MAP_ANON MAP_ANONYMOUS +#endif + +/* These are Linux-specific. */ +#ifdef __USE_MISC +# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ +# define MAP_GROWSUP 0x0200 /* Register stack-like segment */ +# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ +# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ +# define MAP_LOCKED 0x2000 /* Lock the mapping. */ +# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ +#endif + +/* Flags to `msync'. */ +#define MS_ASYNC 0x1 /* Sync memory asynchronously. */ +#define MS_SYNC 0x4 /* Synchronous memory sync. */ +#define MS_INVALIDATE 0x2 /* Invalidate the caches. */ + +/* Flags for `mlockall'. */ +#define MCL_CURRENT 0x1 /* Lock all currently mapped pages. */ +#define MCL_FUTURE 0x2 /* Lock all additions to address + space. */ + +/* Flags for `mremap'. */ +#ifdef __USE_GNU +# define MREMAP_MAYMOVE 1 +#endif + +/* Advice to `madvise'. */ +#ifdef __USE_BSD +# define MADV_NORMAL 0 /* No further special treatment. */ +# define MADV_RANDOM 1 /* Expect random page references. */ +# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define MADV_WILLNEED 3 /* Will need these pages. */ +# define MADV_DONTNEED 4 /* Don't need these pages. */ +#endif + +/* The POSIX people had to invent similar names for the same things. */ +#ifdef __USE_XOPEN2K +# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ +# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ +# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ +# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ +# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ +#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h Fri Mar 16 01:54:18 2001 @@ -0,0 +1,68 @@ +/* Copyright (C) 2001 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 _SYS_MSG_H +#error "Never use directly; include instead." +#endif + +#include + +/* Define options for message queue functions. */ +#define MSG_NOERROR 010000 /* no error if message is too big */ +#define MSG_EXCEPT 020000 /* recv any msg except of specified type */ + + +/* Structure of record for one message inside the kernel. + The type `struct __msg' is opaque. */ +struct msqid_ds +{ + struct ipc_perm msg_perm; /* structure describing operation permission */ + __time_t msg_stime; /* time of last msgsnd command */ + __time_t msg_rtime; /* time of last msgrcv command */ + __time_t msg_ctime; /* time of last change */ + unsigned long int __msg_cbytes; /* current number of bytes on queue */ + unsigned long int msg_qnum; /* number of messages currently on queue */ + unsigned long int msg_qbytes; /* max number of bytes allowed on queue */ + __pid_t msg_lspid; /* pid of last msgsnd() */ + __pid_t msg_lrpid; /* pid of last msgrcv() */ + unsigned long int __unused1; + unsigned long int __unused2; +}; + +#ifdef __USE_MISC + +# define msg_cbytes __msg_cbytes + +/* ipcs ctl commands */ +# define MSG_STAT 11 +# define MSG_INFO 12 + +/* buffer for msgctl calls IPC_INFO, MSG_INFO */ +struct msginfo + { + int msgpool; + int msgmap; + int msgmax; + int msgmnb; + int msgmni; + int msgssz; + int msgtql; + unsigned short int msgseg; + }; + +#endif /* __USE_MISC */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h Fri Mar 16 01:54:34 2001 @@ -0,0 +1,196 @@ +/* Bit values & structures for resource limits. 64 bit S/390 version. + Copyright (C) 2001 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 _SYS_RESOURCE_H +# error "Never use directly; include instead." +#endif + +#include + +/* Transmute defines to enumerations. The macro re-definitions are + necessary because some programs want to test for operating system + features with #ifdef RUSAGE_SELF. In ISO C the reflexive + definition is a no-op. */ + +/* Kinds of resource limit. */ +enum __rlimit_resource +{ + /* Per-process CPU limit, in seconds. */ + RLIMIT_CPU = 0, +#define RLIMIT_CPU RLIMIT_CPU + + /* Largest file that can be created, in bytes. */ + RLIMIT_FSIZE = 1, +#define RLIMIT_FSIZE RLIMIT_FSIZE + + /* Maximum size of data segment, in bytes. */ + RLIMIT_DATA = 2, +#define RLIMIT_DATA RLIMIT_DATA + + /* Maximum size of stack segment, in bytes. */ + RLIMIT_STACK = 3, +#define RLIMIT_STACK RLIMIT_STACK + + /* Largest core file that can be created, in bytes. */ + RLIMIT_CORE = 4, +#define RLIMIT_CORE RLIMIT_CORE + + /* Largest resident set size, in bytes. + This affects swapping; processes that are exceeding their + resident set size will be more likely to have physical memory + taken from them. */ + RLIMIT_RSS = 5, +#define RLIMIT_RSS RLIMIT_RSS + + /* Number of processes. */ + RLIMIT_NPROC = 6, +#define RLIMIT_NPROC RLIMIT_NPROC + + /* Number of open files. */ + RLIMIT_NOFILE = 7, + RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ +#define RLIMIT_NOFILE RLIMIT_NOFILE +#define RLIMIT_OFILE RLIMIT_OFILE + + /* Locked-in-memory address space. */ + RLIMIT_MEMLOCK = 8, +#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK + + /* Address space limit (?) */ + RLIMIT_AS = 9, +#define RLIMIT_AS RLIMIT_AS + + RLIM_NLIMITS = 10 +#define RLIMIT_NLIMITS RLIMIT_NLIMITS +#define RLIM_NLIMITS RLIM_NLIMITS +}; + +/* Value to indicate that there is no limit. */ +# define RLIM_INFINITY ~0UL + +#ifdef __USE_LARGEFILE64 +# define RLIM64_INFINITY ~0UL +#endif + +/* We can represent all limits. */ +#define RLIM_SAVED_MAX RLIM_INFINITY +#define RLIM_SAVED_CUR RLIM_INFINITY + + +/* Type for resource quantity measurement. */ +typedef __rlim64_t rlim_t; +#ifdef __USE_LARGEFILE64 +typedef __rlim64_t rlim64_t; +#endif + +struct rlimit + { + /* The current (soft) limit. */ + rlim_t rlim_cur; + /* The hard limit. */ + rlim_t rlim_max; + }; + +#ifdef __USE_LARGEFILE64 +struct rlimit64 + { + /* The current (soft) limit. */ + rlim64_t rlim_cur; + /* The hard limit. */ + rlim64_t rlim_max; + }; +#endif + +/* Whose usage statistics do you want? */ +enum __rusage_who +{ + /* The calling process. */ + RUSAGE_SELF = 0, +#define RUSAGE_SELF RUSAGE_SELF + + /* All of its terminated child processes. */ + RUSAGE_CHILDREN = -1, +#define RUSAGE_CHILDREN RUSAGE_CHILDREN + + /* Both. */ + RUSAGE_BOTH = -2 +#define RUSAGE_BOTH RUSAGE_BOTH +}; + +#define __need_timeval +#include /* For `struct timeval'. */ + +/* Structure which says how much of each resource has been used. */ +struct rusage + { + /* Total amount of user time used. */ + struct timeval ru_utime; + /* Total amount of system time used. */ + struct timeval ru_stime; + /* Maximum resident set size (in kilobytes). */ + long int ru_maxrss; + /* Amount of sharing of text segment memory + with other processes (kilobyte-seconds). */ + long int ru_ixrss; + /* Amount of data segment memory used (kilobyte-seconds). */ + long int ru_idrss; + /* Amount of stack memory used (kilobyte-seconds). */ + long int ru_isrss; + /* Number of soft page faults (i.e. those serviced by reclaiming + a page from the list of pages awaiting reallocation. */ + long int ru_minflt; + /* Number of hard page faults (i.e. those that required I/O). */ + long int ru_majflt; + /* Number of times a process was swapped out of physical memory. */ + long int ru_nswap; + /* Number of input operations via the file system. Note: This + and `ru_oublock' do not include operations with the cache. */ + long int ru_inblock; + /* Number of output operations via the file system. */ + long int ru_oublock; + /* Number of IPC messages sent. */ + long int ru_msgsnd; + /* Number of IPC messages received. */ + long int ru_msgrcv; + /* Number of signals delivered. */ + long int ru_nsignals; + /* Number of voluntary context switches, i.e. because the process + gave up the process before it had to (usually to wait for some + resource to be available). */ + long int ru_nvcsw; + /* Number of involuntary context switches, i.e. a higher priority process + became runnable or the current process used up its time slice. */ + long int ru_nivcsw; + }; + +/* Priority limits. */ +#define PRIO_MIN -20 /* Minimum priority a process can have. */ +#define PRIO_MAX 20 /* Maximum priority a process can have. */ + +/* The type of the WHICH argument to `getpriority' and `setpriority', + indicating what flavor of entity the WHO argument specifies. */ +enum __priority_which +{ + PRIO_PROCESS = 0, /* WHO is a process ID. */ +#define PRIO_PROCESS PRIO_PROCESS + PRIO_PGRP = 1, /* WHO is a process group ID. */ +#define PRIO_PGRP PRIO_PGRP + PRIO_USER = 2 /* WHO is a user ID. */ +#define PRIO_USER PRIO_USER +}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h Fri Mar 16 01:54:46 2001 @@ -0,0 +1,85 @@ +/* Copyright (C) 2001 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 _SYS_SEM_H +# error "Never include directly; use instead." +#endif + +#include + +/* Flags for `semop'. */ +#define SEM_UNDO 0x1000 /* undo the operation on exit */ + +/* Commands for `semctl'. */ +#define GETPID 11 /* get sempid */ +#define GETVAL 12 /* get semval */ +#define GETALL 13 /* get all semval's */ +#define GETNCNT 14 /* get semncnt */ +#define GETZCNT 15 /* get semzcnt */ +#define SETVAL 16 /* set semval */ +#define SETALL 17 /* set all semval's */ + + +/* Data structure describing a set of semaphores. */ +struct semid_ds +{ + struct ipc_perm sem_perm; /* operation permission struct */ + __time_t sem_otime; /* last semop() time */ + __time_t sem_ctime; /* last time changed by semctl() */ + unsigned long int sem_nsems; /* number of semaphores in set */ + unsigned long int __unused1; + unsigned long int __unused2; +}; + +/* The user should define a union like the following to use it for arguments + for `semctl'. + + union semun + { + int val; <= value for SETVAL + struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET + unsigned short int *array; <= array for GETALL & SETALL + struct seminfo *__buf; <= buffer for IPC_INFO + }; + + Previous versions of this file used to define this union but this is + incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether + one must define the union or not. */ +#define _SEM_SEMUN_UNDEFINED 1 + +#ifdef __USE_MISC + +/* ipcs ctl cmds */ +# define SEM_STAT 18 +# define SEM_INFO 19 + +struct seminfo +{ + int semmap; + int semmni; + int semmns; + int semmnu; + int semmsl; + int semopm; + int semume; + int semusz; + int semvmx; + int semaem; +}; + +#endif /* __USE_MISC */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h Fri Mar 16 01:54:58 2001 @@ -0,0 +1,87 @@ +/* Copyright (C) 2001 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 _SYS_SHM_H +# error "Never include directly; use instead." +#endif + +#include + +/* Permission flag for shmget. */ +#define SHM_R 0400 /* or S_IRUGO from */ +#define SHM_W 0200 /* or S_IWUGO from */ + +/* Flags for `shmat'. */ +#define SHM_RDONLY 010000 /* attach read-only else read-write */ +#define SHM_RND 020000 /* round attach address to SHMLBA */ +#define SHM_REMAP 040000 /* take-over region on attach */ + +/* Commands for `shmctl'. */ +#define SHM_LOCK 11 /* lock segment (root only) */ +#define SHM_UNLOCK 12 /* unlock segment (root only) */ + + +/* Data structure describing a set of semaphores. */ +struct shmid_ds + { + struct ipc_perm shm_perm; /* operation permission struct */ + size_t shm_segsz; /* size of segment in bytes */ + __time_t shm_atime; /* time of last shmat() */ + __time_t shm_dtime; /* time of last shmdt() */ + __time_t shm_ctime; /* time of last change by shmctl() */ + __pid_t shm_cpid; /* pid of creator */ + __pid_t shm_lpid; /* pid of last shmop */ + unsigned long int shm_nattch; /* number of current attaches */ + unsigned long int __unused1; + unsigned long int __unused2; + }; + +#ifdef __USE_MISC + +/* ipcs ctl commands */ +# define SHM_STAT 13 +# define SHM_INFO 14 + +/* shm_mode upper byte flags */ +# define SHM_DEST 01000 /* segment will be destroyed on last detach */ +# define SHM_LOCKED 02000 /* segment will not be swapped */ + +struct shminfo + { + unsigned long int shmmax; + unsigned long int shmmin; + unsigned long int shmmni; + unsigned long int shmseg; + unsigned long int shmall; + unsigned long int __unused1; + unsigned long int __unused2; + unsigned long int __unused3; + unsigned long int __unused4; + }; + +struct shm_info + { + int used_ids; + unsigned long int shm_tot; /* total allocated shm */ + unsigned long int shm_rss; /* total resident shm */ + unsigned long int shm_swp; /* total swapped shm */ + unsigned long int swap_attempts; + unsigned long int swap_successes; + }; + +#endif /* __USE_MISC */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h Fri Mar 16 01:55:14 2001 @@ -0,0 +1,72 @@ +/* Definitions for 64 bit S/390 sigaction. 64 bit S/390 version. + Copyright (C) 2001 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 _SIGNAL_H +# error "Never include directly; use instead." +#endif + +/* Structure describing the action to be taken when a signal arrives. */ +struct sigaction + { + /* Signal handler. */ +#ifdef __USE_POSIX199309 + union + { + /* Used if SA_SIGINFO is not set. */ + __sighandler_t sa_handler; + /* Used if SA_SIGINFO is set. */ + void (*sa_sigaction) (int, siginfo_t *, void *); + } + __sigaction_handler; +# define sa_handler __sigaction_handler.sa_handler +# define sa_sigaction __sigaction_handler.sa_sigaction +#else + __sighandler_t sa_handler; +#endif + + /* Special flags. */ + unsigned long int sa_flags; + + /* Additional set of signals to be blocked. */ + __sigset_t sa_mask; + }; + +/* Bits in `sa_flags'. */ +#define SA_NOCLDSTOP 0x00000001 /* Don't send SIGCHLD when children stop. */ +#define SA_SIGINFO 0x00000004 +#ifdef __USE_MISC +# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ +# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ +# define SA_NODEFER 0x40000000 /* Don't automatically block the signal + when its handler is being executed. */ +# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ +#endif +#ifdef __USE_MISC +# define SA_INTERRUPT 0x20000000 /* Historic no-op. */ + +/* Some aliases for the SA_ constants. */ +# define SA_NOMASK SA_NODEFER +# define SA_ONESHOT SA_RESETHAND +# define SA_STACK SA_ONSTACK +#endif + +/* Values for the HOW argument to `sigprocmask'. */ +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h Fri Mar 16 01:55:14 2001 @@ -0,0 +1,297 @@ +/* siginfo_t, sigevent and constants. 64 bit S/390 version. + Copyright (C) 2001 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 _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t +# error "Never include this file directly. Use instead" +#endif + +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 + +/* Type for data associated with a signal. */ +typedef union sigval + { + int sival_int; + void *sival_ptr; + } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 + +# define __SI_MAX_SIZE 128 +# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) + +typedef struct siginfo + { + int si_signo; /* Signal number. */ + int si_errno; /* If non-zero, an errno value associated with + this signal, as defined in . */ + int si_code; /* Signal code. */ + + union + { + int _pad[__SI_PAD_SIZE]; + + /* kill(). */ + struct + { + __pid_t si_pid; /* Sending process ID. */ + __uid_t si_uid; /* Real user ID of sending process. */ + } _kill; + + /* POSIX.1b timers. */ + struct + { + unsigned int _timer1; + unsigned int _timer2; + } _timer; + + /* POSIX.1b signals. */ + struct + { + __pid_t si_pid; /* Sending process ID. */ + __uid_t si_uid; /* Real user ID of sending process. */ + sigval_t si_sigval; /* Signal value. */ + } _rt; + + /* SIGCHLD. */ + struct + { + __pid_t si_pid; /* Which child. */ + __uid_t si_uid; /* Real user ID of sending process. */ + int si_status; /* Exit value or signal. */ + __clock_t si_utime; + __clock_t si_stime; + } _sigchld; + + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ + struct + { + void *si_addr; /* Faulting insn/memory ref. */ + int si_trapno; + } _sigfault; + + /* SIGPOLL. */ + struct + { + long int si_band; /* Band event for SIGPOLL. */ + int si_fd; + } _sigpoll; + } _sifields; + } siginfo_t; + + +/* X/Open requires some more fields with fixed names. */ +# define si_pid _sifields._kill.si_pid +# define si_uid _sifields._kill.si_uid +# define si_timer1 _sifields._timer._timer1 +# define si_timer2 _sifields._timer._timer2 +# define si_status _sifields._sigchld.si_status +# define si_utime _sifields._sigchld.si_utime +# define si_stime _sifields._sigchld.si_stime +# define si_value _sifields._rt.si_sigval +# define si_int _sifields._rt.si_sigval.sival_int +# define si_ptr _sifields._rt.si_sigval.sival_ptr +# define si_addr _sifields._sigfault.si_addr +# define si_trapno _sifields._sigfault.si_trapno +# define si_band _sifields._sigpoll.si_band +# define si_fd _sifields._sigpoll.si_fd + +/* Values for `si_code'. Positive values are reserved for kernel-generated + signals. */ +enum +{ + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ +# define SI_SIGIO SI_SIGIO + SI_ASYNCIO, /* Sent by AIO completion. */ +# define SI_ASYNCIO SI_ASYNCIO + SI_MESGQ, /* Sent by real time mesq state change. */ +# define SI_MESGQ SI_MESGQ + SI_TIMER, /* Sent by timer expiration. */ +# define SI_TIMER SI_TIMER + SI_QUEUE, /* Sent by sigqueue. */ +# define SI_QUEUE SI_QUEUE + SI_USER, /* Sent by kill, sigsend, raise. */ +# define SI_USER SI_USER + SI_KERNEL = 0x80 /* Send by kernel. */ +#define SI_KERNEL SI_KERNEL +}; + + +/* `si_code' values for SIGILL signal. */ +enum +{ + ILL_ILLOPC = 1, /* Illegal opcode. */ +# define ILL_ILLOPC ILL_ILLOPC + ILL_ILLOPN, /* Illegal operand. */ +# define ILL_ILLOPN ILL_ILLOPN + ILL_ILLADR, /* Illegal addressing mode. */ +# define ILL_ILLADR ILL_ILLADR + ILL_ILLTRP, /* Illegal trap. */ +# define ILL_ILLTRP ILL_ILLTRP + ILL_PRVOPC, /* Privileged opcode. */ +# define ILL_PRVOPC ILL_PRVOPC + ILL_PRVREG, /* Privileged register. */ +# define ILL_PRVREG ILL_PRVREG + ILL_COPROC, /* Coprocessor error. */ +# define ILL_COPROC ILL_COPROC + ILL_BADSTK /* Internal stack error. */ +# define ILL_BADSTK ILL_BADSTK +}; + +/* `si_code' values for SIGFPE signal. */ +enum +{ + FPE_INTDIV = 1, /* Integer divide by zero. */ +# define FPE_INTDIV FPE_INTDIV + FPE_INTOVF, /* Integer overflow. */ +# define FPE_INTOVF FPE_INTOVF + FPE_FLTDIV, /* Floating point divide by zero. */ +# define FPE_FLTDIV FPE_FLTDIV + FPE_FLTOVF, /* Floating point overflow. */ +# define FPE_FLTOVF FPE_FLTOVF + FPE_FLTUND, /* Floating point underflow. */ +# define FPE_FLTUND FPE_FLTUND + FPE_FLTRES, /* Floating point inexact result. */ +# define FPE_FLTRES FPE_FLTRES + FPE_FLTINV, /* Floating point invalid operation. */ +# define FPE_FLTINV FPE_FLTINV + FPE_FLTSUB /* Subscript out of range. */ +# define FPE_FLTSUB FPE_FLTSUB +}; + +/* `si_code' values for SIGSEGV signal. */ +enum +{ + SEGV_MAPERR = 1, /* Address not mapped to object. */ +# define SEGV_MAPERR SEGV_MAPERR + SEGV_ACCERR /* Invalid permissions for mapped object. */ +# define SEGV_ACCERR SEGV_ACCERR +}; + +/* `si_code' values for SIGBUS signal. */ +enum +{ + BUS_ADRALN = 1, /* Invalid address alignment. */ +# define BUS_ADRALN BUS_ADRALN + BUS_ADRERR, /* Non-existant physical address. */ +# define BUS_ADRERR BUS_ADRERR + BUS_OBJERR /* Object specific hardware error. */ +# define BUS_OBJERR BUS_OBJERR +}; + +/* `si_code' values for SIGTRAP signal. */ +enum +{ + TRAP_BRKPT = 1, /* Process breakpoint. */ +# define TRAP_BRKPT TRAP_BRKPT + TRAP_TRACE /* Process trace trap. */ +# define TRAP_TRACE TRAP_TRACE +}; + +/* `si_code' values for SIGCHLD signal. */ +enum +{ + CLD_EXITED = 1, /* Child has exited. */ +# define CLD_EXITED CLD_EXITED + CLD_KILLED, /* Child was killed. */ +# define CLD_KILLED CLD_KILLED + CLD_DUMPED, /* Child terminated abnormally. */ +# define CLD_DUMPED CLD_DUMPED + CLD_TRAPPED, /* Traced child has trapped. */ +# define CLD_TRAPPED CLD_TRAPPED + CLD_STOPPED, /* Child has stopped. */ +# define CLD_STOPPED CLD_STOPPED + CLD_CONTINUED /* Stopped child has continued. */ +# define CLD_CONTINUED CLD_CONTINUED +}; + +/* `si_code' values for SIGPOLL signal. */ +enum +{ + POLL_IN = 1, /* Data input available. */ +# define POLL_IN POLL_IN + POLL_OUT, /* Output buffers available. */ +# define POLL_OUT POLL_OUT + POLL_MSG, /* Input message available. */ +# define POLL_MSG POLL_MSG + POLL_ERR, /* I/O error. */ +# define POLL_ERR POLL_ERR + POLL_PRI, /* High priority input available. */ +# define POLL_PRI POLL_PRI + POLL_HUP /* Device disconnected. */ +# define POLL_HUP POLL_HUP +}; + +# undef __need_siginfo_t +#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ + + +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t +# define __have_sigevent_t 1 + +/* Structure to transport application-defined values with signals. */ +# define __SIGEV_MAX_SIZE 64 +# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) + +/* Forward declaration of the `pthread_attr_t' type. */ +struct __pthread_attr_s; + +typedef struct sigevent + { + sigval_t sigev_value; + int sigev_signo; + int sigev_notify; + + union + { + int _pad[__SIGEV_PAD_SIZE]; + + struct + { + void (*_function) (sigval_t); /* Function to start. */ + struct __pthread_attr_s *_attribute; /* Really pthread_attr_t. */ + } _sigev_thread; + } _sigev_un; + } sigevent_t; + +/* POSIX names to access some of the members. */ +# define sigev_notify_function _sigev_un._sigev_thread._function +# define sigev_notify_attributes _sigev_un._sigev_thread._attribute + +/* `sigev_notify' values. */ +enum +{ + SIGEV_SIGNAL = 0, /* Notify via signal. */ +# define SIGEV_SIGNAL SIGEV_SIGNAL + SIGEV_NONE, /* Other notification: meaningless. */ +# define SIGEV_NONE SIGEV_NONE + SIGEV_THREAD /* Deliver via thread creation. */ +# define SIGEV_THREAD SIGEV_THREAD +}; + +#endif /* have _SIGNAL_H. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h Fri Mar 16 01:55:14 2001 @@ -0,0 +1,59 @@ +/* sigstack, sigaltstack definitions. 64 bit S/390 version. + Copyright (C) 2001 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 _SIGNAL_H +# error "Never include this file directly. Use instead" +#endif + +#ifndef _SIGSTACK_H +#define _SIGSTACK_H 1 + +/* Structure describing a signal stack (obsolete). */ +struct sigstack + { + __ptr_t ss_sp; /* Signal stack pointer. */ + int ss_onstack; /* Nonzero if executing on this stack. */ + }; + + +/* Possible values for `ss_flags.'. */ +enum +{ + SS_ONSTACK = 1, +#define SS_ONSTACK SS_ONSTACK + SS_DISABLE +#define SS_DISABLE SS_DISABLE +}; + +/* Minimum stack size for a signal handler. */ +#define MINSIGSTKSZ 2048 + +/* System default stack size. */ +#define SIGSTKSZ 8192 + + +/* Alternate, preferred interface. */ +typedef struct sigaltstack + { + __ptr_t ss_sp; + int ss_flags; + size_t ss_size; + } stack_t; + +#endif /* bits/sigstack.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h Thu Apr 5 10:23:09 2001 @@ -0,0 +1,308 @@ +/* System-specific socket constants and types. Linux/s390 version. + Copyright (C) 2001 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 __BITS_SOCKET_H +#define __BITS_SOCKET_H 1 + +#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H +# error "Never include directly; use instead." +#endif + +#define __need_size_t +#define __need_NULL +#include + +#include +#include + +/* Type for length arguments in socket calls. */ +#ifndef __socklen_t_defined +typedef __socklen_t socklen_t; +# define __socklen_t_defined +#endif + +/* Types of sockets. */ +enum __socket_type +{ + SOCK_STREAM = 1, /* Sequenced, reliable, connection-based + byte streams. */ +#define SOCK_STREAM SOCK_STREAM + SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams + of fixed maximum length. */ +#define SOCK_DGRAM SOCK_DGRAM + SOCK_RAW = 3, /* Raw protocol interface. */ +#define SOCK_RAW SOCK_RAW + SOCK_RDM = 4, /* Reliably-delivered messages. */ +#define SOCK_RDM SOCK_RDM + SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, + datagrams of fixed maximum length. */ +#define SOCK_SEQPACKET SOCK_SEQPACKET + SOCK_PACKET = 10 /* Linux specific way of getting packets + at the dev level. For writing rarp and + other similar things on the user level. */ +#define SOCK_PACKET SOCK_PACKET +}; + +/* Protocol families. */ +#define PF_UNSPEC 0 /* Unspecified. */ +#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ +#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ +#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */ +#define PF_INET 2 /* IP protocol family. */ +#define PF_AX25 3 /* Amateur Radio AX.25. */ +#define PF_IPX 4 /* Novell Internet Protocol. */ +#define PF_APPLETALK 5 /* Appletalk DDP. */ +#define PF_NETROM 6 /* Amateur radio NetROM. */ +#define PF_BRIDGE 7 /* Multiprotocol bridge. */ +#define PF_ATMPVC 8 /* ATM PVCs. */ +#define PF_X25 9 /* Reserved for X.25 project. */ +#define PF_INET6 10 /* IP version 6. */ +#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */ +#define PF_DECnet 12 /* Reserved for DECnet project. */ +#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */ +#define PF_SECURITY 14 /* Security callback pseudo AF. */ +#define PF_KEY 15 /* PF_KEY key management API. */ +#define PF_NETLINK 16 +#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */ +#define PF_PACKET 17 /* Packet family. */ +#define PF_ASH 18 /* Ash. */ +#define PF_ECONET 19 /* Acorn Econet. */ +#define PF_ATMSVC 20 /* ATM SVCs. */ +#define PF_SNA 22 /* Linux SNA Project */ +#define PF_IRDA 23 /* IRDA sockets. */ +#define PF_PPPOX 24 /* PPPoX sockets. */ +#define PF_MAX 32 /* For now.. */ + +/* Address families. */ +#define AF_UNSPEC PF_UNSPEC +#define AF_LOCAL PF_LOCAL +#define AF_UNIX PF_UNIX +#define AF_FILE PF_FILE +#define AF_INET PF_INET +#define AF_AX25 PF_AX25 +#define AF_IPX PF_IPX +#define AF_APPLETALK PF_APPLETALK +#define AF_NETROM PF_NETROM +#define AF_BRIDGE PF_BRIDGE +#define AF_ATMPVC PF_ATMPVC +#define AF_X25 PF_X25 +#define AF_INET6 PF_INET6 +#define AF_ROSE PF_ROSE +#define AF_DECnet PF_DECnet +#define AF_NETBEUI PF_NETBEUI +#define AF_SECURITY PF_SECURITY +#define AF_KEY PF_KEY +#define AF_NETLINK PF_NETLINK +#define AF_ROUTE PF_ROUTE +#define AF_PACKET PF_PACKET +#define AF_ASH PF_ASH +#define AF_ECONET PF_ECONET +#define AF_ATMSVC PF_ATMSVC +#define AF_SNA PF_SNA +#define AF_IRDA PF_IRDA +#define AF_PPPOX PF_PPPOX +#define AF_MAX PF_MAX + +/* Socket level values. Others are defined in the appropriate headers. + + XXX These definitions also should go into the appropriate headers as + far as they are available. */ +#define SOL_RAW 255 +#define SOL_DECNET 261 +#define SOL_X25 262 +#define SOL_PACKET 263 +#define SOL_ATM 264 /* ATM layer (cell level). */ +#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */ +#define SOL_IRDA 266 + +/* Maximum queue length specifiable by listen. */ +#define SOMAXCONN 128 + +/* Get the definition of the macro to define the common sockaddr members. */ +#include + +/* Structure describing a generic socket address. */ +struct sockaddr + { + __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ + char sa_data[14]; /* Address data. */ + }; + + +/* Structure large enough to hold any socket address (with the historical + exception of AF_UNIX). We reserve 128 bytes. */ +#if ULONG_MAX > 0xffffffff +# define __ss_aligntype __uint64_t +#else +# define __ss_aligntype __uint32_t +#endif +#define _SS_SIZE 128 +#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype))) + +struct sockaddr_storage + { + __SOCKADDR_COMMON (ss_); /* Address family, etc. */ + __ss_aligntype __ss_align; /* Force desired alignment. */ + char __ss_padding[_SS_PADSIZE]; + }; + + +/* Bits in the FLAGS argument to `send', `recv', et al. */ +enum + { + MSG_OOB = 0x01, /* Process out-of-band data. */ +#define MSG_OOB MSG_OOB + MSG_PEEK = 0x02, /* Peek at incoming messages. */ +#define MSG_PEEK MSG_PEEK + MSG_DONTROUTE = 0x04, /* Don't use local routing. */ +#define MSG_DONTROUTE MSG_DONTROUTE +#ifdef __USE_GNU + /* DECnet uses a different name. */ + MSG_TRYHARD = MSG_DONTROUTE, +# define MSG_TRYHARD MSG_DONTROUTE +#endif + MSG_CTRUNC = 0x08, /* Control data lost before delivery. */ +#define MSG_CTRUNC MSG_CTRUNC + MSG_PROXY = 0x10, /* Supply or ask second address. */ +#define MSG_PROXY MSG_PROXY + MSG_TRUNC = 0x20, +#define MSG_TRUNC MSG_TRUNC + MSG_DONTWAIT = 0x40, /* Nonblocking IO. */ +#define MSG_DONTWAIT MSG_DONTWAIT + MSG_EOR = 0x80, /* End of record. */ +#define MSG_EOR MSG_EOR + MSG_WAITALL = 0x100, /* Wait for a full request. */ +#define MSG_WAITALL MSG_WAITALL + MSG_FIN = 0x200, +#define MSG_FIN MSG_FIN + MSG_SYN = 0x400, +#define MSG_SYN MSG_SYN + MSG_CONFIRM = 0x800, /* Confirm path validity. */ +#define MSG_CONFIRM MSG_CONFIRM + MSG_RST = 0x1000, +#define MSG_RST MSG_RST + MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */ +#define MSG_ERRQUEUE MSG_ERRQUEUE + MSG_NOSIGNAL = 0x4000 /* Do not generate SIGPIPE. */ +#define MSG_NOSIGNAL MSG_NOSIGNAL + }; + + +/* Structure describing messages sent by + `sendmsg' and received by `recvmsg'. */ +struct msghdr + { + void *msg_name; /* Address to send to/receive from. */ + socklen_t msg_namelen; /* Length of address data. */ + + struct iovec *msg_iov; /* Vector of data to send/receive into. */ + size_t msg_iovlen; /* Number of elements in the vector. */ + + void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ + size_t msg_controllen; /* Ancillary data buffer length. */ + + int msg_flags; /* Flags on received message. */ + }; + +/* Structure used for storage of ancillary data object information. */ +struct cmsghdr + { + size_t cmsg_len; /* Length of data in cmsg_data plus length + of cmsghdr structure. */ + int cmsg_level; /* Originating protocol. */ + int cmsg_type; /* Protocol specific type. */ + __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ + /* XXX Perhaps this should be removed. */ + }; + +/* Ancillary data object manipulation macros. */ +#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2 +# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) +#else +# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) +#endif +#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) +#define CMSG_FIRSTHDR(mhdr) \ + ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ + ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL) +#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \ + & (size_t) ~(sizeof (size_t) - 1)) +#define CMSG_SPACE(len) (CMSG_ALIGN (len) \ + + CMSG_ALIGN (sizeof (struct cmsghdr))) +#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) + +extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, + struct cmsghdr *__cmsg) __THROW; +#ifdef __USE_EXTERN_INLINES +# ifndef _EXTERN_INLINE +# define _EXTERN_INLINE extern __inline +# endif +_EXTERN_INLINE struct cmsghdr * +__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW +{ + if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) + /* The kernel header does this so there may be a reason. */ + return 0; + + __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg + + CMSG_ALIGN (__cmsg->cmsg_len)); + if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control + + __mhdr->msg_controllen) + || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) + > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) + /* No more entries. */ + return 0; + return __cmsg; +} +#endif /* Use `extern inline'. */ + +/* Socket level message types. This must match the definitions in + . */ +enum + { + SCM_RIGHTS = 0x01, /* Transfer file descriptors. */ +#define SCM_RIGHTS SCM_RIGHTS +#ifdef __USE_BSD + SCM_CREDENTIALS = 0x02, /* Credentials passing. */ +# define SCM_CREDENTIALS SCM_CREDENTIALS +#endif + __SCM_CONNECT = 0x03 /* Data array is `struct scm_connect'. */ + }; + +/* User visible structure for SCM_CREDENTIALS message */ + +struct ucred +{ + pid_t pid; /* PID of sending process. */ + uid_t uid; /* UID of sending process. */ + gid_t gid; /* GID of sending process. */ +}; + +/* Get socket manipulation related informations from kernel headers. */ +#include + + +/* Structure used to manipulate the SO_LINGER option. */ +struct linger + { + int l_onoff; /* Nonzero to linger on close. */ + int l_linger; /* Time to linger. */ + }; + +#endif /* bits/socket.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h Fri Mar 16 01:55:50 2001 @@ -0,0 +1,107 @@ +/* Copyright (C) 2001 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 _SYS_STAT_H +# error "Never include directly; use instead." +#endif + +/* Versions of the `struct stat' data structure. */ +#define _STAT_VER_KERNEL 0 +#define _STAT_VER_LINUX 1 +#define _STAT_VER _STAT_VER_LINUX + +/* Versions of the `xmknod' interface. */ +#define _MKNOD_VER_LINUX 0 + +struct stat + { + __dev_t st_dev; /* Device. */ + __ino_t st_ino; /* File serial number. */ + __nlink_t st_nlink; /* Link count. */ + __mode_t st_mode; /* File mode. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + int pad0; + __dev_t st_rdev; /* Device number, if device. */ + __off_t st_size; /* Size of file, in bytes. */ + __time_t st_atime; /* Time of last access. */ + long int __reserved0; /* Reserved for atime.nanoseconds. */ + __time_t st_mtime; /* Time of last modification. */ + long int __reserved1; /* Reserved for mtime.nanoseconds. */ + __time_t st_ctime; /* Time of last status change. */ + long int __reserved2; /* Reserved for ctime.nanoseconds. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ + __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ + long int __unused[3]; + }; + +#ifdef __USE_LARGEFILE64 +/* Note stat64 is the same shape as stat. */ +struct stat64 + { + __dev_t st_dev; /* Device. */ + __ino64_t st_ino; /* File serial number. */ + __nlink_t st_nlink; /* Link count. */ + __mode_t st_mode; /* File mode. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + int pad0; + __dev_t st_rdev; /* Device number, if device. */ + __off_t st_size; /* Size of file, in bytes. */ + __time_t st_atime; /* Time of last access. */ + long int __reserved0; /* Reserved for atime.nanoseconds. */ + __time_t st_mtime; /* Time of last modification. */ + long int __reserved1; /* Reserved for mtime.nanoseconds. */ + __time_t st_ctime; /* Time of last status change. */ + long int __reserved2; /* Reserved for ctime.nanoseconds. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ + __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ + long int __unused[3]; + }; +#endif + +/* Tell code we have these members. */ +#define _STATBUF_ST_BLKSIZE +#define _STATBUF_ST_RDEV + +/* Encoding of the file mode. */ + +#define __S_IFMT 0170000 /* These bits determine file type. */ + +/* File types. */ +#define __S_IFDIR 0040000 /* Directory. */ +#define __S_IFCHR 0020000 /* Character device. */ +#define __S_IFBLK 0060000 /* Block device. */ +#define __S_IFREG 0100000 /* Regular file. */ +#define __S_IFIFO 0010000 /* FIFO. */ +#define __S_IFLNK 0120000 /* Symbolic link. */ +#define __S_IFSOCK 0140000 /* Socket. */ + +/* POSIX.1b objects. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) + +/* Protection bits. */ + +#define __S_ISUID 04000 /* Set user ID on execution. */ +#define __S_ISGID 02000 /* Set group ID on execution. */ +#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ +#define __S_IREAD 0400 /* Read by owner. */ +#define __S_IWRITE 0200 /* Write by owner. */ +#define __S_IEXEC 0100 /* Execute by owner. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h Fri Mar 16 01:56:04 2001 @@ -0,0 +1,115 @@ +/* Copyright (C) 2001 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. */ + +/* + * Never include this file directly; use instead. + */ + +#ifndef _BITS_TYPES_H +#define _BITS_TYPES_H 1 + +#include + +#define __need_size_t +#include + +/* Convenience types. */ +typedef unsigned char __u_char; +typedef unsigned short int __u_short; +typedef unsigned int __u_int; +typedef unsigned long int __u_long; +typedef unsigned long int __u_quad_t; +typedef long int __quad_t; +typedef signed char __int8_t; +typedef unsigned char __uint8_t; +typedef signed short int __int16_t; +typedef unsigned short int __uint16_t; +typedef signed int __int32_t; +typedef unsigned int __uint32_t; +typedef signed long int __int64_t; +typedef unsigned long int __uint64_t; +typedef __quad_t *__qaddr_t; + +typedef __uint64_t __dev_t; /* Type of device numbers. */ +typedef __uint32_t __uid_t; /* Type of user identifications. */ +typedef __uint32_t __gid_t; /* Type of group identifications. */ +typedef __uint64_t __ino_t; /* Type of file serial numbers. */ +typedef __uint64_t __ino64_t; /* "" (LFS) */ +typedef __uint32_t __mode_t; /* Type of file attribute bitmasks. */ +typedef __uint64_t __nlink_t; /* Type of file link counts. */ +typedef __int64_t __off_t; /* Type of file sizes and offsets. */ +typedef __int64_t __off64_t; /* "" (LFS) */ +typedef __int64_t __loff_t; /* Type of file sizes and offsets. */ +typedef __int32_t __pid_t; /* Type of process identifications. */ +typedef __int64_t __ssize_t; /* Type of a byte count, or error. */ +typedef __uint64_t __rlim_t; /* Type of resource counts. */ +typedef __uint64_t __rlim64_t; /* "" (LFS) */ +typedef __int64_t __blkcnt_t; /* Type to count nr disk blocks. */ +typedef __int64_t __blkcnt64_t; /* "" (LFS) */ +typedef __uint64_t __fsblkcnt_t; /* Type to count file system blocks. */ +typedef __uint64_t __fsblkcnt64_t; /* "" (LFS) */ +typedef __uint64_t __fsfilcnt_t; /* Type to count file system inodes. */ +typedef __uint64_t __fsfilcnt64_t; /* "" (LFS) */ +typedef __uint32_t __id_t; /* General type for IDs. */ + +typedef struct + { + int __val[2]; + } __fsid_t; /* Type of file system IDs. */ + +/* Everythin' else. */ +typedef int __daddr_t; /* Type of a disk address. */ +typedef char *__caddr_t; /* Type of a core address. */ +typedef long int __time_t; +typedef unsigned int __useconds_t; +typedef long int __suseconds_t; +typedef long int __swblk_t; /* Type of a swap block maybe? */ +typedef long int __clock_t; +typedef int __key_t; /* Type of a SYSV IPC key. */ + +/* Clock ID used in clock and timer functions. */ +typedef int __clockid_t; + +/* Timer ID returned by `timer_create'. */ +typedef int __timer_t; + +/* Used in `struct shmid_ds'. */ +typedef int __ipc_pid_t; + +/* type to represent block size. */ +typedef long int __blksize_t; + +/* Number of descriptors that can fit in an `fd_set'. */ +#define __FD_SETSIZE 1024 + +/* Used in XTI. */ +typedef int __t_scalar_t; +typedef unsigned int __t_uscalar_t; + +/* Duplicates info from stdint.h but this is used in unistd.h. */ +typedef long int __intptr_t; + +/* Duplicate info from sys/socket.h. */ +typedef unsigned int __socklen_t; + +/* Now add the thread types. */ +#if defined __USE_POSIX199506 || defined __USE_UNIX98 +# include +#endif + +#endif /* bits/types.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/clone.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/clone.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/clone.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/clone.S Fri Mar 16 01:22:54 2001 @@ -0,0 +1,55 @@ +/* Wrapper around clone system call. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +/* clone is even more special than fork as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include +#define _ERRNO_H 1 +#include + + .text +ENTRY(__clone) + /* Sanity check arguments & move registers */ + ltgr %r1,%r2 /* no NULL function pointers */ + lghi %r2,-EINVAL + jz SYSCALL_ERROR_LABEL + ltgr %r3,%r3 /* no NULL stack pointers */ + jz SYSCALL_ERROR_LABEL + /* move child_stack and flags, then call SVC */ + lgr %r2,%r3 + lgr %r3,%r4 + svc SYS_ify(clone) + ltgr %r2,%r2 /* check return code */ + jm SYSCALL_ERROR_LABEL + jz thread_start + br %r14 + +thread_start: + /* fn is in gpr 1, arg in gpr 5 */ + lgr %r2,%r5 /* set first parameter to void *arg */ + sgr %r11,%r11 /* terminate the stack frame */ + aghi %r15,-96 /* make room on the stack for the save area */ + basr %r14,%r1 /* jump to fn */ +#ifdef PIC + larl %r12,_GLOBAL_OFFSET_TABLE_ +#endif + jg _exit@PLT /* branch to _exit -> thread termination */ +PSEUDO_END (__clone) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c Fri Mar 16 01:45:25 2001 @@ -0,0 +1 @@ +/* fstatfs64 is the same as fstatfs. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c Fri Mar 16 01:45:37 2001 @@ -0,0 +1 @@ +/* ftruncate64 is the same as ftruncate. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c Fri Mar 16 01:45:49 2001 @@ -0,0 +1,42 @@ +/* fxstat using old-style Unix fstat system call. 64 bit S/390 version. + Copyright (C) 2001 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. */ + +/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __fxstat64 __fxstat64_disable + +#include +#include +#include + +#include +#include + +extern int __syscall_fstat (int, struct stat *); + +/* Get information about the file FD in BUF. */ +int +__fxstat (int vers, int fd, struct stat *buf) +{ + return INLINE_SYSCALL (fstat, 2, fd, buf); +} + +weak_alias (__fxstat, _fxstat); +#undef __fxstat64 +strong_alias (__fxstat, __fxstat64); diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c Fri Mar 16 01:45:59 2001 @@ -0,0 +1 @@ +/* fxstat64 is in fxstat.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S Thu Apr 12 14:02:18 2001 @@ -0,0 +1,72 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include + +#include "ucontext_i.h" + +/* __getcontext (const ucontext_t *ucp) + + Saves the machine context in UCP such that when it is activated, + it appears as if __getcontext() returned again. + + This implementation is intended to be used for *synchronous* context + switches only. Therefore, it does not have to save anything + other than the PRESERVED state. */ + +ENTRY(__getcontext) + lgr %r5,%r2 + + /* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */ + la %r2,SIG_BLOCK + slr %r3,%r3 + la %r4,SC_MASK(%r5) + svc SYS_ify(rt_sigprocmask) + + /* Store fpu context. */ + stfpc SC_FPC(%r5) + std %f0,SC_FPRS(%r5) + std %f1,SC_FPRS+8(%r5) + std %f2,SC_FPRS+16(%r5) + std %f3,SC_FPRS+24(%r5) + std %f4,SC_FPRS+32(%r5) + std %f5,SC_FPRS+40(%r5) + std %f6,SC_FPRS+48(%r5) + std %f7,SC_FPRS+56(%r5) + std %f8,SC_FPRS+64(%r5) + std %f9,SC_FPRS+72(%r5) + std %f10,SC_FPRS+80(%r5) + std %f11,SC_FPRS+88(%r5) + std %f12,SC_FPRS+96(%r5) + std %f13,SC_FPRS+104(%r5) + std %f14,SC_FPRS+112(%r5) + std %f15,SC_FPRS+120(%r5) + + /* Set __getcontext return value to 0. */ + slr %r2,%r2 + + /* Store general purpose registers. */ + stmg %r0,%r15,SC_GPRS(%r5) + + /* Return. */ + br %r14 +END(__getcontext) + +weak_alias(__getcontext, getcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c Fri Mar 16 01:46:12 2001 @@ -0,0 +1,4 @@ +#define __getdents64 __no___getdents64_decl +#include +#undef __getdents64 +weak_alias(__getdents, __getdents64); diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c Fri Mar 16 01:46:23 2001 @@ -0,0 +1 @@ +/* getdents64 is in getdents.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c Fri Mar 16 01:46:37 2001 @@ -0,0 +1 @@ +/* getrlimit64 is the same as getrlimit. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/glob.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/glob.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/glob.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/glob.c Fri Mar 16 01:46:51 2001 @@ -0,0 +1,7 @@ +#define glob64 __no_glob64_decl +#define globfree64 __no_globfree64_decl +#include +#undef glob64 +#undef globfree64 +weak_alias (glob, glob64) +weak_alias (globfree, globfree64) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c Fri Mar 16 01:47:08 2001 @@ -0,0 +1 @@ +/* glob64 is in glob.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h Fri Mar 16 01:47:23 2001 @@ -0,0 +1,46 @@ +/* Definition of `struct stat' used in the kernel. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +struct kernel_stat + { + unsigned int st_dev; + unsigned int st_ino; + unsigned int st_mode; + unsigned int st_nlink; + unsigned int st_uid; + unsigned int st_gid; + unsigned int st_rdev; + unsigned int __pad1; + unsigned long int st_size; + unsigned long int st_atime; + unsigned long int st_mtime; + unsigned long int st_ctime; + unsigned int st_blksize; + int st_blocks; + unsigned long __unused1; + unsigned long __unused2; + }; + +extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf); + +#define XSTAT_IS_XSTAT64 1 +#define _HAVE___UNUSED1 +#define _HAVE___UNUSED2 + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c Fri Mar 16 01:47:39 2001 @@ -0,0 +1,42 @@ +/* lxstat using old-style Unix fstat system call. 64 bit S/390 version. + Copyright (C) 2001 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. */ + +/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __lxstat64 __lxstat64_disable + +#include +#include +#include + +#include +#include + +extern int __syscall_lstat (const char *, struct stat *); + +/* Get information about the file FD in BUF. */ +int +__lxstat (int vers, const char *name, struct stat *buf) +{ + return INLINE_SYSCALL (lstat, 2, name, buf); +} + +weak_alias (__lxstat, _lxstat); +#undef __lxstat64 +strong_alias (__lxstat, __lxstat64); diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c Fri Mar 16 01:47:55 2001 @@ -0,0 +1 @@ +/* lxstat64 is in lxstat.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c Wed Apr 4 10:33:48 2001 @@ -0,0 +1,100 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include +#include +#include +#include + +/* This implementation can handle any ARGC value but only + normal integer type parameters. Parameters of type float, + double, complex and structure with sizes 0, 2, 4 or 8 + won't work. + makecontext sets up a stack and the registers for the + user context. The stack looks like this: + size offset + %r15 -> +-----------------------+ + 8 | back chain (zero) | 0 + 8 | reserved | 8 + 144 | save area for (*func) | 16 + +-----------------------+ + n | overflow parameters | 160 + +-----------------------+ + 8 | trampoline | 160+n + +-----------------------+ + The registers are set up like this: + %r2-%r6: parameters 1 to 5 + %r7 : (*func) pointer + %r8 : uc_link from ucontext structure + %r9 : address of setcontext + %r14 : return address to uc_link trampoline + %r15 : stack pointer. + + The trampoline looks like this: + basr %r14,%r7 + lgr %r2,%r8 + br %r9. */ + +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + unsigned long *sp; + va_list ap; + int i; + + sp = (long *) (((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & -8L); + + /* Setup the trampoline. */ + *--sp = 0x0de7b904002807f9; + + /* Set the return address to trampoline. */ + ucp->uc_mcontext.gregs[14] = (long) sp; + + /* Set register parameters. */ + va_start (ap, argc); + for (i = 0; (i < argc) && (i < 5); i++) + ucp->uc_mcontext.gregs[2+i] = va_arg (ap, long); + + /* The remaining arguments go to the overflow area. */ + if (argc > 5) { + sp -= argc - 5; + for (i = 5; i < argc; i++) + sp[i] = va_arg(ap, long); + } + va_end (ap); + + /* Make room for the save area and set the backchain. */ + sp -= 20; + *sp = 0; + + /* Pass (*func) to __start_context in %r7. */ + ucp->uc_mcontext.gregs[7] = (long) func; + + /* Pass ucp->uc_link to __start_context in %r8. */ + ucp->uc_mcontext.gregs[8] = (long) ucp->uc_link; + + /* Pass address of setcontext in %r9. */ + ucp->uc_mcontext.gregs[9] = (long) &setcontext; + + /* Set stack pointer. */ + ucp->uc_mcontext.gregs[15] = (long) sp; +} + +weak_alias (__makecontext, makecontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S Fri Mar 16 01:48:07 2001 @@ -0,0 +1,67 @@ +/* Wrapper around mmap system call. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 EINVAL 22 + + .text + +ENTRY(__mmap) + /* Save registers and setup stack frame. */ + stmg %r6,%r15,48(%r15) + lgr %r1,%r15 + lg %r0,8(%r15) /* Load eos. */ + aghi %r15,-208 /* Buy stack space. */ + stg %r1,0(%r15) /* Store back chain. */ + stg %r0,8(%r15) /* Store eos. */ + + /* Store parameters on stack, because old_mmap + takes only one parameter: a pointer to the parameter area. */ + mvc 200(8,%r15),368(%r15) /* Move 'offset'. */ + lgfr %r6,%r6 + stg %r6,192(%r15) /* Store 'fd'. */ + lgfr %r5,%r5 + stg %r5,184(%r15) /* Store 'flags'. */ + lgfr %r4,%r4 + stg %r4,176(%r15) /* Store 'prot'. */ + stg %r3,168(%r15) /* Store 'length'. */ + stg %r2,160(%r15) /* Store 'start'. */ + + la %r2,160(%r15) /* Load address of parameter list. */ + /* Do the system call trap. */ + svc SYS_ify(mmap) + + lg %r15,0(%r15) /* Load back chain. */ + lmg %r6,%r15,48(%r15) /* Load registers. */ + + /* Check gpr 2 for error. */ + lghi %r0,-4096 + clgr %r2,%r0 + jnl SYSCALL_ERROR_LABEL + + /* Successful; return the syscall's value. */ + br %r14 + +PSEUDO_END (__mmap) + +weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c Fri Mar 16 01:48:23 2001 @@ -0,0 +1 @@ +/* mmap64 is the same as mmap. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c Fri Mar 16 01:48:35 2001 @@ -0,0 +1 @@ +/* Empty since the pread syscall is equivalent. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c Fri Mar 16 01:48:47 2001 @@ -0,0 +1 @@ +/* Empty since the pwrite syscall is equivalent. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c Fri Mar 16 01:48:59 2001 @@ -0,0 +1,7 @@ +#define readdir64 __no_readdir64_decl +#define __readdir64 __no___readdir64_decl +#include +#undef __readdir64 +strong_alias (__readdir, __readdir64) +#undef readdir64 +weak_alias (__readdir, readdir64) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c Fri Mar 16 01:49:12 2001 @@ -0,0 +1 @@ +/* readdir64 is in readdir.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c Fri Mar 16 01:49:27 2001 @@ -0,0 +1 @@ +/* readdir64_r is in readdir_r.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c Fri Mar 16 01:49:39 2001 @@ -0,0 +1,4 @@ +#define readdir64_r __no_readdir64_r_decl +#include +#undef readdir64_r +weak_alias (__readdir_r, readdir64_r) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h Fri Mar 16 01:50:00 2001 @@ -0,0 +1,133 @@ +/* Dump registers. 64 bit S/390 version. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 +#include + +/* We will print the register dump in this format: + + GPR0: XXXXXXXXXXXXXXXX GPR1: XXXXXXXXXXXXXXXX + GPR2: XXXXXXXXXXXXXXXX GPR3: XXXXXXXXXXXXXXXX + GPR4: XXXXXXXXXXXXXXXX GPR5: XXXXXXXXXXXXXXXX + GPR6: XXXXXXXXXXXXXXXX GPR7: XXXXXXXXXXXXXXXX + GPR8: XXXXXXXXXXXXXXXX GPR9: XXXXXXXXXXXXXXXX + GPRA: XXXXXXXXXXXXXXXX GPRB: XXXXXXXXXXXXXXXX + GPRC: XXXXXXXXXXXXXXXX GPRD: XXXXXXXXXXXXXXXX + GPRE: XXXXXXXXXXXXXXXX GPRF: XXXXXXXXXXXXXXXX + + PSW.MASK: XXXXXXXXXXXXXXXX PSW.ADDR: XXXXXXXXXXXXXXXX + + ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX + ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX + ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX + ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX + */ + +static void +hexvalue (unsigned long int value, char *buf, size_t len) +{ + char *cp = _itoa_word (value, buf + len, 16, 0); + while (cp > buf) + *--cp = '0'; +} + +static void +register_dump (int fd, struct sigcontext *ctx) +{ + char regs[19][16]; + struct iovec iov[40]; + size_t nr = 0; + +#define ADD_STRING(str) \ + iov[nr].iov_base = (char *) str; \ + iov[nr].iov_len = strlen (str); \ + ++nr +#define ADD_MEM(str, len) \ + iov[nr].iov_base = str; \ + iov[nr].iov_len = len; \ + ++nr + + /* Generate strings of register contents. */ + hexvalue (ctx->sregs->regs.gprs[0], regs[0], 16); + hexvalue (ctx->sregs->regs.gprs[1], regs[1], 16); + hexvalue (ctx->sregs->regs.gprs[2], regs[2], 16); + hexvalue (ctx->sregs->regs.gprs[3], regs[3], 16); + hexvalue (ctx->sregs->regs.gprs[4], regs[4], 16); + hexvalue (ctx->sregs->regs.gprs[5], regs[5], 16); + hexvalue (ctx->sregs->regs.gprs[6], regs[6], 16); + hexvalue (ctx->sregs->regs.gprs[7], regs[7], 16); + hexvalue (ctx->sregs->regs.gprs[8], regs[8], 16); + hexvalue (ctx->sregs->regs.gprs[9], regs[9], 16); + hexvalue (ctx->sregs->regs.gprs[10], regs[10], 16); + hexvalue (ctx->sregs->regs.gprs[11], regs[11], 16); + hexvalue (ctx->sregs->regs.gprs[12], regs[12], 16); + hexvalue (ctx->sregs->regs.gprs[13], regs[13], 16); + hexvalue (ctx->sregs->regs.gprs[14], regs[14], 16); + hexvalue (ctx->sregs->regs.gprs[15], regs[15], 16); + hexvalue (ctx->sregs->regs.psw.mask, regs[16], 16); + hexvalue (ctx->sregs->regs.psw.addr, regs[17], 16); + + /* Generate the output. */ + ADD_STRING ("Register dump:\n\n GPR0: "); + ADD_MEM (regs[0], 16); + ADD_STRING (" GPR1: "); + ADD_MEM (regs[1], 16); + ADD_STRING (" GPR2: "); + ADD_MEM (regs[2], 16); + ADD_STRING (" GPR3: "); + ADD_MEM (regs[3], 16); + ADD_STRING ("\n GPR4: "); + ADD_MEM (regs[4], 16); + ADD_STRING (" GPR5: "); + ADD_MEM (regs[5], 16); + ADD_STRING (" GPR6: "); + ADD_MEM (regs[6], 16); + ADD_STRING (" GPR7: "); + ADD_MEM (regs[7], 16); + ADD_STRING ("\n GPR8: "); + ADD_MEM (regs[8], 16); + ADD_STRING (" GPR9: "); + ADD_MEM (regs[9], 16); + ADD_STRING (" GPRA: "); + ADD_MEM (regs[10], 16); + ADD_STRING (" GPRB: "); + ADD_MEM (regs[11], 16); + ADD_STRING ("\n GPRC: "); + ADD_MEM (regs[12], 16); + ADD_STRING (" GPRD: "); + ADD_MEM (regs[13], 16); + ADD_STRING (" GPRE: "); + ADD_MEM (regs[14], 16); + ADD_STRING (" GPRF: "); + ADD_MEM (regs[15], 16); + ADD_STRING ("\n\n PSW.MASK: "); + ADD_MEM (regs[16], 16); + ADD_STRING (" PSW.ADDR: "); + ADD_MEM (regs[17], 16); + ADD_STRING (" TRAP: "); + ADD_MEM (regs[18], 4); + ADD_STRING ("\n"); + + /* Write the stuff out. */ + writev (fd, iov, nr); +} + + +#define REGISTER_DUMP register_dump (fd, &ctx) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S Thu Apr 12 14:02:18 2001 @@ -0,0 +1,69 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 +#include + +#include "ucontext_i.h" + +/* __setcontext (const ucontext_t *ucp) + + Restores the machine context in UCP and thereby resumes execution + in that context. + + This implementation is intended to be used for *synchronous* context + switches only. Therefore, it does not have to restore anything + other than the PRESERVED state. */ + +ENTRY(__setcontext) + lgr %r5,%r2 + + /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ + la %r2,SIG_BLOCK + la %r3,SC_MASK(%r5) + slgr %r4,%r4 + svc SYS_ify(rt_sigprocmask) + + /* Load fpu context. */ + lfpc SC_FPC(%r5) + ld %f0,SC_FPRS(%r5) + ld %f1,SC_FPRS+8(%r5) + ld %f2,SC_FPRS+16(%r5) + ld %f3,SC_FPRS+24(%r5) + ld %f4,SC_FPRS+32(%r5) + ld %f5,SC_FPRS+40(%r5) + ld %f6,SC_FPRS+48(%r5) + ld %f7,SC_FPRS+56(%r5) + ld %f8,SC_FPRS+64(%r5) + ld %f9,SC_FPRS+72(%r5) + ld %f10,SC_FPRS+80(%r5) + ld %f11,SC_FPRS+88(%r5) + ld %f12,SC_FPRS+96(%r5) + ld %f13,SC_FPRS+104(%r5) + ld %f14,SC_FPRS+112(%r5) + ld %f15,SC_FPRS+120(%r5) + + /* Load general purpose registers. */ + lmg %r0,%r15,SC_GPRS(%r5) + + /* Return. */ + br %r14 +END(__setcontext) + +weak_alias(__setcontext, setcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c Fri Mar 16 01:50:14 2001 @@ -0,0 +1 @@ +/* setrlimit64 is the same as setrlimit. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c Fri Mar 16 01:50:28 2001 @@ -0,0 +1,50 @@ +/* Copyright (C) 2001 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. */ + +/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try + falling back to the old style signals as the default Linux handler does. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigaction (int, const struct sigaction *, + struct sigaction *, size_t); + +/* The variable is shared between all wrappers around signal handling + functions which have RT equivalents. This is the definition. */ + + +/* If ACT is not NULL, change the action for SIG to *ACT. + If OACT is not NULL, put the old action for SIG in *OACT. */ +int +__libc_sigaction (sig, act, oact) + int sig; + const struct sigaction *act; + struct sigaction *oact; +{ + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8); +} + +weak_alias (__libc_sigaction, __sigaction) +weak_alias (__libc_sigaction, sigaction) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c Fri Mar 16 01:50:41 2001 @@ -0,0 +1,41 @@ +/* Copyright (C) 2001 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. */ + +/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try + falling back to the old style signals as the default Linux handler does. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigpending (sigset_t *, size_t); + + +/* Change the set of blocked signals to SET, + wait until a signal arrives, and restore the set of blocked signals. */ +int +sigpending (set) + sigset_t *set; +{ + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); +} diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c Fri Mar 16 01:50:54 2001 @@ -0,0 +1,44 @@ +/* Copyright (C) 2001 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. */ + +/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try + falling back to the old style signals as the default Linux handler does. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigprocmask (int, const sigset_t *, + sigset_t *, size_t); + +/* Get and/or change the set of blocked signals. */ +int +__sigprocmask (how, set, oset) + int how; + const sigset_t *set; + sigset_t *oset; +{ + + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); +} +weak_alias (__sigprocmask, sigprocmask) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c Fri Mar 16 01:51:06 2001 @@ -0,0 +1,39 @@ +/* Copyright (C) 2001 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. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigsuspend (const sigset_t *, size_t); + + +/* Change the set of blocked signals to SET, + wait until a signal arrives, and restore the set of blocked signals. */ +int +__sigsuspend (set) + const sigset_t *set; +{ + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8); +} +weak_alias (__sigsuspend, sigsuspend) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/socket.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/socket.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/socket.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/socket.S Fri Mar 16 01:51:17 2001 @@ -0,0 +1,99 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 +#include + +/* &%/$&!! preprocessor */ +#define P(a, b) P2(a, b) +#define P2(a, b) a##b + + .text +/* The socket-oriented system calls are handled unusally in Linux. + They are all gated through the single `socketcall' system call number. + `socketcall' takes two arguments: the first is the subcode, specifying + which socket function is being called; and the second is a pointer to + the arguments to the specific function. + + The .S files for the other calls just #define socket and #include this. */ + +#ifndef __socket +#ifndef NO_WEAK_ALIAS +#define __socket P(__,socket) +#else +#define __socket socket +#endif +#endif + +#ifndef NARGS /* The socket.o object is compiled directly ... */ +#define NARGS 3 +#endif + +.globl __socket +ENTRY(__socket) + + /* Save registers and setup stack. */ + stmg %r6,%r15,48(%r15) /* Save registers. */ + lgr %r1,%r15 + lg %r0,8(%r15) /* Load eos. */ + ahi %r15,-208 /* Buy stack space. */ + stg %r1,0(%r15) /* Store back chain. */ + stg %r0,8(%r15) /* Store eos. */ + + /* Reorder arguments. */ +#if (NARGS >= 6) + mvc 200(8,%r15),368(%r15) /* Move between parameter lists. */ +#endif +#if (NARGS >= 5) + stg %r6,192(%r15) /* Store into parameter list. */ +#endif +#if (NARGS >= 4) + stg %r5,184(%r15) /* Store into parameter list. */ +#endif +#if (NARGS >= 3) + stg %r4,176(%r15) /* Store into parameter list. */ +#endif +#if (NARGS >= 2) + stg %r3,168(%r15) /* Store into parameter list. */ + stg %r2,160(%r15) +#endif + /* Load subcode for socket syscall. */ + lghi %r2,P(SOCKOP_,socket) + la %r3,160(%r15) /* Load address of parameter list. */ + + /* Do the system call trap. */ + svc SYS_ify(socketcall) + + lg %r15,0(%r15) /* Load back chain. */ + lmg %r6,15,48(%r15) /* Load registers. */ + + /* gpr2 is < 0 if there was an error. */ + lghi %r0,-125 + clgr %r2,%r0 + jnl SYSCALL_ERROR_LABEL + + /* Successful; return the syscall's value. */ + br %r14 + +PSEUDO_END (__socket) + +#ifndef NO_WEAK_ALIAS +weak_alias (__socket, socket) +#endif + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c Fri Mar 16 01:51:30 2001 @@ -0,0 +1 @@ +/* statfs64 is the same as statfs. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h Fri Mar 16 01:56:28 2001 @@ -0,0 +1,118 @@ +/* Copyright (C) 2001 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 _SYS_PROCFS_H +#define _SYS_PROCFS_H 1 + +/* This is somewhat modelled after the file of the same name on SVR4 + systems. It provides a definition of the core file format for ELF + used on Linux. It doesn't have anything to do with the /proc file + system, even though Linux has one. + + Anyway, the whole purpose of this file is for GDB and GDB only. + Don't read too much into it. Don't use it for anything other than + GDB unless you know what you are doing. */ + +#include +#include +#include +#include +#include + +__BEGIN_DECLS + +typedef greg_t elf_greg_t; +#define ELF_NGREG NGREG +typedef gregset_t elf_gregset_t; +typedef fpreg_t elf_fpreg_t; +typedef fpregset_t elf_fpregset_t; + +/* Signal info. */ +struct elf_siginfo + { + int si_signo; /* Signal number. */ + int si_code; /* Extra code. */ + int si_errno; /* Errno. */ + }; + + +/* Definitions to generate Intel SVR4-like core files. These mostly + have the same names as the SVR4 types with "elf_" tacked on the + front to prevent clashes with Linux definitions, and the typedef + forms have been avoided. This is mostly like the SVR4 structure, + but more Linuxy, with things that Linux does not support and which + GDB doesn't really use excluded. */ + +struct elf_prstatus + { + struct elf_siginfo pr_info; /* Info associated with signal. */ + short int pr_cursig; /* Current signal. */ + unsigned long int pr_sigpend; /* Set of pending signals. */ + unsigned long int pr_sighold; /* Set of held signals. */ + __pid_t pr_pid; + __pid_t pr_ppid; + __pid_t pr_pgrp; + __pid_t pr_sid; + struct timeval pr_utime; /* User time. */ + struct timeval pr_stime; /* System time. */ + struct timeval pr_cutime; /* Cumulative user time. */ + struct timeval pr_cstime; /* Cumulative system time. */ + elf_gregset_t pr_reg; /* GP registers. */ + int pr_fpvalid; /* True if math copro being used. */ + }; + + +#define ELF_PRARGSZ (80) /* Number of chars for args. */ + +struct elf_prpsinfo + { + char pr_state; /* Numeric process state. */ + char pr_sname; /* Char for pr_state. */ + char pr_zomb; /* Zombie. */ + char pr_nice; /* Nice val. */ + unsigned long int pr_flag; /* Flags. */ + unsigned int pr_uid; + unsigned int pr_gid; + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + /* Lots missing */ + char pr_fname[16]; /* Filename of executable. */ + char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ + }; + +/* The rest of this file provides the types for emulation of the + Solaris interfaces that should be implemented by + users of libthread_db. */ + +/* Addresses. */ +typedef void *psaddr_t; + +/* Register sets. Linux has different names. */ +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; + +/* We don't have any differences between processes and threads, + therefore have only one PID type. */ +typedef __pid_t lwpid_t; + +/* Process status and info. In the end we do provide typedefs for them. */ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + +__END_DECLS + +#endif /* sys/procfs.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h Sat Apr 7 14:02:40 2001 @@ -0,0 +1,77 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 +/* Forward definition to avoid parse errors */ +struct ucontext; +typedef struct ucontext ucontext_t; +#include +#include + +/* We need the signal context definitions even if they are not used + included in . */ +#include + + +/* Type for a general-purpose register. */ +typedef unsigned long greg_t; + +/* And the whole bunch of them. We should have used `struct s390_regs', + but to avoid name space pollution and since the tradition says that + the register set is an array, we make gregset_t a simple array + that has the same size as s390_regs. */ +#define NGREG 27 +#define NUM_FPRS 16 +/* Must match kernels psw_t alignment */ +typedef greg_t gregset_t[NGREG] __attribute__ ((aligned(8))); + +typedef union +{ + double d; + float f; +} fpreg_t; + +/* Register set for the floating-point registers. */ +typedef struct { + unsigned int fpc; + fpreg_t fprs[NUM_FPRS]; +} fpregset_t; + +/* Context to describe whole processor state. */ +typedef struct + { + int version; + gregset_t gregs; + fpregset_t fpregs; + } mcontext_t; + +/* Userlevel context. */ +struct ucontext + { + unsigned long int uc_flags; + struct ucontext *uc_link; + __sigset_t uc_sigmask; + stack_t uc_stack; + mcontext_t uc_mcontext; + long int uc_filler[170]; + }; + + +#endif /* sys/ucontext.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S Fri Mar 16 01:51:42 2001 @@ -0,0 +1,52 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +/* Please consult the file sysdeps/unix/sysv/linux/s390/sysdep.h for + more information about the value -4095 used below.*/ + +ENTRY (syscall) + /* Save registers and setup stack. */ + stmg %r6,%r15,48(%r15) /* Save registers. */ + lgr %r1,%r15 + lg %r0,8(%r15) /* Load eos. */ + aghi %r15,-160 /* Buy stack space. */ + stg %r1,0(%r15) /* Store back chain. */ + stg %r0,8(%r15) /* Store eos. */ + + lgr %r1,%r2 /* Move syscall number. */ + lgr %r2,%r3 /* First parameter. */ + lgr %r3,%r4 /* Second parameter. */ + lgr %r4,%r5 /* Third parameter. */ + lgr %r5,%r6 /* Fourth parameter. */ + lg %r6,320(%r15) /* Fifth parameter. */ + basr %r7,0 +.L0: ex %r1,.L1-.L0(%r7) /* Lsb of R1 is subsituted as SVC number. */ + + lg %r15,0(%r15) /* Load back chain. */ + lmg %r6,15,48(%r15) /* Load registers. */ + + lghi %r0,-4095 + clgr %r2,%r0 /* Check R2 for error. */ + jnl SYSCALL_ERROR_LABEL + br %r14 /* Return to caller. */ +.L1: .word 0x0A00 /* Opcode for SVC 0. */ +PSEUDO_END (syscall) + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list Fri Mar 16 01:51:53 2001 @@ -0,0 +1,55 @@ +# File name Caller Syscall name # args Strong name Weak names + +llseek EXTRA lseek 3 __libc_lseek64 __lseek llseek __lseek64 lseek64 +pread - pread 4 __libc_pread __libc_pread64 __pread pread __pread64 pread64 +pwrite - pwrite 4 __libc_pwrite __libc_pwrite64 __pwrite pwrite __pwrite64 pwrite64 +fstatfs - fstatfs i:ip __fstatfs fstatfs fstatfs64 __fstatfs64 +statfs - statfs i:sp __statfs statfs statfs64 +getpeername - getpeername i:ipp __getpeername getpeername +getpriority - getpriority i:ii __getpriority getpriority +ftruncate - ftruncate 2 __ftruncate ftruncate ftruncate64 __ftruncate64 +truncate - truncate 2 truncate truncate64 +getrlimit - getrlimit 2 __getrlimit getrlimit getrlimit64 +setrlimit - setrlimit 2 __setrlimit setrlimit setrlimit64 + +# semaphore and shm system calls +msgctl - msgctl i:iip __msgctl msgctl +msgget - msgget i:ii __msgget msgget +msgrcv - msgrcv i:ibnii __msgrcv msgrcv +msgsnd - msgsnd i:ibni __msgsnd msgsnd +shmat - shmat i:ipi __shmat shmat +shmctl - shmctl i:iip __shmctl shmctl +shmdt - shmdt i:s __shmdt shmdt +shmget - shmget i:iii __shmget shmget +semop - semop i:ipi __semop semop +semget - semget i:iii __semget semget +semctl - semctl i:iiii __semctl semctl + +# proper socket implementations: +accept - accept i:iBN __libc_accept __accept accept +bind - bind i:ipi __bind bind +connect - connect i:ipi __libc_connect __connect connect +getpeername - getpeername i:ipp __getpeername getpeername +getsockname - getsockname i:ipp __getsockname getsockname +getsockopt - getsockopt i:iiiBN __getsockopt getsockopt +listen - listen i:ii __listen listen +recv - recv i:ibni __libc_recv __recv recv +recvfrom - recvfrom i:ibniBN __libc_recvfrom __recvfrom recvfrom +recvmsg - recvmsg i:ipi __libc_recvmsg recvmsg +send - send i:ibni __libc_send __send send +sendmsg - sendmsg i:ipi __libc_sendmsg sendmsg +sendto - sendto i:ibnibn __libc_sendto __sendto sendto +setsockopt - setsockopt i:iiibn __setsockopt setsockopt +shutdown - shutdown i:ii __shutdown shutdown +socket - socket i:iii __socket socket +socketpair - socketpair i:iiif __socketpair socketpair + +getresuid - getresuid i:ppp getresuid +getresgid - getresgid i:ppp getresgid + +rt_sigaction EXTRA rt_sigaction i:ippi __syscall_rt_sigaction rt_sigaction +rt_sigpending EXTRA rt_sigpending i:pi __syscall_rt_sigpending rt_sigpending +rt_sigprocmask EXTRA rt_sigprocmask i:ippi __syscall_rt_sigprocmask rt_sigprocmask +rt_sigqueueinfo EXTRA rt_sigqueueinfo i:iip __syscall_rt_sigqueueinfo rt_sigqueueinfo +rt_sigsuspend EXTRA rt_sigsuspend i:pi __syscall_rt_sigsuspend rt_sigsuspend +rt_sigtimedwait EXTRA rt_sigtimedwait i:pppi __syscall_rt_sigtimedwait rt_sigtimedwait diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S Fri Mar 16 01:52:06 2001 @@ -0,0 +1,90 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 + +/* Because the Linux version is in fact m68k/ELF and the start.? file + for this system (sysdeps/m68k/elf/start.S) is also used by The Hurd + and therefore this files must not contain the definition of the + `errno' variable (I don't know why, ask Roland), we have to define + it somewhere else. + + ...and this place is here. */ + .bss + .globl errno + .type errno,@object + .size errno,4 +errno: + .space 4 +weak_alias (errno, _errno) + +/* The following code is only used in the shared library when we + compile the reentrant version. Otherwise each system call defines + each own version. */ + +/* The syscall stubs jump here when they detect an error. */ + +#undef CALL_MCOUNT +#define CALL_MCOUNT + + .text +ENTRY(__syscall_error) +#ifndef PIC +#ifndef _LIBC_REENTRANT + lcr %r2,%r2 + larl %r1,errno + st %r2,0(%r1) + lghi %r2,-1 + br %r14 +#else + stmg %r13,%r15,104(%r15) + lgr %r0,%r15 + aghi %r15,-160 + lcr %r13,%r2 + stg %r0,0(%r15) + brasl %r14,__errno_location + st %r13,0(%r2) + lmg %r13,%r15,264(%r15) + lghi %r2,-1 + br %r14 +#endif +#else +#ifndef _LIBC_REENTRANT + larl %r1,_GLOBAL_OFFSET_TABLE_ + lg %r1,errno@GOT(%r1) + lcr %r2,%r2 + st %r2,0(%r1) + lghi %r2,-1 + br %r14 +#else + stmg %r13,%r15,104(%r15) + lgr %r0,%r15 + aghi %r15,-160 + lcr %r13,%r2 + stg %r0,0(%r15) + brasl %r14,__errno_location@PLT + st %r13,0(%r2) + lmg %r13,%r15,264(%r15) + lghi %r2,-1 + br %r14 +#endif +#endif + +END (__syscall_error) + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h Fri Mar 16 01:52:19 2001 @@ -0,0 +1,164 @@ +/* Assembler macros for 64 bit S/390. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 _LINUX_S390_SYSDEP_H +#define _LINUX_S390_SYSEDP_H + +#include +#include + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +/* In newer 2.1 kernels __NR_syscall is missing so we define it here. */ +#define __NR_syscall 0 + +#undef SYS_ify +#define SYS_ify(syscall_name) __NR_##syscall_name + +/* ELF-like local names start with `.L'. */ +#undef L +#define L(name) .L##name + +#ifdef __ASSEMBLER__ + +/* Linux uses a negative return value to indicate syscall errors, unlike + most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be negative + even if the call succeeded. E.g., the `lseek' system call might return + a large offset. Therefore we must not anymore test for < 0, but test + for a real error by making sure the value in gpr2 is a real error + number. Linus said he will make sure the no syscall returns a value + in -1 .. -4095 as a valid result so we can savely test with -4095. */ + +#define SYSCALL_ERROR_LABEL 0f + +#undef PSEUDO +#define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (args, syscall_name); \ + lghi %r4,-4095 ; \ + clgr %r2,%r4 ; \ + jnl SYSCALL_ERROR_LABEL ; \ + L(pseudo_end): + +#undef PSEUDO_END +#define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER; \ + END (name) + +#ifndef _LIBC_REENTRANT +#ifndef PIC +#define SYSCALL_ERROR_HANDLER \ +0: lcr %r2,%r2 ; \ + larl %r1,errno ; \ + st %r2,0(%r1) ; \ + lghi %r2,-1 ; \ + br %r14 +#else +#define SYSCALL_ERROR_HANDLER \ +0: larl %r1,_GLOBAL_OFFSET_TABLE_ ; \ + lg %r1,errno@GOT(%r1) ; \ + lcr %r2,%r2 ; \ + st %r2,0(%r1) ; \ + lghi %r2,-1 ; \ + br %r14 +#endif /* PIC */ +#else +#define SYSCALL_ERROR_HANDLER \ +0: jg __syscall_error@PLT +#endif /* _LIBC_REENTRANT */ + +/* Linux takes system call arguments in registers: + + syscall number 1 call-clobbered + arg 1 2 call-clobbered + arg 2 3 call-clobbered + arg 3 4 call-clobbered + arg 4 5 call-clobbered + arg 5 6 call-saved + + (Of course a function with say 3 arguments does not have entries for + arguments 4 and 5.) + S390 does not need to do ANY stack operations to get its parameters + right. + */ + +#define DO_CALL(args, syscall) \ + svc SYS_ify (syscall) + +#define ret \ + br 14 + +#endif /* __ASSEMBLER__ */ + +#undef INLINE_SYSCALL +#define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + DECLARGS_##nr(args) \ + int err; \ + asm volatile ( \ + LOADARGS_##nr \ + "svc %b1\n\t" \ + "lgr %0,%%r2\n\t" \ + : "=d" (err) \ + : "I" (__NR_##name) ASMFMT_##nr \ + : "memory", "cc", "2", "3", "4", "5", "6"); \ + if (err >= 0xfffff001) \ + { \ + __set_errno(-err); \ + err = -1; \ + } \ + (int) err; }) + +#define DECLARGS_0() +#define DECLARGS_1(arg1) \ + unsigned long gpr2 = (unsigned long) (arg1); +#define DECLARGS_2(arg1, arg2) \ + DECLARGS_1(arg1) \ + unsigned long gpr3 = (unsigned long) (arg2); +#define DECLARGS_3(arg1, arg2, arg3) \ + DECLARGS_2(arg1, arg2) \ + unsigned long gpr4 = (unsigned long) (arg3); +#define DECLARGS_4(arg1, arg2, arg3, arg4) \ + DECLARGS_3(arg1, arg2, arg3) \ + unsigned long gpr5 = (unsigned long) (arg4); +#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ + DECLARGS_4(arg1, arg2, arg3, arg4) \ + unsigned long gpr6 = (unsigned long) (arg5); + +#define LOADARGS_0 +#define LOADARGS_1 "LG 2,%2\n\t" +#define LOADARGS_2 LOADARGS_1 "LG 3,%3\n\t" +#define LOADARGS_3 LOADARGS_2 "LG 4,%4\n\t" +#define LOADARGS_4 LOADARGS_3 "LG 5,%5\n\t" +#define LOADARGS_5 LOADARGS_4 "LG 6,%6\n\t" + +#define ASMFMT_0 +#define ASMFMT_1 , "m" (gpr2) +#define ASMFMT_2 , "m" (gpr2), "m" (gpr3) +#define ASMFMT_3 , "m" (gpr2), "m" (gpr3), "m" (gpr4) +#define ASMFMT_4 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5) +#define ASMFMT_5 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5), "m" (gpr6) + +#endif /* _LINUX_S390_SYSDEP_H */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c Fri Mar 16 01:52:33 2001 @@ -0,0 +1 @@ +/* truncate64 is the same as truncate. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h Wed Apr 4 10:33:27 2001 @@ -0,0 +1,34 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + 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. */ + +/* Constants shared between setcontext() and getcontext(). Don't + install this header file. */ + +#define SIG_BLOCK 0 +#define SIG_UNBLOCK 1 +#define SIG_SETMASK 2 + +#define SC_FLGS 0x000 +#define SC_LINK 0x008 +#define SC_MASK 0x010 +#define SC_STCK 0x090 +#define SC_VERS 0x0a8 +#define SC_GPRS 0x0b0 +#define SC_FPC 0x188 +#define SC_FPRS 0x190 + diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c Fri Mar 16 01:52:46 2001 @@ -0,0 +1,42 @@ +/* xstat using old-style Unix stat system call. 64 bit S/390 version. + Copyright (C) 2001 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. */ + +/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __xstat64 __xstat64_disable + +#include +#include +#include + +#include +#include + +extern int __syscall_stat (const char *, struct stat *); + +/* Get information about the file NAME in BUF. */ +int +__xstat (int vers, const char *name, struct stat *buf) +{ + return INLINE_SYSCALL (stat, 2, name, buf); +} + +weak_alias (__xstat, _xstat); +#undef __xstat64 +strong_alias (__xstat, __xstat64); diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c Fri Mar 16 01:52:56 2001 @@ -0,0 +1 @@ +/* xstat64 is in xstat.c */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/scandir64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/scandir64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/scandir64.c Mon Aug 28 04:16:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/scandir64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/semctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/semctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/semctl.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/semctl.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setegid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setegid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setegid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setegid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/seteuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/seteuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/seteuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/seteuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setfsgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setfsgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setfsgid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setfsgid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setfsuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setfsuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setfsuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setfsuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setgid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setgid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setgroups.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setgroups.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setgroups.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setgroups.c Wed Dec 31 16:00:00 1969 @@ -1,2 +0,0 @@ -/* We also have to rewrite the kernel gid_t to the user land type. */ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setregid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setregid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setregid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setregid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setresgid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setresgid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setresgid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setresgid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setresuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setresuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setresuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setresuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setreuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setreuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setreuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setreuid.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setrlimit.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setrlimit.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setrlimit.c Mon Aug 28 04:16:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setrlimit.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setuid.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setuid.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/setuid.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/setuid.c Wed Dec 31 16:00:00 1969 @@ -1,2 +0,0 @@ -#include - diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/shmctl.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/shmctl.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/shmctl.c Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/shmctl.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h Mon Mar 26 20:53:36 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -24,3 +24,5 @@ #define GET_PC(ctx) ((void *)((ctx)->sregs->regs.psw.addr)) #define GET_FRAME(ctx) (*(void **)((ctx)->sregs->regs.gprs[11])) #define GET_STACK(ctx) ((void *)((ctx)->sregs->regs.gprs[15])) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/socket.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/socket.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/socket.S Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/socket.S Wed Dec 31 16:00:00 1969 @@ -1,98 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 -#include - -/* &%/$&!! preprocessor */ -#define P(a, b) P2(a, b) -#define P2(a, b) a##b - - .text -/* The socket-oriented system calls are handled unusally in Linux. - They are all gated through the single `socketcall' system call number. - `socketcall' takes two arguments: the first is the subcode, specifying - which socket function is being called; and the second is a pointer to - the arguments to the specific function. - - The .S files for the other calls just #define socket and #include this. */ - -#ifndef __socket -#ifndef NO_WEAK_ALIAS -#define __socket P(__,socket) -#else -#define __socket socket -#endif -#endif - -#ifndef NARGS /* the socket.o object is compiled directly ... */ -#define NARGS 3 -#endif - -.globl __socket -ENTRY(__socket) - - /* Save registers and setup stack. */ - stm %r6,%r15,24(%r15) /* save registers */ - lr %r1,%r15 - l %r0,4(0,%r15) /* load eos */ - ahi %r15,-120 /* buy stack space */ - st %r1,0(0,%r15) /* store back chain */ - st %r0,4(0,%r15) /* store eos */ - - /* Reorder arguments */ -#if (NARGS >= 6) - mvc 0x74(4,%r15),216(%r15) /* move between parameter lists */ -#endif -#if (NARGS >= 5) - st %r6,0x70(0,%r15) /* store into parameter list */ -#endif -#if (NARGS >= 4) - st %r5,0x6C(0,%r15) /* store into parameter list */ -#endif -#if (NARGS >= 3) - st %r4,0x68(0,%r15) /* store into parameter list */ -#endif -#if (NARGS >= 2) - st %r3,0x64(0,%r15) /* store into parameter list */ - st %r2,0x60(0,%r15) -#endif - /* load subcode for socket syscall */ - lhi %r2,P(SOCKOP_,socket) - la %r3,0x60(0,%r15) /* load address of parameter list */ - - /* Do the system call trap. */ - svc SYS_ify(socketcall) - - l %r15,0(0,%r15) /* load back chain */ - lm %r6,15,24(%r15) /* load registers */ - - /* gpr2 is < 0 if there was an error. */ - lhi %r0,-125 - clr %r2,%r0 - jnl SYSCALL_ERROR_LABEL - - /* Successful; return the syscall's value. */ - br %r14 - -PSEUDO_END (__socket) - -#ifndef NO_WEAK_ALIAS -weak_alias (__socket, socket) -#endif diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/swapcontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/swapcontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/swapcontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/swapcontext.c Thu Apr 12 14:02:18 2001 @@ -0,0 +1,39 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + + 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 + +extern int __getcontext (ucontext_t *__ucp) __THROW; +extern int __setcontext (__const ucontext_t *__ucp) __THROW; + +int +__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) +{ + /* Save the current machine context to oucp. */ + __getcontext (oucp); + /* Modify oucp to skip the __setcontext call on reactivation. */ + oucp->uc_mcontext.gregs[14] = &&fake_return; + /* Restore the machine context in ucp. */ + __setcontext (ucp); + +fake_return: + return 0; +} + +weak_alias (__swapcontext, swapcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sys/procfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sys/procfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sys/procfs.h Sun Oct 8 17:05:09 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sys/procfs.h Wed Dec 31 16:00:00 1969 @@ -1,118 +0,0 @@ -/* 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 _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -typedef greg_t elf_greg_t; -#define ELF_NGREG NGREG -typedef gregset_t elf_gregset_t; -typedef fpreg_t elf_fpreg_t; -typedef fpregset_t elf_fpregset_t; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sys/ucontext.h Sun Oct 8 17:05:09 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sys/ucontext.h Wed Dec 31 16:00:00 1969 @@ -1,76 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 -/* Forward definition to avoid parse errors */ -struct ucontext; -typedef struct ucontext ucontext_t; -#include -#include - -/* We need the signal context definitions even if they are not used - included in . */ -#include - - -/* Type for a general-purpose register. */ -typedef unsigned long greg_t; - -/* And the whole bunch of them. We should have used `struct s390_regs', - but to avoid name space pollution and since the tradition says that - the register set is an array, we make gregset_t a simple array - that has the same size as s390_regs. */ -#define NGREG 36 -#define NUM_FPRS 16 -typedef greg_t gregset_t[NGREG]; - -typedef union -{ - double d; - float f; -} fpreg_t; - -/* Register set for the floating-point registers. */ -typedef struct { - unsigned int fpc; - fpreg_t fprs[NUM_FPRS]; -} fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - int version; - gregset_t gregs; - fpregset_t fpregs; - } mcontext_t; - -/* Userlevel context. */ -struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_links; - __sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - long int uc_filler[170]; - }; - - -#endif /* sys/ucontext.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/syscall.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/syscall.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/syscall.S Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/syscall.S Wed Dec 31 16:00:00 1969 @@ -1,51 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 - -/* Please consult the file sysdeps/unix/sysv/linux/s390/sysdep.h for - more information about the value -4095 used below.*/ - -ENTRY (syscall) - /* Save registers and setup stack. */ - stm %r6,%r15,24(%r15) /* save registers */ - lr %r1,%r15 - l %r0,4(0,%r15) /* load eos */ - ahi %r15,-96 /* buy stack space */ - st %r1,0(0,%r15) /* store back chain */ - st %r0,4(0,%r15) /* store eos */ - - lr %r1,%r2 /* move syscall number */ - lr %r2,%r3 /* first parameter */ - lr %r3,%r4 /* second parameter */ - lr %r4,%r5 /* third parameter */ - lr %r5,%r6 /* fourth parameter */ - l %r6,192(%r15) /* fifth parameter */ - basr %r7,0 -.L0: ex %r1,.L1-.L0(%r7) /* lsb of R1 is subsituted as SVC number */ - - l %r15,0(0,%r15) /* load back chain */ - lm %r6,15,24(%r15) /* load registers */ - - lhi %r0,-4095 - clr %r2,%r0 /* check R2 for error */ - jnl SYSCALL_ERROR_LABEL - br %r14 /* return to caller */ -.L1: .word 0x0A00 /* opcode for SVC 0 */ -PSEUDO_END (syscall) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/s390/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/syscalls.list Mon Aug 28 04:16:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/syscalls.list Wed Dec 31 16:00:00 1969 @@ -1,4 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0 -oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sysdep.S glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sysdep.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sysdep.S Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sysdep.S Wed Dec 31 16:00:00 1969 @@ -1,104 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 - -/* Because the Linux version is in fact m68k/ELF and the start.? file - for this system (sysdeps/m68k/elf/start.S) is also used by The Hurd - and therefore this files must not contain the definition of the - `errno' variable (I don't know why, ask Roland), we have to define - it somewhere else. - - ...and this place is here. */ - .bss - .globl errno - .type errno,@object - .size errno,4 -errno: - .space 4 -weak_alias (errno, _errno) - -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -/* The syscall stubs jump here when they detect an error. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT - - .text -ENTRY(__syscall_error) -#ifndef PIC -#ifndef _LIBC_REENTRANT - lcr %r2,%r2 - basr %r1,0 -.L0: l %r1,.L1-.L0(%r1) - st %r2,0(0,%r1) - lhi %r2,-1 - br %r14 -.L1: .long errno -#else - stm %r11,%r15,44(%r15) - lr %r0,%r15 - ahi %r15,-96 - st %r0,0(%r15) - lcr %r11,%r2 - basr %r13,0 -.L0: l %r1,.L1-.L0(%r13) - basr %r14,%r1 - st %r11,0(%r2) - lhi %r2,-1 - l %r15,0(%r15) - lm %r11,%r15,44(%r15) - br %r14 -.L1: .long __errno_location -#endif -#else -#ifndef _LIBC_REENTRANT - basr %r1,0 -.L0: al %r1,.L1-.L0(%r1) - l %r1,errno@GOT12(%r1) - lcr %r2,%r2 - st %r2,0(0,%r1) - lhi %r2,-1 - br %r14 -.L1: .long _GLOBAL_OFFSET_TABLE_-0b -#else - stm %r11,%r15,44(%r15) - lr %r0,%r15 - ahi %r15,-96 - st %r0,0(%r15) - lcr %r11,%r2 - basr %r13,0 -.L0: l %r12,.L1-.L0(%r13) - ar %r12,%r13 - l %r14,.L2-.L0(%r13) - bas %r14,0(%r14,%r13) - st %r11,0(0,%r2) - lhi %r2,-1 - l %r15,0(%r15) - lm %r11,%r15,44(%r15) - br %r14 -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -.L2: .long __errno_location@PLT - .L0 -#endif -#endif - -END (__syscall_error) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sysdep.h glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sysdep.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/sysdep.h Wed Aug 2 08:14:21 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/sysdep.h Wed Dec 31 16:00:00 1969 @@ -1,212 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 _LINUX_S390_SYSDEP_H -#define _LINUX_S390_SYSEDP_H - -#include -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -/* in newer 2.1 kernels __NR_syscall is missing so we define it here */ -#define __NR_syscall 0 - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* ELF-like local names start with `.L'. */ -#undef L -#define L(name) .L##name - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in gpr2 is a real error - number. Linus said he will make sure the no syscall returns a value - in -1 .. -4095 as a valid result so we can savely test with -4095. */ - -#define SYSCALL_ERROR_LABEL 0f - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (args, syscall_name); \ - lhi %r4,-4095 ; \ - clr %r2,%r4 ; \ - jnl SYSCALL_ERROR_LABEL ; \ - L(pseudo_end): - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#ifndef _LIBC_REENTRANT -#ifndef PIC -#define SYSCALL_ERROR_HANDLER \ -0: lcr %r2,%r2 ; \ - basr %r1,0 ; \ -1: l %r1,2f-1b(%r1) \ - st %r2,0(%r1) \ - lhi %r2,-1 \ - br %r14 \ -2: .long errno -#else -#define SYSCALL_ERROR_HANDLER \ -0: basr %r1,0 ; \ -1: al %r1,2f-1b(%r1) ; \ - l %r1,errno@GOT12(%r1) ; \ - lcr %r2,%r2 ; \ - st %r2,0(%r1) ; \ - lhi %r2,-1 ; \ - br %r14 ; \ -2: .long _GLOBAL_OFFSET_TABLE_-1b -#endif /* PIC */ -#else -#define SYSCALL_ERROR_HANDLER \ -0: basr %r1,0 ; \ -1: al %r1,2f-1b(%r1) ; \ - br %r1 ; \ -2: .long __syscall_error@PLT-1b -#endif /* _LIBC_REENTRANT */ - -/* Linux takes system call arguments in registers: - - syscall number 1 call-clobbered - arg 1 2 call-clobbered - arg 2 3 call-clobbered - arg 3 4 call-clobbered - arg 4 5 call-clobbered - arg 5 6 call-saved - - (Of course a function with say 3 arguments does not have entries for - arguments 4 and 5.) - S390 does not need to do ANY stack operations to get its parameters - right. - */ - -#define DO_CALL(args, syscall) \ - svc SYS_ify (syscall) - -#define ret \ - br 14 - -#endif /* __ASSEMBLER__ */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - int err; \ - asm volatile ( \ - LOADARGS_##nr \ - "svc %b1\n\t" \ - "lr %0,%%r2\n\t" \ - : "=d" (err) \ - : "I" (__NR_##name) ASMFMT_##nr \ - : "memory", "cc", "2", "3", "4", "5", "6"); \ - if (err >= 0xfffff001) \ - { \ - __set_errno(-err); \ - err = 0xffffffff; \ - } \ - (int) err; }) - -#define DECLARGS_0() -#define DECLARGS_1(arg1) \ - unsigned int gpr2 = (unsigned int) (arg1); -#define DECLARGS_2(arg1, arg2) \ - DECLARGS_1(arg1) \ - unsigned int gpr3 = (unsigned int) (arg2); -#define DECLARGS_3(arg1, arg2, arg3) \ - DECLARGS_2(arg1, arg2) \ - unsigned int gpr4 = (unsigned int) (arg3); -#define DECLARGS_4(arg1, arg2, arg3, arg4) \ - DECLARGS_3(arg1, arg2, arg3) \ - unsigned int gpr5 = (unsigned int) (arg4); -#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ - DECLARGS_4(arg1, arg2, arg3, arg4) \ - unsigned int gpr6 = (unsigned int) (arg5); - -#define LOADARGS_0 -#define LOADARGS_1 "L 2,%2\n\t" -#define LOADARGS_2 LOADARGS_1 "L 3,%3\n\t" -#define LOADARGS_3 LOADARGS_2 "L 4,%4\n\t" -#define LOADARGS_4 LOADARGS_3 "L 5,%5\n\t" -#define LOADARGS_5 LOADARGS_4 "L 6,%6\n\t" - -#define ASMFMT_0 -#define ASMFMT_1 , "m" (gpr2) -#define ASMFMT_2 , "m" (gpr2), "m" (gpr3) -#define ASMFMT_3 , "m" (gpr2), "m" (gpr3), "m" (gpr4) -#define ASMFMT_4 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5) -#define ASMFMT_5 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5), "m" (gpr6) - -#if 0 -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - asm volatile ( \ - "svc %b1\n\t" \ - : "+d" (gpr2) \ - : "I" (__NR_##name) ASMFMT_##nr : "memory", "cc"); \ - if (gpr2 >= 0xfffff001) \ - { \ - __set_errno(-gpr2); \ - gpr2 = 0xffffffff; \ - } \ - (int) gpr2; }) - -#define DECLARGS_0() \ - register unsigned int gpr2 asm("2"); -#define DECLARGS_1(arg1) \ - register unsigned int gpr2 asm("2") = (unsigned int) (arg1); -#define DECLARGS_2(arg1, arg2) \ - DECLARGS_1(arg1) \ - register unsigned int gpr3 asm("3") = (unsigned int) (arg2); -#define DECLARGS_3(arg1, arg2, arg3) \ - DECLARGS_2(arg1, arg2) \ - register unsigned int gpr4 asm("4") = (unsigned int) (arg3); -#define DECLARGS_4(arg1, arg2, arg3, arg4) \ - DECLARGS_3(arg1, arg2, arg3) \ - register unsigned int gpr5 asm("5") = (unsigned int) (arg4); -#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ - DECLARGS_4(arg1, arg2, arg3, arg4) \ - register unsigned int gpr6 asm("6") = (unsigned int) (arg5); - -#define ASMFMT_0 -#define ASMFMT_1 -#define ASMFMT_2 , "d" (gpr3) -#define ASMFMT_3 , "d" (gpr3), "d" (gpr4) -#define ASMFMT_4 , "d" (gpr3), "d" (gpr4), "d" (gpr5) -#define ASMFMT_5 , "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) - -#endif /* 0 */ - -#endif /* _LINUX_S390_SYSDEP_H */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/versionsort64.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/versionsort64.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/versionsort64.c Mon Aug 28 04:16:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/versionsort64.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/s390/xstat.c glibc-2.2.3/sysdeps/unix/sysv/linux/s390/xstat.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/s390/xstat.c Mon Aug 28 04:16:51 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/s390/xstat.c Wed Dec 31 16:00:00 1969 @@ -1 +0,0 @@ -#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h Mon Jun 12 13:43:23 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h Mon Mar 26 20:53:37 2001 @@ -23,3 +23,5 @@ #define GET_PC(ctx) ((void *) ctx.sc_pc) #define GET_FRAME(ctx) ((void *) ctx.sc_regs[14]) #define GET_STACK(ctx) ((void *) ctx.sc_regs[15]) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sh/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/sh/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sh/sys/ucontext.h Mon Jun 12 13:48:26 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sh/sys/ucontext.h Tue Mar 27 22:27:56 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 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 @@ -32,10 +32,10 @@ typedef int greg_t; /* Number of general registers. */ -#define NGREG 16 +#define NFPREG 16 /* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; +typedef greg_t gregset_t[NFPREG]; #ifdef __USE_GNU /* Number of each register is the `gregset_t' array. */ @@ -79,10 +79,10 @@ enum typedef int freg_t; /* Number of FPU registers. */ -#define NFREG 16 +#define NFPREG 16 /* Structure to describe FPU registers. */ -typedef freg_t fpregset_t[NFREG]; +typedef freg_t fpregset_t[NFPREG]; /* Context to describe whole processor state. */ typedef struct diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/shm_open.c glibc-2.2.3/sysdeps/unix/sysv/linux/shm_open.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/shm_open.c Sat Jan 6 20:35:41 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/shm_open.c Sat Apr 7 14:02:40 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001 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 @@ -157,7 +157,7 @@ shm_open (const char *name, int oflag, m file on the shmfs. If this is what should be done the whole function should be revamped since we can determine whether shmfs is available while trying to open the file, all in one turn. */ - fd = open (fname, oflag, mode); + fd = open (fname, oflag | O_NOFOLLOW, mode); if (fd != -1) { /* We got a descriptor. Now set the FD_CLOEXEC bit. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h Fri Feb 9 10:04:36 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h Mon Mar 26 20:53:37 2001 @@ -17,15 +17,17 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t +#if !defined _SIGNAL_H && !defined __need_siginfo_t \ + && !defined __need_sigevent_t # error "Never include this file directly. Use instead" #endif #include -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 +#if (!defined __have_sigval_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t \ + || defined __need_sigevent_t)) +# define __have_sigval_t 1 /* Type for data associated with a signal. */ typedef union sigval @@ -33,6 +35,11 @@ typedef union sigval int sival_int; void *sival_ptr; } sigval_t; +#endif + +#if (!defined __have_siginfo_t \ + && (defined _SIGNAL_H || defined __need_siginfo_t)) +# define __have_siginfo_t 1 # define __SI_MAX_SIZE 128 # if __WORDSIZE == 64 @@ -122,7 +129,9 @@ typedef struct siginfo signals. */ enum { - SI_SIGIO = -5, /* Sent by queued SIGIO. */ + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ # define SI_SIGIO SI_SIGIO SI_ASYNCIO, /* Sent by AIO completion. */ # define SI_ASYNCIO SI_ASYNCIO @@ -255,7 +264,8 @@ enum #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ -#if defined _SIGNAL_H && !defined __have_sigevent_t +#if (defined _SIGNAL_H || defined __need_sigevent_t) \ + && !defined __have_sigevent_t # define __have_sigevent_t 1 /* Structure to transport application-defined values with signals. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/socket.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/socket.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/socket.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/socket.h Wed Apr 25 13:46:36 2001 @@ -0,0 +1,314 @@ +/* System-specific socket constants and types. Linux/SPARC version. + Copyright (C) 1991,1992,1994-1999,2000,2001 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 __BITS_SOCKET_H +#define __BITS_SOCKET_H + +#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H +# error "Never include directly; use instead." +#endif + +#define __need_size_t +#define __need_NULL +#include + +#include +#include + +/* Type for length arguments in socket calls. */ +#ifndef __socklen_t_defined +typedef __socklen_t socklen_t; +# define __socklen_t_defined +#endif + +/* Types of sockets. */ +enum __socket_type +{ + SOCK_STREAM = 1, /* Sequenced, reliable, connection-based + byte streams. */ +#define SOCK_STREAM SOCK_STREAM + SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams + of fixed maximum length. */ +#define SOCK_DGRAM SOCK_DGRAM + SOCK_RAW = 3, /* Raw protocol interface. */ +#define SOCK_RAW SOCK_RAW + SOCK_RDM = 4, /* Reliably-delivered messages. */ +#define SOCK_RDM SOCK_RDM + SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, + datagrams of fixed maximum length. */ +#define SOCK_SEQPACKET SOCK_SEQPACKET + SOCK_PACKET = 10 /* Linux specific way of getting packets + at the dev level. For writing rarp and + other similar things on the user level. */ +#define SOCK_PACKET SOCK_PACKET +}; + +/* Protocol families. */ +#define PF_UNSPEC 0 /* Unspecified. */ +#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ +#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ +#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */ +#define PF_INET 2 /* IP protocol family. */ +#define PF_AX25 3 /* Amateur Radio AX.25. */ +#define PF_IPX 4 /* Novell Internet Protocol. */ +#define PF_APPLETALK 5 /* Appletalk DDP. */ +#define PF_NETROM 6 /* Amateur radio NetROM. */ +#define PF_BRIDGE 7 /* Multiprotocol bridge. */ +#define PF_ATMPVC 8 /* ATM PVCs. */ +#define PF_X25 9 /* Reserved for X.25 project. */ +#define PF_INET6 10 /* IP version 6. */ +#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */ +#define PF_DECnet 12 /* Reserved for DECnet project. */ +#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */ +#define PF_SECURITY 14 /* Security callback pseudo AF. */ +#define PF_KEY 15 /* PF_KEY key management API. */ +#define PF_NETLINK 16 +#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */ +#define PF_PACKET 17 /* Packet family. */ +#define PF_ASH 18 /* Ash. */ +#define PF_ECONET 19 /* Acorn Econet. */ +#define PF_ATMSVC 20 /* ATM SVCs. */ +#define PF_SNA 22 /* Linux SNA Project */ +#define PF_IRDA 23 /* IRDA sockets. */ +#define PF_PPPOX 24 /* PPPoX sockets. */ +#define PF_MAX 32 /* For now.. */ + +/* Address families. */ +#define AF_UNSPEC PF_UNSPEC +#define AF_LOCAL PF_LOCAL +#define AF_UNIX PF_UNIX +#define AF_FILE PF_FILE +#define AF_INET PF_INET +#define AF_AX25 PF_AX25 +#define AF_IPX PF_IPX +#define AF_APPLETALK PF_APPLETALK +#define AF_NETROM PF_NETROM +#define AF_BRIDGE PF_BRIDGE +#define AF_ATMPVC PF_ATMPVC +#define AF_X25 PF_X25 +#define AF_INET6 PF_INET6 +#define AF_ROSE PF_ROSE +#define AF_DECnet PF_DECnet +#define AF_NETBEUI PF_NETBEUI +#define AF_SECURITY PF_SECURITY +#define AF_KEY PF_KEY +#define AF_NETLINK PF_NETLINK +#define AF_ROUTE PF_ROUTE +#define AF_PACKET PF_PACKET +#define AF_ASH PF_ASH +#define AF_ECONET PF_ECONET +#define AF_ATMSVC PF_ATMSVC +#define AF_SNA PF_SNA +#define AF_IRDA PF_IRDA +#define AF_PPPOX PF_PPPOX +#define AF_MAX PF_MAX + +/* Socket level values. Others are defined in the appropriate headers. + + XXX These definitions also should go into the appropriate headers as + far as they are available. */ +#define SOL_RAW 255 +#define SOL_DECNET 261 +#define SOL_X25 262 +#define SOL_PACKET 263 +#define SOL_ATM 264 /* ATM layer (cell level). */ +#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */ +#define SOL_IRDA 266 + +/* Maximum queue length specifiable by listen. */ +#define SOMAXCONN 128 + +/* Get the definition of the macro to define the common sockaddr members. */ +#include + +/* Structure describing a generic socket address. */ +struct sockaddr + { + __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ + char sa_data[14]; /* Address data. */ + }; + + +/* Structure large enough to hold any socket address (with the historical + exception of AF_UNIX). We reserve 128 bytes. */ +#if ULONG_MAX > 0xffffffff +# define __ss_aligntype __uint64_t +#else +# define __ss_aligntype __uint32_t +#endif +#define _SS_SIZE 128 +#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype))) + +struct sockaddr_storage + { + __SOCKADDR_COMMON (ss_); /* Address family, etc. */ + __ss_aligntype __ss_align; /* Force desired alignment. */ + char __ss_padding[_SS_PADSIZE]; + }; + + +/* Bits in the FLAGS argument to `send', `recv', et al. */ +enum + { + MSG_OOB = 0x01, /* Process out-of-band data. */ +#define MSG_OOB MSG_OOB + MSG_PEEK = 0x02, /* Peek at incoming messages. */ +#define MSG_PEEK MSG_PEEK + MSG_DONTROUTE = 0x04, /* Don't use local routing. */ +#define MSG_DONTROUTE MSG_DONTROUTE +#ifdef __USE_GNU + /* DECnet uses a different name. */ + MSG_TRYHARD = MSG_DONTROUTE, +# define MSG_TRYHARD MSG_DONTROUTE +#endif + MSG_CTRUNC = 0x08, /* Control data lost before delivery. */ +#define MSG_CTRUNC MSG_CTRUNC + MSG_PROXY = 0x10, /* Supply or ask second address. */ +#define MSG_PROXY MSG_PROXY + MSG_TRUNC = 0x20, +#define MSG_TRUNC MSG_TRUNC + MSG_DONTWAIT = 0x40, /* Nonblocking IO. */ +#define MSG_DONTWAIT MSG_DONTWAIT + MSG_EOR = 0x80, /* End of record. */ +#define MSG_EOR MSG_EOR + MSG_WAITALL = 0x100, /* Wait for a full request. */ +#define MSG_WAITALL MSG_WAITALL + MSG_FIN = 0x200, +#define MSG_FIN MSG_FIN + MSG_SYN = 0x400, +#define MSG_SYN MSG_SYN + MSG_CONFIRM = 0x800, /* Confirm path validity. */ +#define MSG_CONFIRM MSG_CONFIRM + MSG_RST = 0x1000, +#define MSG_RST MSG_RST + MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */ +#define MSG_ERRQUEUE MSG_ERRQUEUE + MSG_NOSIGNAL = 0x4000 /* Do not generate SIGPIPE. */ +#define MSG_NOSIGNAL MSG_NOSIGNAL + }; + + +/* Structure describing messages sent by + `sendmsg' and received by `recvmsg'. */ +struct msghdr + { + void *msg_name; /* Address to send to/receive from. */ + socklen_t msg_namelen; /* Length of address data. */ + + struct iovec *msg_iov; /* Vector of data to send/receive into. */ +#if __WORDSIZE == 32 + int msg_iovlen; /* Number of elements in the vector. */ + + void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ + socklen_t msg_controllen; /* Ancillary data buffer length. */ +#else + size_t msg_iovlen; /* Number of elements in the vector. */ + + void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ + size_t msg_controllen; /* Ancillary data buffer length. */ +#endif + int msg_flags; /* Flags on received message. */ + }; + +/* Structure used for storage of ancillary data object information. */ +struct cmsghdr + { + size_t cmsg_len; /* Length of data in cmsg_data plus length + of cmsghdr structure. */ + int cmsg_level; /* Originating protocol. */ + int cmsg_type; /* Protocol specific type. */ + __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ + /* XXX Perhaps this should be removed. */ + }; + +/* Ancillary data object manipulation macros. */ +#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2 +# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) +#else +# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) +#endif +#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) +#define CMSG_FIRSTHDR(mhdr) \ + ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ + ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL) +#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \ + & (size_t) ~(sizeof (size_t) - 1)) +#define CMSG_SPACE(len) (CMSG_ALIGN (len) \ + + CMSG_ALIGN (sizeof (struct cmsghdr))) +#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) + +extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, + struct cmsghdr *__cmsg) __THROW; +#ifdef __USE_EXTERN_INLINES +# ifndef _EXTERN_INLINE +# define _EXTERN_INLINE extern __inline +# endif +_EXTERN_INLINE struct cmsghdr * +__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW +{ + if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) + /* The kernel header does this so there may be a reason. */ + return 0; + + __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg + + CMSG_ALIGN (__cmsg->cmsg_len)); + if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control + + __mhdr->msg_controllen) + || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) + > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) + /* No more entries. */ + return 0; + return __cmsg; +} +#endif /* Use `extern inline'. */ + +/* Socket level message types. This must match the definitions in + . */ +enum + { + SCM_RIGHTS = 0x01, /* Transfer file descriptors. */ +#define SCM_RIGHTS SCM_RIGHTS +#ifdef __USE_BSD + SCM_CREDENTIALS = 0x02, /* Credentials passing. */ +# define SCM_CREDENTIALS SCM_CREDENTIALS +#endif + __SCM_CONNECT = 0x03 /* Data array is `struct scm_connect'. */ + }; + +/* User visible structure for SCM_CREDENTIALS message */ + +struct ucred +{ + pid_t pid; /* PID of sending process. */ + uid_t uid; /* UID of sending process. */ + gid_t gid; /* GID of sending process. */ +}; + +/* Get socket manipulation related informations from kernel headers. */ +#include + + +/* Structure used to manipulate the SO_LINGER option. */ +struct linger + { + int l_onoff; /* Nonzero to linger on close. */ + int l_linger; /* Time to linger. */ + }; + +#endif /* bits/socket.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/stat.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/stat.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/stat.h Fri Aug 11 22:10:12 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/stat.h Mon Mar 26 20:53:37 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992,95,96,97,98,99,2000,2001 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 @@ -76,7 +76,7 @@ struct stat64 __dev_t st_dev; /* Device. */ #if __WORDSIZE == 64 unsigned short int __pad1; -#endif +#endif __ino64_t st_ino; /* File serial number. */ __mode_t st_mode; /* File mode. */ __nlink_t st_nlink; /* Link count. */ @@ -116,10 +116,11 @@ struct stat64 #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) /* Protection bits. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/statvfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/statvfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/statvfs.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/statvfs.h Wed Apr 25 13:47:23 2001 @@ -0,0 +1,106 @@ +/* Copyright (C) 1997, 1998, 2000, 2001 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 _SYS_STATVFS_H +# error "Never include directly; use instead." +#endif + +#include /* For __fsblkcnt_t and __fsfilcnt_t. */ + +#if __WORDSIZE == 32 +#define _STATVFSBUF_F_UNUSED +#endif + +struct statvfs + { + unsigned long int f_bsize; + unsigned long int f_frsize; +#ifndef __USE_FILE_OFFSET64 + __fsblkcnt_t f_blocks; + __fsblkcnt_t f_bfree; + __fsblkcnt_t f_bavail; + __fsfilcnt_t f_files; + __fsfilcnt_t f_ffree; + __fsfilcnt_t f_favail; +#else + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsfilcnt64_t f_files; + __fsfilcnt64_t f_ffree; + __fsfilcnt64_t f_favail; +#endif + unsigned long int f_fsid; +#ifdef _STATVFSBUF_F_UNUSED + int __f_unused; +#endif + unsigned long int f_flag; + unsigned long int f_namemax; + int __f_spare[6]; + }; + +#ifdef __USE_LARGEFILE64 +struct statvfs64 + { + unsigned long int f_bsize; + unsigned long int f_frsize; + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsfilcnt64_t f_files; + __fsfilcnt64_t f_ffree; + __fsfilcnt64_t f_favail; + unsigned long int f_fsid; +#ifdef _STATVFSBUF_F_UNUSED + int __f_unused; +#endif + unsigned long int f_flag; + unsigned long int f_namemax; + int __f_spare[6]; + }; +#endif + +/* Definitions for the flag in `f_flag'. These definitions should be + kept in sync which the definitions in . */ +enum +{ + ST_RDONLY = 1, /* Mount read-only. */ +#define ST_RDONLY ST_RDONLY + ST_NOSUID = 2, /* Ignore suid and sgid bits. */ +#define ST_NOSUID ST_NOSUID +#ifdef __USE_GNU + ST_NODEV = 4, /* Disallow access to device special files. */ +# define ST_NODEV ST_NODEV + ST_NOEXEC = 8, /* Disallow program execution. */ +# define ST_NOEXEC ST_NOEXEC + ST_SYNCHRONOUS = 16, /* Writes are synced at once. */ +# define ST_SYNCHRONOUS ST_SYNCHRONOUS + ST_MANDLOCK = 64, /* Allow mandatory locks on an FS. */ +# define ST_MANDLOCK ST_MANDLOCK + ST_WRITE = 128, /* Write on file/directory/symlink. */ +# define ST_WRITE ST_WRITE + ST_APPEND = 256, /* Append-only file. */ +# define ST_APPEND ST_APPEND + ST_IMMUTABLE = 512, /* Immutable file. */ +# define ST_IMMUTABLE ST_IMMUTABLE + ST_NOATIME = 1024, /* Do not update access times. */ +# define ST_NOATIME ST_NOATIME + ST_NODIRATIME /* Do not update directory access times. */ +# define ST_NODIRATIME ST_NODIRATIME +#endif /* Use GNU. */ +}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/time.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/time.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/bits/time.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/bits/time.h Wed Apr 25 13:45:03 2001 @@ -0,0 +1,73 @@ +/* System-dependent timing definitions. Linux/SPARC version. + Copyright (C) 1996, 1997, 1999, 2000, 2001 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. */ + +/* + * Never include this file directly; use instead. + */ + +#ifndef __need_timeval +# ifndef _BITS_TIME_H +# define _BITS_TIME_H 1 + +/* ISO/IEC 9899:1990 7.12.1: + The macro `CLOCKS_PER_SEC' is the number per second of the value + returned by the `clock' function. */ +/* CAE XSH, Issue 4, Version 2: + The value of CLOCKS_PER_SEC is required to be 1 million on all + XSI-conformant systems. */ +# define CLOCKS_PER_SEC 1000000l + +# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K +/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK + presents the real value for clock ticks per second for the system. */ +# include +extern long int __sysconf (int); +# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */ +# endif + +# ifdef __USE_POSIX199309 +/* Identifier for system-wide realtime clock. */ +# define CLOCK_REALTIME 0 +/* High-resolution timer from the CPU. */ +# define CLOCK_PROCESS_CPUTIME_ID 2 +/* Thread-specific CPU-time clock. */ +# define CLOCK_THREAD_CPUTIME_ID 3 + +/* Flag to indicate time is absolute. */ +# define TIMER_ABSTIME 1 +# endif + +# endif /* bits/time.h */ +#endif + +#ifdef __need_timeval +# undef __need_timeval +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +# include + +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + __time_t tv_sec; /* Seconds. */ + __suseconds_t tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif /* need timeval */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/readelflib.c glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/readelflib.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/readelflib.c Fri May 26 12:38:38 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/readelflib.c Mon Mar 26 20:53:37 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger , 1999 and Jakub Jelinek , 1999. @@ -20,27 +20,28 @@ int process_elf32_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, - size_t file_length); + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); int process_elf64_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, - size_t file_length); + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); /* Returns 0 if everything is ok, != 0 in case of error. */ int process_elf_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, size_t file_length) + unsigned int *osversion, char **soname, void *file_contents, + size_t file_length) { ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; int ret; if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, soname, file_contents, - file_length); + return process_elf32_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); else { - ret = process_elf64_file (file_name, lib, flag, soname, file_contents, - file_length); + ret = process_elf64_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); /* Sparc 64bit libraries are always libc.so.6+. */ if (!ret) *flag = FLAG_SPARC_LIB64|FLAG_ELF_LIBC6; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h Thu Nov 16 11:12:06 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h Sat Apr 7 14:02:40 2001 @@ -1,5 +1,5 @@ /* Linux/sparc32 version of processor capability information handling macros. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 1999. @@ -21,13 +21,15 @@ #ifndef _DL_PROCINFO_H #define _DL_PROCINFO_H 1 +#include + /* If anything should be added here check whether the size of each string is still ok with the given array size. */ static const char sparc32_cap_flags[][7] = { - "flush", "stbar", "swap", "muldiv", "v9" + "flush", "stbar", "swap", "muldiv", "v9", "ultra3" }; -#define _DL_HWCAP_COUNT 5 +#define _DL_HWCAP_COUNT 6 static inline int __attribute__ ((unused)) @@ -35,13 +37,13 @@ _dl_procinfo (int word) { int i; - _dl_sysdep_message ("AT_HWCAP: ", NULL); + _dl_printf ("AT_HWCAP: "); for (i = 0; i < _DL_HWCAP_COUNT; ++i) if (word & (1 << i)) - _dl_sysdep_message (" ", sparc32_cap_flags[i], NULL); + _dl_printf (" %s", sparc32_cap_flags[i]); - _dl_sysdep_message ("\n", NULL); + _dl_printf ("\n"); return 0; } @@ -66,7 +68,7 @@ _dl_string_hwcap (const char *str) return -1; }; -#define HWCAP_IMPORTANT (HWCAP_SPARC_V9) +#define HWCAP_IMPORTANT (HWCAP_SPARC_V9|HWCAP_SPARC_ULTRA3) /* There are no different platforms defined. */ #define _dl_platform_string(idx) "" diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h Tue Mar 28 11:05:49 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h Mon Mar 26 20:53:37 2001 @@ -25,3 +25,5 @@ #define GET_STACK(__ctx) ((void *) (__ctx)->si_regs.u_regs[14]) #define GET_FRAME(__ctx) ADVANCE_STACK_FRAME (GET_STACK(__ctx)) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c Wed Apr 25 13:48:43 2001 @@ -0,0 +1 @@ +#include diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/Implies glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/Implies --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/Implies Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/Implies Tue Apr 24 15:47:45 2001 @@ -0,0 +1 @@ +unix/sysv/linux/sparc/sparc32/sparcv9 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/Dist glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/Dist --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/Dist Fri Apr 7 12:10:04 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/Dist Wed Apr 25 14:51:14 2001 @@ -3,3 +3,4 @@ kernel_stat.h getcontext.S setcontext.S sizes.h +ucontext_i.h diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h Fri Feb 9 10:04:36 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h Wed Dec 31 16:00:00 1969 @@ -1,296 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux/SPARC64 version. - Copyright (C) 1997, 1998, 1999, 2000, 2001 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 _SIGNAL_H && !defined __need_siginfo_t -# error "Never include this file directly. Use instead" -#endif - -#include - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - -typedef struct siginfo - { - int si_signo; /* Signal number. */ - int si_errno; /* If non-zero, an errno value associated with - this signal, as defined in . */ - int si_code; /* Signal code. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - unsigned int _timer1; - unsigned int _timer2; - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timer1 _sifields._timer._timer1 -# define si_timer2 _sifields._timer._timer2 -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_SIGIO = -5, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* Sent by AIO completion. */ -# define SI_ASYNCIO SI_ASYNCIO - SI_MESGQ, /* Sent by real time mesq state change. */ -# define SI_MESGQ SI_MESGQ - SI_TIMER, /* Sent by timer expiration. */ -# define SI_TIMER SI_TIMER - SI_QUEUE, /* Sent by sigqueue. */ -# define SI_QUEUE SI_QUEUE - SI_USER, /* Sent by kill, sigsend, raise. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* Illegal operand. */ -# define ILL_ILLOPN ILL_ILLOPN - ILL_ILLADR, /* Illegal addressing mode. */ -# define ILL_ILLADR ILL_ILLADR - ILL_ILLTRP, /* Illegal trap. */ -# define ILL_ILLTRP ILL_ILLTRP - ILL_PRVOPC, /* Privileged opcode. */ -# define ILL_PRVOPC ILL_PRVOPC - ILL_PRVREG, /* Privileged register. */ -# define ILL_PRVREG ILL_PRVREG - ILL_COPROC, /* Coprocessor error. */ -# define ILL_COPROC ILL_COPROC - ILL_BADSTK /* Internal stack error. */ -# define ILL_BADSTK ILL_BADSTK -}; - -/* `si_code' values for SIGFPE signal. */ -enum -{ - FPE_INTDIV = 1, /* Integer divide by zero. */ -# define FPE_INTDIV FPE_INTDIV - FPE_INTOVF, /* Integer overflow. */ -# define FPE_INTOVF FPE_INTOVF - FPE_FLTDIV, /* Floating point divide by zero. */ -# define FPE_FLTDIV FPE_FLTDIV - FPE_FLTOVF, /* Floating point overflow. */ -# define FPE_FLTOVF FPE_FLTOVF - FPE_FLTUND, /* Floating point underflow. */ -# define FPE_FLTUND FPE_FLTUND - FPE_FLTRES, /* Floating point inexact result. */ -# define FPE_FLTRES FPE_FLTRES - FPE_FLTINV, /* Floating point invalid operation. */ -# define FPE_FLTINV FPE_FLTINV - FPE_FLTSUB /* Subscript out of range. */ -# define FPE_FLTSUB FPE_FLTSUB -}; - -/* `si_code' values for SIGSEGV signal. */ -enum -{ - SEGV_MAPERR = 1, /* Address not mapped to object. */ -# define SEGV_MAPERR SEGV_MAPERR - SEGV_ACCERR /* Invalid permissions for mapped object. */ -# define SEGV_ACCERR SEGV_ACCERR -}; - -/* `si_code' values for SIGBUS signal. */ -enum -{ - BUS_ADRALN = 1, /* Invalid address alignment. */ -# define BUS_ADRALN BUS_ADRALN - BUS_ADRERR, /* Non-existant physical address. */ -# define BUS_ADRERR BUS_ADRERR - BUS_OBJERR /* Object specific hardware error. */ -# define BUS_OBJERR BUS_OBJERR -}; - -/* `si_code' values for SIGTRAP signal. */ -enum -{ - TRAP_BRKPT = 1, /* Process breakpoint. */ -# define TRAP_BRKPT TRAP_BRKPT - TRAP_TRACE /* Process trace trap. */ -# define TRAP_TRACE TRAP_TRACE -}; - -/* `si_code' values for SIGCHLD signal. */ -enum -{ - CLD_EXITED = 1, /* Child has exited. */ -# define CLD_EXITED CLD_EXITED - CLD_KILLED, /* Child was killed. */ -# define CLD_KILLED CLD_KILLED - CLD_DUMPED, /* Child terminated abnormally. */ -# define CLD_DUMPED CLD_DUMPED - CLD_TRAPPED, /* Traced child has trapped. */ -# define CLD_TRAPPED CLD_TRAPPED - CLD_STOPPED, /* Child has stopped. */ -# define CLD_STOPPED CLD_STOPPED - CLD_CONTINUED /* Stopped child has continued. */ -# define CLD_CONTINUED CLD_CONTINUED -}; - -/* `si_code' values for SIGPOLL signal. */ -enum -{ - POLL_IN = 1, /* Data input available. */ -# define POLL_IN POLL_IN - POLL_OUT, /* Output buffers available. */ -# define POLL_OUT POLL_OUT - POLL_MSG, /* Input message available. */ -# define POLL_MSG POLL_MSG - POLL_ERR, /* I/O error. */ -# define POLL_ERR POLL_ERR - POLL_PRI, /* High priority input available. */ -# define POLL_PRI POLL_PRI - POLL_HUP /* Device disconnected. */ -# define POLL_HUP POLL_HUP -}; - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if defined _SIGNAL_H && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration of the `pthread_attr_t' type. */ -struct __pthread_attr_s; - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - struct __pthread_attr_s *_attribute; /* Really pthread_attr_t. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `sigev_notify' values. */ -enum -{ - SIGEV_SIGNAL = 0, /* Notify via signal. */ -# define SIGEV_SIGNAL SIGEV_SIGNAL - SIGEV_NONE, /* Other notification: meaningless. */ -# define SIGEV_NONE SIGEV_NONE - SIGEV_THREAD /* Deliver via thread creation. */ -# define SIGEV_THREAD SIGEV_THREAD -}; - -#endif /* have _SIGNAL_H. */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/bits/socket.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/bits/socket.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/bits/socket.h Sat Jan 27 13:24:07 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/bits/socket.h Wed Dec 31 16:00:00 1969 @@ -1,308 +0,0 @@ -/* System-specific socket constants and types. Linux/SPARC64 version. - Copyright (C) 1991,1992,1994-1999,2000,2001 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 __BITS_SOCKET_H -#define __BITS_SOCKET_H - -#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H -# error "Never include directly; use instead." -#endif - -#define __need_size_t -#define __need_NULL -#include - -#include -#include - -/* Type for length arguments in socket calls. */ -#ifndef __socklen_t_defined -typedef __socklen_t socklen_t; -# define __socklen_t_defined -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_PACKET = 10 /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET -}; - -/* Protocol families. */ -#define PF_UNSPEC 0 /* Unspecified. */ -#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ -#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ -#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */ -#define PF_INET 2 /* IP protocol family. */ -#define PF_AX25 3 /* Amateur Radio AX.25. */ -#define PF_IPX 4 /* Novell Internet Protocol. */ -#define PF_APPLETALK 5 /* Appletalk DDP. */ -#define PF_NETROM 6 /* Amateur radio NetROM. */ -#define PF_BRIDGE 7 /* Multiprotocol bridge. */ -#define PF_ATMPVC 8 /* ATM PVCs. */ -#define PF_X25 9 /* Reserved for X.25 project. */ -#define PF_INET6 10 /* IP version 6. */ -#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */ -#define PF_DECnet 12 /* Reserved for DECnet project. */ -#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */ -#define PF_SECURITY 14 /* Security callback pseudo AF. */ -#define PF_KEY 15 /* PF_KEY key management API. */ -#define PF_NETLINK 16 -#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */ -#define PF_PACKET 17 /* Packet family. */ -#define PF_ASH 18 /* Ash. */ -#define PF_ECONET 19 /* Acorn Econet. */ -#define PF_ATMSVC 20 /* ATM SVCs. */ -#define PF_SNA 22 /* Linux SNA Project */ -#define PF_IRDA 23 /* IRDA sockets. */ -#define PF_PPPOX 24 /* PPPoX sockets. */ -#define PF_MAX 32 /* For now.. */ - -/* Address families. */ -#define AF_UNSPEC PF_UNSPEC -#define AF_LOCAL PF_LOCAL -#define AF_UNIX PF_UNIX -#define AF_FILE PF_FILE -#define AF_INET PF_INET -#define AF_AX25 PF_AX25 -#define AF_IPX PF_IPX -#define AF_APPLETALK PF_APPLETALK -#define AF_NETROM PF_NETROM -#define AF_BRIDGE PF_BRIDGE -#define AF_ATMPVC PF_ATMPVC -#define AF_X25 PF_X25 -#define AF_INET6 PF_INET6 -#define AF_ROSE PF_ROSE -#define AF_DECnet PF_DECnet -#define AF_NETBEUI PF_NETBEUI -#define AF_SECURITY PF_SECURITY -#define AF_KEY PF_KEY -#define AF_NETLINK PF_NETLINK -#define AF_ROUTE PF_ROUTE -#define AF_PACKET PF_PACKET -#define AF_ASH PF_ASH -#define AF_ECONET PF_ECONET -#define AF_ATMSVC PF_ATMSVC -#define AF_SNA PF_SNA -#define AF_IRDA PF_IRDA -#define AF_PPPOX PF_PPPOX -#define AF_MAX PF_MAX - -/* Socket level values. Others are defined in the appropriate headers. - - XXX These definitions also should go into the appropriate headers as - far as they are available. */ -#define SOL_RAW 255 -#define SOL_DECNET 261 -#define SOL_X25 262 -#define SOL_PACKET 263 -#define SOL_ATM 264 /* ATM layer (cell level). */ -#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */ -#define SOL_IRDA 266 - -/* Maximum queue length specifiable by listen. */ -#define SOMAXCONN 128 - -/* Get the definition of the macro to define the common sockaddr members. */ -#include - -/* Structure describing a generic socket address. */ -struct sockaddr - { - __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ - char sa_data[14]; /* Address data. */ - }; - - -/* Structure large enough to hold any socket address (with the historical - exception of AF_UNIX). We reserve 128 bytes. */ -#if ULONG_MAX > 0xffffffff -# define __ss_aligntype __uint64_t -#else -# define __ss_aligntype __uint32_t -#endif -#define _SS_SIZE 128 -#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype))) - -struct sockaddr_storage - { - __SOCKADDR_COMMON (ss_); /* Address family, etc. */ - __ss_aligntype __ss_align; /* Force desired alignment. */ - char __ss_padding[_SS_PADSIZE]; - }; - - -/* Bits in the FLAGS argument to `send', `recv', et al. */ -enum - { - MSG_OOB = 0x01, /* Process out-of-band data. */ -#define MSG_OOB MSG_OOB - MSG_PEEK = 0x02, /* Peek at incoming messages. */ -#define MSG_PEEK MSG_PEEK - MSG_DONTROUTE = 0x04, /* Don't use local routing. */ -#define MSG_DONTROUTE MSG_DONTROUTE -#ifdef __USE_GNU - /* DECnet uses a different name. */ - MSG_TRYHARD = MSG_DONTROUTE, -# define MSG_TRYHARD MSG_DONTROUTE -#endif - MSG_CTRUNC = 0x08, /* Control data lost before delivery. */ -#define MSG_CTRUNC MSG_CTRUNC - MSG_PROXY = 0x10, /* Supply or ask second address. */ -#define MSG_PROXY MSG_PROXY - MSG_TRUNC = 0x20, -#define MSG_TRUNC MSG_TRUNC - MSG_DONTWAIT = 0x40, /* Nonblocking IO. */ -#define MSG_DONTWAIT MSG_DONTWAIT - MSG_EOR = 0x80, /* End of record. */ -#define MSG_EOR MSG_EOR - MSG_WAITALL = 0x100, /* Wait for a full request. */ -#define MSG_WAITALL MSG_WAITALL - MSG_FIN = 0x200, -#define MSG_FIN MSG_FIN - MSG_SYN = 0x400, -#define MSG_SYN MSG_SYN - MSG_CONFIRM = 0x800, /* Confirm path validity. */ -#define MSG_CONFIRM MSG_CONFIRM - MSG_RST = 0x1000, -#define MSG_RST MSG_RST - MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */ -#define MSG_ERRQUEUE MSG_ERRQUEUE - MSG_NOSIGNAL = 0x4000 /* Do not generate SIGPIPE. */ -#define MSG_NOSIGNAL MSG_NOSIGNAL - }; - - -/* Structure describing messages sent by - `sendmsg' and received by `recvmsg'. */ -struct msghdr - { - void *msg_name; /* Address to send to/receive from. */ - socklen_t msg_namelen; /* Length of address data. */ - - struct iovec *msg_iov; /* Vector of data to send/receive into. */ - size_t msg_iovlen; /* Number of elements in the vector. */ - - void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ - size_t msg_controllen; /* Ancillary data buffer length. */ - - int msg_flags; /* Flags on received message. */ - }; - -/* Structure used for storage of ancillary data object information. */ -struct cmsghdr - { - size_t cmsg_len; /* Length of data in cmsg_data plus length - of cmsghdr structure. */ - int cmsg_level; /* Originating protocol. */ - int cmsg_type; /* Protocol specific type. */ - __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ - /* XXX Perhaps this should be removed. */ - }; - -/* Ancillary data object manipulation macros. */ -#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2 -# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) -#else -# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) -#endif -#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) -#define CMSG_FIRSTHDR(mhdr) \ - ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ - ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL) -#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \ - & (size_t) ~(sizeof (size_t) - 1)) -#define CMSG_SPACE(len) (CMSG_ALIGN (len) \ - + CMSG_ALIGN (sizeof (struct cmsghdr))) -#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) - -extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - struct cmsghdr *__cmsg) __THROW; -#ifdef __USE_EXTERN_INLINES -# ifndef _EXTERN_INLINE -# define _EXTERN_INLINE extern __inline -# endif -_EXTERN_INLINE struct cmsghdr * -__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW -{ - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) - /* The kernel header does this so there may be a reason. */ - return 0; - - __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg - + CMSG_ALIGN (__cmsg->cmsg_len)); - if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control - + __mhdr->msg_controllen) - || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) - > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) - /* No more entries. */ - return 0; - return __cmsg; -} -#endif /* Use `extern inline'. */ - -/* Socket level message types. This must match the definitions in - . */ -enum - { - SCM_RIGHTS = 0x01, /* Transfer file descriptors. */ -#define SCM_RIGHTS SCM_RIGHTS -#ifdef __USE_BSD - SCM_CREDENTIALS = 0x02, /* Credentials passing. */ -# define SCM_CREDENTIALS SCM_CREDENTIALS -#endif - __SCM_CONNECT = 0x03 /* Data array is `struct scm_connect'. */ - }; - -/* User visible structure for SCM_CREDENTIALS message */ - -struct ucred -{ - pid_t pid; /* PID of sending process. */ - uid_t uid; /* UID of sending process. */ - gid_t gid; /* GID of sending process. */ -}; - -/* Get socket manipulation related informations from kernel headers. */ -#include - - -/* Structure used to manipulate the SO_LINGER option. */ -struct linger - { - int l_onoff; /* Nonzero to linger on close. */ - int l_linger; /* Time to linger. */ - }; - -#endif /* bits/socket.h */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statvfs.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statvfs.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statvfs.h Sat Jan 27 14:42:03 2001 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statvfs.h Wed Dec 31 16:00:00 1969 @@ -1,96 +0,0 @@ -/* Copyright (C) 1997, 1998, 2000, 2001 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 _SYS_STATVFS_H -# error "Never include directly; use instead." -#endif - -#include /* For __fsblkcnt_t and __fsfilcnt_t. */ - -struct statvfs - { - unsigned long int f_bsize; - unsigned long int f_frsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; - __fsfilcnt_t f_favail; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsfilcnt64_t f_favail; -#endif - unsigned long int f_fsid; - unsigned long int f_flag; - unsigned long int f_namemax; - int __f_spare[6]; - }; - -#ifdef __USE_LARGEFILE64 -struct statvfs64 - { - unsigned long int f_bsize; - unsigned long int f_frsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsfilcnt64_t f_favail; - unsigned long int f_fsid; - unsigned long int f_flag; - unsigned long int f_namemax; - int __f_spare[6]; - }; -#endif - -/* Definitions for the flag in `f_flag'. These definitions should be - kept in sync which the definitions in . */ -enum -{ - ST_RDONLY = 1, /* Mount read-only. */ -#define ST_RDONLY ST_RDONLY - ST_NOSUID = 2, /* Ignore suid and sgid bits. */ -#define ST_NOSUID ST_NOSUID -#ifdef __USE_GNU - ST_NODEV = 4, /* Disallow access to device special files. */ -# define ST_NODEV ST_NODEV - ST_NOEXEC = 8, /* Disallow program execution. */ -# define ST_NOEXEC ST_NOEXEC - ST_SYNCHRONOUS = 16, /* Writes are synced at once. */ -# define ST_SYNCHRONOUS ST_SYNCHRONOUS - ST_MANDLOCK = 64, /* Allow mandatory locks on an FS. */ -# define ST_MANDLOCK ST_MANDLOCK - ST_WRITE = 128, /* Write on file/directory/symlink. */ -# define ST_WRITE ST_WRITE - ST_APPEND = 256, /* Append-only file. */ -# define ST_APPEND ST_APPEND - ST_IMMUTABLE = 512, /* Immutable file. */ -# define ST_IMMUTABLE ST_IMMUTABLE - ST_NOATIME = 1024, /* Do not update access times. */ -# define ST_NOATIME ST_NOATIME - ST_NODIRATIME /* Do not update directory access times. */ -# define ST_NODIRATIME ST_NODIRATIME -#endif /* Use GNU. */ -}; diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h Thu Nov 16 11:12:06 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h Sat Apr 7 14:02:40 2001 @@ -1,5 +1,5 @@ /* Linux/sparc64 version of processor capability information handling macros. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 1999. @@ -21,13 +21,15 @@ #ifndef _DL_PROCINFO_H #define _DL_PROCINFO_H 1 +#include + /* If anything should be added here check whether the size of each string is still ok with the given array size. */ static const char sparc64_cap_flags[][7] = { - "flush", "stbar", "swap", "muldiv", "v9" + "flush", "stbar", "swap", "muldiv", "v9", "ultra3" }; -#define _DL_HWCAP_COUNT 5 +#define _DL_HWCAP_COUNT 6 static inline int __attribute__ ((unused)) @@ -35,13 +37,13 @@ _dl_procinfo (int word) { int i; - _dl_sysdep_message ("AT_HWCAP: ", NULL); + _dl_printf ("AT_HWCAP: "); for (i = 0; i < _DL_HWCAP_COUNT; ++i) if (word & (1 << i)) - _dl_sysdep_message (" ", sparc64_cap_flags[i], NULL); + _dl_printf (" %s", sparc64_cap_flags[i]); - _dl_sysdep_message ("\n", NULL); + _dl_printf ("\n"); return 0; } @@ -67,7 +69,7 @@ _dl_string_hwcap (const char *str) return -1; }; -#define HWCAP_IMPORTANT (0) +#define HWCAP_IMPORTANT (HWCAP_SPARC_ULTRA3) /* There are no different platforms defined. */ #define _dl_platform_string(idx) "" diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c Thu Apr 26 20:07:26 2001 @@ -0,0 +1,238 @@ +/* Get frequency of the system processor. sparc64 version. + Copyright (C) 2001 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. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static hp_timing_t +__get_clockfreq_via_cpuinfo (void) +{ + hp_timing_t result; + int fd; + + result = 0; + + fd = open ("/proc/cpuinfo", O_RDONLY); + if (fd != -1) + { + char buf[8192]; + ssize_t n; + + n = read (fd, buf, sizeof buf); + if (n > 0) + { + char *mhz = memmem (buf, n, "Cpu0ClkTck", 7); + + if (mhz != NULL) + { + char *endp = buf + n; + + /* Search for the beginning of the string. */ + while (mhz < endp + && (*mhz < '0' || *mhz > '9') + && (*mhz < 'a' || *mhz > 'f') + && *mhz != '\n') + ++mhz; + + while (mhz < endp && *mhz != '\n') + { + if ((*mhz >= '0' && *mhz <= '9') || + (*mhz >= 'a' && *mhz <= 'f')) + { + result <<= 4; + if (*mhz >= '0' && *mhz <= '9') + result += *mhz - '0'; + else + result += (*mhz - 'a') + 10; + } + ++mhz; + } + } + } + + close (fd); + } + + return result; +} + +static hp_timing_t +__get_clockfreq_via_proc_openprom (void) +{ + hp_timing_t result; + int obp_fd; + + result = 0; + + obp_fd = open ("/proc/openprom", O_RDONLY); + if (obp_fd != -1) + { + unsigned long int buf[4096 / sizeof (unsigned long int)]; + struct dirent *dirp = (struct dirent *) buf; + off_t dbase = (off_t) 0; + ssize_t len; + + while ((len = getdirentries (obp_fd, (char *) dirp, + sizeof (buf), &dbase)) > 0) + { + struct dirent *this_dirp = dirp; + + while (len > 0) + { + char node[strlen ("/proc/openprom/") + + _D_ALLOC_NAMLEN (this_dirp) + + strlen ("/clock-frequency")]; + char *prop; + int fd; + + /* Note that + strlen("/clock-frequency") > strlen("/device_type") + */ + __stpcpy (prop = __stpcpy (__stpcpy (node, "/proc/openprom/"), + this_dirp->d_name), + "/device_type"); + fd = open (node, O_RDONLY); + if (fd != -1) + { + char type_string[128]; + int ret; + + ret = read (fd, type_string, sizeof (type_string)); + if (ret > 0 && strncmp (type_string, "'cpu'", 5) == 0) + { + int clkfreq_fd; + + __stpcpy (prop, "/clock-frequency"); + clkfreq_fd = open (node, O_RDONLY); + if (fd != -1) + { + if (read (clkfreq_fd, type_string, + sizeof (type_string)) > 0) + result = (hp_timing_t) + strtoull (type_string, NULL, 16); + close (clkfreq_fd); + } + } + close (fd); + } + + if (result != 0) + break; + + len -= this_dirp->d_reclen; + this_dirp = (struct dirent *) + ((char *) this_dirp + this_dirp->d_reclen); + } + if (result != 0) + break; + } + close (obp_fd); + } + + return result; +} + +static hp_timing_t +__get_clockfreq_via_dev_openprom (void) +{ + hp_timing_t result; + int obp_dev_fd; + + result = 0; + + obp_dev_fd = open ("/dev/openprom", O_RDONLY); + if (obp_dev_fd != -1) + { + char obp_buf[8192]; + struct openpromio *obp_cmd = (struct openpromio *)obp_buf; + int ret; + + obp_cmd->oprom_size = + sizeof (obp_buf) - sizeof (unsigned int); + *(int *) obp_cmd->oprom_array = 0; + ret = ioctl (obp_dev_fd, OPROMCHILD, (char *) obp_cmd); + if (ret == 0) + { + int cur_node = *(int *) obp_cmd->oprom_array; + + while (cur_node != 0 && cur_node != -1) + { + obp_cmd->oprom_size = sizeof (obp_buf) - sizeof (unsigned int); + strcpy (obp_cmd->oprom_array, "device_type"); + ret = ioctl (obp_dev_fd, OPROMGETPROP, (char *) obp_cmd); + if (ret == 0 + && strncmp (obp_cmd->oprom_array, "cpu", 3) == 0) + { + obp_cmd->oprom_size = (sizeof (obp_buf) + - sizeof (unsigned int)); + strcpy (obp_cmd->oprom_array, "clock-frequency"); + ret = ioctl (obp_dev_fd, OPROMGETPROP, (char *) obp_cmd); + if (ret == 0) + result = + (hp_timing_t) *(unsigned int *) obp_cmd->oprom_array; + } + obp_cmd->oprom_size = sizeof (obp_buf) - sizeof (unsigned int); + *(int *) obp_cmd->oprom_array = cur_node; + ret = ioctl (obp_dev_fd, OPROMNEXT, (char *) obp_cmd); + if (ret < 0) + break; + cur_node = *(int *)obp_cmd->oprom_array; + } + } + } + + return result; +} + +hp_timing_t +__get_clockfreq (void) +{ + static hp_timing_t result; + + /* If this function was called before, we know the result. */ + if (result != 0) + return result; + + /* We first read the information from the /proc/cpuinfo file. + It contains at least one line like + Cpu0ClkTick : 000000002cb41780 + We search for this line and convert the number in an integer. */ + result = __get_clockfreq_via_cpuinfo (); + if (result != 0) + return result; + + /* If that did not work, try to find an OpenPROM node + with device_type equal to 'cpu' using /dev/openprom + and fetch the clock-frequency property from there. */ + result = __get_clockfreq_via_dev_openprom (); + if (result != 0) + return result; + + /* Finally, try the same lookup as above but using /proc/openprom. */ + result = __get_clockfreq_via_proc_openprom (); + + return result; +} diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S Wed Aug 13 18:52:41 1997 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). The GNU C Library is free software; you can redistribute it and/or @@ -17,13 +17,47 @@ Boston, MA 02111-1307, USA. */ #include +#include "ucontext_i.h" -/* void getcontext(ucontext_t *); */ +/* int getcontext(ucontext_t *); */ ENTRY(__getcontext) + ldx [%o0 + UC_LINK], %o1 /* Preserve uc_link field, the + trap clears it. */ ta 0x6e - ret +1: + ldx [%o0 + UC_M_PC], %o2 + ldx [%o0 + UC_M_NPC], %o3 + ldx [%o0 + __UC_SIGMASK], %o4 + stx %o1, [%o0 + UC_LINK] + add %o2, 2f - 1b, %o2 + stx %o2, [%o0 + UC_M_PC] + add %o3, 2f - 1b, %o3 + stx %o3, [%o0 + UC_M_NPC] +#if SIGMASK_WORDS == 16 + stx %o4, [%o0 + UC_SIGMASK] + stx %g0, [%o0 + UC_SIGMASK + 8] + stx %g0, [%o0 + UC_SIGMASK + 16] + stx %g0, [%o0 + UC_SIGMASK + 24] + stx %g0, [%o0 + UC_SIGMASK + 32] + stx %g0, [%o0 + UC_SIGMASK + 40] + stx %g0, [%o0 + UC_SIGMASK + 48] + stx %g0, [%o0 + UC_SIGMASK + 56] + stx %g0, [%o0 + UC_SIGMASK + 64] + stx %g0, [%o0 + UC_SIGMASK + 72] + stx %g0, [%o0 + UC_SIGMASK + 80] + stx %g0, [%o0 + UC_SIGMASK + 88] + stx %g0, [%o0 + UC_SIGMASK + 96] + stx %g0, [%o0 + UC_SIGMASK + 104] + stx %g0, [%o0 + UC_SIGMASK + 112] + stx %g0, [%o0 + UC_SIGMASK + 120] +#else +# error Adjust __getcontext +#endif +2: + retl + clr %o0 END(__getcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S Wed Sep 16 08:19:36 1998 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). The GNU C Library is free software; you can redistribute it and/or @@ -29,7 +29,7 @@ /* void longjmp (sigjmp_buf env, int val) */ -ENTRY(longjmp) +ENTRY(__libc_siglongjmp) /* Modify the context with the value we want to return. */ movre %o1, 1, %o1 @@ -41,10 +41,10 @@ ENTRY(longjmp) /* And bamf back to where we belong! */ ta 0x6f -END(longjmp) +END(__libc_siglongjmp) -strong_alias(longjmp, __longjmp) -strong_alias(longjmp, __libc_longjmp) -strong_alias(longjmp, __libc_siglongjmp) -weak_alias(longjmp, _longjmp) -weak_alias(longjmp, siglongjmp) +strong_alias(__libc_siglongjmp, __longjmp) +strong_alias(__libc_siglongjmp, __libc_longjmp) +weak_alias(__libc_siglongjmp, longjmp) +weak_alias(__libc_siglongjmp, _longjmp) +weak_alias(__libc_siglongjmp, siglongjmp) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c Thu Apr 19 09:26:42 2001 @@ -0,0 +1,67 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek . + + 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 +#include +#include +#include + +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + extern void __makecontext_ret (void); + unsigned long *sp, *topsp; + va_list ap; + int i; + + sp = (long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); + sp -= (argc > 6 ? argc : 6) + 32; + sp = (long *) (((long) sp) & -16L); + topsp = sp + (argc > 6 ? argc : 6) + 16; + + ucp->uc_mcontext.mc_gregs[MC_PC] = (long) func; + ucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) func) + 4; + ucp->uc_mcontext.mc_gregs[MC_O6] = ((long) sp) - 0x7ff; + ucp->uc_mcontext.mc_gregs[MC_O7] = ((long) __makecontext_ret) - 8; + ucp->uc_mcontext.mc_fp = ((long) topsp) - 0x7ff; + ucp->uc_mcontext.mc_i7 = 0; + topsp[14] = 0; + topsp[15] = 0; + sp[8] = (long) ucp->uc_link; + va_start (ap, argc); + for (i = 0; i < argc; ++i) + if (i < 6) + ucp->uc_mcontext.mc_gregs[MC_O0 + i] = va_arg (ap, long); + else + sp[16 + i] = va_arg (ap, long); + va_end (ap); +} + +asm (" \n\ + .text \n\ + .type __makecontext_ret, #function \n\ +__makecontext_ret: \n\ + mov 1, %o1 \n\ + call __setcontext \n\ + mov %i0, %o0 \n\ + unimp 0 \n\ + .size __makecontext_ret, .-__makecontext_ret \n\ + "); + +weak_alias (__makecontext, makecontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S Wed Aug 13 18:52:42 1997 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S Wed Apr 25 14:51:14 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). The GNU C Library is free software; you can redistribute it and/or @@ -17,17 +17,19 @@ Boston, MA 02111-1307, USA. */ #include +#include "ucontext_i.h" - -/* void setcontext(ucontext_t *ctx); */ +/* int setcontext(ucontext_t *ctx); */ .weak setcontext ENTRY(setcontext) mov 1, %o1 -/* void __setcontext(ucontext_t *ctx, int restoremask); */ +/* int __setcontext(ucontext_t *ctx, int restoremask); */ ENTRY(__setcontext) + ldx [%o0 + UC_SIGMASK], %o2 + stx %o2, [%o0 + __UC_SIGMASK] ta 0x6f END(__setcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h Fri Dec 10 10:10:10 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h Mon Mar 26 20:53:37 2001 @@ -28,3 +28,5 @@ + STACK_BIAS))+14)) #define GET_STACK(__ctx) ((void *) ((__ctx)->sigc_regs.u_regs[14])) #define GET_FRAME(__ctx) ADVANCE_STACK_FRAME (GET_STACK (__ctx)) +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c Thu Apr 19 09:26:26 2001 @@ -0,0 +1,48 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek . + + 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 + +extern int __getcontext (ucontext_t *ucp); +extern int __setcontext (const ucontext_t *ucp, int restoremask); + +int +__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) +{ + extern void __swapcontext_ret (void); + /* Save the current machine context to oucp. */ + __getcontext (oucp); + /* Modify oucp to skip the __setcontext call on reactivation. */ + oucp->uc_mcontext.mc_gregs[MC_PC] = (long) __swapcontext_ret; + oucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) __swapcontext_ret) + 4; + /* Restore the machine context in ucp. */ + __setcontext (ucp, 1); + return 0; +} + +asm (" \n\ + .text \n\ + .type __swapcontext_ret, #function \n\ +__swapcontext_ret: \n\ + return %i7 + 8 \n\ + clr %o0 \n\ + .size __swapcontext_ret, .-__swapcontext_ret \n\ + "); + +weak_alias (__swapcontext, swapcontext) diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list Thu Aug 31 14:45:32 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list Mon Mar 26 20:53:37 2001 @@ -8,7 +8,7 @@ fstatfs - fstatfs 2 __fstatfs fstatfs statfs - statfs 2 __statfs statfs statfs64 getrlimit - getrlimit 2 __getrlimit getrlimit getrlimit64 setrlimit - setrlimit 2 __setrlimit setrlimit64 setrlimit -ftruncate - ftruncate 2 __ftruncate ftruncate ftruncate64 +ftruncate - ftruncate 2 __ftruncate ftruncate __ftruncate64 ftruncate64 truncate - truncate 2 truncate truncate64 mmap - mmap 6 __mmap mmap __mmap64 mmap64 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h Thu Apr 19 09:26:03 2001 @@ -0,0 +1,27 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Jakub Jelinek . + + 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. */ + +/* Constants shared between setcontext() and getcontext(). Don't + install this header file. */ + +#define UC_LINK 0 +#define __UC_SIGMASK 16 +#define UC_M_PC 40 +#define UC_M_NPC 48 +#define UC_SIGMASK 536 +#define SIGMASK_WORDS 16 diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h --- glibc-2.2.2/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h Tue Nov 2 16:06:18 1999 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h Wed Apr 25 14:51:14 2001 @@ -81,8 +81,10 @@ typedef struct { typedef struct ucontext { struct ucontext *uc_link; unsigned long uc_flags; - unsigned long uc_sigmask; + unsigned long __uc_sigmask; mcontext_t uc_mcontext; + stack_t uc_stack; + __sigset_t uc_sigmask; } ucontext_t; #endif /* __WORDISIZE == 64 */ @@ -259,10 +261,9 @@ typedef struct ucontext { unsigned long uc_flags; struct ucontext *uc_link; - unsigned long uc_sigmask[4]; /* a svr4 sigset_t */ + __sigset_t uc_sigmask; stack_t uc_stack; mcontext_t uc_mcontext; - long uc_filler[23]; } ucontext_t; #endif /* __WORDSIZE == 32 */ diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/linux/syscalls.list glibc-2.2.3/sysdeps/unix/sysv/linux/syscalls.list --- glibc-2.2.2/sysdeps/unix/sysv/linux/syscalls.list Fri Dec 1 11:55:14 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/linux/syscalls.list Wed Apr 25 14:51:14 2001 @@ -23,13 +23,13 @@ klogctl EXTRA syslog i:isi klogctl lchown - lchown i:sii __lchown lchown madvise - madvise i:pii posix_madvise madvise mincore - mincore i:anV mincore -mlock EXTRA mlock i:bn __mlock mlock -mlockall EXTRA mlockall i:i __mlockall mlockall +mlock - mlock i:bn mlock +mlockall - mlockall i:i mlockall mmap - mmap b:aniiii __mmap mmap mount EXTRA mount i:sssip __mount mount mremap EXTRA mremap b:aini __mremap mremap -munlock EXTRA munlock i:ai __munlock munlock -munlockall EXTRA munlockall i: __munlockall munlockall +munlock - munlock i:ai munlock +munlockall - munlockall i: munlockall nanosleep - nanosleep i:pp __libc_nanosleep __nanosleep nanosleep nfsservctl EXTRA nfsservctl i:ipp nfsservctl pause - pause i: __libc_pause pause diff -durpNa glibc-2.2.2/sysdeps/unix/sysv/sysv4/gethostname.c glibc-2.2.3/sysdeps/unix/sysv/sysv4/gethostname.c --- glibc-2.2.2/sysdeps/unix/sysv/sysv4/gethostname.c Fri Apr 7 12:10:04 2000 +++ glibc-2.2.3/sysdeps/unix/sysv/sysv4/gethostname.c Mon Mar 26 20:53:37 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1995, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1995, 1997, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Brendan Kehoe (brendan@zen.org). @@ -27,7 +27,7 @@ extern int __sysinfo (int command, char int __gethostname (name, namelen) char *name; - socklen_t namelen; + size_t namelen; { return __sysinfo (SI_HOSTNAME, name, namelen); } diff -durpNa glibc-2.2.2/timezone/antarctica glibc-2.2.3/timezone/antarctica --- glibc-2.2.2/timezone/antarctica Wed Feb 23 13:19:52 2000 +++ glibc-2.2.3/timezone/antarctica Sat Apr 7 14:02:40 2001 @@ -1,4 +1,4 @@ -# @(#)antarctica 7.18 +# @(#)antarctica 7.21 # From Paul Eggert (1999-11-15): # To keep things manageable, we list only locations occupied year-round; see @@ -14,7 +14,19 @@ # # Except for the French entries, # I made up all time zone abbreviations mentioned here; corrections welcome! -# FORMAT is `___' and GMTOFF is 0 for locations while uninhabited. +# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited. + +# These rules are stolen from the `europe' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S +Rule RussAQ 1981 1983 - Oct 1 0:00 0 - +Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 - +Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S +Rule RussAQ 1992 only - Sep lastSat 23:00 0 - +Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S +Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 - +Rule RussAQ 1996 max - Oct lastSun 2:00s 0 - # These rules are stolen from the `southamerica' file. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -58,13 +70,13 @@ Rule ChileAQ 2000 max - Mar Sun>=9 0:00 # (except 1964-11 - 1969-02) # Mawson, Holme Bay, -6736+06253, since 1954-02-13 # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Antarctica/Casey 0 - ___ 1969 +Zone Antarctica/Casey 0 - zzz 1969 8:00 - WST # Western (Aus) Standard Time -Zone Antarctica/Davis 0 - ___ 1957 Jan 13 +Zone Antarctica/Davis 0 - zzz 1957 Jan 13 7:00 - DAVT 1964 Nov # Davis Time - 0 - ___ 1969 Feb + 0 - zzz 1969 Feb 7:00 - DAVT -Zone Antarctica/Mawson 0 - ___ 1954 Feb 13 +Zone Antarctica/Mawson 0 - zzz 1954 Feb 13 6:00 - MAWT # Mawson Time # References: # @@ -110,7 +122,7 @@ Zone Antarctica/Mawson 0 - ___ 1954 Feb # fishing stations operated variously 1819/1931 # # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Kerguelen 0 - ___ 1950 # Port-aux-Francais +Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais 5:00 - TFT # ISO code TF Time # # year-round base in the main continent @@ -120,9 +132,9 @@ Zone Indian/Kerguelen 0 - ___ 1950 # Por # It was destroyed by fire on 1952-01-14. # # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Antarctica/DumontDUrville 0 - ___ 1947 +Zone Antarctica/DumontDUrville 0 - zzz 1947 10:00 - PMT 1952 Jan 14 # Port-Martin Time - 0 - ___ 1956 Nov + 0 - zzz 1956 Nov 10:00 - DDUT # Dumont-d'Urville Time # Reference: # @@ -149,7 +161,7 @@ Zone Antarctica/DumontDUrville 0 - ___ 1 # was established on 1957-01-29. Since Syowa station is still the main # station of Japan, it's appropriate for the principal location. # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Antarctica/Syowa 0 - ___ 1957 Jan 29 +Zone Antarctica/Syowa 0 - zzz 1957 Jan 29 3:00 - SYOT # Syowa Time # See: # @@ -188,9 +200,27 @@ Rule NZAQ 1990 max - Mar Sun>=15 2:00s 0 # Russia - year-round bases # Bellingshausen, King George Island, -621159-0585337, since 1968-02-22 # Mirny, Davis coast, -6633+09301, since 1956-02 -# Molodezhnaya -# Novolazarevskaya -# Vostok +# Molodezhnaya, Alasheyev Bay, year-round from 1962-02 to 1999-07-01 +# Novolazarevskaya, Queen Maud Land, -7046+01150, +# year-round from 1960/61 to 1992 + +# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11 +# +# From Craig Mundell (1994-12-15): +# Vostok, which is one of the Russian stations, is set on the same +# time as Moscow, Russia. +# +# From Lee Hotz (2001-03-08): +# I queried the folks at Columbia who spent the summer at Vostok and this is +# what they had to say about time there: +# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo) +# time, which is 12 hours ahead of GMT. The Russian Station Vostok was +# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead +# of GMT). This is a time zone I think two hours east of Moscow. The +# natural time zone is in between the two: 8 hours ahead of GMT.'' +# +Zone Antarctica/Vostok 0 - zzz 1957 Dec 16 + 6:00 - VOST # Vostok time # S Africa - year-round bases # Marion Island @@ -203,14 +233,16 @@ Rule NZAQ 1990 max - Mar Sun>=15 2:00s 0 # scientific station from 1903 # whaling station at Signy I 1920/1926 # South Shetland Islands -# whaling station at Deception I 1912/1931 -# scientific station from 1943; -# previously sealers and a scientific expedition wintered by accident, -# and a garrison was deployed briefly # # year-round bases # Bird Island, South Georgia, -5400-03803, since 1983 -# Halley, Coates Land, -7535-2619, since 1956-01-06 +# Deception Island, -6259-06034, whaling station 1912/1931, +# scientific station 1943/1967, +# previously sealers and a scientific expedition wintered by accident, +# and a garrison was deployed briefly +# Halley, Coates Land, -7535-02604, since 1956-01-06 +# Halley is on a moving ice shelf and is periodically relocated +# so that it is never more than 10km from its nominal location. # Rothera, Adelaide Island, -6734-6808, since 1976-12-01 # Uruguay - year round base @@ -228,18 +260,19 @@ Rule NZAQ 1990 max - Mar Sun>=15 2:00s 0 # Palmer used to be supplied from Argentina. # # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Antarctica/Palmer 0 - ___ 1965 +Zone Antarctica/Palmer 0 - zzz 1965 -4:00 ArgAQ AR%sT 1969 Oct 5 -3:00 ArgAQ AR%sT 1982 May -4:00 ChileAQ CL%sT # # -# McMurdo, Ross Island, since 1956 +# McMurdo, Ross Island, since 1955-12 # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Antarctica/McMurdo 0 - ___ 1956 +Zone Antarctica/McMurdo 0 - zzz 1956 12:00 NZAQ NZ%sT # -# Amundsen-Scott, South Pole, since 1957-01-23 +# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20 +# # From Paul Eggert (1996-09-03): # Normally it wouldn't have a separate entry, since it's like the # larger Antarctica/McMurdo since 1970, but it's too famous to omit. diff -durpNa glibc-2.2.2/timezone/asia glibc-2.2.3/timezone/asia --- glibc-2.2.2/timezone/asia Sat Jan 6 20:35:42 2001 +++ glibc-2.2.3/timezone/asia Sat Apr 7 14:02:40 2001 @@ -1,4 +1,4 @@ -# @(#)asia 7.58 +# @(#)asia 7.63 # This data is by no means authoritative; if you think you know better, # go ahead and edit the file (and please send any changes to @@ -92,7 +92,7 @@ Zone Asia/Yerevan 2:58:00 - LMT 1924 May 3:00 1:00 YERST 1991 Sep 23 # independence 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s 4:00 - AMT 1997 - 4:00 RussiaAsia AM%sT + 4:00 RussiaAsia AM%sT # Azerbaijan # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -488,7 +488,7 @@ Zone Asia/Tehran 3:25:44 - LMT 1916 # # From Jonathan Lennox (2000-06-12): # An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in -# the U.S. edition) on the Iraqi Kurds contains a paragraph: +# the U.S. edition) on the Iraqi Kurds contains a paragraph: # "The three northern provinces ... switched their clocks this spring and # are an hour ahead of Baghdad." # @@ -522,9 +522,25 @@ Zone Asia/Baghdad 2:57:40 - LMT 1890 # Israel -# From U. S. Naval Observatory (1989-01-19): -# ISRAEL 2 H AHEAD OF UTC -# ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3 +# From Ephraim Silverberg (2001-01-11): +# +# I coined "IST/IDT" circa 1988. Until then there were three +# different abbreviations in use: +# +# JST Jerusalem Standard Time [Danny Braniss, Hebrew University] +# IZT Israel Zonal (sic) Time [Prof. Haim Papo, Technion] +# EEST Eastern Europe Standard Time [used by almost everyone else] +# +# Since timezones should be called by country and not capital cities, +# I ruled out JST. As Israel is in Asia Minor and not Eastern Europe, +# EEST was equally unacceptable. Since "zonal" was not compatible with +# any other timezone abbreviation, I felt that 'IST' was the way to go +# and, indeed, it has received almost universal acceptance in timezone +# settings in Israeli computers. +# +# In any case, I am happy to share timezone abbreviations with India, +# high on my favorite-country list (and not only because my wife's +# family is from India). # From Shanks: # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -611,7 +627,7 @@ Rule Zion 1993 only - Sep 5 0:00 0 S # Ministry of Interior, Jerusalem, Israel. The spokeswoman can be reached by # calling the office directly at 972-2-6701447 or 972-2-6701448. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Zion 1994 only - Apr 1 0:00 1:00 D Rule Zion 1994 only - Aug 28 0:00 0 S Rule Zion 1995 only - Mar 31 0:00 1:00 D @@ -669,7 +685,7 @@ Rule Zion 2004 only - Sep 22 1:00 0 S # From Paul Eggert (2000-07-25): # Here are guesses for rules after 2004. # They are probably wrong, but they are more likely than no DST at all. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Zion 2005 max - Apr 1 1:00 1:00 D Rule Zion 2005 max - Oct 1 1:00 0 S @@ -745,26 +761,26 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 3 # government's departments from six to seven hours. # # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule Jordan 1973 only - Jun 6 0:00 1:00 S -Rule Jordan 1973 1975 - Oct 1 0:00 0 - -Rule Jordan 1974 1977 - May 1 0:00 1:00 S -Rule Jordan 1976 only - Nov 1 0:00 0 - -Rule Jordan 1977 only - Oct 1 0:00 0 - -Rule Jordan 1978 only - Apr 30 0:00 1:00 S -Rule Jordan 1978 only - Sep 30 0:00 0 - -Rule Jordan 1985 only - Apr 1 0:00 1:00 S -Rule Jordan 1985 only - Oct 1 0:00 0 - -Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S -Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 - -Rule Jordan 1989 only - May 8 0:00 1:00 S -Rule Jordan 1990 only - Apr 27 0:00 1:00 S -Rule Jordan 1991 only - Apr 17 0:00 1:00 S -Rule Jordan 1991 only - Sep 27 0:00 0 - -Rule Jordan 1992 only - Apr 10 0:00 1:00 S -Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 - -Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S -Rule Jordan 1994 only - Sep Fri>=15 0:00 0 - -Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 - +Rule Jordan 1973 only - Jun 6 0:00 1:00 S +Rule Jordan 1973 1975 - Oct 1 0:00 0 - +Rule Jordan 1974 1977 - May 1 0:00 1:00 S +Rule Jordan 1976 only - Nov 1 0:00 0 - +Rule Jordan 1977 only - Oct 1 0:00 0 - +Rule Jordan 1978 only - Apr 30 0:00 1:00 S +Rule Jordan 1978 only - Sep 30 0:00 0 - +Rule Jordan 1985 only - Apr 1 0:00 1:00 S +Rule Jordan 1985 only - Oct 1 0:00 0 - +Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 - +Rule Jordan 1989 only - May 8 0:00 1:00 S +Rule Jordan 1990 only - Apr 27 0:00 1:00 S +Rule Jordan 1991 only - Apr 17 0:00 1:00 S +Rule Jordan 1991 only - Sep 27 0:00 0 - +Rule Jordan 1992 only - Apr 10 0:00 1:00 S +Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 - +Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1994 only - Sep Fri>=15 0:00 0 - +Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 - Rule Jordan 1999 only - Jul 1 0:00s 1:00 S Rule Jordan 1999 max - Sep lastThu 0:00s 0 - Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S @@ -1095,7 +1111,10 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct # no information # Philippines -# Howse writes (p 153) that until 1844 the Philippines kept American date. +# On 1844-08-16, Narciso Claveria, governor-general of the +# Philippines, issued a proclamation announcing that 1844-12-30 was to +# be immediately followed by 1845-01-01. Robert H. van Gent has a +# transcript of the decree in . # The rest of this data is from Shanks. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Phil 1936 only - Nov 1 0:00 1:00 S @@ -1105,7 +1124,7 @@ Rule Phil 1954 only - Jul 1 0:00 0 - Rule Phil 1978 only - Mar 22 0:00 1:00 S Rule Phil 1978 only - Sep 21 0:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Manila -15:56:00 - LMT 1844 +Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31 8:04:00 - LMT 1899 May 11 8:00 Phil PH%sT 1942 May 9:00 - JST 1944 Nov diff -durpNa glibc-2.2.2/timezone/australasia glibc-2.2.3/timezone/australasia --- glibc-2.2.2/timezone/australasia Sat Jan 6 20:35:42 2001 +++ glibc-2.2.3/timezone/australasia Sat Apr 7 14:02:40 2001 @@ -1,4 +1,4 @@ -# @(#)australasia 7.61 +# @(#)australasia 7.64 # This file also includes Pacific islands. # Notes are at the end of this file @@ -151,16 +151,16 @@ Zone Australia/Broken_Hill 9:25:48 - LMT # Lord Howe Island # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule LH 1981 1984 - Oct lastSun 2:00s 1:00 - -Rule LH 1982 1985 - Mar Sun>=1 2:00s 0 - -Rule LH 1985 only - Oct lastSun 2:00s 0:30 - -Rule LH 1986 1989 - Mar Sun>=15 2:00s 0 - -Rule LH 1986 only - Oct 19 2:00s 0:30 - -Rule LH 1987 1999 - Oct lastSun 2:00s 0:30 - -Rule LH 1990 1995 - Mar Sun>=1 2:00s 0 - -Rule LH 1996 max - Mar lastSun 2:00s 0 - -Rule LH 2000 only - Aug lastSun 2:00s 0:30 - -Rule LH 2001 max - Oct lastSun 2:00s 0:30 - +Rule LH 1981 1984 - Oct lastSun 2:00 1:00 - +Rule LH 1982 1985 - Mar Sun>=1 2:00 0 - +Rule LH 1985 only - Oct lastSun 2:00 0:30 - +Rule LH 1986 1989 - Mar Sun>=15 2:00 0 - +Rule LH 1986 only - Oct 19 2:00 0:30 - +Rule LH 1987 1999 - Oct lastSun 2:00 0:30 - +Rule LH 1990 1995 - Mar Sun>=1 2:00 0 - +Rule LH 1996 max - Mar lastSun 2:00 0 - +Rule LH 2000 only - Aug lastSun 2:00 0:30 - +Rule LH 2001 max - Oct lastSun 2:00 0:30 - Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb 10:00 - EST 1981 Mar 10:30 LH LHST @@ -222,8 +222,10 @@ Zone Pacific/Tahiti -9:58:16 - LMT 1912 # Guam # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Pacific/Guam 9:39:00 - LMT 1901 # Agana - 10:00 - GST +Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31 + 9:39:00 - LMT 1901 # Agana + 10:00 - GST 2000 Dec 23 # Guam + 10:00 - ChST # Chamorro Standard Time # Kiribati # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -240,9 +242,11 @@ Zone Pacific/Kiritimati -10:29:20 - LMT # N Mariana Is # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Pacific/Saipan 9:43:00 - LMT 1901 +Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31 + 9:43:00 - LMT 1901 9:00 - MPT 1969 Oct # N Mariana Is Time - 10:00 - MPT + 10:00 - MPT 2000 Dec 23 + 10:00 - ChST # Chamorro Standard Time # Marshall Is # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -494,7 +498,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # 9:00 JST Japan # 9:30 CST CST Central Australia # 10:00 EST EST Eastern Australia -# 10:00 GST Guam +# 10:00 ChST Chamorro # 10:30 LHST LHST Lord Howe* # 12:00 NZST NZDT New Zealand # 12:45 CHAST CHADT Chatham* @@ -546,11 +550,11 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # For now we'll continue to assume 2:00s for changes since 1960. # From Eric Ulevik (1998-01-05): -# +# # Here are some URLs to Australian time legislation. These URLs are stable, # and should probably be included in the data file. There are probably more # relevant entries in this database. -# +# # NSW (including LHI and Broken Hill): # # Standard Time Act 1987 (updated 1995-04-04) @@ -813,7 +817,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # ``Look you've got to remember in my family when this came up last time # I voted for it, my wife voted against it and she said to me it's all very # well for you, you don't have to worry about getting the children out of -# bed, getting them to school, getting them to sleep at night. +# bed, getting them to school, getting them to sleep at night. # I've been through all this argument domestically...my wife rules.'' # # Broken Hill will stick with South Australian time in 2000. See: @@ -876,8 +880,9 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # shown on clocks on LHI. I guess this means that for 30 minutes at the start # of DST, LHI is actually 1 hour ahead of the rest of NSW. -# From Paul Eggert (2000-10-25): -# For Lord Howe we use Shanks through 1989, and Lonergan thereafter, +# From Paul Eggert (2001-02-09): +# For Lord Howe dates we use Shanks through 1989, and Lonergan thereafter. +# For times we use Lonergan. ############################################################################### @@ -931,7 +936,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # From Rives McDow (1998-10-08): # Fiji will introduce DST effective 0200 local time, 1998-11-01 -# until 0300 local time 1999-02-28. Each year the DST period will +# until 0300 local time 1999-02-28. Each year the DST period will # be from the first Sunday in November until the last Sunday in February. # From Paul Eggert (2000-01-08): @@ -974,7 +979,13 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # Howse writes (p 153) ``The Spaniards, on the other hand, reached the # Philippines and the Ladrones from America,'' and implies that the Ladrones # (now called the Marianas) kept American date for quite some time. -# Ignore this for now, as we have no hard data. See also Asia/Manila. +# For now, we assume the Ladrones switched at the same time as the Philippines; +# see Asia/Manila. + +# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time, +# under the name "Chamorro Standard Time". There is no official abbreviation, +# but Congressman Robert A. Underwood, author of the bill that became law, +# wrote in a press release (2000-12-27) that he will seek the use of "ChST". # Micronesia @@ -1072,12 +1083,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # From Steffen Thorsen [straen@thorsen.priv.no] (1999-09-09): # * Tonga will introduce DST in November -# +# # I was given this link by John Letts : # # http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm # -# +# # I have not been able to find exact dates for the transition in November # yet. By reading this article it seems like Fiji will be 14 hours ahead # of UTC as well, but as far as I know Fiji will only be 13 hours ahead @@ -1087,10 +1098,10 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # According to # Summer Time Arrives Early, The Times (2000-05-18) # +# A monument was erected in 1927 to Willett, in an open space in a 45-acre wood +# near Chiselhurst, Kent that was purchased by popular subscription and open +# to the public. # From Paul Eggert (1996-09-03): # The OED Supplement says that the English originally said ``Daylight Saving'' @@ -216,7 +219,7 @@ # Actually, that date saw the usual switch to summer time. # Standard time was not changed until 1968-10-27 (the clocks didn't change). # -# Here is another incorrect claim by Shanks: +# Here is another incorrect claim by Shanks: # * Jersey, Guernsey, and the Isle of Man did not switch from GMT # to daylight saving time until 1921 Apr 3, when they began to # conform with Great Britain. @@ -402,6 +405,11 @@ Rule EU 1978 only - Oct 1 1:00u 0 - Rule EU 1979 1995 - Sep lastSun 1:00u 0 - Rule EU 1981 max - Mar lastSun 1:00u 1:00 S Rule EU 1996 max - Oct lastSun 1:00u 0 - +# The most recent directive covers the years starting in 2002. See: +# # W-Eur differs from EU only in that W-Eur uses standard time. Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S @@ -585,7 +593,7 @@ Zone Europe/Minsk 1:50:16 - LMT 1880 # Thanks to Pascal Delmoitie for these references. # The 1918 rules are listed for completeness; they apply to unoccupied Belgium. # Assume Brussels switched to WET in 1918 when the armistice took effect. -# +# # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Belgium 1918 only - Mar 9 0:00s 1:00 S Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 - @@ -767,7 +775,7 @@ Zone America/Thule -4:35:08 - LMT 1916 J # But what this could mean for Estonia's chances of joining the European # Union are still unclear. In 1994, the EU declared summer time compulsory # for all member states until 2001. Brussels has yet to decide what to do -# after that. +# after that. # From Mart Oruaas (2000-01-29): # Regulation no. 301 (1999-10-12) obsoletes previous regulation @@ -808,6 +816,19 @@ Zone Europe/Helsinki 1:39:52 - LMT 1878 2:00 EU EE%sT # France + +# From Ciro Discepolo (2000-12-20): +# +# Henri Le Corre, Regimes Horaires pour le monde entier, Editions +# Traditionnelles - Paris 2 books, 1993 +# +# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur, +# Paris, 1991 +# +# Francoise Gauquelin, Problemes de l'heure resolus en astrologie, +# Guy tredaniel, Paris 1987 + + # # Shanks seems to use `24:00' ambiguously; we resolve it with Whitman. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -844,8 +865,14 @@ Rule France 1938 only - Mar 26 23:00s 1: Rule France 1939 only - Apr 15 23:00s 1:00 S Rule France 1939 only - Nov 18 23:00s 0 - Rule France 1940 only - Feb 25 2:00 1:00 S -# The French rules for 1941-1944 were not used in Paris, -# but were used in other places (e.g. Monaco). +# The French rules for 1941-1944 were not used in Paris, but Shanks writes +# that they were used in Monaco and in many French locations. +# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez, +# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La +# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes, +# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin, +# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois, +# Dole, Morez, St-Claude, and Collognes (Haute-Savioe). Rule France 1941 only - May 5 0:00 2:00 M # Midsummer # Shanks says this transition occurred at Oct 6 1:00, # but go with Denis.Excoffier@ens.fr (1997-12-12), @@ -870,9 +897,11 @@ Rule France 1976 only - Sep 26 1:00 0 - # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC. # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 - 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time -# Shanks gives 1940 Jun 14 0:00; go with Excoffier's 14/6/40 22hUT. + 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT +# Shanks gives 1940 Jun 14 0:00; go with Excoffier and Le Corre. 0:00 France WE%sT 1940 Jun 14 23:00 +# Le Corre says Paris stuck with occupied-France time after the liberation; +# go with Shanks. 1:00 C-Eur CE%sT 1944 Aug 25 0:00 France WE%sT 1945 Sep 16 3:00 1:00 France CE%sT 1977 @@ -1047,9 +1076,16 @@ Zone Atlantic/Reykjavik -1:27:24 - LMT 1 # Italy # +# From Paul Eggert (2001-03-06): +# Sicily and Sardinia each had their own time zones from 1866 to 1893, +# called ``Palermo Time'' (+0053) and ``Cagliari Time'' (+0038). +# During World War II, German-controlled Italy used German time. +# But these events all occurred before the 1970 cutoff, +# so record only the time in Rome. +# # From Paul Eggert (1996-05-06): # For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri -# +# # Day-light Saving Time in Italy (1996-03-14) # # (`FP' below), taken from an Italian National Electrotechnical Institute @@ -1163,6 +1199,20 @@ Link Europe/Rome Europe/San_Marino # The Regulations of the Cabinet of Ministers of the Rep. of Latvia of # 29-Feb-2000 (#79), in Latvian for subscribers only). +# +# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow: +# +# The Latvian government on 2 January decided that the country will +# institute daylight-saving time this spring, LETA reported. +# Last February the three Baltic states decided not to turn back their +# clocks one hour in the spring.... +# Minister of Economy Aigars Kalvitis noted that Latvia had too few +# daylight hours and thus decided to comply with a draft European +# Commission directive that provides for instituting daylight-saving +# time in EU countries between 2002 and 2006. The Latvian government +# urged Lithuania and Estonia to adopt a similar time policy, but it +# appears that they will not do so.... + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 - @@ -1180,7 +1230,8 @@ Zone Europe/Riga 1:36:24 - LMT 1880 2:00 1:00 EEST 1989 Sep lastSun 2:00s 2:00 Latvia EE%sT 1997 Jan 21 2:00 EU EE%sT 2000 Feb 29 - 2:00 - EET + 2:00 - EET 2001 + 2:00 EU EE%sT # Liechtenstein # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -1205,7 +1256,7 @@ Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun # as decided by the national government on Wednesday.... # The Lithuanian government also announced plans to consider a # motion to give up shifting to summer time in spring, as it was -# already done by Estonia. +# already done by Estonia. # From the # Fact File, Lithuanian State Department of Tourism @@ -1283,6 +1334,18 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 1:00 EU CE%sT # Moldova + +# From Paul Eggert (2001-02-11): +# A previous version of this database followed Shanks, who writes that +# Tiraspol switched to Moscow time on 1992-01-19 at 02:00. +# However, this is most likely an error, as Moldova declared independence +# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree). +# In early 1992 there was large-scale interethnic violence in the area +# and it's possible that some Russophones continued to observe Moscow time. +# But moldavizolit@tirastel.md and mk@tirastel.md separately reported via +# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau. +# The Tiraspol entry has therefore been removed for now. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Chisinau 1:55:20 - LMT 1880 1:55 - CMT 1918 Feb 15 # Chisinau MT @@ -1297,15 +1360,6 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880 2:00 E-Eur EE%sT 1997 # See Romania commentary for the guessed 1997 transition to EU rules. 2:00 EU EE%sT -Zone Europe/Tiraspol 1:58:32 - LMT 1880 - 1:55 - CMT 1918 Feb 15 # Chisinau MT - 1:44:24 - BMT 1931 Jul 24 # Bucharest MT - 2:00 Romania EE%sT 1940 Aug 15 - 2:00 1:00 EEST 1941 Jul 17 - 1:00 C-Eur CE%sT 1944 Aug 24 - 3:00 Russia MSK/MSD 1991 Mar 31 2:00 - 2:00 Russia EE%sT 1992 Jan 19 2:00 - 3:00 Russia MSK/MSD # Monaco # Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21. @@ -1319,37 +1373,33 @@ Zone Europe/Monaco 0:29:32 - LMT 1891 Ma # Netherlands # Howse writes that the Netherlands' railways used GMT between 1892 and 1940, # but for other purposes the Netherlands used Amsterdam mean time. +# The data before 1945 is taken from +# . # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -# Shanks gives 1916 Apr 30 24:00 and 1916 Oct 1 00:00; go with Whitman. -Rule Neth 1916 only - May 1 2:00s 1:00 NST # Netherlands Summer Time -Rule Neth 1916 only - Oct 2 2:00s 0 AMT # Amsterdam Mean Time +Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time +Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time Rule Neth 1917 only - Apr 16 2:00s 1:00 NST Rule Neth 1917 only - Sep 17 2:00s 0 AMT -# Whitman gives 1918 Apr 14, 1918 Oct 31, and 1921 Sep 28; go with Shanks. Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST -Rule Neth 1918 1921 - Sep Mon>=24 2:00s 0 AMT -Rule Neth 1922 only - Mar 26 2:00s 1:00 NST -# Whitman gives 1939 Oct 1; go with Shanks. +Rule Neth 1918 1921 - Sep lastSun 2:00s 0 AMT +Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT -Rule Neth 1923 only - Jun 1 2:00s 1:00 NST -Rule Neth 1924 only - Mar 30 2:00s 1:00 NST -# Whitman gives 1925 Apr 5; go with Shanks. -Rule Neth 1925 only - Jun 5 2:00s 1:00 NST -# For 1926 through 1930 Whitman gives Apr 15; go with Shanks. +Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST +Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST Rule Neth 1926 1931 - May 15 2:00s 1:00 NST Rule Neth 1932 only - May 22 2:00s 1:00 NST Rule Neth 1933 1936 - May 15 2:00s 1:00 NST Rule Neth 1937 only - May 22 2:00s 1:00 NST Rule Neth 1937 only - Jul 1 0:00 1:00 S Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 - -# Whitman gives 1939 Apr 15 and 1940 Apr 19; go with Shanks. Rule Neth 1938 1939 - May 15 2:00s 1:00 S Rule Neth 1945 only - Apr 2 2:00s 1:00 S -Rule Neth 1945 only - May 20 2:00s 0 - +Rule Neth 1945 only - Sep 16 2:00s 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Amsterdam 0:19:28 - LMT 1892 May 0:19:28 Neth %s 1937 Jul - 0:20 Neth NE%sT 1940 May 16 0:40 + 0:20 Neth NE%sT 1940 May 17 0:00 1:00 C-Eur CE%sT 1945 Apr 2 2:00 1:00 Neth CE%sT 1977 1:00 EU CE%sT @@ -1579,6 +1629,13 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 # According to a friend of mine who rode the Trans-Siberian Railroad from # Moscow to Irkutsk in 1995, public air and rail transport in Russia ... # still follows Moscow time, no matter where in Russia it is located. +# +# For Grozny, Chechnya, we have the following story from +# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07): +# News--often false--is spread by word of mouth. A rumor that it was +# time to move the clocks back put this whole city out of sync with +# the rest of Russia for two weeks--even soldiers stationed here began +# enforcing curfew at the wrong time. # # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr diff -durpNa glibc-2.2.2/timezone/leapseconds glibc-2.2.3/timezone/leapseconds --- glibc-2.2.2/timezone/leapseconds Tue Aug 17 13:48:51 1999 +++ glibc-2.2.3/timezone/leapseconds Mon Mar 26 20:53:38 2001 @@ -1,4 +1,4 @@ -# @(#)leapseconds 7.12 +# @(#)leapseconds 7.13 # Allowance for leapseconds added to each timezone file. @@ -43,3 +43,22 @@ Leap 1994 Jun 30 23:59:60 + S Leap 1995 Dec 31 23:59:60 + S Leap 1997 Jun 30 23:59:60 + S Leap 1998 Dec 31 23:59:60 + S +# INTERNATIONAL EARTH ROTATION SERVICE (IERS) +# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE +# +# SERVICE DE LA ROTATION TERRESTRE +# OBSERVATOIRE DE PARIS +# 61, Av. de l'Observatoire 75014 PARIS (France) +# Tel. : 33 (0) 1 40 51 22 26 +# FAX : 33 (0) 1 40 51 22 91 +# Internet : iers@obspm.fr +# +# Paris, 11 January 2001 +# +# Bulletin C 21 +# +# To authorities responsible for the measurement and distribution of time +# +# INFORMATION ON UTC - TAI +# +# NO positive leap second will be introduced at the end of June 2001. diff -durpNa glibc-2.2.2/timezone/northamerica glibc-2.2.3/timezone/northamerica --- glibc-2.2.2/timezone/northamerica Sat Jan 6 20:35:42 2001 +++ glibc-2.2.3/timezone/northamerica Sat Apr 7 14:02:41 2001 @@ -1,4 +1,4 @@ -# @(#)northamerica 7.54 +# @(#)northamerica 7.58 # also includes Central America and the Caribbean # This data is by no means authoritative; if you think you know better, @@ -31,9 +31,10 @@ # Make sure you have the errata sheet; the book is somewhat useless without it. # It is the source for the US and Puerto Rico entries below. -# From Paul Eggert (1996-06-12): +# From Paul Eggert (2001-03-06): # Daylight Saving Time was first suggested as a joke by Benjamin Franklin -# in his whimsical essay ``Turkey vs Eagle, McCauley is my Beagle'' (1784). +# in his whimsical essay ``An Economical Project for Diminishing the Cost +# of Light'' published in the Journal de Paris (1784-04-26). # Not everyone is happy with the results: # # I don't really care how time is reckoned so long as there is some @@ -48,6 +49,16 @@ # them healthy, wealthy and wise in spite of themselves. # # -- Robertson Davies, The Diary of Samuel Marchbanks (1947), XIX, Sunday +# +# For more about the first ten years of DST in the United States, see +# Robert Garland's +# Ten years of daylight saving from the Pittsburgh standpoint +# (Carnegie Library of Pittsburgh, 1927). +# +# Shanks says that DST was called "War Time" in the US in 1918 and 1919. +# However, DST was imposed by the Standard Time Act of 1918, which +# was the first nationwide legal time standard, and apparently +# time was just called "Standard Time" or "Daylight Saving Time". # From Arthur David Olson: # US Daylight Saving Time ended on the last Sunday of *October* in 1974. @@ -77,14 +88,8 @@ # of surrender, all of whom interrupting the bells of Big Ben in # London which were to precede Mr. Atlee's speech. -# From Paul Eggert (2000-10-02): -# Shanks says that DST was called "War Time" in the US in 1919. -# In the light of the above, this seems suspect; -# but we have no better authority yet. - - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule US 1918 1919 - Mar lastSun 2:00 1:00 W # War +Rule US 1918 1919 - Mar lastSun 2:00 1:00 D Rule US 1918 1919 - Oct lastSun 2:00 0 S Rule US 1942 only - Feb 9 2:00 1:00 W # War Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace @@ -174,6 +179,19 @@ Rule US 1987 max - Apr Sun>=1 2:00 1:00 # From Paul Eggert (1995-12-19): # Shanks uses 1983-10-30, not 1983-11-30, for the 1983 transitions. # Go with Shanks. +# +# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow: +# Public law 106-564 (2000-12-23) introduced the abbreviation +# "Chamorro Standard Time" for time in Guam and the Northern Marianas. +# See the file "australasia". + +# From Ryan Alessi of the Thousand Oaks Star (2001-02-15) via Rives McDow: +# Brad Sherman, D-Sherman Oaks, introduced a bill in Congress on +# Wednesday that could have California operating on Denver time as +# early as this summer.... The options include keeping +# daylight-saving time all year long, or setting clocks back two hours +# -- instead of just one -- during the existing daylight-saving time. + # US Eastern time, represented by New York @@ -226,7 +244,8 @@ Zone America/Chicago -5:50:36 - LMT 1883 # # Colorado, southern Idaho, far western Kansas, Montana, western # Nebraska, New Mexico, southwestern North Dakota, far eastern Oregon, -# western South Dakota, far western Texas, Utah, Wyoming +# western South Dakota, far western Texas (El Paso County, Hudspeth County, +# and Pine Springs and Nickel Creek in Culberson County), Utah, Wyoming # # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D @@ -261,40 +280,47 @@ Zone America/Los_Angeles -7:52:58 - LMT # Alaska # AK%sT is the modern abbreviation for -9:00 per USNO. # -# From Paul Eggert (1995-12-19): +# From Paul Eggert (2001-04-01): # Howse writes that Alaska switched from the Julian to the Gregorian calendar, # and from east-of-GMT to west-of-GMT days, when the US bought it from Russia. -# This was on 1867-10-18. We omit this transition, since we can't represent -# changes from Julian to Gregorian. +# This was on 1867-10-18, a Friday; the previous day was 1867-10-06 Julian, +# also a Friday. Include only the time zone part of this transition, +# ignoring the switch from Julian to Gregorian, since we can't represent +# the Julian calendar. # # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone America/Juneau -8:57:41 - LMT 1900 Aug 20 12:00 +Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 + -8:57:41 - LMT 1900 Aug 20 12:00 -8:00 - PST 1942 -8:00 US P%sT 1946 -8:00 - PST 1969 -8:00 US P%sT 1983 Oct 30 2:00 -9:00 US AK%sT -Zone America/Yakutat -9:18:55 - LMT 1900 Aug 20 12:00 +Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 + -9:18:55 - LMT 1900 Aug 20 12:00 -9:00 - YST 1942 -9:00 US Y%sT 1946 -9:00 - YST 1969 -9:00 US Y%sT 1983 Oct 30 2:00 -9:00 US AK%sT -Zone America/Anchorage -9:59:36 - LMT 1900 Aug 20 12:00 +Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18 + -9:59:36 - LMT 1900 Aug 20 12:00 -10:00 - CAT 1942 -10:00 US CAT/CAWT 1946 -10:00 - CAT 1967 Apr -10:00 - AHST 1969 -10:00 US AH%sT 1983 Oct 30 2:00 -9:00 US AK%sT -Zone America/Nome -11:01:38 - LMT 1900 Aug 20 12:00 +Zone America/Nome 12:58:21 - LMT 1867 Oct 18 + -11:01:38 - LMT 1900 Aug 20 12:00 -11:00 - NST 1942 -11:00 US N%sT 1946 -11:00 - NST 1967 Apr -11:00 - BST 1969 -11:00 US B%sT 1983 Oct 30 2:00 -9:00 US AK%sT -Zone America/Adak -11:46:38 - LMT 1900 Aug 20 12:00 +Zone America/Adak 12:13:21 - LMT 1867 Oct 18 + -11:46:38 - LMT 1900 Aug 20 12:00 -11:00 - NST 1942 -11:00 US N%sT 1946 -11:00 - NST 1967 Apr @@ -376,6 +402,13 @@ Zone America/Boise -7:44:49 - LMT 1883 N # So we reluctantly put them all in a subdirectory `America/Indiana'. # # Most of EST-only Indiana last observed DST in 1970. + +# From Paul Eggert (2001-03-06), following a tip by Markus Kuhn: +# Pam Belluck reported in the New York Times (2001-01-31) that the +# Indiana Legislature is considering a bill to adopt DST statewide. +# Her article mentioned Vevay, whose post office observes a different +# time zone than Danner's Hardware across the street. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S @@ -521,6 +554,11 @@ Zone America/Kentucky/Monticello -5:39:2 # # This story is too entertaining to be false, so go with Howse over Shanks. # +# From Paul Eggert (2001-03-06): +# Garland (1927) writes ``Cleveland and Detroit advanced their clocks +# one hour in 1914.'' This change is not in Shanks. We have no more +# info, so omit this for now. +# # Most of Michigan observed DST from 1973 on, but was a bit late in 1975. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D @@ -646,7 +684,7 @@ Link Pacific/Honolulu HST # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Canada 1918 only - Apr 14 2:00 1:00 D Rule Canada 1918 only - Oct 31 2:00 0 S -Rule Canada 1942 only - Feb 9 2:00 1:00 D +Rule Canada 1942 only - Feb 9 2:00 1:00 W Rule Canada 1945 only - Sep 30 2:00 0 S Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D Rule Canada 1974 max - Oct lastSun 2:00 0 S @@ -675,13 +713,13 @@ Rule StJohns 1920 1935 - Oct lastSun 23: Rule StJohns 1936 1941 - May Sun>=8 0:00 1:00 D Rule StJohns 1936 1941 - Oct Sun>=1 0:00 0 S # Shanks gives 1942 May 11 - 1945 Sep 30; go with Whitman. -Rule StJohns 1942 only - Mar 1 0:00 1:00 D +Rule StJohns 1942 only - Mar 1 0:00 1:00 W Rule StJohns 1942 only - Dec 31 0:00 0 S -Rule StJohns 1943 only - May 30 0:00 1:00 D +Rule StJohns 1943 only - May 30 0:00 1:00 W Rule StJohns 1943 only - Sep 5 0:00 0 S -Rule StJohns 1944 only - Jul 10 0:00 1:00 D +Rule StJohns 1944 only - Jul 10 0:00 1:00 W Rule StJohns 1944 only - Sep 2 0:00 0 S -Rule StJohns 1945 only - Jan 1 0:00 1:00 D +Rule StJohns 1945 only - Jan 1 0:00 1:00 W Rule StJohns 1945 only - Oct 7 2:00 0 S # For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives # Apr 30 - Sep 24; go with Shanks. @@ -765,7 +803,7 @@ Rule Halifax 1937 1938 - May Sun>=1 0:00 Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S Rule Halifax 1939 only - May 28 0:00 1:00 D Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D -Rule Halifax 1942 only - Feb 9 2:00 1:00 D +Rule Halifax 1942 only - Feb 9 2:00 1:00 W Rule Halifax 1945 1959 - Sep lastSun 2:00 0 S Rule Halifax 1946 1959 - Apr lastSun 2:00 1:00 D Rule Halifax 1962 1986 - Apr lastSun 2:00 1:00 D @@ -867,7 +905,7 @@ Rule Winn 1918 only - Apr 14 2:00 1:00 D Rule Winn 1918 only - Oct 31 2:00 0 S Rule Winn 1937 only - May 16 2:00 1:00 D Rule Winn 1937 only - Sep 26 2:00 0 S -Rule Winn 1942 only - Feb 9 2:00 1:00 D +Rule Winn 1942 only - Feb 9 2:00 1:00 W Rule Winn 1945 only - Sep lastSun 2:00 0 S Rule Winn 1946 only - May 12 2:00 1:00 D Rule Winn 1946 only - Oct 13 2:00 0 S @@ -937,7 +975,7 @@ Rule Regina 1937 1941 - Apr Sun>=8 0:00 Rule Regina 1937 only - Oct Sun>=8 0:00 0 S Rule Regina 1938 only - Oct Sun>=1 0:00 0 S Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S -Rule Regina 1942 only - Feb 9 2:00 1:00 D +Rule Regina 1942 only - Feb 9 2:00 1:00 W Rule Regina 1945 only - Sep lastSun 2:00 0 S Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D Rule Regina 1946 only - Oct Sun>=8 2:00 0 S @@ -970,7 +1008,7 @@ Rule Edm 1919 only - May 27 2:00 0 S Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D Rule Edm 1920 only - Oct lastSun 2:00 0 S Rule Edm 1921 1923 - Sep lastSun 2:00 0 S -Rule Edm 1942 only - Feb 9 2:00 1:00 D +Rule Edm 1942 only - Feb 9 2:00 1:00 W Rule Edm 1945 only - Sep lastSun 2:00 0 S Rule Edm 1947 only - Apr lastSun 2:00 1:00 D Rule Edm 1947 only - Sep lastSun 2:00 0 S @@ -996,7 +1034,7 @@ Zone America/Edmonton -7:33:52 - LMT 190 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Vanc 1918 only - Apr 14 2:00 1:00 D Rule Vanc 1918 only - Oct 31 2:00 0 S -Rule Vanc 1942 only - Feb 9 2:00 1:00 D +Rule Vanc 1942 only - Feb 9 2:00 1:00 W Rule Vanc 1945 only - Sep 30 2:00 0 S Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D Rule Vanc 1946 only - Oct 13 2:00 0 S @@ -1078,7 +1116,7 @@ Zone America/Dawson_Creek -8:00:56 - LMT # From Paul Eggert (2000-10-02): # Matthews and Vincent (1998) say the following, but we lack histories # for these potential new Zones. -# +# # The Canadian Forces station at Alert uses Eastern Time while the # handful of residents at the Eureka weather station [in the Central # zone] skip daylight savings. Baffin Island, which is crossed by the @@ -1100,16 +1138,29 @@ Zone America/Dawson_Creek -8:00:56 - LMT # central time, while Kugluktuk, even farther west, reverted to # mountain time, which they had used before the advent of Nunavut's # unified time zone in 1999. +# +# From Rives McDow (2001-01-20), quoting the Nunavut government: +# The preceding decision came into effect at midnight, Saturday Nov 4, 2000. # From Paul Eggert (2000-12-04): # Let's just keep track of the official times for now. +# From Rives McDow (2001-03-07): +# The premier of Nunavut has issued a ministerial statement advising +# that effective 2001-04-01, the territory of Nunavut will revert +# back to three time zones (mountain, central, and eastern). Of the +# cities in Nunavut, Coral Harbor is the only one that I know of that +# has said it will not observe dst, staying on EST year round. I'm +# checking for more info, and will get back to you if I come up with +# more. +# [Also see (2001-03-09).] + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule NT_YK 1918 only - Apr 14 2:00 1:00 D Rule NT_YK 1918 only - Oct 27 2:00 0 S Rule NT_YK 1919 only - May 25 2:00 1:00 D Rule NT_YK 1919 only - Nov 1 0:00 0 S -Rule NT_YK 1942 only - Feb 9 2:00 1:00 D +Rule NT_YK 1942 only - Feb 9 2:00 1:00 W Rule NT_YK 1945 only - Sep 30 2:00 0 S Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD Rule NT_YK 1965 only - Oct lastSun 2:00 0 S @@ -1121,17 +1172,21 @@ Zone America/Pangnirtung -4:22:56 - LMT -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00 -5:00 Canada E%sT 1999 Oct 31 2:00 -6:00 Canada C%sT 2000 Oct 29 2:00 - -5:00 - EST + -5:00 Canada E%sT Zone America/Iqaluit -4:33:52 - LMT 1884 # Frobisher Bay before 1987 -5:00 NT_YK E%sT 1999 Oct 31 2:00 -6:00 Canada C%sT 2000 Oct 29 2:00 - -5:00 - EST + -5:00 Canada E%sT Zone America/Rankin_Inlet -6:08:40 - LMT 1884 -6:00 NT_YK C%sT 2000 Oct 29 2:00 - -5:00 - EST + -5:00 - EST 2001 Apr 1 3:00 + -6:00 Canada C%sT Zone America/Cambridge_Bay -7:00:20 - LMT 1884 -7:00 NT_YK M%sT 1999 Oct 31 2:00 - -6:00 Canada C%sT + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 - EST 2000 Nov 5 0:00 + -6:00 - CST 2001 Apr 1 3:00 + -7:00 Canada M%sT Zone America/Yellowknife -7:37:24 - LMT 1884 -7:00 NT_YK M%sT Zone America/Inuvik -8:54:00 - LMT 1884 @@ -1149,31 +1204,29 @@ Zone America/Dawson -9:17:40 - LMT 1900 # Mexico -# Gwillim Law reports this source for daylight saving time in Mexico: -# -# Daylight saving time * SPIN-Internet (in Spanish) -# -# Law (2000-03-09) translates it as follows: -# -# Standard time effective in Mexico takes its origin in the -# presidential decree of April 24, 1942. The time of the 120th -# meridian applies to the state of Baja California; of the 105th -# meridian to the states of Baja California Sur, Sonora, Sinaloa, and -# Nayarit; and the time of the 90th meridian to the rest of the -# country. -# -# In the country, there have been several attempts made to adapt -# standard time with the object of arriving at a better use of -# daylight for social and economic activities. In December, 1981 a -# permanent time zone was decreed for the states of Campeche, Yucatan, -# and Quintana Roo, displacing them from the 90th to the 75th -# meridian. This disposition was annulled on December 2, 1982. +# From Paul Eggert (2001-03-05): +# The Investigation and Analysis Service of the +# Mexican Library of Congress (MLoC) has published a +# +# history of Mexican local time (in Spanish) +# . # -# In 1988 a Summer Time was established for the states of Tamaulipas, -# Nuevo Leon, Coahuila, and Durango, which meant that from the first -# Sunday in April to the last [Sunday] of October those states -# displaced their time from the 90th to the 75th meridian. That -# disposition lasted for one year. +# Here are the discrepancies between Shanks and the MLoC. +# (In all cases we go with the MLoC.) +# Shanks reports that Baja was at -8:00 in 1922/1923. +# Shanks says the 1930 transition in Baja was 1930-11-16. +# Shanks reports no DST during summer 1931. +# Shanks reports a transition at 1032-03-30 23:00, not 1932-04-01. +# Shanks does not report transitions for Baja in 1945 or 1948. +# Shanks reports southern Mexico transitions on 1981-12-01, not 12-23. +# Shanks says Quintana Roo switched to -6:00 on 1982-12-02, and to -5:00 +# on 1997-10-26 at 02:00. + +# From Gwillim Law (2001-02-20): +# There are some other discrepancies between the Decrees page and the +# tz database. I think they can best be explained by supposing that +# the researchers who prepared the Decrees page failed to find some of +# the relevant documents. # From Paul Eggert (2000-07-26): # Shanks gives 1942-04-01 instead of 1942-04-24, and omits the 1981 @@ -1223,44 +1276,89 @@ Zone America/Dawson -9:17:40 - LMT 1900 # savings time so as to stay on the same time zone as the southern part of # Arizona year round. -# From Jesper Norgaard (2000-12-02): -# No changes have been implemented yet, but the new elected president -# Vicente Fox seems to agree with his presidential candidate opponent -# Labastida that daylight saving should not be discontinued, but maybe -# reduced with a couple of months, e.g. starting one month later and -# ending one month earlier: -# http://www.reforma.com/nacional/articulo/044581/ +# From Jesper Norgaard, translating +# (2001-01-17): +# In Oaxaca, the 55.000 teachers from the Section 22 of the National +# Syndicate of Education Workers, refuse to apply daylight saving each +# year, so that the more than 10,000 schools work at normal hour the +# whole year. + +# From Gwillim Law (2001-01-19): +# ... says +# (translated):... +# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced +# that Summer Time will be reduced from seven to five months, starting +# this year.... +# +# [translated], says "summer time will ... take effect on the first Sunday +# in May, and end on the last Sunday of September. + +# From Arthur David Olson (2001-01-25): +# The 2001-01-24 traditional Washington Post contained the page one +# story "Timely Issue Divides Mexicans."... +# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html +# ... Mexico City Mayor Lopez Obrador "...is threatening to keep +# Mexico City and its 20 million residents on a different time than +# the rest of the country..." In particular, Lopez Obrador would abolish +# observation of Daylight Saving Time. + +# +# Official statute published by the Energy Department +# (2001-02-01) shows Baja and Chihauhua as still using US DST rules, +# and Sonora with no DST. This was reported by Jesper Norgaard (2001-02-03). + +# From Paul Eggert (2001-03-03): +# +# +# James F. Smith writes in today's LA Times +# +# * Sonora will continue to observe standard time. +# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that +# the Federal District will not adopt DST. +# * 4 of 16 district leaders announced they'll ignore the decree. +# * The decree does not affect federal-controlled facilities including +# the airport, banks, hospitals, and schools. +# +# For now we'll assume that the Federal District will bow to federal rules. + +# From Jesper Norgaard (2001-04-01): +# I found some references to the Mexican application of daylight +# saving, which modifies what I had already sent you, stating earlier +# that a number of northern Mexican states would go on daylight +# saving. The modification reverts this to only cover Baja California +# (Norte), while all other states (except Sonora, who has no daylight +# saving all year) will follow the original decree of president +# Vicente Fox, starting daylight saving May 6, 2001 and ending +# September 30, 2001. +# References: "Diario de Monterrey" +# Palabra (2001-03-31) # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Mexico 1939 only - Feb 5 0:00 1:00 D Rule Mexico 1939 only - Jun 25 0:00 0 S Rule Mexico 1940 only - Dec 9 0:00 1:00 D Rule Mexico 1941 only - Apr 1 0:00 0 S -Rule Mexico 1943 only - Dec 16 0:00 1:00 D +Rule Mexico 1943 only - Dec 16 0:00 1:00 W Rule Mexico 1944 only - May 1 0:00 0 S Rule Mexico 1950 only - Feb 12 0:00 1:00 D Rule Mexico 1950 only - Jul 30 0:00 0 S -Rule Mexico 1996 max - Apr Sun>=1 2:00 1:00 D -Rule Mexico 1996 max - Oct lastSun 2:00 0 S -# -Rule BajaN 1954 1961 - Apr lastSun 2:00 1:00 D -Rule BajaN 1954 1961 - Sep lastSun 2:00 0 S +Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D +Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S +Rule Mexico 2001 max - May Sun>=1 2:00 1:00 D +Rule Mexico 2001 max - Sep lastSun 2:00 0 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] # Quintana Roo Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56 - -6:00 - CST 1981 Dec - -5:00 - EST 1982 Dec 2 - -6:00 - CST 1996 - -6:00 Mexico C%sT 1997 Oct lastSun 2:00 + -6:00 - CST 1981 Dec 23 -5:00 Mexico E%sT 1998 Aug 2 2:00 -6:00 Mexico C%sT # Campeche, Yucatan Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32 - -6:00 - CST 1981 Dec + -6:00 - CST 1981 Dec 23 -5:00 - EST 1982 Dec 2 -6:00 Mexico C%sT # Coahuila, Durango, Nuevo Leon, Tamaulipas -Zone America/Monterrey -6:41:16 - LMT 1922 Jan 1 0:01:32 +Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44 -6:00 - CST 1988 -6:00 US C%sT 1989 -6:00 Mexico C%sT @@ -1270,7 +1368,7 @@ Zone America/Mexico_City -6:36:36 - LMT -6:00 - CST 1930 Nov 15 -7:00 - MST 1931 May 1 23:00 -6:00 - CST 1931 Oct - -7:00 - MST 1932 Mar 30 23:00 + -7:00 - MST 1932 Apr 1 -6:00 Mexico C%sT # Chihuahua Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40 @@ -1278,7 +1376,7 @@ Zone America/Chihuahua -7:04:20 - LMT 19 -6:00 - CST 1930 Nov 15 -7:00 - MST 1931 May 1 23:00 -6:00 - CST 1931 Oct - -7:00 - MST 1932 Mar 30 23:00 + -7:00 - MST 1932 Apr 1 -6:00 - CST 1996 -6:00 Mexico C%sT 1998 -6:00 - CST 1998 Apr Sun>=1 3:00 @@ -1289,7 +1387,7 @@ Zone America/Hermosillo -7:23:52 - LMT 1 -6:00 - CST 1930 Nov 15 -7:00 - MST 1931 May 1 23:00 -6:00 - CST 1931 Oct - -7:00 - MST 1932 Mar 30 23:00 + -7:00 - MST 1932 Apr 1 -6:00 - CST 1942 Apr 24 -7:00 - MST 1949 Jan 14 -8:00 - PST 1970 @@ -1301,20 +1399,38 @@ Zone America/Mazatlan -7:05:40 - LMT 192 -6:00 - CST 1930 Nov 15 -7:00 - MST 1931 May 1 23:00 -6:00 - CST 1931 Oct - -7:00 - MST 1932 Mar 30 23:00 + -7:00 - MST 1932 Apr 1 -6:00 - CST 1942 Apr 24 -7:00 - MST 1949 Jan 14 -8:00 - PST 1970 -7:00 Mexico M%sT # Baja California Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 + -7:00 - MST 1924 -8:00 - PST 1927 Jun 10 23:00 - -7:00 - MST 1930 Nov 16 + -7:00 - MST 1930 Nov 15 + -8:00 - PST 1931 Apr 1 + -8:00 1:00 PDT 1931 Sep 30 -8:00 - PST 1942 Apr 24 - -7:00 - MST 1949 Jan 14 - -8:00 BajaN P%sT 1976 + -8:00 1:00 PWT 1945 Nov 12 + -8:00 - PST 1948 Apr 5 + -8:00 1:00 PDT 1949 Jan 14 + -8:00 - PST 1954 + -8:00 CA P%sT 1961 + -8:00 - PST 1976 -8:00 US P%sT 1996 - -8:00 Mexico P%sT + -8:00 Mexico P%sT 2001 + -8:00 US P%sT +# From Paul Eggert (2001-03-05): +# Formerly there was an America/Ensenada zone, which differed from +# America/Tijuana only in that it did not observe DST from 1976 +# through 1995. This was as per Shanks. However, Guy Harris reports +# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and +# Tijuana observe DST," which contradicts Shanks but does imply that +# DST-observance was a town-by-town matter back then. This concerns +# data after 1970 so most likely there should be at least one Zone +# other than America/Tijuana for Baja, but it's not clear yet what its +# name or contents should be. # # Revillagigedo Is # no information diff -durpNa glibc-2.2.2/timezone/southamerica glibc-2.2.3/timezone/southamerica --- glibc-2.2.2/timezone/southamerica Sat Jan 6 20:35:42 2001 +++ glibc-2.2.3/timezone/southamerica Mon Mar 26 20:53:39 2001 @@ -1,4 +1,4 @@ -# @(#)southamerica 7.38 +# @(#)southamerica 7.40 # This data is by no means authoritative; if you think you know better, # go ahead and edit the file (and please send any changes to @@ -474,8 +474,7 @@ Zone America/Eirunepe -4:39:28 - LMT 191 -5:00 - ACT # # Acre (AC) -# Rio_Branco is too ambiguous, since there's a Rio Branco in Uruguay too. -Zone America/Porto_Acre -4:31:12 - LMT 1914 +Zone America/Rio_Branco -4:31:12 - LMT 1914 -5:00 Brazil AC%sT 1988 Sep 12 -5:00 - ACT @@ -494,17 +493,29 @@ Zone America/Porto_Acre -4:31:12 - LMT 1 # Because of the same drought, the government decided to end DST later, # on April 3, (one-time change). +# From Gwillim Law (2001-02-20): +# I came across a Chilean on-line newspaper, La Tercera. Its +# +# 1998-03-13 issue +# , says (my translation): +# "At 24:00 (midnight) tomorrow (Saturday) - 22:00 in the insular +# territory [Easter Island, Juan Fernandez, etc.] - winter time will +# begin in the entire country." + +# From Paul Eggert (2001-02-21): +# Assume this rule has been used since DST was introduced in the islands. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Chile 1918 only - Sep 1 0:00 1:00 S Rule Chile 1919 only - Jul 2 0:00 0 - Rule Chile 1927 1931 - Sep 1 0:00 1:00 S Rule Chile 1928 1932 - Apr 1 0:00 0 - -Rule Chile 1969 1997 - Oct Sun>=9 0:00 1:00 S -Rule Chile 1970 1998 - Mar Sun>=9 0:00 0 - -Rule Chile 1998 only - Sep 27 0:00 1:00 S -Rule Chile 1999 only - Apr 4 0:00 0 - -Rule Chile 1999 max - Oct Sun>=9 0:00 1:00 S -Rule Chile 2000 max - Mar Sun>=9 0:00 0 - +Rule Chile 1969 1997 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1970 1998 - Mar Sun>=9 3:00u 0 - +Rule Chile 1998 only - Sep 27 4:00u 1:00 S +Rule Chile 1999 only - Apr 4 3:00u 0 - +Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S +Rule Chile 2000 max - Mar Sun>=9 3:00u 0 - # IATA SSIM anomalies: (1990-09) says 1990-09-16; (1992-02) says 1992-03-14; # (1996-09) says 1998-03-08. Ignore these. # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -555,6 +566,56 @@ Zone Pacific/Galapagos -5:58:24 - LMT 19 -6:00 - GALT # Galapagos Time # Falklands + +# From Paul Eggert (2001-03-05): +# Between 1990 and 2000 inclusive, Shanks and the IATA agree except +# the IATA gives 1996-09-08. Go with Shanks. + +# From Falkland Islands Government Office, London (2001-01-22) +# via Jesper Norgaard: +# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15 +# April 2001 and advance one hour to summer time at 2 am on Sunday 2 +# September. It is anticipated that the clocks will revert back at 2 +# am on Sunday 21 April 2002 and advance to summer time at 2 am on +# Sunday 1 September. + +# From Rives McDow (2001-02-13): +# +# I have communicated several times with people there, and the last +# time I had communications that was helpful was in 1998. Here is +# what was said then: +# +# "The general rule was that Stanley used daylight saving and the Camp +# did not. However for various reasons many people in the Camp have +# started to use daylight saving (known locally as 'Stanley Time') +# There is no rule as to who uses daylight saving - it is a matter of +# personal choice and so it is impossible to draw a map showing who +# uses it and who does not. Any list would be out of date as soon as +# it was produced. This year daylight saving ended on April 18/19th +# and started again on September 12/13th. I do not know what the rule +# is, but can find out if you like. We do not change at the same time +# as UK or Chile." +# +# I did have in my notes that the rule was "Second Saturday in Sep at +# 0:00 until third Saturday in Apr at 0:00". I think that this does +# not agree in some cases with Shanks; is this true? +# +# Also, there is no mention in the list that some areas in the +# Falklands do not use DST. I have found in my communications there +# that these areas are on the western half of East Falkland and all of +# West Falkland. Stanley is the only place that consistently observes +# DST. Again, as in other places in the world, the farmers don't like +# it. West Falkland is almost entirely sheep farmers. +# +# I know one lady there that keeps a list of which farm keeps DST and +# which doesn't each year. She runs a shop in Stanley, and says that +# the list changes each year. She uses it to communicate to her +# customers, catching them when they are home for lunch or dinner. + +# From Paul Eggert (2001-03-05): +# For now, we'll just record the time in Stanley, since we have no +# better info. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - @@ -564,9 +625,10 @@ Rule Falk 1943 only - Jan 1 0:00 0 - Rule Falk 1983 only - Sep lastSun 0:00 1:00 S Rule Falk 1984 1985 - Apr lastSun 0:00 0 - Rule Falk 1984 only - Sep 16 0:00 1:00 S -Rule Falk 1985 1995 - Sep Sun>=9 0:00 1:00 S -Rule Falk 1986 max - Apr Sun>=16 0:00 0 - -Rule Falk 1996 max - Sep Sun>=8 0:00 1:00 S +Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S +Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - +Rule Falk 2001 max - Apr Sun>=15 2:00 0 - +Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Atlantic/Stanley -3:51:24 - LMT 1890 -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time @@ -607,19 +669,32 @@ Rule Para 1993 only - Mar 31 0:00 0 - Rule Para 1993 1995 - Oct 1 0:00 1:00 S Rule Para 1994 1995 - Feb lastSun 0:00 0 - Rule Para 1996 only - Mar 1 0:00 0 - -# IATA SSIM (1997-09) says Mar 1; go with Shanks. -Rule Para 1997 only - Feb lastSun 0:00 0 - -Rule Para 1998 only - Mar 1 0:00 0 - -Rule Para 1996 1998 - Oct Sun>=1 0:00 1:00 S -# IATA SSIM (1999-02) says lastSat, not lastSun; (1999-09) reports no date; -# go with Shanks. -Rule Para 1999 max - Feb lastSun 0:00 0 - -# IATA SSIM (2000-02) says 1999-10-10. -Rule Para 1999 only - Oct 10 0:00 1:00 S +# IATA SSIM (2000-02) says 1999-10-10; ignore this for now. # From Steffen Thorsen (2000-10-02): # I have three independent reports that Paraguay changed to DST this Sunday # (10-01). -Rule Para 2000 max - Oct Sun>=1 0:00 1:00 S +# +# Translated by Gwillim Law (2001-02-27) from +# +# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01) +# : +# Starting at 0:00 today, the clock will be set forward 60 minutes, in +# fulfillment of Decree No. 7,273 of the Executive Power.... The time change +# system has been operating for several years. Formerly there was a separate +# decree each year; the new law has the same effect, but permanently. Every +# year, the time will change on the first Sunday of October; likewise, the +# clock will be set back on the first Sunday of March. +# +# From Jesper Norgaard (2001-03-06) [an official URL saying similar things]: +# http://gateway.abc.com.py:8000/pub/pag04.mbr/artic?FHA=2001-03-03-02.24.52.900592 +# +Rule Para 1996 max - Oct Sun>=1 0:00 1:00 S +# IATA SSIM (1997-09) says Mar 1; go with Shanks. +Rule Para 1997 only - Feb lastSun 0:00 0 - +# Shanks says 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but +# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27). +Rule Para 1998 max - Mar Sun>=1 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Asuncion -3:50:40 - LMT 1890 -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time diff -durpNa glibc-2.2.2/timezone/systemv glibc-2.2.3/timezone/systemv --- glibc-2.2.2/timezone/systemv Sun Feb 15 11:30:15 1998 +++ glibc-2.2.3/timezone/systemv Mon Mar 26 20:53:39 2001 @@ -1,35 +1,50 @@ -# @(#)systemv 7.2 +# @(#)systemv 7.3 # Old rules, should the need arise. # No attempt is made to handle Newfoundland, since it cannot be expressed # using the System V "TZ" scheme (half-hour offset), or anything outside # North America (no support for non-standard DST start/end dates), nor -# the change in the DST rules in the US in 1987 (can't split between -# Canada, with no changes, and the US) +# the change in the DST rules in the US in 1987 (which occurred before +# the old rules were written). # -# Be sure to compile this *without* leap second correction for true conformance. +# If you need the old rules, uncomment ## lines and comment-out Link lines. +# Compile this *without* leap second correction for true conformance. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D -Rule SystemV min 1973 - Oct lastSun 2:00 0 S -Rule SystemV 1974 only - Jan 6 2:00 1:00 D -Rule SystemV 1974 only - Nov lastSun 2:00 0 S -Rule SystemV 1975 only - Feb 23 2:00 1:00 D -Rule SystemV 1975 only - Oct lastSun 2:00 0 S -Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D -Rule SystemV 1976 max - Oct lastSun 2:00 0 S +## Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D +## Rule SystemV min 1973 - Oct lastSun 2:00 0 S +## Rule SystemV 1974 only - Jan 6 2:00 1:00 D +## Rule SystemV 1974 only - Nov lastSun 2:00 0 S +## Rule SystemV 1975 only - Feb 23 2:00 1:00 D +## Rule SystemV 1975 only - Oct lastSun 2:00 0 S +## Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D +## Rule SystemV 1976 max - Oct lastSun 2:00 0 S # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] -Zone SystemV/AST4ADT -4:00 SystemV A%sT -Zone SystemV/EST5EDT -5:00 SystemV E%sT -Zone SystemV/CST6CDT -6:00 SystemV C%sT -Zone SystemV/MST7MDT -7:00 SystemV M%sT -Zone SystemV/PST8PDT -8:00 SystemV P%sT -Zone SystemV/YST9YDT -9:00 SystemV Y%sT -Zone SystemV/AST4 -4:00 - AST -Zone SystemV/EST5 -5:00 - EST -Zone SystemV/CST6 -6:00 - CST -Zone SystemV/MST7 -7:00 - MST -Zone SystemV/PST8 -8:00 - PST -Zone SystemV/YST9 -9:00 - YST -Zone SystemV/HST10 -10:00 - HST +## Zone SystemV/AST4ADT -4:00 SystemV A%sT +## Zone SystemV/EST5EDT -5:00 SystemV E%sT +## Zone SystemV/CST6CDT -6:00 SystemV C%sT +## Zone SystemV/MST7MDT -7:00 SystemV M%sT +## Zone SystemV/PST8PDT -8:00 SystemV P%sT +## Zone SystemV/YST9YDT -9:00 SystemV Y%sT +## Zone SystemV/AST4 -4:00 - AST +## Zone SystemV/EST5 -5:00 - EST +## Zone SystemV/CST6 -6:00 - CST +## Zone SystemV/MST7 -7:00 - MST +## Zone SystemV/PST8 -8:00 - PST +## Zone SystemV/YST9 -9:00 - YST +## Zone SystemV/HST10 -10:00 - HST +# For now... +Link America/Halifax SystemV/AST4ADT +Link America/New_York SystemV/EST5EDT +Link America/Chicago SystemV/CST6CDT +Link America/Denver SystemV/MST7MDT +Link America/Los_Angeles SystemV/PST8PDT +Link America/Anchorage SystemV/YST9YDT +Link America/Puerto_Rico SystemV/AST4 +Link America/Indianapolis SystemV/EST5 +Link America/Regina SystemV/CST6 +Link America/Phoenix SystemV/MST7 +Link Pacific/Pitcairn SystemV/PST8 +Link Pacific/Gambier SystemV/YST9 +Link Pacific/Honolulu SystemV/HST10 diff -durpNa glibc-2.2.2/timezone/yearistype glibc-2.2.3/timezone/yearistype --- glibc-2.2.2/timezone/yearistype Tue Aug 15 11:16:29 2000 +++ glibc-2.2.3/timezone/yearistype Mon Mar 26 20:53:39 2001 @@ -1,6 +1,6 @@ #! /bin/sh -: '@(#)yearistype.sh 7.6' +: '@(#)yearistype.sh 7.7' case $#-$1 in 2-|2-0*|2-*[!0-9]*) @@ -34,3 +34,4 @@ case $#-$2 in esac echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2 +exit 1 diff -durpNa glibc-2.2.2/timezone/zdump.c glibc-2.2.3/timezone/zdump.c --- glibc-2.2.2/timezone/zdump.c Thu Oct 26 22:57:43 2000 +++ glibc-2.2.3/timezone/zdump.c Mon Mar 26 20:53:39 2001 @@ -1,6 +1,6 @@ #ifndef lint #ifndef NOID -static char elsieid[] = "@(#)zdump.c 7.28"; +static char elsieid[] = "@(#)zdump.c 7.29"; #endif /* !defined NOID */ #endif /* !defined lint */ @@ -264,9 +264,8 @@ _("%s: usage is %s [ -v ] [ -c cutoff ] show(argv[i], t, TRUE); } if (fflush(stdout) || ferror(stdout)) { - (void) fprintf(stderr, _("%s: Error writing "), - argv[0]); - (void) perror(_("standard output")); + (void) fprintf(stderr, "%s: ", argv[0]); + (void) perror(_("Error writing standard output")); (void) exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); diff -durpNa glibc-2.2.2/timezone/zone.tab glibc-2.2.3/timezone/zone.tab --- glibc-2.2.2/timezone/zone.tab Sat Jan 6 20:35:42 2001 +++ glibc-2.2.3/timezone/zone.tab Mon Mar 26 20:53:39 2001 @@ -1,4 +1,4 @@ -# @(#)zone.tab 1.21 +# @(#)zone.tab 1.22 # # TZ zone descriptions # @@ -37,6 +37,7 @@ AQ -6448-06406 Antarctica/Palmer Palmer AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula +AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Base, Terre Adelie AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I AR -3436-05827 America/Buenos_Aires E Argentina (BA, DF, SC, TF) @@ -51,7 +52,7 @@ AU -3133+15905 Australia/Lord_Howe Lord AU -4253+14719 Australia/Hobart Tasmania AU -3749+14458 Australia/Melbourne Victoria AU -3352+15113 Australia/Sydney New South Wales - most locations -AU -3157+14127 Australia/Broken_Hill New South Wales - Broken Hill +AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna AU -2728+15302 Australia/Brisbane Queensland - most locations AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands AU -3455+13835 Australia/Adelaide South Australia @@ -83,7 +84,7 @@ BR -0846-06354 America/Porto_Velho W Par BR +0249-06040 America/Boa_Vista Roraima BR -0308-06001 America/Manaus E Amazonas BR -0640-06952 America/Eirunepe W Amazonas -BR -0934-06731 America/Porto_Acre Acre +BR -0958-06748 America/Rio_Branco Acre BS +2505-07721 America/Nassau BT +2728+08939 Asia/Thimphu BW -2545+02555 Africa/Gaborone @@ -227,8 +228,7 @@ LV +5657+02406 Europe/Riga LY +3254+01311 Africa/Tripoli MA +3339-00735 Africa/Casablanca MC +4342+00723 Europe/Monaco -MD +4700+02850 Europe/Chisinau most locations -MD +4651+02938 Europe/Tiraspol Transdniestria +MD +4700+02850 Europe/Chisinau MG -1855+04731 Indian/Antananarivo MH +0709+17112 Pacific/Majuro most locations MH +0905+16720 Pacific/Kwajalein Kwajalein diff -durpNa glibc-2.2.2/version.h glibc-2.2.3/version.h --- glibc-2.2.2/version.h Fri Feb 9 11:03:50 2001 +++ glibc-2.2.3/version.h Tue Mar 27 22:27:26 2001 @@ -1,4 +1,4 @@ /* This file just defines the current version number of libc. */ #define RELEASE "stable" -#define VERSION "2.2.2" +#define VERSION "2.2.3" diff -durpNa glibc-2.2.2/wcsmbs/wchar.h glibc-2.2.3/wcsmbs/wchar.h --- glibc-2.2.2/wcsmbs/wchar.h Fri Feb 9 10:04:39 2001 +++ glibc-2.2.3/wcsmbs/wchar.h Thu Apr 12 14:02:20 2001 @@ -603,60 +603,60 @@ extern int vswscanf (__const wchar_t *__ /* Read a character from STREAM. */ -extern wint_t fgetwc (__FILE *__stream); -extern wint_t getwc (__FILE *__stream); +extern wint_t fgetwc (__FILE *__stream) __THROW; +extern wint_t getwc (__FILE *__stream) __THROW; /* Read a character from stdin. */ -extern wint_t getwchar (void); +extern wint_t getwchar (void) __THROW; /* Write a character to STREAM. */ -extern wint_t fputwc (wchar_t __wc, __FILE *__stream); -extern wint_t putwc (wchar_t __wc, __FILE *__stream); +extern wint_t fputwc (wchar_t __wc, __FILE *__stream) __THROW; +extern wint_t putwc (wchar_t __wc, __FILE *__stream) __THROW; /* Write a character to stdout. */ -extern wint_t putwchar (wchar_t __wc); +extern wint_t putwchar (wchar_t __wc) __THROW; /* Get a newline-terminated wide character string of finite length from STREAM. */ extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, - __FILE *__restrict __stream); + __FILE *__restrict __stream) __THROW; /* Write a string to STREAM. */ extern int fputws (__const wchar_t *__restrict __ws, - __FILE *__restrict __stream); + __FILE *__restrict __stream) __THROW; /* Push a character back onto the input buffer of STREAM. */ -extern wint_t ungetwc (wint_t __wc, __FILE *__stream); +extern wint_t ungetwc (wint_t __wc, __FILE *__stream) __THROW; #ifdef __USE_GNU /* These are defined to be equivalent to the `char' functions defined in POSIX.1:1996. */ -extern wint_t getwc_unlocked (__FILE *__stream); -extern wint_t getwchar_unlocked (void); +extern wint_t getwc_unlocked (__FILE *__stream) __THROW; +extern wint_t getwchar_unlocked (void) __THROW; /* This is the wide character version of a GNU extension. */ -extern wint_t fgetwc_unlocked (__FILE *__stream); +extern wint_t fgetwc_unlocked (__FILE *__stream) __THROW; /* Faster version when locking is not necessary. */ -extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); +extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream) __THROW; /* These are defined to be equivalent to the `char' functions defined in POSIX.1:1996. */ -extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); -extern wint_t putwchar_unlocked (wchar_t __wc); +extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream) __THROW; +extern wint_t putwchar_unlocked (wchar_t __wc) __THROW; /* This function does the same as `fgetws' but does not lock the stream. */ extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, - __FILE *__restrict __stream); + __FILE *__restrict __stream) __THROW; /* This function does the same as `fputws' but does not lock the stream. */ extern int fputws_unlocked (__const wchar_t *__restrict __ws, - __FILE *__restrict __stream); + __FILE *__restrict __stream) __THROW; #endif @@ -665,7 +665,7 @@ extern int fputws_unlocked (__const wcha of wide characters written, or 0 if it would exceed MAXSIZE. */ extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, __const wchar_t *__restrict __format, - __const struct tm *__restrict __tp); + __const struct tm *__restrict __tp) __THROW; /* The X/Open standard demands that most of the functions defined in the header must also appear here. This is probably diff -durpNa glibc-2.2.2/wcsmbs/wcscat.c glibc-2.2.3/wcsmbs/wcscat.c --- glibc-2.2.2/wcsmbs/wcscat.c Sat Jan 25 21:25:37 1997 +++ glibc-2.2.3/wcsmbs/wcscat.c Mon Mar 26 20:53:39 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -22,7 +22,7 @@ /* Append SRC on the end of DEST. */ wchar_t * -wcscat (dest, src) +__wcscat (dest, src) wchar_t *dest; const wchar_t *src; { @@ -48,3 +48,4 @@ wcscat (dest, src) return dest; } +weak_alias (__wcscat, wcscat)
$name