Merge glibc-ports into ports/ directory.

This commit is contained in:
Joseph Myers 2012-07-01 13:08:59 +00:00
commit e84eabb387
2361 changed files with 320086 additions and 0 deletions

1
ports/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
autom4te*.cache

1
ports/Banner Normal file
View File

@ -0,0 +1 @@
Support for some architectures added on, not maintained in glibc core.

73
ports/ChangeLog Normal file
View File

@ -0,0 +1,73 @@
2012-06-21 Carlos O'Donell <carlos_odonell@mentor.com>
* .gitignore: New file.
2012-02-07 Joseph Myers <joseph@codesourcery.com>
* README: Update.
2012-02-07 Joseph Myers <joseph@codesourcery.com>
* README: Document use of ranges in copyright notices.
2011-11-29 Joseph Myers <joseph@codesourcery.com>
* bare, sysdeps/am29k, sysdeps/i860, sysdeps/i960, sysdeps/m88k,
sysdeps/mach, sysdeps/rs6000, sysdeps/standalone, sysdeps/tahoe,
sysdeps/unix/bsd, sysdeps/unix/sysv/hpux, sysdeps/unix/sysv/i386,
sysdeps/unix/sysv/irix4, sysdeps/unix/sysv/isc2.2,
sysdeps/unix/sysv/minix, sysdeps/unix/sysv/sco3.2,
sysdeps/unix/sysv/sco3.2.4, sysdeps/unix/sysv/sysv4, sysdeps/vax,
sysdeps/z8000: Remove.
2010-04-14 Joseph Myers <joseph@codesourcery.com>
* libc-abis: Remove.
2010-04-06 Joseph Myers <joseph@codesourcery.com>
* libc-abis: New.
2006-03-06 Roland McGrath <roland@redhat.com>
* Makefile (%.bz2, %.gz): New pattern rules.
2006-02-28 Roland McGrath <roland@redhat.com>
* Makefile (glibc-port-%-$(dist-version).tar): Don't include top-level
stuff.
* README: Update for new add-on scheme.
2006-02-27 Roland McGrath <roland@redhat.com>
* Makefile: Remove libc boilerplate.
* Makeconfig: File removed.
* configure.in: File removed.
* configure: File removed.
2005-03-22 Roland McGrath <roland@redhat.com>
* Makefile ($(distname).tar): Fail if sysdeps/.../configure files are
not all up to date. Touch configure files after cvs export.
(glibc-port-%-$(dist-version).tar): Likewise.
2004-10-22 Roland McGrath <roland@frob.com>
* Makefile (dist, dist-ports): New target.
(dist-port-%): New pattern rule.
* Makeconfig [!subdir] (ports/%): New pattern rule.
* configure.in: Cope if there are no sysdeps/*/preconfigure files.
* configure: Regenerated.
2004-08-16 Roland McGrath <roland@frob.com>
* Makefile: New file.
2004-08-04 Roland McGrath <roland@frob.com>
New directory implementing glibc add-on infrastructure for
ports maintained separate from the core glibc source tree.
* README, configure.in, Makeconfig, Banner, ChangeLog: New files.
* configure: New generated file.

14
ports/ChangeLog.aix Normal file
View File

@ -0,0 +1,14 @@
2011-11-29 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/aix: Remove.
2007-07-10 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/aix/bits/fcntl.h: Comment fix.
2005-12-27 Roland McGrath <roland@redhat.com>
* sysdeps/unix/sysv/aix/bits/setjmp.h (_JMPBUF_UNWINDS): Take third
argument DEMANGLE, and pass SP value through it.
* sysdeps/unix/sysv/aix/powerpc/memset.c: Don't use sysdeps/generic.

613
ports/ChangeLog.alpha Normal file
View File

@ -0,0 +1,613 @@
2012-06-15 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/soft-fp/sfp-machine.h (FP_TRAPPING_EXCEPTIONS): New.
* sysdeps/alpha/fpu/s_rint.c (__rint): Handle inexact regardless
of -mieee-with-inexact.
* sysdeps/alpha/fpu/s_rintf.c (__rintf): Likewise.
[BZ #13848]
* sysdeps/alpha/fpu/s_nearbyint.c (__nearbyint): Fix corner cases
similar to BZ#5350.
* sysdeps/alpha/fpu/s_nearbyintf.c (__nearbyintf): Likewise.
* sysdeps/alpha/fpu/s_copysign.c (__copysign): Use builtin.
* sysdeps/alpha/fpu/s_copysignf.c (__copysignf): Use builtin.
* sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIMIT_RTTIME): New.
(prlimit, prlimit64): New declarations.
* sysdeps/unix/sysv/linux/alpha/bits/shm.h (SHM_EXEC): New.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Use only __USE_ATFILE
to protect UTIME_NOW and UTIME_OMIT.
* sysdeps/alpha/fpu/cfloat-compat.h: Remove __GNUC_PREREQ check.
* sysdeps/alpha/fpu/s_fabs.c (__fabs): Likewise.
* sysdeps/alpha/fpu/s_fabsf.c (__fabsf): Likewise.
* sysdeps/unix/sysv/linux/alpha/sysconf.c (implver): Remove.
(amask): Remove.
(__sysconf): Use builtins directly.
* sysdeps/alpha/bits/mathdef.h (float_t): Define as float
regardless of __GNUC__.
2012-06-06 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/strncmp.S: Bound count to LONG_MAX at startup.
Re-organize checks vs s2 end-of-count.
[BZ #13718]
* sysdeps/alpha/stxncmp.S: Bound count to LONG_MAX at startup.
* sysdeps/alpha/alphaev6/stxncmp.S: Likewise.
* sysdeps/alpha/fpu/e_sqrt.c: Include <math_private.h> before
redefining __ieee758_sqrt.
* sysdeps/alpha/alphaev6/stxcpy.S: Use cfi markup instead of
dual ecoff procedure descriptors.
* sysdeps/alpha/alphaev6/stxncpy.S: Likewise.
* sysdeps/alpha/bzero.S: Likewise.
* sysdeps/alpha/memset.S: Likewise.
* sysdeps/alpha/stxcpy.S: Likewise.
* sysdeps/alpha/stxncpy.S: Likewise.
* sysdeps/unix/alpha/sysdep.h (USEPV_PROF): New.
* sysdeps/alpha/_mcount.S: Move .prologue after stack alloc.
2012-06-05 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Use .cfi_signal_frame
instead of a hack using extra nops.
* sysdeps/unxi/alpha/getppid.S: New file.
* sysdeps/unxi/alpha/getegid.S: New file.
* sysdeps/unxi/alpha/geteuid.S: New file.
2012-06-01 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/Makefile (CFLAGS-test-misc.c): Set -mieee-with-inexact.
* sysdeps/alpha/fpu/libm-test-ulps: Regenerate.
2012-05-30 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/Makefile (CFLAGS-s_fma.c): Set -mieee-with-inexact.
(CFLAGS-s_fmaf.c): Likewise.
* sysdeps/alpha/fpu/libm-test-ulps: Regenerate.
* sysdeps/unix/sysv/linux/alpha/brk.S: Fix error path for PIC.
* sysdeps/alpha/fpu/libm-test-ulps: Regenerate.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove
__connect_internal alias.
* sysdeps/unix/sysv/linux/alpha/ioperm.c (process_cpuinfo): Use
fgets_unlocked.
* sysdeps/alpha/Implies: Include ieee754/dbl-64/wordsize-64.
* sysdeps/alpha/alphaev6/fpu/e_sqrt.S: Use dynamic rounding.
* sysdeps/alpha/alphaev6/fpu/e_sqrtf.S: Likewise.
* sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): New.
(__ieee754_sqrtf): New.
* sysdeps/unix/sysv/linux/alpha/nptl/pthread_once.c: Replace
_internal alias by hidden_def.
* sysdeps/unix/sysv/linux/alpha/adjtime.c: Remove __ASSUME_TIMEVAL64.
* sysdeps/unix/sysv/linux/alpha/getitimer.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/getrusage.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/gettimeofday.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/select.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/setitimer.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/settimeofday.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/utimes.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/wait4.S: Remove file.
* sysdeps/unix/sysv/linux/alpha/syscalls.list (getitimer): New.
(getrusage, gettimeofday, select, setitimer): New.
(settimeofday, utimes, wait4): New.
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: Remove
__ASSUME_TIMEVAL64.
* sysdeps/unix/sysv/linux/alpha/nptl/ld.abilist: Update.
* sysdeps/unix/sysv/linux/alpha/nptl/libc.abilist: Update.
2012-05-24 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/nptl/ld.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libBrokenLocale.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libanl.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libc.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libcrypt.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libdl.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libm.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libnsl.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libresolv.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/librt.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libthread_db.abilist: New file.
* sysdeps/unix/sysv/linux/alpha/nptl/libutil.abilist: New file.
* sysdeps/alpha/ldiv.S (imaxdiv): Re-add alias.
* sysdeps/unix/sysv/linux/alpha/msgctl.c: Remove __ASSUME_32BITUIDS.
* sysdeps/unix/sysv/linux/alpha/semctl.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/shmctl.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/mman.h (MADV_HUGEPAGE): New.
(MADV_NOHUGEPAGE, MADV_DONTDUMP, MADV_DODUMP): New.
2012-05-20 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/add_n.S: Rename from add_n.s.
* sysdeps/alpha/addmul_1.S: Rename from addmul_1.s.
* sysdeps/alpha/alphaev5/add_n.S: Rename from add_n.s.
* sysdeps/alpha/alphaev5/lshift.S: Rename from lshift.s.
* sysdeps/alpha/alphaev5/rshift.S: Rename from rshift.s.
* sysdeps/alpha/alphaev5/sub_n.S: Rename from sub_n.s.
* sysdeps/alpha/alphaev6/addmul_1.S: Rename from addmul_1.s.
* sysdeps/alpha/lshift.S: Rename from lshift.s.
* sysdeps/alpha/mul_1.S: Rename from mul_1.s.
* sysdeps/alpha/rshift.S: Rename from rshift.s.
* sysdeps/alpha/sub_n.S: Rename from sub_n.s.
* sysdeps/alpha/submul_1.S: Rename from submul_1.s.
2012-05-18 Richard Henderson <rth@twiddle.net>
* data/localplt-alpha-linux-gnu.data: New file.
* sysdeps/unix/sysv/linux/alpha/bits/typesizes.h (__FSWORD_T_TYPE,
__SYSCALL_SLONG_TYPE, __SYSCALL_ULONG_TYPE): New.
2012-04-26 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: Correct kernel
version needed to define __ASSUME_ACCEPT4.
* sysdeps/unix/sysv/linux/alpha/ioperm.c (process_cpuinfo): Use "c"
and "e" in fopen.
* sysdeps/unix/sysv/linux/alpha/bits/mman.h (MAP_STACK): Define.
(MAP_HUGETLB): Likewise.
* sysdeps/alpha/bits/mathdef.h: Remove __STDC__ conditionals.
* sysdeps/unix/alpha/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/sysdep.h: Likewise.
* sysdeps/alpha/fpu/bits/fenv.h: Use const instead of __const.
* sysdeps/unix/sysv/linux/alpha/oldglob.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/acct.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (O_PATH): Define.
2012-03-27 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/elf/configure.in: Move to ...
* sysdeps/alpha/configure.in: ... here. Update comment.
* sysdeps/alpha/configure: Regenerate.
* sysdeps/alpha/elf/crti.S: Move to ...
* sysdeps/alpha/crti.S: ... here.
* sysdeps/alpha/elf/crtn.S: Move to ...
* sysdeps/alpha/crtn.S: ... here.
* sysdeps/alpha/elf/start.S: Move to ...
* sysdeps/alpha/start.S: ... here.
2012-03-21 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/hp-timing.h: Include <_itoa.h> instead
of <stdio-common/_itoa.h>.
2012-03-19 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/fpu/math_private.h: New file.
2012-03-11 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/bits/socket.h: Remove file.
* sysdeps/unix/sysv/linux/alpha/bits/socket_type.h: New file.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-03-04 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (inline_sethae): Mark
as always_inline.
2012-03-04 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/bits/socket.h (recvmmsg): Only
declare if __USE_GNU.
(sendmmsg): Add declaration.
2012-03-04 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Don't name the
siginfo_t struct. Add forward declaration of pthread_attr_t;
use it in sigevent.
* sysdeps/unix/sysv/linux/alpha/nptl/bits/pthreadtypes.h
(pthread_attr_t): Add union tag to pthread_attr_t; only define
typedef if not already defined.
2012-02-21 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/bits/epoll.h: New file.
* sysdeps/unix/sysv/linux/alpha/bits/timerfd.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/epoll.h: Remove.
* sysdeps/unix/sysv/linux/alpha/sys/timerfd.h: Likewise.
2012-02-20 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/unix/sysv/linux/alpha/bits/errno.h (ERFKILL, EHWPOISON):
Define if not defined.
* sysdeps/unix/sysv/linux/alpha/Versions: Add new errlist compat
entry for 2.16.
2012-02-20 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/unix/sysv/linux/alpha/sysconf.c: Fix cache sysconf switch.
2012-02-16 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/fpu/fenv_libc.h (__ieee_set_fp_control,
__ieee_get_fp_control): Mark as hidden proto.
2012-02-15 Mike Hommey <mh+reportbug@glandium.org>
[BZ #11677]
* sysdeps/unix/sysv/linux/alpha/syscall.S: Support 6th argument.
2012-02-15 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/bits/signalfd.h: New file.
* sysdeps/unix/sysv/linux/alpha/sys/signalfd.h: Remove.
* sysdeps/unix/alpha/sysdep.h (syscall_promote): New.
(inline_syscall0, inline_syscall1, inline_syscall2,
inline_syscall3, inline_syscall4, inline_syscall5,
inline_syscall6): Use it.
* sysdeps/unix/sysv/linux/alpha/setregid.c: Remove.
* sysdeps/unix/sysv/linux/alpha/setreuid.c: Remove.
* sysdeps/unix/sysv/linux/alpha/setresgid.c: Remove.
* sysdeps/unix/sysv/linux/alpha/setresuid.c: Remove.
* sysdeps/unix/alpha/sysdep.h: Don't include <tls.h>
[PIC] (SYSCALL_ERROR_HANDLER): Emit nothing.
[PIC] (SYSCALL_ERROR_LABEL): Add !samegp markup.
* sysdeps/alpha/dl-machine.h: Don't check USE___THREAD.
* sysdeps/unix/alpha/sysdeps.S: Don't check __ELF__, USE___THREAD,
or _LIBC_REENTRANT.
2012-02-15 Richard Henderson <rth@twiddle.net>
[BZ #13361]
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (struct file_handle): New.
(fallocate, name_to_handle_at, open_by_handle_at): Declare.
2012-02-14 Joseph Myers <joseph@codesourcery.com>
Tom de Vries <tom@codesourcery.com>
* sysdeps/alpha/preconfigure: Make setting of libc_commonpagesize and
libc_relro_required conditional on alpha machine. Move setting of
libc_cv_gcc_unwind_find_fde ...
* sysdeps/unix/sysv/linux/alpha/configure.in: ... here.
2012-02-13 Richard Henderson <rth@twiddle.net>
* sysdeps/unix/sysv/linux/alpha/bits/eventfd.h: New file.
* sysdeps/unix/sysv/linux/alpha/sys/eventfd.h: Remove.
2012-02-09 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/preconfigure (libc_cv_gcc_unwind_find_fde): New.
(libc_commonpagesize, libc_relro_required): New.
2012-02-08 Richard Henderson <rth@twiddle.net>
* sysdeps/alpha/ldsodefs.h: New file.
* sysdeps/alpha/tst-audit.h: New file.
* sysdeps/alpha/tls-macros.h: New file.
* sysdeps/unix/sysv/linux/alpha/getitimer.S: Don't check HAVE_ELF.
* sysdeps/unix/sysv/linux/alpha/getrusage.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/gettimeofday.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/select.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/setitimer.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/settimeofday.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/utimes.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/wait4.S: Likewise.
* sysdeps/alpha/elf/crti.S, sysdeps/alpha/elf/crtn.S: New files...
* sysdeps/alpha/elf/initfini.c: ... split from here. Remove file.
* sysdeps/alpha/nptl/elf/pt-initfini.c: Remove file.
* sysdeps/unix/alpha/sysdep.h (INTERNAL_SYSCALL_DECL): Mark unused.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h (_STAT_VER_LINUX): New.
* sysdeps/alpha/dl-tls.h (TLS_DTV_UNALLOCATED): New.
* sysdeps/unix/sysv/linux/alpha/configure.in: New file.
* sysdeps/unix/sysv/linux/alpha/configure: Build.
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: Protect from
multiple includes. Disable statfs64 entirely.
* sysdeps/alpha/nptl/tls.h: Don't test HAVE_TLS_SUPPORT.
* sysdeps/unix/alpha/sysdep.h: Don't test HAVE___THREAD.
* sysdeps/alpha/elf/configure.in (libc_cv_alpha_tls): Error out if
the test fails. Don't set HAVE_TLS_SUPPORT.
* sysdeps/alpha/elf/configure: Rebuild.
2012-01-07 Joseph Myers <joseph@codesourcery.com>
* sysdeps/alpha/backtrace.c: Use x86_64 version of backtrace.c.
* sysdeps/unix/sysv/linux/alpha/wordexp.c: Use sparc64 version of
wordexp.c.
2011-10-05 Andreas Schwab <schwab@redhat.com>
* sysdeps/alpha/dl-machine.h (elf_machine_rela)
(elf_machine_lazy_rel): Add parameter skip_ifunc.
2011-03-28 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S(____longjmp_chk):
Fix wrong register in stack pointer comparison.
2011-03-01 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/alpha/fpu/feupdateenv.c (feupdateenv): Add libm_hidden_def.
* sysdeps/alpha/fpu/ftestexcept.c (fetestexcept): Likewise.
2011-02-28 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/unix/sysv/linux/alpha/bits/statfs.h (struct statfs,
struct statfs64): Add f_flags field.
2011-02-28 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/alpha/stackinfo.h: Define DEFAULT_STACK_PERMS with PF_X.
2011-02-28 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (F_SETPIPE_SZ,
F_GETPIPE_SZ): Define.
2010-09-26 Michael Cree <mcree@orcon.net.nz>
* sysdeps/alpha/memchr.c: Include <bp-sym.h>
(__memchr): Add casts for integer arithmetic on pointers.
2010-09-23 Richard Henderson <rth@redhat.com>
[BZ #12019]
* sysdeps/alpha/alphaev6/memchr.S: Remove.
* sysdeps/alpha/memchr.S: Remove.
* sysdeps/alpha/memchr.c: New.
2010-09-23 Richard Henderson <rth@redhat.com>
[BZ #1864]
* sysdeps/unix/sysv/linux/alpha/fstatfs64.c: New.
* sysdeps/unix/sysv/linux/alpha/fstatvfs.c: New.
* sysdeps/unix/sysv/linux/alpha/fstatvfs64.c: New.
* sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c: New.
* sysdeps/unix/sysv/linux/alpha/statfs64.c: New.
* sysdeps/unix/sysv/linux/alpha/statvfs.c: New.
* sysdeps/unix/sysv/linux/alpha/statvfs64.c: New.
* sysdeps/unix/sysv/linux/alpha/syscalls.list (fstatfs, statfs):
Define without 64-bit aliases.
2010-05-03 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/alpha/memchr.S: Use prefetch load.
* sysdeps/alpha/alphaev6/memchr.S: Likewise.
2010-05-03 Aurelien Jarno <aurelien@aurel32.net>
[BZ #6827]
* sysdeps/alpha/dl-machine.h: Add dl-procinfo support.
* sysdeps/alpha/dl-procinfo.c: New.
* sysdeps/alpha/dl-procinfo.h: New.
2010-05-03 Aurelien Jarno <aurelien@aurel32.net>
[BZ #5350]
* sysdeps/alpha/fpu/s_ceil.c: Fix corner cases.
* sysdeps/alpha/fpu/s_ceilf.c: Likewise.
* sysdeps/alpha/fpu/s_floor.c: Likewise.
* sysdeps/alpha/fpu/s_floorf.c: Likewise.
* sysdeps/alpha/fpu/s_rint.c: Likewise.
* sysdeps/alpha/fpu/s_rintf.c: Likewise.
2010-05-03 GOTO Masanori <gotom@debian.or.jp>
[BZ #1026]
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: Define
__ASSUME_STAT64_SYSCALL.
* sysdeps/unix/sysv/linux/alpha/fxstat.c: Check
__ASSUME_STAT64_SYSCALL.
* sysdeps/unix/sysv/linux/alpha/fxstatat.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/lxstat.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xstat.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xstatconv.c: Don't define
__libc_missing_axp_stat64 when it's not needed.
* sysdeps/unix/sysv/linux/alpha/xstatconv.h: Likewise.
2010-03-30 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/bits/socket.h (MSG_WAITFORONE): New.
2010-03-30 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: New.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S: New.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/Versions: Update errlist-compat
for GLIBC_2.12.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/alpha/fpu/fegetenv.c: Add hidden alias.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/dl-auxv.h (__libc_alpha_cache_shape):
Define extern here; move definition...
* sysdeps/unix/sysv/linux/alpha/dl-sysdep.c: ... here.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/sys/user.h: Don't include asm/page.h.
(PAGE_SHIFT, PAGE_SIZE, PAGE_MASK): Define.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (F_SETOWN_EX,
F_GETOWN_EX, F_OWNER_TID, F_OWNER_PID, F_OWNER_PGRP,
F_OWNER_GID, struct f_owner_ex): Define.
(F_SETOWN, F_GETOWN): Define with XPG7.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/alpha/sysdep.h (PTR_MANGLE): Define for !PIC too.
(PTR_DEMANGLE): Likewise.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/unix/alpha/sysdep.h (INTERNAL_SYSCALL_ERROR_P,
INTERNAL_SYSCALL_ERRNO): "Use" the "other" variable in each macro.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdep/unix/sysv/linux/alpha/creat.c: New.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdep/alpha/elf/configure.in (libc_cv_alpha_hidden_gprel)
Adjust the test for gcc 4.5.
* sysdep/alpha/elf/configure: Rebuild.
2010-03-26 Richard Henderson <rth@redhat.com>
* sysdeps/alpha/bits/atomic.h (__arch_exchange_8_int,
__arch_exchange_16_int, __arch_exchange_32_int,
__arch_exchange_64_int, __arch_exchange_and_add_32_int,
__arch_exchange_and_add_64_int): Use __typeof to get the
return type correct without warning.
2010-03-23 Matt Turner <mattst88@gmail.com>
Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/unix/sysv/linux/alpha/bits/socket.h: New file.
2010-01-12 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Fix double-inclusion
problem.
2010-01-12 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Define
SA_RESTART, SA_NODEFER and SA_RESETHAND if __USE_XOPEN2K8.
2010-01-12 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Define O_DIRECTORY,
O_NOFOLLOW, O_CLOEXEC, F_DUPFD_CLOEXEC, F_SETOWN, and F_GETOWN for
XPG7.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Enable using from
fcntl.h.
2010-01-12 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Redefine O_SYNC and
O_DSYNC to match 2.6.33+ kernels.
2009-12-02 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/alpha/nptl/timer_settime.c: Fix typo in
include timer_gettime.c -> timer_settime.c.
2009-11-23 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Use struct timespec
for timestamps also if __USE_XOPEN2K8.
2009-11-23 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Change misleading
names of parameters of sync_file_range.
2009-11-23 Matt Turner <mattst88@gmail.com>
[BZ #10972]
* sysdeps/unix/sysv/linux/alpha/bits/mman.h: Add new MADV_*
constants from recent kernels.
2009-11-10 Matt Turner <mattst88@gmail.com>
[BZ #10609]
* sysdeps/unix/sysv/linux/alpha/fxstatat.c (__fxstatat): Fix handling
of empty parameters for file names.
2009-07-13 Aurelien Jarno <aurelien@aurel32.net>
[BZ #10158]
* sysdeps/unix/sysv/linux/alpha/getsysstats.c (GET_NPROCS_PARSER):
Change parameters and use next_line.
[BZ #10160]
* sysdeps/unix/sysv/linux/alpha/nptl/lowlevellock.h: Define
FUTEX_WAIT_BITSET, FUTEX_WAKE_BITSET, FUTEX_CLOCK_REALTIME and
FUTEX_BITSET_MATCH_ANY.
[BZ #10161]
* sysdeps/unix/sysv/linux/alpha/getdents64.c: Adjust include path.
* sysdeps/unix/sysv/linux/alpha/nptl/fork.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/sem_post.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/timer_create.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/timer_delete.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/timer_getoverr.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/timer_gettime.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/timer_settime.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/sysconf.c: Likewise.
[BZ #6507]
* sysdeps/unix/sysv/linux/alpha/sys/procfs.h (ELF_NGREG,
ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t,
elf_fpregset_t): Define. Don't include asm/elf.h.
2008-11-26 Roland McGrath <roland@redhat.com>
* sysdeps/unix/sysv/linux/alpha/wordexp.c: Contents moved to main
repository's ia64 file; #include that.
* sysdeps/unix/sysv/linux/alpha/ipc_priv.h: Contents moved to main
repository's powerpc file; #include that.
2008-11-25 Roland McGrath <roland@redhat.com>
* ChangeLog.alpha: New file (this one).
* sysdeps/alpha, sysdeps/unix/bsd/osf/alpha,
sysdeps/unix/bsd/Attic/osf1/alpha, sysdeps/unix/sysv/linux/alpha,
sysdeps/unix/sysv/linux/alpha/alpha, sysdeps/unix/alpha,
sysdeps/mach/alpha, sysdeps/mach/hurd/alpha:
Subdirectories moved here from main repository.
* sysdeps/alpha/nptl, sysdeps/unix/sysv/linux/alpha/nptl:
Subdirectories moved here from main repository's nptl/ subdirectory.
* sysdeps/alpha/preconfigure: New file.
* sysdeps/alpha/shlib-versions: New file.
Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
End:

260
ports/ChangeLog.am33 Normal file
View File

@ -0,0 +1,260 @@
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2011-10-05 Andreas Schwab <schwab@redhat.com>
* sysdeps/am33/dl-machine.h (elf_machine_rela)
(elf_machine_lazy_rel): Add parameter skip_ifunc.
2007-10-22 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
2007-07-10 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: Comment fix.
2006-01-12 Roland McGrath <roland@redhat.com>
* sysdeps/am33/jmpbuf-unwind.h: Include <jmpbuf-offsets.h>.
2006-01-10 Roland McGrath <roland@redhat.com>
* sysdeps/am33/bits/setjmp.h (__JMP_BUF_SP): Macro moved ...
* sysdeps/am33/jmpbuf-offsets.h: ... here, new file.
* sysdeps/am33/bits/setjmp.h (_JMPBUF_UNWINDS, __JMP_BUF_SP):
Move macros ...
* sysdeps/am33/jmpbuf-unwind.h: ... here, new file.
2005-12-27 Roland McGrath <roland@redhat.com>
* sysdeps/am33/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument
DEMANGLE, and pass SP value through it.
2004-10-25 Alexandre Oliva <aoliva@redhat.com>
* ChangeLog.am33: Added emacs local variables for mode setting and
default changelog name.
* sysdeps/unix/sysv/linux/linuxthreads/sysdep-cancel.h: Moved...
* sysdeps/unix/sysv/linux/am33/linuxthreads/sysdep-cancel.h:
... here, where it should have been added in the first place.
2004-10-22 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/bits/mman.h (PROT_GROWSDOWN): New.
(PROT_GROWSUP): New.
2004-08-16 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/shlib-versions: Moved from top level.
2004-08-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/preconfigure: Renamed from configure.
* Makefile: Removed.
2004-07-20 Alexandre Oliva <aoliva@redhat.com>
Moved from separate linuxthreads tree into am33/linuxthreads
subdirs:
2004-07-01 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/linuxthreads/sysdep-cancel.h
(PSEUDO): Save value returned by CENABLE and pass it to CDISABLE.
* sysdeps/am33/linuxthreads/pt-machine.h (testandset): Take
volatile argument. Improve asm statement.
2001-10-31 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/linuxthreads/pspinlock.c: New file.
* sysdeps/am33/linuxthreads/pt-machine.h: New file.
2004-07-19 Alexandre Oliva <aoliva@redhat.com>
* configure: New.
* mach.sh: Removed.
* sysdeps/am33/Makefile: Likewise.
2004-06-28 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/Makefile: New file.
* sysdeps/unix/sysv/linux/am33/configure.in: New file.
* sysdeps/unix/sysv/linux/am33/configure: New file.
* mach.sh: New file.
2004-06-19 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/fpu/bits/fenv.h: New file.
* sysdeps/am33/fpu/fpu_control.h: New file.
* sysdeps/am33/fpu/fenv_libc.h: New file.
* sysdeps/am33/fpu/fclrexcpt.c: New file.
* sysdeps/am33/fpu/fedisblxcpt.c: New file.
* sysdeps/am33/fpu/feenablxcpt.c: New file.
* sysdeps/am33/fpu/fegetenv.c: New file.
* sysdeps/am33/fpu/fegetexcept.c: New file.
* sysdeps/am33/fpu/fegetround.c: New file.
* sysdeps/am33/fpu/feholdexcpt.c: New file.
* sysdeps/am33/fpu/fesetenv.c: New file.
* sysdeps/am33/fpu/fesetround.c: New file.
* sysdeps/am33/fpu/feupdateenv.c: New file.
* sysdeps/am33/fpu/fgetexcptflg.c: New file.
* sysdeps/am33/fpu/fraiseexcpt.c: New file.
* sysdeps/am33/fpu/fsetexcptflg.c: New file.
* sysdeps/am33/fpu/ftestexcept.c: New file.
* sysdeps/unix/am33/sysdep.h: Use relative pathnames.
* sysdeps/unix/sysv/linux/am33/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/am33/sysdep.S: Likewise.
* configure, Makefile: Do nothing.
2004-06-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/bsd-setjmp.S: Move into...
* sysdeps/am33/setjmp.S: ... this file.
* sysdeps/am33/bsd-_setjmp.S: Likewise.
* sysdeps/am33/dl-machine.h (_dl_start_user): Do not do double
indirection to obtain _dl_loaded.
(elf_machine_rela_relative): Do not add addend.
2004-06-08 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/sysdep.h (JUMPTARGET): Undef before redefining.
* sysdeps/unix/sysv/linux/am33/sysdep.h (PSEUDO_NOERROR,
PSEUDO_END_NOERROR, ret_NOERROR, PSEUDO_ERRVAL, PSEUDO_END_ERRVAL,
ret_ERRVAL, INTERNAL_SYSCALL, INTERNAL_SYSCALL_DECL,
INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New.
(INLINE_SYSCALL): Rewrite in terms of INTERNAL_SYSCALL macros.
(DO_CALL): Reorder arguments.
* sysdeps/am33/dl-machine.h (elf_machine_rela): Update prototype.
2003-05-16 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/Makefile: New file.
* sysdeps/unix/sysv/linux/am33/sysdep.h (INLINE_SYSCALL1): Drop
comma before args when calling inline_syscall0.
* sysdeps/unix/sysv/linux/am33/chown.c: New file.
* sysdeps/unix/sysv/linux/am33/fchown.c: New file.
* sysdeps/unix/sysv/linux/am33/fxstat.c: New file.
* sysdeps/unix/sysv/linux/am33/getegid.c: New file.
* sysdeps/unix/sysv/linux/am33/geteuid.c: New file.
* sysdeps/unix/sysv/linux/am33/getgid.c: New file.
* sysdeps/unix/sysv/linux/am33/getrlimit.c: New file.
* sysdeps/unix/sysv/linux/am33/getuid.c: New file.
* sysdeps/unix/sysv/linux/am33/lchown.c: New file.
* sysdeps/unix/sysv/linux/am33/lockf64.c: New file.
* sysdeps/unix/sysv/linux/am33/lxstat.c: New file.
* sysdeps/unix/sysv/linux/am33/setegid.c: New file.
* sysdeps/unix/sysv/linux/am33/seteuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setfsgid.c: New file.
* sysdeps/unix/sysv/linux/am33/setfsuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setgid.c: New file.
* sysdeps/unix/sysv/linux/am33/setregid.c: New file.
* sysdeps/unix/sysv/linux/am33/setresgid.c: New file.
* sysdeps/unix/sysv/linux/am33/setresuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setreuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setrlimit.c: New file.
* sysdeps/unix/sysv/linux/am33/setuid.c: New file.
* sysdeps/unix/sysv/linux/am33/xstat.c: New file.
* sysdeps/unix/sysv/linux/am33/syscalls.list: Removed, reverting
2003-03-26's patch.
* sysdeps/unix/sysv/linux/am33/getresgid.c: New file.
* sysdeps/unix/sysv/linux/am33/getresuid.c: New file.
2003-05-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/getgroups.c: New file.
* sysdeps/unix/sysv/linux/am33/setgroups.c: New file.
2003-05-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/getmsg.c: New file.
* sysdeps/unix/sysv/linux/am33/putmsg.c: New file.
2003-03-26 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/syscalls.list: Added getresuid and
getresgid.
2003-01-17 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/fcntl.c: New file.
2002-02-08 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/sys/ucontext.h (fpregset_t): Make it a structure.
2002-01-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/sys/ucontext.h (NFREG): Increment by 1, to make
room for FPCR.
2001-12-13 Alexandre Oliva <aoliva@redhat.com>
* shlib-versions: Set GLIBC_2.2.5 as the earliest symbol set.
2001-12-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/__longjmp.S: Tabify.
* sysdeps/am33/setjmp.S: Likewise.
* sysdeps/am33/dl-debug.h: Remove.
* sysdeps/am33/dl-machine.h: Delete commented-out uses of
macros defined in dl-debug.
(elf_machine_rela): Optimize if HAVE_Z_COMBRELOC. Fix
prediction of R_MN10300_NONE. Don't test for impossible
condition.
* sysdeps/am33/sysdep.h (ASM_TYPE_DIRECTIVE,
ASM_SIZE_DIRECTIVE): Define to nothing if ! HAVE_ELF.
2001-11-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/clone.S: Avoid branch overflow in
static link.
2001-11-08 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/clone.S: Load arguments correctly
for syscall.
2001-11-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/clone.S: Fix argument-passing
to thread_start.
2001-10-31 Alexandre Oliva <aoliva@redhat.com>
* shlib-versions: Added am33_2.0 support.
* sysdeps/am33/Implies: New file.
* sysdeps/am33/__longjmp.S: New file.
* sysdeps/am33/atomicity.h: New file.
* sysdeps/am33/bsd-_setjmp.S: New file.
* sysdeps/am33/bsd-setjmp.S: New file.
* sysdeps/am33/dl-debug.h: New file.
* sysdeps/am33/dl-machine.h: New file.
* sysdeps/am33/memusage.h: New file.
* sysdeps/am33/setjmp.S: New file.
* sysdeps/am33/stackinfo.h: New file.
* sysdeps/am33/sysdep.h: New file.
* sysdeps/am33/bits/endian.h: New file.
* sysdeps/am33/bits/setjmp.h: New file.
* sysdeps/am33/elf/start.S: New file.
* sysdeps/am33/sys/ucontext.h: New file.
* sysdeps/unix/am33/sysdep.S: New file.
* sysdeps/unix/am33/sysdep.h: New file.
* sysdeps/unix/sysv/linux/am33/brk.c: New file.
* sysdeps/unix/sysv/linux/am33/clone.S: New file.
* sysdeps/unix/sysv/linux/am33/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/am33/socket.S: New file.
* sysdeps/unix/sysv/linux/am33/syscall.S: New file.
* sysdeps/unix/sysv/linux/am33/sysdep.S: New file.
* sysdeps/unix/sysv/linux/am33/sysdep.h: New file.
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/am33/bits/mman.h: New file.
Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
change-log-default-name: "ChangeLog.am33"
End:

2010
ports/ChangeLog.arm Normal file

File diff suppressed because it is too large Load Diff

33
ports/ChangeLog.cris Normal file
View File

@ -0,0 +1,33 @@
2012-02-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/cris: Remove.
* sysdeps/unix/sysv/linux/cris: Likewise.
2011-10-05 Andreas Schwab <schwab@redhat.com>
* sysdeps/cris/dl-machine.h (elf_machine_rela)
(elf_machine_lazy_rel): Add parameter skip_ifunc.
2007-10-22 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/cris/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
2007-07-10 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/cris/bits/fcntl.h: Comment fix.
2005-12-27 Roland McGrath <roland@redhat.com>
* sysdeps/cris/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument
DEMANGLE, and pass SP value through it.
2004-10-25 Roland McGrath <roland@frob.com>
* sysdeps/cris/configure.in: New file, with test moved out of main
libc configure.in file.
* sysdeps/cris/configure: New generated file.
2004-10-23 Roland McGrath <roland@frob.com>
* sysdeps/cris, sysdeps/unix/sysv/linux/cris: Moved here from main
libc source tree.

877
ports/ChangeLog.hppa Normal file
View File

@ -0,0 +1,877 @@
2012-05-19 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/add_n.s: Rename this...
* sysdeps/hppa/add_n.S: ... to this.
* sysdeps/hppa/hppa1.1/addmul_1.s: Rename this...
* sysdeps/hppa/hppa1.1/addmul_1.S: ... to this.
* sysdeps/hppa/hppa1.1/mul_1.s: Rename this...
* sysdeps/hppa/hppa1.1/mul_1.S ... to this.
* sysdeps/hppa/hppa1.1/submul_1.s: Rename this...
* sysdeps/hppa/hppa1.1/submul_1.S: ... to this.
* sysdeps/hppa/hppa1.1/udiv_qrnnd.s: Rname this...
* sysdeps/hppa/hppa1.1/udiv_qrnnd.S: ... to this.
* sysdeps/hppa/lshift.s: Rename this...
* sysdeps/hppa/lshift.S: ... to this.
* sysdeps/hppa/rshift.s: Rename this...
* sysdeps/hppa/rshift.S: ... to this.
* sysdeps/hppa/sub_n.s: Rename this...
* sysdeps/hppa/sub_n.S: ... to this.
* sysdeps/hppa/udiv_qrnnd.s: Rename this...
* sysdeps/hppa/udiv_qrnnd.S: ... to this.
2012-05-17 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/hppa/libgcc_s.h: Remove.
* sysdeps/hppa/shlib-versions: Add libgcc_s.
2012-04-17 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-irel.h: New file.
2012-04-17 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-fptr.h: Add prototype for _dl_fptr_init.
* sysdeps/hppa/dl-fptr.c: New file.
* sysdeps/hppa/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
Call _dl_fptr_init.
2012-04-17 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/elf/configure: Removed file.
* sysdeps/hppa/elf/configure.in: Move to...
* sysdeps/hppa/configure.in: ... here.
* sysdeps/hppa/configure: Regenerate.
* sysdeps/hppa/elf/initfini.c: Removed file.
* sysdeps/hppa/crti.S: New file.
* sysdeps/hppa/crtn.S: New file.
* sysdeps/hppa/elf/entry.h: Moved to ...
* sysdeps/hppa/entry.h: ... here.
* sysdeps/hppa/elf/start.S: Move to ...
* sysdeps/hppa/start.S: ... here.
2012-03-22 Carlos O'Donell <carlos@systemhalted.org>
[BZ #6730]
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Don't negate %r21 and
check for -EFAULT and -ENOSYS instead.
2012-03-09 Richard Henderson <rth@twiddle.net>
* sysdeps/hppa/hppa1.1/s_signbit.c: Use <> to include math_private.h.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-03-03 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h: Name
pthread_attr_t union.
* sysdeps/unix/sysv/linux/hppa/nptl/pthread.h: Sync from libc copy.
* sysdeps/unix/sysv/linux/hppa/bits/socket.h: Likewise.
2012-01-08 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/sys/epoll.h (EPOLLONESHOT)
(EPOLLET): Initialize with unsiged values.
2012-01-08 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/pthread.h: Sync from libc copy.
2012-01-08 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/sys/epoll.h: Use const instead of __const.
* sysdeps/unix/sysv/linux/hppa/sys/timerfd.h: Likewise.
2011-10-21 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/sys/procfs.h: Update copyright year.
Do not include signal.h and sys/ucontext.h.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h: Update copyright
year.
(PSEUDO): Define __*_nocancel version. Add CFI directives to __*_nocancel
and normal version.
(PUSHARGS_1): Add CFI directive.
(PUSHARGS_2): Likewise.
(PUSHARGS_3): Likewise.
(PUSHARGS_4): Likewise.
(PUSHARGS_5): Likewise.
(PUSHARGS_6): Likewise.
(POPARGS_1): Likewise.
(POPARGS_2): Likewise.
(POPARGS_3): Likewise.
(POPARGS_4): Likewise.
(POPARGS_5): Likewise.
(POPARGS_6): Likewise.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/linuxthreads/aio_cancel.c: Remove.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/bits/initspin.h: Remove.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/bits/pthreadtypes.h: Remove.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/malloc-machine.h: Remove.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/pt-initfini.c: Remove.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h: Remove.
* sysdeps/hppa/linuxthreads/pspinlock.c: Remove.
* sysdeps/hppa/linuxthreads/pt-machine.h: Remove.
* sysdeps/hppa/linuxthreads/tls.h: Remove.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/stackinfo.h: Update copyright year.
Include elf.h and define DEFAULT_STACK_PERMS.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Synchronize
with canonical fcntl.h.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/fpu/fegetenv.c: Add hidden alias.
* sysdeps/hppa/fpu/feupdateenv.c: Likewise.
* sysdeps/hppa/fpu/ftestexcept.c: Likewise.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-tls.h: Update copyright year.
Define TLS_DTV_UNALLOCATED.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/elf/configure.in: Always test for TLS support
and error out if missing.
* sysdeps/hppa/elf/configure: Regenerate.
* sysdeps/hppa/configure: Regenerate.
2011-10-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/tls.h: Update copyright year.
Remove HAVE_TLS_SUPPORT check.
2011-10-17 Guy Martin <gmsoft@tuxicoman.be>
* sysdeps/unix/sysv/linux/hppa/sys/epoll.h
Fix EPOLL_CLOEXEC and EPOLL_NONBLOCK to match kernel definition.
* sysdeps/unix/sysv/linux/hppa/sys/eventfd.h
Fix EFD_CLOEXEC and EFD_NONBLOCK to match kernel definition.
* sysdeps/unix/sysv/linux/hppa/sys/inotify.h
Fix IN_CLOEXEC and IN_NONBLOCK to match kernel definition.
* sysdeps/unix/sysv/linux/hppa/sys/signalfd.h
Fix SFD_CLOEXEC and SFD_NONBLOCK to match kernel definition.
* sysdeps/unix/sysv/linux/hppa/sys/timerfd.h
Fix TFD_CLOEXEC and TFD_NONBLOCK to match kernel definition.
2011-10-05 Andreas Schwab <schwab@redhat.com>
* sysdeps/hppa/dl-machine.h (elf_machine_rela)
(elf_machine_lazy_rel): Add parameter skip_ifunc.
2010-06-24 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S: Only create stack
frame around call to SYSCALL_ERROR_HANDLER. Do not restore %rp
from the stack frame on successfull return.
2010-06-23 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/getcontext.S (__getcontext_ret):
Document that this function is a non-standard calling ABI.
Document register usage.
(__getcontext): Use normal %sp without adjustment. Use named
resgister %sp.
* sysdeps/unix/sysv/linux/hppa/makecontext.c: Remove FRAME_SIZE.
Define FRAME_SIZE_UL, FRAME_SIZE_BYTES, ARGS.
(__makecontext): Create and setup a stack frame.
* sysdeps/unix/sysv/linux/hppa/setcontext.S (__setcontext):
Use named register %sp. Do not use oSS_SP.
2010-06-07 Andreas Schwab <schwab@redhat.com>
* sysdeps/unix/sysv/linux/hppa/nptl/pthread.h: Update to agree
with generic file.
2010-03-30 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/socket.h: Define
MSG_WAITFORONE.
2010-02-17 Matt Turner <mattst88@gmail.com>
* sysdeps/unix/sysv/linux/hppa/bits/socket.h: Actually fix
SOCK_CLOEXEC to match O_CLOEXEC.
2010-02-02 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/mman.h: Define
MADV_MERGEABLE and MADV_UNMERGEABLE.
2010-02-02 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/hppa/nptl/tls.h (__set_cr27): Clobber
link register r31.
2010-02-02 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/makecontext.c (__makecontext):
Support more than 8 arguments.
2010-02-01 Kyle McMartin <kyle@redhat.com>
* sysdeps/unix/sysv/linux/hppa/bits/socket.h: Fix value of
SOCK_CLOEXEC to match O_CLOEXEC.
2010-02-01 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/Versions: Bump
errlist-compat to 257 for GLIBC_2.12.
* sysdeps/unix/sysv/linux/hppa/bits/errno.h
(EOWNERDEAD): Define if not already defined.
(ENOTRECOVERABLE): Likewise.
(ERFKILL): Likewise.
2009-11-29 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h:
Rearrange file to reduce future maintenance.
[__USE_GNU]: Update F_GETOWN_EX, and F_SETOWN_EX.
Define f_owner_ex an __pid_type.
2009-11-25 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h:
Use correct alignment for pthread_mutex_t, pthread_cond_t,
and pthread_rwlock_t.
2009-11-22 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Avoid warnings
by casting oldval to int.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
[BZ #6676]
* sysdeps/unix/sysv/linux/hppa/socket.h: Move from here...
* sysdeps/unix/sysv/linux/hppa/bits/socket.h: ... to here.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/Versions (libc): Add
fallocate64@@GLIBC_2.11.
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
[__USE_GNU]: Define F_GETOWN_EX, and F_SETOWN_EX.
[!__USE_FILE_OFFSET64]: Define fallocate.
[__USE_FILE_OFFSET64 && __REDIRECT]: Define __REDIRECT.
[__USE_FILE_OFFSET64 && !__REDIRECT]: Define fallocate as
fallocate64.
[__USE_LARGEFILE64]: define fallocate64.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/hppa/dl-fptr.h: Update copyright year.
Reduce ELF_MACHINE_BOOT_FPTR_TABLE_LEN to 64.
Implement ELF_MACHINE_LOAD_ADDRESS using PC relative loads.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:
Remove FUTEX_WAITERS, FUTEX_OWNER_DIED, and FUTEX_TID_MASK.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
Aurelian Jarno <aurelien@aurel32.net>
[BZ #10527]
* sysdeps/unix/sysv/linux/hppa/socket.h: New file.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
[BZ #6676]
* sysdeps/hppa/elf/start.S: Use R_PARISC_DLTIND* relocations
to support -fPIE.
2009-11-08 Carlos O'Donell <carlos@codesourcery.com>
[BZ #10920]
* sysdeps/hppa/libgcc_s.h: New file.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c: Remove.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-resume.c: Remove.
2009-09-08 Carlos O'Donell <carlos@codesourcery.com>
sysdeps/unix/sysv/linux/hppa/
* internaltypes.h: New file.
sysdeps/unix/sysv/linux/hppa/nptl/
* pthreadP.h: New file.
* pthread.h: New file.
* pthread_cond_broadcast.c: New file.
* pthread_cond_destroy.c: New file.
* pthread_cond_init.c: New file.
* pthread_cond_signal.c: New file.
* pthread_cond_timedwait.c: New file.
* pthread_cond_wait.c: New file.
* bits/pthreadtypes.h: Make pthread_mutex_t,
pthread_rwlock_t, and pthread_cond_t backwards
compatible.
2009-04-24 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/hppa/hppa1.1/s_signbit.c: New file.
2009-04-23 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/hppa/dl-machine.h: Remove VALID_ELF_OSABI,
VALID_ELF_ABIVERSION, and VALID_ELF_HEADER.
2009-04-23 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Do not include
sysdep.h. Document the reason for other includes.
2009-04-23 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/sysdep.h [!__ASSEMBLER__]:
Include errno.h.
2009-02-25 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h:
Adjust comment. Sort macros alphabetically. Remove old
lock comments.
2009-02-25 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c:
Update from nptl/sysdeps/pthread/unwind-forcedunwind.c
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-resume.c:
Update from nptl/sysdeps/pthread/unwind-resume.c
2009-02-25 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h: Define
FUTEX_WAIT_BITSET, FUTEX_WAKE_BITSET, FUTEX_CLOCK_REALTIME,
and FUTEX_BITSET_MATCH_ANY.
2009-02-22 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/Versions: Add missing bracket.
2009-02-22 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/hppa/dl-machine.h: Use _dl_runtime_profile.
2009-02-13 Khem Raj <raj.khem@gmail.com>
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c
(libgcc_s_handle): New variable.
(pthread_cancel_init): Depend in libgcc_s_handle for decision to
load DSO. Assign last.
(__unwind_freeres): New function.
2009-02-09 Arthur Loiret <aloiret@debian.org>
[BZ #9717]
* sysdeps/unix/sysv/linux/hppa/linuxthreads/malloc-machine.h
(MALLOC): Adjust __libc_tsd_define arguments.
(tsd_setspecific, tsd_getspecific): Adjust __libc_tsd_{set,get}
arguments.
2008-08-07 Helge Deller <deller@gmx.de>
* sysdeps/unix/sysv/linux/hppa/ucontext_i.sym: New file.
* sysdeps/unix/sysv/linux/hppa/Makefile: New file.
* sysdeps/unix/sysv/linux/hppa/getcontext.S: New file.
* sysdeps/unix/sysv/linux/hppa/makecontext.c: New file.
* sysdeps/unix/sysv/linux/hppa/setcontext.S: New file.
* sysdeps/unix/sysv/linux/hppa/swapcontext.c: New file.
2008-06-17 Aurelian Jarno <aurelien@aurel32.net>
Carlos O'Donell <carlos@systemhalted.org>
[BZ #6037]
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Check for -11
(-EAGAIN) instead of 11. Loop again when the kernel
returns -45 (-EDEADLOCK). Add back memory clobber.
Do not initialize lws_ret and lws_errno.
2008-06-17 Guy Martin <gmsoft@tuxicoman.be>
[BZ #5957]
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:
Use shared futex in lll_wait_tid().
2008-05-12 Aurelien Jarno <aurelien@aurel32.net>
[BZ #6506]
* sysdeps/hppa/fpu/fesetenv.c: bufptr is always read, temp is
read while writing back status word.
2008-04-21 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/shm.h: Fix comment describing
shmid_ds.
2008-04-04 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Remove
memory contraint and instead indicate that *mem is
written to.
2008-03-24 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/sys/user.h: New file.
2008-03-14 Carlos O'Donell <carlos@codesourcery.com>
Guy Martin <gmsoft@tuxicoman.be>
[BZ #5923]
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h: Pass
timespec and futexp.
2008-02-22 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/Makefile: Remove.
* sysdeps/hppa/nptl/Makefile: Set tst-oddstacklimit-ENV.
2007-12-05 Jeff Bailey <jeffbailey@google.com>
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h
(__lll_unlock): Use define instead of inline function.
(__lll_robust_unlock): Likewise.
2007-10-22 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
2007-10-18 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c
(__lll_lock_wait): Add private argument. Pass private
to lll_futex_wait. Use atomic_compare_and_exchange_val_acq.
(__lll_lock_wait_private): New function.
(__lll_timedlock_wait): Add private argument. Pass private
to lll_futex_timed_wait.
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:
Include kernel-features.h and tls.h.
(FUTEX_WAITERS): Define.
(FUTEX_OWNER_DIED): Define.
(FUTEX_TID_MASK): Define.
(__lll_private_flag): Define.
(lll_futex_timed_wait): Use __lll_private_flag.
(lll_futex_wake): Use __lll_private_flag.
(lll_futex_requeue): Use __lll_private_flag.
(lll_robust_mutex_dead): Rename to...
(lll_robust_dead): ... this. Add private argument. Pass private
to lll_futex_wake.
(lll_futex_wake_unlock): Use __lll_private_flag.
(__lll_mutex_trylock): Remove.
(lll_mutex_tryock): Remove.
(__lll_robust_mutex_trylock): Rename to...
(__lll_robust_trylock): ... this.
(lll_robust_mutex_trylock): Rename to...
(lll_robust_trylock): ... this. Call __lll_robust_trylock.
(__lll_mutex_cond_trylock): Rename to...
(__lll_cond_trylock): ... this.
(lll_mutex_cond_trylock): Rename to...
(lll_cond_trylock): ... this. Call __lll_cond_trylock.
(__lll_mutex_lock): Add private argument.
(__lll_robust_mutex_lock): Remove.
(lll_mutex_lock): Define.
(__lll_robust_lock): Define.
(lll_robust_mutex_lock): Remove.
(__lll_mutex_cond_lock): Remove.
(lll_robust_lock) Define.
(lll_robust_cond_lock): Define.
(lll_robust_mutex_cond_lock): Remove.
(__lll_cond_lock): Define.
(lll_cond_lock): Define.
(__lll_mutex_timedlock): Remove.
(__lll_timedlock): Define.
(lll_timedlock): Define.
(lll_robust_mutex_timedlock): Remove.
(lll_robust_timedlock): Define.
(__lll_mutex_unlock): Remove.
(__lll_unlock): Define.
(__lll_robust_mutex_unlock): Remove.
(__lll_robust_unlock): Define.
(lll_robust_mutex_unlock): Remove.
(lll_robust_unlock): Define.
(__lll_mutex_unlock_force): Remove.
(lll_mutex_unlock_force): Remove.
(lll_islocked): Remove.
(lll_mutex_islocked): Rename to...
(lll_islocked): ... this.
(lll_trylock): Remove.
(lll_unlock): Remove.
(lll_wait_tid): Format whitespace.
(lll_cond_wait): Remove.
(lll_cond_timedwait): Remove.
(lll_cond_wake): Remove.
(lll_cond_broadcast): Remove.
2007-10-17 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Correct return value
type and __THROW marker of splice, vmsplice, and tee.
2007-09-24 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/tls.h: Fix comment.
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Fix comment format.
[__USE_GNU] (O_CLOEXEC): Define.
* sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h: Issue error
if the library is unsupported.
[ASSEMBLER && IS_IN_librt]: Define CENABLE, CDISABLE, and
__local_multiple_threads.
2007-08-03 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h:
(__local_multiple_threads): Declare as hidden only in libc and
in libpthread.
2007-07-28 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h: Remove.
* sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h
(pthread_rwlock_t): Split __flags into __pad2, __pad1, __shared,
and __flags. Update comments. Update copyright.
* sysdeps/hppa/nptl/tls.h: Define THREAD_GSCOPE_FLAG_UNUSED,
THREAD_GSCOPE_FLAG_USED, THREAD_GSOPE_FLAG_WAIT,
THREAD_GSCOPE_RSEET_FLAG, THREAD_GSCOPE_SET_FLAG, THREAD_GSCOPE_WAIT.
Update copyright.
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c: Update copyright.
(__lll_lock_wait): Call lll_futex_wait with LLL_SHARED.
(__lll_timedlock_wait): Call lll_futex_timed_wait with LLL_SHARED.
(lll_unlock_Wake_cb): Use lll_private_futex_wake.
(___lll_timedwait_tid): Call lll_futex_timed_wait with LLL_SAHRED.
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h: Define
FUTEX_PRIVATE_FLAG, LLL_PRIVATE, LLL_SHARED, lll_private_futex_wait,
lll_private_futex_timed_wait, lll_private_Futex_wake. Add private
argument to lll_futex_wait, lll_futex_timed_wait, lll_futex_wake,
lll_futex_wake_unlock.
* sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c: Update copyright.
(clear_once_control): Use lll_private_futex_wake.
(__pthread_once): Use lll_private_futex_wait, and
lll_private_futex_wake.
2007-07-28 Randolph Chung <tausq@debian.org>
* sysdeps/hppa/nptl/tls.h (DB_THREAD_SELF): Fix definition.
2007-06-16 Jeff Bailey <jbailey@raspberryginger.com>
* sysdeps/unix/sysv/linux/hppa/sys/procfs.h: Don't
include asm/elf.h. Declare elf_greg_t, elf_gregset_t,
elf_fpreg_t, and elf_fpregset_t.
2007-06-16 Jeff Bailey <jbailey@raspberryginger.com>
* sysdeps/unix/sysv/linux/hppa/nptl/configure.in: Require
at least kernel 2.6.9.
* sysdeps/unix/sysv/linux/hppa/nptl/configure: Rebuilt.
2007-05-17 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/bits/semaphore.h
(SEM_VALUE_MAX): Remove.
2007-05-17 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/sysdep.h (PIC_REG_DEF): Define.
(PIC_REG_USE): Define.
(INLINE_SYSCALL): Use PIC_REG_DEF, PIC_REG_USE.
(INTERNAL_SYSCALL): Likewise.
(INTERNAL_SYSCALL_NCS): Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep.c (syscall): Use
PIC_REG_DEF, PIC_REG_USE.
2007-05-01 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/linuxthreads/bits/pthreadtypes.h
[__USE_XOPEN2K]: Define pthread_rwlock_t and
pthread_rwlockattr_t.
2007-02-02 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/sysdep.h (PTR_MANGLE): Define.
(PTR_DEMANGLE): Define.
2007-02-02 Guy Martin <gmsoft@tuxicoman.be>
* sysdeps/hppa/dl-trampoline.S (_dl_runtime_profile):
Add cfi_endproc.
2006-12-03 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Remove non-atomic
versions. Adjust jump target to '0b'.
2006-12-03 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/Makefile: Set long-double-fcts to `no'.
* sysdeps/hppa/fpu/libm-test-ulps: Regenerate.
* sysdeps/hppa/fpu/bits/mathdef.h: New file.
2006-11-10 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/pthread_spin_init.c: New file.
* sysdeps/hppa/nptl/pthread_spin_unlock.c: Remove strong alias
to pthread_spin_init.
* sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h: Define
RTLD_SINGLE_THREAD_P.
2006-09-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (splice): Add offin
and offout arguments to the prototype.
2006-09-15 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/tcb-offsets.sym: Define TID_THREAD_OFFSET.
* sysdeps/unix/sysv/linux/hppa/clone.S: Handle RESET_PID, and
restore r19 before call to _exit.
* sysdeps/unix/sysv/linux/hppa/nptl/clone.S: New file.
2006-09-13 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-machine.h (RTLD_START): Comment the use of
_dl_fini_plabel.
* sysdeps/hppa/elf/start.S: Correctly pass r23 to argument 6 of
__libc_start_main. Comment the order of arguments at entry and
those to __libc_start_main.
2006-09-07 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-machine.h (elf_machine_fixup_plt): Remove
lvalue cast.
* sysdeps/hppa/dl-trampoline.S (_dl_fixup): Correct stack usage.
(_dl_runtime_profile): LA fixups.
* sysdeps/unix/sysv/linux/hppa/clone.S: Correct stack usage. Return
-1 on error. Use branch and link for error handler funciton.
* sysdeps/unix/sysv/linux/hppa/sysdep.h: Correct stack usage.
Avoid register shuffling.
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h (ASM_EAGAIN): Define
as -EAGAIN.
* sysdeps/unix/sysv/linux/hppa/bits/mman.h: Adjust definitions to
match required standards.
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h
(lll_futex_wait): Return __ret.
(lll_futex_timed_wait): Likewise.
(lll_futex_wake): Likewise.
(lll_futex_requeue): Likewise.
* sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S: Correct stack
usage and adjust error return.
* sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h: Adjust
stack usage for gdb, and avoid extra register loads.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c: Copy
nptl/sysdeps/pthread/unwind-forcedunwind.c.
(LIBGCC_SO): Define and use.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-resume.c: Copy
nptl/sysdeps/pthread/unwind-resume.c.
(LIBGCC_SO): Define and use.
2006-08-13 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h (FUTEX_LOCK_PI,
FUTEX_UNLOCK_PI, FUTEX_TRYLOCK_PI): Define.
2006-07-24 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h:
__SIZEOF_PTHREAD_COND_T is 64 bytes. Remove __PAD_ATOMIC_LOCK_T.
2006-07-18 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/pthread_spin_lock.c (pthread_spin_lock): Swap
newval and oldval.
* sysdeps/hppa/nptl/pthread_spin_trylock.c (pthread_spin_trylock):
Likewise.
2006-07-16 Jeff Bailey <jbailey@ubuntu.com>
* sysdeps/hppa/tst-audit.h: New file.
2006-07-16 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/tls-macros.h: Cleanup formatting.
2006-07-15 Jeff Bailey <jbailey@ubuntu.com>
* sysdeps/hppa/nptl/tls.h (TLS_INIT_TP): Return NULL.
2006-07-13 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/xstat.c: New file.
* sysdeps/unix/sysv/linux/hppa/lxstat.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/fxstat.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/fxstatat.c: Likewise.
2006-07-13 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/Makefile: New file
* sysdeps/hppa/nptl/jmpbuf-unwind.h: Likewise
* sysdeps/hppa/nptl/pthread_spin_lock.c: Likewise
* sysdeps/hppa/nptl/pthread_spin_trylock.c: Likewise
* sysdeps/hppa/nptl/pthread_spin_unlock.c: Likewise
* sysdeps/hppa/nptl/pthreaddef.h: Likewise
* sysdeps/hppa/nptl/tcb-offsets.sym: Likewise
* sysdeps/hppa/nptl/tls.h: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/bits: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/createthread.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/fork.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/libc-lowlevellock.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/pt-initfini.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c: Likewise
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-resume.c: Likewise
2006-06-08 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/Versions: new errlist compat entry
for up to 256 errnos
2006-06-08 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/hppa1.1/Implies: Remove ieee754/ldbl-128.
* sysdeps/unix/sysv/linux/hppa/kernel-features.h
[__LINUX_KERNEL_VERSION >= 0x020609]: Define __ASSUME_LWS_CAS.
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: New file.
2006-06-08 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Reformat
(SPLICE_F_MOVE, SPLICE_F_NONBLOCK, SPLICE_F_MORE, SPLICE_F_GIFT):
Define.
2006-05-24 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/clone.S: .LerrorRest
is a label.
2006-05-24 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/ldsodefs.h: New file.
* sysdeps/unix/sysv/linux/hppa/bits/mman.h:
Only define MADV_* macros when __USE_BSD is present.
(MADV_REMOVE, MADV_DONTFORK, MADV_DOFORK): Define.
2006-05-15 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/clone.S: Accept extra arguments
required for NPTL.
* sysdeps/unix/sysv/linux/hppa/sysdep.c: Use var args for 6 arg
syscall.
* sysdeps/unix/sysv/linux/hppa/sysdep.h: Move DOARGS and UNDOARGS
into PSEUDO_*'s.
(ENTRY_LEAF): Define.
(PSEUDO_NOERRNO, PSEUDO_ERRVAL): Use ENTRY_LEAF.
(DO_CALL): Create frame.
2006-05-15 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-machine.h: Include tls.h
(elf_machine_fixup_plt): Returns fdesc.
(elf_machine_profile_fixup_plt): Remove.
(elf_machine_plt_value): Returns fdesc.
(elf_machine_runtime_setup): Check that dl_profile != NULL.
(ARCH_LA_PLTENT, ARCH_LA_PLTEXIT): Define.
(RTLD_START): Use iitlbp with sr0.
(elf_machine_type_class): Include TLS relocs.
(reassemble_21, reassemble_14): Define.
(elf_machine_rela): Add DIR21L, DIR14R, PLABEL21L, PLABEL14R,
TLS_DTPMOD32, TLS_TPREL32, TLS_DTPOFF32 support.
(TRAMPOLINE_TEMPLATE): Move to ...
* sysdeps/hppa/dl-trampoline.S: ... here.
* sysdeps/hppa/abort-instr.h: Use iitlbp with sr0.
* sysdeps/hppa/dl-lookupcfg.h: Inlcude dl-fptr.h.
(DL_FIXUP_VALUE_TYPE, DL_FIXUP_MAKE_VALUE, DL_FIXUP_VALUE_CODE_ADDR,
DL_FIXUP_VALUE_ADD, DL_FIXUP_ADDR_VALUE): Define.
* sysdeps/hppa/sysdep.h: Use "!" as a separator. Cleanup comments.
* sysdeps/hppa/bits/link.h (La_hppa_regs, La_hppa_retval): Define.
Define prototypes for la_hppa_gnu_pltenter and la_hppa_gnu_pltexit.
2006-04-27 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Include uio.h, and
define vmsplice.
2006-04-21 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/dl-tls.h: New file
* sysdeps/hppa/libc-tls.c: Likewise.
* sysdeps/hppa/tls-macros.h: Likewise.
* sysdeps/hppa/elf/configure: Likewise.
* sysdeps/hppa/elf/configure.in: Likewise.
2006-04-20 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/fpu/fclrexcpt.c (feclearexcept): Use union to
align parameters. Specify memory clobbers.
* sysdeps/hppa/fpu/fedisblxcpt.c (fedisableexcept): Likewise.
* sysdeps/hppa/fpu/feenablxcpt.c (feenableexcept): Likewise.
* sysdeps/hppa/fpu/fegetenv.c (fegetenv): Do not save exception
register. Use memcpy to align buffer.
* sysdeps/hppa/fpu/fegetexcept.c (fegetexcept): Store and reload
fr0. Use union to align parameters.
* sysdeps/hppa/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/hppa/fpu/feholdexcpt.c (feholdexcept): Do not save
exception registers. Define libm_hidden_def.
* sysdeps/hppa/fpu/fesetenv.c (fesetenv): Do not save exception
registers.
* sysdeps/hppa/fpu/fesetround.c (fesetround): Use union to
align parameters, speficy memory clobbers. Define libm_hidde_def
* sysdeps/hppa/fpu/feupdateenv.c (feupdateenv): Use union to align
parameters. Use memcpy to align buffer.
* sysdeps/hppa/fpu/fgetexcptflg.c (fegetexceptflag): Likewise.
* sysdeps/hppa/fpu/fsetexcptflg.c (fesetexceptflag): Likewise.
* sysdeps/hppa/fpu/ftestexcept.c (fetestexcept): Likewise.
* sysdeps/hppa/fpu/libm-test-ulps: Update.
* sysdeps/hppa/fpu/bits/fenv.h: Add ABI comments.
2006-04-19 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/bits/mman.h [__USE_GNU]:
Define MMAP_FIXED.
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h [__USE_GNU]:
Define SYNC_FILE_RANGE_WAIT_BEFORE, SYNC_FILE_RANGE_WRITE,
SYNC_FILE_RANGE_WAIT_AFTER, sync_file_range, splice, tee.
2006-04-19 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/unix/sysv/linux/hppa/kernel-features.h: New file.
2006-04-19 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/linuxthreads/pspinlock.c: New file.
* sysdeps/hppa/linuxthreads/pt-machine.h: Likewise.
* sysdeps/hppa/linuxthreads/tls.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/aio_cancel.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/malloc-machine.h:
Likewise.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/pt-initfini.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/bits/initspin.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/linuxthreads/bits/pthreadtypes.h:
Likewise.
2006-02-28 Roland McGrath <roland@redhat.com>
* sysdeps/hppa/shlib-versions: New file.
* sysdeps/hppa/preconfigure: New file.

936
ports/ChangeLog.ia64 Normal file
View File

@ -0,0 +1,936 @@
2012-05-30 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/syscalls.list: Remove
__connect_internal alias.
* sysdeps/unix/sysv/linux/ia64/nptl/pthread_once.c: Replace
_internal alias by hidden_def.
2012-05-25 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/nptl/libc.abilist: Update.
2012-05-24 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/bits/mman.h (MADV_DONTDUMP): Define.
(MADV_DODUMP): Likewise.
2012-05-23 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Add forward
declaration of pthread_attr_t and use it in sigevent.
2012-05-15 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/elf/stackguard-macros.h: Delete unused file.
2012-05-14 Mike Frysinger <vapier@gentoo.org>
[BZ #14109]
* sysdeps/unix/sysv/linux/ia64/bits/setjmp.h (__jmp_buf): Use
__aligned__ in attribute.
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (ia64_fpreg):
Likewise.
2012-05-14 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/libm-symbols.h: Delete __ELF__ checks.
2012-05-07 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/sysdep.h: Include errno.h.
2012-05-06 Mike Frysinger <vapier@gentoo.org>
* data/localplt-ia64-linux-gnu.data: New file.
2012-05-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/nptl/ld.abilist: Update symbol list.
* sysdeps/unix/sysv/linux/ia64/nptl/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libdl.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libresolv.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/librt.abilist: Likewise.
2012-05-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/nptl/ld.abilist: Generated from
files found in glibc-2.15.
* sysdeps/unix/sysv/linux/ia64/nptl/libBrokenLocale.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libanl.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libcrypt.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libdl.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libnsl.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libresolv.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/librt.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libthread_db.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/libutil.abilist: Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/s_ilogbl.S: Move to ...
* sysdeps/ia64/fpu/e_ilogbl.S: ... here.
(__ieee754_ilogbl): Rename from ilogbl.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/kernel-features.h (__ASSUME_ACCEPT4):
Define.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/dl-tls.h (GET_ADDR_PARAM): Define.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/bits/byteswap.h (__bswap_16): Removed.
Include <bits/byteswap-16.h> to get __bswap_16.
* sysdeps/ia64/bits/byteswap-16.h: New file.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Delete __cplusplus
define check.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h
(pthread_attr_t): Change union tag to pthread_attr_t. Only define
typedef if not already defined.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/bits/mman.h (MAP_STACK): Define.
(MAP_HUGETLB): Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/s_scalbn.c (__scalbn): Rename from scalbn.
Add weak alias from scalbn to __scalbn.
* sysdeps/ia64/fpu/s_scalbnf.c (__scalbnf): Rename from scalbnf.
Add weak alias from scalbnf to __scalbnf.
* sysdeps/ia64/fpu/s_scalbnl.c (__scalbnl): Rename from scalbnl.
Add weak alias from scalbnl to __scalbnl.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/s_matherrf.c: Delete __STDC__.
* sysdeps/ia64/fpu/s_matherrl.c,
sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/e_rem_pio2l.c: New file.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/bits/fenv.h: Change __const to const.
* sysdeps/unix/sysv/linux/ia64/swapcontext.c: Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/s_matherrf.c: Change "math.h" and "math_private.h"
to <math.h> and <math_private.h>.
* sysdeps/ia64/fpu/s_matherrl.c: Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/hp-timing.h: Change stdio-common/_itoa.h to _itoa.h.
* sysdeps/unix/sysv/linux/ia64/register-dump.h: Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/crti.S: New file.
* sysdeps/ia64/crtn.S: Likewise.
* sysdeps/ia64/elf/initfini.c: Delete.
* sysdeps/unix/sysv/linux/ia64/nptl/pt-initfini.c: Likewise.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/elf/configure.in: Merge contents to ...
* sysdeps/ia64/configure.in: ... here.
* sysdeps/ia64/elf/configure: Delete.
* sysdeps/ia64/configure: Regenerate.
* sysdeps/ia64/elf/entry.h: Move to ...
* sysdeps/ia64/entry.h: ... here.
* sysdeps/ia64/elf/start.S: Move to ...
* sysdeps/ia64/start.S: ... here.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/elf/stackguard-macros.h: New stub include file.
* sysdeps/ia64/ldsodefs.h: Move ia64 logic from
sysdeps/generic/ldsodefs.h.
* sysdeps/ia64/nptl/shlib-versions: Move ia64 logic from
nptl/shlib-versions.
* sysdeps/ia64/preconfigure: Move ia64 logic from configure.in.
* sysdeps/ia64/shlib-versions: Move ia64 logic from shlib-versions.
* sysdeps/ia64/stackguard-macros.h: Move ia64 logic from
elf/stackguard-macros.h.
* sysdeps/ia64/tls-macros.h: Move ia64 logic from elf/tls-macros.h.
* sysdeps/ia64/tst-audit.h: Move ia64 logic from elf/tst-auditmod1.c.
* sysdeps/unix/sysv/linux/ia64/configure.in: Move ia64 logic from
sysdeps/unix/sysv/linux/configure.
* sysdeps/unix/sysv/linux/ia64/configure: Generate.
* sysdeps/unix/sysv/linux/ia64/kernel-features.h: Move ia64 logic
from sysdeps/unix/sysv/linux/kernel-features.h.
2012-04-27 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/backtrace.c: Replace all contents with a single
include of sysdeps/x86_64/backtrace.c.
* sysdeps/unix/sysv/linux/ia64/nptl/fork.c: Change include path
prefix from ../ to sysdeps/unix/sysv/linux/, and "..." to <...>.
* sysdeps/unix/sysv/linux/ia64/nptl/timer_create.c,
sysdeps/unix/sysv/linux/ia64/nptl/timer_delete.c,
sysdeps/unix/sysv/linux/ia64/nptl/timer_getoverr.c,
sysdeps/unix/sysv/linux/ia64/nptl/timer_gettime.c,
sysdeps/unix/sysv/linux/ia64/nptl/timer_settime.c,
sysdeps/unix/sysv/linux/ia64/sysconf.c,
sysdeps/unix/sysv/linux/ia64/system.c: Likewise.
2012-04-25 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/ia64/nptl/bits/local_lim.h: Replace
boiler license text with standard GNU Lesser General Public.
* sysdeps/unix/sysv/linux/ia64/nptl/unwind-forcedunwind.c: Likewise.
2012-04-22 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/_mcount.S: Replace FSF snail mail address with URL.
* sysdeps/ia64/backtrace.c: Likewise.
* sysdeps/ia64/bits/atomic.h: Likewise.
* sysdeps/ia64/bits/byteswap.h: Likewise.
* sysdeps/ia64/bits/fenv.h: Likewise.
* sysdeps/ia64/bits/huge_vall.h: Likewise.
* sysdeps/ia64/bits/link.h: Likewise.
* sysdeps/ia64/bits/mathdef.h: Likewise.
* sysdeps/ia64/bits/xtitypes.h: Likewise.
* sysdeps/ia64/bzero.S: Likewise.
* sysdeps/ia64/dl-dtprocnum.h: Likewise.
* sysdeps/ia64/dl-fptr.h: Likewise.
* sysdeps/ia64/dl-lookupcfg.h: Likewise.
* sysdeps/ia64/dl-machine.h: Likewise.
* sysdeps/ia64/dl-sysdep.h: Likewise.
* sysdeps/ia64/dl-tls.h: Likewise.
* sysdeps/ia64/dl-trampoline.S: Likewise.
* sysdeps/ia64/elf/initfini.c: Likewise.
* sysdeps/ia64/elf/start.S: Likewise.
* sysdeps/ia64/fpu/bits/math-finite.h: Likewise.
* sysdeps/ia64/fpu/bits/mathinline.h: Likewise.
* sysdeps/ia64/fpu/fclrexcpt.c: Likewise.
* sysdeps/ia64/fpu/fedisblxcpt.c: Likewise.
* sysdeps/ia64/fpu/feenablxcpt.c: Likewise.
* sysdeps/ia64/fpu/fegetenv.c: Likewise.
* sysdeps/ia64/fpu/fegetexcept.c: Likewise.
* sysdeps/ia64/fpu/fegetround.c: Likewise.
* sysdeps/ia64/fpu/feholdexcpt.c: Likewise.
* sysdeps/ia64/fpu/fesetenv.c: Likewise.
* sysdeps/ia64/fpu/fesetround.c: Likewise.
* sysdeps/ia64/fpu/feupdateenv.c: Likewise.
* sysdeps/ia64/fpu/fgetexcptflg.c: Likewise.
* sysdeps/ia64/fpu/fraiseexcpt.c: Likewise.
* sysdeps/ia64/fpu/fsetexcptflg.c: Likewise.
* sysdeps/ia64/fpu/ftestexcept.c: Likewise.
* sysdeps/ia64/fpu/printf_fphex.c: Likewise.
* sysdeps/ia64/fpu/s_copysign.S: Likewise.
* sysdeps/ia64/fpu/s_finite.S: Likewise.
* sysdeps/ia64/fpu/s_fpclassify.S: Likewise.
* sysdeps/ia64/fpu/s_isinf.S: Likewise.
* sysdeps/ia64/fpu/s_isnan.S: Likewise.
* sysdeps/ia64/fpu/s_signbit.S: Likewise.
* sysdeps/ia64/gccframe.h: Likewise.
* sysdeps/ia64/hp-timing.c: Likewise.
* sysdeps/ia64/hp-timing.h: Likewise.
* sysdeps/ia64/htonl.S: Likewise.
* sysdeps/ia64/htons.S: Likewise.
* sysdeps/ia64/ieee754.h: Likewise.
* sysdeps/ia64/jmpbuf-unwind.h: Likewise.
* sysdeps/ia64/libc-tls.c: Likewise.
* sysdeps/ia64/machine-gmon.h: Likewise.
* sysdeps/ia64/memccpy.S: Likewise.
* sysdeps/ia64/memchr.S: Likewise.
* sysdeps/ia64/memcmp.S: Likewise.
* sysdeps/ia64/memcpy.S: Likewise.
* sysdeps/ia64/memmove.S: Likewise.
* sysdeps/ia64/memset.S: Likewise.
* sysdeps/ia64/memusage.h: Likewise.
* sysdeps/ia64/nptl/Makefile: Likewise.
* sysdeps/ia64/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/ia64/nptl/pthread_spin_trylock.c: Likewise.
* sysdeps/ia64/nptl/pthread_spin_unlock.c: Likewise.
* sysdeps/ia64/nptl/pthreaddef.h: Likewise.
* sysdeps/ia64/nptl/tls.h: Likewise.
* sysdeps/ia64/sched_cpucount.c: Likewise.
* sysdeps/ia64/softpipe.h: Likewise.
* sysdeps/ia64/stackinfo.h: Likewise.
* sysdeps/ia64/strcat.c: Likewise.
* sysdeps/ia64/strchr.S: Likewise.
* sysdeps/ia64/strcmp.S: Likewise.
* sysdeps/ia64/strcpy.S: Likewise.
* sysdeps/ia64/strlen.S: Likewise.
* sysdeps/ia64/strncmp.S: Likewise.
* sysdeps/ia64/strncpy.S: Likewise.
* sysdeps/ia64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/__longjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/__start_context.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/ipc.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/mman.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/msq.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sem.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/setjmp.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/shm.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigaction.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/brk.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/clone2.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/dl-cache.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/dl-static.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/fork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/get_clockfreq.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/getcontext.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/getpagesize.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/has_cpuclock.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/ioperm.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/kernel_stat.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/ldconfig.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/ldsodefs.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/makecontext.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/__ia64_longjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/__sigstack_longjmp.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/bits/semaphore.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/createthread.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/fork.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/pt-vfork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/pthread_once.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/unwind_longjmp.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/vfork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/pipe.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/profil-counter.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/readelflib.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/register-dump.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/setcontext.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigaction.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigpending.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigprocmask.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/swapcontext.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/io.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/procfs.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/rse.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/user.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysconf.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/system.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/ucontext_i.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/umount.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/vfork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/wordexp.c: Likewise.
2012-04-22 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/e_acosf.S: Trim trailing whitespace.
* sysdeps/ia64/fpu/e_acoshl.S: Likewise.
* sysdeps/ia64/fpu/e_acosl.S: Likewise.
* sysdeps/ia64/fpu/e_asinf.S: Likewise.
* sysdeps/ia64/fpu/e_asinl.S: Likewise.
* sysdeps/ia64/fpu/e_atan2f.S: Likewise.
* sysdeps/ia64/fpu/e_atanhl.S: Likewise.
* sysdeps/ia64/fpu/e_coshl.S: Likewise.
* sysdeps/ia64/fpu/e_exp.S: Likewise.
* sysdeps/ia64/fpu/e_expf.S: Likewise.
* sysdeps/ia64/fpu/e_fmodl.S: Likewise.
* sysdeps/ia64/fpu/e_hypot.S: Likewise.
* sysdeps/ia64/fpu/e_hypotf.S: Likewise.
* sysdeps/ia64/fpu/e_hypotl.S: Likewise.
* sysdeps/ia64/fpu/e_log.S: Likewise.
* sysdeps/ia64/fpu/e_log2.S: Likewise.
* sysdeps/ia64/fpu/e_log2f.S: Likewise.
* sysdeps/ia64/fpu/e_log2l.S: Likewise.
* sysdeps/ia64/fpu/e_logl.S: Likewise.
* sysdeps/ia64/fpu/e_powf.S: Likewise.
* sysdeps/ia64/fpu/e_remainder.S: Likewise.
* sysdeps/ia64/fpu/e_remainderf.S: Likewise.
* sysdeps/ia64/fpu/e_remainderl.S: Likewise.
* sysdeps/ia64/fpu/e_scalb.S: Likewise.
* sysdeps/ia64/fpu/e_scalbf.S: Likewise.
* sysdeps/ia64/fpu/e_scalbl.S: Likewise.
* sysdeps/ia64/fpu/e_sinhl.S: Likewise.
* sysdeps/ia64/fpu/e_sqrt.S: Likewise.
* sysdeps/ia64/fpu/e_sqrtf.S: Likewise.
* sysdeps/ia64/fpu/e_sqrtl.S: Likewise.
* sysdeps/ia64/fpu/libm_cpu_defs.h: Likewise.
* sysdeps/ia64/fpu/libm_error_codes.h: Likewise.
* sysdeps/ia64/fpu/libm_frexp.S: Likewise.
* sysdeps/ia64/fpu/libm_frexpf.S: Likewise.
* sysdeps/ia64/fpu/libm_frexpl.S: Likewise.
* sysdeps/ia64/fpu/libm_scalblnf.S: Likewise.
* sysdeps/ia64/fpu/libm_tan.S: Likewise.
* sysdeps/ia64/fpu/s_asinhl.S: Likewise.
* sysdeps/ia64/fpu/s_atanf.S: Likewise.
* sysdeps/ia64/fpu/s_atanl.S: Likewise.
* sysdeps/ia64/fpu/s_cbrtl.S: Likewise.
* sysdeps/ia64/fpu/s_cos.S: Likewise.
* sysdeps/ia64/fpu/s_cosf.S: Likewise.
* sysdeps/ia64/fpu/s_erf.S: Likewise.
* sysdeps/ia64/fpu/s_erfc.S: Likewise.
* sysdeps/ia64/fpu/s_erfcf.S: Likewise.
* sysdeps/ia64/fpu/s_erfcl.S: Likewise.
* sysdeps/ia64/fpu/s_erff.S: Likewise.
* sysdeps/ia64/fpu/s_erfl.S: Likewise.
* sysdeps/ia64/fpu/s_expm1.S: Likewise.
* sysdeps/ia64/fpu/s_expm1f.S: Likewise.
* sysdeps/ia64/fpu/s_expm1l.S: Likewise.
* sysdeps/ia64/fpu/s_fabs.S: Likewise.
* sysdeps/ia64/fpu/s_fabsf.S: Likewise.
* sysdeps/ia64/fpu/s_fabsl.S: Likewise.
* sysdeps/ia64/fpu/s_finite.S: Likewise.
* sysdeps/ia64/fpu/s_fma.S: Likewise.
* sysdeps/ia64/fpu/s_fmaf.S: Likewise.
* sysdeps/ia64/fpu/s_fmal.S: Likewise.
* sysdeps/ia64/fpu/s_fmax.S: Likewise.
* sysdeps/ia64/fpu/s_fmaxf.S: Likewise.
* sysdeps/ia64/fpu/s_fmaxl.S: Likewise.
* sysdeps/ia64/fpu/s_fpclassify.S: Likewise.
* sysdeps/ia64/fpu/s_frexp.c: Likewise.
* sysdeps/ia64/fpu/s_frexpf.c: Likewise.
* sysdeps/ia64/fpu/s_frexpl.c: Likewise.
* sysdeps/ia64/fpu/s_ldexp.c: Likewise.
* sysdeps/ia64/fpu/s_ldexpf.c: Likewise.
* sysdeps/ia64/fpu/s_ldexpl.c: Likewise.
* sysdeps/ia64/fpu/s_log1pl.S: Likewise.
* sysdeps/ia64/fpu/s_modf.S: Likewise.
* sysdeps/ia64/fpu/s_modff.S: Likewise.
* sysdeps/ia64/fpu/s_modfl.S: Likewise.
* sysdeps/ia64/fpu/s_nextafter.S: Likewise.
* sysdeps/ia64/fpu/s_nextafterf.S: Likewise.
* sysdeps/ia64/fpu/s_nextafterl.S: Likewise.
* sysdeps/ia64/fpu/s_nexttoward.S: Likewise.
* sysdeps/ia64/fpu/s_nexttowardf.S: Likewise.
* sysdeps/ia64/fpu/s_nexttowardl.S: Likewise.
* sysdeps/ia64/fpu/s_round.S: Likewise.
* sysdeps/ia64/fpu/s_roundf.S: Likewise.
* sysdeps/ia64/fpu/s_roundl.S: Likewise.
* sysdeps/ia64/fpu/s_scalblnf.c: Likewise.
* sysdeps/ia64/fpu/s_scalbn.c: Likewise.
* sysdeps/ia64/fpu/s_scalbnf.c: Likewise.
* sysdeps/ia64/fpu/s_scalbnl.c: Likewise.
* sysdeps/ia64/fpu/s_signbit.S: Likewise.
* sysdeps/ia64/fpu/s_significand.S: Likewise.
* sysdeps/ia64/fpu/s_significandf.S: Likewise.
* sysdeps/ia64/fpu/s_significandl.S: Likewise.
* sysdeps/ia64/fpu/s_tan.S: Likewise.
* sysdeps/ia64/fpu/s_tanf.S: Likewise.
* sysdeps/ia64/fpu/s_tanh.S: Likewise.
* sysdeps/ia64/fpu/s_tanhf.S: Likewise.
* sysdeps/ia64/fpu/s_tanhl.S: Likewise.
* sysdeps/ia64/fpu/s_tanl.S: Likewise.
* sysdeps/ia64/fpu/w_tgamma.S: Likewise.
* sysdeps/ia64/fpu/w_tgammaf.S: Likewise.
* sysdeps/ia64/fpu/w_tgammal.S: Likewise.
* sysdeps/ia64/softpipe.h: Likewise.
* sysdeps/ia64/strchr.S: Likewise.
* sysdeps/ia64/strlen.S: Likewise.
* sysdeps/ia64/strncmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/register-dump.h: Likewise.
2012-04-22 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/Implies: Copied from the main tree.
* sysdeps/ia64/Makefile: Likewise.
* sysdeps/ia64/Versions: Likewise.
* sysdeps/ia64/_mcount.S: Likewise.
* sysdeps/ia64/abort-instr.h: Likewise.
* sysdeps/ia64/backtrace.c: Likewise.
* sysdeps/ia64/bcopy.S: Likewise.
* sysdeps/ia64/bits/atomic.h: Likewise.
* sysdeps/ia64/bits/byteswap.h: Likewise.
* sysdeps/ia64/bits/fenv.h: Likewise.
* sysdeps/ia64/bits/huge_vall.h: Likewise.
* sysdeps/ia64/bits/link.h: Likewise.
* sysdeps/ia64/bits/linkmap.h: Likewise.
* sysdeps/ia64/bits/mathdef.h: Likewise.
* sysdeps/ia64/bits/xtitypes.h: Likewise.
* sysdeps/ia64/bzero.S: Likewise.
* sysdeps/ia64/configure: Likewise.
* sysdeps/ia64/configure.in: Likewise.
* sysdeps/ia64/dl-dtprocnum.h: Likewise.
* sysdeps/ia64/dl-fptr.h: Likewise.
* sysdeps/ia64/dl-lookupcfg.h: Likewise.
* sysdeps/ia64/dl-machine.h: Likewise.
* sysdeps/ia64/dl-sysdep.h: Likewise.
* sysdeps/ia64/dl-tls.h: Likewise.
* sysdeps/ia64/dl-trampoline.S: Likewise.
* sysdeps/ia64/elf/configure: Likewise.
* sysdeps/ia64/elf/configure.in: Likewise.
* sysdeps/ia64/elf/entry.h: Likewise.
* sysdeps/ia64/elf/initfini.c: Likewise.
* sysdeps/ia64/elf/start.S: Likewise.
* sysdeps/ia64/fpu/Makefile: Likewise.
* sysdeps/ia64/fpu/README: Likewise.
* sysdeps/ia64/fpu/Versions: Likewise.
* sysdeps/ia64/fpu/bits/math-finite.h: Likewise.
* sysdeps/ia64/fpu/bits/mathinline.h: Likewise.
* sysdeps/ia64/fpu/branred.c: Likewise.
* sysdeps/ia64/fpu/doasin.c: Likewise.
* sysdeps/ia64/fpu/dosincos.c: Likewise.
* sysdeps/ia64/fpu/e_acos.S: Likewise.
* sysdeps/ia64/fpu/e_acosf.S: Likewise.
* sysdeps/ia64/fpu/e_acosh.S: Likewise.
* sysdeps/ia64/fpu/e_acoshf.S: Likewise.
* sysdeps/ia64/fpu/e_acoshl.S: Likewise.
* sysdeps/ia64/fpu/e_acosl.S: Likewise.
* sysdeps/ia64/fpu/e_asin.S: Likewise.
* sysdeps/ia64/fpu/e_asinf.S: Likewise.
* sysdeps/ia64/fpu/e_asinl.S: Likewise.
* sysdeps/ia64/fpu/e_atan2.S: Likewise.
* sysdeps/ia64/fpu/e_atan2f.S: Likewise.
* sysdeps/ia64/fpu/e_atan2l.c: Likewise.
* sysdeps/ia64/fpu/e_atanh.S: Likewise.
* sysdeps/ia64/fpu/e_atanhf.S: Likewise.
* sysdeps/ia64/fpu/e_atanhl.S: Likewise.
* sysdeps/ia64/fpu/e_cosh.S: Likewise.
* sysdeps/ia64/fpu/e_coshf.S: Likewise.
* sysdeps/ia64/fpu/e_coshl.S: Likewise.
* sysdeps/ia64/fpu/e_exp.S: Likewise.
* sysdeps/ia64/fpu/e_exp10.S: Likewise.
* sysdeps/ia64/fpu/e_exp10f.S: Likewise.
* sysdeps/ia64/fpu/e_exp10l.S: Likewise.
* sysdeps/ia64/fpu/e_exp2.S: Likewise.
* sysdeps/ia64/fpu/e_exp2f.S: Likewise.
* sysdeps/ia64/fpu/e_exp2l.S: Likewise.
* sysdeps/ia64/fpu/e_expf.S: Likewise.
* sysdeps/ia64/fpu/e_expl.c: Likewise.
* sysdeps/ia64/fpu/e_fmod.S: Likewise.
* sysdeps/ia64/fpu/e_fmodf.S: Likewise.
* sysdeps/ia64/fpu/e_fmodl.S: Likewise.
* sysdeps/ia64/fpu/e_gamma_r.c: Likewise.
* sysdeps/ia64/fpu/e_gammaf_r.c: Likewise.
* sysdeps/ia64/fpu/e_gammal_r.c: Likewise.
* sysdeps/ia64/fpu/e_hypot.S: Likewise.
* sysdeps/ia64/fpu/e_hypotf.S: Likewise.
* sysdeps/ia64/fpu/e_hypotl.S: Likewise.
* sysdeps/ia64/fpu/e_lgamma_r.c: Likewise.
* sysdeps/ia64/fpu/e_lgammaf_r.c: Likewise.
* sysdeps/ia64/fpu/e_lgammal_r.c: Likewise.
* sysdeps/ia64/fpu/e_log.S: Likewise.
* sysdeps/ia64/fpu/e_log10.c: Likewise.
* sysdeps/ia64/fpu/e_log10f.c: Likewise.
* sysdeps/ia64/fpu/e_log10l.c: Likewise.
* sysdeps/ia64/fpu/e_log2.S: Likewise.
* sysdeps/ia64/fpu/e_log2f.S: Likewise.
* sysdeps/ia64/fpu/e_log2l.S: Likewise.
* sysdeps/ia64/fpu/e_logf.S: Likewise.
* sysdeps/ia64/fpu/e_logl.S: Likewise.
* sysdeps/ia64/fpu/e_pow.S: Likewise.
* sysdeps/ia64/fpu/e_powf.S: Likewise.
* sysdeps/ia64/fpu/e_powl.S: Likewise.
* sysdeps/ia64/fpu/e_rem_pio2.c: Likewise.
* sysdeps/ia64/fpu/e_rem_pio2f.c: Likewise.
* sysdeps/ia64/fpu/e_remainder.S: Likewise.
* sysdeps/ia64/fpu/e_remainderf.S: Likewise.
* sysdeps/ia64/fpu/e_remainderl.S: Likewise.
* sysdeps/ia64/fpu/e_scalb.S: Likewise.
* sysdeps/ia64/fpu/e_scalbf.S: Likewise.
* sysdeps/ia64/fpu/e_scalbl.S: Likewise.
* sysdeps/ia64/fpu/e_sinh.S: Likewise.
* sysdeps/ia64/fpu/e_sinhf.S: Likewise.
* sysdeps/ia64/fpu/e_sinhl.S: Likewise.
* sysdeps/ia64/fpu/e_sqrt.S: Likewise.
* sysdeps/ia64/fpu/e_sqrtf.S: Likewise.
* sysdeps/ia64/fpu/e_sqrtl.S: Likewise.
* sysdeps/ia64/fpu/fclrexcpt.c: Likewise.
* sysdeps/ia64/fpu/fedisblxcpt.c: Likewise.
* sysdeps/ia64/fpu/feenablxcpt.c: Likewise.
* sysdeps/ia64/fpu/fegetenv.c: Likewise.
* sysdeps/ia64/fpu/fegetexcept.c: Likewise.
* sysdeps/ia64/fpu/fegetround.c: Likewise.
* sysdeps/ia64/fpu/feholdexcpt.c: Likewise.
* sysdeps/ia64/fpu/fesetenv.c: Likewise.
* sysdeps/ia64/fpu/fesetround.c: Likewise.
* sysdeps/ia64/fpu/feupdateenv.c: Likewise.
* sysdeps/ia64/fpu/fgetexcptflg.c: Likewise.
* sysdeps/ia64/fpu/fraiseexcpt.c: Likewise.
* sysdeps/ia64/fpu/fsetexcptflg.c: Likewise.
* sysdeps/ia64/fpu/ftestexcept.c: Likewise.
* sysdeps/ia64/fpu/gen_import_file_list: Likewise.
* sysdeps/ia64/fpu/halfulp.c: Likewise.
* sysdeps/ia64/fpu/import_check: Likewise.
* sysdeps/ia64/fpu/import_diffs: Likewise.
* sysdeps/ia64/fpu/import_file.awk: Likewise.
* sysdeps/ia64/fpu/import_intel_libm: Likewise.
* sysdeps/ia64/fpu/k_rem_pio2.c: Likewise.
* sysdeps/ia64/fpu/k_rem_pio2f.c: Likewise.
* sysdeps/ia64/fpu/k_rem_pio2l.c: Likewise.
* sysdeps/ia64/fpu/libc_libm_error.c: Likewise.
* sysdeps/ia64/fpu/libm-symbols.h: Likewise.
* sysdeps/ia64/fpu/libm-test-ulps: Likewise.
* sysdeps/ia64/fpu/libm_cpu_defs.h: Likewise.
* sysdeps/ia64/fpu/libm_error.c: Likewise.
* sysdeps/ia64/fpu/libm_error_codes.h: Likewise.
* sysdeps/ia64/fpu/libm_frexp.S: Likewise.
* sysdeps/ia64/fpu/libm_frexp4.S: Likewise.
* sysdeps/ia64/fpu/libm_frexp4f.S: Likewise.
* sysdeps/ia64/fpu/libm_frexp4l.S: Likewise.
* sysdeps/ia64/fpu/libm_frexpf.S: Likewise.
* sysdeps/ia64/fpu/libm_frexpl.S: Likewise.
* sysdeps/ia64/fpu/libm_lgamma.S: Likewise.
* sysdeps/ia64/fpu/libm_lgammaf.S: Likewise.
* sysdeps/ia64/fpu/libm_lgammal.S: Likewise.
* sysdeps/ia64/fpu/libm_reduce.S: Likewise.
* sysdeps/ia64/fpu/libm_scalblnf.S: Likewise.
* sysdeps/ia64/fpu/libm_sincos.S: Likewise.
* sysdeps/ia64/fpu/libm_sincos_large.S: Likewise.
* sysdeps/ia64/fpu/libm_sincosf.S: Likewise.
* sysdeps/ia64/fpu/libm_sincosl.S: Likewise.
* sysdeps/ia64/fpu/libm_support.h: Likewise.
* sysdeps/ia64/fpu/libm_tan.S: Likewise.
* sysdeps/ia64/fpu/math_ldbl.h: Likewise.
* sysdeps/ia64/fpu/mpa.c: Likewise.
* sysdeps/ia64/fpu/mpatan.c: Likewise.
* sysdeps/ia64/fpu/mpatan2.c: Likewise.
* sysdeps/ia64/fpu/mpexp.c: Likewise.
* sysdeps/ia64/fpu/mplog.c: Likewise.
* sysdeps/ia64/fpu/mpsqrt.c: Likewise.
* sysdeps/ia64/fpu/mptan.c: Likewise.
* sysdeps/ia64/fpu/printf_fphex.c: Likewise.
* sysdeps/ia64/fpu/s_asinh.S: Likewise.
* sysdeps/ia64/fpu/s_asinhf.S: Likewise.
* sysdeps/ia64/fpu/s_asinhl.S: Likewise.
* sysdeps/ia64/fpu/s_atan.S: Likewise.
* sysdeps/ia64/fpu/s_atanf.S: Likewise.
* sysdeps/ia64/fpu/s_atanl.S: Likewise.
* sysdeps/ia64/fpu/s_cbrt.S: Likewise.
* sysdeps/ia64/fpu/s_cbrtf.S: Likewise.
* sysdeps/ia64/fpu/s_cbrtl.S: Likewise.
* sysdeps/ia64/fpu/s_ceil.S: Likewise.
* sysdeps/ia64/fpu/s_ceilf.S: Likewise.
* sysdeps/ia64/fpu/s_ceill.S: Likewise.
* sysdeps/ia64/fpu/s_copysign.S: Likewise.
* sysdeps/ia64/fpu/s_copysignf.S: Likewise.
* sysdeps/ia64/fpu/s_copysignl.S: Likewise.
* sysdeps/ia64/fpu/s_cos.S: Likewise.
* sysdeps/ia64/fpu/s_cosf.S: Likewise.
* sysdeps/ia64/fpu/s_cosl.S: Likewise.
* sysdeps/ia64/fpu/s_erf.S: Likewise.
* sysdeps/ia64/fpu/s_erfc.S: Likewise.
* sysdeps/ia64/fpu/s_erfcf.S: Likewise.
* sysdeps/ia64/fpu/s_erfcl.S: Likewise.
* sysdeps/ia64/fpu/s_erff.S: Likewise.
* sysdeps/ia64/fpu/s_erfl.S: Likewise.
* sysdeps/ia64/fpu/s_expm1.S: Likewise.
* sysdeps/ia64/fpu/s_expm1f.S: Likewise.
* sysdeps/ia64/fpu/s_expm1l.S: Likewise.
* sysdeps/ia64/fpu/s_fabs.S: Likewise.
* sysdeps/ia64/fpu/s_fabsf.S: Likewise.
* sysdeps/ia64/fpu/s_fabsl.S: Likewise.
* sysdeps/ia64/fpu/s_fdim.S: Likewise.
* sysdeps/ia64/fpu/s_fdimf.S: Likewise.
* sysdeps/ia64/fpu/s_fdiml.S: Likewise.
* sysdeps/ia64/fpu/s_finite.S: Likewise.
* sysdeps/ia64/fpu/s_finitef.S: Likewise.
* sysdeps/ia64/fpu/s_finitel.S: Likewise.
* sysdeps/ia64/fpu/s_floor.S: Likewise.
* sysdeps/ia64/fpu/s_floorf.S: Likewise.
* sysdeps/ia64/fpu/s_floorl.S: Likewise.
* sysdeps/ia64/fpu/s_fma.S: Likewise.
* sysdeps/ia64/fpu/s_fmaf.S: Likewise.
* sysdeps/ia64/fpu/s_fmal.S: Likewise.
* sysdeps/ia64/fpu/s_fmax.S: Likewise.
* sysdeps/ia64/fpu/s_fmaxf.S: Likewise.
* sysdeps/ia64/fpu/s_fmaxl.S: Likewise.
* sysdeps/ia64/fpu/s_fpclassify.S: Likewise.
* sysdeps/ia64/fpu/s_fpclassifyf.S: Likewise.
* sysdeps/ia64/fpu/s_fpclassifyl.S: Likewise.
* sysdeps/ia64/fpu/s_frexp.c: Likewise.
* sysdeps/ia64/fpu/s_frexpf.c: Likewise.
* sysdeps/ia64/fpu/s_frexpl.c: Likewise.
* sysdeps/ia64/fpu/s_ilogb.S: Likewise.
* sysdeps/ia64/fpu/s_ilogbf.S: Likewise.
* sysdeps/ia64/fpu/s_ilogbl.S: Likewise.
* sysdeps/ia64/fpu/s_isinf.S: Likewise.
* sysdeps/ia64/fpu/s_isinff.S: Likewise.
* sysdeps/ia64/fpu/s_isinfl.S: Likewise.
* sysdeps/ia64/fpu/s_isnan.S: Likewise.
* sysdeps/ia64/fpu/s_isnanf.S: Likewise.
* sysdeps/ia64/fpu/s_isnanl.S: Likewise.
* sysdeps/ia64/fpu/s_ldexp.c: Likewise.
* sysdeps/ia64/fpu/s_ldexpf.c: Likewise.
* sysdeps/ia64/fpu/s_ldexpl.c: Likewise.
* sysdeps/ia64/fpu/s_libm_ldexp.S: Likewise.
* sysdeps/ia64/fpu/s_libm_ldexpf.S: Likewise.
* sysdeps/ia64/fpu/s_libm_ldexpl.S: Likewise.
* sysdeps/ia64/fpu/s_libm_scalbn.S: Likewise.
* sysdeps/ia64/fpu/s_libm_scalbnf.S: Likewise.
* sysdeps/ia64/fpu/s_libm_scalbnl.S: Likewise.
* sysdeps/ia64/fpu/s_log1p.S: Likewise.
* sysdeps/ia64/fpu/s_log1pf.S: Likewise.
* sysdeps/ia64/fpu/s_log1pl.S: Likewise.
* sysdeps/ia64/fpu/s_logb.S: Likewise.
* sysdeps/ia64/fpu/s_logbf.S: Likewise.
* sysdeps/ia64/fpu/s_logbl.S: Likewise.
* sysdeps/ia64/fpu/s_matherrf.c: Likewise.
* sysdeps/ia64/fpu/s_matherrl.c: Likewise.
* sysdeps/ia64/fpu/s_modf.S: Likewise.
* sysdeps/ia64/fpu/s_modff.S: Likewise.
* sysdeps/ia64/fpu/s_modfl.S: Likewise.
* sysdeps/ia64/fpu/s_nearbyint.S: Likewise.
* sysdeps/ia64/fpu/s_nearbyintf.S: Likewise.
* sysdeps/ia64/fpu/s_nearbyintl.S: Likewise.
* sysdeps/ia64/fpu/s_nextafter.S: Likewise.
* sysdeps/ia64/fpu/s_nextafterf.S: Likewise.
* sysdeps/ia64/fpu/s_nextafterl.S: Likewise.
* sysdeps/ia64/fpu/s_nexttoward.S: Likewise.
* sysdeps/ia64/fpu/s_nexttowardf.S: Likewise.
* sysdeps/ia64/fpu/s_nexttowardl.S: Likewise.
* sysdeps/ia64/fpu/s_rint.S: Likewise.
* sysdeps/ia64/fpu/s_rintf.S: Likewise.
* sysdeps/ia64/fpu/s_rintl.S: Likewise.
* sysdeps/ia64/fpu/s_round.S: Likewise.
* sysdeps/ia64/fpu/s_roundf.S: Likewise.
* sysdeps/ia64/fpu/s_roundl.S: Likewise.
* sysdeps/ia64/fpu/s_scalblnf.c: Likewise.
* sysdeps/ia64/fpu/s_scalbn.c: Likewise.
* sysdeps/ia64/fpu/s_scalbnf.c: Likewise.
* sysdeps/ia64/fpu/s_scalbnl.c: Likewise.
* sysdeps/ia64/fpu/s_signbit.S: Likewise.
* sysdeps/ia64/fpu/s_signbitf.S: Likewise.
* sysdeps/ia64/fpu/s_signbitl.S: Likewise.
* sysdeps/ia64/fpu/s_significand.S: Likewise.
* sysdeps/ia64/fpu/s_significandf.S: Likewise.
* sysdeps/ia64/fpu/s_significandl.S: Likewise.
* sysdeps/ia64/fpu/s_sin.c: Likewise.
* sysdeps/ia64/fpu/s_sincos.c: Likewise.
* sysdeps/ia64/fpu/s_sincosf.c: Likewise.
* sysdeps/ia64/fpu/s_sincosl.c: Likewise.
* sysdeps/ia64/fpu/s_sinf.c: Likewise.
* sysdeps/ia64/fpu/s_sinl.c: Likewise.
* sysdeps/ia64/fpu/s_tan.S: Likewise.
* sysdeps/ia64/fpu/s_tanf.S: Likewise.
* sysdeps/ia64/fpu/s_tanh.S: Likewise.
* sysdeps/ia64/fpu/s_tanhf.S: Likewise.
* sysdeps/ia64/fpu/s_tanhl.S: Likewise.
* sysdeps/ia64/fpu/s_tanl.S: Likewise.
* sysdeps/ia64/fpu/s_trunc.S: Likewise.
* sysdeps/ia64/fpu/s_truncf.S: Likewise.
* sysdeps/ia64/fpu/s_truncl.S: Likewise.
* sysdeps/ia64/fpu/sincos32.c: Likewise.
* sysdeps/ia64/fpu/slowexp.c: Likewise.
* sysdeps/ia64/fpu/slowpow.c: Likewise.
* sysdeps/ia64/fpu/t_exp.c: Likewise.
* sysdeps/ia64/fpu/w_acos.c: Likewise.
* sysdeps/ia64/fpu/w_acosf.c: Likewise.
* sysdeps/ia64/fpu/w_acosh.c: Likewise.
* sysdeps/ia64/fpu/w_acoshf.c: Likewise.
* sysdeps/ia64/fpu/w_acoshl.c: Likewise.
* sysdeps/ia64/fpu/w_acosl.c: Likewise.
* sysdeps/ia64/fpu/w_asin.c: Likewise.
* sysdeps/ia64/fpu/w_asinf.c: Likewise.
* sysdeps/ia64/fpu/w_asinl.c: Likewise.
* sysdeps/ia64/fpu/w_atan2.c: Likewise.
* sysdeps/ia64/fpu/w_atan2f.c: Likewise.
* sysdeps/ia64/fpu/w_atan2l.c: Likewise.
* sysdeps/ia64/fpu/w_atanh.c: Likewise.
* sysdeps/ia64/fpu/w_atanhf.c: Likewise.
* sysdeps/ia64/fpu/w_atanhl.c: Likewise.
* sysdeps/ia64/fpu/w_cosh.c: Likewise.
* sysdeps/ia64/fpu/w_coshf.c: Likewise.
* sysdeps/ia64/fpu/w_coshl.c: Likewise.
* sysdeps/ia64/fpu/w_exp.c: Likewise.
* sysdeps/ia64/fpu/w_exp10.c: Likewise.
* sysdeps/ia64/fpu/w_exp10f.c: Likewise.
* sysdeps/ia64/fpu/w_exp10l.c: Likewise.
* sysdeps/ia64/fpu/w_exp2.c: Likewise.
* sysdeps/ia64/fpu/w_exp2f.c: Likewise.
* sysdeps/ia64/fpu/w_exp2l.c: Likewise.
* sysdeps/ia64/fpu/w_expf.c: Likewise.
* sysdeps/ia64/fpu/w_expl.c: Likewise.
* sysdeps/ia64/fpu/w_fmod.c: Likewise.
* sysdeps/ia64/fpu/w_fmodf.c: Likewise.
* sysdeps/ia64/fpu/w_fmodl.c: Likewise.
* sysdeps/ia64/fpu/w_hypot.c: Likewise.
* sysdeps/ia64/fpu/w_hypotf.c: Likewise.
* sysdeps/ia64/fpu/w_hypotl.c: Likewise.
* sysdeps/ia64/fpu/w_lgamma.c: Likewise.
* sysdeps/ia64/fpu/w_lgamma_r.c: Likewise.
* sysdeps/ia64/fpu/w_lgammaf.c: Likewise.
* sysdeps/ia64/fpu/w_lgammaf_r.c: Likewise.
* sysdeps/ia64/fpu/w_lgammal.c: Likewise.
* sysdeps/ia64/fpu/w_lgammal_r.c: Likewise.
* sysdeps/ia64/fpu/w_log.c: Likewise.
* sysdeps/ia64/fpu/w_log10.c: Likewise.
* sysdeps/ia64/fpu/w_log10f.c: Likewise.
* sysdeps/ia64/fpu/w_log10l.c: Likewise.
* sysdeps/ia64/fpu/w_log2.c: Likewise.
* sysdeps/ia64/fpu/w_log2f.c: Likewise.
* sysdeps/ia64/fpu/w_log2l.c: Likewise.
* sysdeps/ia64/fpu/w_logf.c: Likewise.
* sysdeps/ia64/fpu/w_logl.c: Likewise.
* sysdeps/ia64/fpu/w_pow.c: Likewise.
* sysdeps/ia64/fpu/w_powf.c: Likewise.
* sysdeps/ia64/fpu/w_powl.c: Likewise.
* sysdeps/ia64/fpu/w_remainder.c: Likewise.
* sysdeps/ia64/fpu/w_remainderf.c: Likewise.
* sysdeps/ia64/fpu/w_remainderl.c: Likewise.
* sysdeps/ia64/fpu/w_scalb.c: Likewise.
* sysdeps/ia64/fpu/w_scalbf.c: Likewise.
* sysdeps/ia64/fpu/w_scalbl.c: Likewise.
* sysdeps/ia64/fpu/w_sinh.c: Likewise.
* sysdeps/ia64/fpu/w_sinhf.c: Likewise.
* sysdeps/ia64/fpu/w_sinhl.c: Likewise.
* sysdeps/ia64/fpu/w_sqrt.c: Likewise.
* sysdeps/ia64/fpu/w_sqrtf.c: Likewise.
* sysdeps/ia64/fpu/w_sqrtl.c: Likewise.
* sysdeps/ia64/fpu/w_tgamma.S: Likewise.
* sysdeps/ia64/fpu/w_tgammaf.S: Likewise.
* sysdeps/ia64/fpu/w_tgammal.S: Likewise.
* sysdeps/ia64/gccframe.h: Likewise.
* sysdeps/ia64/hp-timing.c: Likewise.
* sysdeps/ia64/hp-timing.h: Likewise.
* sysdeps/ia64/htonl.S: Likewise.
* sysdeps/ia64/htons.S: Likewise.
* sysdeps/ia64/ia64libgcc.S: Likewise.
* sysdeps/ia64/ieee754.h: Likewise.
* sysdeps/ia64/jmpbuf-unwind.h: Likewise.
* sysdeps/ia64/ldbl2mpn.c: Likewise.
* sysdeps/ia64/libc-tls.c: Likewise.
* sysdeps/ia64/machine-gmon.h: Likewise.
* sysdeps/ia64/memccpy.S: Likewise.
* sysdeps/ia64/memchr.S: Likewise.
* sysdeps/ia64/memcmp.S: Likewise.
* sysdeps/ia64/memcpy.S: Likewise.
* sysdeps/ia64/memmove.S: Likewise.
* sysdeps/ia64/memset.S: Likewise.
* sysdeps/ia64/memusage.h: Likewise.
* sysdeps/ia64/nptl/Makefile: Likewise.
* sysdeps/ia64/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/ia64/nptl/pthread_spin_trylock.c: Likewise.
* sysdeps/ia64/nptl/pthread_spin_unlock.c: Likewise.
* sysdeps/ia64/nptl/pthreaddef.h: Likewise.
* sysdeps/ia64/nptl/tcb-offsets.sym: Likewise.
* sysdeps/ia64/nptl/tls.h: Likewise.
* sysdeps/ia64/sched_cpucount.c: Likewise.
* sysdeps/ia64/softpipe.h: Likewise.
* sysdeps/ia64/stackinfo.h: Likewise.
* sysdeps/ia64/strcat.c: Likewise.
* sysdeps/ia64/strchr.S: Likewise.
* sysdeps/ia64/strcmp.S: Likewise.
* sysdeps/ia64/strcpy.S: Likewise.
* sysdeps/ia64/strlen.S: Likewise.
* sysdeps/ia64/strncmp.S: Likewise.
* sysdeps/ia64/strncpy.S: Likewise.
* sysdeps/ia64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/Implies: Likewise.
* sysdeps/unix/sysv/linux/ia64/Makefile: Likewise.
* sysdeps/unix/sysv/linux/ia64/Versions: Likewise.
* sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/__longjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/__start_context.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/endian.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/ipc.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/mman.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/msq.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sem.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/setjmp.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/shm.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigaction.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/brk.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/bsd-_setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/bsd-setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/clone.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/clone2.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/dl-brk.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/dl-cache.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/dl-static.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/fork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/get_clockfreq.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/getclktck.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/getcontext.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/getpagesize.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/has_cpuclock.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/ioperm.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/kernel_stat.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/ldconfig.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: Likewise.
* sysdeps/unix/sysv/linux/ia64/ldsodefs.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/makecontext.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/Makefile: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/Versions: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/__ia64_longjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/__sigstack_longjmp.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/bits/local_lim.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/bits/semaphore.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/clone2.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/createthread.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/fork.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/pt-initfini.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/pt-vfork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/pthread_once.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/timer_create.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/timer_delete.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/timer_getoverr.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/timer_gettime.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/timer_settime.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/unwind-forcedunwind.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/unwind_longjmp.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/vfork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/pipe.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/profil-counter.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/readelflib.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/register-dump.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/rt-sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/setcontext.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigaction.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigpending.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sigprocmask.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/swapcontext.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/io.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/procfs.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/rse.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/user.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysconf.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/system.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/ucontext_i.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/umount.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/vfork.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/wordexp.c: Likewise.

View File

@ -0,0 +1,136 @@
2012-05-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/syscalls.list: Remove
__connect_internal alias.
2012-05-18 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
(__FSWORD_T_TYPE): New macro.
2012-05-16 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/not-cancel.h: Add
multiple-inclusion guard.
2012-05-16 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h:
Remove now-unused __SNSECONDS_T_TYPE, and add new
__SYSCALL_ULONG_TYPE and __SYSCALL_SLONG_TYPE types.
2012-05-14 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/stat.h,
sysdeps/unix/sysv/linux/generic/bits/statfs.h:
Use "__aligned__" instead of "aligned" in public headers.
2012-05-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list:
Add entries for prlimit64 and fanotify_mark.
2012-05-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
(__SNSECONDS_T_TYPE): New macro.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-01-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/not-cancel.h: New file.
2012-01-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/epoll_wait.c: Remove
libc_hidden_proto declaration now it's in sys/epoll.h override.
2011-12-09 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/msq.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/shm.h: New file.
2011-12-03 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/Makefile: New file.
* sysdeps/unix/sysv/linux/generic/____longjmp_chk.c: New file.
* sysdeps/unix/sysv/linux/generic/access.c: New file.
* sysdeps/unix/sysv/linux/generic/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/sem.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/stat.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/statfs.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h: New file.
* sysdeps/unix/sysv/linux/generic/brk.c: New file.
* sysdeps/unix/sysv/linux/generic/chmod.c: New file.
* sysdeps/unix/sysv/linux/generic/chown.c: New file.
* sysdeps/unix/sysv/linux/generic/creat.c: New file.
* sysdeps/unix/sysv/linux/generic/dl-origin.c: New file.
* sysdeps/unix/sysv/linux/generic/dup2.c: New file.
* sysdeps/unix/sysv/linux/generic/epoll_create.c: New file.
* sysdeps/unix/sysv/linux/generic/epoll_wait.c: New file.
* sysdeps/unix/sysv/linux/generic/futimesat.c: New file.
* sysdeps/unix/sysv/linux/generic/getdents.c: New file.
* sysdeps/unix/sysv/linux/generic/getdents64.c: New file.
* sysdeps/unix/sysv/linux/generic/inotify_init.c: New file.
* sysdeps/unix/sysv/linux/generic/kernel_stat.h: New file.
* sysdeps/unix/sysv/linux/generic/lchown.c: New file.
* sysdeps/unix/sysv/linux/generic/link.c: New file.
* sysdeps/unix/sysv/linux/generic/lxstat.c: New file.
* sysdeps/unix/sysv/linux/generic/mkdir.c: New file.
* sysdeps/unix/sysv/linux/generic/nptl/not-cancel.h: New file.
* sysdeps/unix/sysv/linux/generic/open.c: New file.
* sysdeps/unix/sysv/linux/generic/open64.c: New file.
* sysdeps/unix/sysv/linux/generic/pause.c: New file.
* sysdeps/unix/sysv/linux/generic/pipe.c: New file.
* sysdeps/unix/sysv/linux/generic/poll.c: New file.
* sysdeps/unix/sysv/linux/generic/readlink.c: New file.
* sysdeps/unix/sysv/linux/generic/readlink_chk.c: New file.
* sysdeps/unix/sysv/linux/generic/recv.c: New file.
* sysdeps/unix/sysv/linux/generic/rename.c: New file.
* sysdeps/unix/sysv/linux/generic/rmdir.c: New file.
* sysdeps/unix/sysv/linux/generic/select.c: New file.
* sysdeps/unix/sysv/linux/generic/send.c: New file.
* sysdeps/unix/sysv/linux/generic/symlink.c: New file.
* sysdeps/unix/sysv/linux/generic/syscalls.list: New file.
* sysdeps/unix/sysv/linux/generic/sysctl.c: New file.
* sysdeps/unix/sysv/linux/generic/sysdep.h: New file.
* sysdeps/unix/sysv/linux/generic/umount.c: New file.
* sysdeps/unix/sysv/linux/generic/unlink.c: New file.
* sysdeps/unix/sysv/linux/generic/ustat.c: New file.
* sysdeps/unix/sysv/linux/generic/utimes.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/Versions: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fstatfs.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/llseek.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/lseek.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/sendfile.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/statfs.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c: New file.
* sysdeps/unix/sysv/linux/generic/xmknod.c: New file.
* sysdeps/unix/sysv/linux/generic/xstat.c: New file.

1034
ports/ChangeLog.m68k Normal file

File diff suppressed because it is too large Load Diff

1555
ports/ChangeLog.mips Normal file

File diff suppressed because it is too large Load Diff

179
ports/ChangeLog.powerpc Normal file
View File

@ -0,0 +1,179 @@
2012-06-13 Joseph Myers <joseph@codesourcery.com>
* data/localplt-powerpcsoft-linux-gnu.data: Allow abort and
soft-fp symbols to be absent.
2012-06-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Update.
2012-05-31 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Regenerated.
2012-05-30 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/soft-fp/sfp-machine.h (FP_EX_DENORM): Remove.
(FP_TRAPPING_EXCEPTIONS): Define.
2012-05-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libm.abilist
(__fe_nomask_env): Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Update.
2012-05-16 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/ld.abilist:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libanl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libcrypt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libdl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libnsl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/librt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libutil.abilist:
Likewise.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-02-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Resort with
gen-libm-test.pl -n in C locale.
2010-09-03 Luis Machado <luisgpm@br.ibm.com>
* sysdeps/powerpc/dl-procinfo.c: New file.
* sysdeps/powerpc/dl-procinfo.h: New file.
* sysdeps/powerpc/powerpc32/405/memcmp.S: New file.
* sysdeps/powerpc/powerpc32/405/memcpy.S: New file.
* sysdeps/powerpc/powerpc32/405/memset.S: New file.
* sysdeps/powerpc/powerpc32/405/strcmp.S: New file.
* sysdeps/powerpc/powerpc32/405/strcpy.S: New file.
* sysdeps/powerpc/powerpc32/405/strlen.S: New file.
* sysdeps/powerpc/powerpc32/405/strncmp.S: New file.
* sysdeps/powerpc/powerpc32/440/Implies: New file.
* sysdeps/powerpc/powerpc32/464/Implies: New file.
* sysdeps/powerpc/powerpc32/476/Implies: New file.
* sysdeps/powerpc/powerpc32/Makefile: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies: New file.
2010-10-11 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/feupdateenv.c (feupdateenv): Add
libm_hidden_ver.
* sysdeps/powerpc/nofpu/ftestexcept.c (fetestexcept): Add
libm_hidden_def.
2010-02-10 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fegetenv.c: Add hidden alias.
2008-08-19 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/shlib-versions: New.
* c++-types-powerpcsoft-linux-gnu.data: New.
* localplt-powerpcsoft-linux-gnu.data: New.
* sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Use
__fegetenv.
2007-08-29 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not
clobber other exceptions.
* sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new
exceptions.
* sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle
multiple new exceptions if some are disabled.
* sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.
2007-07-13 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/Makefile: Remove fe_nomask from libm-support.
2007-05-23 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable
exceptions. Use the updated env in fesetenv().
Add libm_hidden_def.
2007-01-23 Steven Munroe <sjmunroe@us.ibm.com>
[BZ #2749]
* sysdeps/powerpc/nofpu/fenv_libc.h: New file.
2007-01-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fesetenv.c (__sim_exceptions,
__sim_disabled_exceptions, __sim_round_mode): Remove declarations.
2006-10-05 Steven Munroe <sjmunroe@us.ibm.com>
[BZ #2749]
* sysdeps/powerpc/nofpu/Makefile
[subdirs-soft-fp] (sysdep_routines): Remove gcc-quad-routines.
[subdirs-math] (CPPFLAGS): Add -I../soft-fp.
[subdirs-math] (CFLAGS-e_powl.c): Add -fno-builtin-fabsl.
[subdirs-math] (CFLAGS-s_ccoshl.c): Likewise.
[subdirs-math] (CFLAGS-s_csinhl.c): Likewise.
[subdirs-math] (CFLAGS-s_clogl.c): Likewise.
[subdirs-math] (CFLAGS-s_clog10l.c): Likewise.
[subdirs-math] (CFLAGS-s_csinl.c): Likewise.
[subdirs-math] (CFLAGS-s_csqrtl.c): Likewise.
* sysdeps/powerpc/nofpu/Versions (GLIBC_2.3.2): Remove __fixtfdi,
__fixtfsi, and __trunctfsf2.
(GLIBC_2.4): Remove __floatunditf, __floatunsitf, and __unordtf2.
Add __nedf2, __nesf2, __gtdf2, __gtsf2, __ltdf2, __ltsf2.
* sysdeps/powerpc/nofpu/libm-test-ulps: Update for soft-fp.
* sysdeps/powerpc/soft-fp/sfp-machine.h: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S:
New file.
2006-01-27 Roland McGrath <roland@redhat.com>
* sysdeps/powerpc/nofpu/Subdirs: New file.
* sysdeps/powerpc/nofpu/Makefile [$(subdir) = soft-fp]
(sysdep_routines): Add $(gcc-quad-routines) here.
2006-01-06 Roland McGrath <roland@redhat.com>
* sysdeps/powerpc/nofpu/Versions (libc: GLIBC_2.4): New set.
Add __floatundidf, __floatundisf, __floatunditf, __floatunsidf,
__floatunsisf, __floatunsitf, __unorddf2, __unordsf2, __unordtf2.
2005-10-11 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/fesetround.c: Add libm_hidden_def.

371
ports/ChangeLog.tile Normal file
View File

@ -0,0 +1,371 @@
2012-05-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/tilegx/Makefile: Remove test
that $(subdir) is "misc" when setting abi- variables.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Makefile: New file.
* sysdeps/tile/libm-test-ulps: Account for new tests.
* sysdeps/unix/sysv/linux/tile/tilegx/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c: Replace
_internal alias by hidden_def.
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_NEW_GETRLIMIT_SYSCALL, __ASSUME_TRUNCATE64_SYSCALL): Remove.
2012-05-23 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/bits/mman.h (MADV_DONTDUMP): Define.
(MADV_DODUMP): Likewise.
2012-05-22 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/bits/libm-test-ulps: Update.
* sysdeps/tile/bits/wordsize.h (__WORDSIZE_COMPAT32): Rename to
__WORDSIZE_TIME64_COMPAT32.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist: Update.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Update.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Update.
2012-05-17 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/fegetenv.c: Version fegetenv() like fesetenv().
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libm.abilist:
Add fegetenv.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libm.abilist: Likewise.
* sysdeps/tile/stackguard-macros.h: Support tilegx32.
* data/c++-types-tilepro-linux-gnu.data: Renamed from
data/c++-types-tile-linux-gnu.data.
* data/c++-types-tilegx-linux-gnu.data: New file.
* sysdeps/tile/libm-test-ulps: Improved fma() and exp10().
* sysdeps/tile/s_fma.c: Use ieee754/dbl-64 without rounding or
exception support; it's still much better than the generic version.
2012-05-16 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/ucontext_i: Fix tilegx32 offset bug.
* sysdeps/unix/sysv/linux/tile/getcontext.S: Fix tilegx32 bug
where we accessed "uc_flags" as an 8-byte field.
* sysdeps/unix/sysv/linux/tile/setcontext.S: Likewise,
and also fix frame code not to access stack below "sp".
* sysdeps/unix/sysv/linux/tile/swapcontext.S: Fix frame code not
to access stack below "sp", and add frame unwind to error path.
2012-05-15 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sotruss-lib.c: New file.
* sysdeps/tile/math_private.h (feraiseexcept): Use statement
expression syntax to avoid compiler warning.
* sysdeps/tile/libm-test-ulps: New file.
* sysdeps/tile/bits/fenv.h (__FE_UNDEFINED): New symbol.
* sysdeps/tile/ldsodefs.h (ARCH_PLTEXIT_MEMBERS): Add proper
const qualifier to "inregs" argument.
* sysdeps/tile/elf/stackguard-macros.h: Delete unused file.
2012-05-14 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/ld.abilist:
New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libanl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libcrypt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libdl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libnsl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/librt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libutil.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/ld.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libanl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libcrypt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libdl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libnsl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/librt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libutil.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/ld.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libanl.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libcrypt.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libdl.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libnsl.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/librt.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libutil.abilist: Likewise.
* sysdeps/tile/dl-start.S: Align stack for tilegx32.
2012-05-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/sys/dataplane.h: Add <features.h>.
* sysdeps/unix/sysv/linux/tile/nptl/clone.S: Add missing CFI.
* sysdeps/tile/tls-macros.h: Fix buggy TLS_GD, etc., macros.
* sysdeps/tile/tilegx/memchr.c: Use new copy_byte() function
to efficiently generate a large constant for masking.
* sysdeps/tile/tilegx/memset.c: Likewise.
* sysdeps/tile/tilegx/rawmemchr.c: Likewise.
* sysdeps/tile/tilegx/strchr.c: Likewise.
* sysdeps/tile/tilegx/strchrnul.c: Likewise.
* sysdeps/tile/tilegx/strrchr.c: Likewise.
* sysdeps/tile/tilegx/string-endian.h (copy_byte): New function.
* sysdeps/tile/tilegx/memcpy.c: Allow memcpy(p, p, n)
without corrupting memory at "p".
* sysdeps/tile/__tls_get_addr.S: Use __WORDSIZE, not _LP64.
* sysdeps/tile/stackguard-macros.h: New file.
* sysdeps/tile/elf/stackguard-macros.h: New stub include file.
* sysdeps/tile/Makefile (ELF_MACHINE_PLTREL_OVERLAP):
Remove variable no longer used by core.
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h: Don't name
siginfo_t struct. Add forward declaration of pthread_attr_t and
use it in sigevent.
* sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h: Name
pthread_attr_t union.
* sysdeps/tile/crti.S: New file, based on compiler output
for sysdeps/generic/initfini.c.
* sysdeps/tile/crtn.S: Likewise.
* sysdeps/tile/Makefile (CFLAGS-initfini.s): Remove variable.
* sysdeps/unix/sysv/linux/tile/nptl/Makefile
(CFLAGS-pt-initfini.s): Likewise.
* sysdeps/tile/elf/start.S: Moved to ...
* sysdeps/tile/start.S: ...here.
2012-04-15 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h: Include
<_itoa.h> instead of <stdio-common/_itoa.h>.
* sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: Likewise.
2012-03-09 Richard Henderson <rth@twiddle.net>
* sysdeps/tile/math_private.h: Use include_next to
chain math_private.h.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-01-31 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/bits/fenv.h: Use const instead of __const.
* sysdeps/unix/sysv/linux/tile/sys/cachectl.h: Likewise.
2012-01-31 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sysdep.h: Use <feedback.h> not <feedback-asm.h>
to reflect change from gcc community giveback.
2012-01-31 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/math_private.h: Ignore feraiseexcept() internally.
2012-01-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sysdep.h: Don't check HAVE_ELF or NO_UNDERSCORES.
2012-01-07 Joseph Myers <joseph@codesourcery.com>
* sysdeps/tile/backtrace.c: Use x86_64 version of backtrace.c.
2011-12-03 Chris Metcalf <cmetcalf@tilera.com>
* data/c++-types-tile-linux-gnu.data: New file.
* sysdeps/tile/Implies: New file.
* sysdeps/tile/Makefile: New file.
* sysdeps/tile/Versions: New file.
* sysdeps/tile/__longjmp.S: New file.
* sysdeps/tile/__tls_get_addr.S: New file.
* sysdeps/tile/_mcount.S: New file.
* sysdeps/tile/abort-instr.h: New file.
* sysdeps/tile/backtrace.c: New file.
* sysdeps/tile/bits/atomic.h: New file.
* sysdeps/tile/bits/byteswap.h: New file.
* sysdeps/tile/bits/endian.h: New file.
* sysdeps/tile/bits/fenv.h: New file.
* sysdeps/tile/bits/link.h: New file.
* sysdeps/tile/bits/mathdef.h: New file.
* sysdeps/tile/bits/mathinline.h: New file.
* sysdeps/tile/bits/setjmp.h: New file.
* sysdeps/tile/bsd-_setjmp.S: New file.
* sysdeps/tile/bsd-setjmp.S: New file.
* sysdeps/tile/bzero.S: New file.
* sysdeps/tile/dl-lookupcfg.h: New file.
* sysdeps/tile/dl-machine.h: New file.
* sysdeps/tile/dl-runtime.c: New file.
* sysdeps/tile/dl-start.S: New file.
* sysdeps/tile/dl-tls.c: New file.
* sysdeps/tile/dl-tls.h: New file.
* sysdeps/tile/dl-trampoline.S: New file.
* sysdeps/tile/elf/start.S: New file.
* sysdeps/tile/fegetenv.c: New file.
* sysdeps/tile/fegetround.c: New file.
* sysdeps/tile/feholdexcpt.c: New file.
* sysdeps/tile/fesetenv.c: New file.
* sysdeps/tile/fesetround.c: New file.
* sysdeps/tile/feupdateenv.c: New file.
* sysdeps/tile/ffs.c: New file.
* sysdeps/tile/ffsll.c: New file.
* sysdeps/tile/gccframe.h: New file.
* sysdeps/tile/jmpbuf-offsets.h: New file.
* sysdeps/tile/jmpbuf-unwind.h: New file.
* sysdeps/tile/ldsodefs.h: New file.
* sysdeps/tile/machine-gmon.h: New file.
* sysdeps/tile/nptl/Makefile: New file.
* sysdeps/tile/nptl/pthread_spin_lock.c: New file.
* sysdeps/tile/nptl/pthread_spin_trylock.c: New file.
* sysdeps/tile/nptl/pthreaddef.h: New file.
* sysdeps/tile/nptl/tcb-offsets.sym: New file.
* sysdeps/tile/nptl/tls.h: New file.
* sysdeps/tile/preconfigure: New file.
* sysdeps/tile/s_fma.c: New file.
* sysdeps/tile/s_fmaf.c: New file.
* sysdeps/tile/setjmp.S: New file.
* sysdeps/tile/shlib-versions: New file.
* sysdeps/tile/stackinfo.h: New file.
* sysdeps/tile/sysdep.h: New file.
* sysdeps/tile/tilegx/bits/atomic.h: New file.
* sysdeps/tile/tilegx/bits/wordsize.h: New file.
* sysdeps/tile/tilegx/memchr.c: New file.
* sysdeps/tile/tilegx/memcpy.c: New file.
* sysdeps/tile/tilegx/memset.c: New file.
* sysdeps/tile/tilegx/memusage.h: New file.
* sysdeps/tile/tilegx/rawmemchr.c: New file.
* sysdeps/tile/tilegx/strchr.c: New file.
* sysdeps/tile/tilegx/strchrnul.c: New file.
* sysdeps/tile/tilegx/string-endian.h: New file.
* sysdeps/tile/tilegx/strlen.c: New file.
* sysdeps/tile/tilegx/strrchr.c: New file.
* sysdeps/tile/tilegx/tilegx32/Implies: New file.
* sysdeps/tile/tilegx/tilegx64/Implies: New file.
* sysdeps/tile/tilepro/Implies: New file.
* sysdeps/tile/tilepro/bits/atomic.h: New file.
* sysdeps/tile/tilepro/bits/wordsize.h: New file.
* sysdeps/tile/tilepro/memchr.c: New file.
* sysdeps/tile/tilepro/memcpy.S: New file.
* sysdeps/tile/tilepro/memset.c: New file.
* sysdeps/tile/tilepro/memusage.h: New file.
* sysdeps/tile/tilepro/rawmemchr.c: New file.
* sysdeps/tile/tilepro/strchr.c: New file.
* sysdeps/tile/tilepro/strchrnul.c: New file.
* sysdeps/tile/tilepro/strlen.c: New file.
* sysdeps/tile/tilepro/strrchr.c: New file.
* sysdeps/tile/tls-macros.h: New file.
* sysdeps/tile/tst-audit.h: New file.
* sysdeps/unix/sysv/linux/tile/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/Versions: New file.
* sysdeps/unix/sysv/linux/tile/bits/environments.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/local_lim.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/mman.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/mman.h~: New file.
* sysdeps/unix/sysv/linux/tile/bits/sigaction.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h: New file.
* sysdeps/unix/sysv/linux/tile/cacheflush.c: New file.
* sysdeps/unix/sysv/linux/tile/configure: New file.
* sysdeps/unix/sysv/linux/tile/configure.in: New file.
* sysdeps/unix/sysv/linux/tile/getcontext.S: New file.
* sysdeps/unix/sysv/linux/tile/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/tile/makecontext.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/clone.S: New file.
* sysdeps/unix/sysv/linux/tile/nptl/createthread.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/fork.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/pt-vfork.S: New file.
* sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/sysdep-cancel.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/vfork.S: New file.
* sysdeps/unix/sysv/linux/tile/nptl/waitpid.S: New file.
* sysdeps/unix/sysv/linux/tile/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/tile/set_dataplane.c: New file.
* sysdeps/unix/sysv/linux/tile/setcontext.S: New file.
* sysdeps/unix/sysv/linux/tile/sigcontextinfo.h: New file.
* sysdeps/unix/sysv/linux/tile/swapcontext.S: New file.
* sysdeps/unix/sysv/linux/tile/sys/cachectl.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/dataplane.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/procfs.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/reg.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/user.h: New file.
* sysdeps/unix/sysv/linux/tile/syscall.S: New file.
* sysdeps/unix/sysv/linux/tile/sysdep.c: New file.
* sysdeps/unix/sysv/linux/tile/sysdep.h: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Implies: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Implies: New file.
* sysdeps/unix/sysv/linux/tile/tilepro/Implies: New file.
* sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: New file.
* sysdeps/unix/sysv/linux/tile/ucontext_i.h: New file.

43
ports/Makefile Normal file
View File

@ -0,0 +1,43 @@
# This makefile is not used by the glibc build process.
# It's purely for making ports tarballs.
.PHONY: dist dist-ports
dist: dist-ports
# Do `make dist dist-version=X.Y.Z' to make tar files of an older version.
dist-version = $(version)
# Also try 'dist-tag=some="-r TAG"' (or -D DATE) to get some tag rather
# than the release tag for X.Y.Z.
dist-tag = -r glibc-$(subst .,_,$(dist-version))
distname = glibc-ports-$(dist-version)
do-export = cvs $(CVSOPTS) -Q export -d $(basename $@) $(dist-tag)
dist-ports: $(foreach Z,.bz2 .gz,$(distname).tar$Z)
md5sum $^
$(distname).tar:
@rm -fr $(basename $@)
$(MAKE) -q `find sysdeps -name configure`
$(do-export) ports
find $(basename $@) -name configure -print | xargs touch
tar cf $@ $(basename $@)
rm -fr $(basename $@)
sysdeps-of-stem = sysdeps/$* sysdeps/unix/sysv/linux/$*
.PRECIOUS: %.gz %.bz2 # Don't delete output as intermediate files.
dist-port-%: $(foreach Z,.bz2 .gz,glibc-port-%-$(dist-version).tar$Z)
md5sum $^
glibc-port-%-$(dist-version).tar: ChangeLog.%
@rm -fr $(basename $@)
$(MAKE) -q `find $(sysdeps-of-stem) -name configure`
$(do-export) ports/ChangeLog.$* $(addprefix ports/,$(sysdeps-of-stem))
mv $(basename $@)/ports/* $(basename $@)/
rmdir $(basename $@)/ports
find $(basename $@) -name configure -print | xargs touch
tar cf $@ $(basename $@)
rm -fr $(basename $@)
%.bz2: %; bzip2 -9vk $<
%.gz: %; gzip -9vnc $< > $@.new && mv -f $@.new $@

50
ports/README Normal file
View File

@ -0,0 +1,50 @@
This is the glibc ports repository, an add-on for the GNU C Library (glibc).
It contains code that is not maintained in the official glibc source tree.
This includes working ports to GNU/Linux on some machine architectures that
are not maintained in the official glibc source tree. It also includes
some code once used by old libc ports now defunct, which has been abandoned
but may be useful for some future porter to examine. It may also include
some optimized functions tailored for specific CPU implementations of an
architecture, to be selected using --with-cpu.
The ports repository is cooperatively maintained by volunteers on the
<libc-ports@sourceware.org> mailing list, and housed in a separate
ports git repository. See
http://www.gnu.org/software/libc/download.html for details on using
git. To report a bug in code housed in the ports repository, please
go to http://sources.redhat.com/bugzilla/ and file a bug report under
the glibc "ports" component.
An add-on for an individual port can be made from just the sysdeps/
subdirectories containing the port's code. You may want to include a
README and Banner of your own talking about your port's code in particular,
rather than the generic ones here.
The real source code for any ports is found in the sysdeps/ subdirectories.
These should be exactly what would go into the main libc source tree if you
were to incorporate it directly. The only exceptions are the files
sysdeps/*/preconfigure and sysdeps/*/preconfigure.in; these are fragments
used by this add-on's configure fragment. The purpose of these is to set
$base_machine et al when the main libc configure's defaults are not right
for some machine. Everything else can and should be done from a normal
sysdeps/.../configure fragment that is used only when the configuration
selects that sysdeps subdirectory. Each port that requires some special
treatment before the sysdeps directory list is calculated, should add a
sysdeps/CPU/preconfigure file; this can either be written by hand or
generated by Autoconf from sysdeps/CPU/preconfigure.in, and follow the
rules for glibc add-on configure fragments. No preconfigure file should do
anything on an unrelated configuration, so that disparate ports can be put
into a single add-on without interfering with each other. Files that
would go in scripts/data/ for libc go in data/ in ports.
Like all glibc add-ons, this must be used by specifying the directory in
the --enable-add-ons option when running glibc's configure script.
The GNU C Library is free software. See the file COPYING.LIB in the
libc repository for copying conditions, and LICENSES for notices about
a few contributions that require these additional notices to be
distributed. License copyright years may be listed using range
notation, e.g., 2000-2011, indicating that every year in the range,
inclusive, is a copyrightable year that would otherwise be listed
individually.

View File

@ -0,0 +1,67 @@
blkcnt64_t:x
blkcnt_t:l
blksize_t:l
caddr_t:Pc
clockid_t:i
clock_t:l
daddr_t:i
dev_t:y
fd_mask:l
fsblkcnt64_t:y
fsblkcnt_t:m
fsfilcnt64_t:y
fsfilcnt_t:m
fsid_t:8__fsid_t
gid_t:j
id_t:j
ino64_t:y
ino_t:m
int16_t:s
int32_t:i
int64_t:x
int8_t:a
intptr_t:i
key_t:i
loff_t:x
mode_t:j
nlink_t:j
off64_t:x
off_t:l
pid_t:i
pthread_attr_t:14pthread_attr_t
pthread_barrier_t:17pthread_barrier_t
pthread_barrierattr_t:21pthread_barrierattr_t
pthread_cond_t:14pthread_cond_t
pthread_condattr_t:18pthread_condattr_t
pthread_key_t:j
pthread_mutex_t:15pthread_mutex_t
pthread_mutexattr_t:19pthread_mutexattr_t
pthread_once_t:i
pthread_rwlock_t:16pthread_rwlock_t
pthread_rwlockattr_t:20pthread_rwlockattr_t
pthread_spinlock_t:i
pthread_t:m
quad_t:x
register_t:i
rlim64_t:y
rlim_t:m
sigset_t:10__sigset_t
size_t:j
socklen_t:j
ssize_t:i
suseconds_t:l
time_t:l
u_char:h
uid_t:j
uint:j
u_int:j
u_int16_t:t
u_int32_t:j
u_int64_t:y
u_int8_t:h
ulong:m
u_long:m
u_quad_t:y
useconds_t:j
ushort:t
u_short:t

View File

@ -0,0 +1,67 @@
blkcnt64_t:x
blkcnt_t:l
blksize_t:l
caddr_t:Pc
clockid_t:i
clock_t:l
daddr_t:i
dev_t:y
fd_mask:l
fsblkcnt64_t:y
fsblkcnt_t:m
fsfilcnt64_t:y
fsfilcnt_t:m
fsid_t:8__fsid_t
gid_t:j
id_t:j
ino64_t:y
ino_t:m
int16_t:s
int32_t:i
int64_t:x
int8_t:a
intptr_t:i
key_t:i
loff_t:x
mode_t:j
nlink_t:j
off64_t:x
off_t:l
pid_t:i
pthread_attr_t:14pthread_attr_t
pthread_barrier_t:17pthread_barrier_t
pthread_barrierattr_t:21pthread_barrierattr_t
pthread_cond_t:14pthread_cond_t
pthread_condattr_t:18pthread_condattr_t
pthread_key_t:j
pthread_mutex_t:15pthread_mutex_t
pthread_mutexattr_t:19pthread_mutexattr_t
pthread_once_t:i
pthread_rwlock_t:16pthread_rwlock_t
pthread_rwlockattr_t:20pthread_rwlockattr_t
pthread_spinlock_t:i
pthread_t:m
quad_t:x
register_t:i
rlim64_t:y
rlim_t:m
sigset_t:10__sigset_t
size_t:j
socklen_t:j
ssize_t:i
suseconds_t:l
time_t:l
u_char:h
uid_t:j
uint:j
u_int:j
u_int16_t:t
u_int32_t:j
u_int64_t:y
u_int8_t:h
ulong:m
u_long:m
u_quad_t:y
useconds_t:j
ushort:t
u_short:t

View File

@ -0,0 +1,67 @@
blkcnt64_t:x
blkcnt_t:l
blksize_t:l
caddr_t:Pc
clockid_t:i
clock_t:l
daddr_t:i
dev_t:y
fd_mask:l
fsblkcnt64_t:y
fsblkcnt_t:m
fsfilcnt64_t:y
fsfilcnt_t:m
fsid_t:8__fsid_t
gid_t:j
id_t:j
ino64_t:y
ino_t:m
int16_t:s
int32_t:i
int64_t:x
int8_t:a
intptr_t:i
key_t:i
loff_t:x
mode_t:j
nlink_t:j
off64_t:x
off_t:l
pid_t:i
pthread_attr_t:14pthread_attr_t
pthread_barrier_t:17pthread_barrier_t
pthread_barrierattr_t:21pthread_barrierattr_t
pthread_cond_t:14pthread_cond_t
pthread_condattr_t:18pthread_condattr_t
pthread_key_t:j
pthread_mutex_t:15pthread_mutex_t
pthread_mutexattr_t:19pthread_mutexattr_t
pthread_once_t:i
pthread_rwlock_t:16pthread_rwlock_t
pthread_rwlockattr_t:20pthread_rwlockattr_t
pthread_spinlock_t:i
pthread_t:m
quad_t:x
register_t:i
rlim64_t:y
rlim_t:m
sigset_t:10__sigset_t
size_t:j
socklen_t:j
ssize_t:i
suseconds_t:l
time_t:l
u_char:h
uid_t:j
uint:j
u_int:j
u_int16_t:t
u_int32_t:j
u_int64_t:y
u_int8_t:h
ulong:m
u_long:m
u_quad_t:y
useconds_t:j
ushort:t
u_short:t

View File

@ -0,0 +1,67 @@
blkcnt64_t:l
blkcnt_t:l
blksize_t:i
caddr_t:Pc
clockid_t:i
clock_t:l
daddr_t:i
dev_t:m
fd_mask:l
fsblkcnt64_t:m
fsblkcnt_t:m
fsfilcnt64_t:m
fsfilcnt_t:m
fsid_t:8__fsid_t
gid_t:j
id_t:j
ino64_t:m
ino_t:m
int16_t:s
int32_t:i
int64_t:l
int8_t:a
intptr_t:l
key_t:i
loff_t:l
mode_t:j
nlink_t:j
off64_t:l
off_t:l
pid_t:i
pthread_attr_t:14pthread_attr_t
pthread_barrier_t:17pthread_barrier_t
pthread_barrierattr_t:21pthread_barrierattr_t
pthread_cond_t:14pthread_cond_t
pthread_condattr_t:18pthread_condattr_t
pthread_key_t:j
pthread_mutex_t:15pthread_mutex_t
pthread_mutexattr_t:19pthread_mutexattr_t
pthread_once_t:i
pthread_rwlock_t:16pthread_rwlock_t
pthread_rwlockattr_t:20pthread_rwlockattr_t
pthread_spinlock_t:i
pthread_t:m
quad_t:l
register_t:l
rlim64_t:m
rlim_t:m
sigset_t:10__sigset_t
size_t:m
socklen_t:j
ssize_t:l
suseconds_t:l
time_t:l
u_char:h
uid_t:j
uint:j
u_int:j
u_int16_t:t
u_int32_t:j
u_int64_t:m
u_int8_t:h
ulong:m
u_long:m
u_quad_t:m
useconds_t:j
ushort:t
u_short:t

View File

@ -0,0 +1,67 @@
blkcnt64_t:x
blkcnt_t:l
blksize_t:i
caddr_t:Pc
clockid_t:i
clock_t:l
daddr_t:i
dev_t:y
fd_mask:l
fsblkcnt64_t:y
fsblkcnt_t:m
fsfilcnt64_t:y
fsfilcnt_t:m
fsid_t:8__fsid_t
gid_t:j
id_t:j
ino64_t:y
ino_t:m
int16_t:s
int32_t:i
int64_t:x
int8_t:a
intptr_t:i
key_t:i
loff_t:x
mode_t:j
nlink_t:j
off64_t:x
off_t:l
pid_t:i
pthread_attr_t:14pthread_attr_t
pthread_barrier_t:17pthread_barrier_t
pthread_barrierattr_t:21pthread_barrierattr_t
pthread_cond_t:14pthread_cond_t
pthread_condattr_t:18pthread_condattr_t
pthread_key_t:j
pthread_mutex_t:15pthread_mutex_t
pthread_mutexattr_t:19pthread_mutexattr_t
pthread_once_t:i
pthread_rwlock_t:16pthread_rwlock_t
pthread_rwlockattr_t:20pthread_rwlockattr_t
pthread_spinlock_t:i
pthread_t:m
quad_t:x
register_t:i
rlim64_t:y
rlim_t:m
sigset_t:10__sigset_t
size_t:j
socklen_t:j
ssize_t:i
suseconds_t:l
time_t:l
u_char:h
uid_t:j
uint:j
u_int:j
u_int16_t:t
u_int32_t:j
u_int64_t:y
u_int8_t:h
ulong:m
u_long:m
u_quad_t:y
useconds_t:j
ushort:t
u_short:t

View File

@ -0,0 +1,20 @@
libc.so: _OtsAddX ?
libc.so: _OtsConvertFloatXT ?
libc.so: _OtsCvtQX ?
libc.so: _OtsDivX ?
libc.so: _OtsEqlX ?
libc.so: _OtsGeqX ?
libc.so: _OtsLssX ?
libc.so: _OtsMulX ?
libc.so: _OtsNeqX ?
libc.so: _OtsSubX ?
libc.so: _Unwind_Find_FDE
libc.so: calloc ?
libc.so: free ?
libc.so: malloc ?
libc.so: memalign ?
libc.so: realloc ?
libm.so: matherr
# We used to offer inline functions that used this, so it must be exported.
# Ought to reorg things such that carg isn't thus forced to use a plt.
libm.so: __atan2

View File

@ -0,0 +1,13 @@
libc.so: __signbit
libc.so: calloc
libc.so: free
libc.so: fscanf
libc.so: malloc
libc.so: memalign
libc.so: raise
libc.so: realloc
libm.so: __signbit
libm.so: __signbitf
libm.so: matherr
libpthread.so: __errno_location
libpthread.so: raise

View File

@ -0,0 +1,8 @@
libc.so: calloc
libc.so: free
libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
libm.so: matherrf
libm.so: matherrl

View File

@ -0,0 +1,8 @@
libc.so: _Unwind_Find_FDE
libc.so: __m68k_read_tp
libc.so: calloc
libc.so: free
libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr

View File

@ -0,0 +1,41 @@
libc.so: _Unwind_Find_FDE
libc.so: __adddf3 ?
libc.so: __addsf3 ?
libc.so: __divdf3 ?
libc.so: __divsf3 ?
libc.so: __eqdf2 ?
libc.so: __eqsf2 ?
libc.so: __extendsfdf2 ?
libc.so: __fixdfsi ?
libc.so: __fixsfsi ?
libc.so: __fixunsdfsi ?
libc.so: __floatsidf ?
libc.so: __floatsisf ?
libc.so: __floatunsidf ?
libc.so: __floatunsisf ?
libc.so: __gedf2 ?
libc.so: __gtdf2 ?
libc.so: __ledf2 ?
libc.so: __ltdf2 ?
libc.so: __muldf3 ?
libc.so: __mulsf3 ?
libc.so: __nedf2 ?
libc.so: __signbit
libc.so: __signbitl
libc.so: __subdf3 ?
libc.so: __subsf3 ?
libc.so: __truncdfsf2 ?
libc.so: __unorddf2 ?
libc.so: abort ?
libc.so: calloc
libc.so: free
libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: __signbit
libm.so: __signbitf
libm.so: __signbitl
libm.so: copysignl
libm.so: fabsl
libm.so: fegetround
libm.so: matherr

View File

@ -0,0 +1,7 @@
wordsize-64
# Alpha uses IEEE 754 single, double and quad precision floating point.
ieee754/ldbl-128
ieee754/dbl-64/wordsize-64
ieee754/dbl-64
ieee754/flt-32
alpha/soft-fp

View File

@ -0,0 +1,55 @@
# Copyright (C) 1993, 94, 95, 96, 97, 99 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# Contributed by Brendan Kehoe (brendan@zen.org).
# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library. If not, see
# <http://www.gnu.org/licenses/>.
ifeq ($(subdir),db2)
CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_ALPHA=1
endif
ifeq ($(subdir),gmon)
sysdep_routines += _mcount
endif
ifeq ($(subdir),gnulib)
sysdep_routines += divl divlu divq divqu reml remlu remq remqu
endif
ifeq ($(subdir),string)
sysdep_routines += stxcpy stxncpy
endif
ifeq ($(subdir),elf)
# The ld.so startup code cannot use literals until it self-relocates.
CFLAGS-rtld.c = -mbuild-constants
endif
ifeq ($(subdir),math)
# The fma routines rely on inexact being raised for correct results.
CFLAGS-s_fma.c = -mieee-with-inexact
CFLAGS-s_fmaf.c = -mieee-with-inexact
# This test tries to check for inexact being raised by arithmetic.
CFLAGS-test-misc.c += -mieee-with-inexact
endif
# Build everything with full IEEE math support, and with dynamic rounding;
# there are a number of math routines that are defined to work with the
# "current" rounding mode, and it's easiest to set this with all of them.
sysdep-CFLAGS += -mieee -mfp-rounding-mode=d
# libc.so requires about 16k for the small data area, which is well
# below the 64k maximum.
pic-ccflag = -fpic

View File

@ -0,0 +1 @@
soft-fp

View File

@ -0,0 +1,13 @@
libc {
GLIBC_2.0 {
# functions with special/multiple interfaces
__divqu; __remqu; __divqs; __remqs; __divlu; __remlu; __divls;
__remls; __divl; __reml; __divq; __remq; __divqu; __remqu;
}
}
libm {
GLIBC_2.0 {
# used in inline functions.
__atan2;
}
}

View File

@ -0,0 +1,63 @@
/* Copyright (C) 1992, 1994, 1997, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#define __ASSEMBLY__
#include <sysdep.h>
#include <jmpbuf-offsets.h>
ENTRY(__longjmp)
#ifdef PROF
ldgp gp, 0(pv)
.set noat
lda AT, _mcount
jsr AT, (AT), _mcount
.set at
.prologue 1
#else
.prologue 0
#endif
mov a1, v0
ldq s0, JB_S0*8(a0)
ldq s1, JB_S1*8(a0)
ldq s2, JB_S2*8(a0)
ldq s3, JB_S3*8(a0)
ldq s4, JB_S4*8(a0)
ldq s5, JB_S5*8(a0)
ldq ra, JB_PC*8(a0)
ldq fp, JB_FP*8(a0)
ldq t0, JB_SP*8(a0)
ldt $f2, JB_F2*8(a0)
ldt $f3, JB_F3*8(a0)
ldt $f4, JB_F4*8(a0)
ldt $f5, JB_F5*8(a0)
ldt $f6, JB_F6*8(a0)
ldt $f7, JB_F7*8(a0)
ldt $f8, JB_F8*8(a0)
ldt $f9, JB_F9*8(a0)
#ifdef PTR_DEMANGLE
PTR_DEMANGLE(ra, t1)
PTR_DEMANGLE2(t0, t1)
PTR_DEMANGLE2(fp, t1)
#endif
cmoveq v0, 1, v0
mov t0, sp
ret
END(__longjmp)

View File

@ -0,0 +1,105 @@
/* Machine-specific calling sequence for `mcount' profiling function. alpha
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Assembly stub to invoke _mcount(). Compiler generated code calls
this stub after executing a function's prologue and without saving any
registers. It is therefore necessary to preserve a0..a5 as they may
contain function arguments. To work correctly with frame- less
functions, it is also necessary to preserve ra. Finally, division
routines are invoked with a special calling convention and the
compiler treats those calls as if they were instructions. In
particular, it doesn't save any of the temporary registers (caller
saved registers). It is therefore necessary to preserve all
caller-saved registers as well.
Upon entering _mcount, register $at holds the return address and ra
holds the return address of the function's caller (selfpc and frompc,
respectively in gmon.c language...). */
#include <sysdep.h>
.set noat
.set noreorder
LEAF(_mcount, 0xb0)
subq sp, 0xb0, sp
.prologue 0
stq a0, 0x00(sp)
mov ra, a0 # a0 = caller-pc
stq a1, 0x08(sp)
mov $at, a1 # a1 = self-pc
stq $at, 0x10(sp)
stq a2, 0x18(sp)
stq a3, 0x20(sp)
stq a4, 0x28(sp)
stq a5, 0x30(sp)
stq ra, 0x38(sp)
stq gp, 0x40(sp)
br gp, 1f
1: ldgp gp, 0(gp)
stq t0, 0x48(sp)
stq t1, 0x50(sp)
stq t2, 0x58(sp)
stq t3, 0x60(sp)
stq t4, 0x68(sp)
stq t5, 0x70(sp)
stq t6, 0x78(sp)
stq t7, 0x80(sp)
stq t8, 0x88(sp)
stq t9, 0x90(sp)
stq t10, 0x98(sp)
stq t11, 0xa0(sp)
stq v0, 0xa8(sp)
jsr ra, __mcount
ldq a0, 0x00(sp)
ldq a1, 0x08(sp)
ldq $at, 0x10(sp) # restore self-pc
ldq a2, 0x18(sp)
ldq a3, 0x20(sp)
ldq a4, 0x28(sp)
ldq a5, 0x30(sp)
ldq ra, 0x38(sp)
ldq gp, 0x40(sp)
mov $at, pv # make pv point to return address
ldq t0, 0x48(sp) # this is important under OSF/1 to
ldq t1, 0x50(sp) # ensure that the code that we return
ldq t2, 0x58(sp) # can correctly compute its gp
ldq t3, 0x60(sp)
ldq t4, 0x68(sp)
ldq t5, 0x70(sp)
ldq t6, 0x78(sp)
ldq t7, 0x80(sp)
ldq t8, 0x88(sp)
ldq t9, 0x90(sp)
ldq t10, 0x98(sp)
ldq t11, 0xa0(sp)
ldq v0, 0xa8(sp)
addq sp, 0xb0, sp
ret zero,($at),1
END(_mcount)
weak_alias (_mcount, mcount)

118
ports/sysdeps/alpha/add_n.S Normal file
View File

@ -0,0 +1,118 @@
# Alpha __mpn_add_n -- Add two limb vectors of the same length > 0 and
# store sum in a third limb vector.
# Copyright (C) 1995 Free Software Foundation, Inc.
# 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 Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version.
# The GNU 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 Lesser General Public
# License for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr $16
# s1_ptr $17
# s2_ptr $18
# size $19
.set noreorder
.set noat
.text
.align 3
.globl __mpn_add_n
.ent __mpn_add_n
__mpn_add_n:
.frame $30,0,$26,0
ldq $3,0($17)
ldq $4,0($18)
subq $19,1,$19
and $19,4-1,$2 # number of limbs in first loop
bis $31,$31,$0
beq $2,.L0 # if multiple of 4 limbs, skip first loop
subq $19,$2,$19
.Loop0: subq $2,1,$2
ldq $5,8($17)
addq $4,$0,$4
ldq $6,8($18)
cmpult $4,$0,$1
addq $3,$4,$4
cmpult $4,$3,$0
stq $4,0($16)
or $0,$1,$0
addq $17,8,$17
addq $18,8,$18
bis $5,$5,$3
bis $6,$6,$4
addq $16,8,$16
bne $2,.Loop0
.L0: beq $19,.Lend
.align 3
.Loop: subq $19,4,$19
ldq $5,8($17)
addq $4,$0,$4
ldq $6,8($18)
cmpult $4,$0,$1
addq $3,$4,$4
cmpult $4,$3,$0
stq $4,0($16)
or $0,$1,$0
ldq $3,16($17)
addq $6,$0,$6
ldq $4,16($18)
cmpult $6,$0,$1
addq $5,$6,$6
cmpult $6,$5,$0
stq $6,8($16)
or $0,$1,$0
ldq $5,24($17)
addq $4,$0,$4
ldq $6,24($18)
cmpult $4,$0,$1
addq $3,$4,$4
cmpult $4,$3,$0
stq $4,16($16)
or $0,$1,$0
ldq $3,32($17)
addq $6,$0,$6
ldq $4,32($18)
cmpult $6,$0,$1
addq $5,$6,$6
cmpult $6,$5,$0
stq $6,24($16)
or $0,$1,$0
addq $17,32,$17
addq $18,32,$18
addq $16,32,$16
bne $19,.Loop
.Lend: addq $4,$0,$4
cmpult $4,$0,$1
addq $3,$4,$4
cmpult $4,$3,$0
stq $4,0($16)
or $0,$1,$0
ret $31,($26),1
.end __mpn_add_n

View File

@ -0,0 +1,90 @@
# Alpha 21064 __mpn_addmul_1 -- Multiply a limb vector with a limb and add
# the result to a second limb vector.
# Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
# 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 Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version.
# The GNU 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 Lesser General Public
# License for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr r16
# s1_ptr r17
# size r18
# s2_limb r19
# This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
.set noreorder
.set noat
.text
.align 3
.globl __mpn_addmul_1
.ent __mpn_addmul_1 2
__mpn_addmul_1:
.frame $30,0,$26
ldq $2,0($17) # $2 = s1_limb
addq $17,8,$17 # s1_ptr++
subq $18,1,$18 # size--
mulq $2,$19,$3 # $3 = prod_low
ldq $5,0($16) # $5 = *res_ptr
umulh $2,$19,$0 # $0 = prod_high
beq $18,.Lend1 # jump if size was == 1
ldq $2,0($17) # $2 = s1_limb
addq $17,8,$17 # s1_ptr++
subq $18,1,$18 # size--
addq $5,$3,$3
cmpult $3,$5,$4
stq $3,0($16)
addq $16,8,$16 # res_ptr++
beq $18,.Lend2 # jump if size was == 2
.align 3
.Loop: mulq $2,$19,$3 # $3 = prod_low
ldq $5,0($16) # $5 = *res_ptr
addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
subq $18,1,$18 # size--
umulh $2,$19,$4 # $4 = cy_limb
ldq $2,0($17) # $2 = s1_limb
addq $17,8,$17 # s1_ptr++
addq $3,$0,$3 # $3 = cy_limb + prod_low
cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
addq $5,$3,$3
cmpult $3,$5,$5
stq $3,0($16)
addq $16,8,$16 # res_ptr++
addq $5,$0,$0 # combine carries
bne $18,.Loop
.Lend2: mulq $2,$19,$3 # $3 = prod_low
ldq $5,0($16) # $5 = *res_ptr
addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
umulh $2,$19,$4 # $4 = cy_limb
addq $3,$0,$3 # $3 = cy_limb + prod_low
cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
addq $5,$3,$3
cmpult $3,$5,$5
stq $3,0($16)
addq $5,$0,$0 # combine carries
addq $4,$0,$0 # cy_limb = prod_high + cy
ret $31,($26),1
.Lend1: addq $5,$3,$3
cmpult $3,$5,$5
stq $3,0($16)
addq $0,$5,$0
ret $31,($26),1
.end __mpn_addmul_1

View File

@ -0,0 +1,146 @@
# Alpha __mpn_add_n -- Add two limb vectors of the same length > 0 and
# store sum in a third limb vector.
# Copyright (C) 1995 Free Software Foundation, Inc.
# 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 Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version.
# The GNU 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 Lesser General Public
# License for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr $16
# s1_ptr $17
# s2_ptr $18
# size $19
.set noreorder
.set noat
.text
.align 3
.globl __mpn_add_n
.ent __mpn_add_n
__mpn_add_n:
.frame $30,0,$26,0
or $31,$31,$25 # clear cy
subq $19,4,$19 # decr loop cnt
blt $19,.Lend2 # if less than 4 limbs, goto 2nd loop
# Start software pipeline for 1st loop
ldq $0,0($18)
ldq $1,8($18)
ldq $4,0($17)
ldq $5,8($17)
addq $17,32,$17 # update s1_ptr
ldq $2,16($18)
addq $0,$4,$20 # 1st main add
ldq $3,24($18)
subq $19,4,$19 # decr loop cnt
ldq $6,-16($17)
cmpult $20,$0,$25 # compute cy from last add
ldq $7,-8($17)
addq $1,$25,$28 # cy add
addq $18,32,$18 # update s2_ptr
addq $5,$28,$21 # 2nd main add
cmpult $28,$25,$8 # compute cy from last add
blt $19,.Lend1 # if less than 4 limbs remain, jump
# 1st loop handles groups of 4 limbs in a software pipeline
.align 4
.Loop: cmpult $21,$28,$25 # compute cy from last add
ldq $0,0($18)
or $8,$25,$25 # combine cy from the two adds
ldq $1,8($18)
addq $2,$25,$28 # cy add
ldq $4,0($17)
addq $28,$6,$22 # 3rd main add
ldq $5,8($17)
cmpult $28,$25,$8 # compute cy from last add
cmpult $22,$28,$25 # compute cy from last add
stq $20,0($16)
or $8,$25,$25 # combine cy from the two adds
stq $21,8($16)
addq $3,$25,$28 # cy add
addq $28,$7,$23 # 4th main add
cmpult $28,$25,$8 # compute cy from last add
cmpult $23,$28,$25 # compute cy from last add
addq $17,32,$17 # update s1_ptr
or $8,$25,$25 # combine cy from the two adds
addq $16,32,$16 # update res_ptr
addq $0,$25,$28 # cy add
ldq $2,16($18)
addq $4,$28,$20 # 1st main add
ldq $3,24($18)
cmpult $28,$25,$8 # compute cy from last add
ldq $6,-16($17)
cmpult $20,$28,$25 # compute cy from last add
ldq $7,-8($17)
or $8,$25,$25 # combine cy from the two adds
subq $19,4,$19 # decr loop cnt
stq $22,-16($16)
addq $1,$25,$28 # cy add
stq $23,-8($16)
addq $5,$28,$21 # 2nd main add
addq $18,32,$18 # update s2_ptr
cmpult $28,$25,$8 # compute cy from last add
bge $19,.Loop
# Finish software pipeline for 1st loop
.Lend1: cmpult $21,$28,$25 # compute cy from last add
or $8,$25,$25 # combine cy from the two adds
addq $2,$25,$28 # cy add
addq $28,$6,$22 # 3rd main add
cmpult $28,$25,$8 # compute cy from last add
cmpult $22,$28,$25 # compute cy from last add
stq $20,0($16)
or $8,$25,$25 # combine cy from the two adds
stq $21,8($16)
addq $3,$25,$28 # cy add
addq $28,$7,$23 # 4th main add
cmpult $28,$25,$8 # compute cy from last add
cmpult $23,$28,$25 # compute cy from last add
or $8,$25,$25 # combine cy from the two adds
addq $16,32,$16 # update res_ptr
stq $22,-16($16)
stq $23,-8($16)
.Lend2: addq $19,4,$19 # restore loop cnt
beq $19,.Lret
# Start software pipeline for 2nd loop
ldq $0,0($18)
ldq $4,0($17)
subq $19,1,$19
beq $19,.Lend0
# 2nd loop handles remaining 1-3 limbs
.align 4
.Loop0: addq $0,$25,$28 # cy add
ldq $0,8($18)
addq $4,$28,$20 # main add
ldq $4,8($17)
addq $18,8,$18
cmpult $28,$25,$8 # compute cy from last add
addq $17,8,$17
stq $20,0($16)
cmpult $20,$28,$25 # compute cy from last add
subq $19,1,$19 # decr loop cnt
or $8,$25,$25 # combine cy from the two adds
addq $16,8,$16
bne $19,.Loop0
.Lend0: addq $0,$25,$28 # cy add
addq $4,$28,$20 # main add
cmpult $28,$25,$8 # compute cy from last add
cmpult $20,$28,$25 # compute cy from last add
stq $20,0($16)
or $8,$25,$25 # combine cy from the two adds
.Lret: or $25,$31,$0 # return cy
ret $31,($26),1
.end __mpn_add_n

View File

@ -0,0 +1,172 @@
# Alpha EV5 __mpn_lshift --
# Copyright (C) 1994, 1995 Free Software Foundation, Inc.
# 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 Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version.
# The GNU 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 Lesser General Public
# License for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr r16
# s1_ptr r17
# size r18
# cnt r19
# This code runs at 3.25 cycles/limb on the EV5.
.set noreorder
.set noat
.text
.align 3
.globl __mpn_lshift
.ent __mpn_lshift
__mpn_lshift:
.frame $30,0,$26,0
s8addq $18,$17,$17 # make r17 point at end of s1
ldq $4,-8($17) # load first limb
subq $31,$19,$20
s8addq $18,$16,$16 # make r16 point at end of RES
subq $18,1,$18
and $18,4-1,$28 # number of limbs in first loop
srl $4,$20,$0 # compute function result
beq $28,.L0
subq $18,$28,$18
.align 3
.Loop0: ldq $3,-16($17)
subq $16,8,$16
sll $4,$19,$5
subq $17,8,$17
subq $28,1,$28
srl $3,$20,$6
or $3,$3,$4
or $5,$6,$8
stq $8,0($16)
bne $28,.Loop0
.L0: sll $4,$19,$24
beq $18,.Lend
# warm up phase 1
ldq $1,-16($17)
subq $18,4,$18
ldq $2,-24($17)
ldq $3,-32($17)
ldq $4,-40($17)
beq $18,.Lend1
# warm up phase 2
srl $1,$20,$7
sll $1,$19,$21
srl $2,$20,$8
ldq $1,-48($17)
sll $2,$19,$22
ldq $2,-56($17)
srl $3,$20,$5
or $7,$24,$7
sll $3,$19,$23
or $8,$21,$8
srl $4,$20,$6
ldq $3,-64($17)
sll $4,$19,$24
ldq $4,-72($17)
subq $18,4,$18
beq $18,.Lend2
.align 4
# main loop
.Loop: stq $7,-8($16)
or $5,$22,$5
stq $8,-16($16)
or $6,$23,$6
srl $1,$20,$7
subq $18,4,$18
sll $1,$19,$21
unop # ldq $31,-96($17)
srl $2,$20,$8
ldq $1,-80($17)
sll $2,$19,$22
ldq $2,-88($17)
stq $5,-24($16)
or $7,$24,$7
stq $6,-32($16)
or $8,$21,$8
srl $3,$20,$5
unop # ldq $31,-96($17)
sll $3,$19,$23
subq $16,32,$16
srl $4,$20,$6
ldq $3,-96($17)
sll $4,$19,$24
ldq $4,-104($17)
subq $17,32,$17
bne $18,.Loop
# cool down phase 2/1
.Lend2: stq $7,-8($16)
or $5,$22,$5
stq $8,-16($16)
or $6,$23,$6
srl $1,$20,$7
sll $1,$19,$21
srl $2,$20,$8
sll $2,$19,$22
stq $5,-24($16)
or $7,$24,$7
stq $6,-32($16)
or $8,$21,$8
srl $3,$20,$5
sll $3,$19,$23
srl $4,$20,$6
sll $4,$19,$24
# cool down phase 2/2
stq $7,-40($16)
or $5,$22,$5
stq $8,-48($16)
or $6,$23,$6
stq $5,-56($16)
stq $6,-64($16)
# cool down phase 2/3
stq $24,-72($16)
ret $31,($26),1
# cool down phase 1/1
.Lend1: srl $1,$20,$7
sll $1,$19,$21
srl $2,$20,$8
sll $2,$19,$22
srl $3,$20,$5
or $7,$24,$7
sll $3,$19,$23
or $8,$21,$8
srl $4,$20,$6
sll $4,$19,$24
# cool down phase 1/2
stq $7,-8($16)
or $5,$22,$5
stq $8,-16($16)
or $6,$23,$6
stq $5,-24($16)
stq $6,-32($16)
stq $24,-40($16)
ret $31,($26),1
.Lend: stq $24,-8($16)
ret $31,($26),1
.end __mpn_lshift

View File

@ -0,0 +1,170 @@
# Alpha EV5 __mpn_rshift --
# Copyright (C) 1994, 1995 Free Software Foundation, Inc.
# 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 Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version.
# The GNU 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 Lesser General Public
# License for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr r16
# s1_ptr r17
# size r18
# cnt r19
# This code runs at 3.25 cycles/limb on the EV5.
.set noreorder
.set noat
.text
.align 3
.globl __mpn_rshift
.ent __mpn_rshift
__mpn_rshift:
.frame $30,0,$26,0
ldq $4,0($17) # load first limb
subq $31,$19,$20
subq $18,1,$18
and $18,4-1,$28 # number of limbs in first loop
sll $4,$20,$0 # compute function result
beq $28,.L0
subq $18,$28,$18
.align 3
.Loop0: ldq $3,8($17)
addq $16,8,$16
srl $4,$19,$5
addq $17,8,$17
subq $28,1,$28
sll $3,$20,$6
or $3,$3,$4
or $5,$6,$8
stq $8,-8($16)
bne $28,.Loop0
.L0: srl $4,$19,$24
beq $18,.Lend
# warm up phase 1
ldq $1,8($17)
subq $18,4,$18
ldq $2,16($17)
ldq $3,24($17)
ldq $4,32($17)
beq $18,.Lend1
# warm up phase 2
sll $1,$20,$7
srl $1,$19,$21
sll $2,$20,$8
ldq $1,40($17)
srl $2,$19,$22
ldq $2,48($17)
sll $3,$20,$5
or $7,$24,$7
srl $3,$19,$23
or $8,$21,$8
sll $4,$20,$6
ldq $3,56($17)
srl $4,$19,$24
ldq $4,64($17)
subq $18,4,$18
beq $18,.Lend2
.align 4
# main loop
.Loop: stq $7,0($16)
or $5,$22,$5
stq $8,8($16)
or $6,$23,$6
sll $1,$20,$7
subq $18,4,$18
srl $1,$19,$21
unop # ldq $31,-96($17)
sll $2,$20,$8
ldq $1,72($17)
srl $2,$19,$22
ldq $2,80($17)
stq $5,16($16)
or $7,$24,$7
stq $6,24($16)
or $8,$21,$8
sll $3,$20,$5
unop # ldq $31,-96($17)
srl $3,$19,$23
addq $16,32,$16
sll $4,$20,$6
ldq $3,88($17)
srl $4,$19,$24
ldq $4,96($17)
addq $17,32,$17
bne $18,.Loop
# cool down phase 2/1
.Lend2: stq $7,0($16)
or $5,$22,$5
stq $8,8($16)
or $6,$23,$6
sll $1,$20,$7
srl $1,$19,$21
sll $2,$20,$8
srl $2,$19,$22
stq $5,16($16)
or $7,$24,$7
stq $6,24($16)
or $8,$21,$8
sll $3,$20,$5
srl $3,$19,$23
sll $4,$20,$6
srl $4,$19,$24
# cool down phase 2/2
stq $7,32($16)
or $5,$22,$5
stq $8,40($16)
or $6,$23,$6
stq $5,48($16)
stq $6,56($16)
# cool down phase 2/3
stq $24,64($16)
ret $31,($26),1
# cool down phase 1/1
.Lend1: sll $1,$20,$7
srl $1,$19,$21
sll $2,$20,$8
srl $2,$19,$22
sll $3,$20,$5
or $7,$24,$7
srl $3,$19,$23
or $8,$21,$8
sll $4,$20,$6
srl $4,$19,$24
# cool down phase 1/2
stq $7,0($16)
or $5,$22,$5
stq $8,8($16)
or $6,$23,$6
stq $5,16($16)
stq $6,24($16)
stq $24,32($16)
ret $31,($26),1
.Lend: stq $24,0($16)
ret $31,($26),1
.end __mpn_rshift

View File

@ -0,0 +1,147 @@
# Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
# store difference in a third limb vector.
# Copyright (C) 1995 Free Software Foundation, Inc.
# 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 Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version.
# The GNU 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 Lesser General Public
# License for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr $16
# s1_ptr $17
# s2_ptr $18
# size $19
.set noreorder
.set noat
.text
.align 3
.globl __mpn_sub_n
.ent __mpn_sub_n
__mpn_sub_n:
.frame $30,0,$26,0
or $31,$31,$25 # clear cy
subq $19,4,$19 # decr loop cnt
blt $19,.Lend2 # if less than 4 limbs, goto 2nd loop
# Start software pipeline for 1st loop
ldq $0,0($18)
ldq $1,8($18)
ldq $4,0($17)
ldq $5,8($17)
addq $17,32,$17 # update s1_ptr
ldq $2,16($18)
subq $4,$0,$20 # 1st main sub
ldq $3,24($18)
subq $19,4,$19 # decr loop cnt
ldq $6,-16($17)
cmpult $4,$20,$25 # compute cy from last sub
ldq $7,-8($17)
addq $1,$25,$28 # cy add
addq $18,32,$18 # update s2_ptr
subq $5,$28,$21 # 2nd main sub
cmpult $28,$25,$8 # compute cy from last add
blt $19,.Lend1 # if less than 4 limbs remain, jump
# 1st loop handles groups of 4 limbs in a software pipeline
.align 4
.Loop: cmpult $5,$21,$25 # compute cy from last add
ldq $0,0($18)
or $8,$25,$25 # combine cy from the two adds
ldq $1,8($18)
addq $2,$25,$28 # cy add
ldq $4,0($17)
subq $6,$28,$22 # 3rd main sub
ldq $5,8($17)
cmpult $28,$25,$8 # compute cy from last add
cmpult $6,$22,$25 # compute cy from last add
stq $20,0($16)
or $8,$25,$25 # combine cy from the two adds
stq $21,8($16)
addq $3,$25,$28 # cy add
subq $7,$28,$23 # 4th main sub
cmpult $28,$25,$8 # compute cy from last add
cmpult $7,$23,$25 # compute cy from last add
addq $17,32,$17 # update s1_ptr
or $8,$25,$25 # combine cy from the two adds
addq $16,32,$16 # update res_ptr
addq $0,$25,$28 # cy add
ldq $2,16($18)
subq $4,$28,$20 # 1st main sub
ldq $3,24($18)
cmpult $28,$25,$8 # compute cy from last add
ldq $6,-16($17)
cmpult $4,$20,$25 # compute cy from last add
ldq $7,-8($17)
or $8,$25,$25 # combine cy from the two adds
subq $19,4,$19 # decr loop cnt
stq $22,-16($16)
addq $1,$25,$28 # cy add
stq $23,-8($16)
subq $5,$28,$21 # 2nd main sub
addq $18,32,$18 # update s2_ptr
cmpult $28,$25,$8 # compute cy from last add
bge $19,.Loop
# Finish software pipeline for 1st loop
.Lend1: cmpult $5,$21,$25 # compute cy from last add
or $8,$25,$25 # combine cy from the two adds
addq $2,$25,$28 # cy add
subq $6,$28,$22 # 3rd main sub
cmpult $28,$25,$8 # compute cy from last add
cmpult $6,$22,$25 # compute cy from last add
stq $20,0($16)
or $8,$25,$25 # combine cy from the two adds
stq $21,8($16)
addq $3,$25,$28 # cy add
subq $7,$28,$23 # 4th main sub
cmpult $28,$25,$8 # compute cy from last add
cmpult $7,$23,$25 # compute cy from last add
or $8,$25,$25 # combine cy from the two adds
addq $16,32,$16 # update res_ptr
stq $22,-16($16)
stq $23,-8($16)
.Lend2: addq $19,4,$19 # restore loop cnt
beq $19,.Lret
# Start software pipeline for 2nd loop
ldq $0,0($18)
ldq $4,0($17)
subq $19,1,$19
beq $19,.Lend0
# 2nd loop handles remaining 1-3 limbs
.align 4
.Loop0: addq $0,$25,$28 # cy add
ldq $0,8($18)
subq $4,$28,$20 # main sub
ldq $1,8($17)
addq $18,8,$18
cmpult $28,$25,$8 # compute cy from last add
addq $17,8,$17
stq $20,0($16)
cmpult $4,$20,$25 # compute cy from last add
subq $19,1,$19 # decr loop cnt
or $8,$25,$25 # combine cy from the two adds
addq $16,8,$16
or $1,$31,$4
bne $19,.Loop0
.Lend0: addq $0,$25,$28 # cy add
subq $4,$28,$20 # main sub
cmpult $28,$25,$8 # compute cy from last add
cmpult $4,$20,$25 # compute cy from last add
stq $20,0($16)
or $8,$25,$25 # combine cy from the two adds
.Lret: or $25,$31,$0 # return cy
ret $31,($26),1
.end __mpn_sub_n

View File

@ -0,0 +1 @@
alpha/alphaev5

View File

@ -0,0 +1,477 @@
# Alpha ev6 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.
#
# 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 Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or (at
# your option) any later version.
#
# The GNU 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 Lesser General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>.
# INPUT PARAMETERS
# res_ptr $16
# s1_ptr $17
# size $18
# s2_limb $19
#
# This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and
# exactly 3.625 cycles/limb on EV6...
#
# This code was written in close cooperation with ev6 pipeline expert
# Steve Root (root@toober.hlo.dec.com). Any errors are tege's fault, though.
#
# Register usages for unrolled loop:
# 0-3 mul's
# 4-7 acc's
# 8-15 mul results
# 20,21 carry's
# 22,23 save for stores
#
# Sustains 8 mul-adds in 29 cycles in the unrolled inner loop.
#
# The stores can issue a cycle late so we have paired no-op's to 'catch'
# them, so that further disturbance to the schedule is damped.
#
# We couldn't pair the loads, because the entangled schedule of the
# carry's has to happen on one side {0} of the machine. Note, the total
# use of U0, and the total use of L0 (after attending to the stores).
# which is part of the reason why....
#
# This is a great schedule for the d_cache, a poor schedule for the
# b_cache. The lockup on U0 means that any stall can't be recovered
# from. Consider a ldq in L1. say that load gets stalled because it
# collides with a fill from the b_Cache. On the next cycle, this load
# gets priority. If first looks at L0, and goes there. The instruction
# we intended for L0 gets to look at L1, which is NOT where we want
# it. It either stalls 1, because it can't go in L0, or goes there, and
# causes a further instruction to stall.
#
# So for b_cache, we're likely going to want to put one or more cycles
# back into the code! And, of course, put in prefetches. For the
# accumulator, lds, intent to modify. For the multiplier, you might
# want ldq, evict next, if you're not wanting to use it again soon. Use
# 256 ahead of present pointer value. At a place where we have an mt
# followed by a bookkeeping, put the bookkeeping in upper, and the
# prefetch into lower.
#
# Note, the usage of physical registers per cycle is smoothed off, as
# much as possible.
#
# Note, the ldq's and stq's are at the end of the quadpacks. note, we'd
# like not to have a ldq or stq to preceded a conditional branch in a
# quadpack. The conditional branch moves the retire pointer one cycle
# later.
#
# Optimization notes:
# Callee-saves regs: $9 $10 $11 $12 $13 $14 $15 $26 ?$27?
# Reserved regs: $29 $30 $31
# Free caller-saves regs in unrolled code: $24 $25 $28
# We should swap some of the callee-saves regs for some of the free
# caller-saves regs, saving some overhead cycles.
# Most importantly, we should write fast code for the 0-7 case.
# The code we use there are for the 21164, and runs at 7 cycles/limb
# on the 21264. Should not be hard, if we write specialized code for
# 1-7 limbs (the one for 0 limbs should be straightforward). We then just
# need a jump table indexed by the low 3 bits of the count argument.
.set noreorder
.set noat
.text
.globl __mpn_addmul_1
.ent __mpn_addmul_1
__mpn_addmul_1:
.frame $30,0,$26,0
.prologue 0
cmpult $18, 8, $1
beq $1, $Large
ldq $2, 0($17) # $2 = s1_limb
addq $17, 8, $17 # s1_ptr++
subq $18, 1, $18 # size--
mulq $2, $19, $3 # $3 = prod_low
ldq $5, 0($16) # $5 = *res_ptr
umulh $2, $19, $0 # $0 = prod_high
beq $18, $Lend0b # jump if size was == 1
ldq $2, 0($17) # $2 = s1_limb
addq $17, 8, $17 # s1_ptr++
subq $18, 1, $18 # size--
addq $5, $3, $3
cmpult $3, $5, $4
stq $3, 0($16)
addq $16, 8, $16 # res_ptr++
beq $18, $Lend0a # jump if size was == 2
.align 3
$Loop0: mulq $2, $19, $3 # $3 = prod_low
ldq $5, 0($16) # $5 = *res_ptr
addq $4, $0, $0 # cy_limb = cy_limb + 'cy'
subq $18, 1, $18 # size--
umulh $2, $19, $4 # $4 = cy_limb
ldq $2, 0($17) # $2 = s1_limb
addq $17, 8, $17 # s1_ptr++
addq $3, $0, $3 # $3 = cy_limb + prod_low
cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low)
addq $5, $3, $3
cmpult $3, $5, $5
stq $3, 0($16)
addq $16, 8, $16 # res_ptr++
addq $5, $0, $0 # combine carries
bne $18, $Loop0
$Lend0a:
mulq $2, $19, $3 # $3 = prod_low
ldq $5, 0($16) # $5 = *res_ptr
addq $4, $0, $0 # cy_limb = cy_limb + 'cy'
umulh $2, $19, $4 # $4 = cy_limb
addq $3, $0, $3 # $3 = cy_limb + prod_low
cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low)
addq $5, $3, $3
cmpult $3, $5, $5
stq $3, 0($16)
addq $5, $0, $0 # combine carries
addq $4, $0, $0 # cy_limb = prod_high + cy
ret $31, ($26), 1
$Lend0b:
addq $5, $3, $3
cmpult $3, $5, $5
stq $3, 0($16)
addq $0, $5, $0
ret $31, ($26), 1
$Large:
lda $30, -240($30)
stq $9, 8($30)
stq $10, 16($30)
stq $11, 24($30)
stq $12, 32($30)
stq $13, 40($30)
stq $14, 48($30)
stq $15, 56($30)
and $18, 7, $20 # count for the first loop, 0-7
srl $18, 3, $18 # count for unrolled loop
bis $31, $31, $0
beq $20, $Lunroll
ldq $2, 0($17) # $2 = s1_limb
addq $17, 8, $17 # s1_ptr++
subq $20, 1, $20 # size--
mulq $2, $19, $3 # $3 = prod_low
ldq $5, 0($16) # $5 = *res_ptr
umulh $2, $19, $0 # $0 = prod_high
beq $20, $Lend1b # jump if size was == 1
ldq $2, 0($17) # $2 = s1_limb
addq $17, 8, $17 # s1_ptr++
subq $20, 1, $20 # size--
addq $5, $3, $3
cmpult $3, $5, $4
stq $3, 0($16)
addq $16, 8, $16 # res_ptr++
beq $20, $Lend1a # jump if size was == 2
.align 3
$Loop1: mulq $2, $19, $3 # $3 = prod_low
ldq $5, 0($16) # $5 = *res_ptr
addq $4, $0, $0 # cy_limb = cy_limb + 'cy'
subq $20, 1, $20 # size--
umulh $2, $19, $4 # $4 = cy_limb
ldq $2, 0($17) # $2 = s1_limb
addq $17, 8, $17 # s1_ptr++
addq $3, $0, $3 # $3 = cy_limb + prod_low
cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low)
addq $5, $3, $3
cmpult $3, $5, $5
stq $3, 0($16)
addq $16, 8, $16 # res_ptr++
addq $5, $0, $0 # combine carries
bne $20, $Loop1
$Lend1a:
mulq $2, $19, $3 # $3 = prod_low
ldq $5, 0($16) # $5 = *res_ptr
addq $4, $0, $0 # cy_limb = cy_limb + 'cy'
umulh $2, $19, $4 # $4 = cy_limb
addq $3, $0, $3 # $3 = cy_limb + prod_low
cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low)
addq $5, $3, $3
cmpult $3, $5, $5
stq $3, 0($16)
addq $16, 8, $16 # res_ptr++
addq $5, $0, $0 # combine carries
addq $4, $0, $0 # cy_limb = prod_high + cy
br $31, $Lunroll
$Lend1b:
addq $5, $3, $3
cmpult $3, $5, $5
stq $3, 0($16)
addq $16, 8, $16 # res_ptr++
addq $0, $5, $0
$Lunroll:
lda $17, -16($17) # L1 bookkeeping
lda $16, -16($16) # L1 bookkeeping
bis $0, $31, $12
# ____ UNROLLED LOOP SOFTWARE PIPELINE STARTUP ____
ldq $2, 16($17) # L1
ldq $3, 24($17) # L1
lda $18, -1($18) # L1 bookkeeping
ldq $6, 16($16) # L1
ldq $7, 24($16) # L1
ldq $0, 32($17) # L1
mulq $19, $2, $13 # U1
ldq $1, 40($17) # L1
umulh $19, $2, $14 # U1
mulq $19, $3, $15 # U1
lda $17, 64($17) # L1 bookkeeping
ldq $4, 32($16) # L1
ldq $5, 40($16) # L1
umulh $19, $3, $8 # U1
ldq $2, -16($17) # L1
mulq $19, $0, $9 # U1
ldq $3, -8($17) # L1
umulh $19, $0, $10 # U1
addq $6, $13, $6 # L0 lo + acc
mulq $19, $1, $11 # U1
cmpult $6, $13, $20 # L0 lo add => carry
lda $16, 64($16) # L1 bookkeeping
addq $6, $12, $22 # U0 hi add => answer
cmpult $22, $12, $21 # L0 hi add => carry
addq $14, $20, $14 # U0 hi mul + carry
ldq $6, -16($16) # L1
addq $7, $15, $23 # L0 lo + acc
addq $14, $21, $14 # U0 hi mul + carry
ldq $7, -8($16) # L1
umulh $19, $1, $12 # U1
cmpult $23, $15, $20 # L0 lo add => carry
addq $23, $14, $23 # U0 hi add => answer
ldq $0, 0($17) # L1
mulq $19, $2, $13 # U1
cmpult $23, $14, $21 # L0 hi add => carry
addq $8, $20, $8 # U0 hi mul + carry
ldq $1, 8($17) # L1
umulh $19, $2, $14 # U1
addq $4, $9, $4 # L0 lo + acc
stq $22, -48($16) # L0
stq $23, -40($16) # L1
mulq $19, $3, $15 # U1
addq $8, $21, $8 # U0 hi mul + carry
cmpult $4, $9, $20 # L0 lo add => carry
addq $4, $8, $22 # U0 hi add => answer
ble $18, $Lend # U1 bookkeeping
# ____ MAIN UNROLLED LOOP ____
.align 4
$Loop:
bis $31, $31, $31 # U1 mt
cmpult $22, $8, $21 # L0 hi add => carry
addq $10, $20, $10 # U0 hi mul + carry
ldq $4, 0($16) # L1
bis $31, $31, $31 # U1 mt
addq $5, $11, $23 # L0 lo + acc
addq $10, $21, $10 # L0 hi mul + carry
ldq $5, 8($16) # L1
umulh $19, $3, $8 # U1
cmpult $23, $11, $20 # L0 lo add => carry
addq $23, $10, $23 # U0 hi add => answer
ldq $2, 16($17) # L1
mulq $19, $0, $9 # U1
cmpult $23, $10, $21 # L0 hi add => carry
addq $12, $20, $12 # U0 hi mul + carry
ldq $3, 24($17) # L1
umulh $19, $0, $10 # U1
addq $6, $13, $6 # L0 lo + acc
stq $22, -32($16) # L0
stq $23, -24($16) # L1
bis $31, $31, $31 # L0 st slosh
mulq $19, $1, $11 # U1
bis $31, $31, $31 # L1 st slosh
addq $12, $21, $12 # U0 hi mul + carry
cmpult $6, $13, $20 # L0 lo add => carry
bis $31, $31, $31 # U1 mt
lda $18, -1($18) # L1 bookkeeping
addq $6, $12, $22 # U0 hi add => answer
bis $31, $31, $31 # U1 mt
cmpult $22, $12, $21 # L0 hi add => carry
addq $14, $20, $14 # U0 hi mul + carry
ldq $6, 16($16) # L1
bis $31, $31, $31 # U1 mt
addq $7, $15, $23 # L0 lo + acc
addq $14, $21, $14 # U0 hi mul + carry
ldq $7, 24($16) # L1
umulh $19, $1, $12 # U1
cmpult $23, $15, $20 # L0 lo add => carry
addq $23, $14, $23 # U0 hi add => answer
ldq $0, 32($17) # L1
mulq $19, $2, $13 # U1
cmpult $23, $14, $21 # L0 hi add => carry
addq $8, $20, $8 # U0 hi mul + carry
ldq $1, 40($17) # L1
umulh $19, $2, $14 # U1
addq $4, $9, $4 # U0 lo + acc
stq $22, -16($16) # L0
stq $23, -8($16) # L1
bis $31, $31, $31 # L0 st slosh
mulq $19, $3, $15 # U1
bis $31, $31, $31 # L1 st slosh
addq $8, $21, $8 # L0 hi mul + carry
cmpult $4, $9, $20 # L0 lo add => carry
bis $31, $31, $31 # U1 mt
lda $17, 64($17) # L1 bookkeeping
addq $4, $8, $22 # U0 hi add => answer
bis $31, $31, $31 # U1 mt
cmpult $22, $8, $21 # L0 hi add => carry
addq $10, $20, $10 # U0 hi mul + carry
ldq $4, 32($16) # L1
bis $31, $31, $31 # U1 mt
addq $5, $11, $23 # L0 lo + acc
addq $10, $21, $10 # L0 hi mul + carry
ldq $5, 40($16) # L1
umulh $19, $3, $8 # U1
cmpult $23, $11, $20 # L0 lo add => carry
addq $23, $10, $23 # U0 hi add => answer
ldq $2, -16($17) # L1
mulq $19, $0, $9 # U1
cmpult $23, $10, $21 # L0 hi add => carry
addq $12, $20, $12 # U0 hi mul + carry
ldq $3, -8($17) # L1
umulh $19, $0, $10 # U1
addq $6, $13, $6 # L0 lo + acc
stq $22, 0($16) # L0
stq $23, 8($16) # L1
bis $31, $31, $31 # L0 st slosh
mulq $19, $1, $11 # U1
bis $31, $31, $31 # L1 st slosh
addq $12, $21, $12 # U0 hi mul + carry
cmpult $6, $13, $20 # L0 lo add => carry
bis $31, $31, $31 # U1 mt
lda $16, 64($16) # L1 bookkeeping
addq $6, $12, $22 # U0 hi add => answer
bis $31, $31, $31 # U1 mt
cmpult $22, $12, $21 # L0 hi add => carry
addq $14, $20, $14 # U0 hi mul + carry
ldq $6, -16($16) # L1
bis $31, $31, $31 # U1 mt
addq $7, $15, $23 # L0 lo + acc
addq $14, $21, $14 # U0 hi mul + carry
ldq $7, -8($16) # L1
umulh $19, $1, $12 # U1
cmpult $23, $15, $20 # L0 lo add => carry
addq $23, $14, $23 # U0 hi add => answer
ldq $0, 0($17) # L1
mulq $19, $2, $13 # U1
cmpult $23, $14, $21 # L0 hi add => carry
addq $8, $20, $8 # U0 hi mul + carry
ldq $1, 8($17) # L1
umulh $19, $2, $14 # U1
addq $4, $9, $4 # L0 lo + acc
stq $22, -48($16) # L0
stq $23, -40($16) # L1
bis $31, $31, $31 # L0 st slosh
mulq $19, $3, $15 # U1
bis $31, $31, $31 # L1 st slosh
addq $8, $21, $8 # U0 hi mul + carry
cmpult $4, $9, $20 # L0 lo add => carry
addq $4, $8, $22 # U0 hi add => answer
bis $31, $31, $31 # L1 mt
bgt $18, $Loop # U1 bookkeeping
# ____ UNROLLED LOOP SOFTWARE PIPELINE FINISH ____
$Lend:
cmpult $22, $8, $21 # L0 hi add => carry
addq $10, $20, $10 # U0 hi mul + carry
ldq $4, 0($16) # L1
addq $5, $11, $23 # L0 lo + acc
addq $10, $21, $10 # L0 hi mul + carry
ldq $5, 8($16) # L1
umulh $19, $3, $8 # U1
cmpult $23, $11, $20 # L0 lo add => carry
addq $23, $10, $23 # U0 hi add => answer
mulq $19, $0, $9 # U1
cmpult $23, $10, $21 # L0 hi add => carry
addq $12, $20, $12 # U0 hi mul + carry
umulh $19, $0, $10 # U1
addq $6, $13, $6 # L0 lo + acc
stq $22, -32($16) # L0
stq $23, -24($16) # L1
mulq $19, $1, $11 # U1
addq $12, $21, $12 # U0 hi mul + carry
cmpult $6, $13, $20 # L0 lo add => carry
addq $6, $12, $22 # U0 hi add => answer
cmpult $22, $12, $21 # L0 hi add => carry
addq $14, $20, $14 # U0 hi mul + carry
addq $7, $15, $23 # L0 lo + acc
addq $14, $21, $14 # U0 hi mul + carry
umulh $19, $1, $12 # U1
cmpult $23, $15, $20 # L0 lo add => carry
addq $23, $14, $23 # U0 hi add => answer
cmpult $23, $14, $21 # L0 hi add => carry
addq $8, $20, $8 # U0 hi mul + carry
addq $4, $9, $4 # U0 lo + acc
stq $22, -16($16) # L0
stq $23, -8($16) # L1
bis $31, $31, $31 # L0 st slosh
addq $8, $21, $8 # L0 hi mul + carry
cmpult $4, $9, $20 # L0 lo add => carry
addq $4, $8, $22 # U0 hi add => answer
cmpult $22, $8, $21 # L0 hi add => carry
addq $10, $20, $10 # U0 hi mul + carry
addq $5, $11, $23 # L0 lo + acc
addq $10, $21, $10 # L0 hi mul + carry
cmpult $23, $11, $20 # L0 lo add => carry
addq $23, $10, $23 # U0 hi add => answer
cmpult $23, $10, $21 # L0 hi add => carry
addq $12, $20, $12 # U0 hi mul + carry
stq $22, 0($16) # L0
stq $23, 8($16) # L1
addq $12, $21, $0 # U0 hi mul + carry
ldq $9, 8($30)
ldq $10, 16($30)
ldq $11, 24($30)
ldq $12, 32($30)
ldq $13, 40($30)
ldq $14, 48($30)
ldq $15, 56($30)
lda $30, 240($30)
ret $31, ($26), 1
.end __mpn_addmul_1

View File

@ -0,0 +1,44 @@
/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(__ieee754_sqrt)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
.align 4
#ifdef _IEEE_FP_INEXACT
sqrtt/suid $f16, $f0
#else
sqrtt/sud $f16, $f0
#endif
ret
nop
nop
END(__ieee754_sqrt)

View File

@ -0,0 +1,44 @@
/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(__ieee754_sqrtf)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
.align 4
#ifdef _IEEE_FP_INEXACT
sqrts/suid $f16, $f0
#else
sqrts/sud $f16, $f0
#endif
ret
nop
nop
END(__ieee754_sqrtf)

View File

@ -0,0 +1,255 @@
/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.com>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/*
* Much of the information about 21264 scheduling/coding comes from:
* Compiler Writer's Guide for the Alpha 21264
* abbreviated as 'CWG' in other comments here
* ftp.digital.com/pub/Digital/info/semiconductor/literature/dsc-library.html
* Scheduling notation:
* E - either cluster
* U - upper subcluster; U0 - subcluster U0; U1 - subcluster U1
* L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1
*
* Temp usage notes:
* $0 - destination address
* $1,$2, - scratch
*/
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(memcpy)
.prologue 0
mov $16, $0 # E : copy dest to return
ble $18, $nomoredata # U : done with the copy?
xor $16, $17, $1 # E : are source and dest alignments the same?
and $1, 7, $1 # E : are they the same mod 8?
bne $1, $misaligned # U : Nope - gotta do this the slow way
/* source and dest are same mod 8 address */
and $16, 7, $1 # E : Are both 0mod8?
beq $1, $both_0mod8 # U : Yes
nop # E :
/*
* source and dest are same misalignment. move a byte at a time
* until a 0mod8 alignment for both is reached.
* At least one byte more to move
*/
$head_align:
ldbu $1, 0($17) # L : grab a byte
subq $18, 1, $18 # E : count--
addq $17, 1, $17 # E : src++
stb $1, 0($16) # L :
addq $16, 1, $16 # E : dest++
and $16, 7, $1 # E : Are we at 0mod8 yet?
ble $18, $nomoredata # U : done with the copy?
bne $1, $head_align # U :
$both_0mod8:
cmple $18, 127, $1 # E : Can we unroll the loop?
bne $1, $no_unroll # U :
and $16, 63, $1 # E : get mod64 alignment
beq $1, $do_unroll # U : no single quads to fiddle
$single_head_quad:
ldq $1, 0($17) # L : get 8 bytes
subq $18, 8, $18 # E : count -= 8
addq $17, 8, $17 # E : src += 8
nop # E :
stq $1, 0($16) # L : store
addq $16, 8, $16 # E : dest += 8
and $16, 63, $1 # E : get mod64 alignment
bne $1, $single_head_quad # U : still not fully aligned
$do_unroll:
addq $16, 64, $7 # E : Initial (+1 trip) wh64 address
cmple $18, 127, $1 # E : Can we go through the unrolled loop?
bne $1, $tail_quads # U : Nope
nop # E :
$unroll_body:
wh64 ($7) # L1 : memory subsystem hint: 64 bytes at
# ($7) are about to be over-written
ldq $6, 0($17) # L0 : bytes 0..7
nop # E :
nop # E :
ldq $4, 8($17) # L : bytes 8..15
ldq $5, 16($17) # L : bytes 16..23
addq $7, 64, $7 # E : Update next wh64 address
nop # E :
ldq $3, 24($17) # L : bytes 24..31
addq $16, 64, $1 # E : fallback value for wh64
nop # E :
nop # E :
addq $17, 32, $17 # E : src += 32 bytes
stq $6, 0($16) # L : bytes 0..7
nop # E :
nop # E :
stq $4, 8($16) # L : bytes 8..15
stq $5, 16($16) # L : bytes 16..23
subq $18, 192, $2 # E : At least two more trips to go?
nop # E :
stq $3, 24($16) # L : bytes 24..31
addq $16, 32, $16 # E : dest += 32 bytes
nop # E :
nop # E :
ldq $6, 0($17) # L : bytes 0..7
ldq $4, 8($17) # L : bytes 8..15
cmovlt $2, $1, $7 # E : Latency 2, extra map slot - Use
# fallback wh64 address if < 2 more trips
nop # E :
ldq $5, 16($17) # L : bytes 16..23
ldq $3, 24($17) # L : bytes 24..31
addq $16, 32, $16 # E : dest += 32
subq $18, 64, $18 # E : count -= 64
addq $17, 32, $17 # E : src += 32
stq $6, -32($16) # L : bytes 0..7
stq $4, -24($16) # L : bytes 8..15
cmple $18, 63, $1 # E : At least one more trip?
stq $5, -16($16) # L : bytes 16..23
stq $3, -8($16) # L : bytes 24..31
nop # E :
beq $1, $unroll_body
$tail_quads:
$no_unroll:
.align 4
subq $18, 8, $18 # E : At least a quad left?
blt $18, $less_than_8 # U : Nope
nop # E :
nop # E :
$move_a_quad:
ldq $1, 0($17) # L : fetch 8
subq $18, 8, $18 # E : count -= 8
addq $17, 8, $17 # E : src += 8
nop # E :
stq $1, 0($16) # L : store 8
addq $16, 8, $16 # E : dest += 8
bge $18, $move_a_quad # U :
nop # E :
$less_than_8:
.align 4
addq $18, 8, $18 # E : add back for trailing bytes
ble $18, $nomoredata # U : All-done
nop # E :
nop # E :
/* Trailing bytes */
$tail_bytes:
subq $18, 1, $18 # E : count--
ldbu $1, 0($17) # L : fetch a byte
addq $17, 1, $17 # E : src++
nop # E :
stb $1, 0($16) # L : store a byte
addq $16, 1, $16 # E : dest++
bgt $18, $tail_bytes # U : more to be done?
nop # E :
/* branching to exit takes 3 extra cycles, so replicate exit here */
ret $31, ($26), 1 # L0 :
nop # E :
nop # E :
nop # E :
$misaligned:
mov $0, $4 # E : dest temp
and $0, 7, $1 # E : dest alignment mod8
beq $1, $dest_0mod8 # U : life doesnt totally suck
nop
$aligndest:
ble $18, $nomoredata # U :
ldbu $1, 0($17) # L : fetch a byte
subq $18, 1, $18 # E : count--
addq $17, 1, $17 # E : src++
stb $1, 0($4) # L : store it
addq $4, 1, $4 # E : dest++
and $4, 7, $1 # E : dest 0mod8 yet?
bne $1, $aligndest # U : go until we are aligned.
/* Source has unknown alignment, but dest is known to be 0mod8 */
$dest_0mod8:
subq $18, 8, $18 # E : At least a quad left?
blt $18, $misalign_tail # U : Nope
ldq_u $3, 0($17) # L : seed (rotating load) of 8 bytes
nop # E :
$mis_quad:
ldq_u $16, 8($17) # L : Fetch next 8
extql $3, $17, $3 # U : masking
extqh $16, $17, $1 # U : masking
bis $3, $1, $1 # E : merged bytes to store
subq $18, 8, $18 # E : count -= 8
addq $17, 8, $17 # E : src += 8
stq $1, 0($4) # L : store 8 (aligned)
mov $16, $3 # E : "rotate" source data
addq $4, 8, $4 # E : dest += 8
bge $18, $mis_quad # U : More quads to move
nop
nop
$misalign_tail:
addq $18, 8, $18 # E : account for tail stuff
ble $18, $nomoredata # U :
nop
nop
$misalign_byte:
ldbu $1, 0($17) # L : fetch 1
subq $18, 1, $18 # E : count--
addq $17, 1, $17 # E : src++
nop # E :
stb $1, 0($4) # L : store
addq $4, 1, $4 # E : dest++
bgt $18, $misalign_byte # U : more to go?
nop
$nomoredata:
ret $31, ($26), 1 # L0 :
nop # E :
nop # E :
nop # E :
END(memcpy)
libc_hidden_builtin_def (memcpy)

View File

@ -0,0 +1,223 @@
/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu)
EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
.arch ev6
.set noat
.set noreorder
ENTRY(memset)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
/*
* Serious stalling happens. The only way to mitigate this is to
* undertake a major re-write to interleave the constant materialization
* with other parts of the fall-through code. This is important, even
* though it makes maintenance tougher.
* Do this later.
*/
and $17, 255, $1 # E : 00000000000000ch
insbl $17, 1, $2 # U : 000000000000ch00
mov $16, $0 # E : return value
ble $18, $end # U : zero length requested?
addq $18, $16, $6 # E : max address to write to
or $1, $2, $17 # E : 000000000000chch
insbl $1, 2, $3 # U : 0000000000ch0000
insbl $1, 3, $4 # U : 00000000ch000000
or $3, $4, $3 # E : 00000000chch0000
inswl $17, 4, $5 # U : 0000chch00000000
xor $16, $6, $1 # E : will complete write be within one quadword?
inswl $17, 6, $2 # U : chch000000000000
or $17, $3, $17 # E : 00000000chchchch
or $2, $5, $2 # E : chchchch00000000
bic $1, 7, $1 # E : fit within a single quadword?
and $16, 7, $3 # E : Target addr misalignment
or $17, $2, $17 # E : chchchchchchchch
beq $1, $within_quad # U :
nop # E :
beq $3, $aligned # U : target is 0mod8
/*
* Target address is misaligned, and won't fit within a quadword.
*/
ldq_u $4, 0($16) # L : Fetch first partial
mov $16, $5 # E : Save the address
insql $17, $16, $2 # U : Insert new bytes
subq $3, 8, $3 # E : Invert (for addressing uses)
addq $18, $3, $18 # E : $18 is new count ($3 is negative)
mskql $4, $16, $4 # U : clear relevant parts of the quad
subq $16, $3, $16 # E : $16 is new aligned destination
or $2, $4, $1 # E : Final bytes
nop
stq_u $1,0($5) # L : Store result
nop
nop
.align 4
$aligned:
/*
* We are now guaranteed to be quad aligned, with at least
* one partial quad to write.
*/
sra $18, 3, $3 # U : Number of remaining quads to write
and $18, 7, $18 # E : Number of trailing bytes to write
mov $16, $5 # E : Save dest address
beq $3, $no_quad # U : tail stuff only
/*
* It's worth the effort to unroll this and use wh64 if possible.
* At this point, entry values are:
* $16 Current destination address
* $5 A copy of $16
* $6 The max quadword address to write to
* $18 Number trailer bytes
* $3 Number quads to write
*/
and $16, 0x3f, $2 # E : Forward work (only useful for unrolled loop)
subq $3, 16, $4 # E : Only try to unroll if > 128 bytes
subq $2, 0x40, $1 # E : bias counter (aligning stuff 0mod64)
blt $4, $loop # U :
/*
* We know we've got at least 16 quads, minimum of one trip
* through unrolled loop. Do a quad at a time to get us 0mod64
* aligned.
*/
nop # E :
nop # E :
nop # E :
beq $1, $bigalign # U :
$alignmod64:
stq $17, 0($5) # L :
subq $3, 1, $3 # E : For consistency later
addq $1, 8, $1 # E : Increment towards zero for alignment
addq $5, 8, $4 # E : Initial wh64 address (filler instruction)
nop
nop
addq $5, 8, $5 # E : Inc address
blt $1, $alignmod64 # U :
$bigalign:
/*
* $3 - number quads left to go
* $5 - target address (aligned 0mod64)
* $17 - mask of stuff to store
* Scratch registers available: $7, $2, $4, $1
* We know that we'll be taking a minimum of one trip through.
* CWG Section 3.7.6: do not expect a sustained store rate of > 1/cycle
* Assumes the wh64 needs to be for 2 trips through the loop in the future.
* The wh64 is issued on for the starting destination address for trip +2
* through the loop, and if there are less than two trips left, the target
* address will be for the current trip.
*/
$do_wh64:
wh64 ($4) # L1 : memory subsystem write hint
subq $3, 24, $2 # E : For determining future wh64 addresses
stq $17, 0($5) # L :
nop # E :
addq $5, 128, $4 # E : speculative target of next wh64
stq $17, 8($5) # L :
stq $17, 16($5) # L :
addq $5, 64, $7 # E : Fallback address for wh64 (== next trip addr)
stq $17, 24($5) # L :
stq $17, 32($5) # L :
cmovlt $2, $7, $4 # E : Latency 2, extra mapping cycle
nop
stq $17, 40($5) # L :
stq $17, 48($5) # L :
subq $3, 16, $2 # E : Repeat the loop at least once more?
nop
stq $17, 56($5) # L :
addq $5, 64, $5 # E :
subq $3, 8, $3 # E :
bge $2, $do_wh64 # U :
nop
nop
nop
beq $3, $no_quad # U : Might have finished already
.align 4
/*
* Simple loop for trailing quadwords, or for small amounts
* of data (where we can't use an unrolled loop and wh64)
*/
$loop:
stq $17, 0($5) # L :
subq $3, 1, $3 # E : Decrement number quads left
addq $5, 8, $5 # E : Inc address
bne $3, $loop # U : more?
$no_quad:
/*
* Write 0..7 trailing bytes.
*/
nop # E :
beq $18, $end # U : All done?
ldq $7, 0($5) # L :
mskqh $7, $6, $2 # U : Mask final quad
insqh $17, $6, $4 # U : New bits
or $2, $4, $1 # E : Put it all together
stq $1, 0($5) # L : And back to memory
ret $31,($26),1 # L0 :
$within_quad:
ldq_u $1, 0($16) # L :
insql $17, $16, $2 # U : New bits
mskql $1, $16, $4 # U : Clear old
or $2, $4, $2 # E : New result
mskql $2, $6, $4 # U :
mskqh $1, $6, $2 # U :
or $2, $4, $1 # E :
stq_u $1, 0($16) # L :
$end:
nop
nop
nop
ret $31,($26),1 # L0 :
END(memset)
libc_hidden_builtin_def (memset)

View File

@ -0,0 +1,314 @@
/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu)
EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Copy a null-terminated string from SRC to DST.
This is an internal routine used by strcpy, stpcpy, and strcat.
As such, it uses special linkage conventions to make implementation
of these public functions more efficient.
On input:
t9 = return address
a0 = DST
a1 = SRC
On output:
t8 = bitmask (with one bit set) indicating the last byte written
a0 = unaligned address of the last *word* written
Furthermore, v0, a3-a5, t11, and t12 are untouched.
*/
#include <sysdep.h>
.arch ev6
.set noat
.set noreorder
.text
.type __stxcpy, @function
.globl __stxcpy
.usepv __stxcpy, no
cfi_startproc
cfi_return_column (t9)
/* On entry to this basic block:
t0 == the first destination word for masking back in
t1 == the first source word. */
.align 4
stxcpy_aligned:
/* Create the 1st output word and detect 0's in the 1st input word. */
lda t2, -1 # E : build a mask against false zero
mskqh t2, a1, t2 # U : detection in the src word (stall)
mskqh t1, a1, t3 # U :
ornot t1, t2, t2 # E : (stall)
mskql t0, a1, t0 # U : assemble the first output word
cmpbge zero, t2, t10 # E : bits set iff null found
or t0, t3, t1 # E : (stall)
bne t10, $a_eos # U : (stall)
/* On entry to this basic block:
t0 == the first destination word for masking back in
t1 == a source word not containing a null. */
/* Nops here to separate store quads from load quads */
$a_loop:
stq_u t1, 0(a0) # L :
addq a0, 8, a0 # E :
nop
nop
ldq_u t1, 0(a1) # L : Latency=3
addq a1, 8, a1 # E :
cmpbge zero, t1, t10 # E : (3 cycle stall)
beq t10, $a_loop # U : (stall for t10)
/* Take care of the final (partial) word store.
On entry to this basic block we have:
t1 == the source word containing the null
t10 == the cmpbge mask that found it. */
$a_eos:
negq t10, t6 # E : find low bit set
and t10, t6, t8 # E : (stall)
/* For the sake of the cache, don't read a destination word
if we're not going to need it. */
and t8, 0x80, t6 # E : (stall)
bne t6, 1f # U : (stall)
/* We're doing a partial word store and so need to combine
our source and original destination words. */
ldq_u t0, 0(a0) # L : Latency=3
subq t8, 1, t6 # E :
zapnot t1, t6, t1 # U : clear src bytes >= null (stall)
or t8, t6, t10 # E : (stall)
zap t0, t10, t0 # E : clear dst bytes <= null
or t0, t1, t1 # E : (stall)
nop
nop
1: stq_u t1, 0(a0) # L :
ret (t9) # L0 : Latency=3
nop
nop
.align 4
__stxcpy:
/* Are source and destination co-aligned? */
xor a0, a1, t0 # E :
unop # E :
and t0, 7, t0 # E : (stall)
bne t0, $unaligned # U : (stall)
/* We are co-aligned; take care of a partial first word. */
ldq_u t1, 0(a1) # L : load first src word
and a0, 7, t0 # E : take care not to load a word ...
addq a1, 8, a1 # E :
beq t0, stxcpy_aligned # U : ... if we wont need it (stall)
ldq_u t0, 0(a0) # L :
br stxcpy_aligned # L0 : Latency=3
nop
nop
/* The source and destination are not co-aligned. Align the destination
and cope. We have to be very careful about not reading too much and
causing a SEGV. */
.align 4
$u_head:
/* We know just enough now to be able to assemble the first
full source word. We can still find a zero at the end of it
that prevents us from outputting the whole thing.
On entry to this basic block:
t0 == the first dest word, for masking back in, if needed else 0
t1 == the low bits of the first source word
t6 == bytemask that is -1 in dest word bytes */
ldq_u t2, 8(a1) # L :
addq a1, 8, a1 # E :
extql t1, a1, t1 # U : (stall on a1)
extqh t2, a1, t4 # U : (stall on a1)
mskql t0, a0, t0 # U :
or t1, t4, t1 # E :
mskqh t1, a0, t1 # U : (stall on t1)
or t0, t1, t1 # E : (stall on t1)
or t1, t6, t6 # E :
cmpbge zero, t6, t10 # E : (stall)
lda t6, -1 # E : for masking just below
bne t10, $u_final # U : (stall)
mskql t6, a1, t6 # U : mask out the bits we have
or t6, t2, t2 # E : already extracted before (stall)
cmpbge zero, t2, t10 # E : testing eos (stall)
bne t10, $u_late_head_exit # U : (stall)
/* Finally, we've got all the stupid leading edge cases taken care
of and we can set up to enter the main loop. */
stq_u t1, 0(a0) # L : store first output word
addq a0, 8, a0 # E :
extql t2, a1, t0 # U : position ho-bits of lo word
ldq_u t2, 8(a1) # U : read next high-order source word
addq a1, 8, a1 # E :
cmpbge zero, t2, t10 # E : (stall for t2)
nop # E :
bne t10, $u_eos # U : (stall)
/* Unaligned copy main loop. In order to avoid reading too much,
the loop is structured to detect zeros in aligned source words.
This has, unfortunately, effectively pulled half of a loop
iteration out into the head and half into the tail, but it does
prevent nastiness from accumulating in the very thing we want
to run as fast as possible.
On entry to this basic block:
t0 == the shifted high-order bits from the previous source word
t2 == the unshifted current source word
We further know that t2 does not contain a null terminator. */
.align 3
$u_loop:
extqh t2, a1, t1 # U : extract high bits for current word
addq a1, 8, a1 # E : (stall)
extql t2, a1, t3 # U : extract low bits for next time (stall)
addq a0, 8, a0 # E :
or t0, t1, t1 # E : current dst word now complete
ldq_u t2, 0(a1) # L : Latency=3 load high word for next time
stq_u t1, -8(a0) # L : save the current word (stall)
mov t3, t0 # E :
cmpbge zero, t2, t10 # E : test new word for eos
beq t10, $u_loop # U : (stall)
nop
nop
/* We've found a zero somewhere in the source word we just read.
If it resides in the lower half, we have one (probably partial)
word to write out, and if it resides in the upper half, we
have one full and one partial word left to write out.
On entry to this basic block:
t0 == the shifted high-order bits from the previous source word
t2 == the unshifted current source word. */
$u_eos:
extqh t2, a1, t1 # U :
or t0, t1, t1 # E : first (partial) source word complete (stall)
cmpbge zero, t1, t10 # E : is the null in this first bit? (stall)
bne t10, $u_final # U : (stall)
$u_late_head_exit:
stq_u t1, 0(a0) # L : the null was in the high-order bits
addq a0, 8, a0 # E :
extql t2, a1, t1 # U :
cmpbge zero, t1, t10 # E : (stall)
/* Take care of a final (probably partial) result word.
On entry to this basic block:
t1 == assembled source word
t10 == cmpbge mask that found the null. */
$u_final:
negq t10, t6 # E : isolate low bit set
and t6, t10, t8 # E : (stall)
and t8, 0x80, t6 # E : avoid dest word load if we can (stall)
bne t6, 1f # U : (stall)
ldq_u t0, 0(a0) # E :
subq t8, 1, t6 # E :
or t6, t8, t10 # E : (stall)
zapnot t1, t6, t1 # U : kill source bytes >= null (stall)
zap t0, t10, t0 # U : kill dest bytes <= null (2 cycle data stall)
or t0, t1, t1 # E : (stall)
nop
nop
1: stq_u t1, 0(a0) # L :
ret (t9) # L0 : Latency=3
nop
nop
/* Unaligned copy entry point. */
.align 4
$unaligned:
ldq_u t1, 0(a1) # L : load first source word
and a0, 7, t4 # E : find dest misalignment
and a1, 7, t5 # E : find src misalignment
/* Conditionally load the first destination word and a bytemask
with 0xff indicating that the destination byte is sacrosanct. */
mov zero, t0 # E :
mov zero, t6 # E :
beq t4, 1f # U :
ldq_u t0, 0(a0) # L :
lda t6, -1 # E :
mskql t6, a0, t6 # U :
nop
nop
nop
1:
subq a1, t4, a1 # E : sub dest misalignment from src addr
/* If source misalignment is larger than dest misalignment, we need
extra startup checks to avoid SEGV. */
cmplt t4, t5, t8 # E :
beq t8, $u_head # U :
lda t2, -1 # E : mask out leading garbage in source
mskqh t2, t5, t2 # U :
ornot t1, t2, t3 # E : (stall)
cmpbge zero, t3, t10 # E : is there a zero? (stall)
beq t10, $u_head # U : (stall)
/* At this point we've found a zero in the first partial word of
the source. We need to isolate the valid source data and mask
it into the original destination data. (Incidentally, we know
that we'll need at least one byte of that original dest word.) */
ldq_u t0, 0(a0) # L :
negq t10, t6 # E : build bitmask of bytes <= zero
and t6, t10, t8 # E : (stall)
and a1, 7, t5 # E :
subq t8, 1, t6 # E :
or t6, t8, t10 # E : (stall)
srl t8, t5, t8 # U : adjust final null return value
zapnot t2, t10, t2 # U : prepare source word; mirror changes (stall)
and t1, t2, t1 # E : to source validity mask
extql t2, a1, t2 # U :
extql t1, a1, t1 # U : (stall)
andnot t0, t2, t0 # .. e1 : zero place for source to reside (stall)
or t0, t1, t1 # e1 : and put it there
stq_u t1, 0(a0) # .. e0 : (stall)
ret (t9) # e1 :
cfi_endproc

View File

@ -0,0 +1,392 @@
/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu)
EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Copy no more than COUNT bytes of the null-terminated string from
SRC to DST.
This is an internal routine used by strncpy, stpncpy, and strncat.
As such, it uses special linkage conventions to make implementation
of these public functions more efficient.
On input:
t9 = return address
a0 = DST
a1 = SRC
a2 = COUNT
Furthermore, COUNT may not be zero.
On output:
t0 = last word written
t8 = bitmask (with one bit set) indicating the last byte written
t10 = bitmask (with one bit set) indicating the byte position of
the end of the range specified by COUNT
a0 = unaligned address of the last *word* written
a2 = the number of full words left in COUNT
Furthermore, v0, a3-a5, t11, and t12 are untouched.
*/
#include <sysdep.h>
.arch ev6
.set noat
.set noreorder
.text
.type __stxncpy, @function
.globl __stxncpy
.usepv __stxncpy, no
cfi_startproc
cfi_return_column (t9)
/* On entry to this basic block:
t0 == the first destination word for masking back in
t1 == the first source word. */
.align 4
stxncpy_aligned:
/* Create the 1st output word and detect 0's in the 1st input word. */
lda t2, -1 # E : build a mask against false zero
mskqh t2, a1, t2 # U : detection in the src word (stall)
mskqh t1, a1, t3 # U :
ornot t1, t2, t2 # E : (stall)
mskql t0, a1, t0 # U : assemble the first output word
cmpbge zero, t2, t7 # E : bits set iff null found
or t0, t3, t0 # E : (stall)
beq a2, $a_eoc # U :
bne t7, $a_eos # U :
nop
nop
nop
/* On entry to this basic block:
t0 == a source word not containing a null. */
/*
* nops here to:
* separate store quads from load quads
* limit of 1 bcond/quad to permit training
*/
$a_loop:
stq_u t0, 0(a0) # L :
addq a0, 8, a0 # E :
subq a2, 1, a2 # E :
nop
ldq_u t0, 0(a1) # L :
addq a1, 8, a1 # E :
cmpbge zero, t0, t7 # E :
beq a2, $a_eoc # U :
beq t7, $a_loop # U :
nop
nop
nop
/* Take care of the final (partial) word store. At this point
the end-of-count bit is set in t7 iff it applies.
On entry to this basic block we have:
t0 == the source word containing the null
t7 == the cmpbge mask that found it. */
$a_eos:
negq t7, t8 # E : find low bit set
and t7, t8, t8 # E : (stall)
/* For the sake of the cache, don't read a destination word
if we're not going to need it. */
and t8, 0x80, t6 # E : (stall)
bne t6, 1f # U : (stall)
/* We're doing a partial word store and so need to combine
our source and original destination words. */
ldq_u t1, 0(a0) # L :
subq t8, 1, t6 # E :
or t8, t6, t7 # E : (stall)
zapnot t0, t7, t0 # U : clear src bytes > null (stall)
zap t1, t7, t1 # .. e1 : clear dst bytes <= null
or t0, t1, t0 # e1 : (stall)
nop
nop
1: stq_u t0, 0(a0) # L :
ret (t9) # L0 : Latency=3
nop
nop
/* Add the end-of-count bit to the eos detection bitmask. */
$a_eoc:
or t10, t7, t7 # E :
br $a_eos # L0 : Latency=3
nop
nop
.align 4
__stxncpy:
/* Are source and destination co-aligned? */
lda t2, -1 # E :
xor a0, a1, t1 # E :
and a0, 7, t0 # E : find dest misalignment
nop # E :
srl t2, 1, t2 # U :
and t1, 7, t1 # E :
cmovlt a2, t2, a2 # E : bound count to LONG_MAX (stall)
nop # E :
addq a2, t0, a2 # E : bias count by dest misalignment
subq a2, 1, a2 # E : (stall)
and a2, 7, t2 # E : (stall)
lda t10, 1 # E :
srl a2, 3, a2 # U : a2 = loop counter = (count - 1)/8
sll t10, t2, t10 # U : t10 = bitmask of last count byte
nop # E :
bne t1, $unaligned # U : (stall)
/* We are co-aligned; take care of a partial first word. */
ldq_u t1, 0(a1) # L : load first src word
addq a1, 8, a1 # E :
beq t0, stxncpy_aligned # U : avoid loading dest word if not needed
ldq_u t0, 0(a0) # L :
br stxncpy_aligned # U :
nop
nop
nop
/* The source and destination are not co-aligned. Align the destination
and cope. We have to be very careful about not reading too much and
causing a SEGV. */
.align 4
$u_head:
/* We know just enough now to be able to assemble the first
full source word. We can still find a zero at the end of it
that prevents us from outputting the whole thing.
On entry to this basic block:
t0 == the first dest word, unmasked
t1 == the shifted low bits of the first source word
t6 == bytemask that is -1 in dest word bytes */
ldq_u t2, 8(a1) # L : Latency=3 load second src word
addq a1, 8, a1 # E :
mskql t0, a0, t0 # U : mask trailing garbage in dst
extqh t2, a1, t4 # U : (3 cycle stall on t2)
or t1, t4, t1 # E : first aligned src word complete (stall)
mskqh t1, a0, t1 # U : mask leading garbage in src (stall)
or t0, t1, t0 # E : first output word complete (stall)
or t0, t6, t6 # E : mask original data for zero test (stall)
cmpbge zero, t6, t7 # E :
beq a2, $u_eocfin # U :
lda t6, -1 # E :
nop
bne t7, $u_final # U :
mskql t6, a1, t6 # U : mask out bits already seen
stq_u t0, 0(a0) # L : store first output word
or t6, t2, t2 # E :
cmpbge zero, t2, t7 # E : find nulls in second partial
addq a0, 8, a0 # E :
subq a2, 1, a2 # E :
bne t7, $u_late_head_exit # U :
/* Finally, we've got all the stupid leading edge cases taken care
of and we can set up to enter the main loop. */
extql t2, a1, t1 # U : position hi-bits of lo word
beq a2, $u_eoc # U :
ldq_u t2, 8(a1) # L : read next high-order source word
addq a1, 8, a1 # E :
extqh t2, a1, t0 # U : position lo-bits of hi word (stall)
cmpbge zero, t2, t7 # E :
nop
bne t7, $u_eos # U :
/* Unaligned copy main loop. In order to avoid reading too much,
the loop is structured to detect zeros in aligned source words.
This has, unfortunately, effectively pulled half of a loop
iteration out into the head and half into the tail, but it does
prevent nastiness from accumulating in the very thing we want
to run as fast as possible.
On entry to this basic block:
t0 == the shifted low-order bits from the current source word
t1 == the shifted high-order bits from the previous source word
t2 == the unshifted current source word
We further know that t2 does not contain a null terminator. */
.align 4
$u_loop:
or t0, t1, t0 # E : current dst word now complete
subq a2, 1, a2 # E : decrement word count
extql t2, a1, t1 # U : extract high bits for next time
addq a0, 8, a0 # E :
stq_u t0, -8(a0) # L : save the current word
beq a2, $u_eoc # U :
ldq_u t2, 8(a1) # L : Latency=3 load high word for next time
addq a1, 8, a1 # E :
extqh t2, a1, t0 # U : extract low bits (2 cycle stall)
cmpbge zero, t2, t7 # E : test new word for eos
nop
beq t7, $u_loop # U :
/* We've found a zero somewhere in the source word we just read.
If it resides in the lower half, we have one (probably partial)
word to write out, and if it resides in the upper half, we
have one full and one partial word left to write out.
On entry to this basic block:
t0 == the shifted low-order bits from the current source word
t1 == the shifted high-order bits from the previous source word
t2 == the unshifted current source word. */
$u_eos:
or t0, t1, t0 # E : first (partial) source word complete
nop
cmpbge zero, t0, t7 # E : is the null in this first bit? (stall)
bne t7, $u_final # U : (stall)
stq_u t0, 0(a0) # L : the null was in the high-order bits
addq a0, 8, a0 # E :
subq a2, 1, a2 # E :
nop
$u_late_head_exit:
extql t2, a1, t0 # U :
cmpbge zero, t0, t7 # E :
or t7, t10, t6 # E : (stall)
cmoveq a2, t6, t7 # E : Latency=2, extra map slot (stall)
/* Take care of a final (probably partial) result word.
On entry to this basic block:
t0 == assembled source word
t7 == cmpbge mask that found the null. */
$u_final:
negq t7, t6 # E : isolate low bit set
and t6, t7, t8 # E : (stall)
and t8, 0x80, t6 # E : avoid dest word load if we can (stall)
bne t6, 1f # U : (stall)
ldq_u t1, 0(a0) # L :
subq t8, 1, t6 # E :
or t6, t8, t7 # E : (stall)
zapnot t0, t7, t0 # U : kill source bytes > null
zap t1, t7, t1 # U : kill dest bytes <= null
or t0, t1, t0 # E : (stall)
nop
nop
1: stq_u t0, 0(a0) # L :
ret (t9) # L0 : Latency=3
/* Got to end-of-count before end of string.
On entry to this basic block:
t1 == the shifted high-order bits from the previous source word */
$u_eoc:
and a1, 7, t6 # E :
sll t10, t6, t6 # U : (stall)
and t6, 0xff, t6 # E : (stall)
bne t6, 1f # U : (stall)
ldq_u t2, 8(a1) # L : load final src word
nop
extqh t2, a1, t0 # U : extract low bits for last word (stall)
or t1, t0, t1 # E : (stall)
1: cmpbge zero, t1, t7 # E :
mov t1, t0
$u_eocfin: # end-of-count, final word
or t10, t7, t7 # E :
br $u_final # L0 : Latency=3
/* Unaligned copy entry point. */
.align 4
$unaligned:
ldq_u t1, 0(a1) # L : load first source word
and a0, 7, t4 # E : find dest misalignment
and a1, 7, t5 # E : find src misalignment
/* Conditionally load the first destination word and a bytemask
with 0xff indicating that the destination byte is sacrosanct. */
mov zero, t0 # E :
mov zero, t6 # E :
beq t4, 1f # U :
ldq_u t0, 0(a0) # L :
lda t6, -1 # E :
mskql t6, a0, t6 # U :
nop
nop
1: subq a1, t4, a1 # E : sub dest misalignment from src addr
/* If source misalignment is larger than dest misalignment, we need
extra startup checks to avoid SEGV. */
cmplt t4, t5, t8 # E :
extql t1, a1, t1 # U : shift src into place
lda t2, -1 # E : for creating masks later
beq t8, $u_head # U : (stall)
mskqh t2, t5, t2 # U : begin src byte validity mask
cmpbge zero, t1, t7 # E : is there a zero?
extql t2, a1, t2 # U :
or t7, t10, t5 # E : test for end-of-count too
cmpbge zero, t2, t3 # E :
cmoveq a2, t5, t7 # E : Latency=2, extra map slot
nop # E : keep with cmoveq
andnot t7, t3, t7 # E : (stall)
beq t7, $u_head # U :
/* At this point we've found a zero in the first partial word of
the source. We need to isolate the valid source data and mask
it into the original destination data. (Incidentally, we know
that we'll need at least one byte of that original dest word.) */
ldq_u t0, 0(a0) # L :
negq t7, t6 # E : build bitmask of bytes <= zero
mskqh t1, t4, t1 # U :
and t6, t7, t8 # E :
subq t8, 1, t6 # E : (stall)
or t6, t8, t7 # E : (stall)
zapnot t2, t7, t2 # U : prepare source word; mirror changes (stall)
zapnot t1, t7, t1 # U : to source validity mask
andnot t0, t2, t0 # E : zero place for source to reside
or t0, t1, t0 # E : and put it there (stall both t0, t1)
stq_u t0, 0(a0) # L : (stall)
ret (t9) # L0 : Latency=3
cfi_endproc

View File

@ -0,0 +1 @@
alpha/alphaev6

View File

@ -0,0 +1,50 @@
/* Copyright (C) 2000, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Finds the first bit set in an integer. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(__ffs)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
zap $16, 0xF0, $16
cttz $16, $0
addq $0, 1, $0
cmoveq $16, 0, $0
nop
nop
nop
ret
END(__ffs)
weak_alias (__ffs, ffs)
libc_hidden_builtin_def (ffs)

View File

@ -0,0 +1,44 @@
/* 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Finds the first bit set in a long. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(ffsl)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
cttz $16, $0
addq $0, 1, $0
cmoveq $16, 0, $0
ret
END(ffsl)
weak_extern (ffsl)
weak_alias (ffsl, ffsll)

View File

@ -0,0 +1 @@
alpha/alphaev6/fpu

View File

@ -0,0 +1,92 @@
/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Return pointer to first occurrence of CH in STR. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(__rawmemchr)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
ldq_u t0, 0(a0) # L : load first quadword Latency=3
and a1, 0xff, t3 # E : 00000000000000ch
insbl a1, 1, t5 # U : 000000000000ch00
insbl a1, 7, a2 # U : ch00000000000000
insbl t3, 6, a3 # U : 00ch000000000000
or t5, t3, a1 # E : 000000000000chch
andnot a0, 7, v0 # E : align our loop pointer
lda t4, -1 # E : build garbage mask
mskqh t4, a0, t4 # U : only want relevant part of first quad
or a2, a3, a2 # E : chch000000000000
inswl a1, 2, t5 # E : 00000000chch0000
inswl a1, 4, a3 # E : 0000chch00000000
or a1, a2, a1 # E : chch00000000chch
or a3, t5, t5 # E : 0000chchchch0000
cmpbge zero, t4, t4 # E : bits set iff byte is garbage
nop # E :
/* This quad is _very_ serialized. Lots of stalling happens */
or t5, a1, a1 # E : chchchchchchchch
xor t0, a1, t1 # E : make bytes == c zero
cmpbge zero, t1, t0 # E : bits set iff byte == c
andnot t0, t4, t0 # E : clear garbage bits
cttz t0, a2 # U0 : speculative (in case we get a match)
nop # E :
nop # E :
bne t0, $found # U :
/*
* Yuk. This loop is going to stall like crazy waiting for the
* data to be loaded. Not much can be done about it unless it's
* unrolled multiple times, which is generally unsafe.
*/
$loop:
ldq t0, 8(v0) # L : Latency=3
addq v0, 8, v0 # E :
xor t0, a1, t1 # E :
cmpbge zero, t1, t0 # E : bits set iff byte == c
cttz t0, a2 # U0 : speculative (in case we get a match)
nop # E :
nop # E :
beq t0, $loop # U :
$found:
negq t0, t1 # E : clear all but least set bit
and t0, t1, t0 # E :
addq v0, a2, v0 # E : Add in the bit number from above
ret # L0 :
END(__rawmemchr)
libc_hidden_def (__rawmemchr)
weak_alias (__rawmemchr, rawmemchr)

View File

@ -0,0 +1,53 @@
/* Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@redhat.com>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Copy SRC to DEST returning the address of the terminating 0 in DEST. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
.text
ENTRY(__stpcpy)
ldgp gp, 0(pv)
#ifdef PROF
lda AT, _mcount
jsr AT, (AT), _mcount
#endif
.prologue 1
.align 4
mov a0, v0
nop
jsr t9, __stxcpy
# t8 = bitmask (with one bit set) indicating the last byte written
# a0 = unaligned address of the last *word* written
cttz t8, t8
andnot a0, 7, a0
addq a0, t8, v0
ret
END(__stpcpy)
weak_alias (__stpcpy, stpcpy)
libc_hidden_def (__stpcpy)
libc_hidden_builtin_def (stpcpy)

View File

@ -0,0 +1,115 @@
/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@redhat.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Copy no more then N bytes from SRC to DEST, returning the address of
the terminating '\0' in DEST. */
#include <sysdep.h>
.arch ev6
.set noat
.set noreorder
.text
ENTRY(__stpncpy)
ldgp gp, 0(pv)
#ifdef PROF
lda AT, _mcount
jsr AT, (AT), _mcount
#endif
.prologue 1
mov a0, v0
beq a2, $zerocount
.align 4
nop
nop
jsr t9, __stxncpy # do the work of the copy
cttz t8, t4
zapnot t0, t8, t5
andnot a0, 7, a0
bne a2, $multiword # do we have full words left?
subq t8, 1, t2
subq t10, 1, t3
cmpult zero, t5, t5
addq a0, t4, v0
or t2, t8, t2
or t3, t10, t3
addq v0, t5, v0
andnot t3, t2, t3
zap t0, t3, t0
nop
stq t0, 0(a0)
ret
$multiword:
subq t8, 1, t7 # clear the final bits in the prev word
cmpult zero, t5, t5
or t7, t8, t7
zapnot t0, t7, t0
subq a2, 1, a2
stq t0, 0(a0)
addq a0, 8, a1
beq a2, 1f # loop over full words remaining
nop
nop
nop
blbc a2, 0f
stq zero, 0(a1)
subq a2, 1, a2
addq a1, 8, a1
beq a2, 1f
0: stq zero, 0(a1)
subq a2, 2, a2
nop
nop
stq zero, 8(a1)
addq a1, 16, a1
nop
bne a2, 0b
1: ldq t0, 0(a1) # clear the leading bits in the final word
subq t10, 1, t7
addq a0, t4, v0
nop
or t7, t10, t7
addq v0, t5, v0
zap t0, t7, t0
stq t0, 0(a1)
$zerocount:
nop
nop
nop
ret
END(__stpncpy)
libc_hidden_def (__stpncpy)
weak_alias (__stpncpy, stpncpy)

View File

@ -0,0 +1,61 @@
/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@tamu.edu>, 1996.
EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Append a null-terminated string from SRC to DST. */
#include <sysdep.h>
.arch ev6
.set noreorder
.text
ENTRY(strcat)
ldgp gp, 0(pv)
#ifdef PROF
.set noat
lda AT, _mcount
jsr AT, (AT), _mcount
.set at
#endif
.prologue 1
mov $16, $0 # E : set up return value
/* Find the end of the string. */
ldq_u $1, 0($16) # L : load first quadword (a0 may be misaligned)
lda $2, -1 # E :
insqh $2, $16, $2 # U :
andnot $16, 7, $16 # E :
or $2, $1, $1 # E :
cmpbge $31, $1, $2 # E : bits set iff byte == 0
bne $2, $found # U :
$loop: ldq $1, 8($16) # L :
addq $16, 8, $16 # E :
cmpbge $31, $1, $2 # E :
beq $2, $loop # U :
$found: cttz $2, $3 # U0 :
addq $16, $3, $16 # E :
/* Now do the append. */
mov $26, $23 # E :
jmp $31, __stxcpy # L0 :
END(strcat)
libc_hidden_builtin_def (strcat)

View File

@ -0,0 +1,100 @@
/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@tamu.edu>, 1996.
EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Return the address of a given character within a null-terminated
string, or null if it is not found. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(strchr)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
ldq_u t0, 0(a0) # L : load first quadword Latency=3
and a1, 0xff, t3 # E : 00000000000000ch
insbl a1, 1, t5 # U : 000000000000ch00
insbl a1, 7, a2 # U : ch00000000000000
insbl t3, 6, a3 # U : 00ch000000000000
or t5, t3, a1 # E : 000000000000chch
andnot a0, 7, v0 # E : align our loop pointer
lda t4, -1 # E : build garbage mask
mskqh t4, a0, t4 # U : only want relevant part of first quad
or a2, a3, a2 # E : chch000000000000
inswl a1, 2, t5 # E : 00000000chch0000
inswl a1, 4, a3 # E : 0000chch00000000
or a1, a2, a1 # E : chch00000000chch
or a3, t5, t5 # E : 0000chchchch0000
cmpbge zero, t0, t2 # E : bits set iff byte == zero
cmpbge zero, t4, t4 # E : bits set iff byte is garbage
/* This quad is _very_ serialized. Lots of stalling happens */
or t5, a1, a1 # E : chchchchchchchch
xor t0, a1, t1 # E : make bytes == c zero
cmpbge zero, t1, t3 # E : bits set iff byte == c
or t2, t3, t0 # E : bits set iff char match or zero match
andnot t0, t4, t0 # E : clear garbage bits
cttz t0, a2 # U0 : speculative (in case we get a match)
nop # E :
bne t0, $found # U :
/*
* Yuk. This loop is going to stall like crazy waiting for the
* data to be loaded. Not much can be done about it unless it's
* unrolled multiple times, which is generally unsafe.
*/
$loop:
ldq t0, 8(v0) # L : Latency=3
addq v0, 8, v0 # E :
xor t0, a1, t1 # E :
cmpbge zero, t0, t2 # E : bits set iff byte == 0
cmpbge zero, t1, t3 # E : bits set iff byte == c
or t2, t3, t0 # E :
cttz t3, a2 # U0 : speculative (in case we get a match)
beq t0, $loop # U :
$found:
negq t0, t1 # E : clear all but least set bit
and t0, t1, t0 # E :
and t0, t3, t1 # E : bit set iff byte was the char
addq v0, a2, v0 # E : Add in the bit number from above
cmoveq t1, $31, v0 # E : Two mapping slots, latency = 2
nop
nop
ret # L0 :
END(strchr)
weak_alias (strchr, index)
libc_hidden_builtin_def (strchr)

View File

@ -0,0 +1,60 @@
/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Finds length of a 0-terminated string. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(strlen)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
ldq_u $1, 0($16) # L : load first quadword ($16 may be misaligned)
lda $2, -1($31) # E :
insqh $2, $16, $2 # U :
andnot $16, 7, $0 # E :
or $2, $1, $1 # E :
cmpbge $31, $1, $2 # E : $2 <- bitmask: bit i == 1 <==> i-th byte == 0
nop # E :
bne $2, $found # U :
$loop: ldq $1, 8($0) # L :
addq $0, 8, $0 # E : addr += 8
cmpbge $31, $1, $2 # E :
beq $2, $loop # U :
$found:
cttz $2, $3 # U0 :
addq $0, $3, $0 # E :
subq $0, $16, $0 # E :
ret $31, ($26) # L0 :
END(strlen)
libc_hidden_builtin_def (strlen)

View File

@ -0,0 +1,87 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@tamu.edu>, 1996.
EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Append no more than COUNT characters from the null-terminated string SRC
to the null-terminated string DST. Always null-terminate the new DST. */
#include <sysdep.h>
.arch ev6
.set noreorder
.text
ENTRY(strncat)
ldgp gp, 0(pv)
#ifdef PROF
.set noat
lda AT, _mcount
jsr AT, (AT), _mcount
.set at
#endif
.prologue 1
mov a0, v0 # set up return value
beq a2, $zerocount # U :
/* Find the end of the string. */
ldq_u t0, 0(a0) # L : load first quadword (a0 may be misaligned)
lda t1, -1 # E :
insqh t1, v0, t1 # U :
andnot a0, 7, a0 # E :
nop # E :
or t1, t0, t0 # E :
nop # E :
nop # E :
cmpbge zero, t0, t1 # E : bits set iff byte == 0
bne t1, $found # U :
$loop: ldq t0, 8(a0) # L :
addq a0, 8, a0 # E :
cmpbge zero, t0, t1 # E :
beq t1, $loop # U :
$found: cttz t1, t2 # U0 :
addq a0, t2, a0 # E :
jsr t9, __stxncpy # L0 : Now do the append.
/* Worry about the null termination. */
cttz t10, t2 # U0: byte offset of end-of-count.
bic a0, 7, a0 # E : word align the last write address.
zapnot t0, t8, t1 # U : was last byte a null?
nop # E :
bne t1, 0f # U :
nop # E :
nop # E :
ret # L0 :
0: addq t2, a0, a0 # E : address of end-of-count
stb zero, 1(a0) # L :
nop # E :
ret # L0 :
$zerocount:
nop # E :
nop # E :
nop # E :
ret # L0 :
END(strncat)

View File

@ -0,0 +1,116 @@
/* Copyright (C) 2000, 2003 Free Software Foundation, Inc.
EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Return the address of the last occurrence of a given character
within a null-terminated string, or null if it is not found. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(strrchr)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
and a1, 0xff, t2 # E : 00000000000000ch
insbl a1, 1, t4 # U : 000000000000ch00
insbl a1, 2, t5 # U : 0000000000ch0000
ldq_u t0, 0(a0) # L : load first quadword Latency=3
mov zero, t6 # E : t6 is last match aligned addr
or t2, t4, a1 # E : 000000000000chch
sll t5, 8, t3 # U : 00000000ch000000
mov zero, t8 # E : t8 is last match byte compare mask
andnot a0, 7, v0 # E : align source addr
or t5, t3, t3 # E : 00000000chch0000
sll a1, 32, t2 # U : 0000chch00000000
sll a1, 48, t4 # U : chch000000000000
or t4, a1, a1 # E : chch00000000chch
or t2, t3, t2 # E : 0000chchchch0000
or a1, t2, a1 # E : chchchchchchchch
lda t5, -1 # E : build garbage mask
cmpbge zero, t0, t1 # E : bits set iff byte == zero
mskqh t5, a0, t4 # E : Complete garbage mask
xor t0, a1, t2 # E : make bytes == c zero
cmpbge zero, t4, t4 # E : bits set iff byte is garbage
cmpbge zero, t2, t3 # E : bits set iff byte == c
andnot t1, t4, t1 # E : clear garbage from null test
andnot t3, t4, t3 # E : clear garbage from char test
bne t1, $eos # U : did we already hit the terminator?
/* Character search main loop */
$loop:
ldq t0, 8(v0) # L : load next quadword
cmovne t3, v0, t6 # E : save previous comparisons match
nop # : Latency=2, extra map slot (keep nop with cmov)
nop
cmovne t3, t3, t8 # E : Latency=2, extra map slot
nop # : keep with cmovne
addq v0, 8, v0 # E :
xor t0, a1, t2 # E :
cmpbge zero, t0, t1 # E : bits set iff byte == zero
cmpbge zero, t2, t3 # E : bits set iff byte == c
beq t1, $loop # U : if we havnt seen a null, loop
nop
/* Mask out character matches after terminator */
$eos:
negq t1, t4 # E : isolate first null byte match
and t1, t4, t4 # E :
subq t4, 1, t5 # E : build a mask of the bytes upto...
or t4, t5, t4 # E : ... and including the null
and t3, t4, t3 # E : mask out char matches after null
cmovne t3, t3, t8 # E : save it, if match found Latency=2, extra map slot
nop # : Keep with cmovne
nop
cmovne t3, v0, t6 # E :
nop # : Keep with cmovne
/* Locate the address of the last matched character */
ctlz t8, t2 # U0 : Latency=3 (0x40 for t8=0)
nop
cmoveq t8, 0x3f, t2 # E : Compensate for case when no match is seen
nop # E : hide the cmov latency (2) behind ctlz latency
lda t5, 0x3f($31) # E :
subq t5, t2, t5 # E : Normalize leading zero count
addq t6, t5, v0 # E : and add to quadword address
ret # L0 : Latency=3
nop
nop
END(strrchr)
weak_alias (strrchr, rindex)
libc_hidden_builtin_def (strrchr)

View File

@ -0,0 +1 @@
#include <sysdeps/x86_64/backtrace.c>

View File

@ -0,0 +1,86 @@
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* __bb_init_func is invoked at the beginning of each function, before
any registers have been saved. It is therefore safe to use any
caller-saved (call-used) registers (except for argument registers
a1-a5). */
#include <sysdep.h>
/*
* These offsets should match with "struct bb" declared in gcc/libgcc2.c.
*/
#define ZERO_WORD 0x00
#define NEXT 0x20
.set noat
.set noreorder
ENTRY(__bb_init_func)
.prologue 0
ldq t0, ZERO_WORD(a0) /* t0 <- blocks->zero_word */
beq t0, init /* not initialized yet -> */
ret
END(__bb_init_func)
.ent init
init:
.frame sp, 0x38, ra, 0
subq sp, 0x38, sp
.prologue 0
stq pv, 0x30(sp)
br pv, 1f
1: ldgp gp, 0(pv)
ldiq t1, __bb_head
lda t3, _gmonparam
ldq t2, 0(t1)
ldl t3, 0(t3) /* t3 = _gmonparam.state */
lda t0, 1
stq t0, ZERO_WORD(a0) /* blocks->zero_word = 1 */
stq t2, NEXT(a0) /* blocks->next = __bb_head */
stq a0, 0(t1)
bne t2, $leave
beq t3, $leave /* t3 == GMON_PROF_ON? yes -> */
/* also need to initialize destructor: */
stq ra, 0x00(sp)
lda a0, __bb_exit_func
stq a1, 0x08(sp)
lda pv, atexit
stq a2, 0x10(sp)
stq a3, 0x18(sp)
stq a4, 0x20(sp)
stq a5, 0x28(sp)
jsr ra, (pv), atexit
ldq ra, 0x00(sp)
ldq a1, 0x08(sp)
ldq a2, 0x10(sp)
ldq a3, 0x18(sp)
ldq a4, 0x20(sp)
ldq a5, 0x28(sp)
$leave: ldq pv, 0x30(sp)
addq sp, 0x38, sp
ret
.end init

View File

@ -0,0 +1,368 @@
/* Copyright (C) 2003, 2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <stdint.h>
typedef int8_t atomic8_t;
typedef uint8_t uatomic8_t;
typedef int_fast8_t atomic_fast8_t;
typedef uint_fast8_t uatomic_fast8_t;
typedef int16_t atomic16_t;
typedef uint16_t uatomic16_t;
typedef int_fast16_t atomic_fast16_t;
typedef uint_fast16_t uatomic_fast16_t;
typedef int32_t atomic32_t;
typedef uint32_t uatomic32_t;
typedef int_fast32_t atomic_fast32_t;
typedef uint_fast32_t uatomic_fast32_t;
typedef int64_t atomic64_t;
typedef uint64_t uatomic64_t;
typedef int_fast64_t atomic_fast64_t;
typedef uint_fast64_t uatomic_fast64_t;
typedef intptr_t atomicptr_t;
typedef uintptr_t uatomicptr_t;
typedef intmax_t atomic_max_t;
typedef uintmax_t uatomic_max_t;
#ifdef UP
# define __MB /* nothing */
#else
# define __MB " mb\n"
#endif
/* Compare and exchange. For all of the "xxx" routines, we expect a
"__prev" and a "__cmp" variable to be provided by the enclosing scope,
in which values are returned. */
#define __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2) \
({ \
unsigned long __tmp, __snew, __addr64; \
__asm__ __volatile__ ( \
mb1 \
" andnot %[__addr8],7,%[__addr64]\n" \
" insbl %[__new],%[__addr8],%[__snew]\n" \
"1: ldq_l %[__tmp],0(%[__addr64])\n" \
" extbl %[__tmp],%[__addr8],%[__prev]\n" \
" cmpeq %[__prev],%[__old],%[__cmp]\n" \
" beq %[__cmp],2f\n" \
" mskbl %[__tmp],%[__addr8],%[__tmp]\n" \
" or %[__snew],%[__tmp],%[__tmp]\n" \
" stq_c %[__tmp],0(%[__addr64])\n" \
" beq %[__tmp],1b\n" \
mb2 \
"2:" \
: [__prev] "=&r" (__prev), \
[__snew] "=&r" (__snew), \
[__tmp] "=&r" (__tmp), \
[__cmp] "=&r" (__cmp), \
[__addr64] "=&r" (__addr64) \
: [__addr8] "r" (mem), \
[__old] "Ir" ((uint64_t)(uint8_t)(uint64_t)(old)), \
[__new] "r" (new) \
: "memory"); \
})
#define __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2) \
({ \
unsigned long __tmp, __snew, __addr64; \
__asm__ __volatile__ ( \
mb1 \
" andnot %[__addr16],7,%[__addr64]\n" \
" inswl %[__new],%[__addr16],%[__snew]\n" \
"1: ldq_l %[__tmp],0(%[__addr64])\n" \
" extwl %[__tmp],%[__addr16],%[__prev]\n" \
" cmpeq %[__prev],%[__old],%[__cmp]\n" \
" beq %[__cmp],2f\n" \
" mskwl %[__tmp],%[__addr16],%[__tmp]\n" \
" or %[__snew],%[__tmp],%[__tmp]\n" \
" stq_c %[__tmp],0(%[__addr64])\n" \
" beq %[__tmp],1b\n" \
mb2 \
"2:" \
: [__prev] "=&r" (__prev), \
[__snew] "=&r" (__snew), \
[__tmp] "=&r" (__tmp), \
[__cmp] "=&r" (__cmp), \
[__addr64] "=&r" (__addr64) \
: [__addr16] "r" (mem), \
[__old] "Ir" ((uint64_t)(uint16_t)(uint64_t)(old)), \
[__new] "r" (new) \
: "memory"); \
})
#define __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2) \
({ \
__asm__ __volatile__ ( \
mb1 \
"1: ldl_l %[__prev],%[__mem]\n" \
" cmpeq %[__prev],%[__old],%[__cmp]\n" \
" beq %[__cmp],2f\n" \
" mov %[__new],%[__cmp]\n" \
" stl_c %[__cmp],%[__mem]\n" \
" beq %[__cmp],1b\n" \
mb2 \
"2:" \
: [__prev] "=&r" (__prev), \
[__cmp] "=&r" (__cmp) \
: [__mem] "m" (*(mem)), \
[__old] "Ir" ((uint64_t)(atomic32_t)(uint64_t)(old)), \
[__new] "Ir" (new) \
: "memory"); \
})
#define __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2) \
({ \
__asm__ __volatile__ ( \
mb1 \
"1: ldq_l %[__prev],%[__mem]\n" \
" cmpeq %[__prev],%[__old],%[__cmp]\n" \
" beq %[__cmp],2f\n" \
" mov %[__new],%[__cmp]\n" \
" stq_c %[__cmp],%[__mem]\n" \
" beq %[__cmp],1b\n" \
mb2 \
"2:" \
: [__prev] "=&r" (__prev), \
[__cmp] "=&r" (__cmp) \
: [__mem] "m" (*(mem)), \
[__old] "Ir" ((uint64_t)(old)), \
[__new] "Ir" (new) \
: "memory"); \
})
/* For all "bool" routines, we return FALSE if exchange succesful. */
#define __arch_compare_and_exchange_bool_8_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \
!__cmp; })
#define __arch_compare_and_exchange_bool_16_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \
!__cmp; })
#define __arch_compare_and_exchange_bool_32_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \
!__cmp; })
#define __arch_compare_and_exchange_bool_64_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \
!__cmp; })
/* For all "val" routines, return the old value whether exchange
successful or not. */
#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \
(typeof (*mem))__prev; })
#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \
(typeof (*mem))__prev; })
#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \
(typeof (*mem))__prev; })
#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \
(typeof (*mem))__prev; })
/* Compare and exchange with "acquire" semantics, ie barrier after. */
#define atomic_compare_and_exchange_bool_acq(mem, new, old) \
__atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
mem, new, old, "", __MB)
#define atomic_compare_and_exchange_val_acq(mem, new, old) \
__atomic_val_bysize (__arch_compare_and_exchange_val, int, \
mem, new, old, "", __MB)
/* Compare and exchange with "release" semantics, ie barrier before. */
#define atomic_compare_and_exchange_bool_rel(mem, new, old) \
__atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
mem, new, old, __MB, "")
#define atomic_compare_and_exchange_val_rel(mem, new, old) \
__atomic_val_bysize (__arch_compare_and_exchange_val, int, \
mem, new, old, __MB, "")
/* Atomically store value and return the previous value. */
#define __arch_exchange_8_int(mem, value, mb1, mb2) \
({ \
unsigned long __tmp, __addr64, __sval; __typeof(*mem) __ret; \
__asm__ __volatile__ ( \
mb1 \
" andnot %[__addr8],7,%[__addr64]\n" \
" insbl %[__value],%[__addr8],%[__sval]\n" \
"1: ldq_l %[__tmp],0(%[__addr64])\n" \
" extbl %[__tmp],%[__addr8],%[__ret]\n" \
" mskbl %[__tmp],%[__addr8],%[__tmp]\n" \
" or %[__sval],%[__tmp],%[__tmp]\n" \
" stq_c %[__tmp],0(%[__addr64])\n" \
" beq %[__tmp],1b\n" \
mb2 \
: [__ret] "=&r" (__ret), \
[__sval] "=&r" (__sval), \
[__tmp] "=&r" (__tmp), \
[__addr64] "=&r" (__addr64) \
: [__addr8] "r" (mem), \
[__value] "r" (value) \
: "memory"); \
__ret; })
#define __arch_exchange_16_int(mem, value, mb1, mb2) \
({ \
unsigned long __tmp, __addr64, __sval; __typeof(*mem) __ret; \
__asm__ __volatile__ ( \
mb1 \
" andnot %[__addr16],7,%[__addr64]\n" \
" inswl %[__value],%[__addr16],%[__sval]\n" \
"1: ldq_l %[__tmp],0(%[__addr64])\n" \
" extwl %[__tmp],%[__addr16],%[__ret]\n" \
" mskwl %[__tmp],%[__addr16],%[__tmp]\n" \
" or %[__sval],%[__tmp],%[__tmp]\n" \
" stq_c %[__tmp],0(%[__addr64])\n" \
" beq %[__tmp],1b\n" \
mb2 \
: [__ret] "=&r" (__ret), \
[__sval] "=&r" (__sval), \
[__tmp] "=&r" (__tmp), \
[__addr64] "=&r" (__addr64) \
: [__addr16] "r" (mem), \
[__value] "r" (value) \
: "memory"); \
__ret; })
#define __arch_exchange_32_int(mem, value, mb1, mb2) \
({ \
signed int __tmp; __typeof(*mem) __ret; \
__asm__ __volatile__ ( \
mb1 \
"1: ldl_l %[__ret],%[__mem]\n" \
" mov %[__val],%[__tmp]\n" \
" stl_c %[__tmp],%[__mem]\n" \
" beq %[__tmp],1b\n" \
mb2 \
: [__ret] "=&r" (__ret), \
[__tmp] "=&r" (__tmp) \
: [__mem] "m" (*(mem)), \
[__val] "Ir" (value) \
: "memory"); \
__ret; })
#define __arch_exchange_64_int(mem, value, mb1, mb2) \
({ \
unsigned long __tmp; __typeof(*mem) __ret; \
__asm__ __volatile__ ( \
mb1 \
"1: ldq_l %[__ret],%[__mem]\n" \
" mov %[__val],%[__tmp]\n" \
" stq_c %[__tmp],%[__mem]\n" \
" beq %[__tmp],1b\n" \
mb2 \
: [__ret] "=&r" (__ret), \
[__tmp] "=&r" (__tmp) \
: [__mem] "m" (*(mem)), \
[__val] "Ir" (value) \
: "memory"); \
__ret; })
#define atomic_exchange_acq(mem, value) \
__atomic_val_bysize (__arch_exchange, int, mem, value, "", __MB)
#define atomic_exchange_rel(mem, value) \
__atomic_val_bysize (__arch_exchange, int, mem, value, __MB, "")
/* Atomically add value and return the previous (unincremented) value. */
#define __arch_exchange_and_add_8_int(mem, value, mb1, mb2) \
({ __builtin_trap (); 0; })
#define __arch_exchange_and_add_16_int(mem, value, mb1, mb2) \
({ __builtin_trap (); 0; })
#define __arch_exchange_and_add_32_int(mem, value, mb1, mb2) \
({ \
signed int __tmp; __typeof(*mem) __ret; \
__asm__ __volatile__ ( \
mb1 \
"1: ldl_l %[__ret],%[__mem]\n" \
" addl %[__ret],%[__val],%[__tmp]\n" \
" stl_c %[__tmp],%[__mem]\n" \
" beq %[__tmp],1b\n" \
mb2 \
: [__ret] "=&r" (__ret), \
[__tmp] "=&r" (__tmp) \
: [__mem] "m" (*(mem)), \
[__val] "Ir" ((signed int)(value)) \
: "memory"); \
__ret; })
#define __arch_exchange_and_add_64_int(mem, value, mb1, mb2) \
({ \
unsigned long __tmp; __typeof(*mem) __ret; \
__asm__ __volatile__ ( \
mb1 \
"1: ldq_l %[__ret],%[__mem]\n" \
" addq %[__ret],%[__val],%[__tmp]\n" \
" stq_c %[__tmp],%[__mem]\n" \
" beq %[__tmp],1b\n" \
mb2 \
: [__ret] "=&r" (__ret), \
[__tmp] "=&r" (__tmp) \
: [__mem] "m" (*(mem)), \
[__val] "Ir" ((unsigned long)(value)) \
: "memory"); \
__ret; })
/* ??? Barrier semantics for atomic_exchange_and_add appear to be
undefined. Use full barrier for now, as that's safe. */
#define atomic_exchange_and_add(mem, value) \
__atomic_val_bysize (__arch_exchange_and_add, int, mem, value, __MB, __MB)
/* ??? Blah, I'm lazy. Implement these later. Can do better than the
compare-and-exchange loop provided by generic code.
#define atomic_decrement_if_positive(mem)
#define atomic_bit_test_set(mem, bit)
*/
#ifndef UP
# define atomic_full_barrier() __asm ("mb" : : : "memory");
# define atomic_read_barrier() __asm ("mb" : : : "memory");
# define atomic_write_barrier() __asm ("wmb" : : : "memory");
#endif

View File

@ -0,0 +1,7 @@
/* Alpha is little-endian. */
#ifndef _ENDIAN_H
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
#endif
#define __BYTE_ORDER __LITTLE_ENDIAN

View File

@ -0,0 +1,68 @@
/* Copyright (C) 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _LINK_H
# error "Never include <bits/link.h> directly; use <link.h> instead."
#endif
/* Registers for entry into PLT on Alpha. */
typedef struct La_alpha_regs
{
uint64_t lr_r26;
uint64_t lr_sp;
uint64_t lr_r16;
uint64_t lr_r17;
uint64_t lr_r18;
uint64_t lr_r19;
uint64_t lr_r20;
uint64_t lr_r21;
double lr_f16;
double lr_f17;
double lr_f18;
double lr_f19;
double lr_f20;
double lr_f21;
} La_alpha_regs;
/* Return values for calls from PLT on Alpha. */
typedef struct La_alpha_retval
{
uint64_t lrv_r0;
uint64_t lrv_r1;
double lrv_f0;
double lrv_f1;
} La_alpha_retval;
__BEGIN_DECLS
extern Elf64_Addr la_alpha_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx,
uintptr_t *__refcook,
uintptr_t *__defcook,
La_alpha_regs *__regs,
unsigned int *__flags,
const char *__symname,
long int *__framesizep);
extern unsigned int la_alpha_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx,
uintptr_t *__refcook,
uintptr_t *__defcook,
const La_alpha_regs *__inregs,
La_alpha_retval *__outregs,
const char *symname);
__END_DECLS

View File

@ -0,0 +1,60 @@
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#if !defined _MATH_H && !defined _COMPLEX_H
# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
#endif
/* FIXME! This file describes properties of the compiler, not the machine;
it should not be part of libc! */
#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
# define _MATH_H_MATHDEF 1
/* Alpha has "float" and "double" operations. */
typedef float float_t; /* float expressions are evaluated as float. */
typedef double double_t; /* double expressions are evaluated as double. */
/* The values returned by `ilogb' for 0 and NaN respectively. */
# define FP_ILOGB0 (-2147483647)
# define FP_ILOGBNAN (2147483647)
#endif /* ISO C99 && MATH_H */
#if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF
# define _COMPLEX_H_MATHDEF 1
# if defined(__GNUC__) && !__GNUC_PREREQ(3,4)
/* Due to an ABI change, we need to remap the complex float symbols. */
# define _Mdouble_ float
# define __MATHCALL(function, args) \
__MATHDECL (_Complex float, function, args)
# define __MATHDECL(type, function, args) \
__MATHDECL_1(type, function##f, args, __c1_##function##f); \
__MATHDECL_1(type, __##function##f, args, __c1_##function##f)
# define __MATHDECL_1(type, function, args, alias) \
extern type function args __asm__(#alias) __THROW
# include <bits/cmathcalls.h>
# undef _Mdouble_
# undef __MATHCALL
# undef __MATHDECL
# undef __MATHDECL_1
# endif /* GNUC before 3.4 */
#endif /* COMPLEX_H */

View File

@ -0,0 +1,61 @@
/* Define the machine-dependent type `jmp_buf'. Alpha version.
Copyright (C) 1992,1997,2003,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _BITS_SETJMP_H
#define _BITS_SETJMP_H 1
#if !defined _SETJMP_H && !defined _PTHREAD_H
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
#endif
/* The previous bits/setjmp.h had __jmp_buf defined as a structure.
We use an array of 'long int' instead, to make writing the
assembler easier. Naturally, user code should not depend on
either representation. */
/*
* Integer registers:
* $0 is the return value (va);
* $1-$8, $22-$25, $28 are call-used (t0-t7, t8-t11, at);
* $9-$14 we save here (s0-s5);
* $15 is the FP and we save it here (fp or s6);
* $16-$21 are input arguments (call-used) (a0-a5);
* $26 is the return PC and we save it here (ra);
* $27 is the procedure value (i.e., the address of __setjmp) (pv or t12);
* $29 is the global pointer, which the caller will reconstruct
* from the return address restored in $26 (gp);
* $30 is the stack pointer and we save it here (sp);
* $31 is always zero (zero).
*
* Floating-point registers:
* $f0 is the floating return value;
* $f1, $f10-$f15, $f22-$f30 are call-used;
* $f2-$f9 we save here;
* $f16-$21 are input args (call-used);
* $f31 is always zero.
*
* Note that even on Alpha hardware that does not have an FPU (there
* isn't such a thing currently) it is required to implement the FP
* registers.
*/
#ifndef __ASSEMBLY__
typedef long int __jmp_buf[17];
#endif
#endif /* bits/setjmp.h */

View File

@ -0,0 +1 @@
/* _setjmp is in setjmp.S */

View File

@ -0,0 +1 @@
/* setjmp is in setjmp.S */

110
ports/sysdeps/alpha/bzero.S Normal file
View File

@ -0,0 +1,110 @@
/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu)
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Fill a block of memory with zeros. Optimized for the Alpha architecture:
- memory accessed as aligned quadwords only
- destination memory not read unless needed for good cache behaviour
- basic blocks arranged to optimize branch prediction for full-quadword
aligned memory blocks.
- partial head and tail quadwords constructed with byte-mask instructions
This is generally scheduled for the EV5 (got to look out for my own
interests :-), but with EV4 needs in mind. There *should* be no more
stalls for the EV4 than there are for the EV5.
*/
#include <sysdep.h>
.set noat
.set noreorder
.text
.type __bzero, @function
.globl __bzero
.usepv __bzero, USEPV_PROF
cfi_startproc
/* On entry to this basic block:
t3 == loop counter
t4 == bytes in partial final word
a0 == possibly misaligned destination pointer */
.align 3
bzero_loop:
beq t3, $tail #
blbc t3, 0f # skip single store if count even
stq_u zero, 0(a0) # e0 : store one word
subq t3, 1, t3 # .. e1 :
addq a0, 8, a0 # e0 :
beq t3, $tail # .. e1 :
0: stq_u zero, 0(a0) # e0 : store two words
subq t3, 2, t3 # .. e1 :
stq_u zero, 8(a0) # e0 :
addq a0, 16, a0 # .. e1 :
bne t3, 0b # e1 :
$tail: bne t4, 1f # is there a tail to do?
ret # no
1: ldq_u t0, 0(a0) # yes, load original data
mskqh t0, t4, t0 #
stq_u t0, 0(a0) #
ret #
__bzero:
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
#endif
mov a0, v0 # e0 : move return value in place
beq a1, $done # .. e1 : early exit for zero-length store
and a0, 7, t1 # e0 :
addq a1, t1, a1 # e1 : add dest misalignment to count
srl a1, 3, t3 # e0 : loop = count >> 3
and a1, 7, t4 # .. e1 : find number of bytes in tail
unop # :
beq t1, bzero_loop # e1 : aligned head, jump right in
ldq_u t0, 0(a0) # e0 : load original data to mask into
cmpult a1, 8, t2 # .. e1 : is this a sub-word set?
bne t2, $oneq # e1 :
mskql t0, a0, t0 # e0 : we span words. finish this partial
subq t3, 1, t3 # e0 :
addq a0, 8, a0 # .. e1 :
stq_u t0, -8(a0) # e0 :
br bzero_loop # .. e1 :
.align 3
$oneq:
mskql t0, a0, t2 # e0 :
mskqh t0, a1, t3 # e0 :
or t2, t3, t0 # e1 :
stq_u t0, 0(a0) # e0 :
$done: ret
cfi_endproc
weak_alias (__bzero, bzero)

176
ports/sysdeps/alpha/configure vendored Normal file
View File

@ -0,0 +1,176 @@
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/alpha.
# Check for support of thread-local storage handling in assembler and linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Alpha TLS support" >&5
$as_echo_n "checking for Alpha TLS support... " >&6; }
if ${libc_cv_alpha_tls+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .quad 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 8
.text
baz:
.set nomacro
ldq $27, __tls_get_addr($29) !literal!1
ldq $16, a($29) !tlsgd!1
jsr $26, ($27), __tls_get_addr !lituse_tlsgd!1
jsr $26, ($27), __tls_get_addr !lituse_tlsldm!2
ldq $27, __tls_get_addr($29) !literal!2
ldq $16, b($29) !tlsldm!2
ldq $16, c($29) !tlsgd
ldq $16, d($29) !tlsldm
ldq $16, e($29) !tlsgd!3
ldq $16, f($29) !tlsldm!4
ldq $16, g($29) !gotdtprel
ldah $16, h($31) !dtprelhi
lda $16, i($16) !dtprello
lda $16, j($31) !dtprel
ldq $16, k($29) !gottprel
ldah $16, l($31) !tprelhi
lda $16, m($16) !tprello
lda $16, n($31) !tprel
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_alpha_tls=yes
else
libc_cv_alpha_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_alpha_tls" >&5
$as_echo "$libc_cv_alpha_tls" >&6; }
if test $libc_cv_alpha_tls = no; then
as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GP relative module local relocs" >&5
$as_echo_n "checking for GP relative module local relocs... " >&6; }
if ${libc_cv_alpha_hidden_gprel+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.c <<\EOF
static volatile int bar;
int baz __attribute__((visibility("hidden")));
int f(void) { return bar + baz; }
EOF
libc_cv_alpha_hidden_gprel=no
if { ac_try='${CC-cc} -S $CFLAGS -O2 -fpic conftest.c 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
if grep -q 'bar.*!gprel' conftest.s \
&& grep -q 'baz.*!gprel' conftest.s \
&& ! grep -q 'bar.*!literal' conftest.s \
&& ! grep -q 'baz.*!literal' conftest.s; then
libc_cv_alpha_hidden_gprel=yes
fi
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_alpha_hidden_gprel" >&5
$as_echo "$libc_cv_alpha_hidden_gprel" >&6; }
if test $libc_cv_alpha_hidden_gprel = yes; then
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
fi

View File

@ -0,0 +1,71 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/alpha.
# Check for support of thread-local storage handling in assembler and linker.
AC_CACHE_CHECK(for Alpha TLS support, libc_cv_alpha_tls, [dnl
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .quad 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 8
.text
baz:
.set nomacro
ldq $27, __tls_get_addr($29) !literal!1
ldq $16, a($29) !tlsgd!1
jsr $26, ($27), __tls_get_addr !lituse_tlsgd!1
jsr $26, ($27), __tls_get_addr !lituse_tlsldm!2
ldq $27, __tls_get_addr($29) !literal!2
ldq $16, b($29) !tlsldm!2
ldq $16, c($29) !tlsgd
ldq $16, d($29) !tlsldm
ldq $16, e($29) !tlsgd!3
ldq $16, f($29) !tlsldm!4
ldq $16, g($29) !gotdtprel
ldah $16, h($31) !dtprelhi
lda $16, i($16) !dtprello
lda $16, j($31) !dtprel
ldq $16, k($29) !gottprel
ldah $16, l($31) !tprelhi
lda $16, m($16) !tprello
lda $16, n($31) !tprel
EOF
dnl
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
libc_cv_alpha_tls=yes
else
libc_cv_alpha_tls=no
fi
rm -f conftest*])
if test $libc_cv_alpha_tls = no; then
AC_MSG_ERROR([the assembler must support TLS])
fi
AC_CACHE_CHECK(for GP relative module local relocs, libc_cv_alpha_hidden_gprel, [dnl
cat > conftest.c <<\EOF
static volatile int bar;
int baz __attribute__((visibility("hidden")));
int f(void) { return bar + baz; }
EOF
dnl
libc_cv_alpha_hidden_gprel=no
if AC_TRY_COMMAND(${CC-cc} -S $CFLAGS -O2 -fpic conftest.c 1>&AS_MESSAGE_LOG_FD); then
if grep -q 'bar.*!gprel' conftest.s \
&& grep -q 'baz.*!gprel' conftest.s \
&& ! grep -q 'bar.*!literal' conftest.s \
&& ! grep -q 'baz.*!literal' conftest.s; then
libc_cv_alpha_hidden_gprel=yes
fi
fi
rm -f conftest*])
if test $libc_cv_alpha_hidden_gprel = yes; then
AC_DEFINE(PI_STATIC_AND_HIDDEN)
fi

View File

@ -0,0 +1,99 @@
/* Special .init and .fini section support for Alpha.
Copyright (C) 2001, 2002, 2003, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file with other
programs, and to distribute those programs without any restriction
coming from the use of this file. (The GNU Lesser General Public
License restrictions do apply in other respects; for example, they
cover modification of the file, and distribution when not linked
into another program.)
Note that people who make modified versions of this file are not
obligated to grant this special exception for their modified
versions; it is their choice whether to do so. The GNU Lesser
General Public License gives permission to release a modified
version without this exception; this exception also makes it
possible to release a modified version which carries forward this
exception.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* crti.S puts a function prologue at the beginning of the .init and
.fini sections and defines global symbols for those addresses, so
they can be called as functions. The symbols _init and _fini are
magic and cause the linker to emit DT_INIT and DT_FINI.
This differs from what would be generated for ordinary code in that
we save and restore the GP within the function. In order for linker
relaxation to work, the value in the GP register on exit from a function
must be valid for the function entry point. Normally, a function is
contained within one object file and this is not an issue, provided
that the function reloads the gp after making any function calls.
However, _init and _fini are constructed from pieces of many object
files, all of which may have different GP values. So we must reload
the GP value from crti.o in crtn.o. */
#include <libc-symbols.h>
#include <sysdep.h>
#ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__
#endif
#ifndef PREINIT_FUNCTION_WEAK
# define PREINIT_FUNCTION_WEAK 1
#endif
#if PREINIT_FUNCTION_WEAK
weak_extern (PREINIT_FUNCTION)
#else
.hidden PREINIT_FUNCTION
#endif
.section .init, "ax", @progbits
.globl _init
.type _init, @function
.usepv _init, std
_init:
ldgp $29, 0($27)
subq $30, 16, $30
#if PREINIT_FUNCTION_WEAK
lda $27, PREINIT_FUNCTION
#endif
stq $26, 0($30)
stq $29, 8($30)
#if PREINIT_FUNCTION_WEAK
beq $27, 1f
jsr $26, ($27), PREINIT_FUNCTION
ldq $29, 8($30)
1:
#else
bsr $26, PREINIT_FUNCTION !samegp
#endif
.p2align 3
.section .fini, "ax", @progbits
.globl _fini
.type _fini,@function
.usepv _fini,std
_fini:
ldgp $29, 0($27)
subq $30, 16, $30
stq $26, 0($30)
stq $29, 8($30)
.p2align 3

View File

@ -0,0 +1,49 @@
/* Special .init and .fini section support for Alpha.
Copyright (C) 2001, 2002, 2003, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file with other
programs, and to distribute those programs without any restriction
coming from the use of this file. (The GNU Lesser General Public
License restrictions do apply in other respects; for example, they
cover modification of the file, and distribution when not linked
into another program.)
Note that people who make modified versions of this file are not
obligated to grant this special exception for their modified
versions; it is their choice whether to do so. The GNU Lesser
General Public License gives permission to release a modified
version without this exception; this exception also makes it
possible to release a modified version which carries forward this
exception.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* crtn.S puts function epilogues in the .init and .fini sections
corresponding to the prologues in crti.S. */
.section .init, "ax", @progbits
ldq $26, 0($30)
ldq $29, 8($30)
addq $30, 16, $30
ret
.section .fini, "ax", @progbits
ldq $26, 0($30)
ldq $29, 8($30)
addq $30, 16, $30
ret

87
ports/sysdeps/alpha/div.S Normal file
View File

@ -0,0 +1,87 @@
/* Copyright (C) 1996, 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include "div_libc.h"
#undef FRAME
#ifdef __alpha_fix__
#define FRAME 0
#else
#define FRAME 16
#endif
.set noat
.align 4
.globl div
.ent div
div:
.frame sp, FRAME, ra
#if FRAME > 0
lda sp, -FRAME(sp)
#endif
#ifdef PROF
.set macro
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.set nomacro
.prologue 1
#else
.prologue 0
#endif
beq $18, $divbyzero
excb
mf_fpcr $f10
_ITOFT2 $17, $f0, 0, $18, $f1, 8
cvtqt $f0, $f0
cvtqt $f1, $f1
divt/c $f0, $f1, $f0
cvttq/c $f0, $f0
excb
mt_fpcr $f10
_FTOIT $f0, $0, 0
mull $0, $18, $1
subl $17, $1, $1
stl $0, 0(a0)
stl $1, 4(a0)
mov a0, v0
#if FRAME > 0
lda sp, FRAME(sp)
#endif
ret
$divbyzero:
mov a0, v0
lda a0, GEN_INTDIV
call_pal PAL_gentrap
stl zero, 0(v0)
stl zero, 4(v0)
#if FRAME > 0
lda sp, FRAME(sp)
#endif
ret
.end div

View File

@ -0,0 +1,163 @@
/* Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Common bits for implementing software divide. */
#include <sysdep.h>
#ifdef __linux__
# include <asm/gentrap.h>
# include <asm/pal.h>
#else
# include <machine/pal.h>
#endif
/* These are not normal C functions. Argument registers are t10 and t11;
the result goes in t12; the return address is in t9. Only t12 and AT
may be clobbered. */
#define X t10
#define Y t11
#define RV t12
#define RA t9
/* The secureplt format does not allow the division routines to be called
via plt; there aren't enough registers free to be clobbered. Avoid
setting the symbol type to STT_FUNC, so that the linker won't be tempted
to create a plt entry. */
#define funcnoplt notype
/* None of these functions should use implicit anything. */
.set nomacro
.set noat
/* Code fragment to invoke _mcount for profiling. This should be invoked
directly after allocation of the stack frame. */
.macro CALL_MCOUNT
#ifdef PROF
stq ra, 0(sp)
stq pv, 8(sp)
stq gp, 16(sp)
cfi_rel_offset (ra, 0)
cfi_rel_offset (pv, 8)
cfi_rel_offset (gp, 16)
br AT, 1f
.set macro
1: ldgp gp, 0(AT)
mov RA, ra
lda AT, _mcount
jsr AT, (AT), _mcount
.set nomacro
ldq ra, 0(sp)
ldq pv, 8(sp)
ldq gp, 16(sp)
cfi_restore (ra)
cfi_restore (pv)
cfi_restore (gp)
/* Realign subsequent code with what we'd have without this
macro at all. This means aligned with one arithmetic insn
used within the bundle. */
.align 4
nop
#endif
.endm
/* In order to make the below work, all top-level divide routines must
use the same frame size. */
#define FRAME 64
/* Code fragment to generate an integer divide-by-zero fault. When
building libc.so, we arrange for there to be one copy of this code
placed late in the dso, such that all branches are forward. When
building libc.a, we use multiple copies to avoid having an out of
range branch. Users should jump to DIVBYZERO. */
.macro DO_DIVBYZERO
#ifdef PIC
#define DIVBYZERO __divbyzero
.section .gnu.linkonce.t.divbyzero, "ax", @progbits
.globl __divbyzero
.type __divbyzero, @function
.usepv __divbyzero, no
.hidden __divbyzero
#else
#define DIVBYZERO $divbyzero
#endif
.align 4
DIVBYZERO:
cfi_startproc
cfi_return_column (RA)
cfi_def_cfa_offset (FRAME)
mov a0, RV
unop
lda a0, GEN_INTDIV
call_pal PAL_gentrap
mov RV, a0
clr RV
lda sp, FRAME(sp)
cfi_def_cfa_offset (0)
ret $31, (RA), 1
cfi_endproc
.size DIVBYZERO, .-DIVBYZERO
.endm
/* Like the ev6 instructions, but fall back to stack use on prior machines. */
.arch ev6
.macro _ITOFS gr, fr, slot
#ifdef __alpha_fix__
itofs \gr, \fr
#else
stl \gr, \slot(sp)
lds \fr, \slot(sp)
#endif
.endm
.macro _ITOFT gr, fr, slot
#ifdef __alpha_fix__
itoft \gr, \fr
#else
stq \gr, \slot(sp)
ldt \fr, \slot(sp)
#endif
.endm
.macro _FTOIT fr, gr, slot
#ifdef __alpha_fix__
ftoit \fr, \gr
#else
stt \fr, \slot(sp)
ldq \gr, \slot(sp)
#endif
.endm
/* Similarly, but move two registers. Schedules better for pre-ev6. */
.macro _ITOFT2 gr1, fr1, slot1, gr2, fr2, slot2
#ifdef __alpha_fix__
itoft \gr1, \fr1
itoft \gr2, \fr2
#else
stq \gr1, \slot1(sp)
stq \gr2, \slot2(sp)
ldt \fr1, \slot1(sp)
ldt \fr2, \slot2(sp)
#endif
.endm

View File

@ -0,0 +1,83 @@
/* Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include "div_libc.h"
/* 32-bit signed int divide. This is not a normal C function. Argument
registers are t10 and t11, the result goes in t12. Only t12 and AT may
be clobbered.
The FPU can handle all input values except zero. Whee!
The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE
for cvttq/c even without /sui being set. It will not, however, properly
raise the exception, so we don't have to worry about FPCR_INED being clear
and so dying by SIGFPE. */
#ifndef EXTEND
#define EXTEND(S,D) sextl S, D
#endif
.text
.align 4
.globl __divl
.type __divl, @funcnoplt
.usepv __divl, no
cfi_startproc
cfi_return_column (RA)
__divl:
lda sp, -FRAME(sp)
cfi_def_cfa_offset (FRAME)
CALL_MCOUNT
stt $f0, 0(sp)
excb
beq Y, DIVBYZERO
stt $f1, 8(sp)
stt $f2, 16(sp)
cfi_rel_offset ($f0, 0)
cfi_rel_offset ($f1, 8)
cfi_rel_offset ($f2, 16)
mf_fpcr $f2
EXTEND (X, RV)
EXTEND (Y, AT)
_ITOFT2 RV, $f0, 24, AT, $f1, 32
cvtqt $f0, $f0
cvtqt $f1, $f1
divt/c $f0, $f1, $f0
cvttq/c $f0, $f0
excb
mt_fpcr $f2
_FTOIT $f0, RV, 24
ldt $f0, 0(sp)
ldt $f1, 8(sp)
ldt $f2, 16(sp)
lda sp, FRAME(sp)
cfi_restore ($f0)
cfi_restore ($f1)
cfi_restore ($f2)
cfi_def_cfa_offset (0)
sextl RV, RV
ret $31, (RA), 1
cfi_endproc
.size __divl, .-__divl
DO_DIVBYZERO

View File

@ -0,0 +1,4 @@
#define UNSIGNED
#define EXTEND(S,D) zapnot S, 15, D
#define __divl __divlu
#include <divl.S>

273
ports/sysdeps/alpha/divq.S Normal file
View File

@ -0,0 +1,273 @@
/* Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include "div_libc.h"
/* 64-bit signed long divide. These are not normal C functions. Argument
registers are t10 and t11, the result goes in t12. Only t12 and AT may
be clobbered.
Theory of operation here is that we can use the FPU divider for virtually
all operands that we see: all dividend values between -2**53 and 2**53-1
can be computed directly. Note that divisor values need not be checked
against that range because the rounded fp value will be close enough such
that the quotient is < 1, which will properly be truncated to zero when we
convert back to integer.
When the dividend is outside the range for which we can compute exact
results, we use the fp quotent as an estimate from which we begin refining
an exact integral value. This reduces the number of iterations in the
shift-and-subtract loop significantly.
The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE
for cvttq/c even without /sui being set. It will not, however, properly
raise the exception, so we don't have to worry about FPCR_INED being clear
and so dying by SIGFPE. */
.text
.align 4
.globl __divq
.type __divq, @funcnoplt
.usepv __divq, no
cfi_startproc
cfi_return_column (RA)
__divq:
lda sp, -FRAME(sp)
cfi_def_cfa_offset (FRAME)
CALL_MCOUNT
/* Get the fp divide insn issued as quickly as possible. After
that's done, we have at least 22 cycles until its results are
ready -- all the time in the world to figure out how we're
going to use the results. */
stt $f0, 0(sp)
excb
beq Y, DIVBYZERO
stt $f1, 8(sp)
stt $f3, 48(sp)
cfi_rel_offset ($f0, 0)
cfi_rel_offset ($f1, 8)
cfi_rel_offset ($f3, 48)
mf_fpcr $f3
_ITOFT2 X, $f0, 16, Y, $f1, 24
cvtqt $f0, $f0
cvtqt $f1, $f1
divt/c $f0, $f1, $f0
/* Check to see if X fit in the double as an exact value. */
sll X, (64-53), AT
ldt $f1, 8(sp)
sra AT, (64-53), AT
cmpeq X, AT, AT
beq AT, $x_big
/* If we get here, we're expecting exact results from the division.
Do nothing else besides convert and clean up. */
cvttq/c $f0, $f0
excb
mt_fpcr $f3
_FTOIT $f0, RV, 16
ldt $f0, 0(sp)
ldt $f3, 48(sp)
cfi_restore ($f1)
cfi_remember_state
cfi_restore ($f0)
cfi_restore ($f3)
cfi_def_cfa_offset (0)
lda sp, FRAME(sp)
ret $31, (RA), 1
.align 4
cfi_restore_state
$x_big:
/* If we get here, X is large enough that we don't expect exact
results, and neither X nor Y got mis-translated for the fp
division. Our task is to take the fp result, figure out how
far it's off from the correct result and compute a fixup. */
stq t0, 16(sp)
stq t1, 24(sp)
stq t2, 32(sp)
stq t5, 40(sp)
cfi_rel_offset (t0, 16)
cfi_rel_offset (t1, 24)
cfi_rel_offset (t2, 32)
cfi_rel_offset (t5, 40)
#define Q RV /* quotient */
#define R t0 /* remainder */
#define SY t1 /* scaled Y */
#define S t2 /* scalar */
#define QY t3 /* Q*Y */
/* The fixup code below can only handle unsigned values. */
or X, Y, AT
mov $31, t5
blt AT, $fix_sign_in
$fix_sign_in_ret1:
cvttq/c $f0, $f0
_FTOIT $f0, Q, 8
.align 3
$fix_sign_in_ret2:
ldt $f0, 0(sp)
stq t3, 0(sp)
cfi_restore ($f0)
cfi_rel_offset (t3, 0)
mulq Q, Y, QY
excb
stq t4, 8(sp)
mt_fpcr $f3
cfi_rel_offset (t4, 8)
subq QY, X, R
mov Y, SY
mov 1, S
bgt R, $q_high
$q_high_ret:
subq X, QY, R
mov Y, SY
mov 1, S
bgt R, $q_low
$q_low_ret:
ldq t0, 16(sp)
ldq t1, 24(sp)
ldq t2, 32(sp)
bne t5, $fix_sign_out
$fix_sign_out_ret:
ldq t3, 0(sp)
ldq t4, 8(sp)
ldq t5, 40(sp)
ldt $f3, 48(sp)
lda sp, FRAME(sp)
cfi_remember_state
cfi_restore (t0)
cfi_restore (t1)
cfi_restore (t2)
cfi_restore (t3)
cfi_restore (t4)
cfi_restore (t5)
cfi_restore ($f3)
cfi_def_cfa_offset (0)
ret $31, (RA), 1
.align 4
cfi_restore_state
/* The quotient that we computed was too large. We need to reduce
it by S such that Y*S >= R. Obviously the closer we get to the
correct value the better, but overshooting high is ok, as we'll
fix that up later. */
0:
addq SY, SY, SY
addq S, S, S
$q_high:
cmpult SY, R, AT
bne AT, 0b
subq Q, S, Q
unop
subq QY, SY, QY
br $q_high_ret
.align 4
/* The quotient that we computed was too small. Divide Y by the
current remainder (R) and add that to the existing quotient (Q).
The expectation, of course, is that R is much smaller than X. */
/* Begin with a shift-up loop. Compute S such that Y*S >= R. We
already have a copy of Y in SY and the value 1 in S. */
0:
addq SY, SY, SY
addq S, S, S
$q_low:
cmpult SY, R, AT
bne AT, 0b
/* Shift-down and subtract loop. Each iteration compares our scaled
Y (SY) with the remainder (R); if SY <= R then X is divisible by
Y's scalar (S) so add it to the quotient (Q). */
2: addq Q, S, t3
srl S, 1, S
cmpule SY, R, AT
subq R, SY, t4
cmovne AT, t3, Q
cmovne AT, t4, R
srl SY, 1, SY
bne S, 2b
br $q_low_ret
.align 4
$fix_sign_in:
/* If we got here, then X|Y is negative. Need to adjust everything
such that we're doing unsigned division in the fixup loop. */
/* T5 records the changes we had to make:
bit 0: set if result should be negative.
bit 2: set if X was negated.
bit 3: set if Y was negated.
*/
xor X, Y, AT
cmplt AT, 0, t5
cmplt X, 0, AT
negq X, t0
s4addq AT, t5, t5
cmovne AT, t0, X
cmplt Y, 0, AT
negq Y, t0
s8addq AT, t5, t5
cmovne AT, t0, Y
unop
blbc t5, $fix_sign_in_ret1
cvttq/c $f0, $f0
_FTOIT $f0, Q, 8
.align 3
negq Q, Q
br $fix_sign_in_ret2
.align 4
$fix_sign_out:
/* Now we get to undo what we did above. */
/* ??? Is this really faster than just increasing the size of
the stack frame and storing X and Y in memory? */
and t5, 8, AT
negq Y, t4
cmovne AT, t4, Y
and t5, 4, AT
negq X, t4
cmovne AT, t4, X
negq RV, t4
cmovlbs t5, t4, RV
br $fix_sign_out_ret
cfi_endproc
.size __divq, .-__divq
DO_DIVBYZERO

256
ports/sysdeps/alpha/divqu.S Normal file
View File

@ -0,0 +1,256 @@
/* Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include "div_libc.h"
/* 64-bit unsigned long divide. These are not normal C functions. Argument
registers are t10 and t11, the result goes in t12. Only t12 and AT may be
clobbered.
Theory of operation here is that we can use the FPU divider for virtually
all operands that we see: all dividend values between -2**53 and 2**53-1
can be computed directly. Note that divisor values need not be checked
against that range because the rounded fp value will be close enough such
that the quotient is < 1, which will properly be truncated to zero when we
convert back to integer.
When the dividend is outside the range for which we can compute exact
results, we use the fp quotent as an estimate from which we begin refining
an exact integral value. This reduces the number of iterations in the
shift-and-subtract loop significantly.
The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE
for cvttq/c even without /sui being set. It will not, however, properly
raise the exception, so we don't have to worry about FPCR_INED being clear
and so dying by SIGFPE. */
.text
.align 4
.globl __divqu
.type __divqu, @funcnoplt
.usepv __divqu, no
cfi_startproc
cfi_return_column (RA)
__divqu:
lda sp, -FRAME(sp)
cfi_def_cfa_offset (FRAME)
CALL_MCOUNT
/* Get the fp divide insn issued as quickly as possible. After
that's done, we have at least 22 cycles until its results are
ready -- all the time in the world to figure out how we're
going to use the results. */
stt $f0, 0(sp)
excb
beq Y, DIVBYZERO
stt $f1, 8(sp)
stt $f3, 48(sp)
cfi_rel_offset ($f0, 0)
cfi_rel_offset ($f1, 8)
cfi_rel_offset ($f3, 48)
mf_fpcr $f3
_ITOFT2 X, $f0, 16, Y, $f1, 24
cvtqt $f0, $f0
cvtqt $f1, $f1
blt X, $x_is_neg
divt/c $f0, $f1, $f0
/* Check to see if Y was mis-converted as signed value. */
ldt $f1, 8(sp)
blt Y, $y_is_neg
/* Check to see if X fit in the double as an exact value. */
srl X, 53, AT
bne AT, $x_big
/* If we get here, we're expecting exact results from the division.
Do nothing else besides convert and clean up. */
cvttq/c $f0, $f0
excb
mt_fpcr $f3
_FTOIT $f0, RV, 16
ldt $f0, 0(sp)
ldt $f3, 48(sp)
cfi_remember_state
cfi_restore ($f0)
cfi_restore ($f1)
cfi_restore ($f3)
cfi_def_cfa_offset (0)
lda sp, FRAME(sp)
ret $31, (RA), 1
.align 4
cfi_restore_state
$x_is_neg:
/* If we get here, X is so big that bit 63 is set, which made the
conversion come out negative. Fix it up lest we not even get
a good estimate. */
ldah AT, 0x5f80 /* 2**64 as float. */
stt $f2, 24(sp)
cfi_rel_offset ($f2, 24)
_ITOFS AT, $f2, 16
.align 4
addt $f0, $f2, $f0
unop
divt/c $f0, $f1, $f0
unop
/* Ok, we've now the divide issued. Continue with other checks. */
ldt $f1, 8(sp)
unop
ldt $f2, 24(sp)
blt Y, $y_is_neg
cfi_restore ($f1)
cfi_restore ($f2)
cfi_remember_state /* for y_is_neg */
.align 4
$x_big:
/* If we get here, X is large enough that we don't expect exact
results, and neither X nor Y got mis-translated for the fp
division. Our task is to take the fp result, figure out how
far it's off from the correct result and compute a fixup. */
stq t0, 16(sp)
stq t1, 24(sp)
stq t2, 32(sp)
stq t3, 40(sp)
cfi_rel_offset (t0, 16)
cfi_rel_offset (t1, 24)
cfi_rel_offset (t2, 32)
cfi_rel_offset (t3, 40)
#define Q RV /* quotient */
#define R t0 /* remainder */
#define SY t1 /* scaled Y */
#define S t2 /* scalar */
#define QY t3 /* Q*Y */
cvttq/c $f0, $f0
_FTOIT $f0, Q, 8
mulq Q, Y, QY
.align 4
stq t4, 8(sp)
excb
ldt $f0, 0(sp)
mt_fpcr $f3
cfi_rel_offset (t4, 8)
cfi_restore ($f0)
subq QY, X, R
mov Y, SY
mov 1, S
bgt R, $q_high
$q_high_ret:
subq X, QY, R
mov Y, SY
mov 1, S
bgt R, $q_low
$q_low_ret:
ldq t4, 8(sp)
ldq t0, 16(sp)
ldq t1, 24(sp)
ldq t2, 32(sp)
ldq t3, 40(sp)
ldt $f3, 48(sp)
lda sp, FRAME(sp)
cfi_remember_state
cfi_restore (t0)
cfi_restore (t1)
cfi_restore (t2)
cfi_restore (t3)
cfi_restore (t4)
cfi_restore ($f3)
cfi_def_cfa_offset (0)
ret $31, (RA), 1
.align 4
cfi_restore_state
/* The quotient that we computed was too large. We need to reduce
it by S such that Y*S >= R. Obviously the closer we get to the
correct value the better, but overshooting high is ok, as we'll
fix that up later. */
0:
addq SY, SY, SY
addq S, S, S
$q_high:
cmpult SY, R, AT
bne AT, 0b
subq Q, S, Q
unop
subq QY, SY, QY
br $q_high_ret
.align 4
/* The quotient that we computed was too small. Divide Y by the
current remainder (R) and add that to the existing quotient (Q).
The expectation, of course, is that R is much smaller than X. */
/* Begin with a shift-up loop. Compute S such that Y*S >= R. We
already have a copy of Y in SY and the value 1 in S. */
0:
addq SY, SY, SY
addq S, S, S
$q_low:
cmpult SY, R, AT
bne AT, 0b
/* Shift-down and subtract loop. Each iteration compares our scaled
Y (SY) with the remainder (R); if SY <= R then X is divisible by
Y's scalar (S) so add it to the quotient (Q). */
2: addq Q, S, t3
srl S, 1, S
cmpule SY, R, AT
subq R, SY, t4
cmovne AT, t3, Q
cmovne AT, t4, R
srl SY, 1, SY
bne S, 2b
br $q_low_ret
.align 4
cfi_restore_state
$y_is_neg:
/* If we get here, Y is so big that bit 63 is set. The results
from the divide will be completely wrong. Fortunately, the
quotient must be either 0 or 1, so just compute it directly. */
cmpule Y, X, RV
excb
mt_fpcr $f3
ldt $f0, 0(sp)
ldt $f3, 48(sp)
lda sp, FRAME(sp)
cfi_restore ($f0)
cfi_restore ($f3)
cfi_def_cfa_offset (0)
ret $31, (RA), 1
cfi_endproc
.size __divqu, .-__divqu
DO_DIVBYZERO

View File

@ -0,0 +1,3 @@
/* Number of extra dynamic section entries for this architecture. By
default there are none. */
#define DT_THISPROCNUM DT_ALPHA_NUM

View File

@ -0,0 +1,528 @@
/* Machine-dependent ELF dynamic relocation inline functions. Alpha version.
Copyright (C) 1996-2005, 2006, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* This was written in the absence of an ABI -- don't expect
it to remain unchanged. */
#ifndef dl_machine_h
#define dl_machine_h 1
#define ELF_MACHINE_NAME "alpha"
#include <string.h>
/* Mask identifying addresses reserved for the user program,
where the dynamic linker should not map anything. */
#define ELF_MACHINE_USER_ADDRESS_MASK 0x120000000UL
/* Translate a processor specific dynamic tag to the index in l_info array. */
#define DT_ALPHA(x) (DT_ALPHA_##x - DT_LOPROC + DT_NUM)
/* Return nonzero iff ELF header is compatible with the running host. */
static inline int
elf_machine_matches_host (const Elf64_Ehdr *ehdr)
{
return ehdr->e_machine == EM_ALPHA;
}
/* Return the link-time address of _DYNAMIC. The multiple-got-capable
linker no longer allocates the first .got entry for this. But not to
worry, no special tricks are needed. */
static inline Elf64_Addr
elf_machine_dynamic (void)
{
#ifndef NO_AXP_MULTI_GOT_LD
return (Elf64_Addr) &_DYNAMIC;
#else
register Elf64_Addr *gp __asm__ ("$29");
return gp[-4096];
#endif
}
/* Return the run-time load address of the shared object. */
static inline Elf64_Addr
elf_machine_load_address (void)
{
/* This relies on the compiler using gp-relative addresses for static symbols. */
static void *dot = &dot;
return (void *)&dot - dot;
}
/* 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 *map, int lazy, int profile)
{
extern char _dl_runtime_resolve_new[] attribute_hidden;
extern char _dl_runtime_profile_new[] attribute_hidden;
extern char _dl_runtime_resolve_old[] attribute_hidden;
extern char _dl_runtime_profile_old[] attribute_hidden;
struct pltgot {
char *resolve;
struct link_map *link;
};
struct pltgot *pg;
long secureplt;
char *resolve;
if (map->l_info[DT_JMPREL] == 0 || !lazy)
return lazy;
/* Check to see if we're using the read-only plt form. */
secureplt = map->l_info[DT_ALPHA(PLTRO)] != 0;
/* If the binary uses the read-only secure plt format, PG points to
the .got.plt section, which is the right place for ld.so to place
its hooks. Otherwise, PG is currently pointing at the start of
the plt; the hooks go at offset 16. */
pg = (struct pltgot *) D_PTR (map, l_info[DT_PLTGOT]);
pg += !secureplt;
/* This function will be called to perform the relocation. They're
not declared as functions to convince the compiler to use gp
relative relocations for them. */
if (secureplt)
resolve = _dl_runtime_resolve_new;
else
resolve = _dl_runtime_resolve_old;
if (__builtin_expect (profile, 0))
{
if (secureplt)
resolve = _dl_runtime_profile_new;
else
resolve = _dl_runtime_profile_old;
if (GLRO(dl_profile) && _dl_name_match_p (GLRO(dl_profile), map))
{
/* This is the object we are looking for. Say that we really
want profiling and the timers are started. */
GL(dl_profile_map) = map;
}
}
pg->resolve = resolve;
pg->link = map;
return lazy;
}
/* 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 ("\
.section .text \n\
.set at \n\
.globl _start \n\
.ent _start \n\
_start: \n\
.frame $31,0,$31,0 \n\
br $gp, 0f \n\
0: ldgp $gp, 0($gp) \n\
.prologue 0 \n\
/* Pass pointer to argument block to _dl_start. */ \n\
mov $sp, $16 \n\
bsr $26, _dl_start !samegp \n\
.end _start \n\
/* FALLTHRU */ \n\
.globl _dl_start_user \n\
.ent _dl_start_user \n\
_dl_start_user: \n\
.frame $31,0,$31,0 \n\
.prologue 0 \n\
/* Save the user entry point address in s0. */ \n\
mov $0, $9 \n\
/* See if we were run as a command with the executable \n\
file name as an extra leading argument. */ \n\
ldah $1, _dl_skip_args($gp) !gprelhigh \n\
ldl $1, _dl_skip_args($1) !gprellow \n\
bne $1, $fixup_stack \n\
$fixup_stack_ret: \n\
/* The special initializer gets called with the stack \n\
just as the application's entry point will see it; \n\
it can switch stacks if it moves these contents \n\
over. */ \n\
" RTLD_START_SPECIAL_INIT " \n\
/* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\
initializers. */ \n\
ldah $16, _rtld_local($gp) !gprelhigh \n\
ldq $16, _rtld_local($16) !gprellow \n\
ldq $17, 0($sp) \n\
lda $18, 8($sp) \n\
s8addq $17, 8, $19 \n\
addq $19, $18, $19 \n\
bsr $26, _dl_init_internal !samegp \n\
/* Pass our finalizer function to the user in $0. */ \n\
ldah $0, _dl_fini($gp) !gprelhigh \n\
lda $0, _dl_fini($0) !gprellow \n\
/* Jump to the user's entry point. */ \n\
mov $9, $27 \n\
jmp ($9) \n\
$fixup_stack: \n\
/* Adjust the stack pointer to skip _dl_skip_args words.\n\
This involves copying everything down, since the \n\
stack pointer must always be 16-byte aligned. */ \n\
ldah $7, _dl_argv_internal($gp) !gprelhigh \n\
ldq $2, 0($sp) \n\
ldq $5, _dl_argv_internal($7) !gprellow \n\
subq $31, $1, $6 \n\
subq $2, $1, $2 \n\
s8addq $6, $5, $5 \n\
mov $sp, $4 \n\
s8addq $1, $sp, $3 \n\
stq $2, 0($sp) \n\
stq $5, _dl_argv_internal($7) !gprellow \n\
/* Copy down argv. */ \n\
0: ldq $5, 8($3) \n\
addq $4, 8, $4 \n\
addq $3, 8, $3 \n\
stq $5, 0($4) \n\
bne $5, 0b \n\
/* Copy down envp. */ \n\
1: ldq $5, 8($3) \n\
addq $4, 8, $4 \n\
addq $3, 8, $3 \n\
stq $5, 0($4) \n\
bne $5, 1b \n\
/* Copy down auxiliary table. */ \n\
2: ldq $5, 8($3) \n\
ldq $6, 16($3) \n\
addq $4, 16, $4 \n\
addq $3, 16, $3 \n\
stq $5, -8($4) \n\
stq $6, 0($4) \n\
bne $5, 2b \n\
br $fixup_stack_ret \n\
.end _dl_start_user \n\
.set noat \n\
.previous");
#ifndef RTLD_START_SPECIAL_INIT
#define RTLD_START_SPECIAL_INIT /* nothing */
#endif
/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry
or TLS variables, so undefined references should not be allowed
to define the value.
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve
to one of the main executable's symbols, as for a COPY reloc.
This is unused on Alpha. */
# define elf_machine_type_class(type) \
(((type) == R_ALPHA_JMP_SLOT \
|| (type) == R_ALPHA_DTPMOD64 \
|| (type) == R_ALPHA_DTPREL64 \
|| (type) == R_ALPHA_TPREL64) * ELF_RTYPE_CLASS_PLT)
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
#define ELF_MACHINE_JMP_SLOT R_ALPHA_JMP_SLOT
/* The alpha 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 ()
static inline void __attribute__ ((unused))
dl_platform_init (void)
{
if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */
GLRO(dl_platform) = NULL;
}
/* Fix up the instructions of a PLT entry to invoke the function
rather than the dynamic linker. */
static inline Elf64_Addr
elf_machine_fixup_plt (struct link_map *map, lookup_t t,
const Elf64_Rela *reloc,
Elf64_Addr *got_addr, Elf64_Addr value)
{
const Elf64_Rela *rela_plt;
Elf64_Word *plte;
long int edisp;
/* Store the value we are going to load. */
*got_addr = value;
/* If this binary uses the read-only secure plt format, we're done. */
if (map->l_info[DT_ALPHA(PLTRO)])
return value;
/* Otherwise we have to modify the plt entry in place to do the branch. */
/* Recover the PLT entry address by calculating reloc's index into the
.rela.plt, and finding that entry in the .plt. */
rela_plt = (const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL]);
plte = (Elf64_Word *) (D_PTR (map, l_info[DT_PLTGOT]) + 32);
plte += 3 * (reloc - rela_plt);
/* Find the displacement from the plt entry to the function. */
edisp = (long int) (value - (Elf64_Addr)&plte[3]) / 4;
if (edisp >= -0x100000 && edisp < 0x100000)
{
/* If we are in range, use br to perfect branch prediction and
elide the dependency on the address load. This case happens,
e.g., when a shared library call is resolved to the same library. */
int hi, lo;
hi = value - (Elf64_Addr)&plte[0];
lo = (short int) hi;
hi = (hi - lo) >> 16;
/* Emit "lda $27,lo($27)" */
plte[1] = 0x237b0000 | (lo & 0xffff);
/* Emit "br $31,function" */
plte[2] = 0xc3e00000 | (edisp & 0x1fffff);
/* Think about thread-safety -- the previous instructions must be
committed to memory before the first is overwritten. */
__asm__ __volatile__("wmb" : : : "memory");
/* Emit "ldah $27,hi($27)" */
plte[0] = 0x277b0000 | (hi & 0xffff);
}
else
{
/* Don't bother with the hint since we already know the hint is
wrong. Eliding it prevents the wrong page from getting pulled
into the cache. */
int hi, lo;
hi = (Elf64_Addr)got_addr - (Elf64_Addr)&plte[0];
lo = (short)hi;
hi = (hi - lo) >> 16;
/* Emit "ldq $27,lo($27)" */
plte[1] = 0xa77b0000 | (lo & 0xffff);
/* Emit "jmp $31,($27)" */
plte[2] = 0x6bfb0000;
/* Think about thread-safety -- the previous instructions must be
committed to memory before the first is overwritten. */
__asm__ __volatile__("wmb" : : : "memory");
/* Emit "ldah $27,hi($27)" */
plte[0] = 0x277b0000 | (hi & 0xffff);
}
/* At this point, if we've been doing runtime resolution, Icache is dirty.
This will be taken care of in _dl_runtime_resolve. If instead we are
doing this as part of non-lazy startup relocation, that bit of code
hasn't made it into Icache yet, so there's nothing to clean up. */
return 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 + reloc->r_addend;
}
/* Names of the architecture-specific auditing callback functions. */
#define ARCH_LA_PLTENTER alpha_gnu_pltenter
#define ARCH_LA_PLTEXIT alpha_gnu_pltexit
#endif /* !dl_machine_h */
#ifdef RESOLVE_MAP
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
MAP is the object containing the reloc. */
auto inline void
__attribute__ ((always_inline))
elf_machine_rela (struct link_map *map,
const Elf64_Rela *reloc,
const Elf64_Sym *sym,
const struct r_found_version *version,
void *const reloc_addr_arg,
int skip_ifunc)
{
Elf64_Addr *const reloc_addr = reloc_addr_arg;
unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info);
#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED
/* 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
/* We cannot use a switch here because we cannot locate the switch
jump table until we've self-relocated. */
#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0))
{
# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
/* Already done in dynamic linker. */
if (map != &GL(dl_rtld_map))
# endif
{
/* XXX Make some timings. Maybe it's preferable to test for
unaligned access and only do it the complex way if necessary. */
Elf64_Addr reloc_addr_val;
/* Load value without causing unaligned trap. */
memcpy (&reloc_addr_val, reloc_addr_arg, 8);
reloc_addr_val += map->l_addr;
/* Store value without causing unaligned trap. */
memcpy (reloc_addr_arg, &reloc_addr_val, 8);
}
}
else
#endif
if (__builtin_expect (r_type == R_ALPHA_NONE, 0))
return;
else
{
struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
Elf64_Addr sym_value;
Elf64_Addr sym_raw_value;
sym_raw_value = sym_value = reloc->r_addend;
if (sym_map)
{
sym_raw_value += sym->st_value;
sym_value = sym_raw_value + sym_map->l_addr;
}
if (r_type == R_ALPHA_GLOB_DAT)
*reloc_addr = sym_value;
#ifdef RESOLVE_CONFLICT_FIND_MAP
/* In .gnu.conflict section, R_ALPHA_JMP_SLOT relocations have
R_ALPHA_JMP_SLOT in lower 8 bits and the remaining 24 bits
are .rela.plt index. */
else if ((r_type & 0xff) == R_ALPHA_JMP_SLOT)
{
/* elf_machine_fixup_plt needs the map reloc_addr points into,
while in _dl_resolve_conflicts map is _dl_loaded. */
RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);
reloc = ((const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL]))
+ (r_type >> 8);
elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value);
}
#else
else if (r_type == R_ALPHA_JMP_SLOT)
elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value);
#endif
#ifndef RTLD_BOOTSTRAP
else if (r_type == R_ALPHA_REFQUAD)
{
/* Store value without causing unaligned trap. */
memcpy (reloc_addr_arg, &sym_value, 8);
}
#endif
else if (r_type == R_ALPHA_DTPMOD64)
{
# ifdef RTLD_BOOTSTRAP
/* During startup the dynamic linker is always index 1. */
*reloc_addr = 1;
# else
/* Get the information from the link map returned by the
resolv function. */
if (sym_map != NULL)
*reloc_addr = sym_map->l_tls_modid;
# endif
}
else if (r_type == R_ALPHA_DTPREL64)
{
# ifndef RTLD_BOOTSTRAP
/* During relocation all TLS symbols are defined and used.
Therefore the offset is already correct. */
*reloc_addr = sym_raw_value;
# endif
}
else if (r_type == R_ALPHA_TPREL64)
{
# ifdef RTLD_BOOTSTRAP
*reloc_addr = sym_raw_value + map->l_tls_offset;
# else
if (sym_map)
{
CHECK_STATIC_TLS (map, sym_map);
*reloc_addr = sym_raw_value + sym_map->l_tls_offset;
}
# endif
}
else
_dl_reloc_bad_type (map, r_type, 0);
}
}
/* Let do-rel.h know that on Alpha if l_addr is 0, all RELATIVE relocs
can be skipped. */
#define ELF_MACHINE_REL_RELATIVE 1
auto inline void
__attribute__ ((always_inline))
elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
void *const reloc_addr_arg)
{
/* XXX Make some timings. Maybe it's preferable to test for
unaligned access and only do it the complex way if necessary. */
Elf64_Addr reloc_addr_val;
/* Load value without causing unaligned trap. */
memcpy (&reloc_addr_val, reloc_addr_arg, 8);
reloc_addr_val += l_addr;
/* Store value without causing unaligned trap. */
memcpy (reloc_addr_arg, &reloc_addr_val, 8);
}
auto inline void
__attribute__ ((always_inline))
elf_machine_lazy_rel (struct link_map *map,
Elf64_Addr l_addr, const Elf64_Rela *reloc,
int skip_ifunc)
{
Elf64_Addr * const reloc_addr = (void *)(l_addr + reloc->r_offset);
unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info);
if (r_type == R_ALPHA_JMP_SLOT)
{
/* Perform a RELATIVE reloc on the .got entry that transfers
to the .plt. */
*reloc_addr += l_addr;
}
else if (r_type == R_ALPHA_NONE)
return;
else
_dl_reloc_bad_type (map, r_type, 1);
}
#endif /* RESOLVE_MAP */

View File

@ -0,0 +1,63 @@
/* Data for Alpha version of processor capability information.
Copyright (C) 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Aurelien Jarno <aurelien@aurel32.net>, 2008.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* This information must be kept in sync with the _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.
All the #ifdefs in the definitions are quite irritating but
necessary if we want to avoid duplicating the information. There
are three different modes:
- PROCINFO_DECL is defined. This means we are only interested in
declarations.
- PROCINFO_DECL is not defined:
+ if SHARED is defined the file is included in an array
initializer. The .element = { ... } syntax is needed.
+ if SHARED is not defined a normal array initialization is
needed.
*/
#ifndef PROCINFO_CLASS
#define PROCINFO_CLASS
#endif
#if !defined PROCINFO_DECL && defined SHARED
._dl_alpha_platforms
#else
PROCINFO_CLASS const char _dl_alpha_platforms[5][5]
#endif
#ifndef PROCINFO_DECL
= {
"ev4", "ev5", "ev56", "ev6", "ev67"
}
#endif
#if !defined SHARED || defined PROCINFO_DECL
;
#else
,
#endif
#undef PROCINFO_DECL
#undef PROCINFO_CLASS

View File

@ -0,0 +1,67 @@
/* Alpha version of processor capability information handling macros.
Copyright (C) 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Aurelien Jarno <aurelien@aurel32.net>, 2008.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _DL_PROCINFO_H
#define _DL_PROCINFO_H 1
#include <ldsodefs.h>
/* Mask to filter out platforms. */
#define _DL_HWCAP_PLATFORM (-1ULL)
#define _DL_PLATFORMS_COUNT 5
static inline const char *
__attribute__ ((unused))
_dl_platform_string (int idx)
{
return GLRO(dl_alpha_platforms)[idx];
};
static inline int
__attribute__ ((unused, always_inline))
_dl_string_platform (const char *str)
{
int i;
if (str != NULL)
for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
{
if (strcmp (str, _dl_platform_string (i)) == 0)
return i;
}
return -1;
};
/* We cannot provide a general printing function. */
#define _dl_procinfo(word) -1
/* There are no hardware capabilities defined. */
#define _dl_hwcap_string(idx) ""
/* By default there is no important hardware capability. */
#define HWCAP_IMPORTANT (0)
/* We don't have any hardware capabilities. */
#define _DL_HWCAP_COUNT 0
#define _dl_string_hwcap(str) (-1)
#endif /* dl-procinfo.h */

View File

@ -0,0 +1,23 @@
/* System-specific settings for dynamic linker code. Alpha version.
Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include_next <dl-sysdep.h>
/* _dl_argv cannot be attribute_relro, because _dl_start_user
might write into it after _dl_start returns. */
#define DL_ARGV_NOT_RELRO 1

View File

@ -0,0 +1,30 @@
/* Thread-local storage handling in the ELF dynamic linker. Alpha version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Type used for the representation of TLS information in the GOT. */
typedef struct
{
unsigned long int ti_module;
unsigned long int ti_offset;
} tls_index;
extern void *__tls_get_addr (tls_index *ti);
/* Value used for dtv entries for which the allocation is delayed. */
#define TLS_DTV_UNALLOCATED ((void *) -1l)

View File

@ -0,0 +1,540 @@
/* PLT trampolines. Alpha version.
Copyright (C) 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
.set noat
.macro savei regno, offset
stq $\regno, \offset($30)
cfi_rel_offset(\regno, \offset)
.endm
.macro savef regno, offset
stt $f\regno, \offset($30)
cfi_rel_offset(\regno+32, \offset)
.endm
.align 4
.globl _dl_runtime_resolve_new
.ent _dl_runtime_resolve_new
#undef FRAMESIZE
#define FRAMESIZE 14*8
_dl_runtime_resolve_new:
.frame $30, FRAMESIZE, $26, 0
.mask 0x4000000, 0
ldah $29, 0($27) !gpdisp!1
lda $30, -FRAMESIZE($30)
stq $26, 0*8($30)
stq $16, 2*8($30)
stq $17, 3*8($30)
lda $29, 0($29) !gpdisp!1
stq $18, 4*8($30)
mov $28, $16 /* link_map from .got.plt */
stq $19, 5*8($30)
mov $25, $17 /* offset of reloc entry */
stq $20, 6*8($30)
mov $26, $18 /* return address */
stq $21, 7*8($30)
stt $f16, 8*8($30)
stt $f17, 9*8($30)
stt $f18, 10*8($30)
stt $f19, 11*8($30)
stt $f20, 12*8($30)
stt $f21, 13*8($30)
.prologue 2
bsr $26, _dl_fixup !samegp
mov $0, $27
ldq $26, 0*8($30)
ldq $16, 2*8($30)
ldq $17, 3*8($30)
ldq $18, 4*8($30)
ldq $19, 5*8($30)
ldq $20, 6*8($30)
ldq $21, 7*8($30)
ldt $f16, 8*8($30)
ldt $f17, 9*8($30)
ldt $f18, 10*8($30)
ldt $f19, 11*8($30)
ldt $f20, 12*8($30)
ldt $f21, 13*8($30)
lda $30, FRAMESIZE($30)
jmp $31, ($27), 0
.end _dl_runtime_resolve_new
.globl _dl_runtime_profile_new
.type _dl_runtime_profile_new, @function
#undef FRAMESIZE
#define FRAMESIZE 20*8
/* We save the registers in a different order than desired by
.mask/.fmask, so we have to use explicit cfi directives. */
cfi_startproc
_dl_runtime_profile_new:
ldah $29, 0($27) !gpdisp!2
lda $30, -FRAMESIZE($30)
savei 26, 0*8
stq $16, 2*8($30)
stq $17, 3*8($30)
lda $29, 0($29) !gpdisp!2
stq $18, 4*8($30)
lda $1, FRAMESIZE($30) /* incoming sp value */
stq $1, 1*8($30)
stq $19, 5*8($30)
stq $20, 6*8($30)
mov $28, $16 /* link_map from .got.plt */
stq $21, 7*8($30)
mov $25, $17 /* offset of reloc entry */
stt $f16, 8*8($30)
mov $26, $18 /* return address */
stt $f17, 9*8($30)
mov $30, $19 /* La_alpha_regs address */
stt $f18, 10*8($30)
lda $20, 14*8($30) /* framesize address */
stt $f19, 11*8($30)
stt $f20, 12*8($30)
stt $f21, 13*8($30)
stq $28, 16*8($30)
stq $25, 17*8($30)
bsr $26, _dl_profile_fixup !samegp
mov $0, $27
/* Discover if we're wrapping this call. */
ldq $18, 14*8($30)
bge $18, 1f
ldq $26, 0*8($30)
ldq $16, 2*8($30)
ldq $17, 3*8($30)
ldq $18, 4*8($30)
ldq $19, 5*8($30)
ldq $20, 6*8($30)
ldq $21, 7*8($30)
ldt $f16, 8*8($30)
ldt $f17, 9*8($30)
ldt $f18, 10*8($30)
ldt $f19, 11*8($30)
ldt $f20, 12*8($30)
ldt $f21, 13*8($30)
lda $30, FRAMESIZE($30)
jmp $31, ($27), 0
1:
/* Create a frame pointer and allocate a new argument frame. */
savei 15, 15*8
mov $30, $15
cfi_def_cfa_register (15)
addq $18, 15, $18
bic $18, 15, $18
subq $30, $18, $30
/* Save the call destination around memcpy. */
stq $0, 14*8($30)
/* Copy the stack arguments into place. */
lda $16, 0($30)
lda $17, FRAMESIZE($15)
jsr $26, memcpy
ldgp $29, 0($26)
/* Reload the argument registers. */
ldq $27, 14*8($30)
ldq $16, 2*8($15)
ldq $17, 3*8($15)
ldq $18, 4*8($15)
ldq $19, 5*8($15)
ldq $20, 6*8($15)
ldq $21, 7*8($15)
ldt $f16, 8*8($15)
ldt $f17, 9*8($15)
ldt $f18, 10*8($15)
ldt $f19, 11*8($15)
ldt $f20, 12*8($15)
ldt $f21, 13*8($15)
jsr $26, ($27), 0
ldgp $29, 0($26)
/* Set up for call to _dl_call_pltexit. */
ldq $16, 16*8($15)
ldq $17, 17*8($15)
stq $0, 16*8($15)
lda $18, 0($15)
stq $1, 17*8($15)
lda $19, 16*8($15)
stt $f0, 18*8($15)
stt $f1, 19*8($15)
bsr $26, _dl_call_pltexit !samegp
mov $15, $30
cfi_def_cfa_register (30)
ldq $26, 0($30)
ldq $15, 15*8($30)
lda $30, FRAMESIZE($30)
ret
cfi_endproc
.size _dl_runtime_profile_new, .-_dl_runtime_profile_new
.align 4
.globl _dl_runtime_resolve_old
.ent _dl_runtime_resolve_old
#undef FRAMESIZE
#define FRAMESIZE 44*8
_dl_runtime_resolve_old:
lda $30, -FRAMESIZE($30)
.frame $30, FRAMESIZE, $26
/* Preserve all registers that C normally doesn't. */
stq $26, 0*8($30)
stq $0, 1*8($30)
stq $1, 2*8($30)
stq $2, 3*8($30)
stq $3, 4*8($30)
stq $4, 5*8($30)
stq $5, 6*8($30)
stq $6, 7*8($30)
stq $7, 8*8($30)
stq $8, 9*8($30)
stq $16, 10*8($30)
stq $17, 11*8($30)
stq $18, 12*8($30)
stq $19, 13*8($30)
stq $20, 14*8($30)
stq $21, 15*8($30)
stq $22, 16*8($30)
stq $23, 17*8($30)
stq $24, 18*8($30)
stq $25, 19*8($30)
stq $29, 20*8($30)
stt $f0, 21*8($30)
stt $f1, 22*8($30)
stt $f10, 23*8($30)
stt $f11, 24*8($30)
stt $f12, 25*8($30)
stt $f13, 26*8($30)
stt $f14, 27*8($30)
stt $f15, 28*8($30)
stt $f16, 29*8($30)
stt $f17, 30*8($30)
stt $f18, 31*8($30)
stt $f19, 32*8($30)
stt $f20, 33*8($30)
stt $f21, 34*8($30)
stt $f22, 35*8($30)
stt $f23, 36*8($30)
stt $f24, 37*8($30)
stt $f25, 38*8($30)
stt $f26, 39*8($30)
stt $f27, 40*8($30)
stt $f28, 41*8($30)
stt $f29, 42*8($30)
stt $f30, 43*8($30)
.mask 0x27ff01ff, -FRAMESIZE
.fmask 0xfffffc03, -FRAMESIZE+21*8
/* Set up our GP. */
br $29, .+4
ldgp $29, 0($29)
.prologue 0
/* Set up the arguments for _dl_fixup:
$16 = link_map out of plt0
$17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24
$18 = return address
*/
subq $28, $27, $17
ldq $16, 8($27)
subq $17, 20, $17
mov $26, $18
addq $17, $17, $17
bsr $26, _dl_fixup !samegp
/* Move the destination address into position. */
mov $0, $27
/* Restore program registers. */
ldq $26, 0*8($30)
ldq $0, 1*8($30)
ldq $1, 2*8($30)
ldq $2, 3*8($30)
ldq $3, 4*8($30)
ldq $4, 5*8($30)
ldq $5, 6*8($30)
ldq $6, 7*8($30)
ldq $7, 8*8($30)
ldq $8, 9*8($30)
ldq $16, 10*8($30)
ldq $17, 11*8($30)
ldq $18, 12*8($30)
ldq $19, 13*8($30)
ldq $20, 14*8($30)
ldq $21, 15*8($30)
ldq $22, 16*8($30)
ldq $23, 17*8($30)
ldq $24, 18*8($30)
ldq $25, 19*8($30)
ldq $29, 20*8($30)
ldt $f0, 21*8($30)
ldt $f1, 22*8($30)
ldt $f10, 23*8($30)
ldt $f11, 24*8($30)
ldt $f12, 25*8($30)
ldt $f13, 26*8($30)
ldt $f14, 27*8($30)
ldt $f15, 28*8($30)
ldt $f16, 29*8($30)
ldt $f17, 30*8($30)
ldt $f18, 31*8($30)
ldt $f19, 32*8($30)
ldt $f20, 33*8($30)
ldt $f21, 34*8($30)
ldt $f22, 35*8($30)
ldt $f23, 36*8($30)
ldt $f24, 37*8($30)
ldt $f25, 38*8($30)
ldt $f26, 39*8($30)
ldt $f27, 40*8($30)
ldt $f28, 41*8($30)
ldt $f29, 42*8($30)
ldt $f30, 43*8($30)
/* Flush the Icache after having modified the .plt code. */
imb
/* Clean up and turn control to the destination */
lda $30, FRAMESIZE($30)
jmp $31, ($27)
.end _dl_runtime_resolve_old
.globl _dl_runtime_profile_old
.usepv _dl_runtime_profile_old, no
.type _dl_runtime_profile_old, @function
/* We save the registers in a different order than desired by
.mask/.fmask, so we have to use explicit cfi directives. */
cfi_startproc
#undef FRAMESIZE
#define FRAMESIZE 50*8
.align 4
_dl_runtime_profile_old:
lda $30, -FRAMESIZE($30)
cfi_adjust_cfa_offset (FRAMESIZE)
/* Preserve all argument registers. This also constructs the
La_alpha_regs structure. */
savei 26, 0*8
savei 16, 2*8
savei 17, 3*8
savei 18, 4*8
savei 19, 5*8
savei 20, 6*8
savei 21, 7*8
lda $16, FRAMESIZE($30)
savef 16, 8*8
savef 17, 9*8
savef 18, 10*8
savef 19, 11*8
savef 20, 12*8
savef 21, 13*8
stq $16, 1*8($30)
/* Preserve all registers that C normally doesn't. */
savei 0, 14*8
savei 1, 15*8
savei 2, 16*8
savei 3, 17*8
savei 4, 18*8
savei 5, 19*8
savei 6, 20*8
savei 7, 21*8
savei 8, 22*8
savei 22, 23*8
savei 23, 24*8
savei 24, 25*8
savei 25, 26*8
savei 29, 27*8
savef 0, 28*8
savef 1, 29*8
savef 10, 30*8
savef 11, 31*8
savef 12, 32*8
savef 13, 33*8
savef 14, 34*8
savef 15, 35*8
savef 22, 36*8
savef 23, 37*8
savef 24, 38*8
savef 25, 39*8
savef 26, 40*8
savef 27, 41*8
savef 28, 42*8
savef 29, 43*8
savef 30, 44*8
/* Set up our GP. */
br $29, .+4
ldgp $29, 0($29)
/* Set up the arguments for _dl_profile_fixup:
$16 = link_map out of plt0
$17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24
$18 = return address
$19 = La_alpha_regs address
$20 = framesize address
*/
subq $28, $27, $17
ldq $16, 8($27)
subq $17, 20, $17
mov $26, $18
addq $17, $17, $17
lda $19, 0($30)
lda $20, 45*8($30)
stq $16, 48*8($30)
stq $17, 49*8($30)
bsr $26, _dl_profile_fixup !samegp
/* Discover if we're wrapping this call. */
ldq $18, 45*8($30)
bge $18, 1f
/* Move the destination address into position. */
mov $0, $27
/* Restore program registers. */
ldq $26, 0*8($30)
ldq $16, 2*8($30)
ldq $17, 3*8($30)
ldq $18, 4*8($30)
ldq $19, 5*8($30)
ldq $20, 6*8($30)
ldq $21, 7*8($30)
ldt $f16, 8*8($30)
ldt $f17, 9*8($30)
ldt $f18, 10*8($30)
ldt $f19, 11*8($30)
ldt $f20, 12*8($30)
ldt $f21, 13*8($30)
ldq $0, 14*8($30)
ldq $1, 15*8($30)
ldq $2, 16*8($30)
ldq $3, 17*8($30)
ldq $4, 18*8($30)
ldq $5, 19*8($30)
ldq $6, 20*8($30)
ldq $7, 21*8($30)
ldq $8, 22*8($30)
ldq $22, 23*8($30)
ldq $23, 24*8($30)
ldq $24, 25*8($30)
ldq $25, 26*8($30)
ldq $29, 27*8($30)
ldt $f0, 28*8($30)
ldt $f1, 29*8($30)
ldt $f10, 30*8($30)
ldt $f11, 31*8($30)
ldt $f12, 32*8($30)
ldt $f13, 33*8($30)
ldt $f14, 34*8($30)
ldt $f15, 35*8($30)
ldt $f22, 36*8($30)
ldt $f23, 37*8($30)
ldt $f24, 38*8($30)
ldt $f25, 39*8($30)
ldt $f26, 40*8($30)
ldt $f27, 41*8($30)
ldt $f28, 42*8($30)
ldt $f29, 43*8($30)
ldt $f30, 44*8($30)
/* Clean up and turn control to the destination. */
lda $30, FRAMESIZE($30)
jmp $31, ($27)
1:
/* Create a frame pointer and allocate a new argument frame. */
savei 15, 45*8
mov $30, $15
cfi_def_cfa_register (15)
addq $18, 15, $18
bic $18, 15, $18
subq $30, $18, $30
/* Save the call destination around memcpy. */
stq $0, 46*8($30)
/* Copy the stack arguments into place. */
lda $16, 0($30)
lda $17, FRAMESIZE($15)
jsr $26, memcpy
ldgp $29, 0($26)
/* Reload the argument registers. */
ldq $27, 46*8($30)
ldq $16, 2*8($15)
ldq $17, 3*8($15)
ldq $18, 4*8($15)
ldq $19, 5*8($15)
ldq $20, 6*8($15)
ldq $21, 7*8($15)
ldt $f16, 8*8($15)
ldt $f17, 9*8($15)
ldt $f18, 10*8($15)
ldt $f19, 11*8($15)
ldt $f20, 12*8($15)
ldt $f21, 13*8($15)
jsr $26, ($27), 0
ldgp $29, 0($26)
/* Set up for call to _dl_call_pltexit. */
ldq $16, 48*8($15)
ldq $17, 49*8($15)
stq $0, 46*8($15)
lda $18, 0($15)
stq $1, 47*8($15)
lda $19, 46*8($15)
stt $f0, 48*8($15)
stt $f1, 49*8($15)
bsr $26, _dl_call_pltexit !samegp
mov $15, $30
cfi_def_cfa_register (30)
ldq $26, 0($30)
ldq $15, 45*8($30)
lda $30, FRAMESIZE($30)
ret
cfi_endproc
.size _dl_runtime_profile_old, .-_dl_runtime_profile_old

90
ports/sysdeps/alpha/ffs.S Normal file
View File

@ -0,0 +1,90 @@
/* Copyright (C) 1996, 1997, 1998, 2004 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Finds the first bit set in an integer. Optimized for the Alpha
architecture. */
#include <sysdep.h>
.set noreorder
.set noat
ENTRY(__ffs)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
zap $16, 0xF0, $16
br $ffsl..ng
#else
.prologue 0
zap $16, 0xF0, $16
# FALLTHRU
#endif
END(__ffs)
.align 4
ENTRY(ffsl)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
$ffsl..ng:
#else
.prologue 0
#endif
not $16, $1 # e0 :
ldi $2, -1 # .. e1 :
cmpbge $1, $2, $3 # e0 : bit N == 1 for byte N == 0
clr $0 # .. e1 :
addq $3, 1, $4 # e0 :
bic $4, $3, $3 # e1 : bit N == 1 for first byte N != 0
and $3, 0xF0, $4 # e0 :
and $3, 0xCC, $5 # .. e1 :
and $3, 0xAA, $6 # e0 :
cmovne $4, 4, $0 # .. e1 :
cmovne $5, 2, $5 # e0 :
cmovne $6, 1, $6 # .. e1 :
addl $0, $5, $0 # e0 :
addl $0, $6, $0 # e1 : $0 == N
extbl $16, $0, $1 # e0 : $1 == byte N
ldi $2, 1 # .. e1 :
negq $1, $3 # e0 :
and $3, $1, $3 # e1 : bit N == least bit set of byte N
and $3, 0xF0, $4 # e0 :
and $3, 0xCC, $5 # .. e1 :
and $3, 0xAA, $6 # e0 :
cmovne $4, 5, $2 # .. e1 :
cmovne $5, 2, $5 # e0 :
cmovne $6, 1, $6 # .. e1 :
s8addl $0, $2, $0 # e0 : mult byte ofs by 8 and sum
addl $5, $6, $5 # .. e1 :
addl $0, $5, $0 # e0 :
nop # .. e1 :
cmoveq $16, 0, $0 # e0 : trap input == 0 case.
ret # .. e1 : 18
END(ffsl)
weak_alias (__ffs, ffs)
libc_hidden_builtin_def (ffs)
weak_extern (ffsl)
weak_alias (ffsl, ffsll)

View File

@ -0,0 +1 @@
/* This function is defined in ffs.S. */

View File

@ -0,0 +1,23 @@
libc {
GLIBC_2.0 {
# functions used in other libraries
__ieee_get_fp_control; __ieee_set_fp_control;
}
}
libm {
GLIBC_2.3.4 {
# functions implementing old complex float abi
__c1_cabsf; __c1_cacosf; __c1_cacoshf; __c1_cargf; __c1_casinf;
__c1_casinhf; __c1_catanf; __c1_catanhf; __c1_ccosf; __c1_ccoshf;
__c1_cexpf; __c1_cimagf; __c1_clog10f; __c1_clogf; __c1_conjf;
__c1_cpowf; __c1_cprojf; __c1_crealf; __c1_csinf; __c1_csinhf;
__c1_csqrtf; __c1_ctanf; __c1_ctanhf;
# functions implementing new complex float abi
cabsf; cacosf; cacoshf; cargf; casinf;
casinhf; catanf; catanhf; ccosf; ccoshf;
cexpf; cimagf; clog10f; clogf; conjf;
cpowf; cprojf; crealf; csinf; csinhf;
csqrtf; ctanf; ctanhf;
}
}

View File

@ -0,0 +1,122 @@
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _FENV_H
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
#endif
/* Define the bits representing the exception.
Note that these are the bit positions as defined by the OSF/1
ieee_{get,set}_control_word interface and not by the hardware fpcr.
See the Alpha Architecture Handbook section 4.7.7.3 for details,
but in summary, trap shadows mean the hardware register can acquire
extra exception bits so for proper IEEE support the tracking has to
be done in software -- in this case with kernel support.
As to why the system call interface isn't in the same format as
the hardware register, only those crazy folks at DEC can tell you. */
enum
{
#ifdef __USE_GNU
FE_DENORMAL = 1UL << 22,
#define FE_DENORMAL FE_DENORMAL
#endif
FE_INEXACT = 1UL << 21,
#define FE_INEXACT FE_INEXACT
FE_UNDERFLOW = 1UL << 20,
#define FE_UNDERFLOW FE_UNDERFLOW
FE_OVERFLOW = 1UL << 19,
#define FE_OVERFLOW FE_OVERFLOW
FE_DIVBYZERO = 1UL << 18,
#define FE_DIVBYZERO FE_DIVBYZERO
FE_INVALID = 1UL << 17,
#define FE_INVALID FE_INVALID
FE_ALL_EXCEPT = 0x3f << 17
#define FE_ALL_EXCEPT FE_ALL_EXCEPT
};
/* Alpha chips support all four defined rouding modes.
Note that code must be compiled to use dynamic rounding (/d) instructions
to see these changes. For gcc this is -mfp-rounding-mode=d; for DEC cc
this is -fprm d. The default for both is static rounding to nearest.
These are shifted down 58 bits from the hardware fpcr because the
functions are declared to take integers. */
enum
{
FE_TOWARDZERO = 0,
#define FE_TOWARDZERO FE_TOWARDZERO
FE_DOWNWARD = 1,
#define FE_DOWNWARD FE_DOWNWARD
FE_TONEAREST = 2,
#define FE_TONEAREST FE_TONEAREST
FE_UPWARD = 3,
#define FE_UPWARD FE_UPWARD
};
#ifdef __USE_GNU
/* On later hardware, and later kernels for earlier hardware, we can forcibly
underflow denormal inputs and outputs. This can speed up certain programs
significantly, usually without affecting accuracy. */
enum
{
FE_MAP_DMZ = 1UL << 12, /* Map denorm inputs to zero */
#define FE_MAP_DMZ FE_MAP_DMZ
FE_MAP_UMZ = 1UL << 13, /* Map underflowed outputs to zero */
#define FE_MAP_UMZ FE_MAP_UMZ
};
#endif
/* Type representing exception flags. */
typedef unsigned long int fexcept_t;
/* Type representing floating-point environment. */
typedef unsigned long int fenv_t;
/* If the default argument is used we use this value. Note that due to
architecture-specified page mappings, no user-space pointer will ever
have its two high bits set. Co-opt one. */
#define FE_DFL_ENV ((const fenv_t *) 0x8800000000000000UL)
#ifdef __USE_GNU
/* Floating-point environment where none of the exceptions are masked. */
# define FE_NOMASK_ENV ((const fenv_t *) 0x880000000000003eUL)
/* Floating-point environment with (processor-dependent) non-IEEE floating
point. In this case, mapping denormals to zero. */
# define FE_NONIEEE_ENV ((const fenv_t *) 0x8800000000003000UL)
#endif
/* The system calls to talk to the kernel's FP code. */
extern unsigned long int __ieee_get_fp_control (void) __THROW;
extern void __ieee_set_fp_control (unsigned long int __value) __THROW;

View File

@ -0,0 +1,149 @@
/* Inline math functions for Alpha.
Copyright (C) 1996, 1997, 1999-2001, 2004, 2007
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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _MATH_H
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
#endif
#ifndef __extern_inline
# define __MATH_INLINE __inline
#else
# define __MATH_INLINE __extern_inline
#endif
#if defined __USE_ISOC99 && defined __GNUC__ && !__GNUC_PREREQ(3,0)
# undef isgreater
# undef isgreaterequal
# undef isless
# undef islessequal
# undef islessgreater
# undef isunordered
# define isunordered(u, v) \
(__extension__ \
({ double __r, __u = (u), __v = (v); \
__asm ("cmptun/su %1,%2,%0\n\ttrapb" \
: "=&f" (__r) : "f" (__u), "f"(__v)); \
__r != 0; }))
#endif /* ISO C99 */
#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \
&& defined __OPTIMIZE__
#if !__GNUC_PREREQ (4, 0)
# define __inline_copysign(NAME, TYPE) \
__MATH_INLINE TYPE \
__NTH (NAME (TYPE __x, TYPE __y)) \
{ \
TYPE __z; \
__asm ("cpys %1, %2, %0" : "=f" (__z) : "f" (__y), "f" (__x)); \
return __z; \
}
__inline_copysign (__copysignf, float)
__inline_copysign (copysignf, float)
__inline_copysign (__copysign, double)
__inline_copysign (copysign, double)
# undef __inline_copysign
#endif
#if !__GNUC_PREREQ (2, 8)
# define __inline_fabs(NAME, TYPE) \
__MATH_INLINE TYPE \
__NTH (NAME (TYPE __x)) \
{ \
TYPE __z; \
__asm ("cpys $f31, %1, %0" : "=f" (__z) : "f" (__x)); \
return __z; \
}
__inline_fabs (__fabsf, float)
__inline_fabs (fabsf, float)
__inline_fabs (__fabs, double)
__inline_fabs (fabs, double)
# undef __inline_fabs
#endif
#ifdef __USE_ISOC99
/* Test for negative number. Used in the signbit() macro. */
__MATH_INLINE int
__NTH (__signbitf (float __x))
{
#if !__GNUC_PREREQ (4, 0)
__extension__ union { float __f; int __i; } __u = { __f: __x };
return __u.__i < 0;
#else
return __builtin_signbitf (__x);
#endif
}
__MATH_INLINE int
__NTH (__signbit (double __x))
{
#if !__GNUC_PREREQ (4, 0)
__extension__ union { double __d; long __i; } __u = { __d: __x };
return __u.__i < 0;
#else
return __builtin_signbit (__x);
#endif
}
__MATH_INLINE int
__NTH (__signbitl (long double __x))
{
#if !__GNUC_PREREQ (4, 0)
__extension__ union {
long double __d;
long __i[sizeof(long double)/sizeof(long)];
} __u = { __d: __x };
return __u.__i[sizeof(long double)/sizeof(long) - 1] < 0;
#else
return __builtin_signbitl (__x);
#endif
}
/* Test for NaN. Used in the isnan() macro. */
__MATH_INLINE int
__NTH (__isnanf (float __x))
{
return isunordered (__x, __x);
}
__MATH_INLINE int
__NTH (__isnan (double __x))
{
return isunordered (__x, __x);
}
#ifndef __NO_LONG_DOUBLE_MATH
__MATH_INLINE int
__NTH (__isnanl (long double __x))
{
return isunordered (__x, __x);
}
#endif
#endif /* C99 */
#endif /* __NO_MATH_INLINES */

View File

@ -0,0 +1,41 @@
/* Return the complex absolute value of float complex value.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#define __cabsf __cabsf_not_defined
#define cabsf cabsf_not_defined
#include <complex.h>
#include <math.h>
#include "cfloat-compat.h"
#undef __cabsf
#undef cabsf
float
__c1_cabsf (c1_cfloat_decl (z))
{
return __hypotf (c1_cfloat_real (z), c1_cfloat_imag (z));
}
float
__c2_cabsf (c2_cfloat_decl (z))
{
return __hypotf (c2_cfloat_real (z), c2_cfloat_imag (z));
}
cfloat_versions (cabsf);

View File

@ -0,0 +1,41 @@
/* Compute argument of complex float value.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#define __cargf __cargf_not_defined
#define cargf cargf_not_defined
#include <complex.h>
#include <math.h>
#include "cfloat-compat.h"
#undef __cargf
#undef cargf
float
__c1_cargf (c1_cfloat_decl (x))
{
return __atan2f (c1_cfloat_imag (x), c1_cfloat_real (x));
}
float
__c2_cargf (c2_cfloat_decl (x))
{
return __atan2f (c2_cfloat_imag (x), c2_cfloat_real (x));
}
cfloat_versions (cargf);

View File

@ -0,0 +1,58 @@
/* Compatibility macros for old and new Alpha complex float ABI.
Copyright (C) 2004-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* The behaviour of complex float changed between GCC 3.3 and 3.4.
In 3.3 and before (below, complex version 1, or "c1"), complex float
values were packed into one floating point register.
In 3.4 and later (below, complex version 2, or "c2"), GCC changed to
follow the official Tru64 ABI, which passes the components of a complex
as separate parameters. */
typedef union { double d; _Complex float cf; } c1_compat;
# define c1_cfloat_decl(x) double x
# define c1_cfloat_real(x) __real__ c1_cfloat_value (x)
# define c1_cfloat_imag(x) __imag__ c1_cfloat_value (x)
# define c1_cfloat_value(x) (((c1_compat *)(void *)&x)->cf)
# define c1_cfloat_rettype double
# define c1_cfloat_return(x) ({ c1_compat _; _.cf = (x); _.d; })
# define c2_cfloat_decl(x) _Complex float x
# define c2_cfloat_real(x) __real__ x
# define c2_cfloat_imag(x) __imag__ x
# define c2_cfloat_value(x) x
# define c2_cfloat_rettype _Complex float
# define c2_cfloat_return(x) x
/* Get the proper symbol versions defined for each function. */
#include <shlib-compat.h>
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_3_4)
#define cfloat_versions_compat(func) \
compat_symbol (libm, __c1_##func, func, GLIBC_2_1)
#else
#define cfloat_versions_compat(func)
#endif
#define cfloat_versions(func) \
cfloat_versions_compat(func); \
versioned_symbol (libm, __c2_##func, func, GLIBC_2_3_4); \
extern typeof(__c2_##func) __##func attribute_hidden; \
strong_alias (__c2_##func, __##func)

View File

@ -0,0 +1,40 @@
/* Return imaginary part of complex float value.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#define __cimagf __cimagf_not_defined
#define cimagf cimagf_not_defined
#include <complex.h>
#include "cfloat-compat.h"
#undef __cimagf
#undef cimagf
float
__c1_cimagf (c1_cfloat_decl (z))
{
return c1_cfloat_imag (z);
}
float
__c2_cimagf (c2_cfloat_decl (z))
{
return c2_cfloat_imag (z);
}
cfloat_versions (cimagf);

View File

@ -0,0 +1,42 @@
/* Return complex conjugate of complex float value.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#define __conjf __conjf_not_defined
#define conjf conjf_not_defined
#include <complex.h>
#include "cfloat-compat.h"
#undef __conjf
#undef conjf
c1_cfloat_rettype
__c1_conjf (c1_cfloat_decl (z))
{
_Complex float r = ~ c1_cfloat_value (z);
return c1_cfloat_return (r);
}
c2_cfloat_rettype
__c2_conjf (c2_cfloat_decl (z))
{
_Complex float r = ~ c2_cfloat_value (z);
return c2_cfloat_return (r);
}
cfloat_versions (conjf);

View File

@ -0,0 +1,40 @@
/* Return real part of complex float value.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#define __crealf __crealf_not_defined
#define crealf crealf_not_defined
#include <complex.h>
#include "cfloat-compat.h"
#undef __crealf
#undef crealf
float
__c1_crealf (c1_cfloat_decl (z))
{
return c1_cfloat_real (z);
}
float
__c2_crealf (c2_cfloat_decl (z))
{
return c2_cfloat_real (z);
}
cfloat_versions (crealf);

View File

@ -0,0 +1,165 @@
/* Copyright (C) 1996,1997,1998,2002,2003 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <math.h>
#include <math_private.h>
#if !defined(_IEEE_FP_INEXACT)
/*
* This version is much faster than generic sqrt implementation, but
* it doesn't handle the inexact flag. It doesn't handle exceptional
* values either, but will defer to the full ieee754_sqrt routine which
* can.
*/
/* Careful with rearranging this without consulting the assembly below. */
const static struct sqrt_data_struct {
unsigned long dn, up, half, almost_three_half;
unsigned long one_and_a_half, two_to_minus_30, one, nan;
const int T2[64];
} sqrt_data __attribute__((used)) = {
0x3fefffffffffffff, /* __dn = nextafter(1,-Inf) */
0x3ff0000000000001, /* __up = nextafter(1,+Inf) */
0x3fe0000000000000, /* half */
0x3ff7ffffffc00000, /* almost_three_half = 1.5-2^-30 */
0x3ff8000000000000, /* one_and_a_half */
0x3e10000000000000, /* two_to_minus_30 */
0x3ff0000000000000, /* one */
0xffffffffffffffff, /* nan */
{ 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 }
};
asm ("\
/* Define offsets into the structure defined in C above. */ \n\
$DN = 0*8 \n\
$UP = 1*8 \n\
$HALF = 2*8 \n\
$ALMOST_THREE_HALF = 3*8 \n\
$NAN = 7*8 \n\
$T2 = 8*8 \n\
\n\
/* Stack variables. */ \n\
$K = 0 \n\
$Y = 8 \n\
\n\
.text \n\
.align 5 \n\
.globl __ieee754_sqrt \n\
.ent __ieee754_sqrt \n\
__ieee754_sqrt: \n\
ldgp $29, 0($27) \n\
subq $sp, 16, $sp \n\
.frame $sp, 16, $26, 0\n"
#ifdef PROF
" lda $28, _mcount \n\
jsr $28, ($28), _mcount\n"
#endif
" .prologue 1 \n\
\n\
.align 4 \n\
stt $f16, $K($sp) # e0 : \n\
mult $f31, $f31, $f31 # .. fm : \n\
lda $4, sqrt_data # e0 : \n\
fblt $f16, $fixup # .. fa : \n\
\n\
ldah $2, 0x5fe8 # e0 : \n\
ldq $3, $K($sp) # .. e1 : \n\
ldt $f12, $HALF($4) # e0 : \n\
ldt $f18, $ALMOST_THREE_HALF($4) # .. e1 : \n\
\n\
sll $3, 52, $5 # e0 : \n\
lda $6, 0x7fd # .. e1 : \n\
fnop # .. fa : \n\
fnop # .. fm : \n\
\n\
subq $5, 1, $5 # e1 : \n\
srl $3, 33, $1 # .. e0 : \n\
cmpule $5, $6, $5 # e0 : \n\
beq $5, $fixup # .. e1 : \n\
\n\
mult $f16, $f12, $f11 # fm : $f11 = x * 0.5 \n\
subl $2, $1, $2 # .. e0 : \n\
addt $f12, $f12, $f17 # .. fa : $f17 = 1.0 \n\
srl $2, 12, $1 # e0 : \n\
\n\
and $1, 0xfc, $1 # e0 : \n\
addq $1, $4, $1 # e1 : \n\
ldl $1, $T2($1) # e0 : \n\
addt $f12, $f17, $f15 # .. fa : $f15 = 1.5 \n\
\n\
subl $2, $1, $2 # e0 : \n\
ldt $f14, $DN($4) # .. e1 : \n\
sll $2, 32, $2 # e0 : \n\
stq $2, $Y($sp) # e0 : \n\
\n\
ldt $f13, $Y($sp) # e0 : \n\
mult/su $f11, $f13, $f10 # fm 2: $f10 = (x * 0.5) * y \n\
mult $f10, $f13, $f10 # fm 4: $f10 = ((x*0.5)*y)*y \n\
subt $f15, $f10, $f1 # fa 4: $f1 = (1.5-0.5*x*y*y) \n\
\n\
mult $f13, $f1, $f13 # fm 4: yp = y*(1.5-0.5*x*y^2)\n\
mult/su $f11, $f13, $f1 # fm 4: $f11 = x * 0.5 * yp \n\
mult $f1, $f13, $f11 # fm 4: $f11 = (x*0.5*yp)*yp \n\
subt $f18, $f11, $f1 # fa 4: $f1=(1.5-2^-30)-x/2*yp^2\n\
\n\
mult $f13, $f1, $f13 # fm 4: ypp = $f13 = yp*$f1 \n\
subt $f15, $f12, $f1 # .. fa : $f1 = (1.5 - 0.5) \n\
ldt $f15, $UP($4) # .. e0 : \n\
mult/su $f16, $f13, $f10 # fm 4: z = $f10 = x * ypp \n\
\n\
mult $f10, $f13, $f11 # fm 4: $f11 = z*ypp \n\
mult $f10, $f12, $f12 # fm : $f12 = z*0.5 \n\
subt $f1, $f11, $f1 # fa 4: $f1 = 1 - z*ypp \n\
mult $f12, $f1, $f12 # fm 4: $f12 = z/2*(1 - z*ypp)\n\
\n\
addt $f10, $f12, $f0 # fa 4: zp=res= z+z/2*(1-z*ypp)\n\
mult/c $f0, $f14, $f12 # fm 4: zmi = zp * DN \n\
mult/c $f0, $f15, $f11 # fm : zpl = zp * UP \n\
mult/c $f0, $f12, $f1 # fm : $f1 = zp * zmi \n\
\n\
mult/c $f0, $f11, $f15 # fm : $f15 = zp * zpl \n\
subt/su $f1, $f16, $f13 # .. fa : y1 = zp*zmi - x \n\
subt/su $f15, $f16, $f14 # fa 4: y2 = zp*zpl - x \n\
fcmovge $f13, $f12, $f0 # fa 3: res = (y1>=0)?zmi:res \n\
\n\
fcmovlt $f14, $f11, $f0 # fa 4: res = (y2<0)?zpl:res \n\
addq $sp, 16, $sp # .. e0 : \n\
ret # .. e1 : \n\
\n\
.align 4 \n\
$fixup: \n\
addq $sp, 16, $sp \n\
br __full_ieee754_sqrt !samegp \n\
\n\
.end __ieee754_sqrt");
static double __full_ieee754_sqrt(double) __attribute_used__;
#define __ieee754_sqrt __full_ieee754_sqrt
#endif /* _IEEE_FP_INEXACT */
#include <sysdeps/ieee754/dbl-64/e_sqrt.c>

View File

@ -0,0 +1,46 @@
/* Clear given exceptions in current floating-point environment.
Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <fenv_libc.h>
int
__feclearexcept (int excepts)
{
unsigned long int swcr;
/* Get the current state. */
swcr = __ieee_get_fp_control ();
/* Clear the relevant bits. */
swcr &= ~((unsigned long int) excepts & SWCR_STATUS_MASK);
/* Put the new state in effect. */
__ieee_set_fp_control (swcr);
/* Success. */
return 0;
}
#include <shlib-compat.h>
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);

View File

@ -0,0 +1,35 @@
/* Disable floating-point exceptions.
Copyright (C) 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2000.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <fenv_libc.h>
int
fedisableexcept (int excepts)
{
unsigned long int new_exc, old_exc;
new_exc = __ieee_get_fp_control ();
old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
new_exc &= ~((excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK);
__ieee_set_fp_control (new_exc);
return old_exc;
}

Some files were not shown because too many files have changed in this diff Show More